From: hgn Date: Mon, 29 Nov 2021 18:35:26 +0000 (+0000) Subject: thids/trigger stabalize X-Git-Url: https://harrygodden.com/git/?p=fishladder.git;a=commitdiff_plain;h=edd5498fac470c6a98e45ab326c2bf2e2a552664 thids/trigger stabalize --- diff --git a/fishladder.c b/fishladder.c index 6c5e996..f310bd5 100644 --- a/fishladder.c +++ b/fishladder.c @@ -14,7 +14,8 @@ const char *level_pack_1[] = { "level6", "level7_combine", "xor_small", - "sort" + "sort", + "thirds" }; #pragma pack(push,1) @@ -97,8 +98,9 @@ m3x3f m_mdl; #define FLAG_WALL 0x40 #define FLAG_FLIP_FLOP 0x100 -#define FLAG_FLIP_ROTATING 0x200 -#define FLAG_TARGETED 0x400 +#define FLAG_TRIGGER_FLIP 0x200 +#define FLAG_FLIP_ROTATING 0x400 +#define FLAG_TARGETED 0x800 /* 0000 0 | 0001 1 | 0010 2 | 0011 3 @@ -1317,7 +1319,6 @@ void vg_update(void) for( int i = 0; i < world.num_fishes; i ++ ) { struct fish *fish = &world.fishes[i]; - struct cell *cell_current = pcell( fish->pos ); if( fish->alive == -1 ) fish->alive = 0; @@ -1325,6 +1326,8 @@ void vg_update(void) if( fish->alive != 1 ) continue; + struct cell *cell_current = pcell( fish->pos ); + // Apply to output if( cell_current->state & FLAG_OUTPUT ) { @@ -1414,17 +1417,31 @@ void vg_update(void) sfx_set_playrnd( &audio_splitter, &audio_system_balls_important, 0, 1 ); cell_entry->state |= FLAG_FLIP_ROTATING; } - - if( cell_entry->state & FLAG_IS_TRIGGER ) + } + + if( fish->alive ) + alive_count ++; + } + + // Second pass (triggers) + for( int i = 0; i < world.num_fishes; i ++ ) + { + struct fish *fish = &world.fishes[i]; + + if( fish->alive == 1 ) + { + struct cell *cell_current = pcell( fish->pos ); + + if( cell_current->state & FLAG_IS_TRIGGER ) { - int trigger_id = cell_entry->links[0]?0:1; - int connection_id = cell_entry->links[trigger_id]; + int trigger_id = cell_current->links[0]?0:1; + int connection_id = cell_current->links[trigger_id]; int target_px = connection_id % world.w; int target_py = (connection_id - target_px)/world.w; vg_line2( (v2f){ fish->pos[0], fish->pos[1] }, (v2f){ target_px, target_py }, 0xffffffff, 0xffffffff ); - struct cell *target_peice = &world.data[ cell_entry->links[trigger_id] ]; + struct cell *target_peice = &world.data[ cell_current->links[trigger_id] ]; if( trigger_id ) target_peice->state |= FLAG_FLIP_FLOP; @@ -1432,12 +1449,9 @@ void vg_update(void) target_peice->state &= ~FLAG_FLIP_FLOP; } } - - if( fish->alive ) - alive_count ++; } - // Check for collisions + // Third pass (collisions) for( int i = 0; i < world.num_fishes; i ++ ) { if( world.fishes[i].alive == 1 ) diff --git a/maps/thirds.map b/maps/thirds.map new file mode 100644 index 0000000..ab14e51 --- /dev/null +++ b/maps/thirds.map @@ -0,0 +1,12 @@ +#############; +###-##-##-###;a:aa:aaa,a:aa:aaa,a:aa:aaa +## ##; +## ##; +## ##; +## ##; +## ##; +## ##; +## ##; +## ##; +######+######;aaa:aaaaaa:aaaaaaaaa +#############;