Menu

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 - Radical_Pi

#1
Welcome Center / Remember Me?
June 18, 2010, 12:43:37 PM
For you older members, you may know me. Many of you are friends on Steam. I used to be fairly active around here, but then I lost interest in SWBF. Figured I'd pop back in here, now that school is over for me (and because every other game I own is unplayable atm :P )
#2
SWBF1 Modding Tutorials / Basic LUA guide
September 13, 2009, 03:41:47 PM
Hey guys, since AG made that topic on ODF editing, I figured I might as well go through an LUA file with you.

In case you don't know, whenever a map is loaded, its LUA script is run. The job of the LUA is to load the map data and make sure there is enough memory available for the map. For most maps, there are 2 or 3 LUA files. 1 to load the game in each era, and 1 to add the map to the list of maps.

FYI this is a WIP so not every part of the LUA will be explained

Note: any time you see ***, replace it with your map id

First of all, you will find the LUA scripts in BFBuilder\Data***\Common\Scripts\***

***a.lua or ***i.lua are the GCW scripts. ***c.lua or ***r.lua are the CW scripts. There is also an addme.lua which eventually becomes addme.script, but I'm not going to go through that right now.

Now, I will explain a normal mod map LUA file line by line.

NOTE: This is the CW file. The GCW one is the same in terms of concept.


--start header -- This is a comment. Does not have any impact on the final script
function ScriptInit() -- tells the game that this is where the map loader begins
local CIS = 1 -- Script constants. Best not to touch these
local REP = 2
local ATT = 1
local DEF = 2
--end header
--start objectives
AddMissionObjective(REP,"red", "level.rya1.objectives.1"); -- The map objectives shown on the select unit screen. REP means it is shown to the Clones, red doesn't really mean anything, and "level.rya1..." is the language key displayed. (Don't ask about language keys in this topic)
AddMissionObjective(REP,"orange", "level.rya1.objectives.2");
AddMissionObjective(REP,"orange", "level.rya1.objectives.3");
AddMissionObjective(CIS,"red", "level.rya1.objectives.1");
AddMissionObjective(CIS,"orange", "level.rya1.objectives.2");
AddMissionObjective(CIS,"orange","level.rya1.objectives.3");
--end objectives
--start soundlvl
ReadDataFile("sound\\tat.lvl;tat1cw"); -- loads the map-specific sound files. Unless you plan on recording a whole new sound set, this should work just fine for you
--end soundlvl

-- Start sidelvls
ReadDataFile("SIDE\\cis.lvl", -- load the data file for the droids
"cis_inf_basic", -- the main 4 troopers
"cis_inf_countdooku", -- plus the jedi
"cis_inf_droideka"); -- plus the 5th trooper
ReadDataFile("SIDE\\rep.lvl", -- same as above but for clones
"rep_inf_basic",
"rep_inf_macewindu",
"rep_inf_jet_trooper");
--end sidelvls
--start loadouts
SetTeamName(CIS, "CIS") -- Sets the name of the team
SetTeamIcon(CIS, "cis_icon") -- Sets the icon used for the team
AddUnitClass(CIS, "cis_inf_battledroid",10) -- Adds the unit to the troop options. CIS means it's a droid, "cis_inf..." is which unit it is, and the number is how many of them are on the field as AI
AddUnitClass(CIS, "cis_inf_assault",1)
AddUnitClass(CIS, "cis_inf_pilotdroid",2)
AddUnitClass(CIS, "cis_inf_assassindroid",2)
AddUnitClass(CIS, "cis_inf_droideka",1)
SetHeroClass(CIS, "cis_inf_countdooku") -- Adds the jedi unit. Basically same as above
SetTeamName(REP, "Republic") -- See above but for clones
SetTeamIcon(REP, "rep_icon")
AddUnitClass(REP, "rep_inf_clone_trooper",10)
AddUnitClass(REP, "rep_inf_arc_trooper",1)
AddUnitClass(REP, "rep_inf_clone_pilot",2)
AddUnitClass(REP, "rep_inf_clone_sharpshooter",2)
AddUnitClass(REP, "rep_inf_jet_trooper",1)
SetHeroClass(REP, "rep_inf_macewindu")
--end loadouts
--start teamstats
SetUnitCount(ATT, 16) -- Number of AI on the field at once in SP. Ignored in MP
SetReinforcementCount(ATT, 200) -- Number of reinforcements
SetUnitCount(DEF, 16) -- See above
SetReinforcementCount(DEF, 200)
--end teamstats
--start alliances
SetTeamAsFriend(ATT, 1) -- AI stuff. No need to change unless adding natives
SetTeamAsEnemy(ATT, 2)
SetTeamAsFriend(DEF, 2)
SetTeamAsEnemy(DEF, 1)
SetAttackingTeam(ATT);
--end alliances

--start memorypools
ClearWalkers() -- Reset defaults on memory
AddWalkerType(0, 4)-- special -> droidekas -- Allocates the memory for a walker (AT-TE etc). First number is pairs of legs. 0 means droideka. Second number MUST be equal to number on the field at any one time. Not sure if it is adjusted when humans use dekas
AddWalkerType(1, 4)-- 1x2 (1 pair of legs) -- see above
AddWalkerType(2, 0)-- 2x2 (2 pairs of legs)
AddWalkerType(3, 0)-- 3x2 (3 pairs of legs)
SetMemoryPoolSize("PowerupItem", 60) -- Allocates the memory for other items. Not making a full list of options. First is entity type, second is max on the field at once
SetMemoryPoolSize("EntityMine", 40)
--end memorypools
--start worldlvl
ReadDataFile("dc:rya1\\rya1.lvl") -- Read in the actual map.
--end worldlvl
--start spawndelay
SetSpawnDelay(10.0, 0.25) -- Max and Min spawn delay, respectively
--end spawndelay
--start flyheight
--end flyheight
--start ainotify
--end ainotify
--start stayinturrets
--end stayinturrets
--start denseenvironment
SetDenseEnvironment("false") -- Changes some rendering options. Set to true on maps like endor
--end denseenvironment
--start birdsandfish
--end birdsandfish
--start deathregions
AddDeathRegion("deathregion") -- added this to the file because of importance. Any region you add in Zeroeditor that you want people to die in upon entry must have a copy of this
--end deathregions

--start soundconfig
OpenAudioStream("sound\\tat.lvl","tatcw_music"); -- Load the audio from an LVL file. first argument is the path to the file, second is the audio stream in the file
OpenAudioStream("sound\\tat.lvl","tat1");
OpenAudioStream("sound\\tat.lvl","tat1");
OpenAudioStream("sound\\cw.lvl","cw_vo");
OpenAudioStream("sound\\cw.lvl","cw_tac_vo");
OpenAudioStream("sound\\tat.lvl","tat1_emt");
SetBleedingVoiceOver(CIS,CIS,"cis_off_com_report_us_overwhelmed",1); -- Sound to play when a team has 2 CPs or less. First argument is the team to play it for, second is what team must have the low CP count, 3rd is the name of the audio entry in one of the streams listed above, and I need help with the 4th
SetBleedingVoiceOver(CIS,REP,"cis_off_com_report_enemy_losing",1);
SetBleedingVoiceOver(REP,CIS,"rep_off_com_report_enemy_losing",1);
SetBleedingVoiceOver(REP,REP,"rep_off_com_report_us_overwhelmed",1);
SetLowReinforcementsVoiceOver(CIS, CIS, "cis_off_defeat_im", .1,1);-- Same format as above, plays when there are less than 20 reinforcements left for a team
SetLowReinforcementsVoiceOver(CIS, REP, "cis_off_victory_im", .1,1);
SetLowReinforcementsVoiceOver(REP, REP, "rep_off_defeat_im", .1,1);
SetLowReinforcementsVoiceOver(REP, CIS, "rep_off_victory_im", .1,1);
SetOutOfBoundsVoiceOver(2,"Allleaving"); -- Sound to play when a player goes out of bounds. First is the team ID, second is the audio name
SetOutOfBoundsVoiceOver(1,"Impleaving");
SetAmbientMusic(CIS,1.0,"cis_tat_amb_start",0,1);-- Backround music to be played throughout the game. First is the team to play it for, second is the percentage of reinforcements remaining to start the music, 3rd is the audio name, and 4th and 5th I don't know
SetAmbientMusic(CIS,0.99,"cis_tat_amb_middle",1,1);
SetAmbientMusic(CIS,0.1,"cis_tat_amb_end",2,1);
SetAmbientMusic(REP,1.0,"rep_tat_amb_start",0,1);
SetAmbientMusic(REP,0.99,"rep_tat_amb_middle",1,1);
SetAmbientMusic(REP,0.1,"rep_tat_amb_end",2,1);
SetVictoryMusic(CIS,"cis_tat_amb_victory");-- Music to play on Victory/Defeat. You should know the format by now
SetDefeatMusic (CIS,"cis_tat_amb_defeat");
SetVictoryMusic(REP,"rep_tat_amb_victory");
SetDefeatMusic (REP,"rep_tat_amb_defeat");
SetSoundEffect("ScopeDisplayZoomIn","binocularzoomin");-- Sets up a sound effect. First is the event for the effect, second is the audio name
SetSoundEffect("ScopeDisplayZoomOut","binocularzoomout");
SetSoundEffect("SpawnDisplayUnitChange","shell_select_unit");
SetSoundEffect("SpawnDisplayUnitAccept","shell_menu_enter");
SetSoundEffect("SpawnDisplaySpawnPointChange","shell_select_change");
SetSoundEffect("SpawnDisplaySpawnPointAccept","shell_menu_enter");
SetSoundEffect("SpawnDisplayBack","shell_menu_exit");
SetPlanetaryBonusVoiceOver(REP,REP,0,"rep_bonus_rep_medical");-- Sound to play when a planetary bonus is activated in Galactic Conquest. First is the team to play it for, second is the team who got the bonus, 3rd is the bonus id, and 4th is the audio name
SetPlanetaryBonusVoiceOver(REP,CIS,0,"rep_bonus_cis_medical");
SetPlanetaryBonusVoiceOver(REP,REP,1,"");
SetPlanetaryBonusVoiceOver(REP,CIS,1,"");
SetPlanetaryBonusVoiceOver(REP,REP,2,"rep_bonus_rep_sensors");
SetPlanetaryBonusVoiceOver(REP,CIS,2,"rep_bonus_cis_sensors");
SetPlanetaryBonusVoiceOver(REP,REP,3,"rep_bonus_rep_hero");
SetPlanetaryBonusVoiceOver(REP,CIS,3,"rep_bonus_cis_hero");
SetPlanetaryBonusVoiceOver(REP,REP,4,"rep_bonus_rep_reserves");
SetPlanetaryBonusVoiceOver(REP,CIS,4,"rep_bonus_cis_reserves");
SetPlanetaryBonusVoiceOver(REP,REP,5,"rep_bonus_rep_sabotage");--sabotage
SetPlanetaryBonusVoiceOver(REP,CIS,5,"rep_bonus_cis_sabotage");
SetPlanetaryBonusVoiceOver(REP,REP,6,"");
SetPlanetaryBonusVoiceOver(REP,CIS,6,"");
SetPlanetaryBonusVoiceOver(REP,REP,7,"rep_bonus_rep_training");--advanced training
SetPlanetaryBonusVoiceOver(REP,CIS,7,"rep_bonus_cis_training");--advanced training
SetPlanetaryBonusVoiceOver(CIS,CIS,0,"cis_bonus_cis_medical");
SetPlanetaryBonusVoiceOver(CIS,REP,0,"cis_bonus_rep_medical");
SetPlanetaryBonusVoiceOver(CIS,CIS,1,"");
SetPlanetaryBonusVoiceOver(CIS,REP,1,"");
SetPlanetaryBonusVoiceOver(CIS,CIS,2,"cis_bonus_cis_sensors");
SetPlanetaryBonusVoiceOver(CIS,REP,2,"cis_bonus_rep_sensors");
SetPlanetaryBonusVoiceOver(CIS,CIS,3,"cis_bonus_cis_hero");
SetPlanetaryBonusVoiceOver(CIS,REP,3,"cis_bonus_rep_hero");
SetPlanetaryBonusVoiceOver(CIS,CIS,4,"cis_bonus_cis_reserves");
SetPlanetaryBonusVoiceOver(CIS,REP,4,"cis_bonus_rep_reserves");
SetPlanetaryBonusVoiceOver(CIS,CIS,5,"cis_bonus_cis_sabotage");--sabotage
SetPlanetaryBonusVoiceOver(CIS,REP,5,"cis_bonus_rep_sabotage");
SetPlanetaryBonusVoiceOver(CIS,CIS,6,"");
SetPlanetaryBonusVoiceOver(CIS,REP,6,"");
SetPlanetaryBonusVoiceOver(CIS,CIS,7,"cis_bonus_cis_training");--advanced training
SetPlanetaryBonusVoiceOver(CIS,REP,7,"cis_bonus_rep_training");--advanced training
--end soundconfig

--start activebonus
--end activebonus

--start camerashots
AddCameraShot(-0.404895, 0.000992, -0.914360, -0.002240, -85.539894, 20.536297, 141.699493);-- Adds a camera location to see during the spawn timer. freecam in SPTest can tell you the values for this (use fake console to get camera coordinates)
AddCameraShot(0.040922, 0.004049, -0.994299, 0.098381, -139.729523, 17.546598, -34.360893);
AddCameraShot(-0.312360, 0.016223, -0.948547, -0.049263, -217.381485, 20.150953, 54.514324);
--end camerashots

--start footer
end -- Pass control back to the main game
--end footer


A few important notes:

ALL paths to files MUST use double slashes!!!! The game will go wacky if you don't use them

To access files specific to your mod, prefix the path to an lvl with "dc:". Without that, it will go to the main _lvl_pc folder under GameData

Advanced LUA coming soon!
#3
SWBF1 Modding / SWBF hashes
August 22, 2009, 12:30:53 PM
I've been looking at the format of post-munge files in SWBF in the hope of eventually building a true decompiler. The one thing I can't figure out, though, is how SWBF encodes property names. In all of the formats I've looked at, I find the same thing. 4-byte codes of what the property is, but no dictionary for what each code stands for. I know they can't be hard-coded because 1) after hex-searching the munge executables I find no trace of a dictionary, and 2) on some of these, the codes can't be pre-set (like on localization files where anybody can set the names to anything)

So, that means there must be some sort of code that defines this hash (it must be that since it is always 4 bytes). What I need now is help to figure out how these hashes are generated.
#4
Welcome Center / Leaving for a trip
August 09, 2009, 11:06:20 PM
Well, I'm going down for a week of sailing on the florida keys, so that means I'll be out of touch for a while. Please don't have another iPower while I'm gone :D
#5
Welcome Center / Back again!
August 01, 2009, 03:59:31 PM
Hey all you MPCers out there, this is Pi returning to the forum! After some computer problems and being away I think I'm here to stay again :cheers:
#6
Welcome Center / Back from a break
July 11, 2009, 08:31:12 AM
Sorry I didn't get a chance to tell you beforehand, but for the past two weeks I haven't had contact with a computer at all.
#7
SWBF1 Modding / class file specification
June 13, 2009, 09:20:10 PM
I'm going to be spending a little while looking over the CLASS files (compiled ODFs and what macs edit in hex editing) to see if I can decode the format. If all goes well, I may be able to write a full class file editor for PC and release the source for a mac developer.

Please note that this post is in progress and I am currently editing it

All hex values will be in this format: bytebyte bytebyte ...(ASCII if applicable) ex. 5052 4f50(PROP)

Class header

NOTE: THE FOLLOWING SECTION IS NOT IN LVL FILES

un-lvled class files all begin with 7563 6662(ucfb). This is removed when the class file is added to an lvl and I believe it is just to verify a legal file for lvls.

immediately following the ucfb hex is the length of the file in reverse-byte order (little endian I believe, so I'll use that for the rest of the post). I believe this is a file integrity check before being put into the LVL file, as it does not appear in the lvl chunk.

NOTE: THE REST OF THIS IS IN THE LVL FILES

Next you should find a 4 byte type identifier. From what I've seen it is a hierarchical identifier for the ODF type (ex. a root object in the world such as a soldier is entc (entity class), the weapons it carries is wpnc (weapon class), and the bullets are ordc (ordinance class)). I believe this is only important for the ingame parser, which routes the ODF to different code based on the type (for example entc ODFs throw errors from Entity.cpp). This is most likely chosen by the bracketed section at the top of an ODF file (GameObjectClass translates to entc, WeaponClass translates to wpnc, and OrdinanceClass translates to ordc)

The next 4 bytes are a file length (little endian again), which operates the same as the one that doesn't appear in the LVL file. It is an offset starting from 4241 5345(BASE).

After the length, there is 4241 5345(BASE). This is the beginning of the actual ODF file, but I still consider it header for a small reason that I'll explain a bit later.

The next 4 bytes are just the length of the ClassLabel (see ODF files for what it is), in little endian again.

After the length of the ClassLabel is the actual label in ASCII. This follows the same rules as a PROP declaration for data length, except for it has a 4-byte type instead of 8-byte.

Next up is 5459 5045(TYPE). It is basically the same thing as the BASE declaration, except it has the ODF name without .odf in it. Since it has data that doesn't appear in the file, I still consider it and everything before it part of the header.

At this point the header ends and the actual data from the ODF file begins.

Class body

After the TYPE declaration, all you will find in the file is PROP declarations until you reach EOF or the next chunk. The format of a PROP declaration is as follows:

5052 4f50(PROP)
Then an 8 byte identifier of the ODF setting being set
Following the 8 bytes, the actual data appears
After the data, there are 1-4 NULL bytes

There are 2 rules that define the number of NULLs that appear after the data.
1) The length of the PROP declaration must be a multiple of 4
2) There must be at least 1 NULL after the data set.

So, the constant length PROP data is 12 bytes, a multiple of 4. After those 12 bytes is the data, which is an unknown length. If the length of the data is a multiple of 4, it will have 4 NULLs after it to match rule #2. If the length isn't divisible by 4, NULLs are added until it is divisible by 4.

Next up, the list of the 8 byte PROP IDs and their equivalent ODF options. I'm putting it in a separate file since this post would get way too long and there aren't spoiler tags

Download the list here
---------More coming soon--------
#8
SWBF1 Modding / Disguise kit question
June 09, 2009, 07:24:31 PM
Hey, I've got an idea that uses the disguise kit but I need to know if this is possible: choose the model that you change into when you disguise yourself. any help is appreciated
#9
Tech Support / iTunes 8.2 (Solved)
June 07, 2009, 09:32:51 PM
Hey guys. I've been trying to update iTunes to 8.2 for a while and I keep getting an error about "iTunes.msi not found". I can find the file just fine, but when I attempt to manually input the location, the updater claims it is an "invalid installer file" or something like that.

I haven't tried doing a fresh install of iTunes yet since I don't want to go through the hassle of re-doing my library once again :(
#10
SWBF1 Modding Tutorials / How to make mission maps
April 20, 2009, 02:10:27 PM
Alright, lets get going on the task of making mission maps in 7 Steps or less

Step 1: Create a New Map

Well, here's a simple task. Open up BFBuilder (Pro) and create a new map. Do the normal naming and era selection. Click Create and you're done

Step 2: Import Sides

First of all, if you are using a pre-existing mod, skip to step 4

Well, go through "BFBuilder Pro->Sides->Import Retail Side" then import whatever side you want to mod. Click OK then you are done

Step 3: Mod Away[/u]

Ask someone else how to do this. You shouldn't even be reading this if you don't know how to mod. shoo

Step 4: LUA editing[/u]

Now, this is the real important part of this guide. In your mod folder, go to Common\Scripts\*Mod Name here*. There is either 1 or 2 lua scripts in here, depending on what you selected in the first step. open up one of the LUA files in your favorite text editor. For simplicity, I'll use the simple modding route. In the BFBuilder folder, go to Assets\Mission LUA Samples\*Map you want to mission-ize*. In here will be a couple of LUA files. Ones with _h are the campaign scripts. If the name has a or i at the end, it's GCW. r or c is CW. Pick the script you want, copy the whole thing and put it in the other LUA file you should have open.

Now, go into the newly changed LUA file, and go down to the area where it says ReadDataFile("SIDE\\all.lvl", or something similar. Add dc: before the SIDE\\all.lvl so it ends up looking like ReadDataFile("dc:SIDE\\all.lvl", then repeat for the second command similar to that (should be directly below that one). Be sure to save the file!

Now, for the more technically-minded, the dc: prefix tells SWBF to start in the mod folder and not the core game file folder. This can be used on any ReadDataFile command. If you were to skip the copy part, you could go down to the Level Stats area and change the ReadDataFile there to not have dc:, making it use the original map. That line is what truly makes it a mission map, but the copy method changes it for us.

Congratulations, you're got the hardest part done!

Step 5: Munge

Do I really need to explain this?

Step 6: A little bit of LVL

This step only applies to those who are using a pre-existing mod

Now, from the BFBuilder folder, go to AddOn\*Your mod name*\Data\_lvl_pc and create a new folder called Side. Copy the mod lvls into that folder.

Step 7: Pre-Release Cleaning (Optional)

After you test your mission map a bit, and are ready to release it, here's a small thing to make the file a bit smaller. From the BFBuilder folder, go to AddOn\*Your mod name*\Data\_lvl_pc and delete everything from this folder except for core.lvl, mission.lvl, and the Side folder. Now you can compress and release the mod from the BFBuilder\AddOn folder!

Step 8: PLAY IT!!!!!!!!!

And you are now FINISHED!

Appendix:

To load another mod map (example being a few of Napseeker's maps), simply change the World ReadDataFile in the LUA to
QuoteReadDataFile("dc:../../MODID/Data/_LVL_PC/MODID/MODOID.lvl")
of course changing MODID to the id of the second mod. Make sure people know about this requirement when you distribute the map. -- ggctuk

Got additions to this guide? Post em here and I'll add them

Well, I guess this is goodbye. Feel free to post here with any questions you have.
#11
Tech Support / Dying CRT? (Solved)
March 20, 2009, 07:16:42 AM
I've got a NEC MultiSync FE700, and I think it might be at the end of it's life. Randomly, although more often when the majority of the screen changes in something like going to another page, the screen goes grayscale with a smearing affect to the right. Usually, this can be cleared with a power-off then on, but usually it returns to that state fairly fast. Is my monitor dying?
#12
SWBF1 Modding / Bypassing map limit
March 13, 2009, 10:05:46 PM
I was thinking about an idea I had to handle the 3rd era a bit better (I'll leave you to think what it is :P), and I realized a possible way to bypass the limit on maps. This would only be practical in map packs, but with a little bit of work it would be possible to lump the common maps that we use together into one map.

Here's my theory: Assuming the limit on maps is only due to number of folders, a highly edited addme.script could handle more than one map for adding to the map screen. I will do some tests to see if this will actually work, but if it does work, we won't be complaining about having to remove all of Napseeker's great maps before a match.

This probably won't work with the older maps that are modded as well, since maps will have to share folders. However, if I do get it to work I'll release the method so any map that we have the source to can be updated. For all the modders out there: Most likely this will require a bit of re-tooling on the munging script and messing around with the mission.lvl file to handle more than one map.

Also, most likely all players will require the lump maps, but if I do get it right I could make it handle non-lump players. Already have ideas of how to do this!

I've yet to actually try any of this, since it's almost 1 AM here and I might be going on a flight tomorrow. But I'll try it as soon as I can.
#13
SWBF1 Modding / 3rd era for maps
March 08, 2009, 01:30:37 PM
Many of the people from the old MXG will remember that someone stumbled across a mechanism for creating a 3rd era for the maps. We never were able to figure out how to use it then, but guess what just changed :D

For those of you who don't remember, someone (I'm willing to give credit to whoever stumbled across this) accidentally clicked four times on a map without choosing an era, and in the selected maps area a new map appeared which was something like Maz1_add. (this depended on which map it was using). All our attempts to get it to actually load a new map failed, and the record of this was lost in one of the crashes of the old site MXG.

Here's what I did to get it to work:

(please note that you need to replace tst3 in my instructions with the short name you gave your map when creating it

1: Create a new map that does both CW and GCW
2: Go to the map folder (all my instructions will be relative to the root of the source for the map ex. BFBuilder\Datatst3)
3: Go to Common\Mission and create a new file called tst3_add.req and put the following in the file:
ucft
{
    REQN
    {
        "script"
        "tst3_add"
    }
}
4: Go to Common\Scripts\tst3 and create a new file called tst3_add.lua. This is just like any other mission LUA, so I just copied the contents of one of the other LUA files in the folder.
5: Go to Common and open mission.req. Insert the following line after "tst3c":
"tst3_add"It should now look something like this:
ucft
{
    REQN
    {
        "lvl"
        "tst3a"
        "tst3c"
"tst3_add"
    }
}
6: Go to addme and open addme.lua. Add the following line at the end of the AddDownloadableContent lines:
AddDownloadableContent("tst3","tst3_add",4)The file should now look something like this:
-- add the new tat level to the missionlist
local newEntry = { mapluafile = "tst3", showstr = "3rd Era Test", side_c = 1, side_a = 1, dnldable = 1, }

-- append it to the sp missionlist table
local n = getn(sp_missionselect_listbox_contents)  
sp_missionselect_listbox_contents[n+1] = newEntry

-- append it to the mp missionlist table
n = getn(mp_missionselect_listbox_contents)
mp_missionselect_listbox_contents[n+1] = newEntry


-- associate this mission name with the current downloadable content directory
-- you should list all missions in mission.lvl here.
-- first arg: mapluafile from above
-- second arg: mission script name
-- third arg: level memory modifier.  the arg to LuaScript.cpp: DEFAULT_MODEL_MEMORY_PLUS(x)
AddDownloadableContent("tst3","tst3c",4)
AddDownloadableContent("tst3","tst3a",4)
AddDownloadableContent("tst3","tst3_add",4)

-- all done
newEntry = nil
n = nil
7: Munge it and take it for a test run

Source and map here: http://files.filefront.com/3rd+erarar/; ... einfo.html

If you only want the map and not the source, it's here: http://files.filefront.com/tst3rar/;134 ... einfo.html

I just checked, and it does work for MP games yay!

I can't figure out any way to get it to display an option on map selection. I think that will need a shell edit
#14
Public Square / DC announcement system?
February 15, 2009, 08:28:53 PM
I wish there were some way to advertise DC games on here. I find myself out of luck when I can't see games advertised on GR, so I wish there were some way to announce the active games on here.

My (personal) ideas:
A forum with only one post which has active DC games on it, with all DC hosts able to edit it.
Some sort of announcement on the home page (would have to be a mod, I could probably whip something up fairly fast)
A shoutbox....
#15
SWBF1 Modding / BoPC ZeroEditor fix(Fixed link)
February 04, 2009, 01:58:09 PM
Well, once again I'm re-posting this due to various site crashes which I won't go into the details of

This is a quick little patch that fixes a glitch in the Best of PC version of SWBF, not allowing ZeroEditor to run.

Installation Instructions: Simply download the file and double click it. Say Yes to the box that pops up, and ZeroEditor should work now. There is no need to keep the file

Download Link


backup link http://www.gamefront.com/files/20419981/BoPC_fix_zip


Note: When posting about this fix, from now on only post the filefront link and not the topic link. Gametoast posters should probably update any links they have for this.

Pin please