258 lines
7.8 KiB
NASM
258 lines
7.8 KiB
NASM
NewElderCode:
|
|
{
|
|
LDA.b OverworldIndex : AND.b #$3F : CMP.b #$1B : BEQ .newCodeContinue
|
|
;Restore Jump we can keep the RTL so JML
|
|
JML Sprite_16_Elder
|
|
.newCodeContinue
|
|
PHB : PHK : PLB
|
|
LDA.b #$07 : STA.w SpriteOAMProp, X ; Palette
|
|
JSR Elder_Draw
|
|
JSL Sprite_PlayerCantPassThrough
|
|
JSR Elder_Code
|
|
|
|
PLB
|
|
RTL
|
|
}
|
|
|
|
Elder_Draw:
|
|
{
|
|
LDA.b #$02 : STA.b Scrap06 : STZ.b Scrap07 ;Number of Tiles
|
|
|
|
LDA.w SpriteGFXControl, X : ASL #04
|
|
|
|
ADC.b #.animation_states : STA.b Scrap08
|
|
LDA.b #.animation_states>>8 : ADC.b #$00 : STA.b Scrap09
|
|
|
|
JSL Sprite_DrawMultiple_player_deferred
|
|
JSL Sprite_DrawShadowLong
|
|
|
|
RTS
|
|
|
|
.animation_states
|
|
;Frame0
|
|
dw 0, -9 : db $C6, $00, $00, $02
|
|
dw 0, 0 : db $C8, $00, $00, $02
|
|
;Frame1
|
|
dw 0, -8 : db $C6, $00, $00, $02
|
|
dw 0, 0 : db $CA, $40, $00, $02
|
|
}
|
|
|
|
Elder_Code:
|
|
{
|
|
TXY : LDX.b #$06
|
|
REP #$30
|
|
LDA.l GoalConditionTable, X
|
|
TAX : LDA.l $B00000, X
|
|
SEP #$30
|
|
TYX
|
|
CMP.b #$00 : BEQ .despawn ; no goal, despawn
|
|
LDA.l TurnInGoalItems : BNE +
|
|
.despawn
|
|
STZ.w SpriteAITable, X ; despawn self
|
|
RTS
|
|
+
|
|
LDA.b GameSubMode
|
|
BNE .done
|
|
LDA.b #$96
|
|
LDY.b #$01
|
|
|
|
JSL Sprite_ShowSolicitedMessageIfPlayerFacing_PreserveMessage : BCC .dont_show
|
|
LDA.b #$03 : JSL CheckConditionPass : BCC +
|
|
JSL ActivateTriforceCutscene
|
|
+
|
|
.dont_show
|
|
|
|
.done
|
|
LDA.b FrameCounter : LSR #5 : AND.b #$01 : STA.w SpriteGFXControl, X
|
|
RTS
|
|
}
|
|
|
|
;--------------------------------------------------------------------------------
|
|
; Triforce (Pedestal) Cutscene
|
|
;--------------------------------------------------------------------------------
|
|
ActivateTriforceCutscene:
|
|
; despawn other sprites
|
|
LDY.b #$0F
|
|
- LDA.w SpriteTypeTable,Y : CMP.b #$16 : BNE +
|
|
CPY.b #$00 : BEQ .next
|
|
; move Murahdahla to slot 0 for draw priority reasons
|
|
LDA.w SpriteTypeTable,Y : STA.w SpriteTypeTable
|
|
LDA.w SpritePosYLow,Y : STA.w SpritePosYLow
|
|
LDA.w SpritePosXLow,Y : STA.w SpritePosXLow
|
|
LDA.w SpritePosYHigh,Y : STA.w SpritePosYHigh
|
|
LDA.w SpritePosXHigh,Y : STA.w SpritePosXHigh
|
|
LDA.w SpriteVelocityY,Y : STA.w SpriteVelocityY
|
|
LDA.w SpriteOAMProp,Y : STA.w SpriteOAMProp
|
|
LDA.w SpriteOAMProperties,Y : STA.w SpriteOAMProperties
|
|
LDA.w SpriteControl,Y : STA.w SpriteControl
|
|
LDA.w SpriteAITable,Y : STA.w SpriteAITable
|
|
LDA.b #$02 : STA.w SpriteLayer
|
|
+ LDA.b #$00 : STA.w SpriteAITable,Y
|
|
.next
|
|
DEY : BPL -
|
|
|
|
LDA.b #$62 ; MasterSword Sprite
|
|
JSL Sprite_SpawnDynamically
|
|
|
|
; set up coords
|
|
LDA.b LinkPosX : STA.w SpritePosXLow,Y
|
|
LDA.b LinkPosX+1 : STA.w SpritePosXHigh,Y
|
|
LDA.b LinkPosY : CLC : ADC.b #$08 : STA.w SpritePosYLow,Y
|
|
LDA.b LinkPosY+1 : ADC.b #$00 : STA.w SpritePosYHigh,Y
|
|
|
|
LDA.b #$01 : STA.w SpriteMovement,Y ; our indicator this is a special cutscene sprite
|
|
INC : STA.b LinkDirection ; makes Link face downward
|
|
|
|
; reset modules
|
|
LDA.b IndoorsFlag : BEQ +
|
|
LDA.b #$07
|
|
BRA ++
|
|
+ LDA.b #$09
|
|
++ STA.b GameMode
|
|
STZ.b GameSubMode : STZ.b SubSubModule
|
|
RTL
|
|
|
|
pushpc
|
|
org $858928
|
|
MasterSword_InPedestal_DoCutscene:
|
|
org $8589B1
|
|
MasterSword_ConditionalHandleReceipt_DoReceipt:
|
|
|
|
org $8588DF
|
|
JSL MasterSword_CheckIfPulled : PLX : NOP #2
|
|
db $90 ; BCC instead of BEQ
|
|
org $85890E
|
|
JSL MasterSword_ConditionalActivateCutscene
|
|
org $85895F
|
|
JSL MasterSword_ConditionalGrabPose : NOP
|
|
org $858994
|
|
JSL MasterSword_ConditionalGrabPose : NOP
|
|
org $858D1C
|
|
JML MasterSword_SpawnPendantProp_ChangePalette
|
|
MasterSword_SpawnPendantProp_ChangePalette_return:
|
|
org $8589A3
|
|
JSL MasterSword_ConditionalHandleReceipt : NOP #2
|
|
pullpc
|
|
|
|
MasterSword_CheckIfPulled:
|
|
CPX.b #$80 : BEQ +
|
|
- CLC : RTL ; not on pedestal screen, continue with cutscene
|
|
+ LDA.l OverworldEventDataWRAM,X : AND.b #$40 ; what we wrote over
|
|
BEQ - : SEC : RTL
|
|
|
|
MasterSword_ConditionalActivateCutscene:
|
|
LDA.w SpriteMovement,X : BNE .specialCutscene
|
|
PHX
|
|
REP #$30
|
|
LDA.w SprRedrawFlag, X : BNE .doNormalPed
|
|
INC.w SprRedrawFlag, X
|
|
LDA.l PedPullGfx : BEQ .doNormalPed
|
|
LDX.w ItemStackPtr : STA.l ItemGFXStack,X
|
|
LDA.w #$BCE0>>1 : STA.l ItemTargetStack,X
|
|
TXA : INC #2 : STA.w ItemStackPtr
|
|
.doNormalPed
|
|
SEP #$30
|
|
PLX
|
|
JML Sprite_CheckDamageToPlayerSameLayerLong ; what we wrote over
|
|
.specialCutscene
|
|
LDA.b #$02 : STA.w ItemReceiptPose ; Link's 2-hands-up pose
|
|
STA.b LinkLayer ; draw Link on top
|
|
; draw Triforce piece in VRAM
|
|
LDA.w SprRedrawFlag, X : BNE .skipTransfer
|
|
INC.w SprRedrawFlag, X
|
|
PHX
|
|
REP #$30
|
|
LDA.l MurahdahlaGfx : BNE .submitRequest
|
|
LDX.w #$006A<<1 : LDA.l StandingItemGraphicsOffsets,X
|
|
.submitRequest
|
|
LDX.w ItemStackPtr : STA.l ItemGFXStack,X
|
|
LDA.w #$9CE0>>1 : STA.l ItemTargetStack,X
|
|
TXA : INC #2 : STA.w ItemStackPtr
|
|
SEP #$30
|
|
PLX
|
|
.skipTransfer
|
|
PLA : PLA : PLA : JML MasterSword_InPedestal_DoCutscene ; do cutscene
|
|
|
|
MasterSword_ConditionalGrabPose:
|
|
PHA
|
|
LDA.w SpriteMovement,X : BNE .specialCutscene
|
|
PLA
|
|
STA.w $0377 : LDA.b #$01 ; what we wrote over
|
|
RTL
|
|
.specialCutscene
|
|
PLA
|
|
LDA.b #$01
|
|
RTL
|
|
|
|
MasterSword_SpawnPendantProp_ChangePalette:
|
|
STA.w SpriteVelocityY,Y : PLX ; what we wrote over
|
|
LDA.w SpriteMovement,X : BNE .specialCutscene
|
|
LDA.l PedPullGfx : BNE .customPedGfx
|
|
LDA.l PedPullGfx+1 : BNE .customPedGfx
|
|
BRA .done
|
|
.customPedGfx
|
|
LDA.l PedPullPalette : ASL : INC : BRA .setPalette
|
|
.specialCutscene
|
|
LDA.b #$02 : STA.w SpriteLayer,Y ; change layer
|
|
LDA.l MurahdahlaGfx : BNE .customGfx
|
|
LDA.l MurahdahlaGfx+1 : BNE .customGfx
|
|
LDA.b #$08 : BRA .setPalette
|
|
.customGfx
|
|
LDA.l MurahdahlaPalette : ASL
|
|
.setPalette
|
|
STA.w SpriteOAMProp,Y ; change palette
|
|
.done
|
|
JML MasterSword_SpawnPendantProp_ChangePalette_return
|
|
|
|
MasterSword_ConditionalHandleReceipt:
|
|
LDA.w SpriteMovement,X : BNE .specialCutscene
|
|
LDX.b OverworldIndex : LDA.l OverworldEventDataWRAM,X ; what we wrote over
|
|
RTL
|
|
.specialCutscene
|
|
PLA : PLA : PEA.w MasterSword_ConditionalHandleReceipt_DoReceipt-1
|
|
LDA.b 4,S : TAX
|
|
LDY.b #$6A
|
|
RTL
|
|
|
|
pushpc
|
|
org $858AB6
|
|
MasterSword_SpawnLightWell:
|
|
org $858AD0
|
|
MasterSword_SpawnLightFountain:
|
|
org $858B62
|
|
MasterSword_SpawnLightBeam:
|
|
|
|
org $858941
|
|
JSL MasterSword_ConditionalSpawnLightWell : NOP #2
|
|
MasterSword_SpawnLightWell_return:
|
|
org $858952
|
|
JSL MasterSword_ConditionalSpawnLightFountain : NOP #2
|
|
MasterSword_SpawnLightFountain_return:
|
|
org $858B64
|
|
JSL MasterSword_ConditionalSpawnLightBeam : NOP #2
|
|
pullpc
|
|
|
|
MasterSword_ConditionalSpawnLightWell:
|
|
INC.w SpriteActivity,X ; part of what we wrote over
|
|
LDA.w SpriteMovement,X : BNE .specialCutscene
|
|
PLA : PLA : PLA : PEA.w MasterSword_SpawnLightWell_return-1
|
|
JML MasterSword_SpawnLightWell ; part of what we wrote over
|
|
.specialCutscene
|
|
RTL
|
|
|
|
MasterSword_ConditionalSpawnLightFountain:
|
|
INC.w SpriteActivity,X ; part of what we wrote over
|
|
LDA.w SpriteMovement,X : BNE .specialCutscene
|
|
PLA : PLA : PLA : PEA.w MasterSword_SpawnLightFountain_return-1
|
|
JML MasterSword_SpawnLightFountain ; part of what we wrote over
|
|
.specialCutscene
|
|
RTL
|
|
|
|
MasterSword_ConditionalSpawnLightBeam:
|
|
LDA.w SpriteMovement,X : BNE .specialCutscene
|
|
LDA.b #$62 : JSL Sprite_SpawnDynamically ; what we wrote over
|
|
RTL
|
|
.specialCutscene
|
|
LDY.b #$FF
|
|
RTL
|