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" ]
|
||||
|
||||
|
12
Bad1.gd
|
@ -37,17 +37,20 @@ func _ready():
|
|||
pass
|
||||
|
||||
func hit(who):
|
||||
health -= 10/health_multi
|
||||
health -= who.damage/health_multi
|
||||
$AnimatedSprite.frame = 1
|
||||
hit_timer = 0
|
||||
|
||||
var velocity = Vector2()
|
||||
var health_bar = Vector2(((health * 6) - 157), -273)
|
||||
$Line2D.set_point_position( 1, health_bar )
|
||||
|
||||
func _process(delta):
|
||||
if health <= 0:
|
||||
emit_signal("dead", 15)
|
||||
queue_free()
|
||||
|
||||
var velocity = Vector2()
|
||||
|
||||
func _process(delta):
|
||||
if hit_timer < 0.15:
|
||||
hit_timer += delta
|
||||
velocity.x = 0
|
||||
|
@ -61,7 +64,4 @@ func _process(delta):
|
|||
if velocity.length() > 0:
|
||||
velocity = velocity.normalized() * SPEED
|
||||
|
||||
var health_bar = Vector2(((health * 6) - 157), -273)
|
||||
$Line2D.set_point_position( 1, health_bar )
|
||||
|
||||
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):
|
||||
health -= 10/health_multi
|
||||
health -= who.damage/health_multi
|
||||
$AnimatedSprite.frame = 1
|
||||
hit_timer = 0
|
||||
|
||||
|
@ -47,7 +47,7 @@ var velocity = Vector2()
|
|||
|
||||
func _process(delta):
|
||||
if health <= 0:
|
||||
emit_signal("dead", 200)
|
||||
emit_signal("dead", 100)
|
||||
queue_free()
|
||||
|
||||
$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()
|
||||
|
||||
func hit(who):
|
||||
health -= 10/health_multi
|
||||
health -= who.damage/health_multi
|
||||
# $AnimatedSprite.frame = 1
|
||||
hit_timer = 0
|
||||
|
||||
|
|
16
Bloob.tscn
|
@ -18,7 +18,7 @@ animations = [ {
|
|||
"speed": 5.0
|
||||
} ]
|
||||
|
||||
[node name="Area2D" type="Area2D"]
|
||||
[node name="BadBlob" type="Area2D"]
|
||||
|
||||
scale = Vector2( 0.25, 0.25 )
|
||||
z_index = -1
|
||||
|
@ -27,6 +27,7 @@ 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"
|
||||
|
@ -44,4 +45,17 @@ shape = SubResource( 1 )
|
|||
frames = SubResource( 2 )
|
||||
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
|
||||
|
||||
const DEFAULT_DAMAGE = 10
|
||||
|
||||
export (int) var SPEED
|
||||
export (int) var DAMAGE
|
||||
var plasma = false
|
||||
var current_pen = 0
|
||||
var friendly_laser = true
|
||||
var damage = DEFAULT_DAMAGE
|
||||
|
||||
func _ready():
|
||||
$AnimatedSprite.play()
|
||||
|
|
|
@ -47,7 +47,6 @@ __meta__ = {
|
|||
|
||||
[node name="AnimatedSprite" type="AnimatedSprite" parent="." index="1"]
|
||||
|
||||
modulate = Color( 0, 0.71875, 1, 1 )
|
||||
position = Vector2( -1.90735e-06, 0 )
|
||||
scale = Vector2( 0.1, 0.2 )
|
||||
frames = SubResource( 2 )
|
||||
|
|
102
Main.gd
|
@ -22,7 +22,9 @@ extends Node
|
|||
export (PackedScene) var FirstBad
|
||||
export (PackedScene) var BlobBad
|
||||
export (PackedScene) var LaserBad
|
||||
export (PackedScene) var Prison
|
||||
export (PackedScene) var RectangleBoss
|
||||
export (PackedScene) var BlackHole
|
||||
|
||||
var players = {}
|
||||
|
||||
|
@ -38,12 +40,19 @@ var touchy_shooty = false
|
|||
var my_info = { name = "sagethesagesage", color = "FFFFFF" }
|
||||
var mainmenu
|
||||
|
||||
const BADDIE_WAIT_TIME_DEFAULT = 5
|
||||
var not_loading = false
|
||||
|
||||
const BADDIE_WAIT_TIME_DEFAULT = 4
|
||||
|
||||
func _ready():
|
||||
# Prepare black rectangle for fading in
|
||||
$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
|
||||
mainmenu = preload("res://MainMenu.tscn").instance()
|
||||
add_child(mainmenu)
|
||||
|
@ -77,6 +86,13 @@ func _process(delta):
|
|||
if (Input.is_action_pressed("ui_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
|
||||
updatePoints()
|
||||
|
||||
|
@ -110,31 +126,35 @@ func _process(delta):
|
|||
screen_flashing = false
|
||||
$ColorRect.visible = false
|
||||
|
||||
# After 100 enemies, enter bossMode
|
||||
if total_bads_spawned == 100:
|
||||
bossMode()
|
||||
|
||||
# When an enemy dies
|
||||
func _on_bad_death(kill_money):
|
||||
# Give players appropriate money
|
||||
$Player.money += kill_money
|
||||
|
||||
var a_round_of_bads = 30
|
||||
#########################
|
||||
# ENEMY SPAWNING SCRIPT #
|
||||
#########################
|
||||
var a_round_of_bads = 50
|
||||
var sendblob = 1
|
||||
var bad_health_multi = 1
|
||||
var bad_health_multi = 1.5
|
||||
var total_bads_spawned = 0
|
||||
func BaddieTimer():
|
||||
if total_bads_spawned == 75:
|
||||
if total_bads_spawned == 5: # 75 default
|
||||
if get_tree().is_network_server():
|
||||
total_bads_spawned += 1
|
||||
rpc("bossMode")
|
||||
else:
|
||||
bossMode()
|
||||
total_bads_spawned += 1
|
||||
bossMode()
|
||||
|
||||
if bads_this_round <= a_round_of_bads && bad_spawning_enabled:
|
||||
var bad_type
|
||||
var badposition = Vector2()
|
||||
if sendblob%20 == 0:
|
||||
|
||||
if sendblob%50 == 0:
|
||||
bad_type = 3
|
||||
sendblob += 1
|
||||
elif sendblob%20 == 0:
|
||||
bad_type = 2
|
||||
sendblob += 1
|
||||
elif sendblob%5 == 0:
|
||||
|
@ -145,8 +165,8 @@ func BaddieTimer():
|
|||
sendblob += 1
|
||||
|
||||
bads_this_round += 1
|
||||
if $BaddieTimer.wait_time > 0.5:
|
||||
$BaddieTimer.wait_time = $BaddieTimer.wait_time * 0.975
|
||||
if $BaddieTimer.wait_time > 1:
|
||||
$BaddieTimer.wait_time = $BaddieTimer.wait_time * 0.99
|
||||
if bads_this_round == a_round_of_bads:
|
||||
bad_health_multi *= 1.5
|
||||
|
||||
|
@ -167,14 +187,26 @@ sync func spawnBad(bad_type, position, health_multi):
|
|||
bad = BlobBad.instance()
|
||||
if bad_type == 2:
|
||||
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
|
||||
|
||||
add_child(bad)
|
||||
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.position = position
|
||||
|
||||
func _on_health_up(hp_increase):
|
||||
$Mothership.health += hp_increase
|
||||
$Mothership._update_health_bar()
|
||||
|
||||
func _on_PauseButton_pressed():
|
||||
$Player.upgradeMenu()
|
||||
|
||||
|
@ -192,7 +224,10 @@ func _on_Player_restart_game():
|
|||
for child in self.get_children():
|
||||
if (child.has_method("_on_Visibility_screen_exited")):
|
||||
child.queue_free()
|
||||
if (child.has_method("bossHealth")):
|
||||
child.queue_free()
|
||||
bads_this_round = 0
|
||||
total_bads_spawned = 0
|
||||
$BaddieTimer.wait_time = BADDIE_WAIT_TIME_DEFAULT
|
||||
$ShootButton.visible = true
|
||||
|
||||
|
@ -222,30 +257,33 @@ func double_laser_upgrade(id):
|
|||
get_node(str(id)).double_laser = true
|
||||
|
||||
# Show other player's movement
|
||||
func _on_Player_multiplayer_movement(id, position, is_shooting):
|
||||
get_node(str(id)).position = position
|
||||
#prints("Set position of", id, "( currently", get_node(str(id)).position, ") to", position)
|
||||
func _on_Player_multiplayer_movement(id, pos, other_is_shooting):
|
||||
get_node(str(id)).position = pos
|
||||
|
||||
if is_shooting:
|
||||
if other_is_shooting:
|
||||
get_node(str(id)).shoot()
|
||||
|
||||
# BOSS MODE #
|
||||
# Disable enemy spawning
|
||||
# Wait a few seconds for enemies to clear
|
||||
# Call for boss launch
|
||||
var bosstimer = null
|
||||
sync func bossMode():
|
||||
prints("bossMode()")
|
||||
bad_spawning_enabled = false
|
||||
var bosstimer = Timer.new()
|
||||
bosstimer = Timer.new()
|
||||
bosstimer.connect("timeout",self,"_launch_boss")
|
||||
add_child(bosstimer) #to process
|
||||
bosstimer.wait_time = 3 # 15 default
|
||||
bosstimer.wait_time = 15
|
||||
bosstimer.one_shot = true
|
||||
bosstimer.start() #to start
|
||||
|
||||
# Spawn the first boss
|
||||
func _launch_boss():
|
||||
prints("_launch_boss()")
|
||||
var bad
|
||||
bad = RectangleBoss.instance()
|
||||
#bad = RectangleBoss.instance()
|
||||
bad = BlackHole.instance()
|
||||
add_child(bad)
|
||||
|
||||
# Flash screen when signalled
|
||||
|
@ -255,11 +293,24 @@ func _launch_boss():
|
|||
# Boss death functions the same as regular 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
|
||||
func _on_boss_death(kill_money):
|
||||
# Give players appropriate money, and restart spawns
|
||||
$Player.money += kill_money
|
||||
bad_spawning_enabled = true
|
||||
bosstimer.stop()
|
||||
|
||||
# Begins screen-flashing process
|
||||
func _flash_screen():
|
||||
|
@ -270,10 +321,11 @@ func _flash_screen():
|
|||
|
||||
func _load_players(id, info):
|
||||
player_info = info
|
||||
#prints(player_info)
|
||||
prints("_load_players", player_info)
|
||||
#prints(player_info[id].name, "YEET", player_info[id].color)
|
||||
|
||||
func _start_multiplayer_game():
|
||||
print(player_info)
|
||||
mainmenu.now_quitting = true
|
||||
for peer_id in player_info:
|
||||
if peer_id != get_tree().get_network_unique_id():
|
||||
|
@ -283,3 +335,13 @@ func _start_multiplayer_game():
|
|||
add_child(player)
|
||||
#get_node("/").add_child(player)
|
||||
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://Bad1.tscn" type="PackedScene" id=2]
|
||||
[ext_resource path="res://Bloob.tscn" type="PackedScene" id=3]
|
||||
[ext_resource path="res://BadLaser.tscn" type="PackedScene" id=4]
|
||||
[ext_resource path="res://RectangleBoss.tscn" type="PackedScene" id=5]
|
||||
[ext_resource path="res://art/bg.png" type="Texture" id=6]
|
||||
[ext_resource path="res://Player.tscn" type="PackedScene" id=7]
|
||||
[ext_resource path="res://Mothership.tscn" type="PackedScene" id=8]
|
||||
[ext_resource path="res://art/interface/pause.png" type="Texture" id=9]
|
||||
[ext_resource path="res://OtherPlayer.tscn" type="PackedScene" id=10]
|
||||
[ext_resource path="res://Prison.tscn" type="PackedScene" id=5]
|
||||
[ext_resource path="res://RectangleBoss.tscn" type="PackedScene" id=6]
|
||||
[ext_resource path="res://BlackHole.tscn" type="PackedScene" id=7]
|
||||
[ext_resource path="res://BG.gd" type="Script" id=8]
|
||||
[ext_resource path="res://art/bg.png" type="Texture" id=9]
|
||||
[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]
|
||||
|
||||
|
@ -22,60 +27,82 @@ size = Vector2( 0, 0 )
|
|||
[sub_resource type="SpriteFrames" id=2]
|
||||
|
||||
animations = [ {
|
||||
"frames": [ ExtResource( 9 ) ],
|
||||
"frames": [ ExtResource( 13 ) ],
|
||||
"loop": true,
|
||||
"name": "default",
|
||||
"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 )
|
||||
_sections_unfolded = [ "Pause" ]
|
||||
FirstBad = ExtResource( 2 )
|
||||
BlobBad = ExtResource( 3 )
|
||||
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
|
||||
texture = SubResource( 1 )
|
||||
_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 )
|
||||
texture = ExtResource( 6 )
|
||||
|
||||
[node name="Player" parent="." index="1" instance=ExtResource( 7 )]
|
||||
|
||||
[node name="BaddieTimer" type="Timer" parent="." index="2"]
|
||||
[node name="BaddieTimer" type="Timer" parent="." index="3"]
|
||||
|
||||
process_mode = 1
|
||||
wait_time = 1.0
|
||||
wait_time = 2.0
|
||||
one_shot = 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 )
|
||||
|
||||
[node name="Line2D" type="Line2D" parent="Mothership" index="2"]
|
||||
|
||||
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"]
|
||||
[node name="MoneyDisplay" type="Label" parent="." index="5"]
|
||||
|
||||
anchor_left = 0.0
|
||||
anchor_top = 0.0
|
||||
|
@ -98,7 +125,57 @@ lines_skipped = 0
|
|||
max_lines_visible = -1
|
||||
_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_top = 0.0
|
||||
|
@ -124,7 +201,7 @@ flat = true
|
|||
align = 1
|
||||
_sections_unfolded = [ "Theme" ]
|
||||
|
||||
[node name="PauseButton" type="Button" parent="." index="6"]
|
||||
[node name="PauseButton" type="Button" parent="." index="12"]
|
||||
|
||||
anchor_left = 0.0
|
||||
anchor_top = 0.0
|
||||
|
@ -148,34 +225,37 @@ group = null
|
|||
flat = true
|
||||
align = 1
|
||||
|
||||
[node name="Pause" type="AnimatedSprite" parent="." index="7"]
|
||||
[node name="Pause" type="AnimatedSprite" parent="." index="13"]
|
||||
|
||||
position = Vector2( 972.128, 67.044 )
|
||||
scale = Vector2( 0.199771, 0.199771 )
|
||||
frames = SubResource( 2 )
|
||||
frames = SubResource( 4 )
|
||||
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_top = 0.0
|
||||
anchor_right = 0.0
|
||||
anchor_bottom = 0.0
|
||||
margin_right = 1026.0
|
||||
margin_bottom = 601.0
|
||||
margin_left = -50.0
|
||||
margin_top = -15.0
|
||||
margin_right = 1044.0
|
||||
margin_bottom = 623.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
|
||||
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" ]
|
||||
|
||||
[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_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="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="Mothership" method="_on_Player_restart_game"]
|
||||
|
||||
[connection signal="update_display" from="Player" to="." method="_on_Player_update_display"]
|
||||
|
||||
[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="HideHowTo" to="." method="_on_HideHowTo_pressed"]
|
||||
|
||||
|
||||
|
|
|
@ -51,6 +51,9 @@ func _process(delta):
|
|||
if (Input.is_action_pressed("ui_quit")):
|
||||
get_tree().quit()
|
||||
|
||||
#if (Input.is_action_pressed("ui_accept")):
|
||||
# now_quitting = true
|
||||
|
||||
if ($Ship.rotation_degrees > -7 || $Ship.rotation_degrees < -13):
|
||||
rotation_multiplier = SLOW_ROTATION
|
||||
else:
|
||||
|
|
|
@ -36,40 +36,42 @@ var timer = null
|
|||
var bullet_delay = 0.1
|
||||
|
||||
func _ready():
|
||||
var health_bar = Vector2(((health * (.8)) + 100), 200)
|
||||
$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)
|
||||
_update_health_bar()
|
||||
|
||||
func _process(delta):
|
||||
if get_tree().has_network_peer() && not get_tree().is_network_server():
|
||||
#health = slave_health
|
||||
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):
|
||||
if not get_tree().has_network_peer():
|
||||
#if not get_tree().has_network_peer():
|
||||
if not get_tree().is_network_server():
|
||||
health -= 50
|
||||
if get_tree().is_network_server():
|
||||
health -= 50
|
||||
rset("slave_health", health)
|
||||
prints(health)
|
||||
var health_bar = Vector2(((health * (.8)) + 100), 200)
|
||||
$Line2D.set_point_position( 1, health_bar )
|
||||
|
||||
_update_health_bar()
|
||||
|
||||
if health <= 250:
|
||||
$AnimatedSprite.frame = 1
|
||||
$BaseSprite.frame = 1
|
||||
if health <= 100:
|
||||
$AnimatedSprite.frame = 2
|
||||
$BaseSprite.frame = 2
|
||||
if health <= 0:
|
||||
$AnimatedSprite.frame = 3
|
||||
$BaseSprite.frame = 3
|
||||
emit_signal("game_over")
|
||||
prints("Game Over!")
|
||||
|
||||
func _on_Player_restart_game():
|
||||
health = STARTING_HEALTH
|
||||
$AnimatedSprite.frame = 0
|
||||
var health_bar = Vector2(((health * (.8)) + 100), 200)
|
||||
$BaseSprite.frame = 0
|
||||
var health_bar = Vector2(((health * (.8)) + 100), 300)
|
||||
$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://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_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/whoops_guy.png" type="Texture" id=7]
|
||||
|
||||
[sub_resource type="CapsuleShape2D" id=1]
|
||||
|
||||
|
@ -22,15 +23,24 @@ animations = [ {
|
|||
"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"]
|
||||
|
||||
position = Vector2( 23.327, 304.835 )
|
||||
scale = Vector2( 0.3, 0.3 )
|
||||
position = Vector2( 42.1613, 302.944 )
|
||||
scale = Vector2( 0.263572, 0.240903 )
|
||||
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
|
||||
|
@ -44,10 +54,46 @@ Laser = ExtResource( 2 )
|
|||
position = Vector2( -110, 0 )
|
||||
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 )
|
||||
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"]
|
||||
|
||||
|
|
|
@ -95,15 +95,19 @@ func _server_disconnected():
|
|||
func _connected_fail():
|
||||
pass # Could not even connect to server, abort
|
||||
|
||||
remote func register_player(id, info):
|
||||
player_info[id] = info
|
||||
remote func register_player(new_id, info):
|
||||
prints("REGISTERING", new_id, info)
|
||||
player_info[new_id] = info
|
||||
if get_tree().is_network_server():
|
||||
# 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
|
||||
for peer_id in player_info:
|
||||
rpc_id(id, "register_player", peer_id, player_info[peer_id])
|
||||
emit_signal("player_info", id, player_info)
|
||||
if peer_id != new_id:
|
||||
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 = ""
|
||||
#$Players.text = str(player_info)
|
||||
|
|
|
@ -99,7 +99,7 @@ animations = [ {
|
|||
"speed": 5.0
|
||||
} ]
|
||||
|
||||
[node name="Networking" type="Node" index="0"]
|
||||
[node name="Networking" type="Node"]
|
||||
|
||||
pause_mode = 2
|
||||
script = ExtResource( 1 )
|
||||
|
|
|
@ -77,8 +77,6 @@ func _ready():
|
|||
add_child(timer)
|
||||
timer.start()
|
||||
|
||||
$AnimatedSprite.modulate = \"00FFFF\"
|
||||
|
||||
position.x = 100
|
||||
position.y = 250
|
||||
|
||||
|
@ -109,10 +107,22 @@ func setUsername(name):
|
|||
username = name
|
||||
|
||||
func 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):
|
||||
$Username.text = username
|
||||
|
||||
if rainbow_is_on:
|
||||
rainbow(delta)
|
||||
|
||||
pass
|
||||
|
||||
func shoot():
|
||||
|
@ -132,9 +142,36 @@ func shoot():
|
|||
laser2.position.x = position.x + 46
|
||||
laser2.current_pen = laser_penetration
|
||||
|
||||
|
||||
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" ]
|
||||
|
||||
[sub_resource type="SpriteFrames" id=2]
|
||||
|
@ -165,11 +202,11 @@ collision_mask = 29
|
|||
audio_bus_override = false
|
||||
audio_bus_name = "Master"
|
||||
script = SubResource( 1 )
|
||||
_sections_unfolded = [ "Material" ]
|
||||
Laser = ExtResource( 1 )
|
||||
|
||||
[node name="AnimatedSprite" type="AnimatedSprite" parent="." index="0"]
|
||||
|
||||
modulate = Color( 0.276855, 0.445152, 0.84375, 1 )
|
||||
position = Vector2( 1.01175, 7.07602 )
|
||||
scale = Vector2( 0.2, 0.2 )
|
||||
frames = SubResource( 2 )
|
||||
|
|
115
Player.gd
|
@ -23,13 +23,11 @@ extends Area2D
|
|||
signal update_display # tells parent to update points 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 ship_speed_upgrade
|
||||
signal other_shooting_upgrade
|
||||
signal other_ship_speed_upgrade
|
||||
signal double_laser_upgrade
|
||||
signal other_ship_color_change
|
||||
signal other_ship_enable_rainbow
|
||||
signal shooting_speed_fully_upgraded
|
||||
signal ship_speed_fully_upgraded
|
||||
signal restart_game
|
||||
signal multiplayer_movement
|
||||
|
||||
|
@ -39,6 +37,8 @@ export (PackedScene) var Laser
|
|||
# THINGS THAT MAY NEED ADJUSTING
|
||||
#################################
|
||||
|
||||
var ship_speed = 500
|
||||
|
||||
# first 5 tiers of shooting speed
|
||||
const BULLET_DELAY_TIER1 = 0.8
|
||||
const BULLET_DELAY_TIER2 = 0.5
|
||||
|
@ -61,21 +61,21 @@ const BULLET_DELAY_TIER5_COST = 1000
|
|||
# double laser cost
|
||||
const DOUBLE_LASER_COST = 2000
|
||||
|
||||
# the 5 tiers of ship speed
|
||||
const SHIP_SPEED_TIER1 = 150
|
||||
const SHIP_SPEED_TIER2 = 200
|
||||
const SHIP_SPEED_TIER3 = 300
|
||||
const SHIP_SPEED_TIER4 = 500
|
||||
const SHIP_SPEED_TIER5 = 800
|
||||
# 5 tiers of laser damage
|
||||
const LASER_DAMAGE_TIER1 = 10
|
||||
const LASER_DAMAGE_TIER2 = 12
|
||||
const LASER_DAMAGE_TIER3 = 15
|
||||
const LASER_DAMAGE_TIER4 = 20
|
||||
const LASER_DAMAGE_TIER5 = 50
|
||||
|
||||
# costs of ship speed upgrades
|
||||
const SHIP_SPEED_TIER2_COST = 200
|
||||
const SHIP_SPEED_TIER3_COST = 400
|
||||
const SHIP_SPEED_TIER4_COST = 600
|
||||
const SHIP_SPEED_TIER5_COST = 800
|
||||
# costs of laser damage upgrades
|
||||
const LASER_DAMAGE_TIER2_COST = 200
|
||||
const LASER_DAMAGE_TIER3_COST = 500
|
||||
const LASER_DAMAGE_TIER4_COST = 1000
|
||||
const LASER_DAMAGE_TIER5_COST = 2000
|
||||
|
||||
# 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
|
||||
const STARTING_MONEY = 100
|
||||
|
@ -94,10 +94,6 @@ var can_shoot = false
|
|||
# timer for shooting speed
|
||||
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
|
||||
var bullet_delay = BULLET_DELAY_TIER1
|
||||
var bullet_delay_tier = 0
|
||||
|
@ -105,6 +101,7 @@ var bullet_delay_tier = 0
|
|||
# sets other shooting settings to their defaults
|
||||
var laser_penetration = 0
|
||||
var double_laser = false
|
||||
var laser_damage = LASER_DAMAGE_TIER1
|
||||
|
||||
# gives the player their starting points
|
||||
var money = STARTING_MONEY
|
||||
|
@ -126,13 +123,12 @@ func upgradeMenu():
|
|||
add_child(upgmenu)
|
||||
upgmenu.connect("refund", self, "_refund_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("laser_penetration_upgrade", self, "laserPenetrationUpgrade_button")
|
||||
upgmenu.connect("menu_closed", self, "menuClosed")
|
||||
upgmenu.connect("change_color", self, "changeColor")
|
||||
upgmenu.connect("taste_the_rainbow", self, "enable_the_rainbow")
|
||||
upgmenu.bullet_delay_tier = bullet_delay_tier
|
||||
upgmenu.ship_speed_tier = ship_speed_tier
|
||||
if !get_tree().has_network_peer():
|
||||
get_tree().paused = true
|
||||
|
||||
|
@ -215,34 +211,6 @@ func upgradeBulletDelay():
|
|||
timer.set_wait_time(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():
|
||||
if money >= DOUBLE_LASER_COST && double_laser == false:
|
||||
money -= DOUBLE_LASER_COST
|
||||
|
@ -275,7 +243,6 @@ func _refund_button():
|
|||
bullet_delay = BULLET_DELAY_TIER1
|
||||
bullet_delay_tier = 0
|
||||
timer.set_wait_time(bullet_delay)
|
||||
ship_speed = SHIP_SPEED_TIER1
|
||||
laser_penetration = 0
|
||||
double_laser = false
|
||||
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):
|
||||
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):
|
||||
emit_signal("double_laser_upgrade", id)
|
||||
|
||||
# the player's movement vector
|
||||
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):
|
||||
# move player with keyboard
|
||||
velocity = Vector2()
|
||||
|
@ -338,8 +315,11 @@ func _process(delta):
|
|||
velocity = velocity.normalized() * ship_speed
|
||||
position += velocity * delta
|
||||
|
||||
if rainbow_is_on:
|
||||
rainbow(delta)
|
||||
|
||||
# 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)
|
||||
|
||||
# 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.position.y = position.y - 27
|
||||
laser.position.x = position.x + 46
|
||||
laser.damage = laser_damage
|
||||
|
||||
#MAYBE THE LASERS SHOULD BE THEIR OWN NODES
|
||||
#Would allow for more simple additions in the future
|
||||
|
@ -384,6 +365,38 @@ func shoot():
|
|||
can_shoot = false
|
||||
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
|
||||
func gameOver():
|
||||
var gameover = preload("res://GameOver.tscn").instance()
|
||||
|
|
|
@ -20,7 +20,7 @@ custom_solver_bias = 0.0
|
|||
radius = 12.8998
|
||||
height = 40.4125
|
||||
|
||||
[node name="Player" type="Area2D" index="0"]
|
||||
[node name="Player" type="Area2D"]
|
||||
|
||||
input_pickable = 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 flash
|
||||
signal boss_fight_over
|
||||
signal boss_health
|
||||
export (PackedScene) var Laser
|
||||
|
||||
#### MAYBE ADD A HEALTH BAR TO MAIN ITSELF ####
|
||||
#var health = 3000
|
||||
# DEFAULT:
|
||||
var health = 20000
|
||||
var starting_health = 20000
|
||||
var health = starting_health
|
||||
|
||||
var timer = null
|
||||
var hit_timer = 1000
|
||||
|
@ -48,7 +50,7 @@ func _ready():
|
|||
pass
|
||||
|
||||
func hit(who):
|
||||
health -= 3/health_multi
|
||||
health -= who.damage/(health_multi*3.5)
|
||||
if health > 1500:
|
||||
$Inside/InsideBadSprite.frame = 1
|
||||
hit_timer = 0
|
||||
|
@ -57,6 +59,7 @@ func hit(who):
|
|||
updateOutsideSprite()
|
||||
if get_tree().is_network_server():
|
||||
rpc("bossHealth", health)
|
||||
emit_signal("boss_health", health, starting_health)
|
||||
|
||||
func _process(delta):
|
||||
# Entering view
|
||||
|
@ -115,6 +118,8 @@ func _process(delta):
|
|||
#### DOES LOW HEALTH RELEASE THE INSIDE OR NO HEALTH? ####
|
||||
if health <= 0 && !flashed:
|
||||
emit_signal("flash")
|
||||
$OutsideBottomCollision.disabled = true
|
||||
$OutsideTopCollision.disabled = true
|
||||
prints("flash")
|
||||
flashed = true
|
||||
#queue_free()
|
||||
|
@ -142,6 +147,7 @@ func _on_Inside_area_entered(area):
|
|||
rpc("bossHealth", health)
|
||||
else:
|
||||
pass
|
||||
emit_signal("boss_health", health, starting_health)
|
||||
|
||||
func updateOutsideSprite():
|
||||
if health > 18000:
|
||||
|
|
|
@ -32,12 +32,12 @@ animations = [ {
|
|||
"speed": 5.0
|
||||
} ]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id=4]
|
||||
[sub_resource type="RectangleShape2D" id=2]
|
||||
|
||||
custom_solver_bias = 0.0
|
||||
extents = Vector2( 414.127, 469.45 )
|
||||
|
||||
[sub_resource type="SpriteFrames" id=2]
|
||||
[sub_resource type="SpriteFrames" id=3]
|
||||
|
||||
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 ) ],
|
||||
|
@ -46,12 +46,12 @@ animations = [ {
|
|||
"speed": 5.0
|
||||
} ]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id=3]
|
||||
[sub_resource type="RectangleShape2D" id=4]
|
||||
|
||||
custom_solver_bias = 0.0
|
||||
extents = Vector2( 404.313, 217.774 )
|
||||
|
||||
[node name="RectangleBoss" type="Area2D"]
|
||||
[node name="RectangleBoss" type="Area2D" index="0"]
|
||||
|
||||
position = Vector2( 336.401, -1.22772 )
|
||||
scale = Vector2( 0.25, 0.25 )
|
||||
|
@ -60,10 +60,12 @@ 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"
|
||||
script = ExtResource( 1 )
|
||||
_sections_unfolded = [ "Transform" ]
|
||||
_sections_unfolded = [ "Collision", "Transform" ]
|
||||
Laser = ExtResource( 2 )
|
||||
|
||||
[node name="Inside" type="Area2D" parent="." index="0"]
|
||||
|
@ -87,7 +89,7 @@ _sections_unfolded = [ "Transform" ]
|
|||
|
||||
position = Vector2( 3501.19, 1181.02 )
|
||||
scale = Vector2( 1, 1.00835 )
|
||||
shape = SubResource( 4 )
|
||||
shape = SubResource( 2 )
|
||||
|
||||
[node name="Line2D" type="Line2D" parent="." index="1"]
|
||||
|
||||
|
@ -101,19 +103,19 @@ round_precision = 8
|
|||
[node name="BigBadSprite" type="AnimatedSprite" parent="." index="2"]
|
||||
|
||||
position = Vector2( 3392, 1182 )
|
||||
frames = SubResource( 2 )
|
||||
frames = SubResource( 3 )
|
||||
animation = "default"
|
||||
_sections_unfolded = [ "Transform" ]
|
||||
|
||||
[node name="OutsideTopCollision" type="CollisionShape2D" parent="." index="3"]
|
||||
|
||||
position = Vector2( 3427.85, 491.096 )
|
||||
shape = SubResource( 3 )
|
||||
shape = SubResource( 4 )
|
||||
|
||||
[node name="OutsideBottomCollision" type="CollisionShape2D" parent="." index="4"]
|
||||
|
||||
position = Vector2( 3427.85, 1866.16 )
|
||||
shape = SubResource( 3 )
|
||||
shape = SubResource( 4 )
|
||||
|
||||
[connection signal="area_entered" from="Inside" to="." method="_on_Inside_area_entered"]
|
||||
|
||||
|
|
1
TODO
|
@ -4,4 +4,5 @@
|
|||
* A story mode?
|
||||
* The main menu stars could do something silly and fun, like change colors,
|
||||
maybe taking the menu colors with them.
|
||||
* Purchasable Mothership upgrades (like turrets), and make all upgrades exponentially more expensive for higher tiers
|
||||
* 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 speed_upgrade
|
||||
signal bullet_delay_upgrade
|
||||
signal ship_speed_upgrade
|
||||
signal double_laser_upgrade
|
||||
signal add_laser
|
||||
signal plasma_lasers
|
||||
signal menu_closed
|
||||
signal change_color
|
||||
signal taste_the_rainbow
|
||||
|
||||
var bullet_delay_tier
|
||||
var shooting_speed_tier
|
||||
var ship_speed_tier
|
||||
var double_lasers
|
||||
|
||||
func _ready():
|
||||
bullet_delay_tier = get_parent().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():
|
||||
$ColorRect.color = Color(1,1,1,0.5)
|
||||
else:
|
||||
$ColorRect.color = Color(1,1,1,0.5)
|
||||
$ColorRect.color = Color(0,0,0,1)
|
||||
|
||||
func _process(delta):
|
||||
$ShootingSpeedUpgrade/Icon.frame = bullet_delay_tier
|
||||
$ShipSpeedUpgrade/Icon.frame = ship_speed_tier
|
||||
if (Input.is_action_pressed("ui_quit")):
|
||||
get_tree().quit()
|
||||
if Input.is_action_pressed("ui_accept"):
|
||||
|
@ -59,9 +55,7 @@ func _on_Button_pressed():
|
|||
|
||||
func _on_Refund_pressed():
|
||||
bullet_delay_tier = 0
|
||||
ship_speed_tier = 0
|
||||
$ShootingSpeedUpgrade/Icon.frame = 0
|
||||
$ShipSpeedUpgrade/Icon.frame = 0
|
||||
get_tree().paused = false
|
||||
emit_signal("refund")
|
||||
|
||||
|
@ -70,12 +64,6 @@ func _on_ShootingSpeedUpgrade_pressed():
|
|||
emit_signal("bullet_delay_upgrade")
|
||||
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():
|
||||
get_tree().paused = false
|
||||
emit_signal("double_laser_upgrade")
|
||||
|
@ -108,3 +96,8 @@ func _on_DarkenedLawnGreen_pressed():
|
|||
|
||||
func _on_DeepSkyBlue_pressed():
|
||||
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_vertical = 1
|
||||
color = Color( 0, 0, 0, 1 )
|
||||
_sections_unfolded = [ "Visibility" ]
|
||||
|
||||
[node name="Resume" type="Button" parent="." index="1"]
|
||||
|
||||
|
@ -153,10 +154,9 @@ animation = "default"
|
|||
|
||||
[node name="ShipSpeedUpgrade" type="Node" parent="." index="4"]
|
||||
|
||||
editor/display_folded = true
|
||||
|
||||
[node name="Button" type="Button" parent="ShipSpeedUpgrade" index="0"]
|
||||
|
||||
visible = false
|
||||
anchor_left = 0.0
|
||||
anchor_top = 0.0
|
||||
anchor_right = 0.0
|
||||
|
@ -181,6 +181,7 @@ align = 1
|
|||
|
||||
[node name="Icon" type="AnimatedSprite" parent="ShipSpeedUpgrade" index="1"]
|
||||
|
||||
visible = false
|
||||
position = Vector2( 530, 310 )
|
||||
scale = Vector2( 0.392712, 0.392712 )
|
||||
frames = SubResource( 3 )
|
||||
|
@ -188,8 +189,6 @@ animation = "New Anim"
|
|||
|
||||
[node name="ColorSelect" type="Node2D" parent="." index="5"]
|
||||
|
||||
editor/display_folded = true
|
||||
|
||||
[node name="ColorSelectBG" type="Sprite" parent="ColorSelect" index="0"]
|
||||
|
||||
position = Vector2( 150, 210 )
|
||||
|
@ -412,8 +411,33 @@ group = null
|
|||
flat = true
|
||||
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"]
|
||||
|
||||
editor/display_folded = true
|
||||
position = Vector2( -150, -10 )
|
||||
__meta__ = {
|
||||
"_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/Rainbow" to="." method="_on_Rainbow_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
|
||||
custom_template/release=""
|
||||
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=""
|
||||
|
|