218 Commits
Author SHA1 Message Date
TheAzack9 aa0d7e3ca0 Initial pass on koopa and limitkoopa (#395)
* Initial pass on koopa and limitkoopa

* Mark limitkoopa as an object only in jp and ntsc

* PR cleanup

* PR cleanup

* Fix formatting
2026-11-08 17:03:32 +03:00
Paolo Imbriani 96f7d5db84 Kukku TU (#379)
* 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
2026-11-03 13:53:01 +03:00
Hyblocker 11652564e1 giga find replace (#387) 2026-11-03 02:22:25 +03:00
Hyblocker 84e8af3325 Match more things across ROM variants (#385)
* fix: match marerr

* chore: marnamerefgen bathtubpeach

* marnamerefgen improvements

* match processmeter

* fix: match JointModel

* fix: symbol validation order

* feat: J3DModel NX

* feat: Application NX

* chore: styling fixes

* chore: attempt to properly decomp MapStaticObject for non JP

* fix: regression

* fix: code review feedback

* fix: forgor
2026-11-02 22:22:07 +03:00
TheAzack9 912aea9dd3 Make TVector_pointer to take pointer types as template arguments (#373) 2026-10-27 02:09:43 +03:00
Paolo Imbriani 01b2fce78d Enemy/Bosswanwan TU (#159)
* 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
2026-10-26 14:33:58 +03:00
Roman Sandu b7d5db5fee Privatize Application 2026-10-25 19:25:23 +03:00
Roman Sandu 7ba80ae06c Access TApplication areas through inliens 2026-10-25 19:12:28 +03:00
Roman Sandu 56294a1d3d Privatize MarDirector 2026-10-25 18:03:30 +03:00
Roman Sandu 30c1b92c92 Access TMarDirector::mMoveTickCount through the getter 2026-10-25 17:36:34 +03:00
Roman Sandu 3f1b240737 Acess more MarDirector stuff through inlines 2026-10-25 17:13:44 +03:00
Roman Sandu f24fd04bfa Don't access TMarDirector::mGameMode directly 2026-10-25 15:07:48 +03:00
TheAzack9 f53ddb97f3 Watergun closer + some unused stuff + some protected stuff (#352)
* Watergun closer + some unused stuff

* Remove comment

* Fix clanker version of watergun

* Privatize watergun

* Fix broken matches

* Remove fake fabricated nozzle base getters

* Fix broken symbol order

* Remove unused fabricated function
2026-10-25 00:34:55 +03:00
Hyblocker c73baa8a4a WireTrap (#369)
* wiretrap

* lint
2026-10-24 12:47:46 +03:00
Hyblocker f25d2c0973 Naming + accuracy improvements (#358)
* naming + accuracy improvements

* fix: oxfor comma
2026-10-23 18:38:41 +03:00
Roman Sandu ec1f8c78a8 MarDirector namingggg 2026-10-23 03:05:01 +03:00
Roman Sandu d7ea6b1a9b Get rid of DummyStrings.hpp 2026-10-22 04:28:24 +03:00
Roman Sandu 4a5694d090 EMitterViewObj naming 2026-10-21 04:42:54 +03:00
Roman Sandu bb9725a86e Item-related naming 2026-10-20 04:51:39 +03:00
Hyblocker ee93a8c5dc GCLogoDir NX improvements (#357)
* fix: GCLogoDir NX improvements

* vro

* make func weak
2026-10-20 03:14:43 +03:00
Roman Sandu 6836b3e56d Guide closer for non-jp 2026-10-19 10:47:49 +03:00
Hyblocker c15e1672ea improve GC2D and GCLogoDir for PAL (#355)
* improve GC2D and GCLogoDir for PAL

* fix rodata

* fix: vscode auto included headers grrr
2026-10-18 22:38:21 +03:00
Mrkol 5212a0a841 Bird 2026-10-18 01:18:07 +03:00
Roman Sandu 7e425b2ad9 GCConsole2 pal/ntsc/nx 2026-10-17 01:37:42 +03:00
Hyblocker c5f331e4af Decompile ConsoleStr::load better for GMSP01 (#350)
* feat: decompile ConsoleStr::load better for GMSP01

* remove macro
2026-10-16 03:16:52 +03:00
Hyblocker 895ee28e74 fix: make NX inherit a bunch of GMSP01 things for easy accuracy (#351) 2026-10-16 02:51:42 +03:00
Hyblocker e5e1e10c8a fix: correctness (#349) 2026-10-16 02:44:13 +03:00
Roman Sandu 3c6e322316 BossHanachan first pass 2026-10-15 21:49:50 +03:00
Ford LascariandClaude Opus 5.5 916a0f55bb Camera+GC2D: fix notice angles, console panes, select menu and cameralib (#340)
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]>
2026-10-15 17:03:40 +03:00
Roman Sandu eff7167be2 Version select macro are nice now 2026-10-15 04:21:22 +03:00
Hyblocker ad01b00780 Setup GMSE01, GMSJ01_01, GMSP01_NX (#333)
* 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
2026-10-15 04:08:36 +03:00
Roman Sandu ca42f868b0 Conductor closer 2026-10-13 03:11:47 +03:00
Roman Sandu f8542190f3 TinKoopa first pass 2026-10-11 23:21:48 +03:00
KakarotCake ee27241e36 Enemy/bosstelesa: decompile Boss Telesa behavior (#134)
* 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
2026-10-11 17:32:50 +03:00
TheAzack9 93b114c8f1 Az watergun (#324)
* 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
2026-10-11 17:12:50 +03:00
Roman Sandu 266bda3e09 Name stuff in MarDirector 2026-10-11 03:04:52 +03:00
Roman Sandu 42053efec9 More privatization 2026-10-10 01:26:17 +03:00
Roman Sandu 38e1de3422 Rename TMarDirector::unk18 to mGamePads and use getGamePad outside the director 2026-10-09 12:48:02 +03:00
Roman Sandu 6acf3d8b39 System/FlagManager: name every flag ID with the MSF_ enum in FlagManagerFlags.hpp, made from the community flag table and checked against the JP, PAL and US executables 2026-10-06 13:34:37 +03:00
Roman Sandu 946b0889e4 First pass on MapObjMamma 2026-10-05 11:58:11 +03:00
Nicholas StearnsandRoman Sandu 026c5144e1 MapObjBall initial commit (#112)
* 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]>
2026-10-04 18:59:42 +03:00
Rasheed 37901dadf9 MoveBG/MapObjCorona: recover bathtub and grip behavior (#319)
* MoveBG/MapObjCorona: recover bathtub and grip behavior

* MoveBG/MapObjCorona: use the cue enum
2026-10-04 03:48:41 +03:00
RasheedandRoman Sandu 26ada03026 Enemy/chuuhana: match 38 of 57 functions (#216)
* 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]>
2026-10-02 22:28:47 +03:00
Rasheed 77f49234b1 MoveBG/MapObjMare: match 46 of 67 functions (#294)
* MoveBG/MapObjMare: match 46 of 67 functions

* Use SMS_LoadParticle in MapObjMare
2026-10-02 22:06:49 +03:00
RasheedandRoman Sandu 0989a41e3d MoveBG/MapObjPinna: match 52 of 69 functions (#290)
Co-authored-by: Roman Sandu <[email protected]>
2026-10-01 16:35:48 +03:00
Rasheed f2eef22874 Enemy/Kazekun: match 33 of 43 functions (#291) 2026-10-01 16:26:34 +03:00
Rasheed 96739a82c1 Enemy/amiNoko: match 27 of 36 functions (#289) 2026-10-01 16:20:03 +03:00
Rasheed fe94bc660e Enemy/igaiga: match 71 of 95 functions (#247) 2026-10-01 16:17:42 +03:00
Rasheed 83bb009ab4 Enemy/cannon: match 34 of 55 functions (#248) 2026-10-01 16:11:04 +03:00
Rasheed e461c52fc3 MoveBG/ModelGate: match 6 of 9 functions (#250) 2026-10-01 15:51:58 +03:00