332 lines
7.2 KiB
NASM
332 lines
7.2 KiB
NASM
pullpc
|
|
|
|
; ==============================================================================
|
|
|
|
Lanmola_DrawDirtLONG:
|
|
{
|
|
PHB : PHK : PLB
|
|
|
|
JSR Lanmola_DrawDirt
|
|
|
|
PLB
|
|
|
|
RTL
|
|
}
|
|
|
|
; ==============================================================================
|
|
|
|
Lanmola_DrawDirt:
|
|
{
|
|
LDA $0E00, X : BNE .timerNotDone
|
|
RTS
|
|
|
|
.timerNotDone
|
|
|
|
; Determine weather the dirt should draw in front of or behind the body
|
|
; based on its y velocity.
|
|
LDA $0D40, X : ASL A : ROL A : ASL A : EOR $0D80, X : AND.b #$02 : BEQ .nu
|
|
LDA.b #$08 : JSL OAM_AllocateFromRegionB
|
|
BRA .xi
|
|
|
|
.nu
|
|
LDA.b #$08 : JSL OAM_AllocateFromRegionC
|
|
|
|
.xi
|
|
|
|
LDY.b #$00
|
|
|
|
LDA $0E00, X : LSR #2 : AND.b #$03 : EOR.b #$03 : ASL A : STA $06
|
|
|
|
LDA $0DC0, X : XBA
|
|
LDA $0DE0, X
|
|
REP #$20 : SEC : SBC $E2 : STA $00 : SEP #$20
|
|
|
|
STZ $37
|
|
BPL .notNegative3
|
|
INC $37
|
|
|
|
.notNegative3
|
|
|
|
LDA $0EB0, X : XBA
|
|
LDA $0E70, X
|
|
REP #$20 : SEC : SBC $E8 : STA $02 : SEP #$20
|
|
|
|
PHX
|
|
|
|
LDX.b #$01
|
|
|
|
.dirtLoop
|
|
PHX
|
|
|
|
TXA : CLC : ADC $06 : ASL : TAX
|
|
|
|
REP #$20
|
|
LDA $00 : CLC : ADC $7EEA64, X : STA ($90), Y ;dirt x ;.xDirt
|
|
|
|
STZ $36
|
|
BPL .notNegative4
|
|
INC $36
|
|
|
|
.notNegative4
|
|
|
|
INY
|
|
|
|
CLC : ADC.w #$0040 : CMP.w #$0140 : BCS .out_of_bounds3
|
|
|
|
LDA $02 : CLC : ADC $7EEA74, X : STA ($90), Y ;dirt y ;.yDirt
|
|
|
|
REP #$20
|
|
CLC : ADC.w #$0010 : CMP.w #$0100
|
|
SEP #$20
|
|
|
|
BCC .on_screen_y
|
|
.out_of_bounds3
|
|
SEP #$20
|
|
LDA.b #$F0 : STA ($90), Y
|
|
|
|
.on_screen_y
|
|
|
|
TXA : LSR : TAX
|
|
|
|
LDA $7EEA84, X : INY : STA ($90), Y ;dirt chr ;.chrDirt
|
|
LDA $7EEA8C, X : INY : STA ($90), Y ;dirt properties ;.propertiesDirt
|
|
|
|
PHY
|
|
|
|
TYA : LSR #2 : TAY
|
|
|
|
LDA $7EEA94, X : ORA $37 : ORA $36 : STA ($92), Y ;.sizesDirt
|
|
|
|
PLY : INY
|
|
|
|
PLX : DEX : BPL .dirtLoop
|
|
|
|
PLX
|
|
|
|
RTS
|
|
}
|
|
|
|
; ==============================================================================
|
|
|
|
Sprite_Lanmola_Init_DataLONG:
|
|
{
|
|
PHB : PHK : PLB
|
|
|
|
JSR Sprite_Lanmola_Init_Data
|
|
|
|
PLB
|
|
|
|
RTL
|
|
}
|
|
|
|
; ==============================================================================
|
|
|
|
Sprite_Lanmola_Init_Data:
|
|
{
|
|
PHX
|
|
|
|
LDX.b #$00
|
|
.loop
|
|
LDA .sprite_regions, X : STA $7EEA00, X
|
|
|
|
INX : CPX.b #$B8 : BCC .loop
|
|
|
|
PLX
|
|
|
|
RTS
|
|
|
|
;$7EEA00
|
|
.sprite_regions
|
|
db $00, $40, $80, $C0
|
|
|
|
;$7EEA04
|
|
.data1
|
|
db $00, $1C
|
|
|
|
;$7EEA06
|
|
.data2
|
|
db $01, $F9
|
|
|
|
;$7EEA08
|
|
.chrHead
|
|
db $C4, $E2, $C2, $E0, $C0, $E0, $C2, $E2, $C4, $E2, $C2, $E0, $C0, $E0, $C2, $E2
|
|
|
|
;$7EEA18
|
|
.chrTail
|
|
db $CC, $E4, $CA, $E6, $C8, $E6, $CA, $E4, $CC, $E4, $CA, $E6, $C8, $E6, $CA, $E4
|
|
|
|
;$7EEA28
|
|
.propertiesBody
|
|
db $F3, $F3, $F3, $F3, $B3, $B3, $B3, $B3, $33, $33, $33, $33, $73, $73, $73, $73
|
|
;db $C0, $C0, $C0, $C0, $80, $80, $80, $80, $00, $00, $00, $00, $40, $40, $40, $40
|
|
; 1 yellow, green, pink
|
|
; 3 metroid colors
|
|
; 5 ice blue
|
|
; 7 red and yellow
|
|
; 9 blue and red
|
|
; B neon green and yellow
|
|
; D silver and yellow
|
|
; F yellow and red
|
|
|
|
;$7EEA38
|
|
.oamCoord90
|
|
dw $0930, $08F0, $08B0, $0870
|
|
|
|
;$7EEA40
|
|
.oamCoord92
|
|
dw $0A6C, $0A5C, $0A4C, $0A3C
|
|
|
|
;$7EEA48
|
|
.chrMound
|
|
db $EE, $EE, $EC, $EC, $CE, $CE
|
|
;db $EE, $EE, $EC, $EC, $CE, $CE
|
|
|
|
;$7EEA4E
|
|
.propertiesMound
|
|
db $39, $79, $39, $79, $39, $79
|
|
;db $31, $71, $31, $71, $31, $71
|
|
|
|
;$7EEA54
|
|
.frameMound
|
|
db $04, $05, $04, $05, $04, $05, $04, $05
|
|
db $04, $03, $02, $01, $01, $01, $00, $00
|
|
|
|
;$7EEA64
|
|
.xDirt
|
|
dw $FFF8, $0008, $FFF6, $000A, $FFF0, $0010, $FFE8, $0020
|
|
;db $F8, $08, $F6, $0A, $F0, $10, $E8, $20
|
|
|
|
;$7EEA74
|
|
.yDirt
|
|
dw $0000, $0000, $FFFF, $FFFF, $FFFF, $FFFF, $0003, $0003
|
|
;db $00, $00, $FF, $FF, $FF, $FF, $03, $03
|
|
|
|
;$7EEA84
|
|
.chrDirt
|
|
db $E8, $E8, $E8, $E8, $EA, $EA, $EA, $EA
|
|
|
|
;$7EEA8C
|
|
.propertiesDirt
|
|
db $39, $79, $39, $79, $39, $79, $39, $79
|
|
;db $00, $40, $00, $40, $00, $40, $00, $40
|
|
|
|
;$7EEA94
|
|
.sizesDirt
|
|
db $02, $02, $02, $02, $02, $02, $00, $00
|
|
|
|
;$7EEA9C
|
|
.y_speed_slope
|
|
db 2, -2
|
|
|
|
;$7EEA9E
|
|
.y_speeds
|
|
db $10, $F0
|
|
|
|
;$7EEAA0
|
|
.dataDeath
|
|
db 0, 8, 16, 24, 32, 40, 48, 56
|
|
|
|
;$7EEAA8
|
|
.randXPos
|
|
db $58, $50, $60, $70, $80, $90, $A0, $98
|
|
|
|
;$7EEAB0
|
|
.randYPos
|
|
db $68, $60, $70, $80, $90, $A0, $A8, $B0
|
|
|
|
;$7EEAB8
|
|
.lanmoalKilledState
|
|
|
|
;7EEACA
|
|
}
|
|
|
|
; ==============================================================================
|
|
|
|
Lanmola_MoveSegment:
|
|
{
|
|
PHX
|
|
TXA : ASL A : TAX
|
|
|
|
REP #$20
|
|
LDA $7EEA38, X : STA $90 ;.oamCoord90
|
|
LDA $7EEA40, X : STA $92 ;.oamCoord92
|
|
SEP #$20
|
|
|
|
PLX
|
|
|
|
LDA $0D40, X : SEC : SBC $0F80, X : STA $00
|
|
LDA $0D50, X : STA $01
|
|
JSL Sprite_ConvertVelocityToAngle : STA $0F
|
|
|
|
LDA $7EEA00, X : STA $04 ;.sprite_regions
|
|
|
|
PHX
|
|
|
|
; Store the current position, angle, and hieght of the sprite
|
|
; so that we can set the other segments to them later.
|
|
LDA $0D30, X : PHA ;high x
|
|
LDA $0D20, X : PHA ;high y
|
|
LDA $0D10, X : PHA ;lower x
|
|
LDA $0D00, X : PHA ;lower y
|
|
|
|
LDA $0F70, X : PHA ;height
|
|
LDA $0F : PHA ;angle
|
|
|
|
LDA $0E80, X : STA $02 : STA $05
|
|
|
|
CLC : ADC $04 : TAX
|
|
|
|
PLA : STA $7FFF00, X ;angle
|
|
PLA : STA $7FFE00, X ;height
|
|
|
|
PLA : STA $7FFD00, X ;lower y
|
|
PLA : STA $7FFC00, X ;lower x
|
|
PLA : STA $7EE900, X ;high y
|
|
PLA : STA $7EE800, X ;high x
|
|
|
|
PLX
|
|
|
|
LDA $0DD0, X : CMP.b #$09 : BNE .notActive
|
|
LDA $11 : ORA $0FC1 : BNE .notActive
|
|
LDA $10 : CMP #$0E : BEQ .notActive
|
|
LDA $5D : CMP #$08 : BEQ .notActive ;in medallion cut scene
|
|
CMP #$09 : BEQ .notActive ;in medallion cut scene
|
|
CMP #$0A : BEQ .notActive ;in medallion cut scene
|
|
LDA $05 : INC A : AND.b #$3F : STA $0E80, X
|
|
|
|
.notActive
|
|
|
|
RTL
|
|
}
|
|
|
|
; ==============================================================================
|
|
|
|
SetShrapnelTimer:
|
|
{
|
|
LDA.b #$40 : STA $0DF0, Y
|
|
|
|
JSL GetRandomInt ; replaced code
|
|
|
|
RTL
|
|
}
|
|
|
|
; ==============================================================================
|
|
|
|
CheckIfActive:
|
|
{
|
|
SEC
|
|
|
|
;Check if sprite is active (pause menu, etc...)
|
|
LDA $10 : CMP #$0E : BEQ .inMenu
|
|
LDA $5D : CMP #$08 : BEQ .inMenu ;in medallion cut scene
|
|
CMP #$09 : BEQ .inMenu ;in medallion cut scene
|
|
CMP #$0A : BEQ .inMenu ;in medallion cut scene
|
|
|
|
CLC
|
|
.inMenu
|
|
|
|
RTL
|
|
}
|
|
|
|
; ==============================================================================
|