Skip to content

SB3 Quirks

Seemann edited this page Apr 12, 2024 · 9 revisions
  • getters/setters can be used in two ways, using prop=val or val=prop syntax or alternatively as a function call:
Player.Create($PLAYER_CHAR, 0,0,0,0)
$PLAYER_CHAR = Player.Create(0,0,0,0,$PLAYER_CHAR)

Player.CanMove($PLAYER_CHAR, False)
Player.CanMove($PLAYER_CHAR) = False
  • string literals in commands don't support escape sequences ("\t" compiles as "\t"), but strings inside hex..end do (preserved under SB3_COMPAT)

  • opcode 00d6: can be compiled without arguments

  • second argument in Alloc command is optional and 0 by default (preserved under SB3_COMPAT)

  • hardcoded indexes in opcodes 05B6, 0A66, 0A67, 0A68, 0A6E (preserved under SB3_COMPAT)

05B6: 1 // index in debug.bin
  • anonymous enums in classes
0@ = Actor.Create(Fireman, 0, 0, 0, 0)
  • decompiler respects arbitrary param order defined in SCM.INI which produces weird class syntax (preserved under SB3_COMPAT)
0@ = Text.ScanString("", "%d", 1@, 2@) // here 1@ and 2@ are outputs, not inputs, but you won't tell this by reading the line
Clone this wiki locally