General enemy class. Two new enemy types. Removal of ship_speed
upgrades. Laser damage almost implemented. Multiplayer substantially improved.
|
@ -0,0 +1,14 @@
|
||||||
|
extends Node2D
|
||||||
|
var fly_speed = 5
|
||||||
|
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
pass
|
||||||
|
|
||||||
|
func _process(delta):
|
||||||
|
$bg1.position.x -= delta*fly_speed
|
||||||
|
$bg2.position.x -= delta*fly_speed
|
||||||
|
if $bg1.position.x < -550:
|
||||||
|
$bg1.position.x = 1600
|
||||||
|
if $bg2.position.x < -550:
|
||||||
|
$bg2.position.x = 1600
|
|
@ -0,0 +1,59 @@
|
||||||
|
#
|
||||||
|
# Copyright (C) 2018 Sage Vaillancourt, sagev9000@gmail.com
|
||||||
|
#
|
||||||
|
# This file is part of Fronter.
|
||||||
|
#
|
||||||
|
# Fronter is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# Fronter is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with Fronter. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
extends Area2D
|
||||||
|
|
||||||
|
signal dead
|
||||||
|
var speed = 50
|
||||||
|
var screensize
|
||||||
|
var health_multi = 1
|
||||||
|
var kill_reward = 0
|
||||||
|
|
||||||
|
var health = 1
|
||||||
|
var starting_health = 1
|
||||||
|
var hit_timer = 1000
|
||||||
|
|
||||||
|
func _on_Visibility_screen_exited():
|
||||||
|
queue_free()
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
connect("area_entered", self, "hit")
|
||||||
|
pass
|
||||||
|
|
||||||
|
func hit(who):
|
||||||
|
health -= who.damage/health_multi
|
||||||
|
hit_timer = 0
|
||||||
|
|
||||||
|
#var health_bar = Vector2(((health * 6) - 157), -273)
|
||||||
|
#$HealthBar.set_point_position( 1, health_bar )
|
||||||
|
|
||||||
|
if health <= 0:
|
||||||
|
emit_signal("dead", kill_reward)
|
||||||
|
queue_free()
|
||||||
|
|
||||||
|
var velocity = Vector2()
|
||||||
|
|
||||||
|
func _process(delta):
|
||||||
|
velocity.x -= 1
|
||||||
|
|
||||||
|
if velocity.length() > 0:
|
||||||
|
velocity = velocity.normalized() * speed
|
||||||
|
|
||||||
|
position += velocity * delta
|
||||||
|
prints(health)
|
|
@ -0,0 +1,32 @@
|
||||||
|
[gd_scene format=2]
|
||||||
|
|
||||||
|
[node name="BadClass" type="Area2D" index="0"]
|
||||||
|
|
||||||
|
input_pickable = true
|
||||||
|
gravity_vec = Vector2( 0, 1 )
|
||||||
|
gravity = 98.0
|
||||||
|
linear_damp = 0.1
|
||||||
|
angular_damp = 1.0
|
||||||
|
collision_layer = 2
|
||||||
|
collision_mask = 0
|
||||||
|
audio_bus_override = false
|
||||||
|
audio_bus_name = "Master"
|
||||||
|
_sections_unfolded = [ "Collision" ]
|
||||||
|
|
||||||
|
[node name="CollisionBox" type="CollisionShape2D" parent="." index="0"]
|
||||||
|
|
||||||
|
[node name="HealthBar" type="Line2D" parent="." index="1"]
|
||||||
|
|
||||||
|
points = PoolVector2Array( )
|
||||||
|
width = 12.0
|
||||||
|
default_color = Color( 0, 1, 0.0352941, 1 )
|
||||||
|
texture_mode = 892679477
|
||||||
|
sharp_limit = 2.0
|
||||||
|
round_precision = 8
|
||||||
|
|
||||||
|
[node name="MainSprite" type="AnimatedSprite" parent="." index="2"]
|
||||||
|
|
||||||
|
animation = "default"
|
||||||
|
_sections_unfolded = [ "Transform" ]
|
||||||
|
|
||||||
|
|
18
Bad1.gd
|
@ -37,17 +37,20 @@ func _ready():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
func hit(who):
|
func hit(who):
|
||||||
health -= 10/health_multi
|
health -= who.damage/health_multi
|
||||||
$AnimatedSprite.frame = 1
|
$AnimatedSprite.frame = 1
|
||||||
hit_timer = 0
|
hit_timer = 0
|
||||||
|
|
||||||
|
var health_bar = Vector2(((health * 6) - 157), -273)
|
||||||
|
$Line2D.set_point_position( 1, health_bar )
|
||||||
|
|
||||||
|
if health <= 0:
|
||||||
|
emit_signal("dead", 15)
|
||||||
|
queue_free()
|
||||||
|
|
||||||
var velocity = Vector2()
|
var velocity = Vector2()
|
||||||
|
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
if health <= 0:
|
|
||||||
emit_signal("dead", 15)
|
|
||||||
queue_free()
|
|
||||||
|
|
||||||
if hit_timer < 0.15:
|
if hit_timer < 0.15:
|
||||||
hit_timer += delta
|
hit_timer += delta
|
||||||
velocity.x = 0
|
velocity.x = 0
|
||||||
|
@ -57,11 +60,8 @@ func _process(delta):
|
||||||
else:
|
else:
|
||||||
velocity.x -= 1
|
velocity.x -= 1
|
||||||
$AnimatedSprite.frame = 0
|
$AnimatedSprite.frame = 0
|
||||||
|
|
||||||
if velocity.length() > 0:
|
if velocity.length() > 0:
|
||||||
velocity = velocity.normalized() * SPEED
|
velocity = velocity.normalized() * SPEED
|
||||||
|
|
||||||
var health_bar = Vector2(((health * 6) - 157), -273)
|
|
||||||
$Line2D.set_point_position( 1, health_bar )
|
|
||||||
|
|
||||||
position += velocity * delta
|
position += velocity * delta
|
|
@ -0,0 +1,15 @@
|
||||||
|
extends "res://Bad.gd"
|
||||||
|
|
||||||
|
# class member variables go here, for example:
|
||||||
|
# var a = 2
|
||||||
|
# var b = "textvar"
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
# Called every time the node is added to the scene.
|
||||||
|
# Initialization here
|
||||||
|
pass
|
||||||
|
|
||||||
|
#func _process(delta):
|
||||||
|
# # Called every frame. Delta is time since last frame.
|
||||||
|
# # Update game logic here.
|
||||||
|
# pass
|
|
@ -39,7 +39,7 @@ func _ready():
|
||||||
|
|
||||||
|
|
||||||
func hit(who):
|
func hit(who):
|
||||||
health -= 10/health_multi
|
health -= who.damage/health_multi
|
||||||
$AnimatedSprite.frame = 1
|
$AnimatedSprite.frame = 1
|
||||||
hit_timer = 0
|
hit_timer = 0
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ var velocity = Vector2()
|
||||||
|
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
if health <= 0:
|
if health <= 0:
|
||||||
emit_signal("dead", 200)
|
emit_signal("dead", 100)
|
||||||
queue_free()
|
queue_free()
|
||||||
|
|
||||||
$Rotatable.rotation_degrees += delta*fire_speed
|
$Rotatable.rotation_degrees += delta*fire_speed
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
extends "res://Bad.gd"
|
||||||
|
|
||||||
|
# class member variables go here, for example:
|
||||||
|
# var a = 2
|
||||||
|
# var b = "textvar"
|
||||||
|
|
||||||
|
var rot_speed = 1
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
starting_health = 5000
|
||||||
|
health = starting_health
|
||||||
|
speed = 10
|
||||||
|
position.x = 700
|
||||||
|
position.y = 300
|
||||||
|
|
||||||
|
var splitting = false
|
||||||
|
|
||||||
|
func _process(delta):
|
||||||
|
rotation += delta*rot_speed
|
||||||
|
if rotation > 2*PI:
|
||||||
|
rotation = 0
|
||||||
|
|
||||||
|
if health < starting_health*0.88:
|
||||||
|
$MainSprite.frame = 1
|
||||||
|
if health < starting_health*0.76:
|
||||||
|
$MainSprite.frame = 2
|
||||||
|
if health < starting_health*0.64:
|
||||||
|
$MainSprite.frame = 3
|
||||||
|
if health < starting_health*0.52:
|
||||||
|
$MainSprite.frame = 4
|
||||||
|
if health < starting_health*0.40:
|
||||||
|
$MainSprite.frame = 5
|
||||||
|
if health < starting_health*0.28:
|
||||||
|
$MainSprite.frame = 6
|
||||||
|
if health < starting_health*0.16:
|
||||||
|
$CollisionBox.disabled = true
|
||||||
|
$TopHalf.visible = true
|
||||||
|
$BotHalf.visible = true
|
||||||
|
$MainSprite.visible = false
|
||||||
|
if rotation_degrees > 45 && rotation_degrees < 70:
|
||||||
|
splitting = true
|
||||||
|
|
||||||
|
if splitting:
|
||||||
|
rot_speed = 0
|
||||||
|
$TopHalf.position.y -= delta*500
|
||||||
|
$TopHalf.position.x -= delta*250
|
||||||
|
$BotHalf.position.y += delta*500
|
||||||
|
$BotHalf.position.x += delta*250
|
||||||
|
|
||||||
|
$TopHalf.rotation += delta
|
||||||
|
$BotHalf.rotation -= delta
|
|
@ -0,0 +1,73 @@
|
||||||
|
[gd_scene load_steps=16 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://Bad.tscn" type="PackedScene" id=1]
|
||||||
|
[ext_resource path="res://BlackHole.gd" type="Script" id=2]
|
||||||
|
[ext_resource path="res://art/bad/BlackHole/base.png" type="Texture" id=3]
|
||||||
|
[ext_resource path="res://art/bad/BlackHole/base_1.png" type="Texture" id=4]
|
||||||
|
[ext_resource path="res://art/bad/BlackHole/base_2.png" type="Texture" id=5]
|
||||||
|
[ext_resource path="res://art/bad/BlackHole/base_3.png" type="Texture" id=6]
|
||||||
|
[ext_resource path="res://art/bad/BlackHole/base_4.png" type="Texture" id=7]
|
||||||
|
[ext_resource path="res://art/bad/BlackHole/base_5.png" type="Texture" id=8]
|
||||||
|
[ext_resource path="res://art/bad/BlackHole/base_6.png" type="Texture" id=9]
|
||||||
|
[ext_resource path="res://art/bad/BlackHole/half2.png" type="Texture" id=10]
|
||||||
|
[ext_resource path="res://art/bad/BlackHole/half1.png" type="Texture" id=11]
|
||||||
|
|
||||||
|
[sub_resource type="CircleShape2D" id=2]
|
||||||
|
|
||||||
|
custom_solver_bias = 0.0
|
||||||
|
radius = 904.987
|
||||||
|
|
||||||
|
[sub_resource type="SpriteFrames" id=1]
|
||||||
|
|
||||||
|
animations = [ {
|
||||||
|
"frames": [ ExtResource( 3 ), ExtResource( 4 ), ExtResource( 5 ), ExtResource( 6 ), ExtResource( 7 ), ExtResource( 8 ), ExtResource( 9 ) ],
|
||||||
|
"loop": true,
|
||||||
|
"name": "default",
|
||||||
|
"speed": 5.0
|
||||||
|
} ]
|
||||||
|
|
||||||
|
[sub_resource type="SpriteFrames" id=3]
|
||||||
|
|
||||||
|
animations = [ {
|
||||||
|
"frames": [ ExtResource( 10 ) ],
|
||||||
|
"loop": true,
|
||||||
|
"name": "default",
|
||||||
|
"speed": 5.0
|
||||||
|
} ]
|
||||||
|
|
||||||
|
[sub_resource type="SpriteFrames" id=4]
|
||||||
|
|
||||||
|
animations = [ {
|
||||||
|
"frames": [ ExtResource( 11 ) ],
|
||||||
|
"loop": true,
|
||||||
|
"name": "default",
|
||||||
|
"speed": 5.0
|
||||||
|
} ]
|
||||||
|
|
||||||
|
[node name="BlackHole" index="0" instance=ExtResource( 1 )]
|
||||||
|
|
||||||
|
scale = Vector2( 0.3, 0.3 )
|
||||||
|
script = ExtResource( 2 )
|
||||||
|
_sections_unfolded = [ "Collision", "Transform" ]
|
||||||
|
|
||||||
|
[node name="CollisionBox" parent="." index="0"]
|
||||||
|
|
||||||
|
shape = SubResource( 2 )
|
||||||
|
|
||||||
|
[node name="MainSprite" parent="." index="2"]
|
||||||
|
|
||||||
|
frames = SubResource( 1 )
|
||||||
|
|
||||||
|
[node name="TopHalf" type="AnimatedSprite" parent="." index="3"]
|
||||||
|
|
||||||
|
visible = false
|
||||||
|
frames = SubResource( 3 )
|
||||||
|
animation = "default"
|
||||||
|
|
||||||
|
[node name="BotHalf" type="AnimatedSprite" parent="." index="4"]
|
||||||
|
|
||||||
|
visible = false
|
||||||
|
frames = SubResource( 4 )
|
||||||
|
animation = "default"
|
||||||
|
|
||||||
|
|
2
Bloob.gd
|
@ -38,7 +38,7 @@ func _on_Visibility_screen_exited():
|
||||||
queue_free()
|
queue_free()
|
||||||
|
|
||||||
func hit(who):
|
func hit(who):
|
||||||
health -= 10/health_multi
|
health -= who.damage/health_multi
|
||||||
# $AnimatedSprite.frame = 1
|
# $AnimatedSprite.frame = 1
|
||||||
hit_timer = 0
|
hit_timer = 0
|
||||||
|
|
||||||
|
|
16
Bloob.tscn
|
@ -18,7 +18,7 @@ animations = [ {
|
||||||
"speed": 5.0
|
"speed": 5.0
|
||||||
} ]
|
} ]
|
||||||
|
|
||||||
[node name="Area2D" type="Area2D"]
|
[node name="BadBlob" type="Area2D"]
|
||||||
|
|
||||||
scale = Vector2( 0.25, 0.25 )
|
scale = Vector2( 0.25, 0.25 )
|
||||||
z_index = -1
|
z_index = -1
|
||||||
|
@ -27,6 +27,7 @@ gravity_vec = Vector2( 0, 1 )
|
||||||
gravity = 98.0
|
gravity = 98.0
|
||||||
linear_damp = 0.1
|
linear_damp = 0.1
|
||||||
angular_damp = 1.0
|
angular_damp = 1.0
|
||||||
|
collision_layer = 2
|
||||||
collision_mask = 0
|
collision_mask = 0
|
||||||
audio_bus_override = false
|
audio_bus_override = false
|
||||||
audio_bus_name = "Master"
|
audio_bus_name = "Master"
|
||||||
|
@ -44,4 +45,17 @@ shape = SubResource( 1 )
|
||||||
frames = SubResource( 2 )
|
frames = SubResource( 2 )
|
||||||
animation = "default"
|
animation = "default"
|
||||||
|
|
||||||
|
[node name="Line2D" type="Line2D" parent="." index="2"]
|
||||||
|
|
||||||
|
position = Vector2( 112, 65.3334 )
|
||||||
|
points = PoolVector2Array( -157, -273, 143, -273 )
|
||||||
|
width = 12.0
|
||||||
|
default_color = Color( 0, 1, 0.0390625, 1 )
|
||||||
|
texture_mode = 31
|
||||||
|
joint_mode = 2
|
||||||
|
begin_cap_mode = 2
|
||||||
|
end_cap_mode = 2
|
||||||
|
sharp_limit = 2.0
|
||||||
|
round_precision = 8
|
||||||
|
|
||||||
|
|
||||||
|
|
3
Laser.gd
|
@ -21,11 +21,14 @@ extends Area2D
|
||||||
|
|
||||||
signal hit
|
signal hit
|
||||||
|
|
||||||
|
const DEFAULT_DAMAGE = 10
|
||||||
|
|
||||||
export (int) var SPEED
|
export (int) var SPEED
|
||||||
export (int) var DAMAGE
|
export (int) var DAMAGE
|
||||||
var plasma = false
|
var plasma = false
|
||||||
var current_pen = 0
|
var current_pen = 0
|
||||||
var friendly_laser = true
|
var friendly_laser = true
|
||||||
|
var damage = DEFAULT_DAMAGE
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
$AnimatedSprite.play()
|
$AnimatedSprite.play()
|
||||||
|
|
|
@ -47,7 +47,6 @@ __meta__ = {
|
||||||
|
|
||||||
[node name="AnimatedSprite" type="AnimatedSprite" parent="." index="1"]
|
[node name="AnimatedSprite" type="AnimatedSprite" parent="." index="1"]
|
||||||
|
|
||||||
modulate = Color( 0, 0.71875, 1, 1 )
|
|
||||||
position = Vector2( -1.90735e-06, 0 )
|
position = Vector2( -1.90735e-06, 0 )
|
||||||
scale = Vector2( 0.1, 0.2 )
|
scale = Vector2( 0.1, 0.2 )
|
||||||
frames = SubResource( 2 )
|
frames = SubResource( 2 )
|
||||||
|
|
106
Main.gd
|
@ -22,7 +22,9 @@ extends Node
|
||||||
export (PackedScene) var FirstBad
|
export (PackedScene) var FirstBad
|
||||||
export (PackedScene) var BlobBad
|
export (PackedScene) var BlobBad
|
||||||
export (PackedScene) var LaserBad
|
export (PackedScene) var LaserBad
|
||||||
|
export (PackedScene) var Prison
|
||||||
export (PackedScene) var RectangleBoss
|
export (PackedScene) var RectangleBoss
|
||||||
|
export (PackedScene) var BlackHole
|
||||||
|
|
||||||
var players = {}
|
var players = {}
|
||||||
|
|
||||||
|
@ -38,12 +40,19 @@ var touchy_shooty = false
|
||||||
var my_info = { name = "sagethesagesage", color = "FFFFFF" }
|
var my_info = { name = "sagethesagesage", color = "FFFFFF" }
|
||||||
var mainmenu
|
var mainmenu
|
||||||
|
|
||||||
const BADDIE_WAIT_TIME_DEFAULT = 5
|
var not_loading = false
|
||||||
|
|
||||||
|
const BADDIE_WAIT_TIME_DEFAULT = 4
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
# Prepare black rectangle for fading in
|
# Prepare black rectangle for fading in
|
||||||
$ColorRect.visible = true
|
$ColorRect.visible = true
|
||||||
|
|
||||||
|
if OS.has_touchscreen_ui_hint():
|
||||||
|
$HowTo.visible = true
|
||||||
|
else:
|
||||||
|
$HowToDesktop.visible = true
|
||||||
|
|
||||||
# Launch the main menu on boot and pause the game
|
# Launch the main menu on boot and pause the game
|
||||||
mainmenu = preload("res://MainMenu.tscn").instance()
|
mainmenu = preload("res://MainMenu.tscn").instance()
|
||||||
add_child(mainmenu)
|
add_child(mainmenu)
|
||||||
|
@ -77,6 +86,13 @@ func _process(delta):
|
||||||
if (Input.is_action_pressed("ui_quit")):
|
if (Input.is_action_pressed("ui_quit")):
|
||||||
get_tree().quit()
|
get_tree().quit()
|
||||||
|
|
||||||
|
if Input.is_action_pressed("ui_right") || Input.is_action_pressed("ui_left"):
|
||||||
|
_on_HideHowTo_pressed()
|
||||||
|
if Input.is_action_pressed("ui_down") || Input.is_action_pressed("ui_up"):
|
||||||
|
_on_HideHowTo_pressed()
|
||||||
|
if Input.is_action_pressed("ui_accept"):
|
||||||
|
_on_HideHowTo_pressed()
|
||||||
|
|
||||||
# Constantly update point display
|
# Constantly update point display
|
||||||
updatePoints()
|
updatePoints()
|
||||||
|
|
||||||
|
@ -109,32 +125,36 @@ func _process(delta):
|
||||||
if rectangle_opacity <= 0:
|
if rectangle_opacity <= 0:
|
||||||
screen_flashing = false
|
screen_flashing = false
|
||||||
$ColorRect.visible = false
|
$ColorRect.visible = false
|
||||||
|
|
||||||
# After 100 enemies, enter bossMode
|
|
||||||
if total_bads_spawned == 100:
|
|
||||||
bossMode()
|
|
||||||
|
|
||||||
# When an enemy dies
|
# When an enemy dies
|
||||||
func _on_bad_death(kill_money):
|
func _on_bad_death(kill_money):
|
||||||
# Give players appropriate money
|
# Give players appropriate money
|
||||||
$Player.money += kill_money
|
$Player.money += kill_money
|
||||||
|
|
||||||
var a_round_of_bads = 30
|
#########################
|
||||||
|
# ENEMY SPAWNING SCRIPT #
|
||||||
|
#########################
|
||||||
|
var a_round_of_bads = 50
|
||||||
var sendblob = 1
|
var sendblob = 1
|
||||||
var bad_health_multi = 1
|
var bad_health_multi = 1.5
|
||||||
var total_bads_spawned = 0
|
var total_bads_spawned = 0
|
||||||
func BaddieTimer():
|
func BaddieTimer():
|
||||||
if total_bads_spawned == 75:
|
if total_bads_spawned == 5: # 75 default
|
||||||
if get_tree().is_network_server():
|
if get_tree().is_network_server():
|
||||||
|
total_bads_spawned += 1
|
||||||
rpc("bossMode")
|
rpc("bossMode")
|
||||||
else:
|
else:
|
||||||
|
total_bads_spawned += 1
|
||||||
bossMode()
|
bossMode()
|
||||||
total_bads_spawned += 1
|
|
||||||
|
|
||||||
if bads_this_round <= a_round_of_bads && bad_spawning_enabled:
|
if bads_this_round <= a_round_of_bads && bad_spawning_enabled:
|
||||||
var bad_type
|
var bad_type
|
||||||
var badposition = Vector2()
|
var badposition = Vector2()
|
||||||
if sendblob%20 == 0:
|
|
||||||
|
if sendblob%50 == 0:
|
||||||
|
bad_type = 3
|
||||||
|
sendblob += 1
|
||||||
|
elif sendblob%20 == 0:
|
||||||
bad_type = 2
|
bad_type = 2
|
||||||
sendblob += 1
|
sendblob += 1
|
||||||
elif sendblob%5 == 0:
|
elif sendblob%5 == 0:
|
||||||
|
@ -145,8 +165,8 @@ func BaddieTimer():
|
||||||
sendblob += 1
|
sendblob += 1
|
||||||
|
|
||||||
bads_this_round += 1
|
bads_this_round += 1
|
||||||
if $BaddieTimer.wait_time > 0.5:
|
if $BaddieTimer.wait_time > 1:
|
||||||
$BaddieTimer.wait_time = $BaddieTimer.wait_time * 0.975
|
$BaddieTimer.wait_time = $BaddieTimer.wait_time * 0.99
|
||||||
if bads_this_round == a_round_of_bads:
|
if bads_this_round == a_round_of_bads:
|
||||||
bad_health_multi *= 1.5
|
bad_health_multi *= 1.5
|
||||||
|
|
||||||
|
@ -167,14 +187,26 @@ sync func spawnBad(bad_type, position, health_multi):
|
||||||
bad = BlobBad.instance()
|
bad = BlobBad.instance()
|
||||||
if bad_type == 2:
|
if bad_type == 2:
|
||||||
bad = LaserBad.instance()
|
bad = LaserBad.instance()
|
||||||
|
if bad_type == 3:
|
||||||
|
bad = Prison.instance()
|
||||||
|
|
||||||
|
# Increase BG speed with each enemy spawned
|
||||||
|
$BG.fly_speed *= 1.01
|
||||||
|
|
||||||
|
# Add one to total of enemies spawned
|
||||||
total_bads_spawned += 1
|
total_bads_spawned += 1
|
||||||
|
|
||||||
add_child(bad)
|
add_child(bad)
|
||||||
bad.connect("dead", self, "_on_bad_death")
|
bad.connect("dead", self, "_on_bad_death")
|
||||||
|
if bad_type == 3:
|
||||||
|
bad.connect("health_up", self, "_on_health_up")
|
||||||
bad.health_multi = health_multi
|
bad.health_multi = health_multi
|
||||||
bad.position = position
|
bad.position = position
|
||||||
|
|
||||||
|
func _on_health_up(hp_increase):
|
||||||
|
$Mothership.health += hp_increase
|
||||||
|
$Mothership._update_health_bar()
|
||||||
|
|
||||||
func _on_PauseButton_pressed():
|
func _on_PauseButton_pressed():
|
||||||
$Player.upgradeMenu()
|
$Player.upgradeMenu()
|
||||||
|
|
||||||
|
@ -192,7 +224,10 @@ func _on_Player_restart_game():
|
||||||
for child in self.get_children():
|
for child in self.get_children():
|
||||||
if (child.has_method("_on_Visibility_screen_exited")):
|
if (child.has_method("_on_Visibility_screen_exited")):
|
||||||
child.queue_free()
|
child.queue_free()
|
||||||
|
if (child.has_method("bossHealth")):
|
||||||
|
child.queue_free()
|
||||||
bads_this_round = 0
|
bads_this_round = 0
|
||||||
|
total_bads_spawned = 0
|
||||||
$BaddieTimer.wait_time = BADDIE_WAIT_TIME_DEFAULT
|
$BaddieTimer.wait_time = BADDIE_WAIT_TIME_DEFAULT
|
||||||
$ShootButton.visible = true
|
$ShootButton.visible = true
|
||||||
|
|
||||||
|
@ -222,30 +257,33 @@ func double_laser_upgrade(id):
|
||||||
get_node(str(id)).double_laser = true
|
get_node(str(id)).double_laser = true
|
||||||
|
|
||||||
# Show other player's movement
|
# Show other player's movement
|
||||||
func _on_Player_multiplayer_movement(id, position, is_shooting):
|
func _on_Player_multiplayer_movement(id, pos, other_is_shooting):
|
||||||
get_node(str(id)).position = position
|
get_node(str(id)).position = pos
|
||||||
#prints("Set position of", id, "( currently", get_node(str(id)).position, ") to", position)
|
|
||||||
|
if other_is_shooting:
|
||||||
if is_shooting:
|
|
||||||
get_node(str(id)).shoot()
|
get_node(str(id)).shoot()
|
||||||
|
|
||||||
# BOSS MODE #
|
# BOSS MODE #
|
||||||
# Disable enemy spawning
|
# Disable enemy spawning
|
||||||
# Wait a few seconds for enemies to clear
|
# Wait a few seconds for enemies to clear
|
||||||
# Call for boss launch
|
# Call for boss launch
|
||||||
|
var bosstimer = null
|
||||||
sync func bossMode():
|
sync func bossMode():
|
||||||
|
prints("bossMode()")
|
||||||
bad_spawning_enabled = false
|
bad_spawning_enabled = false
|
||||||
var bosstimer = Timer.new()
|
bosstimer = Timer.new()
|
||||||
bosstimer.connect("timeout",self,"_launch_boss")
|
bosstimer.connect("timeout",self,"_launch_boss")
|
||||||
add_child(bosstimer) #to process
|
add_child(bosstimer) #to process
|
||||||
bosstimer.wait_time = 3 # 15 default
|
bosstimer.wait_time = 15
|
||||||
bosstimer.one_shot = true
|
bosstimer.one_shot = true
|
||||||
bosstimer.start() #to start
|
bosstimer.start() #to start
|
||||||
|
|
||||||
# Spawn the first boss
|
# Spawn the first boss
|
||||||
func _launch_boss():
|
func _launch_boss():
|
||||||
|
prints("_launch_boss()")
|
||||||
var bad
|
var bad
|
||||||
bad = RectangleBoss.instance()
|
#bad = RectangleBoss.instance()
|
||||||
|
bad = BlackHole.instance()
|
||||||
add_child(bad)
|
add_child(bad)
|
||||||
|
|
||||||
# Flash screen when signalled
|
# Flash screen when signalled
|
||||||
|
@ -254,12 +292,25 @@ func _launch_boss():
|
||||||
|
|
||||||
# Boss death functions the same as regular death
|
# Boss death functions the same as regular death
|
||||||
bad.connect("dead", self, "_on_boss_death")
|
bad.connect("dead", self, "_on_boss_death")
|
||||||
|
|
||||||
|
# Get boss health
|
||||||
|
bad.connect("boss_health", self, "getBossHealth")
|
||||||
|
|
||||||
|
func getBossHealth(currentHealth, totalHealth):
|
||||||
|
totalHealth = float(totalHealth)
|
||||||
|
var health_bar = Vector2(((currentHealth/totalHealth)*800)+100, 50)
|
||||||
|
$BossHealth.set_point_position(1, health_bar)
|
||||||
|
$BossHealth.default_color.a = 1
|
||||||
|
if currentHealth <= 0:
|
||||||
|
$BossHealth.default_color.a = 0
|
||||||
|
pass
|
||||||
|
|
||||||
# Currently same as regular enemy death
|
# Currently same as regular enemy death
|
||||||
func _on_boss_death(kill_money):
|
func _on_boss_death(kill_money):
|
||||||
# Give players appropriate money, and restart spawns
|
# Give players appropriate money, and restart spawns
|
||||||
$Player.money += kill_money
|
$Player.money += kill_money
|
||||||
bad_spawning_enabled = true
|
bad_spawning_enabled = true
|
||||||
|
bosstimer.stop()
|
||||||
|
|
||||||
# Begins screen-flashing process
|
# Begins screen-flashing process
|
||||||
func _flash_screen():
|
func _flash_screen():
|
||||||
|
@ -270,10 +321,11 @@ func _flash_screen():
|
||||||
|
|
||||||
func _load_players(id, info):
|
func _load_players(id, info):
|
||||||
player_info = info
|
player_info = info
|
||||||
#prints(player_info)
|
prints("_load_players", player_info)
|
||||||
#prints(player_info[id].name, "YEET", player_info[id].color)
|
#prints(player_info[id].name, "YEET", player_info[id].color)
|
||||||
|
|
||||||
func _start_multiplayer_game():
|
func _start_multiplayer_game():
|
||||||
|
print(player_info)
|
||||||
mainmenu.now_quitting = true
|
mainmenu.now_quitting = true
|
||||||
for peer_id in player_info:
|
for peer_id in player_info:
|
||||||
if peer_id != get_tree().get_network_unique_id():
|
if peer_id != get_tree().get_network_unique_id():
|
||||||
|
@ -282,4 +334,14 @@ func _start_multiplayer_game():
|
||||||
prints(str(peer_id), "yeetert")
|
prints(str(peer_id), "yeetert")
|
||||||
add_child(player)
|
add_child(player)
|
||||||
#get_node("/").add_child(player)
|
#get_node("/").add_child(player)
|
||||||
player.setUsername(player_info[peer_id].name)
|
player.setUsername(player_info[peer_id].name)
|
||||||
|
#$MultiplayerTimer.start()
|
||||||
|
|
||||||
|
func _on_HideHowTo_pressed():
|
||||||
|
$HowTo.visible = false
|
||||||
|
$HowToDesktop.visible = false
|
||||||
|
$HideHowTo.visible = false
|
||||||
|
|
||||||
|
func _on_Player_other_ship_enable_rainbow(id):
|
||||||
|
prints("Other player entered rainbow mode")
|
||||||
|
get_node(str(id)).enable_the_rainbow()
|
186
Main.tscn
|
@ -1,15 +1,20 @@
|
||||||
[gd_scene load_steps=13 format=2]
|
[gd_scene load_steps=20 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://Main.gd" type="Script" id=1]
|
[ext_resource path="res://Main.gd" type="Script" id=1]
|
||||||
[ext_resource path="res://Bad1.tscn" type="PackedScene" id=2]
|
[ext_resource path="res://Bad1.tscn" type="PackedScene" id=2]
|
||||||
[ext_resource path="res://Bloob.tscn" type="PackedScene" id=3]
|
[ext_resource path="res://Bloob.tscn" type="PackedScene" id=3]
|
||||||
[ext_resource path="res://BadLaser.tscn" type="PackedScene" id=4]
|
[ext_resource path="res://BadLaser.tscn" type="PackedScene" id=4]
|
||||||
[ext_resource path="res://RectangleBoss.tscn" type="PackedScene" id=5]
|
[ext_resource path="res://Prison.tscn" type="PackedScene" id=5]
|
||||||
[ext_resource path="res://art/bg.png" type="Texture" id=6]
|
[ext_resource path="res://RectangleBoss.tscn" type="PackedScene" id=6]
|
||||||
[ext_resource path="res://Player.tscn" type="PackedScene" id=7]
|
[ext_resource path="res://BlackHole.tscn" type="PackedScene" id=7]
|
||||||
[ext_resource path="res://Mothership.tscn" type="PackedScene" id=8]
|
[ext_resource path="res://BG.gd" type="Script" id=8]
|
||||||
[ext_resource path="res://art/interface/pause.png" type="Texture" id=9]
|
[ext_resource path="res://art/bg.png" type="Texture" id=9]
|
||||||
[ext_resource path="res://OtherPlayer.tscn" type="PackedScene" id=10]
|
[ext_resource path="res://Player.tscn" type="PackedScene" id=10]
|
||||||
|
[ext_resource path="res://Mothership.tscn" type="PackedScene" id=11]
|
||||||
|
[ext_resource path="res://OtherPlayer.tscn" type="PackedScene" id=12]
|
||||||
|
[ext_resource path="res://art/interface/how_to.png" type="Texture" id=13]
|
||||||
|
[ext_resource path="res://art/interface/how_to_desktop.png" type="Texture" id=14]
|
||||||
|
[ext_resource path="res://art/interface/pause.png" type="Texture" id=15]
|
||||||
|
|
||||||
[sub_resource type="ImageTexture" id=1]
|
[sub_resource type="ImageTexture" id=1]
|
||||||
|
|
||||||
|
@ -22,60 +27,82 @@ size = Vector2( 0, 0 )
|
||||||
[sub_resource type="SpriteFrames" id=2]
|
[sub_resource type="SpriteFrames" id=2]
|
||||||
|
|
||||||
animations = [ {
|
animations = [ {
|
||||||
"frames": [ ExtResource( 9 ) ],
|
"frames": [ ExtResource( 13 ) ],
|
||||||
"loop": true,
|
"loop": true,
|
||||||
"name": "default",
|
"name": "default",
|
||||||
"speed": 5.0
|
"speed": 5.0
|
||||||
} ]
|
} ]
|
||||||
|
|
||||||
[node name="Main" type="Node"]
|
[sub_resource type="SpriteFrames" id=3]
|
||||||
|
|
||||||
|
animations = [ {
|
||||||
|
"frames": [ ExtResource( 14 ) ],
|
||||||
|
"loop": true,
|
||||||
|
"name": "default",
|
||||||
|
"speed": 5.0
|
||||||
|
} ]
|
||||||
|
|
||||||
|
[sub_resource type="SpriteFrames" id=4]
|
||||||
|
|
||||||
|
animations = [ {
|
||||||
|
"frames": [ ExtResource( 15 ) ],
|
||||||
|
"loop": true,
|
||||||
|
"name": "default",
|
||||||
|
"speed": 5.0
|
||||||
|
} ]
|
||||||
|
|
||||||
|
[node name="Main" type="Node" index="0"]
|
||||||
|
|
||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
_sections_unfolded = [ "Pause" ]
|
_sections_unfolded = [ "Pause" ]
|
||||||
FirstBad = ExtResource( 2 )
|
FirstBad = ExtResource( 2 )
|
||||||
BlobBad = ExtResource( 3 )
|
BlobBad = ExtResource( 3 )
|
||||||
LaserBad = ExtResource( 4 )
|
LaserBad = ExtResource( 4 )
|
||||||
RectangleBoss = ExtResource( 5 )
|
Prison = ExtResource( 5 )
|
||||||
|
RectangleBoss = ExtResource( 6 )
|
||||||
|
BlackHole = ExtResource( 7 )
|
||||||
|
|
||||||
[node name="Sprite" type="Sprite" parent="." index="0"]
|
[node name="BG" type="Node2D" parent="." index="0"]
|
||||||
|
|
||||||
editor/display_folded = true
|
z_index = -1
|
||||||
|
script = ExtResource( 8 )
|
||||||
|
_sections_unfolded = [ "Z Index" ]
|
||||||
|
|
||||||
|
[node name="bg1" type="Sprite" parent="BG" index="0"]
|
||||||
|
|
||||||
|
position = Vector2( 577.646, 365.663 )
|
||||||
|
scale = Vector2( 0.694364, 0.694364 )
|
||||||
|
texture = ExtResource( 9 )
|
||||||
|
_sections_unfolded = [ "Transform" ]
|
||||||
|
|
||||||
|
[node name="bg2" type="Sprite" parent="BG" index="1"]
|
||||||
|
|
||||||
|
position = Vector2( 1823.66, 361.868 )
|
||||||
|
scale = Vector2( 0.6985, 0.6985 )
|
||||||
|
texture = ExtResource( 9 )
|
||||||
|
_sections_unfolded = [ "Transform" ]
|
||||||
|
|
||||||
|
[node name="Sprite" type="Sprite" parent="." index="1"]
|
||||||
|
|
||||||
|
visible = false
|
||||||
z_index = -5
|
z_index = -5
|
||||||
texture = SubResource( 1 )
|
texture = SubResource( 1 )
|
||||||
_sections_unfolded = [ "Z Index" ]
|
_sections_unfolded = [ "Z Index" ]
|
||||||
|
|
||||||
[node name="bg" type="Sprite" parent="Sprite" index="0"]
|
[node name="Player" parent="." index="2" instance=ExtResource( 10 )]
|
||||||
|
|
||||||
position = Vector2( 544.657, 347.107 )
|
[node name="BaddieTimer" type="Timer" parent="." index="3"]
|
||||||
texture = ExtResource( 6 )
|
|
||||||
|
|
||||||
[node name="Player" parent="." index="1" instance=ExtResource( 7 )]
|
|
||||||
|
|
||||||
[node name="BaddieTimer" type="Timer" parent="." index="2"]
|
|
||||||
|
|
||||||
process_mode = 1
|
process_mode = 1
|
||||||
wait_time = 1.0
|
wait_time = 2.0
|
||||||
one_shot = false
|
one_shot = false
|
||||||
autostart = false
|
autostart = false
|
||||||
|
|
||||||
[node name="Mothership" parent="." index="3" instance=ExtResource( 8 )]
|
[node name="Mothership" parent="." index="4" instance=ExtResource( 11 )]
|
||||||
|
|
||||||
editor/display_folded = true
|
|
||||||
position = Vector2( 18.327, 304.835 )
|
position = Vector2( 18.327, 304.835 )
|
||||||
|
|
||||||
[node name="Line2D" type="Line2D" parent="Mothership" index="2"]
|
[node name="MoneyDisplay" type="Label" parent="." index="5"]
|
||||||
|
|
||||||
position = Vector2( 32.7402, 101.849 )
|
|
||||||
scale = Vector2( 3.33333, 3.33333 )
|
|
||||||
points = PoolVector2Array( 100, 200, 900, 200 )
|
|
||||||
width = 15.0
|
|
||||||
default_color = Color( 0.037384, 0.683594, 0, 1 )
|
|
||||||
texture_mode = 31
|
|
||||||
sharp_limit = 2.0
|
|
||||||
round_precision = 8
|
|
||||||
_sections_unfolded = [ "Z Index" ]
|
|
||||||
|
|
||||||
[node name="MoneyDisplay" type="Label" parent="." index="4"]
|
|
||||||
|
|
||||||
anchor_left = 0.0
|
anchor_left = 0.0
|
||||||
anchor_top = 0.0
|
anchor_top = 0.0
|
||||||
|
@ -98,7 +125,57 @@ lines_skipped = 0
|
||||||
max_lines_visible = -1
|
max_lines_visible = -1
|
||||||
_sections_unfolded = [ "Size Flags", "custom_fonts" ]
|
_sections_unfolded = [ "Size Flags", "custom_fonts" ]
|
||||||
|
|
||||||
[node name="ShootButton" type="Button" parent="." index="5"]
|
[node name="OtherPlayer" parent="." index="6" instance=ExtResource( 12 )]
|
||||||
|
|
||||||
|
visible = false
|
||||||
|
_sections_unfolded = [ "Material", "Transform", "Visibility" ]
|
||||||
|
|
||||||
|
[node name="BossHealth" type="Line2D" parent="." index="7"]
|
||||||
|
|
||||||
|
points = PoolVector2Array( 100, 50, 900, 50 )
|
||||||
|
width = 15.0
|
||||||
|
default_color = Color( 1, 0, 0, 0 )
|
||||||
|
texture_mode = 31
|
||||||
|
sharp_limit = 2.0
|
||||||
|
round_precision = 8
|
||||||
|
|
||||||
|
[node name="ColorRect" type="ColorRect" parent="." index="8"]
|
||||||
|
|
||||||
|
visible = false
|
||||||
|
anchor_left = 0.0
|
||||||
|
anchor_top = 0.0
|
||||||
|
anchor_right = 0.0
|
||||||
|
anchor_bottom = 0.0
|
||||||
|
margin_right = 1026.0
|
||||||
|
margin_bottom = 601.0
|
||||||
|
rect_pivot_offset = Vector2( 0, 0 )
|
||||||
|
rect_clip_content = false
|
||||||
|
mouse_filter = 0
|
||||||
|
mouse_default_cursor_shape = 0
|
||||||
|
size_flags_horizontal = 1
|
||||||
|
size_flags_vertical = 1
|
||||||
|
color = Color( 0, 0, 0, 1 )
|
||||||
|
_sections_unfolded = [ "Visibility" ]
|
||||||
|
|
||||||
|
[node name="HowTo" type="AnimatedSprite" parent="." index="9"]
|
||||||
|
|
||||||
|
visible = false
|
||||||
|
position = Vector2( 482.397, 299.674 )
|
||||||
|
scale = Vector2( 0.42077, 0.42077 )
|
||||||
|
frames = SubResource( 2 )
|
||||||
|
animation = "default"
|
||||||
|
_sections_unfolded = [ "Transform", "Visibility" ]
|
||||||
|
|
||||||
|
[node name="HowToDesktop" type="AnimatedSprite" parent="." index="10"]
|
||||||
|
|
||||||
|
visible = false
|
||||||
|
position = Vector2( 482, 300 )
|
||||||
|
scale = Vector2( 0.42, 0.42 )
|
||||||
|
frames = SubResource( 3 )
|
||||||
|
animation = "default"
|
||||||
|
_sections_unfolded = [ "Transform", "Visibility" ]
|
||||||
|
|
||||||
|
[node name="ShootButton" type="Button" parent="." index="11"]
|
||||||
|
|
||||||
anchor_left = 0.0
|
anchor_left = 0.0
|
||||||
anchor_top = 0.0
|
anchor_top = 0.0
|
||||||
|
@ -124,7 +201,7 @@ flat = true
|
||||||
align = 1
|
align = 1
|
||||||
_sections_unfolded = [ "Theme" ]
|
_sections_unfolded = [ "Theme" ]
|
||||||
|
|
||||||
[node name="PauseButton" type="Button" parent="." index="6"]
|
[node name="PauseButton" type="Button" parent="." index="12"]
|
||||||
|
|
||||||
anchor_left = 0.0
|
anchor_left = 0.0
|
||||||
anchor_top = 0.0
|
anchor_top = 0.0
|
||||||
|
@ -148,34 +225,37 @@ group = null
|
||||||
flat = true
|
flat = true
|
||||||
align = 1
|
align = 1
|
||||||
|
|
||||||
[node name="Pause" type="AnimatedSprite" parent="." index="7"]
|
[node name="Pause" type="AnimatedSprite" parent="." index="13"]
|
||||||
|
|
||||||
position = Vector2( 972.128, 67.044 )
|
position = Vector2( 972.128, 67.044 )
|
||||||
scale = Vector2( 0.199771, 0.199771 )
|
scale = Vector2( 0.199771, 0.199771 )
|
||||||
frames = SubResource( 2 )
|
frames = SubResource( 4 )
|
||||||
animation = "default"
|
animation = "default"
|
||||||
|
|
||||||
[node name="OtherPlayer" parent="." index="8" instance=ExtResource( 10 )]
|
[node name="HideHowTo" type="Button" parent="." index="14"]
|
||||||
|
|
||||||
visible = false
|
|
||||||
_sections_unfolded = [ "Transform", "Visibility" ]
|
|
||||||
|
|
||||||
[node name="ColorRect" type="ColorRect" parent="." index="9"]
|
|
||||||
|
|
||||||
visible = false
|
|
||||||
anchor_left = 0.0
|
anchor_left = 0.0
|
||||||
anchor_top = 0.0
|
anchor_top = 0.0
|
||||||
anchor_right = 0.0
|
anchor_right = 0.0
|
||||||
anchor_bottom = 0.0
|
anchor_bottom = 0.0
|
||||||
margin_right = 1026.0
|
margin_left = -50.0
|
||||||
margin_bottom = 601.0
|
margin_top = -15.0
|
||||||
|
margin_right = 1044.0
|
||||||
|
margin_bottom = 623.0
|
||||||
rect_pivot_offset = Vector2( 0, 0 )
|
rect_pivot_offset = Vector2( 0, 0 )
|
||||||
rect_clip_content = false
|
rect_clip_content = false
|
||||||
|
focus_mode = 2
|
||||||
mouse_filter = 0
|
mouse_filter = 0
|
||||||
mouse_default_cursor_shape = 0
|
mouse_default_cursor_shape = 0
|
||||||
size_flags_horizontal = 1
|
size_flags_horizontal = 1
|
||||||
size_flags_vertical = 1
|
size_flags_vertical = 1
|
||||||
color = Color( 0, 0, 0, 1 )
|
toggle_mode = false
|
||||||
|
action_mode = 0
|
||||||
|
enabled_focus_mode = 2
|
||||||
|
shortcut = null
|
||||||
|
group = null
|
||||||
|
flat = true
|
||||||
|
align = 1
|
||||||
_sections_unfolded = [ "Visibility" ]
|
_sections_unfolded = [ "Visibility" ]
|
||||||
|
|
||||||
[connection signal="body_entered" from="Player" to="Player" method="_on_Player_body_entered"]
|
[connection signal="body_entered" from="Player" to="Player" method="_on_Player_body_entered"]
|
||||||
|
@ -186,12 +266,14 @@ _sections_unfolded = [ "Visibility" ]
|
||||||
|
|
||||||
[connection signal="other_ship_color_change" from="Player" to="." method="other_ship_color_change"]
|
[connection signal="other_ship_color_change" from="Player" to="." method="other_ship_color_change"]
|
||||||
|
|
||||||
|
[connection signal="other_ship_enable_rainbow" from="Player" to="." method="_on_Player_other_ship_enable_rainbow"]
|
||||||
|
|
||||||
[connection signal="other_shooting_upgrade" from="Player" to="." method="other_shooting_upgrade"]
|
[connection signal="other_shooting_upgrade" from="Player" to="." method="other_shooting_upgrade"]
|
||||||
|
|
||||||
[connection signal="restart_game" from="Player" to="Mothership" method="_on_Player_restart_game"]
|
|
||||||
|
|
||||||
[connection signal="restart_game" from="Player" to="." method="_on_Player_restart_game"]
|
[connection signal="restart_game" from="Player" to="." method="_on_Player_restart_game"]
|
||||||
|
|
||||||
|
[connection signal="restart_game" from="Player" to="Mothership" method="_on_Player_restart_game"]
|
||||||
|
|
||||||
[connection signal="update_display" from="Player" to="." method="_on_Player_update_display"]
|
[connection signal="update_display" from="Player" to="." method="_on_Player_update_display"]
|
||||||
|
|
||||||
[connection signal="timeout" from="BaddieTimer" to="." method="BaddieTimer"]
|
[connection signal="timeout" from="BaddieTimer" to="." method="BaddieTimer"]
|
||||||
|
@ -206,4 +288,6 @@ _sections_unfolded = [ "Visibility" ]
|
||||||
|
|
||||||
[connection signal="pressed" from="PauseButton" to="." method="_on_PauseButton_pressed"]
|
[connection signal="pressed" from="PauseButton" to="." method="_on_PauseButton_pressed"]
|
||||||
|
|
||||||
|
[connection signal="pressed" from="HideHowTo" to="." method="_on_HideHowTo_pressed"]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,9 @@ func _process(delta):
|
||||||
if (Input.is_action_pressed("ui_quit")):
|
if (Input.is_action_pressed("ui_quit")):
|
||||||
get_tree().quit()
|
get_tree().quit()
|
||||||
|
|
||||||
|
#if (Input.is_action_pressed("ui_accept")):
|
||||||
|
# now_quitting = true
|
||||||
|
|
||||||
if ($Ship.rotation_degrees > -7 || $Ship.rotation_degrees < -13):
|
if ($Ship.rotation_degrees > -7 || $Ship.rotation_degrees < -13):
|
||||||
rotation_multiplier = SLOW_ROTATION
|
rotation_multiplier = SLOW_ROTATION
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -36,40 +36,42 @@ var timer = null
|
||||||
var bullet_delay = 0.1
|
var bullet_delay = 0.1
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
var health_bar = Vector2(((health * (.8)) + 100), 200)
|
_update_health_bar()
|
||||||
$Line2D.set_point_position( 1, health_bar )
|
|
||||||
pass
|
|
||||||
# timer = Timer.new()
|
|
||||||
# timer.set_one_shot(true)
|
|
||||||
# timer.set_wait_time(bullet_delay)
|
|
||||||
# timer.connect("timeout", self, "on_timeout_complete")
|
|
||||||
# add_child(timer)
|
|
||||||
|
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
if get_tree().has_network_peer() && not get_tree().is_network_server():
|
if get_tree().has_network_peer() && not get_tree().is_network_server():
|
||||||
#health = slave_health
|
#health = slave_health
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
if health <= 100 && $BlownOut/WhoopsGuy.unit_offset < 1:
|
||||||
|
$BlownOut/WhoopsGuy.unit_offset += delta
|
||||||
|
|
||||||
func _on_Mothership_area_shape_entered(area_id, area, area_shape, self_shape):
|
func _on_Mothership_area_shape_entered(area_id, area, area_shape, self_shape):
|
||||||
if not get_tree().has_network_peer():
|
#if not get_tree().has_network_peer():
|
||||||
|
if not get_tree().is_network_server():
|
||||||
health -= 50
|
health -= 50
|
||||||
if get_tree().is_network_server():
|
if get_tree().is_network_server():
|
||||||
health -= 50
|
health -= 50
|
||||||
rset("slave_health", health)
|
rset("slave_health", health)
|
||||||
prints(health)
|
|
||||||
var health_bar = Vector2(((health * (.8)) + 100), 200)
|
_update_health_bar()
|
||||||
$Line2D.set_point_position( 1, health_bar )
|
|
||||||
if health <= 250:
|
if health <= 250:
|
||||||
$AnimatedSprite.frame = 1
|
$BaseSprite.frame = 1
|
||||||
if health <= 100:
|
if health <= 100:
|
||||||
$AnimatedSprite.frame = 2
|
$BaseSprite.frame = 2
|
||||||
if health <= 0:
|
if health <= 0:
|
||||||
$AnimatedSprite.frame = 3
|
$BaseSprite.frame = 3
|
||||||
emit_signal("game_over")
|
emit_signal("game_over")
|
||||||
prints("Game Over!")
|
prints("Game Over!")
|
||||||
|
|
||||||
func _on_Player_restart_game():
|
func _on_Player_restart_game():
|
||||||
health = STARTING_HEALTH
|
health = STARTING_HEALTH
|
||||||
$AnimatedSprite.frame = 0
|
$BaseSprite.frame = 0
|
||||||
var health_bar = Vector2(((health * (.8)) + 100), 200)
|
var health_bar = Vector2(((health * (.8)) + 100), 300)
|
||||||
$Line2D.set_point_position( 1, health_bar )
|
$Line2D.set_point_position( 1, health_bar )
|
||||||
|
|
||||||
|
func _update_health_bar():
|
||||||
|
var health_bar = Vector2(((health * (.8)) + 100), 300)
|
||||||
|
$Line2D.set_point_position( 1, health_bar )
|
||||||
|
print(health)
|
|
@ -1,4 +1,4 @@
|
||||||
[gd_scene load_steps=9 format=2]
|
[gd_scene load_steps=11 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://Mothership.gd" type="Script" id=1]
|
[ext_resource path="res://Mothership.gd" type="Script" id=1]
|
||||||
[ext_resource path="res://Laser.tscn" type="PackedScene" id=2]
|
[ext_resource path="res://Laser.tscn" type="PackedScene" id=2]
|
||||||
|
@ -6,6 +6,7 @@
|
||||||
[ext_resource path="res://art/mothership/mothership_damage1.png" type="Texture" id=4]
|
[ext_resource path="res://art/mothership/mothership_damage1.png" type="Texture" id=4]
|
||||||
[ext_resource path="res://art/mothership/mothership_damage2.png" type="Texture" id=5]
|
[ext_resource path="res://art/mothership/mothership_damage2.png" type="Texture" id=5]
|
||||||
[ext_resource path="res://art/mothership/mothership_ruined.png" type="Texture" id=6]
|
[ext_resource path="res://art/mothership/mothership_ruined.png" type="Texture" id=6]
|
||||||
|
[ext_resource path="res://art/mothership/whoops_guy.png" type="Texture" id=7]
|
||||||
|
|
||||||
[sub_resource type="CapsuleShape2D" id=1]
|
[sub_resource type="CapsuleShape2D" id=1]
|
||||||
|
|
||||||
|
@ -22,15 +23,24 @@ animations = [ {
|
||||||
"speed": 5.0
|
"speed": 5.0
|
||||||
} ]
|
} ]
|
||||||
|
|
||||||
|
[sub_resource type="Curve2D" id=3]
|
||||||
|
|
||||||
|
bake_interval = 5.0
|
||||||
|
_data = {
|
||||||
|
"points": PoolVector2Array( 0, 0, 0, 0, -815.417, -275.207, -142.554, 423.496, 70.8929, -199.411, -142.027, -653.941, 0, 0, 0, 0, 36.6832, -1766.51 )
|
||||||
|
}
|
||||||
|
_sections_unfolded = [ "Resource" ]
|
||||||
|
|
||||||
[node name="Mothership" type="Area2D"]
|
[node name="Mothership" type="Area2D"]
|
||||||
|
|
||||||
position = Vector2( 23.327, 304.835 )
|
position = Vector2( 42.1613, 302.944 )
|
||||||
scale = Vector2( 0.3, 0.3 )
|
scale = Vector2( 0.263572, 0.240903 )
|
||||||
input_pickable = true
|
input_pickable = true
|
||||||
gravity_vec = Vector2( 0, 1 )
|
gravity_vec = Vector2( 0, 1 )
|
||||||
gravity = 98.0
|
gravity = 98.0
|
||||||
linear_damp = 0.1
|
linear_damp = 0.1
|
||||||
angular_damp = 1.0
|
angular_damp = 1.0
|
||||||
|
monitorable = false
|
||||||
collision_layer = 31
|
collision_layer = 31
|
||||||
collision_mask = 31
|
collision_mask = 31
|
||||||
audio_bus_override = false
|
audio_bus_override = false
|
||||||
|
@ -44,10 +54,46 @@ Laser = ExtResource( 2 )
|
||||||
position = Vector2( -110, 0 )
|
position = Vector2( -110, 0 )
|
||||||
shape = SubResource( 1 )
|
shape = SubResource( 1 )
|
||||||
|
|
||||||
[node name="AnimatedSprite" type="AnimatedSprite" parent="." index="1"]
|
[node name="BaseSprite" type="AnimatedSprite" parent="." index="1"]
|
||||||
|
|
||||||
|
position = Vector2( 78.4, 0 )
|
||||||
frames = SubResource( 2 )
|
frames = SubResource( 2 )
|
||||||
animation = "default"
|
animation = "default"
|
||||||
|
_sections_unfolded = [ "Transform" ]
|
||||||
|
|
||||||
|
[node name="BlownOut" type="Path2D" parent="." index="2"]
|
||||||
|
|
||||||
|
position = Vector2( 935.039, 262.064 )
|
||||||
|
curve = SubResource( 3 )
|
||||||
|
|
||||||
|
[node name="WhoopsGuy" type="PathFollow2D" parent="BlownOut" index="0"]
|
||||||
|
|
||||||
|
position = Vector2( -815.417, -275.207 )
|
||||||
|
rotation = -0.0246469
|
||||||
|
offset = 0.0
|
||||||
|
h_offset = 0.0
|
||||||
|
v_offset = 0.0
|
||||||
|
rotate = false
|
||||||
|
cubic_interp = true
|
||||||
|
loop = false
|
||||||
|
lookahead = 4.0
|
||||||
|
|
||||||
|
[node name="whoops_guy" type="Sprite" parent="BlownOut/WhoopsGuy" index="0"]
|
||||||
|
|
||||||
|
rotation = -1.39698e-09
|
||||||
|
texture = ExtResource( 7 )
|
||||||
|
_sections_unfolded = [ "Offset", "Transform" ]
|
||||||
|
|
||||||
|
[node name="Line2D" type="Line2D" parent="." index="3"]
|
||||||
|
|
||||||
|
position = Vector2( 32.7402, 101.849 )
|
||||||
|
scale = Vector2( 3.33333, 3.33333 )
|
||||||
|
points = PoolVector2Array( 100, 300, 900, 300 )
|
||||||
|
width = 15.0
|
||||||
|
default_color = Color( 0.037384, 0.683594, 0, 1 )
|
||||||
|
texture_mode = 31
|
||||||
|
sharp_limit = 2.0
|
||||||
|
round_precision = 8
|
||||||
|
|
||||||
[connection signal="area_shape_entered" from="." to="." method="_on_Mothership_area_shape_entered"]
|
[connection signal="area_shape_entered" from="." to="." method="_on_Mothership_area_shape_entered"]
|
||||||
|
|
||||||
|
|
|
@ -95,15 +95,19 @@ func _server_disconnected():
|
||||||
func _connected_fail():
|
func _connected_fail():
|
||||||
pass # Could not even connect to server, abort
|
pass # Could not even connect to server, abort
|
||||||
|
|
||||||
remote func register_player(id, info):
|
remote func register_player(new_id, info):
|
||||||
player_info[id] = info
|
prints("REGISTERING", new_id, info)
|
||||||
|
player_info[new_id] = info
|
||||||
if get_tree().is_network_server():
|
if get_tree().is_network_server():
|
||||||
# Send my info to new player
|
# Send my info to new player
|
||||||
#rpc_id(id, "register_player", 1, my_info)
|
rpc_id(new_id, "register_player", 1, my_info)
|
||||||
# Send the info of existing players
|
# Send the info of existing players
|
||||||
for peer_id in player_info:
|
for peer_id in player_info:
|
||||||
rpc_id(id, "register_player", peer_id, player_info[peer_id])
|
if peer_id != new_id:
|
||||||
emit_signal("player_info", id, player_info)
|
rpc_id(new_id, "register_player", peer_id, player_info[peer_id])
|
||||||
|
rpc_id(peer_id, "register_player", new_id, player_info[new_id])
|
||||||
|
#player_info[new_id] = info
|
||||||
|
emit_signal("player_info", new_id, player_info)
|
||||||
|
|
||||||
$Lobby/RichTextLabel.bbcode_text = ""
|
$Lobby/RichTextLabel.bbcode_text = ""
|
||||||
#$Players.text = str(player_info)
|
#$Players.text = str(player_info)
|
||||||
|
|
|
@ -99,7 +99,7 @@ animations = [ {
|
||||||
"speed": 5.0
|
"speed": 5.0
|
||||||
} ]
|
} ]
|
||||||
|
|
||||||
[node name="Networking" type="Node" index="0"]
|
[node name="Networking" type="Node"]
|
||||||
|
|
||||||
pause_mode = 2
|
pause_mode = 2
|
||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
|
|
|
@ -77,8 +77,6 @@ func _ready():
|
||||||
add_child(timer)
|
add_child(timer)
|
||||||
timer.start()
|
timer.start()
|
||||||
|
|
||||||
$AnimatedSprite.modulate = \"00FFFF\"
|
|
||||||
|
|
||||||
position.x = 100
|
position.x = 100
|
||||||
position.y = 250
|
position.y = 250
|
||||||
|
|
||||||
|
@ -109,10 +107,22 @@ func setUsername(name):
|
||||||
username = name
|
username = name
|
||||||
|
|
||||||
func modulate(color):
|
func modulate(color):
|
||||||
$AnimatedSprite.modulate = color
|
if !rainbow_is_on:
|
||||||
|
$AnimatedSprite.modulate = color
|
||||||
|
|
||||||
|
var rainbow = Color(0,0,0,1)
|
||||||
|
var r_up = true
|
||||||
|
var g_up = true
|
||||||
|
var b_up = true
|
||||||
|
var rainbow_speed = 30
|
||||||
|
var rainbow_is_on = false
|
||||||
|
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
$Username.text = username
|
$Username.text = username
|
||||||
|
|
||||||
|
if rainbow_is_on:
|
||||||
|
rainbow(delta)
|
||||||
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
func shoot():
|
func shoot():
|
||||||
|
@ -132,9 +142,36 @@ func shoot():
|
||||||
laser2.position.x = position.x + 46
|
laser2.position.x = position.x + 46
|
||||||
laser2.current_pen = laser_penetration
|
laser2.current_pen = laser_penetration
|
||||||
|
|
||||||
|
|
||||||
can_shoot = false
|
can_shoot = false
|
||||||
timer.start()"
|
timer.start()
|
||||||
|
|
||||||
|
# Funky colors #
|
||||||
|
func enable_the_rainbow():
|
||||||
|
rainbow_is_on = true
|
||||||
|
|
||||||
|
func rainbow(delta):
|
||||||
|
if rainbow.r < 1 && r_up:
|
||||||
|
rainbow.r += rainbow_speed*delta/10
|
||||||
|
if rainbow.r >= 1: r_up = false
|
||||||
|
else:
|
||||||
|
rainbow.r -= rainbow_speed*delta/10
|
||||||
|
if rainbow.r <= 0.2: r_up = true
|
||||||
|
|
||||||
|
if rainbow.g < 1 && g_up:
|
||||||
|
rainbow.g += rainbow_speed*delta/9
|
||||||
|
if rainbow.g >= 1: g_up = false
|
||||||
|
else:
|
||||||
|
rainbow.g -= rainbow_speed*delta/9
|
||||||
|
if rainbow.g <= 0.2: g_up = true
|
||||||
|
|
||||||
|
if rainbow.b < 1 && b_up:
|
||||||
|
rainbow.b += rainbow_speed*delta/8
|
||||||
|
if rainbow.b >= 1: b_up = false
|
||||||
|
else:
|
||||||
|
rainbow.b -= rainbow_speed*delta/8
|
||||||
|
if rainbow.b <= 0.2: b_up = true
|
||||||
|
|
||||||
|
$AnimatedSprite.modulate = rainbow"
|
||||||
_sections_unfolded = [ "Resource" ]
|
_sections_unfolded = [ "Resource" ]
|
||||||
|
|
||||||
[sub_resource type="SpriteFrames" id=2]
|
[sub_resource type="SpriteFrames" id=2]
|
||||||
|
@ -165,11 +202,11 @@ collision_mask = 29
|
||||||
audio_bus_override = false
|
audio_bus_override = false
|
||||||
audio_bus_name = "Master"
|
audio_bus_name = "Master"
|
||||||
script = SubResource( 1 )
|
script = SubResource( 1 )
|
||||||
|
_sections_unfolded = [ "Material" ]
|
||||||
Laser = ExtResource( 1 )
|
Laser = ExtResource( 1 )
|
||||||
|
|
||||||
[node name="AnimatedSprite" type="AnimatedSprite" parent="." index="0"]
|
[node name="AnimatedSprite" type="AnimatedSprite" parent="." index="0"]
|
||||||
|
|
||||||
modulate = Color( 0.276855, 0.445152, 0.84375, 1 )
|
|
||||||
position = Vector2( 1.01175, 7.07602 )
|
position = Vector2( 1.01175, 7.07602 )
|
||||||
scale = Vector2( 0.2, 0.2 )
|
scale = Vector2( 0.2, 0.2 )
|
||||||
frames = SubResource( 2 )
|
frames = SubResource( 2 )
|
||||||
|
|
115
Player.gd
|
@ -23,13 +23,11 @@ extends Area2D
|
||||||
signal update_display # tells parent to update points display
|
signal update_display # tells parent to update points display
|
||||||
signal refund # will tell parent a refund is occuring, for display
|
signal refund # will tell parent a refund is occuring, for display
|
||||||
signal shooting_speed_upgrade # signals that a shooting speed upgrade has occured
|
signal shooting_speed_upgrade # signals that a shooting speed upgrade has occured
|
||||||
signal ship_speed_upgrade
|
|
||||||
signal other_shooting_upgrade
|
signal other_shooting_upgrade
|
||||||
signal other_ship_speed_upgrade
|
|
||||||
signal double_laser_upgrade
|
signal double_laser_upgrade
|
||||||
signal other_ship_color_change
|
signal other_ship_color_change
|
||||||
|
signal other_ship_enable_rainbow
|
||||||
signal shooting_speed_fully_upgraded
|
signal shooting_speed_fully_upgraded
|
||||||
signal ship_speed_fully_upgraded
|
|
||||||
signal restart_game
|
signal restart_game
|
||||||
signal multiplayer_movement
|
signal multiplayer_movement
|
||||||
|
|
||||||
|
@ -39,6 +37,8 @@ export (PackedScene) var Laser
|
||||||
# THINGS THAT MAY NEED ADJUSTING
|
# THINGS THAT MAY NEED ADJUSTING
|
||||||
#################################
|
#################################
|
||||||
|
|
||||||
|
var ship_speed = 500
|
||||||
|
|
||||||
# first 5 tiers of shooting speed
|
# first 5 tiers of shooting speed
|
||||||
const BULLET_DELAY_TIER1 = 0.8
|
const BULLET_DELAY_TIER1 = 0.8
|
||||||
const BULLET_DELAY_TIER2 = 0.5
|
const BULLET_DELAY_TIER2 = 0.5
|
||||||
|
@ -61,21 +61,21 @@ const BULLET_DELAY_TIER5_COST = 1000
|
||||||
# double laser cost
|
# double laser cost
|
||||||
const DOUBLE_LASER_COST = 2000
|
const DOUBLE_LASER_COST = 2000
|
||||||
|
|
||||||
# the 5 tiers of ship speed
|
# 5 tiers of laser damage
|
||||||
const SHIP_SPEED_TIER1 = 150
|
const LASER_DAMAGE_TIER1 = 10
|
||||||
const SHIP_SPEED_TIER2 = 200
|
const LASER_DAMAGE_TIER2 = 12
|
||||||
const SHIP_SPEED_TIER3 = 300
|
const LASER_DAMAGE_TIER3 = 15
|
||||||
const SHIP_SPEED_TIER4 = 500
|
const LASER_DAMAGE_TIER4 = 20
|
||||||
const SHIP_SPEED_TIER5 = 800
|
const LASER_DAMAGE_TIER5 = 50
|
||||||
|
|
||||||
# costs of ship speed upgrades
|
# costs of laser damage upgrades
|
||||||
const SHIP_SPEED_TIER2_COST = 200
|
const LASER_DAMAGE_TIER2_COST = 200
|
||||||
const SHIP_SPEED_TIER3_COST = 400
|
const LASER_DAMAGE_TIER3_COST = 500
|
||||||
const SHIP_SPEED_TIER4_COST = 600
|
const LASER_DAMAGE_TIER4_COST = 1000
|
||||||
const SHIP_SPEED_TIER5_COST = 800
|
const LASER_DAMAGE_TIER5_COST = 2000
|
||||||
|
|
||||||
# the ship's starting position
|
# the ship's starting position
|
||||||
const STARTING_POSITION = Vector2(100, 250)
|
const STARTING_POSITION = Vector2(130, 250)
|
||||||
|
|
||||||
# the amount of money the player starts with
|
# the amount of money the player starts with
|
||||||
const STARTING_MONEY = 100
|
const STARTING_MONEY = 100
|
||||||
|
@ -94,10 +94,6 @@ var can_shoot = false
|
||||||
# timer for shooting speed
|
# timer for shooting speed
|
||||||
var timer = null
|
var timer = null
|
||||||
|
|
||||||
# sets ship movement speed to the default
|
|
||||||
var ship_speed = SHIP_SPEED_TIER1
|
|
||||||
var ship_speed_tier = 0
|
|
||||||
|
|
||||||
# sets the delay between shots to the default
|
# sets the delay between shots to the default
|
||||||
var bullet_delay = BULLET_DELAY_TIER1
|
var bullet_delay = BULLET_DELAY_TIER1
|
||||||
var bullet_delay_tier = 0
|
var bullet_delay_tier = 0
|
||||||
|
@ -105,6 +101,7 @@ var bullet_delay_tier = 0
|
||||||
# sets other shooting settings to their defaults
|
# sets other shooting settings to their defaults
|
||||||
var laser_penetration = 0
|
var laser_penetration = 0
|
||||||
var double_laser = false
|
var double_laser = false
|
||||||
|
var laser_damage = LASER_DAMAGE_TIER1
|
||||||
|
|
||||||
# gives the player their starting points
|
# gives the player their starting points
|
||||||
var money = STARTING_MONEY
|
var money = STARTING_MONEY
|
||||||
|
@ -126,13 +123,12 @@ func upgradeMenu():
|
||||||
add_child(upgmenu)
|
add_child(upgmenu)
|
||||||
upgmenu.connect("refund", self, "_refund_button")
|
upgmenu.connect("refund", self, "_refund_button")
|
||||||
upgmenu.connect("bullet_delay_upgrade", self, "upgradeBulletDelay_button")
|
upgmenu.connect("bullet_delay_upgrade", self, "upgradeBulletDelay_button")
|
||||||
upgmenu.connect("ship_speed_upgrade", self, "upgradeShipSpeed_button")
|
|
||||||
upgmenu.connect("double_laser_upgrade", self, "doubleLaserUpgrade_button")
|
upgmenu.connect("double_laser_upgrade", self, "doubleLaserUpgrade_button")
|
||||||
upgmenu.connect("laser_penetration_upgrade", self, "laserPenetrationUpgrade_button")
|
upgmenu.connect("laser_penetration_upgrade", self, "laserPenetrationUpgrade_button")
|
||||||
upgmenu.connect("menu_closed", self, "menuClosed")
|
upgmenu.connect("menu_closed", self, "menuClosed")
|
||||||
upgmenu.connect("change_color", self, "changeColor")
|
upgmenu.connect("change_color", self, "changeColor")
|
||||||
|
upgmenu.connect("taste_the_rainbow", self, "enable_the_rainbow")
|
||||||
upgmenu.bullet_delay_tier = bullet_delay_tier
|
upgmenu.bullet_delay_tier = bullet_delay_tier
|
||||||
upgmenu.ship_speed_tier = ship_speed_tier
|
|
||||||
if !get_tree().has_network_peer():
|
if !get_tree().has_network_peer():
|
||||||
get_tree().paused = true
|
get_tree().paused = true
|
||||||
|
|
||||||
|
@ -215,34 +211,6 @@ func upgradeBulletDelay():
|
||||||
timer.set_wait_time(bullet_delay)
|
timer.set_wait_time(bullet_delay)
|
||||||
rpc("other_shooting_speed_upgrade", get_tree().get_network_unique_id(), bullet_delay)
|
rpc("other_shooting_speed_upgrade", get_tree().get_network_unique_id(), bullet_delay)
|
||||||
|
|
||||||
# upgrades the speed at which the ship moves
|
|
||||||
# not relevant for touchscreen users
|
|
||||||
# may be deprecated
|
|
||||||
func upgradeShipSpeed():
|
|
||||||
prints("func upgradeShipSpeed():")
|
|
||||||
if (ship_speed == SHIP_SPEED_TIER1 && money >= SHIP_SPEED_TIER2_COST):
|
|
||||||
ship_speed = SHIP_SPEED_TIER2
|
|
||||||
money -= SHIP_SPEED_TIER2_COST
|
|
||||||
ship_value += SHIP_SPEED_TIER2_COST
|
|
||||||
ship_speed_tier = 1
|
|
||||||
elif (ship_speed == SHIP_SPEED_TIER2 && money >= SHIP_SPEED_TIER3_COST):
|
|
||||||
ship_speed = SHIP_SPEED_TIER3
|
|
||||||
money -= SHIP_SPEED_TIER3_COST
|
|
||||||
ship_value += SHIP_SPEED_TIER3_COST
|
|
||||||
ship_speed_tier = 2
|
|
||||||
elif (ship_speed == SHIP_SPEED_TIER3 && money >= SHIP_SPEED_TIER4_COST):
|
|
||||||
ship_speed = SHIP_SPEED_TIER4
|
|
||||||
money -= SHIP_SPEED_TIER4_COST
|
|
||||||
ship_value += SHIP_SPEED_TIER4_COST
|
|
||||||
ship_speed_tier = 3
|
|
||||||
elif (ship_speed == SHIP_SPEED_TIER4 && money >= SHIP_SPEED_TIER5_COST):
|
|
||||||
ship_speed = SHIP_SPEED_TIER5
|
|
||||||
money -= SHIP_SPEED_TIER5_COST
|
|
||||||
ship_value += SHIP_SPEED_TIER5_COST
|
|
||||||
ship_speed_tier = 4
|
|
||||||
|
|
||||||
prints(ship_speed)
|
|
||||||
|
|
||||||
func doubleLaserUpgrade():
|
func doubleLaserUpgrade():
|
||||||
if money >= DOUBLE_LASER_COST && double_laser == false:
|
if money >= DOUBLE_LASER_COST && double_laser == false:
|
||||||
money -= DOUBLE_LASER_COST
|
money -= DOUBLE_LASER_COST
|
||||||
|
@ -275,7 +243,6 @@ func _refund_button():
|
||||||
bullet_delay = BULLET_DELAY_TIER1
|
bullet_delay = BULLET_DELAY_TIER1
|
||||||
bullet_delay_tier = 0
|
bullet_delay_tier = 0
|
||||||
timer.set_wait_time(bullet_delay)
|
timer.set_wait_time(bullet_delay)
|
||||||
ship_speed = SHIP_SPEED_TIER1
|
|
||||||
laser_penetration = 0
|
laser_penetration = 0
|
||||||
double_laser = false
|
double_laser = false
|
||||||
shooting_speed_upgrade = SHOOTING_SPEED_UPGRADE_DEFAULT
|
shooting_speed_upgrade = SHOOTING_SPEED_UPGRADE_DEFAULT
|
||||||
|
@ -317,12 +284,22 @@ remote func other_shooting_speed_upgrade(id, bullet_delay):
|
||||||
remote func _change_color(id, color):
|
remote func _change_color(id, color):
|
||||||
emit_signal("other_ship_color_change", id, color)
|
emit_signal("other_ship_color_change", id, color)
|
||||||
|
|
||||||
|
remote func _enable_rainbow(id):
|
||||||
|
emit_signal("other_ship_enable_rainbow", id)
|
||||||
|
|
||||||
remote func double_laser_upgrade(id):
|
remote func double_laser_upgrade(id):
|
||||||
emit_signal("double_laser_upgrade", id)
|
emit_signal("double_laser_upgrade", id)
|
||||||
|
|
||||||
# the player's movement vector
|
# the player's movement vector
|
||||||
var velocity = Vector2()
|
var velocity = Vector2()
|
||||||
|
|
||||||
|
var rainbow = Color(0,0,0,1)
|
||||||
|
var r_up = true
|
||||||
|
var g_up = true
|
||||||
|
var b_up = true
|
||||||
|
var rainbow_speed = 30
|
||||||
|
var rainbow_is_on = false
|
||||||
|
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
# move player with keyboard
|
# move player with keyboard
|
||||||
velocity = Vector2()
|
velocity = Vector2()
|
||||||
|
@ -338,8 +315,11 @@ func _process(delta):
|
||||||
velocity = velocity.normalized() * ship_speed
|
velocity = velocity.normalized() * ship_speed
|
||||||
position += velocity * delta
|
position += velocity * delta
|
||||||
|
|
||||||
|
if rainbow_is_on:
|
||||||
|
rainbow(delta)
|
||||||
|
|
||||||
# prevents player leaving the screen
|
# prevents player leaving the screen
|
||||||
position.x = clamp(position.x, 0, screensize.x)
|
position.x = clamp(position.x-100, 0, screensize.x-164) + 100
|
||||||
position.y = clamp(position.y, 0, screensize.y)
|
position.y = clamp(position.y, 0, screensize.y)
|
||||||
|
|
||||||
# basically exists just for rpc messages about whether or not the player is currently firing
|
# basically exists just for rpc messages about whether or not the player is currently firing
|
||||||
|
@ -370,6 +350,7 @@ func shoot():
|
||||||
laser.current_pen = laser_penetration
|
laser.current_pen = laser_penetration
|
||||||
laser.position.y = position.y - 27
|
laser.position.y = position.y - 27
|
||||||
laser.position.x = position.x + 46
|
laser.position.x = position.x + 46
|
||||||
|
laser.damage = laser_damage
|
||||||
|
|
||||||
#MAYBE THE LASERS SHOULD BE THEIR OWN NODES
|
#MAYBE THE LASERS SHOULD BE THEIR OWN NODES
|
||||||
#Would allow for more simple additions in the future
|
#Would allow for more simple additions in the future
|
||||||
|
@ -384,6 +365,38 @@ func shoot():
|
||||||
can_shoot = false
|
can_shoot = false
|
||||||
timer.start()
|
timer.start()
|
||||||
|
|
||||||
|
# Funky colors #
|
||||||
|
# NOT CURRENTLY REFUNDABLE #
|
||||||
|
func enable_the_rainbow():
|
||||||
|
if money >= 2000 && not rainbow_is_on:
|
||||||
|
money -= 2000
|
||||||
|
rainbow_is_on = true
|
||||||
|
rpc("_enable_rainbow", get_tree().get_network_unique_id())
|
||||||
|
|
||||||
|
func rainbow(delta):
|
||||||
|
if rainbow.r < 1 && r_up:
|
||||||
|
rainbow.r += rainbow_speed*delta/10
|
||||||
|
if rainbow.r >= 1: r_up = false
|
||||||
|
else:
|
||||||
|
rainbow.r -= rainbow_speed*delta/10
|
||||||
|
if rainbow.r <= 0.2: r_up = true
|
||||||
|
|
||||||
|
if rainbow.g < 1 && g_up:
|
||||||
|
rainbow.g += rainbow_speed*delta/9
|
||||||
|
if rainbow.g >= 1: g_up = false
|
||||||
|
else:
|
||||||
|
rainbow.g -= rainbow_speed*delta/9
|
||||||
|
if rainbow.g <= 0.2: g_up = true
|
||||||
|
|
||||||
|
if rainbow.b < 1 && b_up:
|
||||||
|
rainbow.b += rainbow_speed*delta/8
|
||||||
|
if rainbow.b >= 1: b_up = false
|
||||||
|
else:
|
||||||
|
rainbow.b -= rainbow_speed*delta/8
|
||||||
|
if rainbow.b <= 0.2: b_up = true
|
||||||
|
|
||||||
|
$AnimatedSprite.modulate = rainbow
|
||||||
|
|
||||||
# displays endgame screen and pauses
|
# displays endgame screen and pauses
|
||||||
func gameOver():
|
func gameOver():
|
||||||
var gameover = preload("res://GameOver.tscn").instance()
|
var gameover = preload("res://GameOver.tscn").instance()
|
||||||
|
|
|
@ -20,7 +20,7 @@ custom_solver_bias = 0.0
|
||||||
radius = 12.8998
|
radius = 12.8998
|
||||||
height = 40.4125
|
height = 40.4125
|
||||||
|
|
||||||
[node name="Player" type="Area2D" index="0"]
|
[node name="Player" type="Area2D"]
|
||||||
|
|
||||||
input_pickable = true
|
input_pickable = true
|
||||||
gravity_point = true
|
gravity_point = true
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
extends "res://Bad.gd"
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
health = 500
|
||||||
|
speed = 50
|
||||||
|
pass
|
||||||
|
|
||||||
|
signal health_up
|
||||||
|
|
||||||
|
var centered_x = false
|
||||||
|
var centered_y = false
|
||||||
|
|
||||||
|
func _process(delta):
|
||||||
|
if health < 200:
|
||||||
|
speed = 0
|
||||||
|
$StarSprite.frame = 1
|
||||||
|
$MainSprite.visible = false
|
||||||
|
$CollisionBox.disabled = true
|
||||||
|
|
||||||
|
if centered_x && centered_y:
|
||||||
|
$StarSprite.rotation += delta*10
|
||||||
|
position.x -= delta*500
|
||||||
|
if position.x < 0:
|
||||||
|
emit_signal("health_up", 200)
|
||||||
|
queue_free()
|
||||||
|
|
||||||
|
if position.x < 500:
|
||||||
|
position.x += delta*100
|
||||||
|
elif position.x > 524:
|
||||||
|
position.x -= delta*100
|
||||||
|
else:
|
||||||
|
centered_x = true
|
||||||
|
|
||||||
|
if position.y < 280:
|
||||||
|
position.y += delta*100
|
||||||
|
elif position.y > 320:
|
||||||
|
position.y -= delta*100
|
||||||
|
else:
|
||||||
|
centered_y = true
|
|
@ -0,0 +1,53 @@
|
||||||
|
[gd_scene load_steps=9 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://Bad.tscn" type="PackedScene" id=1]
|
||||||
|
[ext_resource path="res://Prison.gd" type="Script" id=2]
|
||||||
|
[ext_resource path="res://art/bad/prison/Star.png" type="Texture" id=3]
|
||||||
|
[ext_resource path="res://art/bad/prison/StarSmile.png" type="Texture" id=4]
|
||||||
|
[ext_resource path="res://art/bad/prison/Prison.png" type="Texture" id=5]
|
||||||
|
|
||||||
|
[sub_resource type="SpriteFrames" id=1]
|
||||||
|
|
||||||
|
animations = [ {
|
||||||
|
"frames": [ ExtResource( 3 ), ExtResource( 4 ) ],
|
||||||
|
"loop": true,
|
||||||
|
"name": "default",
|
||||||
|
"speed": 5.0
|
||||||
|
} ]
|
||||||
|
|
||||||
|
[sub_resource type="CapsuleShape2D" id=2]
|
||||||
|
|
||||||
|
custom_solver_bias = 0.0
|
||||||
|
radius = 367.866
|
||||||
|
height = 196.873
|
||||||
|
|
||||||
|
[sub_resource type="SpriteFrames" id=3]
|
||||||
|
|
||||||
|
animations = [ {
|
||||||
|
"frames": [ ExtResource( 5 ) ],
|
||||||
|
"loop": true,
|
||||||
|
"name": "default",
|
||||||
|
"speed": 5.0
|
||||||
|
} ]
|
||||||
|
|
||||||
|
[node name="Prison" instance=ExtResource( 1 )]
|
||||||
|
|
||||||
|
scale = Vector2( 0.2, 0.2 )
|
||||||
|
script = ExtResource( 2 )
|
||||||
|
_sections_unfolded = [ "Collision", "Transform" ]
|
||||||
|
|
||||||
|
[node name="StarSprite" type="AnimatedSprite" parent="." index="0"]
|
||||||
|
|
||||||
|
frames = SubResource( 1 )
|
||||||
|
animation = "default"
|
||||||
|
|
||||||
|
[node name="CollisionBox" parent="." index="1"]
|
||||||
|
|
||||||
|
position = Vector2( 0, -40 )
|
||||||
|
shape = SubResource( 2 )
|
||||||
|
|
||||||
|
[node name="MainSprite" parent="." index="3"]
|
||||||
|
|
||||||
|
frames = SubResource( 3 )
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
extends Area2D
|
||||||
|
|
||||||
|
# class member variables go here, for example:
|
||||||
|
# var a = 2
|
||||||
|
# var b = "textvar"
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
# Called every time the node is added to the scene.
|
||||||
|
# Initialization here
|
||||||
|
pass
|
||||||
|
|
||||||
|
#func _process(delta):
|
||||||
|
# # Called every frame. Delta is time since last frame.
|
||||||
|
# # Update game logic here.
|
||||||
|
# pass
|
|
@ -22,12 +22,14 @@ extends Area2D
|
||||||
signal dead
|
signal dead
|
||||||
signal flash
|
signal flash
|
||||||
signal boss_fight_over
|
signal boss_fight_over
|
||||||
|
signal boss_health
|
||||||
export (PackedScene) var Laser
|
export (PackedScene) var Laser
|
||||||
|
|
||||||
#### MAYBE ADD A HEALTH BAR TO MAIN ITSELF ####
|
#### MAYBE ADD A HEALTH BAR TO MAIN ITSELF ####
|
||||||
#var health = 3000
|
#var health = 3000
|
||||||
# DEFAULT:
|
# DEFAULT:
|
||||||
var health = 20000
|
var starting_health = 20000
|
||||||
|
var health = starting_health
|
||||||
|
|
||||||
var timer = null
|
var timer = null
|
||||||
var hit_timer = 1000
|
var hit_timer = 1000
|
||||||
|
@ -48,7 +50,7 @@ func _ready():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
func hit(who):
|
func hit(who):
|
||||||
health -= 3/health_multi
|
health -= who.damage/(health_multi*3.5)
|
||||||
if health > 1500:
|
if health > 1500:
|
||||||
$Inside/InsideBadSprite.frame = 1
|
$Inside/InsideBadSprite.frame = 1
|
||||||
hit_timer = 0
|
hit_timer = 0
|
||||||
|
@ -57,6 +59,7 @@ func hit(who):
|
||||||
updateOutsideSprite()
|
updateOutsideSprite()
|
||||||
if get_tree().is_network_server():
|
if get_tree().is_network_server():
|
||||||
rpc("bossHealth", health)
|
rpc("bossHealth", health)
|
||||||
|
emit_signal("boss_health", health, starting_health)
|
||||||
|
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
# Entering view
|
# Entering view
|
||||||
|
@ -115,6 +118,8 @@ func _process(delta):
|
||||||
#### DOES LOW HEALTH RELEASE THE INSIDE OR NO HEALTH? ####
|
#### DOES LOW HEALTH RELEASE THE INSIDE OR NO HEALTH? ####
|
||||||
if health <= 0 && !flashed:
|
if health <= 0 && !flashed:
|
||||||
emit_signal("flash")
|
emit_signal("flash")
|
||||||
|
$OutsideBottomCollision.disabled = true
|
||||||
|
$OutsideTopCollision.disabled = true
|
||||||
prints("flash")
|
prints("flash")
|
||||||
flashed = true
|
flashed = true
|
||||||
#queue_free()
|
#queue_free()
|
||||||
|
@ -142,6 +147,7 @@ func _on_Inside_area_entered(area):
|
||||||
rpc("bossHealth", health)
|
rpc("bossHealth", health)
|
||||||
else:
|
else:
|
||||||
pass
|
pass
|
||||||
|
emit_signal("boss_health", health, starting_health)
|
||||||
|
|
||||||
func updateOutsideSprite():
|
func updateOutsideSprite():
|
||||||
if health > 18000:
|
if health > 18000:
|
||||||
|
|
|
@ -32,12 +32,12 @@ animations = [ {
|
||||||
"speed": 5.0
|
"speed": 5.0
|
||||||
} ]
|
} ]
|
||||||
|
|
||||||
[sub_resource type="RectangleShape2D" id=4]
|
[sub_resource type="RectangleShape2D" id=2]
|
||||||
|
|
||||||
custom_solver_bias = 0.0
|
custom_solver_bias = 0.0
|
||||||
extents = Vector2( 414.127, 469.45 )
|
extents = Vector2( 414.127, 469.45 )
|
||||||
|
|
||||||
[sub_resource type="SpriteFrames" id=2]
|
[sub_resource type="SpriteFrames" id=3]
|
||||||
|
|
||||||
animations = [ {
|
animations = [ {
|
||||||
"frames": [ ExtResource( 8 ), ExtResource( 9 ), ExtResource( 10 ), ExtResource( 11 ), ExtResource( 12 ), ExtResource( 13 ), ExtResource( 14 ), ExtResource( 15 ), ExtResource( 16 ), ExtResource( 17 ), ExtResource( 18 ), ExtResource( 19 ), ExtResource( 20 ), ExtResource( 21 ), ExtResource( 22 ) ],
|
"frames": [ ExtResource( 8 ), ExtResource( 9 ), ExtResource( 10 ), ExtResource( 11 ), ExtResource( 12 ), ExtResource( 13 ), ExtResource( 14 ), ExtResource( 15 ), ExtResource( 16 ), ExtResource( 17 ), ExtResource( 18 ), ExtResource( 19 ), ExtResource( 20 ), ExtResource( 21 ), ExtResource( 22 ) ],
|
||||||
|
@ -46,12 +46,12 @@ animations = [ {
|
||||||
"speed": 5.0
|
"speed": 5.0
|
||||||
} ]
|
} ]
|
||||||
|
|
||||||
[sub_resource type="RectangleShape2D" id=3]
|
[sub_resource type="RectangleShape2D" id=4]
|
||||||
|
|
||||||
custom_solver_bias = 0.0
|
custom_solver_bias = 0.0
|
||||||
extents = Vector2( 404.313, 217.774 )
|
extents = Vector2( 404.313, 217.774 )
|
||||||
|
|
||||||
[node name="RectangleBoss" type="Area2D"]
|
[node name="RectangleBoss" type="Area2D" index="0"]
|
||||||
|
|
||||||
position = Vector2( 336.401, -1.22772 )
|
position = Vector2( 336.401, -1.22772 )
|
||||||
scale = Vector2( 0.25, 0.25 )
|
scale = Vector2( 0.25, 0.25 )
|
||||||
|
@ -60,10 +60,12 @@ gravity_vec = Vector2( 0, 1 )
|
||||||
gravity = 98.0
|
gravity = 98.0
|
||||||
linear_damp = 0.1
|
linear_damp = 0.1
|
||||||
angular_damp = 1.0
|
angular_damp = 1.0
|
||||||
|
collision_layer = 2
|
||||||
|
collision_mask = 0
|
||||||
audio_bus_override = false
|
audio_bus_override = false
|
||||||
audio_bus_name = "Master"
|
audio_bus_name = "Master"
|
||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
_sections_unfolded = [ "Transform" ]
|
_sections_unfolded = [ "Collision", "Transform" ]
|
||||||
Laser = ExtResource( 2 )
|
Laser = ExtResource( 2 )
|
||||||
|
|
||||||
[node name="Inside" type="Area2D" parent="." index="0"]
|
[node name="Inside" type="Area2D" parent="." index="0"]
|
||||||
|
@ -87,7 +89,7 @@ _sections_unfolded = [ "Transform" ]
|
||||||
|
|
||||||
position = Vector2( 3501.19, 1181.02 )
|
position = Vector2( 3501.19, 1181.02 )
|
||||||
scale = Vector2( 1, 1.00835 )
|
scale = Vector2( 1, 1.00835 )
|
||||||
shape = SubResource( 4 )
|
shape = SubResource( 2 )
|
||||||
|
|
||||||
[node name="Line2D" type="Line2D" parent="." index="1"]
|
[node name="Line2D" type="Line2D" parent="." index="1"]
|
||||||
|
|
||||||
|
@ -101,19 +103,19 @@ round_precision = 8
|
||||||
[node name="BigBadSprite" type="AnimatedSprite" parent="." index="2"]
|
[node name="BigBadSprite" type="AnimatedSprite" parent="." index="2"]
|
||||||
|
|
||||||
position = Vector2( 3392, 1182 )
|
position = Vector2( 3392, 1182 )
|
||||||
frames = SubResource( 2 )
|
frames = SubResource( 3 )
|
||||||
animation = "default"
|
animation = "default"
|
||||||
_sections_unfolded = [ "Transform" ]
|
_sections_unfolded = [ "Transform" ]
|
||||||
|
|
||||||
[node name="OutsideTopCollision" type="CollisionShape2D" parent="." index="3"]
|
[node name="OutsideTopCollision" type="CollisionShape2D" parent="." index="3"]
|
||||||
|
|
||||||
position = Vector2( 3427.85, 491.096 )
|
position = Vector2( 3427.85, 491.096 )
|
||||||
shape = SubResource( 3 )
|
shape = SubResource( 4 )
|
||||||
|
|
||||||
[node name="OutsideBottomCollision" type="CollisionShape2D" parent="." index="4"]
|
[node name="OutsideBottomCollision" type="CollisionShape2D" parent="." index="4"]
|
||||||
|
|
||||||
position = Vector2( 3427.85, 1866.16 )
|
position = Vector2( 3427.85, 1866.16 )
|
||||||
shape = SubResource( 3 )
|
shape = SubResource( 4 )
|
||||||
|
|
||||||
[connection signal="area_entered" from="Inside" to="." method="_on_Inside_area_entered"]
|
[connection signal="area_entered" from="Inside" to="." method="_on_Inside_area_entered"]
|
||||||
|
|
||||||
|
|
1
TODO
|
@ -4,4 +4,5 @@
|
||||||
* A story mode?
|
* A story mode?
|
||||||
* The main menu stars could do something silly and fun, like change colors,
|
* The main menu stars could do something silly and fun, like change colors,
|
||||||
maybe taking the menu colors with them.
|
maybe taking the menu colors with them.
|
||||||
|
* Purchasable Mothership upgrades (like turrets), and make all upgrades exponentially more expensive for higher tiers
|
||||||
* etc., etc.
|
* etc., etc.
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
extends Node2D
|
||||||
|
|
||||||
|
var current_target
|
||||||
|
var can_shoot = true
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
pass
|
||||||
|
|
||||||
|
var zeroPoint = Vector2(-60, -1015)
|
||||||
|
|
||||||
|
func _process(delta):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
func entityEnteredRange(bad_id, bad, bad_shape, self_shape):
|
||||||
|
print(bad.get_name())
|
||||||
|
if ("Bad" in bad.get_name()) && can_shoot:
|
||||||
|
current_target = bad_id
|
||||||
|
#var local_pos = zeroPoint + area.position
|
||||||
|
var local_pos = Vector2()
|
||||||
|
local_pos = to_local(bad.position)
|
||||||
|
$Beam.set_point_position(1, local_pos)
|
||||||
|
$TurretSprite.rotation = ($Beam.get_point_position(0).angle_to($Beam.get_point_position(1))) + PI/5.3
|
||||||
|
print($Beam.get_point_position(0).angle_to($Beam.get_point_position(1)))
|
||||||
|
$Beam.default_color.a = 200
|
||||||
|
$TurretSprite.frame = 1
|
||||||
|
bad.hit("turret")
|
||||||
|
$FlashTimer.start()
|
||||||
|
can_shoot = false
|
||||||
|
|
||||||
|
func _on_FlashTimer_timeout():
|
||||||
|
$Beam.default_color.a = 0
|
||||||
|
$TurretSprite.frame = 0
|
||||||
|
pass # replace with function body
|
||||||
|
|
||||||
|
func _on_ReloadTimer_timeout():
|
||||||
|
can_shoot = true
|
||||||
|
pass # replace with function body
|
|
@ -0,0 +1,87 @@
|
||||||
|
[gd_scene load_steps=6 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://Turret.gd" type="Script" id=1]
|
||||||
|
[ext_resource path="res://art/turret/turret.png" type="Texture" id=2]
|
||||||
|
[ext_resource path="res://art/turret/shootin.png" type="Texture" id=3]
|
||||||
|
|
||||||
|
[sub_resource type="CircleShape2D" id=1]
|
||||||
|
|
||||||
|
custom_solver_bias = 0.0
|
||||||
|
radius = 32.0821
|
||||||
|
|
||||||
|
[sub_resource type="SpriteFrames" id=2]
|
||||||
|
|
||||||
|
animations = [ {
|
||||||
|
"frames": [ ExtResource( 2 ), ExtResource( 3 ) ],
|
||||||
|
"loop": true,
|
||||||
|
"name": "default",
|
||||||
|
"speed": 5.0
|
||||||
|
} ]
|
||||||
|
|
||||||
|
[node name="Turret" type="Node2D"]
|
||||||
|
|
||||||
|
script = ExtResource( 1 )
|
||||||
|
_sections_unfolded = [ "Material", "Pause", "Transform", "Visibility", "Z Index" ]
|
||||||
|
|
||||||
|
[node name="Beam" type="Line2D" parent="." index="0"]
|
||||||
|
|
||||||
|
position = Vector2( -26.6667, 6.66667 )
|
||||||
|
points = PoolVector2Array( 26.4234, -6.61987, 2000, 0 )
|
||||||
|
width = 10.0
|
||||||
|
default_color = Color( 1, 0, 0, 0 )
|
||||||
|
texture_mode = 31
|
||||||
|
sharp_limit = 2.0
|
||||||
|
round_precision = 8
|
||||||
|
|
||||||
|
[node name="Range" type="Area2D" parent="." index="1"]
|
||||||
|
|
||||||
|
position = Vector2( -51.824, -18.5961 )
|
||||||
|
scale = Vector2( 30.8534, 30.8534 )
|
||||||
|
input_pickable = true
|
||||||
|
gravity_vec = Vector2( 0, 1 )
|
||||||
|
gravity = 98.0
|
||||||
|
linear_damp = 0.1
|
||||||
|
angular_damp = 1.0
|
||||||
|
monitorable = false
|
||||||
|
collision_layer = 31
|
||||||
|
collision_mask = 31
|
||||||
|
audio_bus_override = false
|
||||||
|
audio_bus_name = "Master"
|
||||||
|
_sections_unfolded = [ "Collision" ]
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_group_": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="RangeCircle" type="CollisionShape2D" parent="Range" index="0"]
|
||||||
|
|
||||||
|
shape = SubResource( 1 )
|
||||||
|
|
||||||
|
[node name="FlashTimer" type="Timer" parent="." index="2"]
|
||||||
|
|
||||||
|
process_mode = 1
|
||||||
|
wait_time = 0.15
|
||||||
|
one_shot = false
|
||||||
|
autostart = false
|
||||||
|
|
||||||
|
[node name="ReloadTimer" type="Timer" parent="." index="3"]
|
||||||
|
|
||||||
|
process_mode = 1
|
||||||
|
wait_time = 1.0
|
||||||
|
one_shot = false
|
||||||
|
autostart = true
|
||||||
|
|
||||||
|
[node name="TurretSprite" type="AnimatedSprite" parent="." index="4"]
|
||||||
|
|
||||||
|
rotation = 0.785398
|
||||||
|
scale = Vector2( 0.12, 0.12 )
|
||||||
|
frames = SubResource( 2 )
|
||||||
|
animation = "default"
|
||||||
|
_sections_unfolded = [ "Transform" ]
|
||||||
|
|
||||||
|
[connection signal="area_shape_entered" from="Range" to="." method="entityEnteredRange"]
|
||||||
|
|
||||||
|
[connection signal="timeout" from="FlashTimer" to="." method="_on_FlashTimer_timeout"]
|
||||||
|
|
||||||
|
[connection signal="timeout" from="ReloadTimer" to="." method="_on_ReloadTimer_timeout"]
|
||||||
|
|
||||||
|
|
|
@ -22,31 +22,27 @@ extends Node
|
||||||
signal refund
|
signal refund
|
||||||
signal speed_upgrade
|
signal speed_upgrade
|
||||||
signal bullet_delay_upgrade
|
signal bullet_delay_upgrade
|
||||||
signal ship_speed_upgrade
|
|
||||||
signal double_laser_upgrade
|
signal double_laser_upgrade
|
||||||
signal add_laser
|
signal add_laser
|
||||||
signal plasma_lasers
|
signal plasma_lasers
|
||||||
signal menu_closed
|
signal menu_closed
|
||||||
signal change_color
|
signal change_color
|
||||||
|
signal taste_the_rainbow
|
||||||
|
|
||||||
var bullet_delay_tier
|
var bullet_delay_tier
|
||||||
var shooting_speed_tier
|
var shooting_speed_tier
|
||||||
var ship_speed_tier
|
|
||||||
var double_lasers
|
var double_lasers
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
bullet_delay_tier = get_parent().bullet_delay_tier
|
bullet_delay_tier = get_parent().bullet_delay_tier
|
||||||
$ShootingSpeedUpgrade/Icon.frame = bullet_delay_tier
|
$ShootingSpeedUpgrade/Icon.frame = bullet_delay_tier
|
||||||
ship_speed_tier = get_parent().ship_speed_tier
|
|
||||||
$ShipSpeedUpgrade/Icon.frame = ship_speed_tier
|
|
||||||
if get_tree().has_network_peer():
|
if get_tree().has_network_peer():
|
||||||
$ColorRect.color = Color(1,1,1,0.5)
|
$ColorRect.color = Color(1,1,1,0.5)
|
||||||
else:
|
else:
|
||||||
$ColorRect.color = Color(1,1,1,0.5)
|
$ColorRect.color = Color(0,0,0,1)
|
||||||
|
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
$ShootingSpeedUpgrade/Icon.frame = bullet_delay_tier
|
$ShootingSpeedUpgrade/Icon.frame = bullet_delay_tier
|
||||||
$ShipSpeedUpgrade/Icon.frame = ship_speed_tier
|
|
||||||
if (Input.is_action_pressed("ui_quit")):
|
if (Input.is_action_pressed("ui_quit")):
|
||||||
get_tree().quit()
|
get_tree().quit()
|
||||||
if Input.is_action_pressed("ui_accept"):
|
if Input.is_action_pressed("ui_accept"):
|
||||||
|
@ -59,9 +55,7 @@ func _on_Button_pressed():
|
||||||
|
|
||||||
func _on_Refund_pressed():
|
func _on_Refund_pressed():
|
||||||
bullet_delay_tier = 0
|
bullet_delay_tier = 0
|
||||||
ship_speed_tier = 0
|
|
||||||
$ShootingSpeedUpgrade/Icon.frame = 0
|
$ShootingSpeedUpgrade/Icon.frame = 0
|
||||||
$ShipSpeedUpgrade/Icon.frame = 0
|
|
||||||
get_tree().paused = false
|
get_tree().paused = false
|
||||||
emit_signal("refund")
|
emit_signal("refund")
|
||||||
|
|
||||||
|
@ -70,12 +64,6 @@ func _on_ShootingSpeedUpgrade_pressed():
|
||||||
emit_signal("bullet_delay_upgrade")
|
emit_signal("bullet_delay_upgrade")
|
||||||
bullet_delay_tier = get_parent().bullet_delay_tier
|
bullet_delay_tier = get_parent().bullet_delay_tier
|
||||||
|
|
||||||
func _on_ShipSpeedUpgrade_pressed():
|
|
||||||
get_tree().paused = false
|
|
||||||
emit_signal("ship_speed_upgrade")
|
|
||||||
prints("UPGRADE SHIP SPEED SIGNAL EMITTED")
|
|
||||||
ship_speed_tier = get_parent().ship_speed_tier
|
|
||||||
|
|
||||||
func _on_DoubleLaserUpgrade_pressed():
|
func _on_DoubleLaserUpgrade_pressed():
|
||||||
get_tree().paused = false
|
get_tree().paused = false
|
||||||
emit_signal("double_laser_upgrade")
|
emit_signal("double_laser_upgrade")
|
||||||
|
@ -107,4 +95,9 @@ func _on_DarkenedLawnGreen_pressed():
|
||||||
emit_signal("change_color", "7bd126")
|
emit_signal("change_color", "7bd126")
|
||||||
|
|
||||||
func _on_DeepSkyBlue_pressed():
|
func _on_DeepSkyBlue_pressed():
|
||||||
emit_signal("change_color", "00bfff")
|
emit_signal("change_color", "00bfff")
|
||||||
|
|
||||||
|
#### NOT PAUSING GAME? ####
|
||||||
|
func _on_Rainbow_pressed():
|
||||||
|
get_tree().paused = false
|
||||||
|
emit_signal("taste_the_rainbow")
|
||||||
|
|
|
@ -66,6 +66,7 @@ mouse_default_cursor_shape = 0
|
||||||
size_flags_horizontal = 1
|
size_flags_horizontal = 1
|
||||||
size_flags_vertical = 1
|
size_flags_vertical = 1
|
||||||
color = Color( 0, 0, 0, 1 )
|
color = Color( 0, 0, 0, 1 )
|
||||||
|
_sections_unfolded = [ "Visibility" ]
|
||||||
|
|
||||||
[node name="Resume" type="Button" parent="." index="1"]
|
[node name="Resume" type="Button" parent="." index="1"]
|
||||||
|
|
||||||
|
@ -153,10 +154,9 @@ animation = "default"
|
||||||
|
|
||||||
[node name="ShipSpeedUpgrade" type="Node" parent="." index="4"]
|
[node name="ShipSpeedUpgrade" type="Node" parent="." index="4"]
|
||||||
|
|
||||||
editor/display_folded = true
|
|
||||||
|
|
||||||
[node name="Button" type="Button" parent="ShipSpeedUpgrade" index="0"]
|
[node name="Button" type="Button" parent="ShipSpeedUpgrade" index="0"]
|
||||||
|
|
||||||
|
visible = false
|
||||||
anchor_left = 0.0
|
anchor_left = 0.0
|
||||||
anchor_top = 0.0
|
anchor_top = 0.0
|
||||||
anchor_right = 0.0
|
anchor_right = 0.0
|
||||||
|
@ -181,6 +181,7 @@ align = 1
|
||||||
|
|
||||||
[node name="Icon" type="AnimatedSprite" parent="ShipSpeedUpgrade" index="1"]
|
[node name="Icon" type="AnimatedSprite" parent="ShipSpeedUpgrade" index="1"]
|
||||||
|
|
||||||
|
visible = false
|
||||||
position = Vector2( 530, 310 )
|
position = Vector2( 530, 310 )
|
||||||
scale = Vector2( 0.392712, 0.392712 )
|
scale = Vector2( 0.392712, 0.392712 )
|
||||||
frames = SubResource( 3 )
|
frames = SubResource( 3 )
|
||||||
|
@ -188,8 +189,6 @@ animation = "New Anim"
|
||||||
|
|
||||||
[node name="ColorSelect" type="Node2D" parent="." index="5"]
|
[node name="ColorSelect" type="Node2D" parent="." index="5"]
|
||||||
|
|
||||||
editor/display_folded = true
|
|
||||||
|
|
||||||
[node name="ColorSelectBG" type="Sprite" parent="ColorSelect" index="0"]
|
[node name="ColorSelectBG" type="Sprite" parent="ColorSelect" index="0"]
|
||||||
|
|
||||||
position = Vector2( 150, 210 )
|
position = Vector2( 150, 210 )
|
||||||
|
@ -412,8 +411,33 @@ group = null
|
||||||
flat = true
|
flat = true
|
||||||
align = 1
|
align = 1
|
||||||
|
|
||||||
|
[node name="Rainbow" type="Button" parent="ColorSelect/ColorSelectBG" index="9"]
|
||||||
|
|
||||||
|
anchor_left = 0.0
|
||||||
|
anchor_top = 0.0
|
||||||
|
anchor_right = 0.0
|
||||||
|
anchor_bottom = 0.0
|
||||||
|
margin_left = -501.0
|
||||||
|
margin_top = 668.0
|
||||||
|
margin_right = 501.0
|
||||||
|
margin_bottom = 1002.0
|
||||||
|
rect_pivot_offset = Vector2( 0, 0 )
|
||||||
|
rect_clip_content = false
|
||||||
|
focus_mode = 2
|
||||||
|
mouse_filter = 0
|
||||||
|
mouse_default_cursor_shape = 0
|
||||||
|
size_flags_horizontal = 1
|
||||||
|
size_flags_vertical = 1
|
||||||
|
toggle_mode = false
|
||||||
|
enabled_focus_mode = 2
|
||||||
|
shortcut = null
|
||||||
|
group = null
|
||||||
|
flat = true
|
||||||
|
align = 1
|
||||||
|
|
||||||
[node name="DoubleLaserUpgrade" type="Node2D" parent="." index="6"]
|
[node name="DoubleLaserUpgrade" type="Node2D" parent="." index="6"]
|
||||||
|
|
||||||
|
editor/display_folded = true
|
||||||
position = Vector2( -150, -10 )
|
position = Vector2( -150, -10 )
|
||||||
__meta__ = {
|
__meta__ = {
|
||||||
"_edit_group_": true
|
"_edit_group_": true
|
||||||
|
@ -477,6 +501,8 @@ align = 1
|
||||||
|
|
||||||
[connection signal="pressed" from="ColorSelect/ColorSelectBG/DeepSkyBlue" to="." method="_on_DeepSkyBlue_pressed"]
|
[connection signal="pressed" from="ColorSelect/ColorSelectBG/DeepSkyBlue" to="." method="_on_DeepSkyBlue_pressed"]
|
||||||
|
|
||||||
|
[connection signal="pressed" from="ColorSelect/ColorSelectBG/Rainbow" to="." method="_on_Rainbow_pressed"]
|
||||||
|
|
||||||
[connection signal="pressed" from="DoubleLaserUpgrade/Button" to="." method="_on_DoubleLaserUpgrade_pressed"]
|
[connection signal="pressed" from="DoubleLaserUpgrade/Button" to="." method="_on_DoubleLaserUpgrade_pressed"]
|
||||||
|
|
||||||
|
|
||||||
|
|
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 205 KiB |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 59 KiB |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 66 KiB |
After Width: | Height: | Size: 70 KiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 67 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 24 KiB |
BIN
art/bg.png
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 196 KiB |
After Width: | Height: | Size: 1.3 MiB |
After Width: | Height: | Size: 867 KiB |
After Width: | Height: | Size: 194 KiB |
After Width: | Height: | Size: 204 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 6.6 KiB |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 55 KiB |
|
@ -227,3 +227,31 @@ texture_format/etc2=false
|
||||||
binary_format/64_bits=true
|
binary_format/64_bits=true
|
||||||
custom_template/release=""
|
custom_template/release=""
|
||||||
custom_template/debug=""
|
custom_template/debug=""
|
||||||
|
|
||||||
|
[preset.2]
|
||||||
|
|
||||||
|
name="Windows Desktop"
|
||||||
|
platform="Windows Desktop"
|
||||||
|
runnable=true
|
||||||
|
custom_features=""
|
||||||
|
export_filter="all_resources"
|
||||||
|
include_filter=""
|
||||||
|
exclude_filter=""
|
||||||
|
patch_list=PoolStringArray( )
|
||||||
|
|
||||||
|
[preset.2.options]
|
||||||
|
|
||||||
|
texture_format/s3tc=true
|
||||||
|
texture_format/etc=false
|
||||||
|
texture_format/etc2=false
|
||||||
|
binary_format/64_bits=true
|
||||||
|
custom_template/release=""
|
||||||
|
custom_template/debug=""
|
||||||
|
application/icon=""
|
||||||
|
application/file_version=""
|
||||||
|
application/product_version=""
|
||||||
|
application/company_name=""
|
||||||
|
application/product_name=""
|
||||||
|
application/file_description=""
|
||||||
|
application/copyright=""
|
||||||
|
application/trademarks=""
|
||||||
|
|