Serious Sam Fusion 2017 (beta)

Serious Sam Fusion 2017 (beta)

44 valoraciones
Making your own Game Titles
Por Macho Pastelito
Game Titles allow you to customize much of the gameplay experience for your maps. You can use them to create your own "game" in Fusion. This tutorial will cover the basics of how to set up your own Game Title.
   
Premiar
Favoritos
Favorito
Quitar
Creating your own Game Title
Game Titles allow you to customize much of the gameplay experience for your maps. A Game Title contains the global game parameters (such as difficulty settings), the player's movement speed and jump height, etc, the user interface, what weapons you start with, and many more.

You can use Game Titles to create a "game" of your own within Fusion. This tutorial will cover the basics of how to set up your own Game title, but will not cover how you make your own levels, enemies, or weapons. It's not very difficult, so don't worry!

From this point on, I'll refer to "Game Title" as "GT". It's shorter, and you won't get tired of reading the words "Game Title" every 30 seconds.
Creating the Game Title file
We start off by, of course, creating the GT file. You can do this in two ways:
  • Resaving an existing game title (recommended)
  • Creating a new file from scratch (File -> New File -> Generic -> Game title params)


In this tutorial, we will use Serious Sam 3's GT as an example. All GTs are found in the "Content/" folder, this is where you should place yours as well. I would highly recommend you keep its name simple and short, it will things easier for you. I'll name my example GT "MyAwesomeTitle".

Next up, we need a GT info file. Similarly to how maps need an ".nfo" file, GTs need a ".gtitleinfo" file. To create one, do the following:
  • File -> New File -> Document.Text
  • Write the following down
CONTENTROOT="Content/<your GT name here>" TITLEGROUPNAME="SeriousSamFusion" TEXTLANGUAGES="brg;chs;csy;deu;enu;esp;fra;itl;jpn;plk;rus" VOICELANGUAGES="enu"


"CONTENTROOT" refers to the folder that contains all of your GT's files; levels, models, weapons, enemies, items, particles, sounds, anything you're going to use, it's going to go in that folder.

"TEXTLANGUAGES" and "VOICELANGUAGES" refer to localization, I'd recommend including everything for text (even if someone uses a language other than English, the game will default to the English texts if there are no localized versions), and sticking to English for voices.

Now, save this file in "Content/" and give it the same name as your GT. Make sure to add ".gtitleinfo" at the end of it, don't save it as a txt or nfo file! My example would be called MyAwesomeTitle.gtitleinfo.

You should also create a folder in the "Content/" folder, using the same name as your GT.
Other Necessities: WorldScripts
We need some additional files before our GT is functional. Namely, WorldScripts and ProjectStartupParams. If you followed my recommendation of resaving an existing GT, you should navigate to find that existing title's files and resave them as well.

ProjectStartupParams must be saved in "Content/<your GT name>/Databases/", and WorldScripts must be saved in "Content/<your GT name>/Scripts/".


Let's start with WorldScripts. You can find it under "Content/<game>/Scripts/". In my case, I will copy Serious Sam 3's WorldScripts file. Open the file with any text editing software, like Notepad, or load it through a script entity in the game. Don't be intimidated by it, here's what it contains (for SS3 specifically), and what you might want to change:

worldGlobals.worldInfo = worldInfo -- set global whether we're on remote interface (much faster than calling function every time) worldGlobals.netIsRemote = worldInfo:NetIsRemote() -- for ease of use, create netIsHost as negation of netIsRemote worldGlobals.netIsHost = not worldGlobals.netIsRemote -- this file is just a hub for various collections of scripts that are needed on all (or most) worlds dofile("Content/SeriousSam3/Scripts/CutSceneFunctions.lua") dofile("Content/Shared/Scripts/VRScreenshotUtilities.lua") -- execute scripts used only on host machine if not worldGlobals.netIsRemote then dofile("Content/SeriousSam3/Scripts/TurretScripts.lua") dofile("Content/SeriousSam3/Scripts/DoorScripts.lua") dofile("Content/SeriousSam3/Scripts/SpawnerHelpers.lua") dofile("Content/SeriousSam3/Scripts/SirianKeyController.lua") if worldInfo:GetGameMode()=="SinglePlayer" then -- d o f i l e ("Content/SeriousSam3/Scripts/Pumpkin.lua") temporarily disabled - see bug #59805 end end -- Table containing paths to the weapon parameters worldGlobals.WeaponParamPaths = { Weapon_AssaultRifle = Depfile("Content/SeriousSam3/Databases/Weapons/AssaultRifleWeapon.ep"), Weapon_AutoShotgun = Depfile("Content/SeriousSam3/Databases/Weapons/AutoShotgunWeapon.ep"), Weapon_AxeWeapon = Depfile("Content/SeriousSam3/Databases/Weapons/AxeWeapon.ep"), Weapon_CannonWeapon = Depfile("Content/SeriousSam3/Databases/Weapons/CannonWeapon.ep"), Weapon_DoubleShotgun = Depfile("Content/SeriousSam3/Databases/Weapons/DoubleShotgunWeapon.ep"), Weapon_Laser = Depfile("Content/SeriousSam3/Databases/Weapons/LaserWeapon.ep"), Weapon_Minigun = Depfile("Content/SeriousSam3/Databases/Weapons/MiniGunWeapon.ep"), Weapon_Pistol = Depfile("Content/SeriousSam3/Databases/Weapons/PistolWeapon.ep"), Weapon_RocketLauncher = Depfile("Content/SeriousSam3/Databases/Weapons/RocketLauncherWeapon.ep"), Weapon_SingleShotgun = Depfile("Content/SeriousSam3/Databases/Weapons/SingleShotgunWeapon.ep"), Weapon_SledgeHammer = Depfile("Content/SeriousSam3/Databases/Weapons/SledgeHammerWeapon.ep"), Weapon_Sniper = Depfile("Content/SeriousSam3/Databases/Weapons/SniperWeapon.ep"), Weapon_StickyBomb = Depfile("Content/SeriousSam3/Databases/Weapons/StickyBombWeapon.ep") } function worldGlobals.GetWeaponsForGiveAll(player, worldFileName) print("Giving all weapons for world " .. worldFileName) local ret = {} for k, v in pairs(worldGlobals.WeaponParamPaths) do --DLC weapon? if v == worldGlobals.WeaponParamPaths.Weapon_AxeWeapon then --add only if DLC level is loaded if string.find(worldFileName, "02_DLC") then table.insert(ret, v) end elseif v == worldGlobals.WeaponParamPaths.Weapon_SledgeHammer or v == "Content/SeriousSam3/Databases/Weapons/SledgeHammerWeapon_1.ep" then -- only NonDLC levels. if string.find(worldFileName, "01_BFE") then --add SledgeHammerWapon_1 only on 10_LostNubianTemples.wld if string.find(worldFileName, "10_LostNubianTemples.wld") then --check if player have SledgeHammerWapon if not player:HasWeaponInInventory(worldGlobals.WeaponParamPaths.Weapon_SledgeHammer) then table.insert(ret, "Content/SeriousSam3/Databases/Weapons/SledgeHammerWeapon_1.ep") end else --check if player have SledgeHammerWapon_1 if not player:HasWeaponInInventory("Content/SeriousSam3/Databases/Weapons/SledgeHammerWeapon_1.ep") then table.insert(ret, worldGlobals.WeaponParamPaths.Weapon_SledgeHammer) end end end else --add weapon table.insert(ret, v) end end return unpack(ret) end

Add the weapons you plan to use for your GT in the "worldGlobals.WeaponParamPaths" code block. Write down the path to your weapon (not the weapon item pickup, the weapon itself).

For example, let's assume we want to use Serious Sam HD's Colt Revolvers and Tommygun, while also having Serious Sam 3's C4 Explosives and Devastator. In that case, it would look like this:
worldGlobals.WeaponParamPaths = { Weapon_Colt = Depfile("Content/SeriousSamHD/Databases/Weapons/ColtWeapon.ep"), Weapon_DoubleColt = Depfile("Content/SeriousSamHD/Databases/Weapons/DoubleColtWeapon.ep"), Weapon_Tommygun = Depfile("Content/SeriousSamHD/Databases/Weapons/TommyGunWeapon.ep"), Weapon_StickyBomb = Depfile("Content/SeriousSam3/Databases/Weapons/StickyBombWeapon.ep"), Weapon_AutoShotgun = Depfile("Content/SeriousSam3/Databases/Weapons/AutoShotgunWeapon.ep") }

Keep in mind, separate each weapon with a comma ( , ) – but don't leave any comma for the final weapon.

Now let's move onto that scary-looking block of code, what does it do? It's essentially the "Give All Weapons" cheat. Now, Serious Sam 3's Give All is a bit complicated, as it has some conditions to check for, but you won't typically need that. Here's what you can replace it with:

function worldGlobals.GetWeaponsForGiveAll(player,worldFileName) print("Giving all weapons for world " .. worldFileName) local ret = {} for k, v in pairs(worldGlobals.WeaponParamPaths) do table.insert(ret, v) end return unpack(ret) end

Doesn't that look much more friendly and not-intimidating? So now, when the player uses the Give All cheat, they get all the weapons you declared previously; in our example case, the Colts, Tommygun, C4s and Devastator.
Other Necessities: ProjectStartupParams
Now, onto our ProjectStartupParams file, resave an existing one, and put it in "Content/<your GT name>/Databases/". You won't need to change much here, if you don't want to. But if you do, here's what you can change:

  • Generic fonts that will be used throughout your GT
  • The chat message sound
  • The intro level (when the game is launched)
  • The loading level
  • The default map directory (this is what you should change)

And now we got all the necessities for our project! It should run fine now. Let's make an example level, shall we?
Making a level use your Game Title
Alright, let's create an example world. Like I said previously, this tutorial won't go over how to create a level, there's already tutorials out for that. So, how do we make a level use our GT? Very simple!

Click the "N" button on your keyboard to bring up the entities list (unless you've changed that keyboard shortcut, then press that one). Find the "World info" entity and select it (double click it, or click and press enter). See the very first field, "Game title"? Left click the value and select "Browse", then navigate to your GT and select it. And voila, that's it! Now test the level and it will run with your GT.


Note: When you try to test your map through a simulation, if you get an error message that says "No valid game title info for the current game title.", restart your editor. That should fix it. If you get an error that says the editor crashed when you closed it, that's normal. It does that if you have a custom GT, it seems.

It likely looks identical to the normal game right now, if you haven't made any modifications, but we can change that.
Customizing your Game Title
Let's make some changes, shall we? Open your GT file. You'll see a number of fields you can play with, namely:
  • Global game params
  • HUD params database
  • Menu resources holder

If you have resaved your GT from an existing one, you should also resave every single one of these files in the "Content/<your GT name>/Databases" folder. Don't forget to resave "MenuResources.rsc" within "MenuResourcersHolder.rsc" too, and "MenuPalette.rsc" within that one! (as always, everything goes in your "Databases" folder.)

Global Game Parameters
Now we can have some fun changing things. "Global game paramters" contains all the data related to...well, global parameters. Let's see some things you might want to change:

  • Player Params:
    • Default player model: This is the default player model, used in single player & is the default model you see in multiplayer when someone is using a skin you don't have. It doesn't have to be Sam, could be anything you want!
    • Player puppet params: The player puppet; it controls how fast the player moves, how far they jump, the fall damage they take (if any), their size, and so forth. You will likely want a different one for the normal one and the Deathmatch one.
    • Default weapons: These are the weapons that you always start with (for example, Knife & single Colt in HD). Resave this resource (preferrably under "Content/<your GT name>/Databases/Weapons/" and change it to include any starting weapons you want.
    • Default VR weapons: The same as above, but for VR, of course.
  • Power Up Durations: Defines the duraiton of power-ups, modify these if you plan to use power-ups.
  • Power up item params: Add your power-up item files here.
  • Game Difficulties:
    • Contains the stat values that are modified per difficulty, like enemy health and speed, or player ammo.
    • For reference, higher "Enemy think frequency multiplier" is harder, lower "Initial delay multiplier" is also harder. Everything else should be self-explanatory.
  • Flashlight: If you want to use a flashlight (like Sam does in underground areas of BFE), these are the fields you want to modify. I recommend looking at BFE's Global Game parameters.
  • Simple Spawn Effect / Sound: The visual and audio effects for the spawn effect of monsters, items, players, etc.
  • Cave demon fields: If you plan to use Cave Demons but want to change them, these might interest you.
  • Psykick attack params: If you plan to use Witch Brides but want to change them, these fields might interest you.
  • Character burning out, part 1-2, Burn out duration / particle effect / sound / decal: These are the effects for when an enemy turns to black ashes after you kill them. If you want to change that, this is how.
  • Exploration Music Delay: If you want peaceful music to start immediately after a fight, set this to 0. If you want silence after a fight, change its value to the amount of seconds you want it to be silent. There is also "Death Music" right above it, if you remove that, normal level music will continue playing even while you're dead.
  • Title capabilities: Allows (or disallows) for crouching and sprinting.
  • Player Melee Selection: Select the script that defines melee executions, if you want to have your own SS3-like melee attacks.
  • Hands weapon: The hands "weapon" – basically, the hands from BFE.
  • Sniper weapon: The sniper weapon, of course.
  • Global VR Params: I don't have VR, so I can't be of much help here, I'd recommend copying an existing file from one of the other titles.
HUD Parameters
Want to change the HUD - the user interface that shows you how much health, armor and ammo you have, etc? Well, you can do so here!

Things you might want to change are:

  • Simple hud elm:
    • Active color: This is the color of the HUD (ie green for TFE, blue for TSE and white for BFE).
  • Simple hud elmement (no, this is not a typo on my end, that's how it's spelled in the editor) (red / blue team):
    • Active color: The color of the HUD when on the red and blue teams. If you want, you can have other colors, like green vs yellow teams. Keep in mind though, most player models will have blue & red variations.
  • Hud element params:
    • Here are all the individual elements of the HUD: the weapons list, your health, your armor, your score, your oxygen bar...you name it, it's here. Play around with these, change their positioning if you want.


Here is a HUD I made as an example; it's pink and the heart is on the right side of your health, rather than the left (it's also larger). You can also see all the weapons you get by using the "Give All" cheat, which we specified in WorldScripts.lua.
Menu Resources
This is a simple file that contains the sounds for your menu. Namely: select, back, move and error. You'll also find a menu palette file in there (make sure to resave that too! Under "Content/<your GT name>/Databases/"). This defines the colors of your menu, what fonts it will use, and many generic icons used throughout the game (like the save icon).

Some things you may want to change could be:
  • The "Game logo" field, it's what will display in the menu level, before you click to enter the main menu.
  • The "Credits" field. These are the credits that you can view in the Extras menu and when you finish the game; you can add your own credits here by selecting a txt file.
  • Another thing you might like to change is the game title's name, on the very bottom of this file. For instance, Serious Sam 3's is:
    • Identifier: "Project.TitleSam3"
    • String: "Serious Sam 3"
    • Using our example, I would change it to "Project.MyAwesomeTitle" and "My Awesome Title".

A pink menu to go with our pink HUD!
Closing Words
Aaaand that's it! I hope you didn't find it too difficult – if you have any questions, feel free to let me know. (Preferably, not broad things like "How do I make levels?") If you spotted an error in this tutorial, do let me know and I'll fix it.

Here's what I did as an example:
As you can see, the default player model is now Santa Sam, and he's a giant. You can do lots of things with Game Titles, play around with them and see what you like!

Thank you for reading, have fun modding!

Thumbnail credits:
  • Serious Bomb logo without the bomb (bugnotnotthegreat)
  • Freepik (Gear vector)
14 comentarios
TIPPLE 9 JUL a las 1:19 
There's no way to get Netricsa to work on a custom Game Title?
Gnat 7 OCT 2020 a las 7:57 
I would love to make mods but the moment I open fusion it crashes so I escorted to making hl deathmatch maps
f1ames0ff 29 SEP 2020 a las 15:44 
Where did you get API docs? Where's the reference?
Joseph Peace 27 AGO 2018 a las 11:49 
hmm, ok,
thanks for the replay
Macho Pastelito  [autor] 27 AGO 2018 a las 1:25 
You can change icon elements to display other icons, but you can't change one type of element to another (ie numbers -> bars, or icons -> bars) -- at least not by modifying the HUD element parameters. Perhaps it's possible with the use of scripts, but I'm not 100% sure.
Joseph Peace 26 AGO 2018 a las 11:41 
Hello there, nice work on the guide, extremely helpful.
I have a question though, I see you can modify the HUD elements location, but is there a way to change how the HUD elements are displayed, like numbers instead of bars for the ammo?
Soldier 13 JUN 2018 a las 8:50 
Oh, I see. It's a shame :( Thanks for the reply :)
Macho Pastelito  [autor] 13 JUN 2018 a las 8:10 
NETRICSA doesn't work with custom gametitles currently, unfortunately the only thing we can do is wait for an official fix.
Soldier 13 JUN 2018 a las 7:50 
I have a problem with a custom game title, specifically with NETRICSA :( Now, I followed this guide very closely, and my title is working and running(and I have different player model showing up). But every time I try to invoke NETRICSA, the screen fades back and then goes back to game, meaning that NETRICSA menu isn't launching at all :( Is there a way to fix this? Does anybody have this problem at all? Thanks :)
Pan Esiante 1 OCT 2017 a las 9:13 
Can't open content/<Western>/Scripts/WorldScripts and the editor crash. Someone got problem like me? Anyone solve that problem? I make 5 game titles and always i've got the same problem
:(