Advertisement
Bjornir90

Mario

Dec 22nd, 2012
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.58 KB | None | 0 0
  1. --[[
  2. Thanks you ! Make sure to use the installer for this because it need other files
  3. Based on a idea from dlcruz
  4. You are unauthorized to redistribute it as your own or without asking me
  5. ]]--
  6.  
  7. local path = shell.resolve(".")
  8. os.loadAPI(path.."/gui")
  9. os.loadAPI(path.."/gameutils")
  10.  
  11. --Declaration of variables
  12.  local tx, ty = term.getSize()
  13.  local midx = tx/2
  14.  local midy = ty/2
  15.  local playerPos = {}
  16.  local champT = {}
  17.  local turtleT = {}
  18.  local entities = {}
  19.  local collided = {}
  20.  local champSpeed = 0.5
  21.  local turtleSpeed = 0.6
  22.  gameutils.initializeBuffer()
  23. --End of declaration
  24.  
  25.  
  26. --Define file functions
  27. local function saveGame(playerName, saveSlot, toSave, newGame)
  28.  if newGame == "true" then
  29.   local mode = "w"
  30.  else
  31.   local mode = "a"
  32.  end
  33.  local fileSave = fs.open(path.."/saves/"..playerName.."/"..saveSlot, mode)
  34.  fileSave.write(textutils.serialize(toSave))
  35.  fileSave.close()
  36. end
  37.  
  38. local function loadGame(playerName, saveSlot)
  39.  if fs.exist(path.."/saves/"..playerName.."/"..saveSlot) then
  40.   local loadFile = fs.open(path.."/saves/"..playerName.."/"..saveSlot, "r")
  41.   local saveData = loadFile.readAll()
  42.   loadFile.close()
  43.   local saveDataT = textutils.unserialize(saveData)
  44.   return saveDataT
  45.  else
  46.   print("Error : load save : could not find save file")
  47.   return "false"
  48.  end
  49. end
  50.  
  51. local function loadLastGame()
  52.  local dataFile = fs.open(path.."/.data/lastGame", "r")
  53.  local dataToLoad = dataFile.readAll()
  54.  dataFile.close()
  55.  return loadGame(dataToLoad[1], dataToLoad[2])
  56. end
  57.  
  58. local function loadNewGame()
  59.  savePoint = 1
  60.  lifes = 5
  61. end
  62. --End of file functions
  63.  
  64. --Define the draw functions
  65.  
  66. local function clearScreen()
  67.  term.setBackgroundColor(colors.black)
  68.  term.clear()
  69.  term.setCursorPos(1, 1)
  70. end
  71.  
  72. local function crBackground()
  73.  local background = gameutils.loadSprite(path.."/.data/.sprites/background.nfp", midMx, midMy)
  74.  return background
  75. end
  76.  
  77. local function crPlayer(x, y)
  78.  local playerEntity = gameutils.loadSprite(path.."/.data/.sprites/player.nfp", x, y)
  79.  playerPos.x = x
  80.  playerPos.y = y
  81.  return playerEntity
  82. end
  83.  
  84.  
  85. local function crEntity(type, x, y)
  86.  if type == "champEnnemy" then
  87.   local champEnnemyEntity = gameutils.loadSprite(path.."/.data/.sprites/champEnnemy.nfp", x, y)
  88.   table.insert(champT, x)
  89.   table.insert(champT, y)
  90.   champEnnemyEntity.marioID = "champ"
  91.   entities.insert(champEnnemyEntity)
  92.   return champEnnemyEntity
  93.  elseif type == "turtleEnnemy" then
  94.   local turtleEnnemyEntity = gameutils.loadSprite(path.."/.data/.sprites/turtleEnnemy.nfp", x, y)
  95.   table.insert(turtleT, x)
  96.   table.insert(turtleT, y)
  97.   turtleEnnemyEntity.marioID = "turtle"
  98.   entities.insert(turtleEnnemyEntity)
  99.   return turtleEnnemyEntity
  100.  elseif type == "upEntity" then
  101.   local upEntity = gameutils.loadSprite(path.."/.data/.sprites/upEntity.nfp", x, y)
  102.   upEntity.marioID = "up"
  103.   entities.insert(upEntity)
  104.   return upEntity
  105.  end
  106. end
  107.  
  108. local function crFloor(file, x, y)
  109.  local floor = gameutils.loadSprite(path.."/.data/.sprites/"..file, x, y)
  110.  floor.marioID = "floor"
  111.  entities.insert(floor)
  112.  return floor
  113. end
  114.  
  115. local function drawMap()
  116.  local background = crBackground()
  117.  gameutils.drawToBuffer(background)
  118.  local floor1 = crFloor("floor8", 1, ty-1)
  119.  gameutils.drawToBuffer(floor1)
  120.  local floor2 = crFloor("floor4", 10, ty-1)
  121.  gameutils.drawToBuffer(floor2)
  122.  local floor3 = crFloor("floor6", 16, ty-1)
  123.  gameutils.drawToBuffer(floor3)
  124.  local floor1_1 = crFloor("floor2", 18, ty-2)
  125.  gameutils.drawToBuffer(floor1_1)
  126. end
  127.  
  128. local function updateScreen()
  129.  drawMap()
  130.  clearScreen()
  131.  term.setCursorPos(1, 1)
  132.  write("Lifes : "..lifes)
  133.  gameutils.drawBuffer()
  134.  gameutils.clearBuffer()
  135. end
  136. --End of draw functions
  137.  
  138. local function runGame(savePoint)
  139.  if savePoint == 1 then
  140.   playerEntity = crPlayer(2, 13)
  141.   updateScreen()
  142.  elseif savePoint == 2 then
  143.   playerPos.x = math.random(16, 20)
  144.   playerPos.y = 13
  145.  elseif savePoint == 3 then
  146.   playerPos.x = math.random(30, 35)
  147.   playerPos.y = 13
  148.  end
  149. end
  150.  
  151.  
  152. local function moveEnnemy()
  153. while true do
  154.  local event, param1 = os.pullEvent("timer")
  155.  if param1 == champTimer then
  156.   champT.x = champT.x-1
  157.   champTimer = os.startTimer(champSpeed)
  158.  elseif param2 == turtleTimer then
  159.   turtleT.x = turtleT.x-1
  160.   turtleTimer = os.startTimer(turtleSpeed)
  161.  end
  162.  if champEntity then
  163.   champEntity:moveTo(champT.x, champT.y)
  164.   gameutils.drawToBuffer(champEntity)
  165.  end
  166.  if turtleEntity then
  167.   turtleEntity:moveTo(turtleT.x, turtleT.y)
  168.   gameutils.drawToBuffer(turtleEntity)
  169.  end
  170. end
  171. end
  172.  
  173. local function movePlayer()
  174. while not dead do
  175.  local event, param1, param2 = os.pullEvent()
  176.  if event == "key" then
  177.   if param1 == 205 then
  178.    playerPos.x = playerPos.x + 1
  179.   elseif param1 == 203 then
  180.    playerPos.x = playerPos.x - 1
  181.   elseif param1 == 57 then
  182.    os.queueEvent("jump", 1)
  183.   end
  184.  elseif event == "jump" and param1 == 1 or event == "jump" and param1 == 2 then
  185.   playerPos.y = playerPos.y - 1
  186.   os.queueEvent("jump", param1 + 1)
  187.  elseif event == "jump" and param1 == 3 then
  188.   playerPos.y = playerPos.y - 1
  189.   os.queueEvent("jump", param1 + 1)
  190.  elseif event == "jump" and param1 == 4 then
  191.   playerPos.y = playerPos.y - 1
  192.   for x=1, #entities do
  193.    entity = entities[x]
  194.    collided.x, collided.y = pCollidesWith(playerEntity, entity)
  195.    if entity.marioID == "floor" then --if player hit a floor
  196.     if collided.y == playerEntity.y + 3 then --if it is the feet of the player
  197.      falling = false
  198.     end
  199.     if collided.y == playerEntity.y then --if it is the head
  200.      jumping = false
  201.      falling = true
  202.     end
  203.    end
  204.    if collided.x ~= nil and entity.marioID ~= "floor"then break end
  205.   end  
  206.  end
  207.  if playerPos.y > ty - 5 then
  208.   dead = true
  209.  end
  210.  playerEntity:moveTo(playerPos.x, playerPos.y)
  211.  gameutils.drawToBuffer(playerEntity)
  212. end
  213. if dead then
  214.  if lifes > 0 then
  215.   dead = false
  216.   loadLastGame()
  217.   lifes = lifes - 1
  218.  else
  219.   drawMainMenu()
  220.   selectMain()
  221.  end
  222. end
  223. end
  224.  
  225.  
  226.  
  227. --Define function for menu
  228. local function drawPlayMenu()
  229.  gui.render(true)
  230.  gui.clear()
  231.  gui.setHeader("          Play", colors.red)
  232.  gui.setButton(midx-4, 5, "Continue", colors.red, colors.orange)
  233.  gui.setButton(midx-7, 9, "Start new game", colors.red, colors.orange)
  234.  gui.setButton(midx-5, 13, "Load game", colors.red, colors.orange)
  235.  gui.setButton(midx-3, 17, "Cancel", colors.red, colors.orange)
  236.  gui.render()
  237. end
  238.  
  239. local function selectPlay()
  240.  local clickedButton = gui.getSelection()
  241.  if clickedButton == 1 then
  242.   loadLastGame()
  243.   runGame()
  244.  elseif clickedButton == 2 then
  245.   loadNewGame()
  246.   runGame()
  247.  elseif clickedButton == 3 then
  248.   loadSave()
  249.   drawSaveMenu()
  250.   selectSave()
  251.  elseif clickedButton == 4 then
  252.   drawMainMenu()
  253.   selectMain()
  254.  else
  255.   error("Error : play menu : wrong selection")
  256.  end
  257. end
  258.  
  259. local function drawOptionMenu()
  260.  gui.render(true)
  261.  gui.clear()
  262.  gui.setHeader("         Options", colors.magenta)
  263.  gui.setButton(midx-6, 5, "Change name", colors.magenta, colors.purple)
  264.  gui.setButton(midx-4, 9, "Credits", colors.magenta, colors.purple)
  265.  gui.setButton(midx-5, 13, "Reset all", colors.red, colors.yellow)
  266.  gui.setButton(midx-3, 17, "Cancel", colors.magenta, colors.purple)
  267.  gui.render()
  268. end
  269.  
  270. local function selectOption()
  271.  local clickedButton = gui.getSelection()
  272.  if clickedButton == 1 then
  273.   changeName()
  274.  elseif clickedButton == 2 then
  275.   printCredits()
  276.  elseif clickedButton == 3 then
  277.   local popBClicked = gui.popUp(midx, midy, "Reset all", "Are you sure you want to delete everythings ?", colors.red, colors.orange, "no", "yes")
  278.   if popBClicked == 1 then
  279.    drawOptionMenu()
  280.    selectOption()
  281.   elseif popBClicked == 2 then
  282.    deleteAll()
  283.   else
  284.    error("Error : delete option : wrong pop-up selection")
  285.   end
  286.  elseif clickedButton == 4 then
  287.   drawMainMenu()
  288.   selectMain()
  289.  else
  290.   error("Error : option menu : wrong selection")
  291.  end
  292. end
  293.  
  294. function drawMainMenu()
  295.  gui.render(true)
  296.  gui.clear()
  297.  gui.setHeader("          Main menu", colors.lightBlue)
  298.  gui.setButton(midx-2, 5, "Play", colors.lightBlue, colors.blue)
  299.  gui.setButton(midx-4, 9, "Options", colors.lightBlue, colors.blue)
  300.  gui.setButton(midx-2, 13, "Quit", colors.lightBlue, colors.blue)
  301.  gui.render()
  302. end
  303.  
  304. function selectMain()
  305.  local buttonClicked = gui.getSelection()
  306.  if buttonClicked == 1 then
  307.   drawPlayMenu()
  308.   selectPlay()
  309.  elseif buttonClicked == 2 then
  310.   drawOptionMenu()
  311.   selectOption()
  312.  elseif buttonClicked == 3 then
  313.   gui.clear()
  314.   return
  315.  else
  316.   error("Error : main menu : wrong selection")
  317.  end
  318. end
  319. --End of menus fonctions
  320.  
  321.  
  322. drawMainMenu()
  323. selectMain()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement