Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- PacMan, written by Gamax92.
- Copy it, copy the code, copy the letters. Just give me credit.
- Documentaiton - Mainly for me:
- * Terms used
- SNH - Some Number Here
- * Map Tiles:
- 0 - Air
- 1 - Dot
- 2 - Energizer
- 3 - Horiz line Up
- 4 - Horiz line Down
- 5 - Vert line Right
- 6 - Vert line Left
- 7 - UL Corner
- 8 - UR Corner
- 9 - BL Corner
- 10 - BR Corner
- 11 - Double Horiz line
- 12 - Double Vert line
- 13 - Double UL Corner
- 14 - Double UR Corner
- 15 - Double BL Corner
- 16 - Double BR Corner
- 17 - Double Left - Bottom
- 18 - Double Left - Top
- 19 - Double Right - Bottom
- 20 - Double Right - Top
- 21 - Double Top - Right
- 22 - Double Top - Left
- 23 - Double Bottom - Right
- 24 - Double Bottom - Left
- 25 - Bunker LGate
- 26 - Bunker RGate
- 27 - Bunker UL
- 28 - Bunker UR
- 29 - Bunker BL
- 30 - Bunker BR
- 31 - Barrier
- 32 - Tunnel
- 33 - Pacman Start
- 34 - RGhost
- 35 - BGhost
- 36 - PGhost
- 37 - OGhost
- 91 - Ghosts: Cannot move left
- 92 - Ghosts: Cannot move up
- 93 - Ghosts: Cannot move right
- 94 - Ghosts: Cannot move down
- 95 - Ghosts: Force move left
- 96 - Ghosts: Force move up
- 97 - Ghosts: Force move right
- 98 - Ghosts: Force move down
- 99 - Invisible wall
- Tiles 8x8:
- SNH - Corresponds to Map Tile
- Sprites 16x16:
- 0 - PacMan
- 1 - Ghost Left
- 2 - Ghost Up
- 3 - Ghost Down
- 4 - Energizer
- 5 - Frightened Ghost
- 6 - Logo
- Sprite Palettes:
- 0 - Pacman
- 1 - Blinky
- 2 - Inky
- 3 - Pinky
- 4 - Clyde
- 6 - Scared Ghost
- 7 - Flashing Scared Ghost
- 8 - Ghost Eyes
- 9 - Logo Palette
- 99 - Empty Palette
- Directions:
- 0 - Left
- 1 - Up
- 2 - Right
- 3 - Down
- --]]
- tpt.set_pause(1)
- local curMap, map, stage, distance, deepcopy, objects, pacobj, blinkobj, lives, advancekey
- local maps, omaps = {}, {}
- local level = 1
- local upTimer, dots, score, useShift, lScore = 0, 0, 0, 0, 0
- local bX, bY = 142, 10
- local startTimer = 600
- local scoreName = ""
- maps[1] = {
- {00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00},
- {00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00},
- {00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00},
- {14,11,11,11,11,11,11,11,11,11,11,11,11,17,19,11,11,11,11,11,11,11,11,11,11,11,11,13},
- {12,01,01,01,01,01,01,01,01,01,01,01,01,05,06,01,01,01,01,01,01,01,01,01,01,01,01,12},
- {12,01,08,04,04,07,01,08,04,04,04,07,01,05,06,01,08,04,04,04,07,01,08,04,04,07,01,12},
- {12,02,05,00,00,06,01,05,00,00,00,06,01,05,06,01,05,00,00,00,06,01,05,00,00,06,02,12},
- {12,01,10,03,03,09,01,10,03,03,03,09,01,10,09,01,10,03,03,03,09,01,10,03,03,09,01,12},
- {12,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,12},
- {12,01,08,04,04,07,01,08,07,01,08,04,04,04,04,04,04,07,01,08,07,01,08,04,04,07,01,12},
- {12,01,10,03,03,09,01,05,06,01,10,03,03,07,08,03,03,09,01,05,06,01,10,03,03,09,01,12},
- {12,01,01,01,01,01,01,05,06,01,01,01,01,05,06,01,01,01,01,05,06,01,01,01,01,01,01,12},
- {16,11,11,11,11,13,01,05,10,04,04,07,00,05,06,00,08,04,04,09,06,01,14,11,11,11,11,15},
- {00,00,00,00,00,12,01,05,08,03,03,09,00,10,09,00,10,03,03,07,06,01,12,00,00,00,00,00},
- {00,00,00,00,00,12,01,05,06,00,00,00,92,94,94,92,00,00,00,05,06,01,12,00,00,00,00,00},
- {00,00,00,00,00,12,01,05,06,00,28,11,25,31,31,26,11,27,00,05,06,01,12,00,00,00,00,00},
- {11,11,11,11,11,15,01,10,09,00,12,97,97,96,96,95,95,12,00,10,09,01,16,11,11,11,11,11},
- {32,32,32,32,32,32,01,00,00,00,12,96,96,96,96,96,96,12,00,00,00,01,32,32,32,32,32,32},
- {11,11,11,11,11,13,01,08,07,00,12,96,96,96,96,96,96,12,00,08,07,01,14,11,11,11,11,11},
- {00,00,00,00,00,12,01,05,06,00,30,11,11,11,11,11,11,29,00,05,06,01,12,00,00,00,00,00},
- {00,00,00,00,00,12,01,05,06,00,00,00,00,00,00,00,00,00,00,05,06,01,12,00,00,00,00,00},
- {00,00,00,00,00,12,01,05,06,00,08,04,04,04,04,04,04,07,00,05,06,01,12,00,00,00,00,00},
- {14,11,11,11,11,15,01,10,09,00,10,03,03,07,08,03,03,09,00,10,09,01,16,11,11,11,11,13},
- {12,01,01,01,01,01,01,01,01,01,01,01,01,05,06,01,01,01,01,01,01,01,01,01,01,01,01,12},
- {12,01,08,04,04,07,01,08,04,04,04,07,01,05,06,01,08,04,04,04,07,01,08,04,04,07,01,12},
- {12,01,10,03,07,06,01,10,03,03,03,09,01,10,09,01,10,03,03,03,09,01,05,08,03,09,01,12},
- {12,02,01,01,05,06,01,01,01,01,01,01,01,00,00,01,01,01,01,01,01,01,05,06,01,01,02,12},
- {21,04,07,01,05,06,01,08,07,01,08,04,04,04,04,04,04,07,01,08,07,01,05,06,01,08,04,22},
- {23,03,09,01,10,09,01,05,06,01,10,03,03,07,08,03,03,09,01,05,06,01,10,09,01,10,03,24},
- {12,01,01,01,01,01,01,05,06,01,01,01,01,05,06,01,01,01,01,05,06,01,01,01,01,01,01,12},
- {12,01,08,04,04,04,04,09,10,04,04,07,01,05,06,01,08,04,04,09,10,04,04,04,04,07,01,12},
- {12,01,10,03,03,03,03,03,03,03,03,09,01,10,09,01,10,03,03,03,03,03,03,03,03,09,01,12},
- {12,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,12},
- {16,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,15},
- {00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00},
- {00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00},
- ['fX'] = 14, ['fY'] = 15}
- omaps[1] = {
- {33,14,27},
- {34,14,15},
- {35,12,17},
- {36,14,17},
- {37,16,17}}
- local tiles = {}
- tiles[0] =
- {"00000000",
- "00000000",
- "00000000",
- "00000000",
- "00000000",
- "00000000",
- "00000000",
- "00000000"}
- tiles[1] =
- {"00000000",
- "00000000",
- "00000000",
- "00011000",
- "00011000",
- "00000000",
- "00000000",
- "00000000"}
- tiles[2] =
- {"00111100",
- "01111110",
- "11111111",
- "11111111",
- "11111111",
- "11111111",
- "01111110",
- "00111100"}
- tiles[3] =
- {"00000000",
- "00000000",
- "00000000",
- "11111111",
- "00000000",
- "00000000",
- "00000000",
- "00000000"}
- tiles[4] =
- {"00000000",
- "00000000",
- "00000000",
- "00000000",
- "11111111",
- "00000000",
- "00000000",
- "00000000"}
- tiles[5] =
- {"00001000",
- "00001000",
- "00001000",
- "00001000",
- "00001000",
- "00001000",
- "00001000",
- "00001000"}
- tiles[6] =
- {"00010000",
- "00010000",
- "00010000",
- "00010000",
- "00010000",
- "00010000",
- "00010000",
- "00010000"}
- tiles[7] =
- {"00000000",
- "00000000",
- "00000000",
- "00000000",
- "11000000",
- "00100000",
- "00010000",
- "00010000"}
- tiles[8] =
- {"00000000",
- "00000000",
- "00000000",
- "00000000",
- "00000011",
- "00000100",
- "00001000",
- "00001000"}
- tiles[9] =
- {"00010000",
- "00010000",
- "00100000",
- "11000000",
- "00000000",
- "00000000",
- "00000000",
- "00000000"}
- tiles[10] =
- {"00001000",
- "00001000",
- "00000100",
- "00000011",
- "00000000",
- "00000000",
- "00000000",
- "00000000"}
- tiles[11] =
- {"00000000",
- "00000000",
- "11111111",
- "00000000",
- "00000000",
- "11111111",
- "00000000",
- "00000000"}
- tiles[12] =
- {"00100100",
- "00100100",
- "00100100",
- "00100100",
- "00100100",
- "00100100",
- "00100100",
- "00100100"}
- tiles[13] =
- {"00000000",
- "00000000",
- "11110000",
- "00001000",
- "00000100",
- "11000100",
- "00100100",
- "00100100"}
- tiles[14] =
- {"00000000",
- "00000000",
- "00001111",
- "00010000",
- "00100000",
- "00100011",
- "00100100",
- "00100100"}
- tiles[15] =
- {"00100100",
- "00100100",
- "11000100",
- "00000100",
- "00001000",
- "11110000",
- "00000000",
- "00000000"}
- tiles[16] =
- {"00100100",
- "00100100",
- "00100011",
- "00100000",
- "00010000",
- "00001111",
- "00000000",
- "00000000"}
- tiles[17] =
- {"00000000",
- "00000000",
- "11111111",
- "00000000",
- "00000000",
- "11110000",
- "00001000",
- "00001000"}
- tiles[19] =
- {"00000000",
- "00000000",
- "11111111",
- "00000000",
- "00000000",
- "00001111",
- "00010000",
- "00010000"}
- tiles[21] =
- {"00100100",
- "00100100",
- "00100100",
- "00100100",
- "00100011",
- "00100000",
- "00100000",
- "00100000"}
- tiles[22] =
- {"00100100",
- "00100100",
- "00100100",
- "00100100",
- "11000100",
- "00000100",
- "00000100",
- "00000100"}
- tiles[23] =
- {"00100000",
- "00100000",
- "00100000",
- "00100011",
- "00100100",
- "00100100",
- "00100100",
- "00100100"}
- tiles[24] =
- {"00000100",
- "00000100",
- "00000100",
- "11000100",
- "00100100",
- "00100100",
- "00100100",
- "00100100"}
- tiles[25] =
- {"00000000",
- "00000000",
- "11111111",
- "00000001",
- "00000001",
- "11111111",
- "00000000",
- "00000000"}
- tiles[26] =
- {"00000000",
- "00000000",
- "11111111",
- "10000000",
- "10000000",
- "11111111",
- "00000000",
- "00000000"}
- tiles[27] =
- {"00000000",
- "00000000",
- "11111100",
- "00000100",
- "00000100",
- "11100100",
- "00100100",
- "00100100"}
- tiles[28] =
- {"00000000",
- "00000000",
- "00111111",
- "00100000",
- "00100000",
- "00100111",
- "00100100",
- "00100100"}
- tiles[29] =
- {"00100100",
- "00100100",
- "11100100",
- "00000100",
- "00000100",
- "11111100",
- "00000000",
- "00000000"}
- tiles[30] =
- {"00100100",
- "00100100",
- "00100111",
- "00100000",
- "00100000",
- "00111111",
- "00000000",
- "00000000"}
- tiles[31] =
- {"00000000",
- "00000000",
- "00000000",
- "11111111",
- "11111111",
- "00000000",
- "00000000",
- "00000000"}
- tiles[32] = tiles[0]
- tiles[33] =
- {"01111110",
- "11111111",
- "11111111",
- "11111111",
- "11111111",
- "11111111",
- "11111111",
- "01111110"}
- tiles[34] = tiles[33]
- tiles[35] = tiles[33]
- tiles[36] = tiles[33]
- tiles[37] = tiles[33]
- tiles[91] = tiles[33]
- tiles[92] = tiles[33]
- tiles[93] = tiles[33]
- tiles[94] = tiles[33]
- tiles[95] = tiles[33]
- tiles[96] = tiles[33]
- tiles[97] = tiles[33]
- tiles[98] = tiles[33]
- tiles[99] = tiles[0]
- local tileC = {}
- tileC[0] = 0
- tileC[1] = 0xFFB9AF
- tileC[2] = 0xFFB9AF
- tileC[3] = 255
- tileC[4] = 255
- tileC[5] = 255
- tileC[6] = 255
- tileC[7] = 255
- tileC[8] = 255
- tileC[9] = 255
- tileC[10] = 255
- tileC[11] = 255
- tileC[12] = 255
- tileC[13] = 255
- tileC[14] = 255
- tileC[15] = 255
- tileC[16] = 255
- tileC[17] = 255
- tileC[19] = 255
- tileC[21] = 255
- tileC[22] = 255
- tileC[23] = 255
- tileC[24] = 255
- tileC[25] = 255
- tileC[26] = 255
- tileC[27] = 255
- tileC[28] = 255
- tileC[29] = 255
- tileC[30] = 255
- tileC[31] = 0xFFB8FF
- tileC[32] = 0
- tileC[33] = 0xFFFF00
- tileC[34] = 0xFF0000
- tileC[35] = 0x00FFFF
- tileC[36] = 0xFFB8FF
- tileC[37] = 0xFFB851
- tileC[91] = 0
- tileC[92] = 0
- tileC[93] = 0
- tileC[94] = 0
- tileC[95] = 0
- tileC[96] = 0
- tileC[97] = 0
- tileC[98] = 0
- tileC[99] = 0
- local sprites = {}
- sprites[0] = {
- {"0000000000000000",
- "0000011111000000",
- "0001111111110000",
- "0011111111111000",
- "0011111111111000",
- "0111111111111100",
- "0111111111111100",
- "0111111111111100",
- "0111111111111100",
- "0111111111111100",
- "0011111111111000",
- "0011111111111000",
- "0001111111110000",
- "0000011111000000",
- "0000000000000000",
- "0000000000000000"},
- {"0000000000000000",
- "0000011111000000",
- "0001111111110000",
- "0011111111111000",
- "0011111111111000",
- "0000111111111100",
- "0000000111111100",
- "0000000000111100",
- "0000000111111100",
- "0000111111111100",
- "0011111111111000",
- "0011111111111000",
- "0001111111110000",
- "0000011111000000",
- "0000000000000000",
- "0000000000000000"},
- {"0000000000000000",
- "0000011111000000",
- "0000011111110000",
- "0000001111111000",
- "0000000111111000",
- "0000000011111100",
- "0000000001111100",
- "0000000000111100",
- "0000000001111100",
- "0000000011111100",
- "0000000111111000",
- "0000001111111000",
- "0000011111110000",
- "0000011111000000",
- "0000000000000000",
- "0000000000000000"},
- {"0000000000000000",
- "0000011111000000",
- "0001111111110000",
- "0011111111111000",
- "0011111111111000",
- "0000111111111100",
- "0000000111111100",
- "0000000000111100",
- "0000000111111100",
- "0000111111111100",
- "0011111111111000",
- "0011111111111000",
- "0001111111110000",
- "0000011111000000",
- "0000000000000000",
- "0000000000000000"}}
- sprites[1] = {
- {"0000000000000000",
- "0000001111000000",
- "0000111111110000",
- "0001111111111000",
- "0012211112211100",
- "0022221122221100",
- "0033221133221100",
- "0133221133221110",
- "0112211112211110",
- "0111111111111110",
- "0111111111111110",
- "0111111111111110",
- "0111111111111110",
- "0110111001110110",
- "0100011001100010",
- "0000000000000000"},
- {"0000000000000000",
- "0000001111000000",
- "0000111111110000",
- "0001111111111000",
- "0012211112211100",
- "0022221122221100",
- "0033221133221100",
- "0133221133221110",
- "0112211112211110",
- "0111111111111110",
- "0111111111111110",
- "0111111111111110",
- "0111111111111110",
- "0111101111011110",
- "0011000110001100",
- "0000000000000000"}}
- sprites[2] = {
- {"0000000000000000",
- "0000001111000000",
- "0000331111330000",
- "0002332112332000",
- "0012222112222100",
- "0012222112222100",
- "0011221111221100",
- "0111111111111110",
- "0111111111111110",
- "0111111111111110",
- "0111111111111110",
- "0111111111111110",
- "0111111111111110",
- "0110111001110110",
- "0100011001100010",
- "0000000000000000"},
- {"0000000000000000",
- "0000001111000000",
- "0000331111330000",
- "0002332112332000",
- "0012222112222100",
- "0012222112222100",
- "0011221111221100",
- "0111111111111110",
- "0111111111111110",
- "0111111111111110",
- "0111111111111110",
- "0111111111111110",
- "0111111111111110",
- "0111101111011110",
- "0011000110001100",
- "0000000000000000"}}
- sprites[3] = {
- {"0000000000000000",
- "0000001111000000",
- "0000111111110000",
- "0001111111111000",
- "0011111111111100",
- "0011221111221100",
- "0012222112222100",
- "0112222112222110",
- "0112332112332110",
- "0111331111331110",
- "0111111111111110",
- "0111111111111110",
- "0111111111111110",
- "0110111001110110",
- "0100011001100010",
- "0000000000000000"},
- {"0000000000000000",
- "0000001111000000",
- "0000111111110000",
- "0001111111111000",
- "0011111111111100",
- "0011221111221100",
- "0012222112222100",
- "0112222112222110",
- "0112332112332110",
- "0111331111331110",
- "0111111111111110",
- "0111111111111110",
- "0111111111111110",
- "0111101111011110",
- "0011000110001100",
- "0000000000000000"}}
- sprites[4] = {
- {"00111100",
- "01111110",
- "11111111",
- "11111111",
- "11111111",
- "11111111",
- "01111110",
- "00111100"},
- {"00000000",
- "00000000",
- "00000000",
- "00000000",
- "00000000",
- "00000000",
- "00000000",
- "00000000"}}
- sprites[5] = {
- {"0000000000000000",
- "0000001111000000",
- "0000111111110000",
- "0001111111111000",
- "0011111111111100",
- "0011111111111100",
- "0011122112211100",
- "0111122112211110",
- "0111111111111110",
- "0111111111111110",
- "0112211221122110",
- "0121122112211210",
- "0111111111111110",
- "0110111001110110",
- "0100011001100010",
- "0000000000000000"},
- {"0000000000000000",
- "0000001111000000",
- "0000111111110000",
- "0001111111111000",
- "0011111111111100",
- "0011111111111100",
- "0011122112211100",
- "0111122112211110",
- "0111111111111110",
- "0111111111111110",
- "0112211221122110",
- "0121122112211210",
- "0111111111111110",
- "0111101111011110",
- "0011000110001100",
- "0000000000000000"}}
- sprites[6] = {
- {"00444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444400",
- "04440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004440",
- "44403333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333330444",
- "44033333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333044",
- "44033333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333044",
- "44033333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333033303333333333333330333333333333333333333333333333333333333333333333333333333333333044",
- "44033333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333000300333333333333300303333333333333333333333033003330000000000333333333333333333333044",
- "44033333333333333000000000000000333333333330333303333333333333000000333333333333333333333333333010001033333333333010003033333333033033333333003010330111111110333333333333333333333044",
- "44033333333333333011111111111111033333333301030303333333333300111000000333333333333333333333333010201103333333330110200033333330103033333333010011030111111110333333333333333333333044",
- "44033333333333333010000000000000033333333301000010333333330011100222222003333333333333333333333010220110333333301102201033333330100103333333010201100100000000003333333333333333333044",
- "44033333333333333010222222222222200333333010220110333333300110022222222220033333333333333333333010222011033333011022201033333301020110333333010220110102222222200333333333333333333044",
- "44033333333333333010222222222222222033333010222011033333011002222222222222203333333333333333333010222201103330110222201033333010222010333333010222010102222222201033333333333333333044",
- "44033333333333333010222222222222222203330102222011033330110222222222220022220333000000000003333010222220110301102222201033333010222011033333010222201102222222201033333333333333333044",
- "44033333333333333010222222220022222220301022222201103330102222222222002220011033011111111103333010222222011011022222201033330102222201103333010222220102222222201033333333333333333044",
- "44033333333333333010222222220022222220001022222220110301102222222200222001100333010000000000333010222222201110222222201033301022222220103333010222220102222222201033333333333333333044",
- "44033333333333333010222222222220222220010222222220110301022222222222200110033333010222222220333010222222220102222222201033301022222220110333010222222002222222201033333333333333333044",
- "44033333333333333010222222222220222220002222222222011001022222222220011003333333010222222220003010222222222022222222201033010222222222011033010222222202222222201033333333333333333044",
- "44033333333333333010222222220002222203002222002222201101022222222200100333333333000222222220103010222222222222222222201030102222200222201033010222222222222222201033333333333333333044",
- "44033333333333333010222222222222222033022222002222201101022222222222000333333333330222222220103010222222222222222222201001022222200222201103010222222222222222201033333333333333333044",
- "44033333333333333010222222220000000330022222222022220110022222222222222003333333330000000000103010222222222222222222201001022222222202220110010222222222222222201033333333333333333044",
- "44033333333333333010222222220333333300222222220222222010002222222220022220033333333301111111103010222222222222222220201010222222222022202010010222222222222220201033333333333333333044",
- "44033333333333333010222222220303303002222222200222202011000222222222200222200033333300000000003010222222222222222220201002222222220022202011010222222222222220201033333333333333333044",
- "44033333333333333010222222220303033022222222222222220201101022222222222022201103333333333333333010222222222222222220201002222222222222220201100222222222222220201033333333333333333044",
- "44033333333333333010222222220303000222222222222220000220110102222222220222011033333333333333333000222222222222220000201022222222222220000220100222222222220000201033333333333333333044",
- "44033333333333333000222222220303330222222222222222222222011010202222222200110333333333333333333330222222222222222222201022222222222222222220110222222222222222201033333333333333333044",
- "44033333333333333330000000000303300000000000000000000000011011010000000011103333333333333333333330000000000000000000001000000000000000000000010000000000000000001033333333333333333044",
- "44033333333333333333033333333303333011111111111111111111111100000011111110033333333333333333333333301111111111111111111010111111111111111111111011111111111111111033333333333333333044",
- "44033333333333333333000000000003330000000000000000000000000003333300000003333333333333333333333333300000000000000000000000000000000000000000000000000000000000000033333333333333333044",
- "44033333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333044",
- "44033333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333044",
- "44033333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333044",
- "44403333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333330444",
- "04440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004440",
- "00444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444400"}}
- local scores = {
- {5090,3,"Andrea Tomas"},
- {4990,3,"Xenophon Mirza"},
- {4520,2,"Oscar Mitica"},
- {4360,2,"Spyridon Niall"},
- {4260,2,"Pastor Heber"},
- {4080,2,"Pradeep Edan"},
- {3960,1,"Menachem Donar"},
- {3780,1,"Donato Iob"},
- {3620,1,"Amichai Nhung"},
- {3210,1,"Kerberos Wil"}}
- local spriteC = {}
- spriteC[0] = {[1] = {255, 255, 0}}
- spriteC[1] = {[1] = {255, 0, 0},[2] = {223, 223, 255},[3] = {33, 33, 255}}
- spriteC[2] = {[1] = {0, 255, 255},[2] = {223, 223, 255},[3] = {33, 33, 255}}
- spriteC[3] = {[1] = {255, 185, 255},[2] = {223, 223, 255},[3] = {33, 33, 255}}
- spriteC[4] = {[1] = {255, 185, 81},[2] = {223, 223, 255},[3] = {33, 33, 255}}
- spriteC[5] = {[1] = {255, 185, 175}}
- spriteC[6] = {[1] = {33, 33, 255},[2] = {223, 223, 255},[3] = {223, 223, 255}}
- spriteC[7] = {[1] = {223,223,223},[2] = {255, 0, 0},[3] = {255, 0, 0}}
- spriteC[8] = {[1] = {0,0,0,0},[2] = {223, 223, 255},[3] = {33, 33, 255}}
- spriteC[9] = {[1] = {255, 255, 255},[2] = {255, 255, 0},[3] = {255, 191, 0},[4] = {255, 0, 0}}
- spriteC[99]={[1]={0,0,0,0},[2]={0,0,0,0},[3]={0,0,0,0},[4]={0,0,0,0},[5]={0,0,0,0},[6]={0,0,0,0},[7]={0,0,0,0},[8]={0,0,0,0},[9]={0,0,0,0}}
- local spriteToObj = {}
- spriteToObj[33] = 0
- spriteToObj[34] = 1
- spriteToObj[35] = 2
- spriteToObj[36] = 3
- spriteToObj[37] = 4
- spriteToObj[2] = 5
- local passTiles = {
- [0] = true,
- [1] = true,
- [2] = true,
- [32] = true,
- [91] = true,
- [92] = true,
- [93] = true,
- [94] = true,
- [95] = true,
- [96] = true,
- [97] = true,
- [98] = true}
- local baseObj = {}
- baseObj[0] = {
- ['name'] = "pacman",
- ['sprite'] = 0,
- ['sprPal'] = 0,
- ['dir'] = 0,
- ['ndir'] = 0,
- ['sdir'] = 0,
- ['fspeed'] = 3,
- ['speed'] = 1,
- ['offX'] = 8,
- ['offY'] = 4,
- ['drawX'] = -8,
- ['drawY'] = -8,
- ['dologic'] = function(obj)
- local tileX,tileY = math.floor(obj.posX / 8) + 1, math.floor(obj.posY / 8) + 1
- local ntileX,ntileY
- obj.speed = 1
- if obj.ndir == 0 then
- ntileX,ntileY = tileX - 1,tileY
- elseif obj.ndir == 1 then
- ntileX,ntileY = tileX,tileY - 1
- elseif obj.ndir == 2 then
- ntileX,ntileY = tileX + 1,tileY
- elseif obj.ndir == 3 then
- ntileX,ntileY = tileX,tileY + 1
- end
- local ltileX,ltileY
- if obj.dir == 0 then
- ltileX,ltileY = tileX - 1,tileY
- elseif obj.dir == 1 then
- ltileX,ltileY = tileX,tileY - 1
- elseif obj.dir == 2 then
- ltileX,ltileY = tileX + 1,tileY
- elseif obj.dir == 3 then
- ltileX,ltileY = tileX,tileY + 1
- end
- if curMap[ltileY][ltileX] == 1 then
- obj.speed = 0.9
- end
- if (passTiles[curMap[ntileY][ntileX]] == true) and ((math.fmod(math.floor(obj.posX), 8) == 4 and math.fmod(math.floor(obj.posY), 8) == 4) or math.abs(obj.ndir - obj.dir) == 2) then
- if obj.ndir ~= obj.dir then
- obj.speed = 2
- end
- obj.dir = obj.ndir
- end
- obj.sdir = obj.dir
- if obj.sdir == 2 then
- obj.drawX = -9
- obj.drawY = -8
- elseif obj.sdir == 3 then
- obj.drawX = -9
- obj.drawY = -9
- else
- obj.drawX = -8
- obj.drawY = -8
- end
- end}
- baseObj[1] = {
- ['name'] = "blinky",
- ['sprite'] = 1,
- ['sprPal'] = 1,
- ['dir'] = 0,
- ['sdir'] = 0,
- ['fspeed'] = 8,
- ['speed'] = 0.9,
- ['offX'] = 8,
- ['offY'] = 4,
- ['drawX'] = -8,
- ['drawY'] = -8,
- ['scat'] = 1,
- ['scatX'] = 28,
- ['scatY'] = 1,
- ['mode'] = 2,
- ['timer'] = 420,
- ['dologic'] = function(obj)
- local tileX,tileY = math.floor(obj.posX / 8) + 1, math.floor(obj.posY / 8) + 1
- local targetX = math.floor(pacobj.posX / 8) + 1
- local targetY = math.floor(pacobj.posY / 8) + 1
- if obj.mode == 2 then
- targetX = obj.scatX
- targetY = obj.scatY
- end
- if obj.mode == 3 then
- targetX = math.random(1,28)
- targetY = math.random(1,26)
- end
- if obj.mode == 4 then
- targetX = curMap.fX
- targetY = curMap.fY
- end
- obj.timer = obj.timer - 1
- if obj.timer <= 120 and obj.mode == 3 then
- obj.sprPal = math.fmod(obj.timer,30) > 15 and 7 or 6
- end
- if obj.timer <= 0 then
- if obj.mode == 1 then
- if obj.scat < 4 then
- obj.scat = obj.scat + 1
- obj.mode = 2
- obj.timer = 420
- if obj.scat > 2 then obj.timer = 300 end
- obj.dir = math.fmod(obj.dir + 2, 4)
- else
- obj.timer = 60
- end
- elseif obj.mode == 2 or obj.mode == 3 then
- if obj.mode == 2 then obj.dir = math.fmod(obj.dir + 2, 4) end
- obj.mode = 1
- obj.sprPal = 1
- obj.timer = 1200
- end
- end
- if tileX == targetX and tileY == targetY and obj.mode == 4 then
- obj.mode = 1
- obj.timer = 1200
- obj.sprPal = 1
- end
- if math.fmod(math.floor(obj.posX), 8) == 4 and math.fmod(math.floor(obj.posY), 8) == 4 then
- local ndir = obj.dir
- local empty = 0
- if (passTiles[curMap[tileY][tileX - 1]] == true) and curMap[tileY][tileX] ~= 91 and obj.dir ~= 2 then empty = empty + 1 end
- if (passTiles[curMap[tileY - 1][tileX]] == true or curMap[tileY - 1][tileX] == 31) and curMap[tileY][tileX] ~= 92 and obj.dir ~= 3 then empty = empty + 1 end
- if (passTiles[curMap[tileY][tileX + 1]] == true) and curMap[tileY][tileX] ~= 93 and obj.dir ~= 0 then empty = empty + 1 end
- if (passTiles[curMap[tileY + 1][tileX]] == true) and curMap[tileY][tileX] ~= 94 and obj.dir ~= 1 then empty = empty + 1 end
- if empty > 0 then
- local ldist = 99
- if (passTiles[curMap[tileY][tileX - 1]] == true) and curMap[tileY][tileX] ~= 91 and obj.dir ~= 2 and distance(tileX - 1,tileY,targetX,targetY) <= ldist then ndir = 0 ldist = distance(tileX - 1,tileY,targetX,targetY) end
- if (passTiles[curMap[tileY - 1][tileX]] == true) and curMap[tileY][tileX] ~= 92 and obj.dir ~= 3 and distance(tileX,tileY - 1,targetX,targetY) <= ldist then ndir = 1 ldist = distance(tileX,tileY - 1,targetX,targetY) end
- if (passTiles[curMap[tileY][tileX + 1]] == true) and curMap[tileY][tileX] ~= 93 and obj.dir ~= 0 and distance(tileX + 1,tileY,targetX,targetY) <= ldist then ndir = 2 ldist = distance(tileX + 1,tileY,targetX,targetY) end
- if (passTiles[curMap[tileY + 1][tileX]] == true) and curMap[tileY][tileX] ~= 94 and obj.dir ~= 1 and distance(tileX,tileY + 1,targetX,targetY) <= ldist then ndir = 3 ldist = distance(tileX,tileY + 1,targetX,targetY) end
- if (passTiles[curMap[tileY][tileX - 1]] == true) and curMap[tileY][tileX] == 95 then ndir = 0 end
- if (passTiles[curMap[tileY - 1][tileX]] == true or curMap[tileY - 1][tileX] == 31) and curMap[tileY][tileX] == 96 or curMap[tileY][tileX] == 31 then ndir = 1 end
- if (passTiles[curMap[tileY][tileX + 1]] == true) and curMap[tileY][tileX] == 97 then ndir = 2 end
- if (passTiles[curMap[tileY + 1][tileX]] == true) and curMap[tileY][tileX] == 98 then ndir = 3 end
- end
- obj.dir = ndir
- end
- if obj.mode == 1 or obj.mode == 2 then
- if curMap[tileY][tileX] == 32 then
- obj.speed = 0.5
- else
- obj.speed = 0.9
- end
- end
- if obj.mode == 3 then
- obj.sprite = 5
- else
- if obj.dir == 0 then
- obj.sdir = 0
- obj.sprite = 1
- elseif obj.dir == 1 then
- obj.sdir = 0
- obj.sprite = 2
- elseif obj.dir == 2 then
- obj.sdir = 2
- obj.sprite = 1
- elseif obj.dir == 3 then
- obj.sdir = 0
- obj.sprite = 3
- end
- end
- end}
- baseObj[2] = {
- ['name'] = "inky",
- ['sprite'] = 2,
- ['sprPal'] = 2,
- ['dir'] = 0,
- ['sdir'] = 0,
- ['fspeed'] = 8,
- ['speed'] = 0.9,
- ['offX'] = 8,
- ['offY'] = 4,
- ['drawX'] = -8,
- ['drawY'] = -8,
- ['scat'] = 1,
- ['scatX'] = 28,
- ['scatY'] = 36,
- ['mode'] = 2,
- ['timer'] = 420,
- ['dologic'] = function(obj)
- local tileX,tileY = math.floor(obj.posX / 8) + 1, math.floor(obj.posY / 8) + 1
- local btileX,btileY = math.floor(blinkobj.posX / 8) + 1, math.floor(blinkobj.posY / 8) + 1
- local ptileX,ptileY = math.floor(pacobj.posX / 8) + 1, math.floor(pacobj.posY / 8) + 1
- local targetX = ptileX + pacobj.speedX * 2 + ((ptileX - btileX) * 2) + 1
- local targetY = ptileY + pacobj.speedY * 2 + ((ptileY - btileY) * 2) + 1
- if obj.mode == 2 then
- targetX = obj.scatX
- targetY = obj.scatY
- end
- if obj.mode == 3 then
- targetX = math.random(1,28)
- targetY = math.random(1,26)
- end
- if obj.mode == 4 then
- targetX = curMap.fX
- targetY = curMap.fY
- end
- obj.timer = obj.timer - 1
- if obj.timer <= 120 and obj.mode == 3 then
- obj.sprPal = math.fmod(obj.timer,30) > 15 and 7 or 6
- end
- if obj.timer <= 0 then
- if obj.mode == 1 then
- if obj.scat < 4 then
- obj.scat = obj.scat + 1
- obj.mode = 2
- obj.timer = 420
- if obj.scat > 2 then obj.timer = 300 end
- obj.dir = math.fmod(obj.dir + 2, 4)
- else
- obj.timer = 60
- end
- elseif obj.mode == 2 or obj.mode == 3 then
- if obj.mode == 2 then obj.dir = math.fmod(obj.dir + 2, 4) end
- obj.mode = 1
- obj.sprPal = 2
- obj.timer = 1200
- end
- end
- if tileX == targetX and tileY == targetY and obj.mode == 4 then
- obj.mode = 1
- obj.timer = 1200
- obj.sprPal = 2
- end
- if math.fmod(math.floor(obj.posX), 8) == 4 and math.fmod(math.floor(obj.posY), 8) == 4 then
- local ndir = obj.dir
- local empty = 0
- if (passTiles[curMap[tileY][tileX - 1]] == true) and curMap[tileY][tileX] ~= 91 and obj.dir ~= 2 then empty = empty + 1 end
- if (passTiles[curMap[tileY - 1][tileX]] == true or curMap[tileY - 1][tileX] == 31) and curMap[tileY][tileX] ~= 92 and obj.dir ~= 3 then empty = empty + 1 end
- if (passTiles[curMap[tileY][tileX + 1]] == true) and curMap[tileY][tileX] ~= 93 and obj.dir ~= 0 then empty = empty + 1 end
- if (passTiles[curMap[tileY + 1][tileX]] == true) and curMap[tileY][tileX] ~= 94 and obj.dir ~= 1 then empty = empty + 1 end
- if empty > 0 then
- local ldist = 99
- if (passTiles[curMap[tileY][tileX - 1]] == true) and curMap[tileY][tileX] ~= 91 and obj.dir ~= 2 and distance(tileX - 1,tileY,targetX,targetY) <= ldist then ndir = 0 ldist = distance(tileX - 1,tileY,targetX,targetY) end
- if (passTiles[curMap[tileY - 1][tileX]] == true) and curMap[tileY][tileX] ~= 92 and obj.dir ~= 3 and distance(tileX,tileY - 1,targetX,targetY) <= ldist then ndir = 1 ldist = distance(tileX,tileY - 1,targetX,targetY) end
- if (passTiles[curMap[tileY][tileX + 1]] == true) and curMap[tileY][tileX] ~= 93 and obj.dir ~= 0 and distance(tileX + 1,tileY,targetX,targetY) <= ldist then ndir = 2 ldist = distance(tileX + 1,tileY,targetX,targetY) end
- if (passTiles[curMap[tileY + 1][tileX]] == true) and curMap[tileY][tileX] ~= 94 and obj.dir ~= 1 and distance(tileX,tileY + 1,targetX,targetY) <= ldist then ndir = 3 ldist = distance(tileX,tileY + 1,targetX,targetY) end
- if (passTiles[curMap[tileY][tileX - 1]] == true) and curMap[tileY][tileX] == 95 then ndir = 0 end
- if (passTiles[curMap[tileY - 1][tileX]] == true or curMap[tileY - 1][tileX] == 31) and curMap[tileY][tileX] == 96 or curMap[tileY][tileX] == 31 then ndir = 1 end
- if (passTiles[curMap[tileY][tileX + 1]] == true) and curMap[tileY][tileX] == 97 then ndir = 2 end
- if (passTiles[curMap[tileY + 1][tileX]] == true) and curMap[tileY][tileX] == 98 then ndir = 3 end
- end
- obj.dir = ndir
- end
- if obj.mode == 1 or obj.mode == 2 then
- if curMap[tileY][tileX] == 32 then
- obj.speed = 0.5
- else
- obj.speed = 0.9
- end
- end
- if obj.mode == 3 then
- obj.sprite = 5
- else
- if obj.dir == 0 then
- obj.sdir = 0
- obj.sprite = 1
- elseif obj.dir == 1 then
- obj.sdir = 0
- obj.sprite = 2
- elseif obj.dir == 2 then
- obj.sdir = 2
- obj.sprite = 1
- elseif obj.dir == 3 then
- obj.sdir = 0
- obj.sprite = 3
- end
- end
- end}
- baseObj[3] = {
- ['name'] = "pinky",
- ['sprite'] = 3,
- ['sprPal'] = 3,
- ['dir'] = 2,
- ['sdir'] = 0,
- ['fspeed'] = 8,
- ['speed'] = 0.9,
- ['offX'] = 8,
- ['offY'] = 4,
- ['drawX'] = -8,
- ['drawY'] = -8,
- ['scat'] = 1,
- ['scatX'] = 1,
- ['scatY'] = 1,
- ['mode'] = 2,
- ['timer'] = 420,
- ['dologic'] = function(obj)
- local tileX,tileY = math.floor(obj.posX / 8) + 1, math.floor(obj.posY / 8) + 1
- local targetX = math.floor(pacobj.posX / 8) + pacobj.speedX * 4 + 1
- local targetY = math.floor(pacobj.posY / 8) + pacobj.speedY * 4 + 1
- if obj.mode == 2 then
- targetX = obj.scatX
- targetY = obj.scatY
- end
- if obj.mode == 3 then
- targetX = math.random(1,28)
- targetY = math.random(1,26)
- end
- if obj.mode == 4 then
- targetX = curMap.fX
- targetY = curMap.fY
- end
- obj.timer = obj.timer - 1
- if obj.timer <= 120 and obj.mode == 3 then
- obj.sprPal = math.fmod(obj.timer,30) > 15 and 7 or 6
- end
- if obj.timer <= 0 then
- if obj.mode == 1 then
- if obj.scat < 4 then
- obj.scat = obj.scat + 1
- obj.mode = 2
- obj.timer = 420
- if obj.scat > 2 then obj.timer = 300 end
- obj.dir = math.fmod(obj.dir + 2, 4)
- else
- obj.timer = 60
- end
- elseif obj.mode == 2 or obj.mode == 3 then
- if obj.mode == 2 then obj.dir = math.fmod(obj.dir + 2, 4) end
- obj.mode = 1
- obj.sprPal = 3
- obj.timer = 1200
- end
- end
- if tileX == targetX and tileY == targetY and obj.mode == 4 then
- obj.mode = 1
- obj.timer = 1200
- obj.sprPal = 3
- end
- if math.fmod(math.floor(obj.posX), 8) == 4 and math.fmod(math.floor(obj.posY), 8) == 4 then
- local ndir = obj.dir
- local empty = 0
- if (passTiles[curMap[tileY][tileX - 1]] == true) and curMap[tileY][tileX] ~= 91 and obj.dir ~= 2 then empty = empty + 1 end
- if (passTiles[curMap[tileY - 1][tileX]] == true or curMap[tileY - 1][tileX] == 31) and curMap[tileY][tileX] ~= 92 and obj.dir ~= 3 then empty = empty + 1 end
- if (passTiles[curMap[tileY][tileX + 1]] == true) and curMap[tileY][tileX] ~= 93 and obj.dir ~= 0 then empty = empty + 1 end
- if (passTiles[curMap[tileY + 1][tileX]] == true) and curMap[tileY][tileX] ~= 94 and obj.dir ~= 1 then empty = empty + 1 end
- if empty > 0 then
- local ldist = 99
- if (passTiles[curMap[tileY][tileX - 1]] == true) and curMap[tileY][tileX] ~= 91 and obj.dir ~= 2 and distance(tileX - 1,tileY,targetX,targetY) <= ldist then ndir = 0 ldist = distance(tileX - 1,tileY,targetX,targetY) end
- if (passTiles[curMap[tileY - 1][tileX]] == true) and curMap[tileY][tileX] ~= 92 and obj.dir ~= 3 and distance(tileX,tileY - 1,targetX,targetY) <= ldist then ndir = 1 ldist = distance(tileX,tileY - 1,targetX,targetY) end
- if (passTiles[curMap[tileY][tileX + 1]] == true) and curMap[tileY][tileX] ~= 93 and obj.dir ~= 0 and distance(tileX + 1,tileY,targetX,targetY) <= ldist then ndir = 2 ldist = distance(tileX + 1,tileY,targetX,targetY) end
- if (passTiles[curMap[tileY + 1][tileX]] == true) and curMap[tileY][tileX] ~= 94 and obj.dir ~= 1 and distance(tileX,tileY + 1,targetX,targetY) <= ldist then ndir = 3 ldist = distance(tileX,tileY + 1,targetX,targetY) end
- if (passTiles[curMap[tileY][tileX - 1]] == true) and curMap[tileY][tileX] == 95 then ndir = 0 end
- if (passTiles[curMap[tileY - 1][tileX]] == true or curMap[tileY - 1][tileX] == 31) and curMap[tileY][tileX] == 96 or curMap[tileY][tileX] == 31 then ndir = 1 end
- if (passTiles[curMap[tileY][tileX + 1]] == true) and curMap[tileY][tileX] == 97 then ndir = 2 end
- if (passTiles[curMap[tileY + 1][tileX]] == true) and curMap[tileY][tileX] == 98 then ndir = 3 end
- end
- obj.dir = ndir
- end
- if obj.mode == 1 or obj.mode == 2 then
- if curMap[tileY][tileX] == 32 then
- obj.speed = 0.5
- else
- obj.speed = 0.9
- end
- end
- if obj.mode == 3 then
- obj.sprite = 5
- else
- if obj.dir == 0 then
- obj.sdir = 0
- obj.sprite = 1
- elseif obj.dir == 1 then
- obj.sdir = 0
- obj.sprite = 2
- elseif obj.dir == 2 then
- obj.sdir = 2
- obj.sprite = 1
- elseif obj.dir == 3 then
- obj.sdir = 0
- obj.sprite = 3
- end
- end
- end}
- baseObj[4] = {
- ['name'] = "clyde",
- ['sprite'] = 2,
- ['sprPal'] = 4,
- ['dir'] = 2,
- ['sdir'] = 0,
- ['fspeed'] = 8,
- ['speed'] = 0.9,
- ['offX'] = 8,
- ['offY'] = 4,
- ['drawX'] = -8,
- ['drawY'] = -8,
- ['scat'] = 1,
- ['scatX'] = 1,
- ['scatY'] = 36,
- ['mode'] = 2,
- ['timer'] = 420,
- ['dologic'] = function(obj)
- local tileX,tileY = math.floor(obj.posX / 8) + 1, math.floor(obj.posY / 8) + 1
- local targetX = math.floor(pacobj.posX / 8) + 1
- local targetY = math.floor(pacobj.posY / 8) + 1
- if distance(pacobj.posX,pacobj.posY,obj.posX,obj.posY) < 64 or obj.mode == 2 then
- targetX = obj.scatX
- targetY = obj.scatY
- end
- if obj.mode == 3 then
- targetX = math.random(1,28)
- targetY = math.random(1,26)
- end
- if obj.mode == 4 then
- targetX = curMap.fX
- targetY = curMap.fY
- end
- obj.timer = obj.timer - 1
- if obj.timer <= 120 and obj.mode == 3 then
- obj.sprPal = math.fmod(obj.timer,30) > 15 and 7 or 6
- end
- if obj.timer <= 0 then
- if obj.mode == 1 then
- if obj.scat < 4 then
- obj.scat = obj.scat + 1
- obj.mode = 2
- obj.timer = 420
- if obj.scat > 2 then obj.timer = 300 end
- obj.dir = math.fmod(obj.dir + 2, 4)
- else
- obj.timer = 60
- end
- elseif obj.mode == 2 or obj.mode == 3 then
- if obj.mode == 2 then obj.dir = math.fmod(obj.dir + 2, 4) end
- obj.mode = 1
- obj.sprPal = 4
- obj.timer = 1200
- end
- end
- if tileX == targetX and tileY == targetY and obj.mode == 4 then
- obj.mode = 1
- obj.timer = 1200
- obj.sprPal = 4
- end
- if math.fmod(math.floor(obj.posX), 8) == 4 and math.fmod(math.floor(obj.posY), 8) == 4 then
- local ndir = obj.dir
- local empty = 0
- if (passTiles[curMap[tileY][tileX - 1]] == true) and curMap[tileY][tileX] ~= 91 and obj.dir ~= 2 then empty = empty + 1 end
- if (passTiles[curMap[tileY - 1][tileX]] == true or curMap[tileY - 1][tileX] == 31) and curMap[tileY][tileX] ~= 92 and obj.dir ~= 3 then empty = empty + 1 end
- if (passTiles[curMap[tileY][tileX + 1]] == true) and curMap[tileY][tileX] ~= 93 and obj.dir ~= 0 then empty = empty + 1 end
- if (passTiles[curMap[tileY + 1][tileX]] == true) and curMap[tileY][tileX] ~= 94 and obj.dir ~= 1 then empty = empty + 1 end
- if empty > 0 then
- local ldist = 99
- if (passTiles[curMap[tileY][tileX - 1]] == true) and curMap[tileY][tileX] ~= 91 and obj.dir ~= 2 and distance(tileX - 1,tileY,targetX,targetY) <= ldist then ndir = 0 ldist = distance(tileX - 1,tileY,targetX,targetY) end
- if (passTiles[curMap[tileY - 1][tileX]] == true) and curMap[tileY][tileX] ~= 92 and obj.dir ~= 3 and distance(tileX,tileY - 1,targetX,targetY) <= ldist then ndir = 1 ldist = distance(tileX,tileY - 1,targetX,targetY) end
- if (passTiles[curMap[tileY][tileX + 1]] == true) and curMap[tileY][tileX] ~= 93 and obj.dir ~= 0 and distance(tileX + 1,tileY,targetX,targetY) <= ldist then ndir = 2 ldist = distance(tileX + 1,tileY,targetX,targetY) end
- if (passTiles[curMap[tileY + 1][tileX]] == true) and curMap[tileY][tileX] ~= 94 and obj.dir ~= 1 and distance(tileX,tileY + 1,targetX,targetY) <= ldist then ndir = 3 ldist = distance(tileX,tileY + 1,targetX,targetY) end
- if (passTiles[curMap[tileY][tileX - 1]] == true) and curMap[tileY][tileX] == 95 then ndir = 0 end
- if (passTiles[curMap[tileY - 1][tileX]] == true or curMap[tileY - 1][tileX] == 31) and curMap[tileY][tileX] == 96 or curMap[tileY][tileX] == 31 then ndir = 1 end
- if (passTiles[curMap[tileY][tileX + 1]] == true) and curMap[tileY][tileX] == 97 then ndir = 2 end
- if (passTiles[curMap[tileY + 1][tileX]] == true) and curMap[tileY][tileX] == 98 then ndir = 3 end
- end
- obj.dir = ndir
- end
- if obj.mode == 1 or obj.mode == 2 then
- if curMap[tileY][tileX] == 32 then
- obj.speed = 0.5
- else
- obj.speed = 0.9
- end
- end
- if obj.mode == 3 then
- obj.sprite = 5
- else
- if obj.dir == 0 then
- obj.sdir = 0
- obj.sprite = 1
- elseif obj.dir == 1 then
- obj.sdir = 0
- obj.sprite = 2
- elseif obj.dir == 2 then
- obj.sdir = 2
- obj.sprite = 1
- elseif obj.dir == 3 then
- obj.sdir = 0
- obj.sprite = 3
- end
- end
- end}
- baseObj[5] = {
- ['name'] = "superdot",
- ['sprite'] = 4,
- ['sprPal'] = 5,
- ['dir'] = 0,
- ['sdir'] = 0,
- ['fspeed'] = 10,
- ['speed'] = 0,
- ['offX'] = 4,
- ['offY'] = 4,
- ['drawX'] = -4,
- ['drawY'] = -4,
- ['dologic'] = function(obj) end}
- gfx.drawPixel = function(x,y,red,green,blue,alpha)
- if red == nil then red,green,blue = 255,255,255 end
- alpha = alpha or 255
- if x >= 1 and y >= 1 and x <= 629 and y <= 424 then tpt.drawpixel(x,y,red,green,blue,alpha) end
- end
- local function drawpixel(x,y,red,green,blue,alpha)
- if red == nil then red,green,blue = 255,255,255 end
- alpha = alpha or 255
- if x >= bX and y >= bY and x <= bX + 223 and y <= bY + 287 then gfx.drawPixel(x,y,red,green,blue,alpha) end
- end
- function distance(x1,y1,x2,y2)
- return math.sqrt((x2 - x1)^2 + (y2 - y1)^2)
- end
- function deepcopy(orig)
- local orig_type = type(orig)
- local copy
- if orig_type == 'table' then
- copy = {}
- for orig_key, orig_value in next, orig, nil do
- copy[deepcopy(orig_key)] = deepcopy(orig_value)
- end
- setmetatable(copy, deepcopy(getmetatable(orig)))
- else
- copy = orig
- end
- return copy
- end
- string.rpad = function(str, len, char)
- if char == nil then char = ' ' end
- return string.rep(char, len - #str) .. str
- end
- local function drawTile(tile,bx,by,color)
- color = color or tileC[tile] + 0xFF000000
- for y = 1,8 do
- for x = 1,8 do
- tpt.delete(bx + x - 1,by + y - 1)
- if tiles[tile][y]:sub(x,x) == "1" then
- tpt.create(bx + x - 1,by + y - 1,"DMND")
- tpt.set_property("dcolour",color,bx + x - 1,by + y - 1)
- end
- end
- end
- end
- local function drawText(message,x,y,r,g,b)
- for i = 1, message:len() do
- tpt.drawtext((x + i - 2) * 8 + bX + (4 - (tpt.textwidth(message:sub(i,i)) / 2)), (y - 1) * 8 + bY, message:sub(i,i), r, g, b)
- end
- end
- local function drawSprite(sprite,palette,frame,dir,bx,by)
- bx = math.floor(bx)
- by = math.floor(by)
- for y = 1,#sprites[sprite][frame] do
- for x = 1,sprites[sprite][frame][y]:len() do
- if sprites[sprite][frame][y]:sub(x,x) ~= "0" then
- if dir == 0 then
- nx,ny=x,y
- elseif dir == 1 then
- nx,ny=y,x
- elseif dir == 2 then
- nx,ny=17-x,y
- elseif dir == 3 then
- nx,ny=17-y,17-x
- end
- drawpixel(bx + nx - 1, by + ny - 1, unpack(spriteC[palette][tonumber(sprites[sprite][frame][y]:sub(x,x))]))
- end
- end
- end
- end
- local function drawMap(map,bx,by)
- for y = 1,36 do
- for x = 1,28 do
- local tile = maps[map][y][x]
- if tile == 1 or tile == 2 then dots = dots + 1 end
- if spriteToObj[tile] ~= nil then
- drawTile(0,(x - 1) * 8 + bx,(y - 1) * 8 + by)
- else
- drawTile(tile,(x - 1) * 8 + bx,(y - 1) * 8 + by)
- end
- end
- end
- end
- local function clearMap(map,bx,by)
- for y = 1,36 do
- for x = 1,28 do
- drawTile(0,(x - 1) * 8 + bx,(y - 1) * 8 + by)
- end
- end
- end
- local function loadObject(tile,x,y,gsdots)
- if spriteToObj[tile] ~= nil then
- if (gsdots == true and tile ~= 2) or gsdots ~= true then
- table.insert(objects,deepcopy(baseObj[spriteToObj[tile]]))
- local v = objects[#objects]
- v.posX = (x - 1) * 8 + v.offX
- v.posY = (y - 1) * 8 + v.offY
- v.frame = 1
- v.fcount = 0
- if v.dir == 0 then
- v.speedX = -v.speed
- v.speedY = 0
- elseif v.dir == 1 then
- v.speedX = 0
- v.speedY = -v.speed
- elseif v.dir == 2 then
- v.speedX = v.speed
- v.speedY = 0
- elseif v.dir == 3 then
- v.speedX = 0
- v.speedY = v.speed
- end
- if v.name == "pacman" then pacobj = v end
- if v.name == "blinky" then blinkobj = v end
- end
- end
- end
- local function grabObjects(map, gsdots)
- objects = {}
- for y = 1,36 do
- for x = 1,28 do
- loadObject(maps[map][y][x],x,y,gsdots)
- end
- end
- for k,v in pairs(omaps[map]) do
- loadObject(v[1],v[2],v[3],gsdots)
- end
- end
- local stage = "start"
- local function main()
- if stage == "start" then
- if advancekey == true then
- advancekey = false
- stage = "intro"
- introTimer = 120
- map = 1
- score = 0
- dots = 0
- lives = 3
- drawMap(map,bX,bY)
- grabObjects(map)
- curMap = deepcopy(maps[map])
- for y = 1,36 do
- for x = 1,28 do
- if spriteToObj[curMap[y][x]] ~= nil then
- curMap[y][x] = 0
- end
- end
- end
- end
- if dotSpace == nil then dotSpace = 0 end
- if pacTimer == nil then pacTimer = 0 end
- if ghostTimer == nil then ghostTimer = 0 end
- if pacFrame == nil then pacFrame = 1 end
- if ghostFrame == nil then ghostFrame = 1 end
- pacTimer = pacTimer + 1
- ghostTimer = ghostTimer + 1
- startTimer = startTimer - 1
- dotSpace = math.fmod(dotSpace + 1, 8)
- if pacTimer >= 3 then pacFrame = math.fmod(pacFrame, 4) + 1 pacTimer = 0 end
- if ghostTimer >= 8 then ghostFrame = math.fmod(ghostFrame, 2) + 1 ghostTimer = 0 end
- if startTimer <= 0 then
- stage = "hiscore"
- startTimer = 600
- end
- for i = 168 - dotSpace, 200 - dotSpace, 8 do
- gfx.drawRect(i + bX, 142 + bY, 2, 2, 255, 185, 175)
- end
- drawSprite(1,1,ghostFrame,2,56 + bX,136 + bY)
- drawSprite(1,2,ghostFrame,2,80 + bX,136 + bY)
- drawSprite(1,3,ghostFrame,2,104 + bX,136 + bY)
- drawSprite(1,4,ghostFrame,2,128 + bX,136 + bY)
- drawSprite(0,0,pacFrame,2,152 + bX,136 + bY)
- drawSprite(6,9,1,0,21 + bX,32 + bY)
- if upTimer < 15 then
- drawText("1UP",4,1,222,222,255)
- drawText("PRESS ENTER!",09,15,255,255,0)
- end
- drawText("HIGH SCORE",10,1,222,222,255)
- drawText(tostring(score),8 - tostring(score):len(),2,222,222,255)
- drawText(tostring(math.max(scores[1][1],score)),18 - tostring(math.max(scores[1][1],score)):len(),2,222,222,255)
- upTimer = math.fmod(upTimer + 1,30)
- elseif stage == "hiscore" then
- if advancekey == true then
- advancekey = false
- stage = "intro"
- introTimer = 120
- map = 1
- score = 0
- dots = 0
- lives = 3
- drawMap(map,bX,bY)
- grabObjects(map)
- curMap = deepcopy(maps[map])
- for y = 1,36 do
- for x = 1,28 do
- if spriteToObj[curMap[y][x]] ~= nil then
- curMap[y][x] = 0
- end
- end
- end
- end
- startTimer = startTimer - 1
- if startTimer <= 0 then
- stage = "start"
- startTimer = 600
- end
- drawSprite(6,9,1,0,21 + bX,32 + bY)
- local i = 0
- for k,v in pairs(scores) do
- drawText(string.rpad(tostring(v[1]),6,"0"),3,i * 2 + 12,255,255,255)
- drawText(string.rpad(tostring(v[2]),2,"0"),10,i * 2 + 12,255,255,255)
- drawText(v[3],13,i * 2 + 12,255,255,255)
- i = i + 1
- end
- if upTimer < 15 then
- drawText("1UP",4,1,222,222,255)
- end
- drawText("HIGH SCORE",10,1,222,222,255)
- drawText(tostring(score),8 - tostring(score):len(),2,222,222,255)
- drawText(tostring(math.max(scores[1][1],score)),18 - tostring(math.max(scores[1][1],score)):len(),2,222,222,255)
- upTimer = math.fmod(upTimer + 1,30)
- elseif stage == "intro" then
- introTimer = introTimer - 1
- if introTimer <= 0 then
- stage = "ready"
- readyTimer = 120
- end
- if upTimer < 15 then
- drawText("1UP",4,1,222,222,255)
- end
- drawText("HIGH SCORE",10,1,222,222,255)
- drawText(tostring(score),8 - tostring(score):len(),2,222,222,255)
- drawText("PLAYER ONE",10,15,0,255,255)
- drawText("READY!",12,21,255,255,0)
- upTimer = math.fmod(upTimer + 1,30)
- for i = 1,lives - 1 do
- drawSprite(0,0,3,2,(i * 16) + bX, (34 * 8) + bY)
- end
- elseif stage == "ready" then
- readyTimer = readyTimer - 1
- if readyTimer <= 0 then
- stage = "game"
- readyTimer = 120
- end
- for k,v in pairs(objects) do
- v.fcount = v.fcount + 1
- if v.fcount >= v.fspeed then
- v.frame = math.fmod(v.frame,#sprites[v.sprite]) + 1
- v.fcount = 0
- end
- end
- for k,v in pairs(objects) do
- drawSprite(v.sprite,v.sprPal,v.frame,v.sdir,v.posX + bX + v.drawX, v.posY + bY + v.drawY)
- end
- if upTimer < 15 then
- drawText("1UP",4,1,222,222,255)
- end
- drawText("HIGH SCORE",10,1,222,222,255)
- drawText(tostring(score),8 - tostring(score):len(),2,222,222,255)
- drawText(tostring(math.max(scores[1][1],score)),18 - tostring(math.max(scores[1][1],score)):len(),2,222,222,255)
- drawText("READY!",12,21,255,255,0)
- upTimer = math.fmod(upTimer + 1,30)
- for i = 1,lives - 1 do
- drawSprite(0,0,3,2,(i * 16) + bX, (34 * 8) + bY)
- end
- elseif stage == "game" then
- for k,v in pairs(objects) do
- v:dologic()
- end
- for k,v in pairs(objects) do
- local tileX,tileY = (v.posX / 8) + 1, (v.posY / 8) + 1
- local ltileX,ltileY
- if v.dir == 0 then
- ltileX,ltileY = math.floor(tileX - 0.625),math.floor(tileY)
- elseif v.dir == 1 then
- ltileX,ltileY = math.floor(tileX),math.floor(tileY - 0.625)
- elseif v.dir == 2 then
- ltileX,ltileY = math.floor(tileX + 0.625),math.floor(tileY)
- elseif v.dir == 3 then
- ltileX,ltileY = math.floor(tileX),math.floor(tileY + 0.625)
- end
- tileX,tileY = math.floor(tileX),math.floor(tileY)
- if v.dir == 0 then
- v.speedX = -v.speed
- v.speedY = 0
- elseif v.dir == 1 then
- v.speedX = 0
- v.speedY = -v.speed
- elseif v.dir == 2 then
- v.speedX = v.speed
- v.speedY = 0
- elseif v.dir == 3 then
- v.speedX = 0
- v.speedY = v.speed
- end
- if (math.fmod(math.floor(v.posX),8) == 4 or math.fmod(math.floor(v.posY),8) == 4) and (math.fmod(math.floor(v.posX),2) == 0 and math.fmod(math.floor(v.posY),2) == 0) then
- if passTiles[curMap[ltileY][ltileX]] == true or (v.name ~= "pacman" and curMap[ltileY][ltileX] == 31) then
- else
- v.speedX = 0
- v.speedY = 0
- end
- end
- if curMap[ltileY][ltileX] == nil then
- if v.dir == 0 then
- v.posX = v.posX + 224
- elseif v.dir == 1 then
- v.posX = v.posX + 288
- elseif v.dir == 2 then
- v.posX = v.posX - 224
- elseif v.dir == 3 then
- v.posX = v.posX - 288
- end
- end
- v.posX = v.posX + v.speedX
- v.posY = v.posY + v.speedY
- if v.name == "pacman" then
- if curMap[tileY][tileX] == 1 then
- curMap[tileY][tileX] = 0
- drawTile(0,(tileX - 1) * 8 + bX,(tileY - 1) * 8 + bY)
- dots = dots - 1
- score = score + 10
- end
- end
- end
- for k,v in pairs(objects) do
- if v.name ~= "pacman" then
- if distance(v.posX,v.posY,pacobj.posX,pacobj.posY) < 4 then
- if v.name == "superdot" then
- v.name = "deadobj"
- v.sprPal = 99
- v.speed = 0
- v.dologic = function() end
- score = score + 50
- dots = dots - 1
- for k,v in pairs(objects) do
- if v.name == "blinky" or v.name == "pinky" or v.name == "inky" or v.name == "clyde" then
- if v.mode ~= 4 then
- v.timer = 300
- v.sprite = 5
- v.sprPal = 6
- v.speed = 0.6
- if v.mode ~= 3 then v.dir = math.fmod(v.dir + 2, 4) end
- v.mode = 3
- end
- end
- end
- elseif v.name == "blinky" or v.name == "pinky" or v.name == "inky" or v.name == "clyde" then
- if v.mode == 1 or v.mode == 2 then
- stage = "death"
- deathtimer = 120
- elseif v.mode == 3 then
- v.mode = 4
- v.speed = 2
- v.posX = math.floor(v.posX / 2) * 2
- v.posY = math.floor(v.posY / 2) * 2
- v.sprPal = 8
- score = score + 300
- end
- end
- end
- end
- end
- for k,v in pairs(objects) do
- v.fcount = v.fcount + 1
- if v.fcount >= v.fspeed then
- v.frame = math.fmod(v.frame,#sprites[v.sprite]) + 1
- v.fcount = 0
- end
- end
- if score - lScore > 10000 then
- if lives < 6 then lives = lives + 1 end
- lScore = math.floor(score / 10000) * 10000
- end
- if dots <= 0 then
- stage = "win"
- wintimer = 180
- end
- for k,v in pairs(objects) do
- drawSprite(v.sprite,v.sprPal,v.frame,v.sdir,v.posX + bX + v.drawX, v.posY + bY + v.drawY)
- end
- if upTimer < 15 then
- drawText("1UP",4,1,222,222,255)
- end
- drawText("HIGH SCORE",10,1,222,222,255)
- drawText(tostring(score),8 - tostring(score):len(),2,222,222,255)
- drawText(tostring(math.max(scores[1][1],score)),18 - tostring(math.max(scores[1][1],score)):len(),2,222,222,255)
- upTimer = math.fmod(upTimer + 1,30)
- for i = 1,lives - 1 do
- drawSprite(0,0,3,2,(i * 16) + bX, (34 * 8) + bY)
- end
- elseif stage == "win" then
- for k,v in pairs(objects) do
- v.fcount = v.fcount + 1
- if v.fcount >= v.fspeed then
- v.frame = math.fmod(v.frame,#sprites[v.sprite]) + 1
- v.fcount = 0
- end
- end
- for k,v in pairs(objects) do
- drawSprite(v.sprite,v.sprPal,v.frame,v.sdir,v.posX + bX + v.drawX, v.posY + bY + v.drawY)
- end
- wintimer = wintimer - 1
- if wintimer <= 0 then
- stage = "ready"
- dots = 0
- level = level + 1
- drawMap(map,bX,bY)
- grabObjects(map)
- curMap = deepcopy(maps[map])
- for y = 1,36 do
- for x = 1,28 do
- if spriteToObj[curMap[y][x]] ~= nil then
- curMap[y][x] = 0
- end
- end
- end
- end
- if upTimer < 15 then
- drawText("1UP",4,1,222,222,255)
- end
- drawText("HIGH SCORE",10,1,222,222,255)
- drawText(tostring(score),8 - tostring(score):len(),2,222,222,255)
- upTimer = math.fmod(upTimer + 1,30)
- for i = 1,lives - 1 do
- drawSprite(0,0,3,2,(i * 16) + bX, (34 * 8) + bY)
- end
- elseif stage == "death" then
- for k,v in pairs(objects) do
- v.fcount = v.fcount + 1
- if v.fcount >= v.fspeed then
- if v.name == "pacman" then
- v.frame = 2
- v.sdir = math.fmod(v.sdir + 1, 4)
- else
- v.frame = math.fmod(v.frame,#sprites[v.sprite]) + 1
- end
- v.fcount = 0
- end
- end
- for k,v in pairs(objects) do
- drawSprite(v.sprite,v.sprPal,v.frame,v.sdir,v.posX + bX + v.drawX, v.posY + bY + v.drawY)
- end
- deathtimer = deathtimer - 1
- if deathtimer <= 0 then
- lives = lives - 1
- if lives <= 0 then
- stage = "start"
- if score > scores[10][1] then stage = "score" end
- clearMap(map,bX,bY)
- else
- stage = "ready"
- local sdots = {}
- for k,v in pairs(objects) do
- if v.name == "superdot" then table.insert(sdots,v) end
- end
- grabObjects(map, true)
- for k,v in pairs(sdots) do
- table.insert(objects,v)
- end
- end
- end
- if upTimer < 15 then
- drawText("1UP",4,1,222,222,255)
- end
- drawText("HIGH SCORE",10,1,222,222,255)
- drawText(tostring(score),8 - tostring(score):len(),2,222,222,255)
- drawText(tostring(math.max(scores[1][1],score)),18 - tostring(math.max(scores[1][1],score)):len(),2,222,222,255)
- upTimer = math.fmod(upTimer + 1,30)
- for i = 1,lives - 1 do
- drawSprite(0,0,3,2,(i * 16) + bX, (34 * 8) + bY)
- end
- elseif stage == "score" then
- if upTimer < 15 then
- drawText("1UP",4,1,222,222,255)
- end
- drawText("HIGH SCORE",10,1,222,222,255)
- drawText(tostring(score),8 - tostring(score):len(),2,222,222,255)
- drawText(tostring(math.max(scores[1][1],score)),18 - tostring(math.max(scores[1][1],score)):len(),2,222,222,255)
- drawText("NEW HISCORE!",09,13,255,255,255)
- drawText(scoreName .. ((scoreName:len() < 14 and upTimer < 15) and "_" or ""),8,15,222,222,255)
- upTimer = math.fmod(upTimer + 1,30)
- end
- gfx.drawRect(bX - 1, bY - 1, 226, 290)
- end
- local function keyEvent(key, nkey, modify, event)
- if stage == "start" or stage == "hiscore" then
- if nkey == 13 and event == 1 then
- advancekey = true
- end
- elseif stage == "game" or stage == "ready" then
- local newdir
- if nkey == 276 then
- pacobj.ndir = 0
- elseif nkey == 273 then
- pacobj.ndir = 1
- elseif nkey == 275 then
- pacobj.ndir = 2
- elseif nkey == 274 then
- pacobj.ndir = 3
- end
- elseif stage == "score" then
- if nkey == 303 then useShift = event end
- if nkey == 8 and scoreName:len() > 0 and event == 1 then
- scoreName = scoreName:sub(1,-2)
- elseif nkey == 13 then
- for i = 1,10 do
- if scores[i][1] < score then
- table.insert(scores,i,{score,level,scoreName})
- scores[11] = nil
- break
- end
- end
- stage = "start"
- elseif (nkey == 32 or (nkey > 47 and nkey < 57) or (nkey > 96 and nkey < 123)) and scoreName:len() < 14 and event == 1 then
- scoreName = scoreName .. (useShift == 1 and string.upper(key) or key)
- end
- end
- return false
- end
- tpt.register_keypress(keyEvent)
- tpt.register_step(main)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement