Skip to content

Instantly share code, notes, and snippets.

@Vovan-VE
Last active May 4, 2023 15:34
Show Gist options
  • Save Vovan-VE/8fe61068255eca1f04837e33c215ddf8 to your computer and use it in GitHub Desktop.
Save Vovan-VE/8fe61068255eca1f04837e33c215ddf8 to your computer and use it in GitHub Desktop.
WinPlex SLT file format

WinPlex *.slt file format

WinPlex stores demos (solutions) in *.slt files.

SLT files are stored in Solution subfolder in the game directory. Every SLT file named as:

<levelset-file-name>.<level-index>.slt

For example:

  • levels.dat.111.slt
  • mullover.sp.1.slt

File Format

SLT file is a text file in CP1251 codepage.

See SVG

It consists of:

  • player: Name of the player solved the level.
  • levelset file: Name of levelset file.
  • level number: Level number.
  • Save frames. Due to bug an in-game "Save" cause 1 frame to miss from SLT, so "save" frame index is written instead.
    • frame index: frame number when in-game "Save" was triggered.
  • Bugs DB. Bugs (buggy base) in WinPlex have constant repetition period and random initial time offset. So, SLT for level with eaten bugs must have at least entries for those eaten bugs. Bugs not initialized from SLT will have random initial time offset and so may cause gameplay change if Murphy ate one of such bug. WinPlex saves all bugs, not only eaten. However, it loss bugs DB if in-game "Save/Load" was used.
    • x and y: 0-based coordinates of target bug tile.
    • time offset: initial time offset from 0 to 35 inclusive.
  • Movements. Every "move" ends with - char. Possible cases for every "move":
    • - (a dash alone): idle 1 frame.
    • 1-: hold spacebar 1 frame. To release Red Disk it must be repeated 23 times.
    • X-: move 1 tile (4 frames) to the given direction X.
    • X1-: snap eat 1 frame to the given direction X.
      • In both cases above the X direction can be D, L, R or U.
      • When several arrow keys was pressed together, WinPlex can write several direction letters together in a single "move", like for example DL-, which is incorrect and illogical, but it does so.

// https://tabatkins.github.io/railroad-diagrams/generator.html
Diagram(
Stack(
Sequence(
NonTerminal("player"), "0xA4",
NonTerminal("levelset file"), "0xA4",
NonTerminal("level number"), "0xA4",
),
Group(
ZeroOrMore(
Sequence(NonTerminal("frame index"), "0xA4"),
null,
"skip",
),
"save frames",
),
Group(
ZeroOrMore(
Sequence(
"M*",
NonTerminal("x"),
"*",
NonTerminal("y"),
"*",
NonTerminal("time offset"),
),
"-",
"skip",
),
"bugs DB"
),
Group(
OneOrMore(Sequence(
Optional(Sequence(
MultipleChoice(1, "any", "D", "L", "R", "U"),
Comment("arrows"),
), "skip"),
Optional(Sequence("1", Comment("spacebar")), "skip"),
"-",
)),
"movements",
),
),
)
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment