Add head rotation logic to KydreeokHead, housekeeping

This commit is contained in:
scawful
2024-02-23 12:10:28 -05:00
parent f87ae13f2f
commit b4fd96d8f9
5 changed files with 123 additions and 34 deletions

View File

@@ -25,17 +25,17 @@ org $008FF3
org $3D8000
LWWorldMap_Tiles:
incbin world_map/LWMapTileset.bin
incbin world_map/LwMapTileset.bin
LWWorldMap_Gfx:
incbin world_map/LWMapGfx.bin
incbin world_map/LwMapGfx.bin
org $3E8000
DWWorldMap_Tiles:
incbin world_map/DwMapTileset.bin
DWWorldMap_Gfx:
incbin world_map/DWMapGfx.bin
incbin world_map/DwMapGfx.bin
DMAOwMap:
{

View File

@@ -64,6 +64,11 @@ Sprite_Kydreeok_Prep:
JSR SpawnLeftHead
JSR SpawnRightHead
STZ.w Neck1_OffsetX
STZ.w Neck1_OffsetY
STZ.w Neck2_OffsetX
STZ.w Neck2_OffsetY
PLB
RTL
}

View File

@@ -90,23 +90,31 @@ Sprite_KydreeokHead_Main:
LDA.w tableSpeed, Y : STA.w SprYSpeed, X
; LDA #$40 : STA.w SprTimerA, X
.noSpeedChange
JSL Sprite_Move
JSR AdjustMovementSpeed
; JSR AdjustMovementSpeed
JSR KydreeokHead_NeckControl
JSR MoveWithBody
; JSL GetRandomInt : AND #$7F : BNE .no_attack
; LDA #$CF
; JSL Sprite_SpawnDynamically
; JSL Sprite_SetSpawnedCoords
; JSL $09B020
; LDA.b #$02 : STA $0D80, Y
; LDA #$40 : STA.w SprTimerA, Y
; RTS
; .no_attack
JSR RotateHeadUsingSpeedValues
JSR RandomlyAttack
; LDA Neck_Index : TAY
; ; JSL GetRandomInt : AND #$04 : TAY
; LDA X_Coords, Y : STA Neck1_OffsetX
; ; JSL GetRandomInt : AND #$04 : TAY
; ; LDA X_Coords, Y : STA Neck2_OffsetX
; ; JSL GetRandomInt : AND #$0F : TAY
; LDA Y_Coords, Y : STA Neck1_OffsetY
; ; JSL GetRandomInt : AND #$04 : TAY
; ; LDA Y_Coords, Y : STA Neck2_OffsetY
; JSL GetRandomInt : AND #$3F : BNE .dont_increment
; INC.w Neck_Index
; .dont_increment
; CPY #15 : BNE .not_full
; LDA #0 : STA Neck_Index
; .not_full
JSR RandomlyAttack
JSL Sprite_IsToRightOfPlayer : TYA : BNE .not_right
%GotoAction(1)
@@ -132,13 +140,13 @@ Sprite_KydreeokHead_Main:
LDA.w tableSpeed, Y : STA.w SprYSpeed, X
; LDA #$40 : STA.w SprTimerA, X
.noSpeedChange
JSL Sprite_Move
JSR AdjustMovementSpeed
; JSR AdjustMovementSpeed
JSR KydreeokHead_NeckControl
JSR MoveWithBody
JSR RotateHeadUsingSpeedValues
JSR RandomlyAttack
JSL Sprite_IsToRightOfPlayer : TYA : BNE .not_right
@@ -170,6 +178,68 @@ Sprite_KydreeokHead_Main:
}
CoordinateBasedRotation:
{
LDA Neck_Index : TAY
; JSL GetRandomInt : AND #$04 : TAY
; LDA X_Coords, Y : STA Neck1_OffsetX
; JSL GetRandomInt : AND #$04 : TAY
LDA X_Coords, Y : STA Neck2_OffsetX
; JSL GetRandomInt : AND #$0F : TAY
; LDA Y_Coords, Y : STA Neck1_OffsetY
; JSL GetRandomInt : AND #$04 : TAY
LDA Y_Coords, Y : STA Neck2_OffsetY
JSL GetRandomInt : AND #$3F : BNE .dont_increment
INC.w Neck_Index
.dont_increment
CPY #15 : BNE .not_full
LDA #0 : STA Neck_Index
.not_full
RTS
}
; Table for X coordinates (based on a radius of 8)
X_Coords:
db 8, 11, 8, 3, -4, -9, -12, -9, -4, 3, 8, 11, 8, 3, -4, -9 ; X values
; Table for Y coordinates (based on a radius of 8)
Y_Coords:
db 0, -3, -8, -11, -15, -15, -11, -8, -3, 0, 3, 8, 11, 15, 15, 11 ; Y values
RotateHeadUsingSpeedValues:
{
LDY.w Neck_Index
LDA.w SprXSpeed, X : CLC : ADC.w XSpeedSin, Y : ASL : STA.w SprXSpeed, X
LDA.w SprYSpeed, X : CLC : ADC.w YSpeedSin, Y : ASL : STA.w SprYSpeed, X
INY : CPY #$3F : BNE .not_full
LDY.b #$00
.not_full
STY.w Neck_Index
JSL Sprite_MoveLong
RTS
}
XSpeedSin:
db 0, 3, 6, 9, 12, 15, 18, 20, 23, 25
db 27, 28, 30, 31, 31, 32
YSpeedSin:
db 32, 32, 31, 31
db 30, 28, 27, 25, 23, 20, 18, 15, 12, 9
db 6, 3, 0, -3, -6, -9, -12, -15, -18, -20
db -23, -25, -27, -28, -30, -31, -31, -32, -32, -32
db -31, -31, -30, -28, -27, -25, -23, -20, -18, -15
db -12, -9, -6, -3
db 0, 3, 6, 9, 12, 15, 18, 20, 23, 25
db 27, 28, 30, 31, 31, 32, 32, 32, 31, 31
db 30, 28, 27, 25, 23, 20, 18, 15, 12, 9
db 6, 3, 0, -3, -6, -9, -12, -15, -18, -20
db -23, -25, -27, -28, -30, -31, -31, -32, -32, -32
db -31, -31, -30, -28, -27, -25, -23, -20, -18, -15
db -12, -9, -6, -3
RandomlyAttack:
{
JSL GetRandomInt : AND #$7F : BNE .no_attack
@@ -178,6 +248,7 @@ RandomlyAttack:
LDA #$CF
JSL Sprite_SpawnDynamically
JSL Sprite_SetSpawnedCoords
;JSL $09B020
LDA.b #$02 : STA $0D80, Y
LDA #$10 : STA.w SprTimerA, Y
.no_attack
@@ -281,6 +352,11 @@ KydreeokHead_NeckControl:
LDA.w SprSubtype, X : BEQ .DoNeck1
JMP .DoNeck2
.DoNeck1
; Set head pos
LDA $19EE : CLC : ADC.w Neck1_OffsetX : STA SprX, X
LDA $19EF : CLC : ADC.w Neck1_OffsetY : STA SprY, X
LDA.w SprX, X : STA.w SprMiscC, X
LDA.w SprY, X : STA.w SprMiscD, X
LDA.w SprXSpeed, X : STA $08
@@ -371,15 +447,16 @@ KydreeokHead_NeckControl:
LDA.b $08 : STA.w SprXSpeed, X
LDA.b $09 : STA.w SprYSpeed, X
; Set head pos
LDA $19EE : STA SprX, X
LDA $19EF : CLC : SBC #$10 : STA SprY, X
RTS
; =========================================================
.DoNeck2
; Set head pos
LDA $19F4 : CLC : ADC.w Neck2_OffsetX : STA SprX, X
LDA $19F5 : CLC : ADC.w Neck2_OffsetY : STA SprY, X
LDA.w SprX, X : STA.w SprMiscC, X
LDA.w SprY, X : STA.w SprMiscD, X
LDA.w SprXSpeed, X : STA $08
@@ -462,9 +539,7 @@ KydreeokHead_NeckControl:
LDA.b $08 : STA.w SprXSpeed, X
LDA.b $09 : STA.w SprYSpeed, X
; Set head pos
LDA $19F4 : STA SprX, X
LDA $19F5 : CLC : SBC #$10 : STA SprY, X
RTS
}

View File

@@ -523,16 +523,16 @@ org $09B5D6
org $09B33F
TrinexxIce_Pool:
{
.chr
db $2E
db $2E
db $2C
db $2C
.properties
db $35
db $35
db $35
db $35
.chr
db $2E
db $2E
db $2C
db $2C
.properties
db $35
db $35
db $35
db $35
}
org $09B34F

View File

@@ -12,5 +12,14 @@ MusicNoteValue: skip 2
OverworldLocationPointer: skip 2
HasGoldstar: skip 1
GoldstarOrHookshot: skip 1
Neck_Index: skip 1
Neck1_OffsetX: skip 1
Neck1_OffsetY: skip 1
Neck2_OffsetX: skip 1
Neck2_OffsetY: skip 1
Offspring1_Id: skip 1
Offspring2_Id: skip 1
Kydreeok_Id: skip 1
SomariaOrByrna: skip 1
base off