FS507D asset recovery, ConLobby V5.0.7Df promotion, mechlab New-Mech crash fix

FS507D_20161015 release analysis wrap-up (drop itself is gitignored; art-review
folder kept local for review):
- Recovered the only assets our tree lacked: 13 hsh HUD/radar/mech bmps and the
  two 5.07D lobby decals (decal_46/47.tga, extracted from release props.mw4 via
  a ported gos_LZDecompress).
- ResourceImagePool.cpp: missing-texture placeholder is now LAB_ONLY (editor
  keeps degraded mode); Release restores the original fatal STOP. Release +
  Profile rebuilt, 0 errors.

Console script reconciled:
- ConLobby.script.new ("BattleTech Console V5.0.7Df", newest revision anywhere)
  promoted to Content\ShellScripts\ConLobby.script; .new removed; stale loose
  deploy copy removed. Verified in-game (console title shows V5.0.7Df).
- Corrected CLAUDE.md: the release never "renamed" the console to
  ComputerPlayer.script -- the resource packer stores script contents under
  alphabetically skewed entry names (runtime resolves the same pairing).
  Packer quirks documented (stale entry carry-forward on incremental builds,
  name/content skew in directory sweeps).

Mechlab bug fix (first FireStorm bug hunt):
- New-Mech dialog showed blank rows for Wolfhound/Zeus and crashed (KERNELBASE
  read AV) when creating a Zeus. Root cause: newmech in chassis.script created
  its Type droplist without setting $$m_listBoxSize$$, so capacity defaulted to
  60 while 65 chassis were written in -- OOB script-array writes. Fixed by
  sizing the list from $$m_chassisCount$$. Latent stock-MW4 bug armed when the
  FireStorm roster passed 60 chassis. Verified: Zeus variant creates cleanly.

props.mw4 fully repacked (decals + promoted console + mechlab fix, junk
.new/.org entries gone); game deploy refreshed at MW4\. Gitignore: FS507D drop
and player-created MW4\Resource\Variants.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-07-02 13:04:45 -05:00
co-authored by Claude Fable 5
parent 2cfb14ab98
commit 2f17631081
108 changed files with 32230 additions and 43498 deletions
+6
View File
@@ -9,3 +9,9 @@
# run-firestorm skill screenshots (may capture the operator's desktop -- never mirror)
.claude/skills/run-firestorm/shots/
# FS507D_20161015: later FireStorm release drop, kept local for analysis -- not part of the mirror
FS507D_20161015/
# player-created mechlab variants in the game deploy (local test/play data, per-machine)
MW4/Resource/Variants/
+101
View File
@@ -285,6 +285,22 @@ Key facts:
source assets under `Content\`. Output: `resource\*.mw4` + `*.dep` (incremental via `.dep`
timestamps + content version). Needs the full ~4.6 GB `Content\` source tree.
### ⚠️ Resource packer quirks (discovered 2026-07-02, ConLobby promotion)
1. **Incremental rebuilds carry forward stale entries.** A package rebuild re-packs only
entries the `.dep` flags as changed and copies the rest — including entries whose SOURCE
FILES WERE DELETED (they are never dropped) — from the previous `.mw4`. Per-entry FILETIME
in the directory = when that entry was last (re)packed, not the source mtime. **To pick up
deletions/renames, force a full repack: delete `resource\<pkg>.mw4` + `<pkg>.dep`, then run
`build-env\build-resources.ps1`.** Also: `Copy-Item` preserves the source mtime, so a
promoted/copied file can look OLDER than the package and be skipped — touch it (or full-repack).
2. **Script entry names are alphabetically skewed vs their contents** (in `directory=` sweeps,
e.g. props' `content\shellscripts`): e.g. entry `ConLobby.script` holds CreatePilotModal-like
text, entry `ConLobbyMission.script` holds `GUNStatus.script` (byte-identical), and our 140 KB
console (source `ConLobby.script`) lands under entry `ComputerPlayer.script` — IDENTICAL skew
in the 2016 release props.mw4, which shipped and worked. The runtime evidently resolves names
through the same pairing, so packages are self-consistent in-game; only extraction tools see
"swapped" names. Don't "fix" packed name mismatches by editing sources — verify in-game.
## ✅ STEP 6: Editor (`MW4GameEd2`) builds — DONE (with a 1-line source fix)
- Target `MW4GameEd2 - Win32 Release` -> **`rel.bin\MW4Ed2.exe`** (3,973,120 bytes, 0 errors).
MFC app (`Use_MFC 6`); needs `mfc42.dll` (present in deployment) at runtime. Profile config
@@ -518,6 +534,91 @@ etc.), default loadout in `.subsystems`; 2D HUD/MFD bmps load loose from `hsh\`;
needs MW4.exe rebuild + resource repack + redeploy. `Finished HUDS from J&J\` = pending MFD/
radar art for ~13 chassis.
## 📋 Reference: FS507D_20161015 release drop analyzed (2026-07-01)
`FS507D_20161015\` (repo root, **gitignored** — not part of the mirror) = a later shipped
LAN-center release of this game (postinstall.bat maps per-machine 10.0.0.x IPs; Mumble refs).
**2026-07-02: release contents DELETED (user holds the zip archive); only
`FS507D_20161015\art-review\` remains** — 800 side-by-side pairs (`*.RELEASE.*` vs `*.OURS.*`,
flattened paths, `manifest.tsv`) of art whose CONTENT differs from our sources, awaiting the
user's review: `DIMS-DIFFER\` 451 (structurally different, e.g. 3state button strips grew
110×105→110×180, btfconsole.tga 800×600 vs 112×112), `PIXELS-DIFFER\` 280 (same format,
repainted), `HSH\` 69 (loose hsh bmps beyond pure depth-reduction; 91 8bpp-reductions of our
24bpp sources excluded). ALL packaged art diffs are shell-UI art (`shellscripts\graphics\**`,
`mechbay\graphics\**`, lobby skins/decals/mechicons) — zero world/mech texture diffs; the
release = a 5.07D UI-art refresh + the ComputerPlayer console script. (Extraction note:
6,469 map/mission-package texture entries are 4-byte cross-package reference stubs, not art.)
Findings vs our tree:
- **Binaries are a 2016 rebuild of (essentially) our source.** Release `MW4.exe` linked
2016-10-04, Launcher/MissionLang/ScriptStrings/ctcls 2014, but `mw4pro.exe` is the ORIGINAL
2009-06-14 build, byte-size-identical to our rebuild. `__TIMESTAMP__` banner in MW4.exe:
ours `Sun Jun 14 01:45:57 2009` vs release `02:45:57` = same MWApplication.cpp within a DST
hour. Full strings-diff of the exes: all meaningful strings present on BOTH sides (incl.
`BiggieSizeIt`/`RuleBook`, which our `VehicleInterface.cpp` has). **No evidence of missing
source.**
- **✅ Degraded-mode placeholder patch made LAB-only (2026-07-02).** Our rebuilt game exe used
to contain the `01AACA1.tga` placeholder (Adept links into the game); release was clean.
`ResourceImagePool.cpp` now: `#ifdef LAB_ONLY` placeholder (editor keeps degraded mode),
`#else` original `STOP(("Texture %s could not be found!"))`. Release+Profile rebuilt (0 err),
verified placeholder gone from `rel.bin\MW4.exe` / present in `MW4pro.exe`; both deployed
to `C:\VWE\firestorm\MW4`.
- **`hsh\` mech art synced from release (2026-07-02).** Release hsh was NEWER than our dev
tree and matches OUR SOURCE'S names (`huddamage.cpp` wants `hud\assassin2/behemoth/
behemothii`...). Copied the 13 missing files into `Gameleap\mw4\hsh` + deploy (hud/radar
assassin2+behemoth+behemothii, Mechs behemoth/black hawk/longbow/solitare/victor, decals
46/47); `Mechs\black hawk.bmp`+`solitare.bmp` upgraded to our 24bpp twins (blackhawk/
solitaire renames). Did NOT overwrite the ~158 existing bmps that "differ": release ships
8bpp palette reductions of our 24bpp sources (deploy-mw4.ps1 reduces at deploy anyway).
- **resource .mw4 detail (via `.dep`/package name-set parsing, 2026-07-02):** entry SETS are
identical for core/textures/all 26 maps/all 29 missions (maps byte-identical ±2B; mission
payload drift of ±0.1-33KB = ABL/notation re-serialization, not content). All 29 `.nfo`
byte-identical. **Only real packing deltas, both in props.mw4:** (1) release packs
`shellscripts\graphics\multiplayer\lobbydecals\decal_46.tga`+`decal_47.tga` — ✅ RECOVERED
2026-07-02: decoded the #VBD container (dir records = [len][name][FILETIME][origSize]
[storedSize][offset]; payload base = dword@0x0C) + ported `gos_LZDecompress` (FileIO.cpp:1693
— LZW, 9→12-bit LSB-first codes, 256=clear/257=EOF/dict@258) and extracted both TGAs into
`Content\ShellScripts\graphics\multiplayer\lobbydecals\` (32×32 32bpp, verified: exact RLE/
size/footer + rendered; 46=radiation emblem, 47="331" crest). Next resource repack picks
them up and closes the props.mw4 gap;
(2) OUR props.mw4 sweeps in junk `ConLobby.script.new`/`.script.org` backup files from
`Content\ShellScripts\` (harmless but shippable-junk; note `.script.new` carries MSL ADD
MECH markers — review before deleting/moving). Release ships user missions s1s1-s1s3
(.nfo+.tga only, no .mw4 — campaign coop redirects per missionnames.tbl).
- **✅ FULL extraction of every release .mw4/.dep done (2026-07-02)** →
`FS507D_20161015\extracted\<pkg>\...` (~1.3 GB, 60+ packages, 0 decode failures; extractor =
the ported gos_LZDecompress + #VBD directory parser; raw-vs-LZ rule per Database.cpp:451:
stored==orig → raw).
- **✅ Completeness audit (2026-07-02): NOTHING else in the release is absent from our tree.**
Mapped all ~42k extracted package entries (23,649 unique base source paths after stripping
`{GameModel}`/`{hint}`/`[page]` qualifiers) against the dev tree by path + whole-tree
filename index: the only release-assets we lacked were the 13 hsh bmps + 2 lobby decal
TGAs (recovered) and the JPP console-script revision (superseded by our ConLobby.script.new).
Residuals: mission root-page pseudo-entries (not files) + 34 `{CampaignInterfacePlug}`
records = compiled campaign-screen metadata whose `.Campaign` sources we have. (Caveat:
audit is by existence, not content equality — release re-saved some shared files, e.g.
decal_00.tga pixels differ.)
- **The FireStorm console script in the release sits under the package entry name
`shellscripts\ComputerPlayer.script`** (138,990 B, title "BattleTech Console V5.07.D") — the
release's `ConLobby.script` ENTRY holds a 6,551 B copy of an old CreatePilotModal.
**2026-07-02 CORRECTION: nobody renamed anything — this is the packer's name↔content skew**
(see "Resource packer quirks" below): the console SOURCE file in the 5.07D tree was
ConLobby.script all along, same as ours; the packer stores script contents under alphabetically
shifted entry names, and the runtime reproduces the same pairing, so it works in-game and only
looks swapped to extraction tools. **Console script genealogy (oldest→newest):**
dev `ConLobby.script` ("V5.07", 138,544 B) → release console ("V5.07.D",
+29 lines: JPP's decal-dropdown feature adding decals 46=BKG/47=FSA, MAX_DECAL_COUNT 17→20)
→ dev `ConLobby.script.new` ("V5.0.7Df", 140,532 B, changelog "06/19/18 AVB": includes the
JPP decal work PLUS ROWFIELD_TYPE_*/MAIL_SLOTTYPE_* slot framework + tab stops). **Our
`.new` is the newest console revision anywhere** — the release only added what .new already
contains. ✅ **RECONCILED 2026-07-02:** `.new` promoted to `Content\ShellScripts\ConLobby.script`
(140,532 B), `.new` file removed, stale loose deploy copy `MW4\Content\shellscripts\ConLobby.script`
removed (release also ships no loose copy), props.mw4 fully repacked + redeployed. Verified
in-game: console title shows "BattleTech Console V5.0.7Df".
- **Release-only config:** `options-game.ini` enables `hardwaremixing=true`, `BiggieSizeIt=1`,
`RuleBook=1` (our inis don't); ctcl inis use 10.0.0.x (ours 200.0.0.x) + `c:\games\MW4` paths.
- **Release drops all Movies** (~310 MB) and the loose `content\shellscripts\conlobby.script`
(both deploys load shell scripts from props.mw4; ours ships that one loose 140 KB script —
check whether a loose script shadows the packed one).
## 📋 Reference: adding a new map/mission (documented 2026-07-01)
Full workflow in **`ADDING-A-MAP.md`** (repo root). Key facts: unlike mechs, NO code changes /
positional arrays / exe rebuild — maps+missions are discovered by enumeration. Map (terrain) =
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -382,7 +382,13 @@ void
Verify(!extension[3]);
if (!gos_DoesFileExist(file_name))
#endif
file_name = "content\\textures\\01AACA1.tga"; /* [editor degraded-mode] substitute placeholder for missing texture instead of fatal STOP, so downstream gets a valid handle (was: STOP("Texture %s could not be found!")) */
{
#ifdef LAB_ONLY
file_name = "content\\textures\\01AACA1.tga"; /* [editor degraded-mode] LAB builds (editor/Profile) substitute a placeholder for missing WIP textures instead of fatal STOP, so downstream gets a valid handle */
#else
STOP(("Texture %s could not be found!", (const char *)file_name)); /* Release: fail loud, ship no placeholder */
#endif
}
}
//
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+306 -246
View File
@@ -13,6 +13,7 @@
// 08/05/03 MSL Changed Team Player limit from 4 to 7
// 10/10/03 MSL Added Cameraship to RESET_AFTER_LAUNCH
// 10/17/05 MSL Added all remaining Mechs (55)
// 06/19/18 AVB Update tab stops
//-------------------------------------------------------------------------
@@ -80,7 +81,7 @@
#define MAX_SKIN_COUNT 16
// MSL 5.05
#define MAX_DECAL_COUNT 17
#define MAX_DECAL_COUNT 20 //jpp decal total num in dropdown
#define DO_VIRTUAL_TEST 0
#define USE_ALLOWED_MECHS 1
@@ -154,7 +155,19 @@
#define ERROR_STRING_Y 535
#define ERROR_STRING_Y2 (535 + 41) // see o_launch_button
#define MAX_SLOT_ITEMS 5 // bot-type, edit-field, mech-type, team/camo, decal
#define ROWFIELD_TYPE_BOTTYPE 0
#define ROWFIELD_TYPE_EDITBOX 1
#define ROWFIELD_TYPE_MECH 2
#if USE_O_MECH_VARIANT2
#define ROWFIELD_TYPE_MECHVARIANT 3
#define ROWFIELD_TYPE_TEAMCAMO 4
#define ROWFIELD_TYPE_TEAMDECAL 5
#define MAX_SLOT_ITEMS 6
#else
#define ROWFIELD_TYPE_TEAMCAMO 3
#define ROWFIELD_TYPE_TEAMDECAL 4
#define MAX_SLOT_ITEMS 5
#endif // USE_O_MECH_VARIANT2
#define MAIL_ROSTER_LIST_MAXDISPLAY 19999
#define MAIL_ROSTER_LIST_CHANGED 20000
@@ -163,6 +176,10 @@
#define MAIL_REMOVE_ALL_BOTS 20003
#define MAIL_CHANGE_LAUNCH_STATE 20004
#define MAIL_GET_SLOTTYPE 20005 // cur-row, return: 0: none, +1: user, +2: bot, 3: currently used
#define MAIL_SLOTTYPE_NONE 0
#define MAIL_SLOTTYPE_USER 1
#define MAIL_SLOTTYPE_BOT 2
#define MAIL_SLOTTYPE_USED 3
#define MAIL_PROCESS_TABEVENT 20006 // slot_item-index, dir(-1,+1)
#define MAIL_POSSIBLE_TABEVENT 20007 // row, slottype, item_index
#define MAIL_SET_ROOKIE_MISSION -1111 // sync with conlobby.script
@@ -229,7 +246,7 @@ main
o_frame.type = 0
o_frame.location = 0, 0, 100
// MSL Version
o_frame.screen_name = "BattleTech Console V5.07" // localize$(IDS_MP_LOBBY_GAME_LOBBY)
o_frame.screen_name = "BattleTech Console V5.0.7Df" // localize$(IDS_MP_LOBBY_GAME_LOBBY)
initialize(o_frame)
int team_camo[16] // team_camo[selected team number] is skin number(0..36)...
@@ -250,27 +267,27 @@ main
team_camo[14] = 36 //
team_camo[15] = 37 //
int team_decal[17] // team_decal[selected team number] is decal number(0..63)...
team_decal[0] = 3 // Steiner
team_decal[1] = 4 // Kurita
team_decal[2] = 2 // Davion
team_decal[3] = 5 // Liao
team_decal[4] = 6 // Marik
team_decal[5] = 9 // Comstar
team_decal[6] = 50 // VGL
team_decal[7] = 10 // Star League
team_decal[8] = 11 // Wolf
team_decal[9] = 12 // Falcon
team_decal[10] = 16 // Ghost Bear
team_decal[11] = 20 // Hell Horses
team_decal[12] = 21 // Coyote
team_decal[13] = 22 // Blood Spirit
team_decal[14] = 24 // Ice Hellion
team_decal[15] = 27 // Goliath Scorpian
team_decal[16] = 48 // 331st
int TEAM_DECAL[17] // team_decal[selected team number] is decal number(0..63)...
TEAM_DECAL[0] = 3 // Steiner
TEAM_DECAL[1] = 4 // Kurita
TEAM_DECAL[2] = 2 // Davion
TEAM_DECAL[3] = 5 // Liao
TEAM_DECAL[4] = 6 // Marik
TEAM_DECAL[5] = 9 // Comstar
TEAM_DECAL[6] = 50 // VGL
TEAM_DECAL[7] = 10 // Star League
TEAM_DECAL[8] = 11 // Wolf
TEAM_DECAL[9] = 12 // Falcon
TEAM_DECAL[10] = 16 // Ghost Bear
TEAM_DECAL[11] = 20 // Hell Horses
TEAM_DECAL[12] = 21 // Coyote
TEAM_DECAL[13] = 22 // Blood Spirit
TEAM_DECAL[14] = 24 // Ice Hellion
TEAM_DECAL[15] = 27 // Goliath Scorpian
TEAM_DECAL[16] = 48 // 331st
int ffa_decal[36] // ffa_decal[selected skin number] is decal number(0..63)...
// currently, these values is useless... just for later usage
// currently, these values is useless... just for later usage //JPP add new decal here for in game use
ffa_decal[0] = 3
ffa_decal[1] = 4
ffa_decal[2] = 2
@@ -289,7 +306,9 @@ main
ffa_decal[15] = 27 // Goliath Scorpion
ffa_decal[16] = 48 // 331st
ffa_decal[17] = 49 // ddc
ffa_decal[18] = 0 // below will not used, because "o_skins[x].list_size = 16"
ffa_decal[18] = 47 // FSA
ffa_decal[19] = 46 // BKG
ffa_decal[20] = 0 // below will not used, because "o_skins[x].list_size = 16"
//ffa_decal[18-36] = ...
int drop_count_mech[ROSTER_DISPLAY_COUNT]
@@ -327,7 +346,7 @@ main
int team_param = TEAM_PARAMETER
int team_max_plyrs = TEAM_MAX_PLAYERS
int teamskin = TEAM_SKIN
int teamdecal = TEAM_DECAL
int teamdecal = TEAM_DECAL[6]
int k
int x
@@ -349,7 +368,7 @@ main
int update_skin = false
// MSL 5.05
int decal_id ///////VERY IMPORTANT FOR NEW DECAL INTERFACE
int decal_ids[18]
int decal_ids[20] //JPP was 18
int update_decal = false
int ROSTER_top_of_list = 0
int block_launch_or_ready = FALSE
@@ -516,73 +535,73 @@ main
if (USE_ALLOWED_MECHS)
{
// MSL ADD MECH
// MSL ADD MECH
allowed_mechs[ 0 ] = 0 // Annihilator
allowed_mechs[ 1 ] = 1 // Archer
allowed_mechs[ 2 ] = 2 // Arctic Wolf
allowed_mechs[ 3 ] = 3 // Ares
allowed_mechs[ 4 ] = 4 // Argus
allowed_mechs[ 5 ] = 5 // Assassin2
allowed_mechs[ 6 ] = 6 // Atlas
allowed_mechs[ 7 ] = 7 // Avatar
allowed_mechs[ 8 ] = 8 // Awesome
allowed_mechs[ 9 ] = 9 // Battlemaster
allowed_mechs[ 10 ] = 10 // Battlemasteriic
allowed_mechs[ 11 ] = 11 // Behemoth
allowed_mechs[ 12 ] = 12 // Behemoth II
allowed_mechs[ 13 ] = 13 // Black Hawk
allowed_mechs[ 14 ] = 14 // Black Knight
allowed_mechs[ 15 ] = 15 // Black Lanner
allowed_mechs[ 16 ] = 16 // Brigand
allowed_mechs[ 17 ] = 17 // Bushwacker
allowed_mechs[ 18 ] = 18 // Catapult
allowed_mechs[ 19 ] = 19 // cauldron-born
allowed_mechs[ 20 ] = 20 // Chimera
allowed_mechs[ 21 ] = 21 // Commando
allowed_mechs[ 22 ] = 22 // Cougar
allowed_mechs[ 23 ] = 23 // Cyclops
allowed_mechs[ 24 ] = 24 // Daishi
allowed_mechs[ 25 ] = 25 // Deimos
allowed_mechs[ 26 ] = 26 // Dragon
allowed_mechs[ 27 ] = 27 // Fafnir
allowed_mechs[ 28 ] = 28 // Flea
allowed_mechs[ 29 ] = 29 // Gladiator
allowed_mechs[ 30 ] = 30 // Grizzly
allowed_mechs[ 31 ] = 31 // Hauptmann
allowed_mechs[ 32 ] = 32 // Hellhound
allowed_mechs[ 33 ] = 33 // Hellspawn
allowed_mechs[ 34 ] = 34 // Highlander
allowed_mechs[ 35 ] = 35 // Hollander II
allowed_mechs[ 36 ] = 36 // Hunchback
allowed_mechs[ 37 ] = 37 // Kodiak
allowed_mechs[ 38 ] = 38 // Loki
allowed_mechs[ 39 ] = 39 // Longbow
allowed_mechs[ 40 ] = 40 // Madcat
allowed_mechs[ 41 ] = 41 // Madcat Mk. II
allowed_mechs[ 42 ] = 42 // Masakari
allowed_mechs[ 43 ] = 43 // Mauler
allowed_mechs[ 44 ] = 44 // Novacat
allowed_mechs[ 45 ] = 45 // Osiris
allowed_mechs[ 46 ] = 46 // Owens
allowed_mechs[ 47 ] = 47 // Puma
allowed_mechs[ 48 ] = 48 // Raven
allowed_mechs[ 49 ] = 49 // Rifleman
allowed_mechs[ 50 ] = 50 // Ryoken
allowed_mechs[ 51 ] = 51 // Shadowcat
allowed_mechs[ 52 ] = 52 // Solitaire
allowed_mechs[ 53 ] = 53 // Sunder
allowed_mechs[ 54 ] = 54 // Templar
allowed_mechs[ 55 ] = 55 // Thanatos
allowed_mechs[ 56 ] = 56 // Thor
allowed_mechs[ 57 ] = 57 // Uller
allowed_mechs[ 58 ] = 58 // Urbanmech
allowed_mechs[ 59 ] = 59 // Uziel
allowed_mechs[ 60 ] = 60 // Victor
allowed_mechs[ 61 ] = 61 // Vulture
allowed_mechs[ 62 ] = 62 // Warhammer
allowed_mechs[ 63 ] = 63 // Wolfhound
allowed_mechs[ 64 ] = 64 // Zeus
allowed_mechs[ 0 ] = 0 // Annihilator
allowed_mechs[ 1 ] = 1 // Archer
allowed_mechs[ 2 ] = 2 // Arctic Wolf
allowed_mechs[ 3 ] = 3 // Ares
allowed_mechs[ 4 ] = 4 // Argus
allowed_mechs[ 5 ] = 5 // Assassin2
allowed_mechs[ 6 ] = 6 // Atlas
allowed_mechs[ 7 ] = 7 // Avatar
allowed_mechs[ 8 ] = 8 // Awesome
allowed_mechs[ 9 ] = 9 // Battlemaster
allowed_mechs[ 10 ] = 10 // Battlemasteriic
allowed_mechs[ 11 ] = 11 // Behemoth
allowed_mechs[ 12 ] = 12 // Behemoth II
allowed_mechs[ 13 ] = 13 // Black Hawk
allowed_mechs[ 14 ] = 14 // Black Knight
allowed_mechs[ 15 ] = 15 // Black Lanner
allowed_mechs[ 16 ] = 16 // Brigand
allowed_mechs[ 17 ] = 17 // Bushwacker
allowed_mechs[ 18 ] = 18 // Catapult
allowed_mechs[ 19 ] = 19 // cauldron-born
allowed_mechs[ 20 ] = 20 // Chimera
allowed_mechs[ 21 ] = 21 // Commando
allowed_mechs[ 22 ] = 22 // Cougar
allowed_mechs[ 23 ] = 23 // Cyclops
allowed_mechs[ 24 ] = 24 // Daishi
allowed_mechs[ 25 ] = 25 // Deimos
allowed_mechs[ 26 ] = 26 // Dragon
allowed_mechs[ 27 ] = 27 // Fafnir
allowed_mechs[ 28 ] = 28 // Flea
allowed_mechs[ 29 ] = 29 // Gladiator
allowed_mechs[ 30 ] = 30 // Grizzly
allowed_mechs[ 31 ] = 31 // Hauptmann
allowed_mechs[ 32 ] = 32 // Hellhound
allowed_mechs[ 33 ] = 33 // Hellspawn
allowed_mechs[ 34 ] = 34 // Highlander
allowed_mechs[ 35 ] = 35 // Hollander II
allowed_mechs[ 36 ] = 36 // Hunchback
allowed_mechs[ 37 ] = 37 // Kodiak
allowed_mechs[ 38 ] = 38 // Loki
allowed_mechs[ 39 ] = 39 // Longbow
allowed_mechs[ 40 ] = 40 // Madcat
allowed_mechs[ 41 ] = 41 // Madcat Mk. II
allowed_mechs[ 42 ] = 42 // Masakari
allowed_mechs[ 43 ] = 43 // Mauler
allowed_mechs[ 44 ] = 44 // Novacat
allowed_mechs[ 45 ] = 45 // Osiris
allowed_mechs[ 46 ] = 46 // Owens
allowed_mechs[ 47 ] = 47 // Puma
allowed_mechs[ 48 ] = 48 // Raven
allowed_mechs[ 49 ] = 49 // Rifleman
allowed_mechs[ 50 ] = 50 // Ryoken
allowed_mechs[ 51 ] = 51 // Shadowcat
allowed_mechs[ 52 ] = 52 // Solitaire
allowed_mechs[ 53 ] = 53 // Sunder
allowed_mechs[ 54 ] = 54 // Templar
allowed_mechs[ 55 ] = 55 // Thanatos
allowed_mechs[ 56 ] = 56 // Thor
allowed_mechs[ 57 ] = 57 // Uller
allowed_mechs[ 58 ] = 58 // Urbanmech
allowed_mechs[ 59 ] = 59 // Uziel
allowed_mechs[ 60 ] = 60 // Victor
allowed_mechs[ 61 ] = 61 // Vulture
allowed_mechs[ 62 ] = 62 // Warhammer
allowed_mechs[ 63 ] = 63 // Wolfhound
allowed_mechs[ 64 ] = 64 // Zeus
}
@@ -655,6 +674,7 @@ allowed_mechs[ 64 ] = 64 // Zeus
player_num = -1
// ComboBox for the Player Type
object o_BotList[17]
object o_BotList_bu[17]
int m_naLastSelected[17]
@@ -831,14 +851,15 @@ allowed_mechs[ 64 ] = 64 // Zeus
stock_size = 0
if (USE_ALLOWED_MECHS)
{
o_mech_variant[x].list_size = MAX_ALLOWED_MECHS
for k = 0; k < MAX_ALLOWED_MECHS; k++
{
o_mech_variant[x].list_item[stock_size] = mech[stock_array[allowed_mechs[k]]]
stock_size++
}
}
else
{
else
{
for k = 0; k < $$m_mechCount$$; k++
{
if (stock_id[k] == 1)
@@ -1126,6 +1147,8 @@ allowed_mechs[ 64 ] = 64 // Zeus
initialize (o_cam_status)
MAX_ITEMS = 1 + (MAXTESLA - MAXTESLA_P) // 1(blank) + (MAXTESLA - MAXTESLA_P)
// Live Cam Drop Box
object o_cam_list = s_droplistbox
MAX_ITEMS = 60
o_cam_list.location = BOT_LIST_X, CAM_STATUS_Y,10
@@ -1160,11 +1183,13 @@ allowed_mechs[ 64 ] = 64 // Zeus
object o_cam_print_text = s_print_text
o_cam_print_text.location = PRINT_TEXT_X, CAM_STATUS_Y + 3,5
// Let's move this so it's clearly not in the same line as the o_cam_list
o_cam_print_text.location = (PRINT_TEXT_X + PLAYER_EDIT_WIDTH + ROSTER_GAP2), (CAM_STATUS_Y + ROSTER_GAP2),5
o_cam_print_text.id = -1
o_cam_print_text.text_font = FPATH localize$(IDS_F_ML_LABEL)
o_cam_print_text.text_color = packcolor(255,255,255,255)
o_cam_print_text.text = "DEFAULT" // Give it some default value to start up with.
activate(o_cam_print_text)
object o_reprint = s_multistatepane
@@ -1277,74 +1302,83 @@ allowed_mechs[ 64 ] = 64 // Zeus
GUI_MAILBOX
{
// GetSlotType
if (sender == this) && (getmessage() == MAIL_GET_SLOTTYPE)
{
int cur_row = getmessage(1)
if (cur_row < MAXTESLA_P)
{
//mLauncherConnection = callback($$CTCL_Get$$, _CTCL_GetTeslaInfo, k, mConnection2, mApplType, mApplState, mGameState, mGameTime, mGameIsServer)
//if (mGameState != _EGS_Idle) // ((mLauncherConnection == 1) && (mConnection2 == 1) && (mApplType == _EAT_MW4))
// return 3
if (o_BotList[cur_row].nselected == 1)
return 1
{
return MAIL_SLOTTYPE_USER
}
}
if (o_BotList[cur_row].nselected == 0)
return 0
{
return MAIL_SLOTTYPE_NONE
}
else
return 2
{
return MAIL_SLOTTYPE_BOT
}
}
// IsPossibleTabEvent(cur_row, slottype, cur_item)
if (sender == this) && (getmessage() == MAIL_POSSIBLE_TABEVENT)
{
int cur_row = getmessage(1)
int slottype = getmessage(2)
int cur_item = getmessage(3)
if (cur_item == 0)
int cur_row = getmessage(1)
int slottype = getmessage(2)
int cur_item = getmessage(3)
if (cur_item == ROWFIELD_TYPE_BOTTYPE)
{
return 1
}
if (cur_item == 1)
{
if (slottype == 1)
return 1
return 0
return 1
}
if (cur_item == 2)
if (cur_item == ROWFIELD_TYPE_EDITBOX)
{
if (slottype == 1) || (slottype == 2)
if (slottype == MAIL_SLOTTYPE_USER)
{
return 1
}
return 0
}
if (cur_item == ROWFIELD_TYPE_MECH)
{
if (slottype == MAIL_SLOTTYPE_USER) || (slottype == MAIL_SLOTTYPE_BOT)
{
return 1
return 0
}
return 0
}
if (cur_item == 3)
#if USE_O_MECH_VARIANT2
if (cur_item == ROWFIELD_TYPE_MECHVARIANT)
{
if (slottype == 2)
{
if (cur_team_val)
return 1
if (slottype == MAIL_SLOTTYPE_USER) || (slottype == MAIL_SLOTTYPE_BOT)
{
return 1
}
return 0
}
if (slottype == 1)
{
return 1
}
}
if (cur_item == 4)
}
#endif // USE_O_MECH_VARIANT2
if (cur_item == ROWFIELD_TYPE_TEAMCAMO) || (cur_item == ROWFIELD_TYPE_TEAMDECAL)
{
if (slottype == 2)
{
if (cur_team_val)
return 1
return 0
if (slottype == MAIL_SLOTTYPE_USER)
{
return 1
}
if (slottype == MAIL_SLOTTYPE_BOT)
{
if (cur_team_val)
{
return 1
}
return 0
}
}
if (slottype == 1)
{
return 1
}
}
return 0
}
if (sender == this) && (getmessage() == MAIL_PROCESS_TABEVENT)
{
int cur_index = getmessage(1) // row * MAX_SLOT_ITEMS + slot-item-index(bot-type, edit-field, mech-type, team/camo)
}
// ProcessTabEvent
if (sender == this) && (getmessage() == MAIL_PROCESS_TABEVENT)
{
int cur_index = getmessage(1) // row * MAX_SLOT_ITEMS + slot-item-index(bot-type, edit-field, mech-type, ?mech-variant,? team/camo, decal)
int tab_dir = getmessage(2) // -1 or +1
int old_row = -1
int cur_row
@@ -1354,46 +1388,60 @@ allowed_mechs[ 64 ] = 64 // Zeus
while(!done)
{
cur_index = cur_index + tab_dir
if !done && (cur_index < 0)
{
done = 1
focus(o_cam_list) // focus(@ConLobbyMission@o_game_options[13]) // MAX_OPTIONS-1
}
if !done && (nRosterCount * MAX_SLOT_ITEMS <= cur_index)
{
done = 1
focus(@ConLobbyMission@o_game_options[0])
}
if (!done)
{
cur_row = cur_index / MAX_SLOT_ITEMS
cur_item = cur_index % MAX_SLOT_ITEMS
if (old_row != cur_row)
{
old_row = cur_row
slottype = mail(MAIL_GET_SLOTTYPE, cur_row, this)
}
if mail(MAIL_POSSIBLE_TABEVENT, cur_row, slottype, cur_item, this)
cur_index = cur_index + tab_dir
if !done && (cur_index < 0)
{
done = 1
if (cur_item == 0)
focus(o_BotList[cur_row])
if (cur_item == 1)
focus(o_Editbox[cur_row])
if (cur_item == 2)
focus(o_mech_variant[cur_row])
if (cur_item == 3)
{
if (cur_team_val)
focus(o_team[cur_row])
else
focus(o_skins[cur_row])
}
if (cur_item == 4)
focus(o_decal[cur_row])
focus(o_cam_list) // focus(@ConLobbyMission@o_game_options[13]) // MAX_OPTIONS-1
}
if !done && (nRosterCount * MAX_SLOT_ITEMS <= cur_index)
{
done = 1
focus(@ConLobbyMission@o_game_options[0])
}
if (!done)
{
cur_row = cur_index / MAX_SLOT_ITEMS
cur_item = cur_index % MAX_SLOT_ITEMS
if (old_row != cur_row)
{
old_row = cur_row
slottype = mail(MAIL_GET_SLOTTYPE, cur_row, this)
}
if mail(MAIL_POSSIBLE_TABEVENT, cur_row, slottype, cur_item, this)
{
done = 1
if (cur_item == 0)
{
focus(o_BotList[cur_row])
}
if (cur_item == 1) // Bot Select
{
focus(o_Editbox[cur_row])
}
if (cur_item == 2) // Edit Box
{
focus(o_mech_variant[cur_row])
}
#if USE_O_MECH_VARIANT2
if (cur_item == 3) // Mech Box
{
focus(o_mech_variant2[cur_row])
}
#endif // USE_O_MECH_VARIANT2
if (cur_item == 4)
{
if (cur_team_val)
focus(o_team[cur_row])
else
focus(o_skins[cur_row])
}
if (cur_item == ROWFIELD_TYPE_TEAMDECAL)
{
focus(o_decal[cur_row])
}
}
}
}
}
return
}
@@ -1415,78 +1463,83 @@ allowed_mechs[ 64 ] = 64 // Zeus
nTabDir = +1
if (sender == o_cam_list)
{
if (nTabDir == -1)
focus(@ConLobbyMission@o_game_options[14]) // MAX_OPTIONS-1
else
mail(MAIL_PROCESS_TABEVENT, -1, +1, this)
return
}
if (nTabDir == -1)
focus(@ConLobbyMission@o_game_options[14]) // MAX_OPTIONS-1
else
mail(MAIL_PROCESS_TABEVENT, -1, +1, this)
return
}
int cur_index = 0
int nItemFound = 0
for (k = 0; k < nRosterCount; k++)
{
if (sender == o_BotList[k])
{
nItemFound++
cur_index = cur_index + 0
}
if (sender == o_Editbox[k])
{
nItemFound++
cur_index = cur_index + 1
}
int cur_index = 0
int nItemFound = 0
for (k = 0; k < nRosterCount; k++)
{
if (sender == o_BotList[k])
{
nItemFound++
cur_index = cur_index + ROWFIELD_TYPE_BOTTYPE
}
if (sender == o_Editbox[k])
{
nItemFound++
cur_index = cur_index + ROWFIELD_TYPE_EDITBOX
}
if (sender == o_mech_variant[k])
{
nItemFound++
cur_index = cur_index + 2
nItemFound++
cur_index = cur_index + ROWFIELD_TYPE_MECH
}
if (sender == o_mech_variant2[k])
{
nItemFound++
cur_index = cur_index + ROWFIELD_TYPE_MECHVARIANT
}
if (sender == o_skins[k]) || (sender == o_team[k])
{
nItemFound++
cur_index = cur_index + 3
}
nItemFound++
cur_index = cur_index + ROWFIELD_TYPE_TEAMCAMO
}
if (sender == o_decal[k])
{
nItemFound++
cur_index = cur_index + 4
}
if (nItemFound)
{
//play press,1
nItemFound++
cur_index = cur_index + ROWFIELD_TYPE_TEAMDECAL
}
if (nItemFound)
{
//play press,1
mail(MAIL_PROCESS_TABEVENT, cur_index, nTabDir, this)
break
}
cur_index = cur_index + MAX_SLOT_ITEMS
}
return
}
if (sender == o_roster_list_scroll_controls)
{
if (getmessage() == MAIL_ROSTER_LIST_MAXDISPLAY)
mail(MAIL_ROSTER_LIST_MAXDISPLAY, getmessage(1), this)
if (getmessage() == MAIL_ROSTER_LIST_CHANGED)
mail(MAIL_ROSTER_LIST_CHANGED, getmessage(1), this)
return
}
return
} // End TAB_EVENT
if (sender == o_roster_list_scroll_controls)
{
if (getmessage() == MAIL_ROSTER_LIST_MAXDISPLAY)
mail(MAIL_ROSTER_LIST_MAXDISPLAY, getmessage(1), this)
if (getmessage() == MAIL_ROSTER_LIST_CHANGED)
mail(MAIL_ROSTER_LIST_CHANGED, getmessage(1), this)
return
}
// MSL 5.02 Recall Button
if (sender == o_recall)
{
if (sender == o_recall)
{
play press,1
mail(MAIL_PREVIOUS_MISSION, @ConLobbyMission@) // // set rookie, see conlobbymission.script
mail(MAIL_PREVIOUS_MISSION, @ConLobbyMission@) // // set rookie, see conlobbymission.script
for (k = 0; k < nRosterCount; k++)
{
o_BotList[k].nselected = o_BotList_bu[k].nselected
if (o_BotList[k].nselected > 0)
{
o_BotList[k].nselected = o_BotList_bu[k].nselected
if (o_BotList[k].nselected > 0)
{
activate(o_BotList[k])
}
o_Editbox[k].boxValue = o_Editbox[k].backup
if (o_BotList[k].nselected == 1)
{
initialize(o_Editbox[k])
activate(o_Editbox[k])
}
activate(o_BotList[k])
}
o_Editbox[k].boxValue = o_Editbox[k].backup
if (o_BotList[k].nselected == 1)
{
initialize(o_Editbox[k])
activate(o_Editbox[k])
}
mail(MAIL_PLAYER_TYPE_CHANGED, k, this)
m_naLastSelected[k] = o_BotList[k].nselected
@@ -1866,18 +1919,18 @@ allowed_mechs[ 64 ] = 64 // Zeus
}
else
{ // hidden
deactivate(o_status[k])
deactivate(o_status[k])
deactivate(o_BotList[k])
deactivate(o_Editbox[k])
deactivate(o_print_text[k])
deactivate(o_mech_variant[k])
deactivate(o_mech_variant[k])
#if USE_O_MECH_VARIANT2
deactivate(o_mech_variant2[k])
#endif // USE_O_MECH_VARIANT2
deactivate(o_mech_rand[k])
deactivate(o_skins[k])
deactivate(o_decal[k])
deactivate(o_team[k])
deactivate(o_skins[k])
deactivate(o_decal[k])
deactivate(o_team[k])
deactivate(o_skin_box[k])
deactivate(o_decal_box[k])
}
@@ -2097,7 +2150,7 @@ allowed_mechs[ 64 ] = 64 // Zeus
else
nMissionReview = 0
callback($$CTCL_DoMission$$, 0, team_camo[0], team_decal[0], ffa_decal[0], nPrintOut, nMissionReview) // prepare to add player...
callback($$CTCL_DoMission$$, 0, team_camo[0], TEAM_DECAL[0], ffa_decal[0], nPrintOut, nMissionReview) // prepare to add player...
for (k = 0; k < nRosterCount; k++)
{
if (0 < o_BotList[k].nselected)
@@ -2351,6 +2404,7 @@ allowed_mechs[ 64 ] = 64 // Zeus
}
else
{
// Writing out the time to each pod status
timeString = conv$(mGameTime / 60)
timeTemp = conv$(mGameTime % 60)
if length$(timeTemp) == 1
@@ -2552,7 +2606,7 @@ allowed_mechs[ 64 ] = 64 // Zeus
{
if (mLauncherConnection == -1)
{
//o_cam_print_text.text = "Connecting..."
o_cam_print_text.text = "Connecting..."
processing = o_cam_print_text.text
if equal$(processing, ".")
processing = ".."
@@ -2579,7 +2633,7 @@ allowed_mechs[ 64 ] = 64 // Zeus
}
else
{
o_cam_print_text.text = "" // !ready"
o_cam_print_text.text = "!" // !ready"
}
}
if ((mLauncherConnection == 1) && (mConnection2 == 1) && (mApplType == _EAT_MW4) && (mGameState == _EGS_Idle))
@@ -2882,7 +2936,7 @@ skin_box
letters[35] = "Z"
letters[36] = "_" // MSL Bot color
string decals[18]
string decals[21] //JPP Add Decal here
decals[0] = "03"
decals[1] = "04"
decals[2] = "02"
@@ -2900,7 +2954,10 @@ skin_box
decals[14] = "24"
decals[15] = "27"
decals[16] = "48"
decals[17] = "00" // MSL Bot color
decals[17] = "49"
decals[18] = "47"
decals[19] = "46"
decals[20] = "00" // MSL Bot color
framerate = 10
}
@@ -2987,7 +3044,7 @@ decal_box
letters[35] = "Z"
letters[36] = "_" // MSL Bot color
string decals[18]
string decals[21] //JPP Decal add here
decals[0] = "03"
decals[1] = "04"
decals[2] = "02"
@@ -3005,7 +3062,10 @@ decal_box
decals[14] = "24"
decals[15] = "27"
decals[16] = "48"
decals[17] = "00" // MSL Bot color
decals[17] = "49"
decals[18] = "47"
decals[19] = "46"
decals[20] = "00" // MSL Bot color
framerate = 10
}
@@ -3023,7 +3083,7 @@ decal_box
}
else
{
dstate = 17 // MSL Bot color
dstate = 20 // MSL Bot color jpp decal change for bot
}
}
if (dstate != nLastdState)
@@ -4042,4 +4102,4 @@ s_error_string
print3d text
}
}
}
}
File diff suppressed because it is too large Load Diff
@@ -1,5 +1,5 @@
// Mechwarrior: Vengeance
// Copyright © 1999-2000
// Copyright 1999-2000
// Mechbay_main.script
// Paolo Malabuyo
// July 12, 2000
@@ -2171,6 +2171,11 @@ newmech
int boxy2 = 425
int boxz = 65
// [mechlab data fix] s_droplistbox takes its capacity from $$m_listBoxSize$$ (then resets it
// to 60). Nothing set it here, so this list held 60 items while list_size = m_chassisCount
// (65 mechs) -> the last chassis rows showed blank and selecting the final one crashed
// (garbage string pointer into CreateNewMech). Size it to the actual chassis count.
$$m_listBoxSize$$ = $$m_chassisCount$$
object o_chassisdroplistbox = s_droplistbox
o_chassisdroplistbox.boxFont3d = FPATH localize$(IDS_F_ML_LABEL)
o_chassisdroplistbox.backColor = packcolor (0, 0, 0, 255)
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More