Add MW4COMPARE: .mw4 decompiler toolchain and V4H comparison harness

Tooling built to recover editable source for six 'Mech chassis that exist
in the parallel FS_Build_V4H build but not in this repo. Reverse-engineers
every compiled record type in the .mw4 package format back to the .data /
.instance / .subsystems / .damage / .contents / .torso / .engine /
.armature sources the content pipeline consumes.

Nothing here is wired into the game build. It is a standalone analysis
harness run from Linux.

Package format
--------------
"#VBD" container. Directory records are [len][name][FILETIME][origSize]
[storedSize][offset], payload base at dword 0x0C. A record is stored raw
when storedSize == origSize, otherwise LZW (9->12-bit LSB-first codes,
256=clear, 257=EOF, dict from 258), per Database.cpp:451.

GameModel records are flat /Zp4 structs following the C++ inheritance
chain Entity(0) -> Mover(28) -> MWObject(80) -> Vehicle(664) -> Mech(756),
1636 bytes total. CreateMessage records follow Replicator -> Entity ->
Mover -> MWMover -> MWObject -> Vehicle -> Mech from start=16 (the
undeclared Connection__Message header), ending at 341 and padded to 344.

tools/decompile/
----------------
  datamap.py        header-driven layout engine; CHAIN + ANCHORS
                    {Vehicle:664, Mech:756} assert the struct offsets
  mw4msg.py         CreateMessage reader/walker
  data.py           .data      constants.py  define/table symbol resolution
  damage.py         .damage    contents.py   .contents
  smallmodel.py     .torso + .engine         instance.py  .instance
  armature.py / armature_parts.py  .armature + armaturedata/armaturevideo
  assembly.py       joint hierarchy renderer
  make_generic_doll.py  builds generic MFD/Radar damage dolls
  verify_*.py       per-type round-trip verifiers

Verified round-trip across all 64 shared chassis:
  .armature      2938/2976 pages     .subsystems  7579/7585 keys
  .data map      6071/6071 values    .data trip   8291/8306 keys
  .damage        6605/6605 keys      .contents    7480/7480 keys
  .torso+.engine 1280/1280 keys      .instance     896/896 keys, 64/64 pages
  armature_parts 1202/1202 .data, 1149/1202 .video

Layout-discovery lessons (documented in DECOMPILING.md)
-------------------------------------------------------
- Never let a field map be discovered by the values that verify it. A
  value-matching pass reported 4288/4288 while mis-assigning 34 keys. The
  map was rebuilt from header declaration order, anchored on uniquely
  resolved fields.
- Read the factory, not the data. 12 .data fields and 5 Torso fields are
  declared plain Stuff::Scalar but multiplied by Radians_Per_Degree in
  Mech_Tool.cpp:889 / Torso_Tool.cpp.
- Strip typedefs before walking a header. A stray `typedef int AttributeID;`
  masked a missing ClassID - two 4-byte errors cancelling out, caught only
  by the ANCHORS assertion.
- A verifier that silently narrows its own input reports success. Braced
  blocks must be hidden before splitting pages, replacing both CR and LF,
  because a `Shadow={...}` block contains a line reading `[shadow]` and
  splitlines() also splits on bare CR.
- NSWIZZLE is undefined, so the #else branch is live and orders members
  differently. bool is 1 byte; char x[MaxStringLength] is 256.
- V4H carries stale Mech IDs (their Atlas is 5, ours 6), so 64 of 65 shared
  chassis are off by one; --retarget-ids emits $(M_<Chassis>)/$(IDS_<Chassis>).

reports/ holds generated diffs. The two ~5 MB manifest-*.tsv intermediates
are gitignored; regenerate everything with run-comparison.sh.

Co-authored-by: Claude Opus 5 (Anthropic) <noreply@anthropic.com>
Co-authored-by: GitHub Copilot <copilot@github.com>
This commit is contained in:
2026-08-08 16:47:57 -05:00
co-authored by Claude Opus 5 GitHub Copilot
parent e088555b96
commit 83478b7666
60 changed files with 13442 additions and 0 deletions
+15
View File
@@ -0,0 +1,15 @@
take 1024 image
reduce image to 320
expand canvas to 340 (centered)
Using a 4x4 black line seperate the sections
***save as unexploded***
split components (no overlaps from upper left to lower right of component)
record coords from upper left to lower right, use even numbers.
(x,y,x1,y1)
Now using the Unexploded view (image in upper left corner) overlay the exploded pieces and record the upper left corner coord.
(x2,y2)
expand canvas to 512x512 (upper left corner)
Save the exploded view in Index Mode.
Modify file(s):
coord.cpp (under GameOS/External dependancies)
+15
View File
@@ -0,0 +1,15 @@
take 1024 image
reduce to 400
expand canvas to 410 (centered)
expand canvas to 512 (upper left corner)
***Save this as Unexploded View***
split components (no overlaps from upper left to lower right of component)
Outline components in white 2x2 pixel
record coords from upper left to lower right, use even numbers.
(x,y,x1,y1)
Now using the Unexploded view (image in upper left corner) overlay the exploded pieces and record the upper left corner coord.
(x2,y2)
Save the exploded view in Index Mode.
Modify file(s):
coord.cpp (under GameOS/External dependancies)
@@ -0,0 +1,77 @@
mechnames[ 0 ] = localize$(DNL_ANNIHILATOR)
mechnames[ 1 ] = localize$(DNL_ARCHER)
mechnames[ 2 ] = localize$(DNL_ARCTICWOLF)
mechnames[ 3 ] = localize$(DNL_ARES)
mechnames[ 4 ] = localize$(DNL_ARGUS)
mechnames[ 5 ] = localize$(DNL_ASSASSIN2)
mechnames[ 6 ] = localize$(DNL_ATLAS)
mechnames[ 7 ] = localize$(DNL_AVATAR)
mechnames[ 8 ] = localize$(DNL_AWESOME)
mechnames[ 9 ] = localize$(DNL_BATTLEMASTER)
mechnames[ 10 ] = localize$(DNL_BATTLEMASTERIIC)
mechnames[ 11 ] = localize$(DNL_BEHEMOTH)
mechnames[ 12 ] = localize$(DNL_BEHEMOTHII)
mechnames[ 13 ] = localize$(DNL_BLACKHAWK)
mechnames[ 14 ] = localize$(DNL_BLACKKNIGHT)
mechnames[ 15 ] = localize$(DNL_BLACKLANNER)
mechnames[ 16 ] = localize$(DNL_BRIGAND)
mechnames[ 17 ] = localize$(DNL_BUSHWACKER)
mechnames[ 18 ] = localize$(DNL_CATAPULT)
mechnames[ 19 ] = localize$(DNL_CAULDRONBORN)
mechnames[ 20 ] = localize$(DNL_CHIMERA)
mechnames[ 21 ] = localize$(DNL_COMMANDO)
mechnames[ 22 ] = localize$(DNL_COUGAR)
mechnames[ 23 ] = localize$(DNL_CYCLOPS)
mechnames[ 24 ] = localize$(DNL_DAISHI)
mechnames[ 25 ] = localize$(DNL_DEIMOS)
mechnames[ 26 ] = localize$(DNL_DRAGON)
mechnames[ 27 ] = localize$(DNL_FAFNIR)
mechnames[ 28 ] = localize$(DNL_FLEA)
mechnames[ 29 ] = localize$(DNL_GLADIATOR)
mechnames[ 30 ] = localize$(DNL_GRIZZLY)
mechnames[ 31 ] = localize$(DNL_HAUPTMANN)
mechnames[ 32 ] = localize$(DNL_HELLHOUND)
mechnames[ 33 ] = localize$(DNL_HELLSPAWN)
mechnames[ 34 ] = localize$(DNL_HIGHLANDER)
mechnames[ 35 ] = localize$(DNL_HOLLANDERII)
mechnames[ 36 ] = localize$(DNL_HUNCHBACK)
mechnames[ 37 ] = localize$(DNL_KODIAK)
mechnames[ 38 ] = localize$(DNL_LOKI)
mechnames[ 39 ] = localize$(DNL_LONGBOW)
mechnames[ 40 ] = localize$(DNL_MADCAT)
mechnames[ 41 ] = localize$(DNL_MADCAT2)
mechnames[ 42 ] = localize$(DNL_MASAKARI)
mechnames[ 43 ] = localize$(DNL_MAULER)
mechnames[ 44 ] = localize$(DNL_NOVACAT)
mechnames[ 45 ] = localize$(DNL_OSIRIS)
mechnames[ 46 ] = localize$(DNL_OWENS)
mechnames[ 47 ] = localize$(DNL_PUMA)
mechnames[ 48 ] = localize$(DNL_RAVEN)
mechnames[ 49 ] = localize$(DNL_RIFLEMAN)
mechnames[ 50 ] = localize$(DNL_RYOKEN)
mechnames[ 51 ] = localize$(DNL_SHADOWCAT)
mechnames[ 52 ] = localize$(DNL_SOLITAIRE)
mechnames[ 53 ] = localize$(DNL_SUNDER)
mechnames[ 54 ] = localize$(DNL_TEMPLAR)
mechnames[ 55 ] = localize$(DNL_THANATOS)
mechnames[ 56 ] = localize$(DNL_THOR)
mechnames[ 57 ] = localize$(DNL_ULLER)
mechnames[ 58 ] = localize$(DNL_URBANMECH)
mechnames[ 59 ] = localize$(DNL_UZIEL)
mechnames[ 60 ] = localize$(DNL_VICTOR)
mechnames[ 61 ] = localize$(DNL_VULTURE)
mechnames[ 62 ] = localize$(DNL_WARHAMMER)
mechnames[ 63 ] = localize$(DNL_WOLFHOUND)
mechnames[ 64 ] = localize$(DNL_ZEUS)
mechnames[ 65 ] = localize$(DNL_CHAMPION)
mechnames[ 66 ] = localize$(DNL_JENNER2C)
mechnames[ 67 ] = localize$(DNL_DASHER)
mechnames[ 68 ] = localize$(DNL_MARAUDER)
mechnames[ 69 ] = localize$(DNL_THUNDERBOLT)
mechnames[ 70 ] = localize$(DNL_GRIFFIN)
//mechnames[ 70 ] = localize$(IDS_ML_NA_INFO)
//mechnames[ 71 ] = localize$(IDS_ML_NA_INFO)
+77
View File
@@ -0,0 +1,77 @@
mech_name[ 0 ] = localize$(DNL_ANNIHILATOR)
mech_name[ 1 ] = localize$(DNL_ARCHER)
mech_name[ 2 ] = localize$(DNL_ARCTICWOLF)
mech_name[ 3 ] = localize$(DNL_ARES)
mech_name[ 4 ] = localize$(DNL_ARGUS)
mech_name[ 5 ] = localize$(DNL_ASSASSIN2)
mech_name[ 6 ] = localize$(DNL_ATLAS)
mech_name[ 7 ] = localize$(DNL_AVATAR)
mech_name[ 8 ] = localize$(DNL_AWESOME)
mech_name[ 9 ] = localize$(DNL_BATTLEMASTER)
mech_name[ 10 ] = localize$(DNL_BATTLEMASTERIIC)
mech_name[ 11 ] = localize$(DNL_BEHEMOTH)
mech_name[ 12 ] = localize$(DNL_BEHEMOTHII)
mech_name[ 13 ] = localize$(DNL_BLACKHAWK)
mech_name[ 14 ] = localize$(DNL_BLACKKNIGHT)
mech_name[ 15 ] = localize$(DNL_BLACKLANNER)
mech_name[ 16 ] = localize$(DNL_BRIGAND)
mech_name[ 17 ] = localize$(DNL_BUSHWACKER)
mech_name[ 18 ] = localize$(DNL_CATAPULT)
mech_name[ 19 ] = localize$(DNL_CAULDRONBORN)
mech_name[ 20 ] = localize$(DNL_CHIMERA)
mech_name[ 21 ] = localize$(DNL_COMMANDO)
mech_name[ 22 ] = localize$(DNL_COUGAR)
mech_name[ 23 ] = localize$(DNL_CYCLOPS)
mech_name[ 24 ] = localize$(DNL_DAISHI)
mech_name[ 25 ] = localize$(DNL_DEIMOS)
mech_name[ 26 ] = localize$(DNL_DRAGON)
mech_name[ 27 ] = localize$(DNL_FAFNIR)
mech_name[ 28 ] = localize$(DNL_FLEA)
mech_name[ 29 ] = localize$(DNL_GLADIATOR)
mech_name[ 30 ] = localize$(DNL_GRIZZLY)
mech_name[ 31 ] = localize$(DNL_HAUPTMANN)
mech_name[ 32 ] = localize$(DNL_HELLHOUND)
mech_name[ 33 ] = localize$(DNL_HELLSPAWN)
mech_name[ 34 ] = localize$(DNL_HIGHLANDER)
mech_name[ 35 ] = localize$(DNL_HOLLANDERII)
mech_name[ 36 ] = localize$(DNL_HUNCHBACK)
mech_name[ 37 ] = localize$(DNL_KODIAK)
mech_name[ 38 ] = localize$(DNL_LOKI)
mech_name[ 39 ] = localize$(DNL_LONGBOW)
mech_name[ 40 ] = localize$(DNL_MADCAT)
mech_name[ 41 ] = localize$(DNL_MADCAT2)
mech_name[ 42 ] = localize$(DNL_MASAKARI)
mech_name[ 43 ] = localize$(DNL_MAULER)
mech_name[ 44 ] = localize$(DNL_NOVACAT)
mech_name[ 45 ] = localize$(DNL_OSIRIS)
mech_name[ 46 ] = localize$(DNL_OWENS)
mech_name[ 47 ] = localize$(DNL_PUMA)
mech_name[ 48 ] = localize$(DNL_RAVEN)
mech_name[ 49 ] = localize$(DNL_RIFLEMAN)
mech_name[ 50 ] = localize$(DNL_RYOKEN)
mech_name[ 51 ] = localize$(DNL_SHADOWCAT)
mech_name[ 52 ] = localize$(DNL_SOLITAIRE)
mech_name[ 53 ] = localize$(DNL_SUNDER)
mech_name[ 54 ] = localize$(DNL_TEMPLAR)
mech_name[ 55 ] = localize$(DNL_THANATOS)
mech_name[ 56 ] = localize$(DNL_THOR)
mech_name[ 57 ] = localize$(DNL_ULLER)
mech_name[ 58 ] = localize$(DNL_URBANMECH)
mech_name[ 59 ] = localize$(DNL_UZIEL)
mech_name[ 60 ] = localize$(DNL_VICTOR)
mech_name[ 61 ] = localize$(DNL_VULTURE)
mech_name[ 62 ] = localize$(DNL_WARHAMMER)
mech_name[ 63 ] = localize$(DNL_WOLFHOUND)
mech_name[ 64 ] = localize$(DNL_ZEUS)
mech_name[ 65 ] = localize$(DNL_CHAMPION)
mech_name[ 66 ] = localize$(DNL_JENNER2C)
mech_name[ 67 ] = localize$(DNL_DASHER)
mech_name[ 68 ] = localize$(DNL_MARAUDER)
mech_name[ 69 ] = localize$(DNL_THUNDERBOLT)
mech_name[ 70 ] = localize$(DNL_GRIFFIN)
mech_name[ 71 ] = localize$(IDS_ML_NA_INFO)
mech_name[ 72 ] = localize$(IDS_ML_NA_INFO)
+24
View File
@@ -0,0 +1,24 @@
538,539c538,557
< LastMechID = 64 ;
< NoMechID = 65 ;
---
> M_Champion = 65 ;
> M_Jenner2c = 66 ;
> M_Dasher = 67 ;
> M_Marauder = 68 ;
> M_Thunderbolt = 69 ;
> M_Griffin = 70 ;
> LastMechID = 70 ;
> NoMechID = 71 ;
>
>
> //sip
> //not needed here
> //M_CameraShip = LastMechID+1;
> //EmptyMechID = LastMechID+2;
> //sip
> //sip
> LastMP1MechID = M_Solitaire;
>
> //
>
+90
View File
@@ -0,0 +1,90 @@
6,7c6,7
< playericon=Content\Textures\stockdecals\decal_48.tga
< teamicon=Content\Textures\stockdecals\decal_48.tga
---
> playericon=Content\Textures\stockdecals\decal_49.tga
> teamicon=Content\Textures\stockdecals\decal_50.tga
29c29
< bitdepth=16
---
> bitdepth=32
56c56
< visibility=1
---
> visibility=0
60c60
< heaton=0
---
> heaton=1
68,69c68,69
< unlimitedammo=1
< friendlyfirepercentage=0
---
> unlimitedammo=0
> friendlyfirepercentage=100
79c79
< ruletype=2
---
> ruletype=17
84c84
< allowedbeam1=ffffffff
---
> allowedbeam1=fffffffd
86c86
< allowedmissile1=ffffffff
---
> allowedmissile1=ff3bffff
88c88
< allowedprojectile1=ffffffff
---
> allowedprojectile1=ffffdfff
112c112
< lrpt=072003082ab4b906fabd1c154d3d8fd77942028e
---
> lrpt=032020102ab4b906fabd1c154d3d8fd77942028e
115,118c115
< RuleBook=1
< DawnWar=1
< BiggieSizeIt=1
< CanYouHearTheFootSteps=1
---
>
144,181d140
<
< [RookieMission]
< // Default mission loaded when the console opens and when "Default" is clicked.
< // All entries are optional - omit any to keep the hardcoded built-in default.
< //
< // MissionName - exact display name as it appears in the map dropdown
< // default: ScarabStronghold - Attrition
< // GameType - 0-based index into the game-type dropdown (2 = Attrition)
< // default: 2
< // TimeLimit - time limit in minutes; -1 means use the server's default time
< // default: -1 (uses g_nTimeList_Value, currently 7 min)
< // Visibility - 0=Clear 1=Light Fog 2=Medium Fog 3=Heavy Fog
< // Weather - 0=Off 1=Rain
< // TimeOfDay - 0=Day 1=Night
< // Radar - 0=Novice 1=Off 2=Bars 3=Unlimited
< // HeatOn - 0=Off 1=On
< // FriendlyFire - 0=Off 100=Full (percentage)
< // SplashDamage - 0=Off 1=On
< // UnlimitedAmmo - 0=Off 1=On
< // WeaponJam - 0=Off 1=On
< // AdvanceMode - 0=Off 1=On
< // ArmorMode - 0=Off 1=On
< //
< // Example: uncomment and edit lines below to customize
< //MissionName=ScarabStronghold - Attrition
< //GameType=2
< //TimeLimit=-1
< //Visibility=0
< //Weather=0
< //TimeOfDay=0
< //Radar=0
< //HeatOn=0
< //FriendlyFire=0
< //SplashDamage=0
< //UnlimitedAmmo=1
< //WeaponJam=0
< //AdvanceMode=0
< //ArmorMode=0
+117
View File
@@ -0,0 +1,117 @@
Firestorm Battletech SMT Build Four(v4h).
This is a more secure release build and has been tested with about 80 variants on the extra models.
Controls defaults reset. Menu updated again. Skins amended and should be duplicate free.
The six hard to kill mechs are added and stable.The base/stock variant will not have and advanced
gyro as a starting addition. All weapons sites are based on mech design and are fixed as displayed.
The ammo limit continues to be set at three tons per weapon maximum. This ensures balance and resolves conflicts.
Restrictions on the new mechs are fixed and if the model can't accomodate a function it will no be
added.
Updated maps within Solaris will contain the occasional drop out of voice sounds.Live with it!. Some of the mech generic sounds overide additional voices in the pods. Live with it.
Any music will only play in the Server pod. All additinal audio will continue to work as normal.
Tested in the stock build with up to Six Pilots with no issues.
Firestorm Battletech SMT Build Four(v4f).
Important.
All spinning mechs displayed on the Secondary screen pre mission are accurate. The main details below the mech are correct except class and type. If the spinning model is not the same model as chosen from the console the build has been corrupted. This can happen when variants are saved and during game crashes.
When adding new variants you must test each new variant as a corrupted variant can corrupt the build.
Do create new variants on the new build but you must check they do not corrupt the build when added.
You are advised to create new variants for the new mechs on the newest build only. Test as you go.
Save the new variants seperately once tested so you can add again if you get a corrupted build.
one additional five level mech added. This a std chassis and does not include Jumpjets options for this model.No animation for Jump jets applicable for this model.
Mech lab is still as issue for crashes when saving use scroll lock to break out.Watch for corrupt variants
The hsh folder has been archived as hshold.
The new hsh folder is a compromise for the new mechs to standardise the block hud display.
Huds are not amended use the bar chart huds for models which are accurate.
All printouts are accurate for mechs including new versions.
Amended Hud and new Mech tested on Eighty plus test runs.Stock and Variants with no problems.
Firestorm Battletech SMT Build Four(v4e).
one additional five level mech added.
Mech lab is still as issue for crashes when saving use scroll lock to break out.
This is still the best way to exit a crash and will help protect against gpu/cpu failures.
Additional stock mechs are limited to 1990 basic technical stats as standard.
Huds are not amended use the bar chart huds for models which are accurate.
All new mechs use low level block display.
All printouts are accurate for new mechs.
Main view display will show all new mechs as Unclassified.
So you can ignore technical info on the Main view screen pre game launch.
Game lag limited for additional models.
Actual lag in each pod will be dependent on the pea sized cpu/gpu running on your pod.
New mechs should have better starting groups for weapons pre set.
Any new mech will not have rear facing weapons.
Firestorm Battletech SMT Build Four(v4d).
one additional high level mech added.
Subsystems error amended to limit crashes in game with high level LOD.
Mech lab is still an issue for crashes when saving use scroll lock to break out.
Huds are not amended use the bar chart huds for models.
All printouts are accurate.
Main view display correct model but will show parent mech details.So ignore technical info on the Main view screen pre game launch.
Firestorm Battletech SMT Build Four(v4c)
one additional mech added . Huds and displays will still not match correct mech visuals. This is an index link issue . The additional mech is the only point of this update to test the high level lod on the erf in the pod to see how much lag there is in the pods.
It is best to simply amend your huds to the bar chart hud in this build as it always shows the correct damage.
Still be aware of the mech lab crash always use scroll lock to exit when this crashes/freezes this will help minimise any problems with your gpu caused by this type of crash.
Firestorm Battletech SMT Build Four(v4)
MechLab.
Weapon box sizes set to minimum size to show more of the background mech being edited. Special Weapon boxes locations have been clearly indicated on the chassis weapon tab and not simply mixed with other weapon boxes. If they don't have a special displayed in the mech lab the
model does not have one. Weapon ammo is limited to no more than three tons for every individual weapon. Example Ac10 cannot mount more than three tons of ammo . All mechs can be created from the new mech button and the subsequent drop down box. These will all show in the main mech lab
after they have been created and can be edited from here. The Battlemaster and Behmoth will only display in the mechlab list once created but both versions will show in that drop down. So behemoth,behemothII and all there variants can be edited from the parent mech.
All mechs are playable in both Dragon Multiplayer and Console Multiplayer. There are also no conflicts with printed reports on mission with the correct mech represented with each report. This has been tested heavily. The hooks for additional mechs are in place.
There is a specific crash within the build while working within the mech lab . This crash occurs most often when you try to save a mech when in the group tab. When editing a mech, less crashes occur when saving from the chassis tab and not the weapon tab. Should there be a crash the scroll lockkey will exit the crash. Best way to exit a crash in this GOS build.
Callsigns.
Callsigns within the Dragon multiplayer can be amended within the firestorm.h file. The length of the Player name needs to be shorter than twelve characters to not interfere with scoring. Callsigns within the console cannot be edited from this file. they can only be edited in the code
or when built from source. There are a number of changes in the callsigns for console multiplayer. e g Blackthorn, Sipstrassi and names with all Capital letters removed.
Hud displays in Dragon multiplayer will not reflect the mech actually being used on all occasions. But reflect the chassis used for this.Its a compromise based on the HSH limits.
+52
View File
@@ -0,0 +1,52 @@
#define NUM_CALLSIGNS 20
//These need to cover the full range of levels 0 to 9 at least one of each
//Twelve Characters at the most please as the length is apparent on scoreboard
callsigns
{
GUI_CREATE
{
string names[NUM_CALLSIGNS]
int levels[NUM_CALLSIGNS]
names[0] = "Vlad Ward"
names[1] = "Blackthorns"
names[2] = "Phelan Kell"
names[3] = "Morgan Kell"
names[4] = "Vance Rezak"
names[5] = "T. Sandoval"
names[6] = "Jerimiah Rose"
names[7] = "Sun Liao"
names[8] = "A. Focht"
names[9] = "Sipstrassi"
names[10] = "Diana Pryde"
names[11] = "Sturm Kintaro"
names[12] = "Angela Bekker"
names[13] = "Constant Tseng"
names[14] = "Tamoe Sakade"
names[15] = "Theo Kurita"
names[16] = "Shin Yodama"
names[17] = "Maeve Wolf"
names[18] = "Kael Pershaw"
names[19] = "Salome Ward"
levels[0] = 8
levels[1] = 9
levels[2] = 8
levels[3] = 8
levels[4] = 5
levels[5] = 9
levels[6] = 5
levels[7] = 7
levels[8] = 9
levels[9] = 8
levels[10] = 9
levels[11] = 9
levels[12] = 8
levels[13] = 0
levels[14] = 1
levels[15] = 6
levels[16] = 5
levels[17] = 4
levels[18] = 3
levels[19] = 2
}
}
+144
View File
@@ -0,0 +1,144 @@
#define NUM_CALLSIGNS 64
//These need to cover the full range of levels 0 to 9 at least one of each
//Twelve Characters at the most please.
// If you update the names here, please update Code\MW4\MW4Shell.cpp as well! Just search for NUM_CALLSIGNS.
callsigns
{
GUI_CREATE
{
string names[NUM_CALLSIGNS]
int levels[NUM_CALLSIGNS]
names[0] = "Sipstrassi"
names[1] = "Scarab"
names[2] = "Pocus"
names[3] = "Hacksaw"
names[4] = "Gnaw"
names[5] = "Darklord"
names[6] = "Spice"
names[7] = "Rocker"
names[8] = "Leepus"
names[9] = "Coolhand"
names[10] = "Piotr"
names[11] = "Propwash"
names[12] = "Mecca"
names[13] = "Rusty"
names[14] = "Faith"
names[15] = "Thomcat"
names[16] = "Anubis"
names[17] = "Tryptic"
names[18] = "Isis"
names[19] = "Suredude"
names[20] = "Jerimiah Rose"
names[21] = "Lucky"
names[22] = "Gothmog"
names[23] = "Grayson"
names[24] = "Arioch"
names[25] = "Blackthorns"
names[26] = "Splotch"
names[27] = "Paladin"
names[28] = "Macleod"
names[29] = "ArcLight"
names[30] = "BooYah"
names[31] = "Von"
names[32] = "Azero"
names[33] = "Wraith"
names[34] = "Undead"
names[35] = "Mantis"
names[36] = "Wicced"
names[37] = "Tiny"
names[38] = "Crusher"
names[39] = "Darkman"
names[40] = "Oxen"
names[41] = "Morfane"
names[42] = "Darkheart"
names[43] = "Joker"
names[44] = "Mouse"
names[45] = "Greywolf"
names[46] = "Pyrotech"
names[47] = "Elengil"
names[48] = "Undomiel"
names[49] = "Marz"
names[50] = "Kuroshii"
names[51] = "Crow"
names[52] = "Con"
names[53] = "Lysosome"
names[54] = "Dax"
names[55] = "HamHouke"
names[56] = "Intrepid"
names[57] = "Toad"
names[58] = "Asterix"
names[59] = "Apophis"
names[60] = "Thor"
names[61] = "Sauron"
names[62] = "Pharaoh"
names[63] = "Dicion"
levels[0] = 1
levels[1] = 7
levels[2] = 6
levels[3] = 8
levels[4] = 6
levels[5] = 7
levels[6] = 7
levels[7] = 2
levels[8] = 5
levels[9] = 6
levels[10] = 7
levels[11] = 8
levels[12] = 5
levels[13] = 2
levels[14] = 7
levels[15] = 4
levels[16] = 3
levels[17] = 2
levels[18] = 4
levels[19] = 7
levels[20] = 2
levels[21] = 2
levels[22] = 4
levels[23] = 7
levels[24] = 4
levels[25] = 2
levels[26] = 5
levels[27] = 6
levels[28] = 7
levels[29] = 8
levels[30] = 8
levels[31] = 6
levels[32] = 2
levels[33] = 2
levels[34] = 5
levels[35] = 6
levels[36] = 3
levels[37] = 2
levels[38] = 7
levels[39] = 6
levels[40] = 7
levels[41] = 6
levels[42] = 2
levels[43] = 6
levels[44] = 5
levels[45] = 6
levels[46] = 8
levels[47] = 7
levels[48] = 5
levels[49] = 6
levels[50] = 5
levels[51] = 7
levels[52] = 3
levels[53] = 5
levels[54] = 4
levels[55] = 4
levels[56] = 4
levels[57] = 4
levels[58] = 4
levels[59] = 4
levels[60] = 4
levels[61] = 8
levels[62] = 7
levels[63] = 0
}
}
+54
View File
@@ -0,0 +1,54 @@
//THIS FILE CONTAINS MERCS CLIENT CONFIGURABLE OPTIONS
// DO NOT EDIT THIS FILE UNLESS YOU KNOW WHAT YOU ARE DOING
//************************************************************
// set SHOW_TIME to 'true' to enable the wall clock, 'false'
// to disable it.
#define SHOW_TIME false
//************************************************************
//sip // 1 is firestorm standard and there is no zeus true
//sip // 0 is standard mech list including zeus false
#define USE_ALLOWED_MECHS 1
//************************************************************
// set Battle_Ammo to 'true' to enable the ammo limit per weapon, 'false'
// to disable it.
// max three ton per weapon as per mech space specification.
#define Battle_Ammo true
//************************************************************
// set SERVER_DETAIL to 'true' to enable server details
// in the Server Lobby, 'false' to disable it.
#define SERVER_DETAIL false
//************************************************************
// set this value to 'true' to enable observer mode, or
// 'false' to disable it.
#define USE_OBSERVER true
//************************************************************
// set this value to how many seconds to wait before
// auto-launching into camera mode. Setting to 15 or 20 seconds
// is a good value.
#define OBSERVER_WAIT_TIMEOUT 15
//************************************************************
// setting this value sets the base priority you want the
// game to run at. Note, this only has an effect on WinXP and
// Win2k systems. You must have one of these selected regardless.
//#define BASE_PRIORITY "BELOW_NORMAL"
#define BASE_PRIORITY "NORMAL"
//#define BASE_PRIORITY "ABOVE_NORMAL"
//************************************************************
// This is the music files you wish to loop. It must be in
// .wav format.
#define SHELL_MUSIC_FILENAME "mechevolution.wav"
//#define SHELL_MUSIC_FILENAME "nextmove_music.wav"