addme.lua Setup

Started by Glitch, January 24, 2013, 11:01:25 AM

Previous topic - Next topic
January 24, 2013, 11:01:25 AM Last Edit: January 24, 2013, 02:05:25 PM by Glitch
I was wondering how tp add a pre-existing map to the BF1 addme.lua. I know how to setup a BF2 addme file and noticed slight differences between the BF1 and BF2 versions. I've already setup what I think will work (blue) What I've highlighted in red is what I'm questioning.

This is to allow custom units and localization to appear on stock maps. Mission.lua's have already been edited correctly.

For example yav1c.lua BF1

SWBFI addme.lua

-- add the new tat level to the missionlist
local newEntry = { mapluafile = "GSM", showstr = "GSM", side_c = 1, side_a = 1, dnldable = 1, }
local newEntry = { mapluafile = "yav1", showstr = "yav1", 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("GSM","GSMc",4)
AddDownloadableContent("GSM","GSMa",4)

AddDownloadableContent("yav1","yav1c",4)
AddDownloadableContent("yav1","yav1a",4)


-- all done
newEntry = nil
n = nil


Edit: I know I setup the addme.lua script incorrectly because of these errors.

[spoiler]Opened logfile BFront.log  2013-01-24 1703

Message Severity: 3
.\source\LuaScript.cpp(523)
OpenScript(YAV1c): script (39d01927) not found

Message Severity: 3
.\source\GameState.cpp(804)
Could not open MISSION\YAV1c.lvl

Message Severity: 3
.\source\GameState.cpp(823)
Could not open mission YAV1c

[/spoiler]


Quote: At times of chaos, humans are subjected to emotion rather than logic.

Quote from: Glitch on January 24, 2013, 11:01:25 AM
I noticed that there are slight differences between the mission name setup in BF1 and BF2. I know how to setup a BF2 addme.lua but not a BF1 addme.lua. I was wondering how would I add a pre-existing map to the BF1 addme.lua I've already setup what I think will work (blue) What I've highlighted in red is what I'm questioning.

If you are doing what I think you're trying to, this should work.

When you create a map, and edit the mission Luas for it, you'll notice the
ReadDataFile("dc:bes2\\bes2.lvl")


ReadDataFile: self explanitory
("   : encloses the file
DC:  : means to read the file out of the directory that the map comes with.  /Addon/Bes2/

if you were to take away the   DC: from the equation, it will read
the LVL file from /GameData/Data/_LVL_PC/BES/    folder
hence using the map that the game already uses.
(You can do that to all the ReadDataFile   lines in the lua as well)
I hope this helps.

January 24, 2013, 01:27:24 PM #2 Last Edit: January 24, 2013, 01:30:05 PM by Glitch
Whoops, guess you didn't catch my edit. (My internet was slow, sorry about that. :()

Quote from: GlitchI was wondering how to add a pre-existing map to the BF1 addme.lua. I know how to setup a BF2 addme file and noticed slight differences between the BF1 and BF2 versions. I've already setup what I think will work (blue) What I've highlighted in red is what I'm questioning.

I've already setup the mission files correctly.

ReadDataFile("dc:SIDE\\cis.lvl",
        "cis_fly_fedlander_dome",
        "cis_inf_basic",
        "cis_inf_countdooku",
        "cis_inf_droideka");

Quote: At times of chaos, humans are subjected to emotion rather than logic.

Quote from: -RepublicCommando- on January 24, 2013, 11:13:48 AM
If you are doing what I think you're trying to, this should work.

When you create a map, and edit the mission Luas for it, you'll notice the
ReadDataFile("dc:bes2\\bes2.lvl")


ReadDataFile: self explanitory
("   : encloses the file
DC:  : means to read the file out of the directory that the map comes with.  /Addon/Bes2/

if you were to take away the   DC: from the equation, it will read
the LVL file from /GameData/Data/_LVL_PC/BES/    folder
hence using the map that the game already uses.
(You can do that to all the ReadDataFile   lines in the lua as well)
I hope this helps.

He is not talking about the map lua, but rather the addme lua...
Quote from: Abraham Lincoln. on November 04, 1971, 12:34:40 PM
Don't believe everything you read on the internet

January 24, 2013, 02:12:06 PM #4 Last Edit: January 24, 2013, 02:16:35 PM by Glitch
That misunderstanding was my fault. I need to correct this setup.

-- add the new tat level to the missionlist
local newEntry = { mapluafile = "GSM", showstr = "GSM", side_c = 1, side_a = 1, dnldable = 1, }
local newEntry = { mapluafile = "GEO1", showstr = "GEO1", side_c = 1, side_a = 1, dnldable = 1, }
local newEntry = { mapluafile = "yav1", showstr = "yav1", side_c = 1, side_a = 1, dnldable = 1, }
local newEntry = { mapluafile = "yav2", showstr = "yav2", 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("GSM","GSMc",4)
AddDownloadableContent("GSM","GSMa",4)

AddDownloadableContent("yav1","yav1c",4)
AddDownloadableContent("yav2","yav2r",4)

AddDownloadableContent("GEO1","GEO1r",4)
AddDownloadableContent("GEO1","GEO1r_h",4)


-- all done
newEntry = nil
n = nil
Quote: At times of chaos, humans are subjected to emotion rather than logic.

The BFbuilder pro application automatically makes your addme.lua file when you start a new map project.  I am not sure SWBF can support 4 maps in the addme.

I would suggest you just use the addme created by BFbuilder, since we can not (as yet) make custom campaigns.
Quote from: Abraham Lincoln. on November 04, 1971, 12:34:40 PM
Don't believe everything you read on the internet

Each Addon level has a separate addme.script file associated with it.  There is no universal one (as you seem to be trying to create).
The BOBclan:  A Rich History


Quote from: Unit 33 on November 29, 2014, 03:44:44 AM
'Please, tell me more about the logistics of the design of laser swords being wielded by space wizards' - Some guy on the internet.

Ah, so in order to add custom units/skins to specific stock maps I need to add the stock map's addme.lua to the mod?
Quote: At times of chaos, humans are subjected to emotion rather than logic.

January 24, 2013, 05:00:29 PM #8 Last Edit: January 24, 2013, 05:05:11 PM by Buckler
Quote from: Glitch on January 24, 2013, 04:57:23 PM
Ah, so in order to add custom units to specific stock maps I need to use the stock map's addme.lua?

When I want to do this, I make an addon level folder through BFbuilder.  Then I just edit the map readdatafile line to read the stock map instead of one in the downloadable content folder.  Easy as can be!

Here is a portion of a map lua that calls the stock cloud city map but calls on side lvl files in a special location:


    ReadDataFile("SWBFgamersUpdate1.0\\sides\\01-Led\\pistolsonly\\SIDE\\all.lvl",
        "all_inf_basicurban",
        "all_inf_lukeskywalker",
        "all_inf_smuggler");
    ReadDataFile("SWBFgamersUpdate1.0\\sides\\01-Led\\pistolsonly\\SIDE\\imp.lvl",
        "imp_inf_basic_tie",
        "imp_inf_dark_trooper",
        "imp_inf_darthvader");


--              Alliance Stats
        SetTeamName(ALL, "Alliance")
        SetTeamIcon(ALL, "all_icon")
    AddUnitClass(ALL, "all_inf_soldierurban",11)
   
    SetHeroClass(ALL, "all_inf_lukeskywalker")
    SetAttackingTeam(ATT);


--              Imperial Stats
        SetTeamName(IMP, "Empire")
        SetTeamIcon(IMP, "imp_icon")
    AddUnitClass(IMP, "imp_inf_storm_trooper",11)
   
    SetHeroClass(IMP, "imp_inf_darthvader")


--  Attacker Stats
    SetUnitCount(ATT, 25)
    SetReinforcementCount(ATT, 50)
    AddBleedThreshold(ATT, 31, 0.0)
    AddBleedThreshold(ATT, 21, 0.0)
    AddBleedThreshold(ATT, 11, 0.0)
    AddBleedThreshold(ATT, 1, 0.0)

--  Defender Stats
    SetUnitCount(DEF, 25)
    SetReinforcementCount(DEF, 50)
    AddBleedThreshold(DEF, 31, 0.0)
    AddBleedThreshold(DEF, 21, 0.0)
    AddBleedThreshold(DEF, 11, 0.0)
    AddBleedThreshold(DEF, 1, 0.0)

--  Level Stats
    ClearWalkers()
    SetMemoryPoolSize("MountedTurret", 10)
    SetMemoryPoolSize("Obstacle", 514)
    SetSpawnDelay(2.0, 0.25)
    ReadDataFile("BES\\bes2.lvl")
    SetDenseEnvironment("true")
Quote from: Abraham Lincoln. on November 04, 1971, 12:34:40 PM
Don't believe everything you read on the internet

January 24, 2013, 05:08:04 PM #9 Last Edit: January 24, 2013, 05:21:15 PM by Glitch
I'd like to use all the stock maps. Give them custom units/skins and allow localization changes.

I've already edited the mission.lua's accordingly. Now I just need to add the maps to the readdatafile line in the custom map mission.lua? Or did I interpret that incorrectly?

Edit 1: Ah, saw the edit, reading

Edit 2: So this is the edited stock mission.lua or the custom one? I'm using an edited stock side.
Would this kind of layout within the lua work?

--  Level Stats
    ClearWalkers()
    SetMemoryPoolSize("MountedTurret", 10)
    SetMemoryPoolSize("Obstacle", 514)
    SetSpawnDelay(2.0, 0.25)
    ReadDataFile("BES\\bes1.lvl")
    ReadDataFile("BES\\bes2.lvl")
    ReadDataFile("GEO\\geo1.lvl")
    ReadDataFile("KAM\\kam1.lvl")
    ReadDataFile("KAS\\kas1.lvl")
    ReadDataFile("KAS\\kas2.lvl")
    ReadDataFile("KAS\\kas2_h.lvl")
    ReadDataFile("NAB\\nab1.lvl")
    ReadDataFile("NAB\\nab1_h.lvl")
    ReadDataFile("NAB\\nab2.lvl")
    ReadDataFile("NAB\\nab2_h.lvl")
    ReadDataFile("RHN\\rhn1.lvl")
    ReadDataFile("RHN\\rhn2.lvl")
    ReadDataFile("TAT\\tat1.lvl")
    ReadDataFile("TAT\\tat1h.lvl")
    ReadDataFile("TAT\\tat2.lvl")
    ReadDataFile("YAV\\yav1.lvl")
    ReadDataFile("YAV\\yav2.lvl")
    ReadDataFile("YAV\\yav2_h.lvl")
    SetDenseEnvironment("true")






Quote: At times of chaos, humans are subjected to emotion rather than logic.

  ReadDataFile("BES\\bes2.lvl")

That is the line you need.  For other maps, use the appropriate folder and map lvl name  :cheers:
Quote from: Abraham Lincoln. on November 04, 1971, 12:34:40 PM
Don't believe everything you read on the internet

Quote from: Dark_Phantom on January 24, 2013, 04:52:58 PM
Each Addon level has a separate addme.script file associated with it.  There is no universal one (as you seem to be trying to create).
Well there is for stockmap in the shell, but I think he is just trying to mod the mission.lvl to call on custom sides. For stock maps I suggest putting your custom sides in the side folder that way you won't have to have DC:\\ references in the edited mission.

January 24, 2013, 05:30:40 PM #12 Last Edit: January 24, 2013, 06:51:50 PM by Glitch
Quote from: Buckler on January 24, 2013, 05:11:56 PM
  ReadDataFile("BES\\bes2.lvl")

That is the line you need.  For other maps, use the appropriate folder and map lvl name  :cheers:

I've inserted that line into GSMc.lua along with the other stock maps. Munging now. :D Thanks Buckler! I'll let you know how it goes. (I'm assuming I need to keep the other mission.lua's for varied side changes, skins, units etc.)

Quote from: Phobos on January 24, 2013, 05:13:53 PMI think he is just trying to mod the mission.lvl to call on custom sides.

Yep, that just about sums it up. I've backed up the stock cis.lvl and replaced it with my own.

Edit: Hmm, the additional skins and localization did not appear in game.
Quote: At times of chaos, humans are subjected to emotion rather than logic.

Quote from: Glitch on January 24, 2013, 05:30:40 PM
I've inserted that line into GSMc.lua along with the other stock maps. Munging now. :D Thanks Buckler! I'll let you know how it goes. (I'm assuming I need to keep the other mission.lua's for varied side changes, skins, units etc.)

Yep, that just about sums it up. I've backed up the stock cis.lvl and replaced it with my own.

Edit: Hmm, the additional skins and localization did not appear in game.

post your map lua and let's have a look
Quote from: Abraham Lincoln. on November 04, 1971, 12:34:40 PM
Don't believe everything you read on the internet

January 24, 2013, 07:19:51 PM #14 Last Edit: January 24, 2013, 07:27:46 PM by Glitch
Quote from: GlitchEdit: Hmm, the additional skins and localization did not appear in game.
By that, I meant that the stock maps did not use the localization and skin changes. I may have messed something up prior to the munge. I'll take a closer look tomorrow. Gonna get some sleep.

GSMc.lua

--start header
function ScriptInit()
local CIS = 1
local REP = 2
local ATT = 1
local DEF = 2
--end header
--start objectives
AddMissionObjective(REP,"red", "level.GSM.objectives.1");
AddMissionObjective(REP,"orange", "level.GSM.objectives.2");
AddMissionObjective(REP,"orange", "level.GSM.objectives.3");
AddMissionObjective(CIS,"red", "level.GSM.objectives.1");
AddMissionObjective(CIS,"orange", "level.GSM.objectives.2");
AddMissionObjective(CIS,"orange","level.GSM.objectives.3");
--end objectives
--start soundlvl
ReadDataFile("sound\\tat.lvl;tat1cw");
--end soundlvl

-- Start sidelvls
ReadDataFile("dc:SIDE\\cis.lvl",
"cis_inf_basic",
"cis_inf_basic_battledroids",
"cis_inf_countdooku",
"cis_inf_droideka");
ReadDataFile("SIDE\\rep.lvl",
"rep_inf_basic",
"rep_inf_macewindu",
"rep_inf_jet_trooper");
--end sidelvls
--start loadouts
SetTeamName(CIS, "CIS")
SetTeamIcon(CIS, "cis_icon")
AddUnitClass(CIS, "cis_inf_battledroid",10)
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")
SetTeamName(REP, "Republic")
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)
SetReinforcementCount(ATT, 200)
SetUnitCount(DEF, 16)
SetReinforcementCount(DEF, 200)
--end teamstats
--start alliances
SetTeamAsFriend(ATT, 1)
SetTeamAsEnemy(ATT, 2)
SetTeamAsFriend(DEF, 2)
SetTeamAsEnemy(DEF, 1)
SetAttackingTeam(ATT);
--end alliances

--  Level Stats
    ClearWalkers()
    SetMemoryPoolSize("MountedTurret", 10)
    SetMemoryPoolSize("Obstacle", 514)
    SetSpawnDelay(2.0, 0.25)
    ReadDataFile("BES\\bes1.lvl")
    ReadDataFile("BES\\bes2.lvl")
    ReadDataFile("GEO\\geo1.lvl")
    ReadDataFile("KAM\\kam1.lvl")
    ReadDataFile("KAS\\kas1.lvl")
    ReadDataFile("KAS\\kas2.lvl")
    ReadDataFile("KAS\\kas2_h.lvl")
    ReadDataFile("NAB\\nab1.lvl")
    ReadDataFile("NAB\\nab1_h.lvl")
    ReadDataFile("NAB\\nab2.lvl")
    ReadDataFile("NAB\\nab2_h.lvl")
    ReadDataFile("RHN\\rhn1.lvl")
    ReadDataFile("RHN\\rhn2.lvl")
    ReadDataFile("TAT\\tat1.lvl")
    ReadDataFile("TAT\\tat1h.lvl")
    ReadDataFile("TAT\\tat2.lvl")
    ReadDataFile("YAV\\yav1.lvl")
    ReadDataFile("YAV\\yav2.lvl")
    ReadDataFile("YAV\\yav2_h.lvl")
    SetDenseEnvironment("true")

--start memorypools
ClearWalkers()
AddWalkerType(0, 4)-- special -> droidekas
AddWalkerType(1, 4)-- 1x2 (1 pair of legs)
AddWalkerType(2, 0)-- 2x2 (2 pairs of legs)
AddWalkerType(3, 0)-- 3x2 (3 pairs of legs)
SetMemoryPoolSize("PowerupItem", 60)
SetMemoryPoolSize("EntityMine", 40)
--end memorypools
--start worldlvl
ReadDataFile("dc:GSM\\GSM.lvl")
--end worldlvl
--start spawndelay
SetSpawnDelay(10.0, 0.25)
--end spawndelay
--start flyheight
--end flyheight
--start ainotify
--end ainotify
--start stayinturrets
--end stayinturrets
--start denseenvironment
SetDenseEnvironment("false")
--end denseenvironment
--start birdsandfish
--end birdsandfish
--start deathregions
--end deathregions

--start soundconfig
OpenAudioStream("sound\\tat.lvl","tatcw_music");
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);
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);
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");
SetOutOfBoundsVoiceOver(1,"Impleaving");
SetAmbientMusic(CIS,1.0,"cis_tat_amb_start",0,1);
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");
SetDefeatMusic (CIS,"cis_tat_amb_defeat");
SetVictoryMusic(REP,"rep_tat_amb_victory");
SetDefeatMusic (REP,"rep_tat_amb_defeat");
SetSoundEffect("ScopeDisplayZoomIn","binocularzoomin");
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");
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);
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
--end footer
Quote: At times of chaos, humans are subjected to emotion rather than logic.