─   л юю а   66 6 6 666666????????????????????ю?лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл юлллллллллллллл лллллллллллллл юлллллллллю ю л ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллюл ю лл ллллллллллллллллллл юлл л ллл ю ю юлюллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл люллюлю юлллл юлллллллллллллл ю юю юллл ллюю лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллююллюллюллл ллллллллллллллл ю юююююллл ю юлюлюлллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл ю ллл ллллюлллллллллллллл ю юююю ллллю ю л ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллюлллллллллллллллллллллллллллллллллллллллллллллллллллллллллюлллллллллллллллллллллллллллллллллллллллллллллллл лллллллл лллллллллллллллллллллллллллллллллллллллллллллллллллллллл ллллллллллллллллллллллллллллллллллллллллллллллллюллллллл люлллллллллллллллллллллллллллллллллллллллллллллллллллллл люлллллллллллллллллллллллллллллллллллллллллллллл юллллллл лллллллллллллллллллллллллллллллллллллллллллллллллллллл ллллллллллллллллллллллллллллллллллллллллллллллюллллллю лллллллллллллллллллллллллллллллллллллллллллллллллллллю лллллллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллллл ллллллллллллллллллллллллллллллллллллллллллл л лллллллл юлллллллллллллллллллллллллллллллллллллллллллллллллллл юллллллллллллллллллллллллллллллллллллллллллл ююллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл юллллллллюллллллллллллллллллллллллллллллллллллллллллллллллллллллюлллллллллллллллллллллллллллллллллллллллллллл ююлллллллл юлллллллллллллллллллллллллллллллллллллллллллллллллллллл юлллллллллллллллллллллллллллллллллллллллллллллюлллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл ллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллл ллллллллллл лллллллллллллллллллллллллллллллллллллллллллллллллллллллл ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллло7-- title: No Internet -- author: Marioio333 -- desc: Google's no internet game -- site: https://marioio333.neocities.org/ -- license: MIT License (change this to your license of choice) -- version: 0.1 -- script: lua -- saveid: no_internet STATES = { GAMEPLAY = 0, DEATH = 1, START_MENU = 2 } STATE = STATES.START_MENU FLOOR_HEIGHT = 90 GRAVITY_FORCE = 1 JUMP_HEIGHT = 40 game_speed = 1 MAX_GAME_SPEED= 4 ENEMY_RATE = 120 enemy_t = 0 -- General Controls START_BTN = 4 START_KEY = 48 LEFT_BTN = 2 RIGHT_BTN = 3 RIGHT_KEYS = {4,61} LEFT_KEYS = {1,60} -- SCORE score = 0 time_surv = 0 highscores = {} N_HIGHSCORES = 6 LETTERS = "_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" current_letter= 1 name = {1,1,1} name_animation = { t=0, duration=30, show_letter=true, } icon_animation = { t = 0, duration = 30, frame = 1, frames = {0,0}, } PLAYER_STATES = { iddle = 0, jumping = 1, falling = 2, ducking = 3 } player = { x = 40, y = 74, state = PLAYER_STATES.iddle, buffered_jump = false, hb_x = 4, hb_y = 4, btns_up = {0,4}, btns_down = {1,5}, keys_up = {23,58}, keys_down = {19,59}, -- Animation t = 0, frame = 1, frames = {272,274}, duration = 20, ducking_sprite = 276, } Enemy = { x = 220, y = FLOOR_HEIGHT - 16, t=0, duration=20, frame=1, frames={}, passed=false, } enemies = {} function BOOT() --clearMem() load_scores() end function RESET() -- Add score add_score() sort_highscores() save_scores() -- Reset variables STATE = STATES.GAMEPLAY player.y = FLOOR_HEIGHT-16 player.state = PLAYER_STATES.iddle score = 0 time_surv = 0 current_letter = 1 game_speed = 1 enemy_t = 0 -- Destroy enemies for i=0,#enemies do destroyEnemy() end createEnemy(0) end function TIC() if STATE == STATES.START_MENU then INPUTS_MENU() UPDATES_MENU() DRAW_MENU() elseif STATE == STATES.GAMEPLAY then INPUTS_GAME() UPDATES_GAME() DRAW_GAME() elseif STATE == STATES.DEATH then INPUTS_MENU() INPUTS_DEATH() UPDATES_DEATH() DRAW_DEATH() end --DRAW_DEBUG() end function INPUTS_MENU() -- Start the game if btnp(START_BTN) or keyp(START_KEY) then RESET() end end function UPDATES_MENU() handle_animation(icon_animation) end function DRAW_MENU() cls(12) -- Icono if icon_animation.frame == 1 then spr(336,119-32,10,1,2,0,0,4,4) end print_center("Press A or SPACE to START",119,90,0,1) end function INPUTS_GAME() -- Jump for i,b in pairs(player.btns_up) do if (btn(b) or player.buffered_jump) and player.state == PLAYER_STATES.iddle then player.state = PLAYER_STATES.jumping player.buffered_jump = false sfx(0) -- If you press up a few frames before reaching the jump, you jump when you reach the ground elseif btn(b) and player.state == PLAYER_STATES.falling and player.y > FLOOR_HEIGHT-20 then player.buffered_jump = true end end -- Jump with keys for i,k in pairs(player.keys_up) do if (key(k) or player.buffered_jump) and player.state == PLAYER_STATES.iddle then player.state = PLAYER_STATES.jumping player.buffered_jump = false sfx(0) -- If you press up a few frames before reaching the jump, you jump when you reach the ground elseif key(k) and player.state == PLAYER_STATES.falling and player.y > FLOOR_HEIGHT-20 then player.buffered_jump = true end end -- Ducking for i,b in pairs(player.btns_down) do if player.state == PLAYER_STATES.iddle and btn(b) then player.state = PLAYER_STATES.ducking player.hb_y = 8 elseif player.state == PLAYER_STATES.ducking and not btn(b) then player.state = PLAYER_STATES.iddle player.hb_y = 4 end end for i,k in pairs(player.keys_down) do if player.state == PLAYER_STATES.iddle and key(k) then player.state = PLAYER_STATES.ducking player.hb_y = 6 elseif player.state == PLAYER_STATES.ducking and not key(k) then player.state = PLAYER_STATES.iddle player.hb_y = 4 end end end -- INPUTS_GAME function UPDATES_GAME() -- jumping if player.state == PLAYER_STATES.jumping and player.y > FLOOR_HEIGHT-JUMP_HEIGHT then player.y = player.y - GRAVITY_FORCE*game_speed -- max height reached elseif player.state == PLAYER_STATES.jumping then player.state = PLAYER_STATES.falling -- floor reached elseif player.state == PLAYER_STATES.falling and player.y == FLOOR_HEIGHT-16 then player.state = PLAYER_STATES.iddle -- falling elseif player.state == PLAYER_STATES.falling then -- Gravity player.y = math.min(player.y + GRAVITY_FORCE*game_speed,FLOOR_HEIGHT-16) end -- Player animation if player.state == PLAYER_STATES.iddle then handle_animation(player) end -- Enemies move for i,enemy in pairs(enemies) do enemy.x = enemy.x - game_speed handle_animation(enemy) if enemy.x < 0 then destroyEnemy() end -- Collission if check_collision(enemy) then sfx(2) STATE = STATES.DEATH end -- Score up if enemy.x+16 <= player.x and not enemy.passed then score = score+1 game_speed = math.min(game_speed+0.05, MAX_GAME_SPEED) enemy.passed = true sfx(1) end end -- Spawn enemies enemy_t = enemy_t+1 if enemy_t >= ENEMY_RATE/game_speed then enemy_t = 0 createEnemy() end -- Time survived time_surv = time_surv +1; end -- UPDATES_GAME function DRAW_GAME() cls(12) line(20,FLOOR_HEIGHT,219,FLOOR_HEIGHT,0) -- Enemies for i,enemy in pairs(enemies) do spr(enemy.frames[enemy.frame],enemy.x,enemy.y,1,1,0,0,2,2) end -- Player local sprite = player.frames[player.frame] if player.state == PLAYER_STATES.ducking then sprite = player.ducking_sprite end spr(sprite,player.x,player.y,1,1,0,0,2,2) -- Tapar los enemigos cuando spawnean y desaparecen rect(0,0,20,136,12) rect(220,0,20,136,12) -- Score print("Score: "..score,20,20,0) -- Time survived print("Time: "..format_time(time_surv),90,20,0) end -- DRAW_GAME function INPUTS_DEATH() local pressed_up = false -- btns up for i,b in pairs(player.btns_up) do if btnp(b) then pressed_up = true end end -- keys up for i,k in pairs(player.keys_up) do if keyp(k) then pressed_up = true end end if pressed_up then name[current_letter] = math.min(name[current_letter]+1,#LETTERS) name_animation.t = 0 name_animation.show_letter = true end local pressed_down = false -- btns down for i,b in pairs(player.btns_down) do if btnp(b) then pressed_down = true end end -- keys down for i,k in pairs(player.keys_down) do if keyp(k) then pressed_down = true end end if pressed_down then name[current_letter] = math.max(name[current_letter]-1,1) name_animation.t = 0 name_animation.show_letter = true end -- next letter local pressed_right = btnp(RIGHT_BTN) for i,k in pairs(RIGHT_KEYS) do if keyp(k) then pressed_right = true end end if pressed_right then current_letter = math.min(current_letter+1,#name) name_animation.t = 0 name_animation.show_letter = false end -- previous letter local pressed_left = btnp(LEFT_BTN) for i,k in pairs(LEFT_KEYS) do if keyp(k) then pressed_left = true end end if pressed_left then current_letter = math.max(current_letter-1,1) name_animation.t = 0 name_animation.show_letter = false end end -- INPUTS_DEATH function UPDATES_DEATH() -- Insert name animation name_animation.t = name_animation.t+1 if name_animation.t >= name_animation.duration then name_animation.t = 0 name_animation.show_letter = not name_animation.show_letter end end -- UPDATES_DEATH function DRAW_DEATH() cls(12) -- You Died print_center("You Died",80,40,0,2) spr(278,64,0,1,2,0,0,2,2) -- Score print_center("Your Score: "..score,80,60,0,1) print_center("Your Time: "..format_time(time_surv),80,70,0,1) print_center("Save your score:",80,80,0,1) select_name = "" for i=1, #name do if i == current_letter and not name_animation.show_letter then if name[current_letter]==1 then select_name = select_name.." " else select_name = select_name.."_" end else select_name = select_name..get_letter(name[i]) end end print_center(select_name,80,90,0,1) -- LEADERBOARD local added_current = false print_center("LEADERBOARD",190,20,0,1) line(144,27,234,27,0)--up line line(144,18,144,100,0)--left line line(234,18,234,100,0)--righ line local i = 1 local y = 20+(i*10) while i <= #highscores do y = 20+(i*10) if added_current then y = y+10 end if highscores[i].score < score and not added_current then -- Print the current score print_current_score(y) added_current = true else -- Print the next highscore print(highscores[i].name,148,y,0) print_right(format_time(highscores[i].t),205,y,0,1) print_right(highscores[i].score,232,y,0,1) i = i+1 end end if not added_current then if i > 1 then y = y+10 end print_current_score(y) end print_center("Press A or SPACE",119,105,0,1) print_center("to SAVE you highscore and try again",119,115,0,1) end --DRAW_DEATH function DRAW_DEBUG() -- Hitbox player rectb(player.x+player.hb_x, player.y+player.hb_y, 16-(player.hb_x*2), 16-(player.hb_y*2),2) -- Hitbox enemies for i,enemy in pairs(enemies) do rectb(enemy.x+enemy.hb_x, enemy.y+enemy.hb_y, 16-(enemy.hb_x*2), 16-(enemy.hb_y*2),2) end end -- HELPERS function Enemy:new(e) e = e or {} setmetatable(e,self)-- e hereda de Enemy,self es Enemy self.__index = self return e end function createEnemy(type) type = type or math.random(0,1) if type == 0 then enemies[#enemies+1] = Enemy:new({hb_x = 4, hb_y = 4, frames = {304}}) elseif type == 1 then rand = math.random(0, 1) height = FLOOR_HEIGHT-JUMP_HEIGHT if rand == 1 then height = FLOOR_HEIGHT-(JUMP_HEIGHT/2)-2 end enemies[#enemies+1] = Enemy:new({y=height, hb_x=4, hb_y=4, frames={306,308}}) end end -- Elimina el primer enemigo y mueve el resto para la izq function destroyEnemy() for i=1,#enemies do enemies[i] = enemies[i+1] end enemies[#enemies+1]=nil end function check_collision(enemy) if(player.x+player.hb_x < enemy.x+16-enemy.hb_x)-- lado izq de bola a la izq del lado der de paddle and (player.x+16-player.hb_x > enemy.x+enemy.hb_x)-- lado der de bola a la der del lado izq de paddle and (player.y+player.hb_y < enemy.y+16-enemy.hb_y)-- lado arriba de bola arriba del lado abajo de paddle and (player.y+16-player.hb_y > enemy.y+enemy.hb_y) then-- lado abajo de bola abajo del lado arriba de paddle return true end return false end -- collision function print_center(text, x, y, color, scale) -- print devuelve el ancho que ocupa el texto en pantalla local length = print(text,-2000,-100,0,true,scale) print(text, x-(length/2), y,color,true,scale) end function print_right(text, x, y, color, scale) local length = print(text,-200,0,0,true,scale) print(text, x-(length), y,color,true,scale) end function handle_animation(obj) obj.t = obj.t+1 if obj.t >= obj.duration then obj.t = 0 obj.frame = obj.frame+1 if obj.frame > #obj.frames then obj.frame = 1 end end end function format_time(t) -- Pass from frames surv to minutes and seconds local minutes=0 local seconds=0 while t >= 60 do seconds = seconds+1 t = t-60 end while seconds >= 60 do minutes = minutes+1 seconds = seconds-60 end local total_time = minutes..":" if seconds < 10 then total_time = total_time.."0" end return total_time..seconds end function get_letter(i) return LETTERS:sub(i,i) end function get_letter_id(l) return LETTERS:find(l) end function add_score() -- Check if the name is empty local pname = "" local empty_name = true for i=1, #name do pname = pname..get_letter(name[i]) if name[i] ~= 1 then empty_name = false end end -- Check if a higher highscore with the same name already exists --trace("Checking if score already exists") local highscore_exists = false for i=1,#highscores do if highscores[i].name == pname then -- Name found --trace("Name found: "..pname) highscore_exists = true if highscores[i].name == pname and highscores[i].score < score then --trace("lesser score found: "..highscores[i].score.."<"..score) -- If there is a lesser score, we update it to the new highscores[i].score = score highscores[i].t = time_surv end end end -- And if the score is at least 1 if score > 0 and not empty_name and not highscore_exists then --trace("Adding score") -- Add score highscores[#highscores+1] = { name = pname, score = score, t = time_surv} end end function sort_highscores() for i=#highscores-1,1,-1 do if highscores[i].score < highscores[i+1].score then local t = highscores[i] highscores[i] = highscores[i+1] highscores[i+1] = t end end -- We cap the number of highscores at N_HIGHSCORES if #highscores > N_HIGHSCORES+1 then highscores[#highscores] = nil end end function save_scores() -- 6 highscores -- 5 slots per score -- 1: score -- 2:time -- 3-5: letters for i=1,#highscores do local save_slot = i*5-4 --trace("saving score in "..save_slot) pmem(save_slot,highscores[i].score) pmem(save_slot+1,highscores[i].t) for l=1,#highscores[i].name do local letter = get_letter_id(highscores[i].name:sub(l,l)) --trace((l+1)..": "..letter) pmem(save_slot+l+1,letter) end end end function load_scores() for i=1,(5*N_HIGHSCORES),5 do local loaded_name = "" for l=1,#name do loaded_name = loaded_name..get_letter(pmem(i+l+1)) end if pmem(i) > 0 then highscores[#highscores+1] = { score = pmem(i), t = pmem(i+1), name = loaded_name, } end end --trace("loaded "..#highscores.." highscores") end function clearMem() for i=1,255 do pmem(i,0) end end function print_current_score(y) local n = "" for l=1,#name do n = n..get_letter(name[l]) end print(n,148,y,0) print_right(format_time(time_surv),205,y,0,1) print_right(score,232,y,0,1) added_current = true line(144,y-3,234,y-3,0)--up line line(144,y+7,234,y+7,0)--down line end