;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; REZNOR boss #1 ;; by LX5 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Freeram related ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; !R1 = $14B8 ;1 byte of freeram !R2 = $14B9 ;1 byte of freeram !T = $14B0 ;8 bytes of freeram !DecHP = $14BA ;1 byte of freeram !SpawnBlue = $14BB ;1 byte of freeram !SpawnYellow = $14BC ;1 byte of freeram ;;;;;;;;;;;;;;;;;;;;;;;;; ;; Stuff ;;;;;;;;;;;;;;;;;;;;;;;;; !Music = $03 ;"Defeated boss" music. Default value only works with AMK. ;You may want to change it. !Proyectil = $44 ;Sprite number of Proyectil.cfg !FireballDmg = $06 ;How much damage the fireball does !ThrowBlockDmg = $55 ;How much damage the throw block does ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Don't touch ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; !Status = $14C8 !State = $C2 !TIMER = $160E !Blink = $1540 !SpriteNum = $9E !CustomNum = $7FAB9E !Misc = $1504 !SpriteHP = $1528 !Dir = $157C !Toc = $1588 !Misc2 = $151C !Gfx = $1602 !XVel = $B6 !YVel = $AA !OffScreenX = $15A0 !OffScreenY = $186C !Shake = $1887 !Stun = $18BD !MarioXLo = $94 !SpriteXLo = $E4 !UpdXPos = $818022 !UpdYPos = $81801A !UpdPos = $81802A !Contact = $81AB99 !ApplySpeed = $81AA33 !ExecutePointer = $8086DF ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PRINT "INIT ",pc PHB PHK PLB LDA #$90 STA !TIMER,x STZ !State,x STZ !Gfx,x JSR SUBHORZPOS TYA STA !Dir,x LDA #$FF STA !SpriteHP,x PHX LDX #$08 STX !R1 STX !R2 DEX .loop STZ !T,x DEX BPL .loop STZ !SpawnYellow STZ !SpawnBlue STZ !DecHP PLX PLB RTL PRINT "MAIN ",pc PHB PHK PLB JSR REZNOR PLB RTL ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; REZNORHP: LDA $9D BNE + LDA !DecHP BEQ + DEC !DecHP LDA !SpriteHP,x BEQ + DEC !SpriteHP,x + LDA #$E8 STA $02 LDA !SpriteHP,x STA $01 STA $03 LDX #$05 LDY #$30 .loop JSR FINDOAM LDA $02 STA $0200,y SEC SBC #$08 STA $02 LDA #$28 STA $0201,y LDA $01 LSR #3 JSR CALCULATETILE STA $0202,y LDA #$39 STA $0203,y PHY TYA LSR #2 TAY LDA #$00 STA $0420,y PLY DEX BPL .loop LDX $15E9 RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; XPOS: db $00,$10,$00,$10 db $00,$10,$00,$10 YPOS: db $F0,$F0,$00,$00 TILES: db $80,$82,$A0,$A2 db $80,$82,$C0,$C2 db $84,$86,$A4,$A6 db $88,$8A,$A8,$AA db $E0,$E2,$E4,$E6 PROP: db $59,$19 FIREF: db $10,$12,$34,$12 FIREX: db $10,$00 FIREY: db $FC,$FC FIRET: db $C4,$C6,$C8,$E8 FIREP: db $05,$07,$0B,$09 XJUMP: db $18,$E8 TIMER: db $30,$20,$20,$08 db $00,$50,$50,$50 db $50 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NOPE: RTS REZNOR: LDA $1DFB CMP #!Music BEQ + JSR REZNORHP + LDA !Blink,x BEQ .dogfx LSR #3 PHX TAX LDA $80E292,x PLX AND !Blink,x ORA $9D BEQ .skipgfx .dogfx JSR GRAFICOS .skipgfx JSR EVENTS LDA $9D BNE NOPE LDA !Status,x CMP #$08 BNE NOPE JSR INTERACCION LDA !SpriteHP,x BNE .nocero LDA !Misc2,x BNE .nocero LDA #$C0 STA !YVel,x LDA #$0B STA !State,x LDA #$20 STA !Blink,x LDA #$01 STA !Misc2,x .nocero LDA !State,x JSL !ExecutePointer dw PRESENTACION dw REZNORSTATIC dw REZNORJUMP dw REZNORSJUMP dw REZNORROAR dw REZNORBLOCK dw REZNORFIREY dw REZNORFIREB dw REZNORFIREG dw REZNORFIRER dw REZNORHURT dw REZNORDIE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PRESENTACION: LDA !Misc2,x AND #$02 BNE .decs LDA !Misc2,x EOR #$02 STA !Misc2,x LDA #$26 STA $1DF9 .decs JSR DECTIMER BNE .next JSR RESETSTATE RTS .next CMP #$40 BCC .noinit LDA #$0C STA !Gfx,x LDA #$20 STA !YVel,x JSL !UpdPos LDA !Toc,x AND #$04 BEQ .nofloor LDA !Misc2,x AND #$01 BNE .nofloor LDA !Misc2,x EOR #$01 STA !Misc2,x LDA #$10 STA !Shake LDA #$09 STA $1DFC .nofloor JSL !UpdPos RTS .noinit CMP #$18 BCC .noroar LDA #$01 STA !Misc,x LDA #$08 STA !Gfx,x LDA $14 AND #$07 BEQ .finishroar LDA #$25 STA $1DF9 .finishroar RTS .noroar STZ !Gfx,x STZ !Misc,x RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; REZNORSTATIC: LDA !Toc,x AND #$03 BEQ .noflip JSR FLIP .noflip LDA !Toc,x AND #$04 BEQ .next STZ !XVel,x .next JSR SUBHORZPOS TYA STA !Dir,x JSL !UpdPos JSR DECTIMER BNE .skip LDA #$08 STA !R1 ; STA !R2 JSR CHOOSEBEHAVIOR INC #2 CMP #$04 BNE .nomodify INC .nomodify STA !State,x LDA #$20 STA !TIMER,x STZ !Misc,x STZ !Misc2,x .skip RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; REZNORJUMP: LDA !Misc2,x CMP #$03 BNE .next JSL !UpdPos LDA !Toc,x AND #$03 BEQ .noflips JSR FLIP .noflips LDA !Toc,x AND #$04 BEQ .NOPE JSR RESETSTATE RTS .NOPE LDA #$04 STA !Gfx,x RTS .next LDA !Toc,x AND #$04 BEQ .flipcheck JSR DECTIMER BNE .stop JSR SUBHORZPOS TYA STA !Dir,x INC !Misc2,x LDY !Dir,x LDA.w XJUMP,y STA !XVel,x LDA #$B0 STA !YVel,x LDA #$20 STA !TIMER,x LDA #$08 STA $1DFC BRA .flipcheck .stop STZ !XVel,x STZ !YVel,x JSL !UpdPos RTS .flipcheck LDA !Toc,x AND #$03 BEQ .noflip JSR FLIP .noflip JSL !UpdPos LDA !Toc,x AND #$04 BEQ .air STZ !Gfx,x RTS .air LDA #$04 STA !Gfx,x RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; REZNORSJUMP: LDA !Misc2,x BEQ .super CMP #$01 BEQ .offscreen JSL !UpdPos LDA #$0C STA !Gfx,x LDA !Toc,x AND #$04 BEQ .noground LDA #$10 STA !Shake LDA $72 BNE .marioair LDA #$18 STA !Stun .marioair LDA #$09 STA $1DFC JSR RESETSTATE .noground RTS .super LDA !Toc,x AND #$04 BEQ .isjump LDA #$A0 STA !YVel,x LDA #$08 STA $1DFC .isjump LDA !OffScreenY,x BEQ .nooffscreen STZ !YVel,x LDA #$01 STA !Misc2,x LDA #$14 STA !TIMER,x .nooffscreen JSL !UpdYPos LDA #$04 STA !Gfx,x RTS .offscreen JSR DECTIMER BEQ .NOPE LDA !MarioXLo CMP #$D0 BCC .fin LDA #$D0 .fin STA !SpriteXLo,x RTS .NOPE LDA #$26 STA $1DF9 LDA #$24 STA !YVel,x JSL !UpdPos LDA #$FF STA !Misc2,x LDA #$0C STA !Gfx,x RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; REZNORROAR: JSR SUBHORZPOS TYA STA !Dir,x JSR DECTIMER BEQ .finishroar CMP #$10 BEQ .noret BCS .asf LDA #$08 STA !Gfx,x RTS .asf STZ !Gfx,x RTS .noret LDA #$08 STA !Gfx,x LDA #$08 STA !Shake LDA #$25 STA $1DF9 LDY #$0B .loop LDA $14C8,y CMP #$09 BEQ .erase CMP #$0A BEQ .erase CMP #$0B BEQ .erase .next DEY BPL .loop RTS .erase LDA #$00 STA $14C8,y LDA $00E4,y STA $9A LDA $14E0,y STA $9B LDA $00D8,y STA $98 LDA $14D4,y STA $99 PHB LDA #$02 PHA PLB LDA #$01 JSL $028663 PLB BRA .next .finishroar JSR RESETSTATE RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; REZNORBLOCK: LDA !Misc,x CMP #$02 BNE .gooffscreen LDA !Misc2,x CMP #$05 BNE .startspawn JSL $019138 LDA !Toc,x AND #$04 BNE .ground LDA !Misc,x CMP #$03 BNE .justupdate JSR DECTIMER BNE .nain LDA #$26 STA $1DF9 INC !Misc,x .justupdate JSL !UpdPos .nain RTS .ground ;JSR RESETSTATE LDA #$04 STA !State,x LDA #$50 STA !TIMER,x LDA #$10 STA !Shake LDA $72 BNE .marioair LDA #$18 STA !Stun .marioair LDA #$09 STA $1DFC RTS .gooffscreen LDA !Toc,x AND #$04 BEQ .isjump LDA #$A0 STA !YVel,x LDA #$08 STA $1DFC .isjump LDA !OffScreenY,x BEQ .nooffscreen STZ !YVel,x LDA #$02 STA !Misc,x LDA #$14 STA !TIMER,x .nooffscreen JSL !UpdYPos LDA #$04 STA !Gfx,x RTS .startspawn JSR DECTIMER BNE .noshoot INC !Misc2,x JSR SPAWNSPRITE LDA #$04 STA $00C2,y JSR SHAREDEVENT2 LDA #$28 STA $00AA,y LDA !Misc2,x CMP #$01 BNE .next LDA #$01 STA $1534,y .next LDA !Misc2,x CMP #$05 BEQ .fin5 LDA #$2C STA !TIMER,x LDA #$26 STA $1DF9 .noshoot RTS .fin5 LDA !MarioXLo CMP #$D0 BCC .fin LDA #$D0 .fin STA !SpriteXLo,x LDA #$24 STA !YVel,x LDA #$40 STA !TIMER,x RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; REZNORFIREY: LDA !Misc2,x CMP #$06 BNE .notyet STZ !Gfx,x JSR DECTIMER BNE .NOPE JSR RESETSTATE .NOPE RTS .notyet LDA #$08 STA !Gfx,x JSR SUBHORZPOS TYA STA !Dir,x JSR DECTIMER BNE .noshoot INC !Misc2,x JSR SPAWNSPRITE LDA #$00 STA $00C2,y JSR PREPARAR LDA #$40 %Aiming() LDA $02 STA $00AA,y LDA $00 STA $00B6,y LDA #$00 STA $1528,y LDA !Misc2,x CMP #$05 BEQ $04 LDA #$24 BRA $02 LDA #$30 STA !TIMER,x LDA #$27 STA $1DFC .noshoot RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FIRESPDX: db $3C,$C4 REZNORFIREB: LDA !Misc2,x CMP #$04 BNE .notyet STZ !Gfx,x JSR DECTIMER BNE .NOPE JSR RESETSTATE .NOPE RTS .notyet LDA #$08 STA !Gfx,x JSR SUBHORZPOS TYA STA !Dir,x JSR DECTIMER BNE .noshoot INC !Misc2,x JSR SPAWNSPRITE LDA #$01 STA $00C2,y LDA #$B0 STA $00AA,y PHY LDY !Dir,x LDA.w FIRESPDX,y PLY STA $00B6,y LDA #$01 STA $1528,y LDA !Misc2,x CMP #$04 BEQ $04 LDA #$18 BRA $02 LDA #$40 STA !TIMER,x LDA #$27 STA $1DFC .noshoot RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FIRESPD: db $2C,$D4 REZNORFIREG: LDA !Misc2,x CMP #$05 BNE .notyet STZ !Gfx,x JSR DECTIMER BNE .NOPE JSR RESETSTATE .NOPE RTS .notyet LDA #$08 STA !Gfx,x JSR SUBHORZPOS TYA STA !Dir,x JSR DECTIMER BNE .noshoot INC !Misc2,x JSR SPAWNSPRITE LDA #$07 STA $00C2,y LDA #$CC STA $00AA,y PHY LDY !Dir,x LDA.w FIRESPD,y PLY STA $00B6,y LDA #$02 STA $1528,y LDA !Misc2,x CMP #$05 BEQ $04 LDA #$0C BRA $02 LDA #$30 STA !TIMER,x LDA #$27 STA $1DFC .noshoot RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; REZNORFIRER: LDA !Misc2,x CMP #$03 BNE .notyet STZ !Gfx,x JSR DECTIMER BNE .NOPE JSR RESETSTATE .NOPE RTS .notyet LDA #$08 STA !Gfx,x JSR SUBHORZPOS TYA STA !Dir,x JSR DECTIMER BNE .noshoot INC !Misc2,x JSR SPAWNSPRITE LDA #$03 STA $00C2,y LDA #$B0 STA $00AA,y LDA #$03 PHY LDY !Dir,x LDA.w FIRESPDX,y PLY STA $00B6,y LDA #$03 STA $1528,y LDA !Misc2,x CMP #$03 BEQ $04 LDA #$20 BRA $02 LDA #$48 STA !TIMER,x LDA #$27 STA $1DFC .noshoot RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; REZNORHURT: JSL !UpdPos .nocero LDA #$10 STA !Gfx,x LDA !Misc2,x BNE .return LDA #$40 STA !Blink,x INC !Misc2,x LDA #$60 STA !TIMER,x .return LDA !Blink,x BNE $03 JSR RESETSTATE RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; REZNORDIE: LDA #$01 STA $15DC,x JSL !UpdPos LDA !Misc2,x CMP #$02 BEQ .muere LDA #$10 STA !Gfx,x STZ !Blink,x LDA !OffScreenY,x BEQ .return LDA #$60 STA !TIMER,x LDA #$26 STA $1DF9 LDA #$02 STA !Misc2,x .return RTS .muere JSR DECTIMER BNE .return LDA #$09 STA $1DFC STZ !Status,x LDA #$18 STA !Shake LDA #$FF STA $1493 STA $0DDA LDA #!Music STA $1DFB DEC $13C6 RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INTERACCION: JSR FIRECHECK JSR REZNORCLIPPINGB JSL $03B664 JSL $03B72B BCC .throwblock LDA !State,x CMP #$0B BEQ .throwblock JSL $00F5B7 .throwblock LDY #$0B .loop LDA $14C8,y CMP #$09 BEQ .checkhit CMP #$0A BEQ .checkhit .next DEY BPL .loop RTS .checkhit PHX TYX JSL $83B6E5 PLX JSL $83B69F JSL $83B72B BCC .next LDA !Blink,x BNE .nothurt LDA !DecHP CLC ADC #!ThrowBlockDmg STA !DecHP STZ !Misc2,x LDA #$0A STA !State,x PHX TYX STZ $14C8,x LDA $E4,x STA $9A LDA $14E0,x STA $9B LDA $D8,x STA $98 LDA $14D4,x STA $99 PHB LDA #$02 PHA PLB LDA #$01 JSL $828663 PLB PLX LDA #$28 STA $1DFC .nothurt RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FIRECHECK: PHX PHY LDY #$00 .loopfire LDA $1713,y BEQ .incy LDA $1727,y SEC SBC #$02 STA $00 LDA $173B,y SBC #$00 STA $08 LDA #$0C STA $02 LDA $171D,y SEC SBC #$04 STA $01 LDA $1731,y SBC #$00 STA $09 LDA #$13 STA $03 PHY JSR REZNORCLIPPINGB JSL $83B72B BCS .yesfire PLY .incy CPY #$00 BNE .nofire INY BRA .loopfire .yesfire LDA !Blink,x BNE + LDA !DecHP CLC ADC #!FireballDmg STA !DecHP LDA #$28 STA !Blink,x LDA #$01 STA $1DF9 LDA #$00 STA $1713,y JSR EXTENDEDSMOKE + PLY PLX PLX RTS .nofire PLY PLX RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; REZNORCLIPPINGB: LDA $E4,x CLC ADC #$04 STA $04 LDA $14E0,x ADC #$00 STA $0A LDA #$18 STA $06 LDA $D8,x SEC SBC #$04 STA $05 LDA $14D4,x SBC #$00 STA $0B LDA #$1A STA $07 RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RESETSTATE: LDA #$01 STA !State,x LDA #$30 STA !TIMER,x STZ !Gfx,x STZ !Misc,x STZ !Misc2,x RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FLIP: LDA !Dir,x EOR #$01 STA !Dir,x LDA !XVel,x EOR #$FF STA !XVel,x RTS DECTIMER: LDA !TIMER,x BEQ .nodec DEC !TIMER,x .nodec RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PREPARAR: LDA $E4,x SEC SBC $94 STA $00 LDA $14E0,x SBC $95 STA $01 REP #$20 LDA $96 CLC ADC #$0010 STA $02 SEP #$20 LDA $14D4,x XBA LDA $D8,x REP #$20 SEC SBC $02 STA $02 BPL $04 EOR #$FFFF INC CMP #$0100 BCS .OutOfRange LDA $00 BPL $04 EOR #$FFFF INC CMP #$0100 BCS .OutOfRange SEP #$21 RTS .OutOfRange SEP #$20 CLC RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EVENTS: LDA !SpawnYellow BEQ NOEVENT DEC !SpawnYellow JSR SPAWNSPRITE LDA #$05 STA $00C2,y LDA #$48 STA $00AA,y LDA #$03 STA $1528,y SHAREDEVENT: LDA #$28 STA $1DF9 SHAREDEVENT2: LDA !MarioXLo STA $00E4,y LDA !MarioXLo+1 STA $14E0,y LDA #$A0 STA $00D8,y LDA #$00 STA $14D4,y ENDEVENT: RTS NOEVENT: LDA !SpawnBlue BEQ ENDEVENT DEC !SpawnBlue JSR SPAWNSPRITE LDA #$06 STA $00C2,y LDA #$28 STA $00AA,y LDA #$03 STA $1528,y BRA SHAREDEVENT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SPAWNSPRITE: LDA !State,x CMP #$05 BEQ .notnormal LDA $186C,x BNE .endspawn .notnormal JSL $82A9DE BMI .endspawn LDA #$01 STA $14C8,y PHX TYX LDA #!Proyectil STA !CustomNum,x PLX PHY LDY !Dir,x LDA $E4,x CLC ADC.w FIREX,y PLY STA $00E4,y LDA $14E0,x ADC #$00 STA $14E0,y LDA $D8,x SEC SBC #$01 STA $00D8,y LDA $14D4,x SBC #$00 STA $14D4,y PHX TYX JSL $87F7D2 JSL $8187A7 LDA #$08 STA $7FAB10,x PLX .endspawn RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; GRAFICOS: JSR GETDRAWINFO LDA !Gfx,x STA $02 LDA !Dir,x STA $03 LDA !TIMER,x STA $04 LDA !State,x STA $05 LDA !Misc,x STA $06 .gfx PHX LDX #$00 .loop PHX TXA LDX $03 BNE .noadj CLC ADC #$03 .noadj TAX LDA $00 CLC ADC.w XPOS,x STA $0300,y LDA $06 CMP #$01 BNE .noshake LDA $04 CMP #$40 BCS .noshake CMP #$18 BCC .noshake LSR #2 AND #$01 CLC ADC $0300,y STA $0300,y .noshake PLX LDA $01 CLC ADC.w YPOS,x STA $0301,y PHX TXA CLC ADC $02 TAX LDA.w TILES,x STA $0302,y LDX $03 LDA.w PROP,x ORA $64 STA $0303,y INY #4 PLX INX CPX #$04 BNE .loop PLX LDA !State,x CMP #$05 BCS .fire .finishoam LDA #$03 LDY #$02 JSL $81B7B3 RTS .fire SEC SBC #$06 STA $02 LDA !Gfx,x CMP #$08 BNE .finishoam LDA $04 BEQ .finishoam LDX $03 LDA $00 CLC ADC.w FIREX,x STA $02F0 LDA $01 CLC ADC.w FIREY,x STA $02F1 LDA $14 LSR #1 AND #$03 TAX LDA.w FIRET,x STA $02F2 LDX $02 LDA.w FIREP,x LDX $03 BNE .FLIP ORA #$40 .FLIP ORA $64 STA $02F3 LDA #$F0 LSR #2 TAY LDA #$02 STA $0420,y LDX $15E9 BRA .finishoam ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SUBHORZPOS: LDY #$00 LDA $94 SEC SBC $E4,x STA $0F LDA $95 SBC $14E0,x BPL $01 INY RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SUBVERTPOS: REP #$20 LDA $96 CLC ADC.w #$0010 STA $0C SEP #$20 LDY #$00 LDA $0C SEC SBC $D8,x STA $0E LDA $0D SBC $14D4,x BPL $01 INY RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CHOOSEBEHAVIOR: PHX LDA !T INC STA $00 LDA !R2 DEC JSR RANDOM STA $01 LDX #$01 LDY #$00 .loop LDA $01 CMP $00 BCC .break LDA $00 SEC ADC !T,x STA $00 BCS .UseLast INX INY CPY !R1 BCC .loop .UseLast LDY !R1 DEY .break LDA #$FF STA !T,y STY $02 LDX #$00 .loop2 INC !T,x INX CPX !R1 BCC .loop2 LDX #$00 TXA .loop3 SEC ADC !T,x BCS .SetMax STA !R2 INX CPX !R1 BCC .loop3 BRA .NotMax .SetMax LDA #$FF STA !R2 .NotMax PLX LDA $02 RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CALCULATETILE: CPX #$00 BEQ .InitPiece CPX #$05 BEQ .EndPiece PHA TXA DEC ASL #3 STA $00 PLA SEC SBC $00 BMI .EmptyTile CMP #$08 BCS .FullTile PHY AND #$07 TAY CPX #$04 BNE + LDA $03 CMP #$FF BEQ .FullTileY + LDA.w .HPTiles,y PLY RTS .FullTileY PLY .FullTile LDA #$DC RTS .EmptyTile LDA #$FF RTS .InitPiece LDA #$CC RTS .EndPiece LDA #$CD RTS .HPTiles db $FF,$FE,$FD,$FC,$EF,$EE,$ED,$EC ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FINDOAM: TYA CMP #$FC BEQ .break .loop LDA $0201,y CMP #$F0 BEQ .break INY #4 CMP #$FC BNE .loop .break RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EXTENDEDSMOKE: PHX LDX #$03 .loop LDA $17C0,x BEQ .found DEX BPL .loop PLX RTS .found LDA #$01 STA $17C0,x LDA $1727,y STA $17C8,x LDA $171D,y STA $17C4,x LDA #$1C STA $17CC,x PLX RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RANDOM: PHX PHP SEP #$30 PHA JSL $81ACF9 PLX CPX #$FF BNE .normal LDA $148D BRA .fin .normal INX LDA $148D STA $4202 STX $4203 NOP #4 LDA $4217 .fin PLP PLX RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; TABLE1: db $0C,$1C TABLE2: db $01,$02 GETDRAWINFO: STZ $186C,x STZ $15A0,x LDA $E4,x CMP $1A LDA $14E0,x SBC $1B BEQ ONSCREENX INC $15A0,x ONSCREENX: LDA $14E0,x XBA LDA $E4,x REP #$20 SEC SBC $1A CLC ADC.w #$0040 CMP #$0180 SEP #$20 ROL A AND #$01 STA $15C4,x BNE INVALID LDY #$00 LDA $1662,x AND #$20 BEQ ONSCREENLOOP INY ONSCREENLOOP: LDA $D8,x CLC ADC TABLE1,y PHP CMP $1C ROL $00 PLP LDA $14D4,x ADC #$00 LSR $00 SBC $1D BEQ ONSCREENY LDA $186C,x ORA TABLE2,y STA $186C,x ONSCREENY: DEY BPL ONSCREENLOOP LDY $15EA,x LDA $E4,x SEC SBC $1A STA $00 LDA $D8,x SEC SBC $1C STA $01 RTS INVALID: PLA PLA RTS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RECIP_SQRT_LOOKUP: dw $0000,$FFFF,$B505,$93CD,$8000,$727D,$6883,$60C2 dw $5A82,$5555,$50F4,$4D30,$49E7,$4700,$446B,$4219 dw $4000,$3E17,$3C57,$3ABB,$393E,$37DD,$3694,$3561 dw $3441,$3333,$3235,$3144,$3061,$2F8A,$2EBD,$2DFB dw $2D41,$2C90,$2BE7,$2B46,$2AAB,$2A16,$2987,$28FE dw $287A,$27FB,$2780,$270A,$2698,$262A,$25BF,$2557 dw $24F3,$2492,$2434,$23D9,$2380,$232A,$22D6,$2285 dw $2236,$21E8,$219D,$2154,$210D,$20C7,$2083,$2041 dw $2000,$1FC1,$1F83,$1F46,$1F0B,$1ED2,$1E99,$1E62 dw $1E2B,$1DF6,$1DC2,$1D8F,$1D5D,$1D2D,$1CFC,$1CCD dw $1C9F,$1C72,$1C45,$1C1A,$1BEF,$1BC4,$1B9B,$1B72 dw $1B4A,$1B23,$1AFC,$1AD6,$1AB1,$1A8C,$1A68,$1A44 dw $1A21,$19FE,$19DC,$19BB,$199A,$1979,$1959,$1939 dw $191A,$18FC,$18DD,$18C0,$18A2,$1885,$1869,$184C dw $1831,$1815,$17FA,$17DF,$17C5,$17AB,$1791,$1778 dw $175F,$1746,$172D,$1715,$16FD,$16E6,$16CE,$16B7 dw $16A1,$168A,$1674,$165E,$1648,$1633,$161D,$1608 dw $15F4,$15DF,$15CB,$15B7,$15A3,$158F,$157C,$1568 dw $1555,$1542,$1530,$151D,$150B,$14F9,$14E7,$14D5 dw $14C4,$14B2,$14A1,$1490,$147F,$146E,$145E,$144D dw $143D,$142D,$141D,$140D,$13FE,$13EE,$13DF,$13CF dw $13C0,$13B1,$13A2,$1394,$1385,$1377,$1368,$135A dw $134C,$133E,$1330,$1322,$1315,$1307,$12FA,$12ED dw $12DF,$12D2,$12C5,$12B8,$12AC,$129F,$1292,$1286 dw $127A,$126D,$1261,$1255,$1249,$123D,$1231,$1226 dw $121A,$120F,$1203,$11F8,$11EC,$11E1,$11D6,$11CB dw $11C0,$11B5,$11AA,$11A0,$1195,$118A,$1180,$1176 dw $116B,$1161,$1157,$114D,$1142,$1138,$112E,$1125 dw $111B,$1111,$1107,$10FE,$10F4,$10EB,$10E1,$10D8 dw $10CF,$10C5,$10BC,$10B3,$10AA,$10A1,$1098,$108F dw $1086,$107E,$1075,$106C,$1064,$105B,$1052,$104A dw $1042,$1039,$1031,$1029,$1020,$1018,$1010,$1008