Resources folder?

Questions about the LÖVE API, installing LÖVE and other support related questions go here.
Forum rules
Before you make a thread asking for help, read this.
Post Reply
Head Over Heels
Prole
Posts: 9
Joined: Wed Feb 09, 2011 4:40 pm

Resources folder?

Post by Head Over Heels »

Hello,

You will have to forgive my complete ignorance but I am just starting out with LOVE and LUA. I am the very definition of a noob.

I'm just playing around with it at the moment and trying to implement that script where you load the image of a hamster, but I am unsure as to where I should be storing the image, or indeed any other images/sounds etc that I may want to use in my functions. I cannot find a resources folder or library. Do I need to create one alongside my script?

This will probably be the first in a series of similarly rudimentary questions. Any help appreciated,

HOH
User avatar
nevon
Commander of the Circuloids
Posts: 938
Joined: Thu Feb 14, 2008 8:25 pm
Location: Stockholm, Sweden
Contact:

Re: Resources folder?

Post by nevon »

They can be stored anywhere you want. The path is UNIX-style and relative to your main.lua file.

Here's an example from a real project:

Code: Select all

nevon@nevon-desktop:~/workspace/Love-LD18$ tree
.
|-- arena.lua
|-- bull.lua
|-- conf.lua
|-- fonts
|   |-- burnstown_dam.otf
|   |-- Chunkfive.otf
|   |-- Larabie Fonts License.txt
|   `-- SIL Open Font License 1.1.txt
|-- gfx
|   |-- bg.png
|   |-- bloodparticle.png
|   |-- bomb.png
|   |-- bull_icon.png
|   |-- bulls_caught.png
|   |-- bulls.png
|   |-- city.png
|   |-- comboicon.png
|   |-- cowboy_icon.png
|   |-- deadplayer.png
|   |-- dust.png
|   |-- emptyheart.png
|   |-- fullheart.png
|   |-- gaycity.png
|   |-- gore.png
|   |-- hat_gripping.png
|   |-- hat.png
|   |-- hat_spinning.png
|   |-- lasso.png
|   |-- menucow.png
|   |-- minimap.png
|   |-- playerspinning.png
|   |-- playerwalkanimation.png
|   |-- sandtile.png
|   `-- walltiles
|       |-- bottomleft.png
|       |-- bottom.png
|       |-- bottomright.png
|       |-- gate.png
|       |-- left.png
|       |-- right.png
|       |-- topleft.png
|       |-- top.png
|       `-- topright.png
|-- lib
|   |-- AnAL.lua
|   |-- gamestate.lua
|   |-- SECS.lua
|   `-- soundmanager.lua
|-- main.lua
|-- makelove.sh
|-- minimap.lua
|-- music
|   |-- LICENCE
|   |-- struttin_rag.ogg
|   `-- vestapol.ogg
|-- player.lua
|-- README
|-- sfx
|   |-- bombfall
|   |-- bombfall.ogg
|   |-- chirp.ogg
|   |-- CREDITS
|   |-- impact.ogg
|   |-- ow.ogg
|   |-- splat.ogg
|   |-- yay.ogg
|   `-- yeehaw.ogg
|-- states
|   |-- game.lua
|   |-- intro.lua
|   |-- lost.lua
|   `-- menu.lua
`-- utils.lua
In this example, to use topright.png you'd do:

Code: Select all

img = love.graphics.newImage('gfx/walltiles/topright.png')
Head Over Heels
Prole
Posts: 9
Joined: Wed Feb 09, 2011 4:40 pm

Re: Resources folder?

Post by Head Over Heels »

Hi, nevon, thanks alot, that is very helpful!!
User avatar
Jasoco
Inner party member
Posts: 3726
Joined: Mon Jun 22, 2009 9:35 am
Location: Pennsylvania, USA
Contact:

Re: Resources folder?

Post by Jasoco »

When a Löve game runs, it looks in one of two places. (Are there more?) The .love bundle itself (Which can be a folder or ZIP file) and its resources folder whose location changes depending on what OS you use. (For example, on OS X it's in ~/Library/Application Support/Love/Game_Name/ where Game_Name is either the name of the .love bundle or whatever you manually set it to inside the game. Linux has it under ~/.love/ I think and Windows is in the AppData inside a hidden folder called .love. But I might be completely and utterly wrong. I only use OS X and it might have slipped my mind.)

It looks in the support resources folder first before falling back to the .love bundle. For example, if you have a file called image.png inside both the bundle and the resource folder, it will load the resource one instead of the bundle one. This can be useful for making games that update themselves through patches. Though it also makes it possible for people to just drop properly named files into the right place and change your game completely.

MineCraft does this same thing where it just downloads and runs all its resources from a library folder. And when an update is released, it replaces the current files with the new ones. The application you launch is basically just a front-end that loads whatever is in the folder. Which is why it's so easy to modify MineCraft. Love can download files via the sockets and could have games that also update themselves in much the same manner.
Head Over Heels
Prole
Posts: 9
Joined: Wed Feb 09, 2011 4:40 pm

Re: Resources folder?

Post by Head Over Heels »

Thanks for your help, I think I'm now clear on how resources are handled. I'm using Windows, BTW.
User avatar
Jasoco
Inner party member
Posts: 3726
Joined: Mon Jun 22, 2009 9:35 am
Location: Pennsylvania, USA
Contact:

Re: Resources folder?

Post by Jasoco »

Head Over Heels wrote:Thanks for your help, I think I'm now clear on how resources are handled. I'm using Windows, BTW.
You're welcome. The folder is hidden so you have to type the path in manually to get it to show up, or turn on hidden files for the correct folder. You won't need to go in there most of the time anyway. Just put all your resources inside the .love bundle. The AppData folder is just where Löve saves files when you use the write commands. (For saving games or preferences for your game)

Start with a single .lua file called main.lua and work from there. As long as you load the other files relative to the root of the .love folder/zip, it will work. If you want to be clean, put files in logical places so it's not just a cluttered mess of .lua's, .png's, fonts and sounds.
User avatar
miko
Party member
Posts: 410
Joined: Fri Nov 26, 2010 2:25 pm
Location: PL

Re: Resources folder?

Post by miko »

Jasoco wrote:When a Löve game runs, it looks in one of two places. (Are there more?)
Yes, it looks in standard places for Lua (package.path and package.cpath), and then in "LOVE game directories.", which are OS dependent.
For example, on my linux host:

Code: Select all

$ echo "require 'nosuchfile' > main.lua
$ love .
Checking file main.lua
Checking file nosuchfile.lua
Error: [string "main.lua"]:1: module 'nosuchfile' not found:
	no field package.preload['nosuchfile']
	no file './nosuchfile.lua'
	no file '/usr/share/luajit-2.0.0-beta5/nosuchfile.lua'
	no file '/usr/local/share/lua/5.1/nosuchfile.lua'
	no file '/usr/local/share/lua/5.1/nosuchfile/init.lua'
	no file '/usr/share/lua/5.1/nosuchfile.lua'
	no file '/usr/share/lua/5.1/nosuchfile/init.lua'
	no file './nosuchfile.so'
	no file '/usr/local/lib/lua/5.1/nosuchfile.so'
	no file '/usr/lib/lua/5.1/nosuchfile.so'
	no file '/usr/local/lib/lua/5.1/loadall.so'
	no file "nosuchfile" in LOVE game directories.
Shared (and library) paths for Lua can be set with environment variables:

Code: Select all

$ LUA_PATH="/tmp/?.lua" LUA_CPATH="/tmp/?.so" love .
Checking file main.lua
Checking file nosuchfile.lua
Error: [string "main.lua"]:1: module 'nosuchfile' not found:
	no field package.preload['nosuchfile']
	no file '/tmp/nosuchfile.lua'
	no file '/tmp/nosuchfile.so'
	no file "nosuchfile" in LOVE game directories.
BTW, "current path" (which is ./) would be inside bundle, but other (absolute) paths are global, so watch out for any conflicting file names!.
Example:

Code: Select all

$ echo "NAME='local'" > settings.lua
$ echo "NAME='system'" > /tmp/settings.lua
$ echo "require 'settings'; print (NAME)" > main.lua
$ love .
Checking file main.lua
local
$ LUA_PATH="/tmp/?.lua" love .
Checking file main.lua
system
The package.path and package.cpath are set during compilation time of lua (which is embedded into love). For love it would be safer to set those to "./?.lua;./?/init.lua" and "./?.so". However, thanks to the current package.cpath, I am able to use system-installed libraries from within love script (just by require "module"):

Code: Select all

print(require('lpeg').version())
My lovely code lives at GitHub: http://github.com/miko/Love2d-samples
User avatar
tentus
Inner party member
Posts: 1060
Joined: Sun Oct 31, 2010 7:56 pm
Location: Appalachia
Contact:

Re: Resources folder?

Post by tentus »

Jasoco wrote:... Windows is in the AppData inside a hidden folder called .love. ...
It varies depending on the version of Windows. On my Win7 machine, it is C:\Users\Tentus\AppData\Roaming\LOVE\ (AppData is a hidden file, but you can show hidden files easily).
Kurosuke needs beta testers
User avatar
TechnoCat
Inner party member
Posts: 1611
Joined: Thu Jul 30, 2009 12:31 am
Location: Milwaukee, WI
Contact:

Re: Resources folder?

Post by TechnoCat »

tentus wrote:
Jasoco wrote:... Windows is in the AppData inside a hidden folder called .love. ...
It varies depending on the version of Windows. On my Win7 machine, it is C:\Users\Tentus\AppData\Roaming\LOVE\ (AppData is a hidden file, but you can show hidden files easily).
On all windows nt you can get to it with

Code: Select all

%appdata%\LOVE
User avatar
tentus
Inner party member
Posts: 1060
Joined: Sun Oct 31, 2010 7:56 pm
Location: Appalachia
Contact:

Re: Resources folder?

Post by tentus »

TechnoCat wrote:
tentus wrote:
Jasoco wrote:... Windows is in the AppData inside a hidden folder called .love. ...
It varies depending on the version of Windows. On my Win7 machine, it is C:\Users\Tentus\AppData\Roaming\LOVE\ (AppData is a hidden file, but you can show hidden files easily).
On all windows nt you can get to it with

Code: Select all

%appdata%\LOVE
:D True. I just tend to get blank looks when I tell people that: most people can't doubleclick a location bar into giving you %appdata%
Kurosuke needs beta testers
Post Reply

Who is online

Users browsing this forum: Amazon [Bot], Bing [Bot] and 3 guests