JN Engine native port: N1-N5 update

Updated 2026-06-23. This page summarizes what the native port waves tried to accomplish, what landed, what today's rocket/baseball pass corrected, and where the project moves next.

What changed today

The recent N1-N5 work made the native C engine the product: shared behavior bases, enemies, tools/projectiles, rideable vehicles, and the first game-flow layer. Today's work was a focused N3/N4 cleanup pass around the rideable rocket sandbox and baseball projectile visuals.

FIXEDRocket sandbox now uses one non-solid rideable rocket, Jimmy stays visible/seated, the thrown baseball uses the retained baseball sprite, and rocket controls are no longer inverted.

NEXTEngine sound, C3DFireStrato exhaust, the nose-horizontal-at-rest cosmetic, remaining enemy roster, and deeper game-flow polish are still ahead.

N1Shared bases: animated lifecycle, movement, AI, triggers.
N2First enemy/AI loop plus projectile and health plumbing.
N3Player tools, pickups, baseball projectile, balloon reactions.
N4Rideable rocket and AI vehicle patrols.
N5Task loading, campaign entry, menu shell, cutscene cameras.
Jimmy seated inside the rideable rocket during flight
Today's main visible result: Jimmy remains visible and seated while the player flies the rideable 3ROC rocket, now using the corrected Strato texture.

Wave Status

WavePurposeStatus after N1-N5What it unblocks
N1 Base behavior framework. Shared behavior_base, movement_base, behavior_ai, trigger/pickup overlap, mutable runtime flags. Carl's walker path now proves the AI base. Lets later classes stay thin instead of each one reimplementing lifecycle, movement, or AI plumbing.
N2 Enemies and AI. Yokian soldier/guard/spy subset seeks, attacks, takes baseball hits, and uses player/enemy health through gamestate and behavior_projectile. Combat targets and enemy-side projectile users.
N3 Player combat and pickups. Baseball tool gating, pickup grants, shared player projectile, balloon pop/release behavior, and projectile visual fix for PROJ. Player abilities that can interact with enemies and level objects.
N4 Vehicles. Player boards and flies C3DRocketShip; AI bus/SUV/sailboat-style traffic rides N1 patrol primitives. Today's fix made the rocket usable rather than inverted. Rides, vehicle-specific effects, and later level sequences that depend on vehicle state.
N5 Game-flow and controllers. CTaskList loader, CJimmyGame lives/restart/objective bridge, data-driven level table, cutscene-camera registration, and a placeholder menu shell. Campaign progression, menus, cutscene activation, and real objective tracking.

Screenshots

Level 1 baseline screenshot after N1 base behavior work
N1 validation: Level 1 still renders after the behavior-base refactor. This is a runtime sanity screenshot, not a staged beauty shot.
Level 1b validation screenshot for Carl patrol work
N1 AI base proof: Carl's patrol was moved onto behavior_ai. Retaken with noclip-style placement at Carl's runtime position so the proof subject is in frame.
Level 6 native runtime screenshot for enemy coverage
N2 coverage: Level 6 loads the Yokian/enemy assets and vtables. Retaken with noclip-style placement in the yoksol area; the seek/attack/defeat proof is from the headless combat log path.
Level 2 native runtime screenshot for pickup and balloon coverage
N3 coverage: Level 2 carries the pickup/balloon family. The balloon pop path is verified by the baseball test log; this shot shows the loaded level context.
One sandbox rocket brought to the player on the ground
N4 rocket fix: sandbox mode now brings one authored Strato-textured rocket to the player, seats it on the ground, and clears solidity so walking into it no longer shoves Jimmy underground.
N5 placeholder main menu overlay over the live level
N5 menu shell: the menu route exists over the live level and can enter New Game. The missing readable menu text is an explicit remaining polish item.

Today's Focus

What we tried to accomplish

The goal was to make the N4 rideable rocket usable as a sandbox verification tool while preserving the decomp-grounded N1-N5 behavior structure. That touched N4 directly, but also exposed N3 projectile visuals because the baseball throw path was now important for testing combat and balloons.

Issue foundRoot causeResolution
Walking near the sandbox rocket pushed Jimmy underground. The spawned/relocated rocket was still solid and overlapped the player's AABB vertically. Use one authored rocket where possible, bring it to the player once, seat it on the ground, and make it non-solid in sandbox mode.
Two rockets appeared in levels that already had an authored 3ROC. The sandbox helper spawned an extra rocket instead of reusing the level's rocket. Prefer the authored rocket. Only spawn a stand-in in the fallback case where a level has no rocket.
Jimmy disappeared or looked wrong while riding. The original mount path hid or overrode the player too aggressively. Keep Jimmy visible, inert, and snapped to a seat offset on the rocket.
Thrown baseball had no visible sprite. PROJ had gameplay behavior but no visual resolver entry. Map PROJ to the retained baseball sprite from C3DBaseball / RetainedSprites chunk ball0000.
Rocket flight controls were inverted and difficult to fly. The rocket intentionally mapped Up/Down pitch opposite to player expectation and used the opposite yaw sign from tank-turn movement. Controls are now direct: Up/W nose up, Down/S nose down, Left/A turn left, Right/D turn right.

Rocket Diagnostics

Before fix: camera at ground level after player is shoved below the floor
Before: the solid sandbox rocket overlapped Jimmy and the AABB resolver pushed him below the floor.
Before fix: extra sandbox rocket in level 1
Before: sandbox spawned an extra rocket even when the level already had one.
Before fix: throw frame with no visible baseball
Before: the baseball projectile existed mechanically, but had no entity_visual path.
Rocket lying horizontal at rest
Still open: at rest the Strato mesh lies nose-horizontal. It is flyable now, but the rest pose still needs a cosmetic orientation pass.

Validation

Today's control and report work was checked with the same native/web path used by the waves:

Where We Move Next

Immediate rocket polish

Broader N1-N5 follow-up

Source references: docs/native_port_plan.md, docs/PROJECT_HISTORY.md, docs/decomp/C3DRocketShip.md, docs/decomp/C3DBaseball.md, and the current native runtime screenshots in this folder.