_<00>.ea<04> Mana\n is in danger now_<12><1b><00><00><04> We must
59 | ```
60 |
61 | ### There is trouble in the lands...
62 |
63 | Great we got strings. But, it looks off. There isn't a pointer pointing to the start of a string, and the strings aren't nicely lined up with each other. There are some pointers in bank `$08` pointing near the strings, but the offsets aren't the same.
64 |
65 | There is also the pattern of each piece of text starting with `$04 $10` and ending with `$00` before we see junk data again.
66 |
67 | Could it be... in a game this old?
68 |
69 | ## Let there be light!
70 |
71 | And then an angel came down from the heavens and said "scripts". And it was glorious. It is the single most important discovery I made in the rom.
72 | There are scripts, and in these scripts there is text. And so, the long and complex task of decoding scripts began.
73 |
74 | Script opcode `$04` for example, is display message. And that's where all the text was comming from. Opcode '$00' was pretty clearly "end of script".
75 |
76 | Some opcodes where easy to find out what they did by just testing, like `$80` which makes the player step forwards. For every unknown opcode, I hacked it in the initial chase sequence script (using BGB's ability to edit the rom on the fly), and see how many opcodes after it are skipped. This gave me enough info to at least decode an unknown upcode with parameters.
77 |
78 | So I set out to write a [custom plugin](https://github.com/daid/FFA-Disassembly/blob/master/plugins/script.py) for the disassembler to decode these scripts.
79 | It evolved over time from something that decodes a few opcodes to a full decode, including IF statements and loops.
80 |
81 | Special thanks to marijnvdwerf, who noticed that all jumps in the code where always forward, and seemed to follow a strict IF/ELSE/ENDIF structure. Which is now what the actual disassembly contains, as it was a perfect fit.
82 |
83 | # Let there be scripts!
84 |
85 | Ok. So there are scripts. There are a lot of scripts, 1283 to be exact. Some of them are empty, but that's a lot of scripts.
86 |
87 | And there is a good reason for so many scripts. Let's just see, what's all controlled by scripts?
88 | * Talking to NPCs (including shops, story NPCs and random NPCs)
89 | * Spawning of monsters
90 | * Spawning of bosses
91 | * Handling of special events when all monsters/boss is killed.
92 | * Story related events
93 | * Transitions from maps (doors/entrances)
94 | * Spawning of random chests from monsters
95 | * Opening of chests and giving items
96 | * Talking to your follower ("ask" option in the menu)
97 | * Death of the player
98 | * Ending credits
99 |
100 | Now, the rules behind scripts are reasonably easy. Only one runs at the same time, and while one is running player input is blocked.
101 |
102 | ## Triggering a script.
103 |
104 | There are a few ways that a script can be triggered:
105 | * Entering a room
106 | * Exiting a room
107 | * Last enemy in a room is killed (not triggered if there are no enemies)
108 | * Walking on a specific tile in a room
109 | * Opening a chest
110 | * Talking to an NPC
111 | * Killing an enemy
112 | * Killing a boss
113 |
114 | Next, scripts aren't triggered directly by a pointer to the script. But by an index in the script function table.
115 | This table is located at `src/data/scriptPointers.asm` in the disassembly.
116 |
117 | Now, dealing with these index numbers directly in the assembly is annoying. So. I added a bunch of macro magic to the disassembly.
118 | It's a pretty simple trick. We add labels to each of the entries in the scriptpointers table:
119 | ```asm
120 | SCRIPT_POINTER: macro
121 | __script_pointer_\\1::\n dw ((\\1 - $4000) + ((BANK(\\1) - $0D) * $4000))
122 | endm
123 |
124 | scriptPointersTable:
125 | SCRIPT_POINTER script_0000
126 | SCRIPT_POINTER script_0001
127 | ```
128 | This will create a `__script_pointer_script_XXXX` label at the each of the entries in the table.
129 | And then the following macro can then insert an index to a script from a script label:
130 | ```asm
131 | SCRIPT_IDX: macro
132 | dw (__script_pointer_\1 - scriptPointersTable) / 2
133 | endm
134 | ```
135 |
136 | ## And all is well....
137 |
138 | Except. When it isn't. Remember the triggers? Two of them are special, the others have direct index numbers in the code. But these two:
139 | * Exiting a room
140 | * Last enemy in a room is killed (not triggered if there are no enemies)
141 | *
142 | These have no direct reference in the code, they are implicit. How implicit? Well, if the room enter script has script index `$01a6` then the exit script has index `$01a7` and the kill last monster script has index `$01a8`.
143 |
144 | So that is a bit annoying for clarity.
145 |
146 | # And so?
147 |
148 | There is a lot more to say about scripts. The scripts really tie a lot of things together. That's why we encounter them so early.
149 |
150 | * Previous: [Part2 - The quest for maps](part2)
151 |
--------------------------------------------------------------------------------
/src/include/constants.inc:
--------------------------------------------------------------------------------
1 | ;;Constants: INVENTORY
2 | DEF INV_MAGIC_CURE = $01
3 | DEF INV_MAGIC_HEAL = $02
4 | DEF INV_MAGIC_MUTE = $03
5 | DEF INV_MAGIC_SLEP = $04
6 | DEF INV_MAGIC_FIRE = $05
7 | DEF INV_MAGIC_ICE = $06
8 | DEF INV_MAGIC_LIT = $07
9 | DEF INV_MAGIC_NUKE = $08
10 | DEF INV_ITEM_POTION_CURE = $09
11 | DEF INV_ITEM_POTION_XCURE = $0a
12 | DEF INV_ITEM_POTION_ETHER = $0b
13 | DEF INV_ITEM_POTION_XETHER = $0c
14 | DEF INV_ITEM_POTION_ELIXIR = $0d
15 | DEF INV_ITEM_POTION_PURE = $0e
16 | DEF INV_ITEM_POTION_EYEDRP = $0f
17 | DEF INV_ITEM_POTION_SOFT = $10
18 | DEF INV_ITEM_POTION_MOOGLE = $11
19 | DEF INV_ITEM_POTION_UNICORN = $12
20 | DEF INV_ITEM_SPELL_SILENCE = $13
21 | DEF INV_ITEM_SPELL_PILLOW = $14
22 | DEF INV_ITEM_SPELL_FLAME = $17
23 | DEF INV_ITEM_SPELL_BLAZE = $18
24 | DEF INV_ITEM_SPELL_BLIZRD = $19
25 | DEF INV_ITEM_SPELL_FROST = $1a
26 | DEF INV_ITEM_SPELL_LITBLT = $1b
27 | DEF INV_ITEM_SPELL_THUNDR = $1c
28 | DEF INV_ITEM_CANDY = $1d
29 | DEF INV_ITEM_KEY = $1f
30 | DEF INV_ITEM_BONE_KEY = $20
31 | DEF INV_ITEM_BRONZE_KEY = $21
32 | DEF INV_ITEM_MIRROR = $27
33 | DEF INV_ITEM_POTION_AMANDA = $2a
34 | DEF INV_ITEM_POTION_OIL = $2d
35 | DEF INV_ITEM_GEM_CRYSTAL = $32
36 | DEF INV_ITEM_GEM_NECTAR = $34
37 | DEF INV_ITEM_GEM_STAMINA = $35
38 | DEF INV_ITEM_GEM_WISDOM = $36
39 | DEF INV_ITEM_GEM_WILL = $37
40 | DEF INV_ITEM_BAG_GOLD = $3a
41 | DEF INV_ITEM_BAG_FANG = $3b
42 | DEF INV_ITEM_MATTOK = $3e
43 | DEF INV_ITEM_RUBY = $3f
44 | DEF INV_ITEM_OPAL = $40
45 | DEF INV_SWORD_BROAD = $42
46 | DEF INV_AXE_BATTLE = $43
47 | DEF INV_SICKLE_SICKLE = $44
48 | DEF INV_WHIP_CHAIN = $45
49 | DEF INV_SWORD_SILVER = $46
50 | DEF INV_SPEAR_WIND = $47
51 | DEF INV_AXE_WERE = $48
52 | DEF INV_MORNING_STAR = $49
53 | DEF INV_SWORD_BLOOD = $4a
54 | DEF INV_SWORD_DRAGON = $4b
55 | DEF INV_WHIP_FLAME = $4c
56 | DEF INV_SWORD_ICE = $4d
57 | DEF INV_AXE_ZEUS = $4e
58 | DEF INV_SWORD_RUSTY = $4f
59 | DEF INV_SPEAR_THUNDER = $50
60 | DEF INV_SWORD_XCALIBR = $51
61 | DEF INV_ARMOR_BRONZE = $52
62 | DEF INV_ARMOR_IRON = $53
63 | DEF INV_ARMOR_SILVER = $54
64 | DEF INV_ARMOR_GOLD = $55
65 | DEF INV_ARMOR_FLAME = $56
66 | DEF INV_ARMOR_ICE = $57
67 | DEF INV_ARMOR_DRAGON = $58
68 | DEF INV_ARMOR_SAMURAI = $59
69 | DEF INV_ARMOR_OPAL = $5a
70 | DEF INV_SHIELD_BRONZE = $5d
71 | DEF INV_SHIELD_IRON = $5e
72 | DEF INV_SHIELD_SILVER = $5f
73 | DEF INV_SHIELD_GOLD = $60
74 | DEF INV_SHIELD_FLAME = $61
75 | DEF INV_SHIELD_DRAGON = $62
76 | DEF INV_SHIELD_AEGIS = $63
77 | DEF INV_SHIELD_OPAL = $64
78 | DEF INV_SHIELD_ICE = $65
79 | DEF INV_HELM_BRONZE = $68
80 | DEF INV_HELM_IRON = $69
81 | DEF INV_HELM_SILVER = $6a
82 | DEF INV_HELM_GOLD = $6b
83 | DEF INV_HELM_OPAL = $6c
84 | DEF INV_HELM_SAMURAI = $6d
85 | ;;Constants: NPC_NAMES
86 | DEF NPC_SNOWMAN_STILL = $00
87 | DEF NPC_FUJI_FOLLOWING = $01
88 | DEF NPC_MYSTERYMAN_FOLLOWING = $02
89 | DEF NPC_WATTS_FOLLOWING = $03
90 | DEF NPC_BOGARD_FOLLOWING = $04
91 | DEF NPC_AMANDA_FOLLOWING = $05
92 | DEF NPC_LESTER_FOLLOWING = $06
93 | DEF NPC_MARCIE_FOLLOWING = $07
94 | DEF NPC_CHOCOBOT_FOLLOWING = $08
95 | DEF NPC_CHOCOBO_FOLLOWING = $09
96 | DEF NPC_WEREWOLF_1 = $0a
97 | DEF NPC_INV_CURE = $0b
98 | DEF NPC_CHEST_1 = $0c
99 | DEF NPC_CHEST_2 = $0d
100 | DEF NPC_CHEST_3 = $0e
101 | DEF NPC_CHEST_4 = $0f
102 | DEF NPC_CHIBIDEVIL = $10
103 | DEF NPC_RABBITE = $11
104 | DEF NPC_GOBLIN = $12
105 | DEF NPC_MUSHROOM = $13
106 | DEF NPC_JELLYFISH = $14
107 | DEF NPC_SWAMPMAN = $15
108 | DEF NPC_LIZARDMAN = $16
109 | DEF NPC_FLOWER = $17
110 | DEF NPC_FACEORB = $18
111 | DEF NPC_SKELETON = $19
112 | DEF NPC_EVIL_PLANT = $1a
113 | DEF NPC_FLYING_FISH = $1b
114 | DEF NPC_ZOMBIE = $1c
115 | DEF NPC_MOUSE = $1d
116 | DEF NPC_PUMPKIN = $1e
117 | DEF NPC_OWL = $1f
118 | DEF NPC_BEE = $20
119 | DEF NPC_CLOUD = $21
120 | DEF NPC_PIG = $22
121 | DEF NPC_CRAB = $23
122 | DEF NPC_SPIDER = $24
123 | DEF NPC_INV_OPEN_NORTH = $25
124 | DEF NPC_INV_OPEN_SOUTH = $26
125 | DEF NPC_INV_OPEN_EAST = $27
126 | DEF NPC_INV_OPEN_WEST = $28
127 | DEF NPC_MIMIC_CHEST = $29
128 | DEF NPC_HOPPING_BUG = $2a
129 | DEF NPC_PORCUPINE = $2b
130 | DEF NPC_CARROT = $2c
131 | DEF NPC_EYE_SPY = $2d
132 | DEF NPC_WEREWOLF_2 = $2e
133 | DEF NPC_GHOST = $2f
134 | DEF NPC_BASILISK = $30
135 | DEF NPC_SCORPION = $31
136 | DEF NPC_SAURUS = $32
137 | DEF NPC_MUMMY = $33
138 | DEF NPC_PAKKUN_LIZARD = $34
139 | DEF NPC_SNAKE = $35
140 | DEF NPC_SHADOW = $36
141 | DEF NPC_BLACK_WIZARD = $37
142 | DEF NPC_FLAME = $38
143 | DEF NPC_GARGOYLE = $39
144 | DEF NPC_MONKEY = $3a
145 | DEF NPC_MOLEBEAR = $3b
146 | DEF NPC_OGRE = $3c
147 | DEF NPC_BARNACLEJACK = $3d
148 | DEF NPC_PHANTASM = $3e
149 | DEF NPC_MINOTAUR = $3f
150 | DEF NPC_GLAIVE_MAGE = $40
151 | DEF NPC_GLAIVE_KNIGHT = $41
152 | DEF NPC_DARK_LORD = $42
153 | DEF NPC_MEGA_FLYTRAP = $43
154 | DEF NPC_DRAGONFLY = $44
155 | DEF NPC_ARMADILLO = $45
156 | DEF NPC_SNOWMAN_MOVING = $46
157 | DEF NPC_SABER_CAT = $47
158 | DEF NPC_WALRUS = $48
159 | DEF NPC_DUCK_SOLDIER = $49
160 | DEF NPC_POTO_RABBIT = $4a
161 | DEF NPC_CYCLONE = $4b
162 | DEF NPC_BEHOLDER_EYE = $4c
163 | DEF NPC_MANTA_RAY = $4d
164 | DEF NPC_JUMPING_HAND = $4e
165 | DEF NPC_TORTOISE = $4f
166 | DEF NPC_FIRE_MOTH = $50
167 | DEF NPC_EARTH_DIGGER = $51
168 | DEF NPC_DENDEN_SNAIL = $52
169 | DEF NPC_DOPPEL_MIRROR = $53
170 | DEF NPC_GUARDIAN = $54
171 | DEF NPC_EVIL_SWORD = $55
172 | DEF NPC_GAUNTLET = $56
173 | DEF NPC_GARASHA_DUCK = $57
174 | DEF NPC_FUZZY_WONDER = $58
175 | DEF NPC_ELEPHANT = $59
176 | DEF NPC_NINJA = $5a
177 | DEF NPC_JULIUS = $5b
178 | DEF NPC_DEMON_HEAD = $5c
179 | DEF NPC_INV_DESSERT_CAVE_STONE = $5d
180 | DEF NPC_WATER_DEMON = $5e
181 | DEF NPC_SEA_DRAGON = $5f
182 | DEF NPC_GALL_FISH = $60
183 | DEF NPC_WILLY = $61
184 | DEF NPC_MYSTERYMAN_1 = $62
185 | DEF NPC_AMANDA_1 = $63
186 | DEF NPC_AMANDA_ILL = $64
187 | DEF NPC_AMANDA_DEAD = $65
188 | DEF NPC_FUJI_1 = $66
189 | DEF NPC_FUJI_WINDOW = $67
190 | DEF NPC_MOTHER = $68
191 | DEF NPC_BOGARD_1 = $69
192 | DEF NPC_BOGARD_2 = $6a
193 | DEF NPC_KETTS_WEREWOLF = $6b
194 | DEF NPC_INV_FUJI_COFFIN = $6c
195 | DEF NPC_CIBBA = $6d
196 | DEF NPC_GUY_WENDEL = $6e
197 | DEF NPC_WATTS = $6f
198 | DEF NPC_MINECART = $70
199 | DEF NPC_CHOCOBO_EGG = $71
200 | DEF NPC_DAVIAS = $72
201 | DEF NPC_LESTER_1 = $73
202 | DEF NPC_LESTER_PARROT = $74
203 | DEF NPC_BOWOW = $75
204 | DEF NPC_SARAH = $76
205 | DEF NPC_MARCIE_1 = $77
206 | DEF NPC_KING_OF_LORIM = $78
207 | DEF NPC_GLADIATOR_FRIEND = $79
208 | DEF NPC_INV_INN = $7a
209 | DEF NPC_GIRL_TOPPLE = $7b
210 | DEF NPC_GUY_TOPPLE = $7c
211 | DEF NPC_GUY_TOPPLE_HOUSE = $7d
212 | DEF NPC_GIRL_TOPPLE_HOUSE = $7e
213 | DEF NPC_OLDMAN_TOPPLE = $7f
214 | DEF NPC_GUY_KETTS = $80
215 | DEF NPC_GIRL_KETTS = $81
216 | DEF NPC_GIRL_CIBBA = $82
217 | DEF NPC_GUY_WENDEL2 = $83
218 | DEF NPC_GUY_WENDEL_HOUSE = $84
219 | DEF NPC_WOMAN_CIBBA = $85
220 | DEF NPC_OLDMAN_WENDEL = $86
221 | DEF NPC_DWARF_1 = $87
222 | DEF NPC_DWARF_2 = $88
223 | DEF NPC_DWARF_3 = $89
224 | DEF NPC_DWARF_4 = $8a
225 | DEF NPC_DWARF_5 = $8b
226 | DEF NPC_GUY_AIRSHIP_1 = $8c
227 | DEF NPC_GUY_AIRSHIP_2 = $8d
228 | DEF NPC_GUY_AIRSHIP_3 = $8e
229 | DEF NPC_GUY_AIRSHIP_4 = $8f
230 | DEF NPC_OLDMAN_MENOS_1 = $90
231 | DEF NPC_GUY_MENOS = $91
232 | DEF NPC_GIRL_MENOS_1 = $92
233 | DEF NPC_OLDMAN_MENOS_2 = $93
234 | DEF NPC_GIRL_MENOS = $94
235 | DEF NPC_WOMAN_MENOS_2 = $95
236 | DEF NPC_GIRL_JADD_1 = $96
237 | DEF NPC_OLDMAN_JADD = $97
238 | DEF NPC_GIRL_JADD_2 = $98
239 | DEF NPC_GUY_JADD = $99
240 | DEF NPC_DWARF_JADD = $9a
241 | DEF NPC_SALESMAN_JADD = $9b
242 | DEF NPC_GIRL_JADD_3 = $9c
243 | DEF NPC_BOY_JADD = $9d
244 | DEF NPC_OLDMAN_ISH = $9e
245 | DEF NPC_GUY_ISH_1 = $9f
246 | DEF NPC_GUY_ISH_2 = $a0
247 | DEF NPC_GIRL_ISH = $a1
248 | DEF NPC_GUY_ISH_3 = $a2
249 | DEF NPC_GUY_ISH_4 = $a3
250 | DEF NPC_INV_STONE_1 = $a4
251 | DEF NPC_INV_STONE_2 = $a5
252 | DEF NPC_INV_STONE_3 = $a6
253 | DEF NPC_INV_STONE_4 = $a7
254 | DEF NPC_INV_STONE_5 = $a8
255 | DEF NPC_INV_STONE_6 = $a9
256 | DEF NPC_INV_STONE_7 = $aa
257 | DEF NPC_INV_STONE_8 = $ab
258 | DEF NPC_GUY_LORIM_FROZEN = $ac
259 | DEF NPC_GUY_LORIM_1 = $ad
260 | DEF NPC_GUY_LORIM_2 = $ae
261 | DEF NPC_SALESMAN = $af
262 | DEF NPC_INV_SALESMAN_1 = $b0
263 | DEF NPC_FUJI_2 = $b1
264 | DEF NPC_INV_SALESMAN_2 = $b2
265 | DEF NPC_MYSTERYMAN_2 = $b3
266 | DEF NPC_BOGARD_3 = $b4
267 | DEF NPC_AMANDA_2 = $b5
268 | DEF NPC_LESTER_2 = $b6
269 | DEF NPC_MARCIE_2 = $b7
270 | DEF NPC_CHOCOBOT = $b8
271 | DEF NPC_CHOCOBO_1 = $b9
272 | DEF NPC_CHOCOBO_2 = $ba
273 | DEF NPC_PRISION_BARS = $bb
274 | DEF NPC_MUSIC_NOTES = $bc
275 | DEF NPC_MAGIC_SALESMAN = $bd
276 | DEF NPC_LAST_GUY = $be
277 |
--------------------------------------------------------------------------------
/docs/part2.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Part2 - The quest for maps
3 | ---
4 |
5 | # Part2 - The quest for maps
6 |
7 | Ah, maps. Always a highly visible part of a game. It has to be somewhere, and there has to be a lot of it. I forgot how I discovered the first bit.
8 | So lets just explain how it all works. Or at least, how part of it works, as there is a part of it we will cover later.
9 |
10 | ## Humble beginnings
11 |
12 | Map data starts at bank $08, at the beginning of the bank. It's stored at [src/data/map/headers.asm](https://github.com/daid/FFA-Disassembly/blob/master/src/data/map/headers.asm) in the disassembly.
13 | There are a wopping total of 16 maps. That is a lot of maps. But not all maps are the same size, and not all maps are completely used.
14 | ```asm
15 | MAP_HEADER tilesetGfxOutdoor, $00, metatilesOutdoor, $80, mapRoomPointers_00, $d7, $3c
16 | ```
17 | Per map there is a header here. Which is just a few pointers to other data, as well as some junk data. I'm quite sure the junk data is never used.
18 |
19 | ## The main bit
20 |
21 | The main bit of maps is after the first pointer. The `mapRoomPointers` pointer, it's stored with a bank number, so this data can be in any bank.
22 |
23 | The data after the `mapRoomPointers` starts with a small header, and then a large list of pointers. The disassembly has this nicely split into files per map in `src/data/map/XX_rooms.asm`.
24 |
25 | ```asm
26 | mapRoomPointers_00:
27 | db $00, $03, $10, $10
28 | ;;Room data pointers
29 | dw map00_room00_00_script, map00_room00_00_tiles
30 | dw map00_room01_00_script, map00_room01_00_tiles
31 | ```
32 |
33 | The header bytes are as followed:
34 | 1. Encoding mode: $00 = RLE, $01 = Templated
35 | 2. RLE length (more on this in a bit)
36 | 3. Height of the map in rooms
37 | 4. Width of the map in rooms
38 |
39 | There are two types of map encoding, dictated by the first byte. We will cover RLE mode first, as templated mode builds on top of that.
40 |
41 | ### RLE Map encoding
42 |
43 | Each of the `mapXX_roomXX_XX_tiles` pointers points at a block of data. The encoding of this data is quite simple. Each byte is the tile number tile.
44 | $11 might be a water tile, $00 normal ground, and a lot more. There are up to 128 types available. As there is one more rule. If the upper bit is set,
45 | then the tile is repeated a number of times. How often? Well, that's that 2nd byte of the header, the RLE length. So all rooms in a map share a single RLE length.
46 |
47 | Example row:
48 | ```asm
49 | db $91, $02, $50, $e4, $64, $64
50 | ```
51 | First byte is `$91`, so that's tile `$11` repeated RLE length time. RLE length is 3 in this case. So after this byte the row on that map looks like:
52 | ```asm
53 | $11, $11, $11
54 | ```
55 | Two bytes after that do not have bit `$80` set, so:
56 | ```asm
57 | $11, $11, $11, $02, $50
58 | ```
59 | `$e4` follows after that, which has the highest bit set, resulting in tile `$64` repeated 3 times:
60 | ```asm
61 | $11, $11, $11, $02, $50, $64, $64, $64
62 | ```
63 | And finally two $64 bytes are added:
64 | ```asm
65 | $11, $11, $11, $02, $50, $64, $64, $64, $64, $64
66 | ```
67 | Making this the complete row.
68 |
69 | This is just repeated until the whole room is decoded and the screen is filled. *It's a relatively simple encoding scheme compared to some other games. And I do not think it is a very optimal solution. I am quite sure that an RLE length per room would have been more efficient.*
70 |
71 | ### Template encoding
72 |
73 | If byte 1 of the header is not $00, then the data is encoded differently. And the header is actually expanded:
74 | ```asm
75 | mapRoomPointers_02:
76 | db $01, $04, $08, $08
77 | dw map02_room_tile_template
78 | ;;Door tile info
79 | db $25, $35, $20, $30, $14, $03, $52, $53
80 | db $24, $34, $21, $31, $12, $13, $42, $43
81 | db $15, $45, $10, $40, $28, $04, $51, $54
82 | ;;Room data pointers
83 | dw map02_room00_00_script, map02_room00_00_tiles
84 | dw map02_room01_00_script, map02_room01_00_tiles
85 | ```
86 | The first 4 bytes mean exactly the same. But after that a pointer to a room template follows. The pointer points to data in the RLE format and is applied first to the room, before anything else. For the stock maps, this template is just an empty room with all walls nicely done.
87 |
88 | Next 24 bytes follow. These are tiles for the right/left/up/down opening/doors/walls. Just remember these as "door tiles" for now.
89 |
90 | After this, the actual list of pointers follows, just like in RLE mode. But, the actual mapXX_roomXX_XX_tiles data differs from RLE mode.
91 | ```asm
92 | map02_room03_00_tiles:
93 | db $02, $00, $02, $01
94 | db $41, $44
95 | db $41, $46
96 | db $41, $52
97 | db $ff, $ff
98 | ```
99 | The first 4 bytes are "doors", in the order of right/left/up/down this indicate how a wall on that direction should be. If it should be a door or not, and if the door is open.
100 |
101 | * Bits0-1: Indicate the type. 0=open, 1=closed, 2=wall
102 | * Bits2-7: If non-zero, then this doorway is an exit out of the map.
103 |
104 | The first 2 bits are used to select a row from the "door tiles", two tiles are used from this and placed on the wall. So in the example, if the up byte was $01, it would place tile `$12` and `$13` at the top row tiles to draw an closed door.
105 |
106 | After the 4 door bytes, you get a list of 2 bytes per item. It's a simple scheme, of `tile` followed by `position`, the position is encoded as YX in a single byte. The list is ended by an entry of `$FF $FF` (but only the first $FF is actually needed) These tiles are simply placed on top of the template.
107 |
108 | ## The map tiles
109 |
110 | Great, now we have a whole room of tiles. Well, we have a room of 16x16 pixel tiles. Or "metatiles" as you can call them. Each of these metatile numbers dictates how a single 16x16 pixel area will ook and behave.
111 |
112 | If we want to go from metatiles to actual 8x8 graphic tiles, we need the metatile information. Luckily, this isn't complex. Remember the first map header?
113 | ```asm
114 | MAP_HEADER tilesetGfxOutdoor, $00, metatilesOutdoor, $80, mapRoomPointers_00, $d7, $3c
115 | ```
116 | It has a pointer to the metatiles. In this example `metatilesOutdoor`. This has a large list of 6 bytes per metatile:
117 | ```asm
118 | metatilesOutdoor:
119 | db $2e, $2f, $2e, $2f, $30, $05
120 | db $2e, $2f, $9e, $9f, $00, $05
121 | db $16, $17, $0e, $18, $60, $07
122 | db $27, $10, $10, $10, $c0, $07
123 | ...124 more entries
124 | ```
125 |
126 | The first 4 bytes are a 8x8 tile index into the graphics. Which graphics? Well. The graphics pointed at by the pointer in the general header:
127 | ```asm
128 | MAP_HEADER tilesetGfxOutdoor, $00, metatilesOutdoor, $80, mapRoomPointers_00, $d7, $3c
129 | ```
130 | The `tilesetGfxOutdoor` pointer in this case, which is a bank-encoded pointer, starting from bank `$0B`. And this points to a 256 tile large graphics block. Any tile from that graphics block can be used for a metatile.
131 |
132 | Byte 4: not entirely sure, but collision related, should test with enemies to see if certain options are related to NPCs?
133 | * $00-$07: blocks player
134 | * $08: player can walk on it
135 | * $10: player can walk on bottom left and bottom right corners
136 | * $20: player can walk on top left and top right corners
137 | * $30: player can walk on it
138 | * $40: blocks player
139 | * $80: blocks player
140 | * $C0: blocks player
141 | * $F0: player can walk on it
142 |
143 | Byte 5: Still needs more investigation, general guess:
144 | * $04: Weapon interaction, byte4 lower nibble indicates which method (1=attach chain, 4=chop by axe, 6=destroy with sickle), but also sometimes is $00 for things like palmtrees and mountains?
145 | * $07: Water
146 | * $45 $55 $65 $75: Ice slide tiles or mine cart tiles
147 | * $0D: climbing tiles (player faces up always)
148 | * $21: Damage spikes
149 |
150 | # Wrapping up...
151 |
152 | So that's it for maps. Well, mostly. There is one pointer we skipped. The `mapXX_roomXX_XX_script` style pointers. Those are for another day.
153 |
154 | With all this, we can make a [script](https://github.com/daid/FFA-Disassembly/blob/master/tools/mapExport.py) that decodes the maps, and it produces nice results:
155 | 
156 |
157 | And then we discover that [map07](img/map07.png) isn't an actual playable map, but contains the title screen, ending screen and ingame map.
158 |
159 | Also, we can make this nice chart to illustate the structure:
160 |
161 |
162 | graph LR
163 | MapHeaders -->|pointer| TileGraphics
164 | MapHeaders -->|pointer| MetaTiles
165 | MapHeaders -->|pointer| RoomPointers
166 | RoomPointers --> PerMapHeader
167 | RoomPointers -->|pointer list| RoomTiles
168 | RoomPointers -->|pointer list| RoomScriptData
169 | RoomTiles -->|or| RLE[RLE Encoded]
170 | RoomTiles -->|or| Templated
171 | PerMapHeader --> RLESize[RLE Size]
172 | PerMapHeader --> MapSize[Map Size: height,width]
173 | PerMapHeader -->|optional| DoorTiles
174 | PerMapHeader -->|optional pointer| RoomTemplate
175 |
176 | RLE -->|List of| RLEEncoded[RLE Encoded rows]
177 | Templated -->|List of| Tiles[Tile X,Y]
178 |
179 |
180 | * Previous: [Part1 - Adventures of code](part1)
181 | * Next: [Part3 - Where are the string tables?... OMG...](part3)
182 |
--------------------------------------------------------------------------------
/src/data/npc/stats.asm:
--------------------------------------------------------------------------------
1 | ;; Disassembled with BadBoy Disassembler: https://github.com/daid/BadBoy
2 |
3 |
4 | ;Monster stat table
5 | ;offset0: Speed
6 | ;offset1: HP
7 | ;offset3: Enemy weaknesses
8 | ; bit 0: mana
9 | ; bit 1: dragon
10 | ; bit 2: axe
11 | ; bit 3: mithril/star
12 | ; bit 4: magic
13 | ; bit 5: electric
14 | ; bit 6: ice
15 | ; bit 7: fire
16 | ;offset4: Element immunities
17 | ;offset5: Touch damage elements?
18 | ; bit 6: has shield
19 | ;offset6: Touch damage
20 | ;offset7: Defense
21 | ;offset9: Projectile type
22 | ;offset11: Touch Status Effect inflicted
23 | ;offset12: XP on kill
24 | ;offset13: Gold on kill
25 | ;@data format=bbbbbbbbbbbbbb amount=98
26 | npcStatsTable:
27 | db $10, $01, $01, $00, $10, $00, $00, $00, $00, $00, $00, $00, $00, $00 ;; 03:59fe ..?...?.?????? $00
28 | db $03, $ff, $01, $00, $ff, $00, $01, $ff, $00, $ff, $00, $00, $00, $00 ;; 03:5a0c ..???????.???? $01
29 | db $03, $ff, $01, $00, $ff, $00, $14, $ff, $00, $1d, $00, $00, $00, $00 ;; 03:5a1a ?????????????? $02
30 | db $04, $ff, $01, $00, $ff, $00, $1f, $ff, $00, $19, $00, $00, $00, $00 ;; 03:5a28 ?????????????? $03
31 | db $04, $ff, $01, $00, $ff, $00, $27, $ff, $00, $18, $00, $00, $00, $00 ;; 03:5a36 ?????????????? $04
32 | db $04, $ff, $01, $00, $ff, $00, $23, $ff, $00, $1a, $00, $00, $00, $00 ;; 03:5a44 ?????????????? $05
33 | db $04, $ff, $01, $00, $ff, $00, $2c, $ff, $00, $1b, $00, $00, $00, $00 ;; 03:5a52 ?????????????? $06
34 | db $04, $ff, $01, $00, $ff, $00, $63, $ff, $00, $1c, $00, $00, $00, $00 ;; 03:5a60 ?????????????? $07
35 | db $04, $ff, $01, $00, $ff, $00, $01, $ff, $ff, $ff, $00, $00, $00, $00 ;; 03:5a6e ?????????????? $08
36 | db $04, $ff, $01, $00, $ff, $00, $01, $ff, $ff, $ff, $00, $00, $00, $00 ;; 03:5a7c ?????????????? $09
37 | db $08, $01, $01, $00, $fb, $00, $00, $00, $ff, $ff, $00, $00, $00, $00 ;; 03:5a8a ?????????????? $0a
38 | db $05, $ff, $01, $00, $00, $00, $00, $05, $ff, $ff, $00, $00, $00, $00 ;; 03:5a98 ..???????.???? $0b
39 | db $01, $01, $01, $00, $ff, $00, $00, $ff, $00, $ff, $00, $00, $00, $00 ;; 03:5aa6 ..??..???.???? $0c
40 | db $01, $01, $01, $00, $ff, $00, $00, $ff, $00, $ff, $00, $00, $00, $00 ;; 03:5ab4 ?????????.???? $0d
41 | db $01, $01, $01, $00, $ff, $00, $00, $ff, $00, $ff, $00, $00, $00, $00 ;; 03:5ac2 ?????????????? $0e
42 | db $01, $01, $01, $00, $00, $00, $00, $00, $00, $ff, $00, $00, $00, $00 ;; 03:5ad0 ?????????????? $0f
43 | db $08, $03, $01, $01, $00, $80, $0d, $02, $03, $03, $00, $00, $02, $02 ;; 03:5ade ..?.....?.?... $10
44 | db $06, $01, $02, $04, $00, $80, $0a, $01, $ff, $00, $00, $00, $01, $02 ;; 03:5aec ..?.....?.?... $11
45 | db $08, $02, $02, $00, $00, $90, $08, $02, $02, $00, $00, $00, $01, $03 ;; 03:5afa ..?.....?.?... $12
46 | db $0a, $01, $01, $04, $00, $80, $08, $01, $02, $ff, $00, $00, $01, $01 ;; 03:5b08 ..?.....?.?... $13
47 | db $09, $05, $02, $20, $00, $90, $0e, $03, $01, $ff, $00, $01, $03, $04 ;; 03:5b16 ..?.....?.?... $14
48 | db $0a, $04, $03, $10, $05, $80, $14, $05, $02, $ff, $00, $00, $0a, $05 ;; 03:5b24 ..????.??.?.?? $15
49 | db $08, $06, $04, $20, $00, $80, $12, $02, $03, $10, $00, $00, $04, $05 ;; 03:5b32 ?????????.???? $16
50 | db $0a, $02, $04, $04, $00, $80, $0d, $04, $02, $ff, $00, $01, $03, $04 ;; 03:5b40 ..?.....?.?... $17
51 | db $08, $03, $04, $10, $05, $20, $0c, $03, $05, $ff, $00, $00, $05, $04 ;; 03:5b4e ?????????????? $18
52 | db $0a, $05, $04, $01, $90, $90, $14, $04, $03, $12, $00, $00, $06, $07 ;; 03:5b5c ?????????????? $19
53 | db $05, $04, $05, $04, $00, $80, $0e, $03, $03, $ff, $00, $01, $04, $05 ;; 03:5b6a ?????????????? $1a
54 | db $06, $04, $06, $20, $00, $90, $15, $05, $04, $ff, $00, $01, $0a, $0a ;; 03:5b78 ?????????????? $1b
55 | db $0c, $07, $08, $01, $91, $80, $15, $03, $01, $ff, $00, $00, $0f, $06 ;; 03:5b86 ?????????????? $1c
56 | db $04, $05, $09, $02, $00, $b0, $11, $04, $08, $11, $00, $01, $08, $0b ;; 03:5b94 ?????????????? $1d
57 | db $06, $05, $0a, $04, $80, $a0, $12, $04, $0c, $ff, $00, $00, $09, $0f ;; 03:5ba2 ?????????????? $1e
58 | db $06, $05, $0a, $04, $00, $90, $13, $02, $02, $ff, $00, $02, $09, $0c ;; 03:5bb0 ?????????????? $1f
59 | db $02, $08, $0a, $00, $00, $b0, $1d, $04, $0f, $ff, $00, $01, $14, $0f ;; 03:5bbe ?????????????? $20
60 | db $0c, $08, $0a, $10, $05, $00, $2d, $0c, $19, $0e, $00, $02, $1b, $12 ;; 03:5bcc ?????????????? $21
61 | db $08, $0a, $0b, $04, $00, $90, $1e, $08, $14, $03, $00, $00, $1e, $17 ;; 03:5bda ?????????????? $22
62 | db $07, $04, $0b, $20, $10, $a0, $1f, $07, $0a, $07, $00, $00, $14, $14 ;; 03:5be8 ?????????????? $23
63 | db $0a, $04, $0b, $00, $00, $90, $1b, $07, $10, $0f, $00, $01, $12, $1a ;; 03:5bf6 ?????????????? $24
64 | db $06, $0a, $13, $04, $00, $a0, $16, $0c, $12, $15, $00, $00, $12, $23 ;; 03:5c04 ?????????????? $25
65 | db $06, $06, $0f, $08, $00, $b0, $16, $08, $0a, $17, $00, $02, $02, $21 ;; 03:5c12 ?????????????? $26
66 | db $03, $08, $0f, $00, $00, $b0, $1e, $08, $08, $ff, $00, $00, $21, $14 ;; 03:5c20 ?????????????? $27
67 | db $08, $0a, $10, $04, $00, $90, $26, $0c, $0b, $02, $00, $02, $28, $23 ;; 03:5c2e ?????????????? $28
68 | db $0c, $0e, $11, $04, $00, $80, $2b, $08, $0a, $01, $00, $00, $24, $28 ;; 03:5c3c ?????????????? $29
69 | db $10, $0f, $12, $08, $05, $00, $2b, $0d, $0f, $08, $00, $04, $1e, $19 ;; 03:5c4a ?????????????? $2a
70 | db $06, $0f, $13, $04, $00, $a0, $28, $0f, $10, $15, $00, $00, $30, $28 ;; 03:5c58 ?????????????? $2b
71 | db $04, $11, $14, $01, $95, $20, $31, $1e, $07, $ff, $00, $02, $2d, $2d ;; 03:5c66 ?????????????? $2c
72 | db $08, $0a, $15, $04, $00, $80, $3a, $0d, $0f, $ff, $00, $04, $28, $2f ;; 03:5c74 ?????????????? $2d
73 | db $0a, $15, $16, $00, $08, $90, $3f, $11, $1e, $13, $00, $01, $32, $0a ;; 03:5c82 ?????????????? $2e
74 | db $06, $10, $16, $04, $08, $b0, $38, $0a, $23, $ff, $00, $00, $2f, $28 ;; 03:5c90 ?????????????? $2f
75 | db $06, $10, $17, $20, $08, $a0, $37, $0a, $20, $ff, $00, $00, $2a, $2f ;; 03:5c9e ?????????????? $30
76 | db $0a, $14, $15, $01, $91, $80, $3f, $14, $01, $ff, $00, $04, $20, $14 ;; 03:5cac ?????????????? $31
77 | db $0a, $12, $16, $20, $00, $90, $3c, $0a, $0f, $ff, $00, $01, $38, $28 ;; 03:5cba ?????????????? $32
78 | db $04, $19, $1a, $10, $84, $30, $46, $14, $14, $ff, $00, $02, $50, $50 ;; 03:5cc8 ?????????????? $33
79 | db $05, $1e, $1b, $00, $38, $90, $3c, $12, $1e, $0c, $00, $00, $3e, $37 ;; 03:5cd6 ?????????????? $34
80 | db $08, $19, $1c, $10, $85, $00, $39, $1e, $0a, $ff, $00, $02, $50, $3c ;; 03:5ce4 ?????????????? $35
81 | db $06, $1c, $1c, $08, $81, $d0, $34, $0a, $08, $ff, $00, $00, $78, $25 ;; 03:5cf2 ?????????????? $36
82 | db $0a, $10, $1d, $04, $00, $a0, $3c, $19, $0c, $ff, $00, $00, $58, $46 ;; 03:5d00 ?????????????? $37
83 | db $06, $10, $1e, $04, $00, $90, $39, $14, $14, $15, $00, $01, $47, $1f ;; 03:5d0e ?????????????? $38
84 | db $08, $19, $20, $00, $00, $80, $43, $14, $1a, $09, $00, $00, $53, $51 ;; 03:5d1c ?????????????? $39
85 | db $04, $12, $1e, $08, $78, $a0, $55, $0a, $13, $ff, $00, $08, $41, $1e ;; 03:5d2a ?????????????? $3a
86 | db $0c, $14, $20, $08, $01, $00, $4d, $0f, $21, $0b, $00, $08, $64, $50 ;; 03:5d38 ?????????????? $3b
87 | db $08, $17, $21, $04, $00, $80, $56, $12, $14, $06, $00, $01, $60, $2d ;; 03:5d46 ?????????????? $3c
88 | db $04, $14, $21, $00, $78, $80, $50, $19, $27, $0b, $00, $08, $6d, $46 ;; 03:5d54 ?????????????? $3d
89 | db $08, $19, $22, $00, $80, $d0, $58, $19, $10, $11, $00, $02, $82, $40 ;; 03:5d62 ?????????????? $3e
90 | db $03, $ff, $23, $00, $da, $f0, $63, $1f, $30, $11, $00, $00, $a0, $0a ;; 03:5d70 ..???????.???? $3f
91 | db $04, $17, $23, $08, $7c, $80, $5b, $28, $28, $0f, $00, $00, $5a, $5a ;; 03:5d7e ?????????????? $40
92 | db $08, $13, $24, $02, $08, $90, $55, $24, $28, $0c, $00, $00, $7a, $5f ;; 03:5d8c ?????????????? $41
93 | db $0c, $01, $24, $04, $3b, $b0, $72, $28, $2d, $ff, $00, $00, $3f, $3c ;; 03:5d9a ?????????????? $42
94 | db $09, $10, $24, $80, $91, $90, $62, $32, $1e, $ff, $00, $00, $5f, $64 ;; 03:5da8 ?????????????? $43
95 | db $06, $14, $25, $04, $00, $b0, $5f, $1e, $1e, $ff, $00, $01, $7c, $73 ;; 03:5db6 ?????????????? $44
96 | db $0c, $19, $26, $20, $10, $80, $66, $0f, $28, $0d, $00, $00, $69, $69 ;; 03:5dc4 ?????????????? $45
97 | db $06, $1e, $26, $04, $00, $90, $69, $31, $1e, $11, $00, $01, $7d, $78 ;; 03:5dd2 ?????????????? $46
98 | db $08, $12, $28, $00, $01, $90, $65, $19, $2a, $ff, $00, $08, $73, $78 ;; 03:5de0 ?????????????? $47
99 | db $06, $14, $28, $10, $05, $00, $4f, $28, $02, $ff, $00, $02, $a5, $96 ;; 03:5dee ?????????????? $48
100 | db $0c, $1b, $29, $00, $78, $90, $5f, $23, $32, $ff, $00, $04, $c7, $0a ;; 03:5dfc ?????????????? $49
101 | db $0a, $1d, $29, $20, $00, $90, $71, $1e, $2f, $ff, $00, $01, $88, $84 ;; 03:5e0a ?????????????? $4a
102 | db $04, $1e, $2a, $04, $80, $b0, $69, $1e, $12, $ff, $00, $08, $82, $8c ;; 03:5e18 ?????????????? $4b
103 | db $0a, $14, $2c, $20, $0b, $d0, $63, $3c, $14, $03, $00, $00, $78, $a5 ;; 03:5e26 ?????????????? $4c
104 | db $08, $28, $2c, $40, $08, $10, $77, $28, $0a, $0c, $00, $00, $e1, $82 ;; 03:5e34 ?????????????? $4d
105 | db $0c, $1b, $2d, $40, $09, $00, $82, $40, $1a, $09, $00, $02, $dc, $ae ;; 03:5e42 ?????????????? $4e
106 | db $0a, $21, $2d, $10, $38, $80, $79, $28, $21, $ff, $00, $02, $b9, $b4 ;; 03:5e50 ?????????????? $4f
107 | db $0a, $23, $2f, $08, $b8, $00, $78, $2d, $31, $04, $00, $00, $df, $c8 ;; 03:5e5e ?????????????? $50
108 | db $08, $19, $30, $20, $db, $d0, $6e, $43, $28, $05, $00, $00, $be, $af ;; 03:5e6c ?????????????? $51
109 | db $04, $05, $31, $08, $b8, $30, $64, $0a, $32, $ff, $00, $00, $c8, $ba ;; 03:5e7a ?????????????? $52
110 | db $08, $1e, $2e, $08, $b8, $10, $80, $1e, $23, $ff, $00, $04, $b2, $64 ;; 03:5e88 ?????????????? $53
111 | db $07, $20, $31, $08, $00, $90, $6a, $28, $14, $12, $00, $01, $96, $ca ;; 03:5e96 ?????????????? $54
112 | db $0c, $24, $32, $08, $38, $80, $64, $34, $28, $08, $00, $08, $f0, $e6 ;; 03:5ea4 ?????????????? $55
113 | db $0c, $28, $32, $04, $10, $c0, $7d, $32, $1e, $09, $00, $00, $f2, $78 ;; 03:5eb2 ?????????????? $56
114 | db $04, $1e, $32, $00, $88, $f0, $70, $28, $28, $0a, $00, $00, $e6, $0a ;; 03:5ec0 ?????????????? $57
115 | db $02, $50, $32, $00, $b8, $f0, $a0, $46, $50, $16, $00, $00, $c8, $ff ;; 03:5ece ..???????.???? $58
116 | db $06, $24, $32, $20, $3c, $10, $7b, $49, $1e, $ff, $00, $02, $a5, $c8 ;; 03:5edc ?????????????? $59
117 | db $08, $01, $01, $00, $bf, $00, $00, $00, $0a, $ff, $00, $00, $00, $02 ;; 03:5eea ?????????????? $5a
118 | db $08, $0e, $0a, $20, $00, $90, $0e, $0c, $09, $03, $00, $00, $02, $0b ;; 03:5ef8 ?????????.???? $5b
119 | db $0c, $19, $15, $20, $18, $00, $44, $19, $13, $0c, $00, $00, $0c, $47 ;; 03:5f06 ?????????????? $5c
120 | db $06, $19, $22, $20, $08, $10, $3c, $19, $0a, $ff, $00, $00, $32, $32 ;; 03:5f14 ?????????????? $5d
121 | db $05, $ff, $01, $00, $ff, $00, $00, $05, $ff, $ff, $00, $00, $00, $00 ;; 03:5f22 ..??..???.???? $5e
122 | db $0a, $ff, $01, $00, $ff, $00, $00, $05, $ff, $ff, $00, $00, $00, $00 ;; 03:5f30 ..???????.???? $5f
123 | db $08, $03, $01, $01, $90, $00, $0d, $03, $03, $03, $00, $00, $02, $02 ;; 03:5f3e ?????????????? $60
124 | db $0a, $ff, $01, $00, $00, $00, $00, $05, $ff, $ff, $00, $00, $00, $00 ;; 03:5f4c ..???????.???? $61
125 |
--------------------------------------------------------------------------------
/src/bank0B_titlegfx_bossgfx.asm:
--------------------------------------------------------------------------------
1 | ;; Disassembled with BadBoy Disassembler: https://github.com/daid/BadBoy
2 |
3 | INCLUDE "include/hardware.inc"
4 | INCLUDE "include/macros.inc"
5 | INCLUDE "include/charmaps.inc"
6 | INCLUDE "include/constants.inc"
7 |
8 | SECTION "bank0b", ROMX[$4000], BANK[$0b]
9 |
10 | ;@gfximg name=title_end width=16 height=12
11 | tilesetGfxTitle:
12 | INCBIN "title_end.bin" ;; 0b:4000
13 |
14 | ;@gfximg name=trashbin width=2 height=8
15 | trashbinGfx:
16 | INCBIN "trashbin.bin" ;; 0b:4c00
17 |
18 | ;@gfximg name=boss/vampire width=2 height=12
19 | bossGfxVampire:
20 | INCBIN "boss/vampire.bin" ;; 0b:4d00
21 |
22 | ;@gfximg name=boss/davias width=2 height=14
23 | bossGfxDavias:
24 | INCBIN "boss/davias.bin" ;; 0b:4e80
25 |
26 | ;@gfximg name=boss/golem width=2 height=16
27 | bossGfxGolem:
28 | INCBIN "boss/golem.bin" ;; 0b:5040
29 |
30 | ;@gfximg name=boss/megapede width=2 height=16
31 | bossGfxMegapede:
32 | INCBIN "boss/megapede.bin" ;; 0b:5240
33 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:5440 ????????
34 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:5448 ????????
35 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:5450 ????????
36 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:5458 ????????
37 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:5460 ????????
38 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:5468 ????????
39 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:5470 ????????
40 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:5478 ????????
41 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:5480 ????????
42 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:5488 ????????
43 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:5490 ????????
44 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:5498 ????????
45 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:54a0 ????????
46 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:54a8 ????????
47 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:54b0 ????????
48 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:54b8 ????????
49 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:54c0 ????????
50 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:54c8 ????????
51 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:54d0 ????????
52 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:54d8 ????????
53 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:54e0 ????????
54 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:54e8 ????????
55 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:54f0 ????????
56 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:54f8 ????????
57 |
58 | ;@gfximg name=boss/chimera width=2 height=24
59 | bossGfxChimera:
60 | INCBIN "boss/chimera.bin" ;; 0b:5500
61 |
62 | ;@gfximg name=boss/kary width=2 height=22
63 | bossGfxKary:
64 | INCBIN "boss/kary.bin" ;; 0b:5800
65 |
66 | ;@gfximg name=boss/cyclops width=2 height=27
67 | bossGfxCyclops:
68 | INCBIN "boss/cyclops.bin" ;; 0b:5ac0
69 | db $99, $99, $66, $66, $00, $00, $00, $00 ;; 0b:5e20 ????????
70 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:5e28 ????????
71 |
72 | ;@gfximg name=boss/iflyte width=2 height=22
73 | bossGfxIflyte:
74 | INCBIN "boss/iflyte.bin" ;; 0b:5e30
75 | db $e0, $f0, $80, $e0, $00, $80, $00, $38 ;; 0b:60f0 ????????
76 | db $00, $c0, $00, $80, $00, $00, $00, $00 ;; 0b:60f8 ????????
77 |
78 | ;@gfximg name=boss/medusa width=2 height=24
79 | bossGfxMedusa:
80 | INCBIN "boss/medusa.bin" ;; 0b:6100
81 |
82 | ;@gfximg name=boss/lich width=4 height=14
83 | bossGfxLich:
84 | INCBIN "boss/lich.bin" ;; 0b:6400
85 |
86 | ;@gfximg name=boss/dragon width=4 height=14
87 | bossGfxDragon:
88 | INCBIN "boss/dragon.bin" ;; 0b:6780
89 |
90 | ;@gfximg name=boss/dragon_zombie width=2 height=24
91 | bossGfxDragonZombie:
92 | INCBIN "boss/dragon_zombie.bin" ;; 0b:6b00
93 |
94 | ;@gfximg name=boss/kraken width=2 height=26
95 | bossGfxKraken:
96 | INCBIN "boss/kraken.bin" ;; 0b:6e00
97 |
98 | ;@gfximg name=boss/metak_crab width=2 height=14
99 | bossGfxMetalCrab:
100 | INCBIN "boss/metak_crab.bin" ;; 0b:7140
101 |
102 | ;@gfximg name=boss/julius3 width=4 height=8
103 | bossGfxJulius3:
104 | INCBIN "boss/julius3.bin" ;; 0b:7300
105 |
106 | ;@gfximg name=boss/mantis_ant width=2 height=24
107 | bossGfxMantisAnt:
108 | INCBIN "boss/mantis_ant.bin" ;; 0b:7500
109 | db $c0, $c0, $e0, $a0, $7a, $5a, $3f, $25 ;; 0b:7800 ????????
110 | db $1f, $14, $0f, $08, $1f, $10, $3f, $23 ;; 0b:7808 ????????
111 | db $00, $00, $f0, $f0, $d8, $b8, $dc, $b4 ;; 0b:7810 ????????
112 | db $f2, $6e, $f6, $1e, $fd, $0b, $1b, $ef ;; 0b:7818 ????????
113 | db $3f, $26, $3f, $26, $30, $2f, $73, $4f ;; 0b:7820 ????????
114 | db $f5, $8d, $f5, $8d, $f9, $f9, $03, $02 ;; 0b:7828 ????????
115 | db $0f, $f5, $25, $ff, $27, $ff, $c7, $fd ;; 0b:7830 ????????
116 | db $c5, $3f, $c7, $3f, $c7, $3d, $c5, $3f ;; 0b:7838 ????????
117 | db $03, $02, $0f, $0c, $1f, $10, $1e, $11 ;; 0b:7840 ????????
118 | db $3e, $21, $3e, $21, $3e, $21, $7f, $58 ;; 0b:7848 ????????
119 | db $8f, $7f, $8f, $79, $11, $ff, $1e, $fe ;; 0b:7850 ????????
120 | db $1e, $f2, $12, $fe, $0c, $fc, $1a, $fe ;; 0b:7858 ????????
121 | db $ff, $87, $7f, $40, $3f, $30, $3f, $2f ;; 0b:7860 ????????
122 | db $3f, $20, $1f, $1f, $0f, $08, $07, $07 ;; 0b:7868 ????????
123 | db $f9, $e7, $e2, $1e, $0c, $fc, $f4, $fc ;; 0b:7870 ????????
124 | db $04, $fc, $f8, $f8, $10, $f0, $e0, $e0 ;; 0b:7878 ????????
125 |
126 | ;@gfximg name=boss/garuda width=2 height=28
127 | bossGfxGaruda:
128 | INCBIN "boss/garuda.bin" ;; 0b:7880
129 | ; @gfximg name=? width=4 height=4
130 | db $00, $00, $00, $00, $00, $00, $c0, $c0 ;; 0b:7c00 ????????
131 | db $f3, $b3, $7f, $4c, $76, $59, $20, $3f ;; 0b:7c08 ????????
132 | db $0c, $0c, $1e, $16, $3f, $35, $7d, $67 ;; 0b:7c10 ????????
133 | db $fd, $a7, $d9, $bf, $81, $ff, $81, $ff ;; 0b:7c18 ????????
134 | db $00, $00, $c0, $c0, $70, $b0, $5c, $bc ;; 0b:7c20 ????????
135 | db $56, $ba, $17, $f9, $15, $fb, $11, $ff ;; 0b:7c28 ????????
136 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:7c30 ????????
137 | db $00, $00, $00, $00, $c0, $c0, $60, $a0 ;; 0b:7c38 ????????
138 | db $20, $3f, $2c, $3f, $3e, $3f, $7f, $5d ;; 0b:7c40 ????????
139 | db $7f, $59, $7e, $4f, $3f, $23, $1c, $1c ;; 0b:7c48 ????????
140 | db $82, $ff, $43, $ff, $3d, $ff, $21, $ff ;; 0b:7c50 ????????
141 | db $21, $ff, $3e, $ff, $ff, $c4, $fb, $fb ;; 0b:7c58 ????????
142 | db $11, $ff, $12, $ff, $12, $ff, $22, $ff ;; 0b:7c60 ????????
143 | db $24, $ff, $db, $ff, $fe, $92, $6c, $6c ;; 0b:7c68 ????????
144 | db $70, $90, $9b, $7b, $27, $fd, $22, $fe ;; 0b:7c70 ????????
145 | db $46, $fe, $ae, $ba, $1f, $1d, $02, $02 ;; 0b:7c78 ????????
146 | db $00, $00, $00, $00, $10, $10, $38, $28 ;; 0b:7c80 ????????
147 | db $39, $29, $3f, $26, $3e, $29, $30, $3f ;; 0b:7c88 ????????
148 | db $02, $02, $07, $05, $0f, $09, $3f, $33 ;; 0b:7c90 ????????
149 | db $fe, $d3, $6c, $df, $40, $ff, $40, $ff ;; 0b:7c98 ????????
150 | db $00, $00, $00, $00, $00, $00, $e0, $e0 ;; 0b:7ca0 ????????
151 | db $b0, $d0, $ae, $de, $ab, $dd, $8b, $fc ;; 0b:7ca8 ????????
152 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:7cb0 ????????
153 | db $12, $12, $3f, $2d, $3f, $2d, $f7, $ff ;; 0b:7cb8 ????????
154 | db $20, $3f, $2c, $3f, $3e, $33, $ff, $df ;; 0b:7cc0 ????????
155 | db $ff, $91, $fe, $8f, $7f, $43, $3c, $3c ;; 0b:7cc8 ????????
156 | db $41, $ff, $21, $ff, $1e, $ff, $10, $ff ;; 0b:7cd0 ????????
157 | db $21, $ff, $3e, $ff, $ff, $e2, $7d, $7d ;; 0b:7cd8 ????????
158 | db $0a, $fd, $88, $ff, $91, $ff, $91, $ff ;; 0b:7ce0 ????????
159 | db $36, $ff, $c9, $ff, $ff, $49, $b6, $b6 ;; 0b:7ce8 ????????
160 | db $b1, $df, $cd, $bf, $1e, $f2, $1e, $f2 ;; 0b:7cf0 ????????
161 | db $3c, $fc, $c0, $c0, $00, $00, $00, $00 ;; 0b:7cf8 ????????
162 | ; @gfximg name=? width=2 height=8
163 | db $00, $00, $19, $19, $1f, $16, $0e, $0b ;; 0b:7d00 ????????
164 | db $0f, $09, $06, $07, $03, $03, $04, $07 ;; 0b:7d08 ????????
165 | db $00, $00, $98, $98, $78, $e8, $70, $d0 ;; 0b:7d10 ????????
166 | db $f0, $90, $60, $e0, $c0, $c0, $20, $e0 ;; 0b:7d18 ????????
167 | db $0b, $0f, $14, $1f, $1b, $1c, $34, $3b ;; 0b:7d20 ????????
168 | db $23, $3f, $2c, $3f, $53, $7c, $64, $7b ;; 0b:7d28 ????????
169 | db $d0, $f0, $28, $f8, $d8, $38, $2c, $dc ;; 0b:7d30 ????????
170 | db $c4, $fc, $34, $fc, $ca, $3e, $26, $de ;; 0b:7d38 ????????
171 | db $43, $7f, $ec, $ff, $f0, $bf, $73, $5f ;; 0b:7d40 ????????
172 | db $6d, $7f, $53, $7e, $23, $3e, $21, $3f ;; 0b:7d48 ????????
173 | db $c2, $fe, $37, $ff, $0f, $fd, $ce, $fa ;; 0b:7d50 ????????
174 | db $b6, $fe, $ca, $7e, $c4, $7c, $84, $fc ;; 0b:7d58 ????????
175 | db $40, $7f, $58, $7f, $7e, $67, $7f, $4f ;; 0b:7d60 ????????
176 | db $3f, $2c, $1f, $1d, $07, $04, $03, $03 ;; 0b:7d68 ????????
177 | db $02, $fe, $1a, $fe, $7e, $e6, $fe, $f2 ;; 0b:7d70 ????????
178 | db $fc, $b4, $f8, $38, $e0, $a0, $c0, $c0 ;; 0b:7d78 ????????
179 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:7d80 ????????
180 | db $00, $00, $19, $19, $1f, $16, $0e, $0b ;; 0b:7d88 ????????
181 | db $00, $00, $00, $00, $00, $00, $00, $00 ;; 0b:7d90 ????????
182 | db $00, $00, $98, $98, $78, $e8, $70, $d0 ;; 0b:7d98 ????????
183 | db $0f, $09, $06, $07, $03, $03, $0c, $0f ;; 0b:7da0 ????????
184 | db $13, $1c, $23, $3f, $2f, $3c, $34, $3b ;; 0b:7da8 ????????
185 | db $f0, $90, $60, $e0, $c0, $c0, $30, $f0 ;; 0b:7db0 ????????
186 | db $88, $78, $c4, $fc, $f4, $3c, $2c, $dc ;; 0b:7db8 ????????
187 | db $63, $7f, $cc, $ff, $f0, $bf, $73, $5f ;; 0b:7dc0 ????????
188 | db $6d, $7f, $53, $7e, $23, $3e, $21, $3f ;; 0b:7dc8 ????????
189 | db $c6, $fe, $33, $ff, $0f, $fd, $ce, $fa ;; 0b:7dd0 ????????
190 | db $b6, $fe, $ca, $7e, $c4, $7c, $84, $fc ;; 0b:7dd8 ????????
191 | db $58, $7f, $7e, $67, $7f, $7f, $3f, $24 ;; 0b:7de0 ????????
192 | db $1f, $1d, $07, $04, $03, $03, $00, $00 ;; 0b:7de8 ????????
193 | db $1a, $fe, $7e, $e6, $fe, $fe, $fc, $a4 ;; 0b:7df0 ????????
194 | db $f8, $38, $e0, $a0, $c0, $c0, $00, $00 ;; 0b:7df8 ????????
195 |
196 | ;@gfximg name=boss/jackal width=2 height=16
197 | bossGfxJackal:
198 | INCBIN "boss/jackal.bin" ;; 0b:7e00
199 |
--------------------------------------------------------------------------------
/plugins/npc.py:
--------------------------------------------------------------------------------
1 | from annotation.annotation import annotation
2 | from annotation.simple import DataBlock, JumpTable
3 | from block.base import Block
4 | from block.gfx import GfxBlock
5 | from block.code import CodeBlock
6 | from romInfo import RomInfo
7 |
8 |
9 | NPC_NAMES = {
10 | 0x00: "NPC_SNOWMAN_STILL",
11 | 0x01: "NPC_FUJI_FOLLOWING",
12 | 0x02: "NPC_MYSTERYMAN_FOLLOWING",
13 | 0x03: "NPC_WATTS_FOLLOWING",
14 | 0x04: "NPC_BOGARD_FOLLOWING",
15 | 0x05: "NPC_AMANDA_FOLLOWING",
16 | 0x06: "NPC_LESTER_FOLLOWING",
17 | 0x07: "NPC_MARCIE_FOLLOWING",
18 | 0x08: "NPC_CHOCOBOT_FOLLOWING",
19 | 0x09: "NPC_CHOCOBO_FOLLOWING",
20 | 0x0a: "NPC_WEREWOLF_1",
21 | 0x0b: "NPC_INV_CURE",
22 | 0x0c: "NPC_CHEST_1",
23 | 0x0d: "NPC_CHEST_2",
24 | 0x0e: "NPC_CHEST_3",
25 | 0x0f: "NPC_CHEST_4",
26 | 0x10: "NPC_CHIBIDEVIL",
27 | 0x11: "NPC_RABBITE",
28 | 0x12: "NPC_GOBLIN",
29 | 0x13: "NPC_MUSHROOM",
30 | 0x14: "NPC_JELLYFISH",
31 | 0x15: "NPC_SWAMPMAN",
32 | 0x16: "NPC_LIZARDMAN",
33 | 0x17: "NPC_FLOWER",
34 | 0x18: "NPC_FACEORB",
35 | 0x19: "NPC_SKELETON",
36 | 0x1a: "NPC_EVIL_PLANT",
37 | 0x1b: "NPC_FLYING_FISH",
38 | 0x1c: "NPC_ZOMBIE",
39 | 0x1d: "NPC_MOUSE",
40 | 0x1e: "NPC_PUMPKIN",
41 | 0x1f: "NPC_OWL",
42 | 0x20: "NPC_BEE",
43 | 0x21: "NPC_CLOUD",
44 | 0x22: "NPC_PIG",
45 | 0x23: "NPC_CRAB",
46 | 0x24: "NPC_SPIDER",
47 | 0x25: "NPC_INV_OPEN_NORTH",
48 | 0x26: "NPC_INV_OPEN_SOUTH",
49 | 0x27: "NPC_INV_OPEN_EAST",
50 | 0x28: "NPC_INV_OPEN_WEST",
51 | 0x29: "NPC_MIMIC_CHEST",
52 | 0x2a: "NPC_HOPPING_BUG",
53 | 0x2b: "NPC_PORCUPINE",
54 | 0x2c: "NPC_CARROT",
55 | 0x2d: "NPC_EYE_SPY",
56 | 0x2e: "NPC_WEREWOLF_2",
57 | 0x2f: "NPC_GHOST",
58 | 0x30: "NPC_BASILISK",
59 | 0x31: "NPC_SCORPION",
60 | 0x32: "NPC_SAURUS",
61 | 0x33: "NPC_MUMMY",
62 | 0x34: "NPC_PAKKUN_LIZARD",
63 | 0x35: "NPC_SNAKE",
64 | 0x36: "NPC_SHADOW",
65 | 0x37: "NPC_BLACK_WIZARD",
66 | 0x38: "NPC_FLAME",
67 | 0x39: "NPC_GARGOYLE",
68 | 0x3a: "NPC_MONKEY",
69 | 0x3b: "NPC_MOLEBEAR",
70 | 0x3c: "NPC_OGRE",
71 | 0x3d: "NPC_BARNACLEJACK",
72 | 0x3e: "NPC_PHANTASM",
73 | 0x3f: "NPC_MINOTAUR",
74 | 0x40: "NPC_GLAIVE_MAGE",
75 | 0x41: "NPC_GLAIVE_KNIGHT",
76 | 0x42: "NPC_DARK_LORD",
77 | 0x43: "NPC_MEGA_FLYTRAP",
78 | 0x44: "NPC_DRAGONFLY",
79 | 0x45: "NPC_ARMADILLO",
80 | 0x46: "NPC_SNOWMAN_MOVING",
81 | 0x47: "NPC_SABER_CAT",
82 | 0x48: "NPC_WALRUS",
83 | 0x49: "NPC_DUCK_SOLDIER",
84 | 0x4a: "NPC_POTO_RABBIT",
85 | 0x4b: "NPC_CYCLONE",
86 | 0x4c: "NPC_BEHOLDER_EYE",
87 | 0x4d: "NPC_MANTA_RAY",
88 | 0x4e: "NPC_JUMPING_HAND",
89 | 0x4f: "NPC_TORTOISE",
90 | 0x50: "NPC_FIRE_MOTH",
91 | 0x51: "NPC_EARTH_DIGGER",
92 | 0x52: "NPC_DENDEN_SNAIL",
93 | 0x53: "NPC_DOPPEL_MIRROR",
94 | 0x54: "NPC_GUARDIAN",
95 | 0x55: "NPC_EVIL_SWORD",
96 | 0x56: "NPC_GAUNTLET",
97 | 0x57: "NPC_GARASHA_DUCK",
98 | 0x58: "NPC_FUZZY_WONDER",
99 | 0x59: "NPC_ELEPHANT",
100 | 0x5a: "NPC_NINJA",
101 | 0x5b: "NPC_JULIUS",
102 | 0x5c: "NPC_DEMON_HEAD",
103 | 0x5d: "NPC_INV_DESSERT_CAVE_STONE",
104 | 0x5e: "NPC_WATER_DEMON",
105 | 0x5f: "NPC_SEA_DRAGON",
106 | 0x60: "NPC_GALL_FISH",
107 | 0x61: "NPC_WILLY",
108 | 0x62: "NPC_MYSTERYMAN_1",
109 | 0x63: "NPC_AMANDA_1",
110 | 0x64: "NPC_AMANDA_ILL",
111 | 0x65: "NPC_AMANDA_DEAD",
112 | 0x66: "NPC_FUJI_1",
113 | 0x67: "NPC_FUJI_WINDOW",
114 | 0x68: "NPC_MOTHER",
115 | 0x69: "NPC_BOGARD_1",
116 | 0x6a: "NPC_BOGARD_2",
117 | 0x6b: "NPC_KETTS_WEREWOLF",
118 | 0x6c: "NPC_INV_FUJI_COFFIN",
119 | 0x6d: "NPC_CIBBA",
120 | 0x6e: "NPC_GUY_WENDEL",
121 | 0x6f: "NPC_WATTS",
122 | 0x70: "NPC_MINECART",
123 | 0x71: "NPC_CHOCOBO_EGG",
124 | 0x72: "NPC_DAVIAS",
125 | 0x73: "NPC_LESTER_1",
126 | 0x74: "NPC_LESTER_PARROT",
127 | 0x75: "NPC_BOWOW",
128 | 0x76: "NPC_SARAH",
129 | 0x77: "NPC_MARCIE_1",
130 | 0x78: "NPC_KING_OF_LORIM",
131 | 0x79: "NPC_GLADIATOR_FRIEND",
132 | 0x7a: "NPC_INV_INN",
133 | 0x7b: "NPC_GIRL_TOPPLE",
134 | 0x7c: "NPC_GUY_TOPPLE",
135 | 0x7d: "NPC_GUY_TOPPLE_HOUSE",
136 | 0x7e: "NPC_GIRL_TOPPLE_HOUSE",
137 | 0x7f: "NPC_OLDMAN_TOPPLE",
138 | 0x80: "NPC_GUY_KETTS",
139 | 0x81: "NPC_GIRL_KETTS",
140 | 0x82: "NPC_GIRL_CIBBA",
141 | 0x83: "NPC_GUY_WENDEL2",
142 | 0x84: "NPC_GUY_WENDEL_HOUSE",
143 | 0x85: "NPC_WOMAN_CIBBA",
144 | 0x86: "NPC_OLDMAN_WENDEL",
145 | 0x87: "NPC_DWARF_1",
146 | 0x88: "NPC_DWARF_2",
147 | 0x89: "NPC_DWARF_3",
148 | 0x8a: "NPC_DWARF_4",
149 | 0x8b: "NPC_DWARF_5",
150 | 0x8c: "NPC_GUY_AIRSHIP_1",
151 | 0x8d: "NPC_GUY_AIRSHIP_2",
152 | 0x8e: "NPC_GUY_AIRSHIP_3",
153 | 0x8f: "NPC_GUY_AIRSHIP_4",
154 | 0x90: "NPC_OLDMAN_MENOS_1",
155 | 0x91: "NPC_GUY_MENOS",
156 | 0x92: "NPC_GIRL_MENOS_1",
157 | 0x93: "NPC_OLDMAN_MENOS_2",
158 | 0x94: "NPC_GIRL_MENOS",
159 | 0x95: "NPC_WOMAN_MENOS_2",
160 | 0x96: "NPC_GIRL_JADD_1",
161 | 0x97: "NPC_OLDMAN_JADD",
162 | 0x98: "NPC_GIRL_JADD_2",
163 | 0x99: "NPC_GUY_JADD",
164 | 0x9a: "NPC_DWARF_JADD",
165 | 0x9b: "NPC_SALESMAN_JADD",
166 | 0x9c: "NPC_GIRL_JADD_3",
167 | 0x9d: "NPC_BOY_JADD",
168 | 0x9e: "NPC_OLDMAN_ISH",
169 | 0x9f: "NPC_GUY_ISH_1",
170 | 0xa0: "NPC_GUY_ISH_2",
171 | 0xa1: "NPC_GIRL_ISH",
172 | 0xa2: "NPC_GUY_ISH_3",
173 | 0xa3: "NPC_GUY_ISH_4",
174 | 0xa4: "NPC_INV_STONE_1",
175 | 0xa5: "NPC_INV_STONE_2",
176 | 0xa6: "NPC_INV_STONE_3",
177 | 0xa7: "NPC_INV_STONE_4",
178 | 0xa8: "NPC_INV_STONE_5",
179 | 0xa9: "NPC_INV_STONE_6",
180 | 0xaa: "NPC_INV_STONE_7",
181 | 0xab: "NPC_INV_STONE_8",
182 | 0xac: "NPC_GUY_LORIM_FROZEN",
183 | 0xad: "NPC_GUY_LORIM_1",
184 | 0xae: "NPC_GUY_LORIM_2",
185 | 0xaf: "NPC_SALESMAN",
186 | 0xb0: "NPC_INV_SALESMAN_1",
187 | 0xb1: "NPC_FUJI_2",
188 | 0xb2: "NPC_INV_SALESMAN_2",
189 | 0xb3: "NPC_MYSTERYMAN_2",
190 | 0xb4: "NPC_BOGARD_3",
191 | 0xb5: "NPC_AMANDA_2",
192 | 0xb6: "NPC_LESTER_2",
193 | 0xb7: "NPC_MARCIE_2",
194 | 0xb8: "NPC_CHOCOBOT",
195 | 0xb9: "NPC_CHOCOBO_1",
196 | 0xba: "NPC_CHOCOBO_2",
197 | 0xbb: "NPC_PRISION_BARS",
198 | 0xbc: "NPC_MUSIC_NOTES",
199 | 0xbd: "NPC_MAGIC_SALESMAN",
200 | 0xbe: "NPC_LAST_GUY",
201 | }
202 |
203 |
204 | @annotation
205 | def npc_data(memory, addr, *, amount):
206 | for n in range(int(amount)):
207 | NpcDataBlock(memory, addr + n * 24, n)
208 |
209 | @annotation
210 | def npc_spawn_data(memory, addr, *, amount):
211 | RomInfo.constants["NPC_NAMES"] = {v: k for k, v in NPC_NAMES.items()}
212 | for n in range(int(amount)):
213 | NpcSpawnDataPointers(memory, addr + n * 6)
214 |
215 | class NpcDataBlock(Block):
216 | def __init__(self, memory, addr, index):
217 | super().__init__(memory, addr, size=24)
218 | self.index = index
219 |
220 | script_index = memory.word(addr + 20)
221 | gfx_ptr = memory.word(addr + 4)
222 |
223 | self.gfx_bank = (gfx_ptr >> 14) + 0x08
224 | self.gfx_ptr = (gfx_ptr & 0x3FFF) | 0x4000
225 | RomInfo.romBank(self.gfx_bank).addAutoLabel(self.gfx_ptr, None, "data")
226 |
227 | memory.addAutoLabel(memory.word(addr + 6), None, "data")
228 | a = memory.word(addr + 8)
229 | if a >= 0x4000:
230 | memory.addAutoLabel(memory.word(addr + 8), None, "data")
231 |
232 | RomInfo.macros["NPC_DATA"] = r"""
233 | db \1, \2, \3, \4
234 | dw (\5 & $3FFF) | ((BANK(\5) - $08) << 14), \6, \7
235 | db \8, \9
236 | SHIFT 9
237 | db \1, \2, \3, \4, \5, \6, \7, \8
238 | SCRIPT_IDX \9
239 | SHIFT 9
240 | IF ISCONST(\1)
241 | dw \1
242 | ELSE
243 | SCRIPT_IDX \1
244 | ENDC
245 | """
246 |
247 | def export(self, file):
248 | some_ptr = self.memory.word(file.addr + 8)
249 | some_label = str(self.memory.getLabel(some_ptr) if some_ptr >= 0x4000 else RomInfo.romBank(0).getLabel(some_ptr))
250 |
251 | script_index = self.memory.word(file.addr + 20) # script index
252 | script_pointer = RomInfo.romBank(0x08).word(0x4f05 + script_index * 2)
253 | script_bank = RomInfo.romBank(0x0D + (script_pointer >> 14))
254 | script_label = script_bank.getLabel((script_pointer & 0x3FFF) | 0x4000)
255 |
256 | chest_script_index = self.memory.word(file.addr + 22) # script index
257 | if chest_script_index == 0x0000:
258 | chest_script_label = "$0000"
259 | else:
260 | chest_script_pointer = RomInfo.romBank(0x08).word(0x4f05 + chest_script_index * 2)
261 | chest_script_bank = RomInfo.romBank(0x0D + (chest_script_pointer >> 14))
262 | chest_script_label = chest_script_bank.getLabel((chest_script_pointer & 0x3FFF) | 0x4000)
263 |
264 | # bbbbw p p bbbbbbbbbbwbb
265 | file.asmLine(24, "NPC_DATA",
266 | "$%02x" % (self.memory.byte(file.addr + 0)),
267 | "$%02x" % (self.memory.byte(file.addr + 1)),
268 | "$%02x" % (self.memory.byte(file.addr + 2)),
269 | "$%02x" % (self.memory.byte(file.addr + 3)),
270 | str(RomInfo.romBank(self.gfx_bank).getLabel(self.gfx_ptr)),
271 | str(self.memory.getLabel(self.memory.word(file.addr + 6))),
272 | some_label,
273 | "$%02x" % (self.memory.byte(file.addr + 10)),
274 | "$%02x" % (self.memory.byte(file.addr + 11)),
275 | "$%02x" % (self.memory.byte(file.addr + 12)),
276 | "$%02x" % (self.memory.byte(file.addr + 13)),
277 | "$%02x" % (self.memory.byte(file.addr + 14)),
278 | "$%02x" % (self.memory.byte(file.addr + 15)),
279 | "$%02x" % (self.memory.byte(file.addr + 16)),
280 | "$%02x" % (self.memory.byte(file.addr + 17)),
281 | "$%02x" % (self.memory.byte(file.addr + 18)),
282 | "$%02x" % (self.memory.byte(file.addr + 19)),
283 | script_label,
284 | chest_script_label,
285 | is_data=True,
286 | add_data_comment=False,
287 | comment=NPC_NAMES.get(self.index)
288 | )
289 |
290 | class NpcSpawnDataPointers(Block):
291 | def __init__(self, memory, addr):
292 | super().__init__(memory, addr, size=6)
293 | for n in range(3):
294 | ptr = memory.word(addr + n * 2)
295 | memory.addAutoLabel(ptr, None, "data")
296 | if memory[ptr] is None:
297 | NpcSpawnDataBlock(memory, ptr)
298 |
299 | def export(self, file):
300 | memory = self.memory
301 | file.asmLine(6, "dw",
302 | str(memory.getLabel(memory.word(file.addr))),
303 | str(memory.getLabel(memory.word(file.addr + 2))),
304 | str(memory.getLabel(memory.word(file.addr + 4))),
305 | is_data=True
306 | )
307 |
308 | class NpcSpawnDataBlock(Block):
309 | def __init__(self, memory, addr):
310 | super().__init__(memory, addr, size=6)
311 |
312 | def export(self, file):
313 | m = self.memory
314 | file.asmLine(6, "db",
315 | str(m.byte(file.addr)), str(m.byte(file.addr + 1)), # min, max
316 | NPC_NAMES.get(m.byte(file.addr + 2), "$%02x" % (m.byte(file.addr + 2))),
317 | NPC_NAMES.get(m.byte(file.addr + 3), "$%02x" % (m.byte(file.addr + 3))),
318 | NPC_NAMES.get(m.byte(file.addr + 4), "$%02x" % (m.byte(file.addr + 4))),
319 | NPC_NAMES.get(m.byte(file.addr + 5), "$%02x" % (m.byte(file.addr + 5))),
320 | is_data=True
321 | )
322 |
--------------------------------------------------------------------------------
/src/include/charmaps.inc:
--------------------------------------------------------------------------------
1 | PUSHC
2 | NEWCHARMAP BASIC
3 | CHARMAP "<00>", 0
4 | CHARMAP "<01>", 1
5 | CHARMAP "<02>", 2
6 | CHARMAP "<03>", 3
7 | CHARMAP "<04>", 4
8 | CHARMAP "<05>", 5
9 | CHARMAP "<06>", 6
10 | CHARMAP "<07>", 7
11 | CHARMAP "<08>", 8
12 | CHARMAP "<09>", 9
13 | CHARMAP "<0a>", 10
14 | CHARMAP "<0b>", 11
15 | CHARMAP "<0c>", 12
16 | CHARMAP "<0d>", 13
17 | CHARMAP "<0e>", 14
18 | CHARMAP "<0f>", 15
19 | CHARMAP "<10>", 16
20 | CHARMAP "<11>", 17
21 | CHARMAP "<12>", 18
22 | CHARMAP "<13>", 19
23 | CHARMAP "", 20
24 | CHARMAP "", 21
25 | CHARMAP "<16>", 22
26 | CHARMAP "<17>", 23
27 | CHARMAP "<18>", 24
28 | CHARMAP "<19>", 25
29 | CHARMAP "\n", 26
30 | CHARMAP "<1b>", 27
31 | CHARMAP "<1c>", 28
32 | CHARMAP "<1d>", 29
33 | CHARMAP "<1e>", 30
34 | CHARMAP "<1f>", 31
35 | CHARMAP "<20>", 32
36 | CHARMAP "<21>", 33
37 | CHARMAP "<22>", 34
38 | CHARMAP "<23>", 35
39 | CHARMAP "<24>", 36
40 | CHARMAP "<25>", 37
41 | CHARMAP "<26>", 38
42 | CHARMAP "<27>", 39
43 | CHARMAP "<28>", 40
44 | CHARMAP "<29>", 41
45 | CHARMAP "<2a>", 42
46 | CHARMAP "<2b>", 43
47 | CHARMAP "<2c>", 44
48 | CHARMAP "<2d>", 45
49 | CHARMAP "<2e>", 46
50 | CHARMAP "<2f>", 47
51 | CHARMAP "<30>", 48
52 | CHARMAP "<31>", 49
53 | CHARMAP "<32>", 50
54 | CHARMAP "<33>", 51
55 | CHARMAP "<34>", 52
56 | CHARMAP "<35>", 53
57 | CHARMAP "<36>", 54
58 | CHARMAP "<37>", 55
59 | CHARMAP "<38>", 56
60 | CHARMAP "<39>", 57
61 | CHARMAP "<3a>", 58
62 | CHARMAP "<3b>", 59
63 | CHARMAP "<3c>", 60
64 | CHARMAP "<3d>", 61
65 | CHARMAP "<3e>", 62
66 | CHARMAP "<3f>", 63
67 | CHARMAP "<40>", 64
68 | CHARMAP "<41>", 65
69 | CHARMAP "<42>", 66
70 | CHARMAP "<43>", 67
71 | CHARMAP "<44>", 68
72 | CHARMAP "<45>", 69
73 | CHARMAP "<46>", 70
74 | CHARMAP "<47>", 71
75 | CHARMAP "<48>", 72
76 | CHARMAP "<49>", 73
77 | CHARMAP "<4a>", 74
78 | CHARMAP "<4b>", 75
79 | CHARMAP "<4c>", 76
80 | CHARMAP "<4d>", 77
81 | CHARMAP "<4e>", 78
82 | CHARMAP "<4f>", 79
83 | CHARMAP "<50>", 80
84 | CHARMAP "<51>", 81
85 | CHARMAP "<52>", 82
86 | CHARMAP "<53>", 83
87 | CHARMAP "<54>", 84
88 | CHARMAP "<55>", 85
89 | CHARMAP "<56>", 86
90 | CHARMAP "<57>", 87
91 | CHARMAP "<58>", 88
92 | CHARMAP "<59>", 89
93 | CHARMAP "<5a>", 90
94 | CHARMAP "<5b>", 91
95 | CHARMAP "<5c>", 92
96 | CHARMAP "<5d>", 93
97 | CHARMAP "<5e>", 94
98 | CHARMAP "<5f>", 95
99 | CHARMAP "<60>", 96
100 | CHARMAP "<61>", 97
101 | CHARMAP "<62>", 98
102 | CHARMAP "<63>", 99
103 | CHARMAP "<64>", 100
104 | CHARMAP "<65>", 101
105 | CHARMAP "<66>", 102
106 | CHARMAP "<67>", 103
107 | CHARMAP "<68>", 104
108 | CHARMAP "<69>", 105
109 | CHARMAP "<6a>", 106
110 | CHARMAP "<6b>", 107
111 | CHARMAP "<6c>", 108
112 | CHARMAP "<6d>", 109
113 | CHARMAP "<6e>", 110
114 | CHARMAP "<6f>", 111
115 | CHARMAP "<70>", 112
116 | CHARMAP "<71>", 113
117 | CHARMAP "<72>", 114
118 | CHARMAP "<73>", 115
119 | CHARMAP "<74>", 116
120 | CHARMAP "<75>", 117
121 | CHARMAP "<76>", 118
122 | CHARMAP "<77>", 119
123 | CHARMAP "<78>", 120
124 | CHARMAP "<79>", 121
125 | CHARMAP "<7a>", 122
126 | CHARMAP "<7b>", 123
127 | CHARMAP "<7c>", 124
128 | CHARMAP "<7d>", 125
129 | CHARMAP "<7e>", 126
130 | CHARMAP "<7f>", 127
131 | CHARMAP "<80>", 128
132 | CHARMAP "<81>", 129
133 | CHARMAP "<82>", 130
134 | CHARMAP "<83>", 131
135 | CHARMAP "<84>", 132
136 | CHARMAP "<85>", 133
137 | CHARMAP "<86>", 134
138 | CHARMAP "<87>", 135
139 | CHARMAP "<88>", 136
140 | CHARMAP "<89>", 137
141 | CHARMAP "<8a>", 138
142 | CHARMAP "<8b>", 139
143 | CHARMAP "<8c>", 140
144 | CHARMAP "<8d>", 141
145 | CHARMAP "<8e>", 142
146 | CHARMAP "<8f>", 143
147 | CHARMAP "<90>", 144
148 | CHARMAP "<91>", 145
149 | CHARMAP "<92>", 146
150 | CHARMAP "<93>", 147
151 | CHARMAP "<94>", 148
152 | CHARMAP "<95>", 149
153 | CHARMAP "<96>", 150
154 | CHARMAP "<97>", 151
155 | CHARMAP "<98>", 152
156 | CHARMAP "<99>", 153
157 | CHARMAP "<9a>", 154
158 | CHARMAP "<9b>", 155
159 | CHARMAP "<9c>", 156
160 | CHARMAP "<9d>", 157
161 | CHARMAP "<9e>", 158
162 | CHARMAP "<9f>", 159
163 | CHARMAP "", 160
164 | CHARMAP "", 161
165 | CHARMAP "", 162
166 | CHARMAP "", 163
167 | CHARMAP "", 164
168 | CHARMAP "", 165
169 | CHARMAP "", 166
170 | CHARMAP "", 167
171 | CHARMAP "", 168
172 | CHARMAP "", 169
173 | CHARMAP "", 170
174 | CHARMAP "", 171
175 | CHARMAP "", 172
176 | CHARMAP "", 173
177 | CHARMAP "", 174
178 | CHARMAP "", 175
179 | CHARMAP "0", 176
180 | CHARMAP "1", 177
181 | CHARMAP "2", 178
182 | CHARMAP "3", 179
183 | CHARMAP "4", 180
184 | CHARMAP "5", 181
185 | CHARMAP "6", 182
186 | CHARMAP "7", 183
187 | CHARMAP "8", 184
188 | CHARMAP "9", 185
189 | CHARMAP "A", 186
190 | CHARMAP "B", 187
191 | CHARMAP "C", 188
192 | CHARMAP "D", 189
193 | CHARMAP "E", 190
194 | CHARMAP "F", 191
195 | CHARMAP "G", 192
196 | CHARMAP "H", 193
197 | CHARMAP "I", 194
198 | CHARMAP "J", 195
199 | CHARMAP "K", 196
200 | CHARMAP "L", 197
201 | CHARMAP "M", 198
202 | CHARMAP "N", 199
203 | CHARMAP "O", 200
204 | CHARMAP "P", 201
205 | CHARMAP "Q", 202
206 | CHARMAP "R", 203
207 | CHARMAP "S", 204
208 | CHARMAP "T", 205
209 | CHARMAP "U", 206
210 | CHARMAP "V", 207
211 | CHARMAP "W", 208
212 | CHARMAP "X", 209
213 | CHARMAP "Y", 210
214 | CHARMAP "Z", 211
215 | CHARMAP "a", 212
216 | CHARMAP "b", 213
217 | CHARMAP "c", 214
218 | CHARMAP "d", 215
219 | CHARMAP "e", 216
220 | CHARMAP "f", 217
221 | CHARMAP "g", 218
222 | CHARMAP "h", 219
223 | CHARMAP "i", 220
224 | CHARMAP "j", 221
225 | CHARMAP "k", 222
226 | CHARMAP "l", 223
227 | CHARMAP "m", 224
228 | CHARMAP "n", 225
229 | CHARMAP "o", 226
230 | CHARMAP "p", 227
231 | CHARMAP "q", 228
232 | CHARMAP "r", 229
233 | CHARMAP "s", 230
234 | CHARMAP "t", 231
235 | CHARMAP "u", 232
236 | CHARMAP "v", 233
237 | CHARMAP "w", 234
238 | CHARMAP "x", 235
239 | CHARMAP "y", 236
240 | CHARMAP "z", 237
241 | CHARMAP "'", 238
242 | CHARMAP ",", 239
243 | CHARMAP ".", 240
244 | CHARMAP "_", 241
245 | CHARMAP "-", 242
246 | CHARMAP "!", 243
247 | CHARMAP "?", 244
248 | CHARMAP ":", 245
249 | CHARMAP "/", 246
250 | CHARMAP "", 247
251 | CHARMAP "", 248
252 | CHARMAP "", 249
253 | CHARMAP "", 250
254 | CHARMAP "", 251
255 | CHARMAP "", 252
256 | CHARMAP "", 253
257 | CHARMAP "", 254
258 | CHARMAP " ", 255
259 | POPC
260 | PUSHC
261 | NEWCHARMAP SCRIPT
262 | CHARMAP "<00>", 0
263 | CHARMAP "<01>", 1
264 | CHARMAP "<02>", 2
265 | CHARMAP "<03>", 3
266 | CHARMAP "<04>", 4
267 | CHARMAP "<05>", 5
268 | CHARMAP "<06>", 6
269 | CHARMAP "<07>", 7
270 | CHARMAP "<08>", 8
271 | CHARMAP "<09>", 9
272 | CHARMAP "<0a>", 10
273 | CHARMAP "<0b>", 11
274 | CHARMAP "<0c>", 12
275 | CHARMAP "<0d>", 13
276 | CHARMAP "<0e>", 14
277 | CHARMAP "<0f>", 15
278 | CHARMAP "<10>", 16
279 | CHARMAP "<11>", 17
280 | CHARMAP "<12>", 18
281 | CHARMAP "<13>", 19
282 | CHARMAP "", 20
283 | CHARMAP "", 21
284 | CHARMAP "<16>", 22
285 | CHARMAP "<17>", 23
286 | CHARMAP "<18>", 24
287 | CHARMAP "<19>", 25
288 | CHARMAP "\n", 26
289 | CHARMAP "<1b>", 27
290 | CHARMAP "<1c>", 28
291 | CHARMAP "<1d>", 29
292 | CHARMAP "<1e>", 30
293 | CHARMAP "<1f>", 31
294 | CHARMAP "e ", 32
295 | CHARMAP "ou", 33
296 | CHARMAP " t", 34
297 | CHARMAP "th", 35
298 | CHARMAP "yo", 36
299 | CHARMAP "d ", 37
300 | CHARMAP "s ", 38
301 | CHARMAP "er", 39
302 | CHARMAP "t ", 40
303 | CHARMAP "an", 41
304 | CHARMAP "he", 42
305 | CHARMAP "nd", 43
306 | CHARMAP "u.", 44
307 | CHARMAP " a", 45
308 | CHARMAP "ar", 46
309 | CHARMAP "in", 47
310 | CHARMAP "at", 48
311 | CHARMAP "is", 49
312 | CHARMAP "ea", 50
313 | CHARMAP "to", 51
314 | CHARMAP ". ", 52
315 | CHARMAP "__", 53
316 | CHARMAP "o ", 54
317 | CHARMAP " i", 55
318 | CHARMAP "re", 56
319 | CHARMAP "ed", 57
320 | CHARMAP "ll", 58
321 | CHARMAP "ha", 59
322 | CHARMAP "or", 60
323 | CHARMAP " s", 61
324 | CHARMAP " o", 62
325 | CHARMAP "te", 63
326 | CHARMAP " h", 64
327 | CHARMAP "us", 65
328 | CHARMAP " m", 66
329 | CHARMAP " w", 67
330 | CHARMAP "un", 68
331 | CHARMAP "st", 69
332 | CHARMAP "ow", 70
333 | CHARMAP "on", 71
334 | CHARMAP "it", 72
335 | CHARMAP " I", 73
336 | CHARMAP "n ", 74
337 | CHARMAP "as", 75
338 | CHARMAP "r ", 76
339 | CHARMAP "ve", 77
340 | CHARMAP "en", 78
341 | CHARMAP "ng", 79
342 | CHARMAP "of", 80
343 | CHARMAP " M", 81
344 | CHARMAP " f", 82
345 | CHARMAP "f ", 83
346 | CHARMAP "es", 84
347 | CHARMAP "Fo", 85
348 | CHARMAP "al", 86
349 | CHARMAP "y ", 87
350 | CHARMAP "a ", 88
351 | CHARMAP " y", 89
352 | CHARMAP "av", 90
353 | CHARMAP "I ", 91
354 | CHARMAP "hi", 92
355 | CHARMAP "le", 93
356 | CHARMAP "oo", 94
357 | CHARMAP "ro", 95
358 | CHARMAP " g", 96
359 | CHARMAP "e.", 97
360 | CHARMAP "Ma", 98
361 | CHARMAP "ma", 99
362 | CHARMAP "om", 100
363 | CHARMAP "l ", 101
364 | CHARMAP "el", 102
365 | CHARMAP "ur", 103
366 | CHARMAP " T", 104
367 | CHARMAP " ", 105
368 | CHARMAP " W", 106
369 | CHARMAP "se", 107
370 | CHARMAP "'s", 108
371 | CHARMAP "E ", 109
372 | CHARMAP "li", 110
373 | CHARMAP " b", 111
374 | CHARMAP "<70>", 112
375 | CHARMAP "<71>", 113
376 | CHARMAP "<72>", 114
377 | CHARMAP "<73>", 115
378 | CHARMAP "<74>", 116
379 | CHARMAP "<75>", 117
380 | CHARMAP "<76>", 118
381 | CHARMAP "<77>", 119
382 | CHARMAP "<78>", 120
383 | CHARMAP "<79>", 121
384 | CHARMAP "<7a>", 122
385 | CHARMAP "<7b>", 123
386 | CHARMAP "<7c>", 124
387 | CHARMAP "<7d>", 125
388 | CHARMAP "<7e>", 126
389 | CHARMAP "<7f>", 127
390 | CHARMAP ", ", 128
391 | CHARMAP "u ", 129
392 | CHARMAP "wa", 130
393 | CHARMAP "il", 131
394 | CHARMAP "ut", 132
395 | CHARMAP "Th", 133
396 | CHARMAP "da", 134
397 | CHARMAP " c", 135
398 | CHARMAP "gh", 136
399 | CHARMAP "ca", 137
400 | CHARMAP "ai", 138
401 | CHARMAP "ir", 139
402 | CHARMAP "m ", 140
403 | CHARMAP "Le", 141
404 | CHARMAP "rd", 142
405 | CHARMAP "ig", 143
406 | CHARMAP "ul", 144
407 | CHARMAP "ht", 145
408 | CHARMAP "ba", 146
409 | CHARMAP " l", 147
410 | CHARMAP " G", 148
411 | CHARMAP "no", 149
412 | CHARMAP "ta", 150
413 | CHARMAP " H", 151
414 | CHARMAP "et", 152
415 | CHARMAP "we", 153
416 | CHARMAP " S", 154
417 | CHARMAP "e!", 155
418 | CHARMAP "wi", 156
419 | CHARMAP "HE", 157
420 | CHARMAP "ck", 158
421 | CHARMAP "nt", 159
422 | CHARMAP "", 160
423 | CHARMAP "", 161
424 | CHARMAP "", 162
425 | CHARMAP "", 163
426 | CHARMAP "", 164
427 | CHARMAP "", 165
428 | CHARMAP "", 166
429 | CHARMAP "", 167
430 | CHARMAP "", 168
431 | CHARMAP "", 169
432 | CHARMAP "", 170
433 | CHARMAP "", 171
434 | CHARMAP "", 172
435 | CHARMAP "", 173
436 | CHARMAP "", 174
437 | CHARMAP "", 175
438 | CHARMAP "0", 176
439 | CHARMAP "1", 177
440 | CHARMAP "2", 178
441 | CHARMAP "3", 179
442 | CHARMAP "4", 180
443 | CHARMAP "5", 181
444 | CHARMAP "6", 182
445 | CHARMAP "7", 183
446 | CHARMAP "8", 184
447 | CHARMAP "9", 185
448 | CHARMAP "A", 186
449 | CHARMAP "B", 187
450 | CHARMAP "C", 188
451 | CHARMAP "D", 189
452 | CHARMAP "E", 190
453 | CHARMAP "F", 191
454 | CHARMAP "G", 192
455 | CHARMAP "H", 193
456 | CHARMAP "I", 194
457 | CHARMAP "J", 195
458 | CHARMAP "K", 196
459 | CHARMAP "L", 197
460 | CHARMAP "M", 198
461 | CHARMAP "N", 199
462 | CHARMAP "O", 200
463 | CHARMAP "P", 201
464 | CHARMAP "Q", 202
465 | CHARMAP "R", 203
466 | CHARMAP "S", 204
467 | CHARMAP "T", 205
468 | CHARMAP "U", 206
469 | CHARMAP "V", 207
470 | CHARMAP "W", 208
471 | CHARMAP "X", 209
472 | CHARMAP "Y", 210
473 | CHARMAP "Z", 211
474 | CHARMAP "a", 212
475 | CHARMAP "b", 213
476 | CHARMAP "c", 214
477 | CHARMAP "d", 215
478 | CHARMAP "e", 216
479 | CHARMAP "f", 217
480 | CHARMAP "g", 218
481 | CHARMAP "h", 219
482 | CHARMAP "i", 220
483 | CHARMAP "j", 221
484 | CHARMAP "k", 222
485 | CHARMAP "l", 223
486 | CHARMAP "m", 224
487 | CHARMAP "n", 225
488 | CHARMAP "o", 226
489 | CHARMAP "p", 227
490 | CHARMAP "q", 228
491 | CHARMAP "r", 229
492 | CHARMAP "s", 230
493 | CHARMAP "t", 231
494 | CHARMAP "u", 232
495 | CHARMAP "v", 233
496 | CHARMAP "w", 234
497 | CHARMAP "x", 235
498 | CHARMAP "y", 236
499 | CHARMAP "z", 237
500 | CHARMAP "'", 238
501 | CHARMAP ",", 239
502 | CHARMAP ".", 240
503 | CHARMAP "_", 241
504 | CHARMAP "-", 242
505 | CHARMAP "!", 243
506 | CHARMAP "?", 244
507 | CHARMAP ":", 245
508 | CHARMAP "/", 246
509 | CHARMAP "", 247
510 | CHARMAP "", 248
511 | CHARMAP "", 249
512 | CHARMAP "", 250
513 | CHARMAP "", 251
514 | CHARMAP "", 252
515 | CHARMAP "", 253
516 | CHARMAP "", 254
517 | CHARMAP " ", 255
518 | POPC
519 |
--------------------------------------------------------------------------------
/src/data/projectiles.asm:
--------------------------------------------------------------------------------
1 | ;; Disassembled with BadBoy Disassembler: https://github.com/daid/BadBoy
2 |
3 |
4 | ;@data format=bbbbbbbbpppp amount=40
5 | ; Projectile data.
6 | ; 0) Collision flags. Valid options:
7 | ; $38: friendly melee (Bogard)
8 | ; $3a: friendly ranged (four cardinal directions)
9 | ; $60: enemy melee
10 | ; $62: enemy ranged (four cardinal directions)
11 | ; $72: enemy ranged (any angle)
12 | ; 1) Speed, lower = faster.
13 | ; 2) Size (for collision calculations)
14 | ; 3) Element
15 | ; 4) Damage
16 | ; 5) Status Effect inflicted
17 | ; 6) Graphics Tile Load Index
18 | ; 7) Graphics Tile Load Count
19 | ; 8-9) Graphics pointer
20 | ; 10-11) Tile indexes
21 | ; 12-13) Metatiles
22 | ; 14-15) ?
23 | projectileDataTable:
24 | data_bbbbbbbbpppp $62, $08, $08, $01, $0a, $00, $30, $04, gfxProjectileKnife, data_09_46f9, data_09_4771, pattern_simple ;; 09:4479 ................ $00
25 | data_bbbbbbbbpppp $72, $08, $08, $04, $20, $00, $30, $04, gfxProjectileSun, data_09_46f9, data_09_47b9, pattern_simple ;; 09:4489 ???????????????? $01
26 | data_bbbbbbbbpppp $62, $08, $08, $04, $1e, $00, $38, $04, gfxProjectileNeedles, data_09_46f9, data_09_4789, pattern_simple ;; 09:4499 ???????????????? $02
27 | data_bbbbbbbbpppp $62, $08, $08, $04, $1e, $00, $30, $04, gfxProjectilePitchfork, data_09_46f9, data_09_4771, pattern_simple ;; 09:44a9 ..????.......... $03
28 | data_bbbbbbbbpppp $72, $08, $08, $40, $50, $00, $38, $04, gfxProjectileMirrorImage, data_09_46f9, data_09_47d1, pattern_simple ;; 09:44b9 ???????????????? $04
29 | data_bbbbbbbbpppp $62, $08, $08, $40, $64, $00, $68, $04, gfxProjectileLaser, data_09_46f9, data_09_47a1, pattern_simple ;; 09:44c9 ???????????????? $05
30 | data_bbbbbbbbpppp $72, $08, $08, $08, $46, $00, $38, $04, gfxProjectileAxe, data_09_46f9, data_09_4801, pattern_simple ;; 09:44d9 ???????????????? $06
31 | data_bbbbbbbbpppp $72, $0a, $08, $04, $1c, $00, $38, $04, gfxProjectileClaw, data_09_46f9, data_09_4801, pattern_simple ;; 09:44e9 ???????????????? $07
32 | data_bbbbbbbbpppp $72, $08, $08, $08, $32, $08, $30, $04, gfxProjectileRing, data_09_46f9, data_09_47b9, pattern_simple ;; 09:44f9 ???????????????? $08
33 | data_bbbbbbbbpppp $62, $08, $08, $08, $46, $00, $30, $04, gfxProjectileRock, data_09_46f9, data_09_47e9, pattern_simple ;; 09:4509 ???????????????? $09
34 | data_bbbbbbbbpppp $72, $08, $08, $40, $89, $00, $38, $04, gfxProjectileNinjaStar, data_09_46f9, data_09_4831, pattern_simple ;; 09:4519 ???????????????? $0a
35 | data_bbbbbbbbpppp $72, $08, $08, $40, $3e, $04, $30, $04, gfxProjectileOrb, data_09_46f9, data_09_4819, pattern_simple ;; 09:4529 ???????????????? $0b
36 | data_bbbbbbbbpppp $72, $08, $08, $10, $50, $00, $38, $04, gfxProjectileFire, data_09_46f9, data_09_4789, pattern_simple ;; 09:4539 ???????????????? $0c
37 | data_bbbbbbbbpppp $62, $08, $08, $20, $5f, $00, $30, $04, gfxProjectileIce, data_09_46f9, data_09_4771, pattern_simple ;; 09:4549 ???????????????? $0d
38 | data_bbbbbbbbpppp $62, $08, $08, $40, $30, $00, $38, $04, gfxProjectileLightning, data_09_46f9, data_09_4789, pattern_simple ;; 09:4559 ???????????????? $0e
39 | data_bbbbbbbbpppp $62, $08, $08, $04, $21, $01, $30, $04, gfxProjectileWind, data_09_46f9, data_09_4771, pattern_simple ;; 09:4569 ???????????????? $0f
40 | data_bbbbbbbbpppp $60, $08, $08, $01, $0f, $00, $30, $04, gfxProjectileArrow, data_09_46f9, data_09_4771, pattern_melee ;; 09:4579 ??????......???? $10
41 | data_bbbbbbbbpppp $60, $08, $08, $08, $46, $00, $38, $04, gfxProjectileSword, data_09_46f9, data_09_4789, pattern_melee ;; 09:4589 ??????......???? $11
42 | data_bbbbbbbbpppp $60, $0a, $08, $02, $14, $00, $38, $04, gfxProjectileNeedle, data_09_46f9, data_09_4789, pattern_melee ;; 09:4599 ???????????????? $12
43 | data_bbbbbbbbpppp $60, $0a, $08, $04, $2d, $01, $38, $04, gfxProjectileNail, data_09_46f9, data_09_4849, pattern_scorpion_tail ;; 09:45a9 ???????????????? $13
44 | data_bbbbbbbbpppp $72, $0a, $08, $40, $5f, $00, $30, $04, gfxProjectileFire2, data_09_46f9, data_09_47e9, pattern_simple ;; 09:45b9 ???????????????? $14
45 | data_bbbbbbbbpppp $60, $08, $08, $04, $26, $02, $38, $04, gfxProjectileWave, data_09_46f9, data_09_4861, pattern_melee ;; 09:45c9 ???????????????? $15
46 | data_bbbbbbbbpppp $72, $08, $08, $40, $63, $00, $38, $04, gfxProjectileExplosion, data_09_46f9, data_09_4831, pattern_simple ;; 09:45d9 ??????......???? $16
47 | data_bbbbbbbbpppp $60, $08, $08, $01, $1e, $00, $38, $04, gfxProjectileChestBite, data_09_46f9, data_09_4849, pattern_chest_bite ;; 09:45e9 ???????????????? $17
48 | data_bbbbbbbbpppp $38, $08, $0c, $01, $27, $00, $18, $04, gfxProjectileSword, data_09_46f9, data_09_4879, pattern_melee ;; 09:45f9 ???????????????? $18
49 | data_bbbbbbbbpppp $3a, $0a, $0c, $01, $19, $00, $18, $04, gfxProjectileAxe, data_09_46f9, data_09_4891, pattern_simple ;; 09:4609 ???????????????? $19
50 | data_bbbbbbbbpppp $3a, $08, $0c, $01, $2b, $00, $18, $04, gfxProjectileKnife, data_09_46f9, data_09_4879, pattern_simple ;; 09:4619 ???????????????? $1a
51 | data_bbbbbbbbpppp $3a, $08, $0c, $01, $2c, $00, $18, $04, gfxProjectileArrow, data_09_46f9, data_09_4879, pattern_simple ;; 09:4629 ???????????????? $1b
52 | data_bbbbbbbbpppp $3a, $08, $0c, $01, $5f, $00, $18, $04, gfxProjectileLaser, data_09_46f9, data_09_4879, pattern_simple ;; 09:4639 ???????????????? $1c
53 | data_bbbbbbbbpppp $3a, $06, $08, $08, $0d, $00, $18, $04, gfxProjectileFire, data_09_46f9, data_09_4879, pattern_simple ;; 09:4649 ???????????????? $1d
54 | data_bbbbbbbbpppp $72, $08, $08, $02, $1e, $00, $30, $08, gfxProjectileExplosion, data_09_4701, data_09_4819, pattern_simple ;; 09:4659 ???????????????? $1e
55 | data_bbbbbbbbpppp $62, $0c, $08, $80, $17, $00, $30, $08, gfxProjectileExplosion, data_09_4711, data_09_4771, pattern_simple ;; 09:4669 ???????????????? $1f
56 | data_bbbbbbbbpppp $72, $0a, $08, $04, $40, $04, $30, $08, gfxProjectileExplosion, data_09_4721, data_09_4819, pattern_simple ;; 09:4679 ???????????????? $20
57 | data_bbbbbbbbpppp $72, $0a, $08, $40, $a0, $00, $30, $02, gfxProjectileFeather2, data_09_46f9, data_09_47b9, pattern_simple ;; 09:4689 ???????????????? $21
58 | data_bbbbbbbbpppp $72, $0a, $08, $40, $a6, $00, $30, $02, gfxProjectileSkull, data_09_46f9, data_09_47b9, pattern_simple ;; 09:4699 ???????????????? $22
59 | data_bbbbbbbbpppp $62, $08, $08, $40, $50, $00, $30, $08, gfxProjectileExplosion, data_09_4731, data_09_4771, pattern_simple ;; 09:46a9 ???????????????? $23
60 | data_bbbbbbbbpppp $62, $08, $08, $40, $a8, $00, $30, $08, gfxProjectileLightning, data_09_4741, data_09_4771, pattern_simple ;; 09:46b9 ???????????????? $24
61 | data_bbbbbbbbpppp $72, $08, $0a, $40, $a3, $00, $30, $08, gfxProjectileExplosion, data_09_4751, data_09_4819, pattern_simple ;; 09:46c9 ???????????????? $25
62 | data_bbbbbbbbpppp $72, $0a, $08, $40, $4f, $00, $30, $08, gfxProjectileExplosion, data_09_4761, data_09_47b9, pattern_simple ;; 09:46d9 ???????????????? $26
63 | data_bbbbbbbbpppp $72, $0a, $08, $40, $88, $00, $30, $08, gfxProjectileExplosion, data_09_4761, data_09_47b9, pattern_simple ;; 09:46e9 ???????????????? $27
64 |
65 | data_09_46f9:
66 | db $00, $02, $01, $03, $04, $06, $05, $07 ;; 09:46f9 ........
67 |
68 | data_09_4701:
69 | db $08, $0a, $09, $0b, $0c, $0e, $0d, $0f ;; 09:4701 ????????
70 | db $00, $02, $01, $03, $04, $06, $05, $07 ;; 09:4709 ????????
71 |
72 | data_09_4711:
73 | db $48, $4a, $49, $4b, $4c, $4e, $4d, $4f ;; 09:4711 ????????
74 | db $00, $02, $01, $03, $04, $06, $05, $07 ;; 09:4719 ????????
75 |
76 | data_09_4721:
77 | db $10, $12, $11, $13, $14, $16, $15, $17 ;; 09:4721 ????????
78 | db $00, $02, $01, $03, $04, $06, $05, $07 ;; 09:4729 ????????
79 |
80 | data_09_4731:
81 | db $48, $4a, $49, $4b, $4c, $4e, $4d, $4f ;; 09:4731 ????????
82 | db $00, $02, $01, $03, $04, $06, $05, $07 ;; 09:4739 ????????
83 |
84 | data_09_4741:
85 | db $00, $02, $01, $03, $04, $06, $05, $07 ;; 09:4741 ????????
86 | db $38, $3a, $39, $3b, $3c, $3e, $3d, $3f ;; 09:4749 ????????
87 |
88 | data_09_4751:
89 | db $00, $02, $01, $03, $04, $06, $05, $07 ;; 09:4751 ????????
90 | db $60, $62, $61, $63, $64, $66, $65, $67 ;; 09:4759 ????????
91 |
92 | data_09_4761:
93 | db $34, $36, $35, $37, $38, $3a, $39, $3b ;; 09:4761 ????????
94 | db $00, $02, $01, $03, $04, $06, $05, $07 ;; 09:4769 ????????
95 |
96 | data_09_4771:
97 | db $20, $32, $30, $00, $30, $32, $00, $34 ;; 09:4771 ........
98 | db $36, $40, $34, $36, $20, $32, $30, $00 ;; 09:4779 ....????
99 | db $30, $32, $00, $34, $36, $40, $34, $36 ;; 09:4781 ????????
100 |
101 | data_09_4789:
102 | db $20, $3a, $38, $00, $38, $3a, $00, $3c ;; 09:4789 ????????
103 | db $3e, $40, $3c, $3e, $20, $3a, $38, $00 ;; 09:4791 ????????
104 | db $38, $3a, $00, $3c, $3e, $40, $3c, $3e ;; 09:4799 ????????
105 |
106 | data_09_47a1:
107 | db $20, $6a, $68, $00, $68, $6a, $00, $6c ;; 09:47a1 ????????
108 | db $6e, $40, $6c, $6e, $20, $6a, $68, $00 ;; 09:47a9 ????????
109 | db $68, $6a, $00, $6c, $6e, $40, $6c, $6e ;; 09:47b1 ????????
110 |
111 | data_09_47b9:
112 | db $00, $30, $32, $00, $30, $32, $00, $30 ;; 09:47b9 ????????
113 | db $32, $00, $30, $32, $00, $30, $32, $00 ;; 09:47c1 ????????
114 | db $30, $32, $00, $30, $32, $00, $30, $32 ;; 09:47c9 ????????
115 |
116 | data_09_47d1:
117 | db $00, $38, $3a, $00, $38, $3a, $00, $38 ;; 09:47d1 ????????
118 | db $3a, $00, $38, $3a, $00, $38, $3a, $00 ;; 09:47d9 ????????
119 | db $38, $3a, $00, $38, $3a, $00, $38, $3a ;; 09:47e1 ????????
120 |
121 | data_09_47e9:
122 | db $20, $32, $30, $40, $30, $32, $00, $30 ;; 09:47e9 ????????
123 | db $32, $60, $32, $30, $20, $32, $30, $40 ;; 09:47f1 ????????
124 | db $30, $32, $00, $30, $32, $60, $32, $30 ;; 09:47f9 ????????
125 |
126 | data_09_4801:
127 | db $20, $3a, $38, $40, $38, $3a, $00, $38 ;; 09:4801 ????????
128 | db $3a, $60, $3a, $38, $20, $3a, $38, $40 ;; 09:4809 ????????
129 | db $38, $3a, $00, $38, $3a, $60, $3a, $38 ;; 09:4811 ????????
130 |
131 | data_09_4819:
132 | db $00, $30, $32, $00, $30, $32, $00, $30 ;; 09:4819 ????????
133 | db $32, $00, $30, $32, $00, $34, $36, $00 ;; 09:4821 ????????
134 | db $34, $36, $00, $34, $36, $00, $34, $36 ;; 09:4829 ????????
135 |
136 | data_09_4831:
137 | db $00, $38, $3a, $00, $38, $3a, $00, $38 ;; 09:4831 ????????
138 | db $3a, $00, $38, $3a, $00, $3c, $3e, $00 ;; 09:4839 ????????
139 | db $3c, $3e, $00, $3c, $3e, $00, $3c, $3e ;; 09:4841 ????????
140 |
141 | data_09_4849:
142 | db $20, $3a, $38, $00, $38, $3a, $00, $38 ;; 09:4849 ????????
143 | db $3a, $00, $38, $3a, $20, $3a, $38, $00 ;; 09:4851 ????????
144 | db $38, $3a, $00, $38, $3a, $00, $38, $3a ;; 09:4859 ????????
145 |
146 | data_09_4861:
147 | db $20, $3a, $38, $00, $38, $3a, $20, $3a ;; 09:4861 ????????
148 | db $38, $40, $38, $3a, $20, $3a, $38, $00 ;; 09:4869 ????????
149 | db $38, $3a, $20, $3a, $38, $40, $38, $3a ;; 09:4871 ????????
150 |
151 | data_09_4879:
152 | db $20, $1a, $18, $00, $18, $1a, $00, $1c ;; 09:4879 ????????
153 | db $1e, $40, $1c, $1e, $20, $1a, $18, $00 ;; 09:4881 ????????
154 | db $18, $1a, $00, $1c, $1e, $40, $1c, $1e ;; 09:4889 ????????
155 |
156 | data_09_4891:
157 | db $20, $1a, $18, $40, $18, $1a, $00, $18 ;; 09:4891 ????????
158 | db $1a, $60, $1a, $18, $20, $1a, $18, $40 ;; 09:4899 ????????
159 | db $18, $1a, $00, $18, $1a, $60, $1a, $18 ;; 09:48a1 ????????
160 |
161 | ; A simple stab pattern.
162 | ; First byte is default direction flags.
163 | ; Second and third bytes are default vector.
164 | ; Fourth byte is unknown but always 4.
165 | ; Null terminated
166 | ;@data amount=3 format=bbbb
167 | pattern_melee:
168 | db $11, $08, $00, $04 ;; 09:48a9 ???? $00
169 | db $11, $10, $00, $04 ;; 09:48ad ???? $01
170 | db $11, $08, $00, $04 ;; 09:48b1 ???? $02
171 | db $00 ;; 09:48b5 ?
172 |
173 | ; Starts at maximum range and then draws closer.
174 | ; First byte is default direction flags.
175 | ; Second and third bytes are default vector.
176 | ; Fourth byte is unknown but always 4.
177 | ; Null terminated
178 | ;@data amount=3 format=bbbb
179 | pattern_scorpion_tail:
180 | db $11, $16, $00, $04 ;; 09:48b6 ???? $00
181 | db $11, $13, $00, $04 ;; 09:48ba ???? $01
182 | db $11, $10, $00, $04 ;; 09:48be ???? $02
183 | db $00 ;; 09:48c2 ?
184 |
185 | ; First byte is default direction flags.
186 | ; Second and third bytes are default vector. (Moves eight pixels each tick.)
187 | ; This is used by all npc projectiles and attacks except the melee types.
188 | ; Null terminated
189 | ;@data amount=1 format=bbb
190 | pattern_simple:
191 | db $11, $08, $00 ;; 09:48c3 ...
192 | db $00 ;; 09:48c6 .
193 |
194 | ; Used by the mimics.
195 | ; There's nothing obvious here to make the direction always north, so that is probably in the enemy logic.
196 | ; First byte is default direction flags.
197 | ; Second and third bytes are default vector.
198 | ; Fourth byte is unknown but always 4.
199 | ; Null terminated
200 | ;@data amount=2 format=bbbb
201 | pattern_chest_bite:
202 | db $11, $f0, $00, $04 ;; 09:48c7 ???? $00
203 | db $11, $f0, $00, $04 ;; 09:48cb ???? $01
204 | db $00, $17, $31, $50, $56, $14, $40, $90 ;; 09:48cf ????????
205 | db $12, $30, $50, $11, $32, $50, $10, $20 ;; 09:48d7 ????????
206 | db $8c, $60, $cc, $5c, $1d, $10, $ca, $15 ;; 09:48df ????????
207 | db $10, $ce, $15, $22, $0c, $62, $cc, $44 ;; 09:48e7 ????????
208 | db $05, $62, $4c, $53, $0f, $20, $18, $33 ;; 09:48ef ????????
209 | db $67, $12, $33, $27, $11, $42, $e7, $53 ;; 09:48f7 ????????
210 | db $14 ;; 09:48ff ?
211 |
--------------------------------------------------------------------------------
/src/data/items.asm:
--------------------------------------------------------------------------------
1 | ;; Disassembled with BadBoy Disassembler: https://github.com/daid/BadBoy
2 |
3 |
4 | ; offset 0: ID
5 | ; offset 1-8: Name
6 | ; offset 9:
7 | ; bit 0-4: mana cost, allowing costs up to 31 (though highest mana cost is 3)
8 | ; bit 5: unknown (probably unused)
9 | ; bit 6: cannot be sold or trashed
10 | ; bit 7: multiuse (shows in ITEMS with a number after it)
11 | ; offset a:
12 | ; bit 0: weapon (equipment only)
13 | ; bit 1: armor (equipment only)
14 | ; bit 2: helm (equipment only)
15 | ; bit 3: shield (equipment only)
16 | ; bit 4-6: unknown
17 | ; bit 7: useable (items and spells only)
18 | ; offset b: player attack elements (weapons, spells, and offensive items)
19 | ; bit 0: basic physical
20 | ; bit 1: mithril
21 | ; bit 2: mattok/star
22 | ; bit 3: fire
23 | ; bit 4: ice
24 | ; bit 5: electric
25 | ; bit 6: nuke
26 | ; bit 7: sleep/mute
27 | ; offset b: DP (helms and armor only)
28 | ; offset b: player shield elemental immunity
29 | ; bit 0: level 1 projectiles (weakest)
30 | ; bit 1: level 2 projectiles
31 | ; bit 2: level 3 projectiles
32 | ; bit 3: level 4 projectiles
33 | ; bit 4: ice
34 | ; bit 5: fire
35 | ; bit 6: level 5 projectiles
36 | ; bit 7: always set
37 | ; offset c: element resistances/bonuses
38 | ; offset d: power (AP weapons and spells, DP duplicate armor and helms)
39 | ; offset e-f: price to buy from a shop
40 | ;@item_data amount=8
41 | spellDataTable:
42 | ITEM_DATA $00, "Cure<00><00><00><00>" , $42, $10, $14, $00, $00, $00, $00 ;; 02:5dda ????????????????
43 | ITEM_DATA $01, "Heal<00><00><00><00>" , $41, $10, $00, $00, $00, $00, $00 ;; 02:5dea ????????????????
44 | ITEM_DATA $02, "Mute<00><00><00><00>" , $41, $10, $80, $00, $00, $00, $00 ;; 02:5dfa ????????????????
45 | ITEM_DATA $03, "Slep<00><00><00><00>" , $41, $10, $80, $00, $00, $00, $00 ;; 02:5e0a ????????????????
46 | ITEM_DATA $04, "Fire<00><00><00><00>" , $41, $10, $08, $81, $16, $00, $00 ;; 02:5e1a ????????????????
47 | ITEM_DATA $05, "Ice<00><00><00><00><00>" , $42, $10, $12, $40, $02, $00, $00 ;; 02:5e2a ????????????????
48 | ITEM_DATA $06, "Lit<00><00><00><00><00>" , $42, $10, $20, $20, $2c, $00, $00 ;; 02:5e3a ????????????????
49 | ITEM_DATA $07, "Nuke<00><00><00><00>" , $43, $10, $40, $00, $39, $00, $00 ;; 02:5e4a ????????????????
50 |
51 | ;@item_data amount=57
52 | itemDataTable:
53 | ITEM_DATA $00, "Cure<00><00><00>" , $80, $a0, $10, $00, $00, $28, $00 ;; 02:5e5a ?......??..???..
54 | ITEM_DATA $01, "X-Cure<00>" , $80, $a0, $20, $00, $00, $a0, $00 ;; 02:5e6a ????????????????
55 | ITEM_DATA $02, "Ether<00><00>" , $00, $90, $00, $08, $00, $40, $01 ;; 02:5e7a ????????????????
56 | ITEM_DATA $03, "X-Ether" , $00, $90, $00, $10, $00, $80, $02 ;; 02:5e8a ????????????????
57 | ITEM_DATA $04, "Elixir<00>" , $00, $90, $ff, $63, $00, $00, $05 ;; 02:5e9a ????????????????
58 | ITEM_DATA $05, "Pure<00><00><00>" , $80, $b0, $01, $00, $00, $1e, $00 ;; 02:5eaa ?......??..???..
59 | ITEM_DATA $06, "Eyedrp<00>" , $80, $b0, $02, $00, $00, $3c, $00 ;; 02:5eba ?..........???..
60 | ITEM_DATA $07, "Soft<00><00><00>" , $80, $b0, $04, $00, $00, $5a, $00 ;; 02:5eca ????????????????
61 | ITEM_DATA $08, "Moogle<00>" , $80, $b0, $08, $00, $00, $78, $00 ;; 02:5eda ????????????????
62 | ITEM_DATA $09, "Unicorn" , $00, $90, $0f, $00, $00, $2c, $01 ;; 02:5eea ????????????????
63 | ITEM_DATA $0a, "Silence" , $00, $90, $80, $00, $00, $64, $00 ;; 02:5efa ????????????????
64 | ITEM_DATA $0b, "Pillow<00>" , $00, $90, $80, $00, $00, $64, $00 ;; 02:5f0a ????????????????
65 | ITEM_DATA $0c, "rCE:-<65><00>" , $80, $a0, $cc, $00, $00, $90, $01 ;; 02:5f1a ????????????????
66 | ITEM_DATA $0d, "drC<63><5b>-<54><00>" , $80, $a0, $d8, $00, $00, $20, $03 ;; 02:5f2a ????????????????
67 | ITEM_DATA $0e, "Flame<00><00>" , $80, $a0, $08, $80, $24, $3c, $00 ;; 02:5f3a ????????????????
68 | ITEM_DATA $0f, "Blaze<00><00>" , $80, $a0, $08, $80, $32, $f0, $00 ;; 02:5f4a ????????????????
69 | ITEM_DATA $10, "Blizrd<00>" , $80, $a0, $12, $40, $07, $50, $00 ;; 02:5f5a ????????????????
70 | ITEM_DATA $11, "Frost<00><00>" , $80, $a0, $12, $40, $10, $40, $01 ;; 02:5f6a ????????????????
71 | ITEM_DATA $12, "Litblt<00>" , $80, $a0, $20, $20, $2d, $64, $00 ;; 02:5f7a ????????????????
72 | ITEM_DATA $13, "Thundr<00>" , $80, $a0, $20, $20, $46, $90, $01 ;; 02:5f8a ????????????????
73 | ITEM_DATA $14, "Candy<00><00>" , $00, $90, $08, $00, $00, $05, $00 ;; 02:5f9a ?.......?....???
74 | ITEM_DATA $15, "<8a><8c>n<64><82><00><00>" , $00, $90, $00, $00, $00, $00, $00 ;; 02:5faa ????????????????
75 | ITEM_DATA $16, "Key<00><00><00><00>" , $80, $40, $00, $00, $00, $0f, $00 ;; 02:5fba ?.....???..???..
76 | ITEM_DATA $17, "Bone<00><00><00>" , $00, $10, $00, $00, $00, $05, $00 ;; 02:5fca ????????????????
77 | ITEM_DATA $18, "Bronze<00>" , $00, $10, $00, $00, $00, $05, $00 ;; 02:5fda ????????????????
78 | ITEM_DATA $19, "<50>5<00><00><00>" , $40, $10, $00, $00, $00, $05, $00 ;; 02:5fea ????????????????
79 | ITEM_DATA $1a, "<94><50><9b><8b><99><8f><41><00>" , $00, $10, $00, $00, $00, $05, $00 ;; 02:5ffa ????????????????
80 | ITEM_DATA $1b, "<8a><8e><8b><99><00><00><00>" , $40, $10, $00, $00, $00, $00, $00 ;; 02:600a ????????????????
81 | ITEM_DATA $1c, "<8a><8f><8b><99><00><00><00>" , $40, $10, $00, $00, $00, $00, $00 ;; 02:601a ????????????????
82 | ITEM_DATA $1d, "gW<6a>v<5e>vV" , $40, $10, $00, $00, $00, $ff, $ff ;; 02:602a ????????????????
83 | ITEM_DATA $1e, " Mirror<00>" , $40, $10, $00, $00, $00, $ff, $ff ;; 02:603a ????????????????
84 | ITEM_DATA $1f, "hOpq<00><00><00><00>" , $40, $10, $00, $00, $00, $ff, $ff ;; 02:604a ????????????????
85 | ITEM_DATA $20, "OR-MdwDC" , $40, $10, $00, $00, $00, $ff, $ff ;; 02:605a ????????????????
86 | ITEM_DATA $21, "Amanda<00>" , $40, $10, $00, $00, $00, $ff, $ff ;; 02:606a ????????????????
87 | ITEM_DATA $22, "<63>ovM-<00><00><00>" , $40, $10, $00, $00, $00, $ff, $ff ;; 02:607a ????????????????
88 | ITEM_DATA $23, "i-vJpORq" , $00, $10, $00, $00, $00, $ff, $ff ;; 02:608a ????????????????
89 | ITEM_DATA $24, "Oil<00><00><00><00>" , $00, $10, $00, $00, $00, $f4, $01 ;; 02:609a ????????????????
90 | ITEM_DATA $25, "NWpGn<64><82><00>" , $40, $10, $00, $00, $00, $ff, $ff ;; 02:60aa ????????????????
91 | ITEM_DATA $26, "NWpGn<64><83><00>" , $40, $10, $00, $00, $00, $ff, $ff ;; 02:60ba ????????????????
92 | ITEM_DATA $27, "NWpGn<64><84><00>" , $40, $10, $00, $00, $00, $ff, $ff ;; 02:60ca ????????????????
93 | ITEM_DATA $28, "NWpGn<64><85><00>" , $40, $10, $00, $00, $00, $ff, $ff ;; 02:60da ????????????????
94 | ITEM_DATA $29, "Crystal" , $00, $90, $01, $00, $00, $e8, $03 ;; 02:60ea ????????????????
95 | ITEM_DATA $2a, "i-vJpORq" , $00, $90, $05, $00, $00, $f4, $01 ;; 02:60fa ????????????????
96 | ITEM_DATA $2b, "Nectar<00>" , $00, $90, $0f, $00, $00, $58, $00 ;; 02:610a ????????????????
97 | ITEM_DATA $2c, "Stamina" , $00, $90, $f0, $00, $00, $4e, $00 ;; 02:611a ????????????????
98 | ITEM_DATA $2d, "Wisdom<00>" , $00, $90, $00, $f0, $00, $22, $00 ;; 02:612a ????????????????
99 | ITEM_DATA $2e, "Will<00><00><00>" , $00, $90, $00, $0f, $00, $2e, $00 ;; 02:613a ????????????????
100 | ITEM_DATA $2f, "<99><8b><9b><00><00><00><00>" , $80, $c0, $00, $00, $00, $50, $00 ;; 02:614a ????????????????
101 | ITEM_DATA $30, "<62>t-dov<6e>" , $00, $90, $00, $00, $00, $c0, $0d ;; 02:615a ????????????????
102 | ITEM_DATA $31, "Gold<00><00><00>" , $00, $90, $00, $00, $00, $dc, $05 ;; 02:616a ????????????????
103 | ITEM_DATA $32, "Fang<00><00><00>" , $00, $00, $00, $00, $00, $1c, $00 ;; 02:617a ????????????????
104 | ITEM_DATA $33, "<4a><8b><9a><62>oi<00>" , $00, $90, $00, $00, $00, $b4, $00 ;; 02:618a ????????????????
105 | ITEM_DATA $34, "k-<56>p<8d><00>" , $00, $90, $00, $00, $00, $32, $00 ;; 02:619a ????????????????
106 | ITEM_DATA $35, "Mattok<00>" , $80, $f0, $04, $08, $07, $3c, $00 ;; 02:61aa ?...........??..
107 | ITEM_DATA $36, "Ruby<00><00><00>" , $00, $00, $00, $00, $00, $c8, $00 ;; 02:61ba ????????????????
108 | ITEM_DATA $37, "Opal<00><00><00>" , $00, $00, $00, $00, $00, $ac, $0d ;; 02:61ca ????????????????
109 | ITEM_DATA $38, "p<59>-<65><00><00><00><00>" , $00, $00, $00, $00, $00, $ff, $ff ;; 02:61da ????????????????
110 |
111 | ;@item_data amount=46
112 | equipmentDataTable:
113 | ITEM_DATA $00, "Broad<00><00>" , $00, $11, $01, $00, $04, $3c, $00 ;; 02:61ea ?.......?.......
114 | ITEM_DATA $01, "Battle<00>" , $40, $11, $01, $04, $08, $b4, $00 ;; 02:61fa ????????????????
115 | ITEM_DATA $02, "Sickle<00>" , $40, $11, $01, $00, $09, $f0, $00 ;; 02:620a ????????????????
116 | ITEM_DATA $03, "Chain<00><00>" , $40, $11, $01, $00, $0a, $40, $01 ;; 02:621a ????????????????
117 | ITEM_DATA $04, "Silver<00>" , $00, $11, $02, $08, $0e, $32, $02 ;; 02:622a ????????????????
118 | ITEM_DATA $05, "Wind<00><00><00>" , $00, $11, $01, $00, $10, $7e, $04 ;; 02:623a ????????????????
119 | ITEM_DATA $06, "Were<00><00><00>" , $00, $11, $01, $04, $14, $dc, $05 ;; 02:624a ????????????????
120 | ITEM_DATA $07, "Star<00><00><00>" , $40, $11, $04, $28, $1e, $e9, $07 ;; 02:625a ????????????????
121 | ITEM_DATA $08, "Blood<00><00>" , $00, $11, $01, $00, $1a, $53, $07 ;; 02:626a ????????????????
122 | ITEM_DATA $09, "Dragon<00>" , $00, $11, $01, $02, $38, $40, $1f ;; 02:627a ????????????????
123 | ITEM_DATA $0a, "Flame<00><00>" , $00, $11, $08, $80, $26, $9c, $18 ;; 02:628a ????????????????
124 | ITEM_DATA $0b, "Ice<00><00><00><00>" , $00, $11, $10, $40, $28, $4c, $1d ;; 02:629a ????????????????
125 | ITEM_DATA $0c, "Zeus<00><00><00>" , $00, $11, $01, $04, $30, $48, $26 ;; 02:62aa ????????????????
126 | ITEM_DATA $0d, "Rusty<00><00>" , $40, $11, $01, $00, $14, $b8, $88 ;; 02:62ba ????????????????
127 | ITEM_DATA $0e, "Thunder" , $00, $11, $20, $20, $2e, $f2, $2b ;; 02:62ca ????????????????
128 | ITEM_DATA $0f, "XCalibr" , $40, $11, $40, $01, $55, $e4, $57 ;; 02:62da ????????????????
129 | ITEM_DATA $10, "Bronze<00>" , $00, $12, $02, $00, $02, $6e, $00 ;; 02:62ea ?........???..??
130 | ITEM_DATA $11, "Iron<00><00><00>" , $00, $12, $07, $00, $07, $3b, $01 ;; 02:62fa ????????????????
131 | ITEM_DATA $12, "Silver<00>" , $00, $12, $0a, $70, $0a, $bc, $02 ;; 02:630a ????????????????
132 | ITEM_DATA $13, "Gold<00><00><00>" , $00, $12, $0f, $00, $0f, $14, $05 ;; 02:631a ????????????????
133 | ITEM_DATA $14, "Flame<00><00>" , $00, $12, $14, $10, $14, $f9, $15 ;; 02:632a ????????????????
134 | ITEM_DATA $15, "Ice<00><00><00><00>" , $00, $12, $1c, $20, $1c, $b6, $1c ;; 02:633a ????????????????
135 | ITEM_DATA $16, "Dragon<00>" , $00, $12, $22, $00, $22, $48, $26 ;; 02:634a ????????????????
136 | ITEM_DATA $17, "Samurai" , $00, $12, $2c, $00, $2c, $98, $3a ;; 02:635a ????????????????
137 | ITEM_DATA $18, "Opal<00><00><00>" , $00, $12, $12, $00, $12, $b8, $0b ;; 02:636a ????????????????
138 | ITEM_DATA $19, "nsDn<64><83><00><00>" , $00, $12, $0a, $00, $00, $ff, $ff ;; 02:637a ????????????????
139 | ITEM_DATA $1a, "nsDn<64><84><00><00>" , $00, $12, $0a, $00, $00, $ff, $ff ;; 02:638a ????????????????
140 | ITEM_DATA $1b, "Bronze<00>" , $00, $18, $81, $00, $00, $28, $00 ;; 02:639a ?........??.?.??
141 | ITEM_DATA $1c, "Iron<00><00><00>" , $00, $18, $83, $00, $00, $b9, $00 ;; 02:63aa ????????????????
142 | ITEM_DATA $1d, "Silver<00>" , $00, $18, $87, $00, $00, $f9, $01 ;; 02:63ba ????????????????
143 | ITEM_DATA $1e, "Gold<00><00><00>" , $00, $18, $97, $00, $00, $98, $03 ;; 02:63ca ????????????????
144 | ITEM_DATA $1f, "Flame<00><00>" , $00, $18, $af, $00, $00, $30, $11 ;; 02:63da ????????????????
145 | ITEM_DATA $20, "Dragon<00>" , $00, $18, $cf, $00, $00, $08, $20 ;; 02:63ea ????????????????
146 | ITEM_DATA $21, "Aegis<00><00>" , $00, $18, $ff, $00, $00, $f2, $2b ;; 02:63fa ????????????????
147 | ITEM_DATA $22, "Opal<00><00><00>" , $00, $18, $8f, $00, $00, $3c, $0f ;; 02:640a ????????????????
148 | ITEM_DATA $23, "Ice<00><00><00><00>" , $00, $18, $9f, $00, $00, $38, $18 ;; 02:641a ????????????????
149 | ITEM_DATA $24, "<99><9c>n<64><83><00><00><00>" , $00, $18, $00, $00, $00, $ff, $ff ;; 02:642a ????????????????
150 | ITEM_DATA $25, "<99><9c>n<64><84><00><00><00>" , $00, $18, $00, $00, $00, $ff, $ff ;; 02:643a ????????????????
151 | ITEM_DATA $26, "Bronze<00>" , $00, $14, $02, $00, $02, $40, $00 ;; 02:644a ?........????.??
152 | ITEM_DATA $27, "Iron<00><00><00>" , $00, $14, $03, $00, $03, $8c, $00 ;; 02:645a ?......??..???..
153 | ITEM_DATA $28, "Silver<00>" , $00, $14, $08, $70, $08, $f0, $00 ;; 02:646a ????????????????
154 | ITEM_DATA $29, "Gold<00><00><00>" , $00, $14, $0e, $00, $0e, $a8, $02 ;; 02:647a ????????????????
155 | ITEM_DATA $2a, "Opal<00><00><00>" , $00, $14, $13, $00, $13, $ac, $0d ;; 02:648a ????????????????
156 | ITEM_DATA $2b, "Samurai" , $00, $14, $19, $00, $19, $68, $10 ;; 02:649a ????????????????
157 | ITEM_DATA $2c, "<8f><51><9d>n<64><83><00><00>" , $00, $14, $03, $00, $00, $ff, $ff ;; 02:64aa ????????????????
158 | ITEM_DATA $2d, "<8f><51><9d>n<64><84><00><00>" , $00, $14, $03, $00, $00, $ff, $ff ;; 02:64ba ????????????????
159 |
160 | ; Psuedo items used for labels in the EQUIP screen
161 | ;@item_data amount=2
162 | itemAPDPLabelsDataTable:
163 | ITEM_DATA $00, "AP <00><00><00><00>" , $40, $00, $00, $00, $00, $00, $00 ;; 02:64ca ?.....???????.??
164 | ITEM_DATA $00, "DP <00><00><00><00>" , $40, $00, $00, $00, $00, $00, $00 ;; 02:64da ?.....???????.??
165 |
--------------------------------------------------------------------------------