CMCharacter Modules 0.1.0

Known limitations

Everything we know the package does not do, or does differently from what you might expect. Each entry says where it shows, why it is so, what to do about it, and where the evidence is (a test or a design decision). The Modules line is read by the reference generator: every module named there lists the entry on its own page.

Found something that is not here? It belongs here: add an entry, or a test that shows it.

Characters and the motor

L1. A long hitch slows the game instead of skipping ahead

  • Modules: Character Motor
  • Shows up: after a frame longer than a quarter of a second (loading, a breakpoint), characters move less than

the time that passed.

  • Why: the motor steps at a fixed rate and catches up at most 0.25 s per frame, so a hitch cannot snowball into

ever more catch-up steps.

  • Workaround: none needed in normal play. Raise the cap in the code for games that must keep exact time.
  • Evidence: CharacterMotor.Update.

L2. Up is always world up

  • Modules: Character Motor
  • Shows up: no walking on walls or ceilings, no planets, no gravity that changes direction.
  • Why: MotorContext.up is kept explicit for that future, but every module assumes world up today.
  • Workaround: none yet.
  • Evidence: MotorContext.up.

L3. What you see is up to one step behind the simulation

  • Modules: Character Motor, Step Smoothing
  • Shows up: at low step rates (30 per second or less), input feels slightly delayed.
  • Why: drawing between two finished steps is what makes motion smooth at any frame rate; it costs one step of

delay, as in most engines.

  • Workaround: a higher Tick Rate; or turn Interpolate off and accept stutter.
  • Evidence: CharacterMotor.InterpolatedPosition.

Collision

L4. A moving wall shoves the character only by pushing it out

  • Modules: Platform Riding, Crush Damage
  • Shows up: a wall or door moving into the character pushes it at the start of the next step rather than

carrying it; squeezed between two, it takes Crush Damage.

  • Why: the character is kinematic and moves only in its own step; only floors it stands on carry it.
  • Workaround: none needed for doors and crushers. For conveyor-like walls, move the character from a script.
  • Evidence: D29, D30.

L5. An interpolated kinematic Rigidbody platform is drawn away from its collider

  • Modules: Platform Riding
  • Shows up: riding a platform moved by a kinematic Rigidbody with Interpolate on, the character seems to float

slightly off it.

  • Why: Unity draws such a Rigidbody between physics steps while its collider sits at the last one; the character

rides the collider.

  • Workaround: set the platform's Rigidbody Interpolate to None, or move it from Update.
  • Evidence: D29.

L6. A capsule rolls over low lips unless walls are kept steep

  • Modules: Capsule Hull, Clip Slide Solver
  • Shows up: with Steep As Walls off, a capsule climbs 15 to 20 cm lips and steep corners without stepping.
  • Why: a round bottom touching an edge sees a slanted surface, and sliding along it lifts the capsule.
  • Workaround: keep Steep As Walls on (the default), or use a Box Hull.
  • Evidence: D15, collision edge-case tests.

Ground, walls and contacts

L7. Standing across a pad and the floor counts only one of them

  • Modules: Contact Events, Pressure Pad
  • Shows up: standing half on a pressure pad, half on the floor, the pad may not be pressed.
  • Why: the ground sensor reports the one collider its downward sweep hits first.
  • Workaround: raise pads a few centimetres above the floor (the gym's are 10 cm), so the pad is hit first.
  • Evidence: D32.

L8. Rigidbodies press pads only in play mode

  • Modules: Pressure Pad
  • Shows up: in edit-mode tests, a crate on a pad does not press it.
  • Why: Unity sends collision messages only while playing.
  • Workaround: test Rigidbody pads in play mode (the package's crate test does).
  • Evidence: PlayModeSmokeTests.ACrateRestingOnAPressurePadHoldsItDown.

L9. Rigidbodies cannot push the character

  • Modules: Rigidbody Pushing
  • Shows up: a rolling ball or swinging crate hitting the character does not knock it back; the character is

pushed out of it at its next step.

  • Why: pushing is one way, from the character's move into Rigidbodies.
  • Workaround: apply knockback from a script on the Rigidbody (set the character's velocity).
  • Evidence: D30.

Triggers and volumes

L10. Ordinary trigger scripts hear the character a physics step late

  • Modules: Physics Trigger Proxy
  • Shows up: OnTriggerEnter on a plain script fires after Unity's next physics step, not in the character's step.
  • Why: the proxy is a kinematic Rigidbody moved after each character step; Unity reports its triggers when

physics runs.

  • Workaround: implement ICharacterTrigger instead, which the Trigger Sensor calls inside the step.
  • Evidence: D30.

L11. Water depth is measured to the top of the volume's bounds

  • Modules: Water Volume, Trigger Sensor
  • Shows up: a rotated or sloped water collider is treated as flat at its highest point.
  • Why: depth comes from the collider's bounding box.
  • Workaround: use level, unrotated box colliders for water.
  • Evidence: TriggerSensor.Sense.

L12. Filters name states and presets by text

  • Modules: Character Filter
  • Shows up: renaming a state class or a preset silently stops a filter that names it.
  • Why: the filter compares names, so it works with any state, including your own.
  • Workaround: after renaming, search the scene for Character Filters.
  • Evidence: D32.

L13. Jump pad targets ignore air drag

  • Modules: Jump Pad, Heading Air
  • Shows up: a character with air drag (the Retro Platformer's Heading Air) lands short of a pad's target; about

1 m short over a 7 m throw.

  • Why: the launch is aimed with the character's gravity only.
  • Workaround: place targets with some room, or aim a little beyond.
  • Evidence: D34.

L14. Ladders are vertical

  • Modules: Ladder, Ladder Volume
  • Shows up: a sloped ladder is climbed straight up, away from its rungs.
  • Why: climbing moves along the world's up.
  • Workaround: none yet.
  • Evidence: D30.

L15. A swimmer cannot climb out onto a ledge above the water

  • Modules: Swim
  • Shows up: out of a pool whose edge is higher than the water, only steps or a ramp lead out.
  • Why: the water jump is short, and there is no mantle yet (planned with stances).
  • Workaround: give pools steps, or an edge level with the water (the gym's pool has both).
  • Evidence: WorldTests, the gym pool.

Damage

L16 was removed: fall damage now measures the height fallen (D40).

Presets

L17. Tactical-shooter friction stops a light stick push

  • Modules: Walk
  • Shows up: the Competitive Shooter and Surf barely move with the stick tilted under about a third.
  • Why: faithful to the original: below the stop speed, friction is as strong as the acceleration a light push

gives.

  • Workaround: none needed with a keyboard; on a gamepad, push further.
  • Evidence: ContactTests.TheGymHardPadTakesALedgeDropButNotAJump.

L18. The Retro Platformer does not have all of the classic platformer's moves yet

  • Modules: Heading Walk, Heading Air
  • Shows up:

- Not yet built: lunge, slide kick, and climbing down to a ledge from a walk. Side flip, wall bump, wall kick, ground pound, slides, crouch, crawl, long jump, backflip and ledge grab are in (D39 to D42). - Simplified: - no stand-up or get-up poses after slides and ground pounds; - no turning in the air after a butt slide; - no locked knockback after a hard bonk lands; - no squish after a moderate fall. - no crouch-down, stand-up or crawl transitions, and no long jump chained from a long-jump landing; - the long jump flies about 5 % short, since air speed is held at its cap.

  • Why: the moves come in stages (D39, D40); the rest is described in D33.
  • Workaround: none yet.
  • Evidence: D34.

L19. The Retro Platformer character walks only forwards

  • Modules: Heading Walk
  • Shows up: pulling the stick back turns the body around (or skids) instead of walking backwards.
  • Why: as in the original: all speed goes along the facing.
  • Workaround: use Walk for characters that should strafe or back-pedal.
  • Evidence: D33.

L21. The Modern Platformer does not have every move of the modern 3D platformer it studies

  • Modules: Vector Air, Wall Slide, Held Jump, Roll, Lunge, Spin, Stick Twirl
  • Shows up:

- Left out on purpose: the hat throw and everything built on it (hovering, bouncing, the mid-air stall, captures). It is too distinctive of one game to borrow (D48). - Not yet built: returning from a spin-pound to the spin jump. - Twirl: how the stick sweep is measured is this package's own. - Roll and lunge: no sideways drift in a roll, no motion-control boosts; the lunge's sideways cap, bonk and belly slide are choices. - Estimated: the ground acceleration, the buffer window and the wall slide speed are not published; the defaults are choices. - Simplified: no moving pivot on landing against the motion, no stun after a very long fall.

  • Why: built in two passes (D44 to D48); the rest is described in D44.
  • Workaround: none yet.
  • Evidence: D44.

L22. Footing changes how the ground is found, not the collision shape

  • Modules: Hull Ground Sensor
  • Shows up:

- with Point footing, walking off a step lets a capsule's round bottom brush the step's corner as it drops; - with Flat footing, a character beside a low step may count the step's top as its ground.

  • Why: Footing decides where the floor is; the hull still collides with everything as its own shape.
  • Workaround: Box Hull for a flat bottom everywhere; Round footing for a plain capsule.
  • Evidence: D49, FootingTests.

L23. The adventure presets have only their shared basics so far

  • Modules: Sprint, Stamina, Dodge, Lock On, Mantle, Ledge Climb, Marked Ledge, Jump Assist
  • Shows up:

- Not yet built: crouch-walking; for the Traversal Adventure dropping from a top to hang, corners and curved ledges, edge positioning before a leap, and cover. - Estimated: the Traversal Adventure's numbers have no published source (video measurements are planned); the Action RPG's speeds, acceleration, sprint drain and jump height are estimates (D56). - Sprint and the body: with Body Facing on Movement, sprinting pauses while the body turns more than Max Angle away from the stick, so a sharp turn drops to run speed for a moment. - Dodge: no invulnerability, no roll tiers by equipment weight, and the input buffer's length is a choice. - Lock-On: the ranges, the strafe speeds and the camera framing are estimates; a target far above or below the character can still fall out of frame. - Mantle: no vault over thin obstacles (it always ends on top), no mantle from a jump; its heights and times are estimates. - Ledge Climb: every reach, speed and time is an estimate; a hop picks the nearest ledge that way, not the one the camera shows.

  • Why: built in steps (D54 to D62); notes 10 and 11 list what is measured and what is not.
  • Workaround: none yet.
  • Evidence: D56.

L24. The calibration knows the adventure presets' moves only

  • Modules: Capability Card
  • Shows up:

- Searched: standing, running and sprinting jumps with coyote time; landings on the feet, catches of marked ledges, mantles. Not yet: double and triple jumps, held jumps, long jumps, flips, wall jumps (the platformers), speed gained per hop (the shooters), chains of moves, sideways reach. - Two limits per gap: max counts only a first touchdown on the target; reachable counts rolling up from the edge, which is worth half a metre and depends on the last millimetre, so it is searched, not guaranteed. - To about a centimetre: right at an edge the physics can tip a landing either way.

  • Why: phase 1 of D63.
  • Workaround: none yet.
  • Evidence: D63, CalibrationTests.

L25. Gym colours cover gaps and climbs only

  • Modules: Gym Challenge
  • Shows up: marked ledges and hops, drops (safe or hurting), timing challenges and moving pieces stay grey; the

bot crosses the gym with its scripted technique, not the card's recorded recipes.

  • Why: phase 2 of D63, as far as D64 goes.
  • Workaround: none yet.
  • Evidence: D64, GymGradeTests.

L26. Convex mesh colliders: one step in the air per stair

  • Modules: Ground Snapping, Hull Ground Sensor
  • Shows up: on stairs whose steps are convex mesh colliders (not boxes), a round hull leaves the ground for one

step at each riser, so Air begins and ends there; stairs are still climbed at speed.

  • Why: physics reports a round hull against a convex mesh's edge as sunk in by a few centimetres when it only

rests on it, and pushes it back along the riser rather than up the edge.

  • Workaround: give steps box colliders (CSG Brush does for axis aligned pieces).
  • Evidence: D66, SlopeAndStairTests.StairsOfConvexMeshCollidersAreClimbed.

Feedback

L20. Footsteps are events, not sounds

  • Modules: Footsteps
  • Shows up: nothing is heard; a Footstep event fires every stride with the surface's sound-set name.
  • Why: audio is up to the game; the package stays free of assets.
  • Workaround: listen to the motor's EventRaised and play a sound per sound set.
  • Evidence: D30.