MOBS, PROPS AND WALKING ANIMATIONS - EDIT ONE CSV
Offline mode only.

EDIT THIS FILE:
entities.csv (beside MaptoMCD2_Compiler.bat)
It is beside MaptoMCD2_Compiler.bat, NOT inside recipe or an old build folder.

1. Close the compiler. Make a backup of entities.csv.
2. Open entities.csv in a text editor or spreadsheet application.
3. Edit an existing row or copy one and give it a unique name.
4. Keep the column headings and order. Save as comma-separated UTF-8 CSV.
5. Close the CSV editor, restart the compiler and rebuild.
6. Install with MCD II closed, then test offline.

Each build copies your CSV into its own build folder. Builds do not overwrite
your master CSV. Do not edit props.py, mob_catalog.py or HavenDoor.cs to add
ordinary entries anymore. Earlier code-edit instructions are superseded.

COLUMNS
type          mob or prop.
name          Minecraft marker name, lowercase with underscores.
enabled       true or false. false disables recognition and helper generation.
state         mob: native or walk. prop: static mesh or native blueprint.
tag           Mob's exact existing SW.Mob tag. Blank for props.
character     Mob's exact existing blueprint object path. Blank for props.
mesh          Prop's native static-mesh object path. Blank for mobs.
animation     Mob's walking sequence object path, when state is walk.
slot          Animation slot, e.g. FullBody for zombie/spider walk entries.
playback_rate  Animation playback multiplier: 1 normal, 0.8 slower, 1.2 faster.
spawn_offset  Unreal units above the marker floor; 100 = one Minecraft block.
offset_forward Unreal-unit placement offset along the prop's facing direction.
offset_right   Unreal-unit placement offset to the prop's right; negative reverses it.
clearance     Required empty vertical space in Minecraft blocks.
collision     Mob: native. Prop: mesh or none.

STATES: WHAT IS IMPLEMENTED
native: spawn the mob and leave its animations to the game.
walk: also apply the guarded walking/turning helper using this row's sequence.
static: stationary mesh prop.
Native prop: spawn the game's blueprint actor; its behavior may depend on
level-specific references. Newly discovered entries are untested and may fail.

Attacks, hit reactions and death remain game-controlled. Custom attack/death/
idle-state overrides and animated props are NOT implemented. Unsupported state
names stop the build with a row-number error rather than silently doing nothing.
There is one row per marker/type tag, not one row per attack or death state.

BARREL COLLISION
Find the prop_barrel row. Its collision is now mesh.
  mesh: BlockAll with query/physics collision using the mesh's existing shapes.
  none: decorative; you can walk through it.
Set collision separately for each prop row, save, and rebuild.
This does NOT make the prop breakable or give it loot, physics simulation or
interaction. If a mesh has no usable collision shapes, mesh mode cannot create
them; do not assume every native mesh will become solid. Barrel needs retesting.

ADD ANOTHER PROP
Copy the prop_barrel row. Change name to prop_your_name and replace mesh with
a verified /Game/Folder/SM_Name.SM_Name path. Keep state static. Set clearance
and collision. Leave tag, character, animation and slot blank.
In Minecraft use minecraft:prop_your_name in a STRUCTURE BLOCK, LOAD mode.
Choose rotation, click Done (not Load), Save and Quit, then rebuild.
Native meshes are used at scale 1, aligned to their bottom bounds. Use
spawn_offset for a small vertical adjustment if needed.

MOVE A PROP SLIGHTLY
Set offset_forward and offset_right on the prop row in entities.csv. Values are
Unreal units; 100 is approximately one Minecraft block. Positive forward moves
in the prop's facing direction. Positive right moves to its right. Leave both
at 0 for the normal marker position.

JUMP TRAP LANDING
Use prop_jump_trap for one pad and a structure block named jump_landing at its
destination. For more than one pad, add matching numbers to both markers:
  prop_jump_trap_1  ->  jump_landing_1
  prop_jump_trap_2  ->  jump_landing_2
The compiler moves each pad's Destination component to its matching landing
point. The marker must be one block above a solid floor.

ACTION GROUPS
Add an action group suffix to link a control to one or more targets:
  prop_button_1_A1  ->  prop_gate_1_A1
  prop_button_1_A1  ->  prop_gate_2_A1
The button, lever, or pressure plate activates every target sharing its A-number.
Use A2, A3, and so on for separate groups. This is separate from the key-door
system and does not change prop_brazier.

SPIDER WALK EXAMPLE
The spider row already contains:
  state: walk
  tag: SW.Mob.Spider
  character: /Game/Spicewood/Art/Characters/Enemies/Spider/BP_Spider.BP_Spider_C
  animation: /Game/Spicewood/Art/Characters/Enemies/Spider/Animations/Spider_Walk.Spider_Walk
  slot: FullBody
  playback_rate: 1
  spawn_offset: 105
  clearance: 2
  collision: native
Use minecraft:spider as the structure name. This entry is compile-checked,
not in-game verified. To disable only its walking helper, set state to native.

ADD A MOB / WALKING PROFILE
Copy a mob row and use a unique marker name, actual native tag and matching
character reference from the extracted game definitions. Invented or mismatched
tag/character pairs are rejected. The catalogue is not a way to create new AI.
Use native until you have verified a compatible walking sequence and slot.
Then set walk, animation, slot and playback_rate. Never reuse a zombie walking
sequence for a different skeleton.
Put specific subclasses above parent classes in the CSV: first match wins.
Keep collision native for mobs. Native attacks and death are left alone.

TEST ONE NEW TYPE AT A TIME
Check appearance, floor height, turning, walking/stopping, attacks and death.
Check a familiar zombie and chest still work. For props, check the rotation and
try walking through it. Restore the CSV backup and rebuild to undo changes.

Only zombie's animation helper has been tested in-game so far. Recognised does
not mean fully working. The original map installation is not changed by editing
the CSV; you must rebuild and install. Nothing is uploaded automatically.
