Skip to content

Embedded Exe Strings

Vairn edited this page Jun 2, 2026 · 1 revision

Embedded Exe Strings

Navigation: Home - Game systems - Embedded Exe Strings

Generated by tools/extract_embedded_strings.py.

[TOC]

Binary survey

  • Source executable: C:\_20260421_\D-REC\development\MM2\mm2 (181524 bytes)
  • Segment manifest: EXTRACTED/ghidra/mm2_segments.json
  • Code hunk 0: load 0x00000, size 0x2593C (153916 bytes) — main game code + embedded ASCII tables
  • Data hunk 0: load 0x2593C, size 0x21AC — mostly numeric tables; few ASCII strings
  • Code hunk 1 (overlay): load 0x27B1C, size 0x3CB8 — boot errors, Amiga library names, .dat filenames
  • Capstone listing: EXTRACTED/mm2.capstone.asm (PEA PC-relative refs parsed for xrefs)

Encoding

  • Embedded exe strings: raw ASCII, NUL or inline N]Nu / XON]Nu tag prefixes before UI lines.
  • str.dat: (byte + 0x1C) & 0xFF with 0x01 → newline — not used for exe-embedded text.
  • event.dat: per-location 0xFF-terminated string banks; door titles & scripted dialogue.

Extraction summary

Metric Count
Raw ASCII runs (quality-filtered) 982
PEA (PC) xrefs attached 128
Also in str.dat 6
Also in event.dat 6
Exe-only (≥8 clean chars) 680
str.dat blocks loaded 73
event.dat strings loaded 1270

By category

Category Count
misc_code 606
early_tables 77
town_chests_traps 68
code_overlay 46
town_training 34
town_pub_quests 27
combat 24
town_inn 23
town_temple 15
town_blacksmith 14
data_filenames 13
boot_errors 9
amiga_libraries 7
town_names 5
ui_menus 5
boot_meta 3
shop_common 3
town_guild 3

Town service string blocks (exe)

Handlers (OP_0E selectors) live in code hunk 0; most scene dialogue for pub/shop/temple is in str.dat, while inn/rest/chest/trap/shop chrome and many menu labels are embedded next to handlers:

town_inn0x19D00..0x1A200

Inn / rest / registry / dismiss hirelings. 22 strings.

  • 0x19D47 [exe-only] Rest complete, no encounters.
  • 0x19EBF [exe-only] Too dangerous!
  • 0x19ED3 [exe-only] Rest here? (Y/N)
  • 0x19EE4 [exe-only] Not enough gold - Dismiss hirelings
  • 0x19F08 [exe-only] A jolly old innkeeper waves his quill
  • 0x19F2E [exe-only] in the air as he asks, "Will you sign
  • 0x19F54 [exe-only] the registry (y/n)?"
  • 0x19F6A [exe-only] The well-groomed whiskers of the old
  • 0x19F8F [exe-only] concierge twitch as he proclaims, "We
  • 0x19FB5 [exe-only] have the finest suites. Sign
  • 0x19FD3 [exe-only] in (y/n)?"
  • 0x19FDE [exe-only] Ordigon, the elderly innkeeper, rubs
  • 0x1A003 [exe-only] his bushy white mustache and says,
  • 0x1A026 [exe-only] We have cozy, warm beds. Sign-in
  • 0x1A051 [exe-only] The aging host of the sleezy inn
  • 0x1A072 [exe-only] leers at you from behind his desk and
  • 0x1A098 [exe-only] asks, "I suppose your party only wants
  • 0x1A0BF [exe-only] one room. Stay (y/n)?"
  • 0x1A0D7 [exe-only] The proprietor blows a pile of dust
  • 0x1A0FB [exe-only] off the register and asks eagerly,
  • 0x1A11E [exe-only] Can I sign you in (y/n)?"
  • 0x1A1A4 [exe-only] gRBgBg?<

town_pub_quests0x18800..0x18C00

Pub-adjacent quest NPCs (Lord Hoardall etc.). 27 strings.

  • 0x188DA [exe-only] The huge chamber is overstocked with
  • 0x18903 [exe-only] many unusual items. Lord Hoardall
  • 0x18926 [exe-only] begs your party for a favor. Will
  • 0x18949 [exe-only] you gather more items for him (y/n)?
  • 0x1896E [exe-only] Heads of monstrous beasts adorn the
  • 0x18992 [exe-only] walls in this room. Will you gather
  • 0x189B7 [exe-only] more trophies for Lord Slayer (y/n)?
  • 0x189DE [exe-only] Your party must bring me the three
  • 0x18A03 [exe-only] hidden swords of chivalry: Valor,
  • 0x18A27 [exe-only] Honor, and Nobility. Good luck!
  • 0x18A4C [exe-only] Your party must defeat the three royal
  • 0x18A73 [exe-only] envoys of evil that wreak havoc to the
  • 0x18A9A [exe-only] north. One flies, one slithers, and
  • 0x18AC0 [exe-only] one crawls. Good luck!
  • 0x18ADE [exe-only] and return it to me. I wish you
  • 0x18B00 [exe-only] luck, fair travelers!
  • 0x18B1D [exe-only] and destroy it. I wish you luck,
  • 0x18B40 [exe-only] fair travelers!
  • 0x18B5A [exe-only] At what level of
  • 0x18B6B [exe-only] difficulty do you
  • 0x18B7D [exe-only] wish to aid Lord
  • 0x18B8E [exe-only] A) Page's Quest
  • 0x18B9E [exe-only] B) Squire's Quest
  • 0x18BB0 [exe-only] C) Knight's Quest
  • 0x18BC2 [exe-only] D) Lord's Quest
  • 0x18BD2 [exe-only] Your party has already been quested
  • 0x18BF6 [exe-only] to seek out the

town_chests_traps0x1A280..0x1A800

Chest labels + trap messages. 66 strings.

  • 0x1A2C2 [exe-only] Wooden Crate
  • 0x1A2D1 [exe-only] Tin Lockbox
  • 0x1A2DF [exe-only] Steel Safe
  • 0x1A2EC [exe-only] Copper Safe
  • 0x1A2FA [exe-only] Bronze Safe
  • 0x1A308 [exe-only] Steel Safe
  • 0x1A315 [exe-only] Gold Safe
  • 0x1A321 [exe-only] Stasis Safe
  • 0x1A32F [exe-only] Hidden Cache
  • 0x1A33E [exe-only] Wicker Chest
  • 0x1A34D [exe-only] Rusty Trunk
  • 0x1A35B [exe-only] Copper Box
  • 0x1A368 [exe-only] Bronze Box
  • 0x1A375 [exe-only] Steel Box
  • 0x1A381 [exe-only] Gold Box
  • 0x1A38C [exe-only] Doomsday Box
  • 0x1A39B [exe-only] Rotting Box
  • 0x1A3A9 [exe-only] Rusty Chest
  • 0x1A3B7 [exe-only] Stone Chest
  • 0x1A3C5 [exe-only] Copper Chest
  • 0x1A3D4 [exe-only] Bronze Chest
  • 0x1A3E3 [exe-only] Steel Chest
  • 0x1A3F1 [exe-only] Gold Chest
  • 0x1A3FE [exe-only] Statis Box
  • 0x1A40B [exe-only] Wooden Chest
  • 0x1A41A [exe-only] Rusty Chest
  • 0x1A428 [exe-only] Copper Chest
  • 0x1A437 [exe-only] Bronze Chest
  • 0x1A446 [exe-only] Silver Chest
  • 0x1A455 [exe-only] Gold Chest
  • 0x1A462 [exe-only] Platinum Box
  • 0x1A471 [exe-only] Doomsday Box
  • 0x1A480 [exe-only] Ceramic Case
  • 0x1A48F [exe-only] Lacquer Box
  • 0x1A49D [exe-only] Jewelled Box
  • 0x1A4AC [exe-only] Copper Trunk
  • 0x1A4BB [exe-only] Bronze Trunk
  • 0x1A4CA [exe-only] Silver Trunk
  • 0x1A4D9 [exe-only] Gold Trunk
  • 0x1A4E6 [exe-only] Statis Box
  • … +26 more (see JSON)

town_blacksmith0x1C400..0x1D000

Blacksmith shop UI strings. 6 strings.

  • 0x1C51E [exe-only] Blacksmith
  • 0x1C537 [str.dat] G-Gather Gold
  • 0x1C545 [exe-only] Other Char
  • 0x1C7E2 [str.dat] Select (A-F)
  • 0x1CD24 [exe-only] Buy (A-F)
  • 0x1CFC0 [exe-only] Buy (A-C)

town_temple0x1D100..0x1E400

Temple UI + donation/heal strings. 7 strings.

  • 0x1D6A1 [str.dat] G-Gather Gold
  • 0x1D6AF [exe-only] Other Char
  • 0x1D6BC [exe-only] Select (A-E)
  • 0x1E26E [exe-only] has been healed.
  • 0x1E283 [exe-only] is healthy.
  • 0x1E291 [exe-only] Select another
  • 0x1E2A2 [exe-only] character.

town_guild0x1E800..0x1EA00

Mage guild UI. 2 strings.

  • 0x1E896 [exe-only] Mage Guild
  • 0x1E8A7 [exe-only] Learn (A-D)

town_training0x1F800..0x20600

Training enrollment strings. 29 strings.

  • 0x1F87C [exe-only] is not affected!
  • 0x1F892 [exe-only] resisted!
  • 0x1FDAC [exe-only] A page rolls rusty armor in a barrel
  • 0x1FDD5 [exe-only] of sand in order to clean it as burly
  • 0x1FDFB [exe-only] squires practice fighting with wooden
  • 0x1FE21 [exe-only] sticks. Care to train (y/n)?
  • 0x1FE3F [exe-only] Banners flutter loudly in the damp sea
  • 0x1FE66 [exe-only] air while knights and gladiators test
  • 0x1FE8C [exe-only] their fighting skills. A muscular man
  • 0x1FEB3 [exe-only] offers training. Join (y/n)?
  • 0x1FED1 [exe-only] The sound of clashing swords
  • 0x1FEEE [exe-only] permeates the chilly air. A burly
  • 0x1FF11 [exe-only] warrior asks if you would care to
  • 0x1FF33 [exe-only] enlist for training (y/n?
  • 0x1FF4D [exe-only] Covered in sweat from the heat and a
  • 0x1FF72 [exe-only] tough workout, Phrand, the master
  • 0x1FF94 [exe-only] trainer approaches and asks, "Do you
  • 0x1FFB9 [exe-only] desire some rigorous training (y/n?"
  • 0x1FFDE [exe-only] As youths struggle and train in the
  • 0x20002 [exe-only] distance, a man garbed in a loose
  • 0x20024 [exe-only] robe tied with a swordbelt fluidly
  • 0x20047 [exe-only] walks to you. "Care to train (y/n?"
  • 0x2055F [str.dat] You have to be well
  • 0x20578 [exe-only] to train here.
  • 0x2058A [str.dat] Sorry - you need
  • 0x2059B [exe-only] more gold.
  • 0x205A9 [exe-only] You gained
  • 0x205B5 [exe-only] hit points
  • 0x205C1 [exe-only] and new spells

Handler anchor addresses

Service Load address
open_tavern_food 0x1A132
open_inn_lodging 0x19EC0
open_temple 0x1D208
open_training 0x1F800
open_mages_guild 0x1E870
open_blacksmith_shop 0x1C54A

str.dat vs exe split (town services)

Content Primary location
Pub NPC intros (Amber, Rowena, Belinthra…), food/drink menus, rumors str.dat
Blacksmith NPC intros (Svendegard…), buy/sell prompts str.dat + exe menu labels
Temple priest intros, donation feedback str.dat
Mage guild intros, membership gate str.dat + exe Mage Guild label
Innkeeper scenes, rest prompts, registry y/n exe 0x19D00..0x1A200
Chest/trap messages exe 0x1A280..0x1A800
Building sign titles (Slaughtered Lamb, etc.) event.dat (OP_0B)

Tooling

python tools/extract_segments.py mm2          # ghidra/*.bin + manifest
python tools/extract_embedded_strings.py mm2
python tools/mm2_codec.py str-decode str.dat EXTRACTED/docs/11-str-decoded.txt
python tools/decode_event.py event.dat

See also

Page Why
Event to String Path When exe text vs str.dat
Town Services Inn & service prompts

🏠 Home


Getting started

Runtime & engine

Graphics

UI

Data formats (.dat)

Combat

Audio

Game systems

Might and Magic I (DOS)

Gallery

Tools

Clone this wiki locally