Compare commits

..

10 Commits

Author SHA1 Message Date
Sage Vaillancourt 74b10382e7 Made some changes before fixing gitignore. 2018-11-29 16:04:22 -05:00
Sage Vaillancourt 97d4181b16 Made some changes before fixing gitignore. 2018-11-29 16:04:08 -05:00
Sage Vaillancourt 92a56c31cc Removed cyclical turret/turretmenu instancing 2018-11-14 20:36:02 -05:00
Sage Vaillancourt ac479cf722 Progress on RectangleReturn boss 2018-11-13 20:53:07 -05:00
Sage Vaillancourt 854d0ec6b9 Add a modified boss tune for the rectangle boss 2018-11-13 19:31:59 -05:00
Sage Vaillancourt f6c59a838e Begin better project structuring. Add settings page framework and donation links 2018-11-12 23:17:53 -05:00
sagev9000 a59e743777 README.md edited online with Bitbucket 2018-11-13 03:48:01 +00:00
sagev9000 b22162752e Added donation locations 2018-11-13 02:36:17 +00:00
Sage Vaillancourt 73ac0b2652 Remove the "I" 2018-06-05 17:13:25 -04:00
Sage Vaillancourt 317108275d Add readme file with game description and donation options 2018-06-05 17:09:52 -04:00
141 changed files with 5810 additions and 632 deletions

6
BG.gd
View File

@ -12,3 +12,9 @@ func _process(delta):
$bg1.position.x = 1600 $bg1.position.x = 1600
if $bg2.position.x < -550: if $bg2.position.x < -550:
$bg2.position.x = 1600 $bg2.position.x = 1600
if $Sun.visible == true:
if $Sun.position.x < -2500:
$Sun.visible = false
$Sun.position.x = 1250
$Sun.position.x -= delta*2.5

114
BG.tscn Normal file
View File

@ -0,0 +1,114 @@
[gd_scene load_steps=4 format=2]
[ext_resource path="res://BG.gd" type="Script" id=1]
[ext_resource path="res://art/backgrounds/SunBG.png" type="Texture" id=2]
[ext_resource path="res://art/bg.png" type="Texture" id=3]
[node name="BG" type="Node2D"]
z_index = -1
script = ExtResource( 1 )
_sections_unfolded = [ "Z Index" ]
[node name="CanvasModulate" type="CanvasModulate" parent="." index="0"]
visible = false
color = Color( 0, 0, 0, 1 )
[node name="BlackBG" type="ColorRect" parent="." index="1"]
light_mask = 0
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_right = 1035.0
margin_bottom = 602.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 = [ "Anchor", "Focus", "Grow Direction", "Hint", "Margin", "Material", "Mouse", "Pause", "Rect", "Size Flags", "Theme", "Visibility" ]
[node name="Sun" type="Sprite" parent="." index="2"]
visible = false
position = Vector2( 1250, 154.764 )
z_index = 1
texture = ExtResource( 2 )
_sections_unfolded = [ "Transform", "Z Index" ]
[node name="bg1" type="Sprite" parent="." index="3"]
editor/display_folded = true
light_mask = 2
position = Vector2( 577.646, 365.663 )
scale = Vector2( 0.694364, 0.694364 )
texture = ExtResource( 3 )
_sections_unfolded = [ "Transform", "Visibility", "Z Index" ]
[node name="Light2D" type="Light2D" parent="bg1" index="0"]
visible = false
enabled = true
editor_only = false
texture = ExtResource( 3 )
offset = Vector2( 0, 0 )
texture_scale = 1.0
color = Color( 1, 1, 1, 1 )
energy = 2.5
mode = 0
range_height = 0.0
range_z_min = -1024
range_z_max = 1024
range_layer_min = 0
range_layer_max = 0
range_item_cull_mask = 2
shadow_enabled = false
shadow_color = Color( 0, 0, 0, 0 )
shadow_buffer_size = 2048
shadow_gradient_length = 0.0
shadow_filter = 0
shadow_filter_smooth = 0.0
shadow_item_cull_mask = 2
_sections_unfolded = [ "Range", "Shadow" ]
[node name="bg2" type="Sprite" parent="." index="4"]
editor/display_folded = true
light_mask = 2
position = Vector2( 1823.66, 361.868 )
scale = Vector2( 0.6985, 0.6985 )
texture = ExtResource( 3 )
_sections_unfolded = [ "Transform", "Visibility", "Z Index" ]
[node name="Light2D" type="Light2D" parent="bg2" index="0"]
visible = false
enabled = true
editor_only = false
texture = ExtResource( 3 )
offset = Vector2( 0, 0 )
texture_scale = 1.0
color = Color( 1, 1, 1, 1 )
energy = 2.5
mode = 0
range_height = 0.0
range_z_min = -1024
range_z_max = 1024
range_layer_min = 0
range_layer_max = 0
range_item_cull_mask = 2
shadow_enabled = false
shadow_color = Color( 0, 0, 0, 0 )
shadow_buffer_size = 2048
shadow_gradient_length = 0.0
shadow_filter = 0
shadow_filter_smooth = 0.0
shadow_item_cull_mask = 2
_sections_unfolded = [ "Range", "Shadow" ]

4
Bad.gd
View File

@ -56,4 +56,8 @@ func _process(delta):
if velocity.length() > 0: if velocity.length() > 0:
velocity = velocity.normalized() * speed velocity = velocity.normalized() * speed
if position.x < -100:
emit_signal("dead", 0)
queue_free()
position += velocity * delta position += velocity * delta

View File

@ -1,6 +1,8 @@
[gd_scene format=2] [gd_scene format=2]
[node name="BadClass" type="Area2D" index="0"] [node name="BadClass" type="Area2D" groups=[
"enemies",
]]
input_pickable = true input_pickable = true
gravity_vec = Vector2( 0, 1 ) gravity_vec = Vector2( 0, 1 )
@ -11,7 +13,7 @@ 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"
_sections_unfolded = [ "Collision" ] _sections_unfolded = [ "Audio Bus", "Collision", "Material", "Pause", "Pickable", "Transform", "Visibility", "Z Index" ]
[node name="CollisionBox" type="CollisionShape2D" parent="." index="0"] [node name="CollisionBox" type="CollisionShape2D" parent="." index="0"]

10
Bad1.gd
View File

@ -29,10 +29,6 @@ var boss = false
var health = 50 var health = 50
var hit_timer = 1000 var hit_timer = 1000
func _on_Visibility_screen_exited():
prints("bye-bye, bad bad")
queue_free()
func _ready(): func _ready():
connect("area_entered", self, "hit") connect("area_entered", self, "hit")
pass pass
@ -46,7 +42,7 @@ func hit(who):
$Line2D.set_point_position( 1, health_bar ) $Line2D.set_point_position( 1, health_bar )
if health <= 0: if health <= 0:
emit_signal("dead", 15) emit_signal("dead", 10) # was 12 # was 15
queue_free() queue_free()
var velocity = Vector2() var velocity = Vector2()
@ -66,3 +62,7 @@ func _process(delta):
velocity = velocity.normalized() * SPEED velocity = velocity.normalized() * SPEED
position += velocity * delta position += velocity * delta
if position.x < -100:
emit_signal("dead", 0)
queue_free()

View File

@ -19,7 +19,9 @@ animations = [ {
custom_solver_bias = 0.0 custom_solver_bias = 0.0
radius = 171.26 radius = 171.26
[node name="Bad1" type="Area2D"] [node name="Bad1" type="Area2D" groups=[
"enemies",
]]
position = Vector2( 947.34, 293.528 ) position = Vector2( 947.34, 293.528 )
scale = Vector2( 0.15, 0.15 ) scale = Vector2( 0.15, 0.15 )

View File

@ -23,12 +23,13 @@ signal dead
export (int) var SPEED export (int) var SPEED
export (PackedScene) var Laser export (PackedScene) var Laser
var screensize var screensize
var fire_speed = 15 var fire_speed = 15#0
var health = 400 var health = 400
var hit_timer = 1000 var hit_timer = 1000
var can_shoot = true var can_shoot = true
var health_multi = 1 var health_multi = 1
var boss = false var boss = false
var independent = true
func _on_Visibility_screen_exited(): func _on_Visibility_screen_exited():
prints("bye-bye, bad bad") prints("bye-bye, bad bad")
queue_free() queue_free()
@ -38,9 +39,10 @@ func _ready():
$Rotatable.rotation_degrees = -90 $Rotatable.rotation_degrees = -90
func hit(who): func hit(who):
health -= who.damage/health_multi health -= who.damage/health_multi
$AnimatedSprite.frame = 1 #$AnimatedSprite.frame = 1
hit_timer = 0 hit_timer = 0
var velocity = Vector2() var velocity = Vector2()
@ -48,6 +50,11 @@ var velocity = Vector2()
func _process(delta): func _process(delta):
if health <= 0: if health <= 0:
emit_signal("dead", 100) emit_signal("dead", 100)
if independent:
queue_free()
if position.x < -100 && independent:
emit_signal("dead", 0)
queue_free() queue_free()
$Rotatable.rotation_degrees += delta*fire_speed $Rotatable.rotation_degrees += delta*fire_speed
@ -91,20 +98,25 @@ func _process(delta):
velocity.x -= 1 velocity.x -= 1
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 * 3.75) - 750), -1100) if independent == true:
$Line2D.set_point_position( 1, health_bar ) #print(independent)
position += velocity * delta
position += velocity * delta var health_bar = Vector2(((health * 3.75) - 750), -1100)
$Line2D.set_point_position( 1, health_bar )
else:
$Line2D.visible = false
health = 99999
func shoot(): func shoot():
var laser = Laser.instance() if $AnimatedSprite.frame != 1:
get_node("../").add_child(laser) var laser = Laser.instance()
laser.friendly_laser = false get_node("../").add_child(laser)
laser.rotation_degrees = 180 laser.friendly_laser = false
laser.position.y = position.y - 10 laser.rotation_degrees = 180
laser.position.x = position.x - 170 laser.position.y = position.y - 5
laser.position.x = position.x - 95

View File

@ -1,14 +1,16 @@
[gd_scene load_steps=8 format=2] [gd_scene load_steps=10 format=2]
[ext_resource path="res://BadLaser.gd" type="Script" id=1] [ext_resource path="res://BadLaser.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]
[ext_resource path="res://art/bad/laser/bad_laser_stationary.png" type="Texture" id=3] [ext_resource path="res://art/bad/laser/bad_laser_bg.png" type="Texture" id=3]
[ext_resource path="res://art/bad/laser/bad_laser_rotatable.png" type="Texture" id=4] [ext_resource path="res://art/bad/laser/bad_laser_stationary.png" type="Texture" id=4]
[ext_resource path="res://art/bad/laser/bad_laser_broken.png" type="Texture" id=5]
[ext_resource path="res://art/bad/laser/bad_laser_rotatable.png" type="Texture" id=6]
[sub_resource type="SpriteFrames" id=1] [sub_resource type="SpriteFrames" id=1]
animations = [ { animations = [ {
"frames": [ ExtResource( 3 ) ], "frames": [ ExtResource( 4 ), ExtResource( 5 ) ],
"loop": true, "loop": true,
"name": "New Anim", "name": "New Anim",
"speed": 5.0 "speed": 5.0
@ -17,7 +19,7 @@ animations = [ {
[sub_resource type="SpriteFrames" id=2] [sub_resource type="SpriteFrames" id=2]
animations = [ { animations = [ {
"frames": [ ExtResource( 4 ) ], "frames": [ ExtResource( 6 ) ],
"loop": true, "loop": true,
"name": "default", "name": "default",
"speed": 5.0 "speed": 5.0
@ -28,7 +30,9 @@ animations = [ {
custom_solver_bias = 0.0 custom_solver_bias = 0.0
radius = 867.264 radius = 867.264
[node name="BadLaser" type="Area2D"] [node name="BadLaser" type="Area2D" index="0" groups=[
"enemies",
]]
position = Vector2( 947.34, 293.528 ) position = Vector2( 947.34, 293.528 )
scale = Vector2( 0.07, 0.07 ) scale = Vector2( 0.07, 0.07 )
@ -39,7 +43,7 @@ gravity = 98.0
linear_damp = 0.1 linear_damp = 0.1
angular_damp = 1.0 angular_damp = 1.0
collision_layer = 4 collision_layer = 4
collision_mask = 4 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 )
@ -54,23 +58,30 @@ wait_time = 1.0
one_shot = false one_shot = false
autostart = false autostart = false
[node name="AnimatedSprite" type="AnimatedSprite" parent="." index="1"] [node name="BG" type="Sprite" parent="." index="1"]
position = Vector2( 3.5857, 9.035 )
scale = Vector2( 1.0195, 1.0195 )
texture = ExtResource( 3 )
[node name="AnimatedSprite" type="AnimatedSprite" parent="." index="2"]
frames = SubResource( 1 ) frames = SubResource( 1 )
animation = "New Anim" animation = "New Anim"
_sections_unfolded = [ "Transform" ]
[node name="Rotatable" type="AnimatedSprite" parent="." index="2"] [node name="Rotatable" type="AnimatedSprite" parent="." index="3"]
frames = SubResource( 2 ) frames = SubResource( 2 )
animation = "default" animation = "default"
_sections_unfolded = [ "Transform" ] _sections_unfolded = [ "Transform" ]
[node name="CollisionShape2D" type="CollisionShape2D" parent="." index="3"] [node name="CollisionShape2D" type="CollisionShape2D" parent="." index="4"]
position = Vector2( 0, -14.2857 ) position = Vector2( 0, -14.2857 )
shape = SubResource( 3 ) shape = SubResource( 3 )
[node name="Line2D" type="Line2D" parent="." index="4"] [node name="Line2D" type="Line2D" parent="." index="5"]
position = Vector2( 9.15527e-05, 33.3334 ) position = Vector2( 9.15527e-05, 33.3334 )
points = PoolVector2Array( -750, -1100, 143, -1100 ) points = PoolVector2Array( -750, -1100, 143, -1100 )

View File

@ -1,48 +1,62 @@
extends "res://Bad.gd" extends "res://Bad.gd"
# class member variables go here, for example:
# var a = 2
# var b = "textvar"
var rot_speed = 1 var rot_speed = 1
var dying = false
var splitting = false
signal flash signal flash
func _ready(): func _ready():
starting_health = 20000 starting_health = 5000
health = starting_health health = starting_health
speed = 10 speed = 10
kill_reward = 1000 kill_reward = 1000
boss = true boss = true
var splitting = false
func _process(delta): func _process(delta):
rotation += delta*rot_speed rotation += delta*rot_speed
if rotation > 2*PI: if rotation > 2*PI:
rotation = 0 rotation = 0
if health < starting_health*0.88: if dying == true:
$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 $TopHalf.visible = true
$BotHalf.visible = true $BotHalf.visible = true
$MainSprite.visible = false $MainSprite.visible = false
if rotation_degrees > 45 && rotation_degrees < 70: if rotation_degrees > 45 && rotation_degrees < 70:
if rot_speed != 0:
emit_signal("flash")
splitting = true splitting = true
health = 999999
elif health < starting_health*0.16:
dying = true
#$CollisionBox.disabled = true
elif health < starting_health*0.28:
if $MainSprite.frame != 6:
emit_signal("flash")
$MainSprite.frame = 6
elif health < starting_health*0.40:
if $MainSprite.frame != 5:
emit_signal("flash")
$MainSprite.frame = 5
elif health < starting_health*0.52:
if $MainSprite.frame != 4:
emit_signal("flash")
$MainSprite.frame = 4
elif health < starting_health*0.64:
if $MainSprite.frame != 3:
emit_signal("flash")
$MainSprite.frame = 3
elif health < starting_health*0.76:
if $MainSprite.frame != 2:
emit_signal("flash")
$MainSprite.frame = 2
elif health < starting_health*0.88:
if $MainSprite.frame != 1:
emit_signal("flash")
$MainSprite.frame = 1
if splitting: if splitting:
$CollisionBox.disabled = true
rot_speed = 0 rot_speed = 0
$TopHalf.position.y -= delta*500 $TopHalf.position.y -= delta*500
$TopHalf.position.x -= delta*250 $TopHalf.position.x -= delta*250

View File

@ -49,8 +49,9 @@ animations = [ {
position = Vector2( 1302.7, 306.846 ) position = Vector2( 1302.7, 306.846 )
scale = Vector2( 0.3, 0.3 ) scale = Vector2( 0.3, 0.3 )
z_index = -1
z_as_relative = false
script = ExtResource( 2 ) script = ExtResource( 2 )
_sections_unfolded = [ "Collision", "Transform" ]
[node name="CollisionBox" parent="." index="0"] [node name="CollisionBox" parent="." index="0"]

View File

@ -44,7 +44,10 @@ var velocity = Vector2()
func _process(delta): func _process(delta):
if health <= 0: if health <= 0:
emit_signal("dead", 50) emit_signal("dead", 25) # was 40 # was 50
queue_free()
if position.x < -100:
emit_signal("dead", 0)
queue_free() queue_free()
if hit_timer < 0.15: if hit_timer < 0.15:
@ -59,7 +62,7 @@ func _process(delta):
if velocity.length() > 0: if velocity.length() > 0:
velocity = velocity.normalized() * SPEED velocity = velocity.normalized() * SPEED
# var health_bar = Vector2(((health * 3) - 157), -273) var health_bar = Vector2(((health * 2.5) - 157), -225)
# $Line2D.set_point_position( 1, health_bar ) $Line2D.set_point_position( 1, health_bar )
position += velocity * delta position += velocity * delta

View File

@ -18,7 +18,9 @@ animations = [ {
"speed": 5.0 "speed": 5.0
} ] } ]
[node name="BadBlob" type="Area2D"] [node name="BadBlob" type="Area2D" groups=[
"enemies",
]]
scale = Vector2( 0.25, 0.25 ) scale = Vector2( 0.25, 0.25 )
z_index = -1 z_index = -1
@ -48,8 +50,8 @@ animation = "default"
[node name="Line2D" type="Line2D" parent="." index="2"] [node name="Line2D" type="Line2D" parent="." index="2"]
position = Vector2( 112, 65.3334 ) position = Vector2( 112, 65.3334 )
points = PoolVector2Array( -157, -273, 143, -273 ) points = PoolVector2Array( -157, -225, 143, -225 )
width = 12.0 width = 8.0
default_color = Color( 0, 1, 0.0390625, 1 ) default_color = Color( 0, 1, 0.0390625, 1 )
texture_mode = 31 texture_mode = 31
joint_mode = 2 joint_mode = 2

36
Brows.gd Normal file
View File

@ -0,0 +1,36 @@
extends Node2D
var speed_multiplier = 3
var move_down = true
var start
var right_start
var left_start
func _ready():
start = position.y
right_start = $Right.position.x
left_start = $Left.position.x
func _process(delta):
wobble(delta)
func wobble(delta):
if position.y - start > 2:
move_down = false
if position.y - start <= -2:
move_down = true
if abs(position.y - start) > 2:
speed_multiplier = 1
elif abs(position.y - start) > 1.5:
speed_multiplier = 1
elif abs(position.y - start) > 1:
speed_multiplier = 2
elif abs(position.y - start) <= 1:
speed_multiplier = 3
if move_down:
position.y += delta*speed_multiplier
else:
position.y -= delta*speed_multiplier

Binary file not shown.

Binary file not shown.

BIN
Image Sources/SunBG.xcf Normal file

Binary file not shown.

BIN
Image Sources/bad1_base.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -0,0 +1,29 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/bad1_base.png-56fd809a9711b2f0bdcea7bd3e329e73.stex"
[deps]
source_file="res://Image Sources/bad1_base.png"
dest_files=[ "res://.import/bad1_base.png-56fd809a9711b2f0bdcea7bd3e329e73.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

Binary file not shown.

96
InherentTurretMenu.gd Normal file
View File

@ -0,0 +1,96 @@
#
# 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 Node
signal menu_closed
signal change_color
signal buy_turret
signal turret_range_upgrade
signal turret_damage_upgrade
signal turret_speed_upgrade
var screensize
const DEFAULT_TURRET_COST = 0#1000
const TIER_COST = {2:1000, 3:4000, 4:10000, 5:0}
func _ready():
$ColorRect.color = Color(0,0,0,.8)
if get_parent().has_method("upgradeTurret"):
$BuyTurret.visible = false
$Back.visible = false
$BuyTurret.visible = false
$Accept.visible = true
if get_parent().has_method("upgradeTurret") != true:
pass
else:
$Upgrade/Button.text = str("Upgrade: $", TIER_COST[get_parent().tier+1])
if get_parent().tier >= 4:
$Upgrade/Button.visible = false
func _input(event):
pass
var velocity = Vector2()
func _process(delta):
if (Input.is_action_pressed("ui_quit")):
get_tree().quit()
#if Input.is_action_pressed("ui_accept"):
# _on_Button_pressed()
if get_parent().has_method("upgradeTurret") == true:
$Upgrade.visible = true
func _on_Button_pressed():
queue_free()
func backButton():
queue_free()
#var newTurret
#func buyTurret():
# if get_parent().money >= DEFAULT_TURRET_COST:
#var turret = preload("res://Turret.tscn").instance()
#turret.set_name(turret.get_name())
#newTurret = turret.get_name()
#pass
func acceptTurret():
if get_parent().has_method("upgradeTurret") == true:
queue_free()
else:
get_tree().paused = false
#get_parent().has_turret = true
$Accept.visible = false
$Back.visible = true
queue_free()
func upgradeTurret():
get_tree().paused = false
if get_parent().get_parent().get_node("Player").makePurchaseFor(TIER_COST[get_parent().tier+1]):
get_parent().upgradeTurret()
get_parent().relayUpgrade()
if get_parent().tier >= 4:
$Upgrade/Button.visible = false
else:
$Upgrade/Button.text = str("Upgrade: $", TIER_COST[get_parent().tier+1])

224
InherentTurretMenu.tscn Normal file
View File

@ -0,0 +1,224 @@
[gd_scene load_steps=8 format=2]
[ext_resource path="res://InherentTurretMenu.gd" type="Script" id=1]
[ext_resource path="res://art/multiplayer_menu/back.png" type="Texture" id=2]
[ext_resource path="res://art/upgrade_menu/buyturrets.png" type="Texture" id=3]
[ext_resource path="res://art/multiplayer_menu/checkmark.png" type="Texture" id=4]
[sub_resource type="SpriteFrames" id=1]
animations = [ {
"frames": [ ExtResource( 2 ) ],
"loop": true,
"name": "default",
"speed": 5.0
} ]
[sub_resource type="SpriteFrames" id=2]
animations = [ {
"frames": [ ExtResource( 3 ) ],
"loop": true,
"name": "default",
"speed": 5.0
} ]
[sub_resource type="SpriteFrames" id=3]
animations = [ {
"frames": [ ExtResource( 4 ) ],
"loop": true,
"name": "default",
"speed": 5.0
} ]
[node name="InherentTurretMenu" type="Node"]
pause_mode = 2
script = ExtResource( 1 )
_sections_unfolded = [ "Pause" ]
[node name="ColorRect" type="ColorRect" parent="." index="0"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_right = 1026.0
margin_bottom = 605.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="Back" type="Node2D" parent="." index="1"]
editor/display_folded = true
position = Vector2( 50, 240 )
scale = Vector2( 0.5, 0.5 )
z_index = 2
z_as_relative = false
_sections_unfolded = [ "Transform", "Z Index" ]
__meta__ = {
"_edit_group_": true
}
[node name="Icon" type="AnimatedSprite" parent="Back" index="0"]
position = Vector2( 190, 530 )
frames = SubResource( 1 )
animation = "default"
[node name="Button" type="Button" parent="Back" index="1"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_top = 450.0
margin_right = 300.0
margin_bottom = 600.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="BuyTurret" type="Node2D" parent="." index="2"]
editor/display_folded = true
visible = false
position = Vector2( 190, 140 )
scale = Vector2( 0.25, 0.25 )
z_index = 2
_sections_unfolded = [ "Transform", "Z Index" ]
__meta__ = {
"_edit_group_": true
}
[node name="Icon" type="AnimatedSprite" parent="BuyTurret" index="0"]
position = Vector2( 190, 530 )
frames = SubResource( 2 )
animation = "default"
[node name="Button" type="Button" parent="BuyTurret" index="1"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = -360.0
margin_top = 80.0
margin_right = 720.0
margin_bottom = 960.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="Accept" type="Node2D" parent="." index="3"]
editor/display_folded = true
visible = false
position = Vector2( 820, 240 )
scale = Vector2( 0.5, 0.5 )
_sections_unfolded = [ "Transform" ]
__meta__ = {
"_edit_group_": true
}
[node name="Icon" type="AnimatedSprite" parent="Accept" index="0"]
position = Vector2( 190, 530 )
frames = SubResource( 3 )
animation = "default"
[node name="Button" type="Button" parent="Accept" index="1"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 96.0
margin_top = 412.0
margin_right = 296.0
margin_bottom = 612.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="Upgrade" type="Node2D" parent="." index="4"]
visible = false
position = Vector2( 0, 181 )
[node name="Button" type="Button" parent="Upgrade" index="0"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 430.0
margin_top = 50.0
margin_right = 640.0
margin_bottom = 200.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
text = "Upgrade"
flat = false
align = 1
[node name="Icon" type="AnimatedSprite" parent="Upgrade" index="1"]
animation = "default"
[connection signal="pressed" from="Back/Button" to="." method="backButton"]
[connection signal="pressed" from="BuyTurret/Button" to="." method="buyTurret"]
[connection signal="pressed" from="Accept/Button" to="." method="acceptTurret"]
[connection signal="pressed" from="Upgrade/Button" to="." method="upgradeTurret"]

View File

@ -22,6 +22,7 @@ extends Area2D
signal hit signal hit
const DEFAULT_DAMAGE = 10 const DEFAULT_DAMAGE = 10
const DEFAULT_FALLOFF = 1.2
export (int) var SPEED export (int) var SPEED
export (int) var DAMAGE export (int) var DAMAGE
@ -30,6 +31,7 @@ var current_pen = 0
var friendly_laser = true var friendly_laser = true
var damage = DEFAULT_DAMAGE var damage = DEFAULT_DAMAGE
var boss = false var boss = false
var falloff = DEFAULT_FALLOFF
func _ready(): func _ready():
$AnimatedSprite.play() $AnimatedSprite.play()
@ -41,6 +43,8 @@ func hit(who):
pass pass
elif current_pen > 0: elif current_pen > 0:
current_pen -= 1 current_pen -= 1
modulate=Color("ca4747")
damage = damage/falloff
else: else:
hide() hide()
queue_free() queue_free()

View File

@ -21,6 +21,7 @@ animations = [ {
[node name="Laser" type="Area2D"] [node name="Laser" type="Area2D"]
z_as_relative = false
input_pickable = true input_pickable = true
gravity_vec = Vector2( 0, 1 ) gravity_vec = Vector2( 0, 1 )
gravity = 98.0 gravity = 98.0
@ -31,7 +32,7 @@ collision_mask = 7
audio_bus_override = false audio_bus_override = false
audio_bus_name = "Master" audio_bus_name = "Master"
script = ExtResource( 1 ) script = ExtResource( 1 )
_sections_unfolded = [ "Collision", "Z Index" ] _sections_unfolded = [ "Collision", "Visibility", "Z Index" ]
SPEED = 1200 SPEED = 1200
DAMAGE = 10 DAMAGE = 10

358
Main.gd
View File

@ -24,6 +24,7 @@ export (PackedScene) var BlobBad
export (PackedScene) var LaserBad export (PackedScene) var LaserBad
export (PackedScene) var Prison export (PackedScene) var Prison
export (PackedScene) var RectangleBoss export (PackedScene) var RectangleBoss
export (PackedScene) var RectangleReturn
export (PackedScene) var BlackHole export (PackedScene) var BlackHole
var players = {} var players = {}
@ -39,34 +40,100 @@ var player_info
var touchy_shooty = false var touchy_shooty = false
var my_info = { name = "sagethesagesage", color = "FFFFFF" } var my_info = { name = "sagethesagesage", color = "FFFFFF" }
var mainmenu var mainmenu
var current_round = 1
var spawning_done = false
var not_loading = false 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
randomize()
if OS.has_touchscreen_ui_hint(): if OS.has_touchscreen_ui_hint():
$HowTo.visible = true $HowTos/HowTo.visible = true
else: else:
$HowToDesktop.visible = true $HowTos/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)
mainmenu.connect("multiplayer_menu", self, "_open_multiplayer_menu") mainmenu.connect("multiplayer_menu", self, "_open_multiplayer_menu")
mainmenu.connect("start_game", self, "rounds")
get_tree().paused = true get_tree().paused = true
# Prepare timer for spawning enemies
$BaddieTimer.wait_time = BADDIE_WAIT_TIME_DEFAULT
$BaddieTimer.start()
# Seed randi for randomizing enemy spawn locations # Seed randi for randomizing enemy spawn locations
randomize() randomize()
updatePoints()
const DEFAULT_SPAWN_SPEED = 5
func rounds(round_number):
$BG.visible = true
##### WEAKER, LESS VALUABLE ENEMIES, AT HIGHER VOLUME, MAY BE MORE ENGAGING
# health, time, bad1s, badblobs, badlasers, badprisons
match round_number:
1:
# roundOfEnemies(.6,DEFAULT_SPAWN_SPEED*.75,5,0,0,0) # default
roundOfEnemies(0.1,DEFAULT_SPAWN_SPEED,1,0,0,0)
rpc("set_wave_name", "Wave 1: Learning to fly")
2:
#roundOfEnemies(.6,DEFAULT_SPAWN_SPEED*.75,4,1,0,0)
if get_tree().is_network_server() == true:
rpc("bossMode", 2)
else:
bossMode(2)
rpc("set_wave_name", "Wave 2: Any colour you like")
3:
roundOfEnemies(.6,DEFAULT_SPAWN_SPEED*.75,8,2,0,0)
rpc("set_wave_name", "Wave 3: Money")
4:
roundOfEnemies(.6,DEFAULT_SPAWN_SPEED*.75,12,3,1,0)
rpc("set_wave_name", "Wave 4: YOU CAN BLOCK ENEMY LASERS WITH YOUR SHIP")
5:
roundOfEnemies(.6,DEFAULT_SPAWN_SPEED*.5,15,3,0,0)
rpc("set_wave_name", "Wave 5: One of These Days")
6:
roundOfEnemies(.7,DEFAULT_SPAWN_SPEED*.5,18,6,1,0)
rpc("set_wave_name", "Wave 6: Seamus")
7:
roundOfEnemies(.8,DEFAULT_SPAWN_SPEED*.5,21,7,1,0)
rpc("set_wave_name", "Wave 7: ")
8:
roundOfEnemies(.8,DEFAULT_SPAWN_SPEED*.75/(8/4),20,6,0,floor(8/8))
rpc("set_wave_name", "Wave 8: Free Four")
9:
roundOfEnemies(.9, DEFAULT_SPAWN_SPEED*(0.5), 9*3, 9, floor(9/4), floor(9/8))
rpc("set_wave_name", str("Wave 9"))
10:
rpc("set_wave_name", "Wave 10: What do you want from me?")
if get_tree().is_network_server() == true:
rpc("bossMode", 0)
else:
bossMode(0)
11:
roundOfEnemies(1,DEFAULT_SPAWN_SPEED*.75/(11/4),11*3,11,floor(11/4),floor(11/8))
$WaveLabel.text = str("Wave ", 11)
$BG/Sun.visible = true
15:
rpc("set_wave_name", "Wave 15: Eclipse")
if get_tree().is_network_server() == true:
rpc("bossMode", 1)
else:
bossMode(1)
20:
roundOfEnemies((1+(20-11)/10), (DEFAULT_SPAWN_SPEED*(0.5)), 20*3, 20, floor(20/4), floor(20/8))
var roundNo:
############### health ##### spawn speed #################### bad1s#### blobs # lasers ######### prisons ######
roundOfEnemies((1+(roundNo-11)/10), (DEFAULT_SPAWN_SPEED*(0.5)), roundNo*3, roundNo, floor(roundNo/4), floor(roundNo/8))
rpc("set_wave_name", str("Wave ", roundNo))
### Wave names ###
### on rectangle's return: The Hero's Return
### on Black boss appearance: Eclipse
sync func set_wave_name(name):
$WaveLabel.text = str(name)
# Open the multiplayer section of the menu and pause the game # Open the multiplayer section of the menu and pause the game
func _open_multiplayer_menu(): func _open_multiplayer_menu():
@ -95,15 +162,13 @@ func _process(delta):
if Input.is_action_pressed("ui_accept"): if Input.is_action_pressed("ui_accept"):
_on_HideHowTo_pressed() _on_HideHowTo_pressed()
# Constantly update point display
updatePoints()
# If you're in multiplayer, # If you're in multiplayer,
if get_tree().has_network_peer(): if get_tree().has_network_peer():
# and not the host # and not the host
if !get_tree().is_network_server(): if !get_tree().is_network_server():
# Stop spawning bads # Stop spawning bads
$BaddieTimer.stop() #$BaddieTimer.stop()
pass
if (touchy_feely && (abs(touchy_feely.position.x - $Player.position.x) > 1)): if (touchy_feely && (abs(touchy_feely.position.x - $Player.position.x) > 1)):
if (touchy_feely.position.x < 800): if (touchy_feely.position.x < 800):
@ -119,11 +184,12 @@ func _process(delta):
if rectangle_opacity <= 0: if rectangle_opacity <= 0:
booting = false booting = false
$ColorRect.visible = false $ColorRect.visible = false
$Music.playing = true
# Flash the screen white # Flash the screen white
if screen_flashing == true: if screen_flashing == true:
$ColorRect.color = Color(1, 1, 1, rectangle_opacity) $ColorRect.color = Color(1, 1, 1, rectangle_opacity)
rectangle_opacity -= delta/4 rectangle_opacity -= delta/3
if rectangle_opacity <= 0: if rectangle_opacity <= 0:
screen_flashing = false screen_flashing = false
$ColorRect.visible = false $ColorRect.visible = false
@ -132,66 +198,94 @@ func _process(delta):
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
updatePoints()
print(current_round)
if get_tree().is_network_server() || not get_tree().has_network_peer():
if get_tree().get_nodes_in_group("enemies").size() == 1 && spawning_done == true:
rpc("openPlayerMenu")
current_round +=1
sync func openPlayerMenu():
$Player.upgradeMenu()
func startNextRound():
if get_tree().is_network_server() || not get_tree().has_network_peer():
rounds(current_round)
func roundOfEnemies(bad_health_multi, spawn_time, bad1s, badblobs, badlasers, badprisons):
spawning_done = false
# each enemy type comes in as an integer
# randomly dole out enemies until each is at 0
yield(get_tree().create_timer(1), "timeout")
var enemiesToBeSpawned = bad1s+badblobs+badlasers+badprisons
if enemiesToBeSpawned == 0:
return false
var bad_type
var badposition = Vector2()
while enemiesToBeSpawned > 0:
var nextEnemy = randi()%5
if (nextEnemy == 0 || nextEnemy == 4) && bad1s > 0 && get_tree().paused == false:
bad_type = 0
bad1s -= 1
yield(get_tree().create_timer(spawn_time), "timeout")
elif (nextEnemy == 1) && badblobs > 0 && get_tree().paused == false:
bad_type = 1
badblobs -= 1
yield(get_tree().create_timer(spawn_time), "timeout")
elif (nextEnemy == 2) && badlasers > 0 && get_tree().paused == false:
bad_type = 2
badlasers -= 1
yield(get_tree().create_timer(spawn_time), "timeout")
elif (nextEnemy == 3) && badprisons > 0 && get_tree().paused == false:
bad_type = 3
badprisons -= 1
yield(get_tree().create_timer(spawn_time), "timeout")
else: bad_type = 50000
enemiesToBeSpawned = bad1s+badblobs+badlasers+badprisons
if get_tree().paused == true:
yield(get_tree().create_timer(1), "timeout")
if bad_type < 50000:
badposition.x = 1100
badposition.y = (randi()%410) + 50
rpc("spawnBad", bad_type, badposition, bad_health_multi)
spawning_done = true
#$Player.upgradeMenu()
func upgradeTurret(position):
print("upgradeTurret()")
rpc("remoteUpgradeTurret", position)
####################
# UPGRADE A TURRET #
remote func remoteUpgradeTurret(position):
for child in get_children():
if "turret" in child.get_name():
print("turret")
if child.position == position:
child.upgradeTurret()
#child.damage = damage
#child.get_node("Range").scale = t_range
#child.get_node("ReloadTimer").wait_time = reload_time
print(child.damage, child.get_node("Range").scale, child.get_node("ReloadTimer").wait_time)
break
# UPGRADE A TURRET #
####################
######################### #########################
# ENEMY SPAWNING SCRIPT # # ENEMY SPAWNING SCRIPT #
######################### #########################
var a_round_of_bads = 50
var sendblob = 1
var bad_health_multi = 1.5 var bad_health_multi = 1.5
var total_bads_spawned = 0
func BaddieTimer():
#if total_bads_spawned%6 == 0: # 75 default
# if get_tree().is_network_server():
# total_bads_spawned += 1
# rpc("bossMode")
# else:
# total_bads_spawned += 1
# bossMode()
#
if bads_this_round <= a_round_of_bads && bad_spawning_enabled:
var bad_type
var badposition = Vector2()
if sendblob%6 == 0: sync func spawnBad(bad_type, badposition, health_multi):
if get_tree().is_network_server():
total_bads_spawned += 1
sendblob += 1
rpc("bossMode")
else:
total_bads_spawned += 1
sendblob += 1
bossMode()
else:
if sendblob%50 == 0:
bad_type = 3
sendblob += 1
elif sendblob%20 == 0:
bad_type = 2
sendblob += 1
elif sendblob%5 == 0:
bad_type = 1
sendblob += 1
else:
bad_type = 0
sendblob += 1
bads_this_round += 1
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
badposition.x = 1200
badposition.y = (randi()%410) + 50
if get_tree().is_network_server():
rpc("spawnBad", bad_type, badposition, bad_health_multi)
else:
spawnBad(bad_type, badposition, bad_health_multi)
else:
bads_this_round = 0
sync func spawnBad(bad_type, position, health_multi):
var bad var bad
if bad_type == 0: if bad_type == 0:
bad = FirstBad.instance() bad = FirstBad.instance()
@ -205,43 +299,52 @@ sync func spawnBad(bad_type, position, health_multi):
# Increase BG speed with each enemy spawned # Increase BG speed with each enemy spawned
$BG.fly_speed *= 1.01 $BG.fly_speed *= 1.01
# Add one to total of enemies spawned
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: if bad_type == 3:
bad.connect("health_up", self, "_on_health_up") bad.connect("health_up", self, "_on_health_up")
bad.health_multi = health_multi bad.health_multi = health_multi
bad.position = position bad.position = badposition
func _on_health_up(hp_increase): func _on_health_up(hp_increase):
$Mothership.health += hp_increase $Mothership.health += hp_increase
$Mothership._update_health_bar() $Mothership._update_health_bar()
func _on_PauseButton_pressed(): func _on_PauseButton_pressed():
$Player.upgradeMenu() $Player.pauseMenu()
$ColorRect.visible = false
func updatePoints(): func updatePoints():
$MoneyDisplay.text = str($Player.money, " points") $MoneyDisplay.text = str("$", $Player.money)
#$MoneyDisplay.text = str($Player.money, " points")
func _on_Player_update_display():
updatePoints()
func _on_Mothership_game_over(): func _on_Mothership_game_over():
$ShootButton.visible = false for child in self.get_children():
print(child, child.name)
if ("Bad" in child.name):
child.queue_free()
elif (child.has_method("bossHealth")):
child.queue_free()
$Player.gameOver() $Player.gameOver()
func _on_Player_restart_game(): func _on_Player_restart_game():
print("_on_Player_restart_game()")
"""
for child in self.get_children(): for child in self.get_children():
if (child.has_method("_on_Visibility_screen_exited")): print(child, child.name)
if ("Bad" in child.name):
child.queue_free() child.queue_free()
if (child.has_method("bossHealth")): elif (child.has_method("bossHealth")):
child.queue_free() child.queue_free()"""
bads_this_round = 0 current_round = 1
total_bads_spawned = 0 spawning_done = true
$BaddieTimer.wait_time = BADDIE_WAIT_TIME_DEFAULT updatePoints()
$ShootButton.visible = true if get_tree().is_network_server() || not get_tree().has_network_peer():
rpc("hideGameOver")
rpc("openPlayerMenu")
remote func hideGameOver():
$Player.restart_game()
var touchy_feely var touchy_feely
@ -249,10 +352,9 @@ var touchscreen_on = false
func _input(event): func _input(event):
if (event is InputEventScreenTouch || event is InputEventScreenDrag): if (event is InputEventScreenTouch || event is InputEventScreenDrag):
touchscreen_on = true touchscreen_on = true
if event.position.x < 800: #&& (abs (event.position.y - $Player.position.y) < 100) : if event.position.x < 800:
$Player.position.x = event.position.x + 100*(event.position.x/800) $Player.position.x = event.position.x + 100*(event.position.x/800)
$Player.position.y = event.position.y - 100 $Player.position.y = event.position.y - 100
prints(event.index)
else: else:
touchy_shooty = true touchy_shooty = true
@ -260,6 +362,12 @@ func other_shooting_upgrade(id, other_bullet_delay):
prints("Other player shooting speed upgrade") prints("Other player shooting speed upgrade")
get_node(str(id)).timer.set_wait_time(other_bullet_delay) get_node(str(id)).timer.set_wait_time(other_bullet_delay)
func other_damage_upgrade(id, other_laser_damage):
get_node(str(id)).laser_damage = other_laser_damage
func other_laser_penetration_upgrade(id, other_laser_penetration):
get_node(str(id)).laser_penetration = other_laser_penetration
func other_ship_color_change(id, other_color): func other_ship_color_change(id, other_color):
prints("Other player color change") prints("Other player color change")
get_node(str(id)).modulate(other_color) get_node(str(id)).modulate(other_color)
@ -271,34 +379,33 @@ func double_laser_upgrade(id):
# Show other player's movement # Show other player's movement
func _on_Player_multiplayer_movement(id, pos, other_is_shooting): func _on_Player_multiplayer_movement(id, pos, other_is_shooting):
get_node(str(id)).position = pos get_node(str(id)).position = pos
get_node(str(id)).is_shooting = other_is_shooting
if other_is_shooting:
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 var bosstimer = null
sync func bossMode(): sync func bossMode(boss_type):
prints("bossMode()") prints("bossMode()")
bad_spawning_enabled = false
bosstimer = Timer.new() bosstimer = Timer.new()
bosstimer.connect("timeout",self,"_launch_boss") """bosstimer.connect("timeout",self,"_launch_boss", boss_type)
add_child(bosstimer) #to process add_child(bosstimer) #to process
bosstimer.wait_time = 15 bosstimer.wait_time = 3
bosstimer.one_shot = true bosstimer.one_shot = true
bosstimer.start() #to start bosstimer.start() #to start"""
yield(get_tree().create_timer(3), "timeout")
# Spawn the first boss
func _launch_boss(): prints("_launch_boss(",boss_type,")")
prints("_launch_boss()")
var bad var bad
var which_boss = randi()%2 if boss_type == 0:
if which_boss == 0:
bad = RectangleBoss.instance() bad = RectangleBoss.instance()
elif which_boss == 1: elif boss_type == 1:
bad = BlackHole.instance() bad = BlackHole.instance()
elif boss_type == 2:
bad = RectangleReturn.instance()
$Music.volume_db = -40
add_child(bad) add_child(bad)
# Flash screen when signalled # Flash screen when signalled
@ -310,7 +417,28 @@ func _launch_boss():
# Get boss health # Get boss health
bad.connect("boss_health", self, "getBossHealth") bad.connect("boss_health", self, "getBossHealth")
"""
# Spawn the first boss
func _launch_boss(boss_type):
prints("_launch_boss(",boss_type,")")
var bad
if boss_type == 0:
bad = RectangleBoss.instance()
elif boss_type == 1:
bad = BlackHole.instance()
$Music.volume_db = -20
add_child(bad)
# Flash screen when signalled
bad.connect("flash", self, "_flash_screen")
bad.show_behind_parent = true
# 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): func getBossHealth(currentHealth, totalHealth):
totalHealth = float(totalHealth) totalHealth = float(totalHealth)
var health_bar = Vector2(((currentHealth/totalHealth)*800)+100, 50) var health_bar = Vector2(((currentHealth/totalHealth)*800)+100, 50)
@ -324,8 +452,12 @@ func getBossHealth(currentHealth, totalHealth):
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
updatePoints()
bad_spawning_enabled = true bad_spawning_enabled = true
bosstimer.stop() bosstimer.stop()
rpc("openPlayerMenu")
current_round +=1
$Music.volume_db = 0
# Begins screen-flashing process # Begins screen-flashing process
func _flash_screen(): func _flash_screen():
@ -337,7 +469,6 @@ func _flash_screen():
func _load_players(id, info): func _load_players(id, info):
player_info = info player_info = info
prints("_load_players", player_info) prints("_load_players", player_info)
#prints(player_info[id].name, "YEET", player_info[id].color)
func _start_multiplayer_game(): func _start_multiplayer_game():
print(player_info) print(player_info)
@ -348,15 +479,26 @@ func _start_multiplayer_game():
player.set_name(str(peer_id)) player.set_name(str(peer_id))
prints(str(peer_id), "yeetert") prints(str(peer_id), "yeetert")
add_child(player) add_child(player)
#get_node("/").add_child(player)
player.setUsername(player_info[peer_id].name) player.setUsername(player_info[peer_id].name)
#$MultiplayerTimer.start() if get_tree().is_network_server():
rounds(1)
func _on_HideHowTo_pressed(): func _on_HideHowTo_pressed():
$HowTo.visible = false $HowTos.visible = false
$HowToDesktop.visible = false
$HideHowTo.visible = false
func _on_Player_other_ship_enable_rainbow(id): func _on_Player_other_ship_enable_rainbow(id):
prints("Other player entered rainbow mode") prints("Other player entered rainbow mode")
get_node(str(id)).enable_the_rainbow() get_node(str(id)).enable_the_rainbow()
func _on_Player_buy_turret(id, turret_position):
print("Main:buyTurret", turret_position)
var turret = preload("res://Turret.tscn").instance()
turret.connect("upgrade_turret", self, "upgradeTurret")
turret.set_name(str(id,"turret"))
add_child(turret)
turret.position = turret_position
turret.scale.x = 0.25
turret.scale.y = 0.25
func _exit_tree():
print("EXITING AND STUFF")

277
Main.tscn
View File

@ -1,4 +1,4 @@
[gd_scene load_steps=20 format=2] [gd_scene load_steps=22 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]
@ -6,35 +6,28 @@
[ext_resource path="res://BadLaser.tscn" type="PackedScene" id=4] [ext_resource path="res://BadLaser.tscn" type="PackedScene" id=4]
[ext_resource path="res://Prison.tscn" type="PackedScene" id=5] [ext_resource path="res://Prison.tscn" type="PackedScene" id=5]
[ext_resource path="res://RectangleBoss.tscn" type="PackedScene" id=6] [ext_resource path="res://RectangleBoss.tscn" type="PackedScene" id=6]
[ext_resource path="res://BlackHole.tscn" type="PackedScene" id=7] [ext_resource path="res://RectangleReturn.tscn" type="PackedScene" id=7]
[ext_resource path="res://BG.gd" type="Script" id=8] [ext_resource path="res://BlackHole.tscn" type="PackedScene" id=8]
[ext_resource path="res://art/bg.png" type="Texture" id=9] [ext_resource path="res://BG.tscn" type="PackedScene" id=9]
[ext_resource path="res://Player.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://Mothership.tscn" type="PackedScene" id=11]
[ext_resource path="res://OtherPlayer.tscn" type="PackedScene" id=12] [ext_resource path="res://art/hand-numbs.ttf" type="DynamicFontData" id=12]
[ext_resource path="res://art/interface/how_to.png" type="Texture" id=13] [ext_resource path="res://OtherPlayer.tscn" type="PackedScene" 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=14]
[ext_resource path="res://art/interface/pause.png" type="Texture" id=15] [ext_resource path="res://art/interface/how_to.png" type="Texture" id=15]
[ext_resource path="res://art/interface/how_to_desktop.png" type="Texture" id=16]
[ext_resource path="res://main_bg.ogg" type="AudioStream" id=17]
[sub_resource type="ImageTexture" id=1] [sub_resource type="DynamicFont" id=1]
flags = 7 size = 28
storage = 0 use_mipmaps = false
lossy_quality = 0.7 use_filter = false
flags = 7 font_data = ExtResource( 12 )
size = Vector2( 0, 0 ) _sections_unfolded = [ "Font", "Settings" ]
[sub_resource type="SpriteFrames" id=2] [sub_resource type="SpriteFrames" id=2]
animations = [ {
"frames": [ ExtResource( 13 ) ],
"loop": true,
"name": "default",
"speed": 5.0
} ]
[sub_resource type="SpriteFrames" id=3]
animations = [ { animations = [ {
"frames": [ ExtResource( 14 ) ], "frames": [ ExtResource( 14 ) ],
"loop": true, "loop": true,
@ -42,7 +35,7 @@ animations = [ {
"speed": 5.0 "speed": 5.0
} ] } ]
[sub_resource type="SpriteFrames" id=4] [sub_resource type="SpriteFrames" id=3]
animations = [ { animations = [ {
"frames": [ ExtResource( 15 ) ], "frames": [ ExtResource( 15 ) ],
@ -51,7 +44,16 @@ animations = [ {
"speed": 5.0 "speed": 5.0
} ] } ]
[node name="Main" type="Node" index="0"] [sub_resource type="SpriteFrames" id=4]
animations = [ {
"frames": [ ExtResource( 16 ) ],
"loop": true,
"name": "default",
"speed": 5.0
} ]
[node name="Main" type="Node"]
script = ExtResource( 1 ) script = ExtResource( 1 )
_sections_unfolded = [ "Pause" ] _sections_unfolded = [ "Pause" ]
@ -60,77 +62,48 @@ BlobBad = ExtResource( 3 )
LaserBad = ExtResource( 4 ) LaserBad = ExtResource( 4 )
Prison = ExtResource( 5 ) Prison = ExtResource( 5 )
RectangleBoss = ExtResource( 6 ) RectangleBoss = ExtResource( 6 )
BlackHole = ExtResource( 7 ) RectangleReturn = ExtResource( 7 )
BlackHole = ExtResource( 8 )
[node name="BG" type="Node2D" parent="." index="0"] [node name="BG" parent="." index="0" instance=ExtResource( 9 )]
z_index = -1 [node name="Player" parent="." index="1" instance=ExtResource( 10 )]
script = ExtResource( 8 )
_sections_unfolded = [ "Z Index" ]
[node name="bg1" type="Sprite" parent="BG" index="0"] [node name="Mothership" parent="." index="2" instance=ExtResource( 11 )]
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="Player" parent="." index="2" instance=ExtResource( 10 )]
[node name="BaddieTimer" type="Timer" parent="." index="3"]
process_mode = 1
wait_time = 2.0
one_shot = false
autostart = false
[node name="Mothership" parent="." index="4" instance=ExtResource( 11 )]
position = Vector2( 18.327, 304.835 ) position = Vector2( 18.327, 304.835 )
[node name="MoneyDisplay" type="Label" parent="." index="5"] [node name="MoneyDisplay" type="Label" parent="." index="3"]
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_left = 913.0 margin_left = 913.0
margin_top = 536.0 margin_top = 557.0
margin_right = 1006.0 margin_right = 1006.0
margin_bottom = 571.0 margin_bottom = 592.0
rect_pivot_offset = Vector2( 0, 0 ) rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false rect_clip_content = false
mouse_filter = 2 mouse_filter = 2
mouse_default_cursor_shape = 0 mouse_default_cursor_shape = 0
size_flags_horizontal = 1 size_flags_horizontal = 1
size_flags_vertical = 4 size_flags_vertical = 4
custom_fonts/font = SubResource( 1 )
custom_colors/font_color = Color( 1, 1, 1, 1 )
text = "$0" text = "$0"
align = 2 align = 2
percent_visible = 1.0 percent_visible = 1.0
lines_skipped = 0 lines_skipped = 0
max_lines_visible = -1 max_lines_visible = -1
_sections_unfolded = [ "Size Flags", "custom_fonts" ] _sections_unfolded = [ "Size Flags", "custom_colors", "custom_fonts" ]
[node name="OtherPlayer" parent="." index="6" instance=ExtResource( 12 )] [node name="OtherPlayer" parent="." index="4" instance=ExtResource( 13 )]
visible = false visible = false
_sections_unfolded = [ "Material", "Transform", "Visibility" ] _sections_unfolded = [ "Material", "Transform", "Visibility" ]
[node name="BossHealth" type="Line2D" parent="." index="7"] [node name="BossHealth" type="Line2D" parent="." index="5"]
points = PoolVector2Array( 100, 50, 900, 50 ) points = PoolVector2Array( 100, 50, 900, 50 )
width = 15.0 width = 15.0
@ -139,7 +112,7 @@ texture_mode = 31
sharp_limit = 2.0 sharp_limit = 2.0
round_precision = 8 round_precision = 8
[node name="ColorRect" type="ColorRect" parent="." index="8"] [node name="ColorRect" type="ColorRect" parent="." index="6"]
visible = false visible = false
anchor_left = 0.0 anchor_left = 0.0
@ -157,91 +130,73 @@ size_flags_vertical = 1
color = Color( 0, 0, 0, 1 ) color = Color( 0, 0, 0, 1 )
_sections_unfolded = [ "Visibility" ] _sections_unfolded = [ "Visibility" ]
[node name="HowTo" type="AnimatedSprite" parent="." index="9"] [node name="Pausing" type="Node2D" parent="." index="7"]
editor/display_folded = true
position = Vector2( 940, 36 )
[node name="Pause" type="AnimatedSprite" parent="Pausing" index="0"]
position = Vector2( 32.128, 31.044 )
scale = Vector2( 0.199771, 0.199771 )
frames = SubResource( 2 )
animation = "default"
[node name="PauseButton" type="Button" parent="Pausing" index="1"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_right = 61.0
margin_bottom = 64.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="HowTos" type="Node2D" parent="." index="8"]
editor/display_folded = true
_sections_unfolded = [ "Visibility", "Z Index" ]
[node name="HowTo" type="AnimatedSprite" parent="HowTos" index="0"]
visible = false visible = false
position = Vector2( 482.397, 299.674 ) position = Vector2( 482.397, 299.674 )
scale = Vector2( 0.42077, 0.42077 ) 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 ) frames = SubResource( 3 )
animation = "default" animation = "default"
_sections_unfolded = [ "Transform", "Visibility" ] _sections_unfolded = [ "Transform", "Visibility" ]
[node name="ShootButton" type="Button" parent="." index="11"] [node name="HowToDesktop" type="AnimatedSprite" parent="HowTos" index="1"]
anchor_left = 0.0 visible = false
anchor_top = 0.0 position = Vector2( 482, 300 )
anchor_right = 0.0 scale = Vector2( 0.42, 0.42 )
anchor_bottom = 0.0
margin_left = 785.0
margin_top = 269.0
margin_right = 1022.0
margin_bottom = 599.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
disabled = true
toggle_mode = false
enabled_focus_mode = 2
shortcut = null
group = null
flat = true
align = 1
_sections_unfolded = [ "Theme" ]
[node name="PauseButton" type="Button" parent="." index="12"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 940.0
margin_top = 36.0
margin_right = 1001.0
margin_bottom = 100.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="Pause" type="AnimatedSprite" parent="." index="13"]
position = Vector2( 972.128, 67.044 )
scale = Vector2( 0.199771, 0.199771 )
frames = SubResource( 4 ) frames = SubResource( 4 )
animation = "default" animation = "default"
_sections_unfolded = [ "Transform", "Visibility" ]
[node name="HideHowTo" type="Button" parent="." index="14"] [node name="HideHowTo" type="Button" parent="HowTos" index="2"]
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_left = -50.0 margin_left = -55.0
margin_top = -15.0 margin_top = -29.0
margin_right = 1044.0 margin_right = 1039.0
margin_bottom = 623.0 margin_bottom = 609.0
rect_pivot_offset = Vector2( 0, 0 ) rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false rect_clip_content = false
focus_mode = 2 focus_mode = 2
@ -258,12 +213,48 @@ flat = true
align = 1 align = 1
_sections_unfolded = [ "Visibility" ] _sections_unfolded = [ "Visibility" ]
[node name="WaveLabel" type="Label" parent="." index="9"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 61.0
margin_top = 19.0
margin_right = 108.0
margin_bottom = 33.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 2
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 4
text = "Wave 1"
percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1
[node name="Music" type="AudioStreamPlayer" parent="." index="10"]
stream = ExtResource( 17 )
volume_db = 0.0
pitch_scale = 1.0
autoplay = false
mix_target = 0
bus = "Master"
[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"]
[connection signal="buy_turret" from="Player" to="." method="_on_Player_buy_turret"]
[connection signal="double_laser_upgrade" from="Player" to="." method="double_laser_upgrade"] [connection signal="double_laser_upgrade" from="Player" to="." method="double_laser_upgrade"]
[connection signal="multiplayer_movement" from="Player" to="." method="_on_Player_multiplayer_movement"] [connection signal="multiplayer_movement" from="Player" to="." method="_on_Player_multiplayer_movement"]
[connection signal="other_damage_upgrade" from="Player" to="." method="other_damage_upgrade"]
[connection signal="other_laser_penetration_upgrade" from="Player" to="." method="other_laser_penetration_upgrade"]
[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_ship_enable_rainbow" from="Player" to="." method="_on_Player_other_ship_enable_rainbow"]
@ -274,20 +265,18 @@ _sections_unfolded = [ "Visibility" ]
[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="update_display" from="Player" to="." method="_on_Player_update_display"] [connection signal="start_next_round" from="Player" to="." method="startNextRound"]
[connection signal="timeout" from="BaddieTimer" to="." method="BaddieTimer"] [connection signal="update_display" from="Player" to="." method="updatePoints"]
[connection signal="upgrade_turret_range" from="Player" to="." method="upgradeTurretRange"]
[connection signal="body_shape_entered" from="Mothership" to="Mothership" method="_on_Mothership_body_shape_entered"] [connection signal="body_shape_entered" from="Mothership" to="Mothership" method="_on_Mothership_body_shape_entered"]
[connection signal="game_over" from="Mothership" to="." method="_on_Mothership_game_over"] [connection signal="game_over" from="Mothership" to="." method="_on_Mothership_game_over"]
[connection signal="button_down" from="ShootButton" to="Player" method="shootDown"] [connection signal="pressed" from="Pausing/PauseButton" to="." method="_on_PauseButton_pressed"]
[connection signal="button_up" from="ShootButton" to="Player" method="shootUp"] [connection signal="pressed" from="HowTos/HideHowTo" to="." method="_on_HideHowTo_pressed"]
[connection signal="pressed" from="PauseButton" to="." method="_on_PauseButton_pressed"]
[connection signal="pressed" from="HideHowTo" to="." method="_on_HideHowTo_pressed"]

View File

@ -20,6 +20,7 @@
extends Node extends Node
signal multiplayer_menu signal multiplayer_menu
signal start_game
var clockwise = false var clockwise = false
var rotation_multiplier = 1 var rotation_multiplier = 1
@ -73,7 +74,12 @@ func _process(delta):
func _on_Button_pressed(): func _on_Button_pressed():
#$Button.visible = false #$Button.visible = false
emit_signal("start_game", 1)
now_quitting = true now_quitting = true
func _on_Multiplayer_pressed(): func _on_Multiplayer_pressed():
emit_signal("multiplayer_menu") emit_signal("multiplayer_menu")
func _on_Settings_pressed():
var settings = preload("res://Menus/Settings.tscn").instance()
add_child(settings)

View File

@ -33,7 +33,7 @@ animations = [ {
"speed": 5.0 "speed": 5.0
} ] } ]
[node name="Node" type="Node"] [node name="Node" type="Node" index="0"]
pause_mode = 2 pause_mode = 2
script = ExtResource( 1 ) script = ExtResource( 1 )
@ -50,6 +50,7 @@ animation = "default"
stream = ExtResource( 3 ) stream = ExtResource( 3 )
volume_db = 0.0 volume_db = 0.0
pitch_scale = 1.0
autoplay = false autoplay = false
mix_target = 0 mix_target = 0
bus = "Master" bus = "Master"
@ -87,7 +88,7 @@ shortcut = null
group = null group = null
flat = true flat = true
align = 1 align = 1
_sections_unfolded = [ "Material", "Visibility" ] _sections_unfolded = [ "Material", "Visibility", "custom_styles" ]
[node name="Menubutton" type="AnimatedSprite" parent="." index="4"] [node name="Menubutton" type="AnimatedSprite" parent="." index="4"]
@ -139,10 +140,36 @@ size_flags_vertical = 1
color = Color( 0, 0, 0, 0 ) color = Color( 0, 0, 0, 0 )
_sections_unfolded = [ "Visibility" ] _sections_unfolded = [ "Visibility" ]
[node name="Settings" type="Node2D" parent="." index="7"] [node name="Settings?" type="Node2D" parent="." index="7"]
[node name="Settings" type="Button" parent="." index="8"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 650.0
margin_top = 400.0
margin_right = 850.0
margin_bottom = 570.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
[connection signal="pressed" from="StartEndlessMode" to="." method="_on_Button_pressed"] [connection signal="pressed" from="StartEndlessMode" to="." method="_on_Button_pressed"]
[connection signal="pressed" from="Multiplayer" to="." method="_on_Multiplayer_pressed"] [connection signal="pressed" from="Multiplayer" to="." method="_on_Multiplayer_pressed"]
[connection signal="pressed" from="Settings" to="." method="_on_Settings_pressed"]

9
Menu.gd Normal file
View File

@ -0,0 +1,9 @@
extends Node
func _ready():
# Called every time the node is added to the scene.
# Initialization here
pass
func _on_BackButton_pressed():
queue_free()

View File

@ -0,0 +1,96 @@
#
# 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 Node
signal menu_closed
signal change_color
signal buy_turret
signal turret_range_upgrade
signal turret_damage_upgrade
signal turret_speed_upgrade
var screensize
const DEFAULT_TURRET_COST = 0#1000
const TIER_COST = {2:1000, 3:4000, 4:10000, 5:0}
func _ready():
$ColorRect.color = Color(0,0,0,.8)
if get_parent().has_method("upgradeTurret"):
$BuyTurret.visible = false
$Back.visible = false
$BuyTurret.visible = false
$Accept.visible = true
if get_parent().has_method("upgradeTurret") != true:
pass
else:
$Upgrade/Button.text = str("Upgrade: $", TIER_COST[get_parent().tier+1])
if get_parent().tier >= 4:
$Upgrade/Button.visible = false
func _input(event):
pass
var velocity = Vector2()
func _process(delta):
if (Input.is_action_pressed("ui_quit")):
get_tree().quit()
#if Input.is_action_pressed("ui_accept"):
# _on_Button_pressed()
if get_parent().has_method("upgradeTurret") == true:
$Upgrade.visible = true
func _on_Button_pressed():
queue_free()
func backButton():
queue_free()
#var newTurret
#func buyTurret():
# if get_parent().money >= DEFAULT_TURRET_COST:
#var turret = preload("res://Turret.tscn").instance()
#turret.set_name(turret.get_name())
#newTurret = turret.get_name()
#pass
func acceptTurret():
if get_parent().has_method("upgradeTurret") == true:
queue_free()
else:
get_tree().paused = false
#get_parent().has_turret = true
$Accept.visible = false
$Back.visible = true
queue_free()
func upgradeTurret():
get_tree().paused = false
if get_parent().get_parent().get_node("Player").makePurchaseFor(TIER_COST[get_parent().tier+1]):
get_parent().upgradeTurret()
get_parent().relayUpgrade()
if get_parent().tier >= 4:
$Upgrade/Button.visible = false
else:
$Upgrade/Button.text = str("Upgrade: $", TIER_COST[get_parent().tier+1])

View File

@ -0,0 +1,224 @@
[gd_scene load_steps=8 format=2]
[ext_resource path="res://Menus/InherentTurretMenu.gd" type="Script" id=1]
[ext_resource path="res://art/multiplayer_menu/back.png" type="Texture" id=2]
[ext_resource path="res://art/upgrade_menu/buyturrets.png" type="Texture" id=3]
[ext_resource path="res://art/multiplayer_menu/checkmark.png" type="Texture" id=4]
[sub_resource type="SpriteFrames" id=1]
animations = [ {
"frames": [ ExtResource( 2 ) ],
"loop": true,
"name": "default",
"speed": 5.0
} ]
[sub_resource type="SpriteFrames" id=2]
animations = [ {
"frames": [ ExtResource( 3 ) ],
"loop": true,
"name": "default",
"speed": 5.0
} ]
[sub_resource type="SpriteFrames" id=3]
animations = [ {
"frames": [ ExtResource( 4 ) ],
"loop": true,
"name": "default",
"speed": 5.0
} ]
[node name="InherentTurretMenu" type="Node"]
pause_mode = 2
script = ExtResource( 1 )
_sections_unfolded = [ "Pause" ]
[node name="ColorRect" type="ColorRect" parent="." index="0"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_right = 1026.0
margin_bottom = 605.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="Back" type="Node2D" parent="." index="1"]
editor/display_folded = true
position = Vector2( 50, 240 )
scale = Vector2( 0.5, 0.5 )
z_index = 2
z_as_relative = false
_sections_unfolded = [ "Transform", "Z Index" ]
__meta__ = {
"_edit_group_": true
}
[node name="Icon" type="AnimatedSprite" parent="Back" index="0"]
position = Vector2( 190, 530 )
frames = SubResource( 1 )
animation = "default"
[node name="Button" type="Button" parent="Back" index="1"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_top = 450.0
margin_right = 300.0
margin_bottom = 600.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="BuyTurret" type="Node2D" parent="." index="2"]
editor/display_folded = true
visible = false
position = Vector2( 190, 140 )
scale = Vector2( 0.25, 0.25 )
z_index = 2
_sections_unfolded = [ "Transform", "Z Index" ]
__meta__ = {
"_edit_group_": true
}
[node name="Icon" type="AnimatedSprite" parent="BuyTurret" index="0"]
position = Vector2( 190, 530 )
frames = SubResource( 2 )
animation = "default"
[node name="Button" type="Button" parent="BuyTurret" index="1"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = -360.0
margin_top = 80.0
margin_right = 720.0
margin_bottom = 960.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="Accept" type="Node2D" parent="." index="3"]
editor/display_folded = true
visible = false
position = Vector2( 820, 240 )
scale = Vector2( 0.5, 0.5 )
_sections_unfolded = [ "Transform" ]
__meta__ = {
"_edit_group_": true
}
[node name="Icon" type="AnimatedSprite" parent="Accept" index="0"]
position = Vector2( 190, 530 )
frames = SubResource( 3 )
animation = "default"
[node name="Button" type="Button" parent="Accept" index="1"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 96.0
margin_top = 412.0
margin_right = 296.0
margin_bottom = 612.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="Upgrade" type="Node2D" parent="." index="4"]
visible = false
position = Vector2( 0, 181 )
[node name="Button" type="Button" parent="Upgrade" index="0"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 430.0
margin_top = 50.0
margin_right = 640.0
margin_bottom = 200.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
text = "Upgrade"
flat = false
align = 1
[node name="Icon" type="AnimatedSprite" parent="Upgrade" index="1"]
animation = "default"
[connection signal="pressed" from="Back/Button" to="." method="backButton"]
[connection signal="pressed" from="BuyTurret/Button" to="." method="buyTurret"]
[connection signal="pressed" from="Accept/Button" to="." method="acceptTurret"]
[connection signal="pressed" from="Upgrade/Button" to="." method="upgradeTurret"]

19
Menus/Menu.gd Normal file
View File

@ -0,0 +1,19 @@
extends Node2D
# 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 _on_BackButton_pressed():
queue_free()
func _on_PatreonLink_pressed():
OS.shell_open("https://www.patreon.com/fronter")
func _on_LiberaLink_pressed():
OS.shell_open("https://www.liberapay.com/fronter")

59
Menus/Menu.tscn Normal file
View File

@ -0,0 +1,59 @@
[gd_scene load_steps=3 format=2]
[ext_resource path="res://Menus/Menu.gd" type="Script" id=1]
[ext_resource path="res://art/menu/back.png" type="Texture" id=2]
[node name="Menu" type="Node2D"]
z_index = 1
z_as_relative = false
script = ExtResource( 1 )
_sections_unfolded = [ "Z Index" ]
[node name="BG" type="ColorRect" parent="." index="0"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_right = 1024.0
margin_bottom = 600.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 = [ "Rect" ]
[node name="BackButton" type="Button" parent="." index="1"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 4.0
margin_top = 453.0
margin_right = 279.0
margin_bottom = 659.0
rect_scale = Vector2( 0.7, 0.7 )
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
icon = ExtResource( 2 )
flat = true
align = 1
_sections_unfolded = [ "Rect" ]
[connection signal="pressed" from="BackButton" to="." method="_on_BackButton_pressed"]

75
Menus/Settings.tscn Normal file
View File

@ -0,0 +1,75 @@
[gd_scene load_steps=5 format=2]
[ext_resource path="res://Menus/Menu.tscn" type="PackedScene" id=1]
[ext_resource path="res://Menus/patreon.png" type="Texture" id=2]
[ext_resource path="res://Menus/libera.png" type="Texture" id=3]
[ext_resource path="res://Menus/opens_externally.png" type="Texture" id=4]
[node name="Menu" index="0" instance=ExtResource( 1 )]
[node name="PatreonLink" type="Button" parent="." index="2"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 641.0
margin_top = 446.0
margin_right = 1403.0
margin_bottom = 565.0
rect_scale = Vector2( 0.5, 0.5 )
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
icon = ExtResource( 2 )
flat = true
align = 1
_sections_unfolded = [ "Rect" ]
[node name="LiberaLink" type="Button" parent="." index="3"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 641.0
margin_top = 509.0
margin_right = 1403.0
margin_bottom = 628.0
rect_scale = Vector2( 0.5, 0.5 )
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
icon = ExtResource( 3 )
flat = true
align = 1
_sections_unfolded = [ "Rect" ]
[node name="OpensExternally" type="Sprite" parent="." index="4"]
position = Vector2( 824.133, 418.745 )
scale = Vector2( 0.3, 0.3 )
texture = ExtResource( 4 )
_sections_unfolded = [ "Transform" ]
[connection signal="pressed" from="PatreonLink" to="." method="_on_PatreonLink_pressed"]
[connection signal="pressed" from="LiberaLink" to="." method="_on_LiberaLink_pressed"]

BIN
Menus/libera.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

29
Menus/libera.png.import Normal file
View File

@ -0,0 +1,29 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/libera.png-27e063214b4f726f791d546d7edbc18d.stex"
[deps]
source_file="res://Menus/libera.png"
dest_files=[ "res://.import/libera.png-27e063214b4f726f791d546d7edbc18d.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

BIN
Menus/opens_externally.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -0,0 +1,29 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/opens_externally.png-364ad320082cc6bf40f51de921f5c504.stex"
[deps]
source_file="res://Menus/opens_externally.png"
dest_files=[ "res://.import/opens_externally.png-364ad320082cc6bf40f51de921f5c504.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

BIN
Menus/patreon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

29
Menus/patreon.png.import Normal file
View File

@ -0,0 +1,29 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/patreon.png-a2732b6eb9dbd0ddc53941041f7804ab.stex"
[deps]
source_file="res://Menus/patreon.png"
dest_files=[ "res://.import/patreon.png-a2732b6eb9dbd0ddc53941041f7804ab.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

View File

@ -34,6 +34,7 @@ var double_laser = false
var can_shoot = true var can_shoot = true
var timer = null var timer = null
var bullet_delay = 0.1 var bullet_delay = 0.1
var damage = 0
func _ready(): func _ready():
_update_health_bar() _update_health_bar()
@ -43,17 +44,26 @@ func _process(delta):
#health = slave_health #health = slave_health
pass pass
if $Line2D.default_color.r > 0:
$Line2D.default_color.r -= delta
if $Line2D.default_color.g < 180:
$Line2D.default_color.g += delta
if $Line2D.default_color.b > 0:
$Line2D.default_color.b -= delta
if health <= 100 && $BlownOut/WhoopsGuy.unit_offset < 1: if health <= 100 && $BlownOut/WhoopsGuy.unit_offset < 1:
$BlownOut/WhoopsGuy.unit_offset += delta $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(): if get_tree().is_network_server() == false:
health -= 50 health -= 50
if get_tree().is_network_server(): if get_tree().is_network_server() == true:
health -= 50 health -= 50
rset("slave_health", health) rset("slave_health", health)
$Line2D.default_color = Color("b70000")
if area.boss: if area.boss:
emit_signal("flash") emit_signal("flash")
health = 0 health = 0
@ -78,4 +88,3 @@ func _on_Player_restart_game():
func _update_health_bar(): func _update_health_bar():
var health_bar = Vector2(((health * (.8)) + 100), 300) var health_bar = Vector2(((health * (.8)) + 100), 300)
$Line2D.set_point_position( 1, health_bar ) $Line2D.set_point_position( 1, health_bar )
print(health)

View File

@ -31,7 +31,7 @@ _data = {
} }
_sections_unfolded = [ "Resource" ] _sections_unfolded = [ "Resource" ]
[node name="Mothership" type="Area2D"] [node name="Mothership" type="Area2D" index="0"]
position = Vector2( 42.1613, 302.944 ) position = Vector2( 42.1613, 302.944 )
scale = Vector2( 0.263572, 0.240903 ) scale = Vector2( 0.263572, 0.240903 )
@ -90,7 +90,7 @@ position = Vector2( 32.7402, 101.849 )
scale = Vector2( 3.33333, 3.33333 ) scale = Vector2( 3.33333, 3.33333 )
points = PoolVector2Array( 100, 300, 900, 300 ) points = PoolVector2Array( 100, 300, 900, 300 )
width = 15.0 width = 15.0
default_color = Color( 0.037384, 0.683594, 0, 1 ) default_color = Color( 0.0352941, 0.717647, 0, 1 )
texture_mode = 31 texture_mode = 31
sharp_limit = 2.0 sharp_limit = 2.0
round_precision = 8 round_precision = 8

View File

@ -419,6 +419,8 @@ animation = "default"
[node name="Lobby" type="Node" parent="." index="14"] [node name="Lobby" type="Node" parent="." index="14"]
editor/display_folded = true
[node name="RichTextLabel" type="RichTextLabel" parent="Lobby" index="0"] [node name="RichTextLabel" type="RichTextLabel" parent="Lobby" index="0"]
anchor_left = 0.0 anchor_left = 0.0

View File

@ -23,9 +23,9 @@ signal restart
var rectangle_opacity = 0 var rectangle_opacity = 0
func _ready(): func _ready():
# Called every time the node is added to the scene. if get_tree().has_network_peer() && not get_tree().is_network_server():
# Initialization here $Restart.visible = false
pass $Button.disabled = true
func _process(delta): func _process(delta):
$ColorRect.color = Color(0, 0, 0, rectangle_opacity) $ColorRect.color = Color(0, 0, 0, rectangle_opacity)
@ -37,7 +37,7 @@ func _process(delta):
func _on_Button_pressed(): func _on_Button_pressed():
emit_signal("restart") emit_signal("restart")
queue_free() #queue_free()
func _on_Button_button_down(): func _on_Button_button_down():
$Restart.frame = 1 $Restart.frame = 1

View File

@ -85,8 +85,10 @@ func _ready():
var timer = null var timer = null
var damage = 0
var can_shoot = false var can_shoot = false
var shoot_down = false var shoot_down = false
var is_shooting = false
func on_timeout_complete(): func on_timeout_complete():
can_shoot = true can_shoot = true
@ -120,11 +122,15 @@ var rainbow_is_on = false
func _process(delta): func _process(delta):
$Username.text = username $Username.text = username
if is_shooting:
shoot()
if rainbow_is_on: if rainbow_is_on:
rainbow(delta) rainbow(delta)
pass pass
var laser_damage = 10
func shoot(): func shoot():
if can_shoot: if can_shoot:
var laser = Laser.instance() var laser = Laser.instance()
@ -132,6 +138,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
@ -141,6 +148,7 @@ func shoot():
laser2.position.y = position.y + 28 laser2.position.y = position.y + 28
laser2.position.x = position.x + 46 laser2.position.x = position.x + 46
laser2.current_pen = laser_penetration laser2.current_pen = laser_penetration
laser2.damage = laser_damage
can_shoot = false can_shoot = false
timer.start() timer.start()

71
PauseMenu.gd Normal file
View File

@ -0,0 +1,71 @@
#
# 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 Node
signal menu_closed
signal change_color
signal taste_the_rainbow
func _ready():
$ColorRect.color = Color(0,0,0,1)
func _process(delta):
if (Input.is_action_pressed("ui_quit")):
get_tree().quit()
#if Input.is_action_pressed("ui_accept"):
# _on_Button_pressed())
func _on_Resume_pressed():
get_tree().paused = false
emit_signal("menu_closed")
queue_free()
func _on_Goldenrod_pressed():
emit_signal("change_color", "daa520")
func _on_Purple_pressed():
emit_signal("change_color", "800080")
func _on_SlateBlue_pressed():
emit_signal("change_color", "708090")
func _on_Salmon_pressed():
emit_signal("change_color", "e9967a")
func _on_Crimson_pressed():
emit_signal("change_color", "dc143c")
func _on_MediumSpringGreen_pressed():
emit_signal("change_color", "3cb371")
func _on_Tomato_pressed():
emit_signal("change_color", "ff3e2d")
prints("put tomato in dere")
func _on_DarkenedLawnGreen_pressed():
emit_signal("change_color", "7bd126")
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")

331
PauseMenu.tscn Normal file
View File

@ -0,0 +1,331 @@
[gd_scene load_steps=4 format=2]
[ext_resource path="res://PauseMenu.gd" type="Script" id=1]
[ext_resource path="res://art/ColorSelect.png" type="Texture" id=2]
[sub_resource type="Theme" id=1]
[node name="PauseMenu" type="Node"]
pause_mode = 2
script = ExtResource( 1 )
_sections_unfolded = [ "Pause" ]
[node name="ColorRect" type="ColorRect" parent="." index="0"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_right = 1026.0
margin_bottom = 605.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="Resume" type="Button" parent="." index="1"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 287.0
margin_top = 481.0
margin_right = 770.0
margin_bottom = 523.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
theme = SubResource( 1 )
toggle_mode = false
enabled_focus_mode = 2
shortcut = null
group = null
text = "Continue"
flat = false
align = 1
[node name="ColorSelect" type="Node2D" parent="." index="2"]
position = Vector2( 21, 0 )
[node name="ColorSelectBG" type="Sprite" parent="ColorSelect" index="0"]
editor/display_folded = true
position = Vector2( 120, 210 )
scale = Vector2( 0.179688, 0.179687 )
texture = ExtResource( 2 )
[node name="Goldenrod" type="Button" parent="ColorSelect/ColorSelectBG" index="0"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = -501.0
margin_top = -390.0
margin_right = -167.0
margin_bottom = -56.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="Purple" type="Button" parent="ColorSelect/ColorSelectBG" index="1"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = -167.0
margin_top = -390.0
margin_right = 167.0
margin_bottom = -56.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="SlateBlue" type="Button" parent="ColorSelect/ColorSelectBG" index="2"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 167.0
margin_top = -390.0
margin_right = 501.0
margin_bottom = -56.0001
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="Salmon" type="Button" parent="ColorSelect/ColorSelectBG" index="3"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = -501.0
margin_top = -56.0
margin_right = -167.0
margin_bottom = 278.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="Crimson" type="Button" parent="ColorSelect/ColorSelectBG" index="4"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = -167.0
margin_top = -56.0
margin_right = 167.0
margin_bottom = 278.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="MediumSpringGreen" type="Button" parent="ColorSelect/ColorSelectBG" index="5"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 167.0
margin_top = -56.0
margin_right = 501.0
margin_bottom = 278.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="Tomato" type="Button" parent="ColorSelect/ColorSelectBG" index="6"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 167.0
margin_top = 278.0
margin_right = 501.0
margin_bottom = 668.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="DarkenedLawnGreen" type="Button" parent="ColorSelect/ColorSelectBG" index="7"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = -167.0
margin_top = 334.0
margin_right = 167.0
margin_bottom = 668.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="DeepSkyBlue" type="Button" parent="ColorSelect/ColorSelectBG" index="8"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = -501.0
margin_top = 334.0
margin_right = -167.0
margin_bottom = 668.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="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
[connection signal="pressed" from="Resume" to="." method="_on_Resume_pressed"]
[connection signal="pressed" from="ColorSelect/ColorSelectBG/Goldenrod" to="." method="_on_Goldenrod_pressed"]
[connection signal="pressed" from="ColorSelect/ColorSelectBG/Purple" to="." method="_on_Purple_pressed"]
[connection signal="pressed" from="ColorSelect/ColorSelectBG/SlateBlue" to="." method="_on_SlateBlue_pressed"]
[connection signal="pressed" from="ColorSelect/ColorSelectBG/Salmon" to="." method="_on_Salmon_pressed"]
[connection signal="pressed" from="ColorSelect/ColorSelectBG/Crimson" to="." method="_on_Crimson_pressed"]
[connection signal="pressed" from="ColorSelect/ColorSelectBG/MediumSpringGreen" to="." method="_on_MediumSpringGreen_pressed"]
[connection signal="pressed" from="ColorSelect/ColorSelectBG/Tomato" to="." method="_on_Tomato_pressed"]
[connection signal="pressed" from="ColorSelect/ColorSelectBG/DarkenedLawnGreen" to="." method="_on_DarkenedLawnGreen_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"]

355
Player.gd
View File

@ -24,12 +24,17 @@ 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 other_shooting_upgrade signal other_shooting_upgrade
signal other_damage_upgrade
signal double_laser_upgrade signal double_laser_upgrade
signal other_laser_penetration_upgrade
signal other_ship_color_change signal other_ship_color_change
signal other_ship_enable_rainbow signal other_ship_enable_rainbow
signal shooting_speed_fully_upgraded signal shooting_speed_fully_upgraded
signal restart_game signal restart_game
signal multiplayer_movement signal multiplayer_movement
signal start_next_round
signal buy_turret
signal upgrade_turret_range
export (PackedScene) var Laser export (PackedScene) var Laser
@ -40,12 +45,8 @@ export (PackedScene) var Laser
var ship_speed = 500 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_DICT = {1:0.8, 2:0.5, 3:0.4, 4:0.2, 5:0.05} #original
const BULLET_DELAY_TIER2 = 0.5 const BULLET_DELAY_DICT = {1:0.8, 2:0.6, 3:0.4, 4:0.2, 5:0.1}
const BULLET_DELAY_TIER3 = 0.2
const BULLET_DELAY_TIER4 = 0.1
const BULLET_DELAY_TIER5 = 0.05
# starting cost of shooting speed upgrades after tier 5 # starting cost of shooting speed upgrades after tier 5
const SHOOTING_SPEED_UPGRADE_DEFAULT = 1500 const SHOOTING_SPEED_UPGRADE_DEFAULT = 1500
@ -53,32 +54,31 @@ const SHOOTING_SPEED_UPGRADE_DEFAULT = 1500
const BULLET_DELAY_MINIMUM = 0.01 const BULLET_DELAY_MINIMUM = 0.01
# costs of shooting speed upgrades # costs of shooting speed upgrades
const BULLET_DELAY_TIER2_COST = 100 const BULLET_DELAY_COST = {2:100, 3:400, 4:1000, 5:4000, 6:0}
const BULLET_DELAY_TIER3_COST = 200
const BULLET_DELAY_TIER4_COST = 400
const BULLET_DELAY_TIER5_COST = 1000
# double laser cost # double laser cost
const DOUBLE_LASER_COST = 2000 const DOUBLE_LASER_COST = 6000
# 5 tiers of laser damage # 5 tiers of laser damage
const LASER_DAMAGE_TIER1 = 10 const LASER_DAMAGE_DICT = {1:10, 2:15, 3:20, 4:40, 5:50}
const LASER_DAMAGE_TIER2 = 12
const LASER_DAMAGE_TIER3 = 15
const LASER_DAMAGE_TIER4 = 20
const LASER_DAMAGE_TIER5 = 50
# costs of laser damage upgrades # costs of laser damage upgrades
const LASER_DAMAGE_TIER2_COST = 200 const LASER_DAMAGE_COST = {2:400, 3:1000, 4:2000, 5:6000, 6:0}
const LASER_DAMAGE_TIER3_COST = 500
const LASER_DAMAGE_TIER4_COST = 1000
const LASER_DAMAGE_TIER5_COST = 2000
# costs of laser penetration upgrades
const LASER_PENETRATION_COST = {2:400, 3:1000, 4:2000, 5:6000, 6:0}
# 5 tiers of laser penetration
const LASER_PENETRATION_DICT = {1:0,2:1,3:2,4:3,5:5}
# the ship's starting position # the ship's starting position
const STARTING_POSITION = Vector2(130, 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 = 10000 #const STARTING_MONEY = 0
const STARTING_MONEY = 100000
# cost to unlock turrets
const UNLOCK_TURRETS_COST = 1000
################################# #################################
@ -95,13 +95,19 @@ var can_shoot = false
var timer = null var timer = null
# 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_DICT[1]
var bullet_delay_tier = 0 var bullet_delay_tier = 1
# sets other shooting settings to their defaults # sets other shooting settings to their defaults
var laser_penetration = 0 var laser_penetration = LASER_PENETRATION_DICT[1]
var laser_penetration_tier = 1
var double_laser = false var double_laser = false
var laser_damage = LASER_DAMAGE_TIER1 var laser_damage = LASER_DAMAGE_DICT[1]
var laser_damage_tier = 1
# turret settings
var turrets_unlocked = false
var has_turret = false
# gives the player their starting points # gives the player their starting points
var money = STARTING_MONEY var money = STARTING_MONEY
@ -116,108 +122,210 @@ var refund_percentage = 1
# only really relevant to touchscreens # only really relevant to touchscreens
var menu_open = false var menu_open = false
var boss = false
var damage = 0
# opens the upgrade menu # opens the upgrade menu
func upgradeMenu(): func upgradeMenu():
menu_open = true
var upgmenu = preload("res://UpgradeMenu.tscn").instance() var upgmenu = preload("res://UpgradeMenu.tscn").instance()
menu_open = true
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")
upgmenu.connect("double_laser_upgrade", self, "doubleLaserUpgrade_button") upgmenu.connect("double_laser_upgrade", self, "doubleLaserUpgrade")
upgmenu.connect("laser_penetration_upgrade", self, "laserPenetrationUpgrade_button") upgmenu.connect("laser_penetration_upgrade", self, "laserPenetrationUpgrade")
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.connect("taste_the_rainbow", self, "enable_the_rainbow")
upgmenu.connect("laser_damage_upgrade", self, "upgradeLaserDamage")
upgmenu.connect("menu_closed", self, "upgradeMenuClosed")
upgmenu.connect("unlock_turrets", self, "unlockTurrets")
upgmenu.connect("buy_turret", self, "buyTurret")
upgmenu.connect("turret_menu", self, "openTurretMenu")
upgmenu.laser_damage_tier = laser_damage_tier
upgmenu.bullet_delay_tier = bullet_delay_tier upgmenu.bullet_delay_tier = bullet_delay_tier
upgmenu.laser_penetration_tier = laser_penetration_tier
upgmenu.turrets_unlocked = turrets_unlocked
upgmenu.has_turret = has_turret
if !get_tree().has_network_peer(): if !get_tree().has_network_peer():
get_tree().paused = true get_tree().paused = true
# signalled on close of UpgradeMenu # signalled on close of UpgradeMenu
func menuClosed(): func upgradeMenuClosed():
menu_open = false menu_open = false
emit_signal("start_next_round")
func pauseMenu():
menu_open = true
var pausemenu = preload("res://PauseMenu.tscn").instance()
add_child(pausemenu)
pausemenu.connect("change_color", self, "changeColor")
pausemenu.connect("menu_closed", self, "pauseMenuClosed")
pausemenu.connect("taste_the_rainbow", self, "enable_the_rainbow")
if !get_tree().has_network_peer():
get_tree().paused = true
func pauseMenuClosed():
menu_open = false
func openTurretMenu():
var turretmenu = preload("res://TurretMenu.tscn").instance()
add_child(turretmenu)
turretmenu.connect("buy_turret", self, "buyTurret")
turretmenu.connect("turret_range_upgrade", self, "turretRangeUpgrade")
turretmenu.screensize = screensize
if !get_tree().has_network_peer():
get_tree().paused = true
func makePurchaseFor(cost):
if money >= cost:
money -= cost
emit_signal("update_display")
return true
else:
return false
####################### #######################
# REQUESTING UPGRADES # # REQUESTING UPGRADES #
####################### #######################
# all will request their upgrade # all will request their upgrade
# all will pause the game if not in multiplayer # all will pause the game if not in multiplayer
func doubleLaserUpgrade_button():
doubleLaserUpgrade()
emit_signal("update_display")
if !get_tree().has_network_peer():
get_tree().paused = true
func laserPenetrationUpgrade_button():
laserPenetrationUpgrade()
emit_signal("update_display")
if !get_tree().has_network_peer():
get_tree().paused = true
func upgradeShipSpeed_button():
upgradeShipSpeed()
emit_signal("update_display")
if !get_tree().has_network_peer():
get_tree().paused = true
func upgradeBulletDelay_button():
upgradeBulletDelay()
emit_signal("update_display")
if !get_tree().has_network_peer():
get_tree().paused = true
#######################
######################
# PROVIDING UPGRADES #
######################
# checks which tier the player is already on, and if they have enough points # checks which tier the player is already on, and if they have enough points
# upgrades and charges the player, if possible # upgrades and charges the player, if possible
# increases the ship value by the amount spent, for refunds # increases the ship value by the amount spent, for refunds
# sends an rpc message about current state for a given upgrade # sends an rpc message about current state for a given upgrade
# upgrades shooting speed func unlockTurrets():
func upgradeBulletDelay(): if money >= UNLOCK_TURRETS_COST:# && turrets_unlocked == false:
if (bullet_delay == BULLET_DELAY_TIER1 && money >= BULLET_DELAY_TIER2_COST): money -= UNLOCK_TURRETS_COST
bullet_delay = BULLET_DELAY_TIER2 turrets_unlocked = true
money -= BULLET_DELAY_TIER2_COST emit_signal("update_display")
ship_value += BULLET_DELAY_TIER2_COST openTurretMenu()
bullet_delay_tier = 1 # pause if not multiplayer
elif (bullet_delay == BULLET_DELAY_TIER2 && money >= BULLET_DELAY_TIER3_COST): if !get_tree().has_network_peer():
bullet_delay = BULLET_DELAY_TIER3 get_tree().paused = true
money -= BULLET_DELAY_TIER3_COST
ship_value += BULLET_DELAY_TIER3_COST
bullet_delay_tier = 2
elif (bullet_delay == BULLET_DELAY_TIER3 && money >= BULLET_DELAY_TIER4_COST):
bullet_delay = BULLET_DELAY_TIER4
money -= BULLET_DELAY_TIER4_COST
ship_value += BULLET_DELAY_TIER4_COST
bullet_delay_tier = 3
elif (bullet_delay == BULLET_DELAY_TIER4 && money >= BULLET_DELAY_TIER5_COST):
bullet_delay = BULLET_DELAY_TIER5
money -= BULLET_DELAY_TIER5_COST
ship_value += BULLET_DELAY_TIER5_COST
bullet_delay_tier = 4
# elif (bullet_delay <= BULLET_DELAY_MINIMUM):
# emit_signal("bullet_delay_fully_upgraded")
# elif (bullet_delay <= BULLET_DELAY_TIER5 && money >= shooting_speed_upgrade):
# bullet_delay = bullet_delay*0.95
# money -= shooting_speed_upgrade
# ship_value += shooting_speed_upgrade
# shooting_speed_upgrade *= 1.1
# bullet_delay_tier += 1
timer.set_wait_time(bullet_delay) func buyTurret(turret_position, cost):
rpc("other_shooting_speed_upgrade", get_tree().get_network_unique_id(), bullet_delay) #money -= cost
emit_signal("update_display")
if !get_tree().has_network_peer():
emit_signal("buy_turret", get_tree().get_network_unique_id(), turret_position)
has_turret = true
get_tree().paused = true
else:
rpc("net_buying_turret", get_tree().get_network_unique_id(), turret_position)
sync func net_buying_turret(id, turret_position):
emit_signal("buy_turret", id, turret_position)
func turretRangeUpgrade(cost, new_scale):
if makePurchaseFor(cost):
emit_signal("upgrade_turret_range", get_tree().get_network_unique_id(), new_scale)
if !get_tree().has_network_peer():
get_tree().paused = true
#################################################
# ALLOWS THE PLAYER TO SHOOT TWO LASERS AT ONCE #
func doubleLaserUpgrade(): func doubleLaserUpgrade():
# if the user has enough money, take that money, and enable doubles
if money >= DOUBLE_LASER_COST && double_laser == false: if money >= DOUBLE_LASER_COST && double_laser == false:
money -= DOUBLE_LASER_COST money -= DOUBLE_LASER_COST
double_laser = true double_laser = true
$Gunner2.visible = true
# tell other players to enable doubles for you
rpc("double_laser_upgrade", get_tree().get_network_unique_id()) rpc("double_laser_upgrade", get_tree().get_network_unique_id())
###################### # tell main to update the points display
emit_signal("update_display")
# pause if not multiplayer
if !get_tree().has_network_peer():
get_tree().paused = true
# tell main about other ship's double_laser
remote func double_laser_upgrade(id):
emit_signal("double_laser_upgrade", id)
# ALLOWS THE PLAYER TO SHOOT TWO LASERS AT ONCE #
#################################################
######################################################
# ALLOWS LASERS TO PENETRATE ENEMIES BEFORE EXPIRING #
var next_penetration_upgrade_cost = LASER_PENETRATION_COST[laser_penetration_tier + 1]
func laserPenetrationUpgrade():
if laser_penetration_tier < 5:
if money >= LASER_PENETRATION_COST[laser_penetration_tier + 1]:
laser_penetration_tier += 1
laser_penetration = LASER_PENETRATION_DICT[laser_penetration_tier]
money -= LASER_PENETRATION_COST[laser_penetration_tier]
ship_value += LASER_PENETRATION_COST[laser_penetration_tier]
next_penetration_upgrade_cost = LASER_PENETRATION_COST[laser_penetration_tier + 1]
print(laser_penetration)
emit_signal("update_display")
rpc("other_laser_penetration_upgrade", get_tree().get_network_unique_id(), laser_penetration)
# pause if not multiplayer
if !get_tree().has_network_peer():
get_tree().paused = true
remote func other_laser_penetration_upgrade(id):
emit_signal("other_laser_penetration_upgrade", id)
# tell main about other ship's
# ALLOWS LASERS TO PENETRATE ENEMIES BEFORE EXPIRING #
######################################################
###############################################
# INCREASES THE FIRE RATE FOR PLAYERS' LASERS #
var next_bullet_delay_upgrade_cost = BULLET_DELAY_COST[bullet_delay_tier + 1]
func upgradeBulletDelay():
if bullet_delay_tier < 5:
if money >= BULLET_DELAY_COST[bullet_delay_tier + 1]:
bullet_delay_tier += 1
bullet_delay = BULLET_DELAY_DICT[bullet_delay_tier]
money -= BULLET_DELAY_COST[bullet_delay_tier]
ship_value += BULLET_DELAY_COST[bullet_delay_tier]
next_bullet_delay_upgrade_cost = BULLET_DELAY_COST[bullet_delay_tier + 1]
print(bullet_delay)
timer.set_wait_time(bullet_delay)
rpc("other_shooting_speed_upgrade", get_tree().get_network_unique_id(), bullet_delay)
emit_signal("update_display")
if !get_tree().has_network_peer():
get_tree().paused = true
# tell main about other ship's bullet_delay upgrade
remote func other_shooting_speed_upgrade(id, bullet_delay):
emit_signal("other_shooting_upgrade", id, bullet_delay)
# INCREASES THE FIRE RATE FOR PLAYERS' LASERS #
###############################################
############################################
# INCREASES DAMAGE DONE BY EACH LASER SHOT #
var next_laser_damage_upgrade_cost = LASER_DAMAGE_COST[laser_damage_tier + 1]
func upgradeLaserDamage():
if laser_damage_tier < 5:
if money >= LASER_DAMAGE_COST[laser_damage_tier + 1]:
laser_damage_tier += 1
laser_damage = LASER_DAMAGE_DICT[laser_damage_tier]
money -= LASER_DAMAGE_COST[laser_damage_tier]
ship_value += LASER_DAMAGE_COST[laser_damage_tier]
next_laser_damage_upgrade_cost = LASER_DAMAGE_COST[laser_damage_tier + 1]
print(laser_damage)
rpc("other_laser_damage_upgrade", get_tree().get_network_unique_id(), laser_damage)
emit_signal("update_display")
if !get_tree().has_network_peer():
get_tree().paused = true
# tell main about other ship's laser_damage upgrade
remote func other_laser_damage_upgrade(id, laser_damage):
emit_signal("other_damage_upgrade", id, laser_damage)
# INCREASES DAMAGE DONE BY EACH LASER SHOT #
############################################
func _ready(): func _ready():
# for measuring time between lasers # for measuring time between lasers
@ -239,25 +347,37 @@ func _ready():
# resets all upgrades to the default # resets all upgrades to the default
# refunds them with adjustable percentage returned # refunds them with adjustable percentage returned
# not currently 100%, so disabled
func _refund_button(): func _refund_button():
bullet_delay = BULLET_DELAY_TIER1 bullet_delay = BULLET_DELAY_DICT[1]
bullet_delay_tier = 0 bullet_delay_tier = 1
timer.set_wait_time(bullet_delay) timer.set_wait_time(bullet_delay)
laser_penetration = 0 laser_penetration = 0
double_laser = false double_laser = false
rainbow_is_on = false
changeColor(Color(1,1,1,1))
shooting_speed_upgrade = SHOOTING_SPEED_UPGRADE_DEFAULT shooting_speed_upgrade = SHOOTING_SPEED_UPGRADE_DEFAULT
money += ship_value*refund_percentage money += ship_value*refund_percentage
$Gunner2.visible = false
prints("Refunded ", ship_value*refund_percentage) prints("Refunded ", ship_value*refund_percentage)
ship_value = 0 ship_value = 0
emit_signal("update_display") emit_signal("update_display")
get_tree().paused = true #get_tree().paused = true
#Changes the ships color ############################
# Changes the ship's color #
func changeColor(color): func changeColor(color):
$AnimatedSprite.modulate = color $AnimatedSprite.modulate = color
if get_tree().has_network_peer(): if get_tree().has_network_peer():
rpc("_change_color", get_tree().get_network_unique_id(), color) rpc("_change_color", get_tree().get_network_unique_id(), color)
# tell main about other ship's color change
remote func _change_color(id, color):
emit_signal("other_ship_color_change", id, color)
# Changes the ship's color #
############################
func on_timeout_complete(): func on_timeout_complete():
can_shoot = true can_shoot = true
@ -274,22 +394,9 @@ func moveto(finger_position):
if (position.y > finger_position.y - 100 && finger_position.x < 800): if (position.y > finger_position.y - 100 && finger_position.x < 800):
velocity.y -= 1 velocity.y -= 1
remote func move_player(id, position, is_shooting): remote func move_player(id, position, is_shooting):
emit_signal("multiplayer_movement", id, position, is_shooting) emit_signal("multiplayer_movement", id, position, is_shooting)
remote func other_shooting_speed_upgrade(id, bullet_delay):
emit_signal("other_shooting_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 # the player's movement vector
var velocity = Vector2() var velocity = Vector2()
@ -329,8 +436,8 @@ func _process(delta):
is_shooting = true is_shooting = true
# if in multiplayer mode, push position and shooting status as often as possible # if in multiplayer mode, push position and shooting status as often as possible
if get_tree().has_network_peer(): #if get_tree().has_network_peer():
rpc("move_player", get_tree().get_network_unique_id(), position, is_shooting) # rpc_unreliable("move_player", get_tree().get_network_unique_id(), position, is_shooting)
# if shoot button is pressed, try shooting # if shoot button is pressed, try shooting
if Input.is_action_pressed("ui_accept"): if Input.is_action_pressed("ui_accept"):
@ -357,9 +464,10 @@ func shoot():
if double_laser == true: if double_laser == true:
var laser2 = Laser.instance() var laser2 = Laser.instance()
get_node("../").add_child(laser2) get_node("../").add_child(laser2)
laser2.position.y = position.y + 28 laser2.position.y = position.y + 31
laser2.position.x = position.x + 46 laser2.position.x = position.x + 50
laser2.current_pen = laser_penetration laser2.current_pen = laser_penetration
laser2.damage = laser_damage
# don't shoot again until the timer resets # don't shoot again until the timer resets
can_shoot = false can_shoot = false
@ -370,9 +478,16 @@ func shoot():
func enable_the_rainbow(): func enable_the_rainbow():
if money >= 2000 && not rainbow_is_on: if money >= 2000 && not rainbow_is_on:
money -= 2000 money -= 2000
emit_signal("update_display")
rainbow_is_on = true rainbow_is_on = true
rpc("_enable_rainbow", get_tree().get_network_unique_id()) rpc("_enable_rainbow", get_tree().get_network_unique_id())
if !get_tree().has_network_peer():
get_tree().paused = true
remote func _enable_rainbow(id):
emit_signal("other_ship_enable_rainbow", id)
func rainbow(delta): func rainbow(delta):
if rainbow.r < 1 && r_up: if rainbow.r < 1 && r_up:
rainbow.r += rainbow_speed*delta/10 rainbow.r += rainbow_speed*delta/10
@ -397,9 +512,10 @@ func rainbow(delta):
$AnimatedSprite.modulate = rainbow $AnimatedSprite.modulate = rainbow
var gameover
# displays endgame screen and pauses # displays endgame screen and pauses
func gameOver(): func gameOver():
var gameover = preload("res://GameOver.tscn").instance() gameover = preload("res://GameOver.tscn").instance()
add_child(gameover) add_child(gameover)
gameover.connect("restart", self, "restart_game") gameover.connect("restart", self, "restart_game")
# gameover.connect("bullet_delay_upgrade", self, "upgradeBulletDelay_button") # gameover.connect("bullet_delay_upgrade", self, "upgradeBulletDelay_button")
@ -412,3 +528,8 @@ func restart_game():
get_tree().paused = false get_tree().paused = false
money = STARTING_MONEY money = STARTING_MONEY
emit_signal("restart_game") emit_signal("restart_game")
gameover.queue_free()
func _on_Timer_timeout():
if get_tree().has_network_peer():
rpc_unreliable("move_player", get_tree().get_network_unique_id(), position, is_shooting)

View File

@ -1,14 +1,15 @@
[gd_scene load_steps=7 format=2] [gd_scene load_steps=8 format=2]
[ext_resource path="res://Player.gd" type="Script" id=1] [ext_resource path="res://Player.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]
[ext_resource path="res://art/player/Rocket1.png" type="Texture" id=3] [ext_resource path="res://art/player/laserer2.png" type="Texture" id=3]
[ext_resource path="res://art/player/Rocket2.png" type="Texture" id=4] [ext_resource path="res://art/player/Rocket1.png" type="Texture" id=4]
[ext_resource path="res://art/player/Rocket2.png" type="Texture" id=5]
[sub_resource type="SpriteFrames" id=1] [sub_resource type="SpriteFrames" id=1]
animations = [ { animations = [ {
"frames": [ ExtResource( 3 ), ExtResource( 4 ) ], "frames": [ ExtResource( 4 ), ExtResource( 5 ) ],
"loop": true, "loop": true,
"name": "default", "name": "default",
"speed": 15.0 "speed": 15.0
@ -17,7 +18,7 @@ animations = [ {
[sub_resource type="CapsuleShape2D" id=2] [sub_resource type="CapsuleShape2D" id=2]
custom_solver_bias = 0.0 custom_solver_bias = 0.0
radius = 12.8998 radius = 25.7545
height = 40.4125 height = 40.4125
[node name="Player" type="Area2D"] [node name="Player" type="Area2D"]
@ -36,7 +37,15 @@ script = ExtResource( 1 )
_sections_unfolded = [ "Collision", "Z Index" ] _sections_unfolded = [ "Collision", "Z Index" ]
Laser = ExtResource( 2 ) Laser = ExtResource( 2 )
[node name="AnimatedSprite" type="AnimatedSprite" parent="." index="0"] [node name="Gunner2" type="Sprite" parent="." index="0"]
visible = false
position = Vector2( 0, 7 )
scale = Vector2( 0.2, 0.2 )
texture = ExtResource( 3 )
_sections_unfolded = [ "Transform" ]
[node name="AnimatedSprite" type="AnimatedSprite" parent="." index="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 )
@ -44,10 +53,20 @@ frames = SubResource( 1 )
animation = "default" animation = "default"
_sections_unfolded = [ "Transform" ] _sections_unfolded = [ "Transform" ]
[node name="CollisionShape2D" type="CollisionShape2D" parent="." index="1"] [node name="CollisionShape2D" type="CollisionShape2D" parent="." index="2"]
position = Vector2( 45.5518, -3.09424 ) position = Vector2( 5.85673, 1.31631 )
rotation = 1.5708
shape = SubResource( 2 ) shape = SubResource( 2 )
_sections_unfolded = [ "Material", "Transform", "Visibility", "Z Index" ] _sections_unfolded = [ "Material", "Transform", "Visibility", "Z Index" ]
[node name="Timer" type="Timer" parent="." index="3"]
process_mode = 1
wait_time = 0.02
one_shot = false
autostart = true
[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"]

View File

@ -1,7 +1,7 @@
extends "res://Bad.gd" extends "res://Bad.gd"
func _ready(): func _ready():
health = 500 health = 500 #500
speed = 50 speed = 50
pass pass
@ -20,20 +20,20 @@ func _process(delta):
if centered_x && centered_y: if centered_x && centered_y:
$StarSprite.rotation += delta*10 $StarSprite.rotation += delta*10
position.x -= delta*500 position.x -= delta*500
if position.x < 0: if position.x < -50:
emit_signal("health_up", 200) emit_signal("health_up", 200)
queue_free() queue_free()
if position.x < 500:
position.x += delta*100
elif position.x > 524:
position.x -= delta*100
else: else:
centered_x = true if position.x < 500:
position.x += delta*(544-position.x)+1
elif position.x > 524:
position.x -= delta*(position.x-480)+1
else:
centered_x = true
if position.y < 280: if position.y < 280:
position.y += delta*100 position.y += delta*(320-position.y)+1
elif position.y > 320: elif position.y > 320:
position.y -= delta*100 position.y -= delta*(position.y-280)+1
else: else:
centered_y = true centered_y = true

View File

@ -30,9 +30,12 @@ animations = [ {
"speed": 5.0 "speed": 5.0
} ] } ]
[node name="Prison" instance=ExtResource( 1 )] [node name="Prison" groups=[
"enemies",
] instance=ExtResource( 1 )]
scale = Vector2( 0.2, 0.2 ) scale = Vector2( 0.2, 0.2 )
collision_layer = 4
script = ExtResource( 2 ) script = ExtResource( 2 )
_sections_unfolded = [ "Collision", "Transform" ] _sections_unfolded = [ "Collision", "Transform" ]

5
README.md Normal file
View File

@ -0,0 +1,5 @@
Fronter is side-scrolling shooter game by sagethesagesage.
Fronter is very much in an alpha state, and many things need improvement, but it is quite playable, and supports LAN-based multiplayer.
Donations are accepted at patreon.com/fronter and liberapay.com/fronter, and the intention is to accept Ethereum at some point, as well.

View File

@ -1,8 +1,6 @@
extends Area2D extends Area2D
# class member variables go here, for example: var damage = 20
# var a = 2
# var b = "textvar"
func _ready(): func _ready():
# Called every time the node is added to the scene. # Called every time the node is added to the scene.

View File

@ -28,7 +28,7 @@ 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 starting_health = 20000 var starting_health = 3000
var health = starting_health var health = starting_health
var timer = null var timer = null
@ -66,29 +66,9 @@ func _process(delta):
if position.x > 0: if position.x > 0:
position.x -= delta*((100+(position.x))/10) position.x -= delta*((100+(position.x))/10)
#### BIG WOBBLE #### wobble(delta)
if position.y > 4:
move_down = false
if position.y <= -4:
move_down = true
if abs(position.y) > 4: if health < -1*(starting_health/10) && $Inside/InsideBadSprite.rotation_degrees < 180:
speed_multiplier = 1
elif abs(position.y) > 3:
speed_multiplier = 1
elif abs(position.y) > 2:
speed_multiplier = 2
elif abs(position.y) <= 2:
speed_multiplier = 3
if move_down:
if health > 1000:
position.y += delta*speed_multiplier
else:
if health > 1000:
position.y -= delta*speed_multiplier
if health < -3000 && $Inside/InsideBadSprite.rotation_degrees < 180:
$Inside/InsideBadSprite.rotation_degrees += delta*20 $Inside/InsideBadSprite.rotation_degrees += delta*20
if $Inside/InsideBadSprite.rotation_degrees > 179 && $Inside/InsideBadSprite.rotation_degrees < 190: if $Inside/InsideBadSprite.rotation_degrees > 179 && $Inside/InsideBadSprite.rotation_degrees < 190:
@ -120,7 +100,6 @@ func _process(delta):
emit_signal("flash") emit_signal("flash")
$OutsideBottomCollision.disabled = true $OutsideBottomCollision.disabled = true
$OutsideTopCollision.disabled = true $OutsideTopCollision.disabled = true
prints("flash")
flashed = true flashed = true
#queue_free() #queue_free()
@ -150,33 +129,33 @@ func _on_Inside_area_entered(area):
emit_signal("boss_health", health, starting_health) emit_signal("boss_health", health, starting_health)
func updateOutsideSprite(): func updateOutsideSprite():
if health > 18000: if health > starting_health*.9:
$BigBadSprite.frame = 0 $BigBadSprite.frame = 0
elif health > 16000: elif health > starting_health*.8:
$BigBadSprite.frame = 1 $BigBadSprite.frame = 1
elif health > 14000: elif health > starting_health*.7:
$BigBadSprite.frame = 2 $BigBadSprite.frame = 2
elif health > 12000: elif health > starting_health*.6:
$BigBadSprite.frame = 3 $BigBadSprite.frame = 3
elif health > 10000: elif health > starting_health*.5:
$BigBadSprite.frame = 4 $BigBadSprite.frame = 4
elif health > 9000: elif health > starting_health*.45:
$BigBadSprite.frame = 5 $BigBadSprite.frame = 5
elif health > 8000: elif health > starting_health*.4:
$BigBadSprite.frame = 6 $BigBadSprite.frame = 6
elif health > 7000: elif health > starting_health*.35:
$BigBadSprite.frame = 7 $BigBadSprite.frame = 7
elif health > 6000: elif health > starting_health*.3:
$BigBadSprite.frame = 8 $BigBadSprite.frame = 8
elif health > 5000: elif health > starting_health*.25:
$BigBadSprite.frame = 9 $BigBadSprite.frame = 9
elif health > 4000: elif health > starting_health*.2:
$BigBadSprite.frame = 10 $BigBadSprite.frame = 10
elif health > 3000: elif health > starting_health*.15:
$BigBadSprite.frame = 11 $BigBadSprite.frame = 11
elif health > 2000: elif health > starting_health*.1:
$BigBadSprite.frame = 12 $BigBadSprite.frame = 12
elif health > 1500: elif health > starting_health*.075:
timer.stop() timer.stop()
$BigBadSprite.frame = 13 $BigBadSprite.frame = 13
$Inside/InsideBadSprite.frame = 2 $Inside/InsideBadSprite.frame = 2
@ -186,6 +165,28 @@ func updateOutsideSprite():
slave func bossHealth(host_health): slave func bossHealth(host_health):
health = host_health health = host_health
func wobble(delta):
if position.y > 4:
move_down = false
if position.y <= -4:
move_down = true
if abs(position.y) > 4:
speed_multiplier = 1
elif abs(position.y) > 3:
speed_multiplier = 1
elif abs(position.y) > 2:
speed_multiplier = 2
elif abs(position.y) <= 2:
speed_multiplier = 3
if move_down:
if health > 1000:
position.y += delta*speed_multiplier
else:
if health > 1000:
position.y -= delta*speed_multiplier
var top_laser = true var top_laser = true
func shoot(): func shoot():
var laser = Laser.instance() var laser = Laser.instance()

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=27 format=2] [gd_scene load_steps=28 format=2]
[ext_resource path="res://RectangleBoss.gd" type="Script" id=1] [ext_resource path="res://RectangleBoss.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]
@ -22,6 +22,7 @@
[ext_resource path="res://art/bad/rectangle/rectangle_outside_cracked12.png" type="Texture" id=20] [ext_resource path="res://art/bad/rectangle/rectangle_outside_cracked12.png" type="Texture" id=20]
[ext_resource path="res://art/bad/rectangle/rectangle_outside_cracked13.png" type="Texture" id=21] [ext_resource path="res://art/bad/rectangle/rectangle_outside_cracked13.png" type="Texture" id=21]
[ext_resource path="res://art/bad/rectangle/rectangle_outside_cracked14.png" type="Texture" id=22] [ext_resource path="res://art/bad/rectangle/rectangle_outside_cracked14.png" type="Texture" id=22]
[ext_resource path="res://boss_long_minor_key.ogg" type="AudioStream" id=23]
[sub_resource type="SpriteFrames" id=1] [sub_resource type="SpriteFrames" id=1]
@ -51,7 +52,9 @@ animations = [ {
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" groups=[
"enemies",
]]
position = Vector2( 336.401, -1.22772 ) position = Vector2( 336.401, -1.22772 )
scale = Vector2( 0.25, 0.25 ) scale = Vector2( 0.25, 0.25 )
@ -77,6 +80,7 @@ linear_damp = 0.1
angular_damp = 1.0 angular_damp = 1.0
audio_bus_override = false audio_bus_override = false
audio_bus_name = "Master" audio_bus_name = "Master"
_sections_unfolded = [ "Collision" ]
[node name="InsideBadSprite" type="AnimatedSprite" parent="Inside" index="0"] [node name="InsideBadSprite" type="AnimatedSprite" parent="Inside" index="0"]
@ -117,6 +121,15 @@ shape = SubResource( 4 )
position = Vector2( 3427.85, 1866.16 ) position = Vector2( 3427.85, 1866.16 )
shape = SubResource( 4 ) shape = SubResource( 4 )
[node name="BossMusic" type="AudioStreamPlayer" parent="." index="5"]
stream = ExtResource( 23 )
volume_db = 4.0
pitch_scale = 1.0
autoplay = true
mix_target = 0
bus = "Master"
[connection signal="area_entered" from="Inside" to="." method="_on_Inside_area_entered"] [connection signal="area_entered" from="Inside" to="." method="_on_Inside_area_entered"]
[connection signal="body_entered" from="Inside" to="." method="_on_Inside_body_entered"] [connection signal="body_entered" from="Inside" to="." method="_on_Inside_body_entered"]

142
RectangleReturn.gd Normal file
View File

@ -0,0 +1,142 @@
extends "res://Bad.gd"
signal flash
signal boss_health
var right_laser_alive = true
var left_laser_alive = true
var move_left = true
var move_down = true
var speed_multiplier = 3
var fight_started = false
func _ready():
speed = 0
position.x = 1200
starting_health = 2800
health = starting_health
$RightArm/BadLaser.independent = false
$RightArm/BadLaser.health_multi = 5
$LeftArm/BadLaser.independent = false
$LeftArm/BadLaser.health_multi = 5
$RightArm/BadLaser.fire_speed = 0
$LeftArm/BadLaser.fire_speed = 0
$RightArm/BadLaser/Rotatable.rotation_degrees = -45
# $RightArm/BadLaser.health = 10
# $LeftArm/BadLaser.health = 10
pass
func _process(delta):
#$RightArm/Forearm.rotate(delta/10)
# print(health)
wobble(delta)
# print(position.x)
if position.x < 903:
move_left = false
# health -= 25*delta
if !fight_started:
$LeftArm/AnimationPlayer.play("block")
$RightArm/AnimationPlayer.play("block")
fight_started = true
if move_left:
position.x -= delta*20
if $LeftArm/AnimationPlayer.assigned_animation == "retract" && $LeftArm/AnimationPlayer.current_animation != "retract":
$RightArm/BadLaser.fire_speed = 50
$LeftArm/BadLaser.fire_speed = 50
if health <= 2000:
if $LeftArm/AnimationPlayer.assigned_animation != "blockL" && $LeftArm/AnimationPlayer.assigned_animation != "spinoff":
$LeftArm/AnimationPlayer.play("blockL")
if $RightArm/AnimationPlayer.assigned_animation != "blockL" && $RightArm/AnimationPlayer.assigned_animation != "spinoff":
$RightArm/AnimationPlayer.play("blockL")
$RightArm/AnimationPlayer.seek(0.5)
if health <= 2500 && health > 2000:
if $LeftArm/AnimationPlayer.assigned_animation != "retract":
$LeftArm/AnimationPlayer.play("retract")
if $RightArm/AnimationPlayer.assigned_animation != "retract":
$RightArm/AnimationPlayer.play("retract")
# health -= delta*100
if right_laser_alive:
if $RightArm/BadLaser:
# $RightArm/BadLaser.health -= delta*30
if $RightArm/BadLaser.health <= 100:
$RightArm/BadLaser.fire_speed = 150
elif $RightArm/BadLaser/AnimatedSprite.frame != 1:
$RightArm/AnimationPlayer.play("spinoff")
$RightArm/BadLaser/AnimatedSprite.frame = 1
$RightArm/BadLaser.fire_speed = 0
$RightArm/BadLaser/Line2D.visible = false
if left_laser_alive:
if $LeftArm/BadLaser:
# $LeftArm/BadLaser.health -= delta*30
if $LeftArm/BadLaser.health <= 100:
$LeftArm/BadLaser.fire_speed = 150
elif $LeftArm/BadLaser/AnimatedSprite.frame != 1:
$LeftArm/AnimationPlayer.play("spinoff")
$LeftArm/BadLaser.fire_speed = 0
$LeftArm/BadLaser/AnimatedSprite.frame = 1
$LeftArm/BadLaser/Line2D.visible = false
func hit(who):
if fight_started:
health -= who.damage/(health_multi*3.5)
print("Rectangle Return: ", health)
if get_tree().is_network_server():
rpc("bossHealth", health)
emit_signal("boss_health", health, starting_health)
func _on_LeftBadLaser_dead(money):
if left_laser_alive:
left_laser_alive = false
func _on_RightBadLaser_dead(money):
if right_laser_alive:
right_laser_alive = false
func normalFireSpeed():
# $RightArm/BadLaser.fire_speed = 25
# $LeftArm/BadLaser.fire_speed = 25
$RightArm/BadLaser.fire_speed = 10
$LeftArm/BadLaser.fire_speed = 10
if get_tree().is_network_server():
rpc("bossHealth", health)
emit_signal("boss_health", health, starting_health)
func wobble(delta):
if position.y - 305 > 4:
move_down = false
if position.y - 305 <= -4:
move_down = true
if abs(position.y - 305) > 4:
speed_multiplier = 1
elif abs(position.y - 305) > 3:
speed_multiplier = 1
elif abs(position.y - 305) > 2:
speed_multiplier = 2
elif abs(position.y - 305) <= 2:
speed_multiplier = 3
if move_down:
if health > 1000:
position.y += delta*speed_multiplier
else:
if health > 1000:
position.y -= delta*speed_multiplier
func flash():
emit_signal("flash")
func _exit_tree():
$LeftArm/BadLaser.queue_free()
$RightArm/BadLaser.queue_free()

1055
RectangleReturn.tscn Normal file

File diff suppressed because it is too large Load Diff

21
SettingsMenu.tscn Normal file
View File

@ -0,0 +1,21 @@
[gd_scene format=2]
[node name="Node" type="Node" index="0"]
[node name="ColorRect" type="ColorRect" parent="." index="0"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_right = 1022.0
margin_bottom = 600.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 )

2
TODO
View File

@ -1,4 +1,6 @@
* Get the game on F-Droid * Get the game on F-Droid
* A more explicit "wave" system
* Different types of fire. Slow enemies down? Area of effect?
* More enemy variety * More enemy variety
* A way of increasing difficulty without it suddenly becoming impossible * A way of increasing difficulty without it suddenly becoming impossible
* Mothership art * Mothership art

View File

@ -1,32 +1,67 @@
extends Node2D extends Node2D
var current_target signal upgrade_turret
var can_shoot = true var can_shoot = true
var damage = 15
var reload_time = 1.5
var current_bad_id
var current_bad = null
var current_bad_shape
var tier = 1
const RANGE_TIER = {1:Vector2(30,30), 2:Vector2(40,40), 3:Vector2(50,50), 4:Vector2(60,60)}
const DAMAGE_TIER = {1:15, 2:25, 3:50, 4:100}
const RELOAD_TIER = {1:1.5, 2:1, 3:0.75, 4:0.5}
const ANIMATION_TIER = {1:"plain", 2:"point", 3:"spike", 4:"spike"}
const ANIMATION_SCALE_TIER = {1:Vector2(.12,.12), 2:Vector2(.2,.2), 3:Vector2(.2,.2), 4:Vector2(.2,.2)}
var enemy_count = 0
export (PackedScene) var UMenu
func _ready(): func _ready():
$ReloadTimer.wait_time = RELOAD_TIER[tier]
damage = DAMAGE_TIER[tier]
$Range.scale = RANGE_TIER[tier]
$TurretSprite.animation = ANIMATION_TIER[tier]
$TurretSprite.scale = ANIMATION_SCALE_TIER[tier]
$Damage.text = str(damage)
pass pass
var zeroPoint = Vector2(-60, -1015) var zeroPoint = Vector2(-60, -1015)
func _process(delta): func _process(delta):
pass if current_bad:
var wr = weakref(current_bad)
if wr.get_ref():
if current_bad != null:
var local_pos = Vector2()
local_pos = to_local(current_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
if ("Bad" in current_bad.get_name()) && can_shoot:
$Beam.default_color.a = 200
$TurretSprite.frame = 1
if current_bad.health > damage:
current_bad.hit(self)
else:
current_bad.hit(self)
current_bad = null
$FlashTimer.start()
can_shoot = false
func entityEnteredRange(bad_id, bad, bad_shape, self_shape): func entityEnteredRange(bad_id, bad, bad_shape, self_shape):
print(bad.get_name()) #print(bad.get_name())
if ("Bad" in bad.get_name()) && can_shoot: if ("Bad" in bad.get_name() || "Black" in bad.get_name() || "Boss" in bad.get_name()) || "Prison" in bad.get_name():# && current_bad == null:
current_target = bad_id current_bad = bad
#var local_pos = zeroPoint + area.position current_bad_id = bad_id
var local_pos = Vector2() current_bad_shape = bad_shape
local_pos = to_local(bad.position) enemy_count += 1
$Beam.set_point_position(1, local_pos) #print(enemy_count)
$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(): func _on_FlashTimer_timeout():
$Beam.default_color.a = 0 $Beam.default_color.a = 0
@ -36,3 +71,31 @@ func _on_FlashTimer_timeout():
func _on_ReloadTimer_timeout(): func _on_ReloadTimer_timeout():
can_shoot = true can_shoot = true
pass # replace with function body pass # replace with function body
func entityExitedRange(bad_id, bad, bad_shape, self_shape):
if weakref(bad):
if ("Bad" in bad.get_name()):
enemy_count -= 1
if bad_id == current_bad_id:
current_bad = null
current_bad_id = null
current_bad_shape = null
func _on_OpenMenuButton_pressed():
var menu = UMenu.instance()
add_child(menu)
menu.connect("turret_upgrade", self, "upgradeTurret")
pass
func upgradeTurret():
tier += 1
$ReloadTimer.wait_time = RELOAD_TIER[tier]
damage = DAMAGE_TIER[tier]
$Range.scale = RANGE_TIER[tier]
$TurretSprite.animation = ANIMATION_TIER[tier]
$TurretSprite.scale = ANIMATION_SCALE_TIER[tier]
func relayUpgrade():
print("relayUpgrade()")
emit_signal("upgrade_turret", position)

View File

@ -1,8 +1,14 @@
[gd_scene load_steps=6 format=2] [gd_scene load_steps=13 format=2]
[ext_resource path="res://Turret.gd" type="Script" id=1] [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://Menus/InherentTurretMenu.tscn" type="PackedScene" id=2]
[ext_resource path="res://art/turret/shootin.png" type="Texture" id=3] [ext_resource path="res://art/turret/turret1.5.png" type="Texture" id=3]
[ext_resource path="res://art/turret/shootin1.5.png" type="Texture" id=4]
[ext_resource path="res://art/turret/turret.png" type="Texture" id=5]
[ext_resource path="res://art/turret/shootin.png" type="Texture" id=6]
[ext_resource path="res://art/turret/turret2.png" type="Texture" id=7]
[ext_resource path="res://art/turret/shootin2.png" type="Texture" id=8]
[ext_resource path="res://art/hand-numbs.ttf" type="DynamicFontData" id=9]
[sub_resource type="CircleShape2D" id=1] [sub_resource type="CircleShape2D" id=1]
@ -12,16 +18,35 @@ radius = 32.0821
[sub_resource type="SpriteFrames" id=2] [sub_resource type="SpriteFrames" id=2]
animations = [ { animations = [ {
"frames": [ ExtResource( 2 ), ExtResource( 3 ) ], "frames": [ ExtResource( 3 ), ExtResource( 4 ) ],
"loop": true, "loop": true,
"name": "default", "name": "point",
"speed": 5.0
}, {
"frames": [ ExtResource( 5 ), ExtResource( 6 ) ],
"loop": true,
"name": "plain",
"speed": 5.0
}, {
"frames": [ ExtResource( 7 ), ExtResource( 8 ) ],
"loop": true,
"name": "spike",
"speed": 5.0 "speed": 5.0
} ] } ]
[sub_resource type="DynamicFont" id=3]
size = 50
use_mipmaps = false
use_filter = false
font_data = ExtResource( 9 )
_sections_unfolded = [ "Font", "Settings" ]
[node name="Turret" type="Node2D"] [node name="Turret" type="Node2D"]
script = ExtResource( 1 ) script = ExtResource( 1 )
_sections_unfolded = [ "Material", "Pause", "Transform", "Visibility", "Z Index" ] _sections_unfolded = [ "Material", "Pause", "Transform", "Visibility", "Z Index" ]
UMenu = ExtResource( 2 )
[node name="Beam" type="Line2D" parent="." index="0"] [node name="Beam" type="Line2D" parent="." index="0"]
@ -30,13 +55,16 @@ points = PoolVector2Array( 26.4234, -6.61987, 2000, 0 )
width = 10.0 width = 10.0
default_color = Color( 1, 0, 0, 0 ) default_color = Color( 1, 0, 0, 0 )
texture_mode = 31 texture_mode = 31
begin_cap_mode = 2
end_cap_mode = 2
sharp_limit = 2.0 sharp_limit = 2.0
round_precision = 8 round_precision = 8
_sections_unfolded = [ "Border", "Capping" ]
[node name="Range" type="Area2D" parent="." index="1"] [node name="Range" type="Area2D" parent="." index="1"]
position = Vector2( -51.824, -18.5961 ) position = Vector2( -51.824, -18.5961 )
scale = Vector2( 30.8534, 30.8534 ) scale = Vector2( 30, 30 )
input_pickable = true input_pickable = true
gravity_vec = Vector2( 0, 1 ) gravity_vec = Vector2( 0, 1 )
gravity = 98.0 gravity = 98.0
@ -47,14 +75,16 @@ collision_layer = 31
collision_mask = 31 collision_mask = 31
audio_bus_override = false audio_bus_override = false
audio_bus_name = "Master" audio_bus_name = "Master"
_sections_unfolded = [ "Collision" ] _sections_unfolded = [ "Collision", "Transform" ]
__meta__ = { __meta__ = {
"_edit_group_": true "_edit_group_": true
} }
[node name="RangeCircle" type="CollisionShape2D" parent="Range" index="0"] [node name="RangeCircle" type="CollisionShape2D" parent="Range" index="0"]
scale = Vector2( 0.5, 0.5 )
shape = SubResource( 1 ) shape = SubResource( 1 )
_sections_unfolded = [ "Transform", "Visibility" ]
[node name="FlashTimer" type="Timer" parent="." index="2"] [node name="FlashTimer" type="Timer" parent="." index="2"]
@ -75,13 +105,65 @@ autostart = true
rotation = 0.785398 rotation = 0.785398
scale = Vector2( 0.12, 0.12 ) scale = Vector2( 0.12, 0.12 )
frames = SubResource( 2 ) frames = SubResource( 2 )
animation = "default" animation = "plain"
_sections_unfolded = [ "Transform" ] _sections_unfolded = [ "Transform" ]
[node name="OpenMenuButton" type="Button" parent="." index="5"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = -81.0
margin_top = -76.0
margin_right = 82.0
margin_bottom = 77.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="Damage" type="Label" parent="." index="6"]
visible = false
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = -32.0
margin_top = -20.0
margin_right = 13.0
margin_bottom = 20.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 2
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 4
custom_fonts/font = SubResource( 3 )
text = "15"
percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1
_sections_unfolded = [ "custom_fonts" ]
[connection signal="area_shape_entered" from="Range" to="." method="entityEnteredRange"] [connection signal="area_shape_entered" from="Range" to="." method="entityEnteredRange"]
[connection signal="area_shape_exited" from="Range" to="." method="entityExitedRange"]
[connection signal="timeout" from="FlashTimer" to="." method="_on_FlashTimer_timeout"] [connection signal="timeout" from="FlashTimer" to="." method="_on_FlashTimer_timeout"]
[connection signal="timeout" from="ReloadTimer" to="." method="_on_ReloadTimer_timeout"] [connection signal="timeout" from="ReloadTimer" to="." method="_on_ReloadTimer_timeout"]
[connection signal="pressed" from="OpenMenuButton" to="." method="_on_OpenMenuButton_pressed"]

116
TurretMenu.gd Normal file
View File

@ -0,0 +1,116 @@
#
# 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 Node
signal menu_closed
signal change_color
signal buy_turret
signal turret_range_upgrade
signal turret_damage_upgrade
signal turret_speed_upgrade
var screensize
const DEFAULT_TURRET_COST = 0#1000
const TIER_COST = {2:1000, 3:4000, 4:10000, 5:0}
func _ready():
$ColorRect.color = Color(0,0,0,.8)
if get_parent().has_method("upgradeTurret"):
$BuyTurret.visible = false
$Back.visible = false
$BuyTurret.visible = false
$Accept.visible = true
if get_parent().has_method("upgradeTurret") != true:
$Turret.visible = true
else:
$Upgrade/Button.text = str("Upgrade: $", TIER_COST[get_parent().tier+1])
if get_parent().tier >= 4:
$Upgrade/Button.visible = false
func _input(event):
if $Turret.visible == true:
if (event is InputEventScreenTouch || event is InputEventScreenDrag):
if event.position.x < 800:
$Turret.position.x = event.position.x + 100*(event.position.x/800)
$Turret.position.y = event.position.y - 100
var velocity = Vector2()
func _process(delta):
if (Input.is_action_pressed("ui_quit")):
get_tree().quit()
#if Input.is_action_pressed("ui_accept"):
# _on_Button_pressed()
if $Turret.visible == true:
velocity = Vector2()
if Input.is_action_pressed("ui_right"):
velocity.x += 1
if Input.is_action_pressed("ui_left"):
velocity.x -= 1
if Input.is_action_pressed("ui_down"):
velocity.y += 1
if Input.is_action_pressed("ui_up"):
velocity.y -= 1
if (velocity.length() > 0):
velocity = velocity.normalized() * 500
$Turret.position += velocity * delta
if get_parent().has_method("upgradeTurret") == true:
$Upgrade.visible = true
$Turret.visible = false
func _on_Button_pressed():
queue_free()
func backButton():
queue_free()
#var newTurret
#func buyTurret():
# if get_parent().money >= DEFAULT_TURRET_COST:
#var turret = preload("res://Turret.tscn").instance()
#turret.set_name(turret.get_name())
#newTurret = turret.get_name()
#pass
func acceptTurret():
if get_parent().has_method("upgradeTurret") == true:
queue_free()
else:
get_tree().paused = false
emit_signal("buy_turret", $Turret.position, DEFAULT_TURRET_COST)
#get_parent().has_turret = true
$Accept.visible = false
$Back.visible = true
$Turret.visible = false
queue_free()
func upgradeTurret():
get_tree().paused = false
if get_parent().get_parent().get_node("Player").makePurchaseFor(TIER_COST[get_parent().tier+1]):
get_parent().upgradeTurret()
get_parent().relayUpgrade()
if get_parent().tier >= 4:
$Upgrade/Button.visible = false
else:
$Upgrade/Button.text = str("Upgrade: $", TIER_COST[get_parent().tier+1])

231
TurretMenu.tscn Normal file
View File

@ -0,0 +1,231 @@
[gd_scene load_steps=9 format=2]
[ext_resource path="res://TurretMenu.gd" type="Script" id=1]
[ext_resource path="res://art/multiplayer_menu/back.png" type="Texture" id=2]
[ext_resource path="res://art/upgrade_menu/buyturrets.png" type="Texture" id=3]
[ext_resource path="res://art/multiplayer_menu/checkmark.png" type="Texture" id=4]
[ext_resource path="res://Turret.tscn" type="PackedScene" id=5]
[sub_resource type="SpriteFrames" id=1]
animations = [ {
"frames": [ ExtResource( 2 ) ],
"loop": true,
"name": "default",
"speed": 5.0
} ]
[sub_resource type="SpriteFrames" id=2]
animations = [ {
"frames": [ ExtResource( 3 ) ],
"loop": true,
"name": "default",
"speed": 5.0
} ]
[sub_resource type="SpriteFrames" id=3]
animations = [ {
"frames": [ ExtResource( 4 ) ],
"loop": true,
"name": "default",
"speed": 5.0
} ]
[node name="TurretMenu" type="Node"]
pause_mode = 2
script = ExtResource( 1 )
_sections_unfolded = [ "Pause" ]
[node name="ColorRect" type="ColorRect" parent="." index="0"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_right = 1026.0
margin_bottom = 605.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="Back" type="Node2D" parent="." index="1"]
editor/display_folded = true
position = Vector2( 50, 240 )
scale = Vector2( 0.5, 0.5 )
z_index = 2
z_as_relative = false
_sections_unfolded = [ "Transform", "Z Index" ]
__meta__ = {
"_edit_group_": true
}
[node name="Icon" type="AnimatedSprite" parent="Back" index="0"]
position = Vector2( 190, 530 )
frames = SubResource( 1 )
animation = "default"
[node name="Button" type="Button" parent="Back" index="1"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_top = 450.0
margin_right = 300.0
margin_bottom = 600.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="BuyTurret" type="Node2D" parent="." index="2"]
editor/display_folded = true
visible = false
position = Vector2( 190, 140 )
scale = Vector2( 0.25, 0.25 )
z_index = 2
_sections_unfolded = [ "Transform", "Z Index" ]
__meta__ = {
"_edit_group_": true
}
[node name="Icon" type="AnimatedSprite" parent="BuyTurret" index="0"]
position = Vector2( 190, 530 )
frames = SubResource( 2 )
animation = "default"
[node name="Button" type="Button" parent="BuyTurret" index="1"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = -360.0
margin_top = 80.0
margin_right = 720.0
margin_bottom = 960.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="Accept" type="Node2D" parent="." index="3"]
editor/display_folded = true
visible = false
position = Vector2( 820, 240 )
scale = Vector2( 0.5, 0.5 )
_sections_unfolded = [ "Transform" ]
__meta__ = {
"_edit_group_": true
}
[node name="Icon" type="AnimatedSprite" parent="Accept" index="0"]
position = Vector2( 190, 530 )
frames = SubResource( 3 )
animation = "default"
[node name="Button" type="Button" parent="Accept" index="1"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 96.0
margin_top = 412.0
margin_right = 296.0
margin_bottom = 612.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="Turret" parent="." index="4" instance=ExtResource( 5 )]
visible = false
position = Vector2( 550, 300 )
scale = Vector2( 0.25, 0.25 )
[node name="Upgrade" type="Node2D" parent="." index="5"]
visible = false
position = Vector2( 0, 181 )
[node name="Button" type="Button" parent="Upgrade" index="0"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 430.0
margin_top = 50.0
margin_right = 640.0
margin_bottom = 200.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
text = "Upgrade"
flat = false
align = 1
[node name="Icon" type="AnimatedSprite" parent="Upgrade" index="1"]
animation = "default"
[connection signal="pressed" from="Back/Button" to="." method="backButton"]
[connection signal="pressed" from="BuyTurret/Button" to="." method="buyTurret"]
[connection signal="pressed" from="Accept/Button" to="." method="acceptTurret"]
[connection signal="pressed" from="Upgrade/Button" to="." method="upgradeTurret"]

View File

@ -22,31 +22,60 @@ extends Node
signal refund signal refund
signal speed_upgrade signal speed_upgrade
signal bullet_delay_upgrade signal bullet_delay_upgrade
signal laser_damage_upgrade
signal double_laser_upgrade signal double_laser_upgrade
signal laser_penetration_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 signal taste_the_rainbow
signal unlock_turrets
signal buy_turret
signal turret_menu
const DEFAULT_TURRET_COST = 1000
var turret_cost = DEFAULT_TURRET_COST
var laser_damage_tier
var bullet_delay_tier var bullet_delay_tier
var shooting_speed_tier var shooting_speed_tier
var laser_penetration_tier
var double_lasers var double_lasers
var turrets_unlocked = false
var has_turret
func _ready(): func _ready():
get_tree().paused = true
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
if get_tree().has_network_peer():
$ColorRect.color = Color(1,1,1,0.5) if get_parent().next_laser_damage_upgrade_cost == 0:
$LaserDamageUpgrade/Cost.text = str("Sold Out!")
else: else:
$ColorRect.color = Color(0,0,0,1) $LaserDamageUpgrade/Cost.text = str("$", get_parent().next_laser_damage_upgrade_cost)
if get_parent().next_bullet_delay_upgrade_cost == 0:
$ShootingSpeedUpgrade/Cost.text = str("Sold Out!")
else:
$ShootingSpeedUpgrade/Cost.text = str("$", get_parent().next_bullet_delay_upgrade_cost)
if get_parent().next_penetration_upgrade_cost == 0:
$LaserPenetrationUpgrade/Cost.text = str("Sold Out!")
else:
$LaserPenetrationUpgrade/Cost.text = str("$", get_parent().next_penetration_upgrade_cost)
$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-1
$LaserDamageUpgrade/Icon.frame = laser_damage_tier-1
$LaserPenetrationUpgrade/Icon.frame = laser_penetration_tier-1
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"):
_on_Button_pressed() # _on_Button_pressed()
func _on_Button_pressed(): func _on_Button_pressed():
get_tree().paused = false get_tree().paused = false
@ -63,6 +92,10 @@ func _on_ShootingSpeedUpgrade_pressed():
get_tree().paused = false get_tree().paused = false
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
if get_parent().next_bullet_delay_upgrade_cost == 0:
$ShootingSpeedUpgrade/Cost.text = str("Sold Out!")
else:
$ShootingSpeedUpgrade/Cost.text = str("$", get_parent().next_bullet_delay_upgrade_cost)
func _on_DoubleLaserUpgrade_pressed(): func _on_DoubleLaserUpgrade_pressed():
get_tree().paused = false get_tree().paused = false
@ -89,7 +122,6 @@ func _on_MediumSpringGreen_pressed():
func _on_Tomato_pressed(): func _on_Tomato_pressed():
emit_signal("change_color", "ff3e2d") emit_signal("change_color", "ff3e2d")
prints("put tomato in dere")
func _on_DarkenedLawnGreen_pressed(): func _on_DarkenedLawnGreen_pressed():
emit_signal("change_color", "7bd126") emit_signal("change_color", "7bd126")
@ -97,7 +129,39 @@ func _on_DarkenedLawnGreen_pressed():
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(): func _on_Rainbow_pressed():
get_tree().paused = false get_tree().paused = false
emit_signal("taste_the_rainbow") emit_signal("taste_the_rainbow")
func _on_Laser_Damage_Upgrade():
get_tree().paused = false
emit_signal("laser_damage_upgrade")
laser_damage_tier = get_parent().laser_damage_tier
if get_parent().next_laser_damage_upgrade_cost == 0:
$LaserDamageUpgrade/Cost.text = str("Sold Out!")
else:
$LaserDamageUpgrade/Cost.text = str("$", get_parent().next_laser_damage_upgrade_cost)
func _on_Laser_Penetration_Upgrade():
get_tree().paused = false
emit_signal("laser_penetration_upgrade")
laser_penetration_tier = get_parent().laser_penetration_tier
$LaserPenetrationUpgrade/Icon.frame = laser_penetration_tier
if get_parent().next_penetration_upgrade_cost == 0:
$LaserPenetrationUpgrade/Cost.text = str("Sold Out!")
else:
$LaserPenetrationUpgrade/Cost.text = str("$", get_parent().next_penetration_upgrade_cost)
func openTurretMenu():
emit_signal("turret_menu")
func _on_TurretsButton_pressed():
get_tree().paused = false
emit_signal("unlock_turrets")
turrets_unlocked = get_parent().turrets_unlocked
"""
if get_parent().money >= turret_cost:
var turret = preload("res://Turret.tscn").instance()
turret.set_name(turret.get_name())
newTurret = turret.get_name()
"""

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=18 format=2] [gd_scene load_steps=35 format=2]
[ext_resource path="res://UpgradeMenu.gd" type="Script" id=1] [ext_resource path="res://UpgradeMenu.gd" type="Script" id=1]
[ext_resource path="res://art/upgrade_menu/shootingspeed1.png" type="Texture" id=2] [ext_resource path="res://art/upgrade_menu/shootingspeed1.png" type="Texture" id=2]
@ -6,13 +6,25 @@
[ext_resource path="res://art/upgrade_menu/shootingspeed3.png" type="Texture" id=4] [ext_resource path="res://art/upgrade_menu/shootingspeed3.png" type="Texture" id=4]
[ext_resource path="res://art/upgrade_menu/shootingspeed4.png" type="Texture" id=5] [ext_resource path="res://art/upgrade_menu/shootingspeed4.png" type="Texture" id=5]
[ext_resource path="res://art/upgrade_menu/shootingspeed5.png" type="Texture" id=6] [ext_resource path="res://art/upgrade_menu/shootingspeed5.png" type="Texture" id=6]
[ext_resource path="res://art/upgrade_menu/shipspeed1.png" type="Texture" id=7] [ext_resource path="res://art/hand-numbs.ttf" type="DynamicFontData" id=7]
[ext_resource path="res://art/upgrade_menu/shipspeed2.png" type="Texture" id=8] [ext_resource path="res://art/upgrade_menu/shipspeed1.png" type="Texture" id=8]
[ext_resource path="res://art/upgrade_menu/shipspeed3.png" type="Texture" id=9] [ext_resource path="res://art/upgrade_menu/shipspeed2.png" type="Texture" id=9]
[ext_resource path="res://art/upgrade_menu/shipspeed4.png" type="Texture" id=10] [ext_resource path="res://art/upgrade_menu/shipspeed3.png" type="Texture" id=10]
[ext_resource path="res://art/upgrade_menu/shipspeed5.png" type="Texture" id=11] [ext_resource path="res://art/upgrade_menu/shipspeed4.png" type="Texture" id=11]
[ext_resource path="res://art/ColorSelect.png" type="Texture" id=12] [ext_resource path="res://art/upgrade_menu/shipspeed5.png" type="Texture" id=12]
[ext_resource path="res://art/upgrade_menu/doublelasers.png" type="Texture" id=13] [ext_resource path="res://art/ColorSelect.png" type="Texture" id=13]
[ext_resource path="res://art/upgrade_menu/doublelasers.png" type="Texture" id=14]
[ext_resource path="res://art/upgrade_menu/shootingdamage1.png" type="Texture" id=15]
[ext_resource path="res://art/upgrade_menu/shootingdamage2.png" type="Texture" id=16]
[ext_resource path="res://art/upgrade_menu/shootingdamage3.png" type="Texture" id=17]
[ext_resource path="res://art/upgrade_menu/shootingdamage4.png" type="Texture" id=18]
[ext_resource path="res://art/upgrade_menu/shootingdamage5.png" type="Texture" id=19]
[ext_resource path="res://art/upgrade_menu/laserpenetration1.png" type="Texture" id=20]
[ext_resource path="res://art/upgrade_menu/laserpenetration2.png" type="Texture" id=21]
[ext_resource path="res://art/upgrade_menu/laserpenetration3.png" type="Texture" id=22]
[ext_resource path="res://art/upgrade_menu/laserpenetration4.png" type="Texture" id=23]
[ext_resource path="res://art/upgrade_menu/laserpenetration5.png" type="Texture" id=24]
[ext_resource path="res://art/upgrade_menu/buyturrets.png" type="Texture" id=25]
[sub_resource type="Theme" id=1] [sub_resource type="Theme" id=1]
@ -26,20 +38,63 @@ animations = [ {
"speed": 5.0 "speed": 5.0
} ] } ]
[sub_resource type="SpriteFrames" id=3] [sub_resource type="DynamicFont" id=3]
size = 40
use_mipmaps = false
use_filter = true
font_data = ExtResource( 7 )
_sections_unfolded = [ "Font", "Settings" ]
[sub_resource type="SpriteFrames" id=4]
animations = [ { animations = [ {
"frames": [ ExtResource( 7 ), ExtResource( 8 ), ExtResource( 9 ), ExtResource( 10 ), ExtResource( 11 ) ], "frames": [ ExtResource( 8 ), ExtResource( 9 ), ExtResource( 10 ), ExtResource( 11 ), ExtResource( 12 ) ],
"loop": true, "loop": true,
"name": "New Anim", "name": "New Anim",
"speed": 5.0 "speed": 5.0
} ] } ]
_sections_unfolded = [ "Resource" ] _sections_unfolded = [ "Resource" ]
[sub_resource type="SpriteFrames" id=4] [sub_resource type="SpriteFrames" id=5]
animations = [ { animations = [ {
"frames": [ ExtResource( 13 ) ], "frames": [ ExtResource( 14 ) ],
"loop": true,
"name": "default",
"speed": 5.0
} ]
[sub_resource type="SpriteFrames" id=6]
animations = [ {
"frames": [ ExtResource( 15 ), ExtResource( 16 ), ExtResource( 17 ), ExtResource( 18 ), ExtResource( 19 ) ],
"loop": true,
"name": "default",
"speed": 5.0
} ]
[sub_resource type="DynamicFont" id=7]
size = 80
use_mipmaps = false
use_filter = true
font_data = ExtResource( 7 )
_sections_unfolded = [ "Font", "Settings" ]
[sub_resource type="SpriteFrames" id=8]
animations = [ {
"frames": [ ExtResource( 20 ), ExtResource( 21 ), ExtResource( 22 ), ExtResource( 23 ), ExtResource( 24 ) ],
"loop": true,
"name": "default",
"speed": 5.0
} ]
[sub_resource type="SpriteFrames" id=9]
animations = [ {
"frames": [ ExtResource( 25 ) ],
"loop": true, "loop": true,
"name": "default", "name": "default",
"speed": 5.0 "speed": 5.0
@ -90,20 +145,21 @@ toggle_mode = false
enabled_focus_mode = 2 enabled_focus_mode = 2
shortcut = null shortcut = null
group = null group = null
text = "Resume" text = "Continue"
flat = false flat = false
align = 1 align = 1
[node name="Refund" type="Button" parent="." index="2"] [node name="Refund" type="Button" parent="." index="2"]
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_left = 860.0 margin_left = 840.0
margin_top = 250.0 margin_top = 440.0
margin_right = 984.0 margin_right = 964.0
margin_bottom = 353.0 margin_bottom = 543.0
rect_pivot_offset = Vector2( 0, 0 ) rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false rect_clip_content = false
focus_mode = 2 focus_mode = 2
@ -121,15 +177,17 @@ align = 1
[node name="ShootingSpeedUpgrade" type="Node" parent="." index="3"] [node name="ShootingSpeedUpgrade" type="Node" parent="." index="3"]
editor/display_folded = true
[node name="Button" type="Button" parent="ShootingSpeedUpgrade" index="0"] [node name="Button" type="Button" parent="ShootingSpeedUpgrade" index="0"]
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_left = 400.0 margin_left = 249.0
margin_top = 40.0 margin_top = 40.0
margin_right = 660.0 margin_right = 505.0
margin_bottom = 198.0 margin_bottom = 198.0
rect_pivot_offset = Vector2( 0, 0 ) rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false rect_clip_content = false
@ -147,13 +205,41 @@ align = 1
[node name="Icon" type="AnimatedSprite" parent="ShootingSpeedUpgrade" index="1"] [node name="Icon" type="AnimatedSprite" parent="ShootingSpeedUpgrade" index="1"]
position = Vector2( 530, 120 ) light_mask = 0
position = Vector2( 375, 120 )
scale = Vector2( 0.392712, 0.392712 ) scale = Vector2( 0.392712, 0.392712 )
frames = SubResource( 2 ) frames = SubResource( 2 )
animation = "default" animation = "default"
_sections_unfolded = [ "Visibility" ]
[node name="Cost" type="Label" parent="ShootingSpeedUpgrade" index="2"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 327.0
margin_top = 22.0
margin_right = 536.0
margin_bottom = 85.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 2
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 4
custom_fonts/font = SubResource( 3 )
custom_colors/font_color = Color( 0.272552, 1, 0.230469, 1 )
text = "$100"
percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1
_sections_unfolded = [ "custom_colors", "custom_fonts" ]
[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 visible = false
@ -182,18 +268,25 @@ align = 1
[node name="Icon" type="AnimatedSprite" parent="ShipSpeedUpgrade" index="1"] [node name="Icon" type="AnimatedSprite" parent="ShipSpeedUpgrade" index="1"]
visible = false visible = false
light_mask = 0
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( 4 )
animation = "New Anim" animation = "New Anim"
_sections_unfolded = [ "Visibility" ]
[node name="ColorSelect" type="Node2D" parent="." index="5"] [node name="ColorSelect" type="Node2D" parent="." index="5"]
editor/display_folded = true
light_mask = 0
position = Vector2( 21, 0 )
_sections_unfolded = [ "Material", "Visibility" ]
[node name="ColorSelectBG" type="Sprite" parent="ColorSelect" index="0"] [node name="ColorSelectBG" type="Sprite" parent="ColorSelect" index="0"]
position = Vector2( 150, 210 ) position = Vector2( 120, 210 )
scale = Vector2( 0.179688, 0.179687 ) scale = Vector2( 0.179688, 0.179687 )
texture = ExtResource( 12 ) texture = ExtResource( 13 )
[node name="Goldenrod" type="Button" parent="ColorSelect/ColorSelectBG" index="0"] [node name="Goldenrod" type="Button" parent="ColorSelect/ColorSelectBG" index="0"]
@ -438,7 +531,9 @@ align = 1
[node name="DoubleLaserUpgrade" type="Node2D" parent="." index="6"] [node name="DoubleLaserUpgrade" type="Node2D" parent="." index="6"]
editor/display_folded = true editor/display_folded = true
position = Vector2( -150, -10 ) light_mask = 0
position = Vector2( -320, -30 )
_sections_unfolded = [ "Transform", "Visibility" ]
__meta__ = { __meta__ = {
"_edit_group_": true "_edit_group_": true
} }
@ -447,9 +542,9 @@ __meta__ = {
position = Vector2( 959, 151.811 ) position = Vector2( 959, 151.811 )
scale = Vector2( 0.154596, 0.154596 ) scale = Vector2( 0.154596, 0.154596 )
frames = SubResource( 4 ) frames = SubResource( 5 )
animation = "default" animation = "default"
_sections_unfolded = [ "Visibility" ] _sections_unfolded = [ "Transform", "Visibility" ]
[node name="Button" type="Button" parent="DoubleLaserUpgrade" index="1"] [node name="Button" type="Button" parent="DoubleLaserUpgrade" index="1"]
@ -475,6 +570,172 @@ group = null
flat = true flat = true
align = 1 align = 1
[node name="LaserDamageUpgrade" type="Node2D" parent="." index="7"]
light_mask = 0
position = Vector2( 371, 300 )
scale = Vector2( 0.4, 0.4 )
_sections_unfolded = [ "Transform", "Visibility" ]
__meta__ = {
"_edit_group_": true
}
[node name="Icon" type="AnimatedSprite" parent="LaserDamageUpgrade" index="0"]
frames = SubResource( 6 )
animation = "default"
[node name="Button" type="Button" parent="LaserDamageUpgrade" index="1"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = -320.0
margin_top = -200.0
margin_right = 320.0
margin_bottom = 200.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="Cost" type="Label" parent="LaserDamageUpgrade" index="2"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = -79.0
margin_top = -228.0
margin_right = 161.0
margin_bottom = -165.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 2
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 4
custom_fonts/font = SubResource( 7 )
custom_colors/font_color = Color( 0.272552, 1, 0.230469, 1 )
text = "$400"
percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1
_sections_unfolded = [ "custom_colors", "custom_fonts" ]
[node name="LaserPenetrationUpgrade" type="Node2D" parent="." index="8"]
light_mask = 0
position = Vector2( 660, 300 )
scale = Vector2( 0.4, 0.4 )
_sections_unfolded = [ "Transform", "Visibility" ]
__meta__ = {
"_edit_group_": true
}
[node name="Icon" type="AnimatedSprite" parent="LaserPenetrationUpgrade" index="0"]
frames = SubResource( 8 )
animation = "default"
[node name="Button" type="Button" parent="LaserPenetrationUpgrade" index="1"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = -325.0
margin_top = -200.0
margin_right = 325.0
margin_bottom = 200.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="Cost" type="Label" parent="LaserPenetrationUpgrade" index="2"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = -98.0
margin_top = -228.0
margin_right = 142.0
margin_bottom = -165.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 2
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 4
custom_fonts/font = SubResource( 7 )
custom_colors/font_color = Color( 0.272552, 1, 0.230469, 1 )
text = "$400"
percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1
_sections_unfolded = [ "custom_colors", "custom_fonts" ]
[node name="Turrets" type="Node2D" parent="." index="9"]
editor/display_folded = true
light_mask = 0
position = Vector2( 900, 200 )
scale = Vector2( 0.2, 0.2 )
_sections_unfolded = [ "Transform", "Visibility" ]
__meta__ = {
"_edit_group_": true
}
[node name="Icon" type="AnimatedSprite" parent="Turrets" index="0"]
frames = SubResource( 9 )
animation = "default"
[node name="Button" type="Button" parent="Turrets" index="1"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = -500.0
margin_top = -500.0
margin_right = 550.0
margin_bottom = 450.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
[connection signal="pressed" from="Resume" to="." method="_on_Button_pressed"] [connection signal="pressed" from="Resume" to="." method="_on_Button_pressed"]
[connection signal="pressed" from="Refund" to="." method="_on_Refund_pressed"] [connection signal="pressed" from="Refund" to="." method="_on_Refund_pressed"]
@ -505,4 +766,10 @@ align = 1
[connection signal="pressed" from="DoubleLaserUpgrade/Button" to="." method="_on_DoubleLaserUpgrade_pressed"] [connection signal="pressed" from="DoubleLaserUpgrade/Button" to="." method="_on_DoubleLaserUpgrade_pressed"]
[connection signal="pressed" from="LaserDamageUpgrade/Button" to="." method="_on_Laser_Damage_Upgrade"]
[connection signal="pressed" from="LaserPenetrationUpgrade/Button" to="." method="_on_Laser_Penetration_Upgrade"]
[connection signal="pressed" from="Turrets/Button" to="." method="_on_TurretsButton_pressed"]

BIN
art/backgrounds/SunBG.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

BIN
art/backgrounds/orange.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 173 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 KiB

After

Width:  |  Height:  |  Size: 164 KiB

627
art/hand-numbs.sfd Normal file
View File

@ -0,0 +1,627 @@
SplineFontDB: 3.0
FontName: Untitled1
FullName: Untitled1
FamilyName: Untitled1
Weight: Regular
Copyright: Copyright (c) 2018, Sage
UComments: "2018-6-23: Created with FontForge (http://fontforge.org)"
Version: 001.000
ItalicAngle: 0
UnderlinePosition: -100
UnderlineWidth: 50
Ascent: 800
Descent: 200
InvalidEm: 0
LayerCount: 2
Layer: 0 0 "Back" 1
Layer: 1 0 "Fore" 0
XUID: [1021 912 -219086254 5845647]
StyleMap: 0x0000
FSType: 0
OS2Version: 0
OS2_WeightWidthSlopeOnly: 0
OS2_UseTypoMetrics: 1
CreationTime: 1529764691
ModificationTime: 1529767606
OS2TypoAscent: 0
OS2TypoAOffset: 1
OS2TypoDescent: 0
OS2TypoDOffset: 1
OS2TypoLinegap: 90
OS2WinAscent: 0
OS2WinAOffset: 1
OS2WinDescent: 0
OS2WinDOffset: 1
HheadAscent: 0
HheadAOffset: 1
HheadDescent: 0
HheadDOffset: 1
MarkAttachClasses: 1
DEI: 91125
Encoding: ISO8859-1
UnicodeInterp: none
NameList: AGL For New Fonts
DisplaySize: -48
AntiAlias: 1
FitToEm: 0
WidthSeparation: 150
WinInfo: 0 38 14
BeginPrivate: 0
EndPrivate
AnchorClass2: "hhh"""
BeginChars: 256 13
StartChar: A
Encoding: 65 65 0
Width: 150
VWidth: 0
Flags: HW
LayerCount: 2
Fore
Validated: 1
EndChar
StartChar: zero
Encoding: 48 48 1
Width: 649
VWidth: 0
Flags: HW
HStem: 47 118<297.936 415.761> 651 117<224.578 442.698>
VStem: 52 116<376.505 571.394> 475 118<302.688 611.105>
LayerCount: 2
Fore
SplineSet
263 766 m 0
273 767 290 768 309 768 c 0
345 768 389 766 411 762 c 0
530 742 581 683 591 553 c 0
592 541 593 527 593 511 c 0
593 414 572 264 546 185 c 0
534 148 526 133 501 103 c 0
469 66 425 47 373 47 c 0
347 47 319 51 290 61 c 0
252 74 191 108 171 129 c 0
146 154 121 208 92 295 c 0
61 388 52 431 52 480 c 0
52 485 52 490 52 495 c 0
58 607 112 709 186 746 c 0
197 751 234 761 263 766 c 0
409 643 m 0
391 648 341 651 307 651 c 0
296 651 287 651 281 650 c 0
223 641 205 624 182 551 c 0
173 525 168 504 168 481 c 0
168 445 180 404 205 329 c 0
236 237 247 215 269 204 c 0
278 200 290 192 296 188 c 0
314 176 351 165 374 165 c 0
395 165 398 166 411 180 c 0
429 200 439 227 453 299 c 0
468 380 471 410 474 483 c 0
474 496 475 508 475 519 c 0
475 568 470 593 459 612 c 0
449 628 438 635 409 643 c 0
EndSplineSet
Validated: 1
EndChar
StartChar: one
Encoding: 49 49 2
Width: 437
VWidth: 0
Flags: HW
LayerCount: 2
Fore
SplineSet
176 725 m 0
185 730 193 732 202 732 c 0
221 732 239 720 254 695 c 0
262 682 266 674 266 641 c 0
266 618 264 582 261 523 c 0
258 477 254 383 252 315 c 0
250 247 247 179 246 165 c 2
243 138 l 1
295 138 l 2
334 138 349 137 360 132 c 0
380 122 391 103 391 82 c 0
391 65 383 48 367 36 c 0
356 28 349 27 288 25 c 0
251 23 211 20 199 17 c 0
187 15 156 12 130 12 c 0
90 12 82 13 71 20 c 0
53 30 43 48 43 68 c 0
43 101 66 122 104 125 c 0
125 127 128 129 130 137 c 0
131 142 134 203 136 273 c 0
138 343 141 430 143 466 c 0
145 503 146 533 146 533 c 0
145 534 139 532 132 530 c 0
127 528 122 527 117 527 c 0
97 527 78 540 68 559 c 0
64 567 62 576 62 584 c 0
62 593 65 602 69 611 c 0
79 630 160 717 176 725 c 0
EndSplineSet
Validated: 1
EndChar
StartChar: two
Encoding: 50 50 3
Width: 711
VWidth: 0
Flags: HW
LayerCount: 2
Fore
SplineSet
198 739 m 0
207 743 218 745 231 745 c 0
258 745 292 737 325 721 c 0
344 712 360 699 381 676 c 0
472 579 527 437 527 302 c 2
527 270 l 1
548 257 l 2
575 241 632 186 649 161 c 0
657 148 661 136 661 124 c 0
661 113 658 104 653 94 c 0
641 75 621 64 601 64 c 0
594 64 586 65 579 68 c 0
573 71 550 90 528 111 c 2
489 150 l 1
480 137 l 2
464 115 425 76 408 64 c 0
378 43 336 32 298 32 c 0
288 32 278 32 269 34 c 0
216 44 114 98 86 132 c 0
68 152 51 193 48 219 c 0
47 224 47 228 47 232 c 0
47 280 76 322 122 338 c 0
137 344 153 347 174 347 c 0
215 347 274 334 380 305 c 0
393 301 404 299 405 300 c 0
405 300 406 302 406 304 c 0
406 322 396 388 390 412 c 0
371 476 328 555 289 594 c 0
272 612 242 625 218 625 c 0
203 625 182 638 171 655 c 0
166 663 164 672 164 682 c 0
164 704 177 728 198 739 c 0
270 206 m 0
225 217 198 223 185 223 c 0
179 223 176 222 176 219 c 0
176 203 271 156 303 156 c 0
320 156 352 170 354 179 c 0
355 182 352 185 347 186 c 0
341 187 306 196 270 206 c 0
EndSplineSet
Validated: 1
EndChar
StartChar: three
Encoding: 51 51 4
Width: 538
VWidth: 0
Flags: HW
LayerCount: 2
Fore
SplineSet
194 736 m 0
208 743 217 745 243 745 c 0
282 745 311 738 351 718 c 0
387 701 419 672 432 643 c 0
439 629 442 608 442 586 c 0
442 550 434 508 418 474 c 0
411 459 405 445 405 444 c 0
405 442 410 439 415 436 c 0
460 416 486 364 486 299 c 0
486 289 485 278 484 267 c 0
476 200 466 171 436 126 c 0
407 83 352 46 295 32 c 0
268 25 212 21 172 21 c 0
160 21 149 21 141 22 c 0
79 31 44 56 44 89 c 0
44 97 46 106 50 115 c 0
59 134 77 145 97 145 c 0
105 145 114 143 122 140 c 0
135 135 163 132 194 132 c 0
224 132 255 135 272 140 c 0
314 153 344 178 359 214 c 0
369 236 375 276 375 303 c 0
375 315 374 325 371 330 c 0
366 340 341 349 322 349 c 0
310 349 300 346 283 335 c 0
255 317 230 308 208 308 c 0
186 308 169 317 155 336 c 0
149 343 147 354 147 366 c 0
147 379 150 393 158 403 c 0
171 421 200 437 236 448 c 0
260 456 267 460 287 479 c 0
313 505 324 527 331 564 c 0
332 571 333 577 333 582 c 0
333 601 324 609 297 622 c 0
274 632 268 633 232 633 c 0
187 634 177 638 167 660 c 0
163 669 161 678 161 686 c 0
161 707 173 725 194 736 c 0
EndSplineSet
Validated: 1
EndChar
StartChar: four
Encoding: 52 52 5
Width: 517
VWidth: 0
Flags: HW
HStem: 421 118<217 318.453>
VStem: 156 107<539.012 774.158> 354 106<37.104 191.677> 391 106<570.5 764.367> 403 109<243.476 456 570 748.169>
CounterMasks: 1 58
LayerCount: 2
Fore
SplineSet
299 460 m 4xc8
291 460 128 421 120 421 c 4
114 421 100 425 90 430 c 4
68 441 56 460 56 482 c 4
56 483 56 484 56 485 c 4
56 494 56 558 56 628 c 4
56 767 57 765 82 780 c 4
89 784 97 787 106 787 c 4
126 787 147 775 156 756 c 4
162 744 163 731 163 641 c 4
163 555 164 539 169 539 c 4
171 539 193 544 216 550 c 4
240 556 268 563 281 565 c 6
303 570 l 5
303 602 l 5xc8
303 633 296 688 291 722 c 5
291 727 l 6
291 755 313 776 342 776 c 4
367 776 389 759 397 734 c 4xd0
402 721 411 614 411 571 c 4
411 568 416 564 426 561 c 4
447 555 457 548 463 534 c 4
467 526 469 518 469 510 c 4
469 485 451 463 424 458 c 6
412 456 l 5
412 371 l 5xc8
402 276 385 210 372 146 c 4
367 122 360 94 360 82 c 4
360 51 337 26 303 26 c 4
273 26 254 46 254 81 c 4xe0
254 100 258 127 266 164 c 4
281 235 303 356 303 442 c 4
303 457 304 460 299 460 c 4xc8
EndSplineSet
Validated: 1
EndChar
StartChar: five
Encoding: 53 53 6
Width: 493
VWidth: 0
Flags: HW
LayerCount: 2
Fore
SplineSet
252 730 m 0
262 732 276 735 283 735 c 0
283 735 284 735 284 735 c 0
313 735 331 711 331 688 c 0
331 672 324 657 308 647 c 0
290 636 253 629 210 629 c 0
166 629 155 627 155 618 c 0
155 618 155 617 155 617 c 0
155 614 161 584 169 552 c 0
176 519 183 489 184 485 c 0
185 479 189 478 271 475 c 0
369 471 378 469 405 444 c 0
431 421 443 392 443 354 c 0
443 345 442 335 441 325 c 0
436 288 427 260 412 235 c 0
380 183 362 156 342 131 c 0
300 79 246 51 190 51 c 0
176 51 162 52 148 56 c 0
113 65 73 92 62 114 c 0
59 120 57 129 57 137 c 0
57 146 59 155 63 161 c 0
73 176 87 184 102 184 c 0
113 184 124 180 135 172 c 0
158 155 174 147 190 147 c 0
201 147 212 151 225 157 c 0
250 170 267 189 304 246 c 0
337 298 344 314 345 343 c 0
345 347 345 350 345 353 c 0
345 376 338 375 262 379 c 0
234 380 217 381 206 381 c 0
188 381 184 379 174 375 c 0
164 370 154 368 145 368 c 0
126 368 111 378 103 396 c 0
100 403 94 426 91 446 c 0
86 485 66 570 58 593 c 0
53 607 51 620 51 632 c 0
51 665 69 690 104 708 c 0
131 721 151 725 197 725 c 0
217 725 242 727 252 730 c 0
EndSplineSet
Validated: 1
EndChar
StartChar: six
Encoding: 54 54 7
Width: 435
VWidth: 0
Flags: HW
LayerCount: 2
Fore
SplineSet
208 736 m 0
214 739 220 741 226 741 c 0
232 741 239 739 246 735 c 0
263 726 272 711 272 693 c 0
272 686 271 678 268 671 c 0
266 665 254 652 243 642 c 0
207 613 187 590 180 575 c 0
175 565 173 547 170 508 c 0
169 487 168 468 168 459 c 0
168 456 168 454 168 454 c 0
169 453 175 454 182 456 c 0
191 459 206 460 221 460 c 0
240 460 260 458 272 454 c 0
329 435 359 406 375 356 c 0
380 342 382 323 382 302 c 0
382 279 379 254 373 232 c 0
346 125 306 77 234 63 c 0
227 62 219 61 211 61 c 0
159 61 102 89 84 126 c 0
68 156 60 217 60 290 c 0
60 315 61 341 63 368 c 0
66 404 71 466 73 504 c 0
76 543 80 583 83 592 c 0
89 614 105 642 125 665 c 0
144 686 194 729 208 736 c 0
256 356 m 0
246 360 235 363 223 363 c 0
211 363 199 360 188 356 c 0
159 346 157 349 157 308 c 0
157 303 157 297 157 291 c 0
157 244 164 181 170 171 c 0
174 164 191 160 208 160 c 0
218 160 229 161 235 165 c 0
260 180 285 251 285 299 c 0
285 302 285 305 285 307 c 0
283 336 276 348 256 356 c 0
EndSplineSet
Validated: 1
EndChar
StartChar: seven
Encoding: 55 55 8
Width: 531
VWidth: 0
Flags: HW
LayerCount: 2
Fore
SplineSet
311 765 m 0
331 767 349 768 364 768 c 0
410 768 438 759 459 737 c 0
474 721 481 704 481 686 c 0
481 673 477 659 470 645 c 0
466 636 442 598 416 559 c 0
321 414 301 377 265 282 c 0
254 253 239 213 230 194 c 0
222 176 207 140 196 116 c 0
164 40 157 32 125 29 c 0
124 29 123 29 122 29 c 0
92 29 67 53 67 83 c 0
67 98 84 144 109 198 c 0
128 240 141 270 168 343 c 0
198 422 240 498 320 617 c 0
331 635 341 651 341 653 c 0
341 653 339 653 336 653 c 0
328 653 309 652 288 650 c 0
268 649 230 648 195 648 c 0
182 648 170 648 158 648 c 0
84 649 78 650 67 658 c 0
51 669 44 685 44 702 c 0
44 722 54 741 75 752 c 0
90 760 95 761 189 761 c 0
243 762 297 763 311 765 c 0
EndSplineSet
Validated: 1
EndChar
StartChar: eight
Encoding: 56 56 9
Width: 559
VWidth: 0
Flags: HW
LayerCount: 2
Fore
SplineSet
307 752 m 0
328 758 348 764 352 764 c 0
357 765 369 761 381 757 c 0
463 730 507 680 507 617 c 0
507 608 506 599 504 589 c 0
495 547 471 502 437 465 c 2
418 445 l 1
431 426 l 2
458 391 472 355 476 312 c 0
476 309 476 305 476 301 c 0
476 258 457 193 430 154 c 0
410 123 367 78 339 60 c 0
293 30 249 15 208 15 c 0
168 15 131 29 99 58 c 0
78 77 68 93 57 124 c 0
49 145 48 154 48 189 c 0
48 222 49 233 55 251 c 0
72 299 96 330 170 391 c 0
194 410 212 427 212 430 c 0
211 431 201 435 190 438 c 0
162 447 133 475 125 501 c 0
122 513 120 531 120 548 c 0
120 568 122 588 127 601 c 0
141 641 189 691 246 725 c 0
259 733 287 745 307 752 c 0
376 652 m 0
367 657 360 659 353 659 c 0
347 659 340 658 331 655 c 0
309 648 291 638 264 616 c 0
233 591 218 570 218 549 c 0
218 531 220 530 264 523 c 0
283 521 305 516 312 513 c 0
320 510 330 508 334 509 c 0
356 515 407 588 407 615 c 0
407 628 396 642 376 652 c 0
366 344 m 0
361 353 351 368 344 375 c 2
331 390 l 1
312 377 l 2
291 363 200 287 179 265 c 0
156 242 147 221 147 190 c 0
147 161 152 145 166 133 c 0
180 119 190 115 208 115 c 0
208 115 209 115 209 115 c 0
264 115 337 175 364 242 c 0
373 265 375 274 375 298 c 0
375 323 374 330 366 344 c 0
EndSplineSet
Validated: 1
EndChar
StartChar: nine
Encoding: 57 57 10
Width: 436
VWidth: 0
Flags: HW
LayerCount: 2
Fore
SplineSet
224 753 m 0
235 756 248 758 260 758 c 0
286 758 312 751 328 737 c 0
333 734 344 725 353 718 c 0
372 704 380 696 380 677 c 0
380 665 377 647 371 619 c 0
365 589 358 550 354 532 c 0
351 514 346 492 343 483 c 0
340 473 339 468 339 460 c 0
339 454 339 447 340 437 c 0
342 421 347 390 351 368 c 0
357 333 358 321 358 269 c 0
358 165 354 57 350 47 c 0
344 35 331 27 316 25 c 0
315 25 315 25 314 25 c 0
292 25 277 41 273 68 c 0
273 70 273 75 273 81 c 0
273 98 274 127 275 157 c 0
277 202 278 236 278 264 c 0
278 300 276 326 272 349 c 0
269 368 266 385 265 387 c 0
264 391 258 392 234 392 c 0
206 392 203 392 186 400 c 0
162 412 148 421 124 444 c 0
91 475 70 505 56 542 c 0
51 556 48 570 48 585 c 0
48 609 55 632 68 651 c 0
96 694 160 735 224 753 c 0
269 677 m 0
266 678 263 678 261 678 c 0
256 678 250 676 233 671 c 0
192 658 149 628 135 606 c 0
131 599 129 592 129 585 c 0
129 576 132 568 137 557 c 0
150 530 189 490 214 477 c 0
222 473 228 470 233 470 c 0
238 470 242 473 247 478 c 0
254 485 255 487 256 518 c 0
257 536 261 566 265 585 c 0
269 604 273 632 274 647 c 0
275 675 275 675 269 677 c 0
EndSplineSet
Validated: 1
EndChar
StartChar: dollar
Encoding: 36 36 11
Width: 487
VWidth: 0
Flags: HW
LayerCount: 2
Fore
SplineSet
250 756 m 0
261 762 268 762 280 757 c 0
292 752 302 740 307 725 c 0
309 719 310 714 310 708 c 0
310 701 309 692 307 679 c 2
305 669 l 1
318 673 l 2
333 677 343 679 353 679 c 0
358 679 364 678 369 677 c 0
395 672 411 653 411 629 c 0
411 608 392 591 372 591 c 0
367 591 361 592 356 595 c 0
349 599 347 599 333 594 c 0
325 592 314 588 310 586 c 2
302 582 l 1
304 523 l 2
305 490 306 463 307 462 c 0
307 462 323 459 342 457 c 0
382 452 390 450 407 434 c 0
429 414 438 392 440 354 c 0
440 351 440 348 440 344 c 0
440 309 430 280 404 244 c 0
388 221 345 180 327 171 c 2
311 163 l 1
312 112 l 2
312 104 312 98 312 92 c 0
312 53 309 44 295 34 c 0
288 30 281 27 274 27 c 0
259 27 246 35 239 49 c 0
233 59 233 66 233 112 c 2
233 164 l 1
226 166 l 2
193 173 165 185 124 208 c 0
112 215 94 224 84 228 c 0
65 235 51 248 48 260 c 0
47 263 47 267 47 270 c 0
47 288 57 306 71 314 c 0
76 317 82 318 87 318 c 0
98 318 109 313 118 304 c 0
129 294 216 248 226 248 c 0
229 248 230 254 230 273 c 0
230 288 229 310 228 343 c 2
227 387 l 1
195 391 l 2
156 395 148 397 131 408 c 0
116 418 106 435 106 451 c 0
106 478 158 559 205 606 c 2
224 625 l 1
226 661 l 2
227 681 228 706 229 716 c 0
229 738 235 749 250 756 c 0
353 374 m 0
352 376 340 378 328 379 c 2
307 381 l 1
308 320 l 2
308 287 310 259 310 259 c 0
311 258 318 265 326 273 c 0
344 292 360 323 362 340 c 0
362 341 362 343 362 344 c 0
362 356 358 370 353 374 c 0
EndSplineSet
Validated: 1
EndChar
StartChar: ydieresis
Encoding: 255 255 12
Width: 150
VWidth: 0
Flags: HW
LayerCount: 2
Fore
Validated: 1
EndChar
EndChars
EndSplineFont

BIN
art/hand-numbs.ttf Normal file

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 194 KiB

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 204 KiB

After

Width:  |  Height:  |  Size: 209 KiB

BIN
art/menu/back.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Some files were not shown because too many files have changed in this diff Show More