The Ultimate .Lua

Started by Snake, April 13, 2013, 04:31:36 PM

Previous topic - Next topic
April 13, 2013, 04:31:36 PM Last Edit: April 13, 2013, 04:33:36 PM by Snake
This is a little thing I've been working on to help save a little time. Basically, it has almost all types of lines (except sounds) from the stock SWBF maps. Now you don't have to go searching for whatever line you need. I'm not sure if this has been done before but... Oh well.  :P

[spoiler]--------------------------------------------------------

--Snake's Ultimate .lua

--This is a compilation of all types of lines from stock --.lua's so you don't have to run around, looking for the --right lines.

--To Use: Just add -- in front of what lines you don't want --and remove the -- from what you do want. This .lua is set --as GCW.

--I would suggest not to just copy and paste this into your --.lua, but copy and paste what lines you need, which will --save time. There is no CW sounds added to this .lua.

--Look for "ABC!!!!!!!" That's where your ModID goes.

---------------------------------------------------------

--start header
function ScriptInit()
--GCW
local ALL = 1
local IMP = 2
local ATT = 1
local DEF = 2
--CW
--local REP = 2
--local CIS = 1
--local ATT = 1
--local DEF = 2

--    SetHistorical() --Only found in campaign maps
--end header

--start objectives
AddMissionObjective(IMP,"red", "level.ABC!!!!!!!.objectives.1");
AddMissionObjective(IMP,"orange", "level.ABC!!!!!!!.objectives.2");
AddMissionObjective(IMP,"orange", "level.ABC!!!!!!!.objectives.3");
AddMissionObjective(ALL,"red", "level.ABC!!!!!!!.objectives.1");
AddMissionObjective(ALL,"orange", "level.ABC!!!!!!!.objectives.2");
AddMissionObjective(ALL,"orange","level.ABC!!!!!!!.objectives.3");
--end objectives

--start soundlvl
ReadDataFile("sound\\tat.lvl;tat1gcw");
--ReadDataFile("sound\\bes.lvl;bes1gcw");
--ReadDataFile("sound\\bes.lvl;bes2gcw");
--ReadDataFile("sound\\hot.lvl;hot1gcw");
--ReadDataFile("sound\\yav.lvl;yav2gcw");
--end soundlvl

-- Start sidelvls
--ReadDataFile("SIDE\\rep.lvl",
--"rep_fly_assault_dome",
--"rep_fly_jedifighter_dome",
--"rep_fly_gunship_dome",
--"rep_bldg_forwardcenter",
--"rep_hover_speederbike",
--"rep_hover_fightertank",
--"rep_fly_gunship",
--"rep_inf_basic",
--"rep_inf_jet_trooper",
--"rep_walk_atte",
--"rep_inf_macewindu");

--ReadDataFile("SIDE\\cis.lvl",
--"cis_fly_droidfighter_dome",
--"cis_fly_fedlander_dome",
--"cis_fly_fedcoreship_dome",
--"cis_fly_techounion_dome",
--"cis_fly_geofighter",
--"cis_hover_aat",
--"cis_inf_basic_battledroids",
--"cis_inf_basic",
--"cis_hover_stap",
--"cis_tread_hailfire",
--"cis_walk_spider",
--"cis_inf_countdooku",
--"cis_inf_droideka");

ReadDataFile("SIDE\\all.lvl",
"all_hover_combatspeeder",
"all_fly_xwing",
"all_fly_ywing",
"all_walk_tauntaun",
"all_inf_basic",
--"all_inf_basicsnow",
--"all_inf_basicjungle",
--"all_inf_basicurban",
--"all_inf_basicdesert",
"all_inf_lukeskywalker",
"all_fly_snowspeeder",
--"all_inf_lukeskywalkersnow",
--"all_inf_smugglersnow",
"all_inf_smuggler");

ReadDataFile("SIDE\\imp.lvl",
"imp_fly_destroyer_dome",
"imp_hover_fightertank",
"imp_fly_tiefighter",
"imp_fly_tiebomber",
"imp_hover_speederbike",
"imp_inf_basic",
--"imp_inf_basicsnow",
--"imp_inf_basic_tie",
"imp_walk_atat",
--"imp_droid_probe", -- Doesn't work
"imp_walk_atst"
"imp_walk_atst_jungle",
"imp_walk_atst_snow"
"imp_inf_dark_trooper",
--"imp_inf_dark_troopersnow",
"imp_inf_darthvader");

--ReadDataFile("SIDE\\geo.lvl",
--"gen_inf_geonosian")

--ReadDataFile("SIDE\\wok.lvl",
--"wok_inf_basic");

--ReadDataFile("SIDE\\des.lvl",
--"tat_inf_tuskenhunter",
--"tat_inf_jawa",
--"tat_inf_tuskenraider");

--ReadDataFile("SIDE\\ewk.lvl",
--"all_end_music",
--"ewk_inf_basic")

--ReadDataFile("SIDE\\gun.lvl",
--"gun_inf_basic",
--"nab_bldg_fambaa_shield",
--"gun_walk_kaadu")

--ReadDataFile("SIDE\\gar.lvl",
--"gar_inf_basic");

    SetAttackingTeam(ATT);
--end sidelvls

--start loadouts
SetTeamName(ALL, "Alliance")
SetTeamIcon(ALL, "all_icon")
AddUnitClass(ALL, "all_inf_soldier",11)
--AddUnitClass(ALL, "all_inf_soldierjungle",11)
--AddUnitClass(ALL, "all_inf_soldierdesert",11)
--AddUnitClass(ALL, "all_inf_soldiersnow",14)
--AddUnitClass(ALL, "all_inf_soldierurban",11)
AddUnitClass(ALL, "all_inf_vanguard",3)
--AddUnitClass(ALL, "all_inf_vanguardsnow",3)
--AddUnitClass(ALL, "all_inf_vanguardjungle",3)
AddUnitClass(ALL, "all_inf_pilot",4)
AddUnitClass(ALL, "all_inf_marksman",4)
--AddUnitClass(ALL, "all_inf_marksmansnow",4)
--AddUnitClass(ALL, "all_inf_marksmanjungle",4)
AddUnitClass(ALL, "all_inf_smuggler",3)
--AddUnitClass(ALL, "all_inf_smugglersnow",3)
SetHeroClass(ALL, "all_inf_lukeskywalker")
--SetHeroClass(ALL, "all_inf_lukeskywalkersnow")


SetTeamName(IMP, "Empire")
SetTeamIcon(IMP, "imp_icon")
AddUnitClass(IMP, "imp_inf_storm_trooper",10)
--AddUnitClass(IMP, "imp_inf_storm_troopersnow",14)
AddUnitClass(IMP, "imp_inf_shock_trooper",4)
--AddUnitClass(IMP, "imp_inf_shock_troopersnow",3)
AddUnitClass(IMP, "imp_inf_pilottie",5)
--AddUnitClass(IMP, "imp_inf_pilotatat",4)
--AddUnitClass(IMP, "imp_inf_pilotatst",4)
AddUnitClass(IMP, "imp_inf_scout_trooper",6)
--AddUnitClass(IMP, "imp_inf_scout_troopersnow",4)
AddUnitClass(IMP, "imp_inf_dark_trooper",4)
--AddUnitClass(IMP, "imp_inf_dark_troopersnow",3)
SetHeroClass(IMP, "imp_inf_darthvader")

    --    Republic Stats
--      SetTeamName(REP, "Republic");
--      SetTeamIcon(REP, "rep_icon");
--      AddUnitClass(REP, "rep_inf_clone_trooper",11)
--      AddUnitClass(REP, "rep_inf_arc_trooper",3)
--      AddUnitClass(REP, "rep_inf_clone_pilot",4)
--      AddUnitClass(REP, "rep_inf_clone_sharpshooter",4)
--      AddUnitClass(REP, "rep_inf_jet_trooper",3)
--      SetHeroClass(REP, "rep_inf_macewindu")
--  SetCarrierClass(REP, "rep_fly_vtrans") --no idea

--  CIS Stats
--      SetTeamName(CIS, "CIS");
--      SetTeamIcon(CIS, "cis_icon");
--        AddUnitClass(CIS, "cis_inf_battledroid",14)
--    AddUnitClass(CIS, "cis_inf_battledroid_inf",15)
--    AddUnitClass(CIS, "cis_inf_battledroid_av",5)
--    AddUnitClass(CIS, "cis_inf_battledroid_pilot",6)
--    AddUnitClass(CIS, "cis_inf_battledroid_sniper",6)
--        AddUnitClass(CIS, "cis_inf_assault",4)
--      AddUnitClass(CIS, "cis_inf_pilotdroid",5)
--      AddUnitClass(CIS, "cis_inf_assassindroid",5)
--   AddUnitClass(CIS, "cis_inf_droideka",4)
--      SetHeroClass(CIS, "cis_inf_countdooku")

--  Local Stats
--    SetTeamName(3, "locals")
--    AddUnitClass(3, "tat_inf_tuskenraider", 5);
--    AddUnitClass(3, "tat_inf_tuskenhunter", 2);

--  Local Stats
--    SetTeamName(4, "locals2")
--    SetTeamIcon(4, "all_icon")
--    AddUnitClass(4, "wok_inf_mechanic", 2)
--    AddUnitClass(4, "wok_inf_rocketeer", 2)
--    AddUnitClass(4, "wok_inf_warrior", 3)

--  Local Stats
--    SetTeamName (5, "locals3")
--    AddUnitClass (5, "ewk_inf_trooper", 4);
--    AddUnitClass (5, "ewk_inf_repair", 6);

--  Local Stats
--    SetTeamName(6, "locals4")
--    AddUnitClass(6, "geo_inf_geonosian", 7)

--    Local Stats --From Geonosis - doesn't work
--SetTeamName(7, "locals5")
--AddUnitClass(7, "rep_inf_jedimale",1)
--AddUnitClass(7, "rep_inf_jedimaleb",1)
--AddUnitClass(7, "rep_inf_jedimaley",1)

--  Local Stats --From Hoth - doesn't work
--    SetTeamName(8, "locals6")
--    AddUnitClass(8, "imp_droid_probe", 1);

--  Local Stats
--    SetTeamName(9, "locals7")
--    AddUnitClass(9, "gun_inf_soldier", 5)
--    AddUnitClass(9, "gun_inf_rider", 2)

--  Republic Stats
--    SetTeamName(10, "locals8");
--    AddUnitClass(10, "gar_inf_soldier",12)
--    AddUnitClass(10, "gar_inf_pilot",5)
--    AddUnitClass(10, "gar_inf_vanguard",5)

--  Attacker Stats
    AddBleedThreshold(ATT, 31, 0.0)
    AddBleedThreshold(ATT, 21, 0.75)
    AddBleedThreshold(ATT, 11, 2.25)
    AddBleedThreshold(ATT, 1, 3.0)

--  Defender Stats
    AddBleedThreshold(DEF, 31, 0.0)
    AddBleedThreshold(DEF, 21, 0.75)
    AddBleedThreshold(DEF, 11, 2.25)
    AddBleedThreshold(DEF, 1, 3.0)
--end loadouts

--start teamstats
--SetUnitCount(3, 9)
--SetUnitCount(4, 8)
--SetUnitCount(5, 4)
--SetUnitCount(6, 7)
--SetUnitCount(7, 9)
--SetUnitCount(8, 5)
--SetUnitCount(9, 7)

SetUnitCount(ATT, 40)
SetReinforcementCount(ATT, 350)
SetUnitCount(DEF, 40)
SetReinforcementCount(DEF, 350)
--end teamstats

--start alliances
SetTeamAsFriend(ATT, 1)
SetTeamAsEnemy(ATT, 2)
--SetTeamAsFriend(ATT, 3)
--SetTeamAsFriend(ATT, 4)
--SetTeamAsFriend(ATT, 5)
--SetTeamAsFriend(ATT, 6)
--SetTeamAsFriend(ATT, 7)
--SetTeamAsFriend(ATT, 8)
--SetTeamAsFriend(ATT, 9)

--SetTeamAsFriend(3, 9)
--SetTeamAsFriend(3, 8)
--SetTeamAsFriend(3, 7)
--SetTeamAsFriend(3, 6)
--SetTeamAsFriend(3, 5)
--SetTeamAsFriend(3, 4)
--SetTeamAsFriend(3, 3)
--SetTeamAsFriend(3, ATT)
--SetTeamAsEnemy(3, DEF)

--SetTeamAsFriend(4, 9)
--SetTeamAsFriend(4, 8)
--SetTeamAsFriend(4, 7)
--SetTeamAsFriend(4, 6)
--SetTeamAsFriend(4, 5)
--SetTeamAsFriend(4, 4)
--SetTeamAsFriend(4, 3)
--SetTeamAsFriend(4, ATT)
--SetTeamAsEnemy(4, DEF)

--SetTeamAsFriend(5, 9)
--SetTeamAsFriend(5, 8)
--SetTeamAsFriend(5, 7)
--SetTeamAsFriend(5, 6)
--SetTeamAsFriend(5, 5)
--SetTeamAsFriend(5, 4)
--SetTeamAsFriend(5, 3)
--SetTeamAsFriend(5, ATT)
--SetTeamAsEnemy(5, DEF)

--SetTeamAsFriend(6, 9)
--SetTeamAsFriend(6, 8)
--SetTeamAsFriend(6, 7)
--SetTeamAsFriend(6, 6)
--SetTeamAsFriend(6, 5)
--SetTeamAsFriend(6, 4)
--SetTeamAsFriend(6, 3)
--SetTeamAsFriend(6, ATT)
--SetTeamAsEnemy(6, DEF)

--SetTeamAsFriend(7, 9)
--SetTeamAsFriend(7, 8)
--SetTeamAsFriend(7, 7)
--SetTeamAsFriend(7, 6)
--SetTeamAsFriend(7, 5)
--SetTeamAsFriend(7, 4)
--SetTeamAsFriend(7, 3)
--SetTeamAsFriend(7, ATT)
--SetTeamAsEnemy(7, DEF)

--SetTeamAsEnemy(DEF, 9)
--SetTeamAsEnemy(DEF, 8)
--SetTeamAsEnemy(DEF, 7)
--SetTeamAsEnemy(DEF, 6)
--SetTeamAsEnemy(DEF, 5)
--SetTeamAsEnemy(DEF, 4)
--SetTeamAsEnemy(DEF, 3)
SetTeamAsFriend(DEF, 2)
SetTeamAsEnemy(DEF, 1)
--end alliances

--start memorypools
ClearWalkers()
AddWalkerType(0, 0)-- special -> droidekas
AddWalkerType(1, 0)-- 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)
SetMemoryPoolSize("Aimer", 240)
SetMemoryPoolSize("EntityFlyer", 20)
SetMemoryPoolSize("EntityHover", 20)
SetMemoryPoolSize("EntityLight", 80)
SetMemoryPoolSize("Obstacle", 700)
SetMemoryPoolSize ("MountedTurret",50)
SetMemoryPoolSize("EntityTauntaun", 10)
SetMemoryPoolSize("EntityCarrier", 10)
SetMemoryPoolSize("EntityBuildingArmedDynamic", 10)
SetMemoryPoolSize ("CommandWalker",10)
SetMemoryPoolSize("CommandHover",10)
SetMemoryPoolSize ("Weapon", 265)
SetMemoryPoolSize ("EntityWalker",10)
--SetMemoryPoolSize ("EntitySoldier",30)
--Marked out because I have no idea what these do.
--SetMemoryPoolSize ("EntityDroid",10)
SetMemoryPoolSize("OrdnanceTowCable", 8) --From Hoth
--end memorypools

--start worldlvl
ReadDataFile("dc:ABC!!!!!!\\ABC!!!!!!.lvl")
--end worldlvl

--start spawndelay
SetSpawnDelay(5.0, 0.25)
--end spawndelay

--start flyheight
SetMinFlyHeight(-65)
SetMaxFlyHeight(240)
SetMaxPlayerFlyHeight(240)
--end flyheight

--start ainotify
--SetAIVehicleNotifyRadius(64) --Not sure what this does
--end ainotify

--start stayinturrets
SetStayInTurrets(1) --Or make 0 if no stay in turrets
--end stayinturrets

--start denseenvironment
SetDenseEnvironment("true")
--end denseenvironment

--start birdsandfish
--  Birdies --From Yavin - example of 2 types
--SetBirdType(0,1.0,"bird");
--SetBirdType(1,1.5,"bird2");

--  Birdies --From Geo - Idk if it works
--SetNumBirdTypes(1)
--SetBirdType(0.0,10.0,"dragon")
--SetBirdFlockMinHeight(90.0)

--  Birdies
--    SetNumBirdTypes(1);
--    SetBirdType(0,1.0,"bird");
--    SetBirdFlockMinHeight(-28.0);

--  Fishies
--    SetNumFishTypes(1);
--    SetFishType(0,0.8,"fish");
--end birdsandfish

--start randoms
--    SetDefenderSnipeRange(170) --From Hoth
--    SetAllowBlindJetJumps(0) --From Kamino
--end randoms

--start deathregions
--    AddDeathRegion("deathregion"); --From Endor
--    AddDeathRegion("Sarlac01") --From Tatooine
--    AddDeathRegion("Death"); --From Hoth
--    AddDeathRegion("DeathRegion"); --From Kamino
--    AddDeathRegion("Water"); --From Naboo
--    AddDeathRegion("Waterfall"); --From Naboo
--    AddDeathRegion("DeathRegion"); --From Kamino
--    AddDeathRegion("FalltoDeath"); --From Rhen Var
--end deathregions

--start soundconfig
OpenAudioStream("sound\\tat.lvl","tatgcw_music");
OpenAudioStream("sound\\tat.lvl","tat1");
OpenAudioStream("sound\\tat.lvl","tat1");
OpenAudioStream("sound\\gcw.lvl","gcw_vo");
OpenAudioStream("sound\\gcw.lvl","gcw_tac_vo");
OpenAudioStream("sound\\tat.lvl","tat1_emt");
SetBleedingVoiceOver(ALL,ALL,"all_off_com_report_us_overwhelmed",1);
SetBleedingVoiceOver(ALL,IMP,"all_off_com_report_enemy_losing",1);
SetBleedingVoiceOver(IMP,ALL,"imp_off_com_report_enemy_losing",1);
SetBleedingVoiceOver(IMP,IMP,"imp_off_com_report_us_overwhelmed",1);
SetLowReinforcementsVoiceOver(ALL, ALL, "all_off_defeat_im", .1,1);
SetLowReinforcementsVoiceOver(ALL, IMP, "all_off_victory_im", .1,1);
SetLowReinforcementsVoiceOver(IMP, IMP, "imp_off_defeat_im", .1,1);
SetLowReinforcementsVoiceOver(IMP, ALL, "imp_off_victory_im", .1,1);
SetOutOfBoundsVoiceOver(2,"Allleaving");
SetOutOfBoundsVoiceOver(1,"Impleaving");
SetAmbientMusic(ALL,1.0,"all_tat_amb_start",0,1);
SetAmbientMusic(ALL,0.99,"all_tat_amb_middle",1,1);
SetAmbientMusic(ALL,0.1,"all_tat_amb_end",2,1);
SetAmbientMusic(IMP,1.0,"imp_tat_amb_start",0,1);
SetAmbientMusic(IMP,0.99,"imp_tat_amb_middle",1,1);
SetAmbientMusic(IMP,0.1,"imp_tat_amb_end",2,1);
SetVictoryMusic(ALL,"all_tat_amb_victory");
SetDefeatMusic (ALL,"all_tat_amb_defeat");
SetVictoryMusic(IMP,"imp_tat_amb_victory");
SetDefeatMusic (IMP,"imp_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(IMP,IMP,0,"imp_bonus_imp_medical");
SetPlanetaryBonusVoiceOver(IMP,ALL,0,"imp_bonus_all_medical");
SetPlanetaryBonusVoiceOver(IMP,IMP,1,"");
SetPlanetaryBonusVoiceOver(IMP,ALL,1,"");
SetPlanetaryBonusVoiceOver(IMP,IMP,2,"imp_bonus_imp_sensors");
SetPlanetaryBonusVoiceOver(IMP,ALL,2,"imp_bonus_all_sensors");
SetPlanetaryBonusVoiceOver(IMP,IMP,3,"imp_bonus_imp_hero");
SetPlanetaryBonusVoiceOver(IMP,ALL,3,"imp_bonus_all_hero");
SetPlanetaryBonusVoiceOver(IMP,IMP,4,"imp_bonus_imp_reserves");
SetPlanetaryBonusVoiceOver(IMP,ALL,4,"imp_bonus_all_reserves");
SetPlanetaryBonusVoiceOver(IMP,IMP,5,"imp_bonus_imp_sabotage");--sabotage
SetPlanetaryBonusVoiceOver(IMP,ALL,5,"imp_bonus_all_sabotage");
SetPlanetaryBonusVoiceOver(IMP,IMP,6,"");
SetPlanetaryBonusVoiceOver(IMP,ALL,6,"");
SetPlanetaryBonusVoiceOver(IMP,IMP,7,"imp_bonus_imp_training");--advanced training
SetPlanetaryBonusVoiceOver(IMP,ALL,7,"imp_bonus_all_training");--advanced training
SetPlanetaryBonusVoiceOver(ALL,ALL,0,"all_bonus_all_medical");
SetPlanetaryBonusVoiceOver(ALL,IMP,0,"all_bonus_imp_medical");
SetPlanetaryBonusVoiceOver(ALL,ALL,1,"");
SetPlanetaryBonusVoiceOver(ALL,IMP,1,"");
SetPlanetaryBonusVoiceOver(ALL,ALL,2,"all_bonus_all_sensors");
SetPlanetaryBonusVoiceOver(ALL,IMP,2,"all_bonus_imp_sensors");
SetPlanetaryBonusVoiceOver(ALL,ALL,3,"all_bonus_all_hero");
SetPlanetaryBonusVoiceOver(ALL,IMP,3,"all_bonus_imp_hero");
SetPlanetaryBonusVoiceOver(ALL,ALL,4,"all_bonus_all_reserves");
SetPlanetaryBonusVoiceOver(ALL,IMP,4,"all_bonus_imp_reserves");
SetPlanetaryBonusVoiceOver(ALL,ALL,5,"all_bonus_all_sabotage");--sabotage
SetPlanetaryBonusVoiceOver(ALL,IMP,5,"all_bonus_imp_sabotage");
SetPlanetaryBonusVoiceOver(ALL,ALL,6,"");
SetPlanetaryBonusVoiceOver(ALL,IMP,6,"");
SetPlanetaryBonusVoiceOver(ALL,ALL,7,"all_bonus_all_training");--advanced training
SetPlanetaryBonusVoiceOver(ALL,IMP,7,"all_bonus_imp_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

--By Snake
--SWBFGamers.com
--TheSnakeSite.webs.com
--Happy Modding!
[/spoiler]

=AaTc= Forever

SALLY....

-Retired Modder

This is a useful script for reference thanks.

No more digging in BFbuilder assets! NEVA!


Quote from: -RepublicCommando- on April 13, 2013, 07:52:40 PM
No more digging in BFbuilder assets! NEVA!
Quote from: Phobos on April 13, 2013, 06:47:38 PM
This is a useful script for reference thanks.

Haha, No problem.

Quote from: Buckler on April 13, 2013, 08:06:55 PM
http://www.swbfgamers.com/index.php?topic=4673.0

Well, mine is a little more complete/organized so when you want some .lua line you can simply copy and paste it!  ;) But sorry, I forgot you had one..
=AaTc= Forever

SALLY....

-Retired Modder


=AaTc= Forever

SALLY....

-Retired Modder