Mercurial > vanillian
annotate main.lua @ 39:4feeb8cb736e
music mute added under "M"
| author | Makdaam |
|---|---|
| date | Sun, 16 Dec 2012 14:21:51 +0100 |
| parents | 0d75bfc00f01 |
| children | 53ae6905cfff |
| rev | line source |
|---|---|
| 2 | 1 local ATL = require("AdvTiledLoader") |
| 0 | 2 local anim8 = require("anim8") |
| 3 local sprite = require("sprite") | |
| 4 | |
|
6
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
5 local SPRITES = {} |
|
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
6 local SHADOWS = {} |
|
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
7 local MAP |
| 2 | 8 local tx, ty = 0, 0 |
| 9 local DX = {0, 1, 0, -1} | |
| 10 local DY = {-1, 0, 1, 0} | |
|
6
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
11 local SHADOW_IMAGE |
|
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
12 local MOBS_IMAGE |
|
28
d4187c83c047
Allow moving between maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
26
diff
changeset
|
13 local GRID = anim8.newGrid(64, 64, 256, 256) |
|
6
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
14 local scroll_speed = 250 |
|
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
15 local scroll_margin = 64 |
|
23
d16e33662aa0
define music in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
19
diff
changeset
|
16 local MUSIC |
|
33
0d75bfc00f01
Don't restart music every map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
28
diff
changeset
|
17 local LAST_MUSIC |
|
25
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
18 local TEXT = "" |
|
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
19 local SOUNDS = {} |
| 2 | 20 |
|
6
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
21 |
|
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
22 function newMob(x, y, cells) |
|
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
23 local mob = {} |
|
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
24 mob.sprite = sprite.newSprite( |
|
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
25 x - 32, y - 60, MOBS_IMAGE, |
|
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
26 anim8.newAnimation('loop', GRID(cells), 0.25) |
| 2 | 27 ) |
|
6
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
28 mob.shadow = sprite.newShadow(SHADOW_IMAGE, mob.sprite) |
|
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
29 table.insert(SPRITES, mob.sprite) |
|
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
30 table.insert(SHADOWS, mob.shadow) |
|
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
31 return mob |
|
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
32 end |
|
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
33 |
|
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
34 function makeVillain(villain) |
|
25
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
35 villain.is_villain = true |
|
6
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
36 function villain.sprite:walk(dt, dir) |
|
11
b7a0c1a0e6c4
block some distance from the wall
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
10
diff
changeset
|
37 local x = self.x + DX[dir] * 24 |
|
b7a0c1a0e6c4
block some distance from the wall
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
10
diff
changeset
|
38 local y = self.y + DY[dir] * 16 |
|
25
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
39 local mx, my = math.floor((x+32)/48), math.floor((y+60)/48) |
|
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
40 local cell = MAP.layers['control']:get(mx, my) |
|
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
41 local bump = false |
|
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
42 for i, s in pairs(SPRITES) do |
|
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
43 if not s.is_villain then |
|
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
44 local d = (x - s.x) * (x - s.x) + ((y - s.y) * (y - s.y)) |
|
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
45 if d < 100 then |
|
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
46 bump = true |
|
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
47 if s.properties.text then |
|
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
48 TEXT = s.properties.text |
|
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
49 SOUNDS.talk:play() |
|
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
50 else |
|
28
d4187c83c047
Allow moving between maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
26
diff
changeset
|
51 if s.properties.exit then |
|
d4187c83c047
Allow moving between maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
26
diff
changeset
|
52 load_map(s.properties.exit) |
|
d4187c83c047
Allow moving between maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
26
diff
changeset
|
53 TEXT = s.properties.exit |
|
d4187c83c047
Allow moving between maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
26
diff
changeset
|
54 else |
|
d4187c83c047
Allow moving between maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
26
diff
changeset
|
55 SOUNDS.bump:play() |
|
d4187c83c047
Allow moving between maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
26
diff
changeset
|
56 TEXT = "" |
|
d4187c83c047
Allow moving between maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
26
diff
changeset
|
57 end |
|
25
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
58 end |
|
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
59 end |
|
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
60 end |
|
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
61 end |
|
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
62 if not bump and cell and cell.properties and not cell.properties.block then |
|
11
b7a0c1a0e6c4
block some distance from the wall
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
10
diff
changeset
|
63 self.x = self.x + DX[dir] * dt * 250 |
|
b7a0c1a0e6c4
block some distance from the wall
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
10
diff
changeset
|
64 self.y = self.y + DY[dir] * dt * 250 |
|
3
f5de6c75c4d0
make the walls block
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
2
diff
changeset
|
65 end |
| 2 | 66 end |
|
6
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
67 function villain.sprite:update(dt) |
| 19 | 68 local map_w = MAP.width * MAP.tileWidth |
| 69 local map_h = MAP.height * MAP.tileHeight | |
| 70 if love.keyboard.isDown("up") then self:walk(dt, 1) end | |
| 71 if love.keyboard.isDown("right") then self:walk(dt, 2) end | |
| 72 if love.keyboard.isDown("down") then self:walk(dt, 3) end | |
| 73 if love.keyboard.isDown("left") then self:walk(dt, 4) end | |
|
25
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
74 if love.keyboard.isDown(" ") then TEXT = "" end |
| 19 | 75 if self.x + tx < scroll_margin then |
| 76 tx = math.min(tx + dt * scroll_speed, 0) | |
|
5
98ab870293bc
make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
4
diff
changeset
|
77 else |
| 19 | 78 if self.x + tx > 800 - 64 - scroll_margin then |
| 79 tx = math.max(tx - dt * scroll_speed, 800 - map_w) | |
|
5
98ab870293bc
make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
4
diff
changeset
|
80 end |
|
98ab870293bc
make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
4
diff
changeset
|
81 end |
| 19 | 82 if self.y + ty < scroll_margin then |
| 83 ty = math.min(ty + dt * scroll_speed, 0) | |
|
5
98ab870293bc
make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
4
diff
changeset
|
84 else |
| 19 | 85 if self.y + ty > 600 - 64 - scroll_margin then |
| 86 ty = math.max(ty - dt * scroll_speed, 600 - map_h) | |
|
5
98ab870293bc
make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
4
diff
changeset
|
87 end |
|
98ab870293bc
make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
4
diff
changeset
|
88 end |
|
98ab870293bc
make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
4
diff
changeset
|
89 sprite.Sprite.update(self, dt) |
|
98ab870293bc
make the villain local
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
4
diff
changeset
|
90 end |
| 2 | 91 return villain |
| 92 end | |
| 93 | |
| 0 | 94 function love.load() |
| 19 | 95 love.graphics.setFont(love.graphics.newFont('pf_tempesta_seven_extended_bold.ttf')) |
|
6
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
96 SHADOW_IMAGE = love.graphics.newImage('shadow.png') |
|
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
97 MOBS_IMAGE = love.graphics.newImage('mobs.png') |
|
25
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
98 SOUNDS.bump = love.audio.newSource('bump.xm', 'static') |
|
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
99 SOUNDS.talk = love.audio.newSource('talk.xm', 'static') |
| 19 | 100 load_map('level01.tmx') |
| 101 end | |
| 102 | |
| 103 function load_map(filename) | |
| 104 SPRITES = {} | |
| 105 SHADOWS = {} | |
| 106 MAP = ATL.Loader.load(filename) | |
|
6
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
107 MAP.drawObjects = false |
| 10 | 108 MAP.layers['control'].visible = false |
|
23
d16e33662aa0
define music in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
19
diff
changeset
|
109 if MAP.properties.music then |
|
33
0d75bfc00f01
Don't restart music every map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
28
diff
changeset
|
110 if not LAST_MUSIC or MAP.properties.music ~= LAST_MUSIC then |
|
0d75bfc00f01
Don't restart music every map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
28
diff
changeset
|
111 if MUSIC then |
|
0d75bfc00f01
Don't restart music every map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
28
diff
changeset
|
112 MUSIC:stop() |
|
0d75bfc00f01
Don't restart music every map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
28
diff
changeset
|
113 end |
|
0d75bfc00f01
Don't restart music every map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
28
diff
changeset
|
114 MUSIC = love.audio.newSource(MAP.properties.music, 'static') |
|
0d75bfc00f01
Don't restart music every map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
28
diff
changeset
|
115 MUSIC:setLooping(true) |
|
0d75bfc00f01
Don't restart music every map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
28
diff
changeset
|
116 MUSIC:play() |
|
0d75bfc00f01
Don't restart music every map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
28
diff
changeset
|
117 LAST_MUSIC = MAP.properties.music |
|
25
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
118 end |
|
23
d16e33662aa0
define music in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
19
diff
changeset
|
119 end |
|
6
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
120 for i, data in pairs(MAP.layers['mobs'].objects) do |
|
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
121 if data.name == 'villain' then |
|
25
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
122 local mob = makeVillain(newMob(data.x, data.y, '1-2,1')) |
|
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
123 mob.sprite.properties = data.properties |
|
4
e4263ea87780
Place the sprites on the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
3
diff
changeset
|
124 else |
|
25
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
125 local mob = newMob(data.x, data.y, data.properties.cells or '1-2,2') |
|
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
126 mob.sprite.properties = data.properties |
|
4
e4263ea87780
Place the sprites on the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
3
diff
changeset
|
127 end |
|
e4263ea87780
Place the sprites on the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
3
diff
changeset
|
128 end |
| 0 | 129 end |
| 130 | |
|
25
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
131 function draw_text(text) |
|
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
132 text = text:gsub('[|]', '\n') |
| 19 | 133 love.graphics.setColor(0, 0, 0) |
| 134 love.graphics.print(text, 3, 3) | |
| 135 love.graphics.print(text, 5, 3) | |
| 136 love.graphics.print(text, 3, 5) | |
| 137 love.graphics.print(text, 5, 5) | |
| 138 love.graphics.setColor(255, 255, 255) | |
| 139 love.graphics.print(text, 4, 4) | |
| 140 end | |
| 0 | 141 |
| 142 function love.draw() | |
| 2 | 143 love.graphics.translate(math.floor(tx), math.floor(ty)) |
|
6
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
144 MAP:autoDrawRange(math.floor(tx), math.floor(ty), 1, 0) |
|
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
145 MAP:draw() |
|
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
146 for k, shadow in pairs(SHADOWS) do |
| 2 | 147 shadow:draw() |
| 148 end | |
|
6
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
149 for k, sprite in pairs(SPRITES) do |
| 0 | 150 sprite:draw() |
| 151 end | |
|
7
dd17a136b402
overlay layers
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
6
diff
changeset
|
152 for i, layer in pairs(MAP.layerOrder) do |
|
dd17a136b402
overlay layers
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
6
diff
changeset
|
153 if layer.properties.overlay then |
|
dd17a136b402
overlay layers
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
6
diff
changeset
|
154 layer:draw() |
|
dd17a136b402
overlay layers
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
6
diff
changeset
|
155 end |
|
dd17a136b402
overlay layers
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
6
diff
changeset
|
156 end |
| 19 | 157 love.graphics.translate(-math.floor(tx), -math.floor(ty)) |
|
25
8891a036fb23
Add bumping and talking
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
23
diff
changeset
|
158 draw_text(TEXT) |
| 0 | 159 end |
| 160 | |
| 161 | |
| 162 function love.update(dt) | |
|
6
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
163 for k, sprite in pairs(SPRITES) do |
| 0 | 164 sprite:update(dt) |
| 165 end | |
| 39 | 166 if love.keyboard.isDown("m") then |
| 167 if MUSIC:isStopped() then MUSIC:play() | |
| 168 else MUSIC:stop() | |
| 169 end | |
| 170 end | |
|
6
301a5bd338fb
define mob graphics in the map
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
5
diff
changeset
|
171 table.sort(SPRITES, function (a, b) return a.y < b.y end) |
| 0 | 172 end |
