#Objects using another object's surfaces?

1 messages · Page 1 of 1 (latest)

wanton zodiac
#

Hi there, I'm trying to make light sources that subtract from the "darkness" surface, however it seems like they aren't working. Here's the code:

Main darkness surface code:

Create:

surface1 = -1;
surface2 = -1;
surface3 = -1;
surface4 = -1;
min_radius = 18;
radius = 20;
max_radius = 22;
expanding = true;

alarm[0] = irandom_range(80,100);

depth = -1350;

Draw Begin:

if (!surface_exists(surface1)) {
    surface1 = surface_create(VIEW_WIDTH, VIEW_HEIGHT);
    surface2 = surface_create(VIEW_WIDTH, VIEW_HEIGHT);
    surface3 = surface_create(VIEW_WIDTH, VIEW_HEIGHT);
    surface4 = surface_create(VIEW_WIDTH, VIEW_HEIGHT);
}

surface_set_target(surface1);
draw_sprite_tiled(spr_dither_overlay, 0, 0, 0);
gpu_set_blendmode(bm_subtract);
draw_circle(obj_player.x - 1, obj_player.y, radius, false);
gpu_set_blendmode(bm_normal);
surface_reset_target();
    
surface_set_target(surface2);
draw_sprite_tiled(spr_dither_overlay, 1, 0, 0);
gpu_set_blendmode(bm_subtract);
draw_circle(obj_player.x - 1, obj_player.y, radius + 5, false);
gpu_set_blendmode(bm_normal);
surface_reset_target();
    
surface_set_target(surface3);
draw_sprite_tiled(spr_dither_overlay, 2, 0, 0);
gpu_set_blendmode(bm_subtract);
draw_circle(obj_player.x - 1, obj_player.y, radius + 7, false);
gpu_set_blendmode(bm_normal);
surface_reset_target();
    
surface_set_target(surface4);
draw_clear(c_black);
gpu_set_blendmode(bm_subtract);
draw_circle(obj_player.x - 1, obj_player.y, radius + 10, false);
gpu_set_blendmode(bm_normal);
surface_reset_target();

Draw :

draw_surface(surface1, 0, 0);
draw_surface(surface2, 0, 0);
draw_surface(surface3, 0, 0);
draw_surface(surface4, 0, 0);

Light code:

Draw Begin:

if (surface_exists(obj_darkness_circle.surface1)) {
    surface_set_target(obj_darkness_circle.surface1);
    gpu_set_blendmode(bm_subtract);
    draw_circle(x - 1, y, radius, false);
    gpu_set_blendmode(bm_normal);
    surface_reset_target();
    
    surface_set_target(obj_darkness_circle.surface2);
    gpu_set_blendmode(bm_subtract);
    draw_circle(x - 1, y, radius + 5, false);
    gpu_set_blendmode(bm_normal);
    surface_reset_target();
    
    surface_set_target(obj_darkness_circle.surface3);
    gpu_set_blendmode(bm_subtract);
    draw_circle(x - 1, y, radius + 7, false);
    gpu_set_blendmode(bm_normal);
    surface_reset_target();
    
    surface_set_target(obj_darkness_circle.surface4);
    gpu_set_blendmode(bm_subtract);
    draw_circle(x - 1, y, radius + 10, false);
    gpu_set_blendmode(bm_normal);
    surface_reset_target();
}
wanton zodiac
#

Some more explanation since first message is so bloated:
main darkness object creates the surface and starts cutting away the darkness from where the player is. It slightly shifts the radius using the alarm but that's not relevant to the issue. Additionally, reason I'm using Draw Begin and Draw instead of just Draw and Draw End is because Draw End draws the darkness over textboxes and such.