initial commit
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
extends CPUParticles2D
|
||||
|
||||
var unlock := false
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if unlock and not emitting:
|
||||
queue_free()
|
||||
@@ -0,0 +1 @@
|
||||
uid://ca8an62xpl0e4
|
||||
@@ -0,0 +1,176 @@
|
||||
extends CharacterBody2D
|
||||
|
||||
@onready var bullet = preload("res://assets/scenes/enemyBullet.tscn")
|
||||
@onready var explosionSFX = preload("res://assets/scenes/explosionsfx.tscn")
|
||||
|
||||
@onready var player = $"../../Player"
|
||||
@onready var poly = $"Polygon2D"
|
||||
@onready var animations = $AnimationPlayer
|
||||
@onready var healthBar = $health
|
||||
@onready var healthBg = $ColorRect
|
||||
@onready var nav_agent: NavigationAgent2D = $NavigationAgent2D
|
||||
@onready var ray:= $RayCast2D
|
||||
@onready var hitsfx = $hitsfx
|
||||
@onready var shootsfx = $shootsfx
|
||||
const RANGE = 400.0
|
||||
|
||||
var curShootVal := 1.0
|
||||
var lock := true
|
||||
@export var shootDelay := 1.0
|
||||
|
||||
var health := 100.0
|
||||
var maxHealth := 100.0
|
||||
|
||||
var wave := 1
|
||||
|
||||
var flash := 0.0
|
||||
|
||||
var knockback := Vector2.ZERO
|
||||
|
||||
var frameData = {}
|
||||
|
||||
var transitioning := false
|
||||
var transitionState = [false, false, false]
|
||||
var targetState = []
|
||||
|
||||
var ticks = 0
|
||||
var tickToDel = 0
|
||||
|
||||
func moveback(seconds):
|
||||
if ticks < 5: return
|
||||
|
||||
print("lets go")
|
||||
targetState = frameData[max(tickToDel, ticks - (int(floor(seconds)) * 20))]
|
||||
transitioning = true
|
||||
|
||||
func _ready():
|
||||
animations.play("spawn")
|
||||
|
||||
await get_tree().create_timer(0.7).timeout
|
||||
lock = false
|
||||
|
||||
call_deferred("actor_setup")
|
||||
|
||||
func actor_setup() -> void:
|
||||
await get_tree().physics_frame
|
||||
if player:
|
||||
nav_agent.target_position = player.global_position
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
healthBar.size.x += ((health / maxHealth) * healthBg.size.x - healthBar.size.x) * 5 * delta
|
||||
|
||||
if health < 0:
|
||||
if player:
|
||||
|
||||
if Globals.unlockedUpgrades.get("firstAidKit", 0) > 0:
|
||||
player.heal(randf_range(3,5))
|
||||
else:
|
||||
player.heal(randf_range(2,3))
|
||||
|
||||
get_node("explode").emitting = true
|
||||
get_node("explode").unlock = true
|
||||
get_node("explode").reparent(get_parent().get_parent())
|
||||
|
||||
var exlopsion = explosionSFX.instantiate()
|
||||
get_parent().get_parent().add_child(exlopsion)
|
||||
|
||||
queue_free()
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if lock:
|
||||
return
|
||||
|
||||
|
||||
if transitioning:
|
||||
|
||||
position += (targetState[0] - position) * 5 * delta / Engine.time_scale
|
||||
rotation += (targetState[1] - rotation) * 5 * delta / Engine.time_scale
|
||||
velocity += (targetState[2] - velocity) * 5 * delta / Engine.time_scale
|
||||
|
||||
#
|
||||
#position = position.round()
|
||||
#rotation = round(rotation)
|
||||
#velocity = velocity.round()
|
||||
|
||||
#print((position - targetState[0]).length(), " ", abs(rotation - targetState[1]), " ", (velocity - targetState[2]).length())
|
||||
|
||||
if (position - targetState[0]).length() < 2:
|
||||
position = targetState[0]
|
||||
transitionState[0] = true
|
||||
if abs(rotation - targetState[1]) < 0.05:
|
||||
rotation = targetState[1]
|
||||
transitionState[1] = true
|
||||
if (velocity - targetState[2]).length() < 2:
|
||||
velocity = targetState[2]
|
||||
transitionState[2] = true
|
||||
|
||||
if transitionState.count(true) == len(transitionState):
|
||||
transitioning = false
|
||||
transitionState = [false, false, false]
|
||||
targetState = []
|
||||
|
||||
return
|
||||
|
||||
var nextpos := nav_agent.get_next_path_position()
|
||||
|
||||
ray.rotation += ray.get_angle_to(player.global_position)
|
||||
|
||||
var distance = global_position.distance_to(player.global_position)
|
||||
ray.target_position.x = min(distance, 400)
|
||||
if distance > RANGE and not ray.is_colliding():
|
||||
poly.rotation += poly.get_angle_to(player.global_position) * 5 * delta
|
||||
|
||||
velocity.x += (cos(poly.rotation) * 200 - velocity.x) * 5 * delta
|
||||
velocity.y += (sin(poly.rotation) * 200 - velocity.y) * 5 * delta
|
||||
elif ray.is_colliding():
|
||||
var newvel := (nextpos - global_position).normalized() * 200
|
||||
poly.rotation += poly.get_angle_to(nextpos) * 5 * delta
|
||||
velocity = newvel
|
||||
|
||||
#velocity += (newvel - velocity) * 5 * delta
|
||||
|
||||
#velocity.x += (cos(rotation) * 200 - velocity.x) * 5 * delta
|
||||
#velocity.y += (sin(rotation) * 200 - velocity.y) * 5 * delta
|
||||
else:
|
||||
poly.rotation += poly.get_angle_to(player.global_position) * 5 * delta
|
||||
#ray.rotation += ray.get_angle_to(player.global_position) * 5 * delta
|
||||
|
||||
curShootVal -= delta
|
||||
|
||||
if curShootVal <= 0:
|
||||
var instantiated = bullet.instantiate()
|
||||
instantiated.global_position = global_position
|
||||
instantiated.rotation = poly.rotation
|
||||
instantiated.velocity.x = cos(poly.rotation) * 500
|
||||
instantiated.velocity.y = sin(poly.rotation) * 500
|
||||
instantiated.dealtScale = 1.5 * pow(wave, 0.2)
|
||||
get_parent().get_parent().add_child(instantiated)
|
||||
|
||||
animations.play("shoot")
|
||||
shootsfx.play()
|
||||
curShootVal = shootDelay
|
||||
|
||||
#velocity.x += (-cos(rotation) * 50 - velocity.x) / 5 * delta
|
||||
#velocity.y += (-sin(rotation) * 50 - velocity.y) / 5 * delta
|
||||
velocity.x += (-velocity.x) * 2 * delta
|
||||
velocity.y += (-velocity.y) * 2 * delta
|
||||
|
||||
knockback += -knockback * 5 * delta
|
||||
|
||||
move_and_collide((velocity + knockback) * delta)
|
||||
|
||||
|
||||
|
||||
|
||||
func _on_new_path() -> void:
|
||||
if player:
|
||||
nav_agent.target_position = player.global_position - Vector2(16, 16)
|
||||
|
||||
|
||||
func _on_snappie_timeout() -> void:
|
||||
frameData[ticks] = [position, rotation, velocity]
|
||||
ticks += 1
|
||||
|
||||
if ticks > 240:
|
||||
frameData.erase(tickToDel)
|
||||
tickToDel += 1
|
||||
@@ -0,0 +1 @@
|
||||
uid://iwxi6s8i6j81
|
||||
@@ -0,0 +1,32 @@
|
||||
extends CharacterBody2D
|
||||
|
||||
@onready var playerP = $"../Player"
|
||||
var max_collisions = 0
|
||||
|
||||
var dealtScale := 1.5
|
||||
|
||||
func _ready() -> void:
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if playerP.transitioning: return
|
||||
move_and_collide(velocity * delta)
|
||||
|
||||
|
||||
func _on_area_entered(area: Area2D) -> void:
|
||||
if area.get_meta("playerHitbox", 0) != 0:
|
||||
var player = area.get_parent()
|
||||
|
||||
player.speedScale = dealtScale * pow(0.8, Globals.unlockedUpgrades.get("rollback", 0))
|
||||
player.speedUp = 0.5
|
||||
player.damageScale += dealtScale * pow(0.8, Globals.unlockedUpgrades.get("rollback", 0))
|
||||
player.knockback = Vector2(sin(rotation) * 500 * [0.5, -0.5].pick_random(), cos(rotation) * 500 * [0.5, -0.5].pick_random())
|
||||
|
||||
player.hitsfx.play()
|
||||
|
||||
queue_free()
|
||||
|
||||
|
||||
func _on_body_entered(body: Node2D) -> void:
|
||||
queue_free()
|
||||
@@ -0,0 +1 @@
|
||||
uid://bemc80xgvtkd4
|
||||
@@ -0,0 +1,6 @@
|
||||
extends AudioStreamPlayer2D
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if not playing:
|
||||
queue_free()
|
||||
@@ -0,0 +1 @@
|
||||
uid://ctjyxuafayafk
|
||||
@@ -0,0 +1,30 @@
|
||||
extends Node
|
||||
|
||||
var availableUpgrades := ["dumbbell","firstAidKit", "rollback", "fasterFaster", "speedMayhem", "thoseWereTheDays", "dashMachine", "shotgun"]
|
||||
|
||||
var upgradeDescriptions := {
|
||||
"firstAidKit": "+50% time back",
|
||||
"dumbbell": "+20% damage",
|
||||
"rollback": "-20% speed up when taking damage",
|
||||
"fasterFaster": "+15% speed",
|
||||
"speedMayhem": "deal more damage with more speed",
|
||||
"thoseWereTheDays": "every rollback, gain +10% damage",
|
||||
"dashMachine": "just a better dash.",
|
||||
"shotgun": "a shotgun. literally just a fricking shotgun."
|
||||
}
|
||||
|
||||
var goldUpgradeDescriptionOverrides := {
|
||||
"shotgun": "still a shotgun, but now shiny ooo",
|
||||
"dashMachine": "dash everywhere, go wild.",
|
||||
"stopwatch": "countdowns are 50% slower. its cool isn't it?",
|
||||
"adrenaline": "when 5 seconds left on the health countdown, recieve a 75% buff on EVERYTHING.",
|
||||
"threeWaves": "something is coming in three waves."
|
||||
}
|
||||
|
||||
var unlockedUpgrades = {}
|
||||
|
||||
var DASH_WAIT := 3.0
|
||||
var DASH_LENGTH := 1000.0
|
||||
|
||||
var UPGRADE_ORIG := 30.0
|
||||
var UPGRADE_TIMERSTART := 30.0
|
||||
@@ -0,0 +1 @@
|
||||
uid://ce6cecb4wunfi
|
||||
@@ -0,0 +1,199 @@
|
||||
extends CharacterBody2D
|
||||
|
||||
|
||||
const SPEED := 300.0
|
||||
var health := 30.0 # represented in seconds
|
||||
var newHealth := -1.0
|
||||
|
||||
@onready var bullet = preload("res://assets/scenes/playerBullet.tscn")
|
||||
@onready var gun = $gun
|
||||
@onready var gunSprite = $gun/sprite
|
||||
@onready var animations = $AnimationPlayer
|
||||
@onready var shootsfx = $shootsfx
|
||||
@onready var hitsfx = $hitsfx
|
||||
@onready var dashRect = $MeshInstance2D
|
||||
@onready var poly = $Polygon2D
|
||||
|
||||
signal transitionStart(seconds)
|
||||
|
||||
var speedUp := 0.0
|
||||
var speedScale := 2.0
|
||||
var damageScale := 1.0
|
||||
var minDamageScale := 1.0
|
||||
|
||||
var dashTimer := 0.0
|
||||
|
||||
var dashVel := Vector2.ZERO
|
||||
var knockback := Vector2.ZERO
|
||||
|
||||
var flip := false
|
||||
var ticks = 0
|
||||
var tickToDel = 0
|
||||
|
||||
var frameData = {} # keep position, rotation and velocity for now
|
||||
|
||||
var amountTransition := 0.0
|
||||
var transitioning := false
|
||||
var transitionState = [false, false, false]
|
||||
var targetState = []
|
||||
|
||||
var dead := false
|
||||
|
||||
func heal(seconds):
|
||||
newHealth = health + seconds
|
||||
transitionStart.emit(seconds)
|
||||
#print(frameData)
|
||||
targetState = frameData[max(tickToDel, ticks - (int(floor(seconds)) * 20))]
|
||||
transitioning = true
|
||||
|
||||
func healNoMove(seconds):
|
||||
newHealth = health + seconds
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if damageScale > minDamageScale: damageScale -= delta
|
||||
damageScale = max(damageScale, minDamageScale)
|
||||
|
||||
#ticks += 1
|
||||
|
||||
dashRect.position.y = 31 * dashTimer / Globals.DASH_WAIT / 2 - 31.0 / 2
|
||||
dashRect.scale.y = dashTimer / Globals.DASH_WAIT
|
||||
|
||||
if health < 10:
|
||||
poly.position = Vector2(randi_range(-(10 - health) / 5,(10 - health) / 5), randi_range(-(10 - health) / 5,(10 - health) / 5))
|
||||
|
||||
if health <= 0 and not dead:
|
||||
$explode.emitting = true
|
||||
$explode.unlock = true
|
||||
$explode.reparent(get_parent())
|
||||
$PointLight2D.reparent(get_parent())
|
||||
dead = true
|
||||
hide()
|
||||
|
||||
var grayscaleVal := 1.0
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if dead: return
|
||||
|
||||
if newHealth != -1:
|
||||
health += (newHealth - health) * 3 * delta
|
||||
|
||||
if abs(health - newHealth) < 1:
|
||||
health = newHealth
|
||||
newHealth = -1
|
||||
|
||||
if transitioning:
|
||||
|
||||
grayscaleVal += - grayscaleVal * 10 * delta
|
||||
|
||||
position += (targetState[0] - position) * 5 * delta / Engine.time_scale
|
||||
rotation += (targetState[1] - rotation) * 5 * delta / Engine.time_scale
|
||||
velocity += (targetState[2] - velocity) * 5 * delta / Engine.time_scale
|
||||
|
||||
Engine.time_scale += (0.5 - Engine.time_scale) * 5 * delta / Engine.time_scale
|
||||
|
||||
#
|
||||
#position = position.round()
|
||||
#rotation = round(rotation)
|
||||
#velocity = velocity.round()
|
||||
|
||||
#print((position - targetState[0]).length(), " ", abs(rotation - targetState[1]), " ", (velocity - targetState[2]).length())
|
||||
|
||||
if (position - targetState[0]).length() < 2:
|
||||
position = targetState[0]
|
||||
transitionState[0] = true
|
||||
if abs(rotation - targetState[1]) < 0.05:
|
||||
rotation = targetState[1]
|
||||
transitionState[1] = true
|
||||
if (velocity - targetState[2]).length() < 2:
|
||||
velocity = targetState[2]
|
||||
transitionState[2] = true
|
||||
|
||||
if transitionState.count(true) == len(transitionState):
|
||||
transitioning = false
|
||||
transitionState = [false, false, false]
|
||||
targetState = []
|
||||
health = ceil(health)
|
||||
amountTransition = 0
|
||||
|
||||
return
|
||||
|
||||
grayscaleVal += (1-grayscaleVal) * 2 * delta
|
||||
|
||||
var direction := Input.get_vector("moveLeft", "moveRight", "moveUp", "moveDown")
|
||||
velocity = direction * SPEED
|
||||
|
||||
if Globals.unlockedUpgrades.get("fasterFaster", 0) > 0:
|
||||
velocity *= pow(1.15, Globals.unlockedUpgrades["fasterFaster"])
|
||||
|
||||
gun.rotation += gun.get_angle_to(get_global_mouse_position()) * 7 * delta
|
||||
#print(fposmod(gun.rotation + PI, PI * 2) - PI)
|
||||
var truerot = fposmod(gun.rotation + PI, PI * 2) - PI
|
||||
if truerot < -PI / 2 or truerot > PI / 2:
|
||||
gun.scale.y += (-1 - gun.scale.y) * 10 * delta
|
||||
flip = true
|
||||
else:
|
||||
gun.scale.y += (1 - gun.scale.y) * 10 * delta
|
||||
flip = false
|
||||
|
||||
|
||||
var ang = gun.rotation + gun.get_angle_to(get_global_mouse_position())
|
||||
if Input.is_action_just_pressed("dash") and dashTimer == 0:
|
||||
dashVel = Vector2(cos(ang), sin(ang)) * Globals.DASH_LENGTH
|
||||
dashTimer = Globals.DASH_WAIT
|
||||
|
||||
if dashTimer > 0: dashTimer -= delta
|
||||
else: dashTimer = 0
|
||||
|
||||
if Input.is_action_just_pressed("shoot"):
|
||||
if not animations.is_playing():
|
||||
#var ang = gun.rotation + gun.get_angle_to(get_global_mouse_position())
|
||||
var instantiated = bullet.instantiate()
|
||||
instantiated.global_position = global_position
|
||||
instantiated.velocity.x = cos(ang) * 700
|
||||
instantiated.velocity.y = sin(ang) * 700
|
||||
get_parent().add_child(instantiated)
|
||||
|
||||
shootsfx.play()
|
||||
|
||||
if flip: animations.play("shoot_flip")
|
||||
else: animations.play("shoot")
|
||||
|
||||
#if Input.is_action_just_pressed("debugKey"):
|
||||
#targetState = frameData[ticks - 40]
|
||||
#transitioning = true
|
||||
|
||||
if speedUp > 0:
|
||||
Engine.time_scale += (speedScale - Engine.time_scale) * delta / Engine.time_scale
|
||||
speedUp -= delta / speedScale
|
||||
else:
|
||||
speedScale = 1
|
||||
Engine.time_scale += (1 - Engine.time_scale) * 2 * delta / Engine.time_scale
|
||||
|
||||
velocity += knockback
|
||||
velocity += dashVel
|
||||
knockback += -knockback * 5 * delta
|
||||
dashVel += -dashVel * 5 * delta
|
||||
|
||||
move_and_slide()
|
||||
|
||||
|
||||
func _on_framesave_timeout() -> void:
|
||||
frameData[ticks] = [position, rotation, velocity]
|
||||
ticks += 1
|
||||
|
||||
if ticks > 240:
|
||||
frameData.erase(tickToDel)
|
||||
tickToDel += 1
|
||||
|
||||
|
||||
func _on_hitbox_area_entered(area: Area2D) -> void:
|
||||
var themeta = area.get_meta("pickup", 0)
|
||||
#print("floyd")
|
||||
#
|
||||
if themeta != 0:
|
||||
area.get_node("particles").emitting = true
|
||||
area.get_node("particles").reparent(get_parent())
|
||||
healNoMove(3)
|
||||
area.queue_free()
|
||||
|
||||
$"../hud/AnimationPlayer2".play("global/popItUp")
|
||||
@@ -0,0 +1 @@
|
||||
uid://dbofvk7fso8po
|
||||
@@ -0,0 +1,50 @@
|
||||
extends CharacterBody2D
|
||||
|
||||
@onready var player = $"../Player"
|
||||
@onready var bloodParticles = preload("res://assets/scenes/blood.tscn")
|
||||
|
||||
var dmgtotal := float(randi_range(20,40))
|
||||
|
||||
func _ready() -> void:
|
||||
print(dmgtotal)
|
||||
|
||||
if Globals.unlockedUpgrades.get("dumbbell", 0) > 0:
|
||||
dmgtotal *= pow(1.5, Globals.unlockedUpgrades["dumbbell"])
|
||||
if Globals.unlockedUpgrades.get("speedMayhem", 0) > 0:
|
||||
dmgtotal *= pow(1 + (player.velocity.length() + player.dashVel.length()) / 400, Globals.unlockedUpgrades["speedMayhem"])
|
||||
|
||||
print(dmgtotal)
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if player.transitioning: return
|
||||
|
||||
move_and_collide(velocity * delta)
|
||||
|
||||
func _on_area_entered(area: Area2D) -> void:
|
||||
print("yes")
|
||||
|
||||
queue_free()
|
||||
|
||||
|
||||
func _on_body_entered(body: Node2D) -> void:
|
||||
if body.get_meta("enemy", 0) == 1:
|
||||
#body.get_node("explode").emitting = true
|
||||
#body.get_node("explode").reparent(body.geat_parent())
|
||||
|
||||
body.health -= dmgtotal
|
||||
body.knockback = Vector2(velocity.x * 0.5, velocity.y * 0.5)
|
||||
body.hitsfx.play()
|
||||
#AnimationPlayer.new().stop()
|
||||
body.get_node("AnimationPlayer").stop()
|
||||
body.get_node("AnimationPlayer").play("flash")
|
||||
|
||||
var bloodInsta = bloodParticles.instantiate()
|
||||
bloodInsta.emitting = true
|
||||
bloodInsta.unlock = true
|
||||
bloodInsta.global_position = body.global_position
|
||||
get_parent().add_child(bloodInsta)
|
||||
|
||||
#player.heal(randi_range(3,5))
|
||||
|
||||
#body.queue_free()
|
||||
queue_free()
|
||||
@@ -0,0 +1 @@
|
||||
uid://dnxmn06yejksk
|
||||
@@ -0,0 +1,39 @@
|
||||
extends Control
|
||||
|
||||
@onready var texture = $texture
|
||||
@onready var amountLabel = $Label
|
||||
@onready var progressRect = $progress
|
||||
|
||||
@export var imDead := false
|
||||
|
||||
var upgradeID := ""
|
||||
#var amount := 1
|
||||
var timer := Globals.UPGRADE_TIMERSTART
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if imDead and not $particles.emitting:
|
||||
queue_free()
|
||||
|
||||
timer -= delta * Engine.time_scale
|
||||
|
||||
texture.scale += (Vector2(1, 1) - texture.scale) * 7 * delta
|
||||
texture.modulate.a += (1 - texture.modulate.a) * 7 * delta
|
||||
|
||||
progressRect.position.x += (timer / Globals.UPGRADE_TIMERSTART * 48 - progressRect.position.x) * 5 * delta
|
||||
progressRect.size.x += (48 - timer / Globals.UPGRADE_TIMERSTART * 48 - progressRect.size.x) * 5 * delta
|
||||
|
||||
amountLabel.text = str("x", Globals.unlockedUpgrades.get(upgradeID, -1))
|
||||
|
||||
if timer < 0 and not imDead:
|
||||
Globals.unlockedUpgrades[upgradeID] -= 1
|
||||
timer = Globals.UPGRADE_TIMERSTART
|
||||
if Globals.unlockedUpgrades[upgradeID] == 0:
|
||||
Globals.unlockedUpgrades.erase(upgradeID)
|
||||
imDead = true
|
||||
$texture.hide()
|
||||
$progress.hide()
|
||||
$Label.hide()
|
||||
$goldrect.hide()
|
||||
|
||||
$breaksfx.play()
|
||||
$particles.emitting = true
|
||||
@@ -0,0 +1 @@
|
||||
uid://b3rft2lmj60k0
|
||||
Reference in New Issue
Block a user