mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-23 09:04:21 +00:00
Compare commits
13 commits
aa4078efc4
...
e52badbee0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e52badbee0 | ||
|
|
b30105638f | ||
|
|
0f550e5aae | ||
|
|
129691c069 | ||
|
|
9090655294 | ||
|
|
572c2d6736 | ||
|
|
b847fd4117 | ||
|
|
e815a23f5f | ||
|
|
3c9de3e36f | ||
|
|
ef2f7fdf86 | ||
|
|
24464f3b81 | ||
|
|
8f46da6630 | ||
|
|
dde1354d36 |
2
.github/workflows/compile-check.yml
vendored
2
.github/workflows/compile-check.yml
vendored
|
|
@ -67,7 +67,7 @@ jobs:
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
- name: Upload build artifact
|
- name: Upload build artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: odyssey
|
name: odyssey
|
||||||
path: build/odyssey
|
path: build/odyssey
|
||||||
|
|
|
||||||
2
.github/workflows/pr-status-label-new.yml
vendored
2
.github/workflows/pr-status-label-new.yml
vendored
|
|
@ -14,7 +14,7 @@ jobs:
|
||||||
if: github.event_name == 'pull_request_target' && github.event.action == 'opened'
|
if: github.event_name == 'pull_request_target' && github.event.action == 'opened'
|
||||||
steps:
|
steps:
|
||||||
- name: Label new PR as "status:waiting for review"
|
- name: Label new PR as "status:waiting for review"
|
||||||
uses: actions/github-script@v8
|
uses: actions/github-script@v9
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
github.rest.issues.addLabels({
|
github.rest.issues.addLabels({
|
||||||
|
|
|
||||||
4
.github/workflows/pr-status-label-review.yml
vendored
4
.github/workflows/pr-status-label-review.yml
vendored
|
|
@ -15,7 +15,7 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: 'Download artifact'
|
- name: 'Download artifact'
|
||||||
uses: actions/github-script@v8
|
uses: actions/github-script@v9
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
|
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
|
||||||
|
|
@ -44,7 +44,7 @@ jobs:
|
||||||
run: unzip "${{ runner.temp }}/artifacts/review-event.zip" -d "${{ runner.temp }}/artifacts"
|
run: unzip "${{ runner.temp }}/artifacts/review-event.zip" -d "${{ runner.temp }}/artifacts"
|
||||||
|
|
||||||
- name: Update status labels based on review
|
- name: Update status labels based on review
|
||||||
uses: actions/github-script@v8
|
uses: actions/github-script@v9
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Promote approved PRs to "ready to merge"
|
- name: Promote approved PRs to "ready to merge"
|
||||||
uses: actions/github-script@v8
|
uses: actions/github-script@v9
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const owner = context.repo.owner
|
const owner = context.repo.owner
|
||||||
|
|
|
||||||
|
|
@ -25212,15 +25212,15 @@ Enemy/Bros.o:
|
||||||
- offset: 0x0da214
|
- offset: 0x0da214
|
||||||
size: 184
|
size: 184
|
||||||
label: _ZN14BrosWeaponBaseC2EPKcPKN2al9LiveActorE
|
label: _ZN14BrosWeaponBaseC2EPKcPKN2al9LiveActorE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x0da2cc
|
- offset: 0x0da2cc
|
||||||
size: 172
|
size: 172
|
||||||
label: _ZN14BrosWeaponBase6attachEPKN4sead8Matrix34IfEERKNS0_7Vector3IfEES8_PKc
|
label: _ZN14BrosWeaponBase6attachEPKN4sead8Matrix34IfEERKNS0_7Vector3IfEES8_PKc
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x0da378
|
- offset: 0x0da378
|
||||||
size: 676
|
size: 676
|
||||||
label: _ZN14BrosWeaponBase13calcAttachMtxEPN4sead8Matrix34IfEEPKS2_RKNS0_7Vector3IfEES9_
|
label: _ZN14BrosWeaponBase13calcAttachMtxEPN4sead8Matrix34IfEEPKS2_RKNS0_7Vector3IfEES9_
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x0da61c
|
- offset: 0x0da61c
|
||||||
size: 200
|
size: 200
|
||||||
label: _ZN12BrosHackBaseC2EiPKcbS1_
|
label: _ZN12BrosHackBaseC2EiPKcbS1_
|
||||||
|
|
@ -25328,12 +25328,12 @@ Enemy/Bros.o:
|
||||||
- offset: 0x0db5dc
|
- offset: 0x0db5dc
|
||||||
size: 8
|
size: 8
|
||||||
label: _ZNK14BrosWeaponBase12getBreakStepEv
|
label: _ZNK14BrosWeaponBase12getBreakStepEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
lazy: true
|
lazy: true
|
||||||
- offset: 0x0db5e4
|
- offset: 0x0db5e4
|
||||||
size: 8
|
size: 8
|
||||||
label: _ZNK14BrosWeaponBase7isBreakEv
|
label: _ZNK14BrosWeaponBase7isBreakEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
lazy: true
|
lazy: true
|
||||||
- offset: 0x0db5ec
|
- offset: 0x0db5ec
|
||||||
size: 4
|
size: 4
|
||||||
|
|
@ -59551,45 +59551,45 @@ MapObj/BossKnuckleFix.o:
|
||||||
- offset: 0x222ee4
|
- offset: 0x222ee4
|
||||||
size: 128
|
size: 128
|
||||||
label: _ZN14BossKnuckleFixC2EPKc
|
label: _ZN14BossKnuckleFixC2EPKc
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x222f64
|
- offset: 0x222f64
|
||||||
size: 140
|
size: 140
|
||||||
label: _ZN14BossKnuckleFixC1EPKc
|
label: _ZN14BossKnuckleFixC1EPKc
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x222ff0
|
- offset: 0x222ff0
|
||||||
size: 336
|
size: 336
|
||||||
label: _ZN14BossKnuckleFix4initERKN2al13ActorInitInfoE
|
label: _ZN14BossKnuckleFix4initERKN2al13ActorInitInfoE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x223140
|
- offset: 0x223140
|
||||||
size: 208
|
size: 208
|
||||||
label: _ZN14BossKnuckleFix10receiveMsgEPKN2al9SensorMsgEPNS0_9HitSensorES5_
|
label: _ZN14BossKnuckleFix10receiveMsgEPKN2al9SensorMsgEPNS0_9HitSensorES5_
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x223210
|
- offset: 0x223210
|
||||||
size: 60
|
size: 60
|
||||||
label: _ZN14BossKnuckleFix7exeWaitEv
|
label: _ZN14BossKnuckleFix7exeWaitEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x22324c
|
- offset: 0x22324c
|
||||||
size: 88
|
size: 88
|
||||||
label: _ZN14BossKnuckleFix11exeReactionEv
|
label: _ZN14BossKnuckleFix11exeReactionEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2232a4
|
- offset: 0x2232a4
|
||||||
size: 104
|
size: 104
|
||||||
label: _ZN14BossKnuckleFix16exeReactionLargeEv
|
label: _ZN14BossKnuckleFix16exeReactionLargeEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x22330c
|
- offset: 0x22330c
|
||||||
size: 64
|
size: 64
|
||||||
label: _ZNK12_GLOBAL__N_121BossKnuckleFixNrvWait7executeEPN2al11NerveKeeperE
|
label: _ZNK12_GLOBAL__N_121BossKnuckleFixNrvWait7executeEPN2al11NerveKeeperE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
guess: true
|
guess: true
|
||||||
- offset: 0x22334c
|
- offset: 0x22334c
|
||||||
size: 108
|
size: 108
|
||||||
label: _ZNK12_GLOBAL__N_130BossKnuckleFixNrvReactionLarge7executeEPN2al11NerveKeeperE
|
label: _ZNK12_GLOBAL__N_130BossKnuckleFixNrvReactionLarge7executeEPN2al11NerveKeeperE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
guess: true
|
guess: true
|
||||||
- offset: 0x2233b8
|
- offset: 0x2233b8
|
||||||
size: 92
|
size: 92
|
||||||
label: _ZNK12_GLOBAL__N_125BossKnuckleFixNrvReaction7executeEPN2al11NerveKeeperE
|
label: _ZNK12_GLOBAL__N_125BossKnuckleFixNrvReaction7executeEPN2al11NerveKeeperE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
guess: true
|
guess: true
|
||||||
MapObj/BreakablePole.o:
|
MapObj/BreakablePole.o:
|
||||||
'.text':
|
'.text':
|
||||||
|
|
@ -66674,64 +66674,64 @@ MapObj/DoorCity.o:
|
||||||
- offset: 0x25fe38
|
- offset: 0x25fe38
|
||||||
size: 120
|
size: 120
|
||||||
label: _ZN8DoorCityC2EPKc
|
label: _ZN8DoorCityC2EPKc
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x25feb0
|
- offset: 0x25feb0
|
||||||
size: 132
|
size: 132
|
||||||
label: _ZN8DoorCityC1EPKc
|
label: _ZN8DoorCityC1EPKc
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x25ff34
|
- offset: 0x25ff34
|
||||||
size: 304
|
size: 304
|
||||||
label: _ZN8DoorCity4initERKN2al13ActorInitInfoE
|
label: _ZN8DoorCity4initERKN2al13ActorInitInfoE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x260064
|
- offset: 0x260064
|
||||||
size: 12
|
size: 12
|
||||||
label: _ZN8DoorCity13onStageSwitchEv
|
label: _ZN8DoorCity13onStageSwitchEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x260070
|
- offset: 0x260070
|
||||||
size: 4
|
size: 4
|
||||||
label: _ZN8DoorCity15listenSwitchOffEv
|
label: _ZN8DoorCity15listenSwitchOffEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x260074
|
- offset: 0x260074
|
||||||
size: 60
|
size: 60
|
||||||
label: _ZN8DoorCity11exeWaitOpenEv
|
label: _ZN8DoorCity11exeWaitOpenEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2600b0
|
- offset: 0x2600b0
|
||||||
size: 96
|
size: 96
|
||||||
label: _ZN8DoorCity7exeOpenEv
|
label: _ZN8DoorCity7exeOpenEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x260110
|
- offset: 0x260110
|
||||||
size: 88
|
size: 88
|
||||||
label: _ZN8DoorCity12exeWaitCloseEv
|
label: _ZN8DoorCity12exeWaitCloseEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x260168
|
- offset: 0x260168
|
||||||
size: 64
|
size: 64
|
||||||
label: _ZNK12_GLOBAL__N_119DoorCityNrvWaitOpen7executeEPN2al11NerveKeeperE
|
label: _ZNK12_GLOBAL__N_119DoorCityNrvWaitOpen7executeEPN2al11NerveKeeperE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
guess: true
|
guess: true
|
||||||
- offset: 0x2601a8
|
- offset: 0x2601a8
|
||||||
size: 92
|
size: 92
|
||||||
label: _ZNK12_GLOBAL__N_120DoorCityNrvWaitClose7executeEPN2al11NerveKeeperE
|
label: _ZNK12_GLOBAL__N_120DoorCityNrvWaitClose7executeEPN2al11NerveKeeperE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
guess: true
|
guess: true
|
||||||
- offset: 0x260204
|
- offset: 0x260204
|
||||||
size: 100
|
size: 100
|
||||||
label: _ZNK12_GLOBAL__N_115DoorCityNrvOpen7executeEPN2al11NerveKeeperE
|
label: _ZNK12_GLOBAL__N_115DoorCityNrvOpen7executeEPN2al11NerveKeeperE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
guess: true
|
guess: true
|
||||||
- offset: 0x260268
|
- offset: 0x260268
|
||||||
size: 28
|
size: 28
|
||||||
label: _ZNK2al10FunctorV0MIP8DoorCityMS1_FvvEEclEv
|
label: _ZNK2al10FunctorV0MIP8DoorCityMS1_FvvEEclEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
lazy: true
|
lazy: true
|
||||||
- offset: 0x260284
|
- offset: 0x260284
|
||||||
size: 76
|
size: 76
|
||||||
label: _ZNK2al10FunctorV0MIP8DoorCityMS1_FvvEE5cloneEv
|
label: _ZNK2al10FunctorV0MIP8DoorCityMS1_FvvEE5cloneEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
lazy: true
|
lazy: true
|
||||||
- offset: 0x2602d0
|
- offset: 0x2602d0
|
||||||
size: 4
|
size: 4
|
||||||
label: _ZN2al10FunctorV0MIP8DoorCityMS1_FvvEED0Ev
|
label: _ZN2al10FunctorV0MIP8DoorCityMS1_FvvEED0Ev
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
lazy: true
|
lazy: true
|
||||||
MapObj/DoorSnow.o:
|
MapObj/DoorSnow.o:
|
||||||
'.text':
|
'.text':
|
||||||
|
|
@ -76398,101 +76398,101 @@ MapObj/MoonBasementFloor.o:
|
||||||
- offset: 0x2c17dc
|
- offset: 0x2c17dc
|
||||||
size: 128
|
size: 128
|
||||||
label: _ZN17MoonBasementFloorC2EPKc
|
label: _ZN17MoonBasementFloorC2EPKc
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2c185c
|
- offset: 0x2c185c
|
||||||
size: 140
|
size: 140
|
||||||
label: _ZN17MoonBasementFloorC1EPKc
|
label: _ZN17MoonBasementFloorC1EPKc
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2c18e8
|
- offset: 0x2c18e8
|
||||||
size: 216
|
size: 216
|
||||||
label: _ZN17MoonBasementFloor4initERKN2al13ActorInitInfoE
|
label: _ZN17MoonBasementFloor4initERKN2al13ActorInitInfoE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2c19c0
|
- offset: 0x2c19c0
|
||||||
size: 132
|
size: 132
|
||||||
label: _ZN17MoonBasementFloor17startFallBySwitchEv
|
label: _ZN17MoonBasementFloor17startFallBySwitchEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2c1a44
|
- offset: 0x2c1a44
|
||||||
size: 52
|
size: 52
|
||||||
label: _ZN17MoonBasementFloor8movementEv
|
label: _ZN17MoonBasementFloor8movementEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2c1a78
|
- offset: 0x2c1a78
|
||||||
size: 148
|
size: 148
|
||||||
label: _ZN17MoonBasementFloor10receiveMsgEPKN2al9SensorMsgEPNS0_9HitSensorES5_
|
label: _ZN17MoonBasementFloor10receiveMsgEPKN2al9SensorMsgEPNS0_9HitSensorES5_
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2c1b0c
|
- offset: 0x2c1b0c
|
||||||
size: 60
|
size: 60
|
||||||
label: _ZN17MoonBasementFloor7exeWaitEv
|
label: _ZN17MoonBasementFloor7exeWaitEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2c1b48
|
- offset: 0x2c1b48
|
||||||
size: 140
|
size: 140
|
||||||
label: _ZN17MoonBasementFloor16exeFallSignStartEv
|
label: _ZN17MoonBasementFloor16exeFallSignStartEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2c1bd4
|
- offset: 0x2c1bd4
|
||||||
size: 68
|
size: 68
|
||||||
label: _ZN17MoonBasementFloor11exeFallSignEv
|
label: _ZN17MoonBasementFloor11exeFallSignEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2c1c18
|
- offset: 0x2c1c18
|
||||||
size: 84
|
size: 84
|
||||||
label: _ZN17MoonBasementFloor19exeFallSignBySwitchEv
|
label: _ZN17MoonBasementFloor19exeFallSignBySwitchEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2c1c6c
|
- offset: 0x2c1c6c
|
||||||
size: 220
|
size: 220
|
||||||
label: _ZN17MoonBasementFloor7exeFallEv
|
label: _ZN17MoonBasementFloor7exeFallEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2c1d48
|
- offset: 0x2c1d48
|
||||||
size: 64
|
size: 64
|
||||||
label: _ZNK12_GLOBAL__N_124MoonBasementFloorNrvWait7executeEPN2al11NerveKeeperE
|
label: _ZNK12_GLOBAL__N_124MoonBasementFloorNrvWait7executeEPN2al11NerveKeeperE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
guess: true
|
guess: true
|
||||||
- offset: 0x2c1d88
|
- offset: 0x2c1d88
|
||||||
size: 8
|
size: 8
|
||||||
label: _ZNK12_GLOBAL__N_133MoonBasementFloorNrvFallSignStart7executeEPN2al11NerveKeeperE
|
label: _ZNK12_GLOBAL__N_133MoonBasementFloorNrvFallSignStart7executeEPN2al11NerveKeeperE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
guess: true
|
guess: true
|
||||||
- offset: 0x2c1d90
|
- offset: 0x2c1d90
|
||||||
size: 8
|
size: 8
|
||||||
label: _ZNK12_GLOBAL__N_141MoonBasementFloorNrvFallSignStartByMeteor7executeEPN2al11NerveKeeperE
|
label: _ZNK12_GLOBAL__N_141MoonBasementFloorNrvFallSignStartByMeteor7executeEPN2al11NerveKeeperE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
guess: true
|
guess: true
|
||||||
- offset: 0x2c1d98
|
- offset: 0x2c1d98
|
||||||
size: 8
|
size: 8
|
||||||
label: _ZNK12_GLOBAL__N_141MoonBasementFloorNrvFallSignStartBySwitch7executeEPN2al11NerveKeeperE
|
label: _ZNK12_GLOBAL__N_141MoonBasementFloorNrvFallSignStartBySwitch7executeEPN2al11NerveKeeperE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
guess: true
|
guess: true
|
||||||
- offset: 0x2c1da0
|
- offset: 0x2c1da0
|
||||||
size: 88
|
size: 88
|
||||||
label: _ZNK12_GLOBAL__N_136MoonBasementFloorNrvFallSignBySwitch7executeEPN2al11NerveKeeperE
|
label: _ZNK12_GLOBAL__N_136MoonBasementFloorNrvFallSignBySwitch7executeEPN2al11NerveKeeperE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
guess: true
|
guess: true
|
||||||
- offset: 0x2c1df8
|
- offset: 0x2c1df8
|
||||||
size: 8
|
size: 8
|
||||||
label: _ZNK12_GLOBAL__N_132MoonBasementFloorNrvFallByMeteor7executeEPN2al11NerveKeeperE
|
label: _ZNK12_GLOBAL__N_132MoonBasementFloorNrvFallByMeteor7executeEPN2al11NerveKeeperE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
guess: true
|
guess: true
|
||||||
- offset: 0x2c1e00
|
- offset: 0x2c1e00
|
||||||
size: 72
|
size: 72
|
||||||
label: _ZNK12_GLOBAL__N_128MoonBasementFloorNrvFallSign7executeEPN2al11NerveKeeperE
|
label: _ZNK12_GLOBAL__N_128MoonBasementFloorNrvFallSign7executeEPN2al11NerveKeeperE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
guess: true
|
guess: true
|
||||||
- offset: 0x2c1e48
|
- offset: 0x2c1e48
|
||||||
size: 8
|
size: 8
|
||||||
label: _ZNK12_GLOBAL__N_124MoonBasementFloorNrvFall7executeEPN2al11NerveKeeperE
|
label: _ZNK12_GLOBAL__N_124MoonBasementFloorNrvFall7executeEPN2al11NerveKeeperE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
guess: true
|
guess: true
|
||||||
- offset: 0x2c1e50
|
- offset: 0x2c1e50
|
||||||
size: 28
|
size: 28
|
||||||
label: _ZNK2al10FunctorV0MIP17MoonBasementFloorMS1_FvvEEclEv
|
label: _ZNK2al10FunctorV0MIP17MoonBasementFloorMS1_FvvEEclEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
lazy: true
|
lazy: true
|
||||||
- offset: 0x2c1e6c
|
- offset: 0x2c1e6c
|
||||||
size: 76
|
size: 76
|
||||||
label: _ZNK2al10FunctorV0MIP17MoonBasementFloorMS1_FvvEE5cloneEv
|
label: _ZNK2al10FunctorV0MIP17MoonBasementFloorMS1_FvvEE5cloneEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
lazy: true
|
lazy: true
|
||||||
- offset: 0x2c1eb8
|
- offset: 0x2c1eb8
|
||||||
size: 4
|
size: 4
|
||||||
label: _ZN2al10FunctorV0MIP17MoonBasementFloorMS1_FvvEED0Ev
|
label: _ZN2al10FunctorV0MIP17MoonBasementFloorMS1_FvvEED0Ev
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
lazy: true
|
lazy: true
|
||||||
MapObj/MoonBasementGate.o:
|
MapObj/MoonBasementGate.o:
|
||||||
'.text':
|
'.text':
|
||||||
|
|
@ -82302,103 +82302,103 @@ MapObj/RocketFlower.o:
|
||||||
- offset: 0x2fd628
|
- offset: 0x2fd628
|
||||||
size: 128
|
size: 128
|
||||||
label: _ZN12RocketFlowerC2EPKc
|
label: _ZN12RocketFlowerC2EPKc
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2fd6a8
|
- offset: 0x2fd6a8
|
||||||
size: 140
|
size: 140
|
||||||
label: _ZN12RocketFlowerC1EPKc
|
label: _ZN12RocketFlowerC1EPKc
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2fd734
|
- offset: 0x2fd734
|
||||||
size: 268
|
size: 268
|
||||||
label: _ZN12RocketFlower4initERKN2al13ActorInitInfoE
|
label: _ZN12RocketFlower4initERKN2al13ActorInitInfoE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2fd840
|
- offset: 0x2fd840
|
||||||
size: 28
|
size: 28
|
||||||
label: _ZN12RocketFlower18initAfterPlacementEv
|
label: _ZN12RocketFlower18initAfterPlacementEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2fd85c
|
- offset: 0x2fd85c
|
||||||
size: 156
|
size: 156
|
||||||
label: _ZN12RocketFlower12attackSensorEPN2al9HitSensorES2_
|
label: _ZN12RocketFlower12attackSensorEPN2al9HitSensorES2_
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2fd8f8
|
- offset: 0x2fd8f8
|
||||||
size: 84
|
size: 84
|
||||||
label: _ZNK12RocketFlower13isEnableEquipEv
|
label: _ZNK12RocketFlower13isEnableEquipEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2fd94c
|
- offset: 0x2fd94c
|
||||||
size: 664
|
size: 664
|
||||||
label: _ZN12RocketFlower10receiveMsgEPKN2al9SensorMsgEPNS0_9HitSensorES5_
|
label: _ZN12RocketFlower10receiveMsgEPKN2al9SensorMsgEPNS0_9HitSensorES5_
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2fdbe4
|
- offset: 0x2fdbe4
|
||||||
size: 116
|
size: 116
|
||||||
label: _ZN12RocketFlower15terminateFollowEv
|
label: _ZN12RocketFlower15terminateFollowEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2fdc58
|
- offset: 0x2fdc58
|
||||||
size: 76
|
size: 76
|
||||||
label: _ZN12RocketFlower7exeWaitEv
|
label: _ZN12RocketFlower7exeWaitEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2fdca4
|
- offset: 0x2fdca4
|
||||||
size: 100
|
size: 100
|
||||||
label: _ZN12RocketFlower13exeWaitFollowEv
|
label: _ZN12RocketFlower13exeWaitFollowEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2fdd08
|
- offset: 0x2fdd08
|
||||||
size: 412
|
size: 412
|
||||||
label: _ZN12RocketFlower19trySyncFlyingCapPosEv
|
label: _ZN12RocketFlower19trySyncFlyingCapPosEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2fdea4
|
- offset: 0x2fdea4
|
||||||
size: 324
|
size: 324
|
||||||
label: _ZN12RocketFlower9exeFollowEv
|
label: _ZN12RocketFlower9exeFollowEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2fdfe8
|
- offset: 0x2fdfe8
|
||||||
size: 108
|
size: 108
|
||||||
label: _ZN12RocketFlower15appearFlowerSubEv
|
label: _ZN12RocketFlower15appearFlowerSubEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2fe054
|
- offset: 0x2fe054
|
||||||
size: 164
|
size: 164
|
||||||
label: _ZN12RocketFlower13exeWaitAttachEv
|
label: _ZN12RocketFlower13exeWaitAttachEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2fe0f8
|
- offset: 0x2fe0f8
|
||||||
size: 60
|
size: 60
|
||||||
label: _ZN12RocketFlower9exeAttachEv
|
label: _ZN12RocketFlower9exeAttachEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2fe134
|
- offset: 0x2fe134
|
||||||
size: 48
|
size: 48
|
||||||
label: _ZN12RocketFlower19setFollowFlowerPoseERKN4sead4QuatIfEERKNS0_7Vector3IfEE
|
label: _ZN12RocketFlower19setFollowFlowerPoseERKN4sead4QuatIfEERKNS0_7Vector3IfEE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2fe164
|
- offset: 0x2fe164
|
||||||
size: 16
|
size: 16
|
||||||
label: _ZN12RocketFlower9disappearEv
|
label: _ZN12RocketFlower9disappearEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2fe174
|
- offset: 0x2fe174
|
||||||
size: 124
|
size: 124
|
||||||
label: _ZN12RocketFlower14disappearForceEv
|
label: _ZN12RocketFlower14disappearForceEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2fe1f0
|
- offset: 0x2fe1f0
|
||||||
size: 104
|
size: 104
|
||||||
label: _ZN12RocketFlower7controlEv
|
label: _ZN12RocketFlower7controlEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x2fe258
|
- offset: 0x2fe258
|
||||||
size: 80
|
size: 80
|
||||||
label: _ZNK12_GLOBAL__N_119RocketFlowerNrvWait7executeEPN2al11NerveKeeperE
|
label: _ZNK12_GLOBAL__N_119RocketFlowerNrvWait7executeEPN2al11NerveKeeperE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
guess: true
|
guess: true
|
||||||
- offset: 0x2fe2a8
|
- offset: 0x2fe2a8
|
||||||
size: 64
|
size: 64
|
||||||
label: _ZNK12_GLOBAL__N_121RocketFlowerNrvAttach7executeEPN2al11NerveKeeperE
|
label: _ZNK12_GLOBAL__N_121RocketFlowerNrvAttach7executeEPN2al11NerveKeeperE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
guess: true
|
guess: true
|
||||||
- offset: 0x2fe2e8
|
- offset: 0x2fe2e8
|
||||||
size: 104
|
size: 104
|
||||||
label: _ZNK12_GLOBAL__N_125RocketFlowerNrvWaitFollow7executeEPN2al11NerveKeeperE
|
label: _ZNK12_GLOBAL__N_125RocketFlowerNrvWaitFollow7executeEPN2al11NerveKeeperE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
guess: true
|
guess: true
|
||||||
- offset: 0x2fe350
|
- offset: 0x2fe350
|
||||||
size: 8
|
size: 8
|
||||||
label: _ZNK12_GLOBAL__N_121RocketFlowerNrvFollow7executeEPN2al11NerveKeeperE
|
label: _ZNK12_GLOBAL__N_121RocketFlowerNrvFollow7executeEPN2al11NerveKeeperE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
guess: true
|
guess: true
|
||||||
- offset: 0x2fe358
|
- offset: 0x2fe358
|
||||||
size: 8
|
size: 8
|
||||||
label: _ZNK12_GLOBAL__N_125RocketFlowerNrvWaitAttach7executeEPN2al11NerveKeeperE
|
label: _ZNK12_GLOBAL__N_125RocketFlowerNrvWaitAttach7executeEPN2al11NerveKeeperE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
guess: true
|
guess: true
|
||||||
MapObj/RocketFlowerEquipWatcher.o:
|
MapObj/RocketFlowerEquipWatcher.o:
|
||||||
'.text':
|
'.text':
|
||||||
|
|
@ -133676,7 +133676,7 @@ Scene/ProjectActorFactory.o:
|
||||||
- offset: 0x4b66dc
|
- offset: 0x4b66dc
|
||||||
size: 52
|
size: 52
|
||||||
label: _ZN2al19createActorFunctionI14BossKnuckleFixEEPNS_9LiveActorEPKc
|
label: _ZN2al19createActorFunctionI14BossKnuckleFixEEPNS_9LiveActorEPKc
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
lazy: true
|
lazy: true
|
||||||
- offset: 0x4b6710
|
- offset: 0x4b6710
|
||||||
size: 52
|
size: 52
|
||||||
|
|
@ -134196,7 +134196,7 @@ Scene/ProjectActorFactory.o:
|
||||||
- offset: 0x4b7dbc
|
- offset: 0x4b7dbc
|
||||||
size: 52
|
size: 52
|
||||||
label: _ZN2al19createActorFunctionI8DoorCityEEPNS_9LiveActorEPKc
|
label: _ZN2al19createActorFunctionI8DoorCityEEPNS_9LiveActorEPKc
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
lazy: true
|
lazy: true
|
||||||
- offset: 0x4b7df0
|
- offset: 0x4b7df0
|
||||||
size: 52
|
size: 52
|
||||||
|
|
@ -134846,7 +134846,7 @@ Scene/ProjectActorFactory.o:
|
||||||
- offset: 0x4b99d4
|
- offset: 0x4b99d4
|
||||||
size: 52
|
size: 52
|
||||||
label: _ZN2al19createActorFunctionI17MoonBasementFloorEEPNS_9LiveActorEPKc
|
label: _ZN2al19createActorFunctionI17MoonBasementFloorEEPNS_9LiveActorEPKc
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
lazy: true
|
lazy: true
|
||||||
- offset: 0x4b9a08
|
- offset: 0x4b9a08
|
||||||
size: 52
|
size: 52
|
||||||
|
|
@ -135906,7 +135906,7 @@ Scene/ProjectActorFactory.o:
|
||||||
- offset: 0x4bd180
|
- offset: 0x4bd180
|
||||||
size: 52
|
size: 52
|
||||||
label: _ZN2al19createActorFunctionI12RocketFlowerEEPNS_9LiveActorEPKc
|
label: _ZN2al19createActorFunctionI12RocketFlowerEEPNS_9LiveActorEPKc
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
lazy: true
|
lazy: true
|
||||||
- offset: 0x4bd1b4
|
- offset: 0x4bd1b4
|
||||||
size: 52
|
size: 52
|
||||||
|
|
@ -230859,91 +230859,91 @@ Library/Clipping/FrustumRadar.o:
|
||||||
label:
|
label:
|
||||||
- _ZN2al12FrustumRadarC1Ev
|
- _ZN2al12FrustumRadarC1Ev
|
||||||
- _ZN2al12FrustumRadarC2Ev
|
- _ZN2al12FrustumRadarC2Ev
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x843600
|
- offset: 0x843600
|
||||||
size: 296
|
size: 296
|
||||||
label: _ZN2al12FrustumRadar15calcFrustumAreaERKN4sead8Matrix34IfEEffff
|
label: _ZN2al12FrustumRadar15calcFrustumAreaERKN4sead8Matrix34IfEEffff
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x843728
|
- offset: 0x843728
|
||||||
size: 156
|
size: 156
|
||||||
label: _ZN2al12FrustumRadar12setLocalAxisERKN4sead8Matrix34IfEE
|
label: _ZN2al12FrustumRadar12setLocalAxisERKN4sead8Matrix34IfEE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x8437c4
|
- offset: 0x8437c4
|
||||||
size: 148
|
size: 148
|
||||||
label: _ZN2al12FrustumRadar9setFactorEff
|
label: _ZN2al12FrustumRadar9setFactorEff
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x843858
|
- offset: 0x843858
|
||||||
size: 276
|
size: 276
|
||||||
label: _ZN2al12FrustumRadar15calcFrustumAreaERKN4sead8Matrix34IfEERKNS1_8Matrix44IfEEff
|
label: _ZN2al12FrustumRadar15calcFrustumAreaERKN4sead8Matrix34IfEERKNS1_8Matrix44IfEEff
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x84396c
|
- offset: 0x84396c
|
||||||
size: 132
|
size: 132
|
||||||
label: _ZN2al12FrustumRadar9setFactorERKN4sead8Matrix44IfEE
|
label: _ZN2al12FrustumRadar9setFactorERKN4sead8Matrix44IfEE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x8439f0
|
- offset: 0x8439f0
|
||||||
size: 472
|
size: 472
|
||||||
label: _ZN2al12FrustumRadar21calcFrustumAreaStereoERKN4sead8Matrix34IfEES5_RKNS1_8Matrix44IfEEff
|
label: _ZN2al12FrustumRadar21calcFrustumAreaStereoERKN4sead8Matrix34IfEES5_RKNS1_8Matrix44IfEEff
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x843bc8
|
- offset: 0x843bc8
|
||||||
size: 244
|
size: 244
|
||||||
label: _ZN2al12FrustumRadar18setLocalAxisStereoERKN4sead8Matrix34IfEES5_
|
label: _ZN2al12FrustumRadar18setLocalAxisStereoERKN4sead8Matrix34IfEES5_
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x843cbc
|
- offset: 0x843cbc
|
||||||
size: 228
|
size: 228
|
||||||
label: _ZN2al12FrustumRadar15setFactorStereoERKN4sead8Matrix44IfEE
|
label: _ZN2al12FrustumRadar15setFactorStereoERKN4sead8Matrix44IfEE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x843da0
|
- offset: 0x843da0
|
||||||
size: 112
|
size: 112
|
||||||
label: _ZNK2al12FrustumRadar11judgeInLeftERKN4sead7Vector3IfEEf
|
label: _ZNK2al12FrustumRadar11judgeInLeftERKN4sead7Vector3IfEEf
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x843e10
|
- offset: 0x843e10
|
||||||
size: 108
|
size: 108
|
||||||
label: _ZNK2al12FrustumRadar12judgeInRightERKN4sead7Vector3IfEEf
|
label: _ZNK2al12FrustumRadar12judgeInRightERKN4sead7Vector3IfEEf
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x843e7c
|
- offset: 0x843e7c
|
||||||
size: 108
|
size: 108
|
||||||
label: _ZNK2al12FrustumRadar10judgeInTopERKN4sead7Vector3IfEEf
|
label: _ZNK2al12FrustumRadar10judgeInTopERKN4sead7Vector3IfEEf
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x843ee8
|
- offset: 0x843ee8
|
||||||
size: 112
|
size: 112
|
||||||
label: _ZNK2al12FrustumRadar13judgeInBottomERKN4sead7Vector3IfEEf
|
label: _ZNK2al12FrustumRadar13judgeInBottomERKN4sead7Vector3IfEEf
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x843f58
|
- offset: 0x843f58
|
||||||
size: 376
|
size: 376
|
||||||
label: _ZNK2al12FrustumRadar11judgeInAreaERKN4sead7Vector3IfEEfff
|
label: _ZNK2al12FrustumRadar11judgeInAreaERKN4sead7Vector3IfEEfff
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x8440d0
|
- offset: 0x8440d0
|
||||||
size: 8
|
size: 8
|
||||||
label: _ZNK2al12FrustumRadar11judgeInAreaERKN4sead7Vector3IfEEff
|
label: _ZNK2al12FrustumRadar11judgeInAreaERKN4sead7Vector3IfEEff
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x8440d8
|
- offset: 0x8440d8
|
||||||
size: 8
|
size: 8
|
||||||
label: _ZNK2al12FrustumRadar11judgeInAreaERKN4sead7Vector3IfEEf
|
label: _ZNK2al12FrustumRadar11judgeInAreaERKN4sead7Vector3IfEEf
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x8440e0
|
- offset: 0x8440e0
|
||||||
size: 12
|
size: 12
|
||||||
label: _ZNK2al12FrustumRadar16judgeInAreaNoFarERKN4sead7Vector3IfEEf
|
label: _ZNK2al12FrustumRadar16judgeInAreaNoFarERKN4sead7Vector3IfEEf
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x8440ec
|
- offset: 0x8440ec
|
||||||
size: 324
|
size: 324
|
||||||
label: _ZNK2al12FrustumRadar14judgePointFlagERKN4sead7Vector3IfEEff
|
label: _ZNK2al12FrustumRadar14judgePointFlagERKN4sead7Vector3IfEEff
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x844230
|
- offset: 0x844230
|
||||||
size: 396
|
size: 396
|
||||||
label: _ZNK2al12FrustumRadar14judgeInAreaObbEPKN4sead8Matrix34IfEERKNS1_9BoundBox3IfEEff
|
label: _ZNK2al12FrustumRadar14judgeInAreaObbEPKN4sead8Matrix34IfEERKNS1_9BoundBox3IfEEff
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x8443bc
|
- offset: 0x8443bc
|
||||||
size: 8
|
size: 8
|
||||||
label: _ZNK2al12FrustumRadar14judgeInAreaObbEPKN4sead8Matrix34IfEERKNS1_9BoundBox3IfEEf
|
label: _ZNK2al12FrustumRadar14judgeInAreaObbEPKN4sead8Matrix34IfEERKNS1_9BoundBox3IfEEf
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x8443c4
|
- offset: 0x8443c4
|
||||||
size: 8
|
size: 8
|
||||||
label: _ZNK2al12FrustumRadar14judgeInAreaObbEPKN4sead8Matrix34IfEERKNS1_9BoundBox3IfEE
|
label: _ZNK2al12FrustumRadar14judgeInAreaObbEPKN4sead8Matrix34IfEERKNS1_9BoundBox3IfEE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x8443cc
|
- offset: 0x8443cc
|
||||||
size: 12
|
size: 12
|
||||||
label: _ZNK2al12FrustumRadar19judgeInAreaObbNoFarEPKN4sead8Matrix34IfEERKNS1_9BoundBox3IfEE
|
label: _ZNK2al12FrustumRadar19judgeInAreaObbNoFarEPKN4sead8Matrix34IfEERKNS1_9BoundBox3IfEE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
Library/Collision/Collider.o:
|
Library/Collision/Collider.o:
|
||||||
'.text':
|
'.text':
|
||||||
- offset: 0x8443d8
|
- offset: 0x8443d8
|
||||||
|
|
@ -264305,60 +264305,60 @@ Library/Movement/ClockMovement.o:
|
||||||
label:
|
label:
|
||||||
- _ZN2al13ClockMovementC1ERKNS_13ActorInitInfoE
|
- _ZN2al13ClockMovementC1ERKNS_13ActorInitInfoE
|
||||||
- _ZN2al13ClockMovementC2ERKNS_13ActorInitInfoE
|
- _ZN2al13ClockMovementC2ERKNS_13ActorInitInfoE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x952a1c
|
- offset: 0x952a1c
|
||||||
size: 100
|
size: 100
|
||||||
label: _ZN2al13ClockMovement8exeDelayEv
|
label: _ZN2al13ClockMovement8exeDelayEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x952a80
|
- offset: 0x952a80
|
||||||
size: 204
|
size: 204
|
||||||
label: _ZN2al13ClockMovement13exeRotateSignEv
|
label: _ZN2al13ClockMovement13exeRotateSignEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x952b4c
|
- offset: 0x952b4c
|
||||||
size: 156
|
size: 156
|
||||||
label: _ZN2al13ClockMovement9exeRotateEv
|
label: _ZN2al13ClockMovement9exeRotateEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x952be8
|
- offset: 0x952be8
|
||||||
size: 96
|
size: 96
|
||||||
label: _ZN2al13ClockMovement7exeWaitEv
|
label: _ZN2al13ClockMovement7exeWaitEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x952c48
|
- offset: 0x952c48
|
||||||
size: 64
|
size: 64
|
||||||
label: _ZNK2al13ClockMovement16isFirstStepDelayEv
|
label: _ZNK2al13ClockMovement16isFirstStepDelayEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x952c88
|
- offset: 0x952c88
|
||||||
size: 68
|
size: 68
|
||||||
label: _ZNK2al13ClockMovement21isFirstStepRotateSignEv
|
label: _ZNK2al13ClockMovement21isFirstStepRotateSignEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x952ccc
|
- offset: 0x952ccc
|
||||||
size: 68
|
size: 68
|
||||||
label: _ZNK2al13ClockMovement17isFirstStepRotateEv
|
label: _ZNK2al13ClockMovement17isFirstStepRotateEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x952d10
|
- offset: 0x952d10
|
||||||
size: 64
|
size: 64
|
||||||
label: _ZNK2al13ClockMovement15isFirstStepWaitEv
|
label: _ZNK2al13ClockMovement15isFirstStepWaitEv
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x952d50
|
- offset: 0x952d50
|
||||||
size: 36
|
size: 36
|
||||||
label: _ZN2al13ClockMovementD0Ev
|
label: _ZN2al13ClockMovementD0Ev
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
lazy: true
|
lazy: true
|
||||||
- offset: 0x952d74
|
- offset: 0x952d74
|
||||||
size: 104
|
size: 104
|
||||||
label: ''
|
label: _ZNK12_GLOBAL__N_121ClockMovementNrvDelay7executeEPN2al11NerveKeeperE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x952ddc
|
- offset: 0x952ddc
|
||||||
size: 8
|
size: 8
|
||||||
label: ''
|
label: _ZNK12_GLOBAL__N_126ClockMovementNrvRotateSign7executeEPN2al11NerveKeeperE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x952de4
|
- offset: 0x952de4
|
||||||
size: 8
|
size: 8
|
||||||
label: ''
|
label: _ZNK12_GLOBAL__N_122ClockMovementNrvRotate7executeEPN2al11NerveKeeperE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
- offset: 0x952dec
|
- offset: 0x952dec
|
||||||
size: 100
|
size: 100
|
||||||
label: ''
|
label: _ZNK12_GLOBAL__N_120ClockMovementNrvWait7executeEPN2al11NerveKeeperE
|
||||||
status: NotDecompiled
|
status: Matching
|
||||||
Library/Movement/EnemyStateBlowDown.o:
|
Library/Movement/EnemyStateBlowDown.o:
|
||||||
'.text':
|
'.text':
|
||||||
- offset: 0x952e50
|
- offset: 0x952e50
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ class AudioMic;
|
||||||
class SeKeeper;
|
class SeKeeper;
|
||||||
class BgmKeeper;
|
class BgmKeeper;
|
||||||
|
|
||||||
class AudioKeeper : public IUseHioNode {
|
class AudioKeeper : public HioNode {
|
||||||
public:
|
public:
|
||||||
AudioKeeper(const AudioDirector*);
|
AudioKeeper(const AudioDirector*);
|
||||||
virtual ~AudioKeeper();
|
virtual ~AudioKeeper();
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
namespace al {
|
namespace al {
|
||||||
class ByamlIter;
|
class ByamlIter;
|
||||||
|
class CameraOffsetPreset;
|
||||||
|
|
||||||
class CameraOffsetCtrlPreset : public CameraOffsetCtrl {
|
class CameraOffsetCtrlPreset : public CameraOffsetCtrl {
|
||||||
public:
|
public:
|
||||||
|
|
@ -11,5 +12,10 @@ public:
|
||||||
|
|
||||||
void load(const ByamlIter& iter) override;
|
void load(const ByamlIter& iter) override;
|
||||||
f32 getOffset() const override;
|
f32 getOffset() const override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
CameraOffsetPreset* mPreset;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(CameraOffsetCtrlPreset) == 0x10);
|
||||||
} // namespace al
|
} // namespace al
|
||||||
|
|
|
||||||
|
|
@ -231,7 +231,7 @@ protected:
|
||||||
sead::Vector3f mTargetTrans = {0.0f, 0.0f, 500.0f};
|
sead::Vector3f mTargetTrans = {0.0f, 0.0f, 500.0f};
|
||||||
sead::Vector3f mCameraUp = sead::Vector3f::ey;
|
sead::Vector3f mCameraUp = sead::Vector3f::ey;
|
||||||
f32 mFovyDegree = 35.0f;
|
f32 mFovyDegree = 35.0f;
|
||||||
f32 _64 = -1.0f;
|
f32 mNearClipDistance = -1.0f;
|
||||||
sead::Matrix34f mViewMtx = sead::Matrix34f::ident;
|
sead::Matrix34f mViewMtx = sead::Matrix34f::ident;
|
||||||
bool _98 = false;
|
bool _98 = false;
|
||||||
CameraPoserSceneInfo* mSceneInfo = nullptr;
|
CameraPoserSceneInfo* mSceneInfo = nullptr;
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,11 @@ public:
|
||||||
void makeLookAtCamera(sead::LookAtCamera* lookAtCam) const override;
|
void makeLookAtCamera(sead::LookAtCamera* lookAtCam) const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
char _140[24];
|
f32 mOffsetY;
|
||||||
|
sead::Vector3f mCameraPos;
|
||||||
|
bool mIsUsePrePoserPos;
|
||||||
|
bool mIsKeepDistanceFromLookAt;
|
||||||
|
f32 mKeepDistance;
|
||||||
};
|
};
|
||||||
|
|
||||||
static_assert(sizeof(CameraPoserFixPoint) == 0x158);
|
static_assert(sizeof(CameraPoserFixPoint) == 0x158);
|
||||||
|
|
|
||||||
245
lib/al/Library/Clipping/FrustumRadar.cpp
Normal file
245
lib/al/Library/Clipping/FrustumRadar.cpp
Normal file
|
|
@ -0,0 +1,245 @@
|
||||||
|
#include "Library/Clipping/FrustumRadar.h"
|
||||||
|
|
||||||
|
#include <math/seadMathCalcCommon.h>
|
||||||
|
|
||||||
|
#include "Library/Math/MathUtil.h"
|
||||||
|
#include "Library/Matrix/MatrixUtil.h"
|
||||||
|
|
||||||
|
namespace al {
|
||||||
|
|
||||||
|
FrustumRadar::FrustumRadar() = default;
|
||||||
|
|
||||||
|
void FrustumRadar::calcFrustumArea(const sead::Matrix34f& orthoMtx, f32 fovyAngle, f32 aspectRatio,
|
||||||
|
f32 near, f32 far) {
|
||||||
|
setLocalAxis(orthoMtx);
|
||||||
|
|
||||||
|
setFactor(fovyAngle, aspectRatio);
|
||||||
|
|
||||||
|
mNear = near;
|
||||||
|
mFar = far;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FrustumRadar::setLocalAxis(const sead::Matrix34f& orthoMtx) {
|
||||||
|
sead::Matrix34f mtxInvertOrtho;
|
||||||
|
calcMxtInvertOrtho(&mtxInvertOrtho, orthoMtx);
|
||||||
|
|
||||||
|
mtxInvertOrtho.getBase(mOrthoSide, 0);
|
||||||
|
mtxInvertOrtho.getBase(mOrthoUp, 1);
|
||||||
|
mtxInvertOrtho.getBase(mOrthoFront, 2);
|
||||||
|
mOrthoFront.negate();
|
||||||
|
mtxInvertOrtho.getTranslation(mOrthoTrans);
|
||||||
|
|
||||||
|
mStereoEyeOffset = 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FrustumRadar::setFactor(f32 fovyAngle, f32 aspectRatio) {
|
||||||
|
mVerticalSlope = sead::Mathf::tan(sead::Mathf::deg2rad(fovyAngle * 0.5f));
|
||||||
|
mVerticalNormFactor = sead::Mathf::sqrt(mVerticalSlope * mVerticalSlope + 1.0f);
|
||||||
|
|
||||||
|
mHorizontalSlope = mVerticalSlope * aspectRatio;
|
||||||
|
mHorizontalNormFactor = sead::Mathf::sqrt(mHorizontalSlope * mHorizontalSlope + 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FrustumRadar::calcFrustumArea(const sead::Matrix34f& orthoMtx,
|
||||||
|
const sead::Matrix44f& projectionMtx, f32 near, f32 far) {
|
||||||
|
setLocalAxis(orthoMtx);
|
||||||
|
setFactor(projectionMtx);
|
||||||
|
mNear = near;
|
||||||
|
mFar = far;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FrustumRadar::setFactor(const sead::Matrix44f& projectionMtx) {
|
||||||
|
mVerticalSlope = 1.0f / projectionMtx(1, 1);
|
||||||
|
mVerticalNormFactor = sead::Mathf::sqrt(mVerticalSlope * mVerticalSlope + 1.0f);
|
||||||
|
|
||||||
|
mHorizontalSlope = 1.0f / projectionMtx(0, 0);
|
||||||
|
mHorizontalNormFactor = sead::Mathf::sqrt(mHorizontalSlope * mHorizontalSlope + 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FrustumRadar::calcFrustumAreaStereo(const sead::Matrix34f& orthoMtxLeft,
|
||||||
|
const sead::Matrix34f& orthoMtxRight,
|
||||||
|
const sead::Matrix44f& projectionMtx, f32 near, f32 far) {
|
||||||
|
setLocalAxisStereo(orthoMtxLeft, orthoMtxRight);
|
||||||
|
setFactorStereo(projectionMtx);
|
||||||
|
mNear = near;
|
||||||
|
mFar = far;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FrustumRadar::setLocalAxisStereo(const sead::Matrix34f& orthoMtxLeft,
|
||||||
|
const sead::Matrix34f& orthoMtxRight) {
|
||||||
|
sead::Matrix34f mtxInvertOrthoLeft;
|
||||||
|
sead::Matrix34f mtxInvertRight;
|
||||||
|
calcMxtInvertOrtho(&mtxInvertOrthoLeft, orthoMtxLeft);
|
||||||
|
|
||||||
|
mtxInvertOrthoLeft.getBase(mOrthoSide, 0);
|
||||||
|
mtxInvertOrthoLeft.getBase(mOrthoUp, 1);
|
||||||
|
mtxInvertOrthoLeft.getBase(mOrthoFront, 2);
|
||||||
|
mOrthoFront.negate();
|
||||||
|
|
||||||
|
calcMxtInvertOrtho(&mtxInvertRight, orthoMtxRight);
|
||||||
|
mOrthoTrans = (mtxInvertOrthoLeft.getTranslation() + mtxInvertRight.getTranslation()) * 0.5f;
|
||||||
|
|
||||||
|
mStereoEyeOffset = mOrthoSide.dot(mOrthoTrans - mtxInvertOrthoLeft.getTranslation());
|
||||||
|
}
|
||||||
|
|
||||||
|
void FrustumRadar::setFactorStereo(const sead::Matrix44f& projectionMtx) {
|
||||||
|
setFactor(projectionMtx);
|
||||||
|
f32 centerOffset = projectionMtx(0, 2);
|
||||||
|
|
||||||
|
mStereoSlopeLeft = mHorizontalSlope * (1.0f - centerOffset);
|
||||||
|
mStereoNormFactorLeft = sead::Mathf::sqrt(mStereoSlopeLeft * mStereoSlopeLeft + 1.0f);
|
||||||
|
|
||||||
|
mStereoSlopeRight = mHorizontalSlope * (1.0f + centerOffset);
|
||||||
|
mStereoNormFactorRight = sead::Mathf::sqrt(mStereoSlopeRight * mStereoSlopeRight + 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FrustumRadar::judgeInLeft(const sead::Vector3f& pos, f32 radius) const {
|
||||||
|
f32 dotFront = mOrthoFront.dot(pos - mOrthoTrans);
|
||||||
|
f32 dotSide = mOrthoSide.dot(pos - mOrthoTrans);
|
||||||
|
|
||||||
|
return !(dotSide < -(dotFront * mHorizontalSlope + mHorizontalNormFactor * radius));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FrustumRadar::judgeInRight(const sead::Vector3f& pos, f32 radius) const {
|
||||||
|
f32 dotFront = mOrthoFront.dot(pos - mOrthoTrans);
|
||||||
|
f32 dotSide = mOrthoSide.dot(pos - mOrthoTrans);
|
||||||
|
|
||||||
|
return !(dotFront * mHorizontalSlope + mHorizontalNormFactor * radius < dotSide);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FrustumRadar::judgeInTop(const sead::Vector3f& pos, f32 radius) const {
|
||||||
|
f32 dotFront = mOrthoFront.dot(pos - mOrthoTrans);
|
||||||
|
f32 dotUp = mOrthoUp.dot(pos - mOrthoTrans);
|
||||||
|
|
||||||
|
return !(dotFront * mVerticalSlope + mVerticalNormFactor * radius < dotUp);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FrustumRadar::judgeInBottom(const sead::Vector3f& pos, f32 radius) const {
|
||||||
|
f32 dotFront = mOrthoFront.dot(pos - mOrthoTrans);
|
||||||
|
f32 dotUp = mOrthoUp.dot(pos - mOrthoTrans);
|
||||||
|
|
||||||
|
return !(dotUp < -(dotFront * mVerticalSlope + mVerticalNormFactor * radius));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FrustumRadar::judgeInArea(const sead::Vector3f& pos, f32 radius, f32 near, f32 far) const {
|
||||||
|
f32 dotFront = mOrthoFront.dot(pos - mOrthoTrans);
|
||||||
|
|
||||||
|
if (dotFront < near - radius)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (far > 0.0f && radius + far < dotFront)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
f32 dotUpAbs = sead::Mathf::abs(mOrthoUp.dot(pos - mOrthoTrans));
|
||||||
|
if (dotFront * mVerticalSlope + mVerticalNormFactor * radius < dotUpAbs)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
f32 dotSide = mOrthoSide.dot(pos - mOrthoTrans);
|
||||||
|
if (isNearZero(mStereoEyeOffset)) {
|
||||||
|
if (dotFront * mHorizontalSlope + mHorizontalNormFactor * radius <
|
||||||
|
sead::Mathf::abs(dotSide))
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
f32 limitRight = dotFront * mStereoSlopeRight + mStereoNormFactorRight * radius;
|
||||||
|
f32 limitLeft = dotFront * mStereoSlopeLeft + mStereoNormFactorLeft * radius;
|
||||||
|
|
||||||
|
f32 relSideLeft = dotSide - mStereoEyeOffset;
|
||||||
|
f32 relSideRight = dotSide + mStereoEyeOffset;
|
||||||
|
|
||||||
|
if (relSideLeft > limitLeft && relSideRight > limitRight)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (relSideLeft < -limitRight && relSideRight < -limitLeft)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FrustumRadar::judgeInArea(const sead::Vector3f& pos, f32 radius, f32 near) const {
|
||||||
|
return judgeInArea(pos, radius, near, mFar);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FrustumRadar::judgeInArea(const sead::Vector3f& pos, f32 radius) const {
|
||||||
|
return judgeInArea(pos, radius, mNear, mFar);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FrustumRadar::judgeInAreaNoFar(const sead::Vector3f& pos, f32 radius) const {
|
||||||
|
return judgeInArea(pos, radius, mNear, -1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
FrustumRadar::PointFlag FrustumRadar::judgePointFlag(const sead::Vector3f& pos, f32 near,
|
||||||
|
f32 far) const {
|
||||||
|
u32 flag = PointFlag::None;
|
||||||
|
|
||||||
|
sead::Vector3f relPos = pos - mOrthoTrans;
|
||||||
|
f32 dotFront = mOrthoFront.dot(relPos);
|
||||||
|
|
||||||
|
if (dotFront < near)
|
||||||
|
flag |= PointFlag::Near;
|
||||||
|
|
||||||
|
if (far > 0.0f && dotFront > far)
|
||||||
|
flag |= PointFlag::Far;
|
||||||
|
|
||||||
|
f32 dotUp = mOrthoUp.dot(relPos);
|
||||||
|
if (dotUp < -(dotFront * mVerticalSlope))
|
||||||
|
flag |= PointFlag::Bottom;
|
||||||
|
|
||||||
|
if (dotFront * mVerticalSlope < dotUp)
|
||||||
|
flag |= PointFlag::Top;
|
||||||
|
|
||||||
|
f32 dotSide = mOrthoSide.dot(relPos);
|
||||||
|
if (isNearZero(mStereoEyeOffset)) {
|
||||||
|
if (dotSide < -(dotFront * mHorizontalSlope))
|
||||||
|
flag |= PointFlag::Left;
|
||||||
|
if (dotFront * mHorizontalSlope < dotSide)
|
||||||
|
flag |= PointFlag::Right;
|
||||||
|
return (PointFlag)flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
f32 limitRight = dotFront * mStereoSlopeRight;
|
||||||
|
f32 limitLeft = dotFront * mStereoSlopeLeft;
|
||||||
|
f32 distSideLeftEye = dotSide - mStereoEyeOffset;
|
||||||
|
f32 distSideRightEye = dotSide + mStereoEyeOffset;
|
||||||
|
|
||||||
|
if (distSideLeftEye > limitLeft && distSideRightEye > limitRight)
|
||||||
|
flag |= PointFlag::Right;
|
||||||
|
|
||||||
|
if (distSideLeftEye < -limitRight && distSideRightEye < -limitLeft)
|
||||||
|
flag |= PointFlag::Left;
|
||||||
|
|
||||||
|
return (PointFlag)flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FrustumRadar::judgeInAreaObb(const sead::Matrix34f* mtx, const sead::BoundBox3f& boundBox,
|
||||||
|
f32 near, f32 far) const {
|
||||||
|
sead::Vector3f corners[8];
|
||||||
|
calcObbCorners(corners, *mtx, boundBox);
|
||||||
|
|
||||||
|
s32 mask = ~PointFlag::None;
|
||||||
|
for (s32 i = 0; i < 8; ++i) {
|
||||||
|
s32 pointFlags = judgePointFlag(corners[i], near, far);
|
||||||
|
if (pointFlags == PointFlag::None)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
mask &= pointFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
return mask == PointFlag::None;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FrustumRadar::judgeInAreaObb(const sead::Matrix34f* mtx, const sead::BoundBox3f& boundBox,
|
||||||
|
f32 near) const {
|
||||||
|
return judgeInAreaObb(mtx, boundBox, near, mFar);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FrustumRadar::judgeInAreaObb(const sead::Matrix34f* mtx,
|
||||||
|
const sead::BoundBox3f& boundBox) const {
|
||||||
|
return judgeInAreaObb(mtx, boundBox, mNear, mFar);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FrustumRadar::judgeInAreaObbNoFar(const sead::Matrix34f* mtx,
|
||||||
|
const sead::BoundBox3f& boundBox) const {
|
||||||
|
return judgeInAreaObb(mtx, boundBox, mNear, -1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace al
|
||||||
|
|
@ -3,34 +3,68 @@
|
||||||
#include <math/seadBoundBox.h>
|
#include <math/seadBoundBox.h>
|
||||||
#include <math/seadMatrix.h>
|
#include <math/seadMatrix.h>
|
||||||
|
|
||||||
|
#include "Library/Matrix/MatrixUtil.h"
|
||||||
|
|
||||||
namespace al {
|
namespace al {
|
||||||
|
|
||||||
class FrustumRadar {
|
class FrustumRadar {
|
||||||
public:
|
public:
|
||||||
|
enum PointFlag : u32 {
|
||||||
|
None = 0,
|
||||||
|
Near = 1,
|
||||||
|
Far = 2,
|
||||||
|
Bottom = 4,
|
||||||
|
Top = 8,
|
||||||
|
Left = 16,
|
||||||
|
Right = 32,
|
||||||
|
};
|
||||||
|
|
||||||
FrustumRadar();
|
FrustumRadar();
|
||||||
void calcFrustumArea(const sead::Matrix34f&, f32, f32, f32, f32);
|
void calcFrustumArea(const sead::Matrix34f& orthoMtx, f32 fovyAngle, f32 aspectRatio, f32 near,
|
||||||
void setLocalAxis(const sead::Matrix34f&);
|
f32 far);
|
||||||
void setFactor(f32, f32);
|
void setLocalAxis(const sead::Matrix34f& orthoMtx);
|
||||||
void calcFrustumArea(const sead::Matrix34f&, const sead::Matrix44f&, f32, f32);
|
void setFactor(f32 fovyAngle, f32 aspectRatio);
|
||||||
void setFactor(sead::Matrix44f);
|
void calcFrustumArea(const sead::Matrix34f& orthoMtx, const sead::Matrix44f& projectionMtx,
|
||||||
void calcFrustumAreaStereo(const sead::Matrix34f&, const sead::Matrix34f&,
|
f32 near, f32 far);
|
||||||
const sead::Matrix44f&, f32, f32);
|
void setFactor(const sead::Matrix44f& projectionMtx);
|
||||||
void setLocalAxisStereo(const sead::Matrix34f&, const sead::Matrix34f&);
|
void calcFrustumAreaStereo(const sead::Matrix34f& orthoMtxLeft,
|
||||||
void setFactorStereo(const sead::Matrix44f&);
|
const sead::Matrix34f& orthoMtxRight,
|
||||||
bool judgeInLeft(const sead::Vector3f&, f32) const;
|
const sead::Matrix44f& projectionMtx, f32 near, f32 far);
|
||||||
bool judgeInRight(const sead::Vector3f&, f32) const;
|
void setLocalAxisStereo(const sead::Matrix34f& orthoMtxLeft,
|
||||||
bool judgeInTop(const sead::Vector3f&, f32) const;
|
const sead::Matrix34f& orthoMtxRight);
|
||||||
bool judgeInBottom(const sead::Vector3f&, f32) const;
|
void setFactorStereo(const sead::Matrix44f& projectionMtx);
|
||||||
bool judgeInArea(const sead::Vector3f&, f32, f32, f32) const;
|
bool judgeInLeft(const sead::Vector3f& pos, f32 radius) const;
|
||||||
bool judgeInArea(const sead::Vector3f&, f32, f32) const;
|
bool judgeInRight(const sead::Vector3f& pos, f32 radius) const;
|
||||||
bool judgeInAreaNoFar(const sead::Vector3f&, f32) const;
|
bool judgeInTop(const sead::Vector3f& pos, f32 radius) const;
|
||||||
bool judgePointFlag(const sead::Vector3f&, f32, f32) const;
|
bool judgeInBottom(const sead::Vector3f& pos, f32 radius) const;
|
||||||
bool judgeInAreaObb(const sead::Matrix34f*, const sead::BoundBox3f&, f32, f32) const;
|
bool judgeInArea(const sead::Vector3f& pos, f32 radius, f32 near, f32 far) const;
|
||||||
bool judgeInAreaObb(const sead::Matrix34f*, const sead::BoundBox3f&, f32) const;
|
bool judgeInArea(const sead::Vector3f& pos, f32 radius, f32 near) const;
|
||||||
bool judgeInAreaObbNoFar(const sead::Matrix34f*, const sead::BoundBox3f&) const;
|
bool judgeInArea(const sead::Vector3f& pos, f32 radius) const;
|
||||||
|
bool judgeInAreaNoFar(const sead::Vector3f& pos, f32 radius) const;
|
||||||
|
PointFlag judgePointFlag(const sead::Vector3f& pos, f32 near, f32 far) const;
|
||||||
|
bool judgeInAreaObb(const sead::Matrix34f* mtx, const sead::BoundBox3f& boundBox, f32 near,
|
||||||
|
f32 far) const;
|
||||||
|
bool judgeInAreaObb(const sead::Matrix34f* mtx, const sead::BoundBox3f& boundBox,
|
||||||
|
f32 near) const;
|
||||||
|
bool judgeInAreaObb(const sead::Matrix34f* mtx, const sead::BoundBox3f& boundBox) const;
|
||||||
|
bool judgeInAreaObbNoFar(const sead::Matrix34f* mtx, const sead::BoundBox3f& boundBox) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
unsigned char filler[0x5c];
|
sead::Vector3f mOrthoSide = sead::Vector3f::ex;
|
||||||
|
sead::Vector3f mOrthoUp = sead::Vector3f::ey;
|
||||||
|
sead::Vector3f mOrthoFront = sead::Vector3f::ez;
|
||||||
|
sead::Vector3f mOrthoTrans = sead::Vector3f::zero;
|
||||||
|
f32 mHorizontalSlope = 0.3f;
|
||||||
|
f32 mHorizontalNormFactor = 1.04403f;
|
||||||
|
f32 mVerticalSlope = 0.2f;
|
||||||
|
f32 mVerticalNormFactor = 1.0098f;
|
||||||
|
f32 mStereoEyeOffset = 0.0f;
|
||||||
|
f32 mStereoSlopeLeft = 0.3f;
|
||||||
|
f32 mStereoNormFactorLeft = 1.04403f;
|
||||||
|
f32 mStereoSlopeRight = 0.3f;
|
||||||
|
f32 mStereoNormFactorRight = 1.04403f;
|
||||||
|
f32 mNear = 100.0f;
|
||||||
|
f32 mFar = 10000.0f;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace al
|
} // namespace al
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ public:
|
||||||
|
|
||||||
CollisionDirector* getCollisionDirector() const override;
|
CollisionDirector* getCollisionDirector() const override;
|
||||||
|
|
||||||
sead::Vector3f* get_30() const { return _30; }
|
const sead::Vector3f* getActorGravityPtr() const { return mActorGravityPtr; }
|
||||||
|
|
||||||
f32 getRadius() { return mRadius; };
|
f32 getRadius() { return mRadius; };
|
||||||
|
|
||||||
|
|
@ -55,9 +55,9 @@ public:
|
||||||
|
|
||||||
void setOffsetY(f32 offsetY) { mOffsetY = offsetY; };
|
void setOffsetY(f32 offsetY) { mOffsetY = offsetY; };
|
||||||
|
|
||||||
s32 get_48() const { return _48; }
|
s32 getPlaneNum() const { return mPlaneNum; }
|
||||||
|
|
||||||
u32 getPlaneCount() const { return mPlaneCount; }
|
u32 getStoredPlaneNum() const { return mStoredPlaneNum; }
|
||||||
|
|
||||||
const sead::Vector3f& getFixReaction() const { return mFixReaction; }
|
const sead::Vector3f& getFixReaction() const { return mFixReaction; }
|
||||||
|
|
||||||
|
|
@ -73,7 +73,7 @@ public:
|
||||||
|
|
||||||
f32 get_260() const { return _260; }
|
f32 get_260() const { return _260; }
|
||||||
|
|
||||||
u32 get_264() const { return _264; }
|
u32 getNoGroundCounter() const { return mNoGroundCounter; }
|
||||||
|
|
||||||
void setReactMovePower(bool isEnabled) {
|
void setReactMovePower(bool isEnabled) {
|
||||||
mFlag &= ~1;
|
mFlag &= ~1;
|
||||||
|
|
@ -87,18 +87,18 @@ public:
|
||||||
bool isCollidedWallFace() { return mFlag >> 5 & 1; }
|
bool isCollidedWallFace() { return mFlag >> 5 & 1; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CollisionDirector* _8;
|
CollisionDirector* mCollisionDirector;
|
||||||
TriangleFilterBase* _10;
|
const TriangleFilterBase* mTriangleFilter;
|
||||||
CollisionPartsFilterBase* _18;
|
const CollisionPartsFilterBase* mCollisionPartsFilter;
|
||||||
sead::Matrix34f* _20;
|
const sead::Matrix34f* mActorBaseMtxPtr;
|
||||||
sead::Vector3f* _28;
|
const sead::Vector3f* mActorTransPtr;
|
||||||
sead::Vector3f* _30;
|
const sead::Vector3f* mActorGravityPtr;
|
||||||
f32 mRadius;
|
f32 mRadius;
|
||||||
f32 mOffsetY;
|
f32 mOffsetY;
|
||||||
void* filler1;
|
sead::Vector3f* _40;
|
||||||
u32 _48;
|
u32 mPlaneNum;
|
||||||
u32 mPlaneCount;
|
u32 mStoredPlaneNum;
|
||||||
HitInfo* _50;
|
HitInfo* mPlanes;
|
||||||
sead::Vector3f mFixReaction;
|
sead::Vector3f mFixReaction;
|
||||||
sead::Vector3f _64;
|
sead::Vector3f _64;
|
||||||
HitInfo mFloorHit;
|
HitInfo mFloorHit;
|
||||||
|
|
@ -109,12 +109,12 @@ private:
|
||||||
char filler4[0x4];
|
char filler4[0x4];
|
||||||
HitInfo mCeilingHit;
|
HitInfo mCeilingHit;
|
||||||
f32 _260;
|
f32 _260;
|
||||||
u32 _264;
|
u32 mNoGroundCounter;
|
||||||
sead::Vector3f _268;
|
sead::Vector3f mRecentOnGroundNormal;
|
||||||
char _274;
|
char _274;
|
||||||
char mFlag;
|
char mFlag;
|
||||||
sead::Vector3f _278;
|
sead::Vector3f mCurrentTrans;
|
||||||
f32 _284;
|
f32 mCurrentRadius;
|
||||||
};
|
};
|
||||||
|
|
||||||
static_assert(sizeof(Collider) == 0x288);
|
static_assert(sizeof(Collider) == 0x288);
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,8 @@
|
||||||
#include <math/seadVector.h>
|
#include <math/seadVector.h>
|
||||||
#include <prim/seadDelegate.h>
|
#include <prim/seadDelegate.h>
|
||||||
|
|
||||||
|
#include "Library/HostIO/HioNode.h"
|
||||||
|
|
||||||
namespace al {
|
namespace al {
|
||||||
class CollisionParts;
|
class CollisionParts;
|
||||||
struct HitInfo;
|
struct HitInfo;
|
||||||
|
|
@ -14,7 +16,7 @@ class ArrowHitResultBuffer;
|
||||||
class DiskHitResultBuffer;
|
class DiskHitResultBuffer;
|
||||||
class CollisionCheckInfoBase;
|
class CollisionCheckInfoBase;
|
||||||
|
|
||||||
class ICollisionPartsKeeper {
|
class ICollisionPartsKeeper : public IUseHioNode {
|
||||||
public:
|
public:
|
||||||
virtual void endInit() = 0;
|
virtual void endInit() = 0;
|
||||||
virtual void addCollisionParts(CollisionParts* parts) = 0;
|
virtual void addCollisionParts(CollisionParts* parts) = 0;
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,9 @@ class CameraTicket;
|
||||||
class LiveActor;
|
class LiveActor;
|
||||||
class EventFlowEventData;
|
class EventFlowEventData;
|
||||||
class IUseCamera;
|
class IUseCamera;
|
||||||
|
class EventFlowRequestInfo;
|
||||||
|
class EventFlowScareCtrlBase;
|
||||||
|
class BalloonOrderGroup;
|
||||||
|
|
||||||
class EventFlowDataHolder {
|
class EventFlowDataHolder {
|
||||||
public:
|
public:
|
||||||
|
|
@ -37,6 +40,24 @@ public:
|
||||||
void endAllEventCamera(IUseCamera*);
|
void endAllEventCamera(IUseCamera*);
|
||||||
bool isEndInterpoleCamera(const IUseCamera*, const char*) const;
|
bool isEndInterpoleCamera(const IUseCamera*, const char*) const;
|
||||||
bool isPlayingEventAnimCamera(const char*) const;
|
bool isPlayingEventAnimCamera(const char*) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
EventFlowRequestInfo* mRequestInfo;
|
||||||
|
void* filler_8[10];
|
||||||
|
void* _58;
|
||||||
|
void* filler_60[1];
|
||||||
|
EventFlowScareCtrlBase* mScareCtrl;
|
||||||
|
void* _70;
|
||||||
|
void* filler_78[2];
|
||||||
|
BalloonOrderGroup* mBalloonOrderGroup;
|
||||||
|
sead::WFixedSafeString<32> _90;
|
||||||
|
void* filler_e8[1];
|
||||||
|
const char* mTalkSubActorName;
|
||||||
|
s32 mItemTypeCapacity;
|
||||||
|
s32 mItemTypeCount;
|
||||||
|
const char** mItemTypes;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(EventFlowDataHolder) == 0x108);
|
||||||
|
|
||||||
} // namespace al
|
} // namespace al
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
#include <basis/seadTypes.h>
|
#include <basis/seadTypes.h>
|
||||||
|
|
||||||
|
#include "Library/HostIO/HioNode.h"
|
||||||
|
|
||||||
namespace al {
|
namespace al {
|
||||||
struct ExecuteOrder;
|
struct ExecuteOrder;
|
||||||
struct ExecuteSystemInitInfo;
|
struct ExecuteSystemInitInfo;
|
||||||
|
|
@ -16,7 +18,7 @@ class IUseExecutor;
|
||||||
class LayoutActor;
|
class LayoutActor;
|
||||||
class LiveActor;
|
class LiveActor;
|
||||||
|
|
||||||
class ExecuteTableHolderDraw {
|
class ExecuteTableHolderDraw : public HioNode {
|
||||||
public:
|
public:
|
||||||
ExecuteTableHolderDraw();
|
ExecuteTableHolderDraw();
|
||||||
virtual ~ExecuteTableHolderDraw();
|
virtual ~ExecuteTableHolderDraw();
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
#include <container/seadPtrArray.h>
|
#include <container/seadPtrArray.h>
|
||||||
|
|
||||||
|
#include "Library/HostIO/HioNode.h"
|
||||||
|
|
||||||
namespace al {
|
namespace al {
|
||||||
class ExecuteDirector;
|
class ExecuteDirector;
|
||||||
struct ExecuteOrder;
|
struct ExecuteOrder;
|
||||||
|
|
@ -17,7 +19,7 @@ class IUseExecutor;
|
||||||
class LayoutActor;
|
class LayoutActor;
|
||||||
class LiveActor;
|
class LiveActor;
|
||||||
|
|
||||||
class ExecuteTableHolderUpdate {
|
class ExecuteTableHolderUpdate : public HioNode {
|
||||||
public:
|
public:
|
||||||
ExecuteTableHolderUpdate();
|
ExecuteTableHolderUpdate();
|
||||||
virtual ~ExecuteTableHolderUpdate();
|
virtual ~ExecuteTableHolderUpdate();
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,14 @@
|
||||||
#include <math/seadQuat.h>
|
#include <math/seadQuat.h>
|
||||||
|
|
||||||
#include "Library/Fluid/IUseFluidSurface.h"
|
#include "Library/Fluid/IUseFluidSurface.h"
|
||||||
|
#include "Library/HostIO/HioNode.h"
|
||||||
|
|
||||||
namespace al {
|
namespace al {
|
||||||
class LiveActor;
|
class LiveActor;
|
||||||
struct ActorInitInfo;
|
struct ActorInitInfo;
|
||||||
|
|
||||||
// TODO: Finish this
|
// TODO: Finish this
|
||||||
class RippleCtrl : public IUseFluidSurface {
|
class RippleCtrl : public IUseFluidSurface, public HioNode {
|
||||||
public:
|
public:
|
||||||
RippleCtrl(LiveActor* parent);
|
RippleCtrl(LiveActor* parent);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
#include "Library/HostIO/HioNode.h"
|
#include "Library/HostIO/HioNode.h"
|
||||||
|
|
||||||
|
// BUG: outside of `al` namespace
|
||||||
class IJointController {
|
class IJointController {
|
||||||
public:
|
public:
|
||||||
virtual void calcJointCallback(s32, sead::Matrix34f*) = 0;
|
virtual void calcJointCallback(s32, sead::Matrix34f*) = 0;
|
||||||
|
|
|
||||||
|
|
@ -29,5 +29,15 @@ public:
|
||||||
s32 getGroupNum() const;
|
s32 getGroupNum() const;
|
||||||
void calcAnim(bool);
|
void calcAnim(bool);
|
||||||
void draw();
|
void draw();
|
||||||
|
|
||||||
|
private:
|
||||||
|
CustomTagProcessor* mTagProcessor;
|
||||||
|
nn::ui2d::DrawInfo* mDrawInfo;
|
||||||
|
nn::ui2d::Layout* mLayout;
|
||||||
|
void* filler_18[2];
|
||||||
|
eui::Screen* mScreen;
|
||||||
|
void* filler_30;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(LayoutKeeper) == 0x38);
|
||||||
} // namespace al
|
} // namespace al
|
||||||
|
|
|
||||||
|
|
@ -117,7 +117,7 @@ void setSyncCollisionMtxPtr(LiveActor* actor, const sead::Matrix34f* mtx) {
|
||||||
|
|
||||||
bool isOnGround(const LiveActor* actor, u32 coyoteTime) {
|
bool isOnGround(const LiveActor* actor, u32 coyoteTime) {
|
||||||
Collider* collider = actor->getCollider();
|
Collider* collider = actor->getCollider();
|
||||||
if (!isCollidedGround(actor) && collider->get_264() > coyoteTime)
|
if (!isCollidedGround(actor) && collider->getNoGroundCounter() > coyoteTime)
|
||||||
return false;
|
return false;
|
||||||
return !(getVelocity(actor).dot(collider->getRecentOnGroundNormal(coyoteTime)) > 0.0f);
|
return !(getVelocity(actor).dot(collider->getRecentOnGroundNormal(coyoteTime)) > 0.0f);
|
||||||
}
|
}
|
||||||
|
|
@ -137,15 +137,16 @@ bool isOnGroundNoVelocity(const LiveActor* actor, u32 coyoteTime) {
|
||||||
if (isCollidedGround(actor))
|
if (isCollidedGround(actor))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return actor->getCollider()->get_264() <= coyoteTime;
|
return actor->getCollider()->getNoGroundCounter() <= coyoteTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isOnGroundDegree(const LiveActor* actor, f32 angle, u32 coyoteTime) {
|
bool isOnGroundDegree(const LiveActor* actor, f32 angle, u32 coyoteTime) {
|
||||||
Collider* collider = actor->getCollider();
|
Collider* collider = actor->getCollider();
|
||||||
if (!(isCollidedGround(actor) || collider->get_264() <= coyoteTime))
|
if (!(isCollidedGround(actor) || collider->getNoGroundCounter() <= coyoteTime))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (sead::Mathf::abs((*collider->get_30()).dot(collider->getRecentOnGroundNormal(coyoteTime))) <
|
if (sead::Mathf::abs(
|
||||||
|
(*collider->getActorGravityPtr()).dot(collider->getRecentOnGroundNormal(coyoteTime))) <
|
||||||
sead::Mathf::cos(sead::Mathf::deg2rad(angle)))
|
sead::Mathf::cos(sead::Mathf::deg2rad(angle)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
@ -161,10 +162,11 @@ bool isOnGroundNoVelocityDegree(const LiveActor* actor, f32 angle, u32 coyoteTim
|
||||||
if (!collider)
|
if (!collider)
|
||||||
return getTrans(actor).y <= 0.0;
|
return getTrans(actor).y <= 0.0;
|
||||||
|
|
||||||
if (!(isCollidedGround(actor) || collider->get_264() <= coyoteTime))
|
if (!(isCollidedGround(actor) || collider->getNoGroundCounter() <= coyoteTime))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (sead::Mathf::abs((*collider->get_30()).dot(collider->getRecentOnGroundNormal(coyoteTime))) <
|
if (sead::Mathf::abs(
|
||||||
|
(*collider->getActorGravityPtr()).dot(collider->getRecentOnGroundNormal(coyoteTime))) <
|
||||||
sead::Mathf::cos(sead::Mathf::deg2rad(angle)))
|
sead::Mathf::cos(sead::Mathf::deg2rad(angle)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
@ -451,7 +453,7 @@ bool isCollidedFloorCode(const LiveActor* actor, const char* name) {
|
||||||
|
|
||||||
bool isCollidedCollisionCode(const LiveActor* actor, const char* sensorName, const char* name) {
|
bool isCollidedCollisionCode(const LiveActor* actor, const char* sensorName, const char* name) {
|
||||||
Collider* collider = actor->getCollider();
|
Collider* collider = actor->getCollider();
|
||||||
if (collider->get_48() == 0) {
|
if (collider->getPlaneNum() == 0) {
|
||||||
if (collider->get_110() >= 0.0f) {
|
if (collider->get_110() >= 0.0f) {
|
||||||
if (isEqualString(name,
|
if (isEqualString(name,
|
||||||
getCollisionCodeName(collider->getFloorHit().triangle, sensorName))) {
|
getCollisionCodeName(collider->getFloorHit().triangle, sensorName))) {
|
||||||
|
|
@ -473,7 +475,7 @@ bool isCollidedCollisionCode(const LiveActor* actor, const char* sensorName, con
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 size = collider->getPlaneCount();
|
u32 size = collider->getStoredPlaneNum();
|
||||||
for (u32 i = 0; i < size; i++)
|
for (u32 i = 0; i < size; i++)
|
||||||
if (isEqualString(name, getCollisionCodeName(*collider->getPlane(i), sensorName)))
|
if (isEqualString(name, getCollisionCodeName(*collider->getPlane(i), sensorName)))
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -773,8 +773,8 @@ bool reboundVelocityFromCollision(LiveActor* actor, f32 reboundStrength, f32 reb
|
||||||
|
|
||||||
bool reboundVelocityFromTriangles(LiveActor* actor, f32 reboundStrength, f32 reboundMin) {
|
bool reboundVelocityFromTriangles(LiveActor* actor, f32 reboundStrength, f32 reboundMin) {
|
||||||
Collider* collider = getActorCollider(actor);
|
Collider* collider = getActorCollider(actor);
|
||||||
s32 planeCount = collider->getPlaneCount();
|
s32 planeCount = collider->getStoredPlaneNum();
|
||||||
if (collider->get_48() == 0)
|
if (collider->getPlaneNum() == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
bool isRebound = false;
|
bool isRebound = false;
|
||||||
|
|
|
||||||
|
|
@ -250,7 +250,7 @@ void ClockMapParts::exeRotate() {
|
||||||
|
|
||||||
mTimer++;
|
mTimer++;
|
||||||
if (mTimer >= mRotateTimer) {
|
if (mTimer >= mRotateTimer) {
|
||||||
mCurrentStep = modi(mCurrentStep + mTurnStepCount + 1, mTurnStepCount);
|
mCurrentStep = wrapValue(mCurrentStep + 1, mTurnStepCount);
|
||||||
startNerveAction(this, "Wait");
|
startNerveAction(this, "Wait");
|
||||||
tryStartSe(this, "RotateEnd");
|
tryStartSe(this, "RotateEnd");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -205,6 +205,10 @@ void makeBoxMullerRandomGauss(sead::Vector2f* outBox, f32 randA, f32 randB);
|
||||||
f32 modf(f32 a, f32 b);
|
f32 modf(f32 a, f32 b);
|
||||||
s32 modi(s32 a, s32 b);
|
s32 modi(s32 a, s32 b);
|
||||||
|
|
||||||
|
inline s32 wrapValue(s32 value, s32 maxRange) {
|
||||||
|
return modi(value + maxRange, maxRange);
|
||||||
|
}
|
||||||
|
|
||||||
inline f32 wrapValue(f32 value, f32 maxRange) {
|
inline f32 wrapValue(f32 value, f32 maxRange) {
|
||||||
return modf(value + maxRange, maxRange) + 0.0f;
|
return modf(value + maxRange, maxRange) + 0.0f;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
101
lib/al/Library/Movement/ClockMovement.cpp
Normal file
101
lib/al/Library/Movement/ClockMovement.cpp
Normal file
|
|
@ -0,0 +1,101 @@
|
||||||
|
#include "Library/Movement/ClockMovement.h"
|
||||||
|
|
||||||
|
#include "Library/Math/MathUtil.h"
|
||||||
|
#include "Library/Nerve/NerveSetupUtil.h"
|
||||||
|
#include "Library/Nerve/NerveUtil.h"
|
||||||
|
#include "Library/Placement/PlacementFunction.h"
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
using namespace al;
|
||||||
|
|
||||||
|
NERVE_IMPL(ClockMovement, Delay);
|
||||||
|
NERVE_IMPL(ClockMovement, RotateSign);
|
||||||
|
NERVE_IMPL(ClockMovement, Rotate);
|
||||||
|
NERVE_IMPL(ClockMovement, Wait);
|
||||||
|
|
||||||
|
NERVES_MAKE_STRUCT(ClockMovement, Delay, RotateSign, Rotate);
|
||||||
|
NERVES_MAKE_NOSTRUCT(ClockMovement, Wait);
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
namespace al {
|
||||||
|
|
||||||
|
ClockMovement::ClockMovement(const ActorInitInfo& info) : NerveExecutor("クロックパーツ動作") {
|
||||||
|
getQuat(&mInitialQuat, info);
|
||||||
|
mCurrentQuat = mInitialQuat;
|
||||||
|
tryGetArg(&mClockAngleDegree, info, "ClockAngleDegree");
|
||||||
|
tryGetArg(&mRotateAxis, info, "RotateAxis");
|
||||||
|
tryGetArg(&mDelayTime, info, "DelayTime");
|
||||||
|
tryGetArg(&mRotateSignTime, info, "RotateSignTime");
|
||||||
|
tryGetArg(&mRotateTime, info, "RotateTime");
|
||||||
|
tryGetArg(&mWaitTime, info, "WaitTime");
|
||||||
|
|
||||||
|
if (mDelayTime == 0)
|
||||||
|
initNerve(&NrvClockMovement.RotateSign, 0);
|
||||||
|
else
|
||||||
|
initNerve(&NrvClockMovement.Delay, 0);
|
||||||
|
|
||||||
|
s32 stepsPerCycle = 1;
|
||||||
|
if (mClockAngleDegree != 0) {
|
||||||
|
stepsPerCycle = sead::Mathi::lcm(sead::Mathi::abs(mClockAngleDegree), 360) /
|
||||||
|
sead::Mathi::abs(mClockAngleDegree);
|
||||||
|
}
|
||||||
|
mMaxStepIndex = stepsPerCycle;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClockMovement::exeDelay() {
|
||||||
|
if (isGreaterEqualStep(this, mDelayTime - 1)) {
|
||||||
|
if (mRotateSignTime > 0)
|
||||||
|
setNerve(this, &NrvClockMovement.RotateSign);
|
||||||
|
else
|
||||||
|
setNerve(this, &NrvClockMovement.Rotate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClockMovement::exeRotateSign() {
|
||||||
|
f32 rotateAngle = wrapValue(static_cast<f32>(mCurrentStepIndex * mClockAngleDegree), 360.0f);
|
||||||
|
|
||||||
|
rotateQuatLocalDirDegree(&mCurrentQuat, mInitialQuat, mRotateAxis,
|
||||||
|
rotateAngle +
|
||||||
|
sead::Mathf::sin(getNerveStep(this) * sead::Mathf::pi2() / 18.0f));
|
||||||
|
|
||||||
|
if (isGreaterEqualStep(this, mRotateSignTime - 1))
|
||||||
|
setNerve(this, &NrvClockMovement.Rotate);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClockMovement::exeRotate() {
|
||||||
|
f32 rotateAngle = wrapValue(
|
||||||
|
(calcNerveRate(this, mRotateTime) + mCurrentStepIndex) * mClockAngleDegree, 360.0f);
|
||||||
|
rotateQuatLocalDirDegree(&mCurrentQuat, mInitialQuat, mRotateAxis, rotateAngle);
|
||||||
|
|
||||||
|
if (isGreaterEqualStep(this, mRotateTime)) {
|
||||||
|
mCurrentStepIndex = wrapValue(mCurrentStepIndex + 1, mMaxStepIndex);
|
||||||
|
setNerve(this, &Wait);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClockMovement::exeWait() {
|
||||||
|
if (isGreaterEqualStep(this, mWaitTime)) {
|
||||||
|
if (mRotateSignTime > 0)
|
||||||
|
setNerve(this, &NrvClockMovement.RotateSign);
|
||||||
|
else
|
||||||
|
setNerve(this, &NrvClockMovement.Rotate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ClockMovement::isFirstStepDelay() const {
|
||||||
|
return isNerve(this, &NrvClockMovement.Delay) && isFirstStep(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ClockMovement::isFirstStepRotateSign() const {
|
||||||
|
return isNerve(this, &NrvClockMovement.RotateSign) && isFirstStep(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ClockMovement::isFirstStepRotate() const {
|
||||||
|
return isNerve(this, &NrvClockMovement.Rotate) && isFirstStep(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ClockMovement::isFirstStepWait() const {
|
||||||
|
return isNerve(this, &Wait) && isFirstStep(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace al
|
||||||
36
lib/al/Library/Movement/ClockMovement.h
Normal file
36
lib/al/Library/Movement/ClockMovement.h
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <math/seadQuat.h>
|
||||||
|
|
||||||
|
#include "Library/Nerve/NerveExecutor.h"
|
||||||
|
|
||||||
|
namespace al {
|
||||||
|
struct ActorInitInfo;
|
||||||
|
|
||||||
|
class ClockMovement : public NerveExecutor {
|
||||||
|
public:
|
||||||
|
ClockMovement(const ActorInitInfo& info);
|
||||||
|
void exeDelay();
|
||||||
|
void exeRotateSign();
|
||||||
|
void exeRotate();
|
||||||
|
void exeWait();
|
||||||
|
bool isFirstStepDelay() const;
|
||||||
|
bool isFirstStepRotateSign() const;
|
||||||
|
bool isFirstStepRotate() const;
|
||||||
|
bool isFirstStepWait() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
sead::Quatf mCurrentQuat = sead::Quatf::unit;
|
||||||
|
sead::Quatf mInitialQuat = sead::Quatf::unit;
|
||||||
|
s32 mRotateAxis = 0;
|
||||||
|
s32 mClockAngleDegree = 90;
|
||||||
|
s32 mCurrentStepIndex = 0;
|
||||||
|
s32 mMaxStepIndex = 4;
|
||||||
|
s32 mDelayTime = 0;
|
||||||
|
s32 mRotateSignTime = 36;
|
||||||
|
s32 mRotateTime = 60;
|
||||||
|
s32 mWaitTime = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(ClockMovement) == 0x50);
|
||||||
|
} // namespace al
|
||||||
|
|
@ -59,7 +59,7 @@ void SwingMovement::exeMove() {
|
||||||
if (updateRotate())
|
if (updateRotate())
|
||||||
setNerve(this, &Stop);
|
setNerve(this, &Stop);
|
||||||
|
|
||||||
mFrameInCycle = modi((mFrameInCycle + 1) + mSwingCycle, mSwingCycle);
|
mFrameInCycle = wrapValue(mFrameInCycle + 1, mSwingCycle);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SwingMovement::exeStop() {
|
void SwingMovement::exeStop() {
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool mIsAlive = true;
|
bool mIsAlive = true;
|
||||||
|
bool mIsKillIfEnter = false;
|
||||||
f32* mAngleH = nullptr;
|
f32* mAngleH = nullptr;
|
||||||
f32* mAngleV = nullptr;
|
f32* mAngleV = nullptr;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -323,11 +323,8 @@ s32 getNextRailPointNo(const IUseRail* railHolder) {
|
||||||
s32 newIndex = getRailPointNo(railHolder) + modifier;
|
s32 newIndex = getRailPointNo(railHolder) + modifier;
|
||||||
s32 railPointNum = getRailPointNum(railHolder);
|
s32 railPointNum = getRailPointNum(railHolder);
|
||||||
|
|
||||||
if (isLoop) {
|
if (isLoop)
|
||||||
s32 sum = railPointNum + newIndex;
|
return wrapValue(railPointNum + newIndex, getRailPointNum(railHolder));
|
||||||
s32 railPointNumAgain = getRailPointNum(railHolder);
|
|
||||||
return modi(sum + railPointNumAgain, railPointNumAgain);
|
|
||||||
}
|
|
||||||
|
|
||||||
return sead::Mathi::clamp2(0, newIndex, railPointNum - 1);
|
return sead::Mathi::clamp2(0, newIndex, railPointNum - 1);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ namespace al {
|
||||||
class SceneCameraInfo;
|
class SceneCameraInfo;
|
||||||
class ScreenCapture;
|
class ScreenCapture;
|
||||||
|
|
||||||
class ScreenCaptureExecutor : public IUseHioNode {
|
class ScreenCaptureExecutor : public HioNode {
|
||||||
public:
|
public:
|
||||||
ScreenCaptureExecutor(s32);
|
ScreenCaptureExecutor(s32);
|
||||||
~ScreenCaptureExecutor();
|
~ScreenCaptureExecutor();
|
||||||
|
|
|
||||||
|
|
@ -54,5 +54,10 @@ public:
|
||||||
void setEmitterPoseMtxPtr(const sead::Matrix34f*, const char*);
|
void setEmitterPoseMtxPtr(const sead::Matrix34f*, const char*);
|
||||||
void setEmitterPosePosPtr(const sead::Vector3f*, const char*);
|
void setEmitterPosePosPtr(const sead::Vector3f*, const char*);
|
||||||
void loadSe(IAudioResourceLoader*);
|
void loadSe(IAudioResourceLoader*);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void* _0[0x78 / 8];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(SeKeeper) == 0x78);
|
||||||
} // namespace al
|
} // namespace al
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,8 @@ public:
|
||||||
virtual void drawMain() const;
|
virtual void drawMain() const;
|
||||||
virtual void drawSub() const;
|
virtual void drawSub() const;
|
||||||
|
|
||||||
|
AudioKeeper* getAudioKeeper() const override { return mAudioKeeper; }
|
||||||
|
|
||||||
virtual bool isDisposable() const;
|
virtual bool isDisposable() const;
|
||||||
|
|
||||||
virtual Scene* getCurrentScene() const { return nullptr; }
|
virtual Scene* getCurrentScene() const { return nullptr; }
|
||||||
|
|
@ -34,8 +36,6 @@ public:
|
||||||
|
|
||||||
void setSceneCreator(SceneCreator* sceneCreator) override { mSceneCreator = sceneCreator; }
|
void setSceneCreator(SceneCreator* sceneCreator) override { mSceneCreator = sceneCreator; }
|
||||||
|
|
||||||
AudioKeeper* getAudioKeeper() const override { return mAudioKeeper; }
|
|
||||||
|
|
||||||
void initAudio(const GameSystemInfo&, const char*, s32, s32, s32, const char*);
|
void initAudio(const GameSystemInfo&, const char*, s32, s32, s32, const char*);
|
||||||
void initAudioKeeper(const char*);
|
void initAudioKeeper(const char*);
|
||||||
void initDrawSystemInfo(const SequenceInitInfo&);
|
void initDrawSystemInfo(const SequenceInitInfo&);
|
||||||
|
|
|
||||||
|
|
@ -23,5 +23,32 @@ public:
|
||||||
|
|
||||||
bool receiveRequestFromObject(const CameraObjectRequestInfo& info);
|
bool receiveRequestFromObject(const CameraObjectRequestInfo& info);
|
||||||
void setAngleV(f32 angleV);
|
void setAngleV(f32 angleV);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void* _0; // object of size 0x14
|
||||||
|
void* _8; // object of size 0x10
|
||||||
|
bool mIsValidRotateH;
|
||||||
|
s32 _14;
|
||||||
|
f32 _18;
|
||||||
|
f32 _1c;
|
||||||
|
f32 mMinAngleH;
|
||||||
|
f32 mMaxAngleH;
|
||||||
|
f32 _28;
|
||||||
|
f32 mAngleV;
|
||||||
|
f32 _30;
|
||||||
|
f32 mMinAngleV;
|
||||||
|
f32 mMaxAngleV;
|
||||||
|
f32 _3c;
|
||||||
|
f32 _40;
|
||||||
|
f32 _44;
|
||||||
|
f32 _48;
|
||||||
|
f32 _4c;
|
||||||
|
bool mIsKeepPreAngleV;
|
||||||
|
bool mIsSetResetAngleV;
|
||||||
|
f32 mResetAngleV;
|
||||||
|
bool mIsInvalidReceiveRequest;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(CameraAngleCtrlInfo) == 0x60);
|
||||||
|
|
||||||
} // namespace al
|
} // namespace al
|
||||||
|
|
|
||||||
|
|
@ -17,8 +17,7 @@ void FlowMapCtrl::update() {
|
||||||
flowParameters.y =
|
flowParameters.y =
|
||||||
calcRate01(halfInterval - sead::Mathi::abs(halfInterval - mFlowStep), 0.0f, halfInterval);
|
calcRate01(halfInterval - sead::Mathi::abs(halfInterval - mFlowStep), 0.0f, halfInterval);
|
||||||
flowParameters.z = calcRate01(mFlowStep, 0.0f, mInterval);
|
flowParameters.z = calcRate01(mFlowStep, 0.0f, mInterval);
|
||||||
flowParameters.w =
|
flowParameters.w = calcRate01(wrapValue(mFlowStep + halfInterval, mInterval), 0.0f, mInterval);
|
||||||
calcRate01(modi(mFlowStep + halfInterval + mInterval, mInterval), 0.0f, mInterval);
|
|
||||||
|
|
||||||
s32 materialCount = getMaterialCount(mParent);
|
s32 materialCount = getMaterialCount(mParent);
|
||||||
for (s32 i = 0; i < materialCount; i++) {
|
for (s32 i = 0; i < materialCount; i++) {
|
||||||
|
|
@ -27,7 +26,7 @@ void FlowMapCtrl::update() {
|
||||||
}
|
}
|
||||||
|
|
||||||
mFlowStep++;
|
mFlowStep++;
|
||||||
mFlowStep = modi(mFlowStep + mInterval, mInterval);
|
mFlowStep = wrapValue(mFlowStep, mInterval);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace al
|
} // namespace al
|
||||||
|
|
|
||||||
48
src/Boss/Koopa/KoopaHackStopCtrl.h
Normal file
48
src/Boss/Koopa/KoopaHackStopCtrl.h
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <basis/seadTypes.h>
|
||||||
|
#include <math/seadQuat.h>
|
||||||
|
#include <math/seadVector.h>
|
||||||
|
|
||||||
|
#include "Library/Scene/ISceneObj.h"
|
||||||
|
|
||||||
|
#include "Scene/SceneObjFactory.h"
|
||||||
|
|
||||||
|
namespace al {
|
||||||
|
class LiveActor;
|
||||||
|
}
|
||||||
|
|
||||||
|
class KoopaHackStopCtrl : public al::ISceneObj {
|
||||||
|
public:
|
||||||
|
static constexpr s32 sSceneObjId = SceneObjID_KoopaStopHackCtrl;
|
||||||
|
|
||||||
|
KoopaHackStopCtrl();
|
||||||
|
|
||||||
|
const char* getSceneObjName() const override { return "崩落クッパの停止制御"; }
|
||||||
|
|
||||||
|
void startStop(const al::LiveActor* actor);
|
||||||
|
void endStop(const al::LiveActor* actor);
|
||||||
|
void resetPosture(const al::LiveActor* actor, const sead::Quatf& quat,
|
||||||
|
const sead::Vector3f& trans);
|
||||||
|
bool tryResetPosture(al::LiveActor* actor);
|
||||||
|
|
||||||
|
private:
|
||||||
|
const al::LiveActor* mStopActor = nullptr;
|
||||||
|
bool mIsNeedResetPosture = false;
|
||||||
|
sead::Quatf mResetQuat = sead::Quatf::unit;
|
||||||
|
sead::Vector3f mResetTrans = sead::Vector3f::zero;
|
||||||
|
bool mIsStatusDemoForSceneKoopaHack = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(KoopaHackStopCtrl) == 0x38, "KoopaHackStopCtrl");
|
||||||
|
|
||||||
|
namespace KoopaHackFunction {
|
||||||
|
void startStopKoopaHack(al::LiveActor* actor);
|
||||||
|
void endStopKoopaHack(al::LiveActor* actor);
|
||||||
|
void resetPostureKoopaHack(al::LiveActor* actor, const sead::Quatf& quat,
|
||||||
|
const sead::Vector3f& trans);
|
||||||
|
bool isStopKoopaHack(const al::LiveActor* actor);
|
||||||
|
bool isStatusDemoForSceneKoopaHack(const al::LiveActor* actor);
|
||||||
|
void setStatusDemoForSceneKoopaHack(const al::LiveActor* actor);
|
||||||
|
void resetStatusDemoForSceneKoopaHack(const al::LiveActor* actor);
|
||||||
|
} // namespace KoopaHackFunction
|
||||||
|
|
@ -65,8 +65,8 @@ void KoopaLandPointHolder::decidePointEitherFarSide(const sead::Vector3f& pos) {
|
||||||
}
|
}
|
||||||
|
|
||||||
mInvalidPoints[mCurrentLandPoint] = false;
|
mInvalidPoints[mCurrentLandPoint] = false;
|
||||||
s32 prevPoint = al::modi(mCurrentLandPoint - 1 + mLandPoints, mLandPoints);
|
s32 prevPoint = al::wrapValue(mCurrentLandPoint - 1, mLandPoints);
|
||||||
s32 nextPoint = al::modi(mCurrentLandPoint + 1 + mLandPoints, mLandPoints);
|
s32 nextPoint = al::wrapValue(mCurrentLandPoint + 1, mLandPoints);
|
||||||
|
|
||||||
f32 prevDist = getKoopaLandPointDistance(mPointsTrans[prevPoint], pos);
|
f32 prevDist = getKoopaLandPointDistance(mPointsTrans[prevPoint], pos);
|
||||||
f32 nextDist = getKoopaLandPointDistance(mPointsTrans[nextPoint], pos);
|
f32 nextDist = getKoopaLandPointDistance(mPointsTrans[nextPoint], pos);
|
||||||
|
|
|
||||||
41
src/Enemy/Bros.cpp
Normal file
41
src/Enemy/Bros.cpp
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
#include "Enemy/Bros.h"
|
||||||
|
|
||||||
|
#include "Library/LiveActor/ActorActionFunction.h"
|
||||||
|
#include "Library/LiveActor/ActorClippingFunction.h"
|
||||||
|
#include "Library/LiveActor/ActorFlagFunction.h"
|
||||||
|
#include "Library/LiveActor/ActorPoseUtil.h"
|
||||||
|
#include "Library/Math/MathUtil.h"
|
||||||
|
|
||||||
|
BrosWeaponBase::BrosWeaponBase(const char* name, const al::LiveActor* bros)
|
||||||
|
: al::LiveActor(name), mBros(bros) {}
|
||||||
|
|
||||||
|
void BrosWeaponBase::attach(const sead::Matrix34f* poseMtx, const sead::Vector3f& trans,
|
||||||
|
const sead::Vector3f& rotation, const char* actionName) {
|
||||||
|
mPoseMtx = poseMtx;
|
||||||
|
mTrans.set(trans);
|
||||||
|
mRotation.set(rotation);
|
||||||
|
|
||||||
|
sead::Matrix34f attachMtx;
|
||||||
|
calcAttachMtx(&attachMtx, poseMtx, trans, rotation);
|
||||||
|
al::updatePoseMtx(this, &attachMtx);
|
||||||
|
al::invalidateClipping(this);
|
||||||
|
al::offCollide(this);
|
||||||
|
if (actionName)
|
||||||
|
al::startAction(this, actionName);
|
||||||
|
appear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BrosWeaponBase::calcAttachMtx(sead::Matrix34f* attachMtx, const sead::Matrix34f* poseMtx,
|
||||||
|
const sead::Vector3f& trans, const sead::Vector3f& rotation) {
|
||||||
|
sead::Matrix34f translationMatrix;
|
||||||
|
translationMatrix.makeRT(sead::Vector3f::zero, trans);
|
||||||
|
|
||||||
|
sead::Matrix34f rotationMatrix;
|
||||||
|
rotationMatrix.makeRT(rotation, sead::Vector3f::zero);
|
||||||
|
|
||||||
|
sead::Matrix34f mtxRT = rotationMatrix * translationMatrix;
|
||||||
|
sead::Matrix34f poseMtxNorm = *poseMtx;
|
||||||
|
al::normalize(&poseMtxNorm);
|
||||||
|
|
||||||
|
attachMtx->setMul(poseMtxNorm, mtxRT);
|
||||||
|
}
|
||||||
43
src/Enemy/Bros.h
Normal file
43
src/Enemy/Bros.h
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <basis/seadTypes.h>
|
||||||
|
#include <math/seadMatrix.h>
|
||||||
|
#include <math/seadVector.h>
|
||||||
|
|
||||||
|
#include "Library/LiveActor/LiveActor.h"
|
||||||
|
|
||||||
|
class BrosWeaponBase : public al::LiveActor {
|
||||||
|
public:
|
||||||
|
BrosWeaponBase(const char* name, const al::LiveActor* bros);
|
||||||
|
|
||||||
|
// TODO: Find what unknown does
|
||||||
|
virtual void shoot(const sead::Vector3f& trans, const sead::Quatf& quat,
|
||||||
|
const sead::Vector3f& force, bool isHack, s32 unknown, bool isFast) = 0;
|
||||||
|
virtual void killCollide(al::HitSensor* sensor, const sead::Vector3f& trans, bool isHack) = 0;
|
||||||
|
virtual void killEnemy() = 0;
|
||||||
|
|
||||||
|
virtual void attach(const sead::Matrix34f* poseMtx, const sead::Vector3f& trans,
|
||||||
|
const sead::Vector3f& rotation, const char* actionName);
|
||||||
|
void calcAttachMtx(sead::Matrix34f* attachMtx, const sead::Matrix34f* poseMtx,
|
||||||
|
const sead::Vector3f& trans, const sead::Vector3f& rotation);
|
||||||
|
|
||||||
|
virtual u32 getBreakStep() const { return 0; }
|
||||||
|
|
||||||
|
virtual bool isBreak() const { return false; }
|
||||||
|
|
||||||
|
const sead::Matrix34f* getPoseMtx() const { return mPoseMtx; }
|
||||||
|
|
||||||
|
const sead::Vector3f& getTrans() const { return mTrans; }
|
||||||
|
|
||||||
|
const sead::Vector3f& getRotation() const { return mRotation; }
|
||||||
|
|
||||||
|
const LiveActor* getBrosActor() const { return mBros; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
const sead::Matrix34f* mPoseMtx = nullptr;
|
||||||
|
sead::Vector3f mTrans = sead::Vector3f::zero;
|
||||||
|
sead::Vector3f mRotation = sead::Vector3f::zero;
|
||||||
|
const al::LiveActor* mBros;
|
||||||
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(BrosWeaponBase) == 0x130);
|
||||||
|
|
@ -638,7 +638,8 @@ void Bubble::control() {
|
||||||
if (!al::isNerve(this, &NrvBubble.StandBy) && !al::isNerve(this, &NrvBubble.Delay) &&
|
if (!al::isNerve(this, &NrvBubble.StandBy) && !al::isNerve(this, &NrvBubble.Delay) &&
|
||||||
(!isHack() || !rs::isActiveHackStartDemo(mPlayerHack)) &&
|
(!isHack() || !rs::isActiveHackStartDemo(mPlayerHack)) &&
|
||||||
!al::isClipped(mClippingProbeActor) && !mIsClipped) {
|
!al::isClipped(mClippingProbeActor) && !mIsClipped) {
|
||||||
mReviveDelayCount = al::modi(mReviveDelayCount + 1 + mReviveDelayTime, mReviveDelayTime);
|
mReviveDelayCount =
|
||||||
|
al::wrapValue(static_cast<s32>(mReviveDelayCount + 1), mReviveDelayTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
mIsClipped = al::isClipped(mClippingProbeActor);
|
mIsClipped = al::isClipped(mClippingProbeActor);
|
||||||
|
|
|
||||||
|
|
@ -505,7 +505,8 @@ void Gamane::exeHack() {
|
||||||
mCoinsLeft--;
|
mCoinsLeft--;
|
||||||
}
|
}
|
||||||
|
|
||||||
mHackCoinAppearCounter = al::modi((mHackCoinAppearCounter++ + 1) + 6, 6);
|
// NOTE: this is only one increment, as post-incrementing is used
|
||||||
|
mHackCoinAppearCounter = al::wrapValue(mHackCoinAppearCounter++ + 1, 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Gamane::exeTrampled() {
|
void Gamane::exeTrampled() {
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ HosuiTrailKeeper::HosuiTrailKeeper(const al::ActorInitInfo& initInfo) {
|
||||||
void HosuiTrailKeeper::appearTrail(const sead::Vector3f& pos, const sead::Vector3f& dir) {
|
void HosuiTrailKeeper::appearTrail(const sead::Vector3f& pos, const sead::Vector3f& dir) {
|
||||||
s32 count = mTrails.size();
|
s32 count = mTrails.size();
|
||||||
|
|
||||||
s32 prevIdx = al::modi(mIndex + count - 1 + count, count);
|
s32 prevIdx = al::wrapValue(mIndex + count - 1, count);
|
||||||
HosuiTrail* prevTrail = mTrails[prevIdx];
|
HosuiTrail* prevTrail = mTrails[prevIdx];
|
||||||
|
|
||||||
if (al::isAlive(prevTrail) && (pos - al::getTrans(prevTrail)).length() < 120.0f)
|
if (al::isAlive(prevTrail) && (pos - al::getTrans(prevTrail)).length() < 120.0f)
|
||||||
|
|
@ -56,12 +56,12 @@ void HosuiTrailKeeper::appearTrail(const sead::Vector3f& pos, const sead::Vector
|
||||||
trail->setFollowCollisionParts(triangle.getCollisionParts());
|
trail->setFollowCollisionParts(triangle.getCollisionParts());
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 disappearIdx = al::modi(mIndex + 5 + count, count);
|
s32 disappearIdx = al::wrapValue(mIndex + 5, count);
|
||||||
HosuiTrail* disappearTrail = mTrails[disappearIdx];
|
HosuiTrail* disappearTrail = mTrails[disappearIdx];
|
||||||
if (al::isAlive(disappearTrail))
|
if (al::isAlive(disappearTrail))
|
||||||
disappearTrail->disappear();
|
disappearTrail->disappear();
|
||||||
|
|
||||||
mIndex = al::modi(mIndex + 1 + count, count);
|
mIndex = al::wrapValue(mIndex + 1, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HosuiTrailKeeper::forceKillAll() {
|
void HosuiTrailKeeper::forceKillAll() {
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,17 @@
|
||||||
|
|
||||||
#include "Library/LiveActor/LiveActor.h"
|
#include "Library/LiveActor/LiveActor.h"
|
||||||
|
|
||||||
|
namespace al {
|
||||||
|
class EnemyStateBlowDown;
|
||||||
|
class CollisionPartsFilterBase;
|
||||||
|
} // namespace al
|
||||||
|
class ActorStateSandGeyser;
|
||||||
|
class EnemyStateReset;
|
||||||
|
class EnemyStateWander;
|
||||||
|
class PlayerPushReceiver;
|
||||||
|
class CollisionMultiShape;
|
||||||
|
class CollisionShapeKeeper;
|
||||||
|
|
||||||
class KuriboMini : public al::LiveActor {
|
class KuriboMini : public al::LiveActor {
|
||||||
public:
|
public:
|
||||||
KuriboMini(const char* name);
|
KuriboMini(const char* name);
|
||||||
|
|
@ -59,5 +70,27 @@ public:
|
||||||
void forceStartClipped();
|
void forceStartClipped();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void* filler[22];
|
EnemyStateReset* mStateReset;
|
||||||
|
EnemyStateWander* mStateWander;
|
||||||
|
ActorStateSandGeyser* mStateSandGeyser;
|
||||||
|
al::EnemyStateBlowDown* mStateBlowDown;
|
||||||
|
s32 mCounterChase;
|
||||||
|
s32 _12c;
|
||||||
|
al::CollisionPartsFilterBase* mCollisionFilter;
|
||||||
|
void* _138;
|
||||||
|
s32 _140;
|
||||||
|
f32 mClippingRadius;
|
||||||
|
PlayerPushReceiver* mPlayerPushReceiver;
|
||||||
|
CollisionMultiShape* mCollisionMultiShape;
|
||||||
|
CollisionShapeKeeper* mCollisionShapeKeeper;
|
||||||
|
f32 mJumpSink;
|
||||||
|
s32 mFramesSpecialPush;
|
||||||
|
s32 mShiftTypeOnGround;
|
||||||
|
al::LiveActor* _170;
|
||||||
|
sead::Vector3f _178;
|
||||||
|
bool mIsPopBack;
|
||||||
|
bool mIsInvalidateClipping;
|
||||||
|
sead::Matrix34f mColliderMtx;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(KuriboMini) == 0x1b8);
|
||||||
|
|
|
||||||
|
|
@ -29,3 +29,5 @@ public:
|
||||||
private:
|
private:
|
||||||
al::LayoutActor* mParBg = nullptr;
|
al::LayoutActor* mParBg = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(BootLayout) == 0x138);
|
||||||
|
|
|
||||||
|
|
@ -243,8 +243,7 @@ void MenuSelectParts::exeSelect() {
|
||||||
s32 direction = mKeyRepeatCtrl->isUp() ? -1 : 1;
|
s32 direction = mKeyRepeatCtrl->isUp() ? -1 : 1;
|
||||||
|
|
||||||
al::startAction(mLayoutArray[calcPartsIndex(mCursorItemIndex)], "Wait");
|
al::startAction(mLayoutArray[calcPartsIndex(mCursorItemIndex)], "Wait");
|
||||||
mCursorItemIndex =
|
mCursorItemIndex = al::wrapValue(mCursorItemIndex + direction, mMenuItemAmount);
|
||||||
al::modi(mCursorItemIndex + direction + mMenuItemAmount, mMenuItemAmount);
|
|
||||||
|
|
||||||
f32 pitch = ((1.0f - (f32)mCursorItemIndex / (mMenuItemAmount - 1)) * 0.375f) + 1.0f;
|
f32 pitch = ((1.0f - (f32)mCursorItemIndex / (mMenuItemAmount - 1)) * 0.375f) + 1.0f;
|
||||||
al::PadRumbleParam param;
|
al::PadRumbleParam param;
|
||||||
|
|
|
||||||
|
|
@ -161,15 +161,15 @@ void WindowConfirmData::exeWait() {
|
||||||
|
|
||||||
if (rs::isRepeatUiDown(mWindowConfirmLayout)) {
|
if (rs::isRepeatUiDown(mWindowConfirmLayout)) {
|
||||||
if (mSelectionCooldown == 0)
|
if (mSelectionCooldown == 0)
|
||||||
changeSelectingIdx(al::modi((mSelectionIndex + 1) + 2, 2));
|
changeSelectingIdx(al::wrapValue(mSelectionIndex + 1, 2));
|
||||||
mSelectionCooldown = al::modi((mSelectionCooldown + 1) + 10, 10);
|
mSelectionCooldown = al::wrapValue(mSelectionCooldown + 1, 10);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rs::isRepeatUiUp(mWindowConfirmLayout)) {
|
if (rs::isRepeatUiUp(mWindowConfirmLayout)) {
|
||||||
if (mSelectionCooldown == 0)
|
if (mSelectionCooldown == 0)
|
||||||
changeSelectingIdx(al::modi((mSelectionIndex - 1) + 2, 2));
|
changeSelectingIdx(al::wrapValue(mSelectionIndex - 1, 2));
|
||||||
mSelectionCooldown = al::modi((mSelectionCooldown + 1) + 10, 10);
|
mSelectionCooldown = al::wrapValue(mSelectionCooldown + 1, 10);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
89
src/MapObj/BossKnuckleFix.cpp
Normal file
89
src/MapObj/BossKnuckleFix.cpp
Normal file
|
|
@ -0,0 +1,89 @@
|
||||||
|
#include "MapObj/BossKnuckleFix.h"
|
||||||
|
|
||||||
|
#include <math/seadVector.h>
|
||||||
|
|
||||||
|
#include "Library/LiveActor/ActorActionFunction.h"
|
||||||
|
#include "Library/LiveActor/ActorAnimFunction.h"
|
||||||
|
#include "Library/LiveActor/ActorCollisionFunction.h"
|
||||||
|
#include "Library/LiveActor/ActorInitUtil.h"
|
||||||
|
#include "Library/LiveActor/ActorPoseUtil.h"
|
||||||
|
#include "Library/LiveActor/ActorResourceFunction.h"
|
||||||
|
#include "Library/LiveActor/ActorSensorUtil.h"
|
||||||
|
#include "Library/LiveActor/LiveActorFunction.h"
|
||||||
|
#include "Library/Nerve/NerveSetupUtil.h"
|
||||||
|
#include "Library/Nerve/NerveUtil.h"
|
||||||
|
#include "Library/Obj/CollisionObj.h"
|
||||||
|
#include "Library/Stage/StageSwitchUtil.h"
|
||||||
|
|
||||||
|
#include "Util/SensorMsgFunction.h"
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
NERVE_IMPL(BossKnuckleFix, Wait);
|
||||||
|
NERVE_IMPL(BossKnuckleFix, ReactionLarge);
|
||||||
|
NERVE_IMPL(BossKnuckleFix, Reaction);
|
||||||
|
|
||||||
|
NERVES_MAKE_STRUCT(BossKnuckleFix, Wait, ReactionLarge, Reaction);
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
BossKnuckleFix::BossKnuckleFix(const char* name) : al::LiveActor(name) {}
|
||||||
|
|
||||||
|
void BossKnuckleFix::init(const al::ActorInitInfo& info) {
|
||||||
|
al::initActorWithArchiveName(this, info, "BossKnuckleBody", "Fix");
|
||||||
|
al::initNerve(this, &NrvBossKnuckleFix.Wait, 0);
|
||||||
|
// NOTE: color of embedded grand shine is hardcoded to 5 (Sand)
|
||||||
|
al::startMclAnimAndSetFrameAndStop(al::getSubActor(this, "グランドシャイン"), "Color", 5.0f);
|
||||||
|
al::trySyncStageSwitchKill(this);
|
||||||
|
makeActorAlive();
|
||||||
|
|
||||||
|
mCollisionObj = new al::CollisionObj(info, al::getModelResource(this), "MoveLimit",
|
||||||
|
al::getHitSensor(this, "Body"), nullptr, nullptr);
|
||||||
|
al::setCollisionPartsSpecialPurposeName(mCollisionObj, "MoveLimit");
|
||||||
|
al::setTrans(mCollisionObj, al::getTrans(this));
|
||||||
|
al::setRotate(mCollisionObj, {0.0f, 90.0f, 0.0f});
|
||||||
|
mCollisionObj->makeActorAlive();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool BossKnuckleFix::receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
|
||||||
|
al::HitSensor* self) {
|
||||||
|
if (rs::isMsgPlayerDisregardHomingAttack(message))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (al::isNerve(this, &NrvBossKnuckleFix.Wait) &&
|
||||||
|
(rs::isMsgSphinxRideAttackTouch(message) || rs::isMsgPlayerAndCapHipDropAll(message))) {
|
||||||
|
rs::requestHitReactionToAttacker(message, self, other);
|
||||||
|
|
||||||
|
mReactionCount++;
|
||||||
|
if (mReactionCount >= 3) {
|
||||||
|
mReactionCount = 0;
|
||||||
|
al::setNerve(this, &NrvBossKnuckleFix.ReactionLarge);
|
||||||
|
} else
|
||||||
|
al::setNerve(this, &NrvBossKnuckleFix.Reaction);
|
||||||
|
|
||||||
|
return !rs::isMsgPlayerAndCapHipDropAll(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BossKnuckleFix::exeWait() {
|
||||||
|
if (al::isFirstStep(this))
|
||||||
|
al::startAction(this, "MapWait");
|
||||||
|
}
|
||||||
|
|
||||||
|
void BossKnuckleFix::exeReaction() {
|
||||||
|
if (al::isFirstStep(this))
|
||||||
|
al::startAction(this, "MapReaction");
|
||||||
|
|
||||||
|
if (al::isActionEnd(this))
|
||||||
|
al::setNerve(this, &NrvBossKnuckleFix.Wait);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BossKnuckleFix::exeReactionLarge() {
|
||||||
|
if (al::isFirstStep(this)) {
|
||||||
|
al::startAction(this, "MapReactionLarge");
|
||||||
|
al::tryOnStageSwitch(this, "ReactionOn");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (al::isActionEnd(this))
|
||||||
|
al::setNerve(this, &NrvBossKnuckleFix.Wait);
|
||||||
|
}
|
||||||
31
src/MapObj/BossKnuckleFix.h
Normal file
31
src/MapObj/BossKnuckleFix.h
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <basis/seadTypes.h>
|
||||||
|
|
||||||
|
#include "Library/LiveActor/LiveActor.h"
|
||||||
|
|
||||||
|
namespace al {
|
||||||
|
struct ActorInitInfo;
|
||||||
|
class CollisionObj;
|
||||||
|
class HitSensor;
|
||||||
|
class SensorMsg;
|
||||||
|
} // namespace al
|
||||||
|
|
||||||
|
class BossKnuckleFix : public al::LiveActor {
|
||||||
|
public:
|
||||||
|
BossKnuckleFix(const char* name);
|
||||||
|
|
||||||
|
void init(const al::ActorInitInfo& info) override;
|
||||||
|
bool receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
|
||||||
|
al::HitSensor* self) override;
|
||||||
|
|
||||||
|
void exeWait();
|
||||||
|
void exeReaction();
|
||||||
|
void exeReactionLarge();
|
||||||
|
|
||||||
|
private:
|
||||||
|
al::CollisionObj* mCollisionObj = nullptr;
|
||||||
|
s32 mReactionCount = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(BossKnuckleFix) == 0x118);
|
||||||
|
|
@ -9,6 +9,9 @@ struct ActorInitInfo;
|
||||||
class HitSensor;
|
class HitSensor;
|
||||||
class SensorMsg;
|
class SensorMsg;
|
||||||
} // namespace al
|
} // namespace al
|
||||||
|
class CapTargetInfo;
|
||||||
|
class ItemGenerator;
|
||||||
|
class SaveObjInfo;
|
||||||
|
|
||||||
class CapHanger : public al::LiveActor {
|
class CapHanger : public al::LiveActor {
|
||||||
public:
|
public:
|
||||||
|
|
@ -31,15 +34,15 @@ public:
|
||||||
void setPeachCastleCap(const sead::Vector3f&);
|
void setPeachCastleCap(const sead::Vector3f&);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void* _108;
|
CapTargetInfo* mCapTargetInfo;
|
||||||
void* _110;
|
void* _110;
|
||||||
s32 _118;
|
s32 _118;
|
||||||
s32 _11c;
|
s32 mAppearItemNum;
|
||||||
s32 _120;
|
s32 _120;
|
||||||
void* _128;
|
ItemGenerator* mItemGenerator;
|
||||||
bool _130;
|
bool mIsEmitEffect;
|
||||||
void* _138;
|
void* _138;
|
||||||
void* _140;
|
SaveObjInfo* _140;
|
||||||
sead::Matrix34f _148;
|
sead::Matrix34f _148;
|
||||||
sead::Matrix34f _178;
|
sead::Matrix34f _178;
|
||||||
bool _1a8;
|
bool _1a8;
|
||||||
|
|
|
||||||
77
src/MapObj/DoorCity.cpp
Normal file
77
src/MapObj/DoorCity.cpp
Normal file
|
|
@ -0,0 +1,77 @@
|
||||||
|
#include "MapObj/DoorCity.h"
|
||||||
|
|
||||||
|
#include "Library/Base/StringUtil.h"
|
||||||
|
#include "Library/LiveActor/ActorActionFunction.h"
|
||||||
|
#include "Library/LiveActor/ActorCollisionFunction.h"
|
||||||
|
#include "Library/LiveActor/ActorInitUtil.h"
|
||||||
|
#include "Library/Nerve/NerveSetupUtil.h"
|
||||||
|
#include "Library/Nerve/NerveUtil.h"
|
||||||
|
#include "Library/Placement/PlacementFunction.h"
|
||||||
|
#include "Library/Stage/StageSwitchUtil.h"
|
||||||
|
#include "Library/Thread/FunctorV0M.h"
|
||||||
|
|
||||||
|
#include "System/GameDataFunction.h"
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
NERVE_IMPL(DoorCity, Open);
|
||||||
|
NERVE_IMPL(DoorCity, WaitOpen);
|
||||||
|
NERVE_IMPL(DoorCity, WaitClose);
|
||||||
|
|
||||||
|
NERVES_MAKE_NOSTRUCT(DoorCity, Open, WaitOpen, WaitClose);
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
DoorCity::DoorCity(const char* name) : al::LiveActor(name) {}
|
||||||
|
|
||||||
|
void DoorCity::init(const al::ActorInitInfo& info) {
|
||||||
|
using DoorCityFunctor = al::FunctorV0M<DoorCity*, void (DoorCity::*)()>;
|
||||||
|
|
||||||
|
al::initActor(this, info);
|
||||||
|
const char* initState = nullptr;
|
||||||
|
al::getStringArg(&initState, info, "InitState");
|
||||||
|
|
||||||
|
if (al::isEqualString(initState, "Open")) {
|
||||||
|
al::initNerve(this, &WaitOpen, 0);
|
||||||
|
al::invalidateCollisionParts(this);
|
||||||
|
} else if (al::isEqualString(initState, "Close")) {
|
||||||
|
al::initNerve(this, &WaitClose, 0);
|
||||||
|
al::listenStageSwitchOnStart(this, DoorCityFunctor(this, &DoorCity::onStageSwitch));
|
||||||
|
} else {
|
||||||
|
kill();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
makeActorAlive();
|
||||||
|
|
||||||
|
al::listenStageSwitchOn(this, "SwitchLightOff",
|
||||||
|
DoorCityFunctor(this, &DoorCity::listenSwitchOff));
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoorCity::onStageSwitch() {
|
||||||
|
al::setNerve(this, &Open);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoorCity::listenSwitchOff() {}
|
||||||
|
|
||||||
|
void DoorCity::exeWaitOpen() {
|
||||||
|
if (al::isFirstStep(this))
|
||||||
|
al::startAction(this, "OpenWait");
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoorCity::exeOpen() {
|
||||||
|
if (al::isFirstStep(this))
|
||||||
|
al::startAction(this, "Open");
|
||||||
|
|
||||||
|
if (al::isActionEnd(this)) {
|
||||||
|
al::invalidateCollisionParts(this);
|
||||||
|
al::setNerve(this, &WaitOpen);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoorCity::exeWaitClose() {
|
||||||
|
if (al::isFirstStep(this)) {
|
||||||
|
if (GameDataFunction::getScenarioNo(this) == 1)
|
||||||
|
al::tryStartAction(this, "Blink");
|
||||||
|
else
|
||||||
|
al::tryStartAction(this, "CloseWait");
|
||||||
|
}
|
||||||
|
}
|
||||||
18
src/MapObj/DoorCity.h
Normal file
18
src/MapObj/DoorCity.h
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Library/LiveActor/LiveActor.h"
|
||||||
|
|
||||||
|
class DoorCity : public al::LiveActor {
|
||||||
|
public:
|
||||||
|
DoorCity(const char* name);
|
||||||
|
|
||||||
|
void init(const al::ActorInitInfo& info) override;
|
||||||
|
|
||||||
|
void onStageSwitch();
|
||||||
|
void listenSwitchOff();
|
||||||
|
void exeWaitOpen();
|
||||||
|
void exeOpen();
|
||||||
|
void exeWaitClose();
|
||||||
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(DoorCity) == 0x108);
|
||||||
165
src/MapObj/MoonBasementFloor.cpp
Normal file
165
src/MapObj/MoonBasementFloor.cpp
Normal file
|
|
@ -0,0 +1,165 @@
|
||||||
|
#include "MapObj/MoonBasementFloor.h"
|
||||||
|
|
||||||
|
#include "Library/LiveActor/ActorActionFunction.h"
|
||||||
|
#include "Library/LiveActor/ActorClippingFunction.h"
|
||||||
|
#include "Library/LiveActor/ActorFlagFunction.h"
|
||||||
|
#include "Library/LiveActor/ActorInitFunction.h"
|
||||||
|
#include "Library/LiveActor/ActorInitUtil.h"
|
||||||
|
#include "Library/LiveActor/ActorMovementFunction.h"
|
||||||
|
#include "Library/Math/MathUtil.h"
|
||||||
|
#include "Library/Nerve/NerveSetupUtil.h"
|
||||||
|
#include "Library/Nerve/NerveUtil.h"
|
||||||
|
#include "Library/Placement/PlacementFunction.h"
|
||||||
|
#include "Library/Stage/StageSwitchUtil.h"
|
||||||
|
#include "Library/Thread/FunctorV0M.h"
|
||||||
|
|
||||||
|
#include "Boss/Koopa/KoopaHackStopCtrl.h"
|
||||||
|
#include "Util/SensorMsgFunction.h"
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
NERVE_IMPL(MoonBasementFloor, Wait)
|
||||||
|
NERVE_IMPL(MoonBasementFloor, FallSignStart)
|
||||||
|
NERVE_IMPL_(MoonBasementFloor, FallSignStartByMeteor, FallSignStart)
|
||||||
|
NERVE_IMPL_(MoonBasementFloor, FallSignStartBySwitch, FallSignStart)
|
||||||
|
NERVE_IMPL(MoonBasementFloor, FallSignBySwitch)
|
||||||
|
NERVE_IMPL_(MoonBasementFloor, FallByMeteor, Fall)
|
||||||
|
NERVE_IMPL(MoonBasementFloor, FallSign)
|
||||||
|
NERVE_IMPL(MoonBasementFloor, Fall)
|
||||||
|
|
||||||
|
NERVES_MAKE_STRUCT(MoonBasementFloor, Wait, FallSignStart, FallSignStartByMeteor,
|
||||||
|
FallSignStartBySwitch, FallSignBySwitch, FallByMeteor, FallSign, Fall)
|
||||||
|
|
||||||
|
const f32 sFallGravity = 0.2f;
|
||||||
|
const f32 sFallScale = 0.95f;
|
||||||
|
const f32 sFallGravityByMeteor = 0.2f;
|
||||||
|
const f32 sFallScaleByMeteor = 0.95f;
|
||||||
|
|
||||||
|
struct MoonFallParams {
|
||||||
|
const f32* gravity;
|
||||||
|
const f32* scale;
|
||||||
|
};
|
||||||
|
|
||||||
|
const MoonFallParams sFallParams{&sFallGravity, &sFallScale};
|
||||||
|
const MoonFallParams sFallParamsByMeteor{&sFallGravityByMeteor, &sFallScaleByMeteor};
|
||||||
|
|
||||||
|
inline const MoonFallParams& getMoonFallParams(al::LiveActor* actor) {
|
||||||
|
return al::isNerve(actor, &NrvMoonBasementFloor.FallByMeteor) ? sFallParamsByMeteor :
|
||||||
|
sFallParams;
|
||||||
|
}
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
MoonBasementFloor::MoonBasementFloor(const char* name) : al::LiveActor(name) {}
|
||||||
|
|
||||||
|
void MoonBasementFloor::init(const al::ActorInitInfo& info) {
|
||||||
|
using MoonBasementFloorFunctor =
|
||||||
|
al::FunctorV0M<MoonBasementFloor*, void (MoonBasementFloor::*)()>;
|
||||||
|
|
||||||
|
al::initActorChangeModel(this, info);
|
||||||
|
al::initNerve(this, &NrvMoonBasementFloor.Wait, 0);
|
||||||
|
|
||||||
|
f32 rotate = sead::Mathf::floor(al::getRandom(0.0f, 3.99f));
|
||||||
|
al::addRotateAndRepeatY(this, rotate * 90.0);
|
||||||
|
|
||||||
|
if (al::listenStageSwitchOn(
|
||||||
|
this, "SwitchFallStart",
|
||||||
|
MoonBasementFloorFunctor(this, &MoonBasementFloor::startFallBySwitch))) {
|
||||||
|
al::tryGetArg(&mFallSignStepBySwitch, info, "FallSignStepBySwitch");
|
||||||
|
}
|
||||||
|
|
||||||
|
al::trySyncStageSwitchKill(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MoonBasementFloor::startFallBySwitch() {
|
||||||
|
if (!al::isAlive(this))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (al::isNerve(this, &NrvMoonBasementFloor.Fall))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (al::isNerve(this, &NrvMoonBasementFloor.FallByMeteor))
|
||||||
|
return;
|
||||||
|
|
||||||
|
s32 fallSignStepBySwitch = mFallSignStepBySwitch;
|
||||||
|
al::invalidateClipping(this);
|
||||||
|
|
||||||
|
if (fallSignStepBySwitch == 0)
|
||||||
|
al::setNerve(this, &NrvMoonBasementFloor.FallSignStart);
|
||||||
|
else
|
||||||
|
al::setNerve(this, &NrvMoonBasementFloor.FallSignStartBySwitch);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MoonBasementFloor::movement() {
|
||||||
|
if (!KoopaHackFunction::isStopKoopaHack(this))
|
||||||
|
al::LiveActor::movement();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MoonBasementFloor::receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
|
||||||
|
al::HitSensor* self) {
|
||||||
|
if (!al::isNerve(this, &NrvMoonBasementFloor.Wait))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (rs::isMsgKoopaTouchFloor(message)) {
|
||||||
|
al::startHitReaction(this, "クッパ着地");
|
||||||
|
al::invalidateClipping(this);
|
||||||
|
al::setNerve(this, &NrvMoonBasementFloor.FallSignStart);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rs::isMsgMoonBasementAttackMeteor(message)) {
|
||||||
|
al::invalidateClipping(this);
|
||||||
|
al::setNerve(this, &NrvMoonBasementFloor.FallSignStartByMeteor);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MoonBasementFloor::exeWait() {
|
||||||
|
if (al::isFirstStep(this))
|
||||||
|
al::startAction(this, "Wait");
|
||||||
|
}
|
||||||
|
|
||||||
|
void MoonBasementFloor::exeFallSignStart() {
|
||||||
|
if (al::isFirstStep(this))
|
||||||
|
al::startAction(this, "FallSignStart");
|
||||||
|
|
||||||
|
if (al::isActionEnd(this)) {
|
||||||
|
if (al::isNerve(this, &NrvMoonBasementFloor.FallSignStartBySwitch))
|
||||||
|
al::setNerve(this, &NrvMoonBasementFloor.FallSignBySwitch);
|
||||||
|
else if (al::isNerve(this, &NrvMoonBasementFloor.FallSignStartByMeteor))
|
||||||
|
al::setNerve(this, &NrvMoonBasementFloor.FallByMeteor);
|
||||||
|
else
|
||||||
|
al::setNerve(this, &NrvMoonBasementFloor.FallSign);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MoonBasementFloor::exeFallSign() {
|
||||||
|
if (al::isFirstStep(this))
|
||||||
|
al::startAction(this, "FallSign");
|
||||||
|
|
||||||
|
al::setNerveAtActionEnd(this, &NrvMoonBasementFloor.Fall);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MoonBasementFloor::exeFallSignBySwitch() {
|
||||||
|
if (al::isFirstStep(this))
|
||||||
|
al::startAction(this, "FallSignBySwitch");
|
||||||
|
|
||||||
|
s32 fallSignStep = mFallSignStepBySwitch;
|
||||||
|
if (fallSignStep < 0)
|
||||||
|
fallSignStep = 30;
|
||||||
|
|
||||||
|
al::setNerveAtGreaterEqualStep(this, &NrvMoonBasementFloor.Fall, fallSignStep);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MoonBasementFloor::exeFall() {
|
||||||
|
if (al::isFirstStep(this))
|
||||||
|
al::startAction(this, "Fall");
|
||||||
|
|
||||||
|
al::addVelocityToGravity(this, *getMoonFallParams(this).gravity);
|
||||||
|
al::scaleVelocity(this, *getMoonFallParams(this).scale);
|
||||||
|
|
||||||
|
if (al::isGreaterEqualStep(this, 300)) {
|
||||||
|
al::startHitReaction(this, "消滅");
|
||||||
|
kill();
|
||||||
|
}
|
||||||
|
}
|
||||||
34
src/MapObj/MoonBasementFloor.h
Normal file
34
src/MapObj/MoonBasementFloor.h
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <basis/seadTypes.h>
|
||||||
|
|
||||||
|
#include "Library/LiveActor/LiveActor.h"
|
||||||
|
|
||||||
|
namespace al {
|
||||||
|
struct ActorInitInfo;
|
||||||
|
class HitSensor;
|
||||||
|
class SensorMsg;
|
||||||
|
} // namespace al
|
||||||
|
|
||||||
|
class MoonBasementFloor : public al::LiveActor {
|
||||||
|
public:
|
||||||
|
MoonBasementFloor(const char* name);
|
||||||
|
|
||||||
|
void init(const al::ActorInitInfo& info) override;
|
||||||
|
void movement() override;
|
||||||
|
bool receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
|
||||||
|
al::HitSensor* self) override;
|
||||||
|
|
||||||
|
void startFallBySwitch();
|
||||||
|
|
||||||
|
void exeWait();
|
||||||
|
void exeFallSignStart();
|
||||||
|
void exeFallSign();
|
||||||
|
void exeFallSignBySwitch();
|
||||||
|
void exeFall();
|
||||||
|
|
||||||
|
private:
|
||||||
|
s32 mFallSignStepBySwitch = -1;
|
||||||
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(MoonBasementFloor) == 0x110);
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <basis/seadTypes.h>
|
#include <basis/seadTypes.h>
|
||||||
|
#include <container/seadPtrArray.h>
|
||||||
#include <math/seadQuat.h>
|
#include <math/seadQuat.h>
|
||||||
#include <math/seadVector.h>
|
#include <math/seadVector.h>
|
||||||
|
|
||||||
|
|
@ -39,7 +40,8 @@ public:
|
||||||
al::CameraDirector* getCameraDirector() const override;
|
al::CameraDirector* getCameraDirector() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
char _10[0x18];
|
sead::PtrArray<PlayerStartInfo> mPlayerStartInfoList;
|
||||||
|
al::CameraDirector* mCameraDirector;
|
||||||
};
|
};
|
||||||
|
|
||||||
static_assert(sizeof(PlayerStartInfoHolder) == 0x28);
|
static_assert(sizeof(PlayerStartInfoHolder) == 0x28);
|
||||||
|
|
|
||||||
237
src/MapObj/RocketFlower.cpp
Normal file
237
src/MapObj/RocketFlower.cpp
Normal file
|
|
@ -0,0 +1,237 @@
|
||||||
|
#include "MapObj/RocketFlower.h"
|
||||||
|
|
||||||
|
#include "Library/Collision/PartsConnectorUtil.h"
|
||||||
|
#include "Library/Effect/EffectSystemInfo.h"
|
||||||
|
#include "Library/LiveActor/ActorActionFunction.h"
|
||||||
|
#include "Library/LiveActor/ActorAnimFunction.h"
|
||||||
|
#include "Library/LiveActor/ActorClippingFunction.h"
|
||||||
|
#include "Library/LiveActor/ActorInitUtil.h"
|
||||||
|
#include "Library/LiveActor/ActorMovementFunction.h"
|
||||||
|
#include "Library/LiveActor/ActorPoseUtil.h"
|
||||||
|
#include "Library/LiveActor/ActorSensorUtil.h"
|
||||||
|
#include "Library/Math/MathUtil.h"
|
||||||
|
#include "Library/Nerve/NerveSetupUtil.h"
|
||||||
|
#include "Library/Nerve/NerveUtil.h"
|
||||||
|
|
||||||
|
#include "MapObj/RocketFlowerFunction.h"
|
||||||
|
#include "Util/PlayerUtil.h"
|
||||||
|
#include "Util/SensorMsgFunction.h"
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
NERVE_IMPL(RocketFlower, Wait);
|
||||||
|
NERVE_IMPL(RocketFlower, Attach);
|
||||||
|
NERVE_IMPL(RocketFlower, WaitFollow);
|
||||||
|
NERVE_IMPL(RocketFlower, Follow);
|
||||||
|
NERVE_IMPL(RocketFlower, WaitAttach);
|
||||||
|
|
||||||
|
NERVES_MAKE_STRUCT(RocketFlower, Wait, Attach, WaitFollow, Follow, WaitAttach);
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
RocketFlower::RocketFlower(const char* name) : al::LiveActor(name) {}
|
||||||
|
|
||||||
|
void RocketFlower::init(const al::ActorInitInfo& info) {
|
||||||
|
al::initActor(this, info);
|
||||||
|
al::initNerve(this, &NrvRocketFlower.Wait, 0);
|
||||||
|
makeActorAlive();
|
||||||
|
|
||||||
|
mMtxConnector = al::tryCreateMtxConnector(this, info);
|
||||||
|
|
||||||
|
mFlowerSub = new al::LiveActor("ロケットフラワーの花");
|
||||||
|
al::initChildActorWithArchiveNameNoPlacementInfo(mFlowerSub, info, "RocketFlowerDash", nullptr);
|
||||||
|
al::startAction(mFlowerSub, "Wait");
|
||||||
|
mFlowerSub->makeActorDead();
|
||||||
|
|
||||||
|
RocketFlowerFunction::createRocketFlowerEquipWatcherIfNotExist(this, info);
|
||||||
|
al::setHitSensorPosPtr(this, "Equip", al::getTransPtr(mFlowerSub));
|
||||||
|
al::startAction(this, "Wait");
|
||||||
|
}
|
||||||
|
|
||||||
|
void RocketFlower::initAfterPlacement() {
|
||||||
|
if (mMtxConnector)
|
||||||
|
al::attachMtxConnectorToCollision(mMtxConnector, this, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RocketFlower::attackSensor(al::HitSensor* self, al::HitSensor* other) {
|
||||||
|
if (!al::isSensorName(self, "Equip"))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (isEnableEquip()) {
|
||||||
|
if (rs::sendMsgRocketFlowerExtension(other, self))
|
||||||
|
al::setNerve(this, &NrvRocketFlower.Attach);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RocketFlower::isEnableEquip() const {
|
||||||
|
if (al::isNerve(this, &NrvRocketFlower.Follow) && !al::isNewNerve(this))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return al::isNerve(this, &NrvRocketFlower.WaitAttach);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RocketFlower::receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
|
||||||
|
al::HitSensor* self) {
|
||||||
|
if (al::isMsgPlayerSpinAttack(message)) {
|
||||||
|
if (al::isNerve(this, &NrvRocketFlower.Wait)) {
|
||||||
|
al::invalidateClipping(this);
|
||||||
|
al::setNerve(this, &NrvRocketFlower.WaitFollow);
|
||||||
|
}
|
||||||
|
} else if (rs::isMsgCapItemGet(message)) {
|
||||||
|
if (al::isNerve(this, &NrvRocketFlower.Wait)) {
|
||||||
|
al::invalidateClipping(this);
|
||||||
|
al::setNerve(this, &NrvRocketFlower.Follow);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} else if (al::isMsgPlayerObjTouch(message) || rs::isMsgBlowObjAttack(message) ||
|
||||||
|
rs::isMsgFireDamageAll(message) || rs::isMsgHammerBrosHammerEnemyAttack(message) ||
|
||||||
|
rs::isMsgHammerBrosHammerHackAttack(message) || rs::isMsgHosuiAttack(message) ||
|
||||||
|
al::isMsgEnemyAttack(message) || al::isMsgKickStoneAttack(message) ||
|
||||||
|
rs::isMsgRadishAttack(message) || rs::isMsgSeedAttack(message) ||
|
||||||
|
rs::isMsgTankBullet(message) || rs::isMsgGamaneBulletThrough(message) ||
|
||||||
|
rs::isMsgHackAttackPoison(message) || rs::isMsgYoshiTongueAttack(message)) {
|
||||||
|
if (al::isSensorMapObj(self)) {
|
||||||
|
if (mReactionFrame == 0)
|
||||||
|
al::startAction(this, "Reaction");
|
||||||
|
|
||||||
|
mReactionFrame = 30;
|
||||||
|
}
|
||||||
|
} else if (rs::isMsgCapAttack(message)) {
|
||||||
|
if (al::isSensorMapObj(self) && !al::isNerve(this, &NrvRocketFlower.Wait) &&
|
||||||
|
!al::isNerve(this, &NrvRocketFlower.WaitFollow)) {
|
||||||
|
if (mReactionFrame == 0)
|
||||||
|
al::startAction(this, "Reaction");
|
||||||
|
|
||||||
|
mReactionFrame = 30;
|
||||||
|
}
|
||||||
|
} else if (al::isMsgPlayerPutOnEquipment(message) && al::isSensorName(self, "Equip") &&
|
||||||
|
isEnableEquip()) {
|
||||||
|
if (RocketFlowerFunction::requestEquipRocketFlower(this, other)) {
|
||||||
|
al::setNerve(this, &NrvRocketFlower.Attach);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
terminateFollow();
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RocketFlower::terminateFollow() {
|
||||||
|
al::invalidateHitSensor(this, "Equip");
|
||||||
|
al::validateClipping(this);
|
||||||
|
mFlowerSub->kill();
|
||||||
|
al::startAction(this, "Appear");
|
||||||
|
mReactionFrame = 30;
|
||||||
|
al::startHitReaction(this, "復帰");
|
||||||
|
al::setNerve(this, &NrvRocketFlower.Wait);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RocketFlower::exeWait() {
|
||||||
|
if (al::isFirstStep(this)) {
|
||||||
|
al::startVisAnim(this, "Show");
|
||||||
|
al::invalidateHitSensor(this, "Equip");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RocketFlower::exeWaitFollow() {
|
||||||
|
if (trySyncFlyingCapPos()) {
|
||||||
|
al::setNerve(this, &NrvRocketFlower.Follow);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (al::isGreaterEqualStep(this, 30)) {
|
||||||
|
al::validateClipping(this);
|
||||||
|
al::setNerve(this, &NrvRocketFlower.Wait);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RocketFlower::trySyncFlyingCapPos() {
|
||||||
|
sead::Vector3f flyingCapPos;
|
||||||
|
if (!rs::tryGetFlyingCapPos(&flyingCapPos, this))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
flyingCapPos += 50.0f * sead::Vector3f::ey;
|
||||||
|
al::resetPosition(mFlowerSub, flyingCapPos);
|
||||||
|
|
||||||
|
sead::Vector3f toPlayerHead = rs::getPlayerHeadPos(this) - flyingCapPos;
|
||||||
|
if (al::tryNormalizeOrZero(&toPlayerHead)) {
|
||||||
|
sead::Quatf quat;
|
||||||
|
quat.makeVectorRotation(sead::Vector3f::ez, toPlayerHead);
|
||||||
|
al::setQuat(mFlowerSub, quat);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RocketFlower::exeFollow() {
|
||||||
|
if (al::isFirstStep(this)) {
|
||||||
|
appearFlowerSub();
|
||||||
|
mFollowLostFrame = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (trySyncFlyingCapPos()) {
|
||||||
|
mFollowLostFrame = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rs::isEquipCapCatched(this)) {
|
||||||
|
al::validateHitSensor(this, "Equip");
|
||||||
|
al::setNerve(this, &NrvRocketFlower.WaitAttach);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mFollowLostFrame >= 16)
|
||||||
|
terminateFollow();
|
||||||
|
|
||||||
|
mFollowLostFrame++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RocketFlower::appearFlowerSub() {
|
||||||
|
al::startVisAnim(this, "Hide");
|
||||||
|
mFlowerSub->appear();
|
||||||
|
al::startAction(mFlowerSub, "Wait");
|
||||||
|
al::startAction(this, "ReactionCap");
|
||||||
|
mReactionFrame = 30;
|
||||||
|
al::startHitReaction(this, "花が取れた");
|
||||||
|
}
|
||||||
|
|
||||||
|
void RocketFlower::exeWaitAttach() {
|
||||||
|
rs::tryCalcPlayerModelHeadJointPos(al::getTransPtr(mFlowerSub), this);
|
||||||
|
|
||||||
|
if (al::isGreaterEqualStep(this, 20))
|
||||||
|
terminateFollow();
|
||||||
|
}
|
||||||
|
|
||||||
|
void RocketFlower::exeAttach() {
|
||||||
|
if (al::isFirstStep(this))
|
||||||
|
al::startAction(mFlowerSub, "Dash");
|
||||||
|
}
|
||||||
|
|
||||||
|
void RocketFlower::setFollowFlowerPose(const sead::Quatf& quat, const sead::Vector3f& trans) {
|
||||||
|
al::setQuat(mFlowerSub, quat);
|
||||||
|
al::resetPosition(mFlowerSub, trans);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RocketFlower::disappear() {
|
||||||
|
al::startHitReaction(mFlowerSub, "消滅");
|
||||||
|
}
|
||||||
|
|
||||||
|
void RocketFlower::disappearForce() {
|
||||||
|
al::tryKillEmitterAndParticleAll(mFlowerSub);
|
||||||
|
al::invalidateHitSensor(this, "Equip");
|
||||||
|
al::validateClipping(this);
|
||||||
|
mFlowerSub->kill();
|
||||||
|
al::startAction(this, "Wait");
|
||||||
|
mReactionFrame = 30;
|
||||||
|
al::setNerve(this, &NrvRocketFlower.Wait);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RocketFlower::control() {
|
||||||
|
if (al::isActionOneTime(this) && al::isActionEnd(this))
|
||||||
|
al::startAction(this, "Wait");
|
||||||
|
|
||||||
|
if (mReactionFrame != 0)
|
||||||
|
mReactionFrame--;
|
||||||
|
|
||||||
|
if (mMtxConnector)
|
||||||
|
al::connectPoseQT(this, mMtxConnector);
|
||||||
|
}
|
||||||
48
src/MapObj/RocketFlower.h
Normal file
48
src/MapObj/RocketFlower.h
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <math/seadQuat.h>
|
||||||
|
#include <math/seadVector.h>
|
||||||
|
|
||||||
|
#include "Library/LiveActor/LiveActor.h"
|
||||||
|
|
||||||
|
namespace al {
|
||||||
|
struct ActorInitInfo;
|
||||||
|
class HitSensor;
|
||||||
|
class MtxConnector;
|
||||||
|
class SensorMsg;
|
||||||
|
} // namespace al
|
||||||
|
|
||||||
|
class RocketFlower : public al::LiveActor {
|
||||||
|
public:
|
||||||
|
RocketFlower(const char* name);
|
||||||
|
|
||||||
|
void init(const al::ActorInitInfo& info) override;
|
||||||
|
void initAfterPlacement() override;
|
||||||
|
void attackSensor(al::HitSensor* self, al::HitSensor* other) override;
|
||||||
|
bool receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
|
||||||
|
al::HitSensor* self) override;
|
||||||
|
void control() override;
|
||||||
|
|
||||||
|
bool isEnableEquip() const;
|
||||||
|
void terminateFollow();
|
||||||
|
|
||||||
|
void exeWait();
|
||||||
|
void exeWaitFollow();
|
||||||
|
bool trySyncFlyingCapPos();
|
||||||
|
void exeFollow();
|
||||||
|
void appearFlowerSub();
|
||||||
|
void exeWaitAttach();
|
||||||
|
void exeAttach();
|
||||||
|
|
||||||
|
void setFollowFlowerPose(const sead::Quatf& quat, const sead::Vector3f& trans);
|
||||||
|
void disappear();
|
||||||
|
void disappearForce();
|
||||||
|
|
||||||
|
private:
|
||||||
|
al::MtxConnector* mMtxConnector = nullptr;
|
||||||
|
al::LiveActor* mFlowerSub = nullptr;
|
||||||
|
s32 mReactionFrame = 0;
|
||||||
|
u32 mFollowLostFrame = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(RocketFlower) == 0x120);
|
||||||
17
src/MapObj/RocketFlowerFunction.h
Normal file
17
src/MapObj/RocketFlowerFunction.h
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace al {
|
||||||
|
struct ActorInitInfo;
|
||||||
|
class HitSensor;
|
||||||
|
class LiveActor;
|
||||||
|
} // namespace al
|
||||||
|
|
||||||
|
class RocketFlower;
|
||||||
|
|
||||||
|
namespace RocketFlowerFunction {
|
||||||
|
|
||||||
|
void createRocketFlowerEquipWatcherIfNotExist(const al::LiveActor* actor,
|
||||||
|
const al::ActorInitInfo& info);
|
||||||
|
bool requestEquipRocketFlower(RocketFlower* flower, al::HitSensor* sensor);
|
||||||
|
|
||||||
|
} // namespace RocketFlowerFunction
|
||||||
|
|
@ -8,6 +8,7 @@ namespace al {
|
||||||
struct ActorInitInfo;
|
struct ActorInitInfo;
|
||||||
class HitSensor;
|
class HitSensor;
|
||||||
class SensorMsg;
|
class SensorMsg;
|
||||||
|
class MtxConnector;
|
||||||
} // namespace al
|
} // namespace al
|
||||||
|
|
||||||
class TreasureBoxKeyOpener : public al::LiveActor {
|
class TreasureBoxKeyOpener : public al::LiveActor {
|
||||||
|
|
@ -27,7 +28,12 @@ public:
|
||||||
virtual void setHostForClipping(al::LiveActor*);
|
virtual void setHostForClipping(al::LiveActor*);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void* filler[4];
|
al::LiveActor* mHostForClipping;
|
||||||
|
al::MtxConnector* mMtxConnector;
|
||||||
|
f32 _118;
|
||||||
|
f32 _11c;
|
||||||
|
s32 _120;
|
||||||
|
s32 _124;
|
||||||
};
|
};
|
||||||
|
|
||||||
static_assert(sizeof(TreasureBoxKeyOpener) == 0x128);
|
static_assert(sizeof(TreasureBoxKeyOpener) == 0x128);
|
||||||
|
|
|
||||||
|
|
@ -82,18 +82,18 @@ void SmallBirdStateFlyAway::exeFlyAway() {
|
||||||
mIsColliding = false;
|
mIsColliding = false;
|
||||||
startActionAtRandomFrameIfNotPlaying(mActor, "Fly");
|
startActionAtRandomFrameIfNotPlaying(mActor, "Fly");
|
||||||
if (rs::isModeE3MovieRom()) {
|
if (rs::isModeE3MovieRom()) {
|
||||||
gVerticalAccelIndex = al::modi(gVerticalAccelIndex + 7, 6);
|
gVerticalAccelIndex = al::wrapValue(gVerticalAccelIndex + 1, 6);
|
||||||
mVerticalAccel = gE3MovieVerticalAccel[gVerticalAccelIndex];
|
mVerticalAccel = gE3MovieVerticalAccel[gVerticalAccelIndex];
|
||||||
gHorizontalAccelIndex = al::modi(gHorizontalAccelIndex + 5, 4);
|
gHorizontalAccelIndex = al::wrapValue(gHorizontalAccelIndex + 1, 4);
|
||||||
mHorizontalAccel = gE3MovieHorizontalAccel[gHorizontalAccelIndex];
|
mHorizontalAccel = gE3MovieHorizontalAccel[gHorizontalAccelIndex];
|
||||||
} else {
|
} else {
|
||||||
gVerticalAccelIndex = al::modi(gVerticalAccelIndex + 5, 4);
|
gVerticalAccelIndex = al::wrapValue(gVerticalAccelIndex + 1, 4);
|
||||||
mVerticalAccel = gVerticalAccel[gVerticalAccelIndex];
|
mVerticalAccel = gVerticalAccel[gVerticalAccelIndex];
|
||||||
mHorizontalAccel = gHorizontalAccel;
|
mHorizontalAccel = gHorizontalAccel;
|
||||||
}
|
}
|
||||||
mTargetAccelDir = {0, mVerticalAccel, mHorizontalAccel};
|
mTargetAccelDir = {0, mVerticalAccel, mHorizontalAccel};
|
||||||
al::normalize(&mTargetAccelDir);
|
al::normalize(&mTargetAccelDir);
|
||||||
gCollisionCheckOffsetStep = al::modi(gCollisionCheckOffsetStep + 11, 10);
|
gCollisionCheckOffsetStep = al::wrapValue(gCollisionCheckOffsetStep + 1, 10);
|
||||||
mCollisionCheckOffsetStep = gCollisionCheckOffsetStep;
|
mCollisionCheckOffsetStep = gCollisionCheckOffsetStep;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,14 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <prim/seadSafeString.h>
|
||||||
|
|
||||||
#include "Library/LiveActor/LiveActor.h"
|
#include "Library/LiveActor/LiveActor.h"
|
||||||
|
|
||||||
|
namespace al {
|
||||||
|
class ActorDitherAnimator;
|
||||||
|
class WaterSurfaceFinder;
|
||||||
|
class PadRumbleKeeper;
|
||||||
|
} // namespace al
|
||||||
class PlayerInput;
|
class PlayerInput;
|
||||||
class PlayerAreaChecker;
|
class PlayerAreaChecker;
|
||||||
class PlayerWallActionHistory;
|
class PlayerWallActionHistory;
|
||||||
|
|
@ -15,6 +22,15 @@ class PlayerJointControlKeeper;
|
||||||
class HackCapJudgePreInputSeparateThrow;
|
class HackCapJudgePreInputSeparateThrow;
|
||||||
class HackCapJudgePreInputSeparateJump;
|
class HackCapJudgePreInputSeparateJump;
|
||||||
class CapTargetInfo;
|
class CapTargetInfo;
|
||||||
|
class PlayerColliderHackCap;
|
||||||
|
class HackCapTrigger;
|
||||||
|
class HackCapAboveGroundChecker;
|
||||||
|
class HackCapThrowParam;
|
||||||
|
class HackCapJointControlKeeper;
|
||||||
|
class PlayerExternalVelocity;
|
||||||
|
class PlayerPushReceiver;
|
||||||
|
class HackCapStateThrowStay;
|
||||||
|
class HackCapStateHide;
|
||||||
|
|
||||||
class HackCap : public al::LiveActor {
|
class HackCap : public al::LiveActor {
|
||||||
public:
|
public:
|
||||||
|
|
@ -184,16 +200,103 @@ public:
|
||||||
bool stayWallHit();
|
bool stayWallHit();
|
||||||
void endHackThrow();
|
void endHackThrow();
|
||||||
|
|
||||||
CapTargetInfo* getCapTargetInfo() const { return mCapTargetInfo; }
|
CapTargetInfo* getCapTargetInfo() const { return mCapTargetInfo1; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
unsigned char _108[0x10];
|
al::LiveActor* mEquipmentHat;
|
||||||
al::LiveActor* mActorA;
|
al::LiveActor* mEquipmentHatDepthShadow;
|
||||||
unsigned char _120[0x08];
|
al::LiveActor* mLockOnCapEyes;
|
||||||
al::LiveActor* mPlayerActor;
|
al::LiveActor* mThrowingHatEyes;
|
||||||
void* _130[0x1f];
|
const al::LiveActor* mPlayerActor;
|
||||||
CapTargetInfo* mCapTargetInfo;
|
const IUsePlayerCollision* mPlayerCollision;
|
||||||
void* _230[0x7c];
|
const char* mTypeName;
|
||||||
|
const PlayerAreaChecker* mPlayerAreaChecker;
|
||||||
|
const PlayerSeparateCapFlag* mPlayerSeparateCapFlag;
|
||||||
|
const IUsePlayerHeightCheck* mPlayerHeightCheck;
|
||||||
|
const PlayerWetControl* mPlayerWetControl;
|
||||||
|
const PlayerJointControlKeeper* mPlayerJointControlKeeper;
|
||||||
|
PlayerColliderHackCap* mPlayerColliderHackCap;
|
||||||
|
al::WaterSurfaceFinder* mWaterSurfaceFinder;
|
||||||
|
al::PadRumbleKeeper* mPadRumbleKeeper;
|
||||||
|
PlayerWetControl* mSelfPlayerWetControl;
|
||||||
|
HackCapTrigger* mHackCapTrigger;
|
||||||
|
al::ActorDitherAnimator* mActorDitherAnimator;
|
||||||
|
HackCapAboveGroundChecker* mHackCapAboveGroundChecker;
|
||||||
|
void* _1a0_arr;
|
||||||
|
u64 _1a0_capacity;
|
||||||
|
s32 _1a0_current;
|
||||||
|
void* _1b8_arr;
|
||||||
|
u64 _1b8_capacity;
|
||||||
|
s32 _1b8_current;
|
||||||
|
const al::HitSensor* _1d0;
|
||||||
|
al::HitSensor* mAttackSensor;
|
||||||
|
sead::Vector3f mSpiralTailPositions[5];
|
||||||
|
HackCapThrowParam* mHackCapThrowParam;
|
||||||
|
CapTargetInfo* mCapTargetInfo1;
|
||||||
|
CapTargetInfo* mCapTargetInfo2;
|
||||||
|
void* _238;
|
||||||
|
sead::Vector3f _240;
|
||||||
|
sead::Vector3f _24c;
|
||||||
|
sead::Vector3f _258;
|
||||||
|
f32 _264;
|
||||||
|
sead::Vector2f _268;
|
||||||
|
f32 _270;
|
||||||
|
s32 _274;
|
||||||
|
s32 _278;
|
||||||
|
s32 _27c;
|
||||||
|
f32 _280;
|
||||||
|
f32 _284;
|
||||||
|
f32 _288;
|
||||||
|
f32 _28c;
|
||||||
|
s32 _290;
|
||||||
|
s32 _298;
|
||||||
|
bool _2a0[17];
|
||||||
|
const PlayerWallActionHistory* mPlayerWallActionHistory;
|
||||||
|
const PlayerCapActionHistory* mPlayerCapActionHistory;
|
||||||
|
const PlayerInput* mInput;
|
||||||
|
PlayerEyeSensorHitHolder* mPlayerEyeSensorHitHolder;
|
||||||
|
PlayerEyeSensorHitHolder* mCapEyeSensorHitHolder;
|
||||||
|
f32 _2d8;
|
||||||
|
s32 _2dc;
|
||||||
|
HackCapJointControlKeeper* mHackCapJointControlKeeper;
|
||||||
|
void* _2e8[5];
|
||||||
|
sead::FixedSafeString<128> _310;
|
||||||
|
sead::FixedSafeString<128> _3a8;
|
||||||
|
sead::Matrix34f _440;
|
||||||
|
sead::Matrix34f _470;
|
||||||
|
sead::Matrix34f _4a0;
|
||||||
|
bool _4d0;
|
||||||
|
sead::Vector3f _4d4;
|
||||||
|
sead::Vector3f _4e0;
|
||||||
|
bool _4ec;
|
||||||
|
void* _4f0;
|
||||||
|
PlayerExternalVelocity* mCapExternalVelocity;
|
||||||
|
PlayerPushReceiver* mCapPushReceiver;
|
||||||
|
al::HitSensor* mPlayerBodySensor;
|
||||||
|
bool _510;
|
||||||
|
sead::Vector3f _514;
|
||||||
|
HackCapJudgePreInputSeparateThrow* mCapJudgePreInputSeparateThrow;
|
||||||
|
HackCapJudgePreInputSeparateJump* mCapJudgePreInputSeparateJump;
|
||||||
|
bool _530;
|
||||||
|
s32 _534;
|
||||||
|
sead::Vector3f mWallPos;
|
||||||
|
sead::Vector3f mWallNormal;
|
||||||
|
sead::Vector3f mWallVelocity;
|
||||||
|
void* _560[4];
|
||||||
|
s32 _580;
|
||||||
|
s32 mLockOnCounter;
|
||||||
|
sead::Matrix34f _588;
|
||||||
|
bool _5b8;
|
||||||
|
bool mIsHackDamageVisible;
|
||||||
|
bool _5ba;
|
||||||
|
bool _5bb;
|
||||||
|
s32 _5bc;
|
||||||
|
void* _5c0[7];
|
||||||
|
bool mIsPuppet;
|
||||||
|
bool _5f9;
|
||||||
|
bool mIsHidePuppetCapSilhouette;
|
||||||
|
HackCapStateThrowStay* mStateThrowStay;
|
||||||
|
HackCapStateHide* mStateHide;
|
||||||
};
|
};
|
||||||
|
|
||||||
static_assert(sizeof(HackCap) == 0x610);
|
static_assert(sizeof(HackCap) == 0x610);
|
||||||
|
|
|
||||||
|
|
@ -84,14 +84,25 @@ public:
|
||||||
private:
|
private:
|
||||||
PlayerModelHolder* mModelHolder;
|
PlayerModelHolder* mModelHolder;
|
||||||
al::LiveActor* mPlayerDeco;
|
al::LiveActor* mPlayerDeco;
|
||||||
void* _10;
|
al::LiveActor* mPlayer;
|
||||||
PlayerAnimFrameCtrl* mAnimFrameCtrl;
|
PlayerAnimFrameCtrl* mAnimFrameCtrl;
|
||||||
sead::FixedSafeString<64> mCurAnim;
|
sead::FixedSafeString<64> mCurAnim;
|
||||||
sead::FixedSafeString<64> mCurSubAnim;
|
sead::FixedSafeString<64> mCurSubAnim;
|
||||||
sead::FixedSafeString<64> mCurUpperBodyAnim;
|
sead::FixedSafeString<64> mCurUpperBodyAnim;
|
||||||
sead::FixedSafeString<64> _128;
|
sead::FixedSafeString<64> _128;
|
||||||
char padding_180[0x1A2 - 0x180];
|
al::ActorDitherAnimator* mDitherAnim;
|
||||||
|
f32* mSklAnimBlendWeights;
|
||||||
|
void* _190;
|
||||||
|
f32 mRunStartAnimRate;
|
||||||
|
s32 _19c;
|
||||||
|
bool mIsNeedFullFaceAnim;
|
||||||
|
bool _1a1;
|
||||||
bool mIsSubAnimPlaying;
|
bool mIsSubAnimPlaying;
|
||||||
|
bool _1a3;
|
||||||
|
bool mIsUpperBodyAnimHeadVisKeep;
|
||||||
|
bool _1a5;
|
||||||
|
bool _1a6;
|
||||||
|
bool mIsSubAnimOnlyAir;
|
||||||
};
|
};
|
||||||
|
|
||||||
static_assert(sizeof(PlayerAnimator) == 0x1a8);
|
static_assert(sizeof(PlayerAnimator) == 0x1a8);
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,44 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <basis/seadTypes.h>
|
||||||
|
|
||||||
namespace al {
|
namespace al {
|
||||||
class HitSensor;
|
class HitSensor;
|
||||||
}
|
class SensorMsg;
|
||||||
|
} // namespace al
|
||||||
|
class PlayerBindableSensorList;
|
||||||
|
class IUsePlayerPuppet;
|
||||||
|
|
||||||
class PlayerBindKeeper {
|
class PlayerBindKeeper {
|
||||||
public:
|
public:
|
||||||
|
PlayerBindKeeper(al::HitSensor*, IUsePlayerPuppet*);
|
||||||
|
bool sendStartMsg();
|
||||||
|
void clearBindableSensor();
|
||||||
|
void cancelBind();
|
||||||
|
bool receiveEndMsg(const al::SensorMsg*);
|
||||||
|
void clearBindImpl();
|
||||||
|
void cancelBindByDemo();
|
||||||
|
bool sendMsgBindDamage();
|
||||||
|
bool receiveRequestDamage();
|
||||||
|
bool sendMsgCollidedGround();
|
||||||
|
bool sendMsgEnableMapCheckPointWarp();
|
||||||
|
bool sendMsgBindKeepDemoStart();
|
||||||
|
bool sendMsgBindKeepDemoExecute();
|
||||||
|
bool sendMsgBindKeepDemoEnd();
|
||||||
|
bool sendMsgBindRecoveryLife() const;
|
||||||
|
bool collectBindableSensor(al::HitSensor*, al::HitSensor*);
|
||||||
|
void appendBindRequest(al::HitSensor*);
|
||||||
|
void resetInvalidTimer();
|
||||||
|
|
||||||
al::HitSensor* getBindSensor() const { return mBindSensor; }
|
al::HitSensor* getBindSensor() const { return mBindSensor; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
char padding[8];
|
al::HitSensor* mBodyHitSensor;
|
||||||
al::HitSensor* mBindSensor;
|
al::HitSensor* mBindSensor;
|
||||||
|
PlayerBindableSensorList* mBindableSensorList;
|
||||||
|
IUsePlayerPuppet* mPuppet;
|
||||||
|
s32 _20;
|
||||||
|
bool _24;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(PlayerBindKeeper) == 0x28);
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <container/seadPtrArray.h>
|
||||||
#include <math/seadMatrix.h>
|
#include <math/seadMatrix.h>
|
||||||
#include <prim/seadBitFlag.h>
|
#include <prim/seadBitFlag.h>
|
||||||
|
|
||||||
|
|
@ -13,6 +14,7 @@ class SpherePoseInterpolator;
|
||||||
} // namespace al
|
} // namespace al
|
||||||
class CollidedShapeResult;
|
class CollidedShapeResult;
|
||||||
class CollisionShapeKeeper;
|
class CollisionShapeKeeper;
|
||||||
|
class CollisionMultiShape;
|
||||||
|
|
||||||
class PlayerCollider : public al::HioNode, public al::IUseCollision {
|
class PlayerCollider : public al::HioNode, public al::IUseCollision {
|
||||||
public:
|
public:
|
||||||
|
|
@ -58,12 +60,48 @@ public:
|
||||||
void set1b0(f32 value) { _1b0 = value; }
|
void set1b0(f32 value) { _1b0 = value; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void* filler[13];
|
al::CollisionDirector* mCollisionDirector;
|
||||||
|
const sead::Matrix34f* mMtxPtr;
|
||||||
|
const sead::Vector3f* mTransPtr;
|
||||||
|
const sead::Vector3f* mGravityPtr;
|
||||||
|
sead::Vector3f mTrans;
|
||||||
|
f32 mSize;
|
||||||
|
sead::Matrix34f mMtx;
|
||||||
|
al::HitInfo* _68;
|
||||||
f32 _70;
|
f32 _70;
|
||||||
void* filler2[37];
|
al::HitInfo* _78;
|
||||||
s32 _1a0;
|
f32 _7c;
|
||||||
|
al::HitInfo* _88;
|
||||||
|
f32 _8c;
|
||||||
|
sead::Vector3f mCollidedFixReaction;
|
||||||
|
bool _a0;
|
||||||
|
bool _a1;
|
||||||
|
sead::Vector3f mCollisionHitNormal;
|
||||||
|
sead::Vector3f mCollisionHitPos;
|
||||||
|
s32 mTimeInAir;
|
||||||
|
sead::Matrix34f mCollidePosMtx;
|
||||||
|
CollisionShapeKeeper* mCollisionShapeKeeper;
|
||||||
|
f32 mCollisionShapeScale;
|
||||||
|
CollisionMultiShape* mCollisionMultiShape;
|
||||||
|
s32 _108;
|
||||||
|
bool mIsInFastMoveCollisionArea;
|
||||||
|
bool mIsValidGroundSupport;
|
||||||
|
bool mIsDuringRecovery;
|
||||||
|
sead::Vector3f mCutCollideAffectDir;
|
||||||
|
s32 mWallBorderCheckType;
|
||||||
|
const al::CollisionPartsFilterBase* mCollisionPartsFilter;
|
||||||
|
sead::PtrArray<al::HitInfo> _128[3];
|
||||||
|
al::HitInfo* _158;
|
||||||
|
u32 _160;
|
||||||
|
s32 _164;
|
||||||
|
sead::PtrArray<al::HitInfo> _168;
|
||||||
|
s32 _178;
|
||||||
|
f32* _180;
|
||||||
|
s32 _188;
|
||||||
|
f32* _190;
|
||||||
|
sead::Vector3f _198;
|
||||||
sead::Vector3f mCollidedGroundNormal;
|
sead::Vector3f mCollidedGroundNormal;
|
||||||
f32 _1b0;
|
f32 _1b0;
|
||||||
};
|
};
|
||||||
|
|
||||||
static_assert(sizeof(PlayerCollider) == 0x1B8);
|
static_assert(sizeof(PlayerCollider) == 0x1b8);
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,33 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <math/seadVector.h>
|
||||||
|
|
||||||
|
namespace al {
|
||||||
|
class LiveActor;
|
||||||
|
}
|
||||||
|
class ExternalForceKeeper;
|
||||||
|
class IUsePlayerCollision;
|
||||||
|
|
||||||
class PlayerExternalVelocity {
|
class PlayerExternalVelocity {
|
||||||
public:
|
public:
|
||||||
bool isExistForce() const;
|
bool isExistForce() const;
|
||||||
bool isExistSnapForce() const;
|
bool isExistSnapForce() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
ExternalForceKeeper* mExternalForceKeeper;
|
||||||
|
sead::Vector3f _8;
|
||||||
|
sead::Vector3f _14;
|
||||||
|
sead::Vector3f _20;
|
||||||
|
const al::LiveActor* mActor;
|
||||||
|
const IUsePlayerCollision* mCollision;
|
||||||
|
const sead::Vector3f* _38;
|
||||||
|
bool _40;
|
||||||
|
sead::Vector3f _44;
|
||||||
|
f32 _50[6];
|
||||||
|
sead::Vector3f mSnapForce;
|
||||||
|
s32 mApplyLastGroundInertia;
|
||||||
|
sead::Vector3f _80;
|
||||||
|
sead::Vector3f _8c;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static_assert(sizeof(PlayerExternalVelocity) == 0x98);
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,7 @@
|
||||||
#include "MapObj/AllDeadWatcherWithShine.h"
|
#include "MapObj/AllDeadWatcherWithShine.h"
|
||||||
#include "MapObj/AnagramAlphabet.h"
|
#include "MapObj/AnagramAlphabet.h"
|
||||||
#include "MapObj/BlockEmpty2D.h"
|
#include "MapObj/BlockEmpty2D.h"
|
||||||
|
#include "MapObj/BossKnuckleFix.h"
|
||||||
#include "MapObj/CapBomb.h"
|
#include "MapObj/CapBomb.h"
|
||||||
#include "MapObj/CapHanger.h"
|
#include "MapObj/CapHanger.h"
|
||||||
#include "MapObj/CapSwitch.h"
|
#include "MapObj/CapSwitch.h"
|
||||||
|
|
@ -76,6 +77,7 @@
|
||||||
#include "MapObj/ChurchDoor.h"
|
#include "MapObj/ChurchDoor.h"
|
||||||
#include "MapObj/CitySignal.h"
|
#include "MapObj/CitySignal.h"
|
||||||
#include "MapObj/CoinCollectHintObj.h"
|
#include "MapObj/CoinCollectHintObj.h"
|
||||||
|
#include "MapObj/DoorCity.h"
|
||||||
#include "MapObj/Doshi.h"
|
#include "MapObj/Doshi.h"
|
||||||
#include "MapObj/ElectricWire/ElectricWire.h"
|
#include "MapObj/ElectricWire/ElectricWire.h"
|
||||||
#include "MapObj/FireDrum2D.h"
|
#include "MapObj/FireDrum2D.h"
|
||||||
|
|
@ -86,12 +88,14 @@
|
||||||
#include "MapObj/LavaPan.h"
|
#include "MapObj/LavaPan.h"
|
||||||
#include "MapObj/MeganeMapParts.h"
|
#include "MapObj/MeganeMapParts.h"
|
||||||
#include "MapObj/MoonBasementBreakParts.h"
|
#include "MapObj/MoonBasementBreakParts.h"
|
||||||
|
#include "MapObj/MoonBasementFloor.h"
|
||||||
#include "MapObj/MoonBasementSlideObj.h"
|
#include "MapObj/MoonBasementSlideObj.h"
|
||||||
#include "MapObj/MoonWorldCaptureParadeLift.h"
|
#include "MapObj/MoonWorldCaptureParadeLift.h"
|
||||||
#include "MapObj/PeachWorldTree.h"
|
#include "MapObj/PeachWorldTree.h"
|
||||||
#include "MapObj/PoleGrabCeil.h"
|
#include "MapObj/PoleGrabCeil.h"
|
||||||
#include "MapObj/ReactionMapParts.h"
|
#include "MapObj/ReactionMapParts.h"
|
||||||
#include "MapObj/RiseMapPartsHolder.h"
|
#include "MapObj/RiseMapPartsHolder.h"
|
||||||
|
#include "MapObj/RocketFlower.h"
|
||||||
#include "MapObj/RouletteSwitch.h"
|
#include "MapObj/RouletteSwitch.h"
|
||||||
#include "MapObj/SaveFlagCheckObj.h"
|
#include "MapObj/SaveFlagCheckObj.h"
|
||||||
#include "MapObj/ShineTowerRocket.h"
|
#include "MapObj/ShineTowerRocket.h"
|
||||||
|
|
@ -163,7 +167,7 @@ const al::NameToCreator<al::ActorCreatorFunction> sProjectActorFactoryEntries[]
|
||||||
{"BossForestWander", al::createActorFunction<BossForestWander>},
|
{"BossForestWander", al::createActorFunction<BossForestWander>},
|
||||||
{"BossKnuckle", nullptr},
|
{"BossKnuckle", nullptr},
|
||||||
{"BossKnuckleCounterGround", nullptr},
|
{"BossKnuckleCounterGround", nullptr},
|
||||||
{"BossKnuckleFix", nullptr},
|
{"BossKnuckleFix", al::createActorFunction<BossKnuckleFix>},
|
||||||
{"BossMagma", nullptr},
|
{"BossMagma", nullptr},
|
||||||
{"BossRaid", nullptr},
|
{"BossRaid", nullptr},
|
||||||
{"BossRaidNpc", nullptr},
|
{"BossRaidNpc", nullptr},
|
||||||
|
|
@ -275,7 +279,7 @@ const al::NameToCreator<al::ActorCreatorFunction> sProjectActorFactoryEntries[]
|
||||||
{"Doshi", al::createActorFunction<Doshi>},
|
{"Doshi", al::createActorFunction<Doshi>},
|
||||||
{"DoorAreaChange", nullptr},
|
{"DoorAreaChange", nullptr},
|
||||||
{"DoorAreaChangeCap", nullptr},
|
{"DoorAreaChangeCap", nullptr},
|
||||||
{"DoorCity", nullptr},
|
{"DoorCity", al::createActorFunction<DoorCity>},
|
||||||
{"DoorSnow", nullptr},
|
{"DoorSnow", nullptr},
|
||||||
{"DoorWarp", nullptr},
|
{"DoorWarp", nullptr},
|
||||||
{"DoorWarpStageChange", nullptr},
|
{"DoorWarpStageChange", nullptr},
|
||||||
|
|
@ -410,7 +414,7 @@ const al::NameToCreator<al::ActorCreatorFunction> sProjectActorFactoryEntries[]
|
||||||
{"MoonBasementFallObj", nullptr},
|
{"MoonBasementFallObj", nullptr},
|
||||||
{"MoonBasementFinalGate", nullptr},
|
{"MoonBasementFinalGate", nullptr},
|
||||||
{"MoonBasementFallObjDecoration", nullptr},
|
{"MoonBasementFallObjDecoration", nullptr},
|
||||||
{"MoonBasementFloor", nullptr},
|
{"MoonBasementFloor", al::createActorFunction<MoonBasementFloor>},
|
||||||
{"MoonBasementGate", nullptr},
|
{"MoonBasementGate", nullptr},
|
||||||
{"MoonBasementMeteorAreaObj", nullptr},
|
{"MoonBasementMeteorAreaObj", nullptr},
|
||||||
{"MoonBasementPillar", nullptr},
|
{"MoonBasementPillar", nullptr},
|
||||||
|
|
@ -669,7 +673,7 @@ const al::NameToCreator<al::ActorCreatorFunction> sProjectActorFactoryEntries[]
|
||||||
{"RiseMapParts", nullptr},
|
{"RiseMapParts", nullptr},
|
||||||
{"ReactionMapParts", al::createActorFunction<ReactionMapParts>},
|
{"ReactionMapParts", al::createActorFunction<ReactionMapParts>},
|
||||||
{"RiseMapPartsHolder", al::createActorFunction<RiseMapPartsHolder>},
|
{"RiseMapPartsHolder", al::createActorFunction<RiseMapPartsHolder>},
|
||||||
{"RocketFlower", nullptr},
|
{"RocketFlower", al::createActorFunction<RocketFlower>},
|
||||||
{"RollingCubeMapParts", al::createActorFunction<al::RollingCubeMapParts>},
|
{"RollingCubeMapParts", al::createActorFunction<al::RollingCubeMapParts>},
|
||||||
{"RippleFixMapParts", nullptr},
|
{"RippleFixMapParts", nullptr},
|
||||||
{"RotateMapParts", al::createActorFunction<al::RotateMapParts>},
|
{"RotateMapParts", al::createActorFunction<al::RotateMapParts>},
|
||||||
|
|
|
||||||
|
|
@ -106,6 +106,7 @@ private:
|
||||||
sead::FixedSafeString<128> mCostumeName;
|
sead::FixedSafeString<128> mCostumeName;
|
||||||
al::SimpleAudioUser* mPlayerAudioUser;
|
al::SimpleAudioUser* mPlayerAudioUser;
|
||||||
bool mIsHackEnd;
|
bool mIsHackEnd;
|
||||||
|
bool mIsWarpCheckpoint;
|
||||||
TimeBalloonSequenceInfo* mBalloonSeqInfo;
|
TimeBalloonSequenceInfo* mBalloonSeqInfo;
|
||||||
CollectBgmPlayer* mCollectBgmPlayer;
|
CollectBgmPlayer* mCollectBgmPlayer;
|
||||||
sead::FixedSafeString<128> mLanguage;
|
sead::FixedSafeString<128> mLanguage;
|
||||||
|
|
|
||||||
|
|
@ -217,7 +217,7 @@ bool isMissEndPrevStageForSceneDead(GameDataHolderAccessor accessor) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void reenterStage(GameDataHolderWriter writer) {
|
void reenterStage(GameDataHolderWriter writer) {
|
||||||
writer->set_4a();
|
writer->setStageEnding();
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 getNextWorldId(GameDataHolderAccessor accessor) {
|
s32 getNextWorldId(GameDataHolderAccessor accessor) {
|
||||||
|
|
|
||||||
|
|
@ -211,9 +211,9 @@ public:
|
||||||
|
|
||||||
GameDataFile* getGameDataFile() const { return mPlayingFile; }
|
GameDataFile* getGameDataFile() const { return mPlayingFile; }
|
||||||
|
|
||||||
void set_49() { _49 = true; }
|
void setStageChanging() { mIsStageChanging = true; }
|
||||||
|
|
||||||
void set_4a() { _4a = true; }
|
void setStageEnding() { mIsStageEnding = true; }
|
||||||
|
|
||||||
s64 getPlayTimeAcrossFile() const { return mPlayTimeAcrossFile; }
|
s64 getPlayTimeAcrossFile() const { return mPlayTimeAcrossFile; }
|
||||||
|
|
||||||
|
|
@ -293,8 +293,8 @@ private:
|
||||||
bool mIsRequireSave;
|
bool mIsRequireSave;
|
||||||
u32 mRequireSaveFrame;
|
u32 mRequireSaveFrame;
|
||||||
bool mIsInvalidSaveForMoonGet;
|
bool mIsInvalidSaveForMoonGet;
|
||||||
bool _49; // related to changeNextStage(WithWorldDemoWarp)
|
bool mIsStageChanging;
|
||||||
bool _4a; // related to endStage
|
bool mIsStageEnding;
|
||||||
sead::FixedSafeString<32> mLanguage;
|
sead::FixedSafeString<32> mLanguage;
|
||||||
u64 mPlayTimeAcrossFile;
|
u64 mPlayTimeAcrossFile;
|
||||||
sead::Heap* mSaveDataWriteThread;
|
sead::Heap* mSaveDataWriteThread;
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,12 @@ public:
|
||||||
void read(const al::ByamlIter& save) override;
|
void read(const al::ByamlIter& save) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void* _padding[0x6];
|
bool mIsShowDemoOpenMoonRockFirst;
|
||||||
|
bool* mIsShowDemoOpenMoonRockWorld;
|
||||||
|
bool* mIsAppearedMoonRockTalkMessage;
|
||||||
|
bool mIsShowDemoAfterOpenMoonRockFirst;
|
||||||
|
bool* mIsShowDemoMoonRockMapWorld;
|
||||||
|
s32 mWorldNum;
|
||||||
};
|
};
|
||||||
|
|
||||||
static_assert(sizeof(MoonRockData) == 0x38);
|
static_assert(sizeof(MoonRockData) == 0x38);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue