diff --git a/02-06-game-juice/FX/ActiveJuices.gd b/02-06-game-juice/FX/ActiveJuices.gd new file mode 100644 index 0000000..bf12e25 --- /dev/null +++ b/02-06-game-juice/FX/ActiveJuices.gd @@ -0,0 +1,13 @@ +extends Node +class_name ActiveJuices + +const HEALTH_MODIFIER : = 0.25 + +var sound : = false +var tweening : = false +var particles : = false +var visual_fx : = false +var rapid_fire : = false +var weak_enemies : = false +var bullet_spread : = false +var bigger_bullets : = false diff --git a/02-06-game-juice/FX/Cartridge.tscn b/02-06-game-juice/FX/Cartridge.tscn new file mode 100644 index 0000000..c94eff6 --- /dev/null +++ b/02-06-game-juice/FX/Cartridge.tscn @@ -0,0 +1,10 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://assets/sprites/bulletBlue1.png" type="Texture" id=1] + +[node name="Cartridge" type="Node2D"] +editor/display_folded = true + +[node name="Sprite" type="Sprite" parent="."] +texture = ExtResource( 1 ) + diff --git a/02-06-game-juice/FX/CartridgeExpeller.gd b/02-06-game-juice/FX/CartridgeExpeller.gd new file mode 100644 index 0000000..de2b6b7 --- /dev/null +++ b/02-06-game-juice/FX/CartridgeExpeller.gd @@ -0,0 +1,37 @@ +extends Node2D + +onready var tween : Tween = $Tween + +export var cartridge : PackedScene +export var min_distance : = 25.0 +export var max_distance : = 50.0 + +var enabled : = false + + +func _ready() -> void: + enabled = ActiveJuices.visual_fx + randomize() + + +func expell() -> void: + if not enabled: + return + var cartridge_position = global_position + Vector2(randf(), randf()).normalized() * rand_range(min_distance, max_distance) + var new_cartridge : = cartridge.instance() + new_cartridge.global_position = global_position + new_cartridge.rotation_degrees = randi() % 360 + new_cartridge.set_as_toplevel(true) + add_child(new_cartridge) + tween.interpolate_property(new_cartridge, + "global_position", + new_cartridge.global_position, + cartridge_position, + 0.3, + Tween.TRANS_CUBIC, + Tween.EASE_OUT) + tween.start() + + +func _on_Barrel_shot() -> void: + expell() diff --git a/02-06-game-juice/FX/Explosion.gd b/02-06-game-juice/FX/Explosion.gd new file mode 100644 index 0000000..c974f1c --- /dev/null +++ b/02-06-game-juice/FX/Explosion.gd @@ -0,0 +1,13 @@ +extends Node2D + +onready var audio_player : AudioStreamPlayer = $AudioStreamPlayer + + +func _ready() -> void: + $AnimatedSprite.play("explosion") + if ActiveJuices.sound: + audio_player.play() + + +func _on_AnimatedSprite_animation_finished() -> void: + queue_free() diff --git a/02-06-game-juice/FX/Explosion.tscn b/02-06-game-juice/FX/Explosion.tscn new file mode 100644 index 0000000..d0a5b7d --- /dev/null +++ b/02-06-game-juice/FX/Explosion.tscn @@ -0,0 +1,33 @@ +[gd_scene load_steps=9 format=2] + +[ext_resource path="res://FX/Explosion.gd" type="Script" id=1] +[ext_resource path="res://assets/sprites/explosion1.png" type="Texture" id=2] +[ext_resource path="res://assets/sprites/explosion2.png" type="Texture" id=3] +[ext_resource path="res://assets/sprites/explosion3.png" type="Texture" id=4] +[ext_resource path="res://assets/sprites/explosion4.png" type="Texture" id=5] +[ext_resource path="res://assets/sprites/explosion5.png" type="Texture" id=6] +[ext_resource path="res://assets/audio/explosion.wav" type="AudioStream" id=7] + +[sub_resource type="SpriteFrames" id=1] + +animations = [ { +"frames": [ ExtResource( 2 ), ExtResource( 3 ), ExtResource( 4 ), ExtResource( 5 ), ExtResource( 6 ) ], +"loop": false, +"name": "explosion", +"speed": 10.0 +} ] + +[node name="Explosion" type="Node2D" groups=[ +"FX", +]] +z_index = 5 +script = ExtResource( 1 ) + +[node name="AnimatedSprite" type="AnimatedSprite" parent="."] +frames = SubResource( 1 ) +animation = "explosion" + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] +stream = ExtResource( 7 ) + +[connection signal="animation_finished" from="AnimatedSprite" to="." method="_on_AnimatedSprite_animation_finished"] diff --git a/02-06-game-juice/FX/FrameFreezer.gd b/02-06-game-juice/FX/FrameFreezer.gd new file mode 100644 index 0000000..62f93a8 --- /dev/null +++ b/02-06-game-juice/FX/FrameFreezer.gd @@ -0,0 +1,15 @@ +extends Node + +export var delay_mseconds : = 15 + +var enabled : = false + +func _ready() -> void: + for frame_freezer in get_tree().get_nodes_in_group("frame_freezer"): + frame_freezer.connect("frame_freeze_requested", self, "_on_frame_freeze_requested") + + +func _on_frame_freeze_requested() -> void: + if not enabled: + return + OS.delay_msec(delay_mseconds) diff --git a/02-06-game-juice/Game.gd b/02-06-game-juice/Game.gd new file mode 100644 index 0000000..9c0dd57 --- /dev/null +++ b/02-06-game-juice/Game.gd @@ -0,0 +1,9 @@ +extends Node + +export var level : PackedScene + + +func _on_JuiceControls_game_restarted() -> void: + $Level.queue_free() + yield(get_tree(), "idle_frame") + add_child(level.instance()) diff --git a/02-06-game-juice/Game.tscn b/02-06-game-juice/Game.tscn new file mode 100644 index 0000000..8790612 --- /dev/null +++ b/02-06-game-juice/Game.tscn @@ -0,0 +1,22 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://Game.gd" type="Script" id=1] +[ext_resource path="res://levels/Level.tscn" type="PackedScene" id=2] +[ext_resource path="res://interface/JuiceControls.tscn" type="PackedScene" id=3] +[ext_resource path="res://FX/FrameFreezer.gd" type="Script" id=4] + +[node name="Game" type="Node"] +script = ExtResource( 1 ) +level = ExtResource( 2 ) + +[node name="Level" parent="." instance=ExtResource( 2 )] +max_spawn_time = 8.0 + +[node name="JuiceControls" parent="." instance=ExtResource( 3 )] + +[node name="FrameFreezer" type="Node" parent="." groups=[ +"freezer", +]] +script = ExtResource( 4 ) + +[connection signal="game_restarted" from="JuiceControls" to="." method="_on_JuiceControls_game_restarted"] diff --git a/02-06-game-juice/actors/enemies/Enemy.gd b/02-06-game-juice/actors/enemies/Enemy.gd new file mode 100644 index 0000000..7b7e069 --- /dev/null +++ b/02-06-game-juice/actors/enemies/Enemy.gd @@ -0,0 +1,41 @@ +extends KinematicBody2D +class_name Enemy + +onready var animation_player : AnimationPlayer = $AnimationPlayer +onready var audio_player : AudioStreamPlayer = $AudioStreamPlayer + +export var health : = 100.0 +export var move_speed : = 75 +export var explosion : PackedScene + +var path : = [] +var player : Node2D + + +func _ready() -> void: + health *= ActiveJuices.HEALTH_MODIFIER if ActiveJuices.weak_enemies else 1 + + +func _physics_process(delta: float) -> void: + path = get_parent().get_simple_path(global_position, player.global_position) + var direction = (path[1] - global_position).normalized() + look_at(path[1]) + move_and_slide(direction * move_speed) + + +func initialize(_player: Node2D) -> void: + player = _player + + +func damage(value: int) -> void: + health = max(0, health - value) + if ActiveJuices.visual_fx: + animation_player.play("damaged") + if ActiveJuices.sound: + audio_player.play() + if health == 0: + if ActiveJuices.visual_fx: + var new_explosion : = explosion.instance() + new_explosion.global_position = global_position + get_tree().get_root().add_child(new_explosion) + queue_free() diff --git a/02-06-game-juice/actors/enemies/Enemy.tscn b/02-06-game-juice/actors/enemies/Enemy.tscn new file mode 100644 index 0000000..e7d3cb5 --- /dev/null +++ b/02-06-game-juice/actors/enemies/Enemy.tscn @@ -0,0 +1,57 @@ +[gd_scene load_steps=8 format=2] + +[ext_resource path="res://actors/enemies/Enemy.gd" type="Script" id=1] +[ext_resource path="res://FX/Explosion.tscn" type="PackedScene" id=2] +[ext_resource path="res://assets/sprites/tankBody_red_outline.png" type="Texture" id=3] +[ext_resource path="res://assets/sprites/tankDark_barrel1_outline.png" type="Texture" id=4] +[ext_resource path="res://assets/audio/hit.wav" type="AudioStream" id=5] + +[sub_resource type="RectangleShape2D" id=1] + +extents = Vector2( 38.7491, 37.3242 ) + +[sub_resource type="Animation" id=2] + +resource_name = "damaged" +length = 0.2 +tracks/0/type = "value" +tracks/0/path = NodePath(".:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.1, 0.2 ), +"transitions": PoolRealArray( 1, 0.241484, 1 ), +"update": 0, +"values": [ Color( 1, 1, 1, 1 ), Color( 10, 10, 10, 1 ), Color( 1, 1, 1, 1 ) ] +} + +[node name="Enemy" type="KinematicBody2D" groups=[ +"enemies", +]] +z_index = 4 +script = ExtResource( 1 ) +explosion = ExtResource( 2 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource( 1 ) + +[node name="Sprite" type="Sprite" parent="."] +rotation = -1.5708 +texture = ExtResource( 3 ) + +[node name="Barrel" type="Position2D" parent="."] +editor/display_folded = true +rotation = -1.5708 + +[node name="Sprite" type="Sprite" parent="Barrel"] +position = Vector2( 0, 11 ) +texture = ExtResource( 4 ) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +anims/damaged = SubResource( 2 ) + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] +stream = ExtResource( 5 ) + diff --git a/02-06-game-juice/actors/tanks/Barrel.gd b/02-06-game-juice/actors/tanks/Barrel.gd new file mode 100644 index 0000000..182d8ee --- /dev/null +++ b/02-06-game-juice/actors/tanks/Barrel.gd @@ -0,0 +1,44 @@ +extends Position2D + +signal shot +signal camera_shake_requested +signal frame_freeze_requested + +onready var timer : Timer = $Timer +onready var spawn_position : Position2D = $SpawnPosition +onready var audio_player : AudioStreamPlayer = $AudioStreamPlayer +onready var animation_player : AnimationPlayer = $AnimationPlayer + +export var fire_rate : = 5 setget set_fire_rate +export var bullet : PackedScene + + +func _process(delta: float) -> void: + look_at(get_global_mouse_position()) + if Input.is_action_pressed("shoot") and timer.is_stopped(): + shoot() + + +func _on_Bullet_destroyed(enemy_hit: bool) -> void: + if enemy_hit: + emit_signal("camera_shake_requested") + emit_signal("frame_freeze_requested") + + +func shoot() -> void: + timer.start() + emit_signal("shot") + if ActiveJuices.sound: + audio_player.play() + if ActiveJuices.visual_fx: + animation_player.play("shoot") + var new_bullet = bullet.instance() + new_bullet.initialize((get_global_mouse_position() - global_position).normalized()) + add_child(new_bullet) + new_bullet.global_position = spawn_position.global_position + new_bullet.look_at(get_global_mouse_position()) + new_bullet.connect("destroyed", self, "_on_Bullet_destroyed") + +func set_fire_rate(value: int) -> void: + fire_rate = value + timer.wait_time = 1.0 / fire_rate \ No newline at end of file diff --git a/02-06-game-juice/actors/tanks/Tank.gd b/02-06-game-juice/actors/tanks/Tank.gd new file mode 100644 index 0000000..40d5780 --- /dev/null +++ b/02-06-game-juice/actors/tanks/Tank.gd @@ -0,0 +1,14 @@ +extends KinematicBody2D + +export var move_speed : = 150.0 +export var turn_speed : = 75.0 + +func _physics_process(delta: float) -> void: + var motion : = Vector2() + motion.y = Input.get_action_strength("move_backward") - Input.get_action_strength("move_forward") + motion.x = Input.get_action_strength("rotate_right") - Input.get_action_strength("rotate_left") + + rotation_degrees += motion.x * turn_speed * delta + + move_and_slide(Vector2.UP.rotated(rotation) * motion.y * move_speed) + \ No newline at end of file diff --git a/02-06-game-juice/actors/tanks/Tank.tscn b/02-06-game-juice/actors/tanks/Tank.tscn new file mode 100644 index 0000000..2524c4f --- /dev/null +++ b/02-06-game-juice/actors/tanks/Tank.tscn @@ -0,0 +1,83 @@ +[gd_scene load_steps=12 format=2] + +[ext_resource path="res://actors/tanks/Tank.gd" type="Script" id=1] +[ext_resource path="res://assets/sprites/tankBody_blue_outline.png" type="Texture" id=2] +[ext_resource path="res://actors/tanks/Barrel.gd" type="Script" id=3] +[ext_resource path="res://actors/tanks/ammo/Bullet.tscn" type="PackedScene" id=4] +[ext_resource path="res://assets/sprites/tankBlue_barrel1_outline.png" type="Texture" id=5] +[ext_resource path="res://assets/audio/shoot.wav" type="AudioStream" id=6] +[ext_resource path="res://assets/sprites/shotOrange.png" type="Texture" id=7] +[ext_resource path="res://FX/CartridgeExpeller.gd" type="Script" id=8] +[ext_resource path="res://FX/Cartridge.tscn" type="PackedScene" id=9] + +[sub_resource type="RectangleShape2D" id=1] + +extents = Vector2( 46.5241, 43.1334 ) + +[sub_resource type="Animation" id=2] + +resource_name = "shoot" +length = 0.1 +tracks/0/type = "value" +tracks/0/path = NodePath("MuzzleFlash:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.1 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ true, false ] +} + +[node name="Tank" type="KinematicBody2D"] +z_index = 5 +script = ExtResource( 1 ) + +[node name="Body" type="Sprite" parent="."] +texture = ExtResource( 2 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource( 1 ) + +[node name="Barrel" type="Position2D" parent="." groups=[ +"guns", +"camera_shaker", +"frame_freezer", +]] +script = ExtResource( 3 ) +bullet = ExtResource( 4 ) + +[node name="Sprite" type="Sprite" parent="Barrel"] +position = Vector2( 10, 0 ) +rotation = -1.5708 +texture = ExtResource( 5 ) + +[node name="SpawnPosition" type="Position2D" parent="Barrel"] +position = Vector2( 23.7827, 0 ) + +[node name="Timer" type="Timer" parent="Barrel"] +one_shot = true + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="Barrel"] +stream = ExtResource( 6 ) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="Barrel"] +anims/shoot = SubResource( 2 ) + +[node name="MuzzleFlash" type="Sprite" parent="Barrel"] +visible = false +position = Vector2( 68.3006, 0 ) +rotation = 1.5708 +texture = ExtResource( 7 ) + +[node name="CartridgeExpeller" type="Node2D" parent="." groups=[ +"FX", +]] +script = ExtResource( 8 ) +cartridge = ExtResource( 9 ) + +[node name="Tween" type="Tween" parent="CartridgeExpeller"] + +[connection signal="shot" from="Barrel" to="CartridgeExpeller" method="_on_Barrel_shot"] diff --git a/02-06-game-juice/actors/tanks/ammo/Bullet.gd b/02-06-game-juice/actors/tanks/ammo/Bullet.gd new file mode 100644 index 0000000..6666270 --- /dev/null +++ b/02-06-game-juice/actors/tanks/ammo/Bullet.gd @@ -0,0 +1,41 @@ +extends Area2D + +signal destroyed(enemy_hit) + +onready var particles : Particles2D = $Particles2D + +export var explosion : PackedScene +export var move_speed : = 175.0 +export var damage : = 20 + +var direction : = Vector2() + + +func initialize(_direction: Vector2) -> void: + direction = _direction + if ActiveJuices.bullet_spread: + randomize() + direction += Vector2(randf() / 10, randf() / 10) + + +func _ready() -> void: + connect("body_entered", self, "_on_body_entered") + set_as_toplevel(true) + particles.emitting = ActiveJuices.particles + scale *= 2 if ActiveJuices.bigger_bullets else 1 + move_speed *= 3 if ActiveJuices.rapid_fire else 1 + + +func _process(delta: float) -> void: + position += direction * move_speed * delta + + +func _on_body_entered(body: PhysicsBody2D) -> void: + if body.is_a_parent_of(self): + return + var enemy_hit : = false + if body is Enemy: + body.damage(damage) + enemy_hit = true + emit_signal("destroyed", enemy_hit) + queue_free() diff --git a/02-06-game-juice/actors/tanks/ammo/Bullet.tscn b/02-06-game-juice/actors/tanks/ammo/Bullet.tscn new file mode 100644 index 0000000..de0efa3 --- /dev/null +++ b/02-06-game-juice/actors/tanks/ammo/Bullet.tscn @@ -0,0 +1,58 @@ +[gd_scene load_steps=11 format=2] + +[ext_resource path="res://actors/tanks/ammo/Bullet.gd" type="Script" id=1] +[ext_resource path="res://FX/Explosion.tscn" type="PackedScene" id=2] +[ext_resource path="res://assets/sprites/bulletParticle.png" type="Texture" id=3] +[ext_resource path="res://assets/sprites/bulletBlue2_outline.png" type="Texture" id=4] + +[sub_resource type="Gradient" id=1] + +colors = PoolColorArray( 0.804688, 0.804688, 0.804688, 1, 1, 1, 1, 0 ) + +[sub_resource type="GradientTexture" id=2] + +gradient = SubResource( 1 ) + +[sub_resource type="Curve" id=3] + +_data = [ Vector2( 0, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), -1.05229, 0.0, 0, 0 ] + +[sub_resource type="CurveTexture" id=4] + +curve = SubResource( 3 ) + +[sub_resource type="ParticlesMaterial" id=5] + +flag_disable_z = true +gravity = Vector3( 0, 0, 0 ) +orbit_velocity = 0.0 +orbit_velocity_random = 0.0 +scale_curve = SubResource( 4 ) +color_ramp = SubResource( 2 ) + +[sub_resource type="RectangleShape2D" id=6] + +extents = Vector2( 9, 7 ) + +[node name="Bullet" type="Area2D"] +z_index = 3 +script = ExtResource( 1 ) +explosion = ExtResource( 2 ) +move_speed = 750.0 + +[node name="Particles2D" type="Particles2D" parent="." groups=[ +"particles", +]] +emitting = false +amount = 15 +local_coords = false +process_material = SubResource( 5 ) +texture = ExtResource( 3 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource( 6 ) + +[node name="Sprite" type="Sprite" parent="."] +rotation = 1.5708 +texture = ExtResource( 4 ) + diff --git a/02-06-game-juice/assets/audio/explosion.wav b/02-06-game-juice/assets/audio/explosion.wav new file mode 100644 index 0000000..0129d8b Binary files /dev/null and b/02-06-game-juice/assets/audio/explosion.wav differ diff --git a/02-06-game-juice/assets/audio/explosion.wav.import b/02-06-game-juice/assets/audio/explosion.wav.import new file mode 100644 index 0000000..6c36f7c --- /dev/null +++ b/02-06-game-juice/assets/audio/explosion.wav.import @@ -0,0 +1,21 @@ +[remap] + +importer="wav" +type="AudioStreamSample" +path="res://.import/explosion.wav-4dcccbd27187cfdac205309f792899a7.sample" + +[deps] + +source_file="res://assets/audio/explosion.wav" +dest_files=[ "res://.import/explosion.wav-4dcccbd27187cfdac205309f792899a7.sample" ] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=true +edit/normalize=true +edit/loop=false +compress/mode=0 diff --git a/02-06-game-juice/assets/audio/hit.wav b/02-06-game-juice/assets/audio/hit.wav new file mode 100644 index 0000000..32086cd Binary files /dev/null and b/02-06-game-juice/assets/audio/hit.wav differ diff --git a/02-06-game-juice/assets/audio/hit.wav.import b/02-06-game-juice/assets/audio/hit.wav.import new file mode 100644 index 0000000..bf49496 --- /dev/null +++ b/02-06-game-juice/assets/audio/hit.wav.import @@ -0,0 +1,21 @@ +[remap] + +importer="wav" +type="AudioStreamSample" +path="res://.import/hit.wav-96dc477cdf4a42f381370dba6e3f75ce.sample" + +[deps] + +source_file="res://assets/audio/hit.wav" +dest_files=[ "res://.import/hit.wav-96dc477cdf4a42f381370dba6e3f75ce.sample" ] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=true +edit/normalize=true +edit/loop=false +compress/mode=0 diff --git a/02-06-game-juice/assets/audio/shoot.wav b/02-06-game-juice/assets/audio/shoot.wav new file mode 100644 index 0000000..e75d531 Binary files /dev/null and b/02-06-game-juice/assets/audio/shoot.wav differ diff --git a/02-06-game-juice/assets/audio/shoot.wav.import b/02-06-game-juice/assets/audio/shoot.wav.import new file mode 100644 index 0000000..16c9c62 --- /dev/null +++ b/02-06-game-juice/assets/audio/shoot.wav.import @@ -0,0 +1,21 @@ +[remap] + +importer="wav" +type="AudioStreamSample" +path="res://.import/shoot.wav-87079c2fcb36403855e4cbb1b77a9904.sample" + +[deps] + +source_file="res://assets/audio/shoot.wav" +dest_files=[ "res://.import/shoot.wav-87079c2fcb36403855e4cbb1b77a9904.sample" ] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=true +edit/normalize=true +edit/loop=false +compress/mode=0 diff --git a/02-06-game-juice/assets/sprites/barrelRed_top.png b/02-06-game-juice/assets/sprites/barrelRed_top.png new file mode 100644 index 0000000..9cd52a3 Binary files /dev/null and b/02-06-game-juice/assets/sprites/barrelRed_top.png differ diff --git a/02-06-game-juice/assets/sprites/barrelRed_top.png.import b/02-06-game-juice/assets/sprites/barrelRed_top.png.import new file mode 100644 index 0000000..917efa9 --- /dev/null +++ b/02-06-game-juice/assets/sprites/barrelRed_top.png.import @@ -0,0 +1,31 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/barrelRed_top.png-b0b6f390662960b019ff085e19a93ed8.stex" + +[deps] + +source_file="res://assets/sprites/barrelRed_top.png" +dest_files=[ "res://.import/barrelRed_top.png-b0b6f390662960b019ff085e19a93ed8.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/02-06-game-juice/assets/sprites/bulletBlue1.png b/02-06-game-juice/assets/sprites/bulletBlue1.png new file mode 100644 index 0000000..3616dce Binary files /dev/null and b/02-06-game-juice/assets/sprites/bulletBlue1.png differ diff --git a/02-06-game-juice/assets/sprites/bulletBlue1.png.import b/02-06-game-juice/assets/sprites/bulletBlue1.png.import new file mode 100644 index 0000000..144a31f --- /dev/null +++ b/02-06-game-juice/assets/sprites/bulletBlue1.png.import @@ -0,0 +1,31 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/bulletBlue1.png-0b4cb9815015970c738d2ffedbff4bbf.stex" + +[deps] + +source_file="res://assets/sprites/bulletBlue1.png" +dest_files=[ "res://.import/bulletBlue1.png-0b4cb9815015970c738d2ffedbff4bbf.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/02-06-game-juice/assets/sprites/bulletBlue2_outline.png b/02-06-game-juice/assets/sprites/bulletBlue2_outline.png new file mode 100644 index 0000000..192625c Binary files /dev/null and b/02-06-game-juice/assets/sprites/bulletBlue2_outline.png differ diff --git a/02-06-game-juice/assets/sprites/bulletBlue2_outline.png.import b/02-06-game-juice/assets/sprites/bulletBlue2_outline.png.import new file mode 100644 index 0000000..b94eea1 --- /dev/null +++ b/02-06-game-juice/assets/sprites/bulletBlue2_outline.png.import @@ -0,0 +1,31 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/bulletBlue2_outline.png-2e586eab1c58392d673298db43775e31.stex" + +[deps] + +source_file="res://assets/sprites/bulletBlue2_outline.png" +dest_files=[ "res://.import/bulletBlue2_outline.png-2e586eab1c58392d673298db43775e31.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/02-06-game-juice/assets/sprites/bulletParticle.png b/02-06-game-juice/assets/sprites/bulletParticle.png new file mode 100644 index 0000000..a4ad8f9 Binary files /dev/null and b/02-06-game-juice/assets/sprites/bulletParticle.png differ diff --git a/02-06-game-juice/assets/sprites/bulletParticle.png.import b/02-06-game-juice/assets/sprites/bulletParticle.png.import new file mode 100644 index 0000000..2276e65 --- /dev/null +++ b/02-06-game-juice/assets/sprites/bulletParticle.png.import @@ -0,0 +1,31 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/bulletParticle.png-1ad72f5e3b2355db6484c24e4c83d4b4.stex" + +[deps] + +source_file="res://assets/sprites/bulletParticle.png" +dest_files=[ "res://.import/bulletParticle.png-1ad72f5e3b2355db6484c24e4c83d4b4.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/02-06-game-juice/assets/sprites/crateMetal.png b/02-06-game-juice/assets/sprites/crateMetal.png new file mode 100644 index 0000000..ccb8e2a Binary files /dev/null and b/02-06-game-juice/assets/sprites/crateMetal.png differ diff --git a/02-06-game-juice/assets/sprites/crateMetal.png.import b/02-06-game-juice/assets/sprites/crateMetal.png.import new file mode 100644 index 0000000..11ad872 --- /dev/null +++ b/02-06-game-juice/assets/sprites/crateMetal.png.import @@ -0,0 +1,31 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/crateMetal.png-2be66963603999a60b7bc2c7434c982b.stex" + +[deps] + +source_file="res://assets/sprites/crateMetal.png" +dest_files=[ "res://.import/crateMetal.png-2be66963603999a60b7bc2c7434c982b.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/02-06-game-juice/assets/sprites/explosion1.png b/02-06-game-juice/assets/sprites/explosion1.png new file mode 100644 index 0000000..4058946 Binary files /dev/null and b/02-06-game-juice/assets/sprites/explosion1.png differ diff --git a/02-06-game-juice/assets/sprites/explosion1.png.import b/02-06-game-juice/assets/sprites/explosion1.png.import new file mode 100644 index 0000000..899bf91 --- /dev/null +++ b/02-06-game-juice/assets/sprites/explosion1.png.import @@ -0,0 +1,31 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/explosion1.png-f29314c8d75d8ac0edb482a2ab12ac8a.stex" + +[deps] + +source_file="res://assets/sprites/explosion1.png" +dest_files=[ "res://.import/explosion1.png-f29314c8d75d8ac0edb482a2ab12ac8a.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/02-06-game-juice/assets/sprites/explosion2.png b/02-06-game-juice/assets/sprites/explosion2.png new file mode 100644 index 0000000..5634f77 Binary files /dev/null and b/02-06-game-juice/assets/sprites/explosion2.png differ diff --git a/02-06-game-juice/assets/sprites/explosion2.png.import b/02-06-game-juice/assets/sprites/explosion2.png.import new file mode 100644 index 0000000..1645be6 --- /dev/null +++ b/02-06-game-juice/assets/sprites/explosion2.png.import @@ -0,0 +1,31 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/explosion2.png-c0334c1000ccf0923548b49b8248d4d5.stex" + +[deps] + +source_file="res://assets/sprites/explosion2.png" +dest_files=[ "res://.import/explosion2.png-c0334c1000ccf0923548b49b8248d4d5.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/02-06-game-juice/assets/sprites/explosion3.png b/02-06-game-juice/assets/sprites/explosion3.png new file mode 100644 index 0000000..8cb0da1 Binary files /dev/null and b/02-06-game-juice/assets/sprites/explosion3.png differ diff --git a/02-06-game-juice/assets/sprites/explosion3.png.import b/02-06-game-juice/assets/sprites/explosion3.png.import new file mode 100644 index 0000000..bd3015f --- /dev/null +++ b/02-06-game-juice/assets/sprites/explosion3.png.import @@ -0,0 +1,31 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/explosion3.png-d8f318bccb081563677b85e0749c0a4a.stex" + +[deps] + +source_file="res://assets/sprites/explosion3.png" +dest_files=[ "res://.import/explosion3.png-d8f318bccb081563677b85e0749c0a4a.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/02-06-game-juice/assets/sprites/explosion4.png b/02-06-game-juice/assets/sprites/explosion4.png new file mode 100644 index 0000000..f7f69dd Binary files /dev/null and b/02-06-game-juice/assets/sprites/explosion4.png differ diff --git a/02-06-game-juice/assets/sprites/explosion4.png.import b/02-06-game-juice/assets/sprites/explosion4.png.import new file mode 100644 index 0000000..c61bfe3 --- /dev/null +++ b/02-06-game-juice/assets/sprites/explosion4.png.import @@ -0,0 +1,31 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/explosion4.png-a101a3ce0c3478edcbef66e0b942e6f3.stex" + +[deps] + +source_file="res://assets/sprites/explosion4.png" +dest_files=[ "res://.import/explosion4.png-a101a3ce0c3478edcbef66e0b942e6f3.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/02-06-game-juice/assets/sprites/explosion5.png b/02-06-game-juice/assets/sprites/explosion5.png new file mode 100644 index 0000000..6ca5340 Binary files /dev/null and b/02-06-game-juice/assets/sprites/explosion5.png differ diff --git a/02-06-game-juice/assets/sprites/explosion5.png.import b/02-06-game-juice/assets/sprites/explosion5.png.import new file mode 100644 index 0000000..9473185 --- /dev/null +++ b/02-06-game-juice/assets/sprites/explosion5.png.import @@ -0,0 +1,31 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/explosion5.png-4963768d5c7a53ada32281c66367ce16.stex" + +[deps] + +source_file="res://assets/sprites/explosion5.png" +dest_files=[ "res://.import/explosion5.png-4963768d5c7a53ada32281c66367ce16.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/02-06-game-juice/assets/sprites/fenceRed.png b/02-06-game-juice/assets/sprites/fenceRed.png new file mode 100644 index 0000000..39aafe1 Binary files /dev/null and b/02-06-game-juice/assets/sprites/fenceRed.png differ diff --git a/02-06-game-juice/assets/sprites/fenceRed.png.import b/02-06-game-juice/assets/sprites/fenceRed.png.import new file mode 100644 index 0000000..b918e56 --- /dev/null +++ b/02-06-game-juice/assets/sprites/fenceRed.png.import @@ -0,0 +1,31 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/fenceRed.png-4017fd47224617198d5f7d7195b6e323.stex" + +[deps] + +source_file="res://assets/sprites/fenceRed.png" +dest_files=[ "res://.import/fenceRed.png-4017fd47224617198d5f7d7195b6e323.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/02-06-game-juice/assets/sprites/oilSpill_small.png b/02-06-game-juice/assets/sprites/oilSpill_small.png new file mode 100644 index 0000000..75b671a Binary files /dev/null and b/02-06-game-juice/assets/sprites/oilSpill_small.png differ diff --git a/02-06-game-juice/assets/sprites/oilSpill_small.png.import b/02-06-game-juice/assets/sprites/oilSpill_small.png.import new file mode 100644 index 0000000..fe2c612 --- /dev/null +++ b/02-06-game-juice/assets/sprites/oilSpill_small.png.import @@ -0,0 +1,31 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/oilSpill_small.png-d3a447f1432be02cff72df88b482c594.stex" + +[deps] + +source_file="res://assets/sprites/oilSpill_small.png" +dest_files=[ "res://.import/oilSpill_small.png-d3a447f1432be02cff72df88b482c594.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/02-06-game-juice/assets/sprites/sandbagBeige_open.png b/02-06-game-juice/assets/sprites/sandbagBeige_open.png new file mode 100644 index 0000000..4256f23 Binary files /dev/null and b/02-06-game-juice/assets/sprites/sandbagBeige_open.png differ diff --git a/02-06-game-juice/assets/sprites/sandbagBeige_open.png.import b/02-06-game-juice/assets/sprites/sandbagBeige_open.png.import new file mode 100644 index 0000000..75ede45 --- /dev/null +++ b/02-06-game-juice/assets/sprites/sandbagBeige_open.png.import @@ -0,0 +1,31 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/sandbagBeige_open.png-6bdebba6be4d257faecd6d2aabbfe15a.stex" + +[deps] + +source_file="res://assets/sprites/sandbagBeige_open.png" +dest_files=[ "res://.import/sandbagBeige_open.png-6bdebba6be4d257faecd6d2aabbfe15a.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/02-06-game-juice/assets/sprites/shotOrange.png b/02-06-game-juice/assets/sprites/shotOrange.png new file mode 100644 index 0000000..ae34599 Binary files /dev/null and b/02-06-game-juice/assets/sprites/shotOrange.png differ diff --git a/02-06-game-juice/assets/sprites/shotOrange.png.import b/02-06-game-juice/assets/sprites/shotOrange.png.import new file mode 100644 index 0000000..7ff4c93 --- /dev/null +++ b/02-06-game-juice/assets/sprites/shotOrange.png.import @@ -0,0 +1,31 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/shotOrange.png-87f3e11b2b51a3670b36284698740981.stex" + +[deps] + +source_file="res://assets/sprites/shotOrange.png" +dest_files=[ "res://.import/shotOrange.png-87f3e11b2b51a3670b36284698740981.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/02-06-game-juice/assets/sprites/tankBlue_barrel1_outline.png b/02-06-game-juice/assets/sprites/tankBlue_barrel1_outline.png new file mode 100644 index 0000000..0a3ea89 Binary files /dev/null and b/02-06-game-juice/assets/sprites/tankBlue_barrel1_outline.png differ diff --git a/02-06-game-juice/assets/sprites/tankBlue_barrel1_outline.png.import b/02-06-game-juice/assets/sprites/tankBlue_barrel1_outline.png.import new file mode 100644 index 0000000..064b97e --- /dev/null +++ b/02-06-game-juice/assets/sprites/tankBlue_barrel1_outline.png.import @@ -0,0 +1,31 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/tankBlue_barrel1_outline.png-0b0f9d46ef811300316df91ad0bc0fab.stex" + +[deps] + +source_file="res://assets/sprites/tankBlue_barrel1_outline.png" +dest_files=[ "res://.import/tankBlue_barrel1_outline.png-0b0f9d46ef811300316df91ad0bc0fab.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/02-06-game-juice/assets/sprites/tankBody_blue_outline.png b/02-06-game-juice/assets/sprites/tankBody_blue_outline.png new file mode 100644 index 0000000..119ba59 Binary files /dev/null and b/02-06-game-juice/assets/sprites/tankBody_blue_outline.png differ diff --git a/02-06-game-juice/assets/sprites/tankBody_blue_outline.png.import b/02-06-game-juice/assets/sprites/tankBody_blue_outline.png.import new file mode 100644 index 0000000..b9eab44 --- /dev/null +++ b/02-06-game-juice/assets/sprites/tankBody_blue_outline.png.import @@ -0,0 +1,31 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/tankBody_blue_outline.png-68aa1e50c13e17f2910681b28298cb53.stex" + +[deps] + +source_file="res://assets/sprites/tankBody_blue_outline.png" +dest_files=[ "res://.import/tankBody_blue_outline.png-68aa1e50c13e17f2910681b28298cb53.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/02-06-game-juice/assets/sprites/tankBody_red_outline.png b/02-06-game-juice/assets/sprites/tankBody_red_outline.png new file mode 100644 index 0000000..13a3b6a Binary files /dev/null and b/02-06-game-juice/assets/sprites/tankBody_red_outline.png differ diff --git a/02-06-game-juice/assets/sprites/tankBody_red_outline.png.import b/02-06-game-juice/assets/sprites/tankBody_red_outline.png.import new file mode 100644 index 0000000..0b0ecf3 --- /dev/null +++ b/02-06-game-juice/assets/sprites/tankBody_red_outline.png.import @@ -0,0 +1,31 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/tankBody_red_outline.png-d2e8a3844193b000d0d4a31de91de156.stex" + +[deps] + +source_file="res://assets/sprites/tankBody_red_outline.png" +dest_files=[ "res://.import/tankBody_red_outline.png-d2e8a3844193b000d0d4a31de91de156.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/02-06-game-juice/assets/sprites/tankDark_barrel1_outline.png b/02-06-game-juice/assets/sprites/tankDark_barrel1_outline.png new file mode 100644 index 0000000..d728964 Binary files /dev/null and b/02-06-game-juice/assets/sprites/tankDark_barrel1_outline.png differ diff --git a/02-06-game-juice/assets/sprites/tankDark_barrel1_outline.png.import b/02-06-game-juice/assets/sprites/tankDark_barrel1_outline.png.import new file mode 100644 index 0000000..04bdd47 --- /dev/null +++ b/02-06-game-juice/assets/sprites/tankDark_barrel1_outline.png.import @@ -0,0 +1,31 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/tankDark_barrel1_outline.png-b596a62b1144e5102955cfb852726639.stex" + +[deps] + +source_file="res://assets/sprites/tankDark_barrel1_outline.png" +dest_files=[ "res://.import/tankDark_barrel1_outline.png-b596a62b1144e5102955cfb852726639.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/02-06-game-juice/assets/sprites/terrain/terrainTiles_default.png b/02-06-game-juice/assets/sprites/terrain/terrainTiles_default.png new file mode 100644 index 0000000..33ae1ad Binary files /dev/null and b/02-06-game-juice/assets/sprites/terrain/terrainTiles_default.png differ diff --git a/02-06-game-juice/assets/sprites/terrain/terrainTiles_default.png.import b/02-06-game-juice/assets/sprites/terrain/terrainTiles_default.png.import new file mode 100644 index 0000000..b7a240d --- /dev/null +++ b/02-06-game-juice/assets/sprites/terrain/terrainTiles_default.png.import @@ -0,0 +1,31 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/terrainTiles_default.png-6271f467f2fd334f64eaf87b9a7da042.stex" + +[deps] + +source_file="res://assets/sprites/terrain/terrainTiles_default.png" +dest_files=[ "res://.import/terrainTiles_default.png-6271f467f2fd334f64eaf87b9a7da042.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/02-06-game-juice/assets/sprites/treeGreen_small.png b/02-06-game-juice/assets/sprites/treeGreen_small.png new file mode 100644 index 0000000..fb6c369 Binary files /dev/null and b/02-06-game-juice/assets/sprites/treeGreen_small.png differ diff --git a/02-06-game-juice/assets/sprites/treeGreen_small.png.import b/02-06-game-juice/assets/sprites/treeGreen_small.png.import new file mode 100644 index 0000000..f4f4c11 --- /dev/null +++ b/02-06-game-juice/assets/sprites/treeGreen_small.png.import @@ -0,0 +1,31 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/treeGreen_small.png-d78f104dabe9f893385bfba567ed24e4.stex" + +[deps] + +source_file="res://assets/sprites/treeGreen_small.png" +dest_files=[ "res://.import/treeGreen_small.png-d78f104dabe9f893385bfba567ed24e4.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/02-06-game-juice/assets/sprites/treeGreen_twigs.png b/02-06-game-juice/assets/sprites/treeGreen_twigs.png new file mode 100644 index 0000000..ac0b306 Binary files /dev/null and b/02-06-game-juice/assets/sprites/treeGreen_twigs.png differ diff --git a/02-06-game-juice/assets/sprites/treeGreen_twigs.png.import b/02-06-game-juice/assets/sprites/treeGreen_twigs.png.import new file mode 100644 index 0000000..1db7e44 --- /dev/null +++ b/02-06-game-juice/assets/sprites/treeGreen_twigs.png.import @@ -0,0 +1,31 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/treeGreen_twigs.png-26a24a0272694f89a8037dc5ed8e619f.stex" + +[deps] + +source_file="res://assets/sprites/treeGreen_twigs.png" +dest_files=[ "res://.import/treeGreen_twigs.png-26a24a0272694f89a8037dc5ed8e619f.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/02-06-game-juice/assets/sprites/ui/crosshair060.png b/02-06-game-juice/assets/sprites/ui/crosshair060.png new file mode 100644 index 0000000..c18a456 Binary files /dev/null and b/02-06-game-juice/assets/sprites/ui/crosshair060.png differ diff --git a/02-06-game-juice/assets/sprites/ui/crosshair060.png.import b/02-06-game-juice/assets/sprites/ui/crosshair060.png.import new file mode 100644 index 0000000..167eaf6 --- /dev/null +++ b/02-06-game-juice/assets/sprites/ui/crosshair060.png.import @@ -0,0 +1,31 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/crosshair060.png-b0be7def95423eede12e2489fd732ca5.stex" + +[deps] + +source_file="res://assets/sprites/ui/crosshair060.png" +dest_files=[ "res://.import/crosshair060.png-b0be7def95423eede12e2489fd732ca5.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/02-06-game-juice/default_env.tres b/02-06-game-juice/default_env.tres new file mode 100644 index 0000000..4712023 --- /dev/null +++ b/02-06-game-juice/default_env.tres @@ -0,0 +1,10 @@ +[gd_resource type="Environment" load_steps=2 format=2] + +[sub_resource type="ProceduralSky" id=1] + + +[resource] + +background_mode = 2 +background_sky = SubResource( 1 ) + diff --git a/02-06-game-juice/icon.png b/02-06-game-juice/icon.png new file mode 100644 index 0000000..2b65815 Binary files /dev/null and b/02-06-game-juice/icon.png differ diff --git a/02-06-game-juice/icon.png.import b/02-06-game-juice/icon.png.import new file mode 100644 index 0000000..45ee6af --- /dev/null +++ b/02-06-game-juice/icon.png.import @@ -0,0 +1,31 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" + +[deps] + +source_file="res://icon.png" +dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/02-06-game-juice/interface/JuiceControls.gd b/02-06-game-juice/interface/JuiceControls.gd new file mode 100644 index 0000000..1ecbc62 --- /dev/null +++ b/02-06-game-juice/interface/JuiceControls.gd @@ -0,0 +1,88 @@ +extends CanvasLayer + +signal game_restarted + +onready var control_list : VBoxContainer = $ControlList +onready var animation_player : AnimationPlayer = $AnimationPlayer + +var hidden : = true +var fire_rate : = 2 +var camera_shake : = false + + +func _input(event: InputEvent) -> void: + if event.is_action_pressed("toggle_menu"): + if hidden: + animation_player.play("slide_in") + control_list.grab_focus() + else: + animation_player.play("slide_out") + control_list.release_focus() + hidden = not hidden + + +func _on_FX_pressed() -> void: + ActiveJuices.visual_fx = not ActiveJuices.visual_fx + for fx in get_tree().get_nodes_in_group("FX"): + fx.enabled = not fx.enabled + + +func _on_CameraShake_pressed() -> void: + camera_shake = not camera_shake + for camera in get_tree().get_nodes_in_group("camera"): + camera.enabled = not camera.enabled + + +func _on_FrameFreeze_pressed() -> void: + for freezer in get_tree().get_nodes_in_group("freezer"): + freezer.enabled = not freezer.enabled + + +func _on_Particles_pressed() -> void: + ActiveJuices.particles = not ActiveJuices.particles + + +func _on_FastSpawn_toggled(button_pressed: bool) -> void: + for level in get_tree().get_nodes_in_group("levels"): + level.max_spawn_time *= 0.5 if button_pressed else 2 + + +func _on_BiggerBullets_pressed() -> void: + ActiveJuices.bigger_bullets = not ActiveJuices.bigger_bullets + + +func _on_Spread_pressed() -> void: + ActiveJuices.bullet_spread = not ActiveJuices.bullet_spread + + +func _on_RapidFire_pressed() -> void: + ActiveJuices.rapid_fire = not ActiveJuices.rapid_fire + + +func _on_WeakEnemies_pressed() -> void: + ActiveJuices.weak_enemies = not ActiveJuices.weak_enemies + for enemy in get_tree().get_nodes_in_group("enemies"): + enemy.health *= ActiveJuices.HEALTH_MODIFIER if ActiveJuices.weak_enemies else 1 / ActiveJuices.HEALTH_MODIFIER + + +func _on_Tweening_pressed() -> void: + ActiveJuices.tweening = not ActiveJuices.tweening + + +func _on_Restart_pressed() -> void: + emit_signal("game_restarted") + yield(get_tree(), "idle_frame") + for gun in get_tree().get_nodes_in_group("guns"): + gun.fire_rate = fire_rate + for camera in get_tree().get_nodes_in_group("camera"): + camera.enabled = camera_shake + + +func _on_FireRateSlider_value_changed(value: float) -> void: + fire_rate = value + for gun in get_tree().get_nodes_in_group("guns"): + gun.fire_rate = int(value) + + +func _on_Sounds_pressed() -> void: + ActiveJuices.sound = not ActiveJuices.sound diff --git a/02-06-game-juice/interface/JuiceControls.tscn b/02-06-game-juice/interface/JuiceControls.tscn new file mode 100644 index 0000000..bb4f97e --- /dev/null +++ b/02-06-game-juice/interface/JuiceControls.tscn @@ -0,0 +1,203 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://interface/JuiceControls.gd" type="Script" id=1] +[ext_resource path="res://interface/fonts/montserrat_eb_32.tres" type="DynamicFont" id=2] + +[sub_resource type="Animation" id=1] + +resource_name = "slide_in" +length = 0.3 +tracks/0/type = "bezier" +tracks/0/path = NodePath("ControlList:rect_position:x") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"points": PoolRealArray( -418.8, -0.248825, -66.8136, 0.178649, 47.9701, 27.6, -0.0950871, 91.6281, 0.245548, -236.615 ), +"times": PoolRealArray( 0, 0.295435 ) +} +tracks/1/type = "bezier" +tracks/1/path = NodePath("ControlList:rect_position:y") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"points": PoolRealArray( 50, -0.25, 0, 0.25, 0 ), +"times": PoolRealArray( 0 ) +} + +[sub_resource type="Animation" id=2] + +resource_name = "slide_out" +length = 0.3 +tracks/0/type = "bezier" +tracks/0/path = NodePath("ControlList:rect_position:x") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"points": PoolRealArray( 30, -0.249689, -108.441, 0.0356221, 49.2, -486, -0.436154, 802.8, 0.249531, -133.207 ), +"times": PoolRealArray( 0.000868833, 0.295403 ) +} +tracks/1/type = "bezier" +tracks/1/path = NodePath("ControlList:rect_position:y") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"points": PoolRealArray( 50, -0.25, 0, 0.25, 0 ), +"times": PoolRealArray( 0 ) +} + +[node name="JuiceControls" type="CanvasLayer"] +script = ExtResource( 1 ) + +[node name="ControlList" type="VBoxContainer" parent="."] +anchor_bottom = 1.0 +margin_left = -418.8 +margin_top = 50.0 +margin_right = -23.8 +margin_bottom = -50.0 +custom_constants/separation = 10 +__meta__ = { +"_edit_group_": true +} + +[node name="CameraShake" type="Button" parent="ControlList"] +margin_right = 395.0 +margin_bottom = 66.0 +custom_fonts/font = ExtResource( 2 ) +toggle_mode = true +text = "Camera Shake" + +[node name="FrameFreeze" type="Button" parent="ControlList"] +margin_top = 76.0 +margin_right = 395.0 +margin_bottom = 142.0 +custom_fonts/font = ExtResource( 2 ) +toggle_mode = true +text = "Frame Freeze" + +[node name="Tweening" type="Button" parent="ControlList"] +margin_top = 152.0 +margin_right = 395.0 +margin_bottom = 218.0 +custom_fonts/font = ExtResource( 2 ) +toggle_mode = true +text = "Tweening" + +[node name="FX" type="Button" parent="ControlList"] +margin_top = 228.0 +margin_right = 395.0 +margin_bottom = 294.0 +custom_fonts/font = ExtResource( 2 ) +toggle_mode = true +text = "Visual FX" + +[node name="Particles" type="Button" parent="ControlList"] +margin_top = 304.0 +margin_right = 395.0 +margin_bottom = 370.0 +custom_fonts/font = ExtResource( 2 ) +toggle_mode = true +text = "Particles" + +[node name="FastSpawn" type="Button" parent="ControlList"] +margin_top = 380.0 +margin_right = 395.0 +margin_bottom = 446.0 +custom_fonts/font = ExtResource( 2 ) +toggle_mode = true +text = "Fast Spawn" + +[node name="WeakEnemies" type="Button" parent="ControlList"] +margin_top = 456.0 +margin_right = 395.0 +margin_bottom = 522.0 +custom_fonts/font = ExtResource( 2 ) +toggle_mode = true +text = "Weak Enemies" + +[node name="BiggerBullets" type="Button" parent="ControlList"] +margin_top = 532.0 +margin_right = 395.0 +margin_bottom = 598.0 +custom_fonts/font = ExtResource( 2 ) +toggle_mode = true +text = "Bigger Bullets" + +[node name="RapidFire" type="Button" parent="ControlList"] +margin_top = 608.0 +margin_right = 395.0 +margin_bottom = 674.0 +custom_fonts/font = ExtResource( 2 ) +toggle_mode = true +text = "Rapid Fire" + +[node name="Spread" type="Button" parent="ControlList"] +margin_top = 684.0 +margin_right = 395.0 +margin_bottom = 750.0 +custom_fonts/font = ExtResource( 2 ) +toggle_mode = true +text = "Bullet Spread" + +[node name="FireRate" type="HBoxContainer" parent="ControlList"] +margin_top = 760.0 +margin_right = 395.0 +margin_bottom = 820.0 +custom_constants/separation = 10 + +[node name="Label" type="Label" parent="ControlList/FireRate"] +margin_right = 230.0 +margin_bottom = 60.0 +custom_fonts/font = ExtResource( 2 ) +text = "Fire Rate" + +[node name="FireRateSlider" type="HSlider" parent="ControlList/FireRate"] +margin_left = 240.0 +margin_top = 22.0 +margin_right = 395.0 +margin_bottom = 38.0 +size_flags_horizontal = 3 +size_flags_vertical = 4 +min_value = 2.0 +max_value = 10.0 +value = 2.0 + +[node name="Sounds" type="Button" parent="ControlList"] +margin_top = 830.0 +margin_right = 395.0 +margin_bottom = 896.0 +custom_fonts/font = ExtResource( 2 ) +text = "Sounds" + +[node name="Restart" type="Button" parent="ControlList"] +margin_top = 906.0 +margin_right = 395.0 +margin_bottom = 972.0 +custom_fonts/font = ExtResource( 2 ) +text = "Restart" + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +anims/slide_in = SubResource( 1 ) +anims/slide_out = SubResource( 2 ) + +[connection signal="pressed" from="ControlList/CameraShake" to="." method="_on_CameraShake_pressed"] +[connection signal="pressed" from="ControlList/FrameFreeze" to="." method="_on_FrameFreeze_pressed"] +[connection signal="pressed" from="ControlList/Tweening" to="." method="_on_Tweening_pressed"] +[connection signal="pressed" from="ControlList/FX" to="." method="_on_FX_pressed"] +[connection signal="pressed" from="ControlList/Particles" to="." method="_on_Particles_pressed"] +[connection signal="pressed" from="ControlList/FastSpawn" to="." method="_on_FastSpawn_pressed"] +[connection signal="toggled" from="ControlList/FastSpawn" to="." method="_on_FastSpawn_toggled"] +[connection signal="pressed" from="ControlList/WeakEnemies" to="." method="_on_WeakEnemies_pressed"] +[connection signal="pressed" from="ControlList/BiggerBullets" to="." method="_on_BiggerBullets_pressed"] +[connection signal="pressed" from="ControlList/RapidFire" to="." method="_on_RapidFire_pressed"] +[connection signal="pressed" from="ControlList/Spread" to="." method="_on_Spread_pressed"] +[connection signal="value_changed" from="ControlList/FireRate/FireRateSlider" to="." method="_on_FireRateSlider_value_changed"] +[connection signal="pressed" from="ControlList/Sounds" to="." method="_on_Sounds_pressed"] +[connection signal="pressed" from="ControlList/Restart" to="." method="_on_Restart_pressed"] diff --git a/02-06-game-juice/interface/fonts/Montserrat-ExtraBold.ttf b/02-06-game-juice/interface/fonts/Montserrat-ExtraBold.ttf new file mode 100644 index 0000000..6725d53 Binary files /dev/null and b/02-06-game-juice/interface/fonts/Montserrat-ExtraBold.ttf differ diff --git a/02-06-game-juice/interface/fonts/montserrat_eb_32.tres b/02-06-game-juice/interface/fonts/montserrat_eb_32.tres new file mode 100644 index 0000000..558c56c --- /dev/null +++ b/02-06-game-juice/interface/fonts/montserrat_eb_32.tres @@ -0,0 +1,9 @@ +[gd_resource type="DynamicFont" load_steps=2 format=2] + +[ext_resource path="res://interface/fonts/Montserrat-ExtraBold.ttf" type="DynamicFontData" id=1] + +[resource] + +size = 48 +font_data = ExtResource( 1 ) + diff --git a/02-06-game-juice/levels/Level.gd b/02-06-game-juice/levels/Level.gd new file mode 100644 index 0000000..f19445a --- /dev/null +++ b/02-06-game-juice/levels/Level.gd @@ -0,0 +1,29 @@ +extends Node2D + +onready var spawning_positions : Node2D = $SpawningPositions +onready var navigation : Navigation2D = $Navigation2D +onready var player : KinematicBody2D = $Tank +onready var timer : Timer = $Timer + +export var enemy : PackedScene +export var max_spawn_time : = 8.0 + + +func _ready() -> void: + randomize() + timer.wait_time = rand_range(max_spawn_time / 2, max_spawn_time) + timer.start() + + +func spawn_enemy() -> void: + var spawn_position : = spawning_positions.get_child(randi() % spawning_positions.get_child_count()) + var new_enemy : = enemy.instance() + new_enemy.initialize(player) + navigation.add_child(new_enemy) + new_enemy.global_position = spawn_position.global_position + timer.wait_time = rand_range(max_spawn_time / 2, max_spawn_time) + timer.start() + + +func _on_Timer_timeout() -> void: + spawn_enemy() diff --git a/02-06-game-juice/levels/Level.tscn b/02-06-game-juice/levels/Level.tscn new file mode 100644 index 0000000..3f25588 --- /dev/null +++ b/02-06-game-juice/levels/Level.tscn @@ -0,0 +1,263 @@ +[gd_scene load_steps=15 format=2] + +[ext_resource path="res://levels/Level.gd" type="Script" id=1] +[ext_resource path="res://actors/enemies/Enemy.tscn" type="PackedScene" id=2] +[ext_resource path="res://assets/sprites/terrain/terrainTiles_default.png" type="Texture" id=3] +[ext_resource path="res://levels/props/RedBarrel.tscn" type="PackedScene" id=4] +[ext_resource path="res://levels/props/Barrier.tscn" type="PackedScene" id=5] +[ext_resource path="res://levels/props/SandBag.tscn" type="PackedScene" id=6] +[ext_resource path="res://levels/props/MetalBox.tscn" type="PackedScene" id=7] +[ext_resource path="res://levels/props/Twigs.tscn" type="PackedScene" id=8] +[ext_resource path="res://levels/props/OilSpill.tscn" type="PackedScene" id=9] +[ext_resource path="res://levels/props/Tree.tscn" type="PackedScene" id=10] +[ext_resource path="res://actors/tanks/Tank.tscn" type="PackedScene" id=11] +[ext_resource path="res://levels/camera/Camera.tscn" type="PackedScene" id=12] + +[sub_resource type="TileSet" id=1] + +0/name = "street" +0/texture = ExtResource( 3 ) +0/tex_offset = Vector2( 0, 0 ) +0/modulate = Color( 1, 1, 1, 1 ) +0/region = Rect2( 128, 0, 768, 256 ) +0/tile_mode = 1 +0/autotile/bitmask_mode = 2 +0/autotile/bitmask_flags = [ Vector2( 0, 0 ), 146, Vector2( 0, 1 ), 186, Vector2( 1, 0 ), 56, Vector2( 1, 1 ), 186, Vector2( 2, 0 ), 178, Vector2( 2, 1 ), 160, Vector2( 3, 0 ), 154, Vector2( 3, 1 ), 136, Vector2( 4, 0 ), 58, Vector2( 4, 1 ), 34, Vector2( 5, 0 ), 184, Vector2( 5, 1 ), 10 ] +0/autotile/icon_coordinate = Vector2( 0, 0 ) +0/autotile/tile_size = Vector2( 128, 128 ) +0/autotile/spacing = 0 +0/autotile/occluder_map = [ ] +0/autotile/navpoly_map = [ ] +0/autotile/priority_map = [ ] +0/autotile/z_index_map = [ ] +0/occluder_offset = Vector2( 0, 0 ) +0/navigation_offset = Vector2( 0, 0 ) +0/shapes = [ ] +0/z_index = 0 +1/name = "grass" +1/texture = ExtResource( 3 ) +1/tex_offset = Vector2( 0, 0 ) +1/modulate = Color( 1, 1, 1, 1 ) +1/region = Rect2( 0, 0, 128, 256 ) +1/tile_mode = 1 +1/autotile/bitmask_mode = 0 +1/autotile/bitmask_flags = [ Vector2( 0, 0 ), 325, Vector2( 0, 1 ), 325 ] +1/autotile/icon_coordinate = Vector2( 0, 0 ) +1/autotile/tile_size = Vector2( 128, 128 ) +1/autotile/spacing = 0 +1/autotile/occluder_map = [ ] +1/autotile/navpoly_map = [ ] +1/autotile/priority_map = [ ] +1/autotile/z_index_map = [ ] +1/occluder_offset = Vector2( 0, 0 ) +1/navigation_offset = Vector2( 0, 0 ) +1/shapes = [ ] +1/z_index = 0 + +[sub_resource type="NavigationPolygon" id=2] + +vertices = PoolVector2Array( 606.415, 123, 1133.42, 212.278, 588, 178.173, 567.423, 135.305, 2304, -384, 1399.6, 375.393, 1287.69, 363.205, 1211.46, 318.014, 1348.63, 828.579, 1463.87, 830.795, 2304, 1408, -256, 1408, 634.144, 915.382, 311.3, 237.7, 514, 200, 1073.78, 269.765, 622.63, 293.262, 364.864, 108.596, 496.261, 159.311, 1406.25, 475.116, 1460.55, 721.1, 1156.83, 374.299, 980.343, 381.72, 696.635, 344.705, 584.725, 369.975, 218.368, 320.105, 260, 247.2, 523.176, 784.028, 518.909, 915.382, 241.9, 976.324, 250.765, 865.521, 343.6, 549.3, 1349.74, 723.316, 641.9, 804.579, 672.267, 570.33, 997.144, 450.215, 1278.83, 466.252, 907.971, 481.231, 146.609, 977.432, 90.9, 536.95, 137.745, 862.197, -256, -384, 24.6842, 265.368, 660, 503, 402.5, 492.3, 595, 503, 598, 588, 896.34, 388.182, 671.79, 420.845, 573.174, 27.7091, 190.65, 572.1, 208.7, 501.8, 257.15, 487.55, 352.676, 27.7091, 304.65, 188.3, 266.65, 175.95, 133.105, 208.526, 236.25, 231.05, 235.3, 190.2, 274.201, 388.23, 233.105, 356.947, 300.78, 401.091, 127.842, 376.947, 153.105, 401.158, 362.6, 441.95 ) +polygons = [ PoolIntArray( 0, 1, 2, 3 ), PoolIntArray( 4, 5, 6, 7, 1 ), PoolIntArray( 8, 9, 10, 11, 12 ), PoolIntArray( 13, 14, 1, 15, 16 ), PoolIntArray( 17, 0, 3 ), PoolIntArray( 17, 3, 18 ), PoolIntArray( 19, 5, 4, 10, 20 ), PoolIntArray( 15, 21, 22, 23, 16 ), PoolIntArray( 13, 16, 24, 25, 26 ), PoolIntArray( 27, 28, 29, 30, 31 ), PoolIntArray( 32, 8, 12, 33, 34 ), PoolIntArray( 35, 6, 36, 37 ), PoolIntArray( 28, 12, 11, 29 ), PoolIntArray( 38, 29, 11 ), PoolIntArray( 39, 40, 38, 11, 41, 42 ), PoolIntArray( 32, 34, 43, 19, 20 ), PoolIntArray( 44, 37, 19, 43, 45 ), PoolIntArray( 31, 44, 45, 46, 27 ), PoolIntArray( 21, 7, 6 ), PoolIntArray( 21, 6, 35 ), PoolIntArray( 21, 35, 22 ), PoolIntArray( 23, 22, 47 ), PoolIntArray( 48, 23, 47, 37 ), PoolIntArray( 1, 0, 49 ), PoolIntArray( 50, 51, 52, 31, 30, 40 ), PoolIntArray( 41, 4, 1, 49 ), PoolIntArray( 41, 49, 53 ), PoolIntArray( 10, 9, 20 ), PoolIntArray( 46, 34, 33, 27 ), PoolIntArray( 39, 50, 40 ), PoolIntArray( 41, 53, 17, 54, 55 ), PoolIntArray( 26, 25, 56, 57 ), PoolIntArray( 58, 57, 56, 41 ), PoolIntArray( 17, 18, 14, 13, 54 ), PoolIntArray( 59, 60, 25, 24, 48, 61 ), PoolIntArray( 14, 2, 1 ), PoolIntArray( 41, 55, 58 ), PoolIntArray( 41, 56, 42 ), PoolIntArray( 39, 42, 62 ), PoolIntArray( 63, 39, 62 ), PoolIntArray( 63, 62, 25, 60 ), PoolIntArray( 64, 61, 48 ), PoolIntArray( 44, 64, 48, 37 ), PoolIntArray( 19, 37, 36 ) ] +outlines = [ PoolVector2Array( -256, -384, 2304, -384, 2304, 1408, -256, 1408 ), PoolVector2Array( 364.864, 108.596, 352.676, 27.7091, 573.174, 27.7091, 606.415, 123 ), PoolVector2Array( 514, 200, 496.261, 159.311, 567.423, 135.305, 588, 178.173 ), PoolVector2Array( 584.725, 369.975, 622.63, 293.262, 696.635, 344.705, 671.79, 420.845 ), PoolVector2Array( 896.34, 388.182, 980.343, 381.72, 997.144, 450.215, 907.971, 481.231 ), PoolVector2Array( 595, 503, 660, 503, 672.267, 570.33, 598, 588 ), PoolVector2Array( 90.9, 536.95, 153.105, 401.158, 233.105, 356.947, 274.201, 388.23, 300.78, 401.091, 362.6, 441.95, 402.5, 492.3, 343.6, 549.3, 257.15, 487.55, 208.7, 501.8, 190.65, 572.1 ), PoolVector2Array( 24.6842, 265.368, 133.105, 208.526, 218.368, 320.105, 127.842, 376.947 ), PoolVector2Array( 235.3, 190.2, 266.65, 175.95, 304.65, 188.3, 311.3, 237.7, 260, 247.2, 236.25, 231.05 ), PoolVector2Array( 1073.78, 269.765, 1133.42, 212.278, 1211.46, 318.014, 1156.83, 374.299 ), PoolVector2Array( 523.176, 784.028, 641.9, 804.579, 634.144, 915.382, 518.909, 915.382 ), PoolVector2Array( 137.745, 862.197, 250.765, 865.521, 241.9, 976.324, 146.609, 977.432 ), PoolVector2Array( 1349.74, 723.316, 1348.63, 828.579, 1463.87, 830.795, 1460.55, 721.1 ), PoolVector2Array( 1287.69, 363.205, 1278.83, 466.252, 1406.25, 475.116, 1399.6, 375.393 ) ] + +[node name="Level" type="Node2D" groups=[ +"levels", +]] +script = ExtResource( 1 ) +enemy = ExtResource( 2 ) +max_spawn_time = 2.0 + +[node name="TileMap" type="TileMap" parent="."] +tile_set = SubResource( 1 ) +cell_size = Vector2( 128, 128 ) +format = 1 +tile_data = PoolIntArray( 0, 1, 0, 1, 1, 0, 2, 1, 0, 3, 1, 0, 4, 1, 0, 5, 1, 0, 6, 1, 0, 7, 1, 0, 8, 0, 0, 9, 1, 0, 10, 1, 0, 11, -2147483647, 0, 12, -2147483647, 0, 13, 0, 0, 14, -2147483647, 0, 15, -2147483647, 0, 16, -2147483647, 0, 17, -2147483647, 0, 18, -2147483647, 0, 19, -2147483647, 0, 65536, -1610612736, 0, 65537, 0, 1, 65538, 0, 1, 65539, 0, 1, 65540, 0, 1, 65541, 1610612736, 1, 65542, 1610612736, 1, 65543, -2147483648, 0, 65544, 0, 3, 65545, 1, 0, 65546, 1, 0, 65547, -2147483647, 0, 65548, -2147483647, 0, 65549, 0, 0, 65550, -2147483647, 0, 65551, -2147483647, 65536, 65552, -2147483647, 65536, 65553, -2147483647, 65536, 65554, -2147483647, 65536, 65555, -2147483647, 0, 131072, 1, 0, 131073, 1, 0, 131074, 1, 0, 131075, 1, 0, 131076, 1, 0, 131077, 1, 0, 131078, 1, 0, 131079, 1, 0, 131080, 0, 0, 131081, 1, 0, 131082, 1, 0, 131083, -2147483647, 0, 131084, -2147483647, 0, 131085, 0, 0, 131086, -2147483647, 0, 131087, -2147483647, 65536, 131088, -2147483647, 65536, 131089, -2147483647, 65536, 131090, -2147483647, 65536, 131091, -2147483647, 0, 196608, 1, 0, 196609, 1, 0, 196610, 1, 0, 196611, 1, 0, 196612, 1, 0, 196613, 1, 0, 196614, 1, 0, 196615, 1, 0, 196616, 0, 0, 196617, 1, 0, 196618, 1, 0, 196619, -2147483647, 0, 196620, -2147483647, 0, 196621, 0, 0, 196622, -2147483647, 0, 196623, -2147483647, 0, 196624, -2147483647, 0, 196625, -2147483647, 0, 196626, -2147483647, 0, 196627, -2147483647, 0, 262144, -2147483648, 0, 262145, 0, 1, 262146, 0, 1, 262147, 0, 1, 262148, 0, 1, 262149, 0, 1, 262150, 0, 1, 262151, -2147483648, 0, 262152, -2147483648, 65537, 262153, -2147483648, 0, 262154, 0, 1, 262155, 0, 1, 262156, -2147483648, 0, 262157, 0, 65537, 262158, -2147483648, 0, 262159, 0, 1, 262160, 0, 1, 262161, -2147483648, 0, 262162, -2147483647, 0, 262163, -2147483647, 0, 327680, 1, 0, 327681, 1, 0, 327682, 1, 0, 327683, 1, 0, 327684, 1, 0, 327685, 1, 0, 327686, 1, 0, 327687, 1, 0, 327688, 0, 0, 327689, 1, 0, 327690, 1, 0, 327691, -2147483647, 0, 327692, -2147483647, 0, 327693, 0, 0, 327694, -2147483647, 0, 327695, -2147483647, 0, 327696, -2147483647, 0, 327697, -2147483647, 0, 327698, -2147483647, 0, 327699, -2147483647, 0, 393216, -2147483647, 0, 393217, -2147483647, 0, 393218, -2147483647, 0, 393219, -2147483647, 0, 393220, -2147483647, 65536, 393221, -2147483647, 65536, 393222, -2147483647, 0, 393223, -2147483647, 0, 393224, 0, 0, 393225, -2147483647, 0, 393226, -2147483647, 0, 393227, -2147483647, 0, 393228, -2147483647, 0, 393229, 0, 0, 393230, -2147483647, 0, 393231, -2147483647, 0, 393232, -2147483647, 0, 393233, -2147483647, 0, 393234, -2147483647, 0, 393235, -2147483647, 0, 458752, -2147483647, 0, 458753, -2147483647, 0, 458754, -2147483647, 0, 458755, -2147483647, 65536, 458756, -2147483647, 65536, 458757, -2147483647, 0, 458758, -2147483647, 0, 458759, -2147483647, 0, 458760, 0, 2, 458761, -2147483648, 0, 458762, 0, 1, 458763, 0, 1, 458764, -2147483648, 0, 458765, 0, 4, 458766, -2147483648, 0, 458767, 0, 1, 458768, 0, 1, 458769, 0, 1, 458770, 0, 1, 458771, -2147483648, 0, 524288, -2147483647, 0, 524289, -2147483647, 0, 524290, -2147483647, 0, 524291, -2147483647, 0, 524292, -2147483647, 0, 524293, -2147483647, 0, 524294, -2147483647, 0, 524295, -2147483647, 0, 524296, 0, 0, 524297, -2147483647, 0, 524298, -2147483647, 0, 524299, -2147483647, 0, 524300, -2147483647, 0, 524301, -2147483647, 0, 524302, -2147483647, 0, 524303, -2147483647, 0, 524304, -2147483647, 0, 524305, -2147483647, 0, 524306, -2147483647, 0, 524307, -2147483647, 0, 589824, -2147483648, 0, 589825, 0, 1, 589826, 0, 1, 589827, 0, 1, 589828, 0, 1, 589829, 0, 1, 589830, 0, 1, 589831, -2147483648, 0, 589832, 0, 4, 589833, -2147483648, 0, 589834, 0, 1, 589835, 0, 1, 589836, 0, 1, 589837, 0, 1, 589838, 0, 1, 589839, 0, 1, 589840, 0, 1, 589841, 0, 1, 589842, 0, 1, 589843, -2147483648, 0, 655360, -2147483647, 0, 655361, -2147483647, 0, 655362, -2147483647, 0, 655363, -2147483647, 0, 655364, -2147483647, 0, 655365, -2147483647, 0, 655366, -2147483647, 0, 655367, -2147483647, 0, 655368, -2147483647, 0, 655369, -2147483647, 0, 655370, -2147483647, 0, 655371, -2147483647, 0, 655372, -2147483647, 0, 655373, -2147483647, 0, 655374, -2147483647, 0, 655375, -2147483647, 0, 655376, -2147483647, 0, 655377, -2147483647, 0, 655378, -2147483647, 0, 655379, -2147483647, 0, 720896, -2147483647, 0, 720897, -2147483647, 0, 720898, -2147483647, 0, 720899, -2147483647, 0, 720900, -2147483647, 0, 720901, -2147483647, 0, 720902, -2147483647, 0, 720903, -2147483647, 0, 720904, -2147483647, 0, 720905, -2147483647, 0, 720906, -2147483647, 0, 720907, -2147483647, 0, 720908, -2147483647, 0, 720909, -2147483647, 0, 720910, -2147483647, 0, 720911, -2147483647, 0, 720912, -2147483647, 0, 720913, -2147483647, 0, 720914, -2147483647, 0, 720915, -2147483647, 0 ) + +[node name="Props" type="Node2D" parent="."] +editor/display_folded = true + +[node name="RedBarrel" parent="Props" instance=ExtResource( 4 )] +position = Vector2( 270.228, 211.966 ) + +[node name="Barrier" parent="Props" instance=ExtResource( 5 )] +position = Vector2( 125.701, 286.686 ) +rotation = 0.90372 + +[node name="Barrier2" parent="Props" instance=ExtResource( 5 )] +position = Vector2( 540.293, 166.131 ) +rotation = -3.44753 + +[node name="Barrier3" parent="Props" instance=ExtResource( 5 )] +position = Vector2( 1138.86, 287.849 ) +rotation = -5.2847 + +[node name="SandBox" parent="Props" instance=ExtResource( 6 )] +position = Vector2( 419.161, 72.8766 ) +rotation = 2.82021 + +[node name="SandBox2" parent="Props" instance=ExtResource( 6 )] +position = Vector2( 518.152, 72.7521 ) +rotation = 3.49661 + +[node name="SandBox3" parent="Props" instance=ExtResource( 6 )] +position = Vector2( 284.826, 432.575 ) +rotation = 3.49661 + +[node name="SandBox4" parent="Props" instance=ExtResource( 6 )] +position = Vector2( 205.656, 431.745 ) +rotation = 2.57065 + +[node name="SandBox5" parent="Props" instance=ExtResource( 6 )] +position = Vector2( 153.263, 502.526 ) +rotation = 1.60838 + +[node name="MetalBox" parent="Props" instance=ExtResource( 7 )] +position = Vector2( 642.66, 355.679 ) +rotation = -2.62762 + +[node name="MetalBox2" parent="Props" instance=ExtResource( 7 )] +position = Vector2( 335.346, 491.025 ) +rotation = -3.9352 + +[node name="MetalBox3" parent="Props" instance=ExtResource( 7 )] +position = Vector2( 631.579, 540.721 ) +rotation = -3.30866 + +[node name="MetalBox4" parent="Props" instance=ExtResource( 7 )] +position = Vector2( 942.937, 424.377 ) +rotation = -3.30866 + +[node name="Twigs" parent="Props" instance=ExtResource( 8 )] +position = Vector2( 1211.41, 725.667 ) +rotation = 0.680538 + +[node name="Twigs2" parent="Props" instance=ExtResource( 8 )] +position = Vector2( 1525.15, 381.175 ) +rotation = 1.33765 + +[node name="Twigs3" parent="Props" instance=ExtResource( 8 )] +position = Vector2( 1270.88, 147.413 ) +rotation = 2.08097 + +[node name="Twigs4" parent="Props" instance=ExtResource( 8 )] +position = Vector2( 231.252, 737.97 ) +rotation = 5.07873 + +[node name="Twigs5" parent="Props" instance=ExtResource( 8 )] +position = Vector2( 750.04, 957.379 ) +rotation = 5.84309 + +[node name="Twigs6" parent="Props" instance=ExtResource( 8 )] +position = Vector2( 337.88, 969.682 ) +rotation = 6.70191 + +[node name="OilSpill" parent="Props" instance=ExtResource( 9 )] +position = Vector2( 1208.74, 571.995 ) +rotation = 2.13323 + +[node name="OilSpill2" parent="Props" instance=ExtResource( 9 )] +position = Vector2( 1733.25, 910.874 ) +rotation = 3.9263 + +[node name="OilSpill3" parent="Props" instance=ExtResource( 9 )] +position = Vector2( 1111.61, 958.361 ) +rotation = 4.6659 + +[node name="Tree" parent="Props" instance=ExtResource( 10 )] +position = Vector2( 1403.01, 777.049 ) +rotation = 0.746487 + +[node name="Tree2" parent="Props" instance=ExtResource( 10 )] +position = Vector2( 1333.93, 420.902 ) +rotation = 0.746487 + +[node name="Tree3" parent="Props" instance=ExtResource( 10 )] +position = Vector2( 576.311, 852.596 ) +rotation = 1.35409 + +[node name="Tree4" parent="Props" instance=ExtResource( 10 )] +position = Vector2( 187.787, 921.667 ) +rotation = -0.00873232 + +[node name="Navigation2D" type="Navigation2D" parent="."] +__meta__ = { +"_edit_lock_": true +} + +[node name="NavigationPolygonInstance" type="NavigationPolygonInstance" parent="Navigation2D"] +navpoly = SubResource( 2 ) + +[node name="SpawningPositions" type="Node2D" parent="."] +editor/display_folded = true +__meta__ = { +"_edit_lock_": true +} + +[node name="Position2D" type="Position2D" parent="SpawningPositions"] +position = Vector2( -128, 512 ) + +[node name="Position2D20" type="Position2D" parent="SpawningPositions"] +position = Vector2( -118, 778 ) + +[node name="Position2D2" type="Position2D" parent="SpawningPositions"] +position = Vector2( -128, 256 ) + +[node name="Position2D3" type="Position2D" parent="SpawningPositions"] +position = Vector2( -128, 128 ) + +[node name="Position2D4" type="Position2D" parent="SpawningPositions"] +position = Vector2( -118, 906 ) + +[node name="Position2D5" type="Position2D" parent="SpawningPositions"] +position = Vector2( 138, 1290 ) + +[node name="Position2D6" type="Position2D" parent="SpawningPositions"] +position = Vector2( 394, 1290 ) + +[node name="Position2D7" type="Position2D" parent="SpawningPositions"] +position = Vector2( 896, 1290 ) + +[node name="Position2D8" type="Position2D" parent="SpawningPositions"] +position = Vector2( 1418, 1290 ) + +[node name="Position2D9" type="Position2D" parent="SpawningPositions"] +position = Vector2( 1674, 1290 ) + +[node name="Position2D10" type="Position2D" parent="SpawningPositions"] +position = Vector2( 2186, 1034 ) + +[node name="Position2D11" type="Position2D" parent="SpawningPositions"] +position = Vector2( 2186, 906 ) + +[node name="Position2D12" type="Position2D" parent="SpawningPositions"] +position = Vector2( 2186, 640 ) + +[node name="Position2D13" type="Position2D" parent="SpawningPositions"] +position = Vector2( 2186, 266 ) + +[node name="Position2D14" type="Position2D" parent="SpawningPositions"] +position = Vector2( 2186, 138 ) + +[node name="Position2D15" type="Position2D" parent="SpawningPositions"] +position = Vector2( 1802, -246 ) + +[node name="Position2D16" type="Position2D" parent="SpawningPositions"] +position = Vector2( 1546, -246 ) + +[node name="Position2D17" type="Position2D" parent="SpawningPositions"] +position = Vector2( 896, -246 ) + +[node name="Position2D18" type="Position2D" parent="SpawningPositions"] +position = Vector2( 394, -246 ) + +[node name="Position2D19" type="Position2D" parent="SpawningPositions"] +position = Vector2( 138, -246 ) + +[node name="Tank" parent="." instance=ExtResource( 11 )] +position = Vector2( 974.346, 657.983 ) + +[node name="Timer" type="Timer" parent="."] + +[node name="Camera" parent="." instance=ExtResource( 12 )] + +[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"] diff --git a/02-06-game-juice/levels/camera/Camera.tscn b/02-06-game-juice/levels/camera/Camera.tscn new file mode 100644 index 0000000..e0c762a --- /dev/null +++ b/02-06-game-juice/levels/camera/Camera.tscn @@ -0,0 +1,16 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://levels/camera/ShakingCamera.gd" type="Script" id=1] + +[node name="Camera" type="Camera2D" groups=[ +"camera", +]] +editor/display_folded = true +position = Vector2( 960, 540 ) +current = true +script = ExtResource( 1 ) +DAMP_EASING = 1.41421 + +[node name="Timer" type="Timer" parent="."] +one_shot = true + diff --git a/02-06-game-juice/levels/camera/ShakingCamera.gd b/02-06-game-juice/levels/camera/ShakingCamera.gd new file mode 100644 index 0000000..a4b9640 --- /dev/null +++ b/02-06-game-juice/levels/camera/ShakingCamera.gd @@ -0,0 +1,52 @@ +extends Camera2D + +onready var timer : Timer = $Timer + +export var amplitude : = 6.0 +export var duration : = 0.8 setget set_duration +export(float, EASE) var DAMP_EASING : = 1.0 +export var shake : = false setget set_shake + +var enabled : = false + + +func _ready() -> void: + randomize() + set_process(false) + self.duration = duration + connect_to_shakers() + + +func _process(delta: float) -> void: + var damping : = ease(timer.time_left / timer.wait_time, DAMP_EASING) + offset = Vector2( + rand_range(amplitude, -amplitude) * damping, + rand_range(amplitude, -amplitude) * damping) + + +func _on_ShakeTimer_timeout() -> void: + self.shake = false + + +func _on_camera_shake_requested() -> void: + if not enabled: + return + self.shake = true + + +func set_duration(value: float) -> void: + duration = value + timer.wait_time = duration + + +func set_shake(value: bool) -> void: + shake = value + set_process(shake) + offset = Vector2() + if shake: + timer.start() + + +func connect_to_shakers() -> void: + for camera_shaker in get_tree().get_nodes_in_group("camera_shaker"): + camera_shaker.connect("camera_shake_requested", self, "_on_camera_shake_requested") diff --git a/02-06-game-juice/levels/props/Barrier.tscn b/02-06-game-juice/levels/props/Barrier.tscn new file mode 100644 index 0000000..7567d50 --- /dev/null +++ b/02-06-game-juice/levels/props/Barrier.tscn @@ -0,0 +1,17 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://levels/props/Prop.tscn" type="PackedScene" id=1] +[ext_resource path="res://assets/sprites/fenceRed.png" type="Texture" id=2] + +[sub_resource type="RectangleShape2D" id=1] + +extents = Vector2( 21.2382, 7.55904 ) + +[node name="Barrier" instance=ExtResource( 1 )] + +[node name="Sprite" parent="." index="0"] +texture = ExtResource( 2 ) + +[node name="CollisionShape2D" parent="." index="1"] +shape = SubResource( 1 ) + diff --git a/02-06-game-juice/levels/props/MetalBox.tscn b/02-06-game-juice/levels/props/MetalBox.tscn new file mode 100644 index 0000000..ee9a557 --- /dev/null +++ b/02-06-game-juice/levels/props/MetalBox.tscn @@ -0,0 +1,17 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://levels/props/Prop.tscn" type="PackedScene" id=1] +[ext_resource path="res://assets/sprites/crateMetal.png" type="Texture" id=2] + +[sub_resource type="RectangleShape2D" id=1] + +extents = Vector2( 25.6532, 23.105 ) + +[node name="MetalBox" instance=ExtResource( 1 )] + +[node name="Sprite" parent="." index="0"] +texture = ExtResource( 2 ) + +[node name="CollisionShape2D" parent="." index="1"] +shape = SubResource( 1 ) + diff --git a/02-06-game-juice/levels/props/OilSpill.tscn b/02-06-game-juice/levels/props/OilSpill.tscn new file mode 100644 index 0000000..a2328a1 --- /dev/null +++ b/02-06-game-juice/levels/props/OilSpill.tscn @@ -0,0 +1,13 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://levels/props/Prop.tscn" type="PackedScene" id=1] +[ext_resource path="res://assets/sprites/oilSpill_small.png" type="Texture" id=2] + +[node name="OilSpill" instance=ExtResource( 1 )] + +[node name="Sprite" parent="." index="0"] +texture = ExtResource( 2 ) + +[node name="CollisionShape2D" parent="." index="1"] +disabled = true + diff --git a/02-06-game-juice/levels/props/Prop.tscn b/02-06-game-juice/levels/props/Prop.tscn new file mode 100644 index 0000000..69b1067 --- /dev/null +++ b/02-06-game-juice/levels/props/Prop.tscn @@ -0,0 +1,18 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://levels/props/PropTween.gd" type="Script" id=1] + +[sub_resource type="CircleShape2D" id=1] + +radius = 30.0 + +[node name="Prop" type="StaticBody2D"] + +[node name="Sprite" type="Sprite" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource( 1 ) + +[node name="Tween" type="Tween" parent="."] +script = ExtResource( 1 ) + diff --git a/02-06-game-juice/levels/props/PropTween.gd b/02-06-game-juice/levels/props/PropTween.gd new file mode 100644 index 0000000..b5c7827 --- /dev/null +++ b/02-06-game-juice/levels/props/PropTween.gd @@ -0,0 +1,20 @@ +extends Tween + +export var min_time : = 0.4 +export var max_time : = 0.9 + +func _ready() -> void: + if not ActiveJuices.tweening: + return + + randomize() + var parent : = get_parent() + + interpolate_property(parent, + "scale", + Vector2.ZERO, + Vector2.ONE, + rand_range(min_time, max_time), + Tween.TRANS_CUBIC, + Tween.EASE_OUT) + start() diff --git a/02-06-game-juice/levels/props/RedBarrel.tscn b/02-06-game-juice/levels/props/RedBarrel.tscn new file mode 100644 index 0000000..0fc55c4 --- /dev/null +++ b/02-06-game-juice/levels/props/RedBarrel.tscn @@ -0,0 +1,10 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://levels/props/Prop.tscn" type="PackedScene" id=1] +[ext_resource path="res://assets/sprites/barrelRed_top.png" type="Texture" id=2] + +[node name="RedBarrel" index="0" instance=ExtResource( 1 )] + +[node name="Sprite" parent="." index="0"] +texture = ExtResource( 2 ) + diff --git a/02-06-game-juice/levels/props/SandBag.tscn b/02-06-game-juice/levels/props/SandBag.tscn new file mode 100644 index 0000000..8b64eac --- /dev/null +++ b/02-06-game-juice/levels/props/SandBag.tscn @@ -0,0 +1,17 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://levels/props/Prop.tscn" type="PackedScene" id=1] +[ext_resource path="res://assets/sprites/sandbagBeige_open.png" type="Texture" id=2] + +[sub_resource type="RectangleShape2D" id=1] + +extents = Vector2( 29.7137, 18.1713 ) + +[node name="SandBag" index="0" instance=ExtResource( 1 )] + +[node name="Sprite" parent="." index="0"] +texture = ExtResource( 2 ) + +[node name="CollisionShape2D" parent="." index="1"] +shape = SubResource( 1 ) + diff --git a/02-06-game-juice/levels/props/Tree.tscn b/02-06-game-juice/levels/props/Tree.tscn new file mode 100644 index 0000000..95e8e27 --- /dev/null +++ b/02-06-game-juice/levels/props/Tree.tscn @@ -0,0 +1,10 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://levels/props/Prop.tscn" type="PackedScene" id=1] +[ext_resource path="res://assets/sprites/treeGreen_small.png" type="Texture" id=2] + +[node name="Tree" instance=ExtResource( 1 )] + +[node name="Sprite" parent="." index="0"] +texture = ExtResource( 2 ) + diff --git a/02-06-game-juice/levels/props/Twigs.tscn b/02-06-game-juice/levels/props/Twigs.tscn new file mode 100644 index 0000000..86feb10 --- /dev/null +++ b/02-06-game-juice/levels/props/Twigs.tscn @@ -0,0 +1,13 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://levels/props/Prop.tscn" type="PackedScene" id=1] +[ext_resource path="res://assets/sprites/treeGreen_twigs.png" type="Texture" id=2] + +[node name="Twigs" instance=ExtResource( 1 )] + +[node name="Sprite" parent="." index="0"] +texture = ExtResource( 2 ) + +[node name="CollisionShape2D" parent="." index="1"] +disabled = true + diff --git a/02-06-game-juice/project.godot b/02-06-game-juice/project.godot new file mode 100644 index 0000000..3118202 --- /dev/null +++ b/02-06-game-juice/project.godot @@ -0,0 +1,86 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=4 + +_global_script_classes=[ { +"base": "Node", +"class": "ActiveJuices", +"language": "GDScript", +"path": "res://FX/ActiveJuices.gd" +}, { +"base": "KinematicBody2D", +"class": "Enemy", +"language": "GDScript", +"path": "res://actors/enemies/Enemy.gd" +} ] +_global_script_class_icons={ +"ActiveJuices": "", +"Enemy": "" +} + +[application] + +config/name="Game Juice" +run/main_scene="res://Game.tscn" +config/icon="res://icon.png" + +[autoload] + +ActiveJuices="*res://FX/ActiveJuices.gd" + +[display] + +window/size/width=1920 +window/size/height=1080 +window/size/fullscreen=true +window/size/test_width=844 +window/size/test_height=475 +mouse_cursor/custom_image="res://assets/sprites/ui/crosshair060.png" +mouse_cursor/custom_image_hotspot=Vector2( 36, 36 ) +window/stretch/mode="2d" +window/stretch/aspect="keep" + +[input] + +move_forward={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"unicode":0,"echo":false,"script":null) + ] +} +move_backward={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"unicode":0,"echo":false,"script":null) + ] +} +rotate_left={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"unicode":0,"echo":false,"script":null) + ] +} +rotate_right={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"unicode":0,"echo":false,"script":null) + ] +} +shoot={ +"deadzone": 0.5, +"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":1,"pressed":false,"doubleclick":false,"script":null) + ] +} +toggle_menu={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777218,"unicode":0,"echo":false,"script":null) + ] +} + +[rendering] + +vram_compression/import_etc=true +vram_compression/import_etc2=false +environment/default_environment="res://default_env.tres"