From 991c2de75c4d8d78e135d38eae2dfbd09ac0573a Mon Sep 17 00:00:00 2001 From: Ian C Date: Tue, 29 Nov 2005 20:35:03 +0000 Subject: Implementing new special block code --- GFX/font.bmf | Bin 21036 -> 173208 bytes TILES/special_bomb.png | Bin 0 -> 657 bytes TILES/special_twister.png | Bin 0 -> 712 bytes TILES/tiles.bms | Bin 70074 -> 98831 bytes game.bmx | 51 ++++-- gametypes.bmx | 440 +++++++++++++++++++++++++--------------------- hardwire.bmx | 31 ++-- particle.bmx | 105 ++++++++++- sounds.bmx | 22 ++- types.bmx | 14 +- 10 files changed, 424 insertions(+), 239 deletions(-) create mode 100644 TILES/special_bomb.png create mode 100644 TILES/special_twister.png diff --git a/GFX/font.bmf b/GFX/font.bmf index 364f158..ecdc1b4 100644 Binary files a/GFX/font.bmf and b/GFX/font.bmf differ diff --git a/TILES/special_bomb.png b/TILES/special_bomb.png new file mode 100644 index 0000000..e182696 Binary files /dev/null and b/TILES/special_bomb.png differ diff --git a/TILES/special_twister.png b/TILES/special_twister.png new file mode 100644 index 0000000..1446d1b Binary files /dev/null and b/TILES/special_twister.png differ diff --git a/TILES/tiles.bms b/TILES/tiles.bms index d367fb0..779a0c3 100644 Binary files a/TILES/tiles.bms and b/TILES/tiles.bms differ diff --git a/game.bmx b/game.bmx index 606c014..94edada 100644 --- a/game.bmx +++ b/game.bmx @@ -18,6 +18,7 @@ Type TGame Field alpha:Double Field alphainc:Double Field count:Int + Field total:Int Field block:TPiece Field nextblock:TPiece Field drop:Int @@ -27,12 +28,14 @@ Type TGame gm=New TGameMap level=1 Particles.Clear() - alpha=0.7 + TextParticles.Clear() + alpha=0.0 alphainc=0.01 count=0 - nextblock=TPiece.Create() + total=0 + nextblock=TPiece.Create(False) drop=False - CreateNext() + CreateNext(False) End Method Method SetInitLevel(l:Int) @@ -53,11 +56,11 @@ Type TGame count=0 End Method - Method CreateNext() + Method CreateNext(special:Int) block=nextblock - block.y=-4 + block.y=-3 block.x=Pit.WIDTH/2 - nextblock=TPiece.Create() + nextblock=TPiece.Create(special) nextblock.x=Pit.WIDTH+3 nextblock.y=1 drop=False @@ -112,15 +115,18 @@ Type TGame Cls - GameGFX.large.DrawColoured("SCORE",0,0,255,255,0) + TextParticles.Draw() + + GameGFX.large.Draw("SCORE",0,0,255,255,0) GameGFX.large.Draw(score,0,20) - GameGFX.large.DrawColoured("LEVEL",0,100,255,255,0) + GameGFX.large.Draw("LEVEL",0,100,255,255,0) GameGFX.large.Draw(level,0,120) - - GameGFX.large.DrawColoured("NEXT",Pit.X(Pit.WIDTH+2),Pit.Y(-1),255,255,0) + nextblock.Draw() + block.Draw() + If Not gm.overflow If KeyHit(KEY_ESCAPE) playing=False @@ -137,12 +143,16 @@ Type TGame block.y:-1 block.AddToMap(gm) count:+1 + total:+1 If count>10 LevelUp() EndIf If Not gm.overflow - CreateNext() + score:+level*2 + CreateNext((total Mod 30)=0) + Else + FlushKeys() EndIf EndIf EndIf @@ -164,14 +174,22 @@ Type TGame If KeyHit(GameConfig.krotright) block.RotateRight() If block.Collides(gm) - block.RotateLeft() + block.x:-1 + If block.Collides(gm) + block.x:+1 + block.RotateLeft() + EndIf EndIf EndIf If KeyHit(GameConfig.krotleft) block.RotateLeft() If block.Collides(gm) - block.RotateRight() + block.x:+1 + If block.Collides(gm) + block.x:-1 + block.RotateRight() + EndIf EndIf EndIf @@ -181,9 +199,7 @@ Type TGame EndIf EndIf - block.Draw() - - score:+gm.Draw()*level*10 + score:+gm.Draw()*level*20 Else gm.Draw() @@ -192,7 +208,7 @@ Type TGame DrawImage(GameGFX.gameover,GraphicsWidth()/2,GraphicsHeight()/2) SetAlpha(1) alpha:+alphainc - If alpha<=0.7 Or alpha>=1.0 + If (alpha<=0.7 And alphainc<0) Or (alpha>=1.0 And alphainc>0) alpha=Max(0,Min(1,alpha)) alphainc=-alphainc EndIf @@ -208,6 +224,7 @@ Type TGame Pause() EndIf + Sound.Process() Flip Return playing diff --git a/gametypes.bmx b/gametypes.bmx index 8866f5e..004e69e 100644 --- a/gametypes.bmx +++ b/gametypes.bmx @@ -11,14 +11,14 @@ Import "sounds.bmx" Type Pit Const WIDTH=10 - Const HEIGHT=14 + Const HEIGHT=13 Function X:Int(p:Int) Return 230+p*32 End Function Function Y:Int(p:Int) - Return 96+p*32 + Return 120+p*32 End Function End Type @@ -30,6 +30,8 @@ Type TWire Const TOP_RIGHT:Int=4 Const BOTTOM_LEFT:Int=5 Const BOTTOM_RIGHT:Int=6 + Const SPECIAL_BOMB:Int=7 + Const SPECIAL_TWISTER:Int=8 Const DIR_NONE:Int=0 Const DIR_UP:Int=1 @@ -50,19 +52,19 @@ Type TWire Field t:Int Function Init() - rotright=[0,2,1,4,6,3,5] - rotleft=[0,2,1,5,3,6,4] + rotright=[0,2,1,4,6,3,5,7,8] + rotleft=[0,2,1,5,3,6,4,7,8] - img=[GameGFX.cross,GameGFX.left_right,GameGFX.top_bottom,GameGFX.top_left,GameGFX.top_right,GameGFX.bottom_left,GameGFX.bottom_right] + img=[GameGFX.cross,GameGFX.left_right,GameGFX.top_bottom,GameGFX.top_left,GameGFX.top_right,GameGFX.bottom_left,GameGFX.bottom_right,GameGFX.special_bomb,GameGFX.special_twister] - ' CROSS LEFT_RIGHT TOP_BOTTOM TOP_LEFT TOP_RIGHT BOTTOM_LEFT BOTTOM_RIGHT - dir=[[DIR_UP,DIR_RIGHT,DIR_DOWN,DIR_LEFT], [DIR_NONE,DIR_RIGHT,DIR_NONE,DIR_LEFT], [DIR_UP,DIR_NONE,DIR_DOWN,DIR_NONE], [DIR_NONE,DIR_UP,DIR_LEFT,DIR_NONE], [DIR_NONE,DIR_NONE,DIR_RIGHT,DIR_UP], [DIR_LEFT,DIR_DOWN,DIR_NONE,DIR_NONE], [DIR_RIGHT,DIR_NONE,DIR_NONE,DIR_DOWN]] + ' CROSS LEFT_RIGHT TOP_BOTTOM TOP_LEFT TOP_RIGHT BOTTOM_LEFT BOTTOM_RIGHT SPECIAL_BOMB SPECIAL_TWISTER + dir=[[DIR_UP,DIR_RIGHT,DIR_DOWN,DIR_LEFT], [DIR_NONE,DIR_RIGHT,DIR_NONE,DIR_LEFT], [DIR_UP,DIR_NONE,DIR_DOWN,DIR_NONE], [DIR_NONE,DIR_UP,DIR_LEFT,DIR_NONE], [DIR_NONE,DIR_NONE,DIR_RIGHT,DIR_UP], [DIR_LEFT,DIR_DOWN,DIR_NONE,DIR_NONE], [DIR_RIGHT,DIR_NONE,DIR_NONE,DIR_DOWN], [DIR_NONE,DIR_NONE,DIR_NONE,DIR_NONE], [DIR_NONE,DIR_NONE,DIR_NONE,DIR_NONE]] dx=[0,0,1,0,-1] dy=[0,-1,0,1,0] dirname=["NONE","UP","RIGHT","DOWN","LEFT"] - typename=["CROSS","LEFT_RIGHT","TOP_BOTTOM","TOP_LEFT","TOP_RIGHT","BOTTOM_LEFT","BOTTOM_RIGHT"] + typename=["CROSS","LEFT_RIGHT","TOP_BOTTOM","TOP_LEFT","TOP_RIGHT","BOTTOM_LEFT","BOTTOM_RIGHT","SPECIAL BOMB","SPECIAL TWISTER"] End Function Method New() @@ -113,55 +115,106 @@ Type TPiece Abstract Field rot:Int Field offx:Int[4] Field offy:Int[4] + Field special:Int + Field special_pulse:Int + Field col:Int + Field coli:Int + Field frame:Int + Field framed:Int - Function Create:TPiece() + Function Create:TPiece(special:Int) Local o:TPiece - Select Rand(0,5) - Case 0 - o=TPiece(New TPiece_S_Left) - Case 1 - o=TPiece(New TPiece_S_Right) - Case 2 - o=TPiece(New TPiece_L_Left) - Case 3 - o=TPiece(New TPiece_L_Right) - Case 4 - o=TPiece(New TPiece_Square) - Case 5 - o=TPiece(New TPiece_Bar) - End Select - - o.BaseInit() + If special + Select Rand(0,5) + Case 0 + o=TPiece(New TPiece_SpecialBomb) + Case 1 + o=TPiece(New TPiece_SpecialTwister) + End Select + Else + Select Rand(0,5) + Case 0 + o=TPiece(New TPiece_S_Left) + Case 1 + o=TPiece(New TPiece_S_Right) + Case 2 + o=TPiece(New TPiece_L_Left) + Case 3 + o=TPiece(New TPiece_L_Right) + Case 4 + o=TPiece(New TPiece_Square) + Case 5 + o=TPiece(New TPiece_Bar) + End Select + EndIf + + o.BaseInit(special) Return o End Function Method Init() Abstract - Method BaseInit() + Method BaseInit(special:Int) + special_pulse=False Init() rot=0 ox=offx[rot] oy=offy[rot] + self.special=special + col=255 + coli=-1 + frame=0 + framed=0 End Method Method Draw() - For Local px:Int=0 Until 4 - For Local py:Int=0 Until 4 - If map[px,py] - Local gx:Int=Pit.X(x-ox+px) - Local gy:Int=Pit.Y(y-oy+py) - SetColor(255,255,255) - DrawImage(GameGFX.tile,gx,gy) - SetColor(128,128,128) - DrawImage(map[px,py].Image(),gx,gy) - EndIf + If special + col:+coli + If col=255 Or col=128 + coli=-coli + EndIf + + framed:+1 + If framed=5 + framed=0 + frame=(frame+1) Mod 4 + EndIf + + For Local px:Int=0 Until 4 + For Local py:Int=0 Until 4 + If map[px,py] + Local gx:Int=Pit.X(x-ox+px) + Local gy:Int=Pit.Y(y-oy+py) + SetColor(255,255,255) + DrawImage(GameGFX.tile,gx,gy) + If special_pulse + SetColor(col,col/2,255-col) + EndIf + DrawImage(map[px,py].Image(),gx,gy,frame) + EndIf + Next Next - Next + Else + For Local px:Int=0 Until 4 + For Local py:Int=0 Until 4 + If map[px,py] + Local gx:Int=Pit.X(x-ox+px) + Local gy:Int=Pit.Y(y-oy+py) + SetColor(255,255,255) + DrawImage(GameGFX.tile,gx,gy) + SetColor(128,128,128) + DrawImage(map[px,py].Image(),gx,gy) + EndIf + Next + Next + EndIf End Method Method RotateLeft() + If special Then Return + If rot=0 rot=3 Else @@ -186,6 +239,8 @@ Type TPiece Abstract End Method Method RotateRight() + If special Then Return + rot=(rot+1) Mod 4 ox=offx[rot] @@ -227,26 +282,44 @@ Type TPiece Abstract End Method Method AddToMap(gm:TGameMap) - For Local px:Int=0 Until 4 - For Local py:Int=0 Until 4 - If map[px,py] - Local gx:Int=x-ox+px - Local gy:Int=y-oy+py - - If gy<0 - gm.overflow=True - Else - gm.map[gx,gy]=map[px,py] - Particles.AddDust(Pit.X(gx)+16,Pit.Y(gy)+32) + If special + gm.SetSpecial(TSpecial(Self)) + Else + For Local px:Int=0 Until 4 + For Local py:Int=0 Until 4 + If map[px,py] + Local gx:Int=x-ox+px + Local gy:Int=y-oy+py + + If gy<0 + gm.overflow=True + Else + gm.map[gx,gy]=map[px,py] + + If gy=Pit.HEIGHT-1 Or gm.map[gx,gy+1] + Particles.AddDust(Pit.X(gx)+16,Pit.Y(gy)+32) + EndIf + EndIf EndIf - EndIf + Next Next - Next - Sound.Click() - gm.CheckWires() + + Sound.Click() + + If Not gm.overflow + If Not gm.CheckWires() + gm.Flatten() + gm.CheckWires() + EndIf + EndIf + EndIf End Method End Type +Type TSpecial Extends TPiece Abstract + Method DoSpecial:Int(gm:TGameMap) Abstract +End Type + Type TPiece_S_Right Extends TPiece Method Init() map[1,0]=TWire.Create([TWire.CROSS,TWire.BOTTOM_RIGHT]) @@ -318,32 +391,49 @@ Type TPiece_Bar Extends TPiece End Method End Type - -Type TFallingBlock - Field w:TWire - Field x:Int - Field y:Double - Field yi:Double +Type TPiece_SpecialBomb Extends TSpecial + Method Init() + map[0,0]=TWire.Create([TWire.SPECIAL_BOMB]) + offx=[0,0,0,0] + offy=[0,0,0,0] + End Method - Function Create:TFallingBlock(x:Int, y:Double) - Local o:TFallingBlock=New TFallingBlock - o.w=New TWire - o.x=x - o.y=y - o.yi=0 - Return o - End Function + Method DoSpecial:Int(gm:TGameMap) + Local l:TWireList=New TWireList - Method Update() - y:+yi - yi=Max(4.0,yi+0.1) + If yt - If top[b.x]=-1 - overflow=True - b.y=t - l.MoveNext() - Else - hit=True - map[b.x,top[b.x]]=b.w - Particles.AddDust(Pit.X(b.x)+16,Pit.Y(top[b.x])+32) - l.Remove() - EndIf - Else - b.Draw() - l.MoveNext() + If b.Draw() + l.MoveNext() + Else + If Not overflow + score:+b.list.Count() + For Local e:TWireListEnt=EachIn b.list + map[e.x,e.y]=Null + Next EndIf - Wend - - If hit And Not overflow - Sound.Click() - CheckWires() - CalcTop() + l.Remove() + check=True EndIf + Wend + + If check + Sound.Path() + Flatten() + CheckWires() EndIf trode_col:+trode_coli diff --git a/hardwire.bmx b/hardwire.bmx index 7a9a8a5..79509b2 100644 --- a/hardwire.bmx +++ b/hardwire.bmx @@ -58,6 +58,7 @@ Lookup.Init() GameConfig.Load() TWire.Init() Particles.Init() +TextParticles.Init() Sound.Init() Global bdrop:TMenuBdrop=New TMenuBdrop @@ -152,18 +153,18 @@ Function Menu() Local c5:Int=128+128*(defkey=5) Local c6:Int=128+128*(defkey=6) - GameGFX.large.DrawColoured("Left",250,180,c1,c1,0) - GameGFX.large.DrawColoured("Right",250,210,c2,c2,0) - GameGFX.large.DrawColoured("Rotate Right",250,240,c3,c3,0) - GameGFX.large.DrawColoured("Rotate Left",250,270,c4,c4,0) - GameGFX.large.DrawColoured("Drop",250,300,c5,c5,0) - GameGFX.large.DrawColoured("Pause",250,330,c6,c6,0) - GameGFX.large.DrawColoured(KeySym(GameConfig.kleft),500,180,c1,c1,0) - GameGFX.large.DrawColoured(KeySym(GameConfig.kright),500,210,c2,c2,0) - GameGFX.large.DrawColoured(KeySym(GameConfig.krotright),500,240,c3,c3,0) - GameGFX.large.DrawColoured(KeySym(GameConfig.krotleft),500,270,c4,c4,0) - GameGFX.large.DrawColoured(KeySym(GameConfig.kdrop),500,300,c5,c5,0) - GameGFX.large.DrawColoured(KeySym(GameConfig.kpause),500,330,c6,c6,0) + GameGFX.large.Draw("Left",250,180,c1,c1,0) + GameGFX.large.Draw("Right",250,210,c2,c2,0) + GameGFX.large.Draw("Rotate Right",250,240,c3,c3,0) + GameGFX.large.Draw("Rotate Left",250,270,c4,c4,0) + GameGFX.large.Draw("Drop",250,300,c5,c5,0) + GameGFX.large.Draw("Pause",250,330,c6,c6,0) + GameGFX.large.Draw(KeySym(GameConfig.kleft),500,180,c1,c1,0) + GameGFX.large.Draw(KeySym(GameConfig.kright),500,210,c2,c2,0) + GameGFX.large.Draw(KeySym(GameConfig.krotright),500,240,c3,c3,0) + GameGFX.large.Draw(KeySym(GameConfig.krotleft),500,270,c4,c4,0) + GameGFX.large.Draw(KeySym(GameConfig.kdrop),500,300,c5,c5,0) + GameGFX.large.Draw(KeySym(GameConfig.kpause),500,330,c6,c6,0) Local k:Int=-1 @@ -210,7 +211,7 @@ Function Menu() EndIf GameGFX.large.Draw("START LEVEL ",tx1,356) - GameGFX.large.DrawColoured(GameConfig.start_level,tx2,356,255,255,0) + GameGFX.large.Draw(GameConfig.start_level,tx2,356,255,255,0) EndIf Select sel @@ -235,10 +236,10 @@ Function Menu() Rem SetScale(2,2) - GameGFX.font.CentreColoured("HARDWIRE",0,255,255,0) + GameGFX.font.Centre("HARDWIRE",0,255,255,0) SetScale(1,1) - GameGFX.font.CentreColoured("Copyright (c) 2005 Ian C",20,255,0,0) + GameGFX.font.Centre("Copyright (c) 2005 Ian C",20,255,0,0) EndRem SetColor(255,255,255) diff --git a/particle.bmx b/particle.bmx index 6269381..6eba5d3 100644 --- a/particle.bmx +++ b/particle.bmx @@ -17,7 +17,7 @@ Type TParticle Field dy:Double Field ai:Double Field s:Double - Field si:double + Field si:Double Function Dust:TParticle(x:Int, y:Int) Local o:TParticle=New TParticle @@ -98,3 +98,106 @@ Type Particles SetScale(1,1) End Function End Type + +Type TTextParticle + Field txt:String + Field x:Double + Field y:Double + Field a:Double + Field dx:Double + Field dy:Double + Field ai:Double + Field s:Double + Field si:Double + Field r:Int + Field g:Int + Field b:Int + Field fnt:TBitmapFont + + Function Create:TTextParticle(fnt:TBitmapFont, txt:String, x:Double, y:Double, dx:Double, dy:Double, r:Int, g:Int, b:Int, a:Double, ai:Double, s:Double, si:Double) + Local o:TTextParticle=New TTextParticle + + If x=-1 + x=GraphicsWidth()/2 + EndIf + + o.x=x + o.y=y + o.a=a + o.ai=ai + o.dx=dx + o.dy=dy + o.s=s + o.si=si + o.txt=txt + o.r=r + o.g=g + o.b=b + o.fnt=fnt + Return o + End Function + + Method Update:Int() + SetAlpha(a) + SetScale(s,s) + fnt.CentreOn(txt,x,y,r,g,b) + x:+dx + y:+dy + a:+ai + s:+si + Return a>0 + End Method +End Type + +Type TextParticles + Global plist:TList + Global sy:Int + Const sx:Int=646 + + Function Init() + plist=CreateList() + sy=300 + End Function + + Function Clear() + plist.Clear() + sy=300 + End Function + + Function Big(txt:String, r:Int, g:Int, b:Int) + plist.AddLast(TTextParticle.Create(GameGFX.font,txt,-1,GraphicsHeight()-GameGFX.font.MaxHeight()/2,0,0,r,g,b,1,-0.01,1,0)) + plist.AddLast(TTextParticle.Create(GameGFX.font,txt,-1,GraphicsHeight()-GameGFX.font.MaxHeight()/2,0,0,r,g,b,1,-0.02,1,0.1)) + End Function + + Function Score(txt:String) + Local r:Int=Rand(128,255) + Local g:Int=Rand(128,255) + Local b:Int=Rand(128,255) + + plist.AddLast(TTextParticle.Create(GameGFX.font,txt,sx,sy,0,0,r,g,b,1,-0.01,1,0)) + plist.AddLast(TTextParticle.Create(GameGFX.font,txt,sx,sy,0,0,r,g,b,1,-0.02,1,0.1)) + + sy:+GameGFX.font.MaxHeight() + + If sy>GraphicsHeight()-20 + sy=300 + EndIf + End Function + + Function Draw() + Local l:TEasyLink=TEasyLink.Create(plist) + + While l.Value() + Local p:TTextParticle=TTextParticle(l.Value()) + + If (p.Update()) + l.MoveNext() + Else + l.Remove() + EndIf + Wend + SetColor(255,255,255) + SetAlpha(1) + SetScale(1,1) + End Function +End Type diff --git a/sounds.bmx b/sounds.bmx index b33ccec..51f37e7 100644 --- a/sounds.bmx +++ b/sounds.bmx @@ -14,22 +14,38 @@ Type Sound Global popsfx:TSound Global clicksfx:TSound Global pathsfx:TSound + + Global play_pop:Int + Global play_click:Int + Global play_path:Int Function Init() popsfx=LoadSound("incbin::SFX/pop.wav") clicksfx=LoadSound("incbin::SFX/click.wav") pathsfx=LoadSound("incbin::SFX/path.wav") + play_pop=False + play_click=False + play_path=False End Function Function Pop() - popsfx.Play() + play_pop=True End Function Function Click() - clicksfx.Play() + play_click=True End Function Function Path() - pathsfx.Play() + play_path=True + End Function + + Function Process() + If play_pop Then popsfx.Play() + If play_click Then clicksfx.Play() + If play_path Then pathsfx.Play() + play_pop=False + play_click=False + play_path=False End Function End Type diff --git a/types.bmx b/types.bmx index 42cb2bd..0de29d6 100644 --- a/types.bmx +++ b/types.bmx @@ -26,7 +26,6 @@ Incbin "GFX/copperslice.png" Incbin "GFX/dust.png" Incbin "GFX/title.png" Incbin "GFX/gameover.png" -Incbin "GFX/cursor.png" Incbin "TILES/tile.png" Incbin "TILES/pit_top.png" @@ -45,6 +44,9 @@ Incbin "TILES/top_right.png" Incbin "TILES/bottom_left.png" Incbin "TILES/bottom_right.png" +Incbin "TILES/special_bomb.png" +Incbin "TILES/special_twister.png" + Const HERTZ:Int=60 Type Lookup @@ -83,7 +85,6 @@ Type GameGFX Global scores_button:TImage Global keys_button:TImage - Global cursor:TImage Global tile:TImage Global pit_top:TImage @@ -104,6 +105,9 @@ Type GameGFX Global bottom_left:Timage Global bottom_right:Timage + Global special_bomb:TImage + Global special_twister:TImage + Function Init() font=TBitmapFont.Load("incbin::GFX/font.bmf",0) small=TBitmapFont.Load("incbin::GFX/small.bmf",0) @@ -129,7 +133,6 @@ Type GameGFX right_button=LoadImage("incbin::GFX/right_button.png",0) tile=LoadImage("incbin::TILES/tile.png",0) - cursor=LoadImage("incbin::GFX/cursor.png",0) pit_top=LoadImage("incbin::TILES/pit_top.png",0) pit_bottom=LoadImage("incbin::TILES/pit_bottom.png",0) @@ -148,6 +151,9 @@ Type GameGFX top_right=LoadImage("incbin::TILES/top_right.png",0) bottom_left=LoadImage("incbin::TILES/bottom_left.png",0) bottom_right=LoadImage("incbin::TILES/bottom_right.png",0) + + special_bomb=LoadAnimImage("incbin::TILES/special_bomb.png",32,32,0,40) + special_twister=LoadAnimImage("incbin::TILES/special_twister.png",32,32,0,40) End Function End Type @@ -199,7 +205,7 @@ Type GameConfig s.WriteInt(kleft) s.WriteInt(kright) s.WriteInt(krotright) - s.WriteInt(krotright) + s.WriteInt(krotleft) s.WriteInt(kdrop) s.WriteInt(kpause) s.WriteInt(start_level) -- cgit v1.2.3