1
0

initial commit

This commit is contained in:
2026-07-26 01:01:08 +02:00
commit 787cefefd5
86 changed files with 3195 additions and 0 deletions
+7
View File
@@ -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
+176
View File
@@ -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
+1
View File
@@ -0,0 +1 @@
uid://iwxi6s8i6j81
+32
View File
@@ -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()
+1
View File
@@ -0,0 +1 @@
uid://bemc80xgvtkd4
+6
View File
@@ -0,0 +1,6 @@
extends AudioStreamPlayer2D
func _process(delta: float) -> void:
if not playing:
queue_free()
+1
View File
@@ -0,0 +1 @@
uid://ctjyxuafayafk
+30
View File
@@ -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
+1
View File
@@ -0,0 +1 @@
uid://ce6cecb4wunfi
+199
View File
@@ -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")
+1
View File
@@ -0,0 +1 @@
uid://dbofvk7fso8po
+50
View File
@@ -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()
+1
View File
@@ -0,0 +1 @@
uid://dnxmn06yejksk
+39
View File
@@ -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
+1
View File
@@ -0,0 +1 @@
uid://b3rft2lmj60k0