Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;============================================================
- ; Winged Thwomp
- ;
- ; Description: A thwomp with wings. Its behavior is basically
- ; like SMM's, but more customizable.
- ;
- ; Uses extra bits: YES
- ; If extra bit 3 is set, the Thwomp will go on flying forever
- ; instead of at a specified range.
- ;
- ; Uses extra bytes: YES
- ; Extra Byte 1: if this is set, when the thwomp stomps the
- ; ground its wings will fall. (This in turn will spawn the
- ; original thwomp sprite)
- ; Extra Byte 2: when this is set to anything non-zero, time
- ; to freeze the player in place if he's on ground.
- ;============================================================
- !angry_tile = $CA
- tilemap:
- db $8E,$8E,$AE,$AE,$C8
- props:
- db $23,$63,$23,$63,$23
- wing_tilemap:
- db $5D,$C6
- wing_props:
- db $66,$66,$26,$26
- thwomp_speed_add:
- db $FF,$01
- thwomp_target_x_speed:
- db $EC,$14
- thwomp_target_y_speed:
- db $F8,$08
- thwomp_forever_x_speed:
- db $0C,$F4
- print "INIT ",pc
- LDA !D8,x
- STA !151C,x
- LDA !E4,x
- CLC
- ADC #$08
- STA !E4,x
- JSL $01acf9
- STA !1570,x
- %SubHorzPos()
- TYA
- STA !157C,x
- RTL
- print "MAIN ",pc
- PHB
- PHK
- PLB
- JSR winged_thwomp_main
- PLB
- RTL
- winged_thwomp_main:
- JSR draw_sprite
- LDA !14C8,x
- EOR #$08
- ORA $9D
- BNE .return
- %SubOffScreen()
- JSL $01a7dc
- INC !1570,x
- LDA !1570,x
- LSR #3
- AND #$01
- STA !1602,x
- LDA !C2,x
- ASL
- TAX
- JSR.w (thwomp_states,x)
- JSL $01801a
- LDA !C2,x
- BNE .return
- LDA $14
- LSR
- BCS .no_y_speed
- LDA !1534,x
- AND #$01
- TAY
- LDA !AA,x
- CLC
- ADC thwomp_speed_add,y
- STA !AA,x
- CMP thwomp_target_y_speed,y
- BNE .no_y_speed
- INC !1534,x
- .no_y_speed
- LDA !7FAB10,x
- AND #$04
- BEQ .x_speed
- LDY !157C,x
- LDA thwomp_forever_x_speed,y
- STA !B6,x
- JSL $018022
- .return
- RTS
- .x_speed
- LDA !1540,x
- BNE .update_speeds
- LDA $14
- AND #$03
- BNE .update_speeds
- LDA !1594,x
- AND #$01
- TAY
- LDA !B6,x
- CLC
- ADC thwomp_speed_add,y
- STA !B6,x
- CMP thwomp_target_x_speed,y
- BNE .update_speeds
- INC !1594,x
- LDA #$20
- STA !1540,x
- .update_speeds
- JSL $018022
- RTS
- thwomp_states:
- dw waiting
- dw falling
- dw rising
- waiting:
- LDX $15E9|
- LDA !186C,x
- ORA !15A0,x
- BNE .return
- JSL SubHorzPos
- TYA
- STA !157C,x
- STZ !1528,x
- LDA $0E
- CLC
- ADC #$40
- CMP #$80
- BCS +
- LDA #$01
- STA !1528,x
- + LDA $0E
- CLC
- ADC #$24
- CMP #$50
- BCS .return
- LDA #$02
- STA !1528,x
- INC !C2,x
- STZ !AA,x
- .return
- RTS
- falling:
- LDX $15E9|
- LDA !AA,x
- CMP #$3E
- BCS +
- ADC #$04
- STA !AA,x
- + JSL $019138
- LDA !1588,x
- AND #$04
- BEQ .return
- LDA !1588,x
- BMI +
- LDA #$00
- LDY !15B8,x
- BEQ ++
- + LDA #$18
- ++ STA !AA,x
- LDA #$18
- STA $1887|
- LDA !7FAB4C,x
- BEQ .no_stun
- LDA $77
- AND #$04
- BEQ +
- LDA !7FAB4C,x
- STA $18BD|
- + LDA #$18
- BRA .common
- .no_stun
- LDA #$09
- .common
- STA $1DFC|
- LDA !7FAB40,x
- BEQ .set_c2
- LDA #$26
- JSR SpawnVanillaSprite
- BCS .return
- LDA #$02
- STA.w !C2,y
- STA !1528,y
- STA !14C8,x
- STA !1FD6,x
- LDA #$40
- STA !1540,y
- LDA #$D0
- STA !AA,x
- LDA !E4,x
- STA.w !E4,y
- LDA !D8,x
- STA.w !D8,y
- LDA !14E0,x
- STA !14E0,y
- LDA !14D4,x
- STA !14D4,y
- LDA !151C,x
- STA !151C,y
- .return
- RTS
- .set_c2
- LDA #$40
- STA !1558,x
- INC !C2,x
- RTS
- rising:
- LDX $15E9|
- LDA !1558,x
- BNE .return
- STZ !1528,x
- LDA !D8,x
- CMP !151C,x
- BNE .not_done_rising
- STZ !C2,x
- STZ !AA,x
- STZ !1534,x
- RTS
- .not_done_rising
- LDA #$F0
- STA !AA,x
- .return
- RTS
- draw_sprite:
- %GetDrawInfo()
- ; wings
- LDA !1602,x
- STA $02
- LDX #$01
- .wing_loop
- PHX
- TXA
- ASL
- CLC
- ADC $02
- TAX
- LDA $00
- CLC
- ADC wing_x_disp,x
- STA $0300|
- LDA $01
- CLC
- ADC wing_y_disp,x
- STA $0301|
- PHX
- LDX $02
- LDA wing_tilemap,x
- PLX
- STA $0302|
- LDA wing_props,x
- STA $0303|
- PHY
- TYA
- LSR #2
- TAY
- LDA wing_size,x
- STA $0460|
- PLY
- INY #4
- PLX
- DEX
- BPL .wing_loop
- ; thwomp
- LDX $15E9|
- LDA !1FD6,x
- BNE .done
- LDA !1528,x
- STA $02
- LDX #$03
- CMP #$00
- BEQ .thwomp_loop
- INX
- .thwomp_loop
- LDA $00
- CLC
- ADC x_disp,x
- STA $0300|
- LDA $01
- CLC
- ADC y_disp,x
- STA $0301|
- LDA props,x
- STA $0303|
- LDA tilemap,x
- CPX #$04
- BNE .store_tile
- PHX
- LDX $02
- CPX #$02
- BNE +
- LDA #!angry_tile
- + PLX
- .store_tile
- STA $0302|
- PHY
- TYA
- LSR #2
- TAY
- LDA #$02
- STA $0460|
- PLY
- INY #4
- DEX
- BPL .thwomp_loop
- .done
- LDA #$06
- LDY #$FF
- LDX $15E9|
- JSL $01b7b3
- RTS
- x_disp:
- db $FC,$04,$FC,$04,$00
- y_disp:
- db $00,$00,$10,$10,$08
- wing_x_disp:
- db $F8,$F0,$10,$10
- wing_y_disp:
- db $08,$00,$08,$00
- wing_size:
- db $00,$02,$00,$02
- SpawnVanillaSprite:
- XBA
- LDX.b #!SprSize-1
- - LDA !14C8,x
- BEQ +
- DEX
- BPL -
- SEC
- BRA no_slot
- + XBA
- STA !9E,x
- JSL $07F7D2|
- LDA #$08
- STA !14C8,x
- CLC
- no_slot:
- TXY
- LDX $15E9|
- RTS
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement