mirror of
https://github.com/zeldaret/ss
synced 2026-06-21 16:16:44 -04:00
@@ -3,8 +3,8 @@ _epilog = .text:0x00000030; // type:function size:0x2C scope:global
|
||||
_unresolved = .text:0x00000060; // type:function size:0x4 scope:global
|
||||
dTgFairy_c_classInit__Fv = .text:0x00000070; // type:function size:0x4C
|
||||
createHeap__10dTgFairy_cFv = .text:0x000000C0; // type:function size:0x6C
|
||||
__ct__25dAcRef_c<13dAcObjFairy_c>Fv = .text:0x00000130; // type:function size:0x14
|
||||
__dt__25dAcRef_c<13dAcObjFairy_c>Fv = .text:0x00000150; // type:function size:0x58
|
||||
__ct__23dAcRef_c<11dAcOFairy_c>Fv = .text:0x00000130; // type:function size:0x14
|
||||
__dt__23dAcRef_c<11dAcOFairy_c>Fv = .text:0x00000150; // type:function size:0x58
|
||||
create__10dTgFairy_cFv = .text:0x000001B0; // type:function size:0x7C
|
||||
doDelete__10dTgFairy_cFv = .text:0x00000230; // type:function size:0x50
|
||||
actorExecute__10dTgFairy_cFv = .text:0x00000280; // type:function size:0x8
|
||||
|
||||
@@ -1450,7 +1450,9 @@ d/a/obj/d_a_obj_fairy.cpp:
|
||||
.text start:0x80265620 end:0x80268598 align:16
|
||||
.ctors start:0x804DB838 end:0x804DB83C
|
||||
.data start:0x80534E78 end:0x80535270
|
||||
.sdata start:0x80573A30 end:0x80573A48
|
||||
.sbss start:0x80575908 end:0x80575910
|
||||
.sdata2 start:0x8057C180 end:0x8057C238
|
||||
.bss start:0x805B4DD8 end:0x805B4FA8
|
||||
|
||||
d/a/obj/d_a_obj_tbox.cpp:
|
||||
|
||||
+177
-138
@@ -1060,7 +1060,7 @@ getParams2Lower__9dAcBase_cCFv = .text:0x8002D010; // type:function size:0xC
|
||||
findActor__9dAcBase_cFPcP9dAcBase_c = .text:0x8002D020; // type:function size:0x74
|
||||
searchActor__9dAcBase_cFP9dAcBase_c = .text:0x8002D0A0; // type:function size:0x88
|
||||
forEveryActor__9dAcBase_cFPFP9dAcBase_cP9dAcBase_c_PvP9dAcBase_c = .text:0x8002D130; // type:function size:0x5C
|
||||
getXZAngleToPlayer__9dAcBase_cFv = .text:0x8002D190; // type:function size:0x3C
|
||||
getXZAngleToPlayer__9dAcBase_cCFv = .text:0x8002D190; // type:function size:0x3C
|
||||
getDistanceToActor__9dAcBase_cFP9dAcBase_cfPf = .text:0x8002D1D0; // type:function size:0xB8
|
||||
getDistanceAndAngleToActor__9dAcBase_cFP9dAcBase_cfssPfPsPs = .text:0x8002D290; // type:function size:0x148
|
||||
isWithinPlayerRadius__9dAcBase_cCFf = .text:0x8002D3E0; // type:function size:0x5C
|
||||
@@ -2468,7 +2468,7 @@ getRidingActor__17daPlayerActBase_cFv = .text:0x8005BB50; // type:function size:
|
||||
AcNpcTke__setRefInLinkToCall = .text:0x8005BB60; // type:function size:0xC
|
||||
setObtainedItemID = .text:0x8005BB70; // type:function size:0x3C
|
||||
fn_8005BBB0 = .text:0x8005BBB0; // type:function size:0xC
|
||||
fn_8005BBC0 = .text:0x8005BBC0; // type:function size:0xC
|
||||
fairyHeal__17daPlayerActBase_cFP11dAcOFairy_c = .text:0x8005BBC0; // type:function size:0xC
|
||||
turnSoupCold = .text:0x8005BBD0; // type:function size:0x8
|
||||
addExtraHearts = .text:0x8005BBE0; // type:function size:0x74
|
||||
AcItem__healLink = .text:0x8005BC60; // type:function size:0x18
|
||||
@@ -2502,7 +2502,7 @@ isItemRestricted = .text:0x8005C4F0; // type:function size:0xE0
|
||||
fn_8005C5D0 = .text:0x8005C5D0; // type:function size:0x34
|
||||
getLinkPtr__Fv = .text:0x8005C610; // type:function size:0x8
|
||||
getShieldRegenProgressMaybe__17daPlayerActBase_cFv = .text:0x8005C620; // type:function size:0x8
|
||||
isUsingBottle__17daPlayerActBase_cFv = .text:0x8005C630; // type:function size:0x8
|
||||
isUsingBottle__17daPlayerActBase_cCFv = .text:0x8005C630; // type:function size:0x8
|
||||
isBottleOut__17daPlayerActBase_cFv = .text:0x8005C640; // type:function size:0x8
|
||||
isHealingShield__17daPlayerActBase_cFv = .text:0x8005C650; // type:function size:0x8
|
||||
isDrinkingPotion__17daPlayerActBase_cFv = .text:0x8005C660; // type:function size:0x8
|
||||
@@ -13551,7 +13551,7 @@ checkFlag__9dAcItem_cFUl = .text:0x80251B70; // type:function size:0x128
|
||||
setFlag__9dAcItem_cFl = .text:0x80251CA0; // type:function size:0xC0
|
||||
AcItem__checkFlagForItem = .text:0x80251D60; // type:function size:0x34
|
||||
AcItem__checkItemFlag = .text:0x80251DA0; // type:function size:0x48
|
||||
isItemAnyFairy = .text:0x80251DF0; // type:function size:0x50
|
||||
hasAnyFairy__9dAcItem_cFv = .text:0x80251DF0; // type:function size:0x50
|
||||
setItemflag = .text:0x80251E40; // type:function size:0x1C
|
||||
getRupeeCounter = .text:0x80251E60; // type:function size:0x8
|
||||
getRupeeCounter__9dAcItem_cFv = .text:0x80251E70; // type:function size:0x4
|
||||
@@ -14173,71 +14173,71 @@ initializeState__29sFStateID_c<14dAcBoomerang_c>CFR14dAcBoomerang_c = .text:0x80
|
||||
__sinit_\d_a_obj_boomerang_cpp = .text:0x80265110; // type:function size:0x41C
|
||||
__dt__29sFStateID_c<14dAcBoomerang_c>Fv = .text:0x80265530; // type:function size:0x58
|
||||
isSameName__29sFStateID_c<14dAcBoomerang_c>CFPCc = .text:0x80265590; // type:function size:0x88
|
||||
dAcObjFairy_c_classInit__Fv = .text:0x80265620; // type:function size:0x144
|
||||
__dt__26sFState_c<13dAcObjFairy_c>Fv = .text:0x80265770; // type:function size:0x58
|
||||
__dt__29sFStateFct_c<13dAcObjFairy_c>Fv = .text:0x802657D0; // type:function size:0x6C
|
||||
__dt__82sStateMgr_c<13dAcObjFairy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80265840; // type:function size:0xA0
|
||||
__dt__52sFStateMgr_c<13dAcObjFairy_c,20sStateMethodUsr_FI_c>Fv = .text:0x802658E0; // type:function size:0xA4
|
||||
createHeap__13dAcObjFairy_cFv = .text:0x80265990; // type:function size:0x78
|
||||
create__13dAcObjFairy_cFv = .text:0x80265A10; // type:function size:0x478
|
||||
changeState__82sStateMgr_c<13dAcObjFairy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x80265E90; // type:function size:0x10
|
||||
doDelete__13dAcObjFairy_cFv = .text:0x80265EA0; // type:function size:0x78
|
||||
actorExecute__13dAcObjFairy_cFv = .text:0x80265F20; // type:function size:0x578
|
||||
getStateID__82sStateMgr_c<13dAcObjFairy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x802664A0; // type:function size:0x10
|
||||
executeState__82sStateMgr_c<13dAcObjFairy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x802664B0; // type:function size:0x10
|
||||
draw__13dAcObjFairy_cFv = .text:0x802664C0; // type:function size:0x10C
|
||||
initializeState_Wait__13dAcObjFairy_cFv = .text:0x802665D0; // type:function size:0x64
|
||||
executeState_Wait__13dAcObjFairy_cFv = .text:0x80266640; // type:function size:0x38C
|
||||
finalizeState_Wait__13dAcObjFairy_cFv = .text:0x802669D0; // type:function size:0x4
|
||||
initializeState_Avoid__13dAcObjFairy_cFv = .text:0x802669E0; // type:function size:0x178
|
||||
executeState_Avoid__13dAcObjFairy_cFv = .text:0x80266B60; // type:function size:0xE8
|
||||
finalizeState_Avoid__13dAcObjFairy_cFv = .text:0x80266C50; // type:function size:0x10
|
||||
initializeState_PlayerAvoid__13dAcObjFairy_cFv = .text:0x80266C60; // type:function size:0x50
|
||||
executeState_PlayerAvoid__13dAcObjFairy_cFv = .text:0x80266CB0; // type:function size:0x90
|
||||
finalizeState_PlayerAvoid__13dAcObjFairy_cFv = .text:0x80266D40; // type:function size:0x10
|
||||
initializeState_CureStart__13dAcObjFairy_cFv = .text:0x80266D50; // type:function size:0xFC
|
||||
executeState_CureStart__13dAcObjFairy_cFv = .text:0x80266E50; // type:function size:0x1AC
|
||||
finalizeState_CureStart__13dAcObjFairy_cFv = .text:0x80267000; // type:function size:0x4
|
||||
initializeState_Cure__13dAcObjFairy_cFv = .text:0x80267010; // type:function size:0xA0
|
||||
executeState_Cure__13dAcObjFairy_cFv = .text:0x802670B0; // type:function size:0x88
|
||||
finalizeState_Cure__13dAcObjFairy_cFv = .text:0x80267140; // type:function size:0x4
|
||||
initializeState_CureEnd__13dAcObjFairy_cFv = .text:0x80267150; // type:function size:0x4
|
||||
executeState_CureEnd__13dAcObjFairy_cFv = .text:0x80267160; // type:function size:0x68
|
||||
finalizeState_CureEnd__13dAcObjFairy_cFv = .text:0x802671D0; // type:function size:0x4
|
||||
initializeState_CatchDemo__13dAcObjFairy_cFv = .text:0x802671E0; // type:function size:0x88
|
||||
executeState_CatchDemo__13dAcObjFairy_cFv = .text:0x80267270; // type:function size:0x28
|
||||
finalizeState_CatchDemo__13dAcObjFairy_cFv = .text:0x802672A0; // type:function size:0x18
|
||||
shouldAvoidLink__13dAcObjFairy_cCFv = .text:0x802672C0; // type:function size:0xF0
|
||||
isCuring__13dAcObjFairy_cCFv = .text:0x802673B0; // type:function size:0x10C
|
||||
canTargetWithBugNet__13dAcObjFairy_cCFv = .text:0x802674C0; // type:function size:0x74
|
||||
fn_80267540 = .text:0x80267540; // type:function size:0xA4
|
||||
fn_802675F0 = .text:0x802675F0; // type:function size:0x70
|
||||
fn_80267660 = .text:0x80267660; // type:function size:0x74
|
||||
fn_802676E0 = .text:0x802676E0; // type:function size:0x10C
|
||||
fn_802677F0 = .text:0x802677F0; // type:function size:0x144
|
||||
fn_80267940 = .text:0x80267940; // type:function size:0xB0
|
||||
fn_802679F0 = .text:0x802679F0; // type:function size:0x158
|
||||
fn_80267B50 = .text:0x80267B50; // type:function size:0x2C
|
||||
fn_80267B80 = .text:0x80267B80; // type:function size:0x6C
|
||||
fn_80267BF0 = .text:0x80267BF0; // type:function size:0x60
|
||||
__dt__13dAcObjFairy_cFv = .text:0x80267C50; // type:function size:0x124
|
||||
build__29sFStateFct_c<13dAcObjFairy_c>FRC12sStateIDIf_c = .text:0x80267D80; // type:function size:0x60
|
||||
dispose__29sFStateFct_c<13dAcObjFairy_c>FRP10sStateIf_c = .text:0x80267DE0; // type:function size:0xC
|
||||
initialize__26sFState_c<13dAcObjFairy_c>Fv = .text:0x80267DF0; // type:function size:0x1C
|
||||
execute__26sFState_c<13dAcObjFairy_c>Fv = .text:0x80267E10; // type:function size:0x1C
|
||||
finalize__26sFState_c<13dAcObjFairy_c>Fv = .text:0x80267E30; // type:function size:0x1C
|
||||
initializeState__82sStateMgr_c<13dAcObjFairy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80267E50; // type:function size:0x10
|
||||
finalizeState__82sStateMgr_c<13dAcObjFairy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80267E60; // type:function size:0x10
|
||||
refreshState__82sStateMgr_c<13dAcObjFairy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80267E70; // type:function size:0x10
|
||||
getState__82sStateMgr_c<13dAcObjFairy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x80267E80; // type:function size:0x10
|
||||
getNewStateID__82sStateMgr_c<13dAcObjFairy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x80267E90; // type:function size:0x10
|
||||
getOldStateID__82sStateMgr_c<13dAcObjFairy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x80267EA0; // type:function size:0x10
|
||||
finalizeState__28sFStateID_c<13dAcObjFairy_c>CFR13dAcObjFairy_c = .text:0x80267EB0; // type:function size:0x30
|
||||
executeState__28sFStateID_c<13dAcObjFairy_c>CFR13dAcObjFairy_c = .text:0x80267EE0; // type:function size:0x30
|
||||
initializeState__28sFStateID_c<13dAcObjFairy_c>CFR13dAcObjFairy_c = .text:0x80267F10; // type:function size:0x30
|
||||
dAcOFairy_c_classInit__Fv = .text:0x80265620; // type:function size:0x144
|
||||
__dt__24sFState_c<11dAcOFairy_c>Fv = .text:0x80265770; // type:function size:0x58 scope:weak
|
||||
__dt__27sFStateFct_c<11dAcOFairy_c>Fv = .text:0x802657D0; // type:function size:0x6C scope:weak
|
||||
__dt__80sStateMgr_c<11dAcOFairy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80265840; // type:function size:0xA0 scope:weak
|
||||
__dt__50sFStateMgr_c<11dAcOFairy_c,20sStateMethodUsr_FI_c>Fv = .text:0x802658E0; // type:function size:0xA4 scope:weak
|
||||
createHeap__11dAcOFairy_cFv = .text:0x80265990; // type:function size:0x78
|
||||
create__11dAcOFairy_cFv = .text:0x80265A10; // type:function size:0x478
|
||||
changeState__80sStateMgr_c<11dAcOFairy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x80265E90; // type:function size:0x10 scope:weak
|
||||
doDelete__11dAcOFairy_cFv = .text:0x80265EA0; // type:function size:0x78
|
||||
actorExecute__11dAcOFairy_cFv = .text:0x80265F20; // type:function size:0x578
|
||||
getStateID__80sStateMgr_c<11dAcOFairy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x802664A0; // type:function size:0x10 scope:weak
|
||||
executeState__80sStateMgr_c<11dAcOFairy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x802664B0; // type:function size:0x10 scope:weak
|
||||
draw__11dAcOFairy_cFv = .text:0x802664C0; // type:function size:0x10C
|
||||
initializeState_Wait__11dAcOFairy_cFv = .text:0x802665D0; // type:function size:0x64
|
||||
executeState_Wait__11dAcOFairy_cFv = .text:0x80266640; // type:function size:0x38C
|
||||
finalizeState_Wait__11dAcOFairy_cFv = .text:0x802669D0; // type:function size:0x4
|
||||
initializeState_Avoid__11dAcOFairy_cFv = .text:0x802669E0; // type:function size:0x178
|
||||
executeState_Avoid__11dAcOFairy_cFv = .text:0x80266B60; // type:function size:0xE8
|
||||
finalizeState_Avoid__11dAcOFairy_cFv = .text:0x80266C50; // type:function size:0x10
|
||||
initializeState_PlayerAvoid__11dAcOFairy_cFv = .text:0x80266C60; // type:function size:0x50
|
||||
executeState_PlayerAvoid__11dAcOFairy_cFv = .text:0x80266CB0; // type:function size:0x90
|
||||
finalizeState_PlayerAvoid__11dAcOFairy_cFv = .text:0x80266D40; // type:function size:0x10
|
||||
initializeState_CureStart__11dAcOFairy_cFv = .text:0x80266D50; // type:function size:0xFC
|
||||
executeState_CureStart__11dAcOFairy_cFv = .text:0x80266E50; // type:function size:0x1AC
|
||||
finalizeState_CureStart__11dAcOFairy_cFv = .text:0x80267000; // type:function size:0x4
|
||||
initializeState_Cure__11dAcOFairy_cFv = .text:0x80267010; // type:function size:0xA0
|
||||
executeState_Cure__11dAcOFairy_cFv = .text:0x802670B0; // type:function size:0x88
|
||||
finalizeState_Cure__11dAcOFairy_cFv = .text:0x80267140; // type:function size:0x4
|
||||
initializeState_CureEnd__11dAcOFairy_cFv = .text:0x80267150; // type:function size:0x4
|
||||
executeState_CureEnd__11dAcOFairy_cFv = .text:0x80267160; // type:function size:0x68
|
||||
finalizeState_CureEnd__11dAcOFairy_cFv = .text:0x802671D0; // type:function size:0x4
|
||||
initializeState_CatchDemo__11dAcOFairy_cFv = .text:0x802671E0; // type:function size:0x88
|
||||
executeState_CatchDemo__11dAcOFairy_cFv = .text:0x80267270; // type:function size:0x28
|
||||
finalizeState_CatchDemo__11dAcOFairy_cFv = .text:0x802672A0; // type:function size:0x18
|
||||
shouldAvoidBugNet__11dAcOFairy_cCFv = .text:0x802672C0; // type:function size:0xF0
|
||||
isCuring__11dAcOFairy_cCFv = .text:0x802673B0; // type:function size:0x10C
|
||||
canTargetWithBugNet__11dAcOFairy_cCFv = .text:0x802674C0; // type:function size:0x74
|
||||
setSpawnPosition__11dAcOFairy_cFRC7mVec3_c = .text:0x80267540; // type:function size:0xA4
|
||||
setPosYWaveParams__11dAcOFairy_cFv = .text:0x802675F0; // type:function size:0x70
|
||||
rndTurnSpeed__11dAcOFairy_cCFv = .text:0x80267660; // type:function size:0x74
|
||||
calcInitialSpawnPosition__11dAcOFairy_cFv = .text:0x802676E0; // type:function size:0x10C
|
||||
calcCurePosition__11dAcOFairy_cFRCfRCf = .text:0x802677F0; // type:function size:0x144
|
||||
calcPosYWave__11dAcOFairy_cFv = .text:0x80267940; // type:function size:0xB0
|
||||
executeCheckForWindOrBellows__11dAcOFairy_cFv = .text:0x802679F0; // type:function size:0x158
|
||||
randMaxSpeedY__11dAcOFairy_cCFv = .text:0x80267B50; // type:function size:0x2C
|
||||
shouldAvoidLink__11dAcOFairy_cCFv = .text:0x80267B80; // type:function size:0x6C
|
||||
isMovingAwayFromOrigY__11dAcOFairy_cCFv = .text:0x80267BF0; // type:function size:0x60
|
||||
__dt__11dAcOFairy_cFv = .text:0x80267C50; // type:function size:0x124 scope:weak
|
||||
build__27sFStateFct_c<11dAcOFairy_c>FRC12sStateIDIf_c = .text:0x80267D80; // type:function size:0x60 scope:weak
|
||||
dispose__27sFStateFct_c<11dAcOFairy_c>FRP10sStateIf_c = .text:0x80267DE0; // type:function size:0xC scope:weak
|
||||
initialize__24sFState_c<11dAcOFairy_c>Fv = .text:0x80267DF0; // type:function size:0x1C scope:weak
|
||||
execute__24sFState_c<11dAcOFairy_c>Fv = .text:0x80267E10; // type:function size:0x1C scope:weak
|
||||
finalize__24sFState_c<11dAcOFairy_c>Fv = .text:0x80267E30; // type:function size:0x1C scope:weak
|
||||
initializeState__80sStateMgr_c<11dAcOFairy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80267E50; // type:function size:0x10 scope:weak
|
||||
finalizeState__80sStateMgr_c<11dAcOFairy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80267E60; // type:function size:0x10 scope:weak
|
||||
refreshState__80sStateMgr_c<11dAcOFairy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80267E70; // type:function size:0x10 scope:weak
|
||||
getState__80sStateMgr_c<11dAcOFairy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x80267E80; // type:function size:0x10 scope:weak
|
||||
getNewStateID__80sStateMgr_c<11dAcOFairy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x80267E90; // type:function size:0x10 scope:weak
|
||||
getOldStateID__80sStateMgr_c<11dAcOFairy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x80267EA0; // type:function size:0x10 scope:weak
|
||||
finalizeState__26sFStateID_c<11dAcOFairy_c>CFR11dAcOFairy_c = .text:0x80267EB0; // type:function size:0x30 scope:weak
|
||||
executeState__26sFStateID_c<11dAcOFairy_c>CFR11dAcOFairy_c = .text:0x80267EE0; // type:function size:0x30 scope:weak
|
||||
initializeState__26sFStateID_c<11dAcOFairy_c>CFR11dAcOFairy_c = .text:0x80267F10; // type:function size:0x30 scope:weak
|
||||
__sinit_\d_a_obj_fairy_cpp = .text:0x80267F40; // type:function size:0x56C scope:local
|
||||
__dt__28sFStateID_c<13dAcObjFairy_c>Fv = .text:0x802684B0; // type:function size:0x58
|
||||
isSameName__28sFStateID_c<13dAcObjFairy_c>CFPCc = .text:0x80268510; // type:function size:0x88
|
||||
__dt__26sFStateID_c<11dAcOFairy_c>Fv = .text:0x802684B0; // type:function size:0x58 scope:weak
|
||||
isSameName__26sFStateID_c<11dAcOFairy_c>CFPCc = .text:0x80268510; // type:function size:0x88 scope:weak
|
||||
dAcTbox_c_classInit__Fv = .text:0x802685A0; // type:function size:0x30
|
||||
tryGetDowsingTargetOffset__9dAcTbox_cFiR7mVec3_c = .text:0x802685D0; // type:function size:0x68
|
||||
getDowsingTargetOffset__9dAcTbox_cFiR7mVec3_c = .text:0x80268640; // type:function size:0x4
|
||||
@@ -17279,9 +17279,9 @@ cLib__chasePosXZ = .text:0x802E0550; // type:function size:0x124
|
||||
targetAngleY__4cLibFRC7mVec3_cRC7mVec3_c = .text:0x802E0680; // type:function size:0x1C
|
||||
targetAngleX__4cLibFRC7mVec3_cRC7mVec3_c = .text:0x802E06A0; // type:function size:0x68
|
||||
cLib__offsetPos = .text:0x802E0710; // type:function size:0xD8
|
||||
fn_802E07F0 = .text:0x802E07F0; // type:function size:0x24
|
||||
easeIn__4cLibFff = .text:0x802E07F0; // type:function size:0x24
|
||||
easeOut__4cLibFff = .text:0x802E0820; // type:function size:0x34
|
||||
fn_802E0860 = .text:0x802E0860; // type:function size:0x60
|
||||
easeInOut__4cLibFff = .text:0x802E0860; // type:function size:0x60
|
||||
insertAfter__9cListMg_cFP9cListNd_cP9cListNd_c = .text:0x802E08C0; // type:function size:0x40
|
||||
remove__9cListMg_cFP9cListNd_c = .text:0x802E0900; // type:function size:0xAC
|
||||
append__9cListMg_cFP9cListNd_c = .text:0x802E09B0; // type:function size:0x30
|
||||
@@ -36091,16 +36091,48 @@ __vt__30sFStateFct_c<14dAcBoomerang_c> = .data:0x80534C40; // type:object size:0
|
||||
__vt__27sFState_c<14dAcBoomerang_c> = .data:0x80534C58; // type:object size:0x18
|
||||
__vt__18dAcBoomerangProc_c = .data:0x80534C70; // type:object size:0x1D0
|
||||
lbl_80534E40 = .data:0x80534E40; // type:object size:0x38
|
||||
g_profile_OBJ_FAIRY = .data:0x80534E78; // type:object size:0x68
|
||||
lbl_80534EE0 = .data:0x80534EE0; // type:object size:0x30
|
||||
lbl_80534F10 = .data:0x80534F10; // type:object size:0xC
|
||||
lbl_80534F1C = .data:0x80534F1C; // type:object size:0x2C
|
||||
__vt__13dAcObjFairy_c = .data:0x80534F48; // type:object size:0x80
|
||||
lbl_80534FC8 = .data:0x80534FC8; // type:object size:0x30
|
||||
lbl_80534FF8 = .data:0x80534FF8; // type:object size:0x30
|
||||
lbl_80535028 = .data:0x80535028; // type:object size:0x18
|
||||
lbl_80535040 = .data:0x80535040; // type:object size:0x1F8
|
||||
__vt__28sFStateID_c<13dAcObjFairy_c> = .data:0x80535238; // type:object size:0x38
|
||||
g_profile_OBJ_FAIRY = .data:0x80534E78; // type:object size:0x10
|
||||
...data.0 = .data:0x80534E78; // type:label scope:local
|
||||
sSphSrc1 = .data:0x80534E88; // type:object size:0x2C scope:local
|
||||
sSphSrc2 = .data:0x80534EB4; // type:object size:0x2C scope:local
|
||||
sAttnTarget = .data:0x80534EE0; // type:object size:0x30 scope:local
|
||||
@27475 = .data:0x80534F10; // type:object size:0x9 scope:local data:string
|
||||
@27476 = .data:0x80534F1C; // type:object size:0xD scope:local data:string
|
||||
@27563 = .data:0x80534F2C; // type:object size:0x19 scope:local data:string
|
||||
__vt__11dAcOFairy_c = .data:0x80534F48; // type:object size:0x80
|
||||
__vt__50sFStateMgr_c<11dAcOFairy_c,20sStateMethodUsr_FI_c> = .data:0x80534FC8; // type:object size:0x30 scope:weak
|
||||
__vt__80sStateMgr_c<11dAcOFairy_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x80534FF8; // type:object size:0x30 scope:weak
|
||||
__vt__27sFStateFct_c<11dAcOFairy_c> = .data:0x80535028; // type:object size:0x14 scope:weak
|
||||
__vt__24sFState_c<11dAcOFairy_c> = .data:0x80535040; // type:object size:0x18 scope:weak
|
||||
@28233 = .data:0x80535064; // type:object size:0xC scope:local
|
||||
@28234 = .data:0x80535070; // type:object size:0xC scope:local
|
||||
@28235 = .data:0x8053507C; // type:object size:0xC scope:local
|
||||
@28236 = .data:0x80535088; // type:object size:0xC scope:local
|
||||
@28237 = .data:0x80535094; // type:object size:0xC scope:local
|
||||
@28238 = .data:0x805350A0; // type:object size:0xC scope:local
|
||||
@28239 = .data:0x805350AC; // type:object size:0xC scope:local
|
||||
@28240 = .data:0x805350B8; // type:object size:0xC scope:local
|
||||
@28241 = .data:0x805350C4; // type:object size:0xC scope:local
|
||||
@28242 = .data:0x805350D0; // type:object size:0xC scope:local
|
||||
@28243 = .data:0x805350DC; // type:object size:0xC scope:local
|
||||
@28244 = .data:0x805350E8; // type:object size:0xC scope:local
|
||||
@28245 = .data:0x805350F4; // type:object size:0xC scope:local
|
||||
@28246 = .data:0x80535100; // type:object size:0xC scope:local
|
||||
@28247 = .data:0x8053510C; // type:object size:0xC scope:local
|
||||
@28248 = .data:0x80535118; // type:object size:0xC scope:local
|
||||
@28249 = .data:0x80535124; // type:object size:0xC scope:local
|
||||
@28250 = .data:0x80535130; // type:object size:0xC scope:local
|
||||
@28251 = .data:0x8053513C; // type:object size:0xC scope:local
|
||||
@28252 = .data:0x80535148; // type:object size:0xC scope:local
|
||||
@28253 = .data:0x80535154; // type:object size:0xC scope:local
|
||||
@28255 = .data:0x80535160; // type:object size:0x1A scope:local data:string
|
||||
@28256 = .data:0x8053517C; // type:object size:0x1B scope:local data:string
|
||||
@28257 = .data:0x80535198; // type:object size:0x21 scope:local data:string
|
||||
@28258 = .data:0x805351BC; // type:object size:0x1F scope:local data:string
|
||||
@28259 = .data:0x805351DC; // type:object size:0x1A scope:local data:string
|
||||
@28260 = .data:0x805351F8; // type:object size:0x1D scope:local data:string
|
||||
@28261 = .data:0x80535218; // type:object size:0x1F scope:local data:string
|
||||
__vt__26sFStateID_c<11dAcOFairy_c> = .data:0x80535238; // type:object size:0x34 scope:weak
|
||||
g_profile_TBOX = .data:0x80535270; // type:object size:0x10
|
||||
lbl_80535280 = .data:0x80535280; // type:object size:0xC data:string
|
||||
lbl_8053528C = .data:0x8053528C; // type:object size:0xC
|
||||
@@ -40782,12 +40814,12 @@ lbl_80573A20 = .sdata:0x80573A20; // type:object size:0x4 data:4byte
|
||||
lbl_80573A24 = .sdata:0x80573A24; // type:object size:0x4 data:4byte
|
||||
lbl_80573A28 = .sdata:0x80573A28; // type:object size:0x4 data:4byte
|
||||
lbl_80573A2C = .sdata:0x80573A2C; // type:object size:0x4 data:4byte
|
||||
lbl_80573A30 = .sdata:0x80573A30; // type:object size:0x4 align:4 data:float
|
||||
lbl_80573A34 = .sdata:0x80573A34; // type:object size:0x4
|
||||
lbl_80573A38 = .sdata:0x80573A38; // type:object size:0x4
|
||||
lbl_80573A3C = .sdata:0x80573A3C; // type:object size:0x4
|
||||
lbl_80573A40 = .sdata:0x80573A40; // type:object size:0x4
|
||||
lbl_80573A44 = .sdata:0x80573A44; // type:object size:0x4 data:4byte
|
||||
@26080 = .sdata:0x80573A30; // type:object size:0x4 scope:local align:4 data:float
|
||||
@26123 = .sdata:0x80573A34; // type:object size:0x4 scope:local
|
||||
@26124 = .sdata:0x80573A38; // type:object size:0x4 scope:local
|
||||
@26150 = .sdata:0x80573A3C; // type:object size:0x4 scope:local
|
||||
@26167 = .sdata:0x80573A40; // type:object size:0x4 scope:local
|
||||
@26240 = .sdata:0x80573A44; // type:object size:0x4 scope:local data:4byte
|
||||
lbl_80573A48 = .sdata:0x80573A48; // type:object size:0x8
|
||||
lbl_80573A50 = .sdata:0x80573A50; // type:object size:0x4
|
||||
lbl_80573A54 = .sdata:0x80573A54; // type:object size:0x4
|
||||
@@ -42135,7 +42167,7 @@ lbl_805758F0 = .sbss:0x805758F0; // type:object size:0x2 data:2byte
|
||||
lbl_805758F4 = .sbss:0x805758F4; // type:object size:0x1 data:byte
|
||||
lbl_805758F8 = .sbss:0x805758F8; // type:object size:0x8 data:byte
|
||||
lbl_80575900 = .sbss:0x80575900; // type:object size:0x8 data:byte
|
||||
@GUARD@draw__13dAcObjFairy_cFv@rot = .sbss:0x80575908; // type:object size:0x8 data:byte
|
||||
@GUARD@draw__11dAcOFairy_cFv@rot = .sbss:0x80575908; // type:object size:0x1 scope:local data:byte
|
||||
sTboxActorList__9dAcTbox_c = .sbss:0x80575910; // type:object size:0x8 data:4byte
|
||||
sCurrentObtainingItemOarcName = .sbss:0x80575918; // type:object size:0x4 data:4byte
|
||||
@GUARD@create__9dAcTbox_cFv@s1 = .sbss:0x8057591C; // type:object size:0x1 data:byte
|
||||
@@ -47798,48 +47830,48 @@ lbl_8057C170 = .sdata2:0x8057C170; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C174 = .sdata2:0x8057C174; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C178 = .sdata2:0x8057C178; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C17C = .sdata2:0x8057C17C; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C180 = .sdata2:0x8057C180; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C184 = .sdata2:0x8057C184; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C188 = .sdata2:0x8057C188; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C18C = .sdata2:0x8057C18C; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C190 = .sdata2:0x8057C190; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C194 = .sdata2:0x8057C194; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C198 = .sdata2:0x8057C198; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C19C = .sdata2:0x8057C19C; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C1A0 = .sdata2:0x8057C1A0; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C1A4 = .sdata2:0x8057C1A4; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C1A8 = .sdata2:0x8057C1A8; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C1B0 = .sdata2:0x8057C1B0; // type:object size:0x8 align:8 data:double
|
||||
lbl_8057C1B8 = .sdata2:0x8057C1B8; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C1BC = .sdata2:0x8057C1BC; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C1C0 = .sdata2:0x8057C1C0; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C1C8 = .sdata2:0x8057C1C8; // type:object size:0x8 align:8 data:double
|
||||
lbl_8057C1D0 = .sdata2:0x8057C1D0; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C1D4 = .sdata2:0x8057C1D4; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C1D8 = .sdata2:0x8057C1D8; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C1DC = .sdata2:0x8057C1DC; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C1E0 = .sdata2:0x8057C1E0; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C1E4 = .sdata2:0x8057C1E4; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C1E8 = .sdata2:0x8057C1E8; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C1EC = .sdata2:0x8057C1EC; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C1F0 = .sdata2:0x8057C1F0; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C1F4 = .sdata2:0x8057C1F4; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C1F8 = .sdata2:0x8057C1F8; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C1FC = .sdata2:0x8057C1FC; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C200 = .sdata2:0x8057C200; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C204 = .sdata2:0x8057C204; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C208 = .sdata2:0x8057C208; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C20C = .sdata2:0x8057C20C; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C210 = .sdata2:0x8057C210; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C214 = .sdata2:0x8057C214; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C218 = .sdata2:0x8057C218; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C21C = .sdata2:0x8057C21C; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C220 = .sdata2:0x8057C220; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C224 = .sdata2:0x8057C224; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C228 = .sdata2:0x8057C228; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C22C = .sdata2:0x8057C22C; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C230 = .sdata2:0x8057C230; // type:object size:0x4 align:4 data:float
|
||||
lbl_8057C234 = .sdata2:0x8057C234; // type:object size:0x4 align:4 data:float
|
||||
@27564 = .sdata2:0x8057C180; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27565 = .sdata2:0x8057C184; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27566 = .sdata2:0x8057C188; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27567 = .sdata2:0x8057C18C; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27568 = .sdata2:0x8057C190; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27569 = .sdata2:0x8057C194; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27570 = .sdata2:0x8057C198; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27571 = .sdata2:0x8057C19C; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27572 = .sdata2:0x8057C1A0; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27573 = .sdata2:0x8057C1A4; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27574 = .sdata2:0x8057C1A8; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27577 = .sdata2:0x8057C1B0; // type:object size:0x8 scope:local align:8 data:double
|
||||
@27682 = .sdata2:0x8057C1B8; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27683 = .sdata2:0x8057C1BC; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27684 = .sdata2:0x8057C1C0; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27687 = .sdata2:0x8057C1C8; // type:object size:0x8 scope:local align:8 data:double
|
||||
@27804 = .sdata2:0x8057C1D0; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27805 = .sdata2:0x8057C1D4; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27806 = .sdata2:0x8057C1D8; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27807 = .sdata2:0x8057C1DC; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27808 = .sdata2:0x8057C1E0; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27809 = .sdata2:0x8057C1E4; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27810 = .sdata2:0x8057C1E8; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27811 = .sdata2:0x8057C1EC; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27812 = .sdata2:0x8057C1F0; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27813 = .sdata2:0x8057C1F4; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27814 = .sdata2:0x8057C1F8; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27815 = .sdata2:0x8057C1FC; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27846 = .sdata2:0x8057C200; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27921 = .sdata2:0x8057C204; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27945 = .sdata2:0x8057C208; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27946 = .sdata2:0x8057C20C; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27947 = .sdata2:0x8057C210; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27948 = .sdata2:0x8057C214; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27959 = .sdata2:0x8057C218; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27960 = .sdata2:0x8057C21C; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27969 = .sdata2:0x8057C220; // type:object size:0x4 scope:local align:4 data:float
|
||||
@27975 = .sdata2:0x8057C224; // type:object size:0x4 scope:local align:4 data:float
|
||||
@28054 = .sdata2:0x8057C228; // type:object size:0x4 scope:local align:4 data:float
|
||||
@28055 = .sdata2:0x8057C22C; // type:object size:0x4 scope:local align:4 data:float
|
||||
@28158 = .sdata2:0x8057C230; // type:object size:0x4 scope:local align:4 data:float
|
||||
@28159 = .sdata2:0x8057C234; // type:object size:0x4 scope:local align:4 data:float
|
||||
lbl_8057C238 = .sdata2:0x8057C238; // type:object size:0x4 data:4byte
|
||||
lbl_8057C23C = .sdata2:0x8057C23C; // type:object size:0x4 data:4byte
|
||||
lbl_8057C240 = .sdata2:0x8057C240; // type:object size:0x4 data:4byte
|
||||
@@ -51876,15 +51908,22 @@ StateID_Move__14dAcBoomerang_c = .bss:0x805B4CD8; // type:object size:0x40 data:
|
||||
StateID_MoveCancelWait__14dAcBoomerang_c = .bss:0x805B4D18; // type:object size:0x40 data:4byte
|
||||
StateID_ReturnWait__14dAcBoomerang_c = .bss:0x805B4D58; // type:object size:0x40 data:4byte
|
||||
StateID_EventReturnWait__14dAcBoomerang_c = .bss:0x805B4D98; // type:object size:0x40 data:4byte
|
||||
lbl_805B4DD8 = .bss:0x805B4DD8; // type:object size:0x10
|
||||
AcFairy__STATE_WAIT = .bss:0x805B4DE8; // type:object size:0x40 data:4byte
|
||||
AcFairy__STATE_AVOID = .bss:0x805B4E28; // type:object size:0x40 data:4byte
|
||||
AcFairy__STATE_PLAYER_AVOID = .bss:0x805B4E68; // type:object size:0x40 data:4byte
|
||||
AcFairy__STATE_CURE_START = .bss:0x805B4EA8; // type:object size:0x40 data:4byte
|
||||
AcFairy__STATE_CURE = .bss:0x805B4EE8; // type:object size:0x40 data:4byte
|
||||
AcFairy__STATE_CURE_END = .bss:0x805B4F28; // type:object size:0x40 data:4byte
|
||||
StateID_CatchDemo__13dAcObjFairy_c = .bss:0x805B4F68; // type:object size:0x30 data:4byte
|
||||
@LOCAL@draw__13dAcObjFairy_cFv@rot = .bss:0x805B4F98; // type:object size:0x10 align:4 data:4byte
|
||||
@25786 = .bss:0x805B4DD8; // type:object size:0xC scope:local
|
||||
...bss.0 = .bss:0x805B4DD8; // type:label scope:local
|
||||
StateID_Wait__11dAcOFairy_c = .bss:0x805B4DE8; // type:object size:0x30 data:4byte
|
||||
@25790 = .bss:0x805B4E18; // type:object size:0xC scope:local
|
||||
StateID_Avoid__11dAcOFairy_c = .bss:0x805B4E28; // type:object size:0x30 data:4byte
|
||||
@25794 = .bss:0x805B4E58; // type:object size:0xC scope:local
|
||||
StateID_PlayerAvoid__11dAcOFairy_c = .bss:0x805B4E68; // type:object size:0x30 data:4byte
|
||||
@25798 = .bss:0x805B4E98; // type:object size:0xC scope:local
|
||||
StateID_CureStart__11dAcOFairy_c = .bss:0x805B4EA8; // type:object size:0x30 data:4byte
|
||||
@25802 = .bss:0x805B4ED8; // type:object size:0xC scope:local
|
||||
StateID_Cure__11dAcOFairy_c = .bss:0x805B4EE8; // type:object size:0x30 data:4byte
|
||||
@25806 = .bss:0x805B4F18; // type:object size:0xC scope:local
|
||||
StateID_CureEnd__11dAcOFairy_c = .bss:0x805B4F28; // type:object size:0x30 data:4byte
|
||||
@25810 = .bss:0x805B4F58; // type:object size:0xC scope:local
|
||||
StateID_CatchDemo__11dAcOFairy_c = .bss:0x805B4F68; // type:object size:0x30 data:4byte
|
||||
@LOCAL@draw__11dAcOFairy_cFv@rot = .bss:0x805B4F98; // type:object size:0x10 scope:local align:4 data:4byte
|
||||
lbl_805B4FA8 = .bss:0x805B4FA8; // type:object size:0x30 align:4 data:float
|
||||
lbl_805B4FD8 = .bss:0x805B4FD8; // type:object size:0xC align:4 data:float
|
||||
lbl_805B4FE4 = .bss:0x805B4FE4; // type:object size:0xC align:4 data:float
|
||||
|
||||
+1
-1
@@ -609,7 +609,7 @@ config.libs = [
|
||||
Object(NonMatching, "d/a/obj/d_a_obj_bomb.cpp"),
|
||||
Object(NonMatching, "d/a/obj/d_a_obj_arrow.cpp"),
|
||||
Object(NonMatching, "d/a/obj/d_a_obj_boomerang.cpp"),
|
||||
Object(NonMatching, "d/a/obj/d_a_obj_fairy.cpp"),
|
||||
Object(Matching, "d/a/obj/d_a_obj_fairy.cpp"),
|
||||
Object(NonMatching, "d/a/obj/d_a_obj_tbox.cpp"),
|
||||
Object(NonMatching, "d/a/obj/d_a_obj_time_area.cpp"),
|
||||
Object(Matching, "d/a/obj/d_a_obj_switch.cpp"),
|
||||
|
||||
@@ -13,7 +13,9 @@ f32 addCalcPosXZ(mVec3_c *src, const mVec3_c &target, f32 scale, f32 maxStep, f3
|
||||
f32 addCalcPos(mVec3_c *src, const mVec3_c &target, f32 scale, f32 maxStep, f32 minStep);
|
||||
|
||||
// made up name
|
||||
f32 easeIn(f32 value, f32 exponent);
|
||||
f32 easeOut(f32 value, f32 exponent);
|
||||
f32 easeInOut(f32 value, f32 exponent);
|
||||
|
||||
} // namespace cLib
|
||||
|
||||
|
||||
@@ -203,7 +203,7 @@ public:
|
||||
static dAcBase_c *searchActor(dAcBase_c *parent);
|
||||
// Kinda performs the code of the first param on every actor (second param is optional parent)
|
||||
static void forEveryActor(void *func(dAcBase_c *, dAcBase_c *), dAcBase_c *parent);
|
||||
mAng getXZAngleToPlayer();
|
||||
mAng getXZAngleToPlayer() const;
|
||||
// returns true if under the distThresh, False if not. the actual distance is returned in outDist
|
||||
bool getDistanceToActor(dAcBase_c *actor, f32 distThresh, f32 *outDist);
|
||||
// same concept as above
|
||||
|
||||
@@ -86,6 +86,8 @@ public:
|
||||
|
||||
static void addRupees(s32 amount);
|
||||
|
||||
static bool hasAnyFairy();
|
||||
|
||||
enum Trial_e {
|
||||
TRIAL_SKYLOFT,
|
||||
TRIAL_FARON,
|
||||
|
||||
@@ -2,15 +2,20 @@
|
||||
#define D_A_OBJ_FAIRY_H
|
||||
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/bg/d_bg_s_acch.h"
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
#include "d/d_shadow.h"
|
||||
#include "m/m3d/m_anmmdl.h"
|
||||
#include "m/m3d/m_shadow.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "m/m_mtx.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
#include "toBeSorted/d_emitter.h"
|
||||
|
||||
class dAcObjFairy_c : public dAcObjBase_c {
|
||||
class dAcOFairy_c : public dAcObjBase_c {
|
||||
public:
|
||||
dAcObjFairy_c() : mStateMgr(*this, sStateID::null) {}
|
||||
virtual ~dAcObjFairy_c() {}
|
||||
dAcOFairy_c() : field_0x330(0), mStateMgr(*this, sStateID::null) {}
|
||||
virtual ~dAcOFairy_c() {}
|
||||
|
||||
virtual bool createHeap() override;
|
||||
virtual int create() override;
|
||||
@@ -18,30 +23,82 @@ public:
|
||||
virtual int actorExecute() override;
|
||||
virtual int draw() override;
|
||||
|
||||
STATE_FUNC_DECLARE(dAcObjFairy_c, Wait);
|
||||
STATE_FUNC_DECLARE(dAcObjFairy_c, Avoid);
|
||||
STATE_FUNC_DECLARE(dAcObjFairy_c, PlayerAvoid);
|
||||
STATE_FUNC_DECLARE(dAcObjFairy_c, CureStart);
|
||||
STATE_FUNC_DECLARE(dAcObjFairy_c, Cure);
|
||||
STATE_FUNC_DECLARE(dAcObjFairy_c, CureEnd);
|
||||
STATE_FUNC_DECLARE(dAcObjFairy_c, CatchDemo);
|
||||
STATE_FUNC_DECLARE(dAcOFairy_c, Wait);
|
||||
STATE_FUNC_DECLARE(dAcOFairy_c, Avoid);
|
||||
STATE_FUNC_DECLARE(dAcOFairy_c, PlayerAvoid);
|
||||
STATE_FUNC_DECLARE(dAcOFairy_c, CureStart);
|
||||
STATE_FUNC_DECLARE(dAcOFairy_c, Cure);
|
||||
STATE_FUNC_DECLARE(dAcOFairy_c, CureEnd);
|
||||
STATE_FUNC_DECLARE(dAcOFairy_c, CatchDemo);
|
||||
|
||||
private:
|
||||
bool shouldAvoidLink() const;
|
||||
enum SpawnType_e {
|
||||
SPAWN_0,
|
||||
SPAWN_1,
|
||||
/** The player released the fairy from a bottle or the bug net */
|
||||
SPAWN_MANUAL_RELEASE,
|
||||
/** The previously bottled fairy saves the player from death */
|
||||
SPAWN_AUTO_RELEASE,
|
||||
};
|
||||
|
||||
bool shouldAvoidBugNet() const;
|
||||
bool isCuring() const;
|
||||
bool canTargetWithBugNet() const;
|
||||
bool shouldAvoidLink() const;
|
||||
bool isMovingAwayFromOrigY() const;
|
||||
|
||||
/* 0x330 */ UNKWORD field_0x330;
|
||||
mVec3_c calcInitialSpawnPosition();
|
||||
void setSpawnPosition(const mVec3_c &);
|
||||
|
||||
void calcCurePosition(const f32 &xzOffsetTarget, const f32 &yOffsetTarget);
|
||||
bool calcPosYWave();
|
||||
void setPosYWaveParams();
|
||||
|
||||
void executeCheckForWindOrBellows();
|
||||
|
||||
f32 randMaxSpeedY() const;
|
||||
mAng rndTurnSpeed() const;
|
||||
|
||||
/* 0x330 */ UNKWORD field_0x330; // might be a nw4r::g3d::ResFile
|
||||
/* 0x334 */ m3d::mdlAnmChr mModel;
|
||||
/* 0x39C */ m3d::mShadowCircle_c mShadow;
|
||||
/* 0x3A4 */ u8 field_0x3A4[0x4B0 - 0x3A4];
|
||||
/* 0x4B0 */ f32 field_0x4B0;
|
||||
/* 0x4B4 */ u8 field_0x4B4[0xA50 - 0x4B4];
|
||||
/* 0xA50 */ STATE_MGR_DECLARE(dAcObjFairy_c);
|
||||
/* 0xA8C */ u8 field_0xA8C[0xB89 - 0xA8C];
|
||||
/* 0xB89 */ u8 field_0xB89;
|
||||
|
||||
// TODO collision, effects
|
||||
/* 0x39C */ dShadowCircle_c mShadow;
|
||||
/* 0x3A4 */ dBgS_AcchCir mAcchCir;
|
||||
/* 0x400 */ dBgS_ObjAcch mObjAcch;
|
||||
/* 0x7B0 */ dCcD_Sph mCcSph1;
|
||||
/* 0x900 */ dCcD_Sph mCcSph2;
|
||||
/* 0xA50 */ STATE_MGR_DECLARE(dAcOFairy_c);
|
||||
/* 0xA8C */ EffectsStruct mEffects[2];
|
||||
/* 0xAF4 */ mVec3_c mOrigPosition; ///< The original position of the actor around which it is moving
|
||||
/* 0xB00 */ mVec3_c mSpawnPosition; ///< The (slightly randomized) spawn position
|
||||
/* 0xB0C */ u8 _0xB0C[0xB18 - 0xB0C];
|
||||
/* 0xB18 */ mVec3_c mCurePosition; ///< When curing the player, holds the calculated
|
||||
///< position that is applied in actorExecute
|
||||
/* 0xB24 */ mMtx_c field_0xB24;
|
||||
/* 0xB54 */ mAng mPosYWaveTime;
|
||||
/* 0xB56 */ mAng mPosYWaveSpeed;
|
||||
/* 0xB58 */ mAng mTurnSpeedY;
|
||||
/* 0xB5A */ mAng mCureAngle; ///< When curing the player, holds the angle on the
|
||||
///< circular path around the player
|
||||
/* 0xB5C */ mAng mCureAngularSpeed; ///< When curing the player, holds the speed with which
|
||||
///< the fairy is circling around the player
|
||||
/* 0xB60 */ u32 mPosYWaveAmplitude;
|
||||
/* 0xB64 */ f32 mMaxSpeedY;
|
||||
/* 0xB68 */ f32 targetSpeedY;
|
||||
/* 0xB6C */ f32 mOriginalGndHeight;
|
||||
/* 0xB70 */ f32 mCurePosXZOffset;
|
||||
/* 0xB74 */ f32 mCurePosXZOffsetTarget;
|
||||
/* 0xB78 */ f32 mCurePosYOffset;
|
||||
/* 0xB7C */ f32 mAutoReleaseProgress;
|
||||
/* 0xB80 */ u8 mSpawnType;
|
||||
/* 0xB81 */ u8 field_0xB81;
|
||||
/* 0xB82 */ u8 mPreventAvoidTimer;
|
||||
/* 0xB83 */ u8 mAvoidTimer;
|
||||
/* 0xB84 */ u8 mPreventCatchAfterSpawnTimer;
|
||||
/* 0xB85 */ bool mHasSetTurnSpeedY;
|
||||
/* 0xB86 */ bool field_0xB86;
|
||||
/* 0xB87 */ u8 _0xB87;
|
||||
/* 0xB88 */ bool field_0xB88;
|
||||
/* 0xB89 */ bool field_0xB89;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "d/d_player_base.h"
|
||||
|
||||
class dAcEnBase_c;
|
||||
class dAcOFairy_c;
|
||||
|
||||
// Does this one have a vtable?
|
||||
// Name unknown
|
||||
@@ -432,7 +433,7 @@ public:
|
||||
/* vt 0x2D4 */ virtual bool isBottleOut() {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x2D8 */ virtual bool isUsingBottle() {
|
||||
/* vt 0x2D8 */ virtual bool isUsingBottle() const {
|
||||
return false;
|
||||
}
|
||||
/* vt 0x2DC */ virtual f32 getShieldRegenProgressMaybe() {
|
||||
@@ -629,6 +630,7 @@ public:
|
||||
bool someTargetedActorCheck() const;
|
||||
static mAng fn_8005BA90();
|
||||
static mAng fn_8005BAA0();
|
||||
static void fairyHeal(dAcOFairy_c *fairy);
|
||||
static void updateCurrentSword();
|
||||
|
||||
static bool isOutOfStamina();
|
||||
|
||||
@@ -20,7 +20,7 @@ private:
|
||||
mVec3_c calcLocation(const f32 &);
|
||||
f32 calcRnd(const f32 &, const f32 &);
|
||||
|
||||
dAcRef_c<dAcObjFairy_c> *mpFairyRefs;
|
||||
dAcRef_c<dAcOFairy_c> *mpFairyRefs;
|
||||
s32 mCount;
|
||||
};
|
||||
|
||||
|
||||
@@ -56,6 +56,10 @@ struct mAng {
|
||||
mVal *= other;
|
||||
return *this;
|
||||
}
|
||||
mAng &operator*=(const f32 &other) {
|
||||
mVal *= other;
|
||||
return *this;
|
||||
}
|
||||
|
||||
static s32 abs(const mAng b) {
|
||||
return labs(b);
|
||||
|
||||
+9
-2
@@ -218,7 +218,7 @@ public:
|
||||
static mVec3_c createProjectionXZ(const mAng3_c &ang, f32 scalar);
|
||||
|
||||
inline f32 mag() const {
|
||||
return PSVECMag(*this);
|
||||
return VECMag(*this);
|
||||
}
|
||||
|
||||
f32 distance(const mVec3_c &to) const {
|
||||
@@ -259,13 +259,20 @@ public:
|
||||
f32 absXZ() const {
|
||||
return EGG::Math<f32>::sqrt(squareMagXZ());
|
||||
}
|
||||
f32 absXZTo(const mVec3_c &other) const {
|
||||
return EGG::Math<f32>::sqrt(squareDistanceToXZ(other));
|
||||
}
|
||||
s16 atan2sX_Z() const {
|
||||
return cM::atan2s(x, z);
|
||||
}
|
||||
s16 atan2sY_XZ() const {
|
||||
s16 atan2snY_XZ() const {
|
||||
return cM::atan2s(-y, absXZ());
|
||||
}
|
||||
|
||||
s16 atan2sY_XZ() const {
|
||||
return cM::atan2s(y, absXZ());
|
||||
}
|
||||
|
||||
f32 angle(const mVec3_c &other) const {
|
||||
return EGG::Vector3f::angle(other);
|
||||
}
|
||||
|
||||
@@ -53,6 +53,8 @@ enum InteractionType {
|
||||
UNK_18,
|
||||
SIT,
|
||||
UNK_20,
|
||||
|
||||
UNK_0x58 = 0x58,
|
||||
};
|
||||
|
||||
class AttentionInfo {
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
SPECIAL_ACTOR_PROFILE(T_FAIRY, dTgFairy_c, fProfile::T_FAIRY, 0x0296, 0, 0);
|
||||
|
||||
bool dTgFairy_c::createHeap() {
|
||||
mpFairyRefs = new dAcRef_c<dAcObjFairy_c>[mCount]();
|
||||
mpFairyRefs = new dAcRef_c<dAcOFairy_c>[mCount]();
|
||||
return static_cast<bool>(mpFairyRefs);
|
||||
}
|
||||
|
||||
@@ -52,7 +52,7 @@ void dTgFairy_c::createFairies() {
|
||||
mVec3_c v2;
|
||||
mVec3_c v = calcLocation(f);
|
||||
v2 = v;
|
||||
dAcObjFairy_c *ac = static_cast<dAcObjFairy_c *>(
|
||||
dAcOFairy_c *ac = static_cast<dAcOFairy_c *>(
|
||||
dAcObjBase_c::create("Fairy", mRoomID, fairyParams1, &v2, nullptr, nullptr, -1, -1, mViewClipIdx)
|
||||
);
|
||||
if (ac != nullptr) {
|
||||
|
||||
@@ -381,7 +381,7 @@ void dAcBase_c::forEveryActor(void *func(dAcBase_c *, dAcBase_c *), dAcBase_c *p
|
||||
}
|
||||
}
|
||||
|
||||
mAng dAcBase_c::getXZAngleToPlayer() {
|
||||
mAng dAcBase_c::getXZAngleToPlayer() const {
|
||||
return cLib::targetAngleY(this->mPosition, dAcPy_c::LINK->mPosition);
|
||||
}
|
||||
|
||||
|
||||
+569
-54
@@ -1,58 +1,272 @@
|
||||
#include "d/a/obj/d_a_obj_fairy.h"
|
||||
|
||||
#include "c/c_lib.h"
|
||||
#include "c/c_math.h"
|
||||
#include "common.h"
|
||||
#include "d/a/d_a_base.h"
|
||||
#include "d/a/d_a_item.h"
|
||||
#include "d/a/d_a_itembase.h"
|
||||
#include "d/a/d_a_player.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/bg/d_bg_s.h"
|
||||
#include "d/col/bg/d_bg_s_acch.h"
|
||||
#include "d/col/bg/d_bg_s_gnd_chk.h"
|
||||
#include "d/col/c/c_cc_d.h"
|
||||
#include "d/col/cc/d_cc_s.h"
|
||||
#include "d/d_player_act.h"
|
||||
#include "d/d_stage_mgr.h"
|
||||
#include "d/snd/d_snd_small_effect_mgr.h"
|
||||
#include "d/snd/d_snd_wzsound.h"
|
||||
#include "f/f_base.h"
|
||||
#include "m/m3d/m_fanm.h"
|
||||
#include "m/m_mtx.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/math/math_arithmetic.h"
|
||||
#include "s/s_Math.h"
|
||||
#include "toBeSorted/attention.h"
|
||||
#include "toBeSorted/d_emitter.h"
|
||||
|
||||
SPECIAL_ACTOR_PROFILE(OBJ_FAIRY, dAcObjFairy_c, fProfile::OBJ_FAIRY, 0x166, 0, 2);
|
||||
SPECIAL_ACTOR_PROFILE(OBJ_FAIRY, dAcOFairy_c, fProfile::OBJ_FAIRY, 0x22D, 0, 0x23);
|
||||
|
||||
STATE_DEFINE(dAcObjFairy_c, Wait);
|
||||
STATE_DEFINE(dAcObjFairy_c, Avoid);
|
||||
STATE_DEFINE(dAcObjFairy_c, PlayerAvoid);
|
||||
STATE_DEFINE(dAcObjFairy_c, CureStart);
|
||||
STATE_DEFINE(dAcObjFairy_c, Cure);
|
||||
STATE_DEFINE(dAcObjFairy_c, CureEnd);
|
||||
STATE_DEFINE(dAcObjFairy_c, CatchDemo);
|
||||
static dCcD_SrcSph sSphSrc1 = {
|
||||
/* mObjInf */
|
||||
{/* mObjAt */ {0, 0, {0, 0, 0}, 0, 0, 0, 0, 0, 0},
|
||||
/* mObjTg */ {AT_TYPE_BUGNET | AT_TYPE_BELLOWS | AT_TYPE_WIND, 0x200311, {0, 0, 0x40F}, 0, 0},
|
||||
/* mObjCo */ {0}},
|
||||
/* mSphInf */
|
||||
{30.f},
|
||||
};
|
||||
|
||||
bool dAcObjFairy_c::createHeap() {
|
||||
static dCcD_SrcSph sSphSrc2 = {
|
||||
/* mObjInf */
|
||||
{/* mObjAt */ {0, 0x0, {0, 0, 0}, 0, 0, 0, 0, 0, 0},
|
||||
/* mObjTg */ {0, 0x0, {0, 0, 0x40F}, 0, 0},
|
||||
/* mObjCo */ {0x29}},
|
||||
/* mSphInf */
|
||||
{10.f},
|
||||
};
|
||||
|
||||
static InteractionTargetDef sAttnTarget = {1, 0, 0, UNK_18, 0x2, 400.0f, 0.0f, 0.0f, -400.0f, 400.0f, 50.0f, 1.0f};
|
||||
|
||||
STATE_DEFINE(dAcOFairy_c, Wait);
|
||||
STATE_DEFINE(dAcOFairy_c, Avoid);
|
||||
STATE_DEFINE(dAcOFairy_c, PlayerAvoid);
|
||||
STATE_DEFINE(dAcOFairy_c, CureStart);
|
||||
STATE_DEFINE(dAcOFairy_c, Cure);
|
||||
STATE_DEFINE(dAcOFairy_c, CureEnd);
|
||||
STATE_DEFINE(dAcOFairy_c, CatchDemo);
|
||||
|
||||
static void vecCylCalc(mVec3_c &target, const mAng &rot, f32 factor);
|
||||
|
||||
bool dAcOFairy_c::createHeap() {
|
||||
void *file = getOarcResFile("PutFairy");
|
||||
TRY_CREATE(mModel.create(file, "PutFairy", "PutFairy_fly", &mAllocator, 0x120));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int dAcObjFairy_c::create() {
|
||||
CREATE_ALLOCATOR(dAcObjFairy_c);
|
||||
int dAcOFairy_c::create() {
|
||||
CREATE_ALLOCATOR(dAcOFairy_c);
|
||||
|
||||
// TODO
|
||||
mStts.SetRank(1);
|
||||
mCcSph1.Set(sSphSrc1);
|
||||
mCcSph1.SetStts(mStts);
|
||||
mCcSph2.Set(sSphSrc2);
|
||||
mCcSph2.SetStts(mStts);
|
||||
|
||||
mObjAcch.Set(this, 1, &mAcchCir);
|
||||
mAcchCir.SetWall(20.0f, 150.0f);
|
||||
mObjAcch.SetWaterNone();
|
||||
mObjAcch.SetGndThinCellingOff();
|
||||
mAcceleration = 0.0f;
|
||||
mMaxSpeed = -40.0f;
|
||||
|
||||
setPosYWaveParams();
|
||||
int rnd = cM::rndInt(40);
|
||||
s16 tmp = mPosYWaveSpeed;
|
||||
mPosYWaveTime = tmp * rnd;
|
||||
mOrigPosition = mPosition;
|
||||
mMaxSpeedY = randMaxSpeedY();
|
||||
mSpeed = mMaxSpeedY;
|
||||
|
||||
mSpawnType = getFromParams(0, 0xF);
|
||||
field_0xB81 = getFromParams(4, 0x3);
|
||||
|
||||
setSpawnPosition(calcInitialSpawnPosition());
|
||||
|
||||
mVec3_c crrPos = mPosition;
|
||||
mObjAcch.CrrPos(*dBgS::GetInstance());
|
||||
if (mObjAcch.ChkWallHit(nullptr)) {
|
||||
mAng tmp1 = mAcchCir.GetWallAngleY() + cM::rndFX(1.0f) * 1820.0f;
|
||||
mAng tmp2 = mAngle.y;
|
||||
mVelocity.rotY(tmp1 - tmp2);
|
||||
mAngle.y = tmp1;
|
||||
|
||||
mVec3_c v(mVec3_c::Ez * (cM::rndFX(10.0f) + 150.0f));
|
||||
v.rotY(tmp1);
|
||||
|
||||
mOrigPosition += v;
|
||||
setPosition(crrPos);
|
||||
mOldPosition = mPosition;
|
||||
}
|
||||
|
||||
if (mSpawnType == SPAWN_MANUAL_RELEASE || mSpawnType == SPAWN_AUTO_RELEASE) {
|
||||
mStateMgr.changeState(StateID_CureStart);
|
||||
} else {
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
|
||||
mStateMgr.changeState(StateID_CureStart);
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
mModel.getModel().setPriorityDraw(0x7F, 0x7F);
|
||||
mBoundingBox.Set(mVec3_c(-20.0f, -200.0f, -20.0f), mVec3_c(20.0f, 20.0f, 20.0f));
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
mVec3_c pos = mPosition;
|
||||
dBgS_ObjGndChk chk;
|
||||
pos.y += 10.0f;
|
||||
if (chk.CheckPos(pos)) {
|
||||
mOriginalGndHeight = chk.GetGroundHeight();
|
||||
mOrigPosition.y = mOriginalGndHeight + 20.0f + 100.0f;
|
||||
}
|
||||
mPreventCatchAfterSpawnTimer = 45;
|
||||
|
||||
int dAcObjFairy_c::doDelete() {
|
||||
// TODO
|
||||
if (isWithinPlayerRadius(200.0f)) {
|
||||
s16 ang = mVelocity.atan2sX_Z();
|
||||
if (sLib::absDiff(getXZAngleToPlayer(), ang) < 0x2000) {
|
||||
mVelocity.rotY(0x8000);
|
||||
mAngle.y += 0x8000;
|
||||
}
|
||||
}
|
||||
|
||||
mModel.setAnm("PutFairy_fly", m3d::PLAY_MODE_4, 0.0f);
|
||||
mModel.setRate(1.0f);
|
||||
mModel.setFrame(cM::rndInt(60));
|
||||
|
||||
for (int i = 0; i < ARRAY_LENGTH(mEffects); i++) {
|
||||
mEffects[i].init(this);
|
||||
}
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcObjFairy_c::actorExecute() {
|
||||
int dAcOFairy_c::doDelete() {
|
||||
if (!isCuring()) {
|
||||
setObjectProperty(OBJ_PROP_0x200);
|
||||
for (int i = 0; i < (int)ARRAY_LENGTH(mEffects); i++) {
|
||||
mEffects[i].remove(true);
|
||||
}
|
||||
}
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOFairy_c::actorExecute() {
|
||||
if (!mStateMgr.isState(StateID_CatchDemo)) {
|
||||
if (mCcSph1.ChkTgHit() && !mStateMgr.isState(StateID_CatchDemo) && mCcSph1.ChkTgAtHitType(AT_TYPE_BUGNET)) {
|
||||
mStateMgr.changeState(StateID_CatchDemo);
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
if (!sLib::calcTimer(&mPreventCatchAfterSpawnTimer)) {
|
||||
if (mCcSph2.ChkCoHit() && !isCuring() && !dAcPy_c::GetLink()->checkCurrentAction(/* SCOOP */ 0x9E)) {
|
||||
if (!dAcItem_c::hasAnyFairy()) {
|
||||
for (int i = 0; i < (int)ARRAY_LENGTH(mEffects); i++) {
|
||||
mEffects[i].remove(true);
|
||||
}
|
||||
dAcItem_c::giveItem(ITEM_FAIRY, 0, 0);
|
||||
deleteRequest();
|
||||
return SUCCEEDED;
|
||||
}
|
||||
mStateMgr.changeState(StateID_CureStart);
|
||||
return SUCCEEDED;
|
||||
}
|
||||
}
|
||||
mPositionCopy3 = mPosition;
|
||||
mPositionCopy3.y += 20.0f;
|
||||
|
||||
if (canTargetWithBugNet()) {
|
||||
AttentionManager::GetInstance()->addTarget(*this, sAttnTarget, 0, nullptr);
|
||||
}
|
||||
|
||||
if (!isCuring()) {
|
||||
AttentionManager::GetInstance()->addCatchLikeTarget(*this, UNK_0x58, 1, 125.0f, -200.0f, 50.0f);
|
||||
|
||||
if (dAcPy_c::GetLink()->isUsingBottle()) {
|
||||
AttentionManager::GetInstance()->addTarget(*this, sAttnTarget, 0, nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
mPositionCopy2 = mPosition;
|
||||
}
|
||||
|
||||
mStateMgr.executeState();
|
||||
executeCheckForWindOrBellows();
|
||||
|
||||
// TODO
|
||||
if (!isCuring()) {
|
||||
calcVelocity();
|
||||
mPosition += mVelocity;
|
||||
mPosition += mStts.GetCcMove();
|
||||
}
|
||||
|
||||
mRotation.y = mAngle.y;
|
||||
|
||||
if (isCuring()) {
|
||||
mPosition = mCurePosition;
|
||||
}
|
||||
|
||||
if (!field_0xB89) {
|
||||
mEffects[0].createContinuousEffect(
|
||||
PARTICLE_RESOURCE_ID_MAPPING_331_, mPosition, nullptr, nullptr, nullptr, nullptr
|
||||
);
|
||||
if (!isCuring() && !dAcPy_c::GetLink()->checkActionFlagsCont(0x400000)) {
|
||||
holdSound(SE_O_FAIRY_FLY_LEV);
|
||||
}
|
||||
}
|
||||
|
||||
if (!isCuring()) {
|
||||
if (dAcPy_c::GetLink()->checkActionFlagsCont(0x400000)) {
|
||||
setObjectProperty(OBJ_PROP_0x200);
|
||||
f32 alpha = dStageMgr_c::GetInstance()->getGlobalAlpha();
|
||||
if (alpha < 255.0f) {
|
||||
mEffects[0].setGlobalAlpha(0);
|
||||
}
|
||||
} else {
|
||||
unsetObjectProperty(OBJ_PROP_0x200);
|
||||
mEffects[0].setGlobalAlpha(255);
|
||||
}
|
||||
}
|
||||
if (isCuring() && mRoomID != dAcPy_c::GetLink()->mRoomID) {
|
||||
// will delete when curing is done
|
||||
deleteRequest();
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
if (isCuring() && !field_0xB89) {
|
||||
mEffects[1].createContinuousEffect(
|
||||
PARTICLE_RESOURCE_ID_MAPPING_327_, mPosition, nullptr, nullptr, nullptr, nullptr
|
||||
);
|
||||
}
|
||||
|
||||
if (!mStateMgr.isState(StateID_CatchDemo) && !isCuring()) {
|
||||
mCcSph1.SetC(mPosition);
|
||||
dCcS::GetInstance()->Set(&mCcSph1);
|
||||
mCcSph2.SetC(mPosition);
|
||||
dCcS::GetInstance()->Set(&mCcSph2);
|
||||
}
|
||||
|
||||
updateMatrix();
|
||||
mModel.getModel().setLocalMtx(mWorldMtx);
|
||||
mModel.getModel().setScale(mVec3_c(mScale));
|
||||
mModel.play();
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcObjFairy_c::draw() {
|
||||
int dAcOFairy_c::draw() {
|
||||
if (!mStateMgr.isState(StateID_CatchDemo)) {
|
||||
drawModelType1(&mModel.getModel());
|
||||
|
||||
if (!isCuring()) {
|
||||
static mQuat_c rot(0.0f, 0.0f, 0.0f, 10.0f);
|
||||
f32 f = field_0x4B0;
|
||||
f32 f = mObjAcch.GetGroundH();
|
||||
drawShadow(mShadow, nullptr, mWorldMtx, &rot, -1, -1, -1, -1, -1, mPosition.y - f);
|
||||
}
|
||||
}
|
||||
@@ -60,69 +274,370 @@ int dAcObjFairy_c::draw() {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
void dAcObjFairy_c::initializeState_Wait() {}
|
||||
void dAcObjFairy_c::executeState_Wait() {}
|
||||
void dAcObjFairy_c::finalizeState_Wait() {}
|
||||
void dAcOFairy_c::initializeState_Wait() {
|
||||
mSpeed = mMaxSpeedY;
|
||||
mPreventAvoidTimer = cM::rndInt(60) + 120;
|
||||
mHasSetTurnSpeedY = false;
|
||||
field_0xB86 = false;
|
||||
mModel.setRate(1.0f);
|
||||
}
|
||||
void dAcOFairy_c::executeState_Wait() {
|
||||
sLib::addCalc(&mSpeed, mMaxSpeedY, 0.1f, 2.0f, 0.01f);
|
||||
|
||||
void dAcObjFairy_c::initializeState_Avoid() {}
|
||||
void dAcObjFairy_c::executeState_Avoid() {}
|
||||
void dAcObjFairy_c::finalizeState_Avoid() {
|
||||
mVelocity.y = cM::minMaxLimit(mVelocity.y, -mMaxSpeedY, mMaxSpeedY);
|
||||
|
||||
f32 diff = mOrigPosition.absXZTo(mPosition);
|
||||
f32 yDiff = mPosition.y - mOrigPosition.y;
|
||||
yDiff = nw4r::math::FAbs(yDiff);
|
||||
|
||||
if (60.0f < diff) {
|
||||
// Fairy has moved away from its original position by more than 60 units,
|
||||
// time to turn it (in a random direction) until it's facing back to the
|
||||
// original position
|
||||
if (!mHasSetTurnSpeedY) {
|
||||
mTurnSpeedY = rndTurnSpeed();
|
||||
}
|
||||
mHasSetTurnSpeedY = true;
|
||||
|
||||
mVec3_c v = mOrigPosition - mPosition;
|
||||
v.normalize();
|
||||
f32 factor = 1.0f / mVelocity.mag();
|
||||
if (v.dot(mVelocity * factor) < 0.9f) {
|
||||
mAngle.y += mTurnSpeedY;
|
||||
}
|
||||
} else {
|
||||
mHasSetTurnSpeedY = false;
|
||||
if (!sLib::calcTimer(&mPreventAvoidTimer)) {
|
||||
mAvoidTimer = cM::rndInt(30);
|
||||
mStateMgr.changeState(StateID_Avoid);
|
||||
return;
|
||||
} else if (shouldAvoidBugNet()) {
|
||||
mAvoidTimer = 30;
|
||||
mStateMgr.changeState(StateID_Avoid);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (shouldAvoidLink()) {
|
||||
mStateMgr.changeState(StateID_PlayerAvoid);
|
||||
return;
|
||||
}
|
||||
|
||||
if (40.0f < yDiff) {
|
||||
if (isMovingAwayFromOrigY()) {
|
||||
f32 absVelY = mVelocity.y;
|
||||
absVelY = nw4r::math::FAbs(absVelY);
|
||||
f32 f = absVelY < 0.2f ? 0.3f : 0.1f;
|
||||
targetSpeedY = absVelY * 0.75f + f;
|
||||
if (mPosition.y - mOrigPosition.y >= 0.0f) {
|
||||
targetSpeedY *= -1.0f;
|
||||
}
|
||||
// @bug ineffective clamping
|
||||
(void)cM::minMaxLimit(targetSpeedY, -10.0f, 10.0f);
|
||||
}
|
||||
field_0xB86 = true;
|
||||
sLib::chase(&mVelocity.y, targetSpeedY, 0.1f);
|
||||
} else {
|
||||
field_0xB86 = false;
|
||||
}
|
||||
|
||||
if (mVelocity.y < 0.0f && mPosition.y - mOriginalGndHeight <= 50.0f) {
|
||||
// slow down when approaching ground
|
||||
mVelocity.y *= 0.7f;
|
||||
}
|
||||
|
||||
calcPosYWave();
|
||||
if (mHasSetTurnSpeedY || field_0xB86) {
|
||||
unsetActorProperty(AC_PROP_0x1);
|
||||
} else {
|
||||
setActorProperty(AC_PROP_0x1);
|
||||
}
|
||||
}
|
||||
void dAcOFairy_c::finalizeState_Wait() {}
|
||||
|
||||
void dAcOFairy_c::initializeState_Avoid() {
|
||||
mTurnSpeedY = rndTurnSpeed();
|
||||
field_0xB88 = cM::rnd() <= 0.2f;
|
||||
if (field_0xB88) {
|
||||
mAvoidTimer = cM::rndInt(30) + 45;
|
||||
mVec3_c res;
|
||||
|
||||
const mVec3_c *v;
|
||||
if (mVelocity.dot(mVec3_c::Ez) >= 0.0f) {
|
||||
v = &mVec3_c::Ey;
|
||||
} else {
|
||||
// TODO - technically UB, but seems to be required
|
||||
mVec3_c tmp = -mVec3_c::Ey;
|
||||
v = &tmp;
|
||||
}
|
||||
mMtx_c mtx;
|
||||
mtx.makeRotationFromVecs(mVec3_c::Ez, *v, 1.0f);
|
||||
|
||||
MTXMultVecSR(mtx, mVelocity, res);
|
||||
|
||||
f32 f = (mAvoidTimer % 2) != 0 ? 4.0f : 2.0f;
|
||||
field_0xB24.makeRotationFromVecs(mVelocity, res, f / (mAvoidTimer - 1));
|
||||
}
|
||||
unsetActorProperty(AC_PROP_0x1);
|
||||
}
|
||||
void dAcOFairy_c::executeState_Avoid() {
|
||||
if (shouldAvoidLink()) {
|
||||
mStateMgr.changeState(StateID_PlayerAvoid);
|
||||
} else if (!sLib::calcTimer(&mAvoidTimer)) {
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
} else if (field_0xB88) {
|
||||
MTXMultVecSR(field_0xB24, mVelocity, mVelocity);
|
||||
mSpeed = mVelocity.absXZ();
|
||||
mAngle.y = mVelocity.atan2sX_Z();
|
||||
} else {
|
||||
mAngle.y += mTurnSpeedY;
|
||||
calcPosYWave();
|
||||
}
|
||||
}
|
||||
void dAcOFairy_c::finalizeState_Avoid() {
|
||||
setActorProperty(AC_PROP_0x1);
|
||||
}
|
||||
|
||||
void dAcObjFairy_c::initializeState_PlayerAvoid() {}
|
||||
void dAcObjFairy_c::executeState_PlayerAvoid() {}
|
||||
void dAcObjFairy_c::finalizeState_PlayerAvoid() {
|
||||
void dAcOFairy_c::initializeState_PlayerAvoid() {
|
||||
mTurnSpeedY *= 1.5f;
|
||||
unsetActorProperty(AC_PROP_0x1);
|
||||
}
|
||||
void dAcOFairy_c::executeState_PlayerAvoid() {
|
||||
s32 tmp = mTurnSpeedY;
|
||||
mAng ang = getXZAngleToPlayer();
|
||||
bool end = sLib::chaseAngle2(&mAngle.y.mVal, ang + mAng(0x8000), tmp);
|
||||
if (end) {
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
} else {
|
||||
calcPosYWave();
|
||||
}
|
||||
}
|
||||
void dAcOFairy_c::finalizeState_PlayerAvoid() {
|
||||
setActorProperty(AC_PROP_0x1);
|
||||
}
|
||||
|
||||
void dAcObjFairy_c::initializeState_CureStart() {}
|
||||
void dAcObjFairy_c::executeState_CureStart() {}
|
||||
void dAcObjFairy_c::finalizeState_CureStart() {}
|
||||
void dAcOFairy_c::initializeState_CureStart() {
|
||||
mCureAngularSpeed = cM::rndInt(0x100) + 0x2000;
|
||||
mCureAngle = getXZAngleToPlayer();
|
||||
// If the fairy saves the player from death, it spawns directly
|
||||
// at the player's position and circles outwards. Otherwise it directly
|
||||
// starts 50 units away.
|
||||
mCurePosXZOffset = mSpawnType == SPAWN_AUTO_RELEASE ? 0.0f : 50.0f;
|
||||
mCurePosYOffset = mSpawnType == SPAWN_AUTO_RELEASE ? 0.0f : 50.0f;
|
||||
|
||||
void dAcObjFairy_c::initializeState_Cure() {}
|
||||
void dAcObjFairy_c::executeState_Cure() {}
|
||||
void dAcObjFairy_c::finalizeState_Cure() {}
|
||||
mCcSph2.ClrCoSet();
|
||||
mCcSph2.ClrTgSet();
|
||||
mModel.setRate(12.0f);
|
||||
mSpeed = 0.0f;
|
||||
mVelocity = mVec3_c::Zero;
|
||||
dAcPy_c::fairyHeal(this);
|
||||
if (mSpawnType != SPAWN_AUTO_RELEASE) {
|
||||
dSndSmallEffectMgr_c::GetInstance()->playSound(SE_O_FAIRY_RECOVER);
|
||||
}
|
||||
}
|
||||
void dAcOFairy_c::executeState_CureStart() {
|
||||
if (mSpawnType == SPAWN_AUTO_RELEASE) {
|
||||
// Start circling away from the player up to the normal distance
|
||||
sLib::chase(&mAutoReleaseProgress, 1.0f, 0.04f);
|
||||
f32 f = cLib::easeInOut(mAutoReleaseProgress, 3.0f) * 50.0f;
|
||||
mCurePosXZOffset = f;
|
||||
mCurePosYOffset = f;
|
||||
|
||||
void dAcObjFairy_c::initializeState_CureEnd() {}
|
||||
void dAcObjFairy_c::executeState_CureEnd() {}
|
||||
void dAcObjFairy_c::finalizeState_CureEnd() {}
|
||||
const dAcPy_c *link = dAcPy_c::GetLink();
|
||||
|
||||
void dAcObjFairy_c::initializeState_CatchDemo() {}
|
||||
void dAcObjFairy_c::executeState_CatchDemo() {
|
||||
mCurePosition = link->mPosition;
|
||||
mCurePosition.y += f;
|
||||
vecCylCalc(mCurePosition, mCureAngle, f);
|
||||
|
||||
mAngle.y = getXZAngleToPlayer();
|
||||
|
||||
if (link->checkActionFlags(daPlayerActBase_c::FLG0_IN_WATER)) {
|
||||
mCurePosition.y += -150.0f;
|
||||
}
|
||||
|
||||
holdSound(SE_O_FAIRY_FLY_LEV);
|
||||
if (mAutoReleaseProgress == 1.0f) {
|
||||
mStateMgr.changeState(StateID_Cure);
|
||||
}
|
||||
} else {
|
||||
calcCurePosition(50.0f, 50.0f);
|
||||
s32 diff = sLib::absDiff(mCureAngle, 0);
|
||||
if (diff < mCureAngularSpeed && mCurePosYOffset == 50.0f) {
|
||||
mStateMgr.changeState(StateID_Cure);
|
||||
}
|
||||
}
|
||||
}
|
||||
void dAcOFairy_c::finalizeState_CureStart() {}
|
||||
|
||||
void dAcOFairy_c::initializeState_Cure() {
|
||||
mCureAngularSpeed = cM::rndInt(0x100) + 0x1111;
|
||||
mCureAngle = getXZAngleToPlayer();
|
||||
mCurePosXZOffset = 50.0f;
|
||||
mCurePosYOffset = 50.0f;
|
||||
mModel.setRate(15.0f);
|
||||
mCurePosXZOffsetTarget = cM::rnd() * 80.0f + 20.0f;
|
||||
if (mSpawnType == SPAWN_AUTO_RELEASE) {
|
||||
dSndSmallEffectMgr_c::GetInstance()->playSound(SE_O_FAIRY_RECOVER);
|
||||
}
|
||||
}
|
||||
void dAcOFairy_c::executeState_Cure() {
|
||||
calcCurePosition(mCurePosXZOffsetTarget, 160.0f);
|
||||
if (mCureAngle < mCureAngularSpeed) {
|
||||
mCurePosXZOffsetTarget = cM::rnd() * 80.0f + 20.0f;
|
||||
}
|
||||
if (mCurePosYOffset == 160.0f) {
|
||||
mStateMgr.changeState(StateID_CureEnd);
|
||||
}
|
||||
}
|
||||
void dAcOFairy_c::finalizeState_Cure() {}
|
||||
|
||||
void dAcOFairy_c::initializeState_CureEnd() {}
|
||||
void dAcOFairy_c::executeState_CureEnd() {
|
||||
calcCurePosition(mCurePosXZOffsetTarget, 180.0f);
|
||||
sLib::chase(&mScale.x, 0.0f, 0.07f);
|
||||
mScale.y = mScale.z = mScale.x;
|
||||
if (mScale.x <= 0.0f) {
|
||||
deleteRequest();
|
||||
}
|
||||
}
|
||||
void dAcOFairy_c::finalizeState_CureEnd() {}
|
||||
|
||||
void dAcOFairy_c::initializeState_CatchDemo() {
|
||||
field_0xB89 = true;
|
||||
dAcPy_c::GetLinkM()->bugNetCollectTreasure(ITEM_FAIRY);
|
||||
for (int i = 0; i < (int)ARRAY_LENGTH(mEffects); i++) {
|
||||
mEffects[i].remove(true);
|
||||
}
|
||||
setObjectProperty(OBJ_PROP_0x200);
|
||||
}
|
||||
void dAcOFairy_c::executeState_CatchDemo() {
|
||||
if (!field_0xB89) {
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
}
|
||||
void dAcObjFairy_c::finalizeState_CatchDemo() {
|
||||
field_0xB89 = 0;
|
||||
void dAcOFairy_c::finalizeState_CatchDemo() {
|
||||
field_0xB89 = false;
|
||||
unsetObjectProperty(OBJ_PROP_0x200);
|
||||
}
|
||||
|
||||
bool dAcObjFairy_c::shouldAvoidLink() const {
|
||||
// TODO shuffles
|
||||
bool dAcOFairy_c::shouldAvoidBugNet() const {
|
||||
if (dAcPy_c::LINK->isUsingBugnet()) {
|
||||
mVec3_c dist = dAcPy_c::LINK->getBugNetPos() - mPosition;
|
||||
bool isClose = false;
|
||||
if (dist.mag() < 100.0f && mVelocity.dot(dist) > 0.0f) {
|
||||
isClose = true;
|
||||
}
|
||||
|
||||
return isClose;
|
||||
return dist.mag() < 100.0f && mVelocity.dot(dist) > 0.0f;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool dAcObjFairy_c::isCuring() const {
|
||||
bool dAcOFairy_c::isCuring() const {
|
||||
return mStateMgr.isState(StateID_CureStart) || mStateMgr.isState(StateID_Cure) ||
|
||||
mStateMgr.isState(StateID_CureEnd);
|
||||
}
|
||||
|
||||
bool dAcObjFairy_c::canTargetWithBugNet() const {
|
||||
bool dAcOFairy_c::canTargetWithBugNet() const {
|
||||
bool canTarget = false;
|
||||
if (dAcPy_c::LINK != nullptr && dAcPy_c::LINK->isUsingBugnet() && !isCuring()) {
|
||||
canTarget = true;
|
||||
}
|
||||
return canTarget;
|
||||
}
|
||||
|
||||
void dAcOFairy_c::setSpawnPosition(const mVec3_c &v) {
|
||||
mSpawnPosition = v;
|
||||
mAngle.y = cLib::targetAngleY(mPosition, mSpawnPosition);
|
||||
mVec3_c tmp(0.0f, 0.0f, mSpeed);
|
||||
mWorldMtx.YrotS(mAngle.y);
|
||||
mWorldMtx.XrotM(cLib::targetAngleX(mSpawnPosition, mPosition));
|
||||
MTXMultVec(mWorldMtx, tmp, mVelocity);
|
||||
targetSpeedY = mVelocity.y;
|
||||
}
|
||||
|
||||
void dAcOFairy_c::setPosYWaveParams() {
|
||||
mPosYWaveSpeed = (cM::rndF(2.0f) + 1.0f) * 546.0f;
|
||||
mPosYWaveAmplitude = mSpeed * (cM::rndF(0.5f) + 0.5f);
|
||||
}
|
||||
|
||||
mAng dAcOFairy_c::rndTurnSpeed() const {
|
||||
mAng ret = (cM::rnd() + 1.0f) * 546.0f;
|
||||
if (cM::rndF(1.0f) < 0.5f) {
|
||||
ret *= (s32)-1;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
mVec3_c dAcOFairy_c::calcInitialSpawnPosition() {
|
||||
mVec3_c ret = mOrigPosition;
|
||||
ret.x += (cM::rndF(60.0f) * 2.0f - 60.0f);
|
||||
ret.z += (cM::rndF(60.0f) * 2.0f - 60.0f);
|
||||
|
||||
f32 tmp = (mOrigPosition - ret).absXZ();
|
||||
if (tmp > 60.0f) {
|
||||
// @bug maybe? assigning to local fixes stack order...
|
||||
mVec3_c _ignored = calcInitialSpawnPosition();
|
||||
}
|
||||
|
||||
ret.y += (cM::rndF(40.0f) * 2.0f - 40.0f);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void dAcOFairy_c::calcCurePosition(const f32 &xzOffsetTarget, const f32 &yOffsetTarget) {
|
||||
const dAcPy_c *link = dAcPy_c::GetLink();
|
||||
|
||||
mCurePosition = link->mPosition;
|
||||
mCurePosition.y += mCurePosYOffset;
|
||||
vecCylCalc(mCurePosition, mCureAngle, mCurePosXZOffset);
|
||||
|
||||
sLib::chase(&mCurePosXZOffset, xzOffsetTarget, mCurePosXZOffsetTarget / 10.0f);
|
||||
sLib::chase(&mCurePosYOffset, yOffsetTarget, 2.0f);
|
||||
mCureAngle += mCureAngularSpeed;
|
||||
|
||||
if (link->checkActionFlags(daPlayerActBase_c::FLG0_IN_WATER)) {
|
||||
mCurePosition.y += -150.0f;
|
||||
}
|
||||
mAngle.y = getXZAngleToPlayer() + mAng(-0x4000);
|
||||
}
|
||||
|
||||
bool dAcOFairy_c::calcPosYWave() {
|
||||
if (0.9f < mPosYWaveTime.cos()) {
|
||||
setPosYWaveParams();
|
||||
}
|
||||
mPosYWaveTime += mPosYWaveSpeed;
|
||||
mPosition.y += mPosYWaveAmplitude * mPosYWaveTime.sin();
|
||||
return false;
|
||||
}
|
||||
|
||||
void dAcOFairy_c::executeCheckForWindOrBellows() {
|
||||
if (mCcSph1.ChkTgHit() && mCcSph1.ChkTgAtHitType(AT_TYPE_BELLOWS | AT_TYPE_WIND) && !isCuring()) {
|
||||
mVec3_c dir = mCcSph1.GetTgAtHitDir();
|
||||
mAngle.x = dir.atan2sY_XZ();
|
||||
mAngle.y = dir.atan2sX_Z();
|
||||
|
||||
// Blow the fairy in the wind direction, but slowly
|
||||
mVelocity.x += dir.x * 0.05f;
|
||||
mVelocity.z += dir.z * 0.05f;
|
||||
mVelocity.y += dir.y * 0.01f;
|
||||
|
||||
f32 f = mMaxSpeedY * 5.0f;
|
||||
mSpeed = nw4r::ut::Min(mVelocity.absXZ(), f);
|
||||
}
|
||||
}
|
||||
|
||||
f32 dAcOFairy_c::randMaxSpeedY() const {
|
||||
return cM::rndFX(0.5f) + 3.0f;
|
||||
}
|
||||
|
||||
bool dAcOFairy_c::shouldAvoidLink() const {
|
||||
return isWithinPlayerRadius(150.0f) && sLib::absDiff(mAngle.y, getXZAngleToPlayer()) < 0x2000;
|
||||
}
|
||||
|
||||
bool dAcOFairy_c::isMovingAwayFromOrigY() const {
|
||||
return (targetSpeedY >= 0.0f && mPosition.y - mOrigPosition.y > 0.0f) ||
|
||||
(targetSpeedY <= 0.0f && mPosition.y - mOrigPosition.y < 0.0f);
|
||||
}
|
||||
|
||||
// This is a repeated calculation, it correctly flips the stack order of the casts,
|
||||
// and it avoids temporaries, so it's a pretty good inline candidate
|
||||
inline static void vecCylCalc(mVec3_c &target, const mAng &rot, f32 factor) {
|
||||
target.x += factor * rot.sin();
|
||||
target.z += factor * rot.cos();
|
||||
}
|
||||
|
||||
+1
-1
@@ -279,7 +279,7 @@ void dJntCol_c::setArrowPosAndAngle(
|
||||
getAnmMtx(i_anmMtxIdx, &mtx);
|
||||
MTXMultVecSR(mtx, *i_srcPos, dstPos);
|
||||
|
||||
i_arrowPosP->x = dstPos.atan2sY_XZ();
|
||||
i_arrowPosP->x = dstPos.atan2snY_XZ();
|
||||
i_arrowPosP->y = dstPos.atan2sX_Z();
|
||||
MTXMultVec(mtx, *param_0, *param_3);
|
||||
}
|
||||
|
||||
+3
-9
@@ -430,14 +430,8 @@ void ex_c::fn_800562B0(s32 chan, mVec3_c &mpls) {
|
||||
}
|
||||
}
|
||||
|
||||
// this looks like nw4r::ut::Clamp but the ternaries are swapped
|
||||
template <typename T>
|
||||
inline T WeirdClamp(T value, T min, T max) {
|
||||
return value < min ? min : (value > max ? max : value);
|
||||
}
|
||||
|
||||
void ex_c::fn_80056330(s32 chan) {
|
||||
f32 mult = WeirdClamp(1.f - field_0x8C.y * field_0x8C.y, 0.f, 1.f);
|
||||
f32 mult = cM::minMaxLimit(1.f - field_0x8C.y * field_0x8C.y, 0.f, 1.f);
|
||||
|
||||
mVec3_c basis;
|
||||
if (field_0x53) {
|
||||
@@ -520,9 +514,9 @@ void ex_c::fn_80056790(s32 chan) {
|
||||
v2.z = nw4r::ut::Max(v2.z, field_0x70.cos());
|
||||
|
||||
s16 b1 = cM::atan2s(-v2.x, v2.z);
|
||||
field_0x5C.x = WeirdClamp(b1 * (1.0f / field_0x70), -1.0f, 1.0f);
|
||||
field_0x5C.x = cM::minMaxLimit(b1 * (1.0f / field_0x70), -1.0f, 1.0f);
|
||||
s16 b2 = cM::atan2s(-v2.y, v2.z);
|
||||
field_0x5C.y = WeirdClamp(b2 * (1.0f / field_0x70), -f, f);
|
||||
field_0x5C.y = cM::minMaxLimit(b2 * (1.0f / field_0x70), -f, f);
|
||||
|
||||
if (field_0x51 != 0) {
|
||||
field_0x51--;
|
||||
|
||||
@@ -1286,8 +1286,8 @@ void daPlayerModelBase_c::adjustMainModelWorldMtx(PlayerMainModelNode_e nodeId,
|
||||
mAng v1 = -3277;
|
||||
mAng v2 = 910;
|
||||
if (nodeId == PLAYER_MAIN_NODE_HAND_R) {
|
||||
v1 *= -1;
|
||||
v2 *= -1;
|
||||
v1 *= (s32)-1;
|
||||
v2 *= (s32)-1;
|
||||
}
|
||||
applyWorldRotationMaybe(result, 0xec17, v1, v2, nullptr, true);
|
||||
}
|
||||
|
||||
@@ -155,8 +155,6 @@ bool DowsingTarget::hasDowsingInSlot(int slot) {
|
||||
return false;
|
||||
}
|
||||
|
||||
#define MYCLAMP(low, high, x) ((x) < (low) ? (low) : ((x) > (high) ? (high) : (x)))
|
||||
|
||||
DowsingTarget *DowsingTarget::getDowsingInfo(
|
||||
const mVec3_c &playerPosition, const mVec3_c &dowsingDirection, f32 *p3, f32 *p4, f32 *intensity, int slot
|
||||
) {
|
||||
@@ -177,13 +175,13 @@ DowsingTarget *DowsingTarget::getDowsingInfo(
|
||||
targetDir.normalize();
|
||||
|
||||
f32 dot = dwsDir.dot(targetDir);
|
||||
dot = MYCLAMP(-1.0f, 1.0f, dot);
|
||||
dot = cM::minMaxLimit(dot, -1.0f, 1.0f);
|
||||
f32 a = 1.0f - dot * dot <= 0.0f ? 0.0f : nw4r::math::FrSqrt(1.0f - dot * dot) * (1.0f - dot * dot);
|
||||
|
||||
f32 f9 = (5461 - labs(cM::atan2s(a, dot))) * (1.0f / 5461.0f);
|
||||
if (!(f9 < 0.0f)) {
|
||||
f32 val;
|
||||
f32 f10 = MYCLAMP(0.0f, 0.9f, proximity * 0.0001f) * 1.1111112f;
|
||||
f32 f10 = cM::minMaxLimit(proximity * 0.0001f, 0.0f, 0.9f) * 1.1111112f;
|
||||
if (f9 > 0.85f) {
|
||||
f9 = 0.85f;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user