@@ -29,55 +29,61 @@ def __init__(self):
2929
3030 "DRAGON_CHECK_LOOP_START" ,
3131 asm .CMP (f0 .dragon_formations , asm .LNG_X ),
32- asm .BEQ ("INCREMENT_DRAGON_COUNT " ), # branch if formation in dragon formations
32+ asm .BEQ ("CHECK_DRAGON_DEFEATED_BIT " ), # branch if formation in dragon formations
3333 asm .INX (),
3434 asm .INX (),
3535 asm .CPX (f0 .dragon_formations_size , asm .IMM16 ),
3636 asm .BLT ("DRAGON_CHECK_LOOP_START" ), # branch if not checked all dragon formations
3737 asm .BRA ("CHECK_BOSS_FORMATIONS" ),
3838
39- "INCREMENT_DRAGON_COUNT" ,
40- asm .INC (dragons_defeated_address , asm .ABS ),
39+ "CHECK_DRAGON_DEFEATED_BIT" ,
4140 asm .TXA (), # a = formation index * 2
4241 asm .LSR (), # a = formation index
4342 asm .CLC (),
4443 asm .ADC (battle_bit .bit (battle_bit .DRAGON_DEFEATED_START ), asm .IMM16 ),
4544 asm .LDX (0x0008 , asm .IMM16 ),
4645 asm .JSR (f0 .divide , asm .ABS ), # a = byte, x = bit
47- asm .PHY (),
48- asm .TAY (), # y = dragon battle byte
46+ asm .PHA (),
4947 asm .JSR (f0 .set_bit_x , asm .ABS ), # set bit #x in a
50- asm .ORA (dragon_bits_start , asm .ABS_Y ),
51- asm .STA (dragon_bits_start , asm .ABS_Y ), # set dragon defeated battle bit
52- asm .PLY (),
48+ asm .PLX (), # x = byte (pushed from a)
49+ asm .BIT (dragon_bits_start , asm .ABS_X ), # is dragon defeated bit set?
50+ asm .BNE ("RETURN" ),
51+
52+ "SET_DRAGON_DEFEATED" ,
53+ asm .ORA (dragon_bits_start , asm .ABS_X ),
54+ asm .STA (dragon_bits_start , asm .ABS_X ), # set dragon defeated bit
55+ asm .INC (dragons_defeated_address , asm .ABS ), # increment dragons defeated count
5356 asm .BRA ("RETURN" ),
5457
5558 "CHECK_BOSS_FORMATIONS" ,
5659 asm .LDX (0x0000 , asm .IMM16 ), # formation table index = 0
5760
5861 "BOSS_CHECK_LOOP_START" ,
5962 asm .CMP (f0 .boss_formations , asm .LNG_X ),
60- asm .BEQ ("INCREMENT_BOSS_COUNT " ), # branch if formation in boss formations
63+ asm .BEQ ("CHECK_BOSS_DEFEATED_BIT " ), # branch if formation in boss formations
6164 asm .INX (),
6265 asm .INX (),
6366 asm .CPX (f0 .boss_formations_size , asm .IMM16 ),
6467 asm .BLT ("BOSS_CHECK_LOOP_START" ), # branch if not checked all boss formations
6568 asm .BRA ("RETURN" ),
6669
67- "INCREMENT_BOSS_COUNT" ,
68- asm .INC (bosses_defeated_address , asm .ABS ),
70+ "CHECK_BOSS_DEFEATED_BIT" ,
6971 asm .TXA (), # a = formation index * 2
7072 asm .LSR (), # a = formation index
7173 asm .CLC (),
7274 asm .ADC (battle_bit .bit (battle_bit .BOSS_DEFEATED_START ), asm .IMM16 ),
7375 asm .LDX (0x0008 , asm .IMM16 ),
7476 asm .JSR (f0 .divide , asm .ABS ), # a = byte, x = bit
75- asm .PHY (),
76- asm .TAY (), # y = boss battle byte
77+ asm .PHA (),
7778 asm .JSR (f0 .set_bit_x , asm .ABS ), # set bit #x in a
78- asm .ORA (boss_bits_start , asm .ABS_Y ),
79- asm .STA (boss_bits_start , asm .ABS_Y ), # set boss defeated battle bit
80- asm .PLY (),
79+ asm .PLX (), # x = byte (pushed from a)
80+ asm .BIT (boss_bits_start , asm .ABS_X ), # is boss defeated bit set?
81+ asm .BNE ("RETURN" ),
82+
83+ "SET_BOSS_DEFEATED" ,
84+ asm .ORA (boss_bits_start , asm .ABS_X ),
85+ asm .STA (boss_bits_start , asm .ABS_X ), # set boss defeated bit
86+ asm .INC (bosses_defeated_address , asm .ABS ), # increment bosses defeated count
8187
8288 "RETURN" ,
8389 asm .PLP (),
0 commit comments