(Updating timers - handles autoattacks ie berserk/charm?) C2/58CF: AD 4E 47 LDA $474E If Reaction Flag is set, skip these timer checks C2/58D2: D0 08 BNE $58DC C2/58D4: 20 32 24 JSR $2432 Check 3ED4/3ED5 C2/2432: AD D4 3E LDA $3ED4 If 3ED4 clear, return #00 C2/2435: F0 0F BEQ $2446 C2/2437: AD D5 3E LDA $3ED5 If 3ED5 set... C2/243A: F0 06 BEQ $2442 C2/243C: 3A DEC ...3ED5--... C2/243D: 8D D5 3E STA $3ED5 C2/2440: D0 04 BNE $2446 ...and return 3ED5 if > 0 C2/2442: 7B TDC C2/2443: 8D D4 3E STA $3ED4 Else clear 3ED4 and return #00 C2/2446: 60 RTS C2/58D7: D0 12 BNE $58EB ...and if 3ED5 is #00... C2/58D9: 20 C4 1D JSR $1DC4 ...run this C2/1DC4: 7B TDC (Clear vars) C2/1DC5: AA TAX C2/1DC6: 86 3D STX $3D C2/1DC8: 86 3F STX $3F C2/1DCA: A6 3D LDX $3D (player number) C2/1DCC: BD 04 7C LDA $7C04,X (timer is zero?) C2/1DCF: F0 1A BEQ $1DEB C2/1DD1: A6 3F LDX $3F (player offset) (Decrement timer if non-zero and player is not stop/para/sleep) C2/1DD3: BD 1C 20 LDA $201C,X (Skip if player Stopped...) C2/1DD6: 29 10 AND #$10 C2/1DD8: D0 43 BNE $1E1D C2/1DDA: BD 1B 20 LDA $201B,X (...Paralyzed, or Sleeping...) C2/1DDD: 1D 71 20 ORA $2071,X C2/1DE0: 29 60 AND #$60 C2/1DE2: D0 39 BNE $1E1D C2/1DE4: A6 3D LDX $3D C2/1DE6: DE 04 7C DEC $7C04,X (Decrement this timer and exit) C2/1DE9: 80 32 BRA $1E1D (Timer is zero) C2/1DEB: A6 3F LDX $3F (player offset) C2/1DED: A9 01 LDA #$01 C2/1DEF: 9D 61 20 STA $2061,X (flag?) (Player is a zombie) C2/1DF2: BD 1A 20 LDA $201A,X (If player is zombie, skip) C2/1DF5: 1D 70 20 ORA $2070,X C2/1DF8: 29 02 AND #$02 C2/1DFA: F0 05 BEQ $1E01 C2/1DFC: 20 2F 1E JSR $1E2F Run this... C2/1DFF: 80 1C BRA $1E1D ...and exit (Player is charmed) C2/1E01: BD 1B 20 LDA $201B,X (Charm) C2/1E04: 1D 71 20 ORA $2071,X C2/1E07: 29 10 AND #$10 C2/1E09: F0 05 BEQ $1E10 C2/1E0B: 20 62 1E JSR $1E62 C2/1E0E: 80 0D BRA $1E1D (Player is berserk) C2/1E10: BD 1B 20 LDA $201B,X (Berserk) C2/1E13: 1D 71 20 ORA $2071,X C2/1E16: 29 08 AND #$08 C2/1E18: F0 03 BEQ $1E1D C2/1E1A: 20 80 1F JSR $1F80 C2/1E1D: A6 3F LDX $3F (increment player offset) C2/1E1F: 20 E0 01 JSR $01E0 C2/1E22: 86 3F STX $3F C2/1E24: EE 3D 00 INC $003D (Increment player number) C2/1E27: AD 3D 00 LDA $003D C2/1E2A: C9 04 CMP #$04 C2/1E2C: D0 9C BNE $1DCA C2/1E2E: 60 RTS (Updating timed statuses) C2/58DC: 9C 54 47 STZ $4754 Clear $4754 C2/58DF: 20 0B 20 JSR $200B DecrementTimers C2/200B: 20 90 20 JSR $2090 CheckDecrementDurations C2/2090: 7B TDC C2/2091: AA TAX C2/2092: BD D9 3E LDA $3ED9,X If TickTimer is non-zero, dec and clear flag C2/2095: F0 08 BEQ $209F C2/2097: DE D9 3E DEC $3ED9,X C2/209A: 9E E4 3E STZ $3EE4,X C2/209D: 80 0C BRA $20AB C2/209F: A9 01 LDA #$01 Otherwise set flag and reset timer C2/20A1: 9D E4 3E STA $3EE4,X C2/20A4: BF 76 29 D1 LDA $D12976,X [00 02 04 0E 01 00 00 01 00 00 00] How often it ticks? C2/20A8: 9D D9 3E STA $3ED9,X C2/20AB: E8 INX C2/20AC: E0 0B 00 CPX #$000B (11 times) C2/20AF: D0 E1 BNE $2092 C2/20B1: 60 RTS C2/200E: 7B TDC C2/200F: AA TAX C2/2010: 86 0A STX $0A C2/2012: 7B TDC C2/2013: A8 TAY C2/2014: 84 0C STY $0C C2/2016: A5 0A LDA $0A (CreatureNumber) C2/2018: 20 07 02 JSR $0207 Y/$36 = A * 11 C2/201B: BB TYX C2/201C: A4 0A LDY $0A C2/201E: B9 C2 3E LDA $3EC2,Y If creature is not present, do next creature C2/2021: F0 29 BEQ $204C C2/2023: B9 9F 3E LDA $3E9F,Y If this is set, do next creature C2/2026: D0 24 BNE $204C C2/2028: AD 4E 47 LDA $474E (PlayerTurnFlag) C2/202B: D0 05 BNE $2032 C2/202D: B9 AB 3E LDA $3EAB,Y If this is not set, do next creature C2/2030: D0 1A BNE $204C (Check Stop timer; if still set then we skip the rest of the timers) (This function will dec timer if tick dur = 0, and update status flags as necessary) C2/2032: 20 55 20 JSR $2055 UpdateTimer ($0C = 0, ie Stop) C2/2055: 64 08 STZ $08 C2/2057: 5A PHY C2/2058: A4 0C LDY $0C C2/205A: B9 E4 3E LDA $3EE4,Y If this ProcessTickFlag is clear, return FALSE C2/205D: F0 2C BEQ $208B C2/205F: C0 0A 00 CPY #$000A If we're looking at ATB Timer skip 474E check C2/2062: F0 05 BEQ $2069 C2/2064: AD 4E 47 LDA $474E If ReactionFlag is set, return FALSE C2/2067: D0 22 BNE $208B C2/2069: BD F1 3C LDA $3CF1,X TimerActiveFlag C2/206C: F0 1D BEQ $208B (If this is clear, exit) C2/206E: 30 15 BMI $2085 (If this is negative, do stuff and exit) (TimerActiveFlag = 1) C2/2070: BD 75 3D LDA $3D75,X TimerRemainingDuration C2/2073: F0 08 BEQ $207D (If it's zero, skip dec) C2/2075: DE 75 3D DEC $3D75,X (decrement timer) C2/2078: BD 75 3D LDA $3D75,X (and recheck for zero value) C2/207B: D0 08 BNE $2085 (timer is zero) C2/207D: BD F1 3C LDA $3CF1,X (set these flags) C2/2080: 09 81 ORA #$81 C2/2082: 9D F1 3C STA $3CF1,X (TimerActiveFlag = 81) C2/2085: A5 0C LDA $0C (Are we looking at Stop?) C2/2087: D0 00 BNE $2089 (uhhhh) C2/2089: E6 08 INC $08 (return TRUE) (TimerActiveFlag = 0) C2/208B: 7A PLY C2/208C: E8 INX C2/208D: E6 0C INC $0C (do next timer) C2/208F: 60 RTS C2/2035: A5 08 LDA $08 (If this function returned true, skip next timers) C2/2037: D0 13 BNE $204C C2/2039: A0 08 00 LDY #$0008 (loop over timers Poison-Song) C2/203C: 20 55 20 JSR $2055 UpdateTimer C2/203F: 88 DEY C2/2040: D0 FA BNE $203C (Check Stun timer; if still set then we skip the ATB timer) C2/2042: 20 55 20 JSR $2055 UpdateTimer ($0C = 9, ie Stun) C2/2045: A5 08 LDA $08 (If Paralyzed, do not inc ATB) C2/2047: D0 03 BNE $204C C2/2049: 20 55 20 JSR $2055 UpdateTimer ($0C = A, ie ATB) C2/204C: E6 0A INC $0A (Do for each creature) C2/204E: A5 0A LDA $0A C2/2050: C9 0C CMP #$0C C2/2052: D0 BE BNE $2012 C2/2054: 60 RTS C2/58E2: 20 B2 20 JSR $20B2 GetNextEndingTimersByCreature C2/20B2: 7B TDC (clear variables) C2/20B3: AA TAX C2/20B4: 86 08 STX $08 C2/20B6: A8 TAY C2/20B7: 99 88 3E STA $3E88,Y Clear timer flags (11 bytes) C2/20BA: C8 INY C2/20BB: C0 0B 00 CPY #$000B C2/20BE: D0 F7 BNE $20B7 C2/20C0: 7B TDC (Clear some vars) C2/20C1: AA TAX C2/20C2: 86 0A STX $0A C2/20C4: A6 08 LDX $08 (Timer number) C2/20C6: BD 7D 3E LDA $3E7D,X (This is used as a temp variable) C2/20C9: 48 PHA (Gets creature number from randomly generated list at 1fD2) C2/20CA: A6 08 LDX $08 (Timer number) C2/20CC: BD 7D 3E LDA $3E7D,X (pos#) C2/20CF: AA TAX C2/20D0: BD 93 3E LDA $3E93,X (creature#) C2/20D3: 85 0C STA $0C C2/20D5: AA TAX C2/20D6: BD 9F 3E LDA $3E9F,X ? C2/20D9: D0 72 BNE $214D C2/20DB: AD 4E 47 LDA $474E If ReactionFlag clear, check QuickFlag? C2/20DE: D0 05 BNE $20E5 C2/20E0: BD AB 3E LDA $3EAB,X If this is not set... C2/20E3: D0 68 BNE $214D (Check if timer $08 for creature $0C is ending) C2/20E5: A5 0C LDA $0C (Creature#) C2/20E7: 20 07 02 JSR $0207 $36 = A * 11 (also saved to Y) C2/20EA: 98 TYA C2/20EB: 18 CLC C2/20EC: 65 08 ADC $08 (Timer to check) C2/20EE: AA TAX C2/20EF: BD F1 3C LDA $3CF1,X TimerControlFlag C2/20F2: 10 59 BPL $214D (If timer is not ending, go to next timer) (TimerControlFlag #80 set: "ending status") C2/20F4: A5 0C LDA $0C (creature#) C2/20F6: A8 TAY C2/20F7: B9 C2 3E LDA $3EC2,Y If PresentFlag is FALSE, skip C2/20FA: F0 51 BEQ $214D (creature not present; go to next creature-timer) C2/20FC: A5 08 LDA $08 Are we checking Posion, Doom, or Regen? C2/20FE: C9 01 CMP #$01 C2/2100: F0 08 BEQ $210A C2/2102: C9 03 CMP #$03 C2/2104: F0 04 BEQ $210A C2/2106: C9 07 CMP #$07 C2/2108: D0 25 BNE $212F (Ending Poison/Doom/Regen timers - skip if Erased/Hidden/Jumping) C2/210A: DA PHX C2/210B: A6 08 LDX $08 (Timer to check) C2/210D: BD 7D 3E LDA $3E7D,X (position num) C2/2110: AA TAX C2/2111: BD 93 3E LDA $3E93,X (creature num) C2/2114: C2 20 REP #$20 C2/2116: 20 B2 01 JSR $01B2 * #80 C2/2119: AA TAX C2/211A: 7B TDC C2/211B: E2 20 SEP #$20 C2/211D: BD 1D 20 LDA $201D,X (If Erased, Hidden, or Jumping, skip) C2/2120: 29 81 AND #$81 C2/2122: D0 07 BNE $212B C2/2124: BD 1E 20 LDA $201E,X C2/2127: 29 10 AND #$10 C2/2129: F0 03 BEQ $212E C2/212B: FA PLX C2/212C: 80 1F BRA $214D (goto next creature-timer) C2/212E: FA PLX (Clear ending status for timer) C2/212F: 68 PLA C2/2130: BD F1 3C LDA $3CF1,X Clear "status ending" flag C2/2133: 29 7E AND #$7E C2/2135: 9D F1 3C STA $3CF1,X C2/2138: A6 08 LDX $08 (Timer#) C2/213A: DA PHX C2/213B: A9 01 LDA #$01 C2/213D: 9D 88 3E STA $3E88,X (EndingTimer flag) C2/2140: BD 7D 3E LDA $3E7D,X (pos#) C2/2143: AA TAX C2/2144: BD 93 3E LDA $3E93,X (creature#) C2/2147: FA PLX C2/2148: 9D B7 3E STA $3EB7,X (Store creature# for ending timer) C2/214B: 80 1E BRA $216B (exits loop) C2/214D: A6 08 LDX $08 (Rotate through all creature-timers) C2/214F: FE 7D 3E INC $3E7D,X (list counter) C2/2152: BD 7D 3E LDA $3E7D,X C2/2155: C9 0C CMP #$0C (if we've gone through entire list, loop to beginning) C2/2157: D0 03 BNE $215C C2/2159: 9E 7D 3E STZ $3E7D,X C2/215C: E6 0A INC $0A (Run this loop 12 times) C2/215E: A5 0A LDA $0A C2/2160: C9 0C CMP #$0C C2/2162: F0 03 BEQ $2167 C2/2164: 4C CA 20 JMP $20CA C2/2167: 68 PLA C2/2168: 9D 7D 3E STA $3E7D,X C2/216B: E6 08 INC $08 ($08 = timer number) C2/216D: A5 08 LDA $08 C2/216F: C9 0B CMP #$0B C2/2171: F0 03 BEQ $2176 (loop over all timers) C2/2173: 4C C0 20 JMP $20C0 (Go back to the start (loop is over 128 bytes)) C2/2176: 60 RTS C2/58E5: 20 77 21 JSR $2177 ...and this... C2/2177: 7B TDC (clear vars) C2/2178: AA TAX C2/2179: 8E CE 3E STX $3ECE C2/217C: AE CE 3E LDX $3ECE (Timer number) C2/217F: BD 88 3E LDA $3E88,X (This flag is set by prev fxn) C2/2182: F0 26 BEQ $21AA (if it's clear, check next timer) C2/2184: FE 7D 3E INC $3E7D,X (Rotate over all creatures?) C2/2187: BD 7D 3E LDA $3E7D,X C2/218A: C9 0C CMP #$0C C2/218C: D0 03 BNE $2191 C2/218E: 9E 7D 3E STZ $3E7D,X C2/2191: BD B7 3E LDA $3EB7,X $36 = A * 11 C2/2194: 20 07 02 JSR $0207 C2/2197: BD B7 3E LDA $3EB7,X $32 = A * #80 C2/219A: 20 EC 01 JSR $01EC C2/219D: AD CE 3E LDA $3ECE (If we're checking Stop, always process?) C2/21A0: F0 05 BEQ $21A7 C2/21A2: B9 F1 3C LDA $3CF1,Y If TimerControlFlag set (ie, don't need to end) C2/21A5: D0 03 BNE $21AA C2/21A7: 20 B5 21 JSR $21B5 ProcessEndingTimer C2/21AA: EE CE 3E INC $3ECE (Check next timer) C2/21AD: AD CE 3E LDA $3ECE C2/21B0: C9 0B CMP #$0B C2/21B2: D0 C8 BNE $217C C2/21B4: 60 RTS