0,]']>S}Wup8d%qy)6o;]AsVl3 """""""""""" """""""""""""""""""""""""""""""""""("""""""""":3"8"8"33"""("""""""""3("8("8("33("@DDDDDDDD@DDDDDDDDDDDD@DD@DDDDDDDDDDDDDDDDDDDDDDDD """""""""" """"""""" """"""""""""""""""""""""""3"3"3":3"833883333838("38("3("3(""338(3333(D@DD@DDDDDDDDDDDD@DDDDD@DDDDDDDDDDDDDDDDDDDDDDDDDD 3>> > 3 > > > `fffffffff`ffffff`fffffffffffffffffffffffffaffaffaff!"!!"PUUUUUUUUUUPUUUPUUP%"UU%"UU UUUUUUUUUUUUPUU"RU"RUU,UU"++ + "" """> fffffff`ffffffff`fffff`fffaffaffafffffffffffffffffff!"!!"UU UU%"UP%"UPUUPUUUUUUUUPUUU$UU"RUU"RUPUUUUUUUUUUUUUU "" +++""""  """""""""""""""" """" ,","," """,",",""""   ! 1 ! 1 ! 1 ! 1 ! 1 ! ! 1        QPPPPPPPP@@ @@@0 K``` ` ` `` ` ` `` ` ` ` ```?pwwpw wwwwwwwwwwpwwwwwwwwwpwwwwwwwwwwwwwwwwwwww  wwwwwww""""pwwwwwwww""""wwwwwwww""""pwwpwwwww""""pwwwwwww ""pwwpwwww""ww w }ww pwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwww  pwwwwwwwwwwwwwwwwwwwwww""""wwwwwwwwwwwwwwwpwwwwwwww""""pwwwwwwwwwwwwwwwwpwwwwwwwww""""pwwwwwwwwwwwwwwwwpwwwwwwwww""""wwwwwwwwwwwwwwww ""wwwww} }wwwwwwww""wwwwwwwwwwwww pwwwwwwwwwwwwwpwwwwwwwwwwwwwpwpwwwwwwwwwwwwwwwwpwwwwwwwwwwwpwwwwwwwwwwwwwwww'r'rwwwwwwwwww""""wwwwwwwwww""""wwwwwwwpww""""wwwwwwwww""""wwwwwwww'""rwwwwwwwwww""wwwwwwwwwww'rwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwp'r'rwpwwwwwww""""wwwwwwww""""pwwwwwwwww""""wwwwwwwww""""wwwwwwwww ""wwwwwwwww""wwwwwwww pwwwwwwwwwwwwwwwwwpwwwwwwwwww pww}ww}wwww}wwww wwwwwwwwwwwwwwwwww  wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww""""pwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwww""""wwwwwwwwwwwwwwwwwwwpwwwwwwwwwwpwwwwwww""""pwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwww""""pwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwww ""wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww""pwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwww pwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwpwwwwww }wwww}wwww wwwwwwwwwwwwwwpwwwwwwwwwwwwww  rwwwwwwwwwwwwww""""wwwwwwwwwwwwww""""wwwwwwwwwwwwww""""wwwwwwwwwwwwww""""wwwwwwwwwwwwww ""rwwwwwwwwwwwwwwpww""wwwwwwwwwwwwwwwwwww'rwwwwwwwpwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwpwwwwwwwwwpwwwwwwwwwpwwwwwwpwwwwwwwwwpwwwwwwwwwpwwwwwwpwwwwwwwwwwwwwwwwwwwwwpwwwwwwpwwwwwwwwwwwwwwwwwwwwwpwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwpwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwpwwwwwwpwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwww}wwww }wwww }wwww}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwww}wwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwww }wwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwpwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwww-- title: Pengaloo Memory Matcher -- author: Zeflyn -- desc: Match the penguin secret! Do your best! -- site: website link -- license: MIT License (change this to your license of choice) -- version: 0.1 -- script: lua function BOOT() cards = {} card_values={ 263,263, 265,265, 267,267, 269,269, 295,295, 297,297, 299,299, 301,301, 327,327 } bg = {} flipped_cards = {} mouse_down=false evaluating = nil correct_pairing = nil game_won=false game_over = false game_end_timer = 180 -- card start: 28,12 for x=0,5 do for y=0,2 do local v = rnd(#card_values) local card = create_card(28 + 32*x, 12 + 40*y, card_values[v]) table.insert(cards, card) table.remove(card_values,v) end end health = create_hp_ui() end function TIC() update() draw() clean() end -- lifecycles function update() handle_card_selections() if rnd({0,1,2,3}) == 0 then --create_bg() end for i,b in pairs(bg) do b:update() end for i,c in pairs(cards) do c:update() end mouse_down = click_detection() if #cards == 0 and not game_over then game_won = true end if health.hp == 0 then game_over = true end if game_over or game_won then game_end_timer = game_end_timer - 1 if game_end_timer <= 0 then reset() end end end function circles() local cx, cy = 120, 68 -- center of screen local max_radius = 150 local step = 16 -- Draw from largest to smallest for i = max_radius, 0, -step do local color = (i / step) % 32+16 -- cycle through 16 colors --circ(cx, cy, i, color) end end function draw() cls() circles() for i,b in pairs(bg) do b:draw() end map(0,0,30,17,0,0,0) for i,c in pairs(cards) do c:draw() end if not game_over and not game_won then health:draw() end if game_over then cards = {} local m = "Game Over" print(m, 240/2-(#m*3), 136/2-8,13) end if game_won then music(0,0,0,nil) local m = "You did it!" print(m, 240/2-(#m*3), 136/2-8,13) end end function clean() for i,b in pairs(bg) do if b.done then table.remove(bg,i) end end for i,c in pairs(cards) do if c.done then table.remove(cards,i) end end end -- factories function create_card(x,y,v) return { done=false, x=x, y=y, flipped=false, v=v, update=function(self) if mouse_over(self.x,self.y,24,32) and not self.flipped then poke(0x03ffb, 129) if mouse_down and not click_detection() and #flipped_cards < 2 then self.flipped = true table.insert(flipped_cards, self) end end end, draw=function(self) if not self.flipped then spr(257,self.x,self.y,0,1,0,0,3,4) spr(260,self.x,self.y,0,1,0,0,3,4) else spr(257,self.x,self.y,0,1,0,0,3,4) spr(324,self.x,self.y,0,1,0,0,3,4) spr(self.v,self.x+4,self.y+8,0,1,0,0,2,2) end end } end function create_bg() local r = rnd(24) + 8 local c if correct_pairing then c = 0 elseif correct_pairing == false then c = 2 else c = 7 end table.insert(bg, { done=false, x=rnd(260), y=136+r, r=r, c=c, update=function(self) self.y = self.y - 1 if self.y + self.r <= 0 then self.done = true end if rnd({0,1,2,3,4,5,6}) == 0 then self.r = self.r - 1 end if self.r <= 0 then self.done = true end end, draw=function(self) if self.c == 0 then circb(self.x,self.y,self.r,rnd({1,2,3,4,5,6,11})) else circ(self.x,self.y,self.r,self.c) end end }) end function create_hp_ui() return { x=24, y=126, max_hp=14, hp=12, update=function(self) end, draw=function(self) for i=1,self.max_hp do if i <= self.hp then spr(321,self.x+(12*i),self.y,0) else spr(322,self.x+(12*i),self.y,0) end end end } end -- logic function handle_card_selections() if #flipped_cards == 2 and not evaluating then evaluating = 90 correct_pairing = check_selected_cards() elseif #flipped_cards == 2 then evaluating = evaluating - 1 if evaluating <= 45 and correct_pairing then for i,c in pairs(cards) do if c.flipped then c.y = c.y - 10 end if c.y + 32 < 0 then c.done = true end end end if evaluating <= 0 then evaluating = nil if correct_pairing then if health.hp < health.max_hp then health.hp = health.hp + 1 end else health.hp = health.hp - 1 for i,c in pairs(flipped_cards) do c.flipped = false end end correct_pairing = nil flipped_cards = {} end end end function check_selected_cards() return flipped_cards[1].v == flipped_cards[2].v end -- helpers function rnd(x) if type(x) == "table" then return x[math.random(#x)] else return math.random(x) end end function mouse_over(x,y,w,h) local mx, my = mouse() return mx > x and my > y and mx < x+w and my < y+h end function click_detection() local _,_,lmb = mouse() return lmb end