* fix: finding solutions for unused func in wanwan
* some stuff done
* formatting
* improvements
* improvements
* some stuff done
* formatting
* rebase and fix name
* naming
* im dumb
* some stuff done
* formatting
* rebase and fix name
* improvements
* improvements
* remove stupid comment
* MarRefGenEnemy
* reviews addressed + symbol order
* format
* remove dtors
* feat: TBW started, shakeCamera done
* feat: progress TBW, first started shakeCamera
* feat: TBossWanwaReceiveMessage, 92%
* fix: misc...
- fixed to SMSGetSound instead of other API
- used Particles.hpp enum and created a new one based off modders tables
- used msSqrtf instead of fabricated match
* feat: added calcRootMatrix()
* fix: improve calcRootMatrix to 100%
* feat: TBWLeash(Node) progress
* feat: TBWLeashNode::calcTemperature 100%
* feat: some progress and TBossWanwanManager::createModelData() 100%
* feat: progress emitEffects() 97%
* declaring stuff
* progress TBWPicket, TBWHit
* progress TBWPicket::moveRequest
* more progress
* fixing some issues, progressing a lil
* feat: sliteToCurPathNode
* control
* feat: TNerveBWJumpToBath
* a bunch of stuff
* fucking destructors
* bunch of stuff 2.0
* changeBck unused function
* inline shenanigans
* anotha nerve
* feat: other nerves
* why I decided to do this
* 90ing all functions??????
* adjust after rebasing
* adjust after rebasing
* fix particles.hpp
* fixing some stuff
* fix: use enums for sound, animations, etc; update particles and actor types for wanwan
* create enum flags for wanwan
* fix: reorder symbol by val script + some adjusting
Match the original camera notice angle and distance math, near-clip helper, shake origin, console pane setup, select menu archive and input handling, wiper logo draw and MActor creation.
Co-authored-by: Claude Opus 5.5 <[email protected]>
* chore: add GMSE01, GMSJ01_01, GMSP01_NX
* chore: add dirs for new roms
* fix: fix compilation issues for roms
* feat: trigger CI for other roms
* fix: build issues for JP and PAL
* fix: lint + fix version switch
* fix: GMSP01 build failure
* chore: disable symbol validation on GMSE01
* fix: paths in PauseMenu2
* fix: lint
* chore: finalise splits
* chore: document why GMSE01 symbol validation is skipped
* Enemy/bosstelesa: reconstruct Boss Telesa behavior
* Enemy/bosstelesa: use split nerve definition macros
* Enemy/bosstelesa: apply accessor review changes
* Enemy/bosstelesa: recover slot helpers and bubble launch arithmetic
* MoveBG: retain required TMapObjBase weak definitions after rebase
* Enemy/bosstelesa: use the actor type, hit category and loader flag enums
Spell actor types with TActorType, hit filters with THitCategory, model
loader flags with J3DModelLoaderFlag, and the BGM with its MSD_BGM name.
Rename ACTOR_TYPE_BOSS_UNK13 to ACTOR_TYPE_BOSS_TELESA, which is the
boss's own type. Drop casts to the field's own type, type the Telesa
manager pointer, and use getConsole() and getHitCategory(). No change in
the GMSJ01 report.
* Enemy/bosstelesa: name the boss's collision, slot, item and effect fields
Names follow the actor names and use sites. No change in the GMSJ01
report.
* Enemy/bosstelesa: match the init material loop and color setup
The material index is an int compared signed, the model is read through
getMActor() at each use, and both colors are set by chained assignment.
TBossTelesa::init 90.79% -> 99.41%.
* Enemy/bosstelesa: drop the zero locals in the item reset loops
No change in the GMSJ01 report.
* Enemy/bosstelesa: set the spit item velocity and position in place
The fruit and pepper velocities are set on the object, each followed by
offLiveFlag, and the spit position is one set() call.
generateSlotItem 78.17% -> 83.07%.
* Enemy/bosstelesa: order the coin spit setup as in the original
Compute the coin angle step before the countdown, read the bubble speed
from the boss params at each use, and keep the coin velocity as a TVec3.
generateSlotItem 83.07% -> 89.56%.
* Enemy/bosstelesa: match the coin and enemy spit setup more closely
Set the spit positions with one set() call, keep the enemy velocity as a
TVec3, and pick every other kind with i % 2. generateSlotItem
89.56% -> 93.69%.
* Enemy/bosstelesa: keep forceAllItemKill and forceHide out of line
Retail calls forceAllItemKill from forceHide and the Die and PrepareSlot
nerves, and forceHide from TBossTelesaKillSmallEnemy::checkHit, instead
of inlining them. Both bodies were under the compiler's 15-statement
auto-inline limit here. The origin vector and the next-nerve local are
reconstructed to bring each body over the limit with the same code; the
original statements are not known. The Doro Hamukuri test compares the
actor type directly, as retail does.
GMSJ01 bosstelesa 93.20% -> 95.42%: forceHide 49.61% -> 99.95%,
KillSmallEnemy::checkHit 0% -> 98.31%, Die 86.04% -> 94.96%,
PrepareSlot 82.33% -> 92.41%.
* Enemy/bosstelesa: call randomReset through prepareGenerate in Appear
Retail Appear calls TTelesaSlot::randomReset out of line, which needs one
inline layer between them. The BGM start, slot reset and onAllCollision
are moved into the UNUSED prepareGenerate, replacing the unverified
counter-reset stub. That body compiles to 0x150 against the map's 0x1d8,
so it is still incomplete; the TODO stays.
Appear nerve 80.03% -> 99.95%.
* Enemy/bosstelesa: test the slot result through checkSlotResult
PrepareSlot calls getSlotResult out of line and turns the comparison
with 0 into a bool, so the UNUSED checkSlotResult is a bool inline around
it. PrepareSlot 92.41% -> 97.83%.
* Enemy/bosstelesa: take Mario offsets with operator-
Retail calls TVec3::sub out of line in moveObject and the FallDemo and
HideWait nerves, which is what the binary operator- produces (as in
hamukuri and telesa). moveObject 85.84% -> 90.86%, FallDemo
90.07% -> 99.97%, HideWait 89.06% -> 96.96%.
* Revert "Enemy/bosstelesa: test the slot result through checkSlotResult"
This reverts commit 02e69bd37d.
* Revert "Enemy/bosstelesa: call randomReset through prepareGenerate in Appear"
This reverts commit 1651e8ed90.
* Revert "Enemy/bosstelesa: keep forceAllItemKill and forceHide out of line"
This reverts commit 2dc5fe9dea.
* Enemy/bosstelesa: leave the UNUSED functions as stubs
* Enemy/bosstelesa: use getMActor in the nerves
* Update callbacks + naming
* Move Params into TNozzleBase
* Naming + match calcGunAngle and movement
* Watergun: Naming + matching
* Fix rebase conflict
* Watergun: TNozzleTrigger::animation matching
* Fix regressions in other TUs
* MapObjBall initial commit
* General cleanup
Moved defintion of TMapObjGeneral::getLivingTime to MapObjGeneral.cpp as the definition in the header was masking the overwrite in MapObjBall
* More code cleanup
* Revert moving TMapObjGeneral::getLivingTime as it regressed WoodBarrel. Added comment isntead
* Fix redefinition error
* Removed some fake matching
Added a comment indicating fabricated inlines
* Update clang-format version
* MoveBG/MapObjBall: port to current main (state timer and hit flag names, J3DModel accessors, untemplated NameRefGen search)
* MoveBG/MapObjBall: name the messages, flags, states, sounds and particles; use SMSGetMSound, SMS_LoadParticle and the header declarations
* MoveBG/MapObjBall: replace the invented free helpers with a by-value TMapObjBall::getVelocity and the TVec3 isZero/length inlines; the copy and the out-of-line sqrt come from the by-value getter
* MoveBG/MapObjBall: recover the UNUSED living and waitEffect from their inlined bodies, leave the dead rotting empty, and call makeObjWaitingToAppear instead of its copies
* MoveBG/MapObjBall: touchWater through getVelocity/scaleAdd/setVelocity, and TResetFruit::touchWater as the base call plus makeObjLiving with global linkage
* MoveBG/MapObjBall: calcCurrentMtx with TRotation3f/TMtx34f and no goto, checkWallCollision through the record constructor, raise a held ball by the matrix Y translation (not [2][2]), and reuse TMapObjBall::control
* MoveBG/MapObjBall: review fixes - BGCheckData getters, const unk138 kept, base-class calls for the copied receiveMessage/control bodies, no else after return, plain array decay for mFruitName
* MoveBG/MapObjBall: drop the invented kick() inline, call TMapObjBall::hold from TResetFruit::hold, startStateTimer, TVec3::distance for the watermelon hit test
* MoveBG/MapObjBall: TRandomFruit picks cases 4 and 5 with the default
* MoveBG/MapObjBall: TCoverFruit::calcRootMatrix passes x, y - offset, z to MsMtxSetXYZRPH; the shuffled order put z into y
* MoveBG/MapObjBall: recover the UNUSED pick from touchActor, receiveMessage and control, drop the invented hideTouchActor and gekkoCopy, plain loops in touchWall and control
* MoveBG/MapObjBall: boundByActor bounces only inside the radius (the test was inverted), builds the offset with the vector constructor, and drops the dead frame-padding local
* MoveBG/MapObjBall: readable names, MTX macros, drop a dead local in touchGround
* MoveBG/MapObjBall: TResetFruit::kicked tests the velocity against the direction to Mario; the old expression had the wrong precedence
* MoveBG/MapObjBall: makeObjDefault writes z to the matrix z translation; it overwrote y
* Camera/cameragc: clang-format
---------
Co-authored-by: Roman Sandu <[email protected]>
* Enemy/chuuhana: match 38 of 57 functions
* Enemy/chuuhana: recover rolling and margeVelocity from their inlined copies
The Roll nerve inlines rolling and moveObject/behaveToWater inline
margeVelocity; both bodies now hit their map sizes. rolling's shape is
from PR197. willFall uses TVec3::length instead of hand-expanded sqrt.
* Enemy/chuuhana: include J3DJoint so it compiles without the precompiled header
* Enemy/chuuhana: leave margeVelocity and rolling empty, use TVec3::sub in willFall
Their inlined copies in moveObject, behaveToWater and the Roll nerve
only matched through an invented double copy of mVelocity, so the
bodies are not recoverable from the callers.
---------
Co-authored-by: Roman Sandu <[email protected]>