Jump to content

Shrooblord

Members
  • Posts

    610
  • Joined

  • Last visited

  • Days Won

    4

Posts posted by Shrooblord

  1. Expose StatsBonuses.Pilots to lua. Every other profession crewmen can have has been exposed, except this one. PilotsPerFighter exists, but fills a different role.

     

    Reason: StatsBonuses.Engineers and related StatsBonuses exist for a good reason: they allow us to add Crew via System Module Upgrades, or some other "buffing" mechanic. Why should Pilots be excluded from this capability?

  2. A function complementary to the Sector() and Entity() API's onRestoredFromDisk() (triggered when the Sector() or Entity() is read from disk and put into active memory). Let's call it onSecuredToDisk() for the purposes of this discussion. It would be called just before the Sector() or Entity() finishes saving to disk and unloads from memory.

     

    It would be cool to be able to act upon the unloading of data from memory, such as triggering a "start simulations now" script, warning the player about the unloading status of a Sector, saving our own data somewhere else than in the secure() space so we still have access to it, a last-known-location type of thing... just knowing that a Sector has become unloaded the instant it happens, because we acted on the callback... the list goes on and on. So many cool use-cases.

     

    EDIT:

     

    An additional callback named something along the lines of onSecureToDisk() which triggers before the saving process begins. This would be used so you can make last-minute changes to a running script before the Sector() or Entity() is well and properly hermetically sealed. This callback is requested because Sectors and Entities can save to disk using secure() without unloading from memory, but it would be useful to act upon the case when and only when the Sector() or Entity() actually unloads from memory.

     

    P.S.

    Thanks to Hammelpilaw for the original spark of the suggestion.

  3. This sounds excellent! I've always wanted a Torpedo-building mechanic since I've played From the Depths and that's one of the most fun parts of that game to me -- the pure, raw customisation of everything.

     

    Regarding uploading to Workshop, read this.

     

    P.S.

    May I recommend creating a System Module Upgrade that adds this functionality, instead of a command? Commands feel very hacky to use, and you can forget about how they work again in this huge, huge game. SMUs instantly make your mod feel like it's part of the Universe proper. ;)

  4. Hey guys! Sorry to come back to the forums to see that you're having trouble with installing this mod.

     

    Out of all mods I've worked on, this is personally my favourite, and quite frankly nearly essential to my gameplay experience in Avorion. So, rest assured, I will try and get it up and running ASAP and give you clearer instructions on how to run this in your own games once I'm done.

     

    Those installation instructions will hopefully be as simple as: go to the Steam Workshop. Click Subscribe. Launch your game. ?. Profit!

     

    I'm working on the new Steam Workshop integration paradigm that Avorion works with now. Stay tuned. I'm hoping this won't take more than a couple of days for me to get used to the new system.

     

    ----

     

    If you absolutely don't want to update to the newer versions of Avorion where the Steam Workshop integration was included, please leave a message and I can try to explain the installation instructions in a way that's clearer than I have apparently done in the past.

     

    Thanks for your messages! Your interest in my mod brings me great joy.  ;D

  5. Reduced relation point descriptions from 8 to 5 (Hostile, Bad, Neutral, Good, Excellent)

    Pressing F for Abhorrent, my favourite name for a Faction standing. x)

     

    ----

     

    These changes are very exciting! I can't wait to see how more dynamic this makes interacting with the AI Factions. Being able to "bribe" goodwill and call in reinforcements sounds amazing.

  6. Hey all,

     

    With the advent of the Steam Workshop mods paradigm going to take over our little modding scene here on the forums, how interested are you in continued maintenance of a thread like this?

     

    If we all agree it could die in peace now, I could ask a moderator to take it down as a pinned message. Or perhaps you'd like to keep it around, for if you ever want to play older versions of Avorion?

     

    I will update the mod list with your last additions, and then await reply.

  7. OLDER VERSIONS ARCHIVE: [0.16-0.17] [bB 0.18]

    What is this? An archive for older versions of the game, for which the information may not be completely relevant anymore for most people. But it's here, for your convenience, in case you do need that information!

     

    [0.17.1] STABLE MODS

    These mods were stable on an older patch of the base game. It's possible they aren't compatible anymore.

     

     

     

     

     

    [0.16.x] STABLE MODS

    These mods were stable on an older patch of the base game. It's possible they aren't compatible anymore.

     

     

     

    [bB 0.18.x] STABLE MODS

    These mods were stable on a previous patch of the beta branch. It's possible they aren't compatible anymore.

     

     

     

     

  8. Thank you for your work, Hammel. A Wiki is an easier way to maintain this list, indeed!

     

    For everyone who has any information about mod compatibility, please edit the Wiki directly. You can still PM me and/or leave a message here to notify me of changes, if you want to have all bases covered. But I'll also be checking the Wiki periodically, myself. (Here, I made a note on my calendar already!)

     

    That said, I will keep this list updated, still. You'll still be able to see a summary of all the information on the Wiki, here. If at any time there is an information disparity, i.e. the information on the Wiki and here are in conflict, assume the Wiki is correct. It's nice to have a centralised location in the same place as the Mods forum itself, where this information is available.

  9. I agree. I'm very excited to see what this new Community Manager will bring to the Community and to the general Avorion experience, whoever they turn out to be. Onwards and upwards! Avorion is one of my favourite games of all time, and I love the Community here. Let's make great new things happen!

  10. Additionally, any carrier's fighters will no longer pick up loot (such as from a destroyed enemy), unless these same Transporter requirements are met??
    No, the Mining and Salvaging Fighters never picked up Loot (because the Mining and Salvaging Loot is a new addition to the game). This enables that funtionality, so that the Mothership doesn't have to fly through the Loot to pick it up. Don't think the other Fighters were touched.
  11. I think I understand the issue. Allow me to paraphrase:

    If you put the code I posted in Line 25 of Avorion/data/scripts/entity/ai/dock.lua, transporters and normal docking should work if any Entity is using DockAI.flyToDock.

     

    "It's not waterproof" means, that a ship with transporter got stuck, if it was using DockAI.flyToDock.

     

    Given the following case:

    - AI Ship has a Transporter Block in its BlockPlan() and a Transporter System installed

    - AI Ship attempts a Docking run with a Station

     

    EXPECTED:

    - AI Ship approaches Station until it is within range of the Transporter, then "Docks" virtually by using the Transporter System's functionality.

     

    RESULT:

    - AI Ship attempts to Dock normally with the Station, but gets confused because of its Transporter System and gets stuck, doing nothing, and getting stuck attempting to Dock, but not Docking, nor interrupting its Docking procedure, thereby halting completely, jamming up the Dock and itself.

     

    WORK-AROUND:

    - Using the script unbekannt1984 proposes, above, you can have AI Ships approach the Station as per normal, until they get into virtual "Docking" range using the Transporter functionality. At that moment, they can use the Transporter to Dock from a distance.

    - Using an if-else condition, you can check for whether or not the ship has a Transporter to begin with, and if it doesn't, use the classic, currently-implemented Docking method (i.e. fly to light-line, tractor beams, Dock, etc.).

     

    ====

     

    I haven't tested this myself so I can't be terribly sure, but I think that's what the problem is unbekannt is trying to explain. Correct me if I'm wrong, 1984.

  12. Hey there! As a tip, also put the download link here, on the forum post itself, and have a clear indication as to where it is in the post itself. Experience shows it's hard to lose viewers / readers when there's not a clear link posted on the main post of the mod thread.

     

    Nice tool! Next time, turn up the volume of your mic either irl or in post, because I can barely hear you at max volume! ;)

  13. Still works on Avorion 1.3.8 and on the 2.0 Beta Branch update!

    For older versions of Avorion (< 1.0), check the archived first post.

    ----

    [ ! ] Scroll to the bottom of the post for my own full music.lua file to copy-paste into yours in case you need a complete example.

    [ ! ] To my knowledge, music modding is an entirely client-side process. I.e. the client needs to install the music files themselves, and they cannot be installed through Steam Workshop. I would love to hear if you figured out how to do this, though! Server owners, please read step 10 in the Background / Ambient Tracks section to allow clients to use their music mods on your server.
    ----

    Hey gang,

    Avorion's Music Coordinator builds a playlist of tracks based on "moods", and chooses tracks that are appropriate for that Sector based on how many Stations are left alive there, how many Wreckages are there, whether the Sector is neutral, hostile, or friendly to you, whether it's completely empty, etc. etc.

    Basically, you get played tracks that feel "appropriate" for that environment.


    Introduction

     

    For example, there's the collection of

    TrackCollection.All(), one for TrackCollection.Happy(), one for TrackCollection.Neutral(), TrackCollection.Desolate() etc.


    Also there's this one TrackCollection.HappyNoParticle() which is literally what it sounds like: the collection from TrackCollection.Happy() minus Particle.ogg. RIP

    There's also this helpful line:

    -- modders: reserve track numbers 15 - 1000 for additional future music

    which is a pointer that you should start using tracks with IDs 1001 and up to avoid conflicts with future Avorion updates.

     

    What does this mean for all of you out there who had a vast library of music added into the game? Well, I am one of them (3 GB of music to be precise), so let me walk you through the steps of making your music show up in game again. In my case, it's time to categorise 3 GB worth of music into "moods"... ^^"


    [NOTE:]

    •  For all directories, move into your Avorion Steam installation directory first: YourSteamFolder/(...)/Avorion/, typically something like
      C:\Program Files (x86)\Steam\steamapps\common\Avorion\.
    • All music files need to be in .OGG format, or Avorion will not play them.
    • I've installed my own music files directly into my Avorion installation folder, i.e. in the Steam Directory (see above), not in any other place like AppData nor a /steamworkshop/ folder. I've always done it that way and never tested the others; you might be able to pull it off by installing it there. Let me know if it works!

     

    Main Menu

     

    The Main Menu just plays whatever's in the data/music/main/ folder.

     

    Background / Ambient Tracks

     

    Step 1.

    Create a new mod by going to the Main Menu > Settings > Mods > Upload to Workshop and click New Mod / Faction Pack. Select Mod as the type. This will create an empty mod in your %appdata%/Avorion/mods directory.


    Step 2.

    Create the following folder structure in your mod's folder: data/scripts/lib/ and create a file called music.lua.


    Step 3.

    Add this as your first lines:

    package.path = package.path .. ";data/scripts/lib/?.lua"
    package.path = package.path .. ";data/scripts/?.lua"
    newTrackType =
    {
    -- modders: reserve track numbers 15 - 1000 for additional future music
    }
    


    We will insert our new keys here, in the newTrackType table.


    Step 4.

    Add indices for your music tracks:

    newTrackType =
    {
    -- modders: reserve track numbers 15 - 1000 for additional future music
        MikiSatellite           = 1001,
        GumiECHO                = 1002,
        MEWSchwarzerRegen       = 1003,
        NekomuraIrohaSandPlanet = 1004,
        HatsuneMikuTsumugiuta   = 1005,
        LILYMarieLuise          = 1006,
        BGCOutsideTheRealm      = 1007,
        SporeGAUniverse         = 1008,
        CnC3MourningHour        = 1009,
        LiliaYSbg               = 1010,
        XenogearsMelkaba        = 1011,
        --...
        BoukenDeshoDeshoHaruhi  = 1107,
        OceanReturns            = 1108,
        CrystalGemsPilot        = 1109
    }
    


    Step 5.

    After the newTrackType table, let's make sure to append the Vanilla music.lua's TrackType table with our own new one:

    --insert our new tracks into the old TrackType table
    for k, v in pairs(newTrackType) do
        TrackType[k] = v
    end
    

     

    Step 6.

    Add them as keys in the Tracks table:

    Tracks[TrackType.MikiSatellite]           = {type = TrackType.MikiSatellite,                    path = "data/music/background/[MMD] Satellite - Miki.ogg"}
    Tracks[TrackType.GumiECHO]                = {type = TrackType.GumiECHO,                         path = "data/music/background/ECHO [Gumi English].ogg"}
    Tracks[TrackType.MEWSchwarzerRegen]       = {type = TrackType.MEWSchwarzerRegen,                path = "data/music/background/MEW - Schwarzer Regen.ogg"}
    Tracks[TrackType.NekomuraIrohaSandPlanet] = {type = TrackType.NekomuraIrohaSandPlanet,          path = "data/music/background/Nekomura Iroha V4 Sand Planet.ogg"}
    Tracks[TrackType.HatsuneMikuTsumugiuta]   = {type = TrackType.HatsuneMikuTsumugiuta,            path = "data/music/background/[VOCALOID] Tsumugiuta - Hatsune Miku [Append Dark].ogg"}
    Tracks[TrackType.LILYMarieLuise]          = {type = TrackType.LILYMarieLuise,                   path = "data/music/background/[LILY] Marie-Luise (Romaji+English Subbed) +mp3.ogg"}
    Tracks[TrackType.BGCOutsideTheRealm]      = {type = TrackType.BGCOutsideTheRealm,               path = "data/music/background/[Stranger Things 2] Outside the Realm - Big Giant Circles feat. Ashly Burch & Malukah.ogg"}
    Tracks[TrackType.SporeGAUniverse]         = {type = TrackType.SporeGAUniverse,                  path = "data/music/background/01 - Spore Galactic Adventures Soundtrack - A Universe in Your Hands.ogg"}
    Tracks[TrackType.CnC3MourningHour]        = {type = TrackType.CnC3MourningHour,                 path = "data/music/background/01 Mourning Hour.ogg"}
    Tracks[TrackType.LiliaYSbg]               = {type = TrackType.LiliaYSbg,                        path = "data/music/background/01-lilia ys bg.ogg"}
    Tracks[TrackType.XenogearsMelkaba]        = {type = TrackType.XenogearsMelkaba,                 path = "data/music/background/01-melkaba bg.ogg"}
    --...
    Tracks[TrackType.BoukenDeshoDeshoHaruhi]    = {type = TrackType.BoukenDeshoDeshoHaruhi,         path = "data/music/background/The Melancholy of Haruhi Suzumiya Opening 1 Bouken Desho Desho Full Fan AMV.ogg"}
    Tracks[TrackType.OceanReturns]              = {type = TrackType.OceanReturns,                   path = "data/music/background/The Ocean Returns (Symphonic Metal Tribute to Steven Universe).ogg"}
    Tracks[TrackType.CrystalGemsPilot]          = {type = TrackType.CrystalGemsPilot,               path = "data/music/background/The Original Crystal Gem Theme (Steven Universe Pilot).ogg"}
    --Tracks[TrackType.]            = {type = TrackType.,                 path = "data/music/background/.ogg"}
    


                             
    This has the path to the actual tracks. Remember to include the .ogg file extension in your file paths! See also the comment at the end of my block of code. A little template I wrote for myself for convenience to add new music to the Tracks table quickly.


    Step 7.

    Let's create a table to put them into. We will add this table to the other existing tables in the Music Coordinator, so Avorion knows for which Mood to play them.

    local ShroobMusic = {
        TrackType.MikiSatellite,
        TrackType.GumiECHO,
        TrackType.MEWSchwarzerRegen,
        TrackType.NekomuraIrohaSandPlanet,
        TrackType.HatsuneMikuTsumugiuta,
        TrackType.LILYMarieLuise,
        TrackType.BGCOutsideTheRealm,
        TrackType.SporeGAUniverse,
        TrackType.CnC3MourningHour,
        TrackType.LiliaYSbg,
        TrackType.XenogearsMelkaba,
        --...
        TrackType.BoukenDeshoDeshoHaruhi,
        TrackType.OceanReturns,
        TrackType.CrystalGemsPilot
        
    }
    

     

    Step 8.

    Make a decision about which mood your tracks fit to, and put them in the appropriate function. I'm putting them in all of them myself, because I just want to hear my music in each Sector, and haven't made a decision yet about which ones to categorise into which Moods. I'll have to properly categorise them later, but for now, this is good enough for me.

    --SHROOBLORD::MUSIC --> JUST COMBINE MY MUSIC WITH ALL TRACK LISTS. I DON'T CARE ABOUT ASSIGNING A "MOOD" TO MY TRACKS RIGHT NOW. JUST WANNA HEAR MY MUSIC.
    TrackCollection.oldAll = TrackCollection.All
    function TrackCollection.All()
        local oldAllCollection = TrackCollection.oldAll()
        return combine(oldAllCollection, ShroobMusic)
    end
    	TrackCollection.oldHappy = TrackCollection.Happy
    function TrackCollection.Happy()
        local oldHappyCollection = TrackCollection.oldHappy()
        return combine(oldHappyCollection, ShroobMusic)
    end
    	TrackCollection.oldNeutral = TrackCollection.Neutral
    function TrackCollection.Neutral()
        local oldNeutralCollection = TrackCollection.oldNeutral()
        return combine(oldNeutralCollection, ShroobMusic)
    end
    	TrackCollection.oldMiddle = TrackCollection.Middle
    function TrackCollection.Middle()
        local oldMiddleCollection = TrackCollection.oldMiddle()
        return combine(oldMiddleCollection, ShroobMusic)
    end
    	TrackCollection.oldHappyNoParticle = TrackCollection.HappyNoParticle
    function TrackCollection.HappyNoParticle()
        local oldHappyNoParticleCollection = TrackCollection.oldHappyNoParticle()
        return combine(oldHappyNoParticleCollection, ShroobMusic)
    end
    	TrackCollection.oldCold = TrackCollection.Cold
    function TrackCollection.Cold()
        local oldColdCollection = TrackCollection.oldCold()
        return combine(oldColdCollection, ShroobMusic)
    end
    	TrackCollection.oldDesolate = TrackCollection.Desolate
    function TrackCollection.Desolate()
        local oldDesolateCollection = TrackCollection.oldDesolate()
        return combine(oldDesolateCollection, ShroobMusic)
    end
    	TrackCollection.oldMelancholic = TrackCollection.Melancholic
    function TrackCollection.Melancholic()
        local oldMelancholicCollection = TrackCollection.oldMelancholic()
        return combine(oldMelancholicCollection, ShroobMusic)
    end
    TrackCollection.oldHappyNeutral = TrackCollection.HappyNeutral
    function TrackCollection.HappyNeutral()
        local oldHappyNeutralCollection = TrackCollection.oldHappyNeutral()
        return combine(oldHappyNeutralCollection, ShroobMusic)
    end
    


    To find out which moods the Sectors pull from, you're gonna have to do some digging. Search for the TrackCollection. function inside all scripts in the data/scripts/sectors/ folder -- this defines which tables the game pulls from in order to build a music playlist for that Sector. Use a code editor like Visual Studio Code to quickly search within files inside a directory, or use my favourite search engine Everything by VoidTools (#notSponsored).


    [NOTE:]

    See how we're calling the old Vanilla music.lua functions before adding our own tracks on top of them? This is the proper way to do it. This means that if Boxelware adds more music, we won't replace anything. It also means you could install multiple music mods, if they all use this method, and all use unique keys for their music tracks.
    The combine() function is one Boxelware gave us. It's included in the vanilla music.lua to make our lives easier. Yay for mod-awareness!


    Step 9.

    Turn up the volume to 11.


    That's it! Your Background Music will now play in-game. ^^

     

    Step 10. (SERVER OWNERS)

    To allow Clients to use their music mod, you must add an entry to your server's modconfig.lua:

    --Client-Sided mods that are allowed by Server (optional mods)
    allowed =
    {
        --[[Shrooblord]]
        {id = "2090153967"},         --Shroob's Music Pack (CLIENT-ONLY; optional!)
        {id = "ShroobMusicPack"},     --Shroob's Music Pack (CLIENT-ONLY; optional!) -- alternate non-WS version
    }
    

            

    [NOTE:] You see me adding my Music Pack mod twice. Once for a Steam Workshop version, which I've shared with my friends, and one for a local version of the mod that has its id set to ShroobMusicPack (see documentation on a mod's modinfo.lua file to learn more).

     

    Combat Tracks

     

    The game plays any track from the data/music/combat/ folder. Just put your music there; it works the same like the Main Menu tracks.


    Boss Tracks

     

    Each Boss has a unique track that is defined in the data/music/special/ folder. When a Boss gets spawned and goes into attack mode, the Boss defines which track to play:


    The AI
    registerBoss(Uuid(), nil, nil, "data/music/special/ai.ogg")

    Don't worry about the other arguments -- they detail the Boss's Entity UUID index, health bar and shield bar colour values, but we're not interested in that right now. The good part is the fourth argument, which is the path to the music track.


    The Guardian
    registerBoss(Entity().index, nil, nil, "data/music/special/guardian.ogg")


    Not Specified / Generic Boss
    Bosses that don't specify a special track use the boss track data/music/special/boss.ogg.

     

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


    Have fun modding your game, and listening to some cool tunes!

    ~Shrooblord

     

    P.S.

    Note that the file paths described above can be any subdirectory of the Steam Avorion installation path you want! This means that if you package a mod with, for example, a cool new Boss to fight, you can give it custom music that sits in its own folder separate from the data/music folder, so that you don't even have to tell your users to drag the file into the appropriate folder; just "plug 'n play" and there you go!


    This system means adapting, a little, but it is more flexible than the old one, and you as a modder (or user) have more control. Excellent~!

     

    P.P.S.

    Here's my own music.lua in its entirety, in case you want a more complete example; also included as a downloadable attachment:

     
    				
    			package.path = package.path .. ";data/scripts/lib/?.lua"				
    			package.path = package.path .. ";data/scripts/?.lua"				
    			 				
    			newTrackType =				
    			{				
    			-- modders: reserve track numbers 15 - 1000 for additional future music								
    			    MikiSatellite           = 1001,				
    			    GumiECHO                = 1002,				
    			    MEWSchwarzerRegen       = 1003,				
    			    NekomuraIrohaSandPlanet = 1004,				
    			    HatsuneMikuTsumugiuta   = 1005,				
    			    LILYMarieLuise          = 1006,				
    			    BGCOutsideTheRealm      = 1007,				
    			    SporeGAUniverse         = 1008,				
    			    CnC3MourningHour        = 1009,				
    			    LiliaYSbg               = 1010,				
    			    XenogearsMelkaba        = 1011,				
    			    Castlevania3Prelude     = 1012,				
    			    SeventhSaga             = 1013,				
    			    Ecco2Title              = 1014,				
    			    EccoTitle               = 1015,				
    			    Xenosaga3Title          = 1016,				
    			    XenobladeThemeX         = 1017,				
    			    BlackAndWhiteIntro      = 1018,				
    			    MLPiTTitle              = 1019,				
    			    SporeGAAlienAbduction   = 1020,				
    			    CnC3Crystalline         = 1021,				
    			    CnCTSNoMercy            = 1022,				
    			    BlasterMaster           = 1023,				
    			    CrystalSprings          = 1024,				
    			    MotherEarth             = 1025,				
    			    SilentPalace            = 1026,				
    			    Tristram                = 1027,				
    			    BlackAndWhiteGood       = 1028,				
    			    MLPiTLoadMenu           = 1029,				
    			    CnCTSIndustrial         = 1030,				
    			    FieldBG                 = 1031,				
    			    BlackAndWhiteNeutral    = 1032,				
    			    MLPiTIntro              = 1033,				
    			    SporeGAAncientKingdom   = 1034,				
    			    ChrisBischoffGhostShip  = 1035,				
    			    CelcetaSeaOfTrees       = 1036,				
    			    BlueControl             = 1037,				
    			    LAPDFCGriffithPark      = 1038,				
    			    LAPDFCVeniceBeach       = 1039,				
    			    LAPDFCHellsGatePrison   = 1040,				
    			    LAPDFCStudioCity        = 1041,				
    			    LAPDFCLAXSpaceport      = 1042,				
    			    LAPDFCLongBeach         = 1043,				
    			    LAPDFCUrbanJungle       = 1044,				
    			 				
    			    AloneTogether           = 1045,				
    			    BadApple                = 1046,				
    			    BadAppleEN              = 1047,				
    			 				
    			    MosaicRole              = 1049,				
    			    DropTheStrawberry       = 1050,				
    			    LAPDFCMainMenu          = 1051,				
    			    GodKnowsHaruhi          = 1052,				
    			    IAmLapisLazuli          = 1053,				
    			    Egao                    = 1054,				
    			    LMDMVIYH                = 1055,				
    			    LoveIsWar               = 1056,				
    			    LoveLikeYou             = 1057,				
    			    ForADeadGirl            = 1058,				
    			    MoroseMakeBelieve       = 1059,				
    			    NetsujouNoSpectrum      = 1060,				
    			    OverlordOP              = 1061,				
    			    Pearl                   = 1062,				
    			    PilencePee              = 1063,				
    			    PlayingEveryNoteOnce    = 1064,				
    			    StrongInTheRealWay      = 1065,				
    			    YBLMAILBOY              = 1066,				
    			    ItsOverIsntIt           = 1067,				
    			    WeAreTheCrystalGems     = 1068,				
    			    StrangerThingsEulogy    = 1069,				
    			    StrangerThingsTitle     = 1070,				
    			    StrangerThings2Return   = 1071,				
    			    StrangerThingsKids      = 1072,				
    			 				
    			    TarboyTwosAParty        = 1073,				
    			    SteinsGateUrd           = 1074,				
    			    utanlands               = 1075,				
    			    vetr                    = 1076,				
    			    SGWalkingOnSleeping     = 1077,				
    			    SUSMTWeAreTheCrystalGems= 1078,				
    			    WintergatanMarbleMachine= 1079,				
    			    SteinsGateYanagibayashi = 1080,				
    			    OverlordMYTHANDROIDHYDRA= 1081,				
    			    Eve                     = 1082,				
    			    ChivalryIdentity        = 1083,				
    			 				
    			    R2BtSoRaL               = 1084,				
    			    R2DarkSwamp             = 1085,				
    			    R2EnteringThePirateShip = 1086,				
    			    R2FairyGlade            = 1087,				
    			    R2FlowerRide            = 1088,				
    			    R2GloboxMyFriend        = 1089,				
    			    R2IronMountains         = 1090,				
    			    R2Ly                    = 1091,				
    			    R2Prologue              = 1092,				
    			    R2Bayou1                = 1093,				
    			    R2Bayou2                = 1094,				
    			    R2Canopy                = 1095,				
    			    R2CaveOfBadDreams       = 1096,				
    			    R2MarshesOfAwakening    = 1097,				
    			    R2Marshlands            = 1098,				
    			    R2Precipice             = 1099,				
    			    R2BtSoRaL               = 1100,				
    			    R2SoRaF                 = 1101,				
    			    R2WalkOfLife            = 1102,				
    			    R2WoodsOfLight          = 1103,				
    			    R2TombOfAncients        = 1104,				
    			    R2WhaleBay              = 1105,				
    			    Brother                 = 1106,				
    			    BoukenDeshoDeshoHaruhi  = 1107,				
    			    OceanReturns            = 1108,				
    			    CrystalGemsPilot        = 1109							
    			}				
    			 				
    			--insert our new tracks into the old TrackType table				
    			for k, v in pairs(newTrackType) do				
    			    TrackType[k] = v				
    			end				
    			
    		 				
    			--[[ ** VANILLA ** -- DO NOT OVERWRITE				
    			Tracks = {}				
    			Tracks[TrackType.Particle] = {type = TrackType.Particle, path = "data/music/background/particle.ogg"}				
    			Tracks[TrackType.BlindingNebula] = {type = TrackType.BlindingNebula, path = "data/music/background/blinding_nebula.ogg"}				
    			Tracks[TrackType.Exhale] = {type = TrackType.Exhale, path = "data/music/background/exhale.ogg"}				
    			Tracks[TrackType.Float] = {type = TrackType.Float, path = "data/music/background/float.ogg"}				
    			Tracks[TrackType.HappilyLost] = {type = TrackType.HappilyLost, path = "data/music/background/happily_lost.ogg"}				
    			Tracks[TrackType.Beyond] = {type = TrackType.Beyond, path = "data/music/background/beyond.ogg"}				
    			Tracks[TrackType.InSight] = {type = TrackType.InSight, path = "data/music/background/in_sight.ogg"}				
    			Tracks[TrackType.Befog] = {type = TrackType.Befog, path = "data/music/background/befog.ogg"}				
    			Tracks[TrackType.LightDance] = {type = TrackType.LightDance, path = "data/music/background/light_dance.ogg"}				
    			Tracks[TrackType.LongForgotten] = {type = TrackType.LongForgotten, path = "data/music/background/long_forgotten.ogg"}				
    			Tracks[TrackType.Interim] = {type = TrackType.Interim, path = "data/music/background/interim.ogg"}				
    			Tracks[TrackType.Impact] = {type = TrackType.Impact, path = "data/music/background/impact.ogg"}				
    			Tracks[TrackType.Found] = {type = TrackType.Found, path = "data/music/background/found.ogg"}				
    			Tracks[TrackType.BehindStorms] = {type = TrackType.BehindStorms, path = "data/music/background/behind_storms.ogg"}				
    			]]--				
    			
    		 				
    			--"data/music/background/.ogg"				
    			--Tracks[TrackType.x]           = {type = x,           path = y}				
    			 						
    			Tracks[TrackType.MikiSatellite]           = {type = TrackType.MikiSatellite,                    path = "data/music/background/[MMD] Satellite - Miki.ogg"}				
    			Tracks[TrackType.GumiECHO]                = {type = TrackType.GumiECHO,                         path = "data/music/background/ECHO [Gumi English].ogg"}				
    			Tracks[TrackType.MEWSchwarzerRegen]       = {type = TrackType.MEWSchwarzerRegen,                path = "data/music/background/MEW - Schwarzer Regen.ogg"}				
    			Tracks[TrackType.NekomuraIrohaSandPlanet] = {type = TrackType.NekomuraIrohaSandPlanet,          path = "data/music/background/Nekomura Iroha V4 Sand Planet.ogg"}				
    			Tracks[TrackType.HatsuneMikuTsumugiuta]   = {type = TrackType.HatsuneMikuTsumugiuta,            path = "data/music/background/[VOCALOID] Tsumugiuta - Hatsune Miku [Append Dark].ogg"}				
    			Tracks[TrackType.LILYMarieLuise]          = {type = TrackType.LILYMarieLuise,                   path = "data/music/background/[LILY] Marie-Luise (Romaji+English Subbed) +mp3.ogg"}				
    			Tracks[TrackType.BGCOutsideTheRealm]      = {type = TrackType.BGCOutsideTheRealm,               path = "data/music/background/[Stranger Things 2] Outside the Realm - Big Giant Circles feat. Ashly Burch & Malukah.ogg"}				
    			Tracks[TrackType.SporeGAUniverse]         = {type = TrackType.SporeGAUniverse,                  path = "data/music/background/01 - Spore Galactic Adventures Soundtrack - A Universe in Your Hands.ogg"}				
    			Tracks[TrackType.CnC3MourningHour]        = {type = TrackType.CnC3MourningHour,                 path = "data/music/background/01 Mourning Hour.ogg"}				
    			Tracks[TrackType.LiliaYSbg]               = {type = TrackType.LiliaYSbg,                        path = "data/music/background/01-lilia ys bg.ogg"}				
    			Tracks[TrackType.XenogearsMelkaba]        = {type = TrackType.XenogearsMelkaba,                 path = "data/music/background/01-melkaba bg.ogg"}				
    			Tracks[TrackType.Castlevania3Prelude]     = {type = TrackType.Castlevania3Prelude,              path = "data/music/background/01-prelude-intro-castlevania3 bg.ogg"}				
    			Tracks[TrackType.SeventhSaga]             = {type = TrackType.SeventhSaga,                      path = "data/music/background/01-the-7th-saga bg.ogg"}				
    			Tracks[TrackType.Ecco2Title]              = {type = TrackType.Ecco2Title,                       path = "data/music/background/01-title ecco 2 bg.ogg"}				
    			Tracks[TrackType.EccoTitle]               = {type = TrackType.EccoTitle,                        path = "data/music/background/01-title ecco bg.ogg"}				
    			Tracks[TrackType.Xenosaga3Title]          = {type = TrackType.Xenosaga3Title,                   path = "data/music/background/01-title-screen xenosaga3 bg.ogg"}				
    			Tracks[TrackType.XenobladeThemeX]         = {type = TrackType.XenobladeThemeX,                  path = "data/music/background/1-02 Theme X xenoblade bg remix.ogg"}				
    			Tracks[TrackType.BlackAndWhiteIntro]      = {type = TrackType.BlackAndWhiteIntro,               path = "data/music/background/002 - Black & White - Introduction music.ogg"}				
    			Tracks[TrackType.MLPiTTitle]              = {type = TrackType.MLPiTTitle,                       path = "data/music/background/002 title.ogg"}				
    			Tracks[TrackType.SporeGAAlienAbduction]   = {type = TrackType.SporeGAAlienAbduction,            path = "data/music/background/02 - Spore Galactic Adventures Soundtrack - Alien Abduction.ogg"}				
    			Tracks[TrackType.CnC3Crystalline]         = {type = TrackType.CnC3Crystalline,                  path = "data/music/background/02 Crystalline.ogg"}				
    			Tracks[TrackType.CnCTSNoMercy]            = {type = TrackType.CnCTSNoMercy,                     path = "data/music/background/02. No Mercy.ogg"}				
    			Tracks[TrackType.BlasterMaster]           = {type = TrackType.BlasterMaster,                    path = "data/music/background/02.-blaster-master-stage-1 bg.ogg"}				
    			Tracks[TrackType.CrystalSprings]          = {type = TrackType.CrystalSprings,                   path = "data/music/background/02-crystal-springs bg.ogg"}				
    			Tracks[TrackType.MotherEarth]             = {type = TrackType.MotherEarth,                      path = "data/music/background/02-mother-earth bg.ogg"}				
    			Tracks[TrackType.SilentPalace]            = {type = TrackType.SilentPalace,                     path = "data/music/background/02-silent-palace bg.ogg"}				
    			Tracks[TrackType.Tristram]                = {type = TrackType.Tristram,                         path = "data/music/background/02-tristram bg.ogg"}				
    			Tracks[TrackType.BlackAndWhiteGood]       = {type = TrackType.BlackAndWhiteGood,                path = "data/music/background/003 - Black & White music - Good.ogg"}				
    			Tracks[TrackType.MLPiTLoadMenu]           = {type = TrackType.MLPiTLoadMenu,                    path = "data/music/background/003 load menu.ogg"}				
    			Tracks[TrackType.CnCTSIndustrial]         = {type = TrackType.CnCTSIndustrial,                  path = "data/music/background/03. Industrial.ogg"}				
    			Tracks[TrackType.FieldBG]                 = {type = TrackType.FieldBG,                          path = "data/music/background/03-field bg.ogg"}				
    			Tracks[TrackType.BlackAndWhiteNeutral]    = {type = TrackType.BlackAndWhiteNeutral,             path = "data/music/background/004 - Black & White music - Neutral.ogg"}				
    			Tracks[TrackType.MLPiTIntro]              = {type = TrackType.MLPiTIntro,                       path = "data/music/background/004 intro.ogg"}				
    			Tracks[TrackType.SporeGAAncientKingdom]   = {type = TrackType.SporeGAAncientKingdom,            path = "data/music/background/04 - Spore Galactic Adventures Soundtrack - Ancient Kingdom (1&2).ogg"}				
    			Tracks[TrackType.ChrisBischoffGhostShip]  = {type = TrackType.ChrisBischoffGhostShip,           path = "data/music/background/04.-christopher-bischoff-ghost-ship bg.ogg"}				
    			Tracks[TrackType.CelcetaSeaOfTrees]       = {type = TrackType.CelcetaSeaOfTrees,                path = "data/music/background/04-celceta-the-sea-of-trees bg.ogg"}				
    			Tracks[TrackType.BlueControl]             = {type = TrackType.BlueControl,                      path = "data/music/background/04 Blue Control.ogg"}				
    			 				
    			Tracks[TrackType.LAPDFCGriffithPark]        = {type = TrackType.LAPDFCGriffithPark,             path = "data/music/background/Track 1 - Griffith Park - Future Cop LAPD.ogg"}				
    			Tracks[TrackType.LAPDFCVeniceBeach]         = {type = TrackType.LAPDFCVeniceBeach,              path = "data/music/background/Track 4 - Venice Beach - Future Cop LAPD.ogg"}				
    			Tracks[TrackType.LAPDFCHellsGatePrison]     = {type = TrackType.LAPDFCHellsGatePrison,          path = "data/music/background/Track 5 - Hells Gate Prison - Future Cop LAPD.ogg"}				
    			Tracks[TrackType.LAPDFCStudioCity]          = {type = TrackType.LAPDFCStudioCity,               path = "data/music/background/Track 6 - Studio City - Future Cop LAPD.ogg"}				
    			Tracks[TrackType.LAPDFCLAXSpaceport]        = {type = TrackType.LAPDFCLAXSpaceport,             path = "data/music/background/Track 7 - LAX Spaceport - Future Cop LAPD.ogg"}				
    			Tracks[TrackType.LAPDFCLongBeach]           = {type = TrackType.LAPDFCLongBeach,                path = "data/music/background/Track 8 - Long Beach - Future Cop LAPD.ogg"}				
    			Tracks[TrackType.LAPDFCUrbanJungle]         = {type = TrackType.LAPDFCUrbanJungle,              path = "data/music/background/Track 11 - Urban Jungle - Future Cop LAPD.ogg"}				
    			Tracks[TrackType.LAPDFCMainMenu]            = {type = TrackType.LAPDFCMainMenu,                 path = "data/music/background/Future Cop - Menu Theme [HD].ogg"}				
    			 				
    			Tracks[TrackType.BadApple]                  = {type = TrackType.BadApple,                       path = "data/music/background/Bad Apple!!   Lyrics English Subtitles & Japanese Kanji & Romaji ENG SUB.ogg"}				
    			Tracks[TrackType.BadAppleEN]                = {type = TrackType.BadAppleEN,                     path = "data/music/background/Bad Apple!! (English Cover) [JubyPhonic].ogg"}				
    			Tracks[TrackType.MosaicRole]                = {type = TrackType.MosaicRole,                     path = "data/music/background/DECO_27 - Mosaic Role feat. GUMI.ogg"}				
    			 				
    			Tracks[TrackType.AloneTogether]             = {type = TrackType.AloneTogether,                  path = "data/music/background/Alone Together (Symphonic Metal Tribute to Steven Universe).ogg"}				
    			Tracks[TrackType.DropTheStrawberry]         = {type = TrackType.DropTheStrawberry,              path = "data/music/background/Drop the Strawberry (Symphonic Metal Tribute to Steven Universe).ogg"}				
    			Tracks[TrackType.IAmLapisLazuli]            = {type = TrackType.IAmLapisLazuli,                 path = "data/music/background/I Am Lapis Lazuli (Symphonic Metal Tribute to Steven Universe).ogg"}				
    			Tracks[TrackType.LMDMVIYH]                  = {type = TrackType.LMDMVIYH,                       path = "data/music/background/Let Me Drive My Van Into Your Heart (Symphonic Metal Tribute to Steven Universe).ogg"}				
    			Tracks[TrackType.LoveLikeYou]               = {type = TrackType.LoveLikeYou,                    path = "data/music/background/Love Like You (Symphonic Metal Tribute to Steven Universe).ogg"}				
    			Tracks[TrackType.Pearl]                     = {type = TrackType.Pearl,                          path = "data/music/background/Pearl (Symphonic Metal Tribute to Steven Universe).ogg"}				
    			Tracks[TrackType.StrongInTheRealWay]        = {type = TrackType.StrongInTheRealWay,             path = "data/music/background/Steven Universe - 'Strong In the Real Way' Song.ogg"}				
    			Tracks[TrackType.YBLMAILBOY]                = {type = TrackType.YBLMAILBOY,                     path = "data/music/background/Steven Universe - You Both Love Me And I Love Both Of You- (HD).ogg"}				
    			Tracks[TrackType.ItsOverIsntIt]             = {type = TrackType.ItsOverIsntIt,                  path = "data/music/background/Steven Universe -It's Over Isn't It- (HD).ogg"}				
    			Tracks[TrackType.WeAreTheCrystalGems]       = {type = TrackType.WeAreTheCrystalGems,            path = "data/music/background/Steven Universe Soundtrack - We Are the Crystal Gems (Full Song) [Raw Audio].ogg"}				
    			 				
    			Tracks[TrackType.GodKnowsHaruhi]            = {type = TrackType.GodKnowsHaruhi,                 path = "data/music/background/God knows... The Melancholy of Haruhi Suzumiya.ogg"}				
    			Tracks[TrackType.Egao]                      = {type = TrackType.Egao,                           path = "data/music/background/Ikimono Gakari - Egao [With Lyrics].ogg"}				
    			Tracks[TrackType.LoveIsWar]                 = {type = TrackType.LoveIsWar,                      path = "data/music/background/Love Is War (Miku Hatsune) (Original).ogg"}				
    			Tracks[TrackType.ForADeadGirl]              = {type = TrackType.ForADeadGirl,                   path = "data/music/background/Megurine Luka - For a dead girl+.ogg"}				
    			Tracks[TrackType.MoroseMakeBelieve]         = {type = TrackType.MoroseMakeBelieve,              path = "data/music/background/Mew - Morose Make-Believe.ogg"}				
    			Tracks[TrackType.NetsujouNoSpectrum]        = {type = TrackType.NetsujouNoSpectrum,             path = "data/music/background/Nanatsu no Taizai OP - Netsujou no Spectrum [Lyrics].ogg"}				
    			Tracks[TrackType.OverlordOP]                = {type = TrackType.OverlordOP,                     path = "data/music/background/Overlord - Opening.ogg"}				
    			Tracks[TrackType.PilencePee]                = {type = TrackType.PilencePee,                     path = "data/music/background/Pilence pee - The Great Voices of Bulgaria, Conductor Ilia Mihaylov.ogg"}				
    			Tracks[TrackType.PlayingEveryNoteOnce]      = {type = TrackType.PlayingEveryNoteOnce,           path = "data/music/background/Playing Every Note Exactly Once.ogg"}				
    			 				
    			Tracks[TrackType.StrangerThingsEulogy]      = {type = TrackType.StrangerThingsEulogy,           path = "data/music/background/Stranger Things - Eulogy [ OST ] Soundtrack.ogg"}				
    			Tracks[TrackType.StrangerThingsTitle]       = {type = TrackType.StrangerThingsTitle,            path = "data/music/background/Stranger Things _ Title Sequence [HD] _ Netflix.ogg"}				
    			Tracks[TrackType.StrangerThings2Return]     = {type = TrackType.StrangerThings2Return,          path = "data/music/background/Stranger Things 2 Soundtrack_ The Return.ogg"}				
    			Tracks[TrackType.StrangerThingsKids]        = {type = TrackType.StrangerThingsKids,             path = "data/music/background/Stranger Things ORIGINAL Sountrack Kids mp3.ogg"}				
    			 				
    			Tracks[TrackType.TarboyTwosAParty]          = {type = TrackType.TarboyTwosAParty,               path = "data/music/background/Two's a Party - Hania Zdunek [Tarboy OST] [SotD].ogg"}				
    			Tracks[TrackType.SteinsGateUrd]             = {type = TrackType.SteinsGateUrd,                  path = "data/music/background/Urd [Steins;Gate OST].ogg"}				
    			Tracks[TrackType.utanlands]                 = {type = TrackType.utanlands,                      path = "data/music/background/útanlands.ogg"}				
    			Tracks[TrackType.vetr]                      = {type = TrackType.vetr,                           path = "data/music/background/vetr.ogg"}				
    			Tracks[TrackType.SGWalkingOnSleeping]       = {type = TrackType.SGWalkingOnSleeping,            path = "data/music/background/Walking on sleeping [Steins;Gate OST].ogg"}				
    			Tracks[TrackType.SUSMTWeAreTheCrystalGems]  = {type = TrackType.SUSMTWeAreTheCrystalGems,       path = "data/music/background/We Are the Crystal Gems (Symphonic Metal Tribute to Steven Universe).ogg"}				
    			Tracks[TrackType.WintergatanMarbleMachine]  = {type = TrackType.WintergatanMarbleMachine,       path = "data/music/background/Wintergatan - Marble Machine (music instrument using 2000 marbles).ogg"}				
    			Tracks[TrackType.SteinsGateYanagibayashi]   = {type = TrackType.SteinsGateYanagibayashi,        path = "data/music/background/Yanagibayashi [Steins;Gate OST].ogg"}				
    			Tracks[TrackType.OverlordMYTHANDROIDHYDRA]  = {type = TrackType.OverlordMYTHANDROIDHYDRA,       path = "data/music/background/Overlord Season 2 Ending Full MYTH & ROID - HYDRA (ENG SUB).ogg"}				
    			Tracks[TrackType.Eve]                       = {type = TrackType.Eve,                            path = "data/music/background/Nonsense Literature - Eve  MV.ogg"}				
    			Tracks[TrackType.ChivalryIdentity]          = {type = TrackType.ChivalryIdentity,               path = "data/music/background/Identity Chivalry of a Failed Knight OP.ogg"}				
    			 				
    			Tracks[TrackType.R2BtSoRaL]                 = {type = TrackType.R2BtSoRaL,                      path = "data/music/background/R2 - Beneath the Sanctuary of Rock and Lava.ogg"}				
    			Tracks[TrackType.R2DarkSwamp]               = {type = TrackType.R2DarkSwamp,                    path = "data/music/background/R2 - Dark Swamp.ogg"}				
    			Tracks[TrackType.R2EnteringThePirateShip]   = {type = TrackType.R2EnteringThePirateShip,        path = "data/music/background/R2 - Entering the Pirate Ship.ogg"}				
    			Tracks[TrackType.R2FairyGlade]              = {type = TrackType.R2FairyGlade,                   path = "data/music/background/R2 - Fairy Glade.ogg"}				
    			Tracks[TrackType.R2FlowerRide]              = {type = TrackType.R2FlowerRide,                   path = "data/music/background/R2 - Flower Ride.ogg"}				
    			Tracks[TrackType.R2GloboxMyFriend]          = {type = TrackType.R2GloboxMyFriend,               path = "data/music/background/R2 - Globox My Friend.ogg"}				
    			Tracks[TrackType.R2IronMountains]           = {type = TrackType.R2IronMountains,                path = "data/music/background/R2 - Iron Mountains.ogg"}				
    			Tracks[TrackType.R2Ly]                      = {type = TrackType.R2Ly,                           path = "data/music/background/R2 - Ly.ogg"}				
    			Tracks[TrackType.R2Prologue]                = {type = TrackType.R2Prologue,                     path = "data/music/background/R2 - Prologue.ogg"}				
    			Tracks[TrackType.R2Bayou1]                  = {type = TrackType.R2Bayou1,                       path = "data/music/background/R2 - The Bayou Part 1.ogg"}				
    			Tracks[TrackType.R2Bayou2]                  = {type = TrackType.R2Bayou2,                       path = "data/music/background/R2 - The Bayou Part 2.ogg"}				
    			Tracks[TrackType.R2Canopy]                  = {type = TrackType.R2Canopy,                       path = "data/music/background/R2 - The Canopy.ogg"}				
    			Tracks[TrackType.R2CaveOfBadDreams]         = {type = TrackType.R2CaveOfBadDreams,              path = "data/music/background/R2 - The Cave of Bad Dreams.ogg"}				
    			Tracks[TrackType.R2MarshesOfAwakening]      = {type = TrackType.R2MarshesOfAwakening,           path = "data/music/background/R2 - The Marshes of Awakening.ogg"}				
    			Tracks[TrackType.R2Marshlands]              = {type = TrackType.R2Marshlands,                   path = "data/music/background/R2 - The Marshlands.ogg"}				
    			Tracks[TrackType.R2Precipice]               = {type = TrackType.R2Precipice,                    path = "data/music/background/R2 - The Precipice.ogg"}				
    			Tracks[TrackType.R2BtSoRaL]                 = {type = TrackType.R2BtSoRaL,                      path = "data/music/background/R2 - The Sanctuary of Rock and Lava.ogg"}				
    			Tracks[TrackType.R2SoRaF]                   = {type = TrackType.R2SoRaF,                        path = "data/music/background/R2 - The Sanctuary of Stone and Fire.ogg"}				
    			Tracks[TrackType.R2WalkOfLife]              = {type = TrackType.R2WalkOfLife,                   path = "data/music/background/R2 - The Walk of Life.ogg"}				
    			Tracks[TrackType.R2WoodsOfLight]            = {type = TrackType.R2WoodsOfLight,                 path = "data/music/background/R2 - The Woods of Light.ogg"}				
    			Tracks[TrackType.R2TombOfAncients]          = {type = TrackType.R2TombOfAncients,               path = "data/music/background/R2 - Tomb of Ancients.ogg"}				
    			Tracks[TrackType.R2WhaleBay]                = {type = TrackType.R2WhaleBay,                     path = "data/music/background/R2 - Whale Bay.ogg"}				
    			 				
    			Tracks[TrackType.Brother]                   = {type = TrackType.Brother,                        path = "data/music/background/Stuck In The Sound  - Brother [Official Video].ogg"}				
    			Tracks[TrackType.BoukenDeshoDeshoHaruhi]    = {type = TrackType.BoukenDeshoDeshoHaruhi,         path = "data/music/background/The Melancholy of Haruhi Suzumiya Opening 1 Bouken Desho Desho Full Fan AMV.ogg"}				
    			Tracks[TrackType.OceanReturns]              = {type = TrackType.OceanReturns,                   path = "data/music/background/The Ocean Returns (Symphonic Metal Tribute to Steven Universe).ogg"}				
    			Tracks[TrackType.CrystalGemsPilot]          = {type = TrackType.CrystalGemsPilot,               path = "data/music/background/The Original Crystal Gem Theme (Steven Universe Pilot).ogg"}				
    			 				
    			--Tracks[TrackType.]            = {type = TrackType.,                 path = "data/music/background/.ogg"}								
    			 				
    			--TrackCollection = {}				
    			 				
    			local ShroobMusic = {							
    			    TrackType.MikiSatellite,				
    			    TrackType.GumiECHO,				
    			    TrackType.MEWSchwarzerRegen,				
    			    TrackType.NekomuraIrohaSandPlanet,				
    			    TrackType.HatsuneMikuTsumugiuta,				
    			    TrackType.LILYMarieLuise,				
    			    TrackType.BGCOutsideTheRealm,				
    			    TrackType.SporeGAUniverse,				
    			    TrackType.CnC3MourningHour,				
    			    TrackType.LiliaYSbg,				
    			    TrackType.XenogearsMelkaba,				
    			    TrackType.Castlevania3Prelude,				
    			    TrackType.SeventhSaga,				
    			    TrackType.Ecco2Title,				
    			    TrackType.EccoTitle,				
    			    TrackType.Xenosaga3Title,				
    			    TrackType.XenobladeThemeX,				
    			    TrackType.BlackAndWhiteIntro,				
    			    TrackType.MLPiTTitle,				
    			    TrackType.SporeGAAlienAbduction,				
    			    TrackType.CnC3Crystalline,				
    			    TrackType.CnCTSNoMercy,				
    			    TrackType.BlasterMaster,				
    			    TrackType.CrystalSprings,				
    			    TrackType.MotherEarth,				
    			    TrackType.SilentPalace,				
    			    TrackType.Tristram,				
    			    TrackType.BlackAndWhiteGood,				
    			    TrackType.MLPiTLoadMenu,				
    			    TrackType.CnCTSIndustrial,				
    			    TrackType.FieldBG,				
    			    TrackType.BlackAndWhiteNeutral,				
    			    TrackType.MLPiTIntro,				
    			    TrackType.SporeGAAncientKingdom,				
    			    TrackType.ChrisBischoffGhostShip,				
    			    TrackType.CelcetaSeaOfTrees,				
    			    TrackType.BlueControl,				
    			    TrackType.LAPDFCGriffithPark,				
    			    TrackType.LAPDFCVeniceBeach,				
    			    TrackType.LAPDFCHellsGatePrison,				
    			    TrackType.LAPDFCStudioCity,				
    			    TrackType.LAPDFCLAXSpaceport,				
    			    TrackType.LAPDFCLongBeach,				
    			    TrackType.LAPDFCUrbanJungle,				
    			    TrackType.LAPDFCMainMenu,				
    			    TrackType.TarboyTwosAParty,				
    			    TrackType.SteinsGateUrd,				
    			    TrackType.utanlands,				
    			    TrackType.vetr,				
    			    TrackType.SGWalkingOnSleeping,				
    			    TrackType.SUSMTWeAreTheCrystalGems,				
    			    TrackType.WintergatanMarbleMachine,				
    			    TrackType.SteinsGateYanagibayashi,				
    			    TrackType.OverlordMYTHANDROIDHYDRA,				
    			    TrackType.Eve,				
    			    TrackType.ChivalryIdentity,				
    			 				
    			    TrackType.AloneTogether,				
    			    TrackType.BadApple,				
    			    TrackType.BadAppleEN,				
    			 				
    			    TrackType.MosaicRole,				
    			    TrackType.DropTheStrawberry,				
    			    TrackType.LAPDFCMainMenu,				
    			    TrackType.GodKnowsHaruhi,				
    			    TrackType.IAmLapisLazuli,				
    			    TrackType.Egao,				
    			    TrackType.LMDMVIYH,				
    			    TrackType.LoveIsWar,				
    			    TrackType.LoveLikeYou,				
    			    TrackType.ForADeadGirl,				
    			    TrackType.MoroseMakeBelieve,				
    			    TrackType.NetsujouNoSpectrum,				
    			    TrackType.OverlordOP,				
    			    TrackType.Pearl,				
    			    TrackType.PilencePee,				
    			    TrackType.PlayingEveryNoteOnce,				
    			    TrackType.StrongInTheRealWay,				
    			    TrackType.YBLMAILBOY,				
    			    TrackType.ItsOverIsntIt,				
    			    TrackType.WeAreTheCrystalGems,				
    			    TrackType.StrangerThingsEulogy,				
    			    TrackType.StrangerThingsTitle,				
    			    TrackType.StrangerThings2Return,				
    			    TrackType.StrangerThingsKids,				
    			 				
    			    TrackType.R2BtSoRaL,				
    			    TrackType.R2DarkSwamp,				
    			    TrackType.R2EnteringThePirateShip,				
    			    TrackType.R2FairyGlade,				
    			    TrackType.R2FlowerRide,				
    			    TrackType.R2GloboxMyFriend,				
    			    TrackType.R2IronMountains,				
    			    TrackType.R2Ly,				
    			    TrackType.R2Prologue,				
    			    TrackType.R2Bayou1,				
    			    TrackType.R2Bayou2,				
    			    TrackType.R2Canopy,				
    			    TrackType.R2CaveOfBadDreams,				
    			    TrackType.R2MarshesOfAwakening,				
    			    TrackType.R2Marshlands,				
    			    TrackType.R2Precipice,				
    			    TrackType.R2BtSoRaL,				
    			    TrackType.R2SoRaF,				
    			    TrackType.R2WalkOfLife,				
    			    TrackType.R2WoodsOfLight,				
    			    TrackType.R2TombOfAncients,				
    			    TrackType.R2WhaleBay,				
    			    TrackType.Brother,				
    			    TrackType.BoukenDeshoDeshoHaruhi,				
    			    TrackType.OceanReturns,				
    			    TrackType.CrystalGemsPilot				
    			    								
    			}				
    			 				
    			-- Happy + Neutral + Middle -> All				
    			--SHROOBLORD::MUSIC --> JUST COMBINE MY MUSIC WITH ALL TRACK LISTS. I DON'T CARE ABOUT ASSIGNING A "MOOD" TO MY TRACKS RIGHT NOW. JUST WANNA HEAR MY MUSIC.				
    			TrackCollection.oldAll = TrackCollection.All				
    			function TrackCollection.All()				
    			    local oldAllCollection = TrackCollection.oldAll()				
    			    return combine(oldAllCollection, ShroobMusic)				
    			end				
    			 				
    			TrackCollection.oldHappy = TrackCollection.Happy				
    			function TrackCollection.Happy()				
    			    local oldHappyCollection = TrackCollection.oldHappy()				
    			    return combine(oldHappyCollection, ShroobMusic)				
    			end				
    			 				
    			TrackCollection.oldNeutral = TrackCollection.Neutral				
    			function TrackCollection.Neutral()				
    			    local oldNeutralCollection = TrackCollection.oldNeutral()				
    			    return combine(oldNeutralCollection, ShroobMusic)				
    			end				
    			 				
    			TrackCollection.oldMiddle = TrackCollection.Middle				
    			function TrackCollection.Middle()				
    			    local oldMiddleCollection = TrackCollection.oldMiddle()				
    			    return combine(oldMiddleCollection, ShroobMusic)				
    			end				
    			 				
    			TrackCollection.oldHappyNoParticle = TrackCollection.HappyNoParticle				
    			function TrackCollection.HappyNoParticle()				
    			    local oldHappyNoParticleCollection = TrackCollection.oldHappyNoParticle()				
    			    return combine(oldHappyNoParticleCollection, ShroobMusic)				
    			end				
    			 				
    			TrackCollection.oldCold = TrackCollection.Cold				
    			function TrackCollection.Cold()				
    			    local oldColdCollection = TrackCollection.oldCold()				
    			    return combine(oldColdCollection, ShroobMusic)				
    			end				
    			 				
    			TrackCollection.oldDesolate = TrackCollection.Desolate				
    			function TrackCollection.Desolate()				
    			    local oldDesolateCollection = TrackCollection.oldDesolate()				
    			    return combine(oldDesolateCollection, ShroobMusic)				
    			end				
    			 				
    			TrackCollection.oldMelancholic = TrackCollection.Melancholic				
    			function TrackCollection.Melancholic()				
    			    local oldMelancholicCollection = TrackCollection.oldMelancholic()				
    			    return combine(oldMelancholicCollection, ShroobMusic)				
    			end				
    			 				
    			TrackCollection.oldHappyNeutral = TrackCollection.HappyNeutral				
    			function TrackCollection.HappyNeutral()				
    			    local oldHappyNeutralCollection = TrackCollection.oldHappyNeutral()				
    			    return combine(oldHappyNeutralCollection, ShroobMusic)				
    			end				
    			 				
    			

     

    music.lua

  14. Excellent. I love good ol' lengthy discussions about gameplay and balance. This used to be my bread and butter back when Spore was still relevant.

     

    Let's break it down.

     

    • Loaded sectors
      • Almost-realtime sim

    Actually, no. It's not almost-realtime; it's at about 1/3rd of regular execution speed. I know because I've been doing some synch experiments because of a mod I'm working on. For every game tick in a loaded Sector without player presence, a Sector with player activity ticks 3 times.

     

    • Unloaded sectors
      • Ships can move abstractly with vector-based movement, allowing action times to be calculated without anything "ticking" or any space be "drawn"
      • Ships can trade and move on a sector per sector basis
      • Ships can mine and scavenge: tally of asteroid resources is precalculated, substracted from, and asteroids/wrecks are destroyed when sector is loaded.
      • AI ships can battle in a crude simulation, though the sector will load with priority. When player ships are engaged, the sector auto-loads.

    OK, before I get into things I do want to point out that I fundamentally agree with you: it would be awesome if we had some "passive" Galaxy stuff going on all over the place; that things were still "happening" when you're not around. Right now, it feels very much like actors moving into position on a stage for the player to enjoy: putting on a show when they're around, and fading into non-existence when they're not. That said, however...

     

    The point of not-loaded Sectors is for performance. To have an entire Galaxy's worth of Sectors doing ... stuff ... will take some clever programming to make sure your CPU doesn't melt. You mention quite complex behaviour here that would all be very cool to have, but also mention that things "don't tick". Those concepts are incompatible with each other: to have a ship perform complex behaviour such as movement, but more specifically interaction with other objects ike mining, trading, etc., something must be ticking, otherwise there would be nothing to be calling behaviour on. So to say "it just doesn't tick" doesn't work. That's ... that's magic.

     

    I do offer an alternative though: integration. In Mathematics, you can use integration to precisely interpolate the change of some variables over some other variable, for example -- most notably for our application -- over time.

     

    We would need a more global "Galaxy Actor" or "Galaxy Entity" that would be constantly monitoring the Galaxy as a whole, loading in distinct "chunks" of Galaxy for a moment to do calculations, then leaving them alone to be non-loaded again, rather than having a per-Sector tick as we currently have, where each individual Sector is its own, free-standing ticking 'entity'.

     

    This Galaxy Actor could take a whole region of space -- say 16 Sectors for for the sake of concept -- and do some mean integration over the whole region, taking all Sectors in that chunk, checking to see which have Faction activity in them, making some balance-informed decisions about what those Factions will be doing for the next X units of time, and calculating how that might change the Sectors in that timeframe. This would essentially generate a "formula" that we can integrate over to "slide towards" that pre-calculated end-state over the time it takes from one Galaxy Chunk to be loaded to the next.

     

    Of course, this does mean that we either need to

    • pre-generate all Sectors in the Galaxy at the start of the game and/or do this whenever the Galaxy Actor loads that chunk of the Galaxy for the very first time; OR
    • make approximations of what would be in which Sector using some kind of Galaxy Chunk average and perform calculations based on that.

     

    The benefit to this approach is that you don't need to model or tick any individual ships, but instead move along and modify each Sector on a more global, 'zoomed out' level. You're essentially modelling a simulation of what would happen if a player was around, except you're just calculating the outcome, and not necessarily doing any of the steps in-between such as moving ships, calculating individual pieces of cargo etc., collision detection, etc. etc..

     

    Very Dumb: Will use useless hull/armor blocks.
    Lol reminds me of the magic orcs flying through space going faster than the speed of light powered only by their imagination that that's what they would be doing. Painting the ship red makes the ship go faster because they think it does. Unintentionally they are the most powerful wizards and psionic masters of the Universe; if only they realised their ability. x)

     

     

    I don't actually have much to add about the Faction balance ideas, other than that it would be very nice indeed to see Factions adopt unique personalities based on all those factors, yes.

×
×
  • Create New...