Wareguy, a Sokoban game

Show off your games, demos and other (playable) creations.
Post Reply
User avatar
TimeLoop
Prole
Posts: 28
Joined: Wed Apr 17, 2013 8:20 am

Wareguy, a Sokoban game

Post by TimeLoop »

9hTkp8T.png
9hTkp8T.png (99.17 KiB) Viewed 218 times

"The most kawaii game ever is Sokoban. It is well known that everyone agrees with that."

Now, lets mix that kawaii game with the possibility to easily create your own maps and using your own graphics, easy to play and run custom maps. That will result in the most kawaii of the kawaii-est games ever!!!


And that game is Wareguy!!!!
StgIpgU.png
StgIpgU.png (58.05 KiB) Viewed 218 times

It's that so cute that i'm going to start to hug my computer screen!!! You can do it too!!!

So far, 10 maps

Go and grab some Kilobytes of löve!!!!
.......... |
.......... |
.......... |
.......... \/
Attachments
wareguy_0.9.love
The previous file was wrong....
(85.75 KiB) Downloaded 212 times
Last edited by TimeLoop on Tue Aug 13, 2013 3:12 pm, edited 1 time in total.
User avatar
NeozooM
Prole
Posts: 6
Joined: Sat Jan 07, 2012 11:40 pm

Re: Wareguy, a Sokoban game

Post by NeozooM »

Hey, i'm new here and very unexperienced about programming..

But i tryed your game and it's pretty fun.
I think you could improve level design to make less diamonds but more complex moves to achieve the goal of farther levels.
Work out some sound and music too, would be great.

And good point for the move "count" on every level. Could be amazing with some online "ranking" on who achieved each level with the minimum amount of moves.

good luck , looking forward !
User avatar
TimeLoop
Prole
Posts: 28
Joined: Wed Apr 17, 2013 8:20 am

Re: Wareguy, a Sokoban game

Post by TimeLoop »

NeozooM wrote:Hey, i'm new here and very unexperienced about programming..

But i tryed your game and it's pretty fun.
I think you could improve level design to make less diamonds but more complex moves to achieve the goal of farther levels.
Work out some sound and music too, would be great.

And good point for the move "count" on every level. Could be amazing with some online "ranking" on who achieved each level with the minimum amount of moves.

good luck , looking forward !

I didn't designed the maps. They are "borrowed" from the CPC sokoban version.
You can see them all here:

http://compiler.speccy.org/files/maps/SokobanMap.png

Ofc I will add more maps than the 10 already included.

But you are welcome to design more maps, I can include them in next releases, of you can load your own maps with the next command line:

love wareguy_0.9.love myGreatMap.lua

Maps can have any extension, the game engine just reads the file that you provided.


Here you have how the map format works. Some comments included:

Code: Select all

gameMap = nil -- just delete what the map was

mapPreffix = "maps/" -- used for abbreviation

playerImg = { -- images of N, S, W and E player images
			["n"] = love.graphics.newImage(mapPreffix .. "guyn.png"),
			["s"] = love.graphics.newImage(mapPreffix .. "guys.png"),
			["e"] = love.graphics.newImage(mapPreffix .. "guye.png"),
			["w"] = love.graphics.newImage(mapPreffix .. "guyw.png")
		}

-- Here starts the tiles that will be used in the map for either floor or walls
wall1 = love.graphics.newImage(mapPreffix .. "wall1.png") -- normal
wall2 = love.graphics.newImage(mapPreffix .. "wall2.png") -- pot large
wall3 = love.graphics.newImage(mapPreffix .. "wall3.png") --  pot short
wall4 = love.graphics.newImage(mapPreffix .. "wall4.png") -- pillar red ball up (match with the one below)
wall5 = love.graphics.newImage(mapPreffix .. "wall5.png") --  pillar red ball down (match with the one before)
wall6 = love.graphics.newImage(mapPreffix .. "wall6.png") --  small tombstone "#"
wall7 = love.graphics.newImage(mapPreffix .. "wall7.png") --  broken pedestal
wall8 = love.graphics.newImage(mapPreffix .. "wall8.png") -- squared pillar up (match with the one below)
wall9 = love.graphics.newImage(mapPreffix .. "wall9.png") --  squared pillar down (match with the one before)

wall10 = love.graphics.newImage(mapPreffix .. "wall10.png") --  gate decoration S-W (match with the one below)
wall11 = love.graphics.newImage(mapPreffix .. "wall11.png") --  gate decoration S-E (match with the one below)
wall12 = love.graphics.newImage(mapPreffix .. "wall12.png") --  gate decoration N-W (match with the one below)
wall13 = love.graphics.newImage(mapPreffix .. "wall13.png") --  gate decoration N-E (match with the one before)

black = love.graphics.newImage(mapPreffix .. "black.png")

floor1 = love.graphics.newImage(mapPreffix .. "floor1.png") -- normal
floor2 = love.graphics.newImage(mapPreffix .. "floor2.png") -- greenish

-- images of the boxes and the goals tiles
boxImg = love.graphics.newImage(mapPreffix .. "box.png")
goalImg = love.graphics.newImage(mapPreffix .. "goal.png")

-- starts map definition
gameMap = {
			nextMap = "", -- path to the next map
			title = "Diamond Crypt 10", -- descriptive title
			mapAuthor = "Miguel A. G. Prada", -- map author, some credit are given
			sizeX = 16, -- number of tiles in horizontal axis
			sizeY = 10, -- in vertical axis
			sX = 14, -- player start X pos
			sY = 9, -- player start Y pos
			aims = 14, -- amount of goals to fullfill
			
			image = { -- this contains the tile images for each board cell
						{wall1, wall1, wall1, wall1, wall1, wall1, wall12, wall13, wall1, wall1, wall1, wall1, wall1, wall1, black, black},
						{wall1, floor1, floor1, floor1, floor1, wall1, wall10, wall11, floor1, floor1, floor1, floor1, floor1, floor1, wall1, black},
						{wall1, floor1, floor1, floor1, floor1, floor1, floor1, floor1, floor1, floor1, floor1, floor1, floor1, floor1, floor1, wall4},
						{wall1, floor1, wall8, floor1, floor1, floor1, floor1, floor1, floor1, floor1, floor1, floor1, floor1, wall6, floor1, wall5},
						{wall1, floor1, wall9, wall1, wall1, wall6, wall1, floor1, wall1, wall1, floor1, floor1, floor1, floor1, floor1, wall1},
						{wall1, floor1, wall1, floor1, floor1, floor1, floor1, floor1, floor1, floor1, floor1, wall7, floor1, floor1, floor1, wall1},
						{wall1, floor1, wall8, floor1, wall1, wall1, wall6, wall1, wall1, wall1, floor1, wall1, wall3, floor1, floor1, wall1},
						{wall1, floor1, wall9, floor1, floor1, floor1, floor1, floor1, floor1, floor1, floor1, floor1, wall1, floor1, floor1, wall1},
						{wall1, wall1, wall1, wall1, wall1, floor1, floor1, floor1, floor1, floor1, floor1, floor1, wall1, floor1, floor1, wall1},
						{black, black, black, black, wall1, wall1, wall1, wall1, wall1, wall1, wall1, wall1, wall1, wall1, wall1, wall1}
					},
			block = { -- this contains which cells are blocking and which not
						{"#", "#", "#", "#", "#", "#", " ", "#", "#", "#", "#", "#", "#", "#", " ", " "},
						{"#", " ", " ", " ", " ", "#", "#", "#", " ", " ", " ", " ", " ", " ", "#", " "},
						{"#", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "#"},
						{"#", " ", "#", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "#", " ", "#"},
						{"#", " ", "#", "#", "#", "#", "#", " ", "#", "#", " ", " ", " ", " ", " ", "#"},
						{"#", " ", "#", " ", " ", " ", " ", " ", " ", " ", " ", "#", " ", " ", " ", "#"},
						{"#", " ", "#", " ", "#", "#", "#", "#", "#", "#", " ", "#", "#", " ", " ", "#"},
						{"#", " ", "#", " ", " ", " ", " ", " ", " ", " ", " ", " ", "#", " ", " ", "#"},
						{"#", "#", "#", "#", "#", " ", " ", " ", " ", " ", " ", " ", "#", " ", " ", "#"},
						{" ", " ", " ", " ", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#"}
					},
			box = { -- where the boxes are placed when the map is loaded
						{"#", "#", "#", "#", "#", "#", " ", "#", "#", "#", "#", "#", "#", "#", " ", " "},
						{"#", " ", " ", " ", " ", "#", "#", "#", " ", " ", " ", " ", " ", " ", "#", " "},
						{"#", " ", " ", " ", "b", " ", " ", " ", " ", " ", "b", " ", " ", "b", " ", "#"},
						{"#", " ", "#", " ", "b", " ", "b", " ", "b", " ", " ", "b", "b", "#", " ", "#"},
						{"#", " ", "#", "#", "#", "#", "#", "b", "#", "#", " ", " ", "b", " ", " ", "#"},
						{"#", " ", "#", " ", " ", " ", " ", "b", " ", " ", " ", "#", " ", "b", " ", "#"},
						{"#", " ", "#", " ", "#", "#", "#", "#", "#", "#", " ", "#", "#", " ", " ", "#"},
						{"#", " ", "#", " ", " ", " ", " ", "b", " ", "b", " ", " ", "#", " ", " ", "#"},
						{"#", "#", "#", "#", "#", " ", " ", " ", " ", " ", " ", " ", "#", " ", " ", "#"},
						{" ", " ", " ", " ", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#"}
					},
			goal = { -- where are the goals or places where the player must move the boxes
						{"#", "#", "#", "#", "#", "#", " ", "#", "#", "#", "#", "#", "#", "#", " ", " "},
						{"#", "g", " ", " ", "g", "#", "#", "#", " ", " ", " ", " ", " ", " ", "#", " "},
						{"#", "g", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "#"},
						{"#", "g", "#", "g", " ", " ", " ", " ", " ", " ", " ", " ", " ", "#", " ", "#"},
						{"#", "g", "#", "#", "#", "#", "#", " ", "#", "#", " ", " ", " ", " ", " ", "#"},
						{"#", "g", "#", " ", " ", " ", " ", " ", " ", " ", " ", "#", " ", " ", " ", "#"},
						{"#", "g", "#", " ", "#", "#", "#", "#", "#", "#", " ", "#", "#", " ", " ", "#"},
						{"#", "g", "#", " ", " ", " ", " ", " ", " ", " ", " ", "g", "#", "g", "g", "#"},
						{"#", "#", "#", "#", "#", " ", " ", " ", " ", " ", " ", "g", "#", " ", "g", "#"},
						{" ", " ", " ", " ", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#", "#"}
					},
}
Post Reply

Who is online

Users browsing this forum: Ahrefs [Bot] and 0 guests