From 19ddfad658df060a7135be818c97db8daaadc550 Mon Sep 17 00:00:00 2001 From: Johanna Decker Date: Fri, 28 Jun 2024 18:41:15 +0100 Subject: [PATCH] Initial commit --- .gitignore | 3 + README.md | 27 ++- beamclsh.p8 | 528 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 556 insertions(+), 2 deletions(-) create mode 100644 beamclsh.p8 diff --git a/.gitignore b/.gitignore index 0667445..655682d 100644 --- a/.gitignore +++ b/.gitignore @@ -40,4 +40,7 @@ luac.out *.x86_64 *.hex +# Pico-8 Carts +*.p8.png + diff --git a/README.md b/README.md index 5e75db6..de08d2c 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,26 @@ -# beam-clash +# BEAM CLASH - A LIGHT CYCLES STYLE 2-PLAYER GAME -A Light Cycles style game for the Pico-8 \ No newline at end of file +This is my first attempt at a PICO-8 game, and in fact my first full project with Lua altogether. + +It's a simple Light Cycles type game, in that the goal is to not crash into the walls or either trail, and I tried to be fancy by having a running starfield in the background (Not really an original idea, if I'm honest, I've seen it in an Amiga light cycles game years ago). + +## The Rules +* Don't crash into a wall or either trail (That's the yellow or blue lines. Either way, both hurt!) +* The survivor gains a point. +* If both players crash at the same time, that's a draw and nobody gets a point. :( +* The first to 5 points is the winner! Sadly, you don't get a brand new car or Caribbean holiday. + +## Behind the Scenes +I probably overshot myself by making this my first game, admittedly. In lieu of a layer system, I used the spritesheet as the arena layer, where the cycle lines were drawn, allowing me to maintain the moving starfield without losing those lines or having to work out how to redraw them. It basically means I can't use sprites, but then the nature of this game doesn't really demand them. Probably not the best way to do it, but it's how I figured it out. ^_^' + +## The controls +UP, DOWN, LEFT, RIGHT - Change direction (WARNING: pressing the opposite of your current direction is not a good idea!) +O - UI functions (Start the game, start a new round, return to title after the game is over.) + +## TODO? +* A prettier title screen, somehow. +* Maybe preventing players from reversing into themselves. +* Some swanky effects. +* AI for Player 2. +* Configurable score limit. +* Music? O_O \ No newline at end of file diff --git a/beamclsh.p8 b/beamclsh.p8 new file mode 100644 index 0000000..a3e64c4 --- /dev/null +++ b/beamclsh.p8 @@ -0,0 +1,528 @@ +pico-8 cartridge // http://www.pico-8.com +version 42 +__lua__ +-- beam clash +-- by trolldecker + +function _init() + -- states: + -- 0: title + -- 1: action + -- 2: score + -- 3: over + if debounce==nil then + debounce=0 + end + cur_state=0 + init_field() + init_player() + init_scores() +end + +function _update() + if cur_state==0 then + ply:title_input() + elseif cur_state==1 then + for p in all(plys) do + p:input() + p:update() + p:check() + end + elseif cur_state==2 then + scores:update() + ply:score_input() + elseif cur_state==3 then + ply:end_input() + end + ply:tick_debounce() +end + +function _draw() + cls(0) + upd_bg() + draw_field() + for p in all(plys) do + p:draw() + end + draw_hud() +end +-->8 +-- field/bg + +function init_field() + srand(42) + + field={ + x1=0, + y1=8, + x2=127, + y2=127 + } + + function field:width() + return self.x2-self.x1 + end + + function field.height() + return self.y2-self.y1 + end + + pfield=copy(field) + + pfield.x1=3 + pfield.y1=11 + pfield.x2=124 + pfield.y2=124 + + function pfield:clear() + for y=0,127 do + for x=0,127 do + sset(x,y,0) + end + end + end + + stars={} + + for i=1,10 do + stars[i]={ + x=rndint(pfield.x2-pfield.x1), + y=rndint(pfield.y2), + len=rndint(10), + spd=rndint(5) + } + end + + for i=11,50 do + stars[i]={ + x=rndint(128), + y=rndint(field.y2)+8, + len=0, + spd=0 + } + end +end + +function upd_bg() + for i=1,50 do + stars[i].x-=stars[i].spd + + if stars[i].x<(pfield.x1-stars[i].len) then + stars[i].x=pfield.x2 + stars[i].y=rndint(pfield.y2) + end + + line( + stars[i].x, + stars[i].y+pfield.y1, + stars[i].x+stars[i].len, + stars[i].y+pfield.y1, + 13 + ) + end +end + +function draw_field() + rect(0,8,127,127,12) + rect(1,9,126,126,13) + rect(2,10,125,125,1) + spr(0,0,0,32,32) +end +-->8 +-- player +function init_player() + winner=0 + win_limit=5 + + ply={ + id=1, + scrx=10, + scry=1, + x=pfield.x1, + y=63, + xspd=1, + yspd=0, + col=10, + crash=0, + } + + function ply:input() + id=self.id-1 + if btn(⬅️,id) then + self:redirect(-1,0) + elseif btn(➡️,id) then + self:redirect(1,0) + elseif btn(⬆️,id) then + self:redirect(0,-1) + elseif btn(⬇️,id) then + self:redirect(0,1) + end + end + + function ply:score_input() + if btn(🅾️) and debounce==0 then + next_round() + debounce=10 + end + end + + function ply:title_input() + if btn(🅾️) and debounce==0 then + cur_state=1 + debounce=10 + end + end + + function ply:end_input() + if btn(🅾️) and debounce==0 then + _init() + debounce=10 + end + end + + function ply:tick_debounce() + debounce-=1 + if debounce<0 then + debounce=0 + end + end + + function ply:redirect(x,y) + self.xspd=x + self.yspd=y + end + + function ply:update() + self.x+=self.xspd + self.y+=self.yspd + end + + function ply:check() + if self.xpfield.x2 or + self.ypfield.y2 then + self:halt() + end + + if sget(self.x,self.y)!=0 then + self:halt() + end + end + + function ply:halt() + self.x-=self.xspd + self.y-=self.yspd + self.crash+=1 + + cur_state=2 + sfx(0) + end + + function ply:draw() + sset(self.x,self.y,self.col) + end + + plys={ + copy(ply), + copy(ply) + } + + p2=plys[2] + p2.scrx=74 + p2.id=2 + p2.x=pfield.x2 + p2.xspd=-1 + p2.col=12 + + for p in all(plys) do + p:draw() + end +end + +function init_scores() + scores={0,0} + + function scores:update() + for p in all(plys) do + if p.crash==0 then + scores[p.id]+=1 + p.crash-=1 + winner=p.id + end + end + end +end + +function next_round() + pfield:clear() + init_field() + init_player() + cur_state=1 + + for p in all(plys) do + if scores[p.id]>=win_limit then + winner=p.id + cur_state=3 + end + end +end +-->8 +-- helpers +-- table copy +-- src: https://www.lexaloffle.com/bbs/?tid=2951 +function copy(o) + local c + if type(o) == 'table' then + c = {} + for k, v in pairs(o) do + c[k] = copy(v) + end + else + c = o + end + return c +end + +function rndint(x) + return ceil(rnd(x)) +end +-->8 +-- ui +function draw_hud() + for p in all(plys) do + print(scores[p.id],p.scrx,p.scry,p.col) + end + + if cur_state==0 then + draw_title() + elseif cur_state==2 then + report_winner(winner) + elseif cur_state==3 then + declare_winner(winner) + end +end + +function report_winner(id) + line2y=64+3 + + rectfill(64-(4*8),64-8,64+(4*8),64+16,0) + rect(64-(4*8),64-8,64+(4*8),64+16,7) + + print("crash!",64-(4*3),64-3,7) + + if id==0 then + print("draw :(",64-(4*3)-2,line2y,7) + else + print(("ply"..winner).." scores!",64-(4*6),line2y,7) + end +end + +function draw_title() + print("beam",64-(4*4),60,11) + print("clash",64-(4*2),70,12) + + print("press 🅾️",64-(4*4),80,7) +end + +function declare_winner(id) + print(("p"..id).." wins!",64-(4*4),60,7) + print("press 🅾️",64-(4*4),66,7) +end +__label__ +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000aaa0000000000000000000000000000000000000000000000000000000000000ccc000000000000000000000000000000000000000000000000000 +0000000000a0a0000000000000000000000000000000000000000000000000000000000000c0c000000000000000000000000000000000000000000000000000 +0000000000a0a0000000000000000000000000000000000000000000000000000000000000c0c000000000000000000000000000000000000000000000000000 +0000000000a0a0000000000000000000000000000000000000000000000000000000000000c0c000000000000000000000000000000000000000000000000000 +0000000000aaa0000000000000000000000000000000000000000000000000000000000000ccc000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc +cddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddc +cd1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dddddd1dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000ddddddddd000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000dddd00000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d00000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000d00000000000000000000000000000000000000000000000000000000000000000001dc +cd10000000000000000000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd100000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d00000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dddd0000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000d000000000000000d0000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d00001dc +cd100000000000000000000000000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000bbb0bbb0bbb0bbb000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000b0b0b000b0b0bbb000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000bb00bb00bbb0b0b000000000000000000000000000000000000000000000000000000000000001dc +cd1a00000000000000000000000000000000000000000000b0b0b000b0b0b0b0000000000000000000000000000000000000000000000000000000000000c1dc +cd1000000000000000000000000000000000000000000000bbb0bbb0b0b0b0b000000000000000000000000000000000000000000000000000000000000001dc +cd100000000000000000000000d000000000000000000000000000000000000d00000000000000000000000000000000000000000000000000000000000001dc +cd100000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000cc0c000ccc00cc0c0c000000000000000000000000000000000000000000000000001dc +cd100000000000000000000000000000000000000000000000000000c000c000c0c0c000c0c000000000000000000000000000000000000000000000000001dc +cd100000000000000000000000000000000000000000000000000000c000c000ccc0ccc0ccc0000000000000000000000000000000000000dddd0000000001dc +cd100000000000000000000000000000000000000000000000000000c000c000c0c000c0c0c000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000cc0ccc0c0c0cc00c0c000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000777077707770077007700000077777000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000707070707000700070000000770007700000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000777077007700777077700000770707700000000000000d00000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000700070707000007000700000770007700000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000d00000000000700070707770770077000000077777000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d00000001dc +cd10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000d00000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000d00000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ddddd00000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd100000000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000d00000000000000000000000000000000000000001dc +cd10000000000000000000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd100000000000000000000000000000000000ddd0000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d0000000000000000000001dc +cd100000000000000000000000d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd10000000000d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd10000000000000000000000000000000000000000000000ddddd000000000000000ddddddddd000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000d00d00000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dc +cd1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111dc +cddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddc +cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc + +__map__ +0000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +__sfx__ +1a060000216502b65030650326502c6502665034600156301f6302463026630206301a630006000962013620186201a620146200e620306000961013610186101a610146100e610306002f6002f6002e6002d600 +001000000d6000d6000d6000d6000d6000d6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +002000001885000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000