READ ALL OF THIS AND TRY BEFORE CRITIZING THIS TUTORIAL OR THIS METHOD
And also this is not a perfect way to edit halo 2 mapfiles so you might have bugs etc this is why we didn't know if we should release info or not.
What we need:
-Entity 1.6UE (or whatever you want but i'll be using this)
-Insolence
- Mystery app: http://forums.halomods.com/viewtopic.php?t=74515
-WinHex or any other good hexeditor that you know how to use
-ScriptTools
-A good knowledge of halo 2 maps which involves a user functionally brain.
-Clean 03a_oldmombasa.map
-Clean lockout.map
-Clean shared.map,sp_shared.map,mainmenu.map on your maps folder
XZodia's complete plugins:
http://forums.remnantmods.com/viewtopic ... 2464#p2464
1-Making the map loadable on Multiplayer(found by XZodia)
First of all we need to make the SP map loadable on MP you need to use Mystery app, open oldmombasa and don't modify the default settings, keep all, just clic convert:
This basicaly will swap a few idents(dependencies) on matg that are the fp models and biped for players that are nulled out on the SP matg but needed for MP.
2.a- Adding Multiplayer: Adding multiplayer Widgets
1-Adding MP menu tags:
Open Entity,
-Open Lockout.map
Go to [wgtz]
Build multiplayer.info
Clic Parsed and recursive, save to a folder
Wait until it says ok.
Close the map
-Open Oldmombasa
Clic Build
Build the tag ui\multiplayer
Wait until it says "ok"
2-Relinking to MP menu:
Go to [matg]
Right clic
Display > Idents
Search "Widget collections"
Null out "ui\single_player"
Swap "Widget collection - Multiplayer"
to "ui\multiplayer"
This is what you should have now:
3-Setting maptype to multiplayer:
Got to scnr
Open meta editor
Set the maptype to multiplayer on the enum:
Clic save
2.b- Adding Multiplayer: Replacing SP English String Index and Table by MP English String table
We need to add the MP string table because it contains the MP menu strings that doesn't exist on the SP string table, by doing this the SID table won't point to the right offsets on the new(MP) string table so we won't have anymore message for pickup weapons, riding vehicles... but we will have an MP menu with text in it which is much more important.
This is a another reason of why we wouldn't like to release this, don't come complain "this sucks no pick up weapon message" because there are no apps to import/export string tables and SID tables that's all, we'll do it by Hex, if someone makes that app we could get all weapon pickup messages and mp menu with string working perfectly but actually not that kind of apps and i don't know programming.
1-Searching String Index/Table Offsets:
-Open Oldmombasa on Entity
Go to [matg]
Open meta editor
Scroll down to the bottom
Find these values:
Copy those on a text file.
-Open Lockout on Entity
Go to [matg]
Open meta editor
Scroll down to the bottom
Find these values:
2-Copying and Replacing English String Index and Table from Lockout to Oldmombasa :
A- Copying the lockout english string index and table into a new file
Open The HexEditor
Open Lockout
Position > Go To Offset 17799168
Which is the start offset for the string table
But we need to find the end of this,
-Search(Search> Find Text) for the word:
Bomb planted!
All the MP maps string table finish by that string.
Which is the end of the string table at the offset 17847281
Now we are going to copy the English String Index and Table of lockout into a new file
We selec the string index and table
Edit > Define Block...
And now:
Edit > Copy Block > Into a New File
Save the file.dat as lockout_strings.dat
You should now have a new window on Winhex which contains the selection we did, so the the english string index and table of lockout.
Keep this file you'll need it for others MPC ^^
Select all (CTRL+A)
The size is indicated at the right bottom 62992 bytes for lockout english string index and table.
On the hex editor close lockout.
B- Removing the Oldmombasa english string index and table
Open Oldmombasa on the hexeditor
Remember matg?
Position > Go To Offset 133235712
Which is the start offset for the string table
-Search(Search> Find Text) for the word:
Rotate Left/Right
All the SP maps string table finish by that string.
The end of Oldmombsa string table is at offset 133278238
So we know that this is the size of the string index + string table for oldmombasa:
From 133223424
To 133278238
133278238-133223424= 54814 bytes
But lockout, well MP string index + string table size is about 62992 bytes
Which is more than the SP map strings
So we will need to overwrite a part of the japanse string table so we can "properly" add the MP strings
For this:
62992-54814=8178
We need + 8178
We will overwrite 8178 bytes after the end of the english SP string table and the japansese string table.
Start by selecting the block(which is olmombasa SP english string idex/table)
From 133223424
To 133278238
Edit> Remove
Yes
OK
Go to offset:133223424
Remember we need +8178 so the MP string table/index can fit.
133223424 + 8178 = 133231602
Start by selecting the block(which is olmombasa SP english string idex/table)
From 133223424
To 133231602
Edit> Remove
Yes
OK
C- Replacing Oldmombasa SP string index and table by lockout MP string index and table
Fine now we go to the lockout_strings.dat file
Select all
Edit > Copy All > Normally
Return to the Olmombasa file
Select the offset 133348864
Edit > ClipBoard Data > Paste
OK
C- Updating new String Table/Index offsets size and string count
Fine we just replaced the SP strings by the MP strings but as the MP string index/table is bigger then the SP we'll need to update the string count, size and start offsets on oldmombasa matg.
Keep the hex editor open.
Open oldmombasa on Entity
Go to [matg]
Open Meta Editor
Replace the English string values as the same as lockout except for String Index and String table.
english string cout: 1846
English string table size: 48115
The start offset should be the same as it was on the original oldmombasa
String Index Offset:133223424
However the string table offset should logical have changed as the MP string table is bigger, we took from lockout, and first string of this table is "Lockout"
So use the search function on WinHex to find "Lockout" to get the string table starting offset
String Table Offset:find it xD
Set the japanese values to 0.
Clic Save!
3- Adding Mulg tag(found by XZodia)
Open oldmombasa in insolence.
On the SP maps there is a mulg tag indeed, but this one is EMPTY.
So we will use Insolence to rename the existing tag to something different then multiplayer\multiplayer_globals
Per example i'll rename the existing tag to multiplayer\multiplayer_xlobals
Re-open the map on Insolence , open oldmombasa and a clean lockout.
Transfer the mulg from lockout to oldmombasa.
Wait until it finish transfering.
Close insolence.
Optional:
You can to this after the first testing the map because mulg may not be transfered correctly and can freeze the map, it happened to me.
Now open entity go to [matg], show idents, swap the unsused mulg to the new MP mulg you just transfered, we need mulg so there are teams for players an ai, because in MP the enemies and allies are identified by team colors which are handled with mulg.
3- Fixing small bugs
Ok now we got MP menu, mulg there are a few bugs, insolence corrupted some sounds.
Go to [bipd] masterchief and nullout it foot tag because if you don't do this you can hear a corupted sound when you jump...
Now the MP menu, the [wgit] tags use the [unic] tags which point to the string table.
But some of the MP unic were already in the map before we transfered the MP [wgtz] because the SP used the same, and those are still pointing to the SP string table so if we don't fix those unic some menus will have corrupted strings or no strings at all.
To fix this it's easy, open lockout.map on entity and oldmombasa you are working on, go to unic tags, open meta editor on both, compare the existing tags on lockout that are on oldmombasa too(now almost MPC).
If you see for the same tag(that exist on both maps) a different value on oldmombasa
Change the English string offset and english string count as it is on lockout.
Check each [unic] tag that exist on both maps and always make sure that every [unic] tag on oldmombasa has the same value as on lockout for the english English string offset and english string count.
4- Removing cinematics by script editing
This is necesary to make the map playable on syslink, we need to remove cinematics how ever we need to keep the ai spawns by script working which means that we need to analyse and understand all the scripts for this SP map follwing the execution order is the logical way to do this.
I can't remember what i exaclty did when i removed cinematics on olmombasa, each SP map cinematics works differently, how those are executed stoped etc is always different so i'll try to guide you as best as i can with logical steps that can be used to attempt to remove cinematics on any other SP maps but i can't guarantee anything.
Open oldmombasa on Scripts tools.
Scroll down and find the script named "mission main" the type of this script is "startup" it's the first script that will be executed when the map is loaded.
This is the script:
Code: Select all
(script startup mission_main
(begin
(ai_allegiance player human)
(ai_allegiance covenant prophet)
(objectives_clear)
(if (> (player_count) 0)
(start))
)
)
This execute the script called "start" if there is at least one player or more playing the map.
Close this window.
So next script we are going to look at is "start"
Open the script called "start"
Code: Select all
(script static start
(begin
(wake mission_start)
)
)
This one execute the script called "mission_start"
Close it
Open the script "mission_start"
Code: Select all
(script dormant mission_start
(begin
(wake flashlight_control)
(cinematic_snap_to_black)
(cinematic_intro)
(wake e1_main)
(sleep 1)
(cache_block_for_one_frame)
(sleep 1)
(chief_recovery_sequence)
(wake chapter_title0)
(sleep 150)
(game_save)
(sleep_until (volume_test_objects tv_mission_end (players)) 8)
(set g_mission_over True)
(playtest_mission)
(sleep 15)
(sound_class_set_gain "" 0 15)
(cinematic_fade_to_white)
(sleep 15)
(game_won)
)
)
This make the screen go black and that the player cannot control the camera or move
Remove (chief_recovery_sequence)
This is another script wall, if you look at the script called " (chief_recovery_sequence) " it's just the script that makes
blurry vision after the cinematic, we don't need this and this could also create problems between host and player so we just remove it's execution from the mission_start script.
Remove (sound_class_set_gain "" 0 15)
If you don't they'll be a bug and no sound while playing...
Always remove the "game_save"(checkpoint) commands because it can cause again problems on syslink, and anyway we can't recover checkpoints on MP.
Now clic "Compile"
Open the script cinematic intro.
Now there's still the "Cinematic intro" we won't remove it from the mission_start because if we look at it:
Code: Select all
(script static cinematic_intro
(begin
(if (cinematic_skip_start)
(begin
(c03_intro)
))
(cinematic_skip_stop)
)
)
So we just need, in this case, to remove the execution of the cinematic script, like this:
Code: Select all
(script static cinematic_intro
(begin
(cinematic_skip_stop)
)
)
Return to the script "mission_start"
After cinematic_intro this script execute the script called: e1_main which is the first part of the mission script, it spawns ai etc don't touch it.
Close the script.
Hopefully this SP map has only one cinematic which was the intro cinematic we just removed, just one more little thing i did on the script called:
cinematic_skip_stop
Which is used everytime a cinematic ends or the player skip it.
Open it delete the text and paster this:
Code: Select all
(script static cinematic_skip_stop
(begin
(cinematic_skip_stop_internal)
)
)
I removed the (if (not (game_reverted))
(game_revert))
Because it can revert the game to last checkpoints, blablabla i don't really remember why but it caused problems so just do it
That's all for oldmombasa.
Now imagine others SP maps that have 2 or 3 or more cinematics, that's muchhhhh more complex because some scripts are so complex, you need to make suare that after each cinematic there is not need to switch sbsp,teleport players or spawn objects, and not mentioning that the script tools doesn't compile fine when the script have complex commands like "if" "and" ">" "<" "=" etc and just mess up everything.
Good luck and hopefully this helped and i hope to see some MPC mods BECAUSE I SHARE THIS SO PEOPLE MAKE MODS
Some of the members here were complaining about not info released?
Now please make an MPC map now i shared all i know to make MPC because this took me 4-5h to write
Thanks