Skip to content

An assembler / disassembler tool for InnocentGrey 's script format

Notifications You must be signed in to change notification settings

shimamura-sakura/FlowerScript

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FlowerScript

An assembler / disassembler tool for InnocentGrey 's script format

Currently it can (dis)asm all scripts from

  • FLOWERS Le volume sur ete.
  • FLOWERS Le volume sur hiver.

Use iglib as a package

Usage

# Disasm

from iglib import flowerscript, igarchive

with open('script.s', 'rb') as fp:
    # gbk for chinese translated games
    result = flowerscript.disasm(fp, encoding='cp932')
with open('script.py', 'w') as fp:
    for line in result:
        print(line, file=fp)

# Assemble

s = flowerscript.Assembler(encoding='cp932')

# Example result: start.s from FLOWERS Le volume sur ete
# Many operations are documented in 'iglib/flowerscript.py'
s.op('dlg_show', 0)
s.op('set_value', 0x64, 0)
s.op('set_value', 0x65, 0)
s.op('set_value', 0x66, 0)
s.op('set_value', 0x67, 0)
s.op('set_value', 0x68, 0)
s.op('set_value', 0x69, 0)
s.op('set_value', 0x6a, 0)
s.op('set_value', 0x6b, 0)
s.op('set_value', 0x6c, 128)
s.op('set_value', 0x6d, 0)
s.op('jump_2shuume', 0x0b, s.label_0x64)
s.op('jmp', 0x00, s.label_0x9a)
s.label_0x64.define()
s.op('sel_beg', 0x00)
s.op('sel_add', s.label_0x9a, '最初から見る')
s.op('sel_add', s.label_0xad, 'プロローグを見ない')
s.op('sel_end', 0x64)
s.label_0x9a.define()
s.op('jmp_script', 0x00, '02a_00001.s')
s.op('end', 0x00)
s.label_0xad.define()
s.op('jmp_script', 0x00, '02a_01000.s')
s.op('end', 0x00)
s.op('jmp_script', 0x00, '02a_08000.s')
s.op('end', 0x00)
s.op('sel_beg', 0x00)
s.op('sel_add', s.label_0x134, '朗読劇')
s.op('sel_add', s.label_0x121, 'バレエ発表会')
s.op('sel_add', s.label_0x119, 'バレエ(離別エンド)')
s.op('sel_end', 0x5a)
s.label_0x119.define()
s.op('set_value', 0x6a, 1)
s.label_0x121.define()
s.op('jmp_script', 0x00, '02a_06550.s')
s.op('end', 0x00)
s.label_0x134.define()
s.op('jmp_script', 0x00, '02a_03950.s')
s.op('end', 0x00)
# End of example result

# Save the script
s.finish() # write all label offsets into their places
with open('script.s', 'wb') as fp:
    fp.write(s.bytes)

# Create IGA Archive
with open('example.iga', 'wb') as fp:
    fp.write(igarchive.iga_create(
        [
            ('start.s', s.bytes) # (name, data)
        ],
        xor = 0xFF # Use 0xFF for script.iga, otherwise 0x00
    ))

About

An assembler / disassembler tool for InnocentGrey 's script format

Topics

Resources

Stars

Watchers

Forks

Languages