404 InstVec& insts,
const std::vector<unsigned char>& raw_script_data
588 for (
int i = 0; i < 3; i ++)
blank[i] = reader.
ReadU16();
590 for (
int i = 0; i < 8; i ++)
name[i] = reader.
ReadU8();
592 std::array<char, 8>
name;
593 for (
int j = 0; j < 8; j ++)
name[j] = reader.
ReadU8();
600 std::array<uint16, 32> scripts;
601 for (
int j = 0; j < 32; j ++) scripts[j] = reader.
ReadU16();
613 virtual void Open(
const char *filename)
override;
634 std::string entity_name,
size_t entity_index,
size_t script_index,
635 size_t script_entry_point,
uint32 next_script_entry_point,
bool is_start,
bool is_end
655 std::string entity_name,
size_t entity_index,
size_t script_index,
656 uint32 next_script_entry_point,
const bool is_start,
const bool is_end,
657 bool to_return_only, std::string func_name
676 size_t end_pos, std::vector<float>& point_a, std::vector<float>& point_b
684 std::unique_ptr<Function>
StartFunction(
size_t script_index);
707 uint16 cur_entry_point,
size_t entity_index,
size_t script_index
725 int opcode, std::string name, T instruction,
int stack_change,
const char* argument_format
727 uint32 full_opcode = (full_opcode << 8) + opcode;
728 this->
insts_.push_back(instruction);
729 this->
insts_.back()->SetOpcode(full_opcode);
731 this->
insts_.back()->SetStackChange(0);
732 this->
insts_.back()->SetName(std::string(name));
733 this->
insts_.back()->SetCodeGenData(
"");
OPCODES
Field opcodes.
Definition: FieldDisassembler.h:28
@ PTURA
Definition: FieldDisassembler.h:74
@ ADPAL2
Definition: FieldDisassembler.h:255
@ BITON
Definition: FieldDisassembler.h:147
@ OFST
Definition: FieldDisassembler.h:211
@ GTPYE
Definition: FieldDisassembler.h:40
@ CHGLD
Definition: FieldDisassembler.h:80
@ PMJMP2
Definition: FieldDisassembler.h:233
@ HBYTE
Definition: FieldDisassembler.h:172
@ MUL
Definition: FieldDisassembler.h:154
@ RETTO
Definition: FieldDisassembler.h:36
@ ANIME1
Definition: FieldDisassembler.h:180
@ IFMEMBQ
Definition: FieldDisassembler.h:220
@ FMUSC
Definition: FieldDisassembler.h:268
@ FADE
Definition: FieldDisassembler.h:124
@ IDLCK
Definition: FieldDisassembler.h:126
@ MINUS_
Definition: FieldDisassembler.h:137
@ PXYZI
Definition: FieldDisassembler.h:134
@ MOD
Definition: FieldDisassembler.h:158
@ PGTDR
Definition: FieldDisassembler.h:132
@ MVIEF
Definition: FieldDisassembler.h:266
@ DMTRA
Definition: FieldDisassembler.h:109
@ SOLID
Definition: FieldDisassembler.h:215
@ CCANM
Definition: FieldDisassembler.h:236
@ JMPB
Definition: FieldDisassembler.h:45
@ IFKEYOFF
Definition: FieldDisassembler.h:71
@ JUMP
Definition: FieldDisassembler.h:208
@ HPU
Definition: FieldDisassembler.h:95
@ MOD2
Definition: FieldDisassembler.h:159
@ AKAO2
Definition: FieldDisassembler.h:234
@ IFUW
Definition: FieldDisassembler.h:51
@ PLUS2_
Definition: FieldDisassembler.h:136
@ MPJPO
Definition: FieldDisassembler.h:226
@ LADER
Definition: FieldDisassembler.h:210
@ GOLDU
Definition: FieldDisassembler.h:78
@ TURNW
Definition: FieldDisassembler.h:238
@ DEC_
Definition: FieldDisassembler.h:141
@ AXYZI
Definition: FieldDisassembler.h:209
@ SCRLO
Definition: FieldDisassembler.h:114
@ TWOBYTE
Definition: FieldDisassembler.h:173
@ SETWORD
Definition: FieldDisassembler.h:146
@ IFSW
Definition: FieldDisassembler.h:49
@ LDPAL
Definition: FieldDisassembler.h:246
@ FCFIX
Definition: FieldDisassembler.h:235
@ CMOVE
Definition: FieldDisassembler.h:186
@ OR2
Definition: FieldDisassembler.h:163
@ BATTLE
Definition: FieldDisassembler.h:129
@ REQSW
Definition: FieldDisassembler.h:31
@ BMUSC
Definition: FieldDisassembler.h:262
@ MINUS2_
Definition: FieldDisassembler.h:138
@ WCLS
Definition: FieldDisassembler.h:67
@ SETX
Definition: FieldDisassembler.h:174
@ PLUS2
Definition: FieldDisassembler.h:151
@ GAMEOVER
Definition: FieldDisassembler.h:271
@ CC
Definition: FieldDisassembler.h:207
@ BLINK
Definition: FieldDisassembler.h:59
@ STPLS
Definition: FieldDisassembler.h:251
@ SLDR2
Definition: FieldDisassembler.h:231
@ JOIN
Definition: FieldDisassembler.h:37
@ COS
Definition: FieldDisassembler.h:229
@ CANIM2
Definition: FieldDisassembler.h:204
@ TURNGEN
Definition: FieldDisassembler.h:197
@ HMPMAX3
Definition: FieldDisassembler.h:84
@ MENU
Definition: FieldDisassembler.h:92
@ TURN
Definition: FieldDisassembler.h:198
@ MMBUD
Definition: FieldDisassembler.h:221
@ TLKR2
Definition: FieldDisassembler.h:230
@ RDMSD
Definition: FieldDisassembler.h:144
@ DLITM
Definition: FieldDisassembler.h:106
@ FMOVE
Definition: FieldDisassembler.h:190
@ FADEW
Definition: FieldDisassembler.h:125
@ MPU
Definition: FieldDisassembler.h:89
@ DSKCG
Definition: FieldDisassembler.h:41
@ SIN
Definition: FieldDisassembler.h:228
@ MMBUK
Definition: FieldDisassembler.h:223
@ DIV2
Definition: FieldDisassembler.h:157
@ BTRLD
Definition: FieldDisassembler.h:56
@ BGROL2
Definition: FieldDisassembler.h:243
@ DEC2
Definition: FieldDisassembler.h:169
@ MSPED
Definition: FieldDisassembler.h:195
@ IFUBL
Definition: FieldDisassembler.h:48
@ MPARA
Definition: FieldDisassembler.h:86
@ BGROL
Definition: FieldDisassembler.h:242
@ XOR2
Definition: FieldDisassembler.h:165
@ DIR
Definition: FieldDisassembler.h:196
@ INC_
Definition: FieldDisassembler.h:139
@ SCRCC
Definition: FieldDisassembler.h:118
@ ASK
Definition: FieldDisassembler.h:91
@ MPPAL
Definition: FieldDisassembler.h:239
@ MINIGAME
Definition: FieldDisassembler.h:53
@ BITXOR
Definition: FieldDisassembler.h:149
@ MHMMX
Definition: FieldDisassembler.h:83
@ MOVA
Definition: FieldDisassembler.h:187
@ MPRA2
Definition: FieldDisassembler.h:87
@ WINDOW
Definition: FieldDisassembler.h:97
@ RTPAL2
Definition: FieldDisassembler.h:254
@ BGON
Definition: FieldDisassembler.h:240
@ REQEW
Definition: FieldDisassembler.h:32
@ BGPDH
Definition: FieldDisassembler.h:65
@ PMJMP
Definition: FieldDisassembler.h:232
@ INC
Definition: FieldDisassembler.h:166
@ SCR2DC
Definition: FieldDisassembler.h:119
@ WAIT
Definition: FieldDisassembler.h:57
@ SPLIT
Definition: FieldDisassembler.h:38
@ CANM_2
Definition: FieldDisassembler.h:205
@ SEARCHX
Definition: FieldDisassembler.h:176
@ PMVIE
Definition: FieldDisassembler.h:264
@ WMOVE
Definition: FieldDisassembler.h:98
@ SLIDR
Definition: FieldDisassembler.h:214
@ MPPAL2
Definition: FieldDisassembler.h:250
@ BTLON
Definition: FieldDisassembler.h:130
@ SWCOL
Definition: FieldDisassembler.h:104
@ DEC
Definition: FieldDisassembler.h:168
@ DIV
Definition: FieldDisassembler.h:156
@ BTLTB
Definition: FieldDisassembler.h:94
@ RTPAL
Definition: FieldDisassembler.h:248
@ STPAL
Definition: FieldDisassembler.h:245
@ AND
Definition: FieldDisassembler.h:160
@ PLUS
Definition: FieldDisassembler.h:150
@ LINON
Definition: FieldDisassembler.h:225
@ GWCOL
Definition: FieldDisassembler.h:103
@ IFKEY
Definition: FieldDisassembler.h:69
@ WSIZW
Definition: FieldDisassembler.h:68
@ AND2
Definition: FieldDisassembler.h:161
@ JMPBL
Definition: FieldDisassembler.h:46
@ VISI
Definition: FieldDisassembler.h:181
@ GETPC
Definition: FieldDisassembler.h:133
@ MVCAM
Definition: FieldDisassembler.h:267
@ SMTRA
Definition: FieldDisassembler.h:108
@ MPDSP
Definition: FieldDisassembler.h:122
@ SLIP
Definition: FieldDisassembler.h:64
@ SETBYTE
Definition: FieldDisassembler.h:145
@ SLINE
Definition: FieldDisassembler.h:227
@ CMUSC
Definition: FieldDisassembler.h:269
@ AKAO
Definition: FieldDisassembler.h:258
@ LSTMP
Definition: FieldDisassembler.h:127
@ GOLDD
Definition: FieldDisassembler.h:79
@ OR
Definition: FieldDisassembler.h:162
@ ASPED
Definition: FieldDisassembler.h:206
@ MOVIE
Definition: FieldDisassembler.h:265
@ WCLSE
Definition: FieldDisassembler.h:101
@ MMBLK
Definition: FieldDisassembler.h:222
@ MUSIC
Definition: FieldDisassembler.h:256
@ MUL2
Definition: FieldDisassembler.h:155
@ MUSVT
Definition: FieldDisassembler.h:259
@ RANDOM
Definition: FieldDisassembler.h:170
@ PC
Definition: FieldDisassembler.h:177
@ KAWIW
Definition: FieldDisassembler.h:62
@ MPD
Definition: FieldDisassembler.h:90
@ IFKEYON
Definition: FieldDisassembler.h:70
@ SPTYE
Definition: FieldDisassembler.h:39
@ HMPMAX1
Definition: FieldDisassembler.h:81
@ WREST
Definition: FieldDisassembler.h:100
@ CHMST
Definition: FieldDisassembler.h:270
@ SPECIAL
Definition: FieldDisassembler.h:42
@ OFSTW
Definition: FieldDisassembler.h:212
@ GETAXY
Definition: FieldDisassembler.h:201
@ IFUWL
Definition: FieldDisassembler.h:52
@ BGCLR
Definition: FieldDisassembler.h:244
@ GETX
Definition: FieldDisassembler.h:175
@ LINE
Definition: FieldDisassembler.h:224
@ JMPFL
Definition: FieldDisassembler.h:44
@ RET
Definition: FieldDisassembler.h:29
@ MESSAGE
Definition: FieldDisassembler.h:85
@ WSPCL
Definition: FieldDisassembler.h:75
@ SCR2D
Definition: FieldDisassembler.h:117
@ REQ
Definition: FieldDisassembler.h:30
@ SCRLP
Definition: FieldDisassembler.h:128
@ XYZI
Definition: FieldDisassembler.h:182
@ ANIME2
Definition: FieldDisassembler.h:191
@ BGOFF
Definition: FieldDisassembler.h:241
@ TALKR
Definition: FieldDisassembler.h:213
@ KAWAI
Definition: FieldDisassembler.h:61
@ PMOVA
Definition: FieldDisassembler.h:63
@ PREQ
Definition: FieldDisassembler.h:33
@ DFANM
Definition: FieldDisassembler.h:179
@ XYI
Definition: FieldDisassembler.h:183
@ DIRA
Definition: FieldDisassembler.h:199
@ MPNAM
Definition: FieldDisassembler.h:88
@ CMTRA
Definition: FieldDisassembler.h:110
@ STTIM
Definition: FieldDisassembler.h:77
@ XYZ
Definition: FieldDisassembler.h:184
@ CPPAL2
Definition: FieldDisassembler.h:253
@ CKITM
Definition: FieldDisassembler.h:107
@ XOR
Definition: FieldDisassembler.h:164
@ HPD
Definition: FieldDisassembler.h:96
@ CANIM1
Definition: FieldDisassembler.h:193
@ PRTYE
Definition: FieldDisassembler.h:218
@ PRTYP
Definition: FieldDisassembler.h:216
@ SCR2DL
Definition: FieldDisassembler.h:121
@ PRTYM
Definition: FieldDisassembler.h:217
@ SCRLA
Definition: FieldDisassembler.h:116
@ BGMOVIE
Definition: FieldDisassembler.h:60
@ PRQSW
Definition: FieldDisassembler.h:34
@ CANM_1
Definition: FieldDisassembler.h:194
@ NFADE
Definition: FieldDisassembler.h:58
@ ADPAL
Definition: FieldDisassembler.h:249
@ VWOFT
Definition: FieldDisassembler.h:123
@ LBYTE
Definition: FieldDisassembler.h:171
@ MAPJUMP
Definition: FieldDisassembler.h:113
@ WMODE
Definition: FieldDisassembler.h:99
@ IFPRTYQ
Definition: FieldDisassembler.h:219
@ MUSVM
Definition: FieldDisassembler.h:260
@ JMPF
Definition: FieldDisassembler.h:43
@ ANIM_1
Definition: FieldDisassembler.h:192
@ UC
Definition: FieldDisassembler.h:72
@ INC2_
Definition: FieldDisassembler.h:140
@ TURA
Definition: FieldDisassembler.h:188
@ MENU2
Definition: FieldDisassembler.h:93
@ CPPAL
Definition: FieldDisassembler.h:247
@ IFUB
Definition: FieldDisassembler.h:47
@ ANIMB
Definition: FieldDisassembler.h:237
@ WNUMB
Definition: FieldDisassembler.h:76
@ TUTOR
Definition: FieldDisassembler.h:54
@ PLUS_
Definition: FieldDisassembler.h:135
@ BITOFF
Definition: FieldDisassembler.h:148
@ MULCK
Definition: FieldDisassembler.h:261
@ STITM
Definition: FieldDisassembler.h:105
@ IFSWL
Definition: FieldDisassembler.h:50
@ MOVE
Definition: FieldDisassembler.h:185
@ MINUS2
Definition: FieldDisassembler.h:153
@ GETAI
Definition: FieldDisassembler.h:202
@ SCRLW
Definition: FieldDisassembler.h:120
@ HMPMAX2
Definition: FieldDisassembler.h:82
@ WROW
Definition: FieldDisassembler.h:102
@ ANIMW
Definition: FieldDisassembler.h:189
@ BTLMD
Definition: FieldDisassembler.h:131
@ PDIRA
Definition: FieldDisassembler.h:73
@ MINUS
Definition: FieldDisassembler.h:152
@ DEC2_
Definition: FieldDisassembler.h:142
@ SCRLC
Definition: FieldDisassembler.h:115
@ SOUND
Definition: FieldDisassembler.h:257
@ NOP
Definition: FieldDisassembler.h:112
@ PRQEW
Definition: FieldDisassembler.h:35
@ LDPLS
Definition: FieldDisassembler.h:252
@ ANIM_2
Definition: FieldDisassembler.h:203
@ SHAKE
Definition: FieldDisassembler.h:111
@ opCodeCHAR
Definition: FieldDisassembler.h:178
@ BTMD2
Definition: FieldDisassembler.h:55
@ BGSCR
Definition: FieldDisassembler.h:66
@ INC2
Definition: FieldDisassembler.h:167
@ GETDIR
Definition: FieldDisassembler.h:200
@ CHMPH
Definition: FieldDisassembler.h:263
@ TLKON
Definition: FieldDisassembler.h:143
OPCODES_KAWAI
KAWAI opcodes.
Definition: FieldDisassembler.h:304
@ Unknown07
Definition: FieldDisassembler.h:312
@ SBOBJ
Definition: FieldDisassembler.h:315
@ TRNSP
Definition: FieldDisassembler.h:306
@ SHINE
Definition: FieldDisassembler.h:318
@ Unknown0B
Definition: FieldDisassembler.h:316
@ Unknown03
Definition: FieldDisassembler.h:308
@ Unknown0C
Definition: FieldDisassembler.h:317
@ RESET
Definition: FieldDisassembler.h:319
@ Unknown05
Definition: FieldDisassembler.h:310
@ Unknown04
Definition: FieldDisassembler.h:309
@ EYETX
Definition: FieldDisassembler.h:305
@ Unknown09
Definition: FieldDisassembler.h:314
@ Unknown08
Definition: FieldDisassembler.h:313
@ AMBNT
Definition: FieldDisassembler.h:307
@ LIGHT
Definition: FieldDisassembler.h:311
OPCODES_SPECIAL
SPECIAL opcodes.
Definition: FieldDisassembler.h:282
@ FLMAT
Definition: FieldDisassembler.h:287
@ PNAME
Definition: FieldDisassembler.h:284
@ RSGLB
Definition: FieldDisassembler.h:292
@ ARROW
Definition: FieldDisassembler.h:283
@ SMSPD
Definition: FieldDisassembler.h:286
@ FLITM
Definition: FieldDisassembler.h:288
@ MVLCK
Definition: FieldDisassembler.h:290
@ CLITM
Definition: FieldDisassembler.h:293
@ SPCNM
Definition: FieldDisassembler.h:291
@ BTLCK
Definition: FieldDisassembler.h:289
@ GMSPD
Definition: FieldDisassembler.h:285
boost::intrusive_ptr< Instruction > InstPtr
Pointer to an Instruction.
Definition: Instruction.h:43
std::vector< InstPtr > InstVec
Type representing a vector of InstPtrs.
Definition: Instruction.h:382
Reader for binary files.
Definition: BinaryReader.h:27
unsigned int ReadU32()
Reads 32 bits of data as an unsigned integer.
Definition: BinaryReader.h:93
unsigned char ReadU8()
Reads 8 bits of data as an unsigned integer.
Definition: BinaryReader.h:133
unsigned short int ReadU16()
Reads 16 bits of data as a signed integer.
Definition: BinaryReader.h:123
Base class for disassemblers.
Definition: Disassembler.h:28
uint32 address_
The current address.
Definition: Disassembler.h:130
void ReadParams(InstPtr inst, const char *types)
Read parameters and associate them with an instruction.
Definition: Disassembler.cpp:58
InstVec & insts_
List of disassembled instructions.
Definition: Disassembler.h:120
A disassebler for field maps.
Definition: FieldDisassembler.h:327
static const int MAGIC
Field file identification magic number.
Definition: FieldDisassembler.h:428
virtual void DoDisassemble() override
Disassembles the instructions.
Definition: FieldDisassembler.cpp:120
std::array< uint32, 7 > sections_
The list of sections.
Definition: FieldDisassembler.h:750
uint32 header_end_position_
Last address of the header.
Definition: FieldDisassembler.h:745
float GetScaleFactor() const
Retrieves the scale factor for the field.
Definition: FieldDisassembler.cpp:63
std::unique_ptr< Function > StartFunction(size_t script_index)
Initializes a function for an entity.
Definition: FieldDisassembler.cpp:111
void ParseOpcode(int opcode, std::string name, T instruction, int stack_change, const char *argument_format)
Parses an opcode.
Definition: FieldDisassembler.h:724
static InstructionRecord FLOW_OPCODES[]
A list of flow control opcodes needed by the disassembler.
Definition: FieldDisassembler.h:365
float scale_factor_
The scale factor of the field.
Definition: FieldDisassembler.h:777
static std::map< std::string, const InstructionRecord * > FieldInstructions()
Generates a map of control flow instructions.
Definition: FieldDisassembler.cpp:307
void ReadHeader()
Reads the header.
Definition: FieldDisassembler.cpp:67
static const int NUM_SECTIONS
The number of sections in a field.
Definition: FieldDisassembler.h:433
static int FindId(uint32 start_addr, uint32 end_addr, const InstVec &insts)
Finds the ID of the character a function refers to.
Definition: FieldDisassembler.cpp:161
FieldEngine * engine_
The engine.
Definition: FieldDisassembler.h:740
void AddFunc(std::string entity_name, size_t entity_index, size_t script_index, uint32 next_script_entry_point, const bool is_start, const bool is_end, bool to_return_only, std::string func_name)
Adds a function to the engine.
Definition: FieldDisassembler.cpp:171
FieldScriptFormatter & formatter_
The formatter.
Definition: FieldDisassembler.h:772
void ReadHeader(BinaryReader &reader)
Reads the header.
int16 section_pointers_size_
Size of the pointers to sections.
Definition: FieldDisassembler.h:757
uint32 GetEndOfScriptOffset(uint16 cur_entry_point, size_t entity_index, size_t script_index)
Retrieves the offset of the end of a script.
Definition: FieldDisassembler.cpp:89
~FieldDisassembler()
Destructor.
Definition: FieldDisassembler.cpp:65
ScriptHeader header_
The field header.
Definition: FieldDisassembler.h:762
virtual void Open(const char *filename) override
Open a file for disassembly.
Definition: FieldDisassembler.cpp:83
void DisassembleIndivdualScript(std::string entity_name, size_t entity_index, size_t script_index, size_t script_entry_point, uint32 next_script_entry_point, bool is_start, bool is_end)
Disassembles a script (function).
Definition: FieldDisassembler.cpp:251
bool ReadOpCodesToPositionOrReturn(size_t end_pos, std::vector< float > &point_a, std::vector< float > &point_b)
Reads opcodes from a script, and detects lines.
Definition: FieldDisassembler.cpp:315
FieldDisassembler(FieldScriptFormatter &formatter, FieldEngine *engine, InstVec &insts)
Constructor.
Definition: FieldDisassembler.cpp:57
SECTIONS
The sections of a field.
Definition: FieldDisassembler.h:438
@ SCRIPT
The scripts section.
Definition: FieldDisassembler.h:443
@ WALKMESH
The walkmesh section.
Definition: FieldDisassembler.h:448
@ ENCOUNTERS
Encounter data section.
Definition: FieldDisassembler.h:468
@ TILE_MAP
The tiles section.
Definition: FieldDisassembler.h:453
@ MODELS
Field models section.
Definition: FieldDisassembler.h:473
@ CAMERA_MATRIX
The camera section.
Definition: FieldDisassembler.h:458
@ TRIGGERS
The triggers section.
Definition: FieldDisassembler.h:463
bool loaded_from_raw_data_
Indicates if the field has been loaded from raw data.
Definition: FieldDisassembler.h:767
Represents the FF7 Field engine.
Definition: FieldEngine.h:31
DummyFormatter formatter
Definition: ff7_field_disasm_all_opcodes_by_category_test.cpp:1966
unsigned short uint16
Definition: scummsys.h:433
unsigned int uint32
Definition: scummsys.h:435
signed short int16
Definition: scummsys.h:434
unsigned char uint8
Definition: scummsys.h:431
Information about an instruction.
Definition: FieldDisassembler.h:334
unsigned int opcode
The opcode code.
Definition: FieldDisassembler.h:344
const char * opcode_name
The opcode short name (mnemonic).
Definition: FieldDisassembler.h:349
unsigned char opcode_size
The size, in bytes, of the opcode.
Definition: FieldDisassembler.h:339
const char * argument_format
Format of the opcode arguments.
Definition: FieldDisassembler.h:354
std::function< InstPtr()> factory_function
Definition: FieldDisassembler.h:359
Info about a script.
Definition: FieldDisassembler.h:479
uint16 entry_point
Address of the script entry point.
Definition: FieldDisassembler.h:484
size_t index
Script index.
Definition: FieldDisassembler.h:496
uint32 next_entry_point
Address of the next script entry point.
Definition: FieldDisassembler.h:491
Structure representing a function.
Definition: Function.h:26