Compare commits

...

2 Commits

Author SHA1 Message Date
Martin Felis
8e47c26ed4 Release 1.0 2024-01-28 16:42:29 +01:00
Martin Felis
fcfffe7825 UI improvements, added control descriptions 2024-01-28 16:07:43 +01:00
10 changed files with 306 additions and 94 deletions

2
.gitignore vendored
View File

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

View File

@ -1,6 +1,7 @@
[gd_scene load_steps=8 format=3 uid="uid://bfyjtfdko3l7o"]
[ext_resource type="Script" path="res://entities/Player.gd" id="1_w5gy0"]
[ext_resource type="Material" uid="uid://bxbikke5t70ff" path="res://materials/PlayerMaterial.tres" id="2_jg6ir"]
[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"]
@ -8,8 +9,6 @@
[sub_resource type="BoxMesh" id="BoxMesh_yle83"]
size = Vector3(0.24, 0.75, 0.24)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_y3fq5"]
[sub_resource type="CylinderShape3D" id="CylinderShape3D_rwgp3"]
height = 0.75
radius = 0.15
@ -23,7 +22,7 @@ script = ExtResource("1_w5gy0")
[node name="Geometry" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.472656, 0)
mesh = SubResource("BoxMesh_yle83")
surface_material_override/0 = SubResource("StandardMaterial3D_y3fq5")
surface_material_override/0 = ExtResource("2_jg6ir")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.496337, 0)

108
export_presets.cfg Normal file
View File

@ -0,0 +1,108 @@
[preset.0]
name="Linux/X11"
platform="Linux/X11"
runnable=true
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="export/DashBoomColorClash/DashBoomColorClash.x86_64"
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
encrypt_directory=false
[preset.0.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/bptc=true
texture_format/s3tc=true
texture_format/etc=false
texture_format/etc2=false
binary_format/architecture="x86_64"
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="#!/usr/bin/env bash
export DISPLAY=:0
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
\"{temp_dir}/{exe_name}\" {cmd_args}"
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
rm -rf \"{temp_dir}\""
dotnet/include_scripts_content=false
dotnet/include_debug_symbols=true
dotnet/embed_build_outputs=false
[preset.1]
name="Windows Desktop"
platform="Windows Desktop"
runnable=true
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="export/DashBoomColorClash/DashBoomColorClash.exe"
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
encrypt_directory=false
[preset.1.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/bptc=true
texture_format/s3tc=true
texture_format/etc=false
texture_format/etc2=false
binary_format/architecture="x86_64"
codesign/enable=false
codesign/timestamp=true
codesign/timestamp_server_url=""
codesign/digest_algorithm=1
codesign/description=""
codesign/custom_options=PackedStringArray()
application/modify_resources=true
application/icon="res://ui/Icon.png"
application/console_wrapper_icon=""
application/icon_interpolation=4
application/file_version=""
application/product_version=""
application/company_name=""
application/product_name=""
application/file_description=""
application/copyright=""
application/trademarks=""
application/export_angle=0
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}'
$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}'
$trigger = New-ScheduledTaskTrigger -Once -At 00:00
$settings = New-ScheduledTaskSettingsSet
$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true
Start-ScheduledTask -TaskName godot_remote_debug
while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 }
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue"
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
Remove-Item -Recurse -Force '{temp_dir}'"
dotnet/include_scripts_content=false
dotnet/include_debug_symbols=true
dotnet/embed_build_outputs=false

View File

@ -0,0 +1,3 @@
[gd_resource type="StandardMaterial3D" format=3 uid="uid://bxbikke5t70ff"]
[resource]

View File

@ -11,9 +11,15 @@ config_version=5
[application]
config/name="DashBoomColorClash"
config/description="Spread your color in the level. Use bombs to mark spots and dash to evade your opponent!"
config/version="1.0"
run/main_scene="res://scenes/Game.tscn"
config/features=PackedStringArray("4.2", "GL Compatibility")
config/icon="res://icon.svg"
config/icon="res://ui/Icon.png"
[display]
window/size/mode=3
[dotnet]
@ -74,6 +80,7 @@ ui_menu={
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194370,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":6,"pressure":0.0,"pressed":true,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":6,"pressure":0.0,"pressed":true,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"echo":false,"script":null)
]
}
move_up_p1={
@ -128,7 +135,7 @@ move_down_p2={
}
move_left_p2={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"echo":false,"script":null)
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":1,"axis":0,"axis_value":-1.0,"script":null)
]
}
@ -140,8 +147,8 @@ move_right_p2={
}
dash_p2={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194440,"key_label":0,"unicode":50,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":1,"button_index":0,"pressure":0.0,"pressed":true,"script":null)
"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":1,"button_index":0,"pressure":0.0,"pressed":true,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194440,"key_label":0,"unicode":50,"echo":false,"script":null)
]
}
bomb_p2={
@ -150,10 +157,6 @@ bomb_p2={
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":1,"button_index":1,"pressure":0.0,"pressed":true,"script":null)
]
}
move={
"deadzone": 0.5,
"events": []
}
[layer_names]

View File

@ -80,22 +80,6 @@ grow_horizontal = 2
grow_vertical = 2
theme = ExtResource("2_eun58")
[node name="Label" type="Label" parent="GameUI/GameStartupWidgets"]
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -149.0
offset_top = -128.0
offset_right = 149.0
grow_horizontal = 2
grow_vertical = 0
theme_override_font_sizes/font_size = 120
text = "Ready?"
horizontal_alignment = 1
[node name="Logo" type="Control" parent="GameUI/GameStartupWidgets"]
layout_mode = 1
anchors_preset = 8
@ -178,73 +162,94 @@ offset_bottom = -17.0
grow_vertical = 0
text = "Music: Run Amok by Kevin MacLeod | https://incompetech.com/"
[node name="GameFinishedWidgets" type="Panel" parent="GameUI"]
[node name="KeyboardControls" type="HBoxContainer" parent="GameUI/GameStartupWidgets"]
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -354.0
offset_top = -220.0
offset_right = 369.0
offset_bottom = -76.0
grow_horizontal = 2
grow_vertical = 0
[node name="GamepadControlsLabel" type="Label" parent="GameUI/GameStartupWidgets/KeyboardControls"]
layout_mode = 2
text = "Controls Gamepad:
Movement: Analog Stick
Dash: Button A / X
Bomb: Button B / O"
[node name="Player1KeyboardControlsLabel" type="Label" parent="GameUI/GameStartupWidgets/KeyboardControls"]
layout_mode = 2
text = "Player1:
Movement: W A S D
Dash: O
Bomb: P"
[node name="Player2KeyboardControlsLabel" type="Label" parent="GameUI/GameStartupWidgets/KeyboardControls"]
layout_mode = 2
text = "Player2:
Movement: ←↑→↓
Dash: Keypad 2
Bomb: Keypad 3"
[node name="GameLevelSelectWidgets" type="Panel" parent="GameUI"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme = ExtResource("2_eun58")
[node name="VBoxContainer" type="VBoxContainer" parent="GameUI/GameFinishedWidgets"]
[node name="Label" type="Label" parent="GameUI/GameLevelSelectWidgets"]
layout_mode = 1
anchors_preset = 8
anchors_preset = 5
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
offset_left = -169.0
offset_top = 76.0
offset_right = 153.0
offset_bottom = 162.0
grow_horizontal = 2
theme_override_font_sizes/font_size = 80
text = "Level Select"
[node name="LevelListContainer" type="HBoxContainer" parent="GameUI/GameLevelSelectWidgets"]
layout_mode = 1
anchors_preset = 14
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_left = -240.0
offset_top = -64.0
offset_right = 240.0
offset_bottom = 64.0
offset_top = -151.0
offset_bottom = 148.0
grow_horizontal = 2
grow_vertical = 2
[node name="Label" type="Label" parent="GameUI/GameFinishedWidgets/VBoxContainer"]
layout_mode = 2
theme_override_font_sizes/font_size = 120
text = "Game Over!"
horizontal_alignment = 1
[node name="WinnerLabel" type="Label" parent="GameUI/GameFinishedWidgets/VBoxContainer"]
layout_mode = 2
text = "Player 1 wins"
horizontal_alignment = 1
[node name="HBoxContainer" type="HBoxContainer" parent="GameUI/GameFinishedWidgets/VBoxContainer"]
layout_mode = 2
focus_next = NodePath("BasicLevelButton")
focus_mode = 2
theme_override_constants/separation = 32
alignment = 1
[node name="Player1Stats" type="VBoxContainer" parent="GameUI/GameFinishedWidgets/VBoxContainer/HBoxContainer"]
custom_minimum_size = Vector2(200, 0)
layout_direction = 2
[node name="BasicLevelButton" type="Button" parent="GameUI/GameLevelSelectWidgets/LevelListContainer"]
layout_mode = 2
toggle_mode = true
button_group = ExtResource("4_0dlh8")
icon = ExtResource("4_l63m5")
[node name="Label" type="Label" parent="GameUI/GameFinishedWidgets/VBoxContainer/HBoxContainer/Player1Stats"]
[node name="PlatformLevelButton" type="Button" parent="GameUI/GameLevelSelectWidgets/LevelListContainer"]
layout_mode = 2
text = "Player 1"
horizontal_alignment = 1
toggle_mode = true
button_group = ExtResource("4_0dlh8")
icon = ExtResource("4_0en0p")
[node name="Points" type="Label" parent="GameUI/GameFinishedWidgets/VBoxContainer/HBoxContainer/Player1Stats"]
[node name="PlatformLevelButton2" type="Button" parent="GameUI/GameLevelSelectWidgets/LevelListContainer"]
layout_mode = 2
text = "0"
horizontal_alignment = 1
[node name="Player2Stats" type="VBoxContainer" parent="GameUI/GameFinishedWidgets/VBoxContainer/HBoxContainer"]
custom_minimum_size = Vector2(200, 0)
layout_direction = 2
layout_mode = 2
[node name="Label" type="Label" parent="GameUI/GameFinishedWidgets/VBoxContainer/HBoxContainer/Player2Stats"]
layout_mode = 2
text = "Player 2"
horizontal_alignment = 1
[node name="Points" type="Label" parent="GameUI/GameFinishedWidgets/VBoxContainer/HBoxContainer/Player2Stats"]
layout_mode = 2
text = "0"
horizontal_alignment = 1
toggle_mode = true
button_group = ExtResource("4_0dlh8")
icon = ExtResource("7_8su71")
[node name="GameRunningWidgets" type="Panel" parent="GameUI"]
visible = false
@ -329,7 +334,7 @@ theme_override_font_sizes/font_size = 40
text = "00:30:00"
horizontal_alignment = 1
[node name="GameLevelSelectWidgets" type="Panel" parent="GameUI"]
[node name="GameFinishedWidgets" type="Panel" parent="GameUI"]
visible = false
layout_mode = 1
anchors_preset = 15
@ -337,34 +342,78 @@ anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme = ExtResource("2_eun58")
[node name="LevelListContainer" type="HBoxContainer" parent="GameUI/GameLevelSelectWidgets"]
[node name="VBoxContainer" type="VBoxContainer" parent="GameUI/GameFinishedWidgets"]
layout_mode = 1
anchors_preset = 14
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 1.0
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -240.0
offset_top = -64.0
offset_right = 240.0
offset_bottom = 64.0
grow_horizontal = 2
grow_vertical = 2
focus_next = NodePath("BasicLevelButton")
focus_mode = 2
theme_override_constants/separation = 32
[node name="Label" type="Label" parent="GameUI/GameFinishedWidgets/VBoxContainer"]
layout_mode = 2
theme_override_font_sizes/font_size = 120
text = "Game Over!"
horizontal_alignment = 1
[node name="WinnerLabel" type="Label" parent="GameUI/GameFinishedWidgets/VBoxContainer"]
layout_mode = 2
text = "Player 1 wins"
horizontal_alignment = 1
[node name="HBoxContainer" type="HBoxContainer" parent="GameUI/GameFinishedWidgets/VBoxContainer"]
layout_mode = 2
alignment = 1
[node name="BasicLevelButton" type="Button" parent="GameUI/GameLevelSelectWidgets/LevelListContainer"]
[node name="Player1Stats" type="VBoxContainer" parent="GameUI/GameFinishedWidgets/VBoxContainer/HBoxContainer"]
custom_minimum_size = Vector2(200, 0)
layout_direction = 2
layout_mode = 2
toggle_mode = true
button_group = ExtResource("4_0dlh8")
icon = ExtResource("4_l63m5")
[node name="PlatformLevelButton" type="Button" parent="GameUI/GameLevelSelectWidgets/LevelListContainer"]
[node name="Label" type="Label" parent="GameUI/GameFinishedWidgets/VBoxContainer/HBoxContainer/Player1Stats"]
layout_mode = 2
toggle_mode = true
button_group = ExtResource("4_0dlh8")
icon = ExtResource("4_0en0p")
text = "Player 1"
horizontal_alignment = 1
[node name="PlatformLevelButton2" type="Button" parent="GameUI/GameLevelSelectWidgets/LevelListContainer"]
[node name="Points" type="Label" parent="GameUI/GameFinishedWidgets/VBoxContainer/HBoxContainer/Player1Stats"]
layout_mode = 2
toggle_mode = true
button_group = ExtResource("4_0dlh8")
icon = ExtResource("7_8su71")
text = "0"
horizontal_alignment = 1
[node name="Player2Stats" type="VBoxContainer" parent="GameUI/GameFinishedWidgets/VBoxContainer/HBoxContainer"]
custom_minimum_size = Vector2(200, 0)
layout_direction = 2
layout_mode = 2
[node name="Label" type="Label" parent="GameUI/GameFinishedWidgets/VBoxContainer/HBoxContainer/Player2Stats"]
layout_mode = 2
text = "Player 2"
horizontal_alignment = 1
[node name="Points" type="Label" parent="GameUI/GameFinishedWidgets/VBoxContainer/HBoxContainer/Player2Stats"]
layout_mode = 2
text = "0"
horizontal_alignment = 1
[node name="Label" type="Label" parent="GameUI/GameFinishedWidgets"]
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -217.0
offset_top = -54.0
offset_right = 228.0
offset_bottom = -21.0
grow_horizontal = 2
grow_vertical = 0
text = "Press Escape/Options/Start to continue"

View File

@ -92,6 +92,8 @@ func _input(event):
if event.is_action_pressed("ui_cancel"):
if world.game_state == World.GameState.LevelSelect:
world.game_state = World.GameState.Startup
elif world.game_state == World.GameState.Startup:
get_tree().quit()
func initialize_level_buttons():
var level_button : Button = level_list_container.get_child(0)

View File

@ -11,6 +11,7 @@ var players: Array
@onready var music_stream_player: AudioStreamPlayer = $MusicAudioStreamPlayer
var player_scene = preload("res://entities/Player.tscn")
var player_override_material = preload("res://materials/PlayerMaterial.tres")
var level_scenes : Array = [
preload("res://levels/BasicLevel.tscn"),
@ -190,6 +191,7 @@ func spawn_players():
player1.move_down_action += "_p1"
player1.dash_action += "_p1"
player1.bomb_action += "_p1"
var player2: Player = player_scene.instantiate()
player2.name = "Blue"
player2.color = Color(0, 0, 1, 1)
@ -209,7 +211,17 @@ func spawn_players():
players.append(player1)
players.append(player2)
var player1_material : StandardMaterial3D = player_override_material.duplicate()
player1_material.albedo_color = player1.color
player1.geometry.set_surface_override_material(0, player1_material)
player1.name = "Red"
var player2_material : StandardMaterial3D = player_override_material.duplicate()
player2_material.albedo_color = player2.color
player2.geometry.set_surface_override_material(0, player2_material)
player2.name = "Blue"
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())

BIN
ui/Icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

34
ui/Icon.png.import Normal file
View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://78p6eeqptp1e"
path="res://.godot/imported/Icon.png-4e0acb046e84f1b83d0c49e76b0ec5a4.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://ui/Icon.png"
dest_files=["res://.godot/imported/Icon.png-4e0acb046e84f1b83d0c49e76b0ec5a4.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
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/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