7 Commits

Author SHA1 Message Date
6dd20aff97 merged changes to main, didn't test thoroughly just skimmed hopefully it works :P 2026-03-08 19:48:00 -07:00
894f77e3cd Cleanup
Cleaning up the messy sections of my code and making the debug console output easier to read
2026-03-04 13:11:51 -08:00
bbda9768a2 Fixed projectile rotation
Fixed minor visual glitch where projectiles wouldn't be at the correct rotation after being deflected
2026-03-03 17:04:12 -08:00
ebff6dfa3e Projectiles+bounce
I hate github desktop oh my god just let me create a new branch

i gave up on creating a new branch

It wont let me move to a new branch cause it thinks there are conflicts. what the fuck is the point of that

It may say that there are conflicting files. push them through anyways, git is tweaking. I tested it myself, and the last commit to main was also from me so there's nothing to be conflicting with
2026-03-02 02:19:20 -08:00
4e127b091c Merge pull request 'enemy+wraparound' (#2) from enemy+wraparound into main
Reviewed-on: #2
2026-02-16 23:49:24 -08:00
d3eac34147 Merge pull request 'added mouse look and added a depressed elmo png for later' (#1) from Mouse-Look into main
Reviewed-on: #1
2026-02-16 23:47:46 -08:00
a93f163b85 Added a basic monk enemy that always looks at the player
Also added a feature so it will wrap around if the player gets too far
2026-02-16 20:09:20 -08:00
20 changed files with 403 additions and 7 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bsjn11wcewgya"
path="res://.godot/imported/Blob.png-3a1a5deaf3590dc1853ac0b0bd158753.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Assets/PlaceHolders/Blob.png"
dest_files=["res://.godot/imported/Blob.png-3a1a5deaf3590dc1853ac0b0bd158753.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://xg0mu5mtpcgo"
path="res://.godot/imported/BuffMonk.png-1bcf3f620dedfe8f64fe9de0addc56fe.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Assets/PlaceHolders/BuffMonk.png"
dest_files=["res://.godot/imported/BuffMonk.png-1bcf3f620dedfe8f64fe9de0addc56fe.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 470 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dfo7q0g3skud5"
path="res://.godot/imported/FallGuy.png-02f4a1ba0f67e389b5e6e02f7fee4c6c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Assets/PlaceHolders/FallGuy.png"
dest_files=["res://.godot/imported/FallGuy.png-02f4a1ba0f67e389b5e6e02f7fee4c6c.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

25
block/Scenes/Enemy1.tscn Normal file
View File

@@ -0,0 +1,25 @@
[gd_scene format=3 uid="uid://db1oeukux1376"]
[ext_resource type="Texture2D" uid="uid://xg0mu5mtpcgo" path="res://Assets/PlaceHolders/BuffMonk.png" id="1_g6sln"]
[ext_resource type="Script" uid="uid://d34snqiuscbv8" path="res://Scenes/enemy_1.gd" id="1_s7od6"]
[ext_resource type="PackedScene" uid="uid://b3ngjk0lkeemd" path="res://Scenes/Projectile_1.tscn" id="2_n3m8v"]
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_g6sln"]
[node name="Enemy1" type="CharacterBody2D" unique_id=1765361359]
script = ExtResource("1_s7od6")
Projectile = ExtResource("2_n3m8v")
[node name="Sprite2D" type="Sprite2D" parent="." unique_id=93765061]
position = Vector2(22, -29)
scale = Vector2(0.3, 0.3)
texture = ExtResource("1_g6sln")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1856443411]
scale = Vector2(6, 6)
shape = SubResource("CapsuleShape2D_g6sln")
[node name="DirectionTimer" type="Timer" parent="." unique_id=509704860]
autostart = true
[connection signal="timeout" from="DirectionTimer" to="." method="_on_timer_timeout"]

11
block/Scenes/MapTest.tscn Normal file
View File

@@ -0,0 +1,11 @@
[gd_scene format=3 uid="uid://d3m22yqoyvo4t"]
[ext_resource type="PackedScene" uid="uid://b448mpav6ek52" path="res://Scenes/arena_game_manager.tscn" id="1_0tjoe"]
[ext_resource type="PackedScene" uid="uid://db1oeukux1376" path="res://Scenes/Enemy1.tscn" id="2_pddb8"]
[node name="MapTest" type="Node2D" unique_id=2115555896]
[node name="ArenaGameManager" parent="." unique_id=1024187604 instance=ExtResource("1_0tjoe")]
[node name="Enemy1" parent="." unique_id=1765361359 instance=ExtResource("2_pddb8")]
position = Vector2(379, 168)

View File

@@ -0,0 +1,26 @@
extends Node2D
const speed = 200
@onready var player: CharacterBody2D = get_tree().get_first_node_in_group("player")
var direction = Vector2.RIGHT
#var debug_normal: Vector2 = Vector2.ZERO
func _ready() -> void:
direction = (player.global_position - global_position).normalized()
global_rotation=direction.angle()
func _process(delta: float) -> void:
position += direction * speed * delta
func get_facing_direction():
var direction_vector = Vector2.from_angle(rotation)
return direction_vector
func changeDirection(normal: Vector2):
direction = normal
rotation = direction.angle()
# Debug function
func _draw():
# draw_line(Vector2(1,0) * 1000, debug_normal * 50, Color.RED, 2.0)
pass

View File

@@ -0,0 +1 @@
uid://bxqq5rcm0twuk

View File

@@ -0,0 +1,34 @@
[gd_scene format=3 uid="uid://b3ngjk0lkeemd"]
[ext_resource type="Texture2D" uid="uid://bsjn11wcewgya" path="res://Assets/PlaceHolders/Blob.png" id="1_1rre0"]
[ext_resource type="Script" uid="uid://bxqq5rcm0twuk" path="res://Scenes/Projectile_1.gd" id="1_lrei0"]
[sub_resource type="GDScript" id="GDScript_4ipem"]
script/source = "extends Area2D
# Called when the node enters the scene tree for the first time.
#func _ready() -> void:
# pass # Replace with function body.
"
[sub_resource type="CircleShape2D" id="CircleShape2D_v0834"]
[node name="Projectile1" type="Node2D" unique_id=1531719161]
script = ExtResource("1_lrei0")
[node name="Area2D" type="Area2D" parent="." unique_id=1629546418 groups=["Projectiles"]]
collision_layer = 2
collision_mask = 2
script = SubResource("GDScript_4ipem")
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D" unique_id=286593893]
scale = Vector2(1.1, 1.1)
shape = SubResource("CircleShape2D_v0834")
[node name="Sprite2D" type="Sprite2D" parent="Area2D" unique_id=1983633174]
position = Vector2(-0.9999995, 1)
scale = Vector2(0.17, 0.17)
texture = ExtResource("1_1rre0")

54
block/Scenes/enemy_1.gd Normal file
View File

@@ -0,0 +1,54 @@
extends CharacterBody2D
class_name Enemy1
enum States
{
IDLE,
ROAM,
CHASE,
ATTACK,
TAKING_DAMMAGE,
DEAD
}
const max_distance = 750
const SPEED = 300.0
var is_enemy_chase: bool
var health = 100
var health_max = 100
var health_min = 0
var attack_dammage = 10
var dir: Vector2
var knockback = 200
var current_state = States.IDLE
@onready var player: CharacterBody2D = get_tree().get_first_node_in_group("player")
@export var Projectile: PackedScene
func _on_timer_timeout() -> void:
$DirectionTimer.wait_time = chose([1,2,3])
if current_state !=States.CHASE:
dir = chose([Vector2.RIGHT, Vector2.LEFT])
var newProjectile = Projectile.instantiate() as Node2D
newProjectile.global_position=global_position
# newProjectile.global_rotation=global_rotation
get_tree().current_scene.add_child(newProjectile)
func chose(array):
array.shuffle()
return array.front()
func wraparound():
var direction = global_position.direction_to(player.global_position)
global_position += direction * max_distance*2
func _process(delta: float) -> void:
look_at(player.global_position)
#print(player.global_position)
var distance = global_position.distance_to(player.global_position)
if distance>max_distance:
wraparound()

View File

@@ -0,0 +1 @@
uid://d34snqiuscbv8

View File

@@ -1,7 +1,11 @@
[gd_scene format=3 uid="uid://du7hapc7kscm6"]
[ext_resource type="PackedScene" uid="uid://b448mpav6ek52" path="res://Scenes/arena_game_manager.tscn" id="1_ebmjs"]
[ext_resource type="PackedScene" uid="uid://db1oeukux1376" path="res://Scenes/Enemy1.tscn" id="2_qxrlw"]
[node name="Game" type="Node2D" unique_id=850692785]
[node name="ArenaGameManager" parent="." unique_id=1024187604 instance=ExtResource("1_ebmjs")]
[node name="Enemy1" parent="." unique_id=1765361359 instance=ExtResource("2_qxrlw")]
position = Vector2(297, 101)

View File

@@ -17,7 +17,8 @@ func _process(_delta: float) -> void:
move_and_slide()
# look_at(get_global_mouse_position()) # uncompensated mouse control
var angle_to_mouse = get_angle_to(get_global_mouse_position())
rotation += angle_to_mouse + deg_to_rad(90) #+90 to makes top of image face mouse, not side
look_at(get_global_mouse_position())
#OLD: used when player shield direction aigned 90 deg off from front
# var angle_to_mouse = get_angle_to(get_global_mouse_position())
# rotation += angle_to_mouse# + deg_to_rad(90) #+90 to makes top of image face mouse, not side

View File

@@ -2,16 +2,40 @@
[ext_resource type="Script" uid="uid://bah031ailk0ha" path="res://Scenes/player.gd" id="1_cvnsp"]
[ext_resource type="Texture2D" uid="uid://g0m835iol4mp" path="res://Assets/PlaceHolders/Screenshot 2024-11-24 210808.png" id="1_v0iea"]
[ext_resource type="Texture2D" uid="uid://bcmuqd6p3jhdw" path="res://Assets/PlaceHolders/Elmo.png" id="3_6t5aa"]
[ext_resource type="Script" uid="uid://b7vgyn15fioeu" path="res://Scenes/shield_hitbox.gd" id="4_vgqql"]
[sub_resource type="CircleShape2D" id="CircleShape2D_v0iea"]
[node name="CharacterBody2D" type="CharacterBody2D" unique_id=1419412180]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_6t5aa"]
[node name="Player" type="CharacterBody2D" unique_id=1419412180 groups=["player"]]
script = ExtResource("1_cvnsp")
[node name="Sprite2D" type="Sprite2D" parent="." unique_id=719417979]
[node name="Body" type="Sprite2D" parent="." unique_id=719417979]
scale = Vector2(0.114894986, 0.11449075)
texture = ExtResource("1_v0iea")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1477808378]
[node name="BodyColision" type="CollisionShape2D" parent="." unique_id=1477808378]
scale = Vector2(4.2653956, 4.2653956)
shape = SubResource("CircleShape2D_v0iea")
[node name="Shield" type="Sprite2D" parent="." unique_id=212386399]
position = Vector2(50, 0)
scale = Vector2(0.15, 0.15)
texture = ExtResource("3_6t5aa")
[node name="ShieldColision" type="CollisionShape2D" parent="." unique_id=948717563]
position = Vector2(50, 0)
scale = Vector2(2.5, 6)
shape = SubResource("RectangleShape2D_6t5aa")
[node name="ShieldHitbox" type="Area2D" parent="." unique_id=2121529100]
collision_layer = 2
collision_mask = 2
script = ExtResource("4_vgqql")
[node name="ShieldHitboxCol" type="CollisionShape2D" parent="ShieldHitbox" unique_id=1829894325]
position = Vector2(50, 0)
scale = Vector2(2.5, 6)
shape = SubResource("RectangleShape2D_6t5aa")

View File

@@ -0,0 +1,32 @@
extends Area2D
var debug_normal: Vector2 = Vector2.ZERO
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
area_entered.connect(_on_area_entered)
func _on_area_entered(area):
if area.is_in_group("Projectiles"):
print("Event: Projectile hit shield")
var shield_normal = global_transform.x.normalized()
print("Readout: Shield normal: ", Vec2str(shield_normal))
# Gets the direction from the parent Node2D NOT the Area2d component
var projectile_velocity = area.get_parent().get_facing_direction()
print("Readout: Projectile dir: ", Vec2str(projectile_velocity))
var bounceTrajectory = projectile_velocity.bounce(shield_normal)
print("Readout: Bounce dir: ", Vec2str(bounceTrajectory))
if area.get_parent().has_method("changeDirection"):
area.get_parent().changeDirection(bounceTrajectory)
# Debug functions
func _draw():
# draw_line(Vector2(1,0) * 1000, debug_normal * 50, Color.RED, 2.0) # normal
pass
# Makes the string a bit easier to read in debug console
func Vec2str(vec: Vector2) -> String:
var x_sign = " " if vec.x >= 0 else ""
var y_sign = " " if vec.y >= 0 else ""
return "(%s%.2f, %s%.2f)" % [x_sign, vec.x, y_sign, vec.y]

View File

@@ -0,0 +1 @@
uid://b7vgyn15fioeu

View File

@@ -15,6 +15,11 @@ run/main_scene="uid://du7hapc7kscm6"
config/features=PackedStringArray("4.6", "Forward Plus")
config/icon="res://icon.svg"
[global_group]
player="Making this for an easy reference to the player in the enemies code"
Projectiles="Tell if the object is a projectile or not"
[input]
move_up={

View File

@@ -12,3 +12,60 @@ Done
Current imported assests:
https://screamingbrainstudios.itch.io/tiny-texture-pack
x1*x2+y1*y2
along normal speedx*sp
var proje_normal = global_transform.x.normalized()
#proje_normal.y = -proje_normal.y
print("Proje Normal: ", proje_normal)
var speed_perp: float = proje_normal.dot(normal)
var perp_line: Vector2 = Vector2(normal.y,-normal.x)
var speed_para: float = proje_normal.dot(perp_line)
print("speed perp: ", speed_perp)
print("speed para: ", speed_para)
# this is just to check my math
# should be aproximately 1 (there will be some bit depth precision errors)
print("speed hype: ", speed_para*speed_para + speed_perp*speed_perp)
var newDirection: Vector2 = Vector2(
(speed_perp * normal.x) + (speed_para * normal.y),
(speed_perp * normal.y) + (speed_para *-normal.x))
var projectile_velocity = area.get_parent().get_facing_direction()
print("projectile speed......................", projectile_velocity)
var shield_normal = global_transform.x.normalized()
print("Shield Normal: ", shield_normal)
#shield_normal.y = -shield_normal.y
# if abs(projectile_velocity.y)>abs(projectile_velocity.x):
# shield_normal = global_transform.y.normalized()
#shield_normal.y = -shield_normal.y
#shield_normal.x = -shield_normal.x
# var shield_perp = Vector2(shield_normal.y,-shield_normal.x)
# if area.has_method("bounce"):
# if projectile_velocity.dot(shield_perp) < 0:
# area.bounce(shield_normal)
if area.has_method("bounce"):
#if projectile_velocity.dot(shield_normal) < 0:
area.bounce(shield_normal)