The reason modding sucks (as of now).

Mods, guides how to use and install mods go right in here.
Post Reply
lovechild
Posts: 81
Joined: 12 Mar 2012, 03:30

Post » 13 Mar 2012, 10:08

No, this is not trollbait. No, this is not criticism about mods in general. This is a legitimate concern about it's implementation. Having different binaries, or installing a bunch of mods in the same game tends to suck balls as sometimes functions conflict, after ten or so mods it's hard to keep track of how things work, people making mappacks with mods MUST include the mods they used, and overall it's more a hassle than it's worth for the casual gamer.

I will say, mods are pretty damn alright. But let's not fall into the same tar pit trap that Minecraft has while there's still time for us to change. Here are several ideas to make modding mari0 fun, easy, and relatively safe.

keeping mods in a separate folder
The "Modloader"-esque mod here is on the right track when it comes to implementation. Modularity is a big part of modding, adding and removing components as one pleases, and eventually map packs will become useless as mods are removed, upgraded, modified etc.

There's a solution to this. People submit and have approved their modifications by a select group of moderators. Whenever a mod is used, a map pack will include a "mods" text file that mari0 will read from. If the mods suggested in the pack-do not exist, then the game will download from a mod repository everything it needs for the pack to work. Inspired partly by Tiny Core Linux, which keeps everything outside of the core system in an "Optional" folder that can be deleted in one fell swoop.

Managing mods
Over time, the mods folder, should such a thing exist, will contain every single approved mod downloaded. Some of them will be pack-specific, some of them will be graphics packs, other will be function mods and enhancers. Still, these things will exist in their own directory, and should be managed in-game, much like if a "Moddable" program is open, add-ons, plugins and extensions can be managed. This should also lead into the DLC and local menus, giving users the option to delete map packs without having to visit where they are stored. (Should also obsolete the "Press M for mappack folder" selection)

Implementing mods
The easiest way I can think of doing this is to simply install mods and enable them from the main menu. The editor should also have a similar menu for turning mods on and off, which will update available tiles, and delete tiles that are not being used. As mods are switched on and off, the mods text file will be modified to suit. Any user will see this added hurdle to using mods as a useless distraction, but in the long run it will allow the user to have complete control over what goes into the editor. So for the sacrifice of "Get up and go", users can micromanage what they wish to use so function creep and forgetting how stuff works happens much less often.

When finished, installation should be a breeze. When a map is selected, the game will seek out this mods text file, and if it does not exist, or all dependencies are satisfied, go straight into game; Otherwise, mods will be downloaded and put in their appropriate places, and the game will retry loading with these mods enabled.

mari0 is still young, and while it's a crap-ton of work to ask Maurice, it will benefit the community in the long run, with mods coming out of the proverbial arse, and only quality, useful content getting approved. The option for local mods should still exist, but users shouldn't rely on the existance of some odd mod an author forgets to include, so letting the game do the heavy lifting for users will be an immense long-term benefit.

Why all this matters
One word. Netplay. If you are connected to the internet, you can play with your friends. If you are able to play with your friends, then them too can download the same mods you can. Automating everything will lead to a much more enjoyable experience for everybody as there isn't much user confusion, which means people can get to their game and fun times much faster than otherwise.

The second word is ease, which I have already emphasized far too much on here. Let's make this happen for the benefit of our community.

Maurice
Stabyourself.net
Posts: 2145
Joined: 01 Feb 2012, 20:19

Post » 14 Mar 2012, 01:13

I simply have no idea how to make a modding system.

MiniDemonic
Posts: 18
Joined: 08 Mar 2012, 01:05

Post » 14 Mar 2012, 06:44

IMO, an open-source indie game is only for Casual Players when the game is in the original state. Modding for an O-S game has and always will be for the more involved.

If you can't handle sorting out your own folders with all the different .love/.exe/.whatever files, then you shouldn't be using mods.

And since this game is Open-Source, you can add this mod system of yours by yourself instead of begging Maurice, you seem to know exactly what you are talking about.

User avatar
The Architect
Posts: 13
Joined: 09 Mar 2012, 07:29

Post » 14 Mar 2012, 07:04

Exactly...this is Mari0, not Mass Effect...also not sure why OP considers himself the rule maker on this...open source means open - no rules...

lovechild
Posts: 81
Joined: 12 Mar 2012, 03:30

Post » 14 Mar 2012, 09:57

There are some issues with the other people that need to be sorted out. First, I wasn't writing rules. I was emphasizing the rationale behind this so very much because I feel this is super-duper important if netplay ever does happen.

Second, I DON'T know what I am doing. If I could code it myself, I wouldn't need the help of you more intrepid coders who make half this stuff happen out of what appears to be from a top hat. I am what most here would call a noob. And forever a noob I shall be until I get the gall to get serious about programming, which most likely will never, ever happen. Whoever does do a netplay system that takes into account mods, gold stars for them.

Third, rules. There ARE rules in open-source. Sure, they are more flexible, but they are rules to follow, especially when incorporatiing functions from more-established software. Maurice had to follow a strict set of rules when programming mari0 for it to function, otherwise if He just typed any old thing out, it wouldn't run in love. Hell, Linus has to follow his own rules He made up for other people when it comes to working with software, like how to handle Git packages and how to best modify the kernel.

Goes back to point #2, if I could just type into a text editor "Analyze mari0 and make P2P netplay and mod transfer within the game happen", then save it and have it work, then I wouldn't have made such a lengthy-ass post about it.

MiniDemonic
Posts: 18
Joined: 08 Mar 2012, 01:05

Post » 14 Mar 2012, 15:17

The only rules we should follow regarding this game is the rules that Maurice has set.
Which, in regards of modding, is none.

User avatar
slime
Shaders guy
Posts: 148
Joined: 02 Feb 2012, 21:37

Post » 14 Mar 2012, 23:02

lovechild wrote:Third, rules. There ARE rules in open-source. Sure, they are more flexible, but they are rules to follow, especially when incorporatiing functions from more-established software. Maurice had to follow a strict set of rules when programming mari0 for it to function, otherwise if He just typed any old thing out, it wouldn't run in love.
To use LÖVE you have to utilize its API, but that has nothing to do with OSS.

User avatar
trosh
Posts: 1594
Joined: 03 Feb 2012, 08:36

Post » 14 Mar 2012, 23:12

rules : make it work. hopefully.

User avatar
creeper1919
Posts: 29
Joined: 10 Jul 2013, 19:56

Post » 12 Jul 2013, 04:29

how do you install modloader
Last edited by Sašo on 12 Jul 2013, 15:20, edited 1 time in total.
Reason: removed font effects

User avatar
Firaga
Posts: 931
Joined: 02 Jul 2012, 16:05
Contact:

Post » 12 Jul 2013, 04:31

creeper1919 wrote:how do you install modloader
Don't use colored text, or any other font to edit your text in some way. They're meant to be used to point out helpful information, not because you can do it anyway. And you've bumped this by over a year. Don't do that, look at the last post's date. If it's been a while (~1 month), don't post, unless it's urgent.
As for your question, I believe ucenna made a modloader a while ago.
You can find that here.

User avatar
Turtle95
Posts: 1246
Joined: 21 Mar 2012, 21:48
Contact:

Post » 12 Jul 2013, 05:16

The part about downloading the mods is doable through Lua, in case anyone was wondering. I'm using it myself to download stuff such as DLC and whatnot to my Lua game. AFAIK, it only works with public dropbox links, but might just work also with something like mediafire. If anyone wants the source, I'll gladly post it. However, for the most part about modding, SE will have custom enemies which are mappack-dependent.

HAPPYFACES
Posts: 524
Joined: 02 Jun 2012, 03:40

Post » 12 Jul 2013, 09:09

Yes please :3

User avatar
Turtle95
Posts: 1246
Joined: 21 Mar 2012, 21:48
Contact:

Post » 12 Jul 2013, 16:57

Well, for the DLC, it's quite simple. Firstly, you have to do:

Code: Select all

http = require("socket.http")
Somewhere in the love.load function. Then, you can easily do this:

Code: Select all

function download(imagelink, settingslink, location, filename)
	if type(imagelink) ~= "string" then
		imagelink = tostring(imagelink) --it has to be a string URL, or it won't work
	end
	
	--Shit just got real
	local file
	
	
	info, b, c = http.request(imagelink) --request 'info', the data that we want, and store it
		
	if not love.filesystem.exists("version/") then
		love.filesystem.mkdir("version/") --for update checking
	end
	
	if settingslink then --this is for the DLC, mainly for hats
		local d,e,f = http.request(settingslink) --again, we're storing to 'd' the info of the file
		file = filename:gsub(".png", "") -- since this is for hats, I use a hats folder to load the custom ones. They have their own folder in "hats/" named after their graphic
		
		if not love.filesystem.exists("hats/" .. file) then
			love.filesystem.mkdir("hats/" .. file) -- we'll need to make the directory if it does not exist
		end
		
		love.filesystem.write(location .. "/" .. file .. "/" .. "config.txt", d) --write the config file
	end
	
	if settingslink == nil then
		file = "" --since it's for updating purposes,  I skip naming the folder
	end
	
	love.filesystem.write(location .. "/" .. file .. "/" .. filename, info) --write the other file that can be anything (text file, png, etc)
end
What you then do, is call the new download function:

Code: Select all

function checkversion()
        local versionlink = "link-to-new-version.txt"
	download(versionlink, nil, "version/", "version.txt") --always check
	
	local aa = love.filesystem.read("version/version.txt")
	
	return aa
end
During load, I check that version from the function:

Code: Select all

if tempnew > versionstring then
	print("WE NEED AN UPDATE NOW!")
	download("url-to-new-version", nil, "version/", "game.love")
else
	print("Version: OK!")
end
This is how you'd download the mods, more or less. In this case, it's self-updating, but just as an example. You can test it yourself. I've done trials with just public dropbox, but also the Stabyourself logo for the forums, and a few other things. It works. I haven't tried Mediafire just yet, though.

User avatar
BobTheLawyer
Posts: 2232
Joined: 01 May 2012, 21:00

Post » 13 Jul 2013, 01:53

Can I use it in a paid game?

User avatar
Turtle95
Posts: 1246
Joined: 21 Mar 2012, 21:48
Contact:

Post » 13 Jul 2013, 06:48

You should at least give credits to Hatninja and me. Hatninja made it work, and I was wondering how Lua socket was supposed to work properly.

User avatar
BobTheLawyer
Posts: 2232
Joined: 01 May 2012, 21:00

Post » 13 Jul 2013, 16:45

Of course I give credit.

Post Reply