Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;===========================================================================================
- ; GRAPHICS CODE
- ;----------------------------------------------------
- ; $00 = X position.
- ; $01 = Y position.
- ; $02 = Output of SUB_HORZ_POS
- ; $04 = Graphics tile.
- ; $07 = Loop counter when X is not available.
- ; $08 = Tile counter.
- ; $0F = Overlay tile.
- ;===========================================================================================
- Properties:
- db $23,$63
- Body_X_Offsets:
- db $00,$10,$00,$10
- db $10,$00,$10,$00
- Body_Y_Offsets:
- db $00,$00,$10,$10
- Attack_GFX:
- Float_GFX:
- LDA $9D : BNE +
- INC !GFXFrame,x
- +
- Dead_GFX:
- JSR GET_DRAW_INFO
- LDA !XFlip,x : STA $02
- ASL : ASL : STA $03
- LDA #$06 : STA $04
- JSR Body_Draw
- LDY #$02 : LDA $08 : JSL $01B7B3
- No_GFX:
- RTS
- Body_Draw:
- PHX
- LDX #$03
- .Loop
- LDA $04 : STA $0302,y ; Tile to draw.
- PHX : LDX $02 : LDA Properties,x : STA $0303,y : PLX ; YXPPCCCT properties.
- PHX : TXA : CLC : ADC $03 : TAX ;\ X position.
- LDA $00 : CLC : ADC Body_X_Offsets,x : STA $0300,y : PLX ;/
- JSR FrameSine : LSR #5
- CLC : ADC $01 : CLC : ADC Body_Y_Offsets,x : STA $0301,y ; Y position.
- DEC $04 : DEC $04 ; Tiles to draw: #$06, then #$04, then #$02, then #$00.
- INC $08
- INY #4
- DEX : BPL .Loop
- PLX
- JSR Feet_Draw
- JSR Hand_Draw
- JSR Overlay
- RTS
- Feet_Draw:
- LDA $00 : STA $0300,y
- CLC : ADC #$0D : STA $0304,y
- LDA $02 : ASL : STA $03
- LDA #$44 : CLC : ADC $03 : STA $0302,y : STA $0306,y ; Draw tile 46 twice.
- LDA #$23 : STA $0303,y : STA $0307,y ; Set YXPPCCCT properties for them both. (00100011)
- ; Move them both vertically on a sine thing.
- JSR FrameSine : LSR #4
- CLC : ADC $01
- CLC : ADC #$22
- STA $0301,y : STA $0305,y
- INC $08 : INC $08
- TYA : CLC : ADC #$08 : TAY
- RTS
- Hand_Draw:
- JSR FrameSine : LSR #5 : EOR #$FF ;\ Left hand X pos = Body X pos - #$08 - FrameSine
- SEC : SBC #$06 : SEC : ADC $00 : STA $0300,y ;/
- JSR FrameSine : LSR #5 ;\ Right hand X pos = Body X pos + #$30 + FrameSine
- CLC : ADC $00 : CLC : ADC #$18 : STA $0304,y ;/
- LDA $02 : ASL #5 : STA $03
- LDA #$08 : CLC : ADC $03 : STA $0302,y ; Left hand
- LDA #$0A : CLC : ADC $03 : STA $0306,y ; Right hand
- LDA #$23 : STA $0303,y : STA $0307,y ; YXPPCCCT.
- ; Move them both vertically on a sine thing.
- JSR FrameSine : LSR #4
- CLC : ADC $01
- CLC : ADC #$18
- STA $0301,y : STA $0305,y
- INC $08 : INC $08
- TYA : CLC : ADC #$08 : TAY
- RTS
- Overlay:
- ; Used once all the other graphics are done to (partially) hide the boss.
- ; Select overlay tile/whether to even draw overlay.
- LDA !Visibility,x : BEQ .Ret
- ASL : CLC : ADC #$60 : STA $0F
- PHX
- ; Draw overlay.
- LDA $08 : STA $09 : INC : ASL #2 : STA $0A
- TYA : SEC : SBC $0A : TAX
- .Loop
- LDA $0300,x : STA $0300,y
- LDA $0301,x : STA $0301,y
- LDA $0302,x : STA $0302,y
- LDA $0303,x : STA $0303,y
- LDA $0F : STA $0302,x
- LDA $0303,x : AND #$CF : STA $0303,x
- INX #4 : INY #4
- DEC $09 : BPL .Loop
- .End
- ASL $08
- PLX
- .Ret
- RTS
- ;===========================================================================================
- ; MISC ROUTINES
- ;===========================================================================================
- FrameSine:
- ; Fetch the sine of the current frame number>>1. Used for floating.
- PHX : REP #$30
- LDA !GFXFrame,x : AND #$00FF : ASL : TAX : LDA $07F7DB,x
- LSR
- SEP #$30 : PLX
- RTS
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement