Jump to content

[Request] Universal Add/Remove Mods App


Recommended Posts

Bear with me for this is a pain day...

 

I've come up with a concept that would REALLY help the Mod community, but the only tool I have to help is the logic of the system to be created. The concept is to create a rather simple UI to allow the user to Add/Remove specific Mods at will. So many Want to use mods, but aren't sure how they work or how to safely go about adding them. On top of that, what do you do if you change your mind? Most of the mods don't have simple file lists and you end up having to wipe out the data folder to "reset" your mods. Mind you, I'd like to start with the Simple version of this, but a more advanced version would have features like the app knowing what mods are there and be able to remove specific ones by using what it knows about your chosen mod list.

 

Installing the Add/Remove App:

  • A single app is created with the purpose(s) as stated above
  • The app is configured during its setup to point to the root of the Tequila folder, but has user adjustable options that will allow the tweaking of these settings later (IE: I decide to move my game install)
  • During setup, if the data folder doesn't exist, then it creates one
  • A folder is also created in the background for the storage of future Game Mods

 

Game Mod Installation Folder Container:

  • This is the folder where Mods will be housed for installation, a Source folder if you will for pre-installation
  • Instead of the current format of individual mods (zipped and designed for standalone install), each mod will be in its on Folder and include a file that identifies where the contained files are to be installed to
  • Unless chosen, the Mods located here will continue to exist even if the user removes the mods from the game itself to allow for reinstallation

 

Game Mod New Requirements:

  • Each existing mod will have to be reconfigured and installation files created and new mods should follow as stated below
  • The folder structure could/should be relatively flat so that we don't run into a long file name type error (if this is an actual issue)
    • \Mod 1
    • \Mod 1\Installation File
    • \Mod 1\File 1
    • \Mod 1\File 2
    • \Mod 1\File 3
  • The installation file should have the relative paths for each of the contained files hard coded so that the main app can simply read from it and create the appropriate paths and copy the files without damaging/moving the existing pre-installation files

 

Add/Removing a Mod:

  • The user will have to download their desired Mods into the configured Mod folder for this to work
  • From the main interface, the user chooses Add or Remove
  • When Adding a Mod
    • The app reads the folder contents and displays the available Mods to install
    • User checks off the mods they wish to install
    • The app then installs the chosen Mods
  • When Removing a Mod
    • The app uses the list of installed apps chosen in previous sessions (see Adding a Mod)
    • The app then reads from a file that is in the specific Mods' installation folder to identify the files to delete
    • The app then deletes Only those files listed

 

Logic Checks Required:

  • This section will be the hardest to accomplish as it requires knowledge of the existing mods
  • Known conditions like the install order for Vidiot Maps and the supplemental Maps in the right sequence
    • Honestly, it'd be better just to create a new set of maps so that the tiered installation is not required
  • Known conflicts for things like tray icons that will likely share the same destination file names
  • Like 1

OG Server: Pinnacle  <||>  Current Primary Server: Torchbearer  ||  Also found on the others if desired


Installing CoX:  Windows  ||  MacOS  ||  MacOS for M1  <||>  Migrating Data from an Older Installation


Clubs: Mid's Hero Designer  ||  PC Builders  ||  HC Wiki  ||  Jerk Hackers


Old Forums  <||>  Titan Network  <||>  The City Representative (Info site for all servers)  <||>  Heroica! (by @Shenanigunner)

 

Link to post
Share on other sites

I like it! If no one picks this up, I might start tackling it after my web alpha is done. I doesn't look too complicated, and I can see the tremendous benefit. I can also see a more complicated system (for the developer and/or mod designer) that gives each mod a standard format to use when packaging, so the app could just read the package, kind of like Android APKs or Linux PKGs. 

 

Damn, if only I had more free time, that would be fun. 

Link to post
Share on other sites
42 minutes ago, The Philotic Knight said:

I like it! If no one picks this up, I might start tackling it after my web alpha is done. I doesn't look too complicated, and I can see the tremendous benefit. I can also see a more complicated system (for the developer and/or mod designer) that gives each mod a standard format to use when packaging, so the app could just read the package, kind of like Android APKs or Linux PKGs. 

 

Damn, if only I had more free time, that would be fun. 

That is Precisely what I was looking for. We'd rebuild the existing Mods and package them in a new standard format. These would then be stored alongside the app itself online. The concept is universal enough that any server could use or add to it. Give or take power mods that is.

OG Server: Pinnacle  <||>  Current Primary Server: Torchbearer  ||  Also found on the others if desired


Installing CoX:  Windows  ||  MacOS  ||  MacOS for M1  <||>  Migrating Data from an Older Installation


Clubs: Mid's Hero Designer  ||  PC Builders  ||  HC Wiki  ||  Jerk Hackers


Old Forums  <||>  Titan Network  <||>  The City Representative (Info site for all servers)  <||>  Heroica! (by @Shenanigunner)

 

Link to post
Share on other sites
On 3/31/2020 at 9:18 PM, The Philotic Knight said:

I like it! If no one picks this up, I might start tackling it after my web alpha is done. I doesn't look too complicated, and I can see the tremendous benefit. I can also see a more complicated system (for the developer and/or mod designer) that gives each mod a standard format to use when packaging, so the app could just read the package, kind of like Android APKs or Linux PKGs. 

 

Damn, if only I had more free time, that would be fun. 

It's VERY time consuming already to make these mods. I have dumped hours upon hours making mods rather than playing the game. I do it some for myself, others for the community, others by request from specific players. As long as the paths are in the form of folders with direction on what to name them and a proper path, I don't mind taking a bit of extra time. I'm sure all you would need is the whole directory included in the zip file rather than just the mods themselves. So instead of the mods being in the zip file, the folders would be created and would look something like this, Data\Sound\Ogg\Powers\*Mods* and if any other mods required a different path, it would get a slightly different destination folder within the Data folder. Then that would be zipped up and your program could distribute them where they go. You could also set something up to where mod creators can just send the zip files to a database that you may have, and you could incorporate them into the program that handles the mods. They could remain here for players who are comfortable with manually placing the mods (It's honestly extremely easy, but I understand if some players don't want to risk it) or players could go to your web site and allow your Mod Organizer to do it for them. Either way, just let us know what you need, man. I'll work with ya.

Link to post
Share on other sites
19 hours ago, Solarverse said:

 

Correct, the "Index" file (I guess you would call it) would be required and the actual modded files would be in a flat file structure (since the app would place them accordingly. It would take more work for the initial process, but only in the creation of the Index file itself. I'll look into taking say the Vidiots mod and creating an example. As it stands, IDK what to do with each mod I DO have because there is no standard beyond the data folder structure that they eventually create/follow.

 

A side thought while it's here:

The visual mods should have a reference image (single image perhaps) that the user can click on to see before they commit.

OG Server: Pinnacle  <||>  Current Primary Server: Torchbearer  ||  Also found on the others if desired


Installing CoX:  Windows  ||  MacOS  ||  MacOS for M1  <||>  Migrating Data from an Older Installation


Clubs: Mid's Hero Designer  ||  PC Builders  ||  HC Wiki  ||  Jerk Hackers


Old Forums  <||>  Titan Network  <||>  The City Representative (Info site for all servers)  <||>  Heroica! (by @Shenanigunner)

 

Link to post
Share on other sites
19 hours ago, Herotu said:

It sounds like a modmanager. Nice idea!

That's probably a better name for it, yes!

OG Server: Pinnacle  <||>  Current Primary Server: Torchbearer  ||  Also found on the others if desired


Installing CoX:  Windows  ||  MacOS  ||  MacOS for M1  <||>  Migrating Data from an Older Installation


Clubs: Mid's Hero Designer  ||  PC Builders  ||  HC Wiki  ||  Jerk Hackers


Old Forums  <||>  Titan Network  <||>  The City Representative (Info site for all servers)  <||>  Heroica! (by @Shenanigunner)

 

Link to post
Share on other sites
1 hour ago, WanderingAries said:

The visual mods should have a reference image (single image perhaps) that the user can click on to see before they commit.

Most of them do that I can tell. I modded the hell out of Skyrim, and one of my favorite Mods for that game came from a couple of art modders by the name of Painkiller_Rider and Miguelfromhell. They created a Mod that turns your character in to the Death Dealer from the Frank Frazetta novels. The best mod in that game as far as I am concerned. Within their mod, contains a folder that you can click on to view images of that mod. So pretty much any visual mod I have ever installed had a folder similar to this one.

 

With mine, I usually link a video which displays my music or my SFX for powers. I am by no means an artist, I am however a professional musician who has only recently (for about 4 years) been dabbling in Symphony Orchestra. Most of my music career comes from playing lead guitar in a Heavy Metal band in the tri-state area. However, I have always had a deep passion for Symphony Orchestras and have changed my music creations to match those passions. Because of this, I also have a sharp ear for tones, which helps me tremendously in creating SFX for this game.

Thankfully through much research, I have learned how to incorporate them into mods for players to use.

But yeah, most of the mods people make come with a bit of self advertising to help players decide if they are worth modding.  😉

Edited by Solarverse
Link to post
Share on other sites

This went faster than expected...thanks to the little I remembered (yes, I looked up syntax) of the command line.

The following/attached are from the original Vidiots file. I tried using 7zip to re-zip everything and upload here, but apparently the free version doesn't give you a compression option (too big to upload, much bigger than the original exe).

 

This is the script used to see the Whole directory listing: dirlist.txt

Spoiler
*******************************************
Using this Command: dir /b /s > dirlist.txt
*******************************************

S:\data\texture_library
S:\data\texture_library\MAPS
S:\data\texture_library\P_MAPS
S:\data\texture_library\V_MAPS
S:\data\texture_library\MAPS\city
S:\data\texture_library\MAPS\Dark_Astoria_makeover
S:\data\texture_library\MAPS\Midnight_Squad
S:\data\texture_library\MAPS\NewPlayerTutorial
S:\data\texture_library\MAPS\Safeguard
S:\data\texture_library\MAPS\sewers
S:\data\texture_library\MAPS\static
S:\data\texture_library\MAPS\city\citymap.texture
S:\data\texture_library\MAPS\city\paragon_citymap.texture
S:\data\texture_library\MAPS\Dark_Astoria_makeover\map_Coop_06_01.texture
S:\data\texture_library\MAPS\Midnight_Squad\mid_squad_chamber.texture
S:\data\texture_library\MAPS\NewPlayerTutorial\Map_N_City_00_01.texture
S:\data\texture_library\MAPS\Safeguard\map_Safeguard_Atlas_Park.texture
S:\data\texture_library\MAPS\Safeguard\map_Safeguard_Brickstown.texture
S:\data\texture_library\MAPS\Safeguard\map_Safeguard_Founders_Falls.texture
S:\data\texture_library\MAPS\Safeguard\map_Safeguard_Independence_Port.texture
S:\data\texture_library\MAPS\Safeguard\map_Safeguard_Kings_Row.texture
S:\data\texture_library\MAPS\Safeguard\map_Safeguard_Peregrine_Island.texture
S:\data\texture_library\MAPS\Safeguard\map_Safeguard_Skyway.texture
S:\data\texture_library\MAPS\Safeguard\map_Safeguard_SteelCanyon.texture
S:\data\texture_library\MAPS\Safeguard\map_Safeguard_Talos_Island.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_3wy_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_3wy_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_3wy_03.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_3wy_04.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_4wy_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_4wy_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_4wy_03.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_4wy_04.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_bnd_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_bnd_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_bnd_03.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_bnd_04.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_end_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_end_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_end_03.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_end_04.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_rise_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_rise_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_rise_03.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_rise_04.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_str_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_str_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_str_03.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_str_04.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_visstr_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_visstr_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_visstr_03.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_visstr_04.texture
S:\data\texture_library\MAPS\sewers\swr_base_mr_3wy_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_mr_3wy_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_mr_4wy_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_mr_4wy_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_mr_bnd_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_mr_bnd_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_mr_end_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_mr_end_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_mr_str_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_mr_str_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_sh_str_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_sh_str_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_sh_str_03.texture
S:\data\texture_library\MAPS\sewers\swr_base_sh_str_04.texture
S:\data\texture_library\MAPS\sewers\swr_base_start_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_start_02.texture
S:\data\texture_library\MAPS\static\map_city_00_01.texture
S:\data\texture_library\MAPS\static\map_city_01_01.texture
S:\data\texture_library\MAPS\static\map_city_01_02.texture
S:\data\texture_library\MAPS\static\map_city_01_03.texture
S:\data\texture_library\MAPS\static\map_city_01_04.texture
S:\data\texture_library\MAPS\static\map_city_02_01.texture
S:\data\texture_library\MAPS\static\map_city_02_02.texture
S:\data\texture_library\MAPS\static\map_city_02_04.texture
S:\data\texture_library\MAPS\static\map_city_02_05.texture
S:\data\texture_library\MAPS\static\map_city_03_01.texture
S:\data\texture_library\MAPS\static\map_city_03_02.texture
S:\data\texture_library\MAPS\static\map_city_03_03.texture
S:\data\texture_library\MAPS\static\map_city_03_04.texture
S:\data\texture_library\MAPS\static\map_city_04_01.texture
S:\data\texture_library\MAPS\static\map_city_04_02.texture
S:\data\texture_library\MAPS\static\map_city_05_01.texture
S:\data\texture_library\MAPS\static\map_hazard_01_01.texture
S:\data\texture_library\MAPS\static\map_hazard_01_02.texture
S:\data\texture_library\MAPS\static\map_hazard_01_03.texture
S:\data\texture_library\MAPS\static\map_hazard_02_01.texture
S:\data\texture_library\MAPS\static\map_hazard_03_01.texture
S:\data\texture_library\MAPS\static\map_hazard_03_02.texture
S:\data\texture_library\MAPS\static\map_hazard_04_01.texture
S:\data\texture_library\MAPS\static\map_hazard_06_01.texture
S:\data\texture_library\MAPS\static\map_hazard_06_02.texture
S:\data\texture_library\MAPS\static\map_hazard_06_03.texture
S:\data\texture_library\MAPS\static\map_P_City_00_01.texture
S:\data\texture_library\MAPS\static\map_P_City_00_02.texture
S:\data\texture_library\MAPS\static\map_P_City_00_03.texture
S:\data\texture_library\MAPS\static\map_P_City_00_04.texture
S:\data\texture_library\MAPS\static\map_P_City_00_06.texture
S:\data\texture_library\MAPS\static\map_P_City_00_07.texture
S:\data\texture_library\MAPS\static\map_P_City_00_08.texture
S:\data\texture_library\MAPS\static\map_P_City_00_09.texture
S:\data\texture_library\MAPS\static\map_trial_01_01.texture
S:\data\texture_library\MAPS\static\map_trial_01_02.texture
S:\data\texture_library\MAPS\static\map_trial_03_01.texture
S:\data\texture_library\MAPS\static\map_trial_04_01.texture
S:\data\texture_library\MAPS\static\map_trial_04_02.texture
S:\data\texture_library\MAPS\static\map_trial_06_01.texture
S:\data\texture_library\MAPS\static\map_War_05_01.texture
S:\data\texture_library\P_MAPS\praetoria_citymap.texture
S:\data\texture_library\P_MAPS\P_citymap.texture
S:\data\texture_library\V_MAPS\City
S:\data\texture_library\V_MAPS\Outdoor_Missions
S:\data\texture_library\V_MAPS\Static
S:\data\texture_library\V_MAPS\City\rogueisles_citymap.texture
S:\data\texture_library\V_MAPS\City\V_citymap.texture
S:\data\texture_library\V_MAPS\Outdoor_Missions\map_V_Mayhem_Atlas_Park.texture
S:\data\texture_library\V_MAPS\Outdoor_Missions\map_V_Mayhem_Brickstown.texture
S:\data\texture_library\V_MAPS\Outdoor_Missions\map_V_Mayhem_Founders_Falls.texture
S:\data\texture_library\V_MAPS\Outdoor_Missions\map_V_Mayhem_Independence_Port.texture
S:\data\texture_library\V_MAPS\Outdoor_Missions\map_V_Mayhem_Kings_Row.texture
S:\data\texture_library\V_MAPS\Outdoor_Missions\map_V_Mayhem_Peregrine_Island.texture
S:\data\texture_library\V_MAPS\Outdoor_Missions\map_V_Mayhem_Skyway.texture
S:\data\texture_library\V_MAPS\Outdoor_Missions\map_V_Mayhem_SteelCanyon.texture
S:\data\texture_library\V_MAPS\Outdoor_Missions\map_V_Mayhem_Talos_Island.texture
S:\data\texture_library\V_MAPS\Static\map_city_06_01.texture
S:\data\texture_library\V_MAPS\Static\map_V_City_00_01.texture
S:\data\texture_library\V_MAPS\Static\map_V_City_01_01.texture
S:\data\texture_library\V_MAPS\Static\map_V_City_01_02.texture
S:\data\texture_library\V_MAPS\Static\map_V_City_02_01.texture
S:\data\texture_library\V_MAPS\Static\map_V_city_03_01.texture
S:\data\texture_library\V_MAPS\Static\map_V_City_03_02.texture
S:\data\texture_library\V_MAPS\Static\map_V_City_04_01.texture
S:\data\texture_library\V_MAPS\Static\map_V_City_05_01.texture
S:\data\texture_library\V_MAPS\Static\map_v_city_06_01.texture
S:\data\texture_library\V_MAPS\Static\map_V_PvP_02_01.texture
S:\data\texture_library\V_MAPS\Static\map_V_PvP_03_01.texture
S:\data\texture_library\V_MAPS\Static\map_V_PvP_04_01.texture
S:\data\texture_library\V_MAPS\Static\map_V_PvP_05_01.texture
S:\data\texture_library\V_MAPS\Static\map_V_Trial_04_02.texture
S:\data\texture_library\V_MAPS\Static\map_V_Trial_04_03.texture

 

 

This is the same script only with the folders listed first (Note: it's not 100% the way it really should be sorted): dirlistsorted.txt

Spoiler
************************************************
Using this Command: dir /b /s /o:g > dirlist.txt
************************************************

S:\data\texture_library
S:\data\texture_library\MAPS
S:\data\texture_library\P_MAPS
S:\data\texture_library\V_MAPS
S:\data\texture_library\MAPS\city
S:\data\texture_library\MAPS\Dark_Astoria_makeover
S:\data\texture_library\MAPS\Midnight_Squad
S:\data\texture_library\MAPS\NewPlayerTutorial
S:\data\texture_library\MAPS\Safeguard
S:\data\texture_library\MAPS\sewers
S:\data\texture_library\MAPS\static
S:\data\texture_library\MAPS\city\paragon_citymap.texture
S:\data\texture_library\MAPS\city\citymap.texture
S:\data\texture_library\MAPS\Dark_Astoria_makeover\map_Coop_06_01.texture
S:\data\texture_library\MAPS\Midnight_Squad\mid_squad_chamber.texture
S:\data\texture_library\MAPS\NewPlayerTutorial\Map_N_City_00_01.texture
S:\data\texture_library\MAPS\Safeguard\map_Safeguard_Atlas_Park.texture
S:\data\texture_library\MAPS\Safeguard\map_Safeguard_Brickstown.texture
S:\data\texture_library\MAPS\Safeguard\map_Safeguard_Founders_Falls.texture
S:\data\texture_library\MAPS\Safeguard\map_Safeguard_Independence_Port.texture
S:\data\texture_library\MAPS\Safeguard\map_Safeguard_Kings_Row.texture
S:\data\texture_library\MAPS\Safeguard\map_Safeguard_Peregrine_Island.texture
S:\data\texture_library\MAPS\Safeguard\map_Safeguard_Skyway.texture
S:\data\texture_library\MAPS\Safeguard\map_Safeguard_SteelCanyon.texture
S:\data\texture_library\MAPS\Safeguard\map_Safeguard_Talos_Island.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_3wy_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_3wy_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_3wy_03.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_3wy_04.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_4wy_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_4wy_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_4wy_03.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_4wy_04.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_bnd_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_bnd_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_bnd_03.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_bnd_04.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_end_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_end_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_end_03.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_end_04.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_rise_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_rise_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_rise_03.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_rise_04.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_str_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_str_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_str_03.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_str_04.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_visstr_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_visstr_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_visstr_03.texture
S:\data\texture_library\MAPS\sewers\swr_base_h_visstr_04.texture
S:\data\texture_library\MAPS\sewers\swr_base_mr_3wy_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_mr_3wy_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_mr_4wy_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_mr_4wy_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_mr_bnd_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_mr_bnd_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_mr_end_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_mr_end_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_mr_str_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_mr_str_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_sh_str_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_sh_str_02.texture
S:\data\texture_library\MAPS\sewers\swr_base_sh_str_03.texture
S:\data\texture_library\MAPS\sewers\swr_base_sh_str_04.texture
S:\data\texture_library\MAPS\sewers\swr_base_start_01.texture
S:\data\texture_library\MAPS\sewers\swr_base_start_02.texture
S:\data\texture_library\MAPS\static\map_city_00_01.texture
S:\data\texture_library\MAPS\static\map_city_01_01.texture
S:\data\texture_library\MAPS\static\map_city_01_02.texture
S:\data\texture_library\MAPS\static\map_city_01_03.texture
S:\data\texture_library\MAPS\static\map_city_01_04.texture
S:\data\texture_library\MAPS\static\map_city_02_01.texture
S:\data\texture_library\MAPS\static\map_city_02_02.texture
S:\data\texture_library\MAPS\static\map_city_02_04.texture
S:\data\texture_library\MAPS\static\map_city_02_05.texture
S:\data\texture_library\MAPS\static\map_city_03_01.texture
S:\data\texture_library\MAPS\static\map_city_03_02.texture
S:\data\texture_library\MAPS\static\map_city_03_03.texture
S:\data\texture_library\MAPS\static\map_city_03_04.texture
S:\data\texture_library\MAPS\static\map_city_04_01.texture
S:\data\texture_library\MAPS\static\map_city_04_02.texture
S:\data\texture_library\MAPS\static\map_city_05_01.texture
S:\data\texture_library\MAPS\static\map_hazard_01_01.texture
S:\data\texture_library\MAPS\static\map_hazard_01_02.texture
S:\data\texture_library\MAPS\static\map_hazard_01_03.texture
S:\data\texture_library\MAPS\static\map_hazard_02_01.texture
S:\data\texture_library\MAPS\static\map_hazard_03_01.texture
S:\data\texture_library\MAPS\static\map_hazard_03_02.texture
S:\data\texture_library\MAPS\static\map_hazard_04_01.texture
S:\data\texture_library\MAPS\static\map_hazard_06_01.texture
S:\data\texture_library\MAPS\static\map_hazard_06_02.texture
S:\data\texture_library\MAPS\static\map_hazard_06_03.texture
S:\data\texture_library\MAPS\static\map_P_City_00_01.texture
S:\data\texture_library\MAPS\static\map_P_City_00_02.texture
S:\data\texture_library\MAPS\static\map_P_City_00_03.texture
S:\data\texture_library\MAPS\static\map_P_City_00_04.texture
S:\data\texture_library\MAPS\static\map_P_City_00_06.texture
S:\data\texture_library\MAPS\static\map_P_City_00_07.texture
S:\data\texture_library\MAPS\static\map_P_City_00_08.texture
S:\data\texture_library\MAPS\static\map_P_City_00_09.texture
S:\data\texture_library\MAPS\static\map_trial_01_01.texture
S:\data\texture_library\MAPS\static\map_trial_01_02.texture
S:\data\texture_library\MAPS\static\map_trial_03_01.texture
S:\data\texture_library\MAPS\static\map_trial_04_01.texture
S:\data\texture_library\MAPS\static\map_trial_04_02.texture
S:\data\texture_library\MAPS\static\map_trial_06_01.texture
S:\data\texture_library\MAPS\static\map_War_05_01.texture
S:\data\texture_library\P_MAPS\P_citymap.texture
S:\data\texture_library\P_MAPS\praetoria_citymap.texture
S:\data\texture_library\V_MAPS\City
S:\data\texture_library\V_MAPS\Outdoor_Missions
S:\data\texture_library\V_MAPS\Static
S:\data\texture_library\V_MAPS\City\V_citymap.texture
S:\data\texture_library\V_MAPS\City\rogueisles_citymap.texture
S:\data\texture_library\V_MAPS\Outdoor_Missions\map_V_Mayhem_Atlas_Park.texture
S:\data\texture_library\V_MAPS\Outdoor_Missions\map_V_Mayhem_Brickstown.texture
S:\data\texture_library\V_MAPS\Outdoor_Missions\map_V_Mayhem_Founders_Falls.texture
S:\data\texture_library\V_MAPS\Outdoor_Missions\map_V_Mayhem_Independence_Port.texture
S:\data\texture_library\V_MAPS\Outdoor_Missions\map_V_Mayhem_Kings_Row.texture
S:\data\texture_library\V_MAPS\Outdoor_Missions\map_V_Mayhem_Peregrine_Island.texture
S:\data\texture_library\V_MAPS\Outdoor_Missions\map_V_Mayhem_Skyway.texture
S:\data\texture_library\V_MAPS\Outdoor_Missions\map_V_Mayhem_SteelCanyon.texture
S:\data\texture_library\V_MAPS\Outdoor_Missions\map_V_Mayhem_Talos_Island.texture
S:\data\texture_library\V_MAPS\Static\map_city_06_01.texture
S:\data\texture_library\V_MAPS\Static\map_V_City_00_01.texture
S:\data\texture_library\V_MAPS\Static\map_V_City_01_01.texture
S:\data\texture_library\V_MAPS\Static\map_V_City_01_02.texture
S:\data\texture_library\V_MAPS\Static\map_V_City_02_01.texture
S:\data\texture_library\V_MAPS\Static\map_V_city_03_01.texture
S:\data\texture_library\V_MAPS\Static\map_V_City_03_02.texture
S:\data\texture_library\V_MAPS\Static\map_V_City_04_01.texture
S:\data\texture_library\V_MAPS\Static\map_V_City_05_01.texture
S:\data\texture_library\V_MAPS\Static\map_v_city_06_01.texture
S:\data\texture_library\V_MAPS\Static\map_V_PvP_02_01.texture
S:\data\texture_library\V_MAPS\Static\map_V_PvP_03_01.texture
S:\data\texture_library\V_MAPS\Static\map_V_PvP_04_01.texture
S:\data\texture_library\V_MAPS\Static\map_V_PvP_05_01.texture
S:\data\texture_library\V_MAPS\Static\map_V_Trial_04_02.texture
S:\data\texture_library\V_MAPS\Static\map_V_Trial_04_03.texture

 

 

This is the manually created Index of Folders: FolderIndex.txt

Spoiler
**************************
Index of folders to create
**************************

\data\texture_library
\data\texture_library\MAPS
\data\texture_library\P_MAPS
\data\texture_library\V_MAPS
\data\texture_library\MAPS\city
\data\texture_library\MAPS\Dark_Astoria_makeover
\data\texture_library\MAPS\Midnight_Squad
\data\texture_library\MAPS\NewPlayerTutorial
\data\texture_library\MAPS\Safeguard
\data\texture_library\MAPS\sewers
\data\texture_library\MAPS\static
\data\texture_library\V_MAPS\City
\data\texture_library\V_MAPS\Outdoor_Missions
\data\texture_library\V_MAPS\Static

 

 

This is the script one could use to create said folders (Note how this list is shorter than the actual Index): CreateFolderScript.txt

Spoiler
************************
Script to create folders
************************

md data\texture_library\P_MAPS
md data\texture_library\MAPS\city
md data\texture_library\MAPS\Dark_Astoria_makeover
md data\texture_library\MAPS\Midnight_Squad
md data\texture_library\MAPS\NewPlayerTutorial
md data\texture_library\MAPS\Safeguard
md data\texture_library\MAPS\sewers
md data\texture_library\MAPS\static
md data\texture_library\V_MAPS\City
md data\texture_library\V_MAPS\Outdoor_Missions
md data\texture_library\V_MAPS\Static

 

 

This is the Index of the files and their destination folders: FileIndex.txt

Spoiler
************************
Script to create folders
************************

md data\texture_library\P_MAPS
md data\texture_library\MAPS\city
md data\texture_library\MAPS\Dark_Astoria_makeover
md data\texture_library\MAPS\Midnight_Squad
md data\texture_library\MAPS\NewPlayerTutorial
md data\texture_library\MAPS\Safeguard
md data\texture_library\MAPS\sewers
md data\texture_library\MAPS\static
md data\texture_library\V_MAPS\City
md data\texture_library\V_MAPS\Outdoor_Missions
md data\texture_library\V_MAPS\Static

 

 

OG Server: Pinnacle  <||>  Current Primary Server: Torchbearer  ||  Also found on the others if desired


Installing CoX:  Windows  ||  MacOS  ||  MacOS for M1  <||>  Migrating Data from an Older Installation


Clubs: Mid's Hero Designer  ||  PC Builders  ||  HC Wiki  ||  Jerk Hackers


Old Forums  <||>  Titan Network  <||>  The City Representative (Info site for all servers)  <||>  Heroica! (by @Shenanigunner)

 

Link to post
Share on other sites

Here's the concept for the "Flat Structure Tree": Folder List.bmp

OG Server: Pinnacle  <||>  Current Primary Server: Torchbearer  ||  Also found on the others if desired


Installing CoX:  Windows  ||  MacOS  ||  MacOS for M1  <||>  Migrating Data from an Older Installation


Clubs: Mid's Hero Designer  ||  PC Builders  ||  HC Wiki  ||  Jerk Hackers


Old Forums  <||>  Titan Network  <||>  The City Representative (Info site for all servers)  <||>  Heroica! (by @Shenanigunner)

 

Link to post
Share on other sites

One day I'll get it in one post...IDK why we can't add attachments after the fact.

Here's the Root folder: Root Folder.bmp

OG Server: Pinnacle  <||>  Current Primary Server: Torchbearer  ||  Also found on the others if desired


Installing CoX:  Windows  ||  MacOS  ||  MacOS for M1  <||>  Migrating Data from an Older Installation


Clubs: Mid's Hero Designer  ||  PC Builders  ||  HC Wiki  ||  Jerk Hackers


Old Forums  <||>  Titan Network  <||>  The City Representative (Info site for all servers)  <||>  Heroica! (by @Shenanigunner)

 

Link to post
Share on other sites
  • 1 month later

So I did some basic testing just now on my Mac using the files on my shared drive (shared with both MacOS installs and the Win10 install). As luck would have it, the coh folder that gets put in the Applications folder acts exactly like the root folder of the game install on Windows in that you can simply drag drop add-ons and customization files as if they were in Windows. Dropping a copy of the data folder resulted in immediate changes on a new startup of the game via IR. I also tried using Alias files/folders and that completely failed, so if you make changes in one OS' game install, then you'll have to recopy the files to the other OS' game install to see the results. So much for saving space 😕. I also learned that MacOS won't let you choose to merge files of an active Unzip action with existing ones. IE: I unpacked the original Vidiot maps into a data folder. When I unpacked the update file it created a "data 2" folder instead of offering to merge the two. I had to unpack it in another folder for it to make a plane "data" folder, then it was just a matter of drag-drop-merge.

OG Server: Pinnacle  <||>  Current Primary Server: Torchbearer  ||  Also found on the others if desired


Installing CoX:  Windows  ||  MacOS  ||  MacOS for M1  <||>  Migrating Data from an Older Installation


Clubs: Mid's Hero Designer  ||  PC Builders  ||  HC Wiki  ||  Jerk Hackers


Old Forums  <||>  Titan Network  <||>  The City Representative (Info site for all servers)  <||>  Heroica! (by @Shenanigunner)

 

Link to post
Share on other sites
  • 2 months later

I've started working on an implementation of these ideas! So far, I have functionality to handle reading mods from .zip files, installing them, and uninstalling them. No UI yet, though. The file structure I decided on is as follows: each mod consists of a .zip file containing 1. a JSON file called "info.json" and 2. a "data" folder containing the actual mod files in their proper paths, where they belong in the game install folder. The info.json file contains three fields (so far): name, author, and version. Author and version are optional. The file looks like this:

{
    "name": "Test Mod",
    "author": "Nobody",
    "version": "1.0.0"
}

Obviously authors would change these fields to fit their mods. This metadata is associated with the mod for future reference. No checks are currently done for... well, much of anything, really; this is just the beginning of a usable tool. I would welcome any feedback or suggestions! Nothing is set in stone. If you're interested, you can find the (Python) code here: https://github.com/desophos/cox-mod-manager

 

Update: I think I'm approaching a usable 0.1.0 tool. I have a working command-line interface! I'll make a separate thread in the Tools forum when I think it's ready for distribution.

Edited by desophos
Progress update
Link to post
Share on other sites

I'll have to remember to check back on my own threads...and those source files.

OG Server: Pinnacle  <||>  Current Primary Server: Torchbearer  ||  Also found on the others if desired


Installing CoX:  Windows  ||  MacOS  ||  MacOS for M1  <||>  Migrating Data from an Older Installation


Clubs: Mid's Hero Designer  ||  PC Builders  ||  HC Wiki  ||  Jerk Hackers


Old Forums  <||>  Titan Network  <||>  The City Representative (Info site for all servers)  <||>  Heroica! (by @Shenanigunner)

 

Link to post
Share on other sites

@The Philotic Knight

Wow, man...impressive. So people can load and unload mods at will with this? For an example, I have a Lightsaber SFX mod, but it also affects anything else that uses that sound effect. SO if somebody wants to play their MM, they would probably rather hear the original sound effects for Katana on their Ninja Master Mind, but would want to hear the Lightsaber SFX for heir glow stick Katana Scrapper. So would this allow people to load them up when they wish to play their Scrapper and then unload it when they wish to play as their Master Mind?

Link to post
Share on other sites
44 minutes ago, Solarverse said:

@The Philotic Knight

Wow, man...impressive. So people can load and unload mods at will with this? For an example, I have a Lightsaber SFX mod, but it also affects anything else that uses that sound effect. SO if somebody wants to play their MM, they would probably rather hear the original sound effects for Katana on their Ninja Master Mind, but would want to hear the Lightsaber SFX for heir glow stick Katana Scrapper. So would this allow people to load them up when they wish to play their Scrapper and then unload it when they wish to play as their Master Mind?

While not quite so on the fly (but it would work!) as the intent, that's the concept. Make an easy to use application to manage the often hard to understand (by those who don't code) how to install mods. The method described would allow for a much Easier way to individually add/remove them where as now you'd have to know each and every file/location to modify.

OG Server: Pinnacle  <||>  Current Primary Server: Torchbearer  ||  Also found on the others if desired


Installing CoX:  Windows  ||  MacOS  ||  MacOS for M1  <||>  Migrating Data from an Older Installation


Clubs: Mid's Hero Designer  ||  PC Builders  ||  HC Wiki  ||  Jerk Hackers


Old Forums  <||>  Titan Network  <||>  The City Representative (Info site for all servers)  <||>  Heroica! (by @Shenanigunner)

 

Link to post
Share on other sites
2 hours ago, The Philotic Knight said:

How's this as a start @WanderingAries @Solarverse @desophos? I was bored today at work: http://www.cityofplayers.com/pks-tools/

 

image.png.a94d47b6ccccd4eb585245aea133cba9.png

 

image.png.5ae59159d03faacc1dde604b69e7ee0a.png

 

image.png.ce031d858b374063370e0ab58345db8c.png

 

image.png.d61bbbc1053ff5391b4eba3be16c68b8.png

 

Good start on the template for sure. I didn't get a chance to visualize what the other person's code was about, but I'm sure the logic would be helpful.

OG Server: Pinnacle  <||>  Current Primary Server: Torchbearer  ||  Also found on the others if desired


Installing CoX:  Windows  ||  MacOS  ||  MacOS for M1  <||>  Migrating Data from an Older Installation


Clubs: Mid's Hero Designer  ||  PC Builders  ||  HC Wiki  ||  Jerk Hackers


Old Forums  <||>  Titan Network  <||>  The City Representative (Info site for all servers)  <||>  Heroica! (by @Shenanigunner)

 

Link to post
Share on other sites

Exactly @Solarverse. It's all bundled up once, the first time, by the mod designer. Then the users don't have to do anything but click the mod and then click Install or Remove.

 

Now, I don't know of it would work while IN the game client - I never looked at the code deep enough to see if it's fetching resources "live", or on zone load, or on program load, that would require testing. But it would work at least on program load for sure.

Edited by The Philotic Knight
Link to post
Share on other sites
1 hour ago, The Philotic Knight said:

Exactly @Solarverse. It's all bundled up once, the first time, by the mod designer. Then the users don't have to do anything but click the mod and then click Install or Remove.

 

Now, I don't know of it would work while IN the game client - I never looked at the code deep enough to see if it's fetching resources "live", or on zone load, or on program load, that would require testing. But it would work at least on program load for sure.

I can vouch that it works loading, but unloading any SFX mod that was tied to the specific power/sound will leave that ability silent if the game is running during load and unload of SFX mods. The game knows to use the Data folder for loaded SFX mods, but when the SFX mods are removed, the game does not know to revert back to its original destination for those sounds. So it would be best if players shut the game down before loading or unloading mods.

Also, thanks for doing this, man. And thanks for your time.

Edited by Solarverse
  • Like 1
Link to post
Share on other sites
  • Homecoming Team

Just a heads-up, one of the things about the new launcher we're building is that it's designed with native support for add-ons in mind. While the first release won't have that support enabled, the framework for it is there and built into the architecture.

 

Now, I don't know how long after the release of that launcher we'll be looking at for finishing that support and building the UI for it. So I certainly don't want to discourage the work being done here which will undoubtedly be able to come up with something quicker. Whatever you all come up with, once we're past the initial launch and thinking about addon support, it's something I'll want to engage with the community on to get ideas and make sure that what we do meshes well with what the mod authors have been doing.

 

But so you can be thinking about a potential path there; here's what we have in mind for addons:

  • The addon itself is a single file, probably a pigg but possibly a zip file.
     
  • Addons can use the same package format that we'll be moving to for the game itself - a signed json file - so that mod authors can securely distribute updates that are verified to come from the author. This format already allows for things like specifying package dependencies for if one addon builds on another -- though we may want to think about adding some sort of priority system for situations where they need to be applied in a particular order but it can't be easily expressed in terms of dependencies.
     
  • The user experience for installation will likely be a simple "do you trust this author?" message, possibly with a user-visible capabilities list that defines what types of files the addon package is allowed to contain -- texture overrides, popmenus, etc.

    Kind of like "If you hit OK, this addon will be allowed to update textures but not touch anything else" permissions model similar to mobile apps.
     
  • Instead of extracting the packages into data/, the launcher will instruct the game to insert the addon package into its VFS (above the standard piggs). The layering of the VFS can be crafted to ensure that overrides happen in the proper order, and this makes things a lot simpler and faster than wrangling extracted files. This also makes it very simple for users to toggle addons on and off.
  • Like 3
  • Thanks 3
Link to post
Share on other sites

That's awesome @Number Six, it'll be great when that's all built in. In the meantime, I think I might just make my own thread for this new tool, since I just added some functionality this morning that should make it SUPER easy to "convert" an old mod into my new format.

  • Thanks 1
Link to post
Share on other sites
On ‎8‎/‎5‎/‎2020 at 8:14 PM, The Philotic Knight said:

Exactly @Solarverse. It's all bundled up once, the first time, by the mod designer. Then the users don't have to do anything but click the mod and then click Install or Remove.

 

Now, I don't know of it would work while IN the game client - I never looked at the code deep enough to see if it's fetching resources "live", or on zone load, or on program load, that would require testing. But it would work at least on program load for sure.

Announcement aside, it's best to (un)load mods while the game is offline to avoid memory issues and what has already been discussed.

OG Server: Pinnacle  <||>  Current Primary Server: Torchbearer  ||  Also found on the others if desired


Installing CoX:  Windows  ||  MacOS  ||  MacOS for M1  <||>  Migrating Data from an Older Installation


Clubs: Mid's Hero Designer  ||  PC Builders  ||  HC Wiki  ||  Jerk Hackers


Old Forums  <||>  Titan Network  <||>  The City Representative (Info site for all servers)  <||>  Heroica! (by @Shenanigunner)

 

Link to post
Share on other sites
On ‎8‎/‎5‎/‎2020 at 9:47 PM, Number Six said:

Just a heads-up...

You guys are all trying to get me back into programming aren't you. :p

OG Server: Pinnacle  <||>  Current Primary Server: Torchbearer  ||  Also found on the others if desired


Installing CoX:  Windows  ||  MacOS  ||  MacOS for M1  <||>  Migrating Data from an Older Installation


Clubs: Mid's Hero Designer  ||  PC Builders  ||  HC Wiki  ||  Jerk Hackers


Old Forums  <||>  Titan Network  <||>  The City Representative (Info site for all servers)  <||>  Heroica! (by @Shenanigunner)

 

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...