Compare commits

..

No commits in common. "8238fabaa8f83d0f2c6539eaf5c48941ffb28003" and "d096da71a4d221843f9e8993c74c5ae276df780f" have entirely different histories.

17 changed files with 57 additions and 170 deletions

1
.gitignore vendored
View File

@ -1,3 +1,2 @@
# Godot 4+ specific ignores
.godot/
assets/sounds/

View File

@ -1,9 +0,0 @@
punch-1-166694.mp3
- license:
- source: https://pixabay.com/sound-effects/punch-1-166694/
- author: floraphonic (https://pixabay.com/users/floraphonic-38928062/)
whoosh-6316.mp3
- license:
- source: https://pixabay.com/sound-effects/whoosh-6316/
- author: Pixabay (https://pixabay.com/users/pixabay-1/)

View File

@ -1,19 +0,0 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://bhbhh78j5rkfe"
path="res://.godot/imported/whoosh-6316.mp3-c09ddc29973a4f106e83f9f9f20b7c35.mp3str"
[deps]
source_file="res://assets/sounds/pixabay/dash/whoosh-6316.mp3"
dest_files=["res://.godot/imported/whoosh-6316.mp3-c09ddc29973a4f106e83f9f9f20b7c35.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@ -1,19 +0,0 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://qeg12ynvjvy0"
path="res://.godot/imported/081895_impact_wav-43951.mp3-b97c4fdee4abc0cae63af4d92e0a6e8a.mp3str"
[deps]
source_file="res://assets/sounds/pixabay/explosion/081895_impact_wav-43951.mp3"
dest_files=["res://.godot/imported/081895_impact_wav-43951.mp3-b97c4fdee4abc0cae63af4d92e0a6e8a.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@ -1,4 +0,0 @@
081895_impact_wav-43951.mp3
license:
source: https://pixabay.com/sound-effects/081895-impact-wav-43951/
author: Pixabay (https://pixabay.com/users/pixabay-1/)

View File

@ -1,19 +0,0 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://b33xjins3dqpp"
path="res://.godot/imported/game-teleport-90735.mp3-112905f9f7cb1de6d452cc344a4b2de8.mp3str"
[deps]
source_file="res://assets/sounds/pixabay/sfx/game-teleport-90735.mp3"
dest_files=["res://.godot/imported/game-teleport-90735.mp3-112905f9f7cb1de6d452cc344a4b2de8.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@ -13,7 +13,7 @@ func _ready():
collision_area.connect("body_entered", on_body_enter)
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _physics_process(_delta):
func _physics_process(delta):
if processed:
queue_free()

View File

@ -1,15 +1,17 @@
[gd_scene load_steps=3 format=3 uid="uid://ck1gd38drird6"]
[gd_scene load_steps=3 format=3 uid="uid://dx6fxak21icvs"]
[ext_resource type="Script" path="res://entities/BombEmitter.gd" id="1_nvjs2"]
[ext_resource type="Script" path="res://entities/BombEmitter.gd" id="1_110pt"]
[sub_resource type="CylinderShape3D" id="CylinderShape3D_yy20u"]
[sub_resource type="CylinderShape3D" id="CylinderShape3D_7yhwp"]
height = 0.5
radius = 5.0
radius = 3.0
[node name="BombEmitter" type="Node3D"]
script = ExtResource("1_nvjs2")
script = ExtResource("1_110pt")
[node name="Area3D" type="Area3D" parent="."]
collision_layer = 0
collision_mask = 4
[node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"]
shape = SubResource("CylinderShape3D_yy20u")
shape = SubResource("CylinderShape3D_7yhwp")

View File

@ -7,16 +7,13 @@ class_name Player extends CharacterBody3D
@export var move_down_action := "move_down"
@export var move_up_action := "move_up"
@export var dash_action := "dash"
@export var bomb_action := "bomb"
@export var bomb_action := "bomp"
@export var coloring_sprite_path : NodePath
@export var coloring_bomb_sprite_path : NodePath
@onready var geometry: MeshInstance3D = $Geometry
@onready var collision: CollisionShape3D = $CollisionShape3D
@onready var dash_stream_player: AudioStreamPlayer = $DashAudioStreamPlayer
@onready var explosion_stream_player: AudioStreamPlayer = $ExplosionAudioStreamPlayer
@onready var spawn_stream_player: AudioStreamPlayer = $SpawnAudioStreamPlayer
var bomb_emitter_scene = preload("res://entities/BombEmitter.tscn")
@ -146,8 +143,6 @@ func calc_coloring_position():
func on_player_spawn():
print ("Player " + str(self) + ": spawning")
spawn_stream_player.pitch_scale = 0.8 + randf () * 0.4
spawn_stream_player.play()
func on_player_falling():
print ("Player " + str(self) + ": falling")
@ -159,17 +154,12 @@ func on_dash():
is_dashing = true;
dash_time = DASH_DURATION
energy = max (0, energy - DASH_ENERGY)
dash_stream_player.pitch_scale = 0.9 + randf () * 0.2
dash_stream_player.play()
func on_drop_bomb():
coloring_bomb_sprite.visible = true;
bomb_time = BOMB_DURATION
energy = max (0, energy - BOMB_ENERGY)
explosion_stream_player.pitch_scale = 0.6 + randf () * 0.2
explosion_stream_player.play()
var bomb_emitter : BombEmitter = bomb_emitter_scene.instantiate()
bomb_emitter.global_position = global_position
get_parent_node_3d().add_child(bomb_emitter)

View File

@ -1,9 +1,6 @@
[gd_scene load_steps=7 format=3 uid="uid://bfyjtfdko3l7o"]
[gd_scene load_steps=4 format=3 uid="uid://bfyjtfdko3l7o"]
[ext_resource type="Script" path="res://entities/Player.gd" id="1_w5gy0"]
[ext_resource type="AudioStream" uid="uid://bhbhh78j5rkfe" path="res://assets/sounds/pixabay/dash/whoosh-6316.mp3" id="2_ykhbt"]
[ext_resource type="AudioStream" uid="uid://qeg12ynvjvy0" path="res://assets/sounds/pixabay/explosion/081895_impact_wav-43951.mp3" id="3_mjsr0"]
[ext_resource type="AudioStream" uid="uid://b33xjins3dqpp" path="res://assets/sounds/pixabay/sfx/game-teleport-90735.mp3" id="4_y7abk"]
[sub_resource type="BoxMesh" id="BoxMesh_yle83"]
size = Vector3(0.24, 0.75, 0.24)
@ -18,6 +15,12 @@ collision_layer = 5
collision_mask = 7
velocity = Vector3(0, -378.927, 0)
script = ExtResource("1_w5gy0")
move_right_action = "move_right_p1"
move_left_action = "move_left_p1"
move_down_action = "move_down_p1"
move_up_action = "move_up_p1"
dash_action = "dash_p1"
bomb_action = "bomb_p1"
[node name="Geometry" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.472656, 0)
@ -26,14 +29,3 @@ mesh = SubResource("BoxMesh_yle83")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.496337, 0)
shape = SubResource("CylinderShape3D_rwgp3")
[node name="DashAudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = ExtResource("2_ykhbt")
[node name="ExplosionAudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = ExtResource("3_mjsr0")
volume_db = -15.707
pitch_scale = 0.84
[node name="SpawnAudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = ExtResource("4_y7abk")

View File

@ -11,11 +11,6 @@ func _ready():
area3d.connect("body_entered", on_player_enter)
area3d.connect("body_exited", on_player_exited)
func _process(_delta):
for player: Player in near_players:
if player.state == Player.PlayerState.Dead:
near_players.erase(player)
func on_player_enter(node: Node3D):
var player: Player = node as Player
if node == null:

View File

@ -126,7 +126,7 @@ move={
3d_physics/layer_1="World"
3d_physics/layer_2="Obstacles"
3d_physics/layer_3="Player"
3d_physics/layer_4="Clutter"
3d_physics/layer_4="Collectibles"
[rendering]

View File

@ -1,6 +1,6 @@
class_name World extends Node3D
var players: Array
@export var players: Array
@onready var score_update_timer: Timer = $ScoreUpdateTimer
@onready var pixel_count_compute_shader: PixelCountComputeShader = $PixelCountComputeShader
@ -9,8 +9,6 @@ var players: Array
@onready var level: Node3D = $Level
@onready var world_coloring_viewport: SubViewport = $WorldColoringViewport
var player_scene = preload("res://entities/Player.tscn")
const GAME_DURATION_SECONDS = 20
var camera_position: Vector3;
@ -30,16 +28,30 @@ var game_state_last : GameState = GameState.Finished
# Called when the node enters the scene tree for the first time.
func _ready():
var player1: CharacterBody3D = $Player1
var player2: CharacterBody3D = $Player2
players.append(player1)
players.append(player2)
if players.size() == 1:
world_coloring_material = load("res://materials/WorldColoringMaterialPass.tres")
world_coloring_material.set_shader_parameter("world_color_texture", world_coloring_viewport.get_texture())
else:
world_coloring_material = load("res://materials/WorldColoringMaterialPassVersus.tres")
world_coloring_material.set_shader_parameter("world_color_texture", world_coloring_viewport.get_texture())
camera_position = camera.global_position
score_update_timer.connect("timeout", update_score)
find_spawn_points(level)
spawn_players()
for player: Player in players:
player.state = player.PlayerState.Dead
apply_world_coloring_recursive(level)
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta):
if game_state_last != game_state:
@ -100,7 +112,7 @@ func _physics_process(_delta):
if not spawn_point.is_occupied():
occupied = false
player.global_position = spawn_point.global_position + Vector3.UP * 2
player.global_position = spawn_point.global_position
player.state = Player.PlayerState.Alive
spawn_point.near_players.append(player)
@ -138,56 +150,6 @@ func update_score():
if players.size() > 1:
players[1].score = pixel_count_compute_shader.blue_score
func spawn_players():
var players_node = $Players
var player1: Player = player_scene.instantiate()
player1.color = Color(1, 0, 0, 1)
player1.coloring_sprite_path = world_coloring_viewport.get_node("Player1Sprite").get_path()
player1.coloring_bomb_sprite_path = world_coloring_viewport.get_node("Player1BombSprite").get_path()
player1.move_right_action += "_p1"
player1.move_left_action += "_p1"
player1.move_up_action += "_p1"
player1.move_down_action += "_p1"
player1.dash_action += "_p1"
player1.bomb_action += "_p1"
var player2: Player = player_scene.instantiate()
player2.color = Color(0, 0, 1, 1)
player2.coloring_sprite_path = world_coloring_viewport.get_node("Player2Sprite").get_path()
player2.coloring_bomb_sprite_path = world_coloring_viewport.get_node("Player2BombSprite").get_path()
player2.move_right_action += "_p2"
player2.move_left_action += "_p2"
player2.move_up_action += "_p2"
player2.move_down_action += "_p2"
player2.dash_action += "_p2"
player2.bomb_action += "_p2"
players_node.add_child(player1)
players_node.add_child(player2)
players.clear()
players.append(player1)
players.append(player2)
if players.size() == 1:
world_coloring_material = load("res://materials/WorldColoringMaterialPass.tres")
world_coloring_material.set_shader_parameter("world_color_texture", world_coloring_viewport.get_texture())
else:
world_coloring_material = load("res://materials/WorldColoringMaterialPassVersus.tres")
world_coloring_material.set_shader_parameter("world_color_texture", world_coloring_viewport.get_texture())
for player: Player in players:
player.state = player.PlayerState.Dead
func remove_players():
var players_node = $Players
for player: Player in players_node.get_children():
player.queue_free()
players.clear()
func on_game_startup():
print("Switching to startup")
stop_gameplay()

View File

@ -1,6 +1,7 @@
[gd_scene load_steps=12 format=3 uid="uid://b1nm5h3yccr16"]
[gd_scene load_steps=13 format=3 uid="uid://b1nm5h3yccr16"]
[ext_resource type="Script" path="res://scenes/World.gd" id="1_gtcjp"]
[ext_resource type="PackedScene" uid="uid://bfyjtfdko3l7o" path="res://entities/Player.tscn" id="2_a343a"]
[ext_resource type="Texture2D" uid="uid://bnsrnuuq28p4d" path="res://assets/textures/player_draw_mask.png" id="4_dipd5"]
[ext_resource type="Texture2D" uid="uid://vcebfpqo2ko7" path="res://assets/textures/player_bomb_mask.png" id="5_17c1g"]
[ext_resource type="PackedScene" path="res://scenes/PixelCountComputeShader.tscn" id="6_75vqy"]
@ -32,6 +33,24 @@ autostart = true
[node name="PixelCountComputeShader" parent="." instance=ExtResource("6_75vqy")]
paint_viewport_path = NodePath("../WorldColoringViewport")
[node name="Player1" parent="." instance=ExtResource("2_a343a")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.121184, 0)
color = Color(1, 0, 0, 1)
coloring_sprite_path = NodePath("../WorldColoringViewport/Player1Sprite")
coloring_bomb_sprite_path = NodePath("../WorldColoringViewport/Player1BombSprite")
[node name="Player2" parent="." instance=ExtResource("2_a343a")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, -0.121184, 0)
color = Color(0, 0, 1, 1)
move_right_action = "move_right_p2"
move_left_action = "move_left_p2"
move_down_action = "move_down_p2"
move_up_action = "move_up_p2"
dash_action = "dash_p2"
bomb_action = "bomb_p2"
coloring_sprite_path = NodePath("../WorldColoringViewport/Player2Sprite")
coloring_bomb_sprite_path = NodePath("../WorldColoringViewport/Player2BombSprite")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_f3jci")
@ -117,5 +136,3 @@ player_index = 1
[node name="SpawnPointPlayer3" parent="Level" instance=ExtResource("8_ykvyf")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.55561, 0, 3.26255)
[node name="Players" type="Node3D" parent="."]