commit 509eeffe1e8670d0be12d3846196be9b2edd3a17 Author: Jan Groß Date: Sun Nov 12 16:56:20 2017 +0100 Initial files diff --git a/animations/btn_in.tres b/animations/btn_in.tres new file mode 100644 index 0000000..322be32 --- /dev/null +++ b/animations/btn_in.tres @@ -0,0 +1,19 @@ +[gd_resource type="Animation" format=1] + +[resource] + +resource/name = "anim_in" +length = 0.7 +loop = false +step = 0.1 +tracks/0/type = "value" +tracks/0/path = NodePath(".:rect/pos") +tracks/0/interp = 1 +tracks/0/imported = false +tracks/0/keys = { +"times": FloatArray( 0, 0.4, 0.7 ), +"transitions": FloatArray( 0.353553, 2.07053, 0.25 ), +"update": 0, +"values": [ Vector2( 83, 263 ), Vector2( 83, 26 ), Vector2( 83, 54 ) ] +} + diff --git a/bacground.kra b/bacground.kra new file mode 100644 index 0000000..ee9cb68 Binary files /dev/null and b/bacground.kra differ diff --git a/colors/ramp_asteroid.tres b/colors/ramp_asteroid.tres new file mode 100644 index 0000000..9bb8f22 --- /dev/null +++ b/colors/ramp_asteroid.tres @@ -0,0 +1,7 @@ +[gd_resource type="ColorRamp" format=1] + +[resource] + +offsets = FloatArray( 0, 0.111111, 0.175439, 0.380117, 1 ) +colors = ColorArray( 1, 0, 0.09375, 0.114863, 0.980469, 0, 0.160858, 1, 1, 0, 0, 1, 1, 0.852417, 0.273438, 1, 0.933631, 1, 0.46905, 1 ) + diff --git a/colors/smoke.tres b/colors/smoke.tres new file mode 100644 index 0000000..3a72070 --- /dev/null +++ b/colors/smoke.tres @@ -0,0 +1,7 @@ +[gd_resource type="ColorRamp" format=1] + +[resource] + +offsets = FloatArray( 0, 0.154696, 0.309392, 0.58011, 0.928177, 1 ) +colors = ColorArray( 1, 1, 1, 0, 0.421875, 0.304871, 0.304871, 0.563536, 0.333216, 0.251635, 0.251635, 1, 0.129032, 0.129032, 0.129032, 1, 0.15625, 0.0720215, 0.0720215, 1, 0.0390625, 0.0376892, 0.0376892, 0 ) + diff --git a/engine.cfg b/engine.cfg new file mode 100644 index 0000000..4983b55 --- /dev/null +++ b/engine.cfg @@ -0,0 +1,40 @@ +[application] + +name="Tactical Ballistic Retro Missile Commander, Blin" +main_scene="res://stages/main_stage.tscn" +icon="res://icon.png" + +[autoload] + +game_manager="*res://scripts/game_manager.gd" + +[display] + +width=411 +height=256 +test_width=822 +test_height=512 +stretch_mode="2d" + +[input] + +slow_motion=[key(Return)] +fire=[key(Space), mbutton(0, 1)] +Start=[jbutton(0, 6)] +B=[jbutton(0, 8)] +Coin=[jbutton(0, 7)] +A=[jbutton(0, 9)] +Coin2=[jbutton(0, 4)] +Select=[jbutton(0, 5)] +Y=[jbutton(0, 10)] +X=[jbutton(0, 11)] +Blin1=[jbutton(0, 0)] +Blin2=[jbutton(0, 2)] +J_up=[jaxis(0, 2)] +J_down=[jaxis(0, 3)] +J_left=[jaxis(0, 0)] +J_right=[jaxis(0, 1)] + +[physics_2d] + +motion_fix_enabled=true diff --git a/export.cfg b/export.cfg new file mode 100644 index 0000000..a990f0c --- /dev/null +++ b/export.cfg @@ -0,0 +1,341 @@ +[convert_images] + +action="none" +compress_quality=0.7 +formats="png" +shrink=1.0 + +[convert_samples] + +action="none" +max_hz=44100 +trim=false + +[convert_scenes] + +convert_text_scenes=true + +[export_filter] + +filter="" +filter_exclude="" +type="resources" + +[platform:Android] + +apk_expansion/SALT="" +apk_expansion/enable=false +apk_expansion/public_key="" +architecture/arm=true +architecture/x86=false +command_line/extra_args="" +custom_package/debug="" +custom_package/release="" +debug/debugging_enabled=false +keystore/release="/home/minzkraut/Documents/Godot/minzkraut123456.keystore" +keystore/release_password="123456" +keystore/release_user="minzkraut" +one_click_deploy/clear_previous_install=true +package/icon="res://sprites/logo.png" +package/name="TBM Commander" +package/signed=true +package/unique_name="com.minzkraut.tbmc" +permissions/access_checkin_properties=false +permissions/access_coarse_location=false +permissions/access_fine_location=false +permissions/access_location_extra_commands=false +permissions/access_mock_location=false +permissions/access_network_state=false +permissions/access_surface_flinger=false +permissions/access_wifi_state=false +permissions/account_manager=false +permissions/add_voicemail=false +permissions/authenticate_accounts=false +permissions/battery_stats=false +permissions/bind_accessibility_service=false +permissions/bind_appwidget=false +permissions/bind_device_admin=false +permissions/bind_input_method=false +permissions/bind_nfc_service=false +permissions/bind_notification_listener_service=false +permissions/bind_print_service=false +permissions/bind_remoteviews=false +permissions/bind_text_service=false +permissions/bind_vpn_service=false +permissions/bind_wallpaper=false +permissions/bluetooth=false +permissions/bluetooth_admin=false +permissions/bluetooth_privileged=false +permissions/brick=false +permissions/broadcast_package_removed=false +permissions/broadcast_sms=false +permissions/broadcast_sticky=false +permissions/broadcast_wap_push=false +permissions/call_phone=false +permissions/call_privileged=false +permissions/camera=false +permissions/capture_audio_output=false +permissions/capture_secure_video_output=false +permissions/capture_video_output=false +permissions/change_component_enabled_state=false +permissions/change_configuration=false +permissions/change_network_state=false +permissions/change_wifi_multicast_state=false +permissions/change_wifi_state=false +permissions/clear_app_cache=false +permissions/clear_app_user_data=false +permissions/control_location_updates=false +permissions/delete_cache_files=false +permissions/delete_packages=false +permissions/device_power=false +permissions/diagnostic=false +permissions/disable_keyguard=false +permissions/dump=false +permissions/expand_status_bar=false +permissions/factory_test=false +permissions/flashlight=false +permissions/force_back=false +permissions/get_accounts=false +permissions/get_package_size=false +permissions/get_tasks=false +permissions/get_top_activity_info=false +permissions/global_search=false +permissions/hardware_test=false +permissions/inject_events=false +permissions/install_location_provider=false +permissions/install_packages=false +permissions/install_shortcut=false +permissions/internal_system_window=false +permissions/internet=false +permissions/kill_background_processes=false +permissions/location_hardware=false +permissions/manage_accounts=false +permissions/manage_app_tokens=false +permissions/manage_documents=false +permissions/master_clear=false +permissions/media_content_control=false +permissions/modify_audio_settings=false +permissions/modify_phone_state=false +permissions/mount_format_filesystems=false +permissions/mount_unmount_filesystems=false +permissions/nfc=false +permissions/persistent_activity=false +permissions/process_outgoing_calls=false +permissions/read_calendar=false +permissions/read_call_log=false +permissions/read_contacts=false +permissions/read_external_storage=false +permissions/read_frame_buffer=false +permissions/read_history_bookmarks=false +permissions/read_input_state=false +permissions/read_logs=false +permissions/read_phone_state=false +permissions/read_profile=false +permissions/read_sms=false +permissions/read_social_stream=false +permissions/read_sync_settings=false +permissions/read_sync_stats=false +permissions/read_user_dictionary=false +permissions/reboot=false +permissions/receive_boot_completed=false +permissions/receive_mms=false +permissions/receive_sms=false +permissions/receive_wap_push=false +permissions/record_audio=false +permissions/reorder_tasks=false +permissions/restart_packages=false +permissions/send_respond_via_message=false +permissions/send_sms=false +permissions/set_activity_watcher=false +permissions/set_alarm=false +permissions/set_always_finish=false +permissions/set_animation_scale=false +permissions/set_debug_app=false +permissions/set_orientation=false +permissions/set_pointer_speed=false +permissions/set_preferred_applications=false +permissions/set_process_limit=false +permissions/set_time=false +permissions/set_time_zone=false +permissions/set_wallpaper=false +permissions/set_wallpaper_hints=false +permissions/signal_persistent_processes=false +permissions/status_bar=false +permissions/subscribed_feeds_read=false +permissions/subscribed_feeds_write=false +permissions/system_alert_window=false +permissions/transmit_ir=false +permissions/uninstall_shortcut=false +permissions/update_device_stats=false +permissions/use_credentials=false +permissions/use_sip=false +permissions/vibrate=false +permissions/wake_lock=false +permissions/write_apn_settings=false +permissions/write_calendar=false +permissions/write_call_log=false +permissions/write_contacts=false +permissions/write_external_storage=false +permissions/write_gservices=false +permissions/write_history_bookmarks=false +permissions/write_profile=false +permissions/write_secure_settings=false +permissions/write_settings=false +permissions/write_sms=false +permissions/write_social_stream=false +permissions/write_sync_settings=false +permissions/write_user_dictionary=false +screen/immersive_mode=true +screen/orientation=0 +screen/support_large=true +screen/support_normal=true +screen/support_small=true +screen/support_xlarge=true +screen/use_32_bits_view=true +user_permissions/0="" +user_permissions/1="" +user_permissions/10="" +user_permissions/11="" +user_permissions/12="" +user_permissions/13="" +user_permissions/14="" +user_permissions/15="" +user_permissions/16="" +user_permissions/17="" +user_permissions/18="" +user_permissions/19="" +user_permissions/2="" +user_permissions/3="" +user_permissions/4="" +user_permissions/5="" +user_permissions/6="" +user_permissions/7="" +user_permissions/8="" +user_permissions/9="" +version/code=4 +version/name="2.3" + +[platform:BlackBerry 10] + +debug/debugging_enabled=true +package/category="core.games" +package/custom_template="" +package/description="Game made with Godot Engine" +package/icon="" +package/name="" +package/unique_name="com.godot.noname" +release/author="Cert. Name" +release/author_id="Cert. ID" +version/code=1 +version/name="1.0" + +[platform:HTML5] + +browser/enable_run=false +custom_package/debug="" +custom_package/release="" +debug/debugging_enabled=true +html/controls_enabled=true +html/font_family="arial,sans-serif" +html/head_include="" +html/style_include="" +html/title="" +options/memory_size=3 + +[platform:Linux X11] + +binary/64_bits=false +custom_binary/debug="" +custom_binary/release="/home/minzkraut/.godot/templates/Godot_2.1.4_ReleaseBuild_RaspberryPi3" +debug/debugging_enabled=false +resources/bundle_dependencies_(for_optical_disc)=true +resources/pack_mode=1 + +[platform:Mac OSX] + +application/bits_mode=0 +application/copyright="" +application/icon="" +application/identifier="org.godotengine.macgame" +application/info="Made with Godot Engine" +application/name="" +application/short_version="1.0" +application/signature="godotmacgame" +application/version="1.0" +custom_package/debug="" +custom_package/release="" +debug/debugging_enabled=true +display/high_res=false + +[platform:Windows Desktop] + +binary/64_bits=true +custom_binary/debug="" +custom_binary/release="" +debug/debugging_enabled=true +resources/bundle_dependencies_(for_optical_disc)=true +resources/pack_mode=1 + +[platform:Windows Universal] + +architecture/target=1 +capabilities/all_Joyn=false +capabilities/appointments=false +capabilities/blocked_Chat_Messages=false +capabilities/bluetooth=false +capabilities/chat=false +capabilities/code_Generation=false +capabilities/contacts=false +capabilities/enterprise_Authentication=false +capabilities/internet_Client=false +capabilities/internet_Client_Server=false +capabilities/location=false +capabilities/microphone=false +capabilities/music_Library=false +capabilities/objects_3D=false +capabilities/phone_Call=false +capabilities/pictures_Library=false +capabilities/private_Network_Client_Server=false +capabilities/proximity=false +capabilities/removable_Storage=false +capabilities/shared_User_Certificates=false +capabilities/user_Account_Information=false +capabilities/videos_Library=false +capabilities/voip_Call=false +capabilities/webcam=false +command_line/extra_args="" +custom_package/debug="" +custom_package/release="" +debug/debugging_enabled=true +identity/product_guid="00000000-0000-0000-0000-000000000000" +identity/publisher_guid="00000000-0000-0000-0000-000000000000" +images/background_color="transparent" +images/splash_screen=null +images/square150x150_logo=null +images/square310x310_logo=null +images/square44x44_logo=null +images/square71x71_logo=null +images/store_logo=null +images/wide310x150_logo=null +orientation/landscape=true +orientation/landscape_flipped=true +orientation/portrait=true +orientation/portrait_flipped=true +package/description="Godot Engine" +package/display_name="" +package/publisher="CN=GodotEngine" +package/publisher_display_name="Godot Engine" +package/short_name="Godot" +package/unique_name="Godot.Engine" +tiles/show_name_on_square150x150=false +tiles/show_name_on_square310x310=false +tiles/show_name_on_wide310x150=false +version/build=0 +version/major=1 +version/minor=0 +version/revision=0 + +[script] + +action="compile" +encrypt_key="" diff --git a/icon.png b/icon.png new file mode 100644 index 0000000..c019ef6 Binary files /dev/null and b/icon.png differ diff --git a/icon.png.flags b/icon.png.flags new file mode 100644 index 0000000..5130fd1 --- /dev/null +++ b/icon.png.flags @@ -0,0 +1 @@ +gen_mipmaps=false diff --git a/samplelibrary.tres b/samplelibrary.tres new file mode 100644 index 0000000..b21b775 --- /dev/null +++ b/samplelibrary.tres @@ -0,0 +1,83 @@ +[gd_resource type="SampleLibrary" load_steps=12 format=1] + +[ext_resource path="res://sounds/explosion_1.wav" type="Sample" id=1] +[ext_resource path="res://sounds/explosion_2.wav" type="Sample" id=2] +[ext_resource path="res://sounds/explosion_3.wav" type="Sample" id=3] +[ext_resource path="res://sounds/explosion_4.wav" type="Sample" id=4] +[ext_resource path="res://sounds/explosion_5.wav" type="Sample" id=5] +[ext_resource path="res://sounds/level_up.wav" type="Sample" id=6] +[ext_resource path="res://sounds/loose_3.wav" type="Sample" id=7] +[ext_resource path="res://sounds/loose_1.wav" type="Sample" id=8] +[ext_resource path="res://sounds/loose_2.wav" type="Sample" id=9] +[ext_resource path="res://sounds/loose_4.wav" type="Sample" id=10] +[ext_resource path="res://sounds/missile_launch.wav" type="Sample" id=11] + +[resource] + +samples/explosion_1 = { +"db": 0.0, +"pitch": 1.0, +"priority": 0, +"sample": ExtResource( 1 ) +} +samples/explosion_2 = { +"db": 0.0, +"pitch": 1.0, +"priority": 0, +"sample": ExtResource( 2 ) +} +samples/explosion_3 = { +"db": 0.0, +"pitch": 1.0, +"priority": 0, +"sample": ExtResource( 3 ) +} +samples/explosion_4 = { +"db": 0.0, +"pitch": 1.0, +"priority": 0, +"sample": ExtResource( 4 ) +} +samples/explosion_5 = { +"db": 0.0, +"pitch": 1.0, +"priority": 0, +"sample": ExtResource( 5 ) +} +samples/level_up = { +"db": 0.0, +"pitch": 1.0, +"priority": 0, +"sample": ExtResource( 6 ) +} +samples/loose3 = { +"db": 0.0, +"pitch": 1.0, +"priority": 0, +"sample": ExtResource( 7 ) +} +samples/loose_1 = { +"db": 0.0, +"pitch": 1.0, +"priority": 0, +"sample": ExtResource( 8 ) +} +samples/loose_2 = { +"db": 0.0, +"pitch": 1.0, +"priority": 0, +"sample": ExtResource( 9 ) +} +samples/loose_4 = { +"db": 0.0, +"pitch": 1.0, +"priority": 0, +"sample": ExtResource( 10 ) +} +samples/missile_launch = { +"db": 0.0, +"pitch": 1.0, +"priority": 0, +"sample": ExtResource( 11 ) +} + diff --git a/scenes/asteroid.tscn b/scenes/asteroid.tscn new file mode 100644 index 0000000..05879b4 --- /dev/null +++ b/scenes/asteroid.tscn @@ -0,0 +1,159 @@ +[gd_scene load_steps=12 format=1] + +[ext_resource path="res://scripts/asteroid.gd" type="Script" id=1] +[ext_resource path="res://sprites/asteroid.png" type="Texture" id=2] +[ext_resource path="res://colors/ramp_asteroid.tres" type="ColorRamp" id=3] + +[sub_resource type="ConvexPolygonShape2D" id=1] + +custom_solver_bias = 0.0 +points = Vector2Array( 6.56525, 2.73226, 5.8742, 6.37177, 2.05041, 6.18749, 5.73599, 0.659113 ) + +[sub_resource type="ConvexPolygonShape2D" id=2] + +custom_solver_bias = 0.0 +points = Vector2Array( 5.73599, 0.659113, -5.27712, 1.15746, -7.82946, -3.23257, -7.62617, -6.45307, -4.46126, -8.03552, -0.326464, -6.8104, 6.42704, -3.80966 ) + +[sub_resource type="ConvexPolygonShape2D" id=3] + +custom_solver_bias = 0.0 +points = Vector2Array( 5.73599, 0.659113, 2.05041, 6.18749, -2.55657, 6.46391, -4.30723, 5.49644, -5.27712, 1.15746 ) + +[sub_resource type="ConvexPolygonShape2D" id=4] + +custom_solver_bias = 0.0 +points = Vector2Array( 3.84713, -7.17275, 6.42704, -3.80966, -0.326464, -6.8104, 1.00076, -7.62715 ) + +[sub_resource type="ConvexPolygonShape2D" id=5] + +custom_solver_bias = 0.0 +points = Vector2Array( 6.56525, 2.73226, 5.8742, 6.37177, 2.05041, 6.18749, 5.73599, 0.659113 ) + +[sub_resource type="ConvexPolygonShape2D" id=6] + +custom_solver_bias = 0.0 +points = Vector2Array( 5.73599, 0.659113, -5.27712, 1.15746, -7.82946, -3.23257, -7.62617, -6.45307, -4.46126, -8.03552, -0.326464, -6.8104, 6.42704, -3.80966 ) + +[sub_resource type="ConvexPolygonShape2D" id=7] + +custom_solver_bias = 0.0 +points = Vector2Array( 5.73599, 0.659113, 2.05041, 6.18749, -2.55657, 6.46391, -4.30723, 5.49644, -5.27712, 1.15746 ) + +[sub_resource type="ConvexPolygonShape2D" id=8] + +custom_solver_bias = 0.0 +points = Vector2Array( 3.84713, -7.17275, 6.42704, -3.80966, -0.326464, -6.8104, 1.00076, -7.62715 ) + +[node name="Asteroid" type="KinematicBody2D"] + +input/pickable = false +shapes/0/shape = SubResource( 1 ) +shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 ) +shapes/0/trigger = false +shapes/1/shape = SubResource( 2 ) +shapes/1/transform = Matrix32( 1, 0, 0, 1, 0, 0 ) +shapes/1/trigger = false +shapes/2/shape = SubResource( 3 ) +shapes/2/transform = Matrix32( 1, 0, 0, 1, 0, 0 ) +shapes/2/trigger = false +shapes/3/shape = SubResource( 4 ) +shapes/3/transform = Matrix32( 1, 0, 0, 1, 0, 0 ) +shapes/3/trigger = false +collision/layers = 1 +collision/mask = 1024 +collision/margin = 0.08 +script/script = ExtResource( 1 ) +speed_min = 5 +speed_max = 45 + +[node name="Sprite" type="Sprite" parent="."] + +transform/scale = Vector2( 0.25, 0.25 ) +texture = ExtResource( 2 ) + +[node name="FireParticlesBack" type="Particles2D" parent="."] + +transform/pos = Vector2( -0.649553, -0.311569 ) +transform/rot = -180.0 +z/z = -1 +config/amount = 64 +config/lifetime = 1.0 +config/process_mode = 1 +config/half_extents = Vector2( 5, 2 ) +params/direction = 0.0 +params/spread = 0.0 +params/linear_velocity = 20.0 +params/spin_velocity = 0.0 +params/orbit_velocity = 0.0 +params/gravity_direction = 0.0 +params/gravity_strength = 9.8 +params/radial_accel = 0.0 +params/tangential_accel = 0.0 +params/damping = 0.0 +params/initial_angle = 0.0 +params/initial_size = 1.5 +params/final_size = 0.2 +params/hue_variation = 0.0 +params/anim_speed_scale = 1.0 +params/anim_initial_pos = 0.0 +randomness/linear_velocity = 1.0 +color/color_ramp = ExtResource( 3 ) + +[node name="FireParticlesFront" type="Particles2D" parent="."] + +transform/pos = Vector2( 0.892595, 5.7285 ) +transform/rot = -180.0 +z/z = 1 +config/amount = 32 +config/lifetime = 0.4 +config/process_mode = 1 +config/half_extents = Vector2( 5, 2 ) +params/direction = 0.0 +params/spread = 20.0 +params/linear_velocity = 20.0 +params/spin_velocity = 0.0 +params/orbit_velocity = 0.0 +params/gravity_direction = 0.0 +params/gravity_strength = 9.8 +params/radial_accel = 0.0 +params/tangential_accel = 0.0 +params/damping = 0.0 +params/initial_angle = 0.0 +params/initial_size = 1.5 +params/final_size = 0.0 +params/hue_variation = 0.0 +params/anim_speed_scale = 1.0 +params/anim_initial_pos = 0.0 +randomness/linear_velocity = 1.0 +color/color_ramp = ExtResource( 3 ) + +[node name="CollisionArea" type="Area2D" parent="."] + +input/pickable = true +shapes/0/shape = SubResource( 5 ) +shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 ) +shapes/0/trigger = true +shapes/1/shape = SubResource( 6 ) +shapes/1/transform = Matrix32( 1, 0, 0, 1, 0, 0 ) +shapes/1/trigger = true +shapes/2/shape = SubResource( 7 ) +shapes/2/transform = Matrix32( 1, 0, 0, 1, 0, 0 ) +shapes/2/trigger = true +shapes/3/shape = SubResource( 8 ) +shapes/3/transform = Matrix32( 1, 0, 0, 1, 0, 0 ) +shapes/3/trigger = true +gravity_vec = Vector2( 0, 1 ) +gravity = 98.0 +linear_damp = 0.1 +angular_damp = 1.0 +collision/mask = 1024 + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="CollisionArea"] + +visibility/visible = false +build_mode = 0 +polygon = Vector2Array( -7.82946, -3.23257, -5.27712, 1.15746, -4.30723, 5.49644, -2.55657, 6.46391, 2.05041, 6.18749, 5.8742, 6.37177, 6.56525, 2.73226, 5.73599, 0.659113, 6.42704, -3.80966, 3.84713, -7.17275, 1.00076, -7.62715, -0.326464, -6.8104, -4.46126, -8.03552, -7.62617, -6.45307 ) +shape_range = Vector2( 0, 3 ) +trigger = true + + diff --git a/scenes/base.tscn b/scenes/base.tscn new file mode 100644 index 0000000..9d13f70 --- /dev/null +++ b/scenes/base.tscn @@ -0,0 +1,59 @@ +[gd_scene load_steps=5 format=1] + +[ext_resource path="res://scripts/base.gd" type="Script" id=1] +[ext_resource path="res://sprites/base.png" type="Texture" id=2] +[ext_resource path="res://sprites/cannon.png" type="Texture" id=3] +[ext_resource path="res://scripts/ray.gd" type="Script" id=4] + +[node name="Base" type="StaticBody2D"] + +transform/pos = Vector2( 216.299, 209.498 ) +input/pickable = false +collision/layers = 1 +collision/mask = 1 +constant_linear_velocity = Vector2( 0, 0 ) +constant_angular_velocity = 0.0 +friction = 1.0 +bounce = 0.0 +script/script = ExtResource( 1 ) +health = 100 +reload_time = 0.8 + +[node name="BaseSprite" type="Sprite" parent="."] + +transform/scale = Vector2( 0.5, 0.5 ) +texture = ExtResource( 2 ) + +[node name="CannonSprite" type="Sprite" parent="."] + +transform/pos = Vector2( -0.0346317, -7.63508 ) +transform/scale = Vector2( 0.25, 0.25 ) +texture = ExtResource( 3 ) +offset = Vector2( 0.0179825, -27.3786 ) + +[node name="CannonTip" type="Position2D" parent="CannonSprite"] + +transform/pos = Vector2( 0, -56.1053 ) + +[node name="Ray" type="Node2D" parent="CannonSprite"] + +z/z = -1 +script/script = ExtResource( 4 ) + +[node name="SoundRoomParams" type="SoundRoomParams" parent="."] + +reverb/mode = 3 +params/speed_of_scale = 1.0 +params/doppler_factor = 1.0 +params/pitch_scale = 1.0 +params/volume_scale_db = 0.0 +params/reverb_send = 1.0 +params/chorus_send = 2.0 +params/attenuation_scale = 1.0 +params/attenuation_hf_cutoff = 5000.0 +params/attenuation_hf_floor_db = -24.0 +params/attenuation_hf_ratio_exp = 1.0 +params/attenuation_reverb_scale = 0.0 +force_to_all_sources = true + + diff --git a/scenes/explosion.tscn b/scenes/explosion.tscn new file mode 100644 index 0000000..351ded8 --- /dev/null +++ b/scenes/explosion.tscn @@ -0,0 +1,224 @@ +[gd_scene load_steps=10 format=1] + +[ext_resource path="res://colors/ramp_asteroid.tres" type="ColorRamp" id=1] +[ext_resource path="res://colors/smoke.tres" type="ColorRamp" id=2] +[ext_resource path="res://sprites/under.png" type="Texture" id=3] +[ext_resource path="res://scripts/explosion.gd" type="Script" id=4] + +[sub_resource type="GDScript" id=1] + +script/source = "extends Particles2D + +func _ready(): + set_emitting(true) +" + +[sub_resource type="GDScript" id=2] + +script/source = "extends Particles2D + +func _ready(): + set_emitting(true) +" + +[sub_resource type="Animation" id=3] + +resource/name = "flash" +length = 0.4 +loop = false +step = 0.1 +tracks/0/type = "value" +tracks/0/path = NodePath(".:transform/scale") +tracks/0/interp = 1 +tracks/0/imported = false +tracks/0/keys = { +"times": FloatArray( 0, 0.1, 0.3 ), +"transitions": FloatArray( 1, -4, 1 ), +"update": 0, +"values": [ Vector2( 0.05, 0.05 ), Vector2( 0.3, 0.3 ), Vector2( 1e-05, 1e-05 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath(".:transform/rot") +tracks/1/interp = 1 +tracks/1/imported = false +tracks/1/keys = { +"times": FloatArray( 0, 0.3 ), +"transitions": FloatArray( 1, 1 ), +"update": 0, +"values": [ 180.0, 0.0 ] +} +tracks/2/type = "value" +tracks/2/path = NodePath(".:modulate") +tracks/2/interp = 1 +tracks/2/imported = false +tracks/2/keys = { +"times": FloatArray( 0, 0.1, 0.3 ), +"transitions": FloatArray( 1, 1, 1 ), +"update": 0, +"values": [ Color( 0.0470588, 0.0470588, 0.0470588, 1 ), Color( 0.83606, 1, 0.382812, 1 ), Color( 1, 0, 0.046875, 1 ) ] +} + +[sub_resource type="Animation" id=4] + +resource/name = "flash_counter" +length = 0.4 +loop = false +step = 0.1 +tracks/0/type = "value" +tracks/0/path = NodePath(".:transform/scale") +tracks/0/interp = 1 +tracks/0/imported = false +tracks/0/keys = { +"times": FloatArray( 0, 0.1, 0.3 ), +"transitions": FloatArray( 1, 1, 1 ), +"update": 0, +"values": [ Vector2( 0.05, 0.05 ), Vector2( 0.3, 0.3 ), Vector2( 1e-05, 1e-05 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath(".:transform/rot") +tracks/1/interp = 1 +tracks/1/imported = false +tracks/1/keys = { +"times": FloatArray( 0, 0.3 ), +"transitions": FloatArray( 1, 1 ), +"update": 0, +"values": [ 0.0, 180.0 ] +} +tracks/2/type = "value" +tracks/2/path = NodePath(".:modulate") +tracks/2/interp = 1 +tracks/2/imported = false +tracks/2/keys = { +"times": FloatArray( 0, 0.1, 0.3 ), +"transitions": FloatArray( 1, 1, 1 ), +"update": 0, +"values": [ Color( 0.0470588, 0.0470588, 0.0470588, 1 ), Color( 0.83606, 1, 0.382812, 1 ), Color( 1, 0, 0.046875, 1 ) ] +} + +[sub_resource type="CircleShape2D" id=5] + +custom_solver_bias = 0.0 +radius = 77.0607 + +[node name="Explosion" type="Particles2D"] + +config/amount = 1024 +config/lifetime = 2.0 +config/emit_timeout = 0.1 +config/emitting = false +config/process_mode = 1 +params/direction = 0.0 +params/spread = 180.0 +params/linear_velocity = 50.0 +params/spin_velocity = 20.0 +params/orbit_velocity = 0.0 +params/gravity_direction = 0.0 +params/gravity_strength = 9.8 +params/radial_accel = 0.0 +params/tangential_accel = 0.0 +params/damping = 50.0 +params/initial_angle = 0.0 +params/initial_size = 2.0 +params/final_size = 0.0 +params/hue_variation = 0.0 +params/anim_speed_scale = 1.0 +params/anim_initial_pos = 0.0 +randomness/direction = 1.0 +randomness/linear_velocity = 0.5 +randomness/orbit_velocity = 0.5 +randomness/final_size = 1.0 +color/color_ramp = ExtResource( 1 ) +script/script = SubResource( 1 ) + +[node name="Smoke" type="Particles2D" parent="."] + +config/amount = 32 +config/lifetime = 3.0 +config/emit_timeout = 0.5 +config/emitting = false +config/process_mode = 1 +config/half_extents = Vector2( 2, 2 ) +params/direction = 180.0 +params/spread = 90.0 +params/linear_velocity = 5.0 +params/spin_velocity = 0.0 +params/orbit_velocity = 0.0 +params/gravity_direction = 180.0 +params/gravity_strength = 2.0 +params/radial_accel = 0.0 +params/tangential_accel = 0.0 +params/damping = 0.0 +params/initial_angle = 0.0 +params/initial_size = 1.0 +params/final_size = 5.0 +params/hue_variation = 0.0 +params/anim_speed_scale = 1.0 +params/anim_initial_pos = 0.0 +randomness/linear_velocity = 0.5 +color/color_ramp = ExtResource( 2 ) +script/script = SubResource( 2 ) + +[node name="Sprite1" type="Sprite" parent="."] + +editor/display_folded = true +visibility/blend_mode = 1 +transform/pos = Vector2( 0.0889397, 0.0746803 ) +transform/rot = 120.0 +transform/scale = Vector2( 0.3, 0.3 ) +texture = ExtResource( 3 ) +offset = Vector2( -4.4341, 11.1493 ) +flip_h = true +flip_v = true +modulate = Color( 0.83606, 1, 0.382812, 1 ) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="Sprite1"] + +playback/process_mode = 1 +playback/default_blend_time = 0.0 +root/root = NodePath("..") +anims/flash = SubResource( 3 ) +playback/active = true +playback/speed = 1.0 +blend_times = [ ] +autoplay = "flash" + +[node name="Sprite" type="Sprite" parent="."] + +visibility/blend_mode = 1 +transform/pos = Vector2( -0.0113325, -0.0332518 ) +transform/scale = Vector2( 1e-05, 1e-05 ) +texture = ExtResource( 3 ) +offset = Vector2( 1.61146, -10.8665 ) +modulate = Color( 1, 0, 0.046875, 1 ) +script/script = ExtResource( 4 ) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="Sprite"] + +playback/process_mode = 1 +playback/default_blend_time = 0.0 +root/root = NodePath("..") +anims/flash = SubResource( 3 ) +anims/flash_counter = SubResource( 4 ) +playback/active = true +playback/speed = 1.0 +blend_times = [ ] +autoplay = "flash_counter" + +[node name="ExplosionArea" type="Area2D" parent="Sprite"] + +input/pickable = true +shapes/0/shape = SubResource( 5 ) +shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 ) +shapes/0/trigger = false +gravity_vec = Vector2( 0, 1 ) +gravity = 98.0 +linear_damp = 0.1 +angular_damp = 1.0 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Sprite/ExplosionArea"] + +shape = SubResource( 5 ) +trigger = false +_update_shape_index = 0 + + diff --git a/scenes/missile.tscn b/scenes/missile.tscn new file mode 100644 index 0000000..b5dd694 --- /dev/null +++ b/scenes/missile.tscn @@ -0,0 +1,86 @@ +[gd_scene load_steps=6 format=1] + +[ext_resource path="res://scripts/missile.gd" type="Script" id=1] +[ext_resource path="res://sprites/cannon.png" type="Texture" id=2] +[ext_resource path="res://colors/ramp_asteroid.tres" type="ColorRamp" id=3] +[ext_resource path="res://samplelibrary.tres" type="SampleLibrary" id=4] + +[sub_resource type="CapsuleShape2D" id=1] + +custom_solver_bias = 0.0 +radius = 1.36986 +height = 10.1431 + +[node name="Missile" type="KinematicBody2D"] + +input/pickable = false +collision/layers = 1 +collision/mask = 1 +collision/margin = 0.08 +script/script = ExtResource( 1 ) +speed_mult = 180 + +[node name="MissileSprite" type="Sprite" parent="."] + +transform/pos = Vector2( 0.0276022, 0.0552044 ) +transform/scale = Vector2( 0.1, 0.2 ) +texture = ExtResource( 2 ) + +[node name="FlameParticles" type="Particles2D" parent="."] + +transform/pos = Vector2( 0, 5.52227 ) +z/z = -1 +config/amount = 64 +config/lifetime = 1.0 +config/process_mode = 1 +config/half_extents = Vector2( 0.5, 0 ) +config/local_space = false +params/direction = 0.0 +params/spread = 20.0 +params/linear_velocity = 5.0 +params/spin_velocity = 5.0 +params/orbit_velocity = 0.0 +params/gravity_direction = 0.0 +params/gravity_strength = 0.0 +params/radial_accel = 0.0 +params/tangential_accel = 0.0 +params/damping = 0.0 +params/initial_angle = 0.0 +params/initial_size = 2.0 +params/final_size = 0.0 +params/hue_variation = 0.0 +params/anim_speed_scale = 1.0 +params/anim_initial_pos = 0.0 +randomness/direction = 1.0 +randomness/spread = 5.0 +color/color_ramp = ExtResource( 3 ) + +[node name="CollisionArea" type="Area2D" parent="."] + +input/pickable = true +shapes/0/shape = SubResource( 1 ) +shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 ) +shapes/0/trigger = true +gravity_vec = Vector2( 0, 1 ) +gravity = 98.0 +linear_damp = 0.1 +angular_damp = 1.0 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="CollisionArea"] + +shape = SubResource( 1 ) +trigger = true +_update_shape_index = 0 + +[node name="Audio" type="SamplePlayer2D" parent="."] + +params/volume_db = 0.0 +params/pitch_scale = 1.0 +params/attenuation/min_distance = 1.0 +params/attenuation/max_distance = 2048.0 +params/attenuation/distance_exp = 1.0 +config/polyphony = 5 +config/samples = ExtResource( 4 ) +config/pitch_random = 0.0 + + diff --git a/scenes/spawner_asteroids.tscn b/scenes/spawner_asteroids.tscn new file mode 100644 index 0000000..9c2dfd6 --- /dev/null +++ b/scenes/spawner_asteroids.tscn @@ -0,0 +1,10 @@ +[gd_scene load_steps=2 format=1] + +[ext_resource path="res://scripts/spawner_asteroids.gd" type="Script" id=1] + +[node name="Spawner Asteroids" type="Node"] + +script/script = ExtResource( 1 ) +amount = 2 + + diff --git a/screenshots/Screenshot_2017-10-18-09-48-05.png b/screenshots/Screenshot_2017-10-18-09-48-05.png new file mode 100644 index 0000000..7581e7e Binary files /dev/null and b/screenshots/Screenshot_2017-10-18-09-48-05.png differ diff --git a/screenshots/Screenshot_2017-10-18-09-48-26.png b/screenshots/Screenshot_2017-10-18-09-48-26.png new file mode 100644 index 0000000..a8df243 Binary files /dev/null and b/screenshots/Screenshot_2017-10-18-09-48-26.png differ diff --git a/screenshots/Screenshot_2017-10-18-09-48-41.png b/screenshots/Screenshot_2017-10-18-09-48-41.png new file mode 100644 index 0000000..0e13b3a Binary files /dev/null and b/screenshots/Screenshot_2017-10-18-09-48-41.png differ diff --git a/screenshots/Screenshot_2017-10-18-09-49-05.png b/screenshots/Screenshot_2017-10-18-09-49-05.png new file mode 100644 index 0000000..9010a50 Binary files /dev/null and b/screenshots/Screenshot_2017-10-18-09-49-05.png differ diff --git a/screenshots/Screenshot_2017-10-18-09-49-57.png b/screenshots/Screenshot_2017-10-18-09-49-57.png new file mode 100644 index 0000000..c7ede60 Binary files /dev/null and b/screenshots/Screenshot_2017-10-18-09-49-57.png differ diff --git a/screenshots/Screenshot_2017-10-18-09-50-40.png b/screenshots/Screenshot_2017-10-18-09-50-40.png new file mode 100644 index 0000000..1ae1762 Binary files /dev/null and b/screenshots/Screenshot_2017-10-18-09-50-40.png differ diff --git a/scripts/asteroid.gd b/scripts/asteroid.gd new file mode 100644 index 0000000..d6427b9 --- /dev/null +++ b/scripts/asteroid.gd @@ -0,0 +1,40 @@ +extends KinematicBody2D + +var explosion = preload("res://scenes/explosion.tscn") +var velocity = Vector2() +export var speed_min = 10 +export var speed_max = 50 + +func _ready(): + randomize() + var rand_x = rand_range(0, get_viewport_rect().size.width) + set_global_pos(Vector2(rand_x, rand_range(-5, -60))) #random offset for easy "random timing" + + rand_x = rand_range(0, get_viewport_rect().size.width) + var target = Vector2(rand_x, get_viewport_rect().size.height) + + set_rot(get_global_pos().angle_to_point(target)+deg2rad(180)) + velocity = Vector2(0, rand_range(speed_min, speed_max)) + get_node("Sprite").set_rotd(rand_range(0,360)) + set_process(true) + +func _process(delta): + move(velocity.rotated(get_rot())*delta) + check_bounds() + +func check_bounds(): + if get_pos().y > get_viewport_rect().size.y - 5: + print("Asteroid out of bounds") + game_manager.get_node_from_root("Node/Base").damage(10) + destroy() + +func destroy(): + get_node("CollisionArea").queue_free() + game_manager.remove_asteroid() + var new_explosion = explosion.instance() + new_explosion.set_pos(get_pos()) + game_manager.get_node_from_root("Node").add_child(new_explosion) + queue_free() + +func on_rocket_hit(): + destroy() \ No newline at end of file diff --git a/scripts/base.gd b/scripts/base.gd new file mode 100644 index 0000000..c7a507b --- /dev/null +++ b/scripts/base.gd @@ -0,0 +1,110 @@ +extends StaticBody2D + +var state +var local_health +var missile_scn = preload("res://scenes/missile.tscn") +var states = {"STATE_AIMING": StateAiming, "STATE_FIRING": StateFiring} +var cannon_rotation = 90 +var cannon_rot_dir = 0 +export var health = 100 +export var reload_time = 0.8 + +signal state_change + +func _ready(): + set_state("STATE_AIMING") + set_process_input(true) + set_process(true) + local_health = health + +func _process(delta): + state.update(delta) + + +func _input(event): + if state.has_method("input"): + state.input(event) + +func damage(dmg): + local_health -= dmg + if local_health <= 0 and not game_manager.state == game_manager.STATE_GAMEOVER: + game_manager.game_over() + +func set_state(new_state): + if state: state._exit() + emit_signal("state_change", self, new_state) + print("State change to %s" % new_state) + var new_state_instance = states[new_state].new(self) + self.state = new_state_instance + + +func get_state(): + return state.to_string() + +class StateFiring: + func to_string(): + return "STATE_FIRING" + var base + var missile_spawn + var missile_rot + func _init(_base): + self.base = _base + missile_spawn = base.get_node("CannonSprite/CannonTip") + missile_rot = base.get_node("CannonSprite").get_global_rot() + + func update(delta): + shoot_missile() + + func shoot_missile(): + var missile = base.missile_scn.instance() + missile.init(base) + base.add_child(missile) + missile.set_global_rot(missile_rot) + missile.set_global_pos(missile_spawn.get_global_pos()) + print("Fired") + base.set_state("STATE_AIMING") + + + func _exit(): + pass + +class StateAiming: + func to_string(): + return "STATE_AIMING" + var base + var cannon + var ray + var reload_timer + func _init(_base): + self.base = _base + reload_timer = base.reload_time + cannon = base.get_node("CannonSprite") + ray = cannon.get_node("Ray") + + func update(delta): + if reload_timer > 0: + reload_timer -= delta + ray.ray_color = ray.colors.red + else: ray.ray_color = ray.colors.green + #var mouse_pos = base.get_global_mouse_pos() + #cannon.look_at(mouse_pos) + #cannon.set_rot(cannon.get_global_pos().angle_to_point(mouse_pos)) + base.cannon_rotation += base.cannon_rot_dir + cannon.set_rot(deg2rad(base.cannon_rotation)) + + func input(event): + if event.is_action_pressed("slow_motion"): + OS.set_time_scale(0.15) + if event.is_action_released("fire") or event.is_action_released("A") and reload_timer <= 0: + print("We fire") + base.set_state("STATE_FIRING") + if event.is_action("ui_left") or event.is_action("J_left"): + base.cannon_rot_dir = 1 + if event.is_action("ui_right") or event.is_action("J_right"): + base.cannon_rot_dir = -1 + if event.is_action_released("ui_right") or event.is_action_released("ui_left") or event.is_action_released("J_right") or event.is_action_released("J_left"): + base.cannon_rot_dir = 0 + + func _exit(): + pass + \ No newline at end of file diff --git a/scripts/explosion.gd b/scripts/explosion.gd new file mode 100644 index 0000000..0531556 --- /dev/null +++ b/scripts/explosion.gd @@ -0,0 +1,21 @@ +extends Sprite + +var ttl = 4 + +func _ready(): + set_process(true) + get_node("AnimationPlayer").connect("finished", self, "anim_finished") + get_node("ExplosionArea").connect("body_enter", self, "on_collision") + +func anim_finished(): + get_node("ExplosionArea").queue_free() + +func on_collision(other): + if other != null and other.has_method("on_rocket_hit"): + other.on_rocket_hit() + print("R ON R") + +func _process(delta): + if ttl <= 0: + get_parent().queue_free() + else: ttl -= delta diff --git a/scripts/game_manager.gd b/scripts/game_manager.gd new file mode 100644 index 0000000..747d43e --- /dev/null +++ b/scripts/game_manager.gd @@ -0,0 +1,86 @@ +extends Node +const STATE_STARTUP = 0 +const STATE_PLAYING = 1 +const STATE_GAMEOVER = 2 +const STAGE_TIME = 30 +var active_asteroids = 0 +var stage = 1 +var total_time = 0 +var slowmo_time = 5 +var score = 0 +var time_next_stage = 25 +var state = STATE_STARTUP +func _ready(): + set_fixed_process(true) + update_ui() + +func game_over(): + state = STATE_GAMEOVER + var restart_btn = game_manager.get_node_from_root("Node/UI/Restart") + restart_btn.show() + restart_btn.get_node("AnimationPlayer").connect("finished", self, "game_over_ts") + restart_btn.get_node("AnimationPlayer").play("anim_in") +func game_over_ts(): + OS.set_time_scale(0.03) + +func reset(): + get_tree().reload_current_scene() + stage = 1 + active_asteroids = 0 + total_time = 0 + slowmo_time = 0 + score = 0 + time_next_stage = 25 + OS.set_time_scale(1) + state = STATE_PLAYING + update_ui() + +func get_node_from_root(node_name): + return get_tree().get_root().get_node(node_name) + +func _fixed_process(delta): + total_time += delta + if not state == STATE_GAMEOVER: slowmo_update(delta) + stage_update(delta) + +func stage_update(delta): + time_next_stage -= delta + if time_next_stage <= 0: + get_node_from_root("Node/WorldAudio").play("level_up") + stage += 1 + update_ui() + time_next_stage = STAGE_TIME + +func slowmo_update(delta): + if slowmo_time >= 0: + slowmo_time -= delta / OS.get_time_scale() + else: set_slowmo(false) + if OS.get_time_scale() != 1.0: get_node_from_root("Node/UI/SlowmoBar").update_value(slowmo_time) + +func set_slowmo(slowmo, time=5, scale=0.5): + if slowmo: + slowmo_time = time + OS.set_time_scale(scale) + get_node_from_root("Node/UI/SlowmoBar").set_max_val(time) + else: + OS.set_time_scale(1) + +func update_ui(): + var health = get_node_from_root("Node/Base").local_health + get_node_from_root("Node/UI/ScoreLabel").update_text(stage, active_asteroids, health) + +func get_active_asteroids(): + return active_asteroids + +func add_asteroid(): + active_asteroids += 1 + update_ui() + if active_asteroids > stage + 7: + game_manager.set_slowmo(true, 15, 0.2) + elif active_asteroids > stage + 5: + game_manager.set_slowmo(true, 10, 0.25) + elif active_asteroids > stage + 3: + game_manager.set_slowmo(true, 10, 0.5) +func remove_asteroid(): + active_asteroids -= 1 + update_ui() diff --git a/scripts/missile.gd b/scripts/missile.gd new file mode 100644 index 0000000..67da77b --- /dev/null +++ b/scripts/missile.gd @@ -0,0 +1,47 @@ +extends KinematicBody2D + +export var speed_mult = 100 +var speed = Vector2(0,-1) +var origin +var exploded = false + +func init(_origin): + randomize() + origin = _origin + speed = speed * speed_mult + +func _ready(): + #OS.set_time_scale(0.21) + get_node("Audio").play("missile_launch") + set_process(true) + get_node("CollisionArea").connect("area_enter", self, "_on_collision") + randomize() + +func _process(delta): + move_forward(delta) + if origin: check_bounds() + if exploded and not get_node("Audio").is_voice_active(2): queue_free() + +func move_forward(delta): + move(speed.rotated(get_rot())*delta) + +func _on_collision(other): + if other.get_owner().has_method("on_rocket_hit"): + other.get_owner().on_rocket_hit() + var explosion_audio = "explosion_%s" % ceil(rand_range(1, 5)) + print("Playing %s" % explosion_audio) + get_node("Audio").play(explosion_audio, 2) + print("target destroyed") + hide() + get_node("CollisionArea").queue_free() + exploded = true + +func check_bounds(): + var origin_pos = origin.get_global_pos() + var max_dist = origin_pos.distance_to(Vector2(0,0)) + var current_dist = get_global_pos().distance_to(origin_pos) + if current_dist > max_dist: + print("Missile out of bounds") + queue_free() + + diff --git a/scripts/ray.gd b/scripts/ray.gd new file mode 100644 index 0000000..27a49a9 --- /dev/null +++ b/scripts/ray.gd @@ -0,0 +1,15 @@ +extends Node2D + +var colors = { + "red" : Color(255,0,0, 0.5), + "green":Color(0,255,0, 0.5) +} +var ray_color = colors.red +func _ready(): + set_process(true) + +func _process(delta): + update() + +func _draw(): + draw_line(get_pos(), get_pos()+Vector2(0,-1) * 10000, ray_color, 2.5) diff --git a/scripts/spawner_asteroids.gd b/scripts/spawner_asteroids.gd new file mode 100644 index 0000000..b14f552 --- /dev/null +++ b/scripts/spawner_asteroids.gd @@ -0,0 +1,23 @@ +extends Node + +const WAVE_TIME = 12 +onready var asteroid_scn = preload("res://scenes/asteroid.tscn") +export var amount = 2 +var timer = 5 + +func _ready(): + set_process(true) + + +func _process(delta): + if game_manager.state == game_manager.STATE_GAMEOVER: return + timer -= delta + if timer <= 0: + for i in range(amount + game_manager.stage): + spawn_asteroid() + timer = WAVE_TIME + +func spawn_asteroid(): + var new_asteroid = asteroid_scn.instance() + add_child(new_asteroid) + game_manager.add_asteroid() \ No newline at end of file diff --git a/sounds/explosion_1.wav b/sounds/explosion_1.wav new file mode 100644 index 0000000..4bbef96 Binary files /dev/null and b/sounds/explosion_1.wav differ diff --git a/sounds/explosion_2.wav b/sounds/explosion_2.wav new file mode 100644 index 0000000..78c35f4 Binary files /dev/null and b/sounds/explosion_2.wav differ diff --git a/sounds/explosion_3.wav b/sounds/explosion_3.wav new file mode 100644 index 0000000..92e92e7 Binary files /dev/null and b/sounds/explosion_3.wav differ diff --git a/sounds/explosion_4.wav b/sounds/explosion_4.wav new file mode 100644 index 0000000..a59d4d1 Binary files /dev/null and b/sounds/explosion_4.wav differ diff --git a/sounds/explosion_5.wav b/sounds/explosion_5.wav new file mode 100644 index 0000000..242e18e Binary files /dev/null and b/sounds/explosion_5.wav differ diff --git a/sounds/level_up.wav b/sounds/level_up.wav new file mode 100644 index 0000000..97294db Binary files /dev/null and b/sounds/level_up.wav differ diff --git a/sounds/loose_1.wav b/sounds/loose_1.wav new file mode 100644 index 0000000..cbfb560 Binary files /dev/null and b/sounds/loose_1.wav differ diff --git a/sounds/loose_2.wav b/sounds/loose_2.wav new file mode 100644 index 0000000..a9bd76c Binary files /dev/null and b/sounds/loose_2.wav differ diff --git a/sounds/loose_3.wav b/sounds/loose_3.wav new file mode 100644 index 0000000..b3eaccf Binary files /dev/null and b/sounds/loose_3.wav differ diff --git a/sounds/loose_4.wav b/sounds/loose_4.wav new file mode 100644 index 0000000..b5b9c54 Binary files /dev/null and b/sounds/loose_4.wav differ diff --git a/sounds/missile_launch.wav b/sounds/missile_launch.wav new file mode 100644 index 0000000..0decfbe Binary files /dev/null and b/sounds/missile_launch.wav differ diff --git a/sprites/asteroid.png b/sprites/asteroid.png new file mode 100644 index 0000000..32d5879 Binary files /dev/null and b/sprites/asteroid.png differ diff --git a/sprites/background.png b/sprites/background.png new file mode 100644 index 0000000..b192102 Binary files /dev/null and b/sprites/background.png differ diff --git a/sprites/base.png b/sprites/base.png new file mode 100644 index 0000000..7f1a3a0 Binary files /dev/null and b/sprites/base.png differ diff --git a/sprites/base.png.flags b/sprites/base.png.flags new file mode 100644 index 0000000..efb2b8c --- /dev/null +++ b/sprites/base.png.flags @@ -0,0 +1 @@ +filter=false diff --git a/sprites/cannon.png b/sprites/cannon.png new file mode 100644 index 0000000..f1786a1 Binary files /dev/null and b/sprites/cannon.png differ diff --git a/sprites/cannon.png.flags b/sprites/cannon.png.flags new file mode 100644 index 0000000..226e8a3 --- /dev/null +++ b/sprites/cannon.png.flags @@ -0,0 +1,2 @@ +filter=false +gen_mipmaps=false diff --git a/sprites/cover.png b/sprites/cover.png new file mode 100644 index 0000000..5214d8e Binary files /dev/null and b/sprites/cover.png differ diff --git a/sprites/logo.png b/sprites/logo.png new file mode 100644 index 0000000..9ec25be Binary files /dev/null and b/sprites/logo.png differ diff --git a/sprites/logo.png~ b/sprites/logo.png~ new file mode 100644 index 0000000..34b0b69 Binary files /dev/null and b/sprites/logo.png~ differ diff --git a/sprites/over.png b/sprites/over.png new file mode 100644 index 0000000..dc59d0a Binary files /dev/null and b/sprites/over.png differ diff --git a/sprites/over.png~ b/sprites/over.png~ new file mode 100644 index 0000000..aa8a8be Binary files /dev/null and b/sprites/over.png~ differ diff --git a/sprites/progress.png b/sprites/progress.png new file mode 100644 index 0000000..3409d9d Binary files /dev/null and b/sprites/progress.png differ diff --git a/sprites/start_button.png b/sprites/start_button.png new file mode 100644 index 0000000..c2bc102 Binary files /dev/null and b/sprites/start_button.png differ diff --git a/sprites/start_button.png~ b/sprites/start_button.png~ new file mode 100644 index 0000000..46bde60 Binary files /dev/null and b/sprites/start_button.png~ differ diff --git a/sprites/try_again.png b/sprites/try_again.png new file mode 100644 index 0000000..813aa89 Binary files /dev/null and b/sprites/try_again.png differ diff --git a/sprites/under.png b/sprites/under.png new file mode 100644 index 0000000..c4bd354 Binary files /dev/null and b/sprites/under.png differ diff --git a/stages/main_stage.tscn b/stages/main_stage.tscn new file mode 100644 index 0000000..48ff5ef --- /dev/null +++ b/stages/main_stage.tscn @@ -0,0 +1,274 @@ +[gd_scene load_steps=17 format=1] + +[ext_resource path="res://scenes/base.tscn" type="PackedScene" id=1] +[ext_resource path="res://sprites/background.png" type="Texture" id=2] +[ext_resource path="res://scenes/spawner_asteroids.tscn" type="PackedScene" id=3] +[ext_resource path="res://sprites/under.png" type="Texture" id=4] +[ext_resource path="res://sprites/over.png" type="Texture" id=5] +[ext_resource path="res://sprites/progress.png" type="Texture" id=6] +[ext_resource path="res://sprites/try_again.png" type="Texture" id=7] +[ext_resource path="res://animations/btn_in.tres" type="Animation" id=8] +[ext_resource path="res://samplelibrary.tres" type="SampleLibrary" id=9] +[ext_resource path="res://sprites/start_button.png" type="Texture" id=10] + +[sub_resource type="GDScript" id=1] + +script/source = "extends Label + +export var template_str = \"%s %s\" +func update_text(stage, asteroids, health): + var new_text = template_str % [stage, asteroids, health] + set_text(new_text) + +" + +[sub_resource type="Theme" id=2] + + +[sub_resource type="GDScript" id=3] + +script/source = "extends TextureProgress + +# class member variables go here, for example: +# var a = 2 +# var b = \"textvar\" +func set_max_val(max_val): + set_max(max_val) + +func update_value(val): + if val > 0: + if not is_visible(): show() + set_value(val) + else: + hide() +" + +[sub_resource type="GDScript" id=4] + +script/source = "extends TextureButton +func _ready(): + connect(\"button_down\", self, \"restart\") + game_manager.update_ui() + connect(\"visibility_changed\", self, \"on_visibility_changed\") + +func on_visibility_changed(): + randomize() + print(\"WE ARE NOW VISIBLE? %s\" % is_visible()) + if is_visible(): + get_node(\"Audio\").play(\"loose_%s\" % ceil(rand_range(0.1,4))) + +func restart(): + game_manager.reset()" + +[sub_resource type="Animation" id=5] + +resource/name = "default" +length = 1.0 +loop = false +step = 0.1 +tracks/0/type = "value" +tracks/0/path = NodePath(".:rect/pos") +tracks/0/interp = 1 +tracks/0/imported = false +tracks/0/keys = { +"times": FloatArray( 0 ), +"transitions": FloatArray( 1 ), +"update": 0, +"values": [ Vector2( 83, 54 ) ] +} + +[sub_resource type="GDScript" id=6] + +script/source = "extends TextureButton + +func _ready(): + if not game_manager.state == game_manager.STATE_STARTUP: on_button_clicked() + connect(\"button_down\", self, \"on_button_clicked\") + var anim_player = get_node(\"AnimationPlayer\") + anim_player.connect(\"finished\", self, \"anim_finished\") + anim_player.play(\"anim_in\") + +func anim_finished(): + print(\"SETTING QTIME SACALE\") + OS.set_time_scale(0) + +func on_button_clicked(): + OS.set_time_scale(1) + hide() +" + +[node name="Node" type="Node"] + +[node name="Base" parent="." instance=ExtResource( 1 )] + +transform/pos = Vector2( 211, 240 ) + +[node name="Background" type="CanvasLayer" parent="."] + +layer = -2 +offset = Vector2( 0, 0 ) +rotation = 0.0 +scale = Vector2( 1, 1 ) + +[node name="Sprite" type="Sprite" parent="Background"] + +transform/pos = Vector2( 0, -32.4442 ) +transform/scale = Vector2( 0.401467, 0.376672 ) +texture = ExtResource( 2 ) +centered = false + +[node name="Spawner Asteroids" parent="." instance=ExtResource( 3 )] + +[node name="UI" type="CanvasLayer" parent="."] + +layer = 1 +offset = Vector2( 0, 0 ) +rotation = 0.0 +scale = Vector2( 1, 1 ) + +[node name="ScoreLabel" type="Label" parent="UI"] + +focus/ignore_mouse = true +focus/stop_mouse = true +size_flags/horizontal = 2 +size_flags/vertical = 0 +margin/left = 10.0 +margin/top = 10.0 +margin/right = 411.0 +margin/bottom = 40.0 +valign = 1 +percent_visible = 1.0 +lines_skipped = 0 +max_lines_visible = -1 +script/script = SubResource( 1 ) +template_str = "Stage: %s Asteroids: %s Health: %s" + +[node name="SlowmoBar" type="TextureProgress" parent="UI"] + +visibility/visible = false +rect/scale = Vector2( 0.25, 0.25 ) +focus/ignore_mouse = false +focus/stop_mouse = true +size_flags/horizontal = 2 +size_flags/vertical = 2 +size_flags/stretch_ratio = 2.0 +theme/theme = SubResource( 2 ) +margin/left = 357.0 +margin/top = 21.0 +margin/right = 485.0 +margin/bottom = 149.0 +range/min = 0.0 +range/max = 100.0 +range/step = 1.0 +range/page = 0.0 +range/value = 0.0 +range/exp_edit = false +range/rounded = false +texture/under = ExtResource( 4 ) +texture/over = ExtResource( 5 ) +texture/progress = ExtResource( 6 ) +mode = 4 +radial_fill/fill_degrees = 360.0 +radial_fill/center_offset = Vector2( -1, 8 ) +script/script = SubResource( 3 ) + +[node name="Restart" type="TextureButton" parent="UI"] + +visibility/visible = false +focus/ignore_mouse = false +focus/stop_mouse = true +size_flags/horizontal = 2 +size_flags/vertical = 2 +margin/left = 83.0 +margin/top = 54.0 +margin/right = 339.0 +margin/bottom = 183.0 +toggle_mode = false +enabled_focus_mode = 2 +shortcut = null +textures/normal = ExtResource( 7 ) +params/resize_mode = 0 +params/stretch_mode = 0 +script/script = SubResource( 4 ) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="UI/Restart"] + +playback/process_mode = 1 +playback/default_blend_time = 0.0 +root/root = NodePath("..") +anims/anim_in = ExtResource( 8 ) +anims/default = SubResource( 5 ) +playback/active = true +playback/speed = 1.0 +blend_times = [ ] +autoplay = "" + +[node name="Audio" type="SamplePlayer2D" parent="UI/Restart"] + +params/volume_db = 0.0 +params/pitch_scale = 1.0 +params/attenuation/min_distance = 1.0 +params/attenuation/max_distance = 2048.0 +params/attenuation/distance_exp = 1.0 +config/polyphony = 1 +config/samples = ExtResource( 9 ) +config/pitch_random = 0.0 + +[node name="Start" type="TextureButton" parent="UI"] + +focus/ignore_mouse = false +focus/stop_mouse = true +size_flags/horizontal = 2 +size_flags/vertical = 2 +margin/left = 83.0 +margin/top = 54.0 +margin/right = 339.0 +margin/bottom = 182.0 +toggle_mode = false +enabled_focus_mode = 2 +shortcut = null +textures/normal = ExtResource( 10 ) +params/resize_mode = 0 +params/stretch_mode = 0 +script/script = SubResource( 6 ) + +[node name="Label" type="Label" parent="UI/Start"] + +focus/ignore_mouse = true +focus/stop_mouse = true +size_flags/horizontal = 2 +size_flags/vertical = 0 +margin/left = 33.0 +margin/top = 142.0 +margin/right = 233.0 +margin/bottom = 156.0 +custom_colors/font_color = Color( 1, 0.533081, 0.121094, 1 ) +text = "PRO TIP: Tap and drag to aim!!!!" +percent_visible = 1.0 +lines_skipped = 0 +max_lines_visible = -1 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="UI/Start"] + +playback/process_mode = 1 +playback/default_blend_time = 0.0 +root/root = NodePath("..") +anims/anim_in = ExtResource( 8 ) +anims/default = SubResource( 5 ) +playback/active = true +playback/speed = 1.0 +blend_times = [ ] +autoplay = "" + +[node name="WorldAudio" type="SamplePlayer2D" parent="."] + +params/volume_db = 0.0 +params/pitch_scale = 1.0 +params/attenuation/min_distance = 1.0 +params/attenuation/max_distance = 2048.0 +params/attenuation/distance_exp = 1.0 +config/polyphony = 10 +config/samples = ExtResource( 9 ) +config/pitch_random = 0.0 + + diff --git a/startbtn.kra b/startbtn.kra new file mode 100644 index 0000000..0be087a Binary files /dev/null and b/startbtn.kra differ