fuzzyworld

godot-shooter / commit

Increased all health values ten times (from 5/10 -> 50/100), and added an SMG/gattling gun as a possible weapon.

3fcb817e31e63f92540848f453e600bdea78964a · Pavel Safronov · 2023-11-10 12:27:45 -0800 · parents 062f0623983e

Increased all health values ten times (from 5/10 -> 50/100), and added an SMG/gattling gun as a possible weapon.
 Bullet.gd  |  3 ++-
 Enemy.gd   |  2 +-
 Player.gd  | 12 +++++++-----
 Weapon.gd  |  2 ++
 Weapons.gd | 25 +++++++++++++++++++++----
 World.gd   | 25 +++++++++++++------------
 World.tscn |  1 -
 7 files changed, 46 insertions(+), 24 deletions(-)

diff --git a/Bullet.gd b/Bullet.gd
index 4b70d42..2701673 100644
--- a/Bullet.gd
+++ b/Bullet.gd
@@ -5,6 +5,7 @@ const Utils = preload("res://Utils.gd")
 const SmallExplosion = preload("res://SmallExplosion.tscn")
 export var lifetime_seconds = 1.5
 export var speed = 300
+export var damage_amount = 1
 
 func _ready() -> void:
 	$Timer.wait_time = lifetime_seconds
@@ -21,7 +22,7 @@ func on_bullet_body_entered(body):
 	var players = tree.get_nodes_in_group("player")
 	var player = players[0]
 	if body.has_method("hurt") && body != player:
-		body.hurt()
+		body.hurt(damage_amount)
 		var se = SmallExplosion.instance()
 		get_parent().add_child(se)
 		se.transform = transform
diff --git a/Enemy.gd b/Enemy.gd
index 1333e94..709c14b 100644
--- a/Enemy.gd
+++ b/Enemy.gd
@@ -10,7 +10,7 @@ const Smoke = preload("res://Smoke.tscn")
 export var move_speed = 40
 export var turn_rate = 0.01
 export var health = -1
-export var max_health = 10
+export var max_health = 100
 export var is_targeted = false
 export var is_invincible = false
 signal enemy_killed(position)
diff --git a/Player.gd b/Player.gd
index 1dc5b4e..65da854 100644
--- a/Player.gd
+++ b/Player.gd
@@ -4,8 +4,8 @@ class_name Player
 const Weapons = preload("res://Weapons.gd")
 
 export var move_speed = 100
-export var health = 10
-export var max_health = 10
+export var health = 50
+export var max_health = 100
 export var is_invincible = false
 export var turn_rate = 0.03
 export var shield_active = true
@@ -28,6 +28,7 @@ var is_destination_set = false
 func _ready() -> void:
 	velocity= Vector2.UP * move_speed
 	weapon = Weapons.create_basic_gun()
+#	weapon = Weapons.create_gattling_gun()
 	if shield_active:
 		enable_shield()
 	else:
@@ -133,12 +134,13 @@ func shoot_at(pos: Vector2):
 		return
 	can_fire = false
 	if weapon.ammo != INF:
-		weapon.ammo -= 1
-		if weapon.ammo == 0:
+		if weapon.ammo <= 0:
 			weapon = default_weapon
-	$ShotTimer.wait_time = weapon.particle_lifetime_secs
+		weapon.ammo -= 1
+	$ShotTimer.wait_time = weapon.cooldown_seconds
 	$ShotTimer.start()
 	var particle = weapon.particle.instance()
+	particle.damage_amount = weapon.damage_amount
 	owner.add_child(particle)
 	particle.global_position = global_position
 	particle.global_rotation = global_position.angle_to_point(pos) + PI / 2.0
diff --git a/Weapon.gd b/Weapon.gd
index 78680a0..359b386 100644
--- a/Weapon.gd
+++ b/Weapon.gd
@@ -5,5 +5,7 @@ var shooting_range = 400
 var particle: PackedScene
 var particle_speed = 100
 var particle_lifetime_secs = 5
+var damage_amount = 1
 var ammo = INF
 var name = "Laser"
+var reload_size = 1
diff --git a/Weapons.gd b/Weapons.gd
index f56be74..d7b4895 100644
--- a/Weapons.gd
+++ b/Weapons.gd
@@ -1,23 +1,40 @@
 # Note: `tool` is optional but without it there are no error reporting in the editor
 tool
 
-static func create_basic_gun(period_secs: float = 1) -> Weapon:
+static func create_basic_gun() -> Weapon:
 	var weapon = Weapon.new()
 	weapon.particle = preload("res://Bullet.tscn")
 	weapon.shooting_range = 500
-	weapon.particle_lifetime_secs = period_secs
+	weapon.particle_lifetime_secs = 1
 	weapon.particle_speed = 300
 	weapon.cooldown_seconds = 1
+	weapon.damage_amount = 10
 	weapon.ammo = INF
+	weapon.reload_size = 1
 	return weapon
 
-static func create_rocket_gun(period_secs: float = 1) -> Weapon:
+static func create_gattling_gun() -> Weapon:
+	var weapon = Weapon.new()
+	weapon.particle = preload("res://Bullet.tscn")
+	weapon.shooting_range = 500
+	weapon.particle_lifetime_secs = 1
+	weapon.particle_speed = 300
+	weapon.cooldown_seconds = .1
+	weapon.ammo = 50
+	weapon.name = "SMG"
+	weapon.damage_amount = 1
+	weapon.reload_size = 50
+	return weapon
+
+static func create_rocket_gun() -> Weapon:
 	var weapon = Weapon.new()
 	weapon.particle = preload("res://Rocket.tscn")
 	weapon.shooting_range = 300
-	weapon.particle_lifetime_secs = period_secs
+	weapon.particle_lifetime_secs = 1
 	weapon.particle_speed = 100
 	weapon.cooldown_seconds = 1
 	weapon.ammo = 10
 	weapon.name = "Rocket"
+	weapon.damage_amount = 20
+	weapon.reload_size = 10
 	return weapon
diff --git a/World.gd b/World.gd
index 96a0561..9febfbf 100644
--- a/World.gd
+++ b/World.gd
@@ -26,7 +26,7 @@ func enemy_killed(_position: Vector2):
 	$UI/HUD.score += 1
 	$UI/HUD.show_message("Enemy killed!", 1)
 func health_consumed():
-	$Player.heal()
+	$Player.heal(10)
 func shield_consumed():
 	Utils.log("consuming a shield and sending a message")
 	$Player.enable_shield()
@@ -36,9 +36,12 @@ func gold_consumed():
 func weapon_consumed():
 	var is_current_weapon_base = $Player.weapon.ammo	== INF
 	if is_current_weapon_base:
-		$Player.weapon = Weapons.create_rocket_gun()
+		if randi() % 2 == 0:
+			$Player.weapon = Weapons.create_gattling_gun()
+		else:
+			$Player.weapon = Weapons.create_rocket_gun()
 	else:
-		$Player.weapon.ammo += 10
+		$Player.weapon.ammo += $Player.weapon.reload_size
 	
 func create_enemy() -> Enemy:
 	var enemy = Enemy.instance()
@@ -52,15 +55,6 @@ func create_health() -> PowerUp:
 	health.label = "+HP"
 	health.color = Color.green
 	return health
-
-func create_shield() -> PowerUp:
-	var shield = PowerUp.instance()
-	shield.position = get_new_item_pos(randf() + .5)
-	shield.connect("consumed", self, "shield_consumed")
-	shield.label = "Shield"
-	shield.color = Color.blue
-	return shield
-
 func create_gold(pos: Vector2 = get_new_environment_position(1 + randf())) -> PowerUp:
 	var gold = PowerUp.instance()
 	gold.position = pos
@@ -75,6 +69,13 @@ func create_weapon() -> PowerUp:
 	weapon.label = "WPN"
 	weapon.color = Color.red
 	return weapon
+func create_shield() -> PowerUp:
+	var shield = PowerUp.instance()
+	shield.position = get_new_item_pos(randf() + .5)
+	shield.connect("consumed", self, "shield_consumed")
+	shield.label = "Shield"
+	shield.color = Color.blue
+	return shield
 
 func _ready() -> void:
 	$UI/HUD.show_message("Tap/drag to move")
diff --git a/World.tscn b/World.tscn
index c13ed80..aafb9df 100644
--- a/World.tscn
+++ b/World.tscn
@@ -55,7 +55,6 @@ __meta__ = {
 [node name="StarField2" parent="Background/ParallaxBackground/Background2" instance=ExtResource( 5 )]
 
 [node name="Player" parent="." instance=ExtResource( 2 )]
-health = 5
 
 [node name="Environment" type="Node2D" parent="."]