EARTH DEFENSE FORCE 5

EARTH DEFENSE FORCE 5

46 ratings
HOW TO MOD EARTH DEFENSE FORCE 5
By Maybe Birb
This guide will comprehensively teach you how to make mods for EDF 5.
4
2
3
   
Award
Favorite
Favorited
Unfavorite
Introduction
Welcome to the beginning of your modding career! The road is long and steep, but trust me- once you get a good foothold, the only way you can go is up. One thing leads to another fast. I went from barely being able to edit a weapon's name to changing the plot of entire missions in two months- and that was without a guide!

To clarify, this is for creating mods, not installing them.

This guide is extremely long, but that's because I'm going to include EVERYTHING. This guide isn't meant to be read all in one sitting.

Let me clarify: No matter how I do this guide, modding isn't super easy. If you glaze loosely over all the text, you aren't going to know the secrets of the universe. It takes a bit of dedication and time.
A lot of the information in this guide is phrased in lists. I don't expect you to memorize the lists all in one sitting, they are RESOURCES. When you encounter something you don't know, check the list.
So skip to the section you want to edit and let's get started!

...Actually, don't yet. Read the next section or two first.
(Please excuse any typos or weird grammar, this was difficult enough to make already)
Resources
First, let's start with the file types you'll be messing around with:
.CPK: Contains the game's files.
.SGO: Data files for NPCs, weapons, vehicles, enemies, basically everything you can imagine being in text format.
.RAB/MRAB: Texture and model file. RAB and MRAB are so similar, you can literally just rename them interchangeably.
.AWB/ACB: Audio file.
.AS: Text file.
.DDS: Image file, openable via Gimp.
.BVM: Mission content file.
.RMPA: Mission coordinate and position file.
.MDB: Model file found within RAB and MRAB file.
.CAS: Animation file. Realistically just a location-providing wrapping for CANM files.
.CANM: Actual animation file, found within CAS files.
.MAB: Particle and timing-related file found within SGOs. Not available with Sgott.
(Tip: ".TXT_SGO" is identical to .SGO, and can be manipulated the same way)

Here's the files you shouldn't touch for now:
.BAT: Multipurpose file.
.SHKT/.HKT: Model collision file.
.ABC/.GTF: Debug-related file?
.H: Unknown
.NVMD: Map-related file.
.MAC/MAD: Other map-related file.

Finally, here's what your files will be converted to:
.JSON: The coding with brackets. It's the most common thing you'll see in here.
.ASM: Assembly programming. Technically, this uses a 'pseudo-asm' that's simpler than standard
.XML: Format used by files converted via AUK's EDF Tools. Sometimes said to be the least readable of the file types, but it's the only way we can manually edit some of them.
----------------------------------------------------------------
MODDING PROGRAMS
These programs make your modding capacity go brr like never before.

100% Mandatory:
https://github.com/wmltogether/CriPakTools - CPK editor. Use this to open root.cpk.
Step 1: Extract the ZIP you download from this link into any folder.
Step 2: Open the .exe found within.
Step 3: Click the "Files" button, then "Open CPK"
Step 4: Navigate to your EDF5.exe directory and select root.cpk
Step 5: Click "Extract Files" and extract them into a new folder on your Desktop (or any new folder)
You now have the files to modify EDF!

https://github.com/BlueAmulet/EDFModLoader - Mod loader. Put its files into your EDF 5 directory.

Weapons and Entities:
https://github.com/zeddidragon/sgott - .SGO editor. The majority of EDF's files are in .SGO format. This converts .SGO files to .Json and back if you click and drag the .SGO onto Sgott.

https://github.com/AUK233/edf-tools/releases/tag/v0.4.1 (NEW FILE, USE THIS INSTEAD OF THE ONE PREVIOUSLY PROVIDED) - Multitool that can extract .RAB and .MRAB archives. Click and drag a .RAB or .MRAB file onto this and it'll convert it into a folder. Converting the folder back into an RAB is a bit trickier, however:
Step 1: Open Command Prompt.
Step 2: Click and drag EDF Tools into the console.
Step 3: Type in /ARCHIVE afterwords.
Step 4: Click and drag the already extracted folder into the command prompt.
Step 5: Press enter.

https://www.gimp.org/ - An image editor that can open DDS files and has very useful functions for texture editing.

Missions:
https://github.com/mp-s/edftools - .BVM and .RMPA editor. Converts .BVM -> .ASM (editable via Notepad) and .RMPA -> .JSON. Also does this the other way around.

https://cdn.discordapp.com/attachments/599213952865665044/1168301698406678658/MasterEDF5.CT?ex=6563b9be&is=655144be&hm=fd3f3232f6ef0a71478c012587bb7dbff7baec29af6e66436413b7e1a6ec051e& - Master Cheat Engine table in form of a CT file. Your computer may flag it as a virus, but CT files are Cheat Engine, so they're made to edit other games- it's a false positive.
This is categorized as a Mission tool because it can copy coordinates.
It's still best you join the Discord Server and get the CT file from there.

Other:
https://github.com/FevGrave/AA-Master-Printer - Basically all the programs in one. No click-and-drag functionality, but it's good. Instructions are provided in the UI.

https://videogamemods.com/xenoverse/mods/eternity-tools/ - Audio editor for AWB/ACB files.

https://discord.gg/edf - Link to join the EDF discord. They'll help you with any troubles you may encounter.

Alright, that should be all you need to have. Let's get started.
Important note
Something to understand is that unless a mod is COMPLETELY cosmetic, you shouldn't try to use it online. Anything that edits an SGO, BVM, RMPA, or anything other than an RAB/MRAB or sound file should not be used online unless everyone else involved has the mod.

Mods are local, meaning the changes only appear on your screen, but everyone else sees it like it's vanilla- which can cause desync between games and even crashing, or in the case of mission edits, it can cause the level to be stuck loading forever until all inconsistencies have been resolved (The modded player leaves or all non-modded players leave).

Do not use mods online unless everyone has them. Tests are ongoing as to the consequences for using mods in a vanilla lobby, so we don't know if it can damage anything. For everyone's sake, please take heed of this note.

8/11/2024: For those wondering, this guide should be semi-coherent for EDF 6 modding. However, things such as missions are differently structured and new file types have arisen. The guide should work, but if it doesn't, don't go message me pls. I may release a separate guide for EDF 6.

Anyway...
Understanding JSONs (Easy summary)
SGOs are converted into Jsons. You'll notice a lot of {} and []. In basis, for every opening bracket, there's a closing bracket in the same vertical position.

You'll see a few values. Float, Int, String, Extra, and Ptr.
"Float" means it has a numerical value, like 2, 4, 7, 0. Usually, a Float is a multiplier.
"String" means it has a file value, like EWEAPON075.SGO (sometimes it's a complete path, sometimes it lacks even a file extension. If that's the case, that means it's taking an asset straight from the EXE).
"Ptr" means it contains another bracket chunk within it.
"Int" is similar to Float but generally functions like an on-and-off switch. No 1.5 or 12.602, values are absolute (usually). IE: An Object Team (1 means enemy, 2 means ally, etc)
"Extra" is used mostly for Material Animation stuff, mainly the .MAB. Leave it alone for now.
Weapons Part 1 - Getting started
Assuming you followed the instructions in the Resources section regarding root.cpk files, you should now have a bunch of folders at your disposal.



The first section I'll be discussing is the WEAPONS folder. When you enter it, you should notice a bunch of SGO files. Conveniently, modders have developed this: https://github.com/KCreator/Earth-Defence-Force-Documentation/wiki/EDF5-Weapon-List-(ENG)
That's a list of every weapon in EDF and its corresponding file name.

For simplicity, I'll be editing the PA-11 LS, also known as AWEAPON001.SGO. Copy the file to your desktop, then click and drag the copy onto Sgott.exe. After a moment, a .json file should appear. Delete the original copy of the SGO and open the Json.

Within the Json, you're likely to be overwhelmed pretty quickly. Don't worry, almost all of this doesn't matter to us right now. You'll be editing things that say "Value". Here's what you're interested in.

Bullet Parameters:
AmmoAlive: Determines the amount of time (in frames) the bullet exists.
AmmoClass: Determines the type of bullet the weapon fires.
AmmoColor: Determines the color of the bullet. The first number is how red it is, the second is green, the third is blue, and the fourth is the color opacity. Bigger numbers mean brighter colors, stick between 0.1 and 1.0 if possible. This is called an RGB value.
AmmoCount: Determines how much ammo is in your magazine.
AmmoDamage: Determines how much damage each bullet deals.
AmmoExplosion: Explosion radius of the bullet. 0 means no explosion. I don't suggest setting it beyond 50 unless you love lag.
AmmoGravityFactor: Gravity factor to be applied to a bullet.
AmmoIsPenetration: 0 is non-piercing bullets, 1 is piercing bullets. Only works on some bullet types.
AmmoSize: Adjusts the size of the bullet.
AmmoSpeed: Adjusts the speed of the bullet (meters per second).
Ammo_Customparameter: We'll get to this. It's super important.

If editing a Wing Diver weapon, also consider:
EnergyChargeRequire: How much wing diver energy this weapon uses to reload


Shot Parameters:
FireAccuracy: Accuracy of a weapon. Higher is less accurate, 0 is perfect. Very sensitive.
FireBurstCount: Number of bullets fired in a burst.
FireBurstInterval: Frames that pass between each bullet in a burst.
FireCount: Number of bullets fired each time the gun shoots.
FireInterval: Frames that pass between each shot.
FireSpreadType: Type of spread: 0 - No pattern, 1 - Wide horizontal spread, 2 - Narrow horizontal spread, 3 - Broad vertical spread, 4 - Narrow vertical spread
FireSpreadWidth: Width/range of the spread. Very sensitive.

Lock-on Parameters:
LockonAngle: The size of the red square for locking on.
LockonRange: Range of lock-on system.
LockonTime: How long it takes to lock onto a target (in frames).

Miscellaneous Parameters:
ReloadTime: Time it takes to reload (in frames), or credits it takes to reload.
ReloadType: 0 - Normal, 1 - Wing diver style, 2 - Credits
SecondaryFire_Parameter: Value of the variable below. IE: If the value below is 1 (Zoom), then this value determines the zoom scale of the scope. (5 = 5x zoom, 12 = 12x zoom, etc)
SecondaryFire_Type: Controls what the weapon does when you right-click. 0 - None, 1 - Zoom, 2 - Trigger
custom_parameter: More important stuff I'll get to eventually.
name: In-game weapon name. Has a Chinese, English, Japanese, and Korean translation.
use_underground: Determines whether the weapon can be used underground. 0 = no, 1 = yes.
------------------------------------------
That's a lot of text. Basically, look through that and determine what you want to edit. If you want to change the damage value, look for AmmoDamage in the .json file and edit it accordingly.
Full documentation here: https://github.com/KCreator/Earth-Defence-Force-Documentation/wiki/SGO-Node-Documentation

That will also help you decipher Ammo_customparameter and custom_parameter. Those're what make bullets and guns unique and distinguished.

For FireAccuracy, here's how each value translates into letters:
accuracy > 0.0005 = S++ accuracy > 0.0025 = S+ accuracy > 0.005 = S accuracy > 0.01 = A+ accuracy > 0.015 = A accuracy > 0.02 = A- accuracy > 0.03 = B+ accuracy > 0.05 = B accuracy > 0.1 = B- accuracy > 0.15 = C+ accuracy > 0.2 = C accuracy > 0.25 = C- accuracy > 0.3 = D accuracy > 0.4 = E accuracy > 0.5 = F accuracy > 0.6 = G accuracy > 0.8 = I accuracy > 1.0 = J accuracy > 1.2 = K accuracy > 1.4 = L
Here's a list of all the bullet types you have at your disposal. I've included an example of what uses them in as many as I could, but these examples aren't the only thing they're used in.

List of bullet types:
AcidBullet01 (used in ranger Acid Guns and by ants)
BarrierBullet01 (used by Electromagnetic Bunkers, customized with ammo_customparam)
BeamBullet01 (used in some Wing Diver weapons)
BombBullet01 (used by Ranger C-bombs/impulses, Air Raider robot bombs, etc)
BombBullet02 (used by Limpet Guns)
ClusterBullet01 (used by some WD weapons, highly customizable)
DecoyBullet01 (used in Air Raider Decoys)
FlameBullet01 (used by flamethrowers)
FlameBullet02 (fireball)
GrenadeBullet01 (used in Ranger grenades, customized via ammo_customparam)
HomingLaserBullet01 (used by Wing Diver Mirage weapons)
LaserBullet01 (used by the Powerdyne)
LaserBullet02 (used by the Genocide Gun from the Motherships)
LaserBullet03 (reflecting laser)
LightningBullet01 (used by some Wing Diver weaponry)
MissileBullet01 (used by most missile launchers)
MissileBullet02 (used by Naegling XEM missiles; splits into more missiles)
NapalmBullet01 (used by Napalm launchers)
NeedleBullet01 (used by bees)
PileBunkerBullet01 (used by Fencer CC Piercers)
PlasmaBullet01 (used by Artillery Frogs and the moving fortress)
RocketBullet01 (generic explosive used by most Air Raids and rocket launchers)
SentryGunBullet01 (used by ZE guns)
SlashWaveBullet01 (used by Fencer slashing weapons)
SmokeCandleBullet01 (used to summon mortars and vehicles)
SolidBullet01 (used in most rifles, generic bullet)
SolidBullet01Rail (used by Railguns)
SolidExpBullet01 (used by the Minion Buster rifles)
SpiderStringBullet01 (used by Arenea, pulls target toward player)
SpiderStringBullet02 (used by normal spiders)
SupportUnitBullet01 (used by buffing tools, like life vendors, attack posts, etc)
TargetMarkerBullet01 (used to call in gunship fire)
https://github.com/KCreator/Earth-Defence-Force-Documentation/wiki/AmmoClass-List-(ENG) full documentation of bullet types here.

EDITING THE SGO WILL NOT CHANGE THE STATS AND NAME DISPLAYED IN THE MENU. That's a different file. Speaking of which, let's check that out.
Weapons Part 2 - Advanced Edits (WeaponText & MAB)
In the WEAPON folder, there should be a file called "WEAPONTEXT.EN.SGO". This controls what is displayed at the main menu. With a quick look at it, it's pretty easy to see how it works.





...Ok, maybe not that easy. The first question one may be tempted to ask is why there are so many values, despite the game only displaying a single value.
The first value in most of these is the "starting" value, when you first unlock the weapon. The other values represent a Star Graph- how many stars it can take, how much it increases by each star, etc.

Basically it's just a graph. Replace the first number for now.

Take the AmmoDamage value from the weapon you made and put it into the first value in the Damage box. The game should adjust it accordingly as your star count goes up.
(Tip: If you compare the Star Chart for the damage of the weapon in the AWEAPON file with the Star Chart of the WEAPONTEXT.SGO entry, it should match up.)

In the Description, you may notice it's all one text wall. Use \n to make a line break (or to press enter, basically), and correspondingly use \n\n to make two line breaks in a row and have space between paragrpahs.
When editing this section, don't include quotation marks in the description. Use double apostrophes instead.

Thankfully, vehicles are much simpler:


The durability is a fixed number, it doesn't scale with star count. All that changes is the re-request point requirement, which is also a Star Chart.

You can also change the font color, as you can see if you look for "color" and "font" in it, though I recommend using context clues of preexisting instances for that.

The MAB
This will be brief- MAB isn't a file type. It's a section within the SGO. And yes, that's what the "Extra" that shows up as random numbers in the JSON is.
you need to open a weapon SGO with AUK's EDF Tools. Yup, the same one that opens RAB files. Click and drag the SGO onto EDF Tools.exe and it'll produce an XML file.
I recommend editing it with Notepad++, but even Notepad will work in theory.
Search with ctrl+f "XGS" and you'll be brought to the Scene Object Class. Right below that will be the MAB.
What you're looking for is the block ID:

ID0: Controls where the bullet appears relative to the gun
ID1: Controls where the player's left arm supporting the gun is
ID2: controls where the magazine is
Don't mess with ID2 for now, it isn't important unless you're using a custom model as long as it's the proper ID2 value for the weapon model you're using.

This is the deal- everything in here is self-explanatory. "Location" is the location, "Scale" is something you shouldn't mess with, and "Rotation" is the rotation.
There are 4 values for each. This is the XYZ system- the first value is X, the second is Y, and the third is Z. If you don't know what the XYZ positioning system is... I have no idea how you're going to fare as a modder lol
The fourth value is the "Alpha" of the XYZ system of the MAB- as though it's an RGB editor. I haven't even touched it, and I don't recommend you do, either.
Weapons Part 3 - The WSLRF
The WSLRF is what I previously referred to as a "Star Graph".
WSLRF stands for "Weapon Star Level Result Formula", and it controls how much a weapon changes in each level up.

Take this for instance:
{ "name": "AmmoDamage", "type": "ptr", "value": [ {"type": "float", "value": 6000}, {"type": "int", "value": 8}, {"type": "int", "value": 0}, {"type": "int", "value": 10}, {"type": "float", "value": 0.5}, {"type": "float", "value": 0.5} ] },
Float1: Base Value
Int1: Setting Type*
Int2: Save Data Position (Maybe? Don't mess with it for now)
Int3: Max star count
Float2: Linked to how much the value increases per star(???)
Float3: Linked to how much the value increases per star(???)

*Here's the different values to enter for each category the WSLRF is in:
"AmmoCount = 0",
"AmmoDamage = 8",
"AmmoSpeed = 16",
"FireAccuracy = 13",
"ReloadTime = 21",
"FireInterval = 25",
"AmmoExplosion = 32"

Yeah... that's the WSLRF. I try to avoid it when I can.
Getting started - NPC Soldiers
This will introduce us to a basic formula that is followed by vehicles, soldiers, and enemies alike. The SGO we'll be using as an example is "AiArmySoldier_AF.sgo", that being the Ranger with the Assault Rifle.

Here, actually, have a list of all the different soldiers and their corresponding SGOs:
------------------------------------------------------------------
Ranger:
AiArmySoldier_AF: Assault Rifle
AiArmySoldier_AF_Leader: Assault Rifle w/ red helm
AiArmySoldier_SG: Shotgun
AiArmySoldier_SG_Leader: Shotgun w/ red helm
AiArmySoldier_SN: Sniper rifle
AiArmySoldier_SN_Leader: Sniper Rifle w/ red helm
AiArmySoldier_FL: Flamethrower
AiArmySoldier_FL_Leader: Flamethrower w/ red helm
AiArmySoldier_RL: Rocket Launcher
AiArmySoldier_RL_Leader: Rocket Launcher w/ red helm
AiArmySoldier_S_AF_Leader: Sergeant
AiArmySoldier_S_Follower1: Sergeant's follower 1
AiArmySoldier_S_Follower2: Sergeant's follower 2
AiArmySoldier_S_Follower3: Sergeant's follower 3
AiArmySoldier_S_OMG_Leader: Sergeant with Blazer
AiArmySoldier_S_OMG_SRange_Leader: Sergeant with short-range Blazer

Wing Diver:
AiPaleWing_MS: Monster
AiPaleWing_MS_Leader: Monster w/ red helm
AiPaleWing_Lance: Lance
AiPaleWing_Lance_Leader: Lance w/ red helm
AiPaleWing_LR: Mag Blaster (LAZR)
AiPaleWing_LR_Leader: Mag Blaster w/ red helm
AiPaleWing_TB: Thunder Bow (Crossbow)
AiPaleWing_TB_Leader: Thunder Bow w/ red helm
AiPaleWing_IZN: Lightning Bow
AiPaleWing_IZN_Leader: Lightning Bow w/ red helm
AiPaleWing_Elite_IZN_Leader: Lightning Bow-wielding Spriggan leader
AiPaleWing_Elite_Lance: Lance-wielding Spriggan
AiPaleWing_Elite_Lance_Leader: Lance-wielding Spriggan leader
AiPaleWing_Elite_LR: Mag Blaster-wielding Spriggan
AiPaleWing_Elite_LR_Leader: Mag Blaster-wielding Spriggan leader
(This is not a mistake; there is no Elite IZN regular)

Fencer:
AiHeavyArmor_SC: Somewhat rapid cannon
AiHeavyArmor_SC_Leader: Somewhat rapid cannon leader
AiHeavyArmor_SMC: Heavy cannon
AiHeavyArmor_SMC_Leader: Heavy cannon leader
AiHeavyArmor_SP: Grim Reaper
AiHeavyArmor_SP_Leader: Grim Reaper leader
AiHeavyArmor_SP_MobLeader: Also Grim Reaper leader?
AiHeavyArmor_SSG: Shotgun
AiHeavyArmor_SSG_Leader: Shotgun leader
------------------------------------------------------------------
In the SGO, there's only a few things you should pay attention to at present:
-Model
-Health
-Weapon
-Color

For the model, near the start of the SGO you should find a file path leading to a .RAB file. Directly after, there's the name of a .mdb file.
With the way soldiers work, modifying the textures doesn't do much in most cases. If editing the model section, the only changes you can really make are soldier->civilian models and ranger->Air Raider.
To do this, just replace the file path, then replace the MDB file name with the name of the MDB inside of the RAB you're using.

For health, press ctrl+f to search and look up "durability". This will take you to game_object_durability. The default for all soldiers of all classes is 200, feel free to set it to what you want- bear in mind that soldier health (like enemy damage) scales from mission to mission, so they'll have thousands of HP in no time flat already.

For the weapon, search "/weapon/". You'll be taken to a weapon path. While AI soldiers have their own set of weapons that deal less damage and take longer to reload, they can use player weapons just fine.
Here's the list of things you shouldn't do:
1- Don't give soldiers weapons from eachothers' classes (besides Air Raider/Ranger).
2- Don't give Fencers Gatling guns without editing the guns to remove all the startup time.
3- Don't give Rangers and Air Raiders things like Impulses, ZE-guns, Limpet guns, bombs, or anything that requires activating.
4- Don't give Rangers and Air Raiders posts or barrier creators. They won't use them.
5- Don't give Fencers CC strikers.
6- Don't give Rangers/Air Raiders bombing runs.
Additional- Air Raider buffing guns will still be fired at enemies. Good for Xtra hard mode I guess.

For color, search "Color". You'll find a set of things like color0, color1, color2, etc and notice they consist of 4 values. These are the RGB values we discussed earlier, modify them to your heart's content. (For those who don't know: the first number is the red value, second is green value, third is blue value, fourth is color opacity. Stay between 0.1 and 1.0. Higher numbers = brighter colors)
Civilians should only have 2, and most soldiers should have 3-4. Anything more may crash your game.

(Tip: Another thing to note is that you can add a second slot below the first, where you can put things like Dash Cells for the Fencers or Lightweight Suits for the Rangers.)
Getting started - Vehicles and NPC Vehicles
Vehicles have a wide variety of traits but are extremely close to standard soldiers in setup. Once again, all that's relevant is GameObjectDurability, the RAB string, and the Weapon strings.

...Mostly. Now, there's a new thing to pay attention to: Vehicle_Setup if it's piloted by the player, and Mission_Setup if it's an NPC.
Under it, you'll see two floats. The first controls its health modifier and the second controls its damage modifier. I don't personally recommend tweaking these values, but that's solely for balance reasons- feel free to adjust them as you please.

Below that, you'll find a long series of Floats with the occasional Int. These control the vehicle's speed, handling, and all of that sort of thing. Think of it like an ammoCustom_Parameter for vehicles.
Refer to https://github.com/KCreator/Earth-Defence-Force-Documentation/wiki/SGO-Node-Documentation#object-configuration for documentation on what each value controls.
(Note: For Nix's, their basic controls are referred to in the documentation as "Handling")

Generally, one can look at the Weapon section and gather information on what's what from there. However, with a NIX (Referred to as a Begaruta in the files), they have four separate weapon slots... sort of. They also have a hidden four extra weapon slots that are used for cosmetics. I don't especially suggest using them, but here's a quick rundown of them:
The items circled in RED are empty weapon slots. The item circled in BLUE is the path that leads to what file to use. The item circled in GREEN controls recoil and one other unknown factor.

To use one of those empty weapon slots, do this:
You can also do this the other way around to remove weapons.

When making an NPC vehicle, if you're using a weapon usually used by the player, make sure to edit the weapon (and rename it slightly). What you're specifically looking to do is to go to Custom_Parameter, where you'll want to replace the entire struct in there with Null.
That struct gives the weapons the red light thing that player-wielded vehicles have.
Vehicles and NPC Vehicles (Part 2: Barga)
Since Bargas work differently from other vehicles, I'll give a few quick notes on them in here.

They still have GameObjectDurability and the RAB string, but their weapons work completely differently. Notably, one cannot change Barga's speed.

Below is an example of an attack:
The first value circled in red is the attack speed. The default is 1, so 1x speed.
The second value circled in red is the default damage. This is scaled up as the levels progress, like everything else.

Everything else lacks documentation and is unknown (besides the name). If any information is gathered about the other values, I'd love to know tbh
We cannot add new attacks entirely, we can only edit them.

Here's an image of something you'll see at the top of Barga's file. These are the different combos it can perform. You can add new combos at your leisure by copying and pasting one of the Combos, then using the names that the attacks are assigned by their Attack struct.
Enemies
With enemies being an enormous factor in games like EDF, you'd think this section would be enormous- but realistically, the problem is that enemies are so unique. Each enemy has its own code and numbers to decide their damage and attacks.

The first thing you need to know is that enemies are entities, just like NPCs. They still have the .RAB string and GameObjectDurability. However, their damage values are strewn about in numerous poorly documented locations in their code.

Cosmonauts/Colonists
Their weapon SGOs are documented here: https://github.com/KCreator/Earth-Defence-Force-Documentation/wiki/Enemy-Weapons-Parameters
Cosmonauts and Colonists both have a few values to pay attention to, the main ones being their Weaponload and their GameObjectDurability. However, for armored ones, you're looking for this block:
{
"type": "ptr",
"value": [
{"type": "string", "value": "頭"},
{"type": "string", "value": "体"},
{"type": "int", "value": 500}, (The actual durability of the armor plate)
{"type": "int", "value": 1},
{"type": "int", "value": 2},
{"type": "int", "value": 0},
{"type": "int", "value": 1},
{"type": "int", "value": -1},
{"type": "string", "value": "body_reaction_th"}, (The animation repository to draw from for its hit stun. Don't edit this)
{

You're looking for quite a few of these, actually. These are all armor plates. I recommend changing ONLY the durability, though you could research this and find out what you can if that's what you like.

Kaiju (Mysterious Monsters)
One can hypothetically change the Bullet Type that Erginus uses for his breath attack, though I don't recommend it. One can also change its CustomParameter. (No, one can't just use ClusterBullet01 to customize more than that, I've tried)

GameObjectDurability controls the health, as usual.

To change the glowing light colors of Erginus, you'll need to extract the SGO with EDFTools. Drag and drop the SGO onto the exe like it's an RAB, and open it with Notepad++ (or anything really, that's just what I recommend)
Search "MAB" and go to the first result. Then, you should be able to find this:

If you've recognized it already, good on you. This is a sophisticated RGB value. The "x" value controls the amount of a given color.

So why are there two identical values in each block? Simple- you'll notice the lights along Erginus's body tend to flow from one side to the other. The first value is the color the lights start as, while the second one is what they end up as at the end of the scroll. Do note that it cuts un-smoothly back to the starting color when the glow finishes across Erginus's body.
Scroll until you reach "Monster501_wing_mat" and there'll be another RGB value there. This controls the glow in Erginus's "wings" (the black spikes on his back)

Species Alpha (Ants)
I'll just run over what matters here.
insectbase_MoveSpeed: Default walking speed.

^ Controls the ant's color. Far more handy than MRAB editing.
game_object_durability: You know this by now.
insectbase_MoveSpeed: Walking speed.
ant_AiSetting: Ai setting for the Ant. Here's the block.
{"type": "int", "value": 1}, (0=acid, 1=bite, 2=passive)
{"type": "float", "value": 10}, (Unknown)
{"type": "float", "value": 30} (Unknown)


Species Beta (Spiders)
insectbase_MoveSpeed: Default walking speed. Doesn't affect jumping.
game_object_durability: Piece of cake.
spd_AiSetting: Controls the spider AI. Here's its block.
{"type": "int", "value": 300}, (Unknown, linked to attack chance)
{"type": "int", "value": 400}, (Unknown, linked to attack chance)
{"type": "float", "value": 40}, (Y axis attack distance? Increasing it seems to increase spider aggression)
{"type": "float", "value": 110} (X/Z axis attack distance?)

spd_Ammo: Controls for the spider's threads.
{"type": "float", "value": 1}, (Thread size)
{"type": "float", "value": 0.6000000238418579}, (Thread speed)
{"type": "float", "value": 1} (Damage)


Flying Aggressors (Wasps)
Diffuse: RGB for the wasp's coloration. See the image for Species Alpha.
insectbase_MoveSpeed: Move speed while on land.
bee_FlySideMoveSpeed: Speed while orbiting a target(?)
bee_FlySpeedBase: Starting flight speed for wasps.
bee_FlySpeedMax: Maximum velocity for wasps.
bee_FlySpeedUp: Flying acceleration.
-----------
(Tip: If you set all the values in the "deathreaction" to 0, enemies won't go flying when they die. If you increase them, it'll increase how far they fly)
Realistically, we know very little about enemy edits. Feel free to contact me on the EDF discord if you have any knowledge on these: https://discord.gg/edf
Texture edits: RAB and MRAB
If you've been reading this entire guide in one setting, take a break. Go get some water. Seriously, this was information I accumulated over 3 months, not 3 minutes.

Anyway, the first thing to get across is that RAB and MRAB files are so similar that you can simply rename them interchangeably and the game won't mind. MRAB files seem to be used when the file has more mdb files (which we'll get to). For simplicity, I'll just be calling them RAB files.

To unpack an RAB file, click and drag it onto AUK's EDF Tools (available in the Resources section). This will start an extraction process, ending with a folder appearing. Assuming you have a copy of the original RAB, delete the one you unpacked so AUK's EDF Tools doesn't have to do overwrite the old file when it re-packs it.

In the extracted RAB, there should be three folders: HD-TEXTURE, MODEL, and TEXTURE.
HD-TEXTURE contains the standard textures one sees. This is what you should focus on.
MODEL contains MDB files. Don't bother with those for now.
TEXTURE contains the textures that the game uses while the bigger textures are still loading.

In HD-TEXTURE, you'll notice the files are in .DDS format. I recommend using Gimp to open these files. Using Gimp, you can edit the files at your leisure. Make sure to click "Export" and not "Save".

Here's a fun thing you can do: Click "Color" on the top of your screen, and of the options that appear, choose "Hue-Saturation". This will allow you to change the hue, lightness, and saturation of the colors. This is how I get differently colored Powered Exoskeletons.
Do note that not all colors are controlled by the DDS files. The lights on drones, the colors of Teleportation Anchors, Barga's glowing parts, and shininess are all controlled by the MDB.

To re-pack an RAB file:
-Open Command Prompt
-Click and drag AUK's EDF Tools into it. This should paste its file director into the console.
-Type /ARCHIVE after the file path
-Click and drag the folder that contains the unpacked RAB into the console. This will inset its file path, too.
-Press enter. The archiving process may take some time depending on the size of the file.
^ Your command should look something like this
Advanced texture edits: MDB
MDB files are the game's models, and they're found within RAB and MRAB files. To open an MDB, you'll need to click and drag it into AUK's EDF Tools like it's an RAB file. When it asks you whether to use a single core or not, type 1 and press enter. This will convert the MDB into an XML file, which is slightly more readable.

MDB files are huge, so your computer will likely take a while to load them, but I recommend using Notepad++ to edit these XML files. Once it's loaded, ignore absolutely everything and drag the scroll bar to the very bottom.
After waiting for everything to render, scroll up a little and you'll be met with a MaterialNode. This will have a long series of things marked like "diffuse", "normal_amount", "specular_pow", and the like. We'll refer to these as Blocks.

Below those, you'll find RGB values- Red, Green, Blue, and Alpha (opacity). However, you'll immediately notice something odd: Even on blue enemies, "specular_pow" generally has its Red value set to 100. So what's going on? The answer is that very often, these aren't actually RGB values, they're just structured like them.

Think of them like Floats from the SGO files. The values are read by the game, then it does whatever it's programmed to do with them, which isn't always related to colors.
Why did they do this? Great question. I have no idea, and I'm not sure anyone does.

Some of the values like "metallic" do control color, however. In many Primer vehicles, their golden armor has a golden shine that won't go away when you change the textures. This is controlled by these values. Look for any values that look like they add up to a golden color, and change them as you please.
(Tip: Yellow in RGB is mainly red with a good deal of green. Look for that when editing Primer colors)

The texture files for this Imperial Teleportation Ship are completely black in both images

If you can't see any "metallic" value or "roughness" value (along with a few others), then that Shader doesn't have them. What each value does (and which values exist) is controlled by a block that looks something like this:
<Shader Name="snd_Mech" ptrnum="10" texnum="4">

ptrnum is the number of blocks that the shader has.
texnum is the number of textures it's linked to, which are found after the blocks.
I do not recommend changing any of this. Stick to editing the RGB values.

When you've finished editing the XML, save it then click and drag it into AUK's EDF Tools again to repack it into an MDB. You can delete the old XML.
Model edits: MDB
https://github.com/Smileynator/blender-mdb-addon
Here, have a tool. Created by Smileynator, this is a Blender addon for importing and exporting MDBs through Blender.

Custom vehicle by AUK

I can't fit an entire Blender tutorial in here, but here's the deal; this is only confirmed to work with Blender 3.7, no guarantees for 4.0 or upwards. It is extremely difficult to backport your Blender version, I haven't had any success in trying to do so. So if you're gonna install it, go for 3.7

To install the plugin, follow this tutorial[exnihilodigital.com]. You'll want to go for the "Custom Add-On" process.
Editing and Creating Missions
Now a lot of you probably skipped straight to here. It's my job to inform you, whether you did or didn't, that mission changes are among the most difficult changes you can make- and this becomes more true the bigger changes you make.

This is going to be split into sections. Due to the sheer amount of time and effort mission editing and creating takes, then prepare for a wild ride.
I know a lot of you have this at the top of what you want to know how to do, so I'm sorry that it's so complicated. I'm going to keep it as simple as I can.

First, a basic thing:
-Make sure you have Root.CPK unpacked. Go into the game's files.
-Go into the MISSION folder.
-Enter the folder called M005. (Offline Mission 5)
-You'll notice two files: MISSION.BVM and MISSION.RMPA.

BVM is the mission data. It controls almost everything.
RMPA is the location data. It contains the coordinates and location names.
For the most part, we'll be focusing on the BVM.

You'll need this: https://github.com/mp-s/edftools/releases/download/1.62/mission_tools_1.62.exe
It isn't the most recent version of the tool, but it's the one that works the best for me and other users, oddly.

Unpacking them is simple- click and drag the BVM/RMPA onto the Mission Tools exe.
You can unpack the BVM into an ASM file, which can be opened with Notepad.
The RMPA unpacks into a JSON, which can also be opened with Notepad.

Make sure to make backups frequently, especially when making major changes. Similar to the SGOs, the JSONs and ASMs can be converted back into BVM/RMPA format by clicking and dragging them onto the Mission Tools exe.

(All mission files use the BVM/RMPA system, I'm using M005 for simplicity)
Missions- BVM Basics
The BVM is set up in sections. Here, I'll explain each section.

1: Name List
The name list should read something like this:
-----------------------
name Func_1___Counter // 0
name Func_2___Counter // 1
name Func_3___Counter // 2
name Func_4___Counter // 3
name Func_5___Counter // 4
-----------------------
etc...

This is a list of every variable that is going to be used/changed in the mission. Ignore the ones marked as "Func_X___Counter" and move on to the ones that say things like "tank00" or "generator3".

The number after the // is their variable ID. Whenever a piece of code is going to make tank00 do something, it's going to refer to it as "58" in this mission.

(Ignore the section that starts with "Mission::Mission:")

2: Mandatory Locations
This will look like this:
-----------------------
location_0 :

loadrel 0x00
addrel 0x03 // Local var 0x03
ret

location_4 : // Voice2:

subrel 0x03 // Local var 0x03
storerel 0x00
-----------------------
etc...
These give us a basic introduction to Locations, which is how the mission functions. These locations should not be changed unless you seriously know what you're doing.
These may look confusing, but that's because they're what I call "Mandatory Locations". I can't find a good way to describe what they do besides that they're very important. Move past them.

Until you reach...

3: Early Location 791 - Object Renders
You're going to notice a huge list that has things like this:
-----------------------
pushstr "app:/object/GiantAnt01.sgo"
push -1
cuscall0 13 // LoadResource(string resource, int)

pushstr "app:/object/AiArmySoldier_S_AF_Leader.sgo"
push -1
cuscall0 13 // LoadResource(string resource, int)
-----------------------
etc...
These are the objects the game is rendering during the loading screen. Hence the annotation "LoadResource". If you spawn an entity that isn't on this list during the mission, the game will lag momentarily.
This can easily be added onto by just copy-pasting one of the blocks and setting the file path to whichever enemy you want.

4: Standard Locations
This makes up the bulk of the mission. I can't give an example of what it'll look like here, but this controls everything about the mission itself.
You'll notice some things like "GiantAnt01". Yes, these are actually what spawns the enemies themselves. In the next section, I'll teach you how to modify it, but we're just getting familiar with the BVM format right now.

5: Shortcut Hub
At the end of the BVM, you'll come across something that looks like this:
-----------------------
Voice2: /- (string, float)
call location_4 // Voice2:

exit

RadioBegin:
call location_29 // RadioBegin:

exit
-----------------------
Etc...
This is the Shortcut Hub. Whenever the game calls for "RadioBegin", the game checks the Shortcut Hub, and sees that it leads to location_29.
Whenever the game calls for MissionClear, it checks the shortcuts and sees that leads to location_200.

That's the basis of the Shortcut Hub.

I don't expect you to memorize all that. Come back to this if you're lost.
Missions- Editing the BVM
Here we are. Sorry for the delay, but here I'll teach you how to edit the BVM.
This is going to be a long list of what commands you should know, what they do, and how to change them. However, three quick things.

First, anything after a '//' is an annotation. It doesn't affect the code and is there to make things easier.

Second, the actual commands are denoted by their Cuscall0. That's something that will remain consistent with all the commands I'll be showing you. After the Cuscall0, there'll be a bunch of words in parentheses. These are what the different values in the command do, in order.

Third, this is a list of every known Cuscall0: https://raw.githubusercontent.com/Kemui52/EDF-Doc-Storage/main/Kittopia%20Unnamed%20Tool/EDF5_2C_MissionCommands.jsonaml
It's organized and formatted a little strangely to my tastes, but I have massive respect for the person who made this. Feel free to check it out.
HOWEVER, I recently (2/28/2024) created this guide, which houses all the mission commands I know of. It used to be private, but it's now open to the public!

3/18/2024: I explained mission editing extremely poorly, so I'm going to say what you should do to start. In a mission, go to section 4. Find something that says CreateFriend, CreateFriendGroup, CreateEnemy, CreateEnemyGroup, or anything like that. Referring to the list below, edit anything about it. Expand from there.

Alright, let's get started with a few useful commands.

Map
pushstr "app:/Map/nw_Danti01.mac" (Map file path, change this to change the map)
pushstr "cloudy" // (Weather)
cuscall0 100 // SetMap(

Player Spawning
pushstr "プレイヤー" // (Coordinates for the player to spawn)
cuscall0 1000 // CreatePlayer(spawnpoint);

Enemy Group Spawning
pushstr "蟻1" // (Location to spawn enemies)
push 30.0f // (How spread out the enemies are)
pushstr "app:/Object/GiantAnt01.sgo" // (Enemy to spawn)
push 15 // (Number of enemies)
push 1.0f // (Health Multiplier)
push 0 // (Aggro. If set to 1, the enemy will automatically know where the player is)
cuscall0 2002 // void CreateEnemyGroup(spawnpoint, radius, sgo_name, count, health_scale, has_aggro);

Single Enemy Spawning
push 53 // (Internal ID)
pushstr "ジェネレータ0" // (Location)
pushstr "app:/object/e505_generator.sgo" // (Enemy to spawn)
push 1.0f // (Enemy health multiplier)
push 0 // (Aggro. If set to 1, the enemy will automatically know where the player is)
cuscall0 2000 // int CreateEnemy(spawnpoint, sgo, scale, active)

store // (Very important. If it has an ID, add this.)

Player Vehicle Spawning
pushstr "ジェネレータ0" // (Location)
pushstr "app:/object/v505_tank_mission.sgo" // (Vehicle to spawn)
cuscall0 1021 // int CreateVehicle(spawnpoint, sgo)

Ally Squad Spawning
push 49 // (Internal ID)
pushstr "小隊1" // (Location)
push 10.0f (Spread)
pushstr "app:/Object/AiArmySoldier_AF_Leader.sgo" // (Leader to spawn)
pushstr "app:/Object/AiArmySoldier_AF.sgo" // (Followers to spawn)
push 5 // (Number of followers)
push 0.5f // (Health multiplier)
push 0 // (If 1, the squad can be recruited)
cuscall0 1011 // int CreateFriendSquad(str spawnpoint, float radius, str sgo_leader, str sgo_follower, int count, float hpScale, bool canRecruit);

store // (Very important. If it has an ID, add this.)

Single Ally Spawning
push 58 // (Internal ID)
pushstr "戦車1" // (Location)
pushstr "app:/object/v505_tank_ai.sgo" // (Ally to spawn)
push 0.5f // (Health multiplier)
push 0 // (Can be recruited if set to 1. Only works on soldiers, not vehicles)
cuscall0 1010 // int CreateFriend(spawnpoint, sgo, scale, canRecruit);

store (Very important. If it has an ID, add this.)

Move AI Unit On Route
loadabs 49 // g_sergent (ID of the unit to move)
pushstr "小隊1-1" // (Location to move the unit to)
cuscall0 3101 // SetAiRoute(int ID, string path)

AI Route Speed
loadabs 49 // g_sergent (ID of the unit to move)
push 0.75f // (Speed of unit. More than 1.0f is useless)
cuscall0 3100 // SetAiRouteSpeed(int id, float speedfactor)

Set Music
pushstr "BGM_E5M08_KyuuhennSuruSenjou" // (Music to play. Refer to this https://github.com/KCreator/Earth-Defence-Force-Documentation/wiki/EDF-Music)
cuscall0 300 // PlayBGM(str SongName)

Set Pause Between Commands
push 5.0f // (Time to wait in seconds)
cuscall0 200 // Wait(float)
NOTE: Using this too frequently or for extended periods of time may break the BVM.

Activate all NPCs on team
push 2 // Team 1 is enemies, 2 is allies
cuscall0 3023

Radio Voice Speaks
pushstr "AE104_068_E" // (Sound to play. Ending with _E makes it have the radio filter. _S is for jets and special sounds, and nothing makes no filter. Very few sounds have a _S variant.)
push 0.0f // (Delay in seconds before sound plays. Useful when lining several RadioVoice's up)
call location_56 // RadioVoice:

Normal Voice Speaks
cuscall0 4100
loadabs 59 // tank01
pushstr "AE005_032_E"
pushstr ""
push 1.0f
cuscall0 4102
cuscall0 4101
cuscall0 4002

Object Action
loadabs 56 // generator3 (Entity to act)
push 0 // (Action to perform. 0 for an Anchor is it falling, 1 for a Mothership is it readying its cannon, etc)
cuscall0 3200 // SetObjectAction(int id, int action)

Destroy Object
loadabs 58 // tank00 (Entity to destroy. Explodes things like vehicles and teleportation ships)
cuscall0 3202 // SetObjectDestroy(int id)

Destroy Map Objects
pushstr "破壊1" // (A shape on a location, all in the RMPA. Everything within that shape is destroyed)
cuscall0 102 // MapObjectDestroy(shapeNode)

Fade Out Background Music
push 5.0f // (Time which it takes to become completely silent, so the rate of fading)
cuscall0 301 // FadeOutBGM(float TimeDelta)

------------------------------------------
(Delete everything in parentheses)
VIEW THIS GUIDE FOR A COMPLETE COMMAND LIST: https://gtm.you1.cn/sharedfiles/filedetails/?id=3136470802
These are the ones you should know the most. To start out, I recommend changing values. After you get comfortable, you can start adding new things entirely.

IF OVERHAULING A MISSION: I suggest taking a mission that's closest to what you want, erasing all of the dialogue, and adding/removing as you please. From there, add dialogue where you will.
(Don't overhaul a mission to start out with. I get if you're excited, but it took me months to get here, and I'm still not totally comfortable overhauling levels. Take it slow, trust me.)

It may not seem like I've actually told you what to do, so let me recap.
Go into the ASM and head to Section 4 (From the previous chapter). Change the values around, like the file paths, numbers, etc
When you become comfortable changing things, try adding a new block. Copy and paste the Ally group, putting it in a different location.

Not everything will work. Modding missions takes a LOT of patience, there are still issues I encounter that make no sense to me. Sometimes, commands will completely fail to register, and there's nothing you can do about it. If it doesn't work, try, try again. Making tiny changes over and over is a big thing.

If you're thinking "That's it? It doesn't seem too complicated" then you have my respect. You should consider becoming a large-scale modder!
Missions- Editing the RMPA
When entering the RMPA (JSON), You'll be confronted with a massive list of coordinates.

Take this: https://www.cheatengine.org/downloads.php

Then, take this:
https://cdn.discordapp.com/attachments/599213952865665044/1168301698406678658/MasterEDF5.CT?ex=6563b9be&is=655144be&hm=fd3f3232f6ef0a71478c012587bb7dbff7baec29af6e66436413b7e1a6ec051e&

Cheat Engine is NOT a virus as long as you download it from the original site. However, it is a program made to modify other programs, so most antiviruses will get angry at it. Trust me, it isn't a virus (if downloaded from the original site).

When in the RMPA, you'll see a lot of coordinates. There are a few types.

Cylinder
"shape type name": "Cylinder",
"name": "敵01_1",
"shape center position": [ -65.60665893554688, 25.0, -33.498802185058594 ],
"Rectangle size_XYZ": [ 0.0, 0.0, 0.0 ],
"Rectangle angle": 0.0,
"Sphere OR Cylinder diameter": 170.0,
"Cylinder height": 80.0

Sphere
"shape type name": "Sphere",
"name": "小隊エリア02",
"shape center position": [ 58.423179626464844, -2.4000000848900527e-05, 98.40754699707031 ],
"Rectangle size_XYZ": [ 0.0, 0.0, 0.0 ],
"Rectangle angle": 0.0,
"Sphere OR Cylinder diameter": 150.0,
"Cylinder height": 0.0

Rectangle
"shape type name": "Rectangle",
"name": "名無し",
"shape center position": [ 0.0, 0.0, 0.0 ],
"Rectangle size_XYZ": [ 1000.0, 200.0, 1000.0 ],
"Rectangle angle": 0.0,
"Sphere OR Cylinder diameter": 0.0,
"Cylinder height": 0.0

Location
"name": "敵F2",
"positions_1": [ -1453.946533203125, 300.0, 1594.106689453125 ],
"positions_2": [ -1391.37646484375, 300.0, 1537.8037109375 ]

Waypoint
"WayPoint Number": 0,
"name": "小隊01ルート1",
"positions": [ 497.0778503417969, 46.37828063964844, -480.7671813964844 ],
"rmpa_float_WayPointWidth": -1.0,
"next WayPoint Number List": [ 1 ]

--------------------------------------
Cylinders, Spheres, and Rectangles are used mainly for destroying buildings. The game has everything within the radius of the shape be destroyed. They're also used for when a player enters the zone of the shape, an event happens.

Locations are the most important. The first value is where the coordinates are, and the second value is where it's facing.

Waypoints are just locations units move to when you give them the "SetAiRoute" command. They may also be used for a soldier turning and looking at a location.

So how do you get coordinates...?
Open Cheat Engine and click on the glowing icon in the top left. When a tiny window opens, choose EDF5.EXE, and click "Yes" on the next prompt.

Enter a level and go to a location (I recommend using a Wing Diver on easy mode for ease of scouting). Then, press escape to open the pause menu, and press Ctrl+Shift+C.
Open notepad (or anything) and hit paste. It'll give you the coordinates you are currently at.

You can, of course, add new coordinates.
Making sure the player coordinates are good is extra important when changing the map. Make sure to not have the coordinates spawn you underground, or the game will bug out and you'll have to close it manually.

Than:
To add new coordinates to the list, do this. The names can be anything.
Sound Editing
You're going to need EAT, the program in the Resources chapter: Eternity Audio Tool.

These files can't currently be found in the Root.cpk folder. Go to your EDF 5 game directory and go into Sounds, then PC (or whatever folder is in there). For the sake of this guide, we'll be exploring the game's music: Find TIKYUUX_MUSIC.ACB (There should be an .AWB with the same name)

Make a new folder and copy both the .AWB and .ACB into it. Keep those as a backup.
If you accidentally lose the backup, just verify the steam files.

Open the .ACB with EAT, and you should be presented with a huge list. You can double-click on any of them to play them.
It may be loud, turn down your volume!

Now what? You need a .WAV file. With one of the music tracks highlighted, click replace and open that .WAV file.
Make sure it has the same frequency as the rest of the tracks and hit Save.

I recommend replacing one of the unused EDF 4.1 tracks and just manually changing the music player for wherever to play that track.
Other changes (Text/UI)
Starting off, let's change Mainscript.as. As you may expect, it's in the MAINSCRIPT folder.
Mainscript.as controls things related to the menu. It can be opened with notepad++ so there's no need to do anything fancy. Here are some things you can change with it:
-------------------------------------------
void CheckUnlockArmorWeaponLimit()
{
‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎int clear_ratio = GetAchivementValue_Int("AllClearRatio");
‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎if( clear_ratio >= 7000 ) {
‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎if( UnlockArmorWeaponLimit() ) {
‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎Dialog_Message( "Sys_UnlockArmorWeaponLimit" );
‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎}
‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎}
}
This is the block for the completion ratio you need to remove armor/weapon limits. 7000 = 70%
---
If you search for "BGM" you'll find what music plays in several of the menus.
-------------------------------------------
Next, config.sgo, in the DEFAULTPACKAGE file.
The main thing of interest here is that you can change the music that plays in the weapon select screen. There's separate music options for every mode, so search "BGM" and find all of them.

Otherwise, this file contains the paths for the files that are used in the mission select screen, as well as a bunch of unknown values.
-------------------------------------------
Finally, altering TEXTTABLE_XBOX.EN.TXT_SGO, found in ETC.
This is actually just an SGO file, ignore the "TXT_" for now. When you re-package it, however, make sure to rename it to include that.

This contains the vast majority of the game's text. If it's text-related but not in a weapon, it's probably stored in here. Use ctrl+f and search up what text you want to edit.
(Fun note: In here, you can see evidence of removed features, such as a multiplayer PVP mode)
-------------------------------------------
In the UI folder, all you'll really want to change is the RAB files. Everything else just tells the game to load said RAB files, so they won't be of much use to you.
There are so many that it would take an eternity to list them all, and I unfortunately don't know what they all are, sorry. You'll have to use trial and error.
Conclusion
I promise you, becoming a modder is more than possible. The modding community is extremely small and we're always looking for more people!

You do NOT need to credit me for information in this guide. Everyone learned how to mod somewhere, for you maybe it just happened to be here.
Still, if you want to share the guide with other people, then the more modders EDF has, the better.

I implore you to join the EDF Discord[discord.gg]. Everyone there is extremely helpful and patient, and they'll be more than happy to help you out if something confuses you- as will I, seeing as I'm there.

(Also, if you have questions, feel free to leave them in the comments! I check here regularly and am happy to answer any questions you may have.)

Stay strong, and remember EDF's pride!

EDF! EDF! EDF!

-Maybe Birb
30 Comments
pariah 18 Jan @ 7:11pm 
great guide. im not much of a modder in general but this helped me with most of the details of making a simple texture edit mod in EDF 6. cheers!
Maybe Birb  [author] 28 Dec, 2024 @ 9:15am 
@Garidd suka MATCHA
I believe it's hard-coded in the game's EXE. Last I checked we can't edit that, sorry
J E J E 27 Dec, 2024 @ 9:05pm 
sir @Maybe Birb How to make the energy wing driver recover quickly?
on Plasma Core Equipment
J E J E 22 Dec, 2024 @ 12:14am 
okeee sirr thenkyuuu so muaccchh @maybe birb
Maybe Birb  [author] 21 Dec, 2024 @ 8:02pm 
@Garidd suka MATCHA
Range = AmmoAlive x AmmoSpeed

AmmoAlive is the number of frames something exists for. AmmoSpeed is meters the bullet travels per frame.
In the case of the PA-11, it has an AmmoAlive of 58 (frames) and an AmmoSpeed of 4, so its total range is: 58 x 4 = 232m
J E J E 21 Dec, 2024 @ 11:46am 
sir how to change the range on AR weapons or others how?

@Maybe Birb
J E J E 8 Dec, 2024 @ 4:19am 
EDF 5 is what I'm using, it's possible for me to do this in EDF 6.

but this is already possible, I just need to download a different version of sgott, thank you sir for providing guidance and providing information that I asked about this.

@Maybe Birb
Maybe Birb  [author] 4 Dec, 2024 @ 5:22pm 
@Garidd suka MATCHA
Is this with EDF 5 or EDF 6? 6 requires a new program.

If it's still with 5, I'd say treat EDF Tools (the one for RABs and MRABs) as if it was Sgott, it also has SGO compatibility
J E J E 3 Dec, 2024 @ 11:53pm 
but I also did it to a new sgo file (I haven't done anything to it yet) when I convert from sgo to json it works. but when I want to restore json to sgo, it doesn't show up...

Maybe this is a software error or something?
@Maybe Birb
Maybe Birb  [author] 3 Dec, 2024 @ 6:47pm 
@Garidd suka MATCHA
This probably means something was formatted wrong, like if you accidentally changed AmmoAlive to AmoAliv or something like that. If it's unwilling to convert things back but still clearly works, the best thing to do is just get a fresh/clean version of the file and start over, maybe using the old one as a reference.

(I forget if SGOs have brackets, but if you accidentally deleted or added a bracket, that'd also do it)