This is a major sort out of the new functions. To simplify and make it easier to follow the code. All functionality remains.
Possible bugs in this that will be resolved after testing
# Example 1) Well made mod: mod_info_name=( MOD "awesomemod" "This is an Awesome Mod" "https://awesomemod.com/latest.zip" "awesomemod.zip" "0" "LowercaseOff" "OVERWRITE" "${systemdir}/addons" "source;unity3d;" "GAMES" "NOTGAMES" "https://awesomemod.com/" "This mod knows that 42 is the answer" )
# Example 1) Well made mod: mod_info_name=( MOD "awesomemod" "This is an Awesome Mod" "https://awesomemod.com/latest.zip" "awesomemod.zip" "0" "LowercaseOff" "OVERWRITE" "${systemdir}/addons" "source;unity3d;" "GAMES" "NOTGAMES" "https://awesomemod.com/" "This mod knows that 42 is the answer" )
# Example 2) Poorly made mod: mod_info_name=( MOD "stupidmod" "This is a stupid mod" "${crappymodurl}" "StupidMod.zip" "2" "LowercaseOn" "cfg;data/crappymod;" "${systemdir}" "source;" "GAMES" "Garry's mod;Counter-Strike: Source;" "This mod is dumber than dumb" )
# Example 2) Poorly made mod: mod_info_name=( MOD "stupidmod" "This is a stupid mod" "${crappymodurl}" "StupidMod.zip" "2" "LowercaseOn" "cfg;data/crappymod;" "${systemdir}" "source;" "GAMES" "Garry's mod;Counter-Strike: Source;" "This mod is dumber than dumb" )
# None of those values can be empty
# None of those values can be empty
# index | Usage
# index | Usage
# [0] | MOD: separator, all mods must begin with it
# [0] | MOD: separator, all mods must begin with it
# [1] | "modcommand": the LGSM name and command to install the mod (must be unique and lowercase)
# [1] | "modcommand": the LGSM name and command to install the mod (must be unique and lowercase)
# [2] | "Pretty Name": the common name people use to call the mod that will be displayed to the user
# [2] | "Pretty Name": the common name people use to call the mod that will be displayed to the user
# [3] | "URL": link to the file; can be a variable defined in fn_mods_nasty_urls (make sure curl can download it)
# [3] | "URL": link to the file; can be a variable defined in fn_mods_nasty_urls (make sure curl can download it)
# [4] | "filename": the output filename
# [4] | "filename": the output filename
# [5] | "modsubdirs": in how many subdirectories is the mod (none is 0) (not used at release, but could be in the future)
# [5] | "modsubdirs": in how many subdirectories is the mod (none is 0) (not used at release, but could be in the future)
# [6] | "LowercaseOn/Off": LowercaseOff or LowercaseOn: enable/disable converting extracted files and directories to lowercase (some games require it)
# [6] | "LowercaseOn/Off": LowercaseOff or LowercaseOn: enable/disable converting extracted files and directories to lowercase (some games require it)
# [7] | "modinstalldir": the directory in which to install the mode ( use LGSM dir variables such as ${systemdir})
# [7] | "modinstalldir": the directory in which to install the mode ( use LGSM dir variables such as ${systemdir})
# [8] | "/files/to/keep;", files & directories that should not be overwritten upon update, separated and ended with a semicolon; you can also use "OVERWRITE" to ignore the value or "NOUPDATE" to disallow updating
# [8] | "/files/to/keep;", files & directories that should not be overwritten upon update, separated and ended with a semicolon; you can also use "OVERWRITE" to ignore the value or "NOUPDATE" to disallow updating
# [9] | "Supported Engines;": list them according to LGSM ${engine} variables, separated and ended with a semicolon, or use ENGINES to ignore the value
# [9] | "Supported Engines;": list them according to LGSM ${engine} variables, separated and ended with a semicolon, or use ENGINES to ignore the value
# [10] | "Supported Games;": list them according to LGSM ${gamename} variables, separated and ended with a semicolon, or use GAMES to ignore the value
# [10] | "Supported Games;": list them according to LGSM ${gamename} variables, separated and ended with a semicolon, or use GAMES to ignore the value
# [11] | "Unsupported Games;": list them according to LGSM ${gamename} variables, separated and ended with a semicolon, or use NOTGAMES to ignore the value (useful to exclude a game when using Supported Engines)
# [11] | "Unsupported Games;": list them according to LGSM ${gamename} variables, separated and ended with a semicolon, or use NOTGAMES to ignore the value (useful to exclude a game when using Supported Engines)
# [12] | "AUTHOR_URL" is the author's website, displayed to the user when chosing mods to install
# [12] | "AUTHOR_URL" is the author's website, displayed to the user when chosing mods to install
# [13] | "Short Description" a description showed to the user upon installation
# [13] | "Short Description" a description showed to the user upon installation
# Source mods
# Source mods
mod_info_metamod=( MOD "metamod""MetaMod""${metamodurl}""${metamodlatestfile}""0""LowercaseOff""${systemdir}""addons/metamod/metaplugins.ini;""source;""GAMES""NOTGAMES""https://www.sourcemm.net""Plugins Framework")
mod_info_metamod=( MOD "metamod""MetaMod""${metamodurl}""${metamodlatestfile}""0""LowercaseOff""${systemdir}""addons/metamod/metaplugins.ini;""source;""GAMES""NOTGAMES""https://www.sourcemm.net""Plugins Framework")
mod_info_sourcemod=( MOD "sourcemod""SourceMod""${sourcemodurl}""${sourcemodlatestfile}""0""LowercaseOff""${systemdir}""cfg;addons/sourcemod/configs;""source;""GAMES""NOTGAMES""http://www.sourcemod.net""Admin Features (requires MetaMod)")
mod_info_sourcemod=( MOD "sourcemod""SourceMod""${sourcemodurl}""${sourcemodlatestfile}""0""LowercaseOff""${systemdir}""cfg;addons/sourcemod/configs;""source;""GAMES""NOTGAMES""http://www.sourcemod.net""Admin Features (requires MetaMod)")
# Garry's Mod Addons
# Garry's Mod Addons
mod_info_ulib=( MOD "ulib""ULib""https://codeload.github.com/TeamUlysses/ulib/zip/master""ulib-master.zip""0""LowercaseOff""${systemdir}/addons""OVERWRITE""ENGINES""Garry's Mod;""NOTGAMES""http://ulyssesmod.net""Complete Framework")
mod_info_ulib=( MOD "ulib""ULib""https://codeload.github.com/TeamUlysses/ulib/zip/master""ulib-master.zip""0""LowercaseOff""${systemdir}/addons""OVERWRITE""ENGINES""Garry's Mod;""NOTGAMES""http://ulyssesmod.net""Complete Framework")
mod_info_ulx=( MOD "ulx""ULX""https://codeload.github.com/TeamUlysses/ulx/zip/master""ulx-master.zip""0""LowercaseOff""${systemdir}/addons""OVERWRITE""ENGINES""Garry's Mod;""NOTGAMES""http://ulyssesmod.net""Admin Panel (requires ULib)")
mod_info_ulx=( MOD "ulx""ULX""https://codeload.github.com/TeamUlysses/ulx/zip/master""ulx-master.zip""0""LowercaseOff""${systemdir}/addons""OVERWRITE""ENGINES""Garry's Mod;""NOTGAMES""http://ulyssesmod.net""Admin Panel (requires ULib)")
mod_info_utime=( MOD "utime""UTime""https://github.com/TeamUlysses/utime/archive/master.zip""utime-master.zip""0""LowercaseOff""${systemdir}/addons""OVERWRITE""ENGINES""Garry's Mod;""NOTGAMES""http://ulyssesmod.net""Keep track of players play time")
mod_info_utime=( MOD "utime""UTime""https://github.com/TeamUlysses/utime/archive/master.zip""utime-master.zip""0""LowercaseOff""${systemdir}/addons""OVERWRITE""ENGINES""Garry's Mod;""NOTGAMES""http://ulyssesmod.net""Keep track of players play time")
mod_info_uclip=( MOD "uclip""UClip""https://github.com/TeamUlysses/uclip/archive/master.zip""uclip-master.zip""0""LowercaseOff""${systemdir}/addons""OVERWRITE""ENGINES""Garry's Mod;""NOTGAMES""http://ulyssesmod.net""An alternative to noclip")
mod_info_uclip=( MOD "uclip""UClip""https://github.com/TeamUlysses/uclip/archive/master.zip""uclip-master.zip""0""LowercaseOff""${systemdir}/addons""OVERWRITE""ENGINES""Garry's Mod;""NOTGAMES""http://ulyssesmod.net""An alternative to noclip")
mod_info_acf=( MOD "acf""Armoured Combat Framework""https://github.com/nrlulz/ACF/archive/master.zip""acf-master.zip""0""LowercaseOn""${systemdir}/addons""OVERWRITE""ENGINES""Garry's Mod;""NOTGAMES""https://github.com/nrlulz/ACF""Realistic Wepons & Engines")
mod_info_acf=( MOD "acf""Armoured Combat Framework""https://github.com/nrlulz/ACF/archive/master.zip""acf-master.zip""0""LowercaseOn""${systemdir}/addons""OVERWRITE""ENGINES""Garry's Mod;""NOTGAMES""https://github.com/nrlulz/ACF""Realistic Wepons & Engines")
mod_info_acf_missiles=( MOD "acfmissiles""ACF Missiles""https://github.com/Bubbus/ACF-Missiles/archive/master.zip""acf-missiles-master.zip""0""LowercaseOn""${systemdir}/addons""OVERWRITE""ENGINES""Garry's Mod;""NOTGAMES""https://github.com/Bubbus/ACF-Missiles""More missiles for ACF")
mod_info_acf_missiles=( MOD "acfmissiles""ACF Missiles""https://github.com/Bubbus/ACF-Missiles/archive/master.zip""acf-missiles-master.zip""0""LowercaseOn""${systemdir}/addons""OVERWRITE""ENGINES""Garry's Mod;""NOTGAMES""https://github.com/Bubbus/ACF-Missiles""More missiles for ACF")
mod_info_acf_advdupe2=( MOD "advdupe2""Advanced Duplicator 2""https://github.com/wiremod/advdupe2/archive/master.zip""advdupe2-master.zip""0""LowercaseOn""${systemdir}/addons""OVERWRITE""ENGINES""Garry's Mod;""NOTGAMES""http://www.wiremod.com""Save your constructions")
mod_info_acf_advdupe2=( MOD "advdupe2""Advanced Duplicator 2""https://github.com/wiremod/advdupe2/archive/master.zip""advdupe2-master.zip""0""LowercaseOn""${systemdir}/addons""OVERWRITE""ENGINES""Garry's Mod;""NOTGAMES""http://www.wiremod.com""Save your constructions")
mod_info_darkrp=( MOD "darkrp""DarkRP""https://github.com/FPtje/DarkRP/archive/master.zip""darkrp-master.zip""0""LowercaseOn""${systemdir}/addons""OVERWRITE""ENGINES""Garry's Mod;""NOTGAMES""http://darkrp.com""Most popular gamemode")
mod_info_darkrp=( MOD "darkrp""DarkRP""https://github.com/FPtje/DarkRP/archive/master.zip""darkrp-master.zip""0""LowercaseOn""${systemdir}/addons""OVERWRITE""ENGINES""Garry's Mod;""NOTGAMES""http://darkrp.com""Most popular gamemode")
mod_info_darkrpmodification=( MOD "darkrpmodification""DarkRP Modification""https://github.com/FPtje/darkrpmodification/archive/master.zip""darkrpmodification-master.zip""0""LowercaseOff""${systemdir}/addons""NOUPDATE""ENGINES""Garry's Mod;""NOTGAMES""http://darkrp.com""Customize DarkRP settings")
mod_info_darkrpmodification=( MOD "darkrpmodification""DarkRP Modification""https://github.com/FPtje/darkrpmodification/archive/master.zip""darkrpmodification-master.zip""0""LowercaseOff""${systemdir}/addons""NOUPDATE""ENGINES""Garry's Mod;""NOTGAMES""http://darkrp.com""Customize DarkRP settings")
# Oxidemod
# Oxidemod
mod_info_rustoxide=( MOD "rustoxide""Oxide for Rust""https://raw.githubusercontent.com/OxideMod/Snapshots/master/Oxide-Rust.zip""Oxide-Rust_Linux.zip""0""LowercaseOff""${systemdir}""OVERWRITE""ENGINES""Rust;""NOTGAMES""http://oxidemod.org/downloads/oxide-for-rust.1659""Allows for the use of plugins")
mod_info_rustoxide=( MOD "rustoxide""Oxide for Rust""https://raw.githubusercontent.com/OxideMod/Snapshots/master/Oxide-Rust.zip""Oxide-Rust_Linux.zip""0""LowercaseOff""${systemdir}""OVERWRITE""ENGINES""Rust;""NOTGAMES""http://oxidemod.org/downloads/oxide-for-rust.1659""Allows for the use of plugins")
mod_info_hwoxide=( MOD "hwoxide""Oxide for Hurtworld""https://raw.githubusercontent.com/OxideMod/Snapshots/master/Oxide-Hurtworld.zip""Oxide-Hurtworld_Linux.zip""0""LowercaseOff""${systemdir}""OVERWRITE""ENGINES""Hurtworld;""NOTGAMES""http://oxidemod.org/downloads/oxide-for-hurtworld.1332""Allows for the use of plugins")
mod_info_hwoxide=( MOD "hwoxide""Oxide for Hurtworld""https://raw.githubusercontent.com/OxideMod/Snapshots/master/Oxide-Hurtworld.zip""Oxide-Hurtworld_Linux.zip""0""LowercaseOff""${systemdir}""OVERWRITE""ENGINES""Hurtworld;""NOTGAMES""http://oxidemod.org/downloads/oxide-for-hurtworld.1332""Allows for the use of plugins")
mod_info_sdtdoxide=( MOD "sdtdoxide""Oxide for 7 Days To Die""https://raw.githubusercontent.com/OxideMod/Snapshots/master/Oxide-7DaysToDie.zip""Oxide-7DaysToDie_Linux.zip""0""LowercaseOff""${systemdir}""OVERWRITE""ENGINES""7 Days To Die;""NOTGAMES""http://oxidemod.org/downloads/oxide-for-7-days-to-die.813""Allows for the use of plugins")
mod_info_sdtdoxide=( MOD "sdtdoxide""Oxide for 7 Days To Die""https://raw.githubusercontent.com/OxideMod/Snapshots/master/Oxide-7DaysToDie.zip""Oxide-7DaysToDie_Linux.zip""0""LowercaseOff""${systemdir}""OVERWRITE""ENGINES""7 Days To Die;""NOTGAMES""http://oxidemod.org/downloads/oxide-for-7-days-to-die.813""Allows for the use of plugins")
# REQUIRED: Set all mods info into one array for convenience
# REQUIRED: Set all mods info into one array for convenience