sannybuilder/dev

allow keywords in expressions

x87 opened this issue · 3 comments

x87 commented
    0A9F: 0@ = get_this_script_struct
    0@ += 0x10
    0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0

could be rewritten as

    0@ = get_this_script_struct
    0@ += 0x10
    0@ = read_memory 0@ size 4 virtual_protect 0

Rules:

  1. the line must be an assignment expression
  2. keyword must follow the assignment operator (=)
  3. keyword must be a getter (have output as defined in SBL). read_memory is fine, but write_memory can only be used as a standalone command
x87 commented
0@ = read_memory ((get_this_script_struct) + 0x10) size 4 virtual_protect 0

where (expr) essentially means: take the left-hand side variable and make a new command var = code

another example:

nlvar0 = WEAPONTYPE_SHOTGUN * SIZEOF_CWEAPONINFO
nlvar0 += aWeaponInfo
nlvar0 = Memory.Read(nlvar0, DWORD, false)

nlvar0 = Memory.Read(((WEAPONTYPE_SHOTGUN * SIZEOF_CWEAPONINFO) + aWeaponInfo), DWORD, false)

I use form read_memory 0@ = from 0@ size 4 virtual_protect 0
Great idea, but the Ctrl+Alt+2 documentation have to propose new syntax too, same with code generated during decompilation.

x87 commented
  • support multiple returned values
$x, $y, $z = get_char_coordinates $char