Right, several of these have been started, but none have really been finished, so this is my attempt.
To start, you will need the following:
-Freelancer Explorer
-Notepad/Notepad ++
-A fresh copy of Freelancer with the latest version of Discovery installed.
-Freelancer Mod manager.
To start, I'll describe what Freelancer Explorer does. It basically can edit and make new systems for you in Freelancer, but due to it being a program, of course it has various bugs in it, so understanding what it does is always a good thing.
Now, go to C:/Program Files/Freelancer Mod Manager/mods
Here you will see a bunch of folders that contain your mods. Open the latest Discovery mod and COPY the folders called DATA and DLLS. Ignore EXE and ioncross and any other random files in there.
Now, return to /mods and make a new folder called "EditDiscovery". Open this new folder, and paste DATA and DLLS.
The reason for this is that Discovery has a bunch of stuff added onto it that confuses FLE (Freelancer Explorer), so it will crash if you try and edit it.
Open FLE, and select "Yes" to edit an existing mod question. Next, select your folder called Edit Discovery and voila, it's open.
We're going to follow a system I edited, step by step. First, find the system called "Illinois", and then right click it and select "edit".
In this system are a variety of different things that I added, I'll summarise them below:
-Liberty Dreadnought near the Jump Hole
-Massive Station near the planet
-Minefield to the left of the system.
Right, to place a base, you select the base button, place where you want it and hit ok. The base is now placed and exists. Which files does this edit? Well:
-The system file (See below)
-Universe.ini
-mBases.ini
-The base file (See below)
-The room files (See below)
Now, illinois has a code, along with every system, base and object in Freelancer. Illinois's code is LI15. The LI stands for Liberty, and Illinois is the 15th system made in Liberty. (LI01 is New York). Now, in your mod folder you had a folder called DATA, remember? Go to that now, and go to UNIVERSE.
Now, select the folder called SYSTEMS, and voila, you have all the codes for every system in Discovery. Scroll down to LI15 and open it. Inside you will find the following:
Li15.ini is the systems main system file. Anything that exists in the system will have an entry in this file, every base, object, field, sun etc. Everything. Any base in the file will also have a file in the Bases folder (Go have a look around.) More on this later.
Next, we can look back in the UNIVERSE folder, and open Universe.ini
(Note: All Ini's can be opened using notepad)
Inside universe.ini there are two types of entries:
[Base] What it is, a base or a system.
nickname = Li01_01_Base This bases code.
system = Li01 The system this base is in.
strid_name = 196766 A link to the name of the base, each name, info or description has a number that is found in the .dll's, more on this later.
file = Universe\Systems\Li01\Bases\Li01_01_Base.ini Oh look, it's that system ini again.
BGCS_base_run_by = W02bF35 Faction code.
And
[system]
nickname = EW17 System code.
file = systems\EW17\EW17.ini There's that pesky system ini again.
pos = 5, -1 Position on the minimap
visit = 0 I think this is whether it appears on a new characters sheet, not sure though.
strid_name = 502192 Link to the name of the system
ids_info = 502193 Link to the info of the system
NavMapScale = 2 Size of the system
msg_id_prefix = ignore Can't remember what this is.
I've added red comments to explain what each bit is.
Right, so universe.ini links everything together. Earlier, I mentioned another file aswell: mBases.ini
mBases.ini is the insides of the base, the people, the bar, the ship dealer, all that jazz.
Paused for the night, to be continued tomorrow, poke me to remind me please or I'll forget.
Last time on "Seths system tutorial": mBases.ini is the insides of the base, the people, the bar, the ship dealer, all that jazz.
I've decided I'll sort out all the BB code for this tutorial after I get it finished, so... yeah.
mBases.ini can be found in DATA/MISSIONS.
Now, mBases sorts out people who live inside the base, prepare for a wall of text, as this is an mBases entry, again with comments:
[MBase] Entry tag
nickname = Li10_03_Base Base code (Liberty, 10th system, third base
local_faction = li_p_guardian Faction name. This is the LPI guard.
diff = 3 Can't remember, which means it ain't important.
msg_id_prefix = ignore See above.
[MVendor] Relates to the people in the bar I think...
num_offers = 2, 4
[BaseFaction]
faction = li_p_guardian Faction again
weight = 100 All weights in the entry must add up to 100, I'll describe this below.
npc = li1003_001_m Name of NPC entry below
npc = li1003_002_m Name of NPC entry below
npc = li1003_003_m Name of NPC entry below
npc = li1003_004_m Name of NPC entry below
npc = li1003_005_m Name of NPC entry below
npc = li1003_006_m Name of NPC entry below
[GF_NPC]
nickname = li1003_fix_bartender Bartender NPC, note it's not in the list of NPC's above. Those NPC's are the ones that appear in the bar.
body = li_manhattan_bartender_body NPC body
head = li_manhattan_bartender_head NPC head
lefthand = benchmark_male_hand_left I don't need to tell you do I?
righthand = benchmark_male_hand_right
individual_name = 462853 A .dll link to the name
affiliation = li_p_guardian Bartenders faction
voice = rvp101 His voice
rumor = base_0_rank, mission_end, 1, 462830 Rumors. Each number at the end relates to the rumor in question, which will be discussed later in this tutorial.
rumor = base_0_rank, mission_end, 1, 462831
rumor = base_0_rank, mission_end, 1, 462832
[GF_NPC]
nickname = li1003_fix_trader Same as the bartender, but this is the Commodity dealer
body = li_commtrader_body
head = br_brighton_head
lefthand = benchmark_male_hand_left
righthand = benchmark_male_hand_right
individual_name = 462855
affiliation = li_p_guardian
voice = rvp101
[GF_NPC]
nickname = li1003_fix_weaponsdealer Equipment dealer
body = li_commtrader_body
head = br_sales_head
lefthand = benchmark_male_hand_left
righthand = benchmark_male_hand_right
individual_name = 462856
affiliation = li_p_guardian
voice = rvp106
[GF_NPC]
nickname = li1003_006_m Recognize the name? This is the one of the guys who was up there, this dude appears in the bar.
body = li_male_guard_body
head = ge_male3_head
lefthand = benchmark_male_hand_left
righthand = benchmark_male_hand_right
individual_name = 462857
affiliation = li_p_guardian
voice = rvp121
room = bar See, the bar.
rumor = base_0_rank, mission_end, 1, 462833
rumor = base_0_rank, mission_end, 1, 462834
[GF_NPC]
nickname = li1003_005_m
body = li_male_guard_body
head = ge_male3_head
lefthand = benchmark_male_hand_left
righthand = benchmark_male_hand_right
individual_name = 462858
affiliation = li_p_guardian
voice = rvp106
room = bar
rumor = base_0_rank, mission_end, 1, 462835
rumor = base_0_rank, mission_end, 1, 462836
[GF_NPC]
nickname = li1003_004_m
body = li_male_guard_body
head = ge_male3_head
lefthand = benchmark_male_hand_left
righthand = benchmark_male_hand_right
individual_name = 462859
affiliation = li_p_guardian
voice = rvp140
room = bar
rumor = base_0_rank, mission_end, 1, 462837
rumor = base_0_rank, mission_end, 1, 462830
[GF_NPC]
nickname = li1003_003_m
body = li_male_guard_body
head = ge_male3_head
lefthand = benchmark_male_hand_left
righthand = benchmark_male_hand_right
individual_name = 462860
affiliation = li_p_guardian
voice = rvp126
room = bar
rumor = base_0_rank, mission_end, 1, 462831
rumor = base_0_rank, mission_end, 1, 462832
[GF_NPC]
nickname = li1003_002_m
body = li_male_guard_body
head = ge_male3_head
lefthand = benchmark_male_hand_left
righthand = benchmark_male_hand_right
individual_name = 462861
affiliation = li_p_guardian
voice = rvp101
room = bar
rumor = base_0_rank, mission_end, 1, 462833
rumor = base_0_rank, mission_end, 1, 462834
[GF_NPC]
nickname = li1003_001_m
body = li_male_guard_body
head = ge_male3_head
lefthand = benchmark_male_hand_left
righthand = benchmark_male_hand_right
individual_name = 462862
affiliation = li_p_guardian
voice = rvp151
room = bar
rumor = base_0_rank, mission_end, 1, 462835
rumor = base_0_rank, mission_end, 1, 462836
[MRoom] A room in the base
nickname = bar So you can assign NPC's to this bar.
character_density = 4 How many people in the bar at one time.
fixture = li1003_fix_bartender, Zs/NPC/Bartender/01/A/Stand, scripts\vendors\li_host_fidget.thn, bartender Note the li1003_fix_bartender, you have to make sure this links to the right dude, or he won't appear ingame. The bit after it is linked to scripts, which is more advanced than I can be bothered to write down at the moment. SilentAssassin is your guy for that.
[MRoom]
nickname = Deck
character_density = 2
fixture = li1003_fix_trader, Zs/NPC/Trader/01/A/Stand, scripts\vendors\li_commtrader_fidget.thn, trader
fixture = li1003_fix_weaponsdealer, Zs/NPC/Equipment/01/A/Stand, scripts\vendors\li_equipdealer_fidget.thn, Equipment
So, there we go, that's an mBases.ini entry.
In Igiss's submission guidelines, you would make each name and info like so:
ids_description=
462804
<?xml version="1.0" encoding="UTF-16"?><RDL><PUSH/><TEXT>The first LPI outpost set up in this system, Springfield remains the base of operations for outgoing Liberator patrols. It is also where the LPI's ships are maintained, re-armed, and stocked up.</TEXT><PARA/><POP/></RDL>
Voila. Igiss has to input each one into the main .dll himself, so all you need to do is make sure that the numbers match. This is from a notepad file I have in my illinois submission, the Ids_name shows what type of thing it is, then the number it needs to use, then the text.
All of that is outlined in Igiss's submission guidelines, which are floating around somewhere.
Now, weightings, from mBases.ini. This is a little complicated, but bear with me. Now, if we had two factions in a base, say the LPI and the Liberty Navy. In your mBases entry you had 2 LN dudes, and 3 LPI officers. So, it would look a little like this:
So, we have 5 NPC's total, and our weighting has to add up to 100. 100/5 = 20. Now, we have 3 LPI dudes, so 3 x 20 = 60, and there you have your weighting for the LPI. 20 x 2 is 40, so that's your LN weighting.
Got that?
If it doesn't add up exactly, as in, you need 2/3rds or whatever, then just make one of them slightly different, so say you had 6:
Oh wait, we only add up to 96! The world will end! *Runs around with his head on fire.* Or, we can add 2 to each one to get 50 each. Obviously you would do this with just 2 factions, but when you're dealing with something like Manhattan, where you have 12 factions and 30 NPC's, you can see where it can get complicated.
Next up: Making funky bases in Freelancer.
So, place your base in FLE, and then place "Other Objects" nearby. Things like bio_dome, space_research etc are base components, that will make your base more interesting, and allow you to build it up a bit like lego. Now, in order to place them properly compared to your base, you need to make sure that the base is the parent of the objects you want to use to make up your base, then right click on the base, and select "edit base layout".
Next up: Asteroids an Nebulae.
To place an Asteroid, use FLE, and it will appear in your system INI file as a Nebula or Asteroids. Like so:
[Asteroids]
file = solar\asteroids\LI10_prisonminefield_01.ini
zone = Zone_LI10_prisonminefield_01
It will also appear further down in the system ini, in a "zone" tag.
[Zone]
nickname = Zone_LI10_prisonminefield_01 Nickname
ids_name = 462818 Link to .dll
pos = -26055, 0, -25410 Position in the system (X, Y, Z) So, the middle one is up/down
rotate = 0, 11, 0 Self explanatory
shape = ELLIPSOID
size = 11176, 12275, 12275
property_flags = 274 The thing that shows up on the minimap, see Igiss's spreadsheet.
ids_info = 462819 Link to .dll
visit = 36
spacedust = asteroiddust Dust that appears in the zone
spacedust_maxparticles = 50 Density
sort = 20
Right, a file will appear in DATA/SOLAR/ASTEROIDS or /NEBULA
This file contains the various bits and pieces that make up the density of your asteroid field/Nebula. If you wanted to add in passages through it (That code is for a mine field), you add a Lane Access zone as so to the main system ini:
Seth, go take a look at my system modding thread and add some of what you're missing here. Best if you work on this for now. My 'complete system and related modding tutorial' won't be done for.. Well, I'm not even sure yet. My workload for .86 is higher than anything I ever had for the previous versions...
@El-Greeko; I had this problem once as well. I can't remember exactly how I fixed it, but play with your computer display settings. Resolution especially. If that fails, try uninstalling FL, FLMM, and FLE, then delete any leftover files, then reinstall all of them (don't forget to save your multiplayer accounts somewhere).
Posts: 6,308
Threads: 329
Joined: Aug 2007
Staff roles: Story Dev Economy Dev
Just thought I'd give this a quick poke. It's actually the only tutorial I've seen that explains how to do bars properly. Also means I didn't have to waste as much of Dab or Xoria's time as may have been required otherwise. :P
Might as well pitch in with something to be helpful. I think this is correct:
[MVendor]
num_offers = 2, 4
MVendor means mission vendor - it's for the job board in bars.
The first number is the number of missions the job board will offer at once.
The second number is how many players can be running missions before the 'board is busy' screen appears.
The factions that will offer missions is decided by the [BaseFaction] entry just below. Because the entry is a guard system, it doesn't have that part. I'll add an example:
That's Manhattan's faction entry for the Liberty Navy. It means there's three Liberty Navy NPCs on the base, and they offer missions - see "offers_missions = true".
Contrary to what the name says, "mission_type = DestroyMission, 0.000000, 0.112387, 30" seems to allow for all the mission types, not just the destroy ship ones.
EDIT: Just to clarify, adding offers_mission = true doesn't mean missions will appear on their own. You have to add them yourself through messing with population and mission zones, I believe. That's a bit beyond me at the moment, so I'm not going to confuse people with completely misleading info. :P
Posts: 2,122
Threads: 244
Joined: Oct 2007
Staff roles:
Seth's tutorial covers the basics. If you have any specific questions just ask. Two things I don't see him explaining is the actual rumor entry lines and bribes. Among the dealers, only the Bartender offers rumors & bribes. Other npcs that can appear in the bar or sometimes standing behind the commodity dealer also can have rumors & bribes assigned. Bribe entries go between the "room =" line and the first "rumor =" line, as below. My comments are in { }.
[GF_NPC]
nickname = li1003_006_m
body = li_male_guard_body
head = ge_male3_head
lefthand = benchmark_male_hand_left
righthand = benchmark_male_hand_right
individual_name = 462857
affiliation = li_p_guardian
voice = rvp121
room = bar
bribe = ga_p_grp, 84000, 504725 { This designates the bribe for the Gallic Royal Police faction, cost (this is adjusted somehow depending on the character's rep), and last is the ids number that indicates the infocard text used when the npc offers the bribe. There are two infocards used for bribes.}
rumor = base_0_rank, mission_end, 1, 540784
rumor = base_0_rank, mission_end, 2, 540785
rumor = base_0_rank, mission_end, 3, 540786
{the only parts of this line to change are the 6 digit ids number at the end indicating the specific rumor infocard assigned to this npc, and the number to the left of that, a 1, 2, or 3. These numbers indicate when the npc will "speak" the rumor to you, the first, second, or third time you talk to them. At least one rumor should be set at 1, but all three could be set at 1, meaning any of them might be the first rumor. If you have a long conversation split into three rumors, then you want to assign them in sequential order. If the rumors are unrelated to each other, they could all be set as 1. You can also assign as many rumors to an npc as you want, but that seems inefficient to me. All the new Gallic rumors are assigned in 1,2,3 order for the sake of efficient coding, but most rumors in the mod are much more randomly assigned. If you are assigning new rumors, you need to get a range of free ids numbers that are not already in use. There is a chart on the Dev forum that tracks these.}
lefthand = -> "benchmark_male_hand_left" for male, "benchmark_female_hand_left" for female. Leave blank for a robot NPC.
righthand = -> "benchmark_male_hand_right" for male, "benchmark_female_hand_right" for female. Leave blank for a robot NPC.
Here is the full list of head, body, and voices available :
HEAD MATRIX:
Male Heads:
br_bartender_head: Brown haired caucasian
br_brighton_head: Yellow haired caucasian, red tailband
br_captain_head: Dark brown haired caucasian
br_quigly_head: Dark yellow haired caucasian
br_sales_head: Yellow haired, semi bald caucasian
br_tobias_head: Bearded, brown haired caucasian.
ge_male1_head: Black haired asiatic
ge_male2_head: Dark brown haired asiatic
ge_male3_head: Black hair, moustache, caucasian
ge_male4_head: Yellowhaired caucasian
ge_male6_head: Bald unshaven negroid
ge_male7_head: Semibald greyhaired old caucasian
ku_bartender_head: Black haired asiatic.
ku_captain_head: Black haired, halfbeard asiatic.
ku_edo_head: Black haired asiatic - fat.
ku_sales_head: Dark brown haired asiatic.
ku_tenji_head: Silverhaired old asiatic
li_captain_head: Black hair, moustache, caucasian
li_manhattan_bartender_head: Black hair, moustache, caucasian
li_rockford_head: Brownhaired caucasian
li_sales_head: Redhaired caucasian
li_scrote_head: Bald but moustache negroid
pi_pirate1_head: Partially bald, grey haired caucasian
pi_pirate2_head: Blackhaired asiatic.
pi_pirate3_head: Greyhaired caucasian
pi_pirate3_head_hurt: Black/blueish caucasian, impaled in the head. Do not use.
pi_pirate4_head: Brown haired caucasian
pi_pirate5_head: Yellowhaired caucasian
pl_male1_head: Bald caucasian
pl_male2_head: Bald caucasian
pl_male3_head: Yellowhaired caucasian
pl_male4_head: Bald negroid
pl_male5_head: Black haired asiatic
pl_male6_head: Black haired negroid
pl_male7_head: Black haired asiatic
pl_male8_head: Black haired asiatic
rh_alaric_head: Yellowhaired caucasian
rh_bartender_head: Blackhaired caucasian
rh_captain_head: Silverhaired caucasian
rh_deidrich_head: Bald caucasian
rh_hassler_head: Silverhaired caucasian
rh_reichman_head: Bald old caucasian
rh_sales_head: Yellowhaired caucasian, curly
rh_wilham_head: Partially bald yellowhaired caucasian.
sc_scientist1_head: Yellowhaired caucasian
sc_scientist2_head: Blackhaired asiatic
sh_male1_head: Brownhaired caucasian, moustache
sh_male2_head: Yellowhaired caucasian
sh_male3_head: Brownhaired caucasian
sh_male4_head: Unshaven, partially bald caucasian
syd_head: Brown haired caucasian with tatoo across eye