Classic Characters

Classic character reskinning replaces playable Classic entities while keeping their original identity and select-screen slot. Use this for Axel, Blaze, Skate, Max, Shiva, and any other playable Classic entity exposed by the editor reference data.

File Location

The Character Editor writes Classic replacements to:

Editor/<Pack Name>/Entity Replacements/Classic/<Character Name>/

A replacement folder can contain:

File Purpose
spriteSettings.json Sprite pivots, scale, icon index, and optional sprite reference settings.
animations.json Animation frame lists.
logic.json Entity type, movement, combat data, animation logic, events, scripts, and reference logic.
dependencies.json Extra sounds, entities, or music referenced by the entity.
0.png, 1.png, etc. Sprite frames.
preview.png Select or editor preview image.
portrait.png Portrait image where supported.

Start From A Classic Reference

In the Character Editor:

  1. Open your pack folder.
  2. Choose Classic Reskin.
  3. Select the original character you want to replace.
  4. Edit sprites, pivots, frames, animation timing, and optional logic.
  5. Save and test in character select and gameplay.

The editor uses the original Classic entity as a logic and timing reference. By default, the replacement uses your custom art only. The Classic sprites may appear as ghost/base sprites in the preview so you can line up frames, but they are not saved as reused replacement art unless you explicitly set Use Sprites from.

Import Player Skins From A ROM

In Classic Reskin mode, you can drop a supported modded SOR2 ROM onto the Character Editor and import Max, Axel, Blaze, Skate, or All Players. The editor creates or updates each skin in the matching classic character folder under Entity Replacements/Classic. Imported skins use the extracted ROM sprites as custom art and leave Use Sprites from empty.

ROM import only supports ROM hacks made from the US/western version of Streets of Rage 2. ROM hacks made from the Japanese version, Bare Knuckle 2, or from more complex ROM hacks such as Streets of Rage 2 Syndicate Wars, are not supported.

Reusing Existing Art

Use Use Sprites from only when the replacement should build on another existing entity's art. Typical examples are making an enemy playable or making a playable character into an enemy. This is different from choosing the Classic entity as the logic reference.

When a replacement reuses existing art, it must respect the referenced art entity's color palette layout and should work with palettes made for that art entity. Most new skins, sprite imports, and ROM imports should leave Use Sprites from empty.

If Use Sprites from is set, an animation can be filled from one of the referenced entity's animations. For Classic Reskins this action copies only the frame/art data. It does not copy hitboxes, body boxes, events, scripts, throw data, or other animation logic, because the reskin keeps Classic reference logic.

Keep The Entity Playable

Playable character replacements should keep entityType as Player in logic.json. If a playable character accidentally becomes an enemy or item entity type, the select screen or game start flow may fail.

See Entity Types and Behaviour Modes for entity categories and objectMode values.

Animation And Hit Timing

When replacing sprites without changing mechanics, keep the original:

  • animation IDs
  • frame count where possible
  • hitbox timing
  • bodybox timing
  • throw offsets
  • reference behaviour

If your sprite proportions change, update:

  • pivots in spriteSettings.json
  • body boxes
  • hit boxes
  • throw offsets
  • icon and portrait framing

Scripts And Events

A character animation can use logic events and Lua scripts. Events are useful for deterministic frame actions such as sound, velocity, spawns, or animation jumps. Lua scripts are useful when logic needs conditionals, input checks, targeting, or state changes.

If an animation defines events, those events override default referenced Classic behaviour for that animation. This prevents unwanted original side effects from running alongside custom event logic.

See Lua Scripting and Logic Events.

Final Checks

Test every replaced playable character for:

  • select screen icon and portrait
  • standing, walking, jumping, attacking, grabbing, throwing, being hit, death
  • weapon pickup and weapon throw if supported
  • palette choices
  • multiplayer palette uniqueness
  • any custom scripts or spawned items