From 87e40226c7be3b539c4bb2699d02c308a4e8d09f Mon Sep 17 00:00:00 2001 From: iegod Date: Thu, 7 Nov 2024 10:41:30 -0500 Subject: [PATCH] Cleanup, touchups, new death animation on hero. --- altar.png | Bin 0 -> 9944 bytes game.go | 98 ++++++++++++++++++++++++++++++++++---------------- grasstile.png | Bin 11491 -> 11562 bytes hero.go | 26 +++++++++++++- hero.png | Bin 1150 -> 1333 bytes herodeath.png | Bin 0 -> 1840 bytes main.go | 2 +- mover.go | 15 ++++++++ shadow.png | Bin 0 -> 102 bytes 9 files changed, 109 insertions(+), 32 deletions(-) create mode 100644 altar.png create mode 100644 herodeath.png create mode 100644 shadow.png diff --git a/altar.png b/altar.png new file mode 100644 index 0000000000000000000000000000000000000000..0e5586dcef34ba582a142eec0f37732e12d0e133 GIT binary patch literal 9944 zcmbVy1yoesyZ6wow4@@9^w2}Y5Yi)yNW_uci~S?laL=eM8S&vW+PXCkyTl!)+Y@Bsh-(Q{?64yraoUCOxFs4~D* zZWC4ExhWgL0RRHBKNlJxErSXGz}$1xGxRW2R|8o?U3e^QpjNg#UM_AZGyotW?d4`^ z?PTl0U}bCX=qky$-`L8?;AkVsXdtA{r|u?i>)@#D1GClj(a^K@ak3V(VU(6)knjSb z2)NjKSTcCIIJ?3@UXqM|(FLK}e{S2;@c~xZ&Qe9+qC*u5hM*Qvln-tznLC9*$5~ zhCdW7t)Q7s|FD32D0rgO_?JQc zTQpqH+s&3&#}*EK1+%tQ@I;Bp^hX;vkUY%R(gO<9gF>DE?J2E)i_8EN;t^tCH*j>d zfg<1>|6zbF*wVvRk`d)KL2iD2Za!f>elZX~KM2+369Vz^{S8%z+Bn*I{}-r;9-k

hH&=T`hJVZml7~7&VJOBZ=>-0g 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 literal 0 HcmV?d00001 diff --git a/game.go b/game.go index 9909ce2..464b811 100644 --- a/game.go +++ b/game.go @@ -25,9 +25,12 @@ const ( var ( tilesetImage *ebiten.Image + altarImage *ebiten.Image //go:embed grasstile.png tileset_img []byte + //go:embed altar.png + altar_img []byte ) type Game struct { @@ -64,6 +67,12 @@ func init() { log.Fatal(err) } tilesetImage = ebiten.NewImageFromImage(img) + + img, _, err = image.Decode(bytes.NewReader(altar_img)) + if err != nil { + log.Fatal(err) + } + altarImage = ebiten.NewImageFromImage(img) } func (g *Game) Initialize() { @@ -87,6 +96,7 @@ func (g *Game) Initialize() { g.score = 0 g.reset = false + //clean up all targets for j := 0; j < len(g.targets); j++ { g.targets[j] = nil } @@ -97,6 +107,10 @@ func (g *Game) Initialize() { g.timer = 0 g.runtime = 0. + g.projectiles = make(map[int]*Projectile) + g.initialized = true + g.reset = false + } func (g *Game) Update() error { @@ -119,10 +133,6 @@ func (g *Game) Update() error { if !g.initialized || g.reset { g.Initialize() - - g.projectiles = make(map[int]*Projectile) - g.initialized = true - g.reset = false } else { g.StepGame() } @@ -221,8 +231,6 @@ func (g *Game) StepGame() { if !g.Paused { - g.UpdateHeroPosition() - g.hero.Update() g.explosion.Update() @@ -230,10 +238,11 @@ func (g *Game) StepGame() { g.UpdateProjectiles() if !g.gameover { + g.UpdateHeroPosition() //append new projectiles g.AppendProjectiles() //add new target with increasing frequency - g.AddNewTargets() + g.SpawnEnemies() //handle pulsewave updates g.HandlePulseWaveUpdate() } @@ -243,11 +252,29 @@ func (g *Game) StepGame() { } } -func (g *Game) AddNewTargets() { +func (g *Game) SpawnEnemies() { f := 40000 / (g.counter + 1) if g.counter%f == 0 { g.targets = append(g.targets, NewMover()) - g.targets[len(g.targets)-1].SetOrigin(Coordinates{X: rand.Float64() * 640, Y: rand.Float64() * 480}) + + x0 := rand.Float64() * 640 + y0 := rand.Float64() * 480 + quadrant := rand.IntN(3) + + switch quadrant { + case 0: + g.targets[len(g.targets)-1].SetOrigin(Coordinates{X: x0, Y: -MOVER_HEIGHT}) + case 1: + g.targets[len(g.targets)-1].SetOrigin(Coordinates{X: x0, Y: screenHeight + MOVER_HEIGHT}) + case 2: + g.targets[len(g.targets)-1].SetOrigin(Coordinates{X: -MOVER_WIDTH, Y: y0}) + case 3: + g.targets[len(g.targets)-1].SetOrigin(Coordinates{X: screenWidth + x0, Y: y0}) + default: + g.targets[len(g.targets)-1].SetOrigin(Coordinates{X: x0, Y: y0}) + fmt.Println("WTF " + string(quadrant)) + } + } } @@ -331,13 +358,14 @@ func (g *Game) UpdateTargets() { dy := g.hero.Pos.Y - target.Pos.Y angle := math.Atan2(dy, dx) - maxspeed := 3. + //maxspeed := (float64(g.counter) + 1.) / 1000. + maxspeed := 2.9 target.Pos.X += maxspeed * math.Cos(angle) target.Pos.Y += maxspeed * math.Sin(angle) } //compute collision with hero - if g.hero.Pos.X >= target.Pos.X-MOVER_WIDTH/2 && g.hero.Pos.X <= target.Pos.X+MOVER_WIDTH/2 && g.hero.Pos.Y >= target.Pos.Y-MOVER_HEIGHT/2 && g.hero.Pos.Y <= target.Pos.Y+MOVER_HEIGHT/2 && target.Action < MoverActionDying { + if g.hero.Pos.X >= target.Pos.X-MOVER_WIDTH/2 && g.hero.Pos.X <= target.Pos.X+MOVER_WIDTH/2 && g.hero.Pos.Y >= target.Pos.Y-MOVER_HEIGHT/2 && g.hero.Pos.Y <= target.Pos.Y+MOVER_HEIGHT/2 && target.Action < MoverActionDying && g.hero.Action < MoverActionDying { g.heroCollisionMask.Clear() g.heroCollisionMask.DrawImage(g.hero.Sprite, nil) @@ -352,8 +380,8 @@ func (g *Game) UpdateTargets() { g.heroCollisionMask.ReadPixels(pixels) for i := 0; i < len(pixels); i = i + 4 { if pixels[i+3] != 0 { - fmt.Println("pixel death") - g.hero.Action = MoverActionDying + //fmt.Println("pixel death") + g.hero.SetHit() g.gameover = true break } @@ -381,7 +409,7 @@ func (g *Game) AppendProjectiles() { func (g *Game) HandleInput() { if len(g.gamepadIDs) > 0 { if ebiten.IsGamepadButtonPressed(0, ebiten.GamepadButton11) { - if !g.explosion.Active { + if !g.explosion.Active && !g.gameover { g.explosion.SetOrigin(g.hero.Pos) g.explosion.Reset() g.explosion.ToggleActivate() @@ -397,18 +425,20 @@ func (g *Game) HandleInput() { } //account for controller sensitivity - xaxis := ebiten.StandardGamepadAxisValue(0, ebiten.StandardGamepadAxisRightStickHorizontal) - yaxis := ebiten.StandardGamepadAxisValue(0, ebiten.StandardGamepadAxisRightStickVertical) + if !g.gameover { + xaxis := ebiten.StandardGamepadAxisValue(0, ebiten.StandardGamepadAxisRightStickHorizontal) + yaxis := ebiten.StandardGamepadAxisValue(0, ebiten.StandardGamepadAxisRightStickVertical) - if yaxis <= 0.09 && yaxis >= -0.09 { - yaxis = 0 - } - if xaxis <= 0.09 && xaxis >= -0.09 { - xaxis = 0 - } + if yaxis <= 0.09 && yaxis >= -0.09 { + yaxis = 0 + } + if xaxis <= 0.09 && xaxis >= -0.09 { + xaxis = 0 + } - inputangle := math.Atan2(yaxis, xaxis) - g.hero.SetAngle(inputangle) + inputangle := math.Atan2(yaxis, xaxis) + g.hero.SetAngle(inputangle) + } } } @@ -427,18 +457,19 @@ func (g *Game) UpdateHeroPosition() { func (g *Game) ConstructBackground() { g.background = ebiten.NewImage(screenWidth, screenHeight) + BLOCK_SIZE := 32 for i := 0; i < 640/16; i++ { for j := 0; j < 480/16; j++ { //select random tile in x and y from tileset - idx_x := rand.IntN(256 / 16) - idx_y := rand.IntN(256 / 16) + idx_y := rand.IntN(256 / BLOCK_SIZE) + idx_x := rand.IntN(256 / BLOCK_SIZE) - x0 := 16 * idx_x - y0 := 16 * idx_y - x1 := x0 + 16 - y1 := y0 + 16 + x0 := BLOCK_SIZE * idx_x + y0 := BLOCK_SIZE * idx_y + x1 := x0 + BLOCK_SIZE + y1 := y0 + BLOCK_SIZE //translate for grid element we're painting op := &ebiten.DrawImageOptions{} @@ -446,4 +477,11 @@ func (g *Game) ConstructBackground() { g.background.DrawImage(tilesetImage.SubImage(image.Rect(x0, y0, x1, y1)).(*ebiten.Image), op) } } + + ax := float64(rand.IntN(640/BLOCK_SIZE) * BLOCK_SIZE) + ay := float64(rand.IntN(480/BLOCK_SIZE) * BLOCK_SIZE) + + op := &ebiten.DrawImageOptions{} + op.GeoM.Translate(ax, ay) + g.background.DrawImage(altarImage, op) } diff --git a/grasstile.png b/grasstile.png index 7299ad887dc04692e4693242a321e68ab8f5cc89..8dc62e0c71a4aba60ae67130dd0aeb41665a5641 100644 GIT binary patch delta 10536 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 delta 10465 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 diff --git a/hero.go b/hero.go index ae4f3e0..48c2d51 100644 --- a/hero.go +++ b/hero.go @@ -14,9 +14,13 @@ import ( var ( heroImage *ebiten.Image + heroDeath *ebiten.Image //go:embed hero.png hero_img []byte + + //go:embed herodeath.png + herodeath_img []byte ) const ( @@ -36,6 +40,12 @@ func init() { log.Fatal(err) } heroImage = ebiten.NewImageFromImage(img) + + img, _, err = image.Decode(bytes.NewReader(herodeath_img)) + if err != nil { + log.Fatal(err) + } + heroDeath = ebiten.NewImageFromImage(img) } type Hero struct { @@ -98,6 +108,17 @@ func (m *Hero) Draw() { switch m.Action { case HeroActionDefault: m.Sprite.DrawImage(heroImage.SubImage(image.Rect(x0, y0, x1, y1)).(*ebiten.Image), nil) + case HeroActionDying: + m.dyingcount++ + + m.Sprite.DrawImage(heroDeath.SubImage(image.Rect(x0, y0, x1, y1)).(*ebiten.Image), nil) + + if m.dyingcount > 60 { + m.cycles = 0 + m.Action++ + } + case HeroActionExploding: + m.Sprite.DrawImage(heroDeath.SubImage(image.Rect(48*3, 0, 48*4, 48)).(*ebiten.Image), nil) default: } } @@ -106,8 +127,11 @@ func (m *Hero) Update() { m.cycles++ } +// one hit death for the hero func (m *Hero) SetHit() { - m.Action++ // = (m.Action + 1) % HeroActionMax + m.Action = MoverActionDying + m.Angle = 0 + m.cycles = 0 } func (m *Hero) ToggleColor() { diff --git a/hero.png b/hero.png index a622d0db7abdee898d2d71bf166c6f1fa764faad..0359058cf368a09cbf5ee21767fee11af31420f8 100644 GIT binary patch delta 1314 zcmV+-1>O4o2(=23B!B!#L_t(|ob8)kXdG1(fWMI%gs3gWgk%D{kSw*D78I5?P|>Ck zDD)+vwrZQVBGHEip|7z-$&(LK+NV&YP`VXtB`+$GK&qvsNsU-Z6YaJs?v_s4M1o7A zl&FjkyLUQC*8R=y+^gq2 z3R*xYkFae6P+Q-`?{oLvEJM8aIN>yj{>$wygRKwi5P_vdvtb>1937|s&vZS3YP0Q~gBgxh!O z6YsUR55Eq;>DWcy%IqIFdW81FJpd|^1AXwJn}5*>pj!aNV!A(ob2sh+biQ*e>+9jB zMsHh9>vTdV|B@Hfm{AyXg&P(4dFZca^S-GBe-&=&yAj1CdXRIs4X*}tF! z&^drYFx7vR_nPl0Qj1G$eCBB&9miz+Zr*b~wdpyiQWI~2f6fFjA%I+%?k`lHCxR9b z3c^d?&(5Fob|z=%NG&drT3li>ewXD**RMFbn)o7U$cGNU1_xSFSG|( z5x~Ji-G81~$S3I+uRHK~+Mu4Rx9sU+W^^csCn=`-ule8{Jk-6SF;{LgqeJ}i=uZHS z*mayZp7B54!}i^Kfj}C1?fvs5fc638!E}G2!pKt~1MpX^lLP(q_VuqBbLNBhS-d?7 zz=>~1SG+d)%`gDlckiXPzR9X~52Lex&Qcz>ZGRUE4vsWq z_kYqeJLlGh25;=o4<4*IE{GMaI{O!t06GUy2&Vi08>&%P z+*zJaZ#>8{SVMI1FRKFh189rZ0)GJTr2V(IzcbR#@W)@5bD4@^y1!69G6gb>x_?l! zrGBCb&>j6NvsLSjX|x|Vku8yJUIJf=4N@0su6h&iM>qeX6JT`!YI(pl(my5#7|S%1 z0B@f95YYDxFvWk>HPsZ%z4q(@Z)ZM#z?x6yU-4QAboDPd0ivy~08C6xK_-BN<3M_G z7!gw3%Z$ClM(?6vd87Wb{I866f*Ub2rM8a_h+qU@okSUO1 zL|a?E4^hH#tYQ*a9UmmR`4^o4xyrv1PdJXH*5PD3UY*0A$<@Mi|6F&xLj3*5i@zWU zf*|B&e@Dl$3N?zREVWPx}n*?E~KIUp@PDqfr=VW z1urT1zr7XFi@o$(r9w|0q}Wps@zPXKAs3N~kfKybYs82(YG{L9$r>9eEmdiwWj)OP z+<>7lE4hiBCTV;N7W@0Vw@;$*DKK z_Z0w6O-)8>hkr7FNHvi&K->`=75T^GZ{E3)9RU3J?OX-m(6RTN<6hqT3{Y#wi`DWY zuk8ocw}X%)o5}zp)pVQzk`lq4BL8^(jq=iB1z_UUgDsCM3=cW`*0+g@GJr@mk^2B~ zM{rc+-y1Arwd33m3oXk(nEnKS3p3LI% z^3`(NU;SvZz8cwQ-Hc_&S)b;@%yg*HEM)+ZYQl^HB{G6TAb(=uC29fhk5&tr}{Uo z3?M`Rg7g7^&sCQH4AFqEqY;?-c`L$JVW2IqnWRw9!s_ELwaQ+A$ zEB05n{s!RA+)bx^VsspUlW%|4Erm$Pzkj#bIz)9D2Y`LWf2&*l&hbMzw-2*@bSF^r zw|jp(ujT=S2terjJnO}0^CJMPmX@3d_CK9yYf}C?^_KJf3&*^5YV4lXun3-;Jsnmp z5c2nk%in1BrdtGmtqm$fSUT?M`y+VM<^ce1T)R?%+9-r^o-NLPvl&RES8G!m@?wwY z_X4aP_Ac`ED}O}t*Y5)e5rU3Kf&7tHXtHdLMeZhUW&mz*d$V6GX?Wg^LjJ+dyV2P7 v3Qfwx`iDgsKnNj(5JCtcgb+dqaf|aGD)H1@oj&CO00000NkvXXu0mjf$D=qv diff --git a/herodeath.png b/herodeath.png new file mode 100644 index 0000000000000000000000000000000000000000..75c2f81e6e795e314a2cd3593d235f71134d29a6 GIT binary patch literal 1840 zcmV-02haG4P)Mnep~(3qI`RJCfKG#Z5$ zi7^;LArZ(L1Bz*~7=+m3DiA1Ou_aWg0*VxoNR^Bav-kGy?zFqxZFk%5`JQHHX6K$e z_nvcp_s@VJ2!bF8f*=TjAP9mW2!bF8f*=TjFtM;QeSqJ#0hn4;!rzxKIzyFlp|>~F z;sjwtxg*yG2tqEIl*ym{w$0+Dj{(qr_>ePqMGXMH;vx>VY*n{8g}zeB0>YSNSPr0M z&%A{}+7BOc0Cs-S%114G0OFJg%Fu@p> z1nTYXbO6@8__F79e@U@ER-I}rk*S1(u`P#0)}@X}AR(_wDFdj8;>D?s)1K#dh4ul^ z6%OHxN}#cTDdEl>i)aZ4@Iu{FfGgqFN6*JeIEN8fI~h%6W-dL3bbz>ypO8xX{<^`8 zyQcxJBb@B)PFmoUnfF4DU-)>Ja9&KLnYnBt5=h8vQXK^A=>O@?9jvXb2i&Nl=6=iw z6OXz!cSQ|d;ZW9P#6*&CUQBdZH<~1KfS8UCu(q~7Mi!{f-4zZo{f_}BICAm__u#dS zR4%IqvM(n_O~L_waw{9+oqD{>I=^jGwb-3HZ)-nlw$-4{ITG(*B#@BTq$Gh%*|WL1 ziH63egnPEV@hZW`mw5jFY<_99x>f3E$m+rS7!G1#T$X-)5n1QPO^A=9{-o{pb7?Eo~avblPx2Y?-s zNmLgU0C1qcU(YN6F?)f`d&uHmAir%Vq}1U^I7Q{MY6_>{kKGo+{%3eD>kH%v%_= z0L~nXByFRVD($yzN@ls8_~O-m-2kd%gWI{w=mVgvpirN$m_3{KdwTTmnMK9ciR0g= zQf$Vot62lMvkJ*1oJqVRD+yO!P@tR`a8dN zU}Z^+q*F6oru+f){-;!S9*6`I@|v_WK%uYHQacG@U{wAs1Ecb`mbdl&&un=Ua5KQc zmaP=}O0zzAbj#Bc<SSGNaVWivc;yWG3djn=|7Moz+zKnp0fF10J&O z=a#p%tc&d4#!Eg|GMKV1TTJ6$0B&$+jNM#!ua^}RLjM)_eBCQrX{@XCUWeHg+Q<5u z)%v&jHD5APPJ2(TTnRv=V?Zkg0|7_{))gecORV+f^U} zx8p;itWzET{>hWAUvAwR^(kG`{zykhQoA4e=1Xm-+T6FUvP553vsemafh^$@T-D#a z+Daslkk_Owfr5d6=MppwME+=`Pv!qvA4Hnv`{V4?_Fw9Rz@q>}!XZ5)(Hst8WUpLp zBX$60R#Z@Z?i@hOfRVU;K3=l!ozE{43pg}u+ChTo(%}OT{`@I?O_NRkaT}1*3c}+SF zU@`J3KbsOl?Du|Vwipfj(=9)N;Vgui4;oHd%k}4XVt;PQ)c)a?B?y8b2!bF8f*=Tj eAP9nxkNgiLQEpO^bm=Pq0000jS%YKEk;nPXOzQ@H$t5SLX84|6jxH0@?(3q0wy6sVEG)78&qol`;+07QQo AP5=M^ literal 0 HcmV?d00001