diff --git a/.gitattributes b/.gitattributes index 69fefdd..792dba6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,6 @@ /assets/graphics/Space[[:space:]]shooter.zip filter=lfs diff=lfs merge=lfs -text +/assets/audio/boss.mp3 filter=lfs diff=lfs merge=lfs -text +/assets/audio/boss.wav filter=lfs diff=lfs merge=lfs -text +/assets/audio/jingleSounds_Kenney.zip filter=lfs diff=lfs merge=lfs -text +/assets/audio/loop.mp3 filter=lfs diff=lfs merge=lfs -text +/assets/audio/loop.wav filter=lfs diff=lfs merge=lfs -text diff --git a/assets/audio/boss.mp3 b/assets/audio/boss.mp3 new file mode 100644 index 0000000..a7172c2 --- /dev/null +++ b/assets/audio/boss.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d910b1175ffba6aaa64d11abb09e37ebc239af03192131beb35aa41c54d9074 +size 6066975 diff --git a/assets/audio/boss.wav b/assets/audio/boss.wav new file mode 100644 index 0000000..fa70307 --- /dev/null +++ b/assets/audio/boss.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:221528bb9cbeab5a875d5bc540444066cf5de157ca149500c1ffbe592e053f4a +size 26709950 diff --git a/assets/audio/highDown.mp3 b/assets/audio/highDown.mp3 new file mode 100644 index 0000000..bf3fe42 Binary files /dev/null and b/assets/audio/highDown.mp3 differ diff --git a/assets/audio/highUp.mp3 b/assets/audio/highUp.mp3 new file mode 100644 index 0000000..c0b434b Binary files /dev/null and b/assets/audio/highUp.mp3 differ diff --git a/assets/audio/jingleSounds_Kenney.zip b/assets/audio/jingleSounds_Kenney.zip new file mode 100644 index 0000000..8255f37 --- /dev/null +++ b/assets/audio/jingleSounds_Kenney.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be324b6cf26e35c95c2a344569a2470512819d0246cc81328bef3499de3682e5 +size 1089319 diff --git a/assets/audio/laser1.mp3 b/assets/audio/laser1.mp3 new file mode 100644 index 0000000..687d976 Binary files /dev/null and b/assets/audio/laser1.mp3 differ diff --git a/assets/audio/laser2.mp3 b/assets/audio/laser2.mp3 new file mode 100644 index 0000000..60c1300 Binary files /dev/null and b/assets/audio/laser2.mp3 differ diff --git a/assets/audio/laser3.mp3 b/assets/audio/laser3.mp3 new file mode 100644 index 0000000..e7f3922 Binary files /dev/null and b/assets/audio/laser3.mp3 differ diff --git a/assets/audio/laser3.wav b/assets/audio/laser3.wav new file mode 100644 index 0000000..bf4b285 Binary files /dev/null and b/assets/audio/laser3.wav differ diff --git a/assets/audio/laser4.mp3 b/assets/audio/laser4.mp3 new file mode 100644 index 0000000..d1f2ba2 Binary files /dev/null and b/assets/audio/laser4.mp3 differ diff --git a/assets/audio/laser4.wav b/assets/audio/laser4.wav new file mode 100644 index 0000000..1abe9ad Binary files /dev/null and b/assets/audio/laser4.wav differ diff --git a/assets/audio/laser5.mp3 b/assets/audio/laser5.mp3 new file mode 100644 index 0000000..309288b Binary files /dev/null and b/assets/audio/laser5.mp3 differ diff --git a/assets/audio/laser6.mp3 b/assets/audio/laser6.mp3 new file mode 100644 index 0000000..e3dfc74 Binary files /dev/null and b/assets/audio/laser6.mp3 differ diff --git a/assets/audio/laser7.mp3 b/assets/audio/laser7.mp3 new file mode 100644 index 0000000..d063db8 Binary files /dev/null and b/assets/audio/laser7.mp3 differ diff --git a/assets/audio/laser8.mp3 b/assets/audio/laser8.mp3 new file mode 100644 index 0000000..2ae1105 Binary files /dev/null and b/assets/audio/laser8.mp3 differ diff --git a/assets/audio/laser9.mp3 b/assets/audio/laser9.mp3 new file mode 100644 index 0000000..0ee70a3 Binary files /dev/null and b/assets/audio/laser9.mp3 differ diff --git a/assets/audio/loop.mp3 b/assets/audio/loop.mp3 new file mode 100644 index 0000000..afcbc8c --- /dev/null +++ b/assets/audio/loop.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e8f8acac074cc860d7d74b38b8ff98a6d570c6aec24493bbcaeaca02f3c6d55 +size 4234388 diff --git a/assets/audio/loop.wav b/assets/audio/loop.wav new file mode 100644 index 0000000..56b2802 --- /dev/null +++ b/assets/audio/loop.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55c4b1c0f6fa958c1305a7ded96a1d769670f7d1d5ecdfffeb7ea0a3b466765d +size 7883872 diff --git a/assets/audio/lowDown.mp3 b/assets/audio/lowDown.mp3 new file mode 100644 index 0000000..716f121 Binary files /dev/null and b/assets/audio/lowDown.mp3 differ diff --git a/assets/audio/lowRandom.mp3 b/assets/audio/lowRandom.mp3 new file mode 100644 index 0000000..5b6b83a Binary files /dev/null and b/assets/audio/lowRandom.mp3 differ diff --git a/assets/audio/lowThreeTone.mp3 b/assets/audio/lowThreeTone.mp3 new file mode 100644 index 0000000..9eda79f Binary files /dev/null and b/assets/audio/lowThreeTone.mp3 differ diff --git a/assets/audio/pepSound1.mp3 b/assets/audio/pepSound1.mp3 new file mode 100644 index 0000000..fd3bb56 Binary files /dev/null and b/assets/audio/pepSound1.mp3 differ diff --git a/assets/audio/pepSound2.mp3 b/assets/audio/pepSound2.mp3 new file mode 100644 index 0000000..47df8a0 Binary files /dev/null and b/assets/audio/pepSound2.mp3 differ diff --git a/assets/audio/pepSound3.mp3 b/assets/audio/pepSound3.mp3 new file mode 100644 index 0000000..992b4e3 Binary files /dev/null and b/assets/audio/pepSound3.mp3 differ diff --git a/assets/audio/pepSound4.mp3 b/assets/audio/pepSound4.mp3 new file mode 100644 index 0000000..9695598 Binary files /dev/null and b/assets/audio/pepSound4.mp3 differ diff --git a/assets/audio/pepSound5.mp3 b/assets/audio/pepSound5.mp3 new file mode 100644 index 0000000..6b5c208 Binary files /dev/null and b/assets/audio/pepSound5.mp3 differ diff --git a/assets/audio/phaseJump1.mp3 b/assets/audio/phaseJump1.mp3 new file mode 100644 index 0000000..2feb3e8 Binary files /dev/null and b/assets/audio/phaseJump1.mp3 differ diff --git a/assets/audio/phaseJump2.mp3 b/assets/audio/phaseJump2.mp3 new file mode 100644 index 0000000..1be48d9 Binary files /dev/null and b/assets/audio/phaseJump2.mp3 differ diff --git a/assets/audio/phaseJump3.mp3 b/assets/audio/phaseJump3.mp3 new file mode 100644 index 0000000..cce6cba Binary files /dev/null and b/assets/audio/phaseJump3.mp3 differ diff --git a/assets/audio/phaseJump4.mp3 b/assets/audio/phaseJump4.mp3 new file mode 100644 index 0000000..6588abc Binary files /dev/null and b/assets/audio/phaseJump4.mp3 differ diff --git a/assets/audio/phaseJump5.mp3 b/assets/audio/phaseJump5.mp3 new file mode 100644 index 0000000..5c03e0c Binary files /dev/null and b/assets/audio/phaseJump5.mp3 differ diff --git a/assets/audio/phaserDown1.mp3 b/assets/audio/phaserDown1.mp3 new file mode 100644 index 0000000..d60c9f4 Binary files /dev/null and b/assets/audio/phaserDown1.mp3 differ diff --git a/assets/audio/phaserDown2.mp3 b/assets/audio/phaserDown2.mp3 new file mode 100644 index 0000000..e497640 Binary files /dev/null and b/assets/audio/phaserDown2.mp3 differ diff --git a/assets/audio/phaserDown3.mp3 b/assets/audio/phaserDown3.mp3 new file mode 100644 index 0000000..3b65f05 Binary files /dev/null and b/assets/audio/phaserDown3.mp3 differ diff --git a/assets/audio/phaserUp1.mp3 b/assets/audio/phaserUp1.mp3 new file mode 100644 index 0000000..7cb7969 Binary files /dev/null and b/assets/audio/phaserUp1.mp3 differ diff --git a/assets/audio/phaserUp2.mp3 b/assets/audio/phaserUp2.mp3 new file mode 100644 index 0000000..3afdaa4 Binary files /dev/null and b/assets/audio/phaserUp2.mp3 differ diff --git a/assets/audio/phaserUp3.mp3 b/assets/audio/phaserUp3.mp3 new file mode 100644 index 0000000..21b08b8 Binary files /dev/null and b/assets/audio/phaserUp3.mp3 differ diff --git a/assets/audio/phaserUp4.mp3 b/assets/audio/phaserUp4.mp3 new file mode 100644 index 0000000..25f1bb2 Binary files /dev/null and b/assets/audio/phaserUp4.mp3 differ diff --git a/assets/audio/phaserUp5.mp3 b/assets/audio/phaserUp5.mp3 new file mode 100644 index 0000000..66f5637 Binary files /dev/null and b/assets/audio/phaserUp5.mp3 differ diff --git a/assets/audio/phaserUp6.mp3 b/assets/audio/phaserUp6.mp3 new file mode 100644 index 0000000..86470f8 Binary files /dev/null and b/assets/audio/phaserUp6.mp3 differ diff --git a/assets/audio/phaserUp7.mp3 b/assets/audio/phaserUp7.mp3 new file mode 100644 index 0000000..368ad2d Binary files /dev/null and b/assets/audio/phaserUp7.mp3 differ diff --git a/assets/audio/powerUp1.mp3 b/assets/audio/powerUp1.mp3 new file mode 100644 index 0000000..285b5c9 Binary files /dev/null and b/assets/audio/powerUp1.mp3 differ diff --git a/assets/audio/powerUp10.mp3 b/assets/audio/powerUp10.mp3 new file mode 100644 index 0000000..938d076 Binary files /dev/null and b/assets/audio/powerUp10.mp3 differ diff --git a/assets/audio/powerUp11.mp3 b/assets/audio/powerUp11.mp3 new file mode 100644 index 0000000..d7a5bc8 Binary files /dev/null and b/assets/audio/powerUp11.mp3 differ diff --git a/assets/audio/powerUp12.mp3 b/assets/audio/powerUp12.mp3 new file mode 100644 index 0000000..6aa5891 Binary files /dev/null and b/assets/audio/powerUp12.mp3 differ diff --git a/assets/audio/powerUp2.mp3 b/assets/audio/powerUp2.mp3 new file mode 100644 index 0000000..a7803c4 Binary files /dev/null and b/assets/audio/powerUp2.mp3 differ diff --git a/assets/audio/powerUp3.mp3 b/assets/audio/powerUp3.mp3 new file mode 100644 index 0000000..34d0a93 Binary files /dev/null and b/assets/audio/powerUp3.mp3 differ diff --git a/assets/audio/powerUp4.mp3 b/assets/audio/powerUp4.mp3 new file mode 100644 index 0000000..6ef4463 Binary files /dev/null and b/assets/audio/powerUp4.mp3 differ diff --git a/assets/audio/powerUp5.mp3 b/assets/audio/powerUp5.mp3 new file mode 100644 index 0000000..8240172 Binary files /dev/null and b/assets/audio/powerUp5.mp3 differ diff --git a/assets/audio/powerUp6.mp3 b/assets/audio/powerUp6.mp3 new file mode 100644 index 0000000..6a79048 Binary files /dev/null and b/assets/audio/powerUp6.mp3 differ diff --git a/assets/audio/powerUp6.wav b/assets/audio/powerUp6.wav new file mode 100644 index 0000000..1fdb040 Binary files /dev/null and b/assets/audio/powerUp6.wav differ diff --git a/assets/audio/powerUp7.mp3 b/assets/audio/powerUp7.mp3 new file mode 100644 index 0000000..b070ae9 Binary files /dev/null and b/assets/audio/powerUp7.mp3 differ diff --git a/assets/audio/powerUp8.mp3 b/assets/audio/powerUp8.mp3 new file mode 100644 index 0000000..7c171cf Binary files /dev/null and b/assets/audio/powerUp8.mp3 differ diff --git a/assets/audio/powerUp9.mp3 b/assets/audio/powerUp9.mp3 new file mode 100644 index 0000000..3007f07 Binary files /dev/null and b/assets/audio/powerUp9.mp3 differ diff --git a/assets/audio/readme.txt b/assets/audio/readme.txt new file mode 100644 index 0000000..f400f17 --- /dev/null +++ b/assets/audio/readme.txt @@ -0,0 +1,8 @@ + --- + +Digital SFX set by Kenney Vleugels (www.kenney.nl) + +You may use these sounds in personal and commercial projects. +Credit (www.kenney.nl) would be nice but is not mandatory. + + -- \ No newline at end of file diff --git a/assets/audio/spaceTrash1.mp3 b/assets/audio/spaceTrash1.mp3 new file mode 100644 index 0000000..56c498c Binary files /dev/null and b/assets/audio/spaceTrash1.mp3 differ diff --git a/assets/audio/spaceTrash2.mp3 b/assets/audio/spaceTrash2.mp3 new file mode 100644 index 0000000..135115b Binary files /dev/null and b/assets/audio/spaceTrash2.mp3 differ diff --git a/assets/audio/spaceTrash3.mp3 b/assets/audio/spaceTrash3.mp3 new file mode 100644 index 0000000..ca0a13f Binary files /dev/null and b/assets/audio/spaceTrash3.mp3 differ diff --git a/assets/audio/spaceTrash4.mp3 b/assets/audio/spaceTrash4.mp3 new file mode 100644 index 0000000..7337baa Binary files /dev/null and b/assets/audio/spaceTrash4.mp3 differ diff --git a/assets/audio/spaceTrash5.mp3 b/assets/audio/spaceTrash5.mp3 new file mode 100644 index 0000000..bd7b1da Binary files /dev/null and b/assets/audio/spaceTrash5.mp3 differ diff --git a/assets/audio/threeTone1.mp3 b/assets/audio/threeTone1.mp3 new file mode 100644 index 0000000..badeb37 Binary files /dev/null and b/assets/audio/threeTone1.mp3 differ diff --git a/assets/audio/threeTone2.mp3 b/assets/audio/threeTone2.mp3 new file mode 100644 index 0000000..7e53681 Binary files /dev/null and b/assets/audio/threeTone2.mp3 differ diff --git a/assets/audio/tone1.mp3 b/assets/audio/tone1.mp3 new file mode 100644 index 0000000..7b89172 Binary files /dev/null and b/assets/audio/tone1.mp3 differ diff --git a/assets/audio/twoTone1.mp3 b/assets/audio/twoTone1.mp3 new file mode 100644 index 0000000..48e8906 Binary files /dev/null and b/assets/audio/twoTone1.mp3 differ diff --git a/assets/audio/twoTone2.mp3 b/assets/audio/twoTone2.mp3 new file mode 100644 index 0000000..e97f265 Binary files /dev/null and b/assets/audio/twoTone2.mp3 differ diff --git a/assets/audio/zap1.mp3 b/assets/audio/zap1.mp3 new file mode 100644 index 0000000..d753853 Binary files /dev/null and b/assets/audio/zap1.mp3 differ diff --git a/assets/audio/zap2.mp3 b/assets/audio/zap2.mp3 new file mode 100644 index 0000000..a078d9c Binary files /dev/null and b/assets/audio/zap2.mp3 differ diff --git a/assets/audio/zapThreeToneDown.mp3 b/assets/audio/zapThreeToneDown.mp3 new file mode 100644 index 0000000..b1b0518 Binary files /dev/null and b/assets/audio/zapThreeToneDown.mp3 differ diff --git a/assets/audio/zapThreeToneUp.mp3 b/assets/audio/zapThreeToneUp.mp3 new file mode 100644 index 0000000..6c1d8f3 Binary files /dev/null and b/assets/audio/zapThreeToneUp.mp3 differ diff --git a/assets/audio/zapTwoTone.mp3 b/assets/audio/zapTwoTone.mp3 new file mode 100644 index 0000000..683f66b Binary files /dev/null and b/assets/audio/zapTwoTone.mp3 differ diff --git a/assets/audio/zapTwoTone2.mp3 b/assets/audio/zapTwoTone2.mp3 new file mode 100644 index 0000000..89448cc Binary files /dev/null and b/assets/audio/zapTwoTone2.mp3 differ diff --git a/src/Asteroid.hx b/src/Asteroid.hx index c3df63c..0b766ba 100644 --- a/src/Asteroid.hx +++ b/src/Asteroid.hx @@ -21,11 +21,10 @@ class Asteroid extends Entity { graphic = sprite; + setHitbox(sprite.width - 15, sprite.height); + sprite.centerOrigin(); - - setHitbox(sprite.width, sprite.height); - type = "asteroid"; layer = -2; @@ -38,8 +37,8 @@ class Asteroid extends Entity { this.scene.remove(this); } - this.originX = Math.floor(sprite.width / 2); - this.originY = Math.floor(sprite.height / 2); + this.centerOrigin(); + sprite.centerOrigin(); if (side > .5) this.sprite.angle += angleSpeed; diff --git a/src/Enemy.hx b/src/Enemy.hx index 39a26dc..03928ab 100644 --- a/src/Enemy.hx +++ b/src/Enemy.hx @@ -1,9 +1,11 @@ import com.haxepunk.Entity; import com.haxepunk.graphics.Image; import com.haxepunk.HXP; +import com.haxepunk.Sfx; import Player; import Score; +import EnemyBullet; class Enemy extends Entity { @@ -13,6 +15,12 @@ class Enemy extends Entity { color = Math.floor(Math.random() * 4); enemyType = Math.floor(Math.random() * 5) + 1; + #if flash + bulletSound = new Sfx("audio/laser3.mp3"); + #else + bulletSound = new Sfx("audio/laser3.wav"); + #end + sprite = new Image("graphics/" + enemies[color] + enemyType + ".png"); healthSprite = Image.createRect(sprite.width, 10, 0x00FF00); @@ -31,9 +39,8 @@ class Enemy extends Entity { layer = -1; } - private function assignLocation() { - if (enemyType <= 2) { + if (enemyType < 3) { arr = [ Math.floor(Math.random() * (HXP.width - this.width)), Math.floor(Math.random() * 400) @@ -76,8 +83,30 @@ class Enemy extends Entity { return arr; } + private function shoot() { + if (shootTimer < 0) { + if (enemyType != 3) { + this.scene.add(new EnemyBullet(this.x, this.y + this.height)); + } + else { + this.scene.add(new EnemyBullet(this.x - 30, this.y + this.height)); + this.scene.add(new EnemyBullet(this.x + 30, this.y + this.height)); + } + + if (enemyType == 4) { + shootTimer = 1; + } + else { + shootTimer = 5; + } + + bulletSound.play(); + } + } + public override function update() { turnTimer -= HXP.elapsed; + shootTimer -= HXP.elapsed; this.centerOrigin(); healthSprite.scaledWidth = (sprite.width / originalHealth) * health; @@ -92,10 +121,21 @@ class Enemy extends Entity { turnTimer = 2; else if (enemyType == 3 || enemyType == 4) turnTimer = 1; - else if (enemyType == 1) + else if (enemyType == 1 || enemyType == 5) turnTimer = .5; } + if (enemyType > 2) { + if (Math.random() < .1 && shootTimer < 0) { + var player = this.scene.getInstance("player"); + if (this.x > player.left && this.x < player.right) { + turnTimer = 1; + loc = [this.x, this.y]; + shoot(); + } + } + } + var bullet:Entity = collide("bullet", this.x, this.y); if (bullet != null) { @@ -103,7 +143,7 @@ class Enemy extends Entity { var score:Array = []; this.scene.getClass(Score, score); - score[0].add(15); + score[0].add(1500); this.scene.remove(bullet); } @@ -121,6 +161,7 @@ class Enemy extends Entity { private var sprite:Image; private var healthSprite:Image; + private var bulletSound:Sfx; private var color:Int; private var enemyType:Int; @@ -131,6 +172,7 @@ class Enemy extends Entity { private var antX:Float; private var turnTimer:Float = 0; + private var shootTimer:Float = 0; private var moveSpeed:Int = 10; private var loc:Array = []; } \ No newline at end of file diff --git a/src/EnemyBullet.hx b/src/EnemyBullet.hx new file mode 100644 index 0000000..fe2e6fa --- /dev/null +++ b/src/EnemyBullet.hx @@ -0,0 +1,46 @@ +import com.haxepunk.Entity; +import com.haxepunk.graphics.Image; +import com.haxepunk.HXP; + +class EnemyBullet extends Entity { + + public function new (x:Float, y:Float) { + super(x, y); + + sprite = [ + new Image("graphics/laserRed14.png"), + new Image("graphics/laserRed16.png") + ]; + + for (i in 0...sprite.length) { + sprite[i].angle = 180; + sprite[i].centerOrigin(); + } + + setHitboxTo(sprite[0]); + + graphic = sprite[0]; + + type = "enemybullet"; + } + + public override function update() { + super.update(); + timer -= HXP.elapsed; + + this.centerOrigin(); + + this.y += 10; + + if (timer < 0) { + graphic = sprite[1]; + } + + if (this.y > HXP.height) { + this.scene.remove(this); + } + } + + private var sprite:Array; + private var timer:Float = .5; +} \ No newline at end of file diff --git a/src/Lives.hx b/src/Lives.hx index 09ed1a3..b380c60 100644 --- a/src/Lives.hx +++ b/src/Lives.hx @@ -15,17 +15,21 @@ class Lives extends Entity { new Image("graphics/playerShip1_damage3.png") ]; + liveBar = Image.createRect(Math.floor(baseSprite.width * .75), 10, 0x00FF00); + liveBar.y += 70; + baseSprite.scale = .75; for (i in 0...sprite.length) { sprite[i].scale = .75; } - super(HXP.width - (baseSprite.width * .75 + 20), HXP.height - (baseSprite.height * .75 + 20)); + super(HXP.width - (baseSprite.width * .75 + 20), HXP.height - (baseSprite.height * .75 + 50)); graphic = baseSprite; this.addGraphic(sprite[0]); + this.addGraphic(liveBar); damage = 0; @@ -33,10 +37,16 @@ class Lives extends Entity { } public inline function addDamage() {damage++;} + public inline function remDamage() {if (damage != 0) damage--;} public override function update() { graphic = baseSprite; this.addGraphic(sprite[damage]); + + liveBar.scaledWidth = (liveBar.width / 4) * (4 - damage); + + this.addGraphic(liveBar); + if (damage > 3) { var player:Array = []; this.scene.getClass(Player, player); @@ -49,6 +59,7 @@ class Lives extends Entity { private var sprite:Array = []; private var baseSprite:Image; + private var liveBar:Image; private var damage:Int; } \ No newline at end of file diff --git a/src/MainScene.hx b/src/MainScene.hx index 56a8834..5c303b4 100644 --- a/src/MainScene.hx +++ b/src/MainScene.hx @@ -1,6 +1,7 @@ import com.haxepunk.Scene; import com.haxepunk.HXP; import com.haxepunk.graphics.Backdrop; +import com.haxepunk.Sfx; import Spawner; import Player; @@ -14,12 +15,18 @@ class MainScene extends Scene public override function begin() { backdrop = new Backdrop("graphics/darkPurple.png", true, true); - var player = new Player(); + var player = new Player(); var button = new Button(); var spawner = new Spawner(); - var enemy = new Enemy(160, 0); + var enemy = new Enemy(-160, 0); var lives = new Lives(); var score = new Score(); + #if flash + music = new Sfx("audio/loop.mp3"); + #else + music = new Sfx("audio/loop.wav"); + #end + addGraphic(backdrop); @@ -31,7 +38,13 @@ class MainScene extends Scene add(lives); add(score); add(spawner); - + music.play(.1, 0, true); + } + + public override function end() { + this.removeAll(); + music.stop(); + this.update(); } public override function update() { @@ -40,4 +53,5 @@ class MainScene extends Scene } private var backdrop:Backdrop; + private var music:Sfx; } \ No newline at end of file diff --git a/src/MenuButton.hx b/src/MenuButton.hx index 6f28c1c..54585f2 100644 --- a/src/MenuButton.hx +++ b/src/MenuButton.hx @@ -44,9 +44,11 @@ class MenuButton extends Entity { if (Input.mouseReleased) { if ((Input.mouseX > this.left && Input.mouseX < this.right) && (Input.mouseY > this.top && Input.mouseY < this.bottom)) { if (this.text.text != "Menu") { + HXP.scene = null; HXP.scene = new MainScene(); } else { + HXP.scene = null; HXP.scene = new MenuScene(); } } @@ -54,9 +56,11 @@ class MenuButton extends Entity { if (Input.check("enter")) { if (this.text.text != "Menu") { + HXP.scene = null; HXP.scene = new MainScene(); } else { + HXP.scene = null; HXP.scene = new MenuScene(); } } @@ -65,9 +69,11 @@ class MenuButton extends Entity { private function onTouch(touch:Touch) { if ((touch.x > this.left && touch.x < this.right) && (touch.y > this.top && touch.y < this.bottom)) { if (this.text.text != "Menu") { + HXP.scene = null; HXP.scene = new MainScene(); } else { + HXP.scene = null; HXP.scene = new MenuScene(); } } diff --git a/src/MenuScene.hx b/src/MenuScene.hx index 50c4953..ae3b021 100644 --- a/src/MenuScene.hx +++ b/src/MenuScene.hx @@ -31,6 +31,11 @@ class MenuScene extends Scene { addGraphic(copy); } + public override function end() { + this.removeAll(); + update(); + } + public override function update() { super.update(); backdrop.y += 1; diff --git a/src/Pickup.hx b/src/Pickup.hx new file mode 100644 index 0000000..d42dea5 --- /dev/null +++ b/src/Pickup.hx @@ -0,0 +1,108 @@ +import com.haxepunk.Entity; +import com.haxepunk.graphics.Image; +import com.haxepunk.HXP; +import com.haxepunk.Sfx; + +import Score; +import Lives; + +class Pickup extends Entity { + + public function new (x:Float, y:Float) { + super(x, y); + + #if flash + sound = new Sfx("audio/powerUp6.mp3"); + #else + sound = new Sfx("audio/powerUp6.wav"); + #end + + var tempRand = .9 /*Math.random()*/; + + if (tempRand < .15) + randType = 1; + else if (tempRand > .15 && tempRand < .80) + randType = 2; + else + randType = 0; + + rand = Math.floor(Math.random() * 3); + + graphic = currentSprite = sprites[randType][rand]; + + if (Math.random() > .5) + turnSpeed = -1 * (Math.random() * 4); + else + turnSpeed = 1 * (Math.random() * 4); + + setHitboxTo(currentSprite); + + } + + public override function update () { + this.y += (Math.random() * 3) + 6; + + this.centerOrigin(); + currentSprite.centerOrigin(); + + currentSprite.angle += turnSpeed; + + if (this.y > HXP.height) { + this.scene.remove(this); + } + + if (collide("player", this.x, this.y) != null) { + var score:Array = []; + this.scene.getClass(Score, score); + + //Shield pickup + if (this.randType == 0) { + var player:Array = []; + this.scene.getClass(Player, player); + player[0].shielded = true; + player[0].shieldTimer = (rand + 1) * 3; + } + //"things" pickup + else if (this.randType == 1) { + var lives:Array = []; + this.scene.getClass(Lives, lives); + for(i in 0...rand + 1) + lives[0].remDamage(); + } + //Money pickup + else if (this.randType == 2) { + score[0].add(1000 * this.randType); + } + + sound.play(); + this.scene.remove(this); + } + + } + + private var sprites:Array> = [ + [ + new Image("graphics/shield_bronze.png"), + new Image("graphics/shield_silver.png"), + new Image("graphics/shield_gold.png") + ], + [ + new Image("graphics/things_bronze.png"), + new Image("graphics/things_silver.png"), + new Image("graphics/things_gold.png") + ], + [ + new Image("graphics/star_bronze.png"), + new Image("graphics/star_silver.png"), + new Image("graphics/star_gold.png") + ] + ]; + + private var turnSpeed:Float; + private var currentSprite:Image; + private var sound:Sfx; + + private var rand:Int; + private var randType:Int; + +} \ No newline at end of file diff --git a/src/Player.hx b/src/Player.hx index ee39a3c..d9d2ef9 100644 --- a/src/Player.hx +++ b/src/Player.hx @@ -5,6 +5,7 @@ import com.haxepunk.utils.Input; import com.haxepunk.HXP; import com.haxepunk.utils.Touch; import com.haxepunk.graphics.Text; +import com.haxepunk.Sfx; import openfl.Assets; import Bullet; @@ -15,6 +16,15 @@ class Player extends Entity { public function new() { super(HXP.halfWidth - 16, HXP.height - 200); baseSprite = new Image("graphics/playerShip1_green.png"); + shield = new Image("graphics/shield1.png"); + shield.x -= 16; + shield.y -= 20; + + #if flash + laser = new Sfx("audio/laser4.mp3"); + #else + laser = new Sfx("audio/laser4.wav"); + #end graphic = baseSprite; @@ -78,7 +88,7 @@ class Player extends Entity { } private function onTouch(touch:Touch) { - if (touch.y < HXP.height - 100) + if (touch.y < HXP.height - 100 && (touch.y > 500) && this.y > 0) this.moveTowards(touch.x - (this.width / 2), touch.y - (this.height * 2), moveSpeed * 1.5); } @@ -86,10 +96,11 @@ class Player extends Entity { var score:Array = []; this.scene.getClass(Score, score); - - score[0].rem(5); - - this.scene.add(new Bullet(this.x + this.width / 2, this.y)); + + score[0].rem(500); + this.scene.add(new Bullet(this.x + this.width / 2, this.y)); + laser.play(); + } public function die() { @@ -108,6 +119,10 @@ class Player extends Entity { handleInput(); hitPause -= HXP.elapsed; animWait -= HXP.elapsed; + shieldTimer -= HXP.elapsed; + + if (shieldTimer < 0) + shielded = false; if (animWait < 0) { @@ -126,11 +141,28 @@ class Player extends Entity { this.addGraphic(fireEffectLeft); this.addGraphic(fireEffectRight); + if (shielded) + this.addGraphic(shield); + currentAnim++; animWait = .75; } - if (collide("asteroid", this.x, this.y) != null && hitPause < 0) { + if ((hitPause > 0 && hitPause < .3) || (hitPause > .6 && hitPause < .9) || (hitPause > 1.2 && hitPause < 1.5)) { + this.visible = false; + } + else { + this.visible = true; + } + + if (collide("asteroid", this.x, this.y) != null && hitPause < 0 && !shielded) { + var lives:Array = []; + this.scene.getClass(Lives, lives); + lives[0].addDamage(); + hitPause = 1.5; + } + + if (collide("enemybullet", this.x, this.y) != null && hitPause < 0 && !shielded) { var lives:Array = []; this.scene.getClass(Lives, lives); lives[0].addDamage(); @@ -141,6 +173,8 @@ class Player extends Entity { } private var baseSprite:Image; + private var shield:Image; + private var laser:Sfx; private var fireEffectsLeft:Array = []; private var fireEffectsRight:Array = []; @@ -149,8 +183,11 @@ class Player extends Entity { private var fireEffectRight:Image; private var moveSpeed:Int = 7; - private var hitPause:Float = 1.5; + private var hitPause:Float = 0; private var animWait:Float = .75; private var currentAnim:Int = 0; + + public var shielded:Bool = false; + public var shieldTimer:Float = 1; } \ No newline at end of file diff --git a/src/Score.hx b/src/Score.hx index bb37317..cd60307 100644 --- a/src/Score.hx +++ b/src/Score.hx @@ -2,36 +2,42 @@ import com.haxepunk.Entity; import com.haxepunk.HXP; import com.haxepunk.graphics.Text; +import openfl.Assets; + class Score extends Entity { public function new() { - super(0, 100); - super(HXP.width, 30); + super(HXP.halfWidth, 30); name = "score"; - score = 0; - scoreText = new Text("0", 0, 0, {size : 50}); + score = 1000; + scoreText = new Text("$1000", 0, 0, 0, 0, {size : 50, align : "center", color : 0xFFF000}); + scoreText.font = Assets.getFont("font/kenpixel_mini_square.ttf").fontName; layer = -3; this.addGraphic(scoreText); - } public function add(x:Int) { score += x; - scoreText.text = score + ""; + scoreText.text = "$" + score; } public function rem(x:Int) { if (score != 0) { score -= x; - scoreText.text = score + ""; + scoreText.text = "$" + score; + } + if (score < 0) { + score = 0; + scoreText.text = "$" + score; } } public override function update() { - scoreText.originX = this.originX = 100; + scoreText.centerOrigin(); + this.centerOrigin(); super.update(); } diff --git a/src/Spawner.hx b/src/Spawner.hx index 872a084..2774f9a 100644 --- a/src/Spawner.hx +++ b/src/Spawner.hx @@ -13,6 +13,7 @@ class Spawner extends Entity { spawnStarTime -= HXP.elapsed; spawnAsteroidTime -= HXP.elapsed; spawnEnemyTime -= HXP.elapsed; + spawnPickupTime -= HXP.elapsed; if (spawnAsteroidTime < 0) { this.scene.add(new Asteroid(HXP.width * Math.random(), -16)); @@ -35,10 +36,16 @@ class Spawner extends Entity { spawnEnemyTime = 5; } + if (spawnPickupTime < 0) { + this.scene.add(new Pickup(HXP.width * Math.random(), -50)); + spawnPickupTime = 5 * Math.random() + 5; + } + super.update(); } private var spawnAsteroidTime:Float = .5; private var spawnStarTime:Float = .5; private var spawnEnemyTime:Float = 5; + private var spawnPickupTime:Float = 10; } \ No newline at end of file diff --git a/src/Title.hx b/src/Title.hx index e11481c..9161977 100644 --- a/src/Title.hx +++ b/src/Title.hx @@ -9,11 +9,14 @@ class Title extends Entity { public function new () { super(HXP.width / 2, (HXP.height / 2) - 400); - var icon = new Image("graphics/cursor.png"); - icon.scale = 3.5; - icon.x += 220; + var icon = new Image("graphics/playerShip1_green.png"); + icon.scale = 1; + icon.angle = 45; - var txt = new Text("Spaaace"); + icon.x += 180; + icon.y -= 10; + + var txt = new Text("Spáááce"); txt.size = 80; txt.x -= 30; txt.font = Assets.getFont("font/kenpixel_mini_square.ttf").fontName;