By Shard.
Game variables can be accessed using the PSHM family of script functions, and can be written to by using the POPM family of functions. Which one you use depends on the size of the variable. The variables are all stored in save files, with the save block starting at address 0xD10 on uncompressed PC saves. The parameter to access a variable in the game scripts is basically the offset from this point in the variable block. For example, getting main story progress (word 256, which is word 0x100 in hex) just gets the two bytes starting at address 0xD10 + 0x100 = 0xE10. The varmap is continuous in memory while the game is running as well. In the en-US version of the original and SE releases (and likely most other versions), the varblock begins at the address given for VARMAP_START below. You can use this Cheat Engine Table to track them as you play.
Items in grey are unused by field scripts (some of them may be used in battle scripts).
IDA verification (FF8_EN.exe). The variable block is the global
VARMAP_START(typed as the packed structSavemapVariables). TheSCRIPT_PSHM_*/SCRIPT_POPM_*opcode handlers read/write*(&VARMAP_START + var_number), which confirms that the “Var Number” in this table is exactly the byte offset into the block — variable N lives at offset N. Rows annotated with a function name / address below have been verified against engine code; most of the remaining entries are used only by field or battle scripts and are not touched by the EXE, so they cannot be verified from the binary.Multi-use variables are shown in one of two ways: variables reused for different things at different points in the game carry a numbered footnote (e.g. 341, 728); variables reused for the same role across different maps get one row per context (e.g. 1024).
| Var type | Var Number | Description |
|---|---|---|
| Byte | 0-3 | unused in fields (always “FF-8”) |
| Long | 4 | Steps (used to generate random encounters) |
| Long | 8 | Payslip |
| Byte | 12-15 | unused in fields |
| Signed Word | 16 | SeeD rank points. The SeeD rank shown in the menu = clamp(points, 100, 3100) / 100 (rank 1–31), computed by GetSeeDRankFromPoints. |
| Byte | 18-19 | unused in fields |
| Long | 20 | Battles won. (Fun fact: this affects the basketball shot in Trabia.) |
| Byte | 24-25 | unused in fields |
| Word | 26 | Battles escaped. |
| Word | 28 | Enemies killed by Squall |
| Word | 30 | Enemies killed by Zell |
| Word | 32 | Enemies killed by Irvine |
| Word | 34 | Enemies killed by Quistis |
| Word | 36 | Enemies killed by Rinoa |
| Word | 38 | Enemies killed by Selphie |
| Word | 40 | Enemies killed by Seifer |
| Word | 42 | Enemies killed by Edea |
| Word | 44 | Squall death count |
| Word | 46 | Zell death count |
| Word | 48 | Irvine death count |
| Word | 50 | Quistis death count |
| Word | 52 | Rinoa death count |
| Word | 54 | Selphie death count |
| Word | 56 | Seifer death count |
| Word | 58 | Edea death count |
| Byte | 60-67 | unused in fields |
| Long | 68 | Enemies killed |
| Long | 72 | Amount of Gil the party currently has |
| Long | 76 | Amount of Gil Laguna’s party has |
| Long | 80 | Counts the number of frames since the current movie started playing. |
| Word | 84 | Last area visited. |
| Signed Byte | 86 | Current car rent. |
| Signed Byte | 87 | Built-in engine variable. No idea what it does. Scripts always check if it’s equal to 0 or 10. Related to music. |
| Signed Byte | 88 | Built-in engine variable. Used exclusively on save points. Never written to with field scripts. Related to Siren’s Move-Find ability. |
| Byte | 89-103 | unused in fields |
| Long | 104 | Seems related to SALARYDISPON/SALARYON/MUSICLOAD/PHSPOWER opcodes |
| Long | 108 | Music related. Used for battle music retention: a value of -1 means “no field BGM to carry over”, which makes the engine stop music after the fight (checked by Battle_KeepMusicAfterBattle). |
| Long | 112 | unused in fields |
| Byte | 116-147 | Draw points in field |
| Byte | 148-179 | Draw points in worldmap |
| Byte | 180-243 | Unused in fields. This region holds engine-only display/timer state rather than script variables: on-screen timer visibility (182) and X/Y position (205/206), a battle-disable flag (207), a “can save here” flag (209), and a battle-music A/B toggle (~201/203, toggled by Battle_KeepMusicAfterBattle). |
| Byte | 244-255 | Not investigated. Note: the worldmap-variant descriptions historically listed here (as 244–247) actually belong to offsets 264–267 — see below. These 12 bytes are unk5 in the struct and their purpose is unverified. |
| Word | 256 | Main Story quest progress. Both bytes are also copied into the worldmap state block (+110/+111) by World_BuildObjectInstanceList (renamed from Wmset_SetupWorldmapVariant in the community IDB), so the worldmap appearance can depend on story progress. |
| Byte | 258 | not investigated |
| Byte | 259-260 | unused in fields |
| Byte | 261 | not investigated |
| Byte | 262-263 | unused in fields |
| Byte | 264 | Worldmap variant extra flags. Bit 3 (normal path) or bit 4 (Disc 4 path) OR-ins bit 6 (0x40) into the word_2036BB6 worldmap variant bitmask. Likely the Balamb Garden mobile/stationary toggle. Read by World_BuildObjectInstanceList. |
| Byte | 265 | Worldmap variant state. Copied into the worldmap state block (+103) by World_BuildObjectInstanceList. Purpose not yet verified. |
| Byte | 266 | Worldmap variant index (previously guessed “World map version? 3=Esthar”). Bits 0-4 select the base tile-variant bitmask via a 5-case switch: 0→0x011D, 1→0x010D, 2→0x0101, 3→0x0100, 4→0x0180. Each bit corresponds to one entry in the trigger-rect table (see address table below) that overrides grid segments (0-767) with alternate segments (768-834). |
| Byte | 267 | Disc 4 worldmap sub-variant. Bits 0-1 select among three Disc 4 bitmasks (0x003E, 0x023E, 0x003F). Only used when the Disc 4 code path is active (dword_203FD60 != 0). |
| Byte | 268-271 | Worldmap variant state bytes, copied into the worldmap state block (+106…+109) by World_BuildObjectInstanceList. Not yet individually investigated. |
| Byte | 272-299 | SO MANY F***ING CARD GAME VARIABLES (292 = current card game rules, 293 = current card trade rule) |
| Byte | 300 | Card Queen re-cards. |
| Byte | 301-303 | unused in fields |
| Byte | 304-305 | Timber Maniacs issues found. |
| Byte | 306-319 | Reserved for Hacktuar / FF8Voice |
| Byte | 320-332 | Ultimecia Gallery related (pictures viewed?) |
| Byte | 333 | Ultimecia Armory chest flags |
| Byte | 334 | Ultimecia Castle seals. See SEALEDOFF for details. |
| Byte | 335 | Card related |
| Byte | 336 | Deling City bus related |
| Byte | 337 | Galbadia Garden water/fountain flags (glfurin1, glprein1, glwater3/4). |
| Byte | 338-340 | Deling Sewer gates opened |
| Byte | 341 | Does lots of things.5 |
| Byte | 342 | Deling City bus system |
| Byte | 343 | G-Garden door/event flags. |
| Byte | 344 | B-Garden / G-Garden event flags (during GvG) |
| Byte | 345 | G-Garden door/event flags. |
| Byte | 346-349 | FH Instrument (346 Zell, 347 Irvine, 348 Selphie, 349 Quistis) |
| Word | 350-357 | Health Bars (Garden mech fight) — four words (350, 352, 354, 356) |
| Byte | 358 | Space station talk flags, Centra ruins related (beat odin?). |
| Byte | 359 | Centra ruins related (beat odin?). |
| Long | 360 | Choice of FH music. |
| Byte | 364-368 | Randomly generated code for Centra Ruins. |
| Byte | 369-370 | Ultimecia Castle flags |
| Byte | 371 | unused in fields |
| Byte | 372-376 | Ultimecia boss/timer/item flags |
| Byte | 377 | Ultimecia organ note controller |
| Byte | 378 | Centra Ruins timer (controls blackout messages from Odin) |
| Byte | 379 | unused in fields |
| Word | 380 | Squall health during mech fight. |
| Byte | 382-383 | unused in fields |
| Byte | 384 | Something about Laguna’s time periods and GFs. |
| Byte | 385 | Laguna dialogue in pub. Only the +2 bit is ever set. Don’t change the +1 bit. |
| Byte | 387 | Winhill progress? |
| Byte | 388 | Timber Maniacs HQ talk flags (main lobby) |
| Byte | 389 | Timber Maniacs HQ talk flags (office room) |
| Byte | 390 | Edea talk flags at her house |
| Byte | 391 | Laguna talk flags (in his office, disc 3) |
| Byte | 392 | unknown (used in Edea’s house and in the Balamb Garden computer system) |
| Byte | 393-399 | unused in fields |
| Long | 400 and 404 | Related to monsters killed in Winhill, but I don’t think it actually does anything. Will investigate. |
| Byte | 408 | unused in fields |
| Byte | 409 | Balamb Garden computer system |
| Byte | 410-431 | unused in fields |
| Byte | 432 | BG Main hall flags |
| Byte | 433 | Flags. Switches are assigned all over BG. No idea what any of them control. |
| Byte | 434 | Flags. Switches are assigned all over BG. No idea what any of them control. |
| Byte | 435 | Flags. Switches are assigned all over BG. No idea what any of them control. |
| Byte | 436 | Moomba friendship level in the prison? Some actions cause these flags to be set. |
| Byte | 437 | In BG on Disc 2, keeps track of who’s in your party. In the prison, it’s the current floor you’re on. |
| Byte | 438 | Cid vs Norg event flags |
| Byte | 439 | Cid vs Norg event flags |
| Byte | 440 | Event flags. (+1 Quad ambush, +2 quad item giver, +4/+8 Infirmary helped, +16 Nida, +64 Kadowaki Elixir, +128 Training center) |
| Byte | 441 | Cid vs Norg event flags |
| Byte | 442 | Rinoa Garden tour flags |
| Word | 443 | Zell Health in Prison (Hacktuar) |
| Byte | 445-447 | Propagator defeated flags |
| Word | 448 | Balamb Garden 2F classroom study-panel state (read+written only by bg2f_22). |
| Byte | 450-451 | Various magazine/talk flags |
| Byte | 452 | Lunatic Pandora areas visited? |
| Byte | 453-455 | Moomba teleport variables |
| Byte | 456-457 | unused in fields |
| Byte | 458-459 | Used with MUSICSKIP in some Balamb Garden areas |
| Byte | 460 | Random flags (some used for Card Club) |
| Byte | 461-473 | unused in fields |
| Byte | 474 | Random flags (some used for Card Club) |
| Byte | 475-478 | CC Group variables |
| Byte | 479 | If set to 0, disables all random battles during area loading. |
| Byte | 480 | State of students in classroom (what they’re doing). |
| Byte | 481 | Controls a conversation in the cafeteria. |
| Signed Word | 482 | Error ratio of missiles |
| Byte | 484 | Missile Base progression? |
| Byte | 485 | ToUK Progression (initially 0b111010101, +2 on finish quest. No other pops) |
| Byte | 486 | ToUK room? (used to control map jumps in the maze) |
| Byte | 487 | Missile base progression (also does something in BG2F classroom) |
| Byte | 488 | Alternate Party Flags. Irvine +1/+16, Quistis +2/+32, Rinoa +4/+64, Zell +8/+128.1 |
| Byte | 489 | Random talk flags? |
| Byte | 490 | Cafeteria cutscene |
| Byte | 491 | ToUK stuff |
| Byte | 492 | I think this is a door opener for the missile base if you choose a short time limit. |
| Byte | 493 | Missile base timer related? |
| Byte | 494-527 | unused in fields |
| Signed Word | 528 | Sub-story progression (it’s a progression variable for individual segments of the game) |
| Byte | 530 | X-ATM related (defeated it in battle?) |
| Byte | 531 | Functionally unused. Read from at dollet, only manipulated in debug rooms. |
| Byte | 532 | Controls footstep sounds at dollet (sand to concrete) |
| Byte | 533-539 | not investigated |
| Byte | 540-591 | unused in fields |
| Byte | 592-593 | Seems to control angles and character facing. |
| Byte | 594 | unused in fields |
| Byte | 595-624 | not investigated |
| Byte | 625 | Balamb visited flags (+8 Zell’s room) |
| Byte | 626-691 | not investigated (words at 634, 656, 666, 672; several sub-bytes unused in fields) |
| Byte | 692-719 | unused in fields |
| Byte | 720 | Squall’s costume (0=normal, 1=student, 2=SeeD, 3=Bandage on forehead) |
| Byte | 721 | Zell’s Costume (0=normal, 1=student, 2=SeeD) |
| Byte | 722 | Selphie’s costume (0=normal, 1=student, 2=SeeD) |
| Byte | 723 | Quistis’ Costume (0=normal, 1=SeeD) |
| Word | 724 | Dollet mission time |
| Word | 726 | Town SeeD-rank/conduct input (written in Dollet/Timber fields, read by bgrank1). |
| Byte | 728 | Does lots of things.3 |
| Byte | 729 | Town SeeD-rank/conduct input (written in Dollet/Timber/Deling fields, read by bgrank1). |
| Byte | 730 | Flags (+1 Joined Garden Festival Committee, +4 Gave Selphie tour of BG, +16 Kadowaki asks for Cid, +32 and +64 Tomb of Unknown Kind hints?, +128 Beat all card people?) |
| Byte | 731 | unused in fields |
| Word | 732 | Fire Cavern (Ifrit) test result — written only by bdifrit1, read by bgrank1; feeds the SeeD rank. |
| Byte | 734 | Split Party Flags (+1 Zell, +2 Irvine, +4 Rinoa, +8 Quistis, +16 Selphie).2 |
| Byte | 735 | Balamb Garden interior NPC/state flags (bgbook_3, bgeat_1, bghoke_1, bgkote_1, bghall*). |
| Byte | 736-751 | unused in fields |
| Byte | 752 | Ragnarok interior state (rgcock*, rgexit2, rgroad*). |
| Byte | 753-1023 | Verified free (271 bytes) — see note 6. Unused by every field script, by the EXE, and zero in all real saves; a safe home for mod-added persistent data. |
| Byte | 1024 | Escalating deck level for balamb card player (bgmon_4, training center for Joker) -> Linked to CC group quest |
| Byte | 1024 | Escalating deck level for balamb card player (rgroad11, ragnarok for Joker) -> Linked to CC group quest |
| Byte | 1040 | Escalating deck level for balamb card player (bghall1b with seed) -> Linked to CC group quest |
| Byte | 1041 | Escalating deck level for balamb card player (bghall_1 with seito) -> Linked to CC group quest |
| Byte | Above 1023 | Temporary variables used pretty much everywhere. |
Notes
- When the party splits in disc 2, each party member in the inactive party except Selphie has one of the eight bits changed for this variable. One member has a flag in the 4 most significant bits, and the other has a flag in the 4 least significant bits. It’s done this way so that when the characters appear, they animate towards different locations in the field, rather than stacking on top of each other.
- This byte contains flags for which characters are in Squall’s party when the party splits in disc 2.
- List of everything that 728 holds throughout the game:
- SeeD field exam “Conduct” score (lose points when you do something wrong at Dollet).
- Train job attempts (Timber)
- Tomb of the Unknown King student ID.
- Who you took to space in disc 3.
- The field controlling restriction unlocking in Ultimecia’s Castle uses this to figure out where to jump the party after they’ve broken a seal. It’s unknown how SETPLACE actually sets this, it’s not always related to the field ID or the SETPLACE parameter. This variable is also set at Balamb Garden’s front gate manually.
- List of everything that 341 holds throughout the game:
- First flashback team
- Selphie’s current action when escaping from Deling’s mansion (changes the dialogue)
- FH Concert Crappiness
- Something in B-Garden classroom during the paratrooper attack.
- Vars 753–1023 — verified unused, usable as free persistent storage for mods. Confirmed on three independent axes: (a) referenced by no field script (all 882
*.jsmre-scanned for every PSHM/POPM/PSHSM opcode), (b) referenced by no EXE code (full binary scan for any instruction embedding an address in that range), and (c) zero in every real save (28 Steam.ff8saves decoded). The region’s save-image offset is464 + 3344 + var = 3808 + var, so vars 753–1023 occupy image bytes 4561–4831, which lie inside the save CRC span (bytes 80–5023); the game recomputes that CRC on every save, so values written here at runtime persist through a normal save/load with no extra hooking. Unlike the temporary variables at ≥1024, these bytes are never cleared on field entry. Runtime address of a given var =0x1CFE9B8 + var(e.g. var 753 =0x1CFECA9).
Field-script usage (JSM bytecode scan)
The table below is generated by scanning every field script in the game — all 882 *.jsm files under field/mapdata/. Field scripts read and write variables through nine bytecode opcodes; each instruction is a little-endian dword whose high byte is the opcode and whose low 24 bits are the operand. For these opcodes the operand is the byte offset (= variable number):
| Opcode | Mnemonic | Access | Opcode | Mnemonic | Access |
|---|---|---|---|---|---|
| 10 | PSHM_B | read (u8) | 11 | POPM_B | write (u8) |
| 12 | PSHM_W | read (u16) | 13 | POPM_W | write (u16) |
| 14 | PSHM_L | read (u32) | 15 | POPM_L | write (u32) |
| 16 | PSHSM_B | read (s8) | 17 | PSHSM_W | read (s16) |
| 18 | PSHSM_L | read (s32) |
(Opcode numbers verified from the interpreter dispatch table funcs_52A647 (see address table below); the JSM code array begins at file offset u16@6.) A variable that appears here is genuinely used by field scripts; one that is absent (e.g. everything in the 410–431, 461–473, 494–527, 540–591 “unused” gaps) is not touched by any field script, which is a strong independent confirmation of the “unused in fields” rows above.
The field-name prefix identifies the location, which usually reveals what a variable is for. Legend for the prefixes seen below:
bg=Balamb Garden · bc=Balamb Town · bd=Fire Cavern · bv=Balamb (boat/train) · cr=Centra Ruins (Odin) · cw=Chocobo Forest · dd=Deep Sea Research · do=Dollet · ea=Esthar Airstation · eb=Esthar streets · ec=Esthar City · ed=Edea’s House · em=Esthar Lab (Odine) · ep=Esthar Palace · es/et/eh/ew/el/ee=Esthar (misc) · fe/ff=Ultimecia Castle · fh=Fisherman’s Horizon · gf=Winhill · gg=Galbadia Garden · gl=Deling City · gm=Galbadia Missile Base · gn=Tomb of the Unknown King · gp=D-District Prison · lo=Intro/Logo · rg=Ragnarok · ss=Space station/Lunar · tg/ti=Timber · tm=Shumi Village · te=test/debug maps.
A few results worth calling out:
- var 261 — heavily used (82 fields, all over the world map): a real, active general-purpose flag, previously “not investigated”.
- vars 264–270 (worldmap-variant cluster) are written by field scripts too, confirming they are ordinary savemap variables and not engine scratch.
- The location-coded blocks confirm many guesses: 387/400/404 are all Winhill (
gf), 436/437 are the D-District Prison (gp), 358/359 Centra Ruins + space, 484/487/492/493 the Missile Base (gm), 485/486/491 the Tomb of the Unknown King (gn), 320–334/369–377 Ultimecia Castle (fe/ff), and 752 is Ragnarok (rg). - The scan also resolved several bytes previously marked “not investigated”/”Unknown”: 337 = Galbadia Garden water (
gl), 448 = a BG 2F classroom panel (bg2f_22only), 533–539 / 595–624 / 626–691 = large per-town/city local-flag clusters (Dollet/Timber/Esthar, FH/D-District, Balamb-city/BG-library/Esthar-city — the Esthar walkway gates 672/673 are the single busiest bytes in the whole block), and 726/729/732 are all read bybgrank1(the SeeD-rank field), i.e. town-conduct inputs — 732 is written only by the Fire Cavern fieldbdifrit1. - Temporary/scratch variables (offsets 1024–1074 observed) are used everywhere, as expected.
- Vars 753–1023 (271 bytes) are verified free for modding — see note 6.
Who accesses the variable block
The block is shared savemap state. Besides the field scripts (*.jsm) scanned above, it is read/written by several other EXE modules — there is no separate scripting language for it apart from the field JSM. The consumers found in the binary (via the VAR_MAP_ADDRESS pointer) are:
- Field script-command handlers — the
SCRIPT_*engine functions behind field opcodes (e.g.SCRIPT_ADDGIL,SCRIPT_CARDGAME,SCRIPT_DRAWPOINT,SCRIPT_JOIN/SCRIPT_SPLIT,SCRIPT_JUNCTION,SCRIPT_SEALEDOFF,SCRIPT_ADDSEEDLEVEL) read/write vars on a script’s behalf. - Field per-frame update (
sub_529FF0) and world-map per-frame update (sub_6519D0, viaFFWorldDirector) — both tick Steps, SeeD pay, SeeD rank, walking HP-regen and Angelo points directly in the block. - World-map module —
FFWorldInit,jumpFromFieldToWorldmap/jumpFromWorldmapToField,World_BuildObjectInstanceList,World_MusicChanger(worldmap variant, field↔worldmap transitions, music). - Battle module — reads a few entries (e.g.
Battle_KeepMusicAfterBattlefor music retention); battle results (kills, deaths, gil, battles-won) are written back to the block after combat. - Menu / save-data code and new-game init (
newgame_startgame) — display values (gil, SeeD rank) and set the block’s starting state.
The monster battle AI and world-map encounter logic use their own separate variable spaces and do not address this block directly (apart from boss-fight HP mirror values such as vars 350–357 / 380 / 443, which the special-battle setup reads from here).
| Var | Reads | Writes | #Fields | Areas | Example field folders |
|---|---|---|---|---|---|
| 16 | 26 | 24 | 8 | bg(1) dd(1) fh(1) | bgrank1, ddruins6, fhwater1 |
| 20 | 2 | 0 | 1 | tg(1) | tgcourt1 |
| 26 | 3 | 0 | 2 | do(2) | dosea_2, dotown_1 |
| 28 | 1 | 0 | 1 | bg(1) | bgroom_1 |
| 34 | 1 | 0 | 1 | bg(1) | bgroom_1 |
| 44 | 1 | 0 | 1 | bg(1) | bgroom_1 |
| 50 | 1 | 0 | 1 | bg(1) | bgroom_1 |
| 68 | 5 | 0 | 4 | do(2) gf(2) | dosea_2, dotown_1, gfelone2 |
| 72 | 108 | 0 | 36 | cw(7) ti(6) bc(4) | bcgate_1, bchtl_1, bcport1b |
| 76 | 4 | 0 | 3 | gl(2) bg(1) | bg2f_1a, glhtl1, glyagu2 |
| 80 | 159 | 2 | 48 | bg(12) gl(9) do(4) | bg2f_11, bg2f_21, bg2f_31 |
| 84 | 721 | 5 | 218 | bg(41) ec(23) gl(15) | bccent1a, bccent_1, bcform_1 |
| 86 | 41 | 2 | 7 | bc(1) do(1) ec(1) | bcgate_1, dogate_2, ecenter2 |
| 87 | 25 | 0 | 17 | eb(4) bg(3) gl(3) | bgryo2_1, bgsido_2, bgsido_5 |
| 88 | 86 | 0 | 15 | eb(2) gn(2) gp(2) | ddruins6, dopub_2, ebadele2 |
| 100 | 0 | 2 | 1 | lo(1) | logo |
| 256 | 5868 | 1072 | 517 | bg(100) gl(53) fh(37) | bccent_1, bcform_1, bcgate_1 |
| 258 | 4 | 2 | 2 | gp(1) te(1) | gpbigin2 |
| 261 | 423 | 187 | 82 | bg(10) gl(8) do(6) | bchtr_1, bcmin22a, bghall2a |
| 264 | 14 | 9 | 8 | bg(2) gp(2) bc(1) | bchtl1a, bggate_6, bgsido_7 |
| 265 | 13 | 13 | 10 | gp(2) ti(2) bc(1) | bcgate_1, bgsido_7, bvcar_1 |
| 266 | 26 | 52 | 18 | te(6) ep(4) bg(2) | bgmast_6, bgsido_8, eaplane1 |
| 268 | 0 | 11 | 10 | bv(3) bc(2) rg(2) | bcform_1, bcport_2, bgmast_6 |
| 269 | 0 | 6 | 6 | bg(2) ea(1) eb(1) | bghoke_2, bgsido_7, eaplane1 |
| 270 | 0 | 1 | 1 | ec(1) | ecpview2 |
| 272 | 1115 | 233 | 172 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 273 | 1113 | 233 | 172 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 274 | 1113 | 233 | 172 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 275 | 1113 | 233 | 172 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 276 | 1113 | 233 | 172 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 277 | 1113 | 233 | 172 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 278 | 1130 | 234 | 172 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 279 | 1113 | 233 | 172 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 280 | 2111 | 2273 | 172 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 281 | 2111 | 2273 | 172 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 282 | 2111 | 2273 | 172 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 283 | 2111 | 2273 | 172 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 284 | 2111 | 2273 | 172 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 285 | 2111 | 2273 | 172 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 286 | 2111 | 2273 | 172 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 287 | 2111 | 2273 | 172 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 288 | 454 | 228 | 170 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 289 | 907 | 228 | 170 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 290 | 916 | 228 | 170 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 291 | 235 | 228 | 170 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 292 | 2103 | 5711 | 170 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 293 | 287 | 3649 | 170 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 294 | 17 | 121 | 11 | es(2) bc(1) do(1) | bcsta_1, dopub_2, ephall1 |
| 295 | 1978 | 149 | 172 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 296 | 3768 | 1818 | 171 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 297 | 9579 | 3634 | 171 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 298 | 817 | 456 | 171 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 299 | 3717 | 121 | 171 | bg(29) ec(21) ti(15) | bcform_1, bcgate_1, bcmin11a |
| 300 | 35 | 25 | 2 | do(1) te(1) | dopub_2 |
| 304 | 47 | 18 | 14 | gl(3) te(3) bc(2) | bcform_1, bchtr_1, bgroom_6 |
| 305 | 36 | 13 | 12 | bg(2) te(2) tv(2) | bghoke_2, bgroom_6, crview1 |
| 320 | 24 | 12 | 5 | fe(5) | feart1f1, feart1f2, feart2f1 |
| 321 | 40 | 12 | 4 | fe(4) | feart1f1, feart1f2, feart2f1 |
| 322 | 40 | 12 | 4 | fe(4) | feart1f1, feart1f2, feart2f1 |
| 323 | 40 | 12 | 4 | fe(4) | feart1f1, feart1f2, feart2f1 |
| 324 | 40 | 12 | 4 | fe(4) | feart1f1, feart1f2, feart2f1 |
| 325 | 40 | 12 | 4 | fe(4) | feart1f1, feart1f2, feart2f1 |
| 326 | 40 | 12 | 4 | fe(4) | feart1f1, feart1f2, feart2f1 |
| 327 | 40 | 12 | 4 | fe(4) | feart1f1, feart1f2, feart2f1 |
| 328 | 40 | 12 | 4 | fe(4) | feart1f1, feart1f2, feart2f1 |
| 329 | 40 | 12 | 4 | fe(4) | feart1f1, feart1f2, feart2f1 |
| 330 | 40 | 12 | 4 | fe(4) | feart1f1, feart1f2, feart2f1 |
| 331 | 40 | 12 | 4 | fe(4) | feart1f1, feart1f2, feart2f1 |
| 332 | 28 | 12 | 4 | fe(4) | feart1f1, feart1f2, feart2f1 |
| 333 | 29 | 17 | 2 | fe(1) ff(1) | fetre1, ffbrdg1 |
| 334 | 28 | 8 | 2 | fe(1) te(1) | feroad1 |
| 335 | 1 | 1 | 1 | ea(1) | eapod1 |
| 336 | 110 | 79 | 12 | gl(11) lo(1) | glfurin4, glfury1, glgate1 |
| 337 | 25 | 6 | 6 | gl(6) | glfurin1, glfurin3, glprein1 |
| 338 | 36 | 7 | 6 | gl(4) bc(2) | bccent12, bccent15, glwater1 |
| 339 | 104 | 74 | 7 | gl(5) cr(2) | crtower1, crtower2, glfurin1 |
| 340 | 230 | 102 | 24 | gl(11) bg(9) fh(2) | bg2f_31, bgbtl_1, bggate6a |
| 341 | 24 | 24 | 7 | fh(2) gl(2) bg(1) | bgroom_3, fhpanel1, fhwise13 |
| 342 | 40 | 44 | 8 | gl(8) | glgate1, glgate3, glmall1 |
| 343 | 42 | 11 | 17 | gg(16) te(1) | ggele1, gggro1, gggroen2 |
| 344 | 35 | 18 | 9 | gg(5) bg(3) te(1) | bg2f_11, bg2f_21, bgkote_5 |
| 345 | 41 | 14 | 20 | cr(11) gg(4) ee(3) | crenter1, crodin1, cropen1 |
| 346 | 76 | 2 | 3 | fh(3) | fhwise12, fhwise13, fhwise15 |
| 347 | 76 | 2 | 2 | fh(2) | fhwise12, fhwise13 |
| 348 | 77 | 2 | 2 | fh(2) | fhwise12, fhwise13 |
| 349 | 77 | 2 | 2 | fh(2) | fhwise12, fhwise13 |
| 350 | 0 | 2 | 2 | bg(1) te(1) | bg2f_31 |
| 352 | 0 | 2 | 2 | bg(1) te(1) | bg2f_31 |
| 354 | 15 | 5 | 3 | bg(2) te(1) | bg2f_31, bgbtl_1 |
| 356 | 13 | 5 | 3 | bg(2) te(1) | bg2f_31, bgbtl_1 |
| 358 | 54 | 27 | 21 | cr(11) ss(6) te(2) | bgkote_3, crenter1, crodin1 |
| 359 | 45 | 18 | 8 | cr(6) te(2) | crpower1, crroof1, crtower1 |
| 360 | 38 | 33 | 2 | fh(2) | fhedge11, fhwise13 |
| 364 | 2 | 1 | 3 | cr(3) | crroof1, crsphi1, crtower3 |
| 365 | 2 | 1 | 3 | cr(3) | crroof1, crsphi1, crtower3 |
| 366 | 2 | 1 | 3 | cr(3) | crroof1, crsphi1, crtower3 |
| 367 | 2 | 1 | 3 | cr(3) | crroof1, crsphi1, crtower3 |
| 368 | 2 | 1 | 3 | cr(3) | crroof1, crsphi1, crtower3 |
| 369 | 36 | 13 | 6 | ff(2) gl(2) fe(1) | felrele1, ffhole1, ffhole1a |
| 370 | 161 | 88 | 10 | fe(8) ff(1) te(1) | fehall1, felfst1, felrele1 |
| 372 | 21 | 11 | 11 | fe(11) | feart1f1, feart2f1, febarac1 |
| 373 | 25 | 7 | 9 | fe(8) te(1) | febrdg1, fegate1, fejail1 |
| 374 | 136 | 49 | 38 | fe(38) | fe2f1, feart1f1, feart1f2 |
| 375 | 25 | 6 | 7 | fe(7) | febrdg1, fegate1, fepic1 |
| 376 | 7 | 3 | 3 | fe(3) | febrdg1, fegate1, fewater2 |
| 377 | 9 | 8 | 2 | fe(2) | fewater1, fewor2 |
| 378 | 66 | 70 | 12 | cr(11) te(1) | crenter1, crodin1, cropen1 |
| 380 | 4 | 2 | 2 | bg(1) te(1) | bg2f_31 |
| 384 | 27 | 10 | 4 | bg(3) te(1) | bggate_1, bgroom_4, bgroom_5 |
| 385 | 4 | 2 | 1 | gl(1) | glclub1 |
| 387 | 37 | 13 | 10 | gf(10) | gfcross1, gfelone1, gfelone2 |
| 388 | 6 | 3 | 1 | ti(1) | timania5 |
| 389 | 6 | 4 | 3 | ti(3) | timania1, timania2, timania3 |
| 390 | 1 | 1 | 1 | eh(1) | ehback2 |
| 391 | 9 | 5 | 1 | ep(1) | epwork3 |
| 392 | 12 | 7 | 3 | bg(2) eh(1) | bgroom_5, bgroom_6, ehback2 |
| 400 | 1 | 1 | 2 | gf(2) | gfelone2, gflain2 |
| 404 | 1 | 1 | 1 | gf(1) | gflain2 |
| 409 | 48 | 25 | 1 | bg(1) | bgroom_6 |
| 432 | 11 | 5 | 2 | bg(2) | bghall_1, bghall_6 |
| 433 | 97 | 33 | 24 | bg(22) te(2) | bg2f_4, bggate_1, bggate_6 |
| 434 | 53 | 24 | 9 | bg(7) te(2) | bg2f_2, bg2f_4, bghall_1 |
| 435 | 31 | 13 | 6 | bg(5) te(1) | bg2f_2, bg2f_22, bg2f_3 |
| 436 | 101 | 13 | 16 | gp(12) te(2) bg(1) | bgmon_4, edmoor1, gpbig1 |
| 437 | 100 | 68 | 22 | gp(10) rg(8) bg(3) | bggate_1, bgryo2_1, bgsido_5 |
| 438 | 61 | 34 | 16 | bg(15) te(1) | bgbook1a, bgeat1a, bggate_2 |
| 439 | 30 | 17 | 8 | bg(7) te(1) | bgbook1a, bgeat1a, bghall1b |
| 440 | 41 | 10 | 8 | bg(7) te(1) | bghall1b, bghoke_1, bgkote1a |
| 441 | 40 | 17 | 15 | bg(14) te(1) | bg2f_22, bg2f_3, bgbook1a |
| 442 | 28 | 5 | 3 | bg(2) te(1) | bghall_5, bgryo2_1 |
| 445 | 34 | 22 | 9 | rg(8) te(1) | rgair1, rgexit1, rgguest2 |
| 446 | 86 | 58 | 9 | rg(8) te(1) | rgair1, rgexit1, rgguest2 |
| 447 | 16 | 24 | 8 | rg(8) | rgair1, rgexit1, rgguest2 |
| 448 | 2 | 3 | 1 | bg(1) | bg2f_22 |
| 450 | 19 | 10 | 6 | bg(5) gp(1) | bggate_5, bgmon_2, bgryo2_1 |
| 451 | 30 | 13 | 9 | eb(8) gp(1) | ebroad12, ebroad13, ebroad42 |
| 452 | 8 | 3 | 4 | eb(4) | ebadele1, ebgate3, ebinlow1 |
| 453 | 2 | 3 | 2 | gp(2) | gpbig1a, gpgmn1a |
| 454 | 2 | 3 | 2 | gp(2) | gpbig1a, gpgmn1a |
| 455 | 2 | 3 | 2 | gp(2) | gpbig1a, gpgmn1a |
| 458 | 10 | 5 | 5 | bg(4) fh(1) | bg2f_3, bghall3a, bghall_3 |
| 459 | 3 | 2 | 2 | bg(2) | bgmon_1, bgmon_6 |
| 460 | 23 | 11 | 8 | bg(5) gp(1) rg(1) | bg2f_2, bgmon_4, bgrank1 |
| 474 | 11 | 4 | 4 | rg(3) bg(1) | bg2f_1, rgair2, rgexit2 |
| 475 | 90 | 17 | 17 | bg(7) rg(7) ea(1) | bg2f_1, bghall3a, bghoke_1 |
| 476 | 23 | 10 | 6 | bg(5) te(1) | bg2f_1, bghall1b, bghall3a |
| 477 | 38 | 20 | 7 | bg(6) te(1) | bg2f_1, bghall1b, bghall_5 |
| 478 | 51 | 52 | 22 | bg(19) te(2) fh(1) | bg2f_1, bg2f_2, bg2f_22 |
| 479 | 159 | 42 | 162 | bg(65) eb(46) gp(24) | bg2f_1, bg2f_2, bg2f_22 |
| 480 | 9 | 3 | 1 | bg(1) | bgroom_1 |
| 481 | 27 | 6 | 2 | bg(1) te(1) | bgeat_2 |
| 482 | 17 | 3 | 1 | gm(1) | gmmoni1 |
| 484 | 264 | 57 | 16 | gm(13) te(2) bg(1) | bgmast_6, gmcont1, gmcont2 |
| 485 | 13 | 2 | 2 | gn(2) | gnroom4, gnview1 |
| 486 | 566 | 255 | 10 | gn(10) | gnroad1, gnroad2, gnroad3 |
| 487 | 27 | 18 | 8 | gm(6) bg(1) te(1) | bgroom_1, gmcont1, gmcont2 |
| 488 | 81 | 26 | 5 | fh(2) bg(1) gm(1) | bgeat_1, fhtown23, fhtown24 |
| 489 | 48 | 17 | 5 | fh(2) bg(1) ew(1) | bgeat_1, ewpanel2, fhtown22 |
| 490 | 10 | 2 | 1 | bg(1) | bgeat_1 |
| 491 | 34 | 6 | 7 | gn(7) | gnroad1, gnroad2, gnroad5 |
| 492 | 40 | 8 | 11 | gm(11) | gmcont1, gmcont2, gmden1 |
| 493 | 16 | 1 | 11 | gm(11) | gmcont1, gmcont2, gmden1 |
| 528 | 463 | 147 | 49 | ti(25) se(10) do(5) | bgmast_6, cdfield1, cdfield2 |
| 530 | 206 | 65 | 24 | do(22) bg(1) te(1) | bgrank1, doan1_1, doan1_2 |
| 531 | 1 | 2 | 2 | do(1) te(1) | dosea_2 |
| 532 | 2 | 18 | 4 | do(3) te(1) | dogate_1, dosea_2, dotown_1 |
| 533 | 42 | 23 | 10 | do(9) te(1) | dohtl_1, domin2_1, domt1_1 |
| 534 | 55 | 14 | 7 | do(6) te(1) | domin2_1, domt5_1, doopen1a |
| 535 | 53 | 18 | 11 | ti(10) te(1) | tiagit2, tigate1, timin21 |
| 536 | 28 | 8 | 9 | ti(8) do(1) | dopub_3, tiagit4, tiback1 |
| 537 | 112 | 23 | 22 | eb(20) te(2) | ebexit1, ebexit2, ebexit3 |
| 538 | 29 | 10 | 10 | eb(5) cd(2) ed(2) | cdfield2, cdfield3, ebroad11 |
| 539 | 56 | 21 | 10 | eb(4) ef(2) se(2) | ebexit3, ebroad11, ebroad12 |
| 592 | 79 | 22 | 6 | bv(5) te(1) | bvtr_1, bvtr_2, bvtr_3 |
| 593 | 4 | 3 | 3 | rg(1) sd(1) te(1) | rgcock2, sdcore2 |
| 595 | 14 | 17 | 6 | fh(3) dd(2) te(1) | ddtower5, ddtower6, fhbrdg1 |
| 596 | 2 | 4 | 1 | bg(1) | bggate_1 |
| 597 | 10 | 5 | 3 | fh(3) | fhhtl1, fhhtr1, fhtown1 |
| 598 | 32 | 17 | 7 | fh(6) te(1) | fhdeck1, fhfish1, fhhtr1 |
| 599 | 32 | 14 | 8 | cw(6) fh(2) | cwwood1, cwwood2, cwwood3 |
| 600 | 12 | 9 | 5 | fh(4) te(1) | fhbrdg1, fhdeck6, fhroof1 |
| 601 | 52 | 11 | 9 | fh(5) tm(3) te(1) | fhbrdg1, fhhtl1, fhhtr1 |
| 602 | 10 | 14 | 5 | dd(4) te(1) | ddsteam1, ddtower1, ddtower3 |
| 603 | 17 | 13 | 5 | dd(4) te(1) | ddtower1, ddtower3, ddtower4 |
| 604 | 7 | 17 | 4 | dd(3) te(1) | ddtower1, ddtower4, ddtower5 |
| 605 | 42 | 20 | 13 | dd(11) ec(1) te(1) | ddruins1, ddruins2, ddruins3 |
| 606 | 14 | 8 | 4 | fh(3) tm(1) | fhfish1, fhmin1, fhwater1 |
| 607 | 64 | 10 | 9 | tm(7) fh(1) te(1) | fhmin1, tmdome1, tmelder1 |
| 608 | 36 | 20 | 5 | tm(4) te(1) | tmelder1, tmgate1, tmkobo2 |
| 609 | 13 | 13 | 9 | tm(8) te(1) | tmele1, tmgate1, tmhtl1 |
| 610 | 27 | 11 | 7 | tm(6) te(1) | tmgate1, tmkobo2, tmmin1 |
| 611 | 6 | 15 | 8 | tm(6) fh(2) | fhbrdg1, fhdeck6, tmgate1 |
| 612 | 46 | 18 | 8 | tm(7) te(1) | tmelder1, tmgate1, tmkobo1 |
| 613 | 33 | 5 | 3 | fh(1) te(1) tm(1) | fhmin1, tmmin1 |
| 614 | 44 | 57 | 11 | dd(6) sd(3) rg(1) | ddtower1, ddtower2, ddtower3 |
| 615 | 77 | 81 | 9 | dd(8) te(1) | ddruins6, ddsteam1, ddtower1 |
| 616 | 49 | 31 | 8 | cw(7) te(1) | cwwood1, cwwood2, cwwood3 |
| 617 | 54 | 31 | 8 | cw(7) te(1) | cwwood1, cwwood2, cwwood3 |
| 618 | 53 | 31 | 8 | cw(7) te(1) | cwwood1, cwwood2, cwwood3 |
| 619 | 27 | 4 | 1 | cw(1) | cwwood4 |
| 620 | 53 | 31 | 8 | cw(7) te(1) | cwwood1, cwwood2, cwwood3 |
| 621 | 56 | 30 | 8 | cw(7) te(1) | cwwood1, cwwood2, cwwood3 |
| 622 | 54 | 31 | 8 | cw(7) te(1) | cwwood1, cwwood2, cwwood3 |
| 623 | 66 | 10 | 8 | tm(8) | tmelder1, tmele1, tmgate1 |
| 624 | 136 | 43 | 20 | bc(9) tg(7) bg(2) | bccent_1, bcgate_1, bchtl_1 |
| 625 | 61 | 33 | 15 | bc(14) te(1) | bccent_1, bcform_1, bcgate_1 |
| 626 | 64 | 38 | 11 | bc(10) te(1) | bccent_1, bcform_1, bcgate_1 |
| 627 | 78 | 43 | 11 | bc(10) te(1) | bccent_1, bcform_1, bcgate_1 |
| 629 | 3 | 6 | 4 | bc(3) te(1) | bcform_1, bcgate_1, bcport1a |
| 630 | 60 | 43 | 10 | bc(9) te(1) | bccent_1, bcform_1, bcgate_1 |
| 631 | 26 | 15 | 10 | bc(8) bg(1) te(1) | bccent_1, bcform_1, bcgate_1 |
| 632 | 45 | 31 | 10 | bc(7) bg(3) | bcform_1, bcgate_1, bchtl_1 |
| 633 | 65 | 29 | 12 | bc(6) bg(3) tg(2) | bcform_1, bcgate_1, bcmin1_1 |
| 634 | 5 | 14 | 5 | bg(5) | bgbook1b, bgbook_1, bgbook_2 |
| 636 | 12 | 2 | 1 | gf(1) | gfvill1a |
| 638 | 37 | 18 | 4 | bg(3) te(1) | bgmast_1, bgmast_3, bgmast_5 |
| 640 | 35 | 12 | 3 | tg(2) te(1) | tgcourt1, tgfront1 |
| 641 | 34 | 12 | 8 | tg(6) bc(1) te(1) | bcgate1a, tgfront1, tggara1 |
| 642 | 41 | 24 | 12 | bc(9) tg(2) te(1) | bccent1a, bccent_1, bcgate_1 |
| 643 | 83 | 47 | 15 | bc(12) bg(2) te(1) | bccent1a, bcform1a, bcform_1 |
| 644 | 54 | 32 | 17 | bc(13) bg(3) te(1) | bccent1a, bcform_1, bcgate1a |
| 645 | 36 | 12 | 3 | bg(2) te(1) | bgbook1b, bgbook_2 |
| 646 | 85 | 38 | 12 | bc(11) te(1) | bccent1a, bcform1a, bcgate1a |
| 647 | 17 | 4 | 8 | bc(7) te(1) | bccent1a, bcform1a, bcmin21a |
| 648 | 78 | 43 | 14 | bc(13) te(1) | bccent1a, bcform1a, bcgate1a |
| 649 | 62 | 23 | 12 | bc(11) te(1) | bccent1a, bcform1a, bcgate1a |
| 656 | 5 | 1 | 5 | bc(5) | bccent1a, bcport1b, bcport2a |
| 658 | 4 | 5 | 5 | bc(5) | bccent1a, bcport1b, bcport2a |
| 659 | 57 | 15 | 8 | bg(5) bc(2) te(1) | bchtl_1, bchtr_1, bgbook1b |
| 660 | 125 | 44 | 13 | bc(6) bg(6) te(1) | bcform_1, bcgate_1, bchtl_1 |
| 661 | 38 | 20 | 12 | bg(4) gf(4) bc(3) | bcform_1, bcgate_1, bcsta_1 |
| 662 | 50 | 14 | 6 | gf(5) te(1) | gfhtl1a, gfhtr1a, gflain1a |
| 663 | 44 | 16 | 6 | gf(5) bg(1) | bgbook_1, gflain1a, gflain2a |
| 664 | 21 | 10 | 5 | bc(3) gf(2) | bccent1a, bcgate1a, bcport1b |
| 665 | 47 | 19 | 12 | bc(7) bg(4) te(1) | bcform_1, bcgate_1, bchtl_1 |
| 666 | 6 | 2 | 3 | bg(3) | bgbook1b, bgbook_1, bgbook_2 |
| 668 | 15 | 7 | 7 | bc(5) gf(1) te(1) | bcmin21a, bcmin2_1, bcport1b |
| 672 | 336 | 58 | 38 | ec(28) em(5) fh(2) | eccway11, eccway12, eccway21 |
| 675 | 1 | 2 | 2 | gl(1) te(1) | glhtr1 |
| 677 | 36 | 22 | 18 | ec(14) em(4) | eccway11, eccway12, eccway21 |
| 678 | 21 | 4 | 8 | ec(8) | eccway11, eccway12, eccway21 |
| 680 | 10 | 5 | 5 | ec(4) te(1) | eccway11, eccway12, eccway41 |
| 681 | 34 | 17 | 3 | ec(2) ep(1) | ecmall1, ecmall1a, ephall2 |
| 682 | 26 | 7 | 5 | ec(3) ep(2) | eccway11, eccway31, ecpway1 |
| 683 | 7 | 3 | 2 | ec(1) te(1) | eccway21 |
| 684 | 5 | 3 | 2 | em(2) | emlabo1b, emlobby3 |
| 685 | 32 | 17 | 6 | ec(5) te(1) | eccway31, eccway41, eciway11 |
| 686 | 12 | 5 | 3 | ec(3) | ecenter1, ecmway1, ecoway1 |
| 687 | 20 | 40 | 20 | ec(20) | eccway11, eccway12, eccway21 |
| 688 | 5 | 3 | 1 | ep(1) | epmeet1 |
| 689 | 6 | 5 | 2 | em(1) te(1) | emlabo1 |
| 690 | 2 | 1 | 1 | ec(1) | ecpview1 |
| 691 | 4 | 2 | 2 | bg(2) | bgmd4_1, bgmd4_2 |
| 720 | 361 | 69 | 91 | bg(56) bc(14) bd(8) | bccent_1, bcform_1, bcgate_1 |
| 721 | 173 | 39 | 85 | bg(52) bc(14) bd(8) | bccent_1, bcform_1, bcgate_1 |
| 722 | 177 | 34 | 77 | bg(48) bc(14) bd(8) | bccent_1, bcform_1, bcgate_1 |
| 723 | 43 | 19 | 32 | bc(14) bg(8) tg(5) | bccent_1, bcform_1, bcgate_1 |
| 724 | 31 | 33 | 10 | ti(6) do(2) bg(1) | bgrank1, dosea_2, dotown_1 |
| 726 | 12 | 7 | 8 | ti(4) do(2) bg(1) | bgrank1, dosea_2, dotown_1 |
| 728 | 104 | 46 | 29 | do(9) ss(4) te(4) | bgrank1, bgroom_6, doani3_2 |
| 729 | 14 | 10 | 9 | ti(3) do(2) te(2) | bgrank1, dosea_2, dotown_1 |
| 730 | 65 | 27 | 33 | bg(15) gn(9) te(4) | bg2f_2, bgbook1b, bgbook_1 |
| 732 | 11 | 1 | 2 | bd(1) bg(1) | bdifrit1, bgrank1 |
| 734 | 60 | 35 | 6 | bg(4) te(2) | bggate_1, bgmast_4, bgryo2_1 |
| 735 | 28 | 12 | 10 | bg(9) te(1) | bgbook_3, bgeat_1, bghall3a |
| 752 | 31 | 22 | 7 | rg(6) ec(1) | ecpview2, rgcock2, rgcock4 |
(Temporary/scratch variables at offsets 1024–1074 are also used across many fields; they are volatile per-map scratch and are omitted from this table.)
Struct (IDA SavemapVariables)
This is the layout applied to VARMAP_START in the FF8_EN.exe database. It is a packed struct (no padding), so every field’s offset equals its variable number in the table above. MapSeal, VarMiscFlag and SomeVarFlag are the game’s own enum types; unused*/unk*/notInvestigated* bytes are gaps.
#pragma pack(push, 1)
struct SavemapVariables
{
// 0x00: Unused in fields (always "FF-8")
__int32 literally_ff8_text;
__int32 Steps; // 0x04 Steps (random encounter counter)
__int32 SeedPay; // 0x08 Payslip
__int32 linked_healing_move_up; // 0x0C (unused in fields)
__int16 SeeDRankPoints; // 0x10 SeeD rank points (rank = clamp(v,100,3100)/100)
__int8 unused3[2]; // 0x12
__int32 BattlesWon; // 0x14
__int8 unused4[2]; // 0x18
__int16 BattlesEscaped; // 0x1A
__int16 SquallKills; // 0x1C
__int16 ZellKills; // 0x1E
__int16 IrvineKills; // 0x20
__int16 QuistisKills; // 0x22
__int16 RinoaKills; // 0x24
__int16 SelphieKills; // 0x26
__int16 SeiferKills; // 0x28
__int16 EdeaKills; // 0x2A
__int16 SquallDeaths; // 0x2C
__int16 ZellDeaths; // 0x2E
__int16 IrvineDeaths; // 0x30
__int16 QuistisDeaths; // 0x32
__int16 RinoaDeaths; // 0x34
__int16 SelphieDeaths; // 0x36
__int16 SeiferDeaths; // 0x38
__int16 EdeaDeaths; // 0x3A
__int8 unused5[8]; // 0x3C
__int32 TotalEnemiesKilled; // 0x44
__int32 PartyGil; // 0x48
__int32 LagunaPartyGil; // 0x4C
__int32 MovieFrameCount; // 0x50
__int16 LastAreaVisited; // 0x54
__int8 CurrentCarRent; // 0x56
__int8 EngineVar1; // 0x57 (music-related engine var)
__int8 EngineVar2; // 0x58 (save-point / Siren Move-Find engine var)
__int8 unused6[15]; // 0x59
VarMiscFlag miscFlag; // 0x68 SALARYDISPON/MUSICLOAD/PHSPOWER related
__int32 MusicRelated; // 0x6C Music retention (-1 = stop after battle)
__int32 unused7; // 0x70
__int8 FieldDrawPoints[44]; // 0x74
__int8 WorldmapDrawPoints[20]; // 0xA0
// 0xB4..0xF3: engine-only display/timer state (unused by field scripts)
__int8 unk7777; // 0xB4
__int8 unk7778; // 0xB5
__int8 showTimer; // 0xB6
__int8 unk7770; // 0xB7
__int8 unk777[20]; // 0xB8 (battle-music A/B toggle at ~0xC9/0xCB)
__int8 unk11; // 0xCC
__int8 timer_x_position; // 0xCD
__int8 timer_y_position; // 0xCE
__int8 battleOff; // 0xCF
__int8 unk15; // 0xD0
SomeVarFlag canSaveHere; // 0xD1
__int8 unk[30]; // 0xD2
__int8 unk1; // 0xF0
__int8 unk2; // 0xF1
__int8 unk3; // 0xF2
MapSeal map_seal; // 0xF3
__int8 unk5[12]; // 0xF4 (vars 244-255, not investigated)
__int16 MainStoryProgress; // 0x100 var 256
__int8 var258; // 0x102
__int8 unused259[2]; // 0x103
__int8 var261; // 0x105
__int8 unused262[2]; // 0x106
__int8 WorldmapVariantFlags; // 0x108 var 264 (bit3/bit4 -> 0x40)
__int8 WorldmapVar265; // 0x109 var 265 (-> wm state +103)
__int8 WorldmapVariantIndex; // 0x10A var 266 (5-case variant selector)
__int8 WorldmapDisc4SubVariant;// 0x10B var 267 (disc-4 sub-variant)
__int8 WorldmapVar268; // 0x10C var 268 (-> wm state +106)
__int8 WorldmapVar269; // 0x10D var 269 (-> wm state +107)
__int8 WorldmapVar270; // 0x10E var 270 (-> wm state +108)
__int8 WorldmapVar271; // 0x10F var 271 (-> wm state +109)
__int8 CardGameVars[28]; // 0x110 vars 272-299 (292 rules, 293 trade rule)
__int8 CardQueenRecards; // 0x12C var 300
__int8 unused301[3]; // 0x12D
__int8 TimberManiacsIssues[2]; // 0x130
__int8 ReservedHacktuarFF8Voice[14]; // 0x132
__int8 UltimeciaGallery[13]; // 0x140
__int8 UltimeciaArmory; // 0x14D
MapSeal UltimeciaSeals; // 0x14E var 334 (SEALEDOFF)
__int8 CardRelated; // 0x14F
__int8 DelingBus; // 0x150
__int8 GGardenWaterFlags337; // 0x151 var 337 (Galbadia Garden water/fountain, gl*)
__int8 DelingSewerGates[3]; // 0x152
__int8 MultiPurposeVar1; // 0x155 var 341 (multi-use, note 5)
__int8 DelingBusSystem; // 0x156
__int8 GGardenDoorFlags1; // 0x157
__int8 GGardenEventDuringGGFlags2; // 0x158
__int8 GGardenDoorFlags3; // 0x159
__int8 FHInstruments[4]; // 0x15A
__int16 HealthBars[4]; // 0x15E var 350-357 (Garden mech fight)
__int8 SpaceStationFlags; // 0x166
__int8 CentraRuinsFlags; // 0x167
__int32 FHMusicChoice; // 0x168
__int8 CentraRuinsCode[5]; // 0x16C
__int8 UltimeciaCastleFlags[2];// 0x171
__int8 unused371; // 0x173
__int8 UltimeciaBossFlags[5]; // 0x174
__int8 UltimeciaOrgan; // 0x179
__int8 CentraRuinsTimer; // 0x17A
__int8 unused379; // 0x17B
__int16 SquallMechHealth; // 0x17C
__int8 unused382[2]; // 0x17E
__int8 LagunaTimePeriods; // 0x180
__int8 LagunaPubDialogue; // 0x181
__int8 unused386; // 0x182
__int8 WinhillProgress; // 0x183
__int8 TimberManiacsLobby; // 0x184
__int8 TimberManiacsOffice; // 0x185
__int8 EdeaHouseFlags; // 0x186
__int8 LagunaOfficeFlags; // 0x187
__int8 EdeaBGComputerVar; // 0x188 var 392
__int8 unused393[7]; // 0x189
__int32 WinhillMonsters; // 0x190
__int32 WinhillMonsters2; // 0x194
__int8 unused408; // 0x198
__int8 BalambComputer; // 0x199
__int8 unused410[22]; // 0x19A
__int8 BGHallFlags; // 0x1B0
__int8 BGFlags[3]; // 0x1B1
__int8 MoombaFriendship; // 0x1B4
__int8 PartyTracking; // 0x1B5
__int8 CidNorgFlags[2]; // 0x1B6
__int8 EventFlags; // 0x1B8 var 440
__int8 CidNorgFlags2; // 0x1B9
__int8 RinoaTourFlags; // 0x1BA
__int16 ZellPrisonHealth; // 0x1BB var 443
__int8 PropagatorFlags[3]; // 0x1BD
__int16 BG2FClassroomVar448; // 0x1C0 var 448 (Balamb Garden 2F classroom study panel, bg2f_22)
__int8 MagazineFlags[2]; // 0x1C2
__int8 LunaticPandora; // 0x1C4
__int8 MoombaTeleport[3]; // 0x1C5
__int8 unused456[2]; // 0x1C8
__int8 MusicSkipFlags[2]; // 0x1CA
__int8 RandomFlags1; // 0x1CC
__int8 unused461[13]; // 0x1CD
__int8 RandomFlags2; // 0x1DA
__int8 CCGroupVars[4]; // 0x1DB
__int8 DisableRandomBattles; // 0x1DF var 479
__int8 ClassroomState; // 0x1E0
__int8 CafeteriaConversation; // 0x1E1
__int16 MissileErrorRatio; // 0x1E2
__int8 MissileBaseProgress; // 0x1E4
__int8 ToUKProgress; // 0x1E5
__int8 ToUKRoom; // 0x1E6
__int8 MissileBaseProgress2; // 0x1E7
__int8 AlternatePartyFlags; // 0x1E8 var 488 (note 1)
__int8 RandomTalkFlags; // 0x1E9
__int8 CafeteriaCutscene; // 0x1EA
__int8 ToUKStuff; // 0x1EB
__int8 MissileBaseDoor; // 0x1EC
__int8 MissileBaseTimer; // 0x1ED
__int8 unused494[34]; // 0x1EE
__int16 SubStoryProgress; // 0x210 var 528
__int8 XATMDefeated; // 0x212
__int8 UnusedVar1_Dollet; // 0x213
__int8 DolletFootsteps; // 0x214
__int8 TownLocalVars533[7]; // 0x215 vars 533-539 (Dollet/Timber/Esthar road+field flags)
__int8 unused540[52]; // 0x21C
__int8 AngleCharacterFacingControl[2]; // 0x250
__int8 unused594; // 0x252
__int8 TownLocalVars595[30]; // 0x253 vars 595-624 (FH / D-District / Timber-Moomba; 614-615 hottest)
__int8 BalambVisitedFlags; // 0x271 var 625
__int8 CityLocalVars626[66]; // 0x272 vars 626-691 (Balamb city / BG library / Winhill / Esthar city; 672-673 hottest)
__int8 unused692[28]; // 0x2B4
__int8 SquallCostume; // 0x2D0 var 720
__int8 ZellCostume; // 0x2D1
__int8 SelphieCostume; // 0x2D2
__int8 QuistisCostume; // 0x2D3
__int16 DolletMissionTime; // 0x2D4
__int16 TownVar726_SeedRankInput; // 0x2D6 var 726 (town conduct, read by bgrank1 SeeD-rank field)
__int8 MultiPurposeVar2; // 0x2D8 var 728 (multi-use, note 3)
__int8 TownVar729_SeedRankInput; // 0x2D9 var 729 (town conduct, read by bgrank1)
__int8 Flags1; // 0x2DA var 730
__int8 unused731; // 0x2DB
__int16 FireCavernVar732_SeedRankInput; // 0x2DC var 732 (Fire Cavern time, written only by bdifrit1, read by bgrank1)
__int8 SplitPartyFlags; // 0x2DE var 734 (note 2)
__int8 BGardenNPCVar735; // 0x2DF var 735 (Balamb Garden interior NPC/state)
__int8 unused736[16]; // 0x2E0
__int8 RagnarokVar752; // 0x2F0 var 752 (Ragnarok interior state, rg*)
__int8 unused753[271]; // 0x2F1 (vars 753-1023, VERIFIED FREE - see note 6)
__int8 tempVars[256]; // 0x400 (vars >=1024, temporary/scratch)
};
#pragma pack(pop)
Function addresses
| Function | Address | Description |
|---|---|---|
VARMAP_START | 0x1cfe9b8 | Global variable/data, not a function — base of the savemap variable block, typed SavemapVariables |
GetSeeDRankFromPoints | 0x4C3090 | Converts SeeD rank points to displayed rank |
Battle_KeepMusicAfterBattle | 0x52CE30 | Reads var 108 to decide whether to carry over field BGM after battle |
World_BuildObjectInstanceList | 0x544860 | Renamed from Wmset_SetupWorldmapVariant in the community IDB; copies worldmap-variant vars into the worldmap state block |
funcs_52A647 | 0xb8de94 | Global variable/data, not a function — field script interpreter opcode dispatch table |
VAR_MAP_ADDRESS | 0xb8ee90 | Global variable/data, not a function — pointer to the savemap variable block, used by non-script EXE consumers |
| Trigger-rect table | 0xC763D2 / 0xC763EE | Global variable/data, not a function — per-variant table overriding worldmap grid segments (0-767) with alternates (768-834) |