diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a103539
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.local
diff --git a/tic80/bomberman.rb b/bomberman.rb
similarity index 80%
rename from tic80/bomberman.rb
rename to bomberman.rb
index aa8a42a..a6d62f0 100644
--- a/tic80/bomberman.rb
+++ b/bomberman.rb
@@ -1,6 +1,10 @@
-# title: Simple Bomberman
-# author: Claude
-# script: ruby
+# title: game title
+# author: game developer, email, etc.
+# desc: short description
+# site: website link
+# license: MIT License (change this to your license of choice)
+# version: 0.1
+# script: ruby
# constants
TILE_SIZE = 16
@@ -224,3 +228,34 @@ def explode(bombX, bombY)
end
end
end
+
+
+#
+# 001:eccccccccc888888caaaaaaaca888888cacccccccacc0ccccacc0ccccacc0ccc
+# 002:ccccceee8888cceeaaaa0cee888a0ceeccca0ccc0cca0c0c0cca0c0c0cca0c0c
+# 003:eccccccccc888888caaaaaaaca888888cacccccccacccccccacc0ccccacc0ccc
+# 004:ccccceee8888cceeaaaa0cee888a0ceeccca0cccccca0c0c0cca0c0c0cca0c0c
+# 017:cacccccccaaaaaaacaaacaaacaaaaccccaaaaaaac8888888cc000cccecccccec
+# 018:ccca00ccaaaa0ccecaaa0ceeaaaa0ceeaaaa0cee8888ccee000cceeecccceeee
+# 019:cacccccccaaaaaaacaaacaaacaaaaccccaaaaaaac8888888cc000cccecccccec
+# 020:ccca00ccaaaa0ccecaaa0ceeaaaa0ceeaaaa0cee8888ccee000cceeecccceeee
+#
+
+#
+# 000:00000000ffffffff00000000ffffffff
+# 001:0123456789abcdeffedcba9876543210
+# 002:0123456789abcdef0123456789abcdef
+#
+
+#
+# 000:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000304000000000
+#
+
+#
+# 000:100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+#
+
+#
+# 000:1a1c2c5d275db13e53ef7d57ffcd75a7f07038b76425717929366f3b5dc941a6f673eff7f4f4f494b0c2566c86333c57
+#
+
diff --git a/tic80/bomberman.lua b/tic80/bomberman.lua
deleted file mode 100644
index 55e3c51..0000000
--- a/tic80/bomberman.lua
+++ /dev/null
@@ -1,235 +0,0 @@
--- title: Simple Bomberman
--- author: Claude
--- script: lua
-
--- constants
-TILE_SIZE=16
-PLAYER_SIZE=12
-BOMB_TIMER=90
-EXPLOSION_TIMER=30
-
-EMPTY=0
-SOLID_WALL=1
-BREAKABLE_WALL=2
-
--- player
-playerX=16
-playerY=16
-
--- game objects
-bombs={}
-explosions={}
-
--- enemy
-enemy={
- x=208,
- y=112,
- dir=0,
- moveTimer=0
-}
-
--- 1=solid wall, 2=breakable wall
-map={
- {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
- {1,0,0,2,2,2,0,2,0,2,2,2,0,0,1},
- {1,0,1,2,1,2,1,2,1,2,1,2,1,0,1},
- {1,2,2,2,0,2,2,0,2,2,0,2,2,2,1},
- {1,2,1,0,1,0,1,0,1,0,1,0,1,2,1},
- {1,2,2,2,0,2,2,0,2,2,0,2,2,2,1},
- {1,0,1,2,1,2,1,2,1,2,1,2,1,0,1},
- {1,0,0,2,2,2,0,2,0,2,2,2,0,0,1},
- {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
-}
-
-function TIC()
- cls(0)
-
- -- handle input
- newX=playerX
- newY=playerY
-
- if btn(0) then newY=playerY-1 end
- if btn(1) then newY=playerY+1 end
- if btn(2) then newX=playerX-1 end
- if btn(3) then newX=playerX+1 end
-
- if not isSolid(newX,playerY) then playerX=newX end
- if not isSolid(playerX,newY) then playerY=newY end
-
- -- place bomb
- if btnp(4) then
- bombX=math.floor(playerX/TILE_SIZE)*TILE_SIZE
- bombY=math.floor(playerY/TILE_SIZE)*TILE_SIZE
- table.insert(bombs,{x=bombX,y=bombY,timer=BOMB_TIMER})
- end
-
- -- update bombs
- for i=#bombs,1,-1 do
- bombs[i].timer=bombs[i].timer-1
- if bombs[i].timer<=0 then
- explode(bombs[i].x,bombs[i].y)
- table.remove(bombs,i)
- end
- end
-
- -- update explosions
- for i=#explosions,1,-1 do
- explosions[i].timer=explosions[i].timer-1
- if explosions[i].timer<=0 then
- table.remove(explosions,i)
- end
- end
-
- -- draw map
- for row=1,9 do
- for col=1,15 do
- tile=map[row][col]
- drawX=(col-1)*TILE_SIZE
- drawY=(row-1)*TILE_SIZE
- if tile==SOLID_WALL then
- rect(drawX,drawY,TILE_SIZE,TILE_SIZE,8)
- elseif tile==BREAKABLE_WALL then
- rect(drawX,drawY,TILE_SIZE,TILE_SIZE,4)
- end
- end
- end
-
- -- draw bombs
- for i=1,#bombs do
- bomb=bombs[i]
- circ(bomb.x+8,bomb.y+8,6,2)
- end
-
- -- draw explosions
- for i=1,#explosions do
- expl=explosions[i]
- rect(expl.x,expl.y,TILE_SIZE,TILE_SIZE,6)
- end
-
- -- update enemy
- updateEnemy()
-
- -- draw player
- rect(playerX,playerY,PLAYER_SIZE,PLAYER_SIZE,12)
-
- -- draw enemy
- rect(enemy.x,enemy.y,PLAYER_SIZE,PLAYER_SIZE,2)
-
- -- check player death by explosion
- for i=1,#explosions do
- expl=explosions[i]
- if playerXexpl.x and
- playerYexpl.y then
- playerX=16
- playerY=16
- end
- end
-
- -- check player death by enemy
- if playerXenemy.x and
- playerYenemy.y then
- playerX=16
- playerY=16
- end
-
- -- check enemy death by explosion
- for i=1,#explosions do
- expl=explosions[i]
- if enemy.xexpl.x and
- enemy.yexpl.y then
- enemy.x=208
- enemy.y=112
- end
- end
-
- print("ARROWS:MOVE A:BOMB",50,2,15)
-end
-
-function isSolid(x,y)
- gridLeft=math.floor(x/TILE_SIZE)+1
- gridTop=math.floor(y/TILE_SIZE)+1
- gridRight=math.floor((x+PLAYER_SIZE-1)/TILE_SIZE)+1
- gridBottom=math.floor((y+PLAYER_SIZE-1)/TILE_SIZE)+1
-
- if gridLeft<1 or gridTop<1 or gridRight>15 or gridBottom>9 then
- return true
- end
- if map[gridTop][gridLeft]>=SOLID_WALL then return true end
- if map[gridTop][gridRight]>=SOLID_WALL then return true end
- if map[gridBottom][gridLeft]>=SOLID_WALL then return true end
- if map[gridBottom][gridRight]>=SOLID_WALL then return true end
- return false
-end
-
-function updateEnemy()
- enemy.moveTimer=enemy.moveTimer+1
- if enemy.moveTimer<3 then return end
- enemy.moveTimer=0
-
- -- try current direction
- dirs={{0,-1},{0,1},{-1,0},{1,0}}
- dx=dirs[enemy.dir+1] and dirs[enemy.dir+1][1] or 0
- dy=dirs[enemy.dir+1] and dirs[enemy.dir+1][2] or 0
-
- newEnemyX=enemy.x+dx
- newEnemyY=enemy.y+dy
-
- if not isSolidForEnemy(newEnemyX,newEnemyY) and math.random()>0.1 then
- enemy.x=newEnemyX
- enemy.y=newEnemyY
- else
- enemy.dir=math.random(0,3)
- end
-end
-
-function isSolidForEnemy(x,y)
- gridLeft=math.floor(x/TILE_SIZE)+1
- gridTop=math.floor(y/TILE_SIZE)+1
- gridRight=math.floor((x+PLAYER_SIZE-1)/TILE_SIZE)+1
- gridBottom=math.floor((y+PLAYER_SIZE-1)/TILE_SIZE)+1
-
- if gridLeft<1 or gridTop<1 or gridRight>15 or gridBottom>9 then
- return true
- end
- if map[gridTop][gridLeft]>=SOLID_WALL then return true end
- if map[gridTop][gridRight]>=SOLID_WALL then return true end
- if map[gridBottom][gridLeft]>=SOLID_WALL then return true end
- if map[gridBottom][gridRight]>=SOLID_WALL then return true end
- return false
-end
-
-function explode(bombX,bombY)
- table.insert(explosions,{x=bombX,y=bombY,timer=EXPLOSION_TIMER})
-
- -- horizontal explosion
- for dir=-1,1,2 do
- explX=bombX+dir*TILE_SIZE
- gridX=math.floor(explX/TILE_SIZE)+1
- gridY=math.floor(bombY/TILE_SIZE)+1
- if gridX>=1 and gridX<=15 then
- tile=map[gridY][gridX]
- if tile==EMPTY then
- table.insert(explosions,{x=explX,y=bombY,timer=EXPLOSION_TIMER})
- elseif tile==BREAKABLE_WALL then
- map[gridY][gridX]=EMPTY
- table.insert(explosions,{x=explX,y=bombY,timer=EXPLOSION_TIMER})
- end
- end
- end
-
- -- vertical explosion
- for dir=-1,1,2 do
- explY=bombY+dir*TILE_SIZE
- gridX=math.floor(bombX/TILE_SIZE)+1
- gridY=math.floor(explY/TILE_SIZE)+1
- if gridY>=1 and gridY<=9 then
- tile=map[gridY][gridX]
- if tile==EMPTY then
- table.insert(explosions,{x=bombX,y=explY,timer=EXPLOSION_TIMER})
- elseif tile==BREAKABLE_WALL then
- map[gridY][gridX]=EMPTY
- table.insert(explosions,{x=bombX,y=explY,timer=EXPLOSION_TIMER})
- end
- end
- end
-end