Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Topics - Dark_Phantom

Hello there!

One of my big projects recently has been to try to document some of the bonuses in BF1 and get a much clearer idea of what they do and possibly patch one of the cut bonuses, Surplus Supplies.
In my research, I was trying to figure out what Elite Training exactly does.  I don't have a complete answer, but I have a much better one than I did before, and can confirm that it does work.  The reason it is disputed is because it is tuned so low that it may seem negligible.  I posted this in the GT server but here is a more permanent and visible home for it.
The chunk of code I identified is this.  I've not ran the function all the way down to the nitty gritty but here's the gist:
Code (cpp) Select
                    /* Is Elite Training Selected? */
      if (*(char *)(&mActiveBonus + local_cc) < '\0') {

If Elite Training was selected, it runs the function CombatUtil::SetAISkill(4,0).  Tracing this function down, it does some calculations which boil down to this:

team1difficulty = currentSkillLevel + 4
team2difficulty = currentSkillLevel + 0

CombatUtil::SetAIAimValues() then runs and detects the difficulty levels (set through global variables) and sets a bunch of variables like weapon spread/yaw/damping, whatever all that means other than "their aiming sucks less if the difficulty is higher".  (You can see this behavior in SPTest AI cam, the AI can be looking at you and then practically shoot sideways on lower difficulties)

This is not the only influence on AI behavior, but as far as Elite Training is concerned, this seems to be the impact, although it's quite possible that I've missed more stuff in the AIUtil/CombatUtil functionality.  The way the game calls bonuses is extremely haphazard lol.

As a requested test, I changed the value at 1841e8 in the SWBFSpy exe (which is currently 6A 04 in hex) and modified the 04 to another value.  In this case, I picked 20 in hex (which is actually 32).  The easiest way to select the bonus is to play Birth of the Rebellion and pick any map.  Your AI should perform much better than previously, and in the couple of battles I tried (on Hard!), they won the battle by themselves and it wasn't really close.

My research is mainly conducted using Ghidra.  Let me know what you think.
Forum News and Forum Rules / Configuration Change
March 28, 2024, 09:38:14 AM
Hello there,

I'm working to update some settings and the first changes have been made.  Two issues seem to be remedied:
1.) Initial loads of SWBFGamers result in a plaintext version of the site
2.) Images that were loaded from unsecure pages were broken.  The site now caches them and shows them to you.  This should fix a lot of broken images.

Let me know if anything seems off or is broken by this change.  Thanks.

Basically here we can see that end_weap_tripwire does work in the retail game.  The only thing that is needed is to make sure you have the tripwire asset from the END world folder, and also the animation files (zafbin/zaabin).

You will need to edit the end_weap_tripwire.msh file in XSI or Blender to remove the collision that has been set up - it seems that breaks it in the retail version (only... strangely enough).  The munger will generate the correct collision.

That's it!  I wish the trap class got more usage in mods but 20 years later, it's probably too little, too late.

A side note: Units and vehicles both DO trigger traps.  The difference seems to be the RayTriggerMinSpeed modifier.  The only other traps in the game are the tree smashers on Endor and the also unused log trap.
Released Maps and Mods / 2023 SWBF1 Side Builders
January 22, 2023, 05:16:19 PM
I was requested to update the Side Builders and here they are. Everything should already be set up for 1.2 and this also includes munging for the side FPMs which I don't believe has been included before.

The munger does every side, please read the readme on how to disable one side from being munged.

Long live BF1!;sa=view;down=1621

Dantooine: Jedi Enclave is a port to Star Wars Battlefront (2004) of a location of the same name from Star Wars: Knights of the Old Republic (2003).  The map is iconic in that it's where the player "officially" starts their journey to become a Jedi.

This is a release version (1.1) of Dark_Phantom's conversion of Dantooine: Jedi Enclave (dpk02). Both GCW and CW versions work correctly.  There are no custom sides. Just extract the zip and place the DPK02 folder in your Addon directory for SWBF1.

Bugs fixed in 1.1 (vs 1.0):
Allow ordnance to go through the invisible roof (Recon droids now work where appropriate in the roundabout and the Landing Zone)

Credits and extra information are contained in the readme

Alright, so you're coming along in map-making and you're placing some ambient lights on your map.
First of all, in case you forgot or are new:
Lights are odfs of ClassLabel "Light". Light odfs are attached to hardpoints of a mesh using "AttachOdf" and "AttachToHardPoint" like this:
AttachOdf = "light_flicker"
AttachToHardPoint = "hp_light"

Great, we've got it attached.  There's one field here that has never been covered on this website and I'm here to see to it that it gets fixed. All lights in BF1 will default to FlickerType = 0, which is none (and if you put this in the odf, that's what you'll get, no flicker, just a light).

Ok, but you've got some lighting in a dim hallway and you want it to... do something.  You have three options.
FlickerType = StrobeFade //or just 3FlickerType = Pulse //or just 4FlickerType = Flicker //or just 5>>Note there's no quotes around the text, that's purposeful.  99% of the time when there is a string you want quotes, but not this time. It might work with but I know it doesn't without.  Actually I just use the numbers.

You're saying to yourself "Well Phantom, ok, I did see Flicker in one of the Kashyyyk files, but how'd you find out about the other 2?"
The case hex lines file on SecretSociety showed that there were more options than we were privy to by any of the files in BF1 or BF2.  I tested them ingame here:
0 = none
1 = Strobe, does not work, confirmed intended for CP/hologram usage, doesn't have functionality for normal lights
2 = StrobeRandom, does not work same as 1
3 = StrobeFade, works.
4 = Pulse, works
5 = Flicker, works

FlickerPeriod should certain time variables for all of the working ones.

Now go and make some awesome lights!
What, you thought BF1 was dead? Not yet!

This tutorial will be a quick "How-To" on how to patch the fake console in YOUR game.  Few downloads (except for a hex editor and the mod tools), nothing too complicated.  I've posted other tutorials like this but I hope this one will be more practical.

Things you need:
1.) The SWBF1 Common/Shell Builders that I made in the downloads section
2.) The 1.2 patch of the game (Steam version will not work for this)
3.) A hex editor, such as XVI32 or Hexinator or PSPad or 010 Editor... there's 500 good options for this.
4.) Willingness to read directions

Step 1.)
This is probably the hardest step.  You're going to need the common/shell builders I made here:;sa=view;down=1552
Navigate to Common\Scripts\ifs_pausemenu.lua.  This file can be opened in something like Notepad or any text editor.
Search for "this.buttons.console.hidden" (without quotes)
Put two dashes in front of that line like this:
--this.buttons.console.hidden = gDemoBuild or gFinalBuildSave file, and navigate back to the main folder of the builder. 
Run MungeCommon.bat.  When it is finished, you're going to take the common.lvl which was created in _LVL_PC\Common\ENG\Common.lvl and replace the one in your games folder with it. (Something like C:\Lucasarts\Star Wars Battlefront\Gamedata\_LVL_PC\COMMON\ENG\common.lvl)

Step 2.)
Open up your hex editor and use it to open Battlefront.exe.  Once again, this part will only work on the 1.2 SWBFspy patch. Use your hex editors "Go To" function and enter 0x24a3c (or just 24a3c, if it allows).  This should navigate you to a few bytes like this:
0f 84 b9
Change it to
0f 85 b9

Technical reason: This allows a bypass of the console write instruction anytime it is accessed.  Essentially I changed a "jump if equal" to "jump if not equal" once I found a good place to put my change in as seamless as possible.

Step 3.)
Run your game and enter into any match.  You should be able to run the commands "invincible" and "unlimitedammo" without a crash.  In my experience, in case you were trying to be an expert hacker, this stuff generally does not work online, and can cause your game to desync and/or crash.

OK, so there's some stuff that's in SPTest that's not in the base game or doesn't work right.  Some stuff does not exist at all in the executable. A command like RenderCollision will not work because at compile time the game has already stripped out the debug renderers.  The command will do nothing.  This was wrong, I forgot at the time that "RenderCollision" only applies in freecam.  It actually does work.

One more cool thing, if you want to prove you're a top of the line hacker.  At 0x29fe9Ch exists a string "debugmenu" that the console menu uses to append to the commands.  Sounds boring right?  Change it to "ai" padded with 0's where the original text was.  When you enter the Fake Console now, the AI commands will populate.  The best ones are camup and camdown, which finally make my dream a reality of a real, accessible spectator mode in BF1.  Most of the others do not work because they require the debug actions or a console input to actually set up correctly.

Good luck and see you on the front!
Released Maps and Mods / Ruusan: Canyon Oasis
April 26, 2022, 12:27:49 PM
Ruusan: Canyon Oasis

Ruusan: Canyon Oasis by Dark_Phantom

Tucked away on the planet Ruusan, a small oasis was constructed upon and inhabited, then abandoned abruptly for unknown reasons. Fighting for control of the Valley of the Jedi, Jerec leads a platoon of his Imperial Remnant to take this key strategic position from the fledgling rebellion troops, led by Kyle Katarn.

This map has custom heroes that will only show up with "Instant Action Heroes" enabled.  I recommend this option.

Canyon Oasis is a multiplayer-only map from Jedi Knight: Dark Forces 2 that gained notoriety on its release in 1997. The map soon became the most popular by far in Dark Forces 2 communities for its clever design and exciting gameplay possibilities in a Team Deathmatch or FFA format. Many adaptations of the map were released in modding communities over the years. It is assumed that the planet is Ruusan because it uses the same textures as in Single Player on Ruusan, so I've taken liberty to make it the planet name for the map.

I had more I wished to add but the scope of the mod was becoming incredibly large for one map, and decided it would be better to limit myself with no more glaring bugs and essential features implemented.
There will be a MP version of this map with the intention of FFA mode in the near future.  The current map works online but is lacking in some areas for this format.

Lucasarts/Lucasfilm/Disney - Star Wars, original JK:DF2 map and assets
Ecki81 - jediknight2blender addon
Sleepkiller/Nihilisk - Blender .msh import/export
Ande - ZETools
Teancum - Advice, showing the JK2Blender addon, Kyle Katarn and Jerec conversions, UV mapping help, Moldy Crow
Madjai/Inbredyokel - Original Jerec model which Teancum converted
DarthPhae/Plasma - JK Kyle Katarn and lightsaber
Tirpider - BF1 hex edit rendertypes
TreeMarmot - JK Neural Upscale Pack

1.) Confirmed AI can glitch in random areas (probably due to too many or bad spawns), but have not personally found it.
2.) "Meditation" in the Covered Basin and Alcove can become extreme.  I've tried to limit this by manipulating spawn points and barriers but I think it is just the nature of having such a small map with multiple vertical levels, which Battlefront was not designed for.

1.) Force Destruction is a little odd looking but in the grand scheme of things is fine.
2.) There are a grand total of 5 Easter Eggs.  Two are very similar scripted Easter Eggs and the other three are environment.  Can you find them all?
I wanted more but I wanted to release this map more than making 20 Easter eggs.;sa=view;down=1612

Minimap Template files (Battlefront 1)

I created these from scratch, I couldn't find anywhere where these had been created otherwise.
4 files are contained:
Scanline_BF1_map_template (in png and tga format)

There's a little bit of artifacting/discoloration around the edges of the boundaries, they were a pain to cut out of another world.
You can either start with the template with bounds and layer your image on top, or use the wo_bounds template and then layer your image, then layer the boundaries if they conflict.

Best combined with these three links:

Download link:;sa=view;down=1608
Released Maps and Mods / Beta Conversion Fix BF1
April 06, 2022, 07:56:37 AM
Beta Conversion Fix BF1


This program is a very niche use-case program which allows BF1 beta model files (March 12th, 2004, and possibly earlier) to be read correctly as a retail Xbox file.
They should then be able to be unmunged/converted to whatever version is needed. I used it to experimentally unmunge some unit models.

The overall size field in hex (right after UCFB) probably needs changed as well, I didn't program it in, if you try to use the file as is. Simply put, read the 4 bytes after ucfb as an int, take the size of the new file, subtract 8, and then put it in the field.  Simple, right? :)

All it does is fix the INFO fields on models to add 4 empty bytes.  The reverse flag is to attempt to move retail files back to beta by removing the same flags in INFO, which mostly seems to work.

For maps, this does not make some of them usable.  Part of the process involved removing incompatible water layers and replacing detail maps, which this program does not do.

Dark_Phantom - creator
Sleepkiller  - beta discussions/program help;sa=view;down=1607
Released Assets / Health/Ammo Pack Spawner
April 04, 2022, 08:53:38 AM
Health/Ammo Pack Spawner

What it does:
This allows usage of the vehicle spawn template to be used to drop in assets, in this case "powerupitem" class, anywhere on the field where it will respawn when taken.

How it works:
Place all assets in their respective world folders (DataXXX\Worlds\XXX\msh and DataXXX\Worlds\XXX\odf)
Open ZeroEditor
Place coa_ammo_drop or coa_health_drop somewhere on the map.  It should be placed high enough so that it falls a short distance, otherwise it could go through your building/terrain.
Update the instance properties in the right hand panel.  They must be in a ControlZone, so you'll need to set up a region if you don't have one. 
Set the spawn time to whatever is appropriate (I used 20 seconds).  This is how long after the pack is taken it will respawn.
Add coa_item_powerup_healthJK (or ammo) to all of the CLASSxxxATK and DEF instances that you will need it for.
(note: the previous steps are the same as vehicle setup)
Add entries under "class" for each odf.  Example:
Load map and check area.  If you pick up the pack, it should respawn in the time allotted.  You can also use the powerup odfs to change other information about the actual drops.

Dark_Phantom - creator
Ecki81 - jediknight2blender addon
Lucasfilm/Lucasarts/Disney - original assets, and the games they were pulled from.
Pandemic Studios - mod tools and documentation;sa=view;down=1605
Custom Resolution ingame (Addon Only);sa=view;down=1602

This mod is simply to allow a custom resolution to be set ingame in 1.2, rather than through a custom program. Even though it is in addon, it does not take away from the 50 mission addon cap in 1.2.

The option can be found after you log in and select "Options".  The menu option is at the bottom.

I do not have a 2k/4k monitor, I only tested it with 1080p since those are what I have.  Setting the resolution to an unsupported res forced the game into 800x600.

Once the resolution has been set, as long as you don't go into the video options screen in the shell, it should stay, even if you restart the game or remove the mod.
I may expand on this in the future.  Consider it a proof of concept of sorts for new menus/settings.

This does NOT set the menu resolution, which is locked to 800x600 in 1.2.

Dark_Phantom - Creator
BAD_AL - example code to replace screens in BF2
Released Maps and Mods / Naboo Guard Sound Glitch Fix
February 05, 2022, 09:23:36 PM
Naboo Guard Sound Glitch Fix;sa=view;down=1601

This file goes in GameData\Data\_LVL_PC\Sound\ and replaces the stock nab.lvl

Basically this "glitch" was caused by an incorrect reference in nab2cw.sfx when the PC version was being worked on.
The console versions of the games have all the sounds contained in the individual sound.lvl files, however, on PC, to preserve sound quality, all effects are stored in common.bnk.
Great right? Well in nab2cw.sfx, the Rebel VO files were given aliases, which normally would NOT be an issue and isn't on console, seeing as everything is in the same place.  On PC this is what was happening:
Searching for GICOM001 (a hurt sound)
GICOM001 is not found, so we pick a place in memory that C++ thinks is fine and dandy and translate it to sound.
AICOM001 is what IS in the common.bnk, so we need to change some references in CW.snd to AICOM001 instead of GICOM001 (which links the odfs and sound effects together), and remove the alias from nab2cw.sfx.

Creator: Dark_Phantom, who got so sick of hearing that ugly noise that he patched it out after 16 years.
Released Maps and Mods / Shell.lvl Builder for SWBF1 PS2
February 05, 2022, 06:58:23 PM
Shell.lvl Builder for SWBF1 PS2;sa=view;down=1600

This is a feature complete munger for PS2 shell.lvl.

I have left the unmunged PS2 shell scripts in for reference if you desire to swap files and use minimunge.  However, I have tirelessly reversed them so there should not be any (noticeable?) discrepancies against the stock ones.
If I were you, I would remap "move shell" to your directory so that you save a copy step :)
Do not move StockBin unless you want to change the bat file - it is configured to properly insert itself into the PS2 shell.

All maps/modes seem to be in a playable state

ifs_start - there seems to be a missing if-loop in here I don't understand but it's buried under an XLive loop so it doesn't need fixed for PS2.  There's a chance it was fixed for XLive in the Xbox build (PS2 was done first)
All other files seem to be complete and working.

MY BIGGEST NOTE: The PS2 shell is pretty fragile. Mine actually munges smaller than stock but if you go bigger than stock you can start to see some memory failures when calling videos in on the IA screen/Tutorials.
It took a long time to get the images as close to PS2 as possible, but there still might be some distortion/oddities in the images (like there's some non-alpha'd lines in the IA screen I noticed later.) I had to munge more of them in 4-bit format than I would've liked. If you're adding/modifying images, please make sure you test the screens that load in videos like the IA screen before release.

Dark_Phantom - reconciling differences in byte code to original PS2 values
Psych0fred - different scripts to test on, being a cool guy
tirpider - I would never have been able to do this if I hadn't read a long write-up tirpider did on lua bytecode generation and understanding.  You're the man!
Led - for keeping SWBFgamers going all these years.
Released Maps and Mods / MP Monday 10/11/21
October 11, 2021, 11:13:30 AM
MP Monday 10/11/21;sa=view;down=1599

EXTREME version of MP Monday, probably going to bomb out, but oh well.
Bespin Escape by Jendo7
Geonosis Arena (2 versions) by Napseeker
Ord Mantell NGG by Rippentuck
Theed Xbox Beta conversion by Dark_Phantom
10-4-2021 Multiplayer Monday Mod Map pack;sa=view;down=1598

This week's Multiplayer Monday brings back Mod Maps!

Maps included:
Kashyyyk Wookieeland by Rends
Eddie's Kastel by Eddie
Geonosis Arena by ?
Coruscant: Streets by Rends
Rhen Var: Bridge by newguy99
The SWBF1 Speedruns community would like to announce our version of "Challenge Mode".
I would like to thank Skinny, Dlemmor, and the KoTOR speedruns moderators (for jumpstarting the idea) in making this come to life.  We would like to try this as an engagement tool for new and experienced runners.  The challenges will be generally shorter, but times may adjust depending on the community's input.

Challenge Mode adds a new layer of depth to BF1, and is implemented in the same way as an Addon map on PC.  That doesn't mean console players can't participate!  For the speedrun challenge, there is NO requirement to download the mod, but it will make it easier to get right in the action.  However, we have NOT limited the challenge mode, so console players may want to think about getting SWBF1 on Steam/GOG if the Challenges Mode is what they want.

IN FACT, it's so small it's an attachment at this point.  Just unzip, place in your addon folder, and go!

Speedruns will (obviously) be based on time and Challenges, at this point, will be judged based on reinforcement count. If you would like to participate and get some bragging rights, you can submit your times in the SWBF1 Speedruns Discord at this point.  The current one will run two weeks and we will reassess whether two weeks is appropriate for future editions.

Our permanent link is here:

We hope to see you on the front!

SWBF1 Modding Tutorials / New Screens through Addon
September 07, 2021, 07:21:03 AM
Ok, we've been down this road before, and it's probably about 10 years too late, but I'm here to tell you how to add NEW screens through the addon folder.

I have attached the demo in the attachments on this post.  This is what we are using for "Week 1" of the SWBF1 Speedruns challenges.

  • You need to modify how the ifs_movietrans_PushScreen() function works.
  • You need to define a new screen in the addme.lua file
--Original concept by BAD_AL, modified by Dark_Phantom
--This modifies the ifs_movietrans_PushScreen function, or more accurately, catches one situation where we want to switch the screen.
origMovieTrans = ifs_movietrans_PushScreen
ifs_movietrans_PushScreen = function(screenName)
    if( screenName == ifs_sp ) then --THIS IS NOT A STRING
        --ScriptCB_PushScreen("ifs_sp2") --you can use this to just push the new screen if you don't have a movie transition

--Now we add the new screen...
ifs_sp2_vbutton_layout = {

ifs_sp2 = NewIFShellScreen {
ifs_sp2.CurButton = AddVerticalButtons(ifs_sp2.buttons,ifs_sp2_vbutton_layout)

I didn't copy my code straight up but you can copy that section from ifs_sp, and then modify one of the fields, like add a button to the list, you should be able to modify the screen accordingly.

After this, you can then save and munge your addme.lua file.
You're then going to create a folder in addon (I use challenge) then just drop it in there.
There's plenty of extensibility too... obviously I wouldn't recommend locking people out of screens, but using it for modification.  It's a much slimmer way to modify (or create new) screens we already have WITHOUT a total conversion mod.  As you can see from my attachment, it's 3 KB to add A WHOLE NEW (very basic) MODE

In a future episode, we will be talking about how to tie more screens together and make the script extremely generic for your purposes.  This way is the "hard-coded way" which is really convenient for one or two screens, but we can leverage some ScriptCB_SetDCMap() calls to go even further.