summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonBatman <serfdon@gmail.com>2015-10-27 12:35:55 -0700
committerDonBatman <serfdon@gmail.com>2015-10-27 12:35:55 -0700
commit32148072652c69844bbaa3e19d6071d48980a7d8 (patch)
tree4bbeef90c0489b7e552d4f00e36aed4dbd1739a2
parent3ddfbbc093a641cf5e4388fa07b2564465b739ef (diff)
Stared work on gamestate and hud for mario
-rw-r--r--mario/blocks.lua2
-rwxr-xr-xmario/gamestate.lua37
-rwxr-xr-xmario/hud.lua44
-rw-r--r--mario/init.lua21
-rw-r--r--mario/turtle.lua15
5 files changed, 76 insertions, 43 deletions
diff --git a/mario/blocks.lua b/mario/blocks.lua
index 7005de3..f44f61f 100644
--- a/mario/blocks.lua
+++ b/mario/blocks.lua
@@ -80,6 +80,7 @@ minetest.register_node("mario:mushroom",{
},
drawtype = "nodebox",
paramtype = "light",
+ walkable = false,
groups = {cracky = 3},
node_box = nbox,
on_destruct = function(pos)
@@ -99,6 +100,7 @@ minetest.register_node("mario:mushroom_green",{
},
drawtype = "nodebox",
paramtype = "light",
+ walkable = false,
groups = {cracky = 3},
node_box = nbox,
on_destruct = function(pos)
diff --git a/mario/gamestate.lua b/mario/gamestate.lua
index c58b5e4..bd23d5c 100755
--- a/mario/gamestate.lua
+++ b/mario/gamestate.lua
@@ -31,8 +31,8 @@ function mario.game_start(pos, player, gamedef)
player_name = player_name,
pos = pos,
player_start = vector.add(pos, (gamedef.player_start or {x=16,y=0,z=1})),
- turtle1_start = vector.add(pos, (gamedef.turtle_start or {x=3,y=0.5,z=12})),
- turtle2_start = vector.add(pos, (gamedef.turtle_start or {x=30,y=0.5,z=12})),
+ turtle1_start = vector.add(pos, (gamedef.turtle1_start or {x=3,y=0.5,z=12})),
+ turtle2_start = vector.add(pos, (gamedef.turtle2_start or {x=30,y=0.5,z=12})),
coin_total = gamedef.coin_total or 84,
speed = gamedef.speed or 2,
lives = gamedef.lives or 3,
@@ -94,29 +94,30 @@ function mario.game_reset(id, player)
-- Position the player
local player = player or minetest.get_player_by_name(gamestate.player_name)
player:setpos(gamestate.player_start)
+ local pos = gamestate.pos
-- Spawn the turtles and assign the game id to each turtle
minetest.after(2, function()
if mario.games[id] and last_reset == mario.games[id].last_reset then
- local turtle = minetest.add_entity(gamestate.turtle_start, "mario:turtle")
+ local turtle = minetest.add_entity({x=pos.x+3,y=pos.y+12,z=pos.z+1}, "mario:turtle1")
turtle:get_luaentity().gameid = id
end
end)
minetest.after(2, function()
if mario.games[id] and last_reset == mario.games[id].last_reset then
- local turtle = minetest.add_entity(gamestate.turtle_start, "mario:turtle2")
+ local turtle = minetest.add_entity({x=pos.x+30,y=pos.y+12,z=pos.z+1}, "mario:turtle1")
turtle:get_luaentity().gameid = id
end
end)
minetest.after(45, function()
if mario.games[id] and last_reset == mario.games[id].last_reset then
- local turtle = minetest.add_entity(gamestate.turtle_start, "mario:turtle3")
+ local turtle = minetest.add_entity({x=pos.x+3,y=pos.y+12,z=pos.z+1}, "mario:turtle1")
turtle:get_luaentity().gameid = id
end
end)
minetest.after(45, function()
if mario.games[id] and last_reset == mario.games[id].last_reset then
- local turtle = minetest.add_entity(gamestate.turtle_start, "mario:turtle4")
+ local turtle = minetest.add_entity({x=pos.x+30,y=pos.y+12,z=pos.z+1}, "mario:turtle1")
turtle:get_luaentity().gameid = id
end
end)
@@ -142,9 +143,9 @@ function mario.add_mushroom(id)
if not gamestate then return end
local node = {}
-- Different mushroom will be used depending on the level
- if gamestate.level == 1 then
+ --if gamestate.level == 1 then
node.name = "mario:mushroom"
- end
+ --end
local pos = vector.add(gamestate.player_start,{x=0,y=12,z=0})
minetest.set_node(pos, node)
print(node.param2)
@@ -163,7 +164,7 @@ function mario.on_player_got_coin(player)
mario.update_hud(gamestate.id, player)
minetest.sound_play("mario-coin", {object = player, max_hear_distance = 6})
- if gamestate.coin_count == 70 or gamestate.coin_count == 180 then
+ if gamestate.coin_count == 10 then
mario.add_mushroom(gamestate.id)
elseif gamestate.coin_count >= gamestate.coin_total then
minetest.chat_send_player(name, "You cleared the board!")
@@ -225,24 +226,12 @@ local function on_player_gamestep(player, gameid)
for _,pos in pairs(positions) do
pos = vector.add(player_pos, pos)
local node = minetest.get_node(pos)
- if node.name == "mario:coin_1" then
+ if node.name == "mario:coin" then
minetest.remove_node(pos)
mario.on_player_got_coin(player)
- elseif node.name == "mario:coin_2" then
- minetest.remove_node(pos)
- mario.on_player_got_power_coin(player)
- elseif node.name == "mario:cherrys" then
- minetest.remove_node(pos)
- mario.on_player_got_mushroom(player, 100)
- elseif node.name == "mario:strawberry" then
- minetest.remove_node(pos)
- mario.on_player_got_mushroom(player, 300)
- elseif node.name == "mario:orange" then
- minetest.remove_node(pos)
- mario.on_player_got_mushroom(player, 500)
- elseif node.name == "mario:apple" then
+ elseif node.name == "mario:mushroom" then
minetest.remove_node(pos)
- mario.on_player_got_mushroom(player, 700)
+ mario.on_player_got_mushroom(player, 15)
end
end
end
diff --git a/mario/hud.lua b/mario/hud.lua
new file mode 100755
index 0000000..8da1d4d
--- /dev/null
+++ b/mario/hud.lua
@@ -0,0 +1,44 @@
+
+
+local hud_table = {}
+
+function mario.update_hud(id, player)
+ local game = mario.games[id]
+ player = player or minetest.get_player_by_name(game.player_name)
+ if not player then
+ return
+ elseif not game then
+ mario.remove_hud(player)
+ return
+ end
+ local coins_left = game.coin_total - game.coin_count
+ local hudtext = "Score " .. game.score
+ .. "\nLevel " .. game.level
+ .. "\nLives " .. game.lives
+ .. "\ncoins " .. coins_left
+
+ local hud = hud_table[game.player_name]
+ if not hud then
+ hud = player:hud_add({
+ hud_elem_type = "text",
+ position = {x = 0, y = 1},
+ offset = {x=100, y = -100},
+ scale = {x = 100, y = 100},
+ number = 0xfff227, --color
+ text = hudtext
+ })
+ hud_table[game.player_name] = hud
+ else
+ player:hud_change(hud, "text", hudtext)
+ end
+end
+
+
+function mario.remove_hud(player, playername)
+ local name = playername or player:get_player_name()
+ local hud = hud_table[name]
+ if hud then
+ player:hud_remove(hud)
+ hud_table[name] = nil
+ end
+end
diff --git a/mario/init.lua b/mario/init.lua
index c435bf7..426e354 100644
--- a/mario/init.lua
+++ b/mario/init.lua
@@ -5,6 +5,7 @@ dofile(minetest.get_modpath("mario").."/blocks.lua")
dofile(minetest.get_modpath("mario").."/portal.lua")
dofile(minetest.get_modpath("mario").."/turtle.lua")
dofile(minetest.get_modpath("mario").."/gamestate.lua")
+dofile(minetest.get_modpath("mario").."/hud.lua")
minetest.register_node("mario:placer",{
@@ -21,17 +22,21 @@ minetest.register_node("mario:placer",{
paramtype = "light",
groups = {cracky = 3},
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
- local schem = minetest.get_modpath("mario").."/schems/mario.mts"
- minetest.place_schematic({x=pos.x-1,y=pos.y-2,z=pos.z-2},schem,0, "air", true)
- player:setpos({x=pos.x+16,y=pos.y+0.1,z=pos.z+1})
- print(name)
+ --local schem = minetest.get_modpath("mario").."/schems/mario.mts"
+ --minetest.place_schematic({x=pos.x-1,y=pos.y-2,z=pos.z-2},schem,0, "air", true)
+ --player:setpos({x=pos.x+16,y=pos.y+0.1,z=pos.z+1})
+ --print(name)
player:set_physics_override(1,1,0.3,true,false)
-
+
+ mario.game_start(pos, player, {
+ schematic = minetest.get_modpath("mario").."/schems/mario.mts",
+ scorename = "mario:classic_board",
+ })
-- Left Turtle
- minetest.add_entity({x=pos.x+3,y=pos.y+12,z=pos.z+1}, "mario:turtle1")
+ --minetest.add_entity({x=pos.x+3,y=pos.y+12,z=pos.z+1}, "mario:turtle1")
-- Right Turtle
- local turtler = minetest.add_entity({x=pos.x+30,y=pos.y+12,z=pos.z+1}, "mario:turtle1"):get_luaentity()
- turtler.direction = {x=-1,y=0,z=0}
+ --local turtler = minetest.add_entity({x=pos.x+30,y=pos.y+12,z=pos.z+1}, "mario:turtle1"):get_luaentity()
+ --turtler.direction = {x=-1,y=0,z=0}
minetest.sound_play("mario-game-start", {pos = pos,max_hear_distance = 40,gain = 10.0,})
end,
diff --git a/mario/turtle.lua b/mario/turtle.lua
index 7896f2e..b513d5c 100644
--- a/mario/turtle.lua
+++ b/mario/turtle.lua
@@ -97,16 +97,7 @@ for i in ipairs(turtles) do
if distance < 1.5 then
-- player touches ghost!!
- if gamestate.power_pellet then
- -- Player eats ghost! move it to spawn
- local ghost_spawn = vector.add(gamestate.pos, {x=13,y=0.5,z=19})
- self.object:setpos(ghost_spawn)
- -- set the timer negative so it'll have to wait extra time
- self.timer = -ghosts_death_delay
- -- play sound and reward player
- minetest.sound_play("mario_eatghost", {pos = boardcenter,max_hear_distance = 6, object=player, loop=false})
- player:get_inventory():add_item('main', 'mario:cherrys')
- else
+
-- Ghost catches the player!
gamestate.lives = gamestate.lives - 1
if gamestate.lives < 1 then
@@ -121,8 +112,10 @@ for i in ipairs(turtles) do
minetest.chat_send_player(gamestate.player_name,"You have ".. gamestate.lives .." lives left")
mario.game_reset(self.gameid, player)
end
- end
+ --end
mario.update_hud(self.gameid, player)
+
+
else
local vec = {x=p.x-s.x, y=p.y-s.y, z=p.z-s.z}