Troubleshooting

This page collects common modding failures and the first places to check.

Pack Does Not Appear

Check:

  • pack folder is under Editor/<Pack Name> while editing
  • config.json is valid JSON
  • folder name does not start with a dot
  • dependencies in config.json are available
  • thumbnail.png is valid if the menu tries to show it

Classic Reskin Does Not Apply

Check:

  • dependencies includes Classic
  • reskin level files are under Level Replacements/Classic
  • entity replacements are under Entity Replacements/Classic
  • audio maps are under Audio Replacements/Classic
  • playable palettes are under Palettes/Classic/<Playable Character>

Image Missing In Level Editor Or Game

Check:

  • imageName exactly matches a file in Levels/Art
  • extension is included in imageName
  • the image is not in Level Replacements/Classic
  • the layer has the image in staticImages, titleScreenImages, or animation frames
  • the JSON scene has at least one layer

Title Screen Still Uses Original

Check:

  • file is Level Replacements/Classic/title.json
  • the pack is loaded as a Classic reskin
  • title JSON has a scenes array
  • visible art is in staticImages or titleScreenImages
  • old Levels/title.json was migrated or removed if the editor created a skin copy

Script Does Nothing

Check:

  • script file is in Scripts/
  • scriptName omits .lua
  • packName matches the pack folder name
  • the animation reaches the scripted frame
  • the script returns its update function, and that function returns true
  • context object is not nil

Use print() temporarily and check the Unity log or in-game error display.

Script Throws Nil Errors

Guard context-specific objects at the start of the update function:

local player = game.this_player
if player == nil then
    return true
end

Do the same for attacker, victim, nearest opponents, and objects returned from ID lookup.

Music Does Not Play

Check:

  • music file is in Musics
  • JSON uses the base filename without extension
  • musicPackName or replacement packName matches the pack name
  • replacement map is Audio Replacements/Classic/music-replacements.json
  • loop metadata JSON is valid if present

Sound Does Not Play

Check:

  • sound file is in Sounds
  • JSON uses the base filename without extension
  • replacement map is Audio Replacements/Classic/sound-replacements.json
  • event frame is reached
  • sound channel is appropriate

Palette Does Not Appear

Check:

  • the workflow is for playable characters only
  • path is Palettes/Classic/<Playable Character>/palette <n>.png
  • PNG dimensions and color order match the expected palette guide
  • the pack was reloaded after adding files

Entity Replacement Loads Wrong Behavior

Check:

  • entityType is correct
  • referencePackName and referenceEntityName point to the intended original entity
  • referenceBehaviour.objectMode uses a valid value from Behaviour Modes
  • animations with events intentionally skip referenced Classic behaviour
  • spawned entity names and pack names match exactly