Mod Loader [Now Has Hub World!]

Mods, guides how to use and install mods go right in here.
Post Reply
ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 18 Apr 2013, 17:42

Mari0 Mod Loader

Download:http://www.mediafire.com/download.php?4sp7t3ue2k62cua

Warning: I take no responsibility for anything this or mods made for this do to your computer. This is not sandboxed. You have been warned.

Warning two: If you use this you won't be able to use turtle95's character loader. To fix this simply delete your options.txt file.

Have you ever wanted to add a mod to you mappack but didn't because you didn't want any potential players to have to download another custom mari0 executable. Well no longer! This mod loader won't completely eliminate that problem but it will allow all mods to be run from the mappack, and by extension not from a custom love.

To make mods for this simply
1. make your mod
2. place the modified lua/s in your mappack's folder.
3. If there is more than one lua, make a new lua that launches all the other luas name it loadmod.lua and place it in your mappack's folder.
4. If there is more than one lua, copy the original vanilla luas to your mappack's folder changing their names as necessary and make a new lua named unloadmod.lua that loads them and place it in your mappack's folder
5. If there is only one lua, rename it loadmod.lua
6. If there is only one lua, copy the original unmodded lua and paste it in your mappack's folder under the new name of unloadmod.lua
7. Bam! Your done!
Last edited by ucenna on 05 May 2013, 01:52, edited 16 times in total.

User avatar
Automatik
Posts: 1073
Joined: 20 Jul 2012, 17:54
Contact:

Post » 18 Apr 2013, 18:06

It's doable, but you need to learn to code.
Like, you put something like this:

Code: Select all

if love.filesystem.exists('mappacks/'..mappackname..'/mod.lua')then
    love.filesystem.load('mappacks/'..mappackname..'/mod.lua')()
end
In game_load().(You can override vanilla functions from here)
Problem: you can't restore functions, but when quitting the game, we could do something like

Code: Select all

if love.filesystem.exists('mappacks/'..mappackname..'/unloadmod.lua')then
    love.filesystem.load('mappacks/'..mappackname..'/unloadmod.lua')()
end
Where "unloadmod.lua" restore the default functions.
The problem is that it's not sandboxed.

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 18 Apr 2013, 19:17

Doesn't seem to hard. If I understand correctly the first section'll check and load the mod. What if it finds an loads a mod? Will I have to prevent it from loading the default then?
Problem: you can't restore functions, but when quitting the game, we could do something like
Does that mean I can't force it to load the default .lua if I loaded a modded one?
The problem is that it's not sandboxed.
I don't entirely understand what sandboxing is but is it really necessary?
Edit: I changed you first code to this:

Code: Select all

if love.filesystem.exists('mappacks/'..mappack..'/editor.lua')then
    love.filesystem.load('mappacks/'..mappack..'/editor.lua')()
end
Now if the mappack has a custom editor.lua it loads it, (hangs a bit when it boots though...) Success! Now I just need to repeat this 50 more times with slight variation and I'll be done! Thanks!

User avatar
Automatik
Posts: 1073
Joined: 20 Jul 2012, 17:54
Contact:

Post » 18 Apr 2013, 19:35

Doesn't seem to hard. If I understand correctly the first section'll check and load the mod. What if it finds an loads a mod? Will I have to prevent it from loading the default then?
No, because the default files are loaded before the mappack is opened, and the default functions get overriden anyways.
The problem is that it's not sandboxed.
I don't entirely understand what sandboxing is but is it really necessary?
Sandboxing mean that you keep the mod from doing "bad" things like deleting files, etc.(A mod can do as much as a standalone love2d game) It's not absolutely necessary, but it's security so it's never a bad thing.
Edit: I changed you first code to this:

Code: Select all

if love.filesystem.exists('mappacks/'..mappack..'/editor.lua')then
    love.filesystem.load('mappacks/'..mappack..'/editor.lua')()
end
Now if the mappack has a custom editor.lua it loads it, (hangs a bit when it boots though...) Success! Now I just need to repeat this 50 more times with slight variation and I'll be done! Thanks!
Or you can do a loop.

Code: Select all

for i,v in ipairs({'editor','game','mario',etc}) do
    if love.filesystem.exists('mappacks/'..mappack..'/'..v..'.lua')then
        love.filesystem.load('mappacks/'..mappack..'/'..v..'.lua')()
    end
end
But it's useless because you can put every change you do into one file.(mod.lua)
Ex, mod.lua:

Code: Select all

oldproperprint=properprint
function properprint(s, x, y)
love.graphics.print(s,x,y)
end
unloadmod.lua:

Code: Select all

properprint=oldproperprint

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 18 Apr 2013, 20:10

Okay with my limited programming knowledge I'm having trouble picking up what your laying down. would using mod.lua make it refer to the custom luas it needs, would it "patch" the luas it wants changed, or something else that I clearly don't understand.

sorry I'm so slow...

Alternatively, it could just load any luas within the mappack's folder although that's probably not as good as using a mod.lua. Edit: I don't actually know how to do that.

Also why is the unloadmod.lua necessary?

User avatar
Automatik
Posts: 1073
Joined: 20 Jul 2012, 17:54
Contact:

Post » 18 Apr 2013, 20:39

Okay with my limited programming knowledge I'm having trouble picking up what your laying down. would using mod.lua make it refer to the custom luas it needs, would it "patch" the luas it wants changed, or something else that I clearly don't understand.
The "mod.lua" is a file in the mappack. It patch the game, it will only change the parts of the game you want.
Alternatively, it could just load any luas within the mappack's folder although that's probably not as good as using a mod.lua. Edit: I don't actually know how to do that.
Well, yes, but since you will probably just change some parts of a lua file and not completely replace it, you will just put the parts that you changed.
And since there is no reason to have to separate the mod into multiple files(try to put the content of game.lua into editor.lua, and vice-versa:Everything still work!), we just load a mod.lua .
Also why is the unloadmod.lua necessary?
Because the mod.lua can change things in the game that can't be undone magically(unless you restart the game).
Let say you put in mappack1 a mod.lua that make goombas jump.
When you load mappack1, you have the jumping goombas. Cool, everything work!
Then you load mappack2, the goombas will still jump, because the code that make goombas jump is still here.
So, when you stop playing mappack1, you should put a unloadmod.lua that restore goombas to their non-jumping state.

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 18 Apr 2013, 21:00

Okay, now it makes sense. I'll hopefully get a .love up soon. Interesting question? How does one make a mod? If I wanted to say, make turtle's or qcode's extra entities, work with this how would I do that?

User avatar
Automatik
Posts: 1073
Joined: 20 Jul 2012, 17:54
Contact:

Post » 18 Apr 2013, 21:27

Well, it's a per-mappack mod loader.
If you want to load "globals" mod, then put in love.load, after the looooooooong require() list:

Code: Select all

love.filesystem.mkdir('mods')
for v in love.filesystem.enumerate('mods/') do
    if love.filesystem.exist('mods/'..v..'/init.lua') then
        love.filesystem.load('mods/'..v..'/init.lua)(v)
    end
end
Then, a "mods" folder will appear, next to the mappack folder, and if you put a folder inside that contain a init.lua, it will load it.
But the problem here is that Turtle's more entity mod was never made for this, and will probably don't work.

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 18 Apr 2013, 21:40

Yeah your probably right about that...

What if you just patched the files according to EntranceJew's guide? Would that work for adding entities?

I'm having trouble finding where the game quits, would you happen to know where it is?

User avatar
Automatik
Posts: 1073
Joined: 20 Jul 2012, 17:54
Contact:

Post » 18 Apr 2013, 21:47

Ah, uh, it's at multiple places(because there is multiple ways of quitting.)
So, ctrl+F "_load"
Line 3448

Code: Select all

function nextlevel()
	love.audio.stop()
	mariolevel = mariolevel + 1
	if mariolevel > 4 then
		mariolevel = 1
		marioworld = marioworld + 1
	end
	levelscreen_load("next")
end
3458

Code: Select all

function warpzone(i)
	love.audio.stop()
	mariolevel = 1
	marioworld = i
	mariosublevel = 0
	prevsublevel = false
	
	-- minus 1 world glitch just because I can.
	if not displaywarpzonetext and i == 4 then
		marioworld = "M"
	end
	
	levelscreen_load("next")
end
4107

Code: Select all

function endgame()
	love.audio.stop()
	playertype = "minecraft"
	playertypei = 2
	gamefinished = true
	saveconfig()
	menu_load()
end
2610

Code: Select all

function game_keypressed(key, unicode)
	if pausemenuopen then
		if menuprompt then
			if (key == "left" or key == "a") then
				pausemenuselected2 = 1
			elseif (key == "right" or key == "d") then
				pausemenuselected2 = 2
			elseif (key == "return" or key == "enter" or key == "kpenter" or key == " ") then
				if pausemenuselected2 == 1 then
					love.audio.stop()
					pausemenuopen = false
					menuprompt = false
					#HERE
					menu_load()
				else
					menuprompt = false
				end

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 18 Apr 2013, 21:51

Okay. I had found the 2610 one, but it wasn't working since my test subject was editor.lua and I'd go straight from the editor to a different mappack. I'll check out the other ones.

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 18 Apr 2013, 22:04

BAM!
http://www.mediafire.com/download.php?6rl0tnqgonyvlm1
I decided it was easy, and more concise, to just run the unloadmod.lua as part of the menu_load function.
Oh credit goes to Automatik because he did pretty much everything
I'd make a thread for this but I don't really know how it works...

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

Post » 18 Apr 2013, 22:05

Isn't there already a mod loader?

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 18 Apr 2013, 22:10

This: viewtopic.php?f=13&t=782&p=12217&hilit=system#p12217
I guess this one goes straight through the mappacks folder, so you can (hopefully) more easily use mods with a mappack that won't effect other mappacks.

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

Post » 18 Apr 2013, 22:13

Another question, will this allow me to modify Mario.lua and others?

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 18 Apr 2013, 22:16

I'm going to assume so. But Automatik did virtually all the coding so I can't say. Furthermore I don't even know how to make a mod. I was using it to run the better level editor through the mappack folder and it worked like a charm. If you try making a custom mario.lua and rename it to loadmod.lua and put it in your mappack folder it should load it instead of the default one.

Edit: You'll need to rename the default mario.lua to unloadmod.lua and put it in the mappack to unload the mod when you switch mappacks.

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

Post » 18 Apr 2013, 22:23

Why?

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 18 Apr 2013, 22:53

Edited original post with instructions and stuff!

@BobTheLawyer

This explains it pretty well.
Because the loadmod.lua can change things in the game that can't be undone magically(unless you restart the game).
Let say you put in mappack1 a loadmod.lua that make goombas jump.
When you load mappack1, you have the jumping goombas. Cool, everything work!
Then you load mappack2, the goombas will still jump, because the code that make goombas jump is still here.
So, when you stop playing mappack1, you should put a unloadmod.lua that restore goombas to their non-jumping state.
Oh, and this isn't sandboxed so use someone else's mods at your own risk.

User avatar
Qcode
Posts: 1479
Joined: 05 Feb 2012, 18:00
Contact:

Post » 18 Apr 2013, 23:04

...
Last edited by Qcode on 21 Oct 2021, 17:38, edited 1 time in total.

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 18 Apr 2013, 23:07

Your probably right, this isn't sandboxed anyway though.

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

Post » 18 Apr 2013, 23:12

@QCode, There are many levels of sandboxing. You could sandbox it to a degree so it still worked.

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

Post » 19 Apr 2013, 03:41

Qcode wrote:
ucenna wrote:If I wanted to say, make turtle's or qcode's extra entities, work with this how would I do that?
I doubt you'd be able to sandbox extra entities. It does so much shit to the physics to get those gels working it's unreal.
You wish QCode. I got gels working for my EE Mari0MS port over. What now?

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 19 Apr 2013, 19:08

edit: never mind
Last edited by ucenna on 19 Apr 2013, 19:52, edited 1 time in total.

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 19 Apr 2013, 19:38

edit: never mind
Last edited by ucenna on 19 Apr 2013, 19:53, edited 1 time in total.

User avatar
Automatik
Posts: 1073
Joined: 20 Jul 2012, 17:54
Contact:

Post » 19 Apr 2013, 19:41

Why would you want to change the main.lua? You could load and replace stuff with the mod.lua.

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 19 Apr 2013, 19:42

Mainly because editing the main.lua is the only way I know of to change sprites.
edit: my loadmod.lua currently loads other custom luas because I don't know how to mod with a single lua file.

User avatar
Automatik
Posts: 1073
Joined: 20 Jul 2012, 17:54
Contact:

Post » 19 Apr 2013, 19:46

You can copy-paste the revelants lines in mod.lua
Ex, mod.lua:

Code: Select all

oldgoombaimage=goombaimage
goombaimage = love.graphics.newImage("mappack/"..({...})[1].."/greengoomba.png")
unloadmod.lua

Code: Select all

goombaimage=oldgoombaimage

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 19 Apr 2013, 19:51

*sigh* why do I even try?

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

Post » 19 Apr 2013, 19:53

Because it is a good idea.
I, personally, am done messing with other's code.
I want to program my own game.

There aren't many modders left that would use your modloader, though...

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 19 Apr 2013, 20:55

That's okay. It's mainly meant to make it easier for mappers to enclose mods with their maps. Assuming enough people were to use this, people wouldn't have to download a new modded .love for the maps that use them i.e. A0zora, Under Aperture, the list goes on.
Oh and partially modded A0zora that's compatible with this:http://www.mediafire.com/?wfzrfumed88ulxu (Used without permission. if SJB wants me to get rid of this he only need ask)
ucenna wrote:It's mainly meant to make it easier for mappers to enclose mods with their maps.
Well, actually...
Image

User avatar
Automatik
Posts: 1073
Joined: 20 Jul 2012, 17:54
Contact:

Post » 19 Apr 2013, 21:03

Well, actually...
Image
  1. Use "unloadmod.lua" if you want to turn off a mod
  2. Use the "mods folder" method if it shouldn't be a mappack specific mod.

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 22 Apr 2013, 17:36

Updated:
-bundle (without permission) with Mari0MS Credit goes to respective owner)
mods from MMS go in the mappacks folder. they now go in your mappack's mods folder In the future they will probably go in mappacks/(insert name here)/mods folder. And I might add a seperate tab in the mappack section for enabling/disabling mods

@ Automatik:
1. sorry
2. Maybe, but the less work necessary to any potential user the better. if it's possible to only have to specify one folder it's probably better

Edit: I updated this again. The original one doesn't work just so you know.

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 24 Apr 2013, 01:38

I guess I don't understand. Isn't that what this does minus maybe all the organization?

User avatar
Automatik
Posts: 1073
Joined: 20 Jul 2012, 17:54
Contact:

Post » 24 Apr 2013, 10:54

I think he meant being able to create an entity with:

Code: Select all

modloader:createentity(name,desc,icon,class)
The advantage over the "replacing entity table" is that it's simpler, and allow for multiple mods to add entities)

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 24 Apr 2013, 14:20

Ahhh.....
I might be able do that. Since there is already two ways that you can add entities with this (through the loadmod.lua and Mari0MS which this is packaged with) I probably won't though.
updated: added turtle's character loader (without permission)
put characters in /mappacks/your mappack/characters
currently this will only use characters in the chosen mappacks folder.

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 25 Apr 2013, 02:59

Updated: Just realized that if a variable is declared in game.lua it won't be changeable in the loadmod.lua so I fixed it. If you want to change a variable simple make a variable in your loadmod.lua name loadgamelua and make it equal 'no' as so:

Code: Select all

loadgamelua = 'no'
This will prevent it from running the rest of the game_load(suspend) function so you'll have to copy it's contents to your loadmod.lua and change the variable from there. If I missed any important customization that should be added just tell me.

User avatar
Automatik
Posts: 1073
Joined: 20 Jul 2012, 17:54
Contact:

Post » 25 Apr 2013, 10:09

Nooooooooo
Here, we have a basic mod loader. if you want to replace stuff in game_load(), copy-paste and modify that . So, what's the point of your hack?
If you want to be able to override variables from game_load, then put that

Code: Select all

if love.filesystem.exists('mappacks/'..mappackname..'/mod.lua')then
    love.filesystem.load('mappacks/'..mappackname..'/mod.lua')()
end
At the end of game_load. not at the beginning.
But if you want to make it easier to add entities, don't make things like that.
Add a proper modloader:createentity(name,desc,icon,class).

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 25 Apr 2013, 19:02

Sorry, I have a tendency of finding the hard way of doing everything. If people want to make entities I let them use Mari0MS, at least for now. It's already packaged with this and (seems) easy enough to use.
Update: did what Automatik said concerning the game_load stuff.

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 01 May 2013, 15:40

I made a hub world thing using this! Actually I primarily used Mari0MS but it's packaged to be compatible with this. http://www.mediafire.com/download.php?8yko1q1orjib5na (see below)
Naturally you'll need the modloader to use this. Please note that all of my custom entities stink. This is basically a proof of concept (except I don't know what those are) so I 'll just call it a proof of possibility.
Last edited by ucenna on 01 May 2013, 20:39, edited 1 time in total.

User avatar
Flutter Skye
Posts: 1690
Joined: 08 Apr 2012, 17:54
Contact:

Post » 01 May 2013, 15:45

ucenna wrote:I made a hub world thing using this! Actually I primarily used Mari0MS but it's packaged to be compatible with this. http://www.mediafire.com/download.php?8yko1q1orjib5na
Naturally you'll need the modloader to use this. Please note that all of my custom entities stink. This is basically a proof of concept (except I don't know what those are) so I 'll just call it a proof of possibility.
Can you give us evidence a screenshot ?

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 01 May 2013, 15:57

Sure! Be warned though, there isn't much to look at.
Image
the number in the green star shows how many stars have been obtained, which it finds out by looking in the stars.lua I made. the grey stars are stargates you need 0 stars for the first two 1star for the second two and so on. The last two are setup as they are because I don't know how to stack them. under the two pipes there is access to two gold stars. which if you get will add one to your star count and changes a variable in stars.lua that effectively terminates there existence. Since stars.lua gets changed during gameplay it has an "autosave" feature.

User avatar
Flutter Skye
Posts: 1690
Joined: 08 Apr 2012, 17:54
Contact:

Post » 01 May 2013, 16:13

So you made Super Mario 64 possible ? You are awesome.

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 04 May 2013, 22:09

More or less... I wouldn't recommend using this until it gets some serious polishing. kinda hope some of our more experienced coders fix this hope because I don't have much idea on how to do it.
Heres a quick list o' flaws:
Star Counter is rendered in the foreground.
Star Counter doesn't have a proper entity png.
Stars & Star Gates are effected by gravity.
Stars & Star Gates might be affected by turtle shells and stuff.they're not. But neither are the turtle shells
Stars & Star Gates don't have drop down menus/boxs, if you want to make more you have to make more entities. Unfortuantely I don't know how to make text box drop downs yet so you'll have to use the good old fashion right click menu. Until I get it figured, you'll be limited to approx 20 stars

Fun fact: all the custom entities are modified poison shrooms.

Updated: fixed a few things and removed a ton of unnecessary code from my hub world stuff.
http://www.mediafire.com/download.php?1aznzzjjeiw9uz1

edit: make sure you have a hub folder inside of your mappack.

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 05 May 2013, 01:49

Guess what! My mod loader had a HUGE flaw! It used to load the unloadmod.lua to quick and effectively disabled the loadmod.lua before it could even be used. But I fixed it so If anyone is using this I encourage them to give the fixed mod loader (in the original post) a download. Oh this also loads (and unloads) the mod at the mappack screen.

User avatar
TripleXero
Posts: 892
Joined: 08 Aug 2012, 00:23
Contact:

Post » 07 May 2013, 06:07

I figured it was better to post it here than the ANSYS thread, but I think it'd be cool if I could use the differing physics per character for my SMB mod if you didn't mind

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 07 May 2013, 15:38

Sure! I was actually considering making a physics for character mod for all the players but you beat me too it. Just a note the code doesn't check the player number, it checks which character is selected. Anywho, here's the code:

Code: Select all

if characteri ~= nil then
if characterlist[characteri] == "luigi" then
(insert modified physics. here luigi used this:
friction = 5
yaccelerationjumping = 27
hatoffsets = {}
hatoffsets["idle"] = {0, 2}
hatoffsets["running"] = {{0, 2}, {0, 2}, {-1, 1}}
hatoffsets["sliding"] = {0, 2}
hatoffsets["jumping"] = {0, 1}
hatoffsets["falling"] = {0, 2}
hatoffsets["climbing"] = {{2, 2}, {2, 1}}
hatoffsets["swimming"] = {{1, 1}, {1, 1}}
hatoffsets["dead"] = false
hatoffsets["grow"] = {-6, 2})
else
(insert default code here or change the else to an elseif and make code for something else, luigi used this for default code:
friction = 14
yaccelerationjumping = 30
hatoffsets = {}
hatoffsets["idle"] = {0, 0}
hatoffsets["running"] = {{0, 0}, {0, 0}, {-1, -1}}
hatoffsets["sliding"] = {0, 0}
hatoffsets["jumping"] = {0, -1}
hatoffsets["falling"] = {0, 0}
hatoffsets["climbing"] = {{2, 0}, {2, -1}}
hatoffsets["swimming"] = {{1, -1}, {1, -1}}
hatoffsets["dead"] = false
hatoffsets["grow"] = {-6, 0})
end
end

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 09 May 2013, 19:40

Slight update: Now loads custom entities per mappack. Doesn't unload them though. Shouldn't be a problem unless you accidentally add an entity to a mappack that doesn't have it in it's mods folder.
http://www.mediafire.com/download.php?dre608la83ot76f

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

Post » 17 May 2013, 02:09

If that's the case, maybe add an extra graphic to overlay on the mod's graphic that says "NOT INSTALLED" or something?

ucenna
Posts: 615
Joined: 11 Jan 2013, 20:06

Post » 17 May 2013, 04:11

If I knew how to do that, It would be hard to make them dissappear when mappacks are changed. Unfortunately I don't.

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

Post » 17 May 2013, 04:23

I was wondering if it'd go something like
Check if the mod is there in the mappack folder (love.filesystem.Exists()) after loading the mod
If it doesn't, then draw the "Not Installed" graphic in place of the actual graphic.

But then again I'm no expert in this stuff, just giving basic ideas off what I know o3o

Post Reply