Compare commits

..

No commits in common. "dfb5ecd2db1ab6df81c4d91891db8e8c0a072249" and "3bb8a97f6d25d549c9b39979bb8e8c204ebd3bc9" have entirely different histories.

21 changed files with 44 additions and 168 deletions

1
.gitignore vendored
View File

@ -1,4 +1,3 @@
build/ build/
.import/ .import/
assets/export/*.import assets/export/*.import
*.import

View File

@ -1,8 +1,10 @@
1. Visual polish 1. Visual polish
* visual indication when a unit is stronger (eg. a little skull or star or something)
* multiple square tiles to add variation * multiple square tiles to add variation
* make the help text indicate (flash, etc.)
* visual indications when damage is done but a unit isn't killed
* visual indication when a unit is stronger (eg. a little skull or star or something)
2. Sound effects 2. Sound effects
* when a unit is killed * on hit, especially when the unit isn't killed
* if possible, a small bit of background music * if possible, a small bit of background music
3. Gameplay additions: 3. Gameplay additions:
* powerups: change movement type, remove pawn's attack and movement restrictions * powerups: change movement type, remove pawn's attack and movement restrictions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,75 +1,7 @@
<?xml version="1.0" standalone="no" ?> <?xml version="1.0" standalone="no" ?>
<!DOCTYPE project PUBLIC "-//audacityproject-1.3.0//DTD//EN" "http://audacity.sourceforge.net/xml/audacityproject-1.3.0.dtd" > <!DOCTYPE project PUBLIC "-//audacityproject-1.3.0//DTD//EN" "http://audacity.sourceforge.net/xml/audacityproject-1.3.0.dtd" >
<project xmlns="http://audacity.sourceforge.net/xml/" projname="voice_clips_data" version="1.3.0" audacityversion="2.4.2" sel0="0.1044897959" sel1="0.1625396825" vpos="0" h="0.0000000000" zoom="86.1328125000" rate="44100.0" snapto="off" selectionformat="hh:mm:ss + milliseconds" frequencyformat="Hz" bandwidthformat="octaves"> <project xmlns="http://audacity.sourceforge.net/xml/" projname="voice_clips_data" version="1.3.0" audacityversion="2.4.2" sel0="0.0000000000" sel1="0.0000000000" vpos="0" h="30.8477097506" zoom="86.1328125000" rate="44100.0" snapto="off" selectionformat="hh:mm:ss + milliseconds" frequencyformat="Hz" bandwidthformat="octaves">
<tags/> <tags/>
<wavetrack name="Audio Track" isSelected="0" height="150" minimized="0" channel="0" linked="1" mute="0" solo="1" rate="44100" gain="1.0" pan="0.0" colorindex="0">
<waveclip offset="0.00000000" colorindex="0">
<sequence maxsamples="262144" sampleformat="262159" numsamples="12800">
<waveblock start="0">
<simpleblockfile filename="eff1f023.au" len="12800" min="-0.503601" max="0.707655" rms="0.04372"/>
</waveblock>
</sequence>
<envelope numpoints="0"/>
</waveclip>
<waveclip offset="1.01006803" colorindex="0">
<sequence maxsamples="262144" sampleformat="262159" numsamples="17408">
<waveblock start="0">
<simpleblockfile filename="eff1f4ba.au" len="17408" min="-1.269999" max="1.343039" rms="0.137565"/>
</waveblock>
</sequence>
<envelope numpoints="0"/>
</waveclip>
<waveclip offset="2.03174603" colorindex="0">
<sequence maxsamples="262144" sampleformat="262159" numsamples="14336">
<waveblock start="0">
<simpleblockfile filename="eff1ff3d.au" len="14336" min="-1.154202" max="1.230705" rms="0.072907"/>
</waveblock>
</sequence>
<envelope numpoints="0"/>
</waveclip>
<waveclip offset="3.01859410" colorindex="0">
<sequence maxsamples="262144" sampleformat="262159" numsamples="18944">
<waveblock start="0">
<simpleblockfile filename="eff1f3b6.au" len="18944" min="-1.430278" max="1.277689" rms="0.162329"/>
</waveblock>
</sequence>
<envelope numpoints="0"/>
</waveclip>
</wavetrack>
<wavetrack name="Audio Track" isSelected="0" height="150" minimized="0" channel="1" linked="0" mute="0" solo="1" rate="44100" gain="1.0" pan="0.0" colorindex="0">
<waveclip offset="0.00000000" colorindex="0">
<sequence maxsamples="262144" sampleformat="262159" numsamples="12800">
<waveblock start="0">
<simpleblockfile filename="eff1f4a9.au" len="12800" min="-0.507655" max="0.715664" rms="0.044112"/>
</waveblock>
</sequence>
<envelope numpoints="0"/>
</waveclip>
<waveclip offset="1.01006803" colorindex="0">
<sequence maxsamples="262144" sampleformat="262159" numsamples="17408">
<waveblock start="0">
<simpleblockfile filename="eff1f808.au" len="17408" min="-1.273832" max="1.353467" rms="0.138377"/>
</waveblock>
</sequence>
<envelope numpoints="0"/>
</waveclip>
<waveclip offset="2.03174603" colorindex="0">
<sequence maxsamples="262144" sampleformat="262159" numsamples="14336">
<waveblock start="0">
<simpleblockfile filename="eff1f671.au" len="14336" min="-1.118351" max="1.221182" rms="0.073425"/>
</waveblock>
</sequence>
<envelope numpoints="0"/>
</waveclip>
<waveclip offset="3.01859410" colorindex="0">
<sequence maxsamples="262144" sampleformat="262159" numsamples="18944">
<waveblock start="0">
<simpleblockfile filename="eff1fc1b.au" len="18944" min="-1.431384" max="1.275673" rms="0.163134"/>
</waveblock>
</sequence>
<envelope numpoints="0"/>
</waveclip>
</wavetrack>
<wavetrack name="Audio Track" isSelected="1" height="150" minimized="0" channel="0" linked="1" mute="1" solo="0" rate="44100" gain="1.0" pan="0.0" colorindex="0"/> <wavetrack name="Audio Track" isSelected="1" height="150" minimized="0" channel="0" linked="1" mute="1" solo="0" rate="44100" gain="1.0" pan="0.0" colorindex="0"/>
<wavetrack name="Audio Track" isSelected="1" height="150" minimized="0" channel="1" linked="0" mute="1" solo="0" rate="44100" gain="1.0" pan="0.0" colorindex="0"/> <wavetrack name="Audio Track" isSelected="1" height="150" minimized="0" channel="1" linked="0" mute="1" solo="0" rate="44100" gain="1.0" pan="0.0" colorindex="0"/>
<wavetrack name="Audio Track" isSelected="0" height="150" minimized="0" channel="0" linked="1" mute="1" solo="0" rate="44100" gain="1.0" pan="0.0" colorindex="0"> <wavetrack name="Audio Track" isSelected="0" height="150" minimized="0" channel="0" linked="1" mute="1" solo="0" rate="44100" gain="1.0" pan="0.0" colorindex="0">
@ -192,7 +124,7 @@
<envelope numpoints="0"/> <envelope numpoints="0"/>
</waveclip> </waveclip>
</wavetrack> </wavetrack>
<wavetrack name="Audio Track" isSelected="0" height="150" minimized="0" channel="0" linked="1" mute="1" solo="0" rate="44100" gain="1.0" pan="0.0" colorindex="0"> <wavetrack name="Audio Track" isSelected="0" height="150" minimized="0" channel="0" linked="1" mute="0" solo="1" rate="44100" gain="1.0" pan="0.0" colorindex="0">
<waveclip offset="0.00000000" colorindex="0"> <waveclip offset="0.00000000" colorindex="0">
<sequence maxsamples="262144" sampleformat="262159" numsamples="42496"> <sequence maxsamples="262144" sampleformat="262159" numsamples="42496">
<waveblock start="0"> <waveblock start="0">
@ -202,7 +134,7 @@
<envelope numpoints="0"/> <envelope numpoints="0"/>
</waveclip> </waveclip>
</wavetrack> </wavetrack>
<wavetrack name="Audio Track" isSelected="0" height="150" minimized="0" channel="1" linked="0" mute="1" solo="0" rate="44100" gain="1.0" pan="0.0" colorindex="0"> <wavetrack name="Audio Track" isSelected="0" height="150" minimized="0" channel="1" linked="0" mute="0" solo="1" rate="44100" gain="1.0" pan="0.0" colorindex="0">
<waveclip offset="0.00000000" colorindex="0"> <waveclip offset="0.00000000" colorindex="0">
<sequence maxsamples="262144" sampleformat="262159" numsamples="42496"> <sequence maxsamples="262144" sampleformat="262159" numsamples="42496">
<waveblock start="0"> <waveblock start="0">

View File

@ -55,13 +55,6 @@ const piece_types = {
"queen": "res://src/pieces/Queen.tscn", "queen": "res://src/pieces/Queen.tscn",
} }
const hit_sounds = [
"/root/Game/Hit1",
"/root/Game/Hit2",
"/root/Game/Hit3",
"/root/Game/Hit4",
]
func new_piece(piece_type, group, position = null): func new_piece(piece_type, group, position = null):
if not piece_types.has(piece_type): if not piece_types.has(piece_type):
return null return null
@ -501,13 +494,9 @@ func _process(delta):
if self.flash_help != null: if self.flash_help != null:
if self.flash_help > 0: if self.flash_help > 0:
self.flash_help -= delta self.flash_help -= delta
get_node("BottomBar/Help").set_modulate(
lerp(Color(1, 1, 1, 1), Color(1, .63, .12, 1), self.flash_help)
)
else: else:
self._reset_help() self._reset_help()
self.flash_help = null self.flash_help = null
get_node("BottomBar/Help").set_modulate(Color(1, 1, 1, 1))
var opponent_pieces = get_tree().get_nodes_in_group("opponent") var opponent_pieces = get_tree().get_nodes_in_group("opponent")
if opponent_pieces.empty() or get_tree().get_nodes_in_group("player").empty() and self.current_state != 99: if opponent_pieces.empty() or get_tree().get_nodes_in_group("player").empty() and self.current_state != 99:
# The game is over # The game is over
@ -543,11 +532,8 @@ func _process(delta):
else: else:
# Deal damage # Deal damage
target_square['piece'].health -= square['piece'].damage target_square['piece'].health -= square['piece'].damage
var idx = self.rng.randi() % self.hit_sounds.size() # @TODO Sound effect
get_node(self.hit_sounds[idx]).play() # @TODO Visual indication of damage dealt
target_square['piece'].set_status(
"-" + str(square['piece'].damage), 2, Color(1, 0, 0, 1), Color(1, 0, 0, 0)
)
# Bounce piece back # Bounce piece back
target_square = square target_square = square
square['piece'] = null square['piece'] = null
@ -641,11 +627,8 @@ func _physics_process(delta):
print("ai loss Chance to play: ", c, " got index ", index_to_play) print("ai loss Chance to play: ", c, " got index ", index_to_play)
get_node(self.on_ai_lose_piece[index_to_play]).play() get_node(self.on_ai_lose_piece[index_to_play]).play()
else: else:
var idx = self.rng.randi() % self.hit_sounds.size() # @TODO Play a sound effect
get_node(self.hit_sounds[idx]).play() # @TODO Visual indication of damage dealt
dest_square['piece'].set_status(
"-" + str(square['piece'].damage), 2, Color(1, 0, 0, 1), Color(1, 0, 0, 0)
)
dest_square['piece'].health -= square['piece'].damage dest_square['piece'].health -= square['piece'].damage
dest_square = square dest_square = square
square['piece'] = null square['piece'] = null

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=26 format=2] [gd_scene load_steps=22 format=2]
[ext_resource path="res://src/Game.gd" type="Script" id=1] [ext_resource path="res://src/Game.gd" type="Script" id=1]
[ext_resource path="res://src/Playfield.tscn" type="PackedScene" id=2] [ext_resource path="res://src/Playfield.tscn" type="PackedScene" id=2]
@ -18,14 +18,9 @@
[ext_resource path="res://assets/export/skip_disabled.png" type="Texture" id=16] [ext_resource path="res://assets/export/skip_disabled.png" type="Texture" id=16]
[ext_resource path="res://assets/export/skip_hover.png" type="Texture" id=17] [ext_resource path="res://assets/export/skip_hover.png" type="Texture" id=17]
[ext_resource path="res://src/PieceDetails.tscn" type="PackedScene" id=18] [ext_resource path="res://src/PieceDetails.tscn" type="PackedScene" id=18]
[ext_resource path="res://assets/export/hit2.wav" type="AudioStream" id=19]
[ext_resource path="res://assets/export/hit1.wav" type="AudioStream" id=20]
[ext_resource path="res://assets/export/hit3.wav" type="AudioStream" id=21]
[ext_resource path="res://assets/export/hit4.wav" type="AudioStream" id=22]
[sub_resource type="DynamicFont" id=1] [sub_resource type="DynamicFont" id=1]
size = 24 size = 24
outline_color = Color( 1, 0.635294, 0.121569, 1 )
font_data = ExtResource( 4 ) font_data = ExtResource( 4 )
[sub_resource type="DynamicFont" id=2] [sub_resource type="DynamicFont" id=2]
@ -239,18 +234,6 @@ margin_bottom = 14.0
__meta__ = { __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }
[node name="Hit1" type="AudioStreamPlayer" parent="."]
stream = ExtResource( 20 )
[node name="Hit2" type="AudioStreamPlayer" parent="."]
stream = ExtResource( 19 )
[node name="Hit3" type="AudioStreamPlayer" parent="."]
stream = ExtResource( 21 )
[node name="Hit4" type="AudioStreamPlayer" parent="."]
stream = ExtResource( 22 )
[connection signal="finished" from="EndSong" to="." method="_on_EndSong_finished"] [connection signal="finished" from="EndSong" to="." method="_on_EndSong_finished"]
[connection signal="finished" from="Yammering" to="." method="_on_Yammering_finished"] [connection signal="finished" from="Yammering" to="." method="_on_Yammering_finished"]
[connection signal="finished" from="Dust" to="." method="_on_Dust_finished"] [connection signal="finished" from="Dust" to="." method="_on_Dust_finished"]

View File

@ -22,20 +22,6 @@ const CLICK_THRESHOLD = 0.15 # seconds
var last_click = null var last_click = null
var hold_started = false var hold_started = false
var status_timer_max = 0
var status_timer = 0
var status_color_start = Color(1, 1, 1, 1)
var status_color_end = Color(1, 1, 1, 0)
func set_status(message, time, c1: Color = Color(1, 1, 1, 1), c2: Color = Color(1, 1, 1, 0)):
self.status_timer = time
self.status_timer_max = time
self.status_color_start = c1
self.status_color_end = c2
get_node("StatusChange").set_modulate(c1)
get_node("StatusChange").set_text(message)
get_node("StatusChange").set_visible(true)
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready(): func _ready():
pass pass
@ -80,13 +66,7 @@ func _process(delta):
emit_signal("hold_start", self, null) emit_signal("hold_start", self, null)
if self.hold_started: if self.hold_started:
self.set_global_position(get_viewport().get_mouse_position()) self.set_global_position(get_viewport().get_mouse_position())
if self.status_timer > 0:
self.status_timer -= delta
if self.status_timer <= 0:
get_node("StatusChange").set_visible(false)
get_node("StatusChange").set_modulate(
lerp(self.status_color_end, self.status_color_start, self.status_timer / self.status_timer_max)
)
func cancel_hold(): func cancel_hold():
self.last_click = null self.last_click = null
self.hold_started = false self.hold_started = false

View File

@ -85,15 +85,16 @@ custom_fonts/font = ExtResource( 1 )
text = "1 " text = "1 "
[node name="UpHealth" type="Button" parent="Vbox"] [node name="UpHealth" type="Button" parent="Vbox"]
visible = false
margin_top = 219.0 margin_top = 219.0
margin_right = 190.0 margin_right = 190.0
margin_bottom = 239.0 margin_bottom = 239.0
text = "Increase health" text = "Increase health"
[node name="Damage" type="HBoxContainer" parent="Vbox"] [node name="Damage" type="HBoxContainer" parent="Vbox"]
margin_top = 243.0 margin_top = 219.0
margin_right = 190.0 margin_right = 190.0
margin_bottom = 307.0 margin_bottom = 283.0
[node name="TextureRect" type="TextureRect" parent="Vbox/Damage"] [node name="TextureRect" type="TextureRect" parent="Vbox/Damage"]
material = ExtResource( 3 ) material = ExtResource( 3 )
@ -117,9 +118,9 @@ margin_bottom = 307.0
text = "Increase damage" text = "Increase damage"
[node name="Kills" type="HBoxContainer" parent="Vbox"] [node name="Kills" type="HBoxContainer" parent="Vbox"]
margin_top = 311.0 margin_top = 287.0
margin_right = 190.0 margin_right = 190.0
margin_bottom = 375.0 margin_bottom = 351.0
[node name="TextureRect" type="TextureRect" parent="Vbox/Kills"] [node name="TextureRect" type="TextureRect" parent="Vbox/Kills"]
material = ExtResource( 3 ) material = ExtResource( 3 )
@ -136,23 +137,24 @@ custom_fonts/font = ExtResource( 1 )
text = "1" text = "1"
[node name="Jump" type="Label" parent="Vbox"] [node name="Jump" type="Label" parent="Vbox"]
margin_top = 379.0 margin_top = 355.0
margin_right = 190.0 margin_right = 190.0
margin_bottom = 403.0 margin_bottom = 379.0
custom_fonts/font = SubResource( 1 ) custom_fonts/font = SubResource( 1 )
text = "Cannot jump" text = "Cannot jump"
[node name="CheckButton" type="CheckButton" parent="Vbox"] [node name="CheckButton" type="CheckButton" parent="Vbox"]
margin_top = 407.0 visible = false
margin_top = 383.0
margin_right = 190.0 margin_right = 190.0
margin_bottom = 447.0 margin_bottom = 423.0
text = "Jump" text = "Jump"
[node name="Powerup" type="Button" parent="Vbox"] [node name="Powerup" type="Button" parent="Vbox"]
visible = false visible = false
margin_top = 427.0 margin_top = 383.0
margin_right = 190.0 margin_right = 190.0
margin_bottom = 447.0 margin_bottom = 403.0
text = "Spawn powerup" text = "Spawn powerup"
[connection signal="pressed" from="Vbox/UpMovement" to="." method="_on_UpMovement_pressed"] [connection signal="pressed" from="Vbox/UpMovement" to="." method="_on_UpMovement_pressed"]
[connection signal="pressed" from="Vbox/UpHealth" to="." method="_on_UpHealth_pressed"] [connection signal="pressed" from="Vbox/UpHealth" to="." method="_on_UpHealth_pressed"]

View File

@ -1,17 +1,25 @@
[gd_scene load_steps=4 format=2] [gd_scene load_steps=6 format=2]
[ext_resource path="res://src/pieces/Piece.tscn" type="PackedScene" id=1] [ext_resource path="res://src/hilight.shader" type="Shader" id=1]
[ext_resource path="res://src/pieces/Pawn.gd" type="Script" id=2] [ext_resource path="res://src/pieces/Pawn.gd" type="Script" id=2]
[ext_resource path="res://assets/export/pawn.png" type="Texture" id=3] [ext_resource path="res://assets/export/pawn.png" type="Texture" id=3]
[node name="Piece" instance=ExtResource( 1 )] [sub_resource type="ShaderMaterial" id=1]
shader = ExtResource( 1 )
shader_param/width = 2.0
shader_param/color = null
[sub_resource type="RectangleShape2D" id=2]
extents = Vector2( 128, 128 )
[node name="Piece" type="Area2D"]
script = ExtResource( 2 ) script = ExtResource( 2 )
[node name="Body" parent="." index="0"] [node name="Body" type="Sprite" parent="."]
material = SubResource( 1 )
texture = ExtResource( 3 ) texture = ExtResource( 3 )
[node name="StatusChange" parent="." index="2"] [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
margin_left = 0.902771 modulate = Color( 0.345098, 0.980392, 0.0862745, 1 )
margin_top = -73.0833 shape = SubResource( 2 )
margin_right = 81.9028 [connection signal="input_event" from="." to="." method="_on_Piece_input_event"]
margin_bottom = -0.0833435

View File

@ -1,8 +1,7 @@
[gd_scene load_steps=6 format=2] [gd_scene load_steps=5 format=2]
[ext_resource path="res://src/Piece.gd" type="Script" id=1] [ext_resource path="res://src/Piece.gd" type="Script" id=1]
[ext_resource path="res://src/hilight.shader" type="Shader" id=2] [ext_resource path="res://src/hilight.shader" type="Shader" id=2]
[ext_resource path="res://src/font_32.tres" type="DynamicFont" id=3]
[sub_resource type="ShaderMaterial" id=1] [sub_resource type="ShaderMaterial" id=1]
shader = ExtResource( 2 ) shader = ExtResource( 2 )
@ -10,7 +9,7 @@ shader_param/width = 2.0
shader_param/color = null shader_param/color = null
[sub_resource type="RectangleShape2D" id=2] [sub_resource type="RectangleShape2D" id=2]
extents = Vector2( 64, 64 ) extents = Vector2( 128, 128 )
[node name="Piece" type="Area2D"] [node name="Piece" type="Area2D"]
script = ExtResource( 1 ) script = ExtResource( 1 )
@ -20,16 +19,4 @@ material = SubResource( 1 )
[node name="CollisionShape2D" type="CollisionShape2D" parent="."] [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
shape = SubResource( 2 ) shape = SubResource( 2 )
[node name="StatusChange" type="Label" parent="."]
margin_left = 45.0
margin_top = -126.0
margin_right = 126.0
margin_bottom = -53.0
custom_fonts/font = ExtResource( 3 )
align = 1
valign = 1
__meta__ = {
"_edit_use_anchors_": false
}
[connection signal="input_event" from="." to="." method="_on_Piece_input_event"] [connection signal="input_event" from="." to="." method="_on_Piece_input_event"]