From 29d84b0c8002074313dfa7f24e82a70f0e0a762b Mon Sep 17 00:00:00 2001 From: Haze Weathers Date: Sun, 1 Dec 2024 11:45:41 -0500 Subject: [PATCH 1/8] Change shard sprite. --- graphics/collectibles/shard.png | Bin 197 -> 10061 bytes graphics/hud/hud.png | Bin 4672 -> 8026 bytes objects/collectibles/shard.tscn | 21 ++++++++++++++++++--- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/graphics/collectibles/shard.png b/graphics/collectibles/shard.png index fb1b4d396c5d94020d5e8f853e4e86f365bcc2be..4c2e263dc0180d7913a83a9ad6785ff80728ebe8 100644 GIT binary patch literal 10061 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 delta 180 zcmX@>ca(90WIZzj1H-(cb`c=OSRCZ;#IWw1%u67LCEd~2k%3`jKlh(RRv@1zz$e5t zV*i8G{~!PqSf*Te2c)hf$S)Wq;-Izi3y{xQ;1OBOz`%D1gc(IOyc&RlMxHK?Arj%S zJ&t?~3Ot7#{{2r^Ja+bE-Hm SbIAj0XYh3Ob6Mw<&;$VPnmy(K diff --git a/graphics/hud/hud.png b/graphics/hud/hud.png index 91dde0877904a980020437938451c25f75fb39f6..5b1887114a9843a56283fc518dbf24c88c3f2033 100644 GIT binary patch literal 8026 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 delta 985 zcmV;~119|1KENc9BLV=>ktK!!0FkUDe>MOBGB7eUIxsUjFgYMGGdeRgIy5i<0RRD@ z0{{U40003100000005jESDXL<0fcEoLr_UWLm+T+Z)Rz1WdHzpoPCi!NW(xJ#a~mU zDwQI35OK&*JK04=9BUPdP$AR`tvZ-o`UOoIk`xz5!L{Jv$70pN#aUMeS3wZ`e*kfI za8h)U691PLTEuv8+>dwn9(V5mp;2L))e{Fa-8R$7gqY2(ih)=7(T^cS5t5l@%t=xT zp5yBtKEB??c$W9MKgXb&w;13PiQ~*LZQ>2$nN8c^yiXivC0QjtC!R3rg2azpS6ckW zx#+UMGs9*kJx?4a7K>f1bTKQLe;V;LaYWU0$``UNRyl8R)+#mDz9)ZSFt4vHbDicG zl32tNB#2N@Lm3s=h|#K(Vj)fY2@n6M>zBx-kgE(vjs;YqL3aJ%fAG6ot1va$N(v@` z-WSLD7zYBoK(p>R-^Y&AJOTXAz?I(dR~x|WC+YQ$7C8b!+rY(jM^pBIM9Upug+c*%KcjET0mHYzz*?)f_C8J@fDCn&x&aOjfoPGk*FE0d*WKH{XWIS!0BVzR zqxnZwEC2uvc(bSub^((}5HOP-5Gs>+5V|C0Gcq$bV>n_hI5}fCEi^V_H7z+aGBqtX zG%z$YH85jgHZwPqRuNE>5E2=arV%|3F)%PNIWjmfH8eFeI5m^;5g7qClOz&T4KOo0 zFga8)GdeRgIy94n5+MyRGdeIiR53F;Gc-Chv$7Hr0kfwRU}q$ zjjD10h8_Ua!>}=+Wa0pHXXwDf!ocVbEfrNOCWkup_boxfiX2Dp56_{BF~$HCX&6EX zbv>~XP?)Bfg+XqUx_y33e$L(Qwexwm?L4&Yy!YcM%OJPnzkhkSOBw>F;=e`+K;Kj` z#+XA3a4P=8YWsD3o4zCqfzjx`lc)YA1L&4qwJ5I8H$|Hj(00000NkvXX Hu0mjfZf2Sl diff --git a/objects/collectibles/shard.tscn b/objects/collectibles/shard.tscn index 46603f6..6550926 100644 --- a/objects/collectibles/shard.tscn +++ b/objects/collectibles/shard.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=10 format=2] +[gd_scene load_steps=11 format=2] [ext_resource path="res://shaders/1px_border.gdshader" type="Shader" id=1] [ext_resource path="res://graphics/collectibles/shard.png" type="Texture" id=2] @@ -14,6 +14,21 @@ shader_param/border_corners = false [sub_resource type="RectangleShape2D" id=6] extents = Vector2( 3.5, 3.5 ) +[sub_resource type="Animation" id=18] +length = 0.001 +tracks/0/type = "value" +tracks/0/path = NodePath("Sprite:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Color( 1, 1, 1, 1 ) ] +} + [sub_resource type="Animation" id=8] resource_name = "glow" length = 0.8 @@ -28,7 +43,7 @@ tracks/0/keys = { "times": PoolRealArray( 0, 0.4, 0.8 ), "transitions": PoolRealArray( 1, 1, 1 ), "update": 0, -"values": [ Color( 0.329412, 0.360784, 0.847059, 1 ), Color( 1, 1, 1, 1 ), Color( 0.329412, 0.360784, 0.847059, 1 ) ] +"values": [ Color( 0.766, 0.73, 1, 1 ), Color( 1.1, 1.1, 1.1, 1 ), Color( 0.766, 0.73, 1, 1 ) ] } [sub_resource type="Curve" id=17] @@ -39,7 +54,6 @@ pause_mode = 2 script = ExtResource( 3 ) [node name="Sprite" type="Sprite" parent="."] -modulate = Color( 0.861621, 0.868095, 0.96844, 1 ) light_mask = 0 material = SubResource( 7 ) position = Vector2( 5, 3 ) @@ -55,6 +69,7 @@ position = Vector2( 4.5, 2.5 ) shape = SubResource( 6 ) [node name="AnimationPlayer" type="AnimationPlayer" parent="."] +anims/RESET = SubResource( 18 ) anims/glow = SubResource( 8 ) [node name="Sparkles" type="CPUParticles2D" parent="."] From 155c86c01376f06dc0ed7c0d44c3d475f513c682 Mon Sep 17 00:00:00 2001 From: Haze Weathers Date: Sun, 1 Dec 2024 13:24:47 -0500 Subject: [PATCH 2/8] Hook score submission into new server and move into the results screen. --- .gitignore | 3 +- autoloads/game.gd | 6 +- autoloads/options.gd | 10 + autoloads/scoreboard.gd | 123 ++++++ graphics/hud/high_score.png | Bin 0 -> 960 bytes graphics/hud/high_score.png.import | 35 ++ menus/results.gd | 35 +- menus/results.tscn | 649 ++++++++++++++++++++++++++++- project.godot | 1 + 9 files changed, 853 insertions(+), 9 deletions(-) create mode 100644 autoloads/scoreboard.gd create mode 100644 graphics/hud/high_score.png create mode 100644 graphics/hud/high_score.png.import diff --git a/.gitignore b/.gitignore index fb85297..d6037ed 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .import/ build/ -ngio.ini \ No newline at end of file +ngio.ini +scoreboard_host.txt diff --git a/autoloads/game.gd b/autoloads/game.gd index 6c6ee40..a17ea40 100644 --- a/autoloads/game.gd +++ b/autoloads/game.gd @@ -37,6 +37,7 @@ var time_bonus: int = 0 var life_bonus: int = 0 var perfect_bonus: int = 0 var final_score: int = 0 +var old_high_score: int = 0 #== state ==# var current_sector := Vector2.ZERO var respawn_point := Vector2(32,166) @@ -60,9 +61,6 @@ var marathon_shards: int = 0 var marathon_deaths: int = 0 -func _ready(): - pause_mode = Node.PAUSE_MODE_PROCESS - func _get_stars() -> int: return stars_collected.count(true) @@ -197,6 +195,8 @@ func save(): var save_id = LevelData.levels[current_level].save_id var save_data: Save.LevelSaveData = Save.current_file.levels[save_id] + old_high_score = max(save_data.score_100, save_data.score_any) + # save score and time depending on completion if _get_shards() >= 5 && keys >= 50: save_data.score_100 = max(save_data.score_100, final_score) as int diff --git a/autoloads/options.gd b/autoloads/options.gd index 26ec300..fca7516 100644 --- a/autoloads/options.gd +++ b/autoloads/options.gd @@ -18,6 +18,8 @@ const TRANS_SPEEDS := [0.8, 0.4, 0.2, 0.0000001] #Game var rumble: int = RumbleMode.FULL var gore: int = Gore.FULL +var scoreboard_name: String = "" +var scoreboard_id: int = -1 #Video var fullscreen: bool = false setget _set_fullscreen @@ -42,6 +44,7 @@ var defaults = null func _ready() -> void: pause_mode = PAUSE_MODE_PROCESS + # clone self into defaults before loading stored values if defaults == null: defaults = duplicate() @@ -58,6 +61,9 @@ func load_options() -> void: # game rumble = file.get_value("game", "rumble", defaults.rumble) gore = file.get_value("game", "gore", defaults.gore) + scoreboard_name = file.get_value("game", "scoreboard_name", "") + randomize() + scoreboard_id = file.get_value("game", "scoreboard_id", randi()) # video _set_fullscreen(file.get_value("video", "fullscreen", defaults.fullscreen)) _set_window_size(file.get_value("video", "window_size", defaults.window_size)) @@ -78,6 +84,8 @@ func load_defaults(section: int = Section.ALL) -> void: Section.GAME, Section.ALL: rumble = defaults.rumble gore = defaults.gore + scoreboard_name = defaults.scoreboard_name + scoreboard_id = randi() Section.VIDEO, Section.ALL: fullscreen = defaults.fullscreen window_size = defaults.window_size @@ -96,6 +104,8 @@ func save_options() -> void: #Game file.set_value("game", "rumble", rumble) file.set_value("game", "gore", gore) + file.set_value("game", "scoreboard_name", scoreboard_name) + file.set_value("game", "scoreboard_id", scoreboard_id) #Video file.set_value("video", "fullscreen", fullscreen) file.set_value("video", "window_size", window_size) diff --git a/autoloads/scoreboard.gd b/autoloads/scoreboard.gd new file mode 100644 index 0000000..4464cd5 --- /dev/null +++ b/autoloads/scoreboard.gd @@ -0,0 +1,123 @@ +extends Node + + +signal _response_received + + +const CHECK_INTERVAL: float = 60.0 +const POLL_INTERVAL: float = 0.5 + + +var server_host: String = "" +var http: HTTPRequest = null +## True if there is currently a request processing. +var waiting_for_response: bool = false +## True if the last request failed and the result is not valid. +var errored: bool = false + +var _response_code: int = -1 +var _response_body: String = "" + + +class ScoreEntry: + var score: int + var time: int + var difficulty: int + + func _init(score: int, time: int, difficulty: int) -> void: + self.score = score + self.time = time + self.difficulty = difficulty + + static func from_dict(dict: Dictionary) -> ScoreEntry: + return ScoreEntry.new(dict.score, dict.time, dict.difficulty) + + +func _ready() -> void: + var file = File.new() + file.open("res://scoreboard_host.txt", File.READ) + server_host = file.get_line() + file.close() + + http = HTTPRequest.new() + http.download_chunk_size = 4096 + http.timeout = 10.0 + http.use_threads = true + http.connect("request_completed", self, "_on_request_completed") + add_child(http) + +func _on_request_completed(result: int, response_code: int, headers: PoolStringArray, body: PoolByteArray) -> void: + if result != OK: + errored = true + else: + errored = false + _response_code = response_code + _response_body = body.get_string_from_utf8() + waiting_for_response = false + emit_signal("_response_received") + + +func is_name_free(player_name: String, id: int) -> bool: + if waiting_for_response: + yield(self, "_response_received") + var err = http.request(server_host + "/api/players/" + player_name) + if err != OK: + errored = true + return false + waiting_for_response = true + + yield(self, "_response_received") + if _response_code == HTTPClient.RESPONSE_NOT_FOUND or _response_body.to_int() == id: + return true + return false + + +func touch_name(player_name: String, id: int) -> void: + if waiting_for_response: + yield(self, "_response_received") + var err = http.request( + server_host + "/api/players/%s/%d" % [player_name, id], + [], true, HTTPClient.METHOD_POST + ) + if err != OK: + errored = true + return + waiting_for_response = true + + +func submit_score(level: String, entry: ScoreEntry) -> bool: + if waiting_for_response: + yield(self, "_response_received") + var err = http.request( + server_host + "/api/scores/%s/%s/%d/%d/%d" % [ + level, Options.scoreboard_name, + entry.score, entry.time, entry.difficulty + ], + [], true, HTTPClient.METHOD_POST + ) + if err != OK: + errored = true + return false + waiting_for_response = true + yield(self, "_response_received") + if errored or _response_code != HTTPClient.RESPONSE_OK: + return false + return true + + +func get_scores(level: String) -> Dictionary: + if waiting_for_response: + yield(self, "_response_received") + var err = http.request(server_host + "/api/scores/%s" % level) + if err != OK: + errored = true + return {} + waiting_for_response = true + yield(self, "_response_received") + if not errored and _response_code == HTTPClient.RESPONSE_OK: + var dict = parse_json(_response_body) + var scores = {} + for player in dict.keys(): + scores[player] = ScoreEntry.from_dict(dict[player]) + return scores + return {} diff --git a/graphics/hud/high_score.png b/graphics/hud/high_score.png new file mode 100644 index 0000000000000000000000000000000000000000..908a3d74d7a4d3af61e3744acb5d4c15b3298363 GIT binary patch literal 960 zcmV;x13&zUP)AHIP0004nX+uL$Nkc;* zaB^>EX>4Tx04R}tkvmAkP!xv$riu?L3U&~2$WWauf{HlSDionYs1;guFuCaqnlvOS zE{=k0!NJF3)xpJCR|i)?5PX0*J2)x2NQvhrg%&X$xZIEbp8x0Ga{-}VW}4Lz12o+> zQ;E2k$*ziBuLvQ49t>bYW|lE0NlEzD*FE)8-9>qpf8U?gr{*jM1VrK(GfbO!gLr1s zHaPDShgnfpiO-40O}ZfQBi9v=-#8as7IZLMN=c5CXT3@PWeK{ zW0mt3XRTai&3p0}hI0DKGS_L1Ab~|JL4pVcRg_SMjVSFpDHc+69{2GNyMBpW3b{&P z_CX>@2HM@dakSAh-}0004(Nkl@UNfEYrMeDs|f#`885xA2$h z^5oNSDYvIDAk>O+v(g7@Qx3#LxBDY$zD;O{*pX7&gc#m7$Im;Ktu*!{pyz$6pLSqo2NSir>ng!=;#7{C0mNT91TF?Mro9?4x$?+SeuEKb1gN1k@v7qJ*Z;7PepiplY4&sIJSr+cjw iW5s*)*Aw@)e_%hti_TLb%*k*70000 LevelData.marathon_end: @@ -70,9 +73,33 @@ func _on_AnimationPlayer_animation_finished(anim_name): else: Game.change_map(LevelData.levels[Game.current_level].scene) return + if Game.final_score > Game.old_high_score and not Debug.is_cheating: + animation_player.play("submit_score_popup") + else: + Fade.fade_out(Options.transition_speed_secs) + yield(Fade, "fade_finished") + SceneManager.change_scene(LevelSelect.instance()) + + +func _on_YesSubmit_button_down() -> void: + $"%YesSubmit".release_focus() + animation_player.play("submit") + + var save_id = LevelData.levels[Game.current_level].save_id + var entry = ScoreBoard.ScoreEntry.new(Game.final_score, int(Game.time * 1000.0), Game.difficulty) + var submitted = yield(ScoreBoard.submit_score(save_id, entry), "completed") + if ScoreBoard.errored or not submitted: + animation_player.play("try_again") + else: + animation_player.play("success") + + +func _on_NoSubmit_button_down() -> void: + $"%NoSubmit".release_focus() + _next_screen() + + +func _next_screen() -> void: Fade.fade_out(Options.transition_speed_secs) yield(Fade, "fade_finished") - if Debug.is_cheating == false: - SceneManager.change_scene(SubmitScore.instance()) - else: - SceneManager.change_scene(LevelSelect.instance()) + SceneManager.change_scene(LevelSelect.instance()) diff --git a/menus/results.tscn b/menus/results.tscn index b6d0d50..aa437f8 100644 --- a/menus/results.tscn +++ b/menus/results.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=21 format=2] +[gd_scene load_steps=34 format=2] [ext_resource path="res://shaders/wibble_wobble.gdshader" type="Shader" id=1] [ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=2] @@ -14,6 +14,11 @@ [ext_resource path="res://graphics/player/palettes/default.tex" type="Texture" id=12] [ext_resource path="res://menus/results.gd" type="Script" id=13] [ext_resource path="res://menus/results_icon.tscn" type="PackedScene" id=14] +[ext_resource path="res://graphics/hud/high_score.png" type="Texture" id=15] +[ext_resource path="res://graphics/particles/shine.png" type="Texture" id=16] +[ext_resource path="res://scripts/randomize_particle_start.gd" type="Script" id=17] +[ext_resource path="res://graphics/hud/pause_arrow.png" type="Texture" id=18] +[ext_resource path="res://ui/2ndpuberty_scholar_outline.fnt" type="BitmapFont" id=19] [sub_resource type="ShaderMaterial" id=5] shader = ExtResource( 2 ) @@ -36,6 +41,29 @@ shader = ExtResource( 3 ) shader_param/border_color = Color( 0, 0, 0, 1 ) shader_param/border_corners = false +[sub_resource type="Curve" id=11] +_data = [ Vector2( 0, 0 ), 0.0, 0.100639, 0, 0, Vector2( 0.158257, 1 ), 7.51724, -6.83592, 0, 0, Vector2( 0.31422, 0 ), 0.0, 0.0, 0, 0 ] + +[sub_resource type="Gradient" id=17] +interpolation_mode = 2 +offsets = PoolRealArray( 0, 0.734694, 1 ) +colors = PoolColorArray( 0.576471, 0.980392, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 ) + +[sub_resource type="ShaderMaterial" id=14] +resource_local_to_scene = true +shader = ExtResource( 1 ) +shader_param/speed = Vector2( 4, 8 ) +shader_param/ammount = Vector2( 24, 12 ) +shader_param/offset = Vector2( 0, 0 ) +shader_param/delay = Vector2( 0, 0 ) + +[sub_resource type="ShaderMaterial" id=13] +shader = ExtResource( 1 ) +shader_param/speed = Vector2( 4, 8 ) +shader_param/ammount = Vector2( 1, 1 ) +shader_param/offset = Vector2( 0, 0 ) +shader_param/delay = Vector2( 0, 0 ) + [sub_resource type="ShaderMaterial" id=6] shader = ExtResource( 1 ) shader_param/speed = Vector2( 4, 8 ) @@ -117,6 +145,138 @@ tracks/5/keys = { "update": 1, "values": [ false ] } +tracks/6/type = "value" +tracks/6/path = NodePath("ShardsAndBonuses/FinalScore:visible") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} +tracks/7/type = "value" +tracks/7/path = NodePath("ShardsAndBonuses/HighScore:visible") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} +tracks/8/type = "value" +tracks/8/path = NodePath("ShardsAndBonuses/FinalScore:scale") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector2( 1, 1 ) ] +} +tracks/9/type = "value" +tracks/9/path = NodePath("ShardsAndBonuses/HighScore:scale") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector2( 1, 1 ) ] +} +tracks/10/type = "value" +tracks/10/path = NodePath("CenterContainer/SubmitScore:visible") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} +tracks/11/type = "value" +tracks/11/path = NodePath("CenterContainer/SubmitScore:rect_scale") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector2( 1, 1 ) ] +} +tracks/12/type = "value" +tracks/12/path = NodePath("CenterContainer/LoadingGraphic:visible") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} +tracks/13/type = "value" +tracks/13/path = NodePath("CenterContainer/LoadingGraphic:rect_scale") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector2( 1, 1 ) ] +} +tracks/14/type = "value" +tracks/14/path = NodePath("CenterContainer/LoadingGraphic:material:shader_param/ammount") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector2( 24, 12 ) ] +} +tracks/15/type = "value" +tracks/15/path = NodePath("CenterContainer/SubmitScore:modulate") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Color( 1, 1, 1, 1 ) ] +} +tracks/16/type = "value" +tracks/16/path = NodePath("CenterContainer/SubmitScore/Label:text") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ "submit score?" ] +} [sub_resource type="Animation" id=4] resource_name = "results" @@ -321,6 +481,340 @@ tracks/14/keys = { } ] } +[sub_resource type="Animation" id=15] +resource_name = "submit" +length = 0.3 +tracks/0/type = "value" +tracks/0/path = NodePath("CenterContainer/SubmitScore:rect_scale") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.3 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ Vector2( 1, 1 ), Vector2( 1e-05, 1 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("CenterContainer/SubmitScore:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("CenterContainer/LoadingGraphic:material:shader_param/ammount") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0, 0.2 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ Vector2( 0, 0 ), Vector2( 24, 12 ) ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("CenterContainer/LoadingGraphic:visible") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} + +[sub_resource type="Animation" id=12] +resource_name = "submit_score_popup" +length = 1.5 +tracks/0/type = "value" +tracks/0/path = NodePath("ShardsAndBonuses:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector2( -512, 0 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("ShardsAndBonuses/FinalScore:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("ShardsAndBonuses/HighScore:visible") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0, 0.3 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ false, true ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("ShardsAndBonuses/FinalScore:scale") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0, 0.3 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ Vector2( 1, 1 ), Vector2( 1e-05, 1 ) ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("ShardsAndBonuses/HighScore:scale") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0, 0.3, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 0, +"values": [ Vector2( 1, 1 ), Vector2( 1e-05, 1 ), Vector2( 1, 1 ) ] +} +tracks/5/type = "value" +tracks/5/path = NodePath("CenterContainer/SubmitScore:visible") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0, 1 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ false, true ] +} +tracks/6/type = "value" +tracks/6/path = NodePath("CenterContainer/SubmitScore:rect_scale") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/keys = { +"times": PoolRealArray( 0, 1, 1.3 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 0, +"values": [ Vector2( 1e-05, 1 ), Vector2( 1e-05, 1 ), Vector2( 1, 1 ) ] +} +tracks/7/type = "method" +tracks/7/path = NodePath("CenterContainer/SubmitScore/YesNoPrompt/HBoxContainer/YesSubmit") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/keys = { +"times": PoolRealArray( 1.5 ), +"transitions": PoolRealArray( 1 ), +"values": [ { +"args": [ ], +"method": "grab_focus" +} ] +} +tracks/8/type = "value" +tracks/8/path = NodePath("CenterContainer/SubmitScore:modulate") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/keys = { +"times": PoolRealArray( 1, 1.056 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 1 ) ] +} +tracks/9/type = "value" +tracks/9/path = NodePath("CenterContainer/LoadingGraphic:visible") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} +tracks/10/type = "value" +tracks/10/path = NodePath("CenterContainer/SubmitScore/Label:text") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ "submit score?" ] +} + +[sub_resource type="Animation" id=18] +resource_name = "success" +length = 1.5 +tracks/0/type = "value" +tracks/0/path = NodePath("CenterContainer/LoadingGraphic:material:shader_param/ammount") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.3 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ Vector2( 24, 12 ), Vector2( 0, 0 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("CenterContainer/CollectedParticles:emitting") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0.3 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("CenterContainer/LoadingGraphic:visible") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0, 0.3 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ true, false ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("CenterContainer/SubmitScore:visible") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} +tracks/4/type = "method" +tracks/4/path = NodePath(".") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 1.5 ), +"transitions": PoolRealArray( 1 ), +"values": [ { +"args": [ ], +"method": "_next_screen" +} ] +} + +[sub_resource type="Animation" id=16] +resource_name = "try_again" +length = 0.5 +tracks/0/type = "value" +tracks/0/path = NodePath("CenterContainer/SubmitScore:rect_scale") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.3 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ Vector2( 1e-05, 1 ), Vector2( 1, 1 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("CenterContainer/SubmitScore:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("CenterContainer/LoadingGraphic:material:shader_param/ammount") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0, 0.1, 0.3 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 0, +"values": [ Vector2( 24, 12 ), Vector2( 24, 12 ), Vector2( 0, 0 ) ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("CenterContainer/LoadingGraphic:visible") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("CenterContainer/SubmitScore/Label:text") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ "failed. try again?" ] +} +tracks/5/type = "method" +tracks/5/path = NodePath("CenterContainer/SubmitScore/YesNoPrompt/HBoxContainer/YesSubmit") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0.5 ), +"transitions": PoolRealArray( 1 ), +"values": [ { +"args": [ ], +"method": "grab_focus" +} ] +} + [node name="Results" type="Node"] script = ExtResource( 13 ) @@ -529,6 +1023,28 @@ material = ExtResource( 7 ) position = Vector2( 640, 40 ) texture = ExtResource( 8 ) +[node name="HighScore" type="Sprite" parent="ShardsAndBonuses"] +visible = false +material = ExtResource( 7 ) +position = Vector2( 640, 40 ) +texture = ExtResource( 15 ) + +[node name="Sparkles" type="CPUParticles2D" parent="ShardsAndBonuses/HighScore"] +light_mask = 0 +amount = 4 +lifetime = 2.0 +texture = ExtResource( 16 ) +emission_shape = 2 +emission_rect_extents = Vector2( 48, 8 ) +gravity = Vector2( 0, 0 ) +angular_velocity = 720.0 +angular_velocity_random = 1.0 +angle = 720.0 +angle_random = 1.0 +scale_amount_curve = SubResource( 11 ) +color = Color( 0.72549, 0.956863, 1, 1 ) +script = ExtResource( 17 ) + [node name="Score" type="Label" parent="."] material = ExtResource( 9 ) margin_top = 8.0 @@ -547,6 +1063,131 @@ theme = ExtResource( 10 ) text = "Time: " align = 1 +[node name="CenterContainer" type="CenterContainer" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_top = 77.0 +theme = ExtResource( 10 ) + +[node name="CollectedParticles" type="CPUParticles2D" parent="CenterContainer"] +pause_mode = 2 +position = Vector2( 127, 56 ) +emitting = false +amount = 64 +one_shot = true +explosiveness = 1.0 +local_coords = false +emission_shape = 2 +emission_rect_extents = Vector2( 4, 4 ) +direction = Vector2( 0, -1 ) +spread = 180.0 +gravity = Vector2( 0, 150 ) +initial_velocity = 250.0 +initial_velocity_random = 0.9 +damping = 2.0 +angle = 720.0 +angle_random = 1.0 +scale_amount_random = 1.0 +color_ramp = SubResource( 17 ) + +[node name="LoadingGraphic" type="Label" parent="CenterContainer"] +unique_name_in_owner = true +visible = false +material = SubResource( 14 ) +margin_left = 124.0 +margin_top = 52.0 +margin_right = 131.0 +margin_bottom = 62.0 +text = "§" +align = 1 +valign = 1 + +[node name="SubmitScore" type="VBoxContainer" parent="CenterContainer"] +unique_name_in_owner = true +visible = false +margin_left = 82.0 +margin_top = 47.0 +margin_right = 173.0 +margin_bottom = 67.0 +rect_pivot_offset = Vector2( 45.5, 18 ) +theme = ExtResource( 10 ) + +[node name="Label" type="Label" parent="CenterContainer/SubmitScore"] +margin_right = 126.0 +margin_bottom = 10.0 +custom_fonts/font = ExtResource( 19 ) +text = "submit score?" + +[node name="YesNoPrompt" type="PanelContainer" parent="CenterContainer/SubmitScore"] +margin_left = 18.0 +margin_top = 14.0 +margin_right = 107.0 +margin_bottom = 36.0 +size_flags_horizontal = 4 + +[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer/SubmitScore/YesNoPrompt"] +margin_left = 3.0 +margin_top = 3.0 +margin_right = 86.0 +margin_bottom = 19.0 +rect_min_size = Vector2( 0, 16 ) +rect_pivot_offset = Vector2( -174, -69 ) +custom_constants/separation = 0 +alignment = 1 + +[node name="YesSubmit" type="TextureButton" parent="CenterContainer/SubmitScore/YesNoPrompt/HBoxContainer"] +unique_name_in_owner = true +material = SubResource( 13 ) +margin_top = 4.0 +margin_right = 12.0 +margin_bottom = 12.0 +rect_min_size = Vector2( 12, 8 ) +focus_neighbour_right = NodePath("../NoSubmit") +size_flags_vertical = 4 +texture_focused = ExtResource( 18 ) +expand = true +stretch_mode = 3 + +[node name="YesLabel" type="Label" parent="CenterContainer/SubmitScore/YesNoPrompt/HBoxContainer"] +margin_left = 12.0 +margin_top = 3.0 +margin_right = 33.0 +margin_bottom = 13.0 +text = "Yes" + +[node name="Spacer" type="Control" parent="CenterContainer/SubmitScore/YesNoPrompt/HBoxContainer"] +margin_left = 33.0 +margin_right = 45.0 +margin_bottom = 16.0 +rect_min_size = Vector2( 12, 0 ) + +[node name="NoSubmit" type="TextureButton" parent="CenterContainer/SubmitScore/YesNoPrompt/HBoxContainer"] +unique_name_in_owner = true +material = SubResource( 13 ) +margin_left = 45.0 +margin_top = 4.0 +margin_right = 57.0 +margin_bottom = 12.0 +rect_min_size = Vector2( 12, 8 ) +focus_neighbour_left = NodePath("../YesSubmit") +size_flags_vertical = 4 +texture_focused = ExtResource( 18 ) +expand = true +stretch_mode = 3 + +[node name="NoLabel" type="Label" parent="CenterContainer/SubmitScore/YesNoPrompt/HBoxContainer"] +margin_left = 57.0 +margin_top = 3.0 +margin_right = 71.0 +margin_bottom = 13.0 +text = "No" + +[node name="Spacer2" type="Control" parent="CenterContainer/SubmitScore/YesNoPrompt/HBoxContainer"] +margin_left = 71.0 +margin_right = 83.0 +margin_bottom = 16.0 +rect_min_size = Vector2( 12, 0 ) + [node name="Results" type="Sprite" parent="."] material = SubResource( 6 ) position = Vector2( 232, 80 ) @@ -557,5 +1198,11 @@ autoplay = "results" playback_speed = 2.0 anims/RESET = SubResource( 10 ) anims/results = SubResource( 4 ) +anims/submit = SubResource( 15 ) +anims/submit_score_popup = SubResource( 12 ) +anims/success = SubResource( 18 ) +anims/try_again = SubResource( 16 ) +[connection signal="button_down" from="CenterContainer/SubmitScore/YesNoPrompt/HBoxContainer/YesSubmit" to="." method="_on_YesSubmit_button_down"] +[connection signal="button_down" from="CenterContainer/SubmitScore/YesNoPrompt/HBoxContainer/NoSubmit" to="." method="_on_NoSubmit_button_down"] [connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_AnimationPlayer_animation_finished"] diff --git a/project.godot b/project.godot index ec768cd..4b61178 100644 --- a/project.godot +++ b/project.godot @@ -110,6 +110,7 @@ Console="*res://autoloads/console.tscn" Fade="*res://autoloads/fade.tscn" StainLayer="*res://autoloads/stain_layer.tscn" Ngio="*res://autoloads/ngio.gd" +ScoreBoard="*res://autoloads/scoreboard.gd" [debug] From b61a5122f4a65ff50e09763790c4e61fa28f60de Mon Sep 17 00:00:00 2001 From: Haze Weathers Date: Sun, 1 Dec 2024 20:14:51 -0500 Subject: [PATCH 3/8] New scoreboard viewing screengit commit -m "New scoreboard viewing screen" --- autoloads/level_data.tscn | 42 ++-- export_presets.cfg | 12 +- graphics/hud/arrow_down.png | Bin 0 -> 6094 bytes graphics/hud/arrow_down.png.import | 35 +++ graphics/hud/arrow_up.png | Bin 0 -> 6086 bytes graphics/hud/arrow_up.png.import | 35 +++ graphics/hud/scores/pungent.png | Bin 0 -> 9390 bytes graphics/hud/scores/pungent.png.import | 35 +++ graphics/hud/scores/salty.png | Bin 0 -> 697 bytes graphics/hud/scores/salty.png.import | 35 +++ graphics/hud/scores/spicy.png | Bin 0 -> 662 bytes graphics/hud/scores/spicy.png.import | 35 +++ graphics/hud/scores/sweet.png | Bin 0 -> 675 bytes graphics/hud/scores/sweet.png.import | 35 +++ menus/main_menu.gd | 2 +- menus/results.gd | 1 - menus/score_entry.gd | 43 +++- menus/score_entry.tscn | 64 +++-- menus/scoreboards_scholar.gd | 108 +++++++++ menus/scoreboards_scholar.tscn | 320 +++++++++++++++++++++++++ project.godot | 1 - scripts/level_entry.gd | 3 +- 22 files changed, 739 insertions(+), 67 deletions(-) create mode 100644 graphics/hud/arrow_down.png create mode 100644 graphics/hud/arrow_down.png.import create mode 100644 graphics/hud/arrow_up.png create mode 100644 graphics/hud/arrow_up.png.import create mode 100644 graphics/hud/scores/pungent.png create mode 100644 graphics/hud/scores/pungent.png.import create mode 100644 graphics/hud/scores/salty.png create mode 100644 graphics/hud/scores/salty.png.import create mode 100644 graphics/hud/scores/spicy.png create mode 100644 graphics/hud/scores/spicy.png.import create mode 100644 graphics/hud/scores/sweet.png create mode 100644 graphics/hud/scores/sweet.png.import create mode 100644 menus/scoreboards_scholar.gd create mode 100644 menus/scoreboards_scholar.tscn diff --git a/autoloads/level_data.tscn b/autoloads/level_data.tscn index e2a8193..fe92a6f 100644 --- a/autoloads/level_data.tscn +++ b/autoloads/level_data.tscn @@ -29,8 +29,7 @@ shards_required_spicy = 0 shards_required_pungent = 0 boss_required = "" boss = false -scores_id = 13253 -times_id = 13255 +has_scoreboard = true scene = ExtResource( 2 ) [sub_resource type="Resource" id=2] @@ -45,8 +44,7 @@ shards_required_spicy = 0 shards_required_pungent = 0 boss_required = "" boss = false -scores_id = 13254 -times_id = 13257 +has_scoreboard = true scene = ExtResource( 3 ) [sub_resource type="Resource" id=4] @@ -61,8 +59,7 @@ shards_required_spicy = 0 shards_required_pungent = 0 boss_required = "" boss = false -scores_id = 13263 -times_id = 13270 +has_scoreboard = true scene = ExtResource( 6 ) [sub_resource type="Resource" id=6] @@ -77,8 +74,7 @@ shards_required_spicy = 16 shards_required_pungent = 24 boss_required = "" boss = true -scores_id = -1 -times_id = -1 +has_scoreboard = false scene = ExtResource( 8 ) [sub_resource type="Resource" id=3] @@ -93,8 +89,7 @@ shards_required_spicy = 0 shards_required_pungent = 0 boss_required = "boss1" boss = false -scores_id = 13264 -times_id = 13271 +has_scoreboard = true scene = ExtResource( 14 ) [sub_resource type="Resource" id=10] @@ -109,8 +104,7 @@ shards_required_spicy = 0 shards_required_pungent = 0 boss_required = "boss1" boss = false -scores_id = 13265 -times_id = 13272 +has_scoreboard = true scene = ExtResource( 7 ) [sub_resource type="Resource" id=9] @@ -125,8 +119,7 @@ shards_required_spicy = 0 shards_required_pungent = 0 boss_required = "boss1" boss = false -scores_id = 13266 -times_id = 13273 +has_scoreboard = true scene = ExtResource( 11 ) [sub_resource type="Resource" id=12] @@ -141,8 +134,7 @@ shards_required_spicy = 32 shards_required_pungent = 40 boss_required = "" boss = true -scores_id = -1 -times_id = -1 +has_scoreboard = false scene = ExtResource( 13 ) [sub_resource type="Resource" id=8] @@ -157,8 +149,7 @@ shards_required_spicy = 0 shards_required_pungent = 0 boss_required = "boss2" boss = false -scores_id = 13267 -times_id = 13274 +has_scoreboard = true scene = ExtResource( 10 ) [sub_resource type="Resource" id=7] @@ -173,8 +164,7 @@ shards_required_spicy = 0 shards_required_pungent = 0 boss_required = "boss2" boss = false -scores_id = 13268 -times_id = 13275 +has_scoreboard = true scene = ExtResource( 9 ) [sub_resource type="Resource" id=11] @@ -189,8 +179,7 @@ shards_required_spicy = 0 shards_required_pungent = 0 boss_required = "boss2" boss = false -scores_id = 13269 -times_id = 13276 +has_scoreboard = true scene = ExtResource( 12 ) [sub_resource type="Resource" id=15] @@ -205,8 +194,7 @@ shards_required_spicy = 50 shards_required_pungent = 60 boss_required = "" boss = true -scores_id = -1 -times_id = -1 +has_scoreboard = false scene = ExtResource( 16 ) [sub_resource type="Resource" id=14] @@ -221,8 +209,7 @@ shards_required_spicy = 72 shards_required_pungent = 72 boss_required = "boss3" boss = false -scores_id = -1 -times_id = -1 +has_scoreboard = false scene = ExtResource( 4 ) [sub_resource type="Resource" id=13] @@ -237,8 +224,7 @@ shards_required_spicy = 0 shards_required_pungent = 0 boss_required = "" boss = false -scores_id = -1 -times_id = -1 +has_scoreboard = false scene = ExtResource( 15 ) [node name="LevelData" type="Node"] diff --git a/export_presets.cfg b/export_presets.cfg index 7a3e24a..75f22d9 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -5,7 +5,7 @@ platform="Windows Desktop" runnable=true custom_features="" export_filter="all_resources" -include_filter="ngio.ini" +include_filter="scoreboard_host.txt" exclude_filter="" export_path="build/Revolution 2083.exe" script_export_mode=1 @@ -33,6 +33,7 @@ codesign/description="" codesign/custom_options=PoolStringArray( ) application/modify_resources=true application/icon="res://icon.ico" +application/icon_interpolation=4 application/file_version="" application/product_version="" application/company_name="Team SG" @@ -48,7 +49,7 @@ platform="Linux/X11" runnable=true custom_features="" export_filter="all_resources" -include_filter="ngio.ini" +include_filter="scoreboard_host.txt" exclude_filter="" export_path="build/linux/Revolution 2083.x86_64" script_export_mode=1 @@ -58,7 +59,7 @@ script_encryption_key="" custom_template/debug="" custom_template/release="" -binary_format/64_bits=true +binary_format/architecture="x86_64" binary_format/embed_pck=true texture_format/bptc=false texture_format/s3tc=true @@ -73,7 +74,7 @@ platform="HTML5" runnable=true custom_features="" export_filter="all_resources" -include_filter="ngio.ini" +include_filter="scoreboard_host.txt" exclude_filter="" export_path="build/html5/index.html" script_export_mode=1 @@ -108,7 +109,7 @@ platform="Android" runnable=true custom_features="" export_filter="all_resources" -include_filter="" +include_filter="scoreboard_host.txt" exclude_filter="" export_path="build/android/hero-mark-2.apk" script_export_mode=1 @@ -241,6 +242,7 @@ permissions/mount_format_filesystems=false permissions/mount_unmount_filesystems=false permissions/nfc=false permissions/persistent_activity=false +permissions/post_notifications=false permissions/process_outgoing_calls=false permissions/read_calendar=false permissions/read_call_log=false diff --git a/graphics/hud/arrow_down.png b/graphics/hud/arrow_down.png new file mode 100644 index 0000000000000000000000000000000000000000..b077880e0cabcf8f9c21ddca1b003fbbc868b082 GIT binary patch literal 6094 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 literal 0 HcmV?d00001 diff --git a/graphics/hud/arrow_down.png.import b/graphics/hud/arrow_down.png.import new file mode 100644 index 0000000..147e2b1 --- /dev/null +++ b/graphics/hud/arrow_down.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/arrow_down.png-476089e36c213673a0f11adb99cc0724.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/hud/arrow_down.png" +dest_files=[ "res://.import/arrow_down.png-476089e36c213673a0f11adb99cc0724.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/graphics/hud/arrow_up.png b/graphics/hud/arrow_up.png new file mode 100644 index 0000000000000000000000000000000000000000..795cca0c27703fd697a4bb55e6ed13bbe1d16ac9 GIT binary patch literal 6086 zcmeHLdsGzH8J}erc3B~aA|Rp;3sLYm`Z_WVq$ej)qnM}C`(jkC=monw3S<{K(ByJ5eL4HCLQ=0g2->NwKk{C zHc6NPo)Q@%3HwR<*)b9+A_e0epp5`F^nooy5-apS2lkk-y$aa5VV@Xa>m)HqBIwtH zh66hV^gBS~mWE;-0QN_qDTL3#F$huteu;gV&0dM(YMoZCH-Yt9oFH{Lsnwx66RF2Z z+yLTBHuhx%mLl=UJtTw;a}+tjL`6=}7C99ITN=(6Dihbw9u>ABcS%eLvmCAs+rNhk zz!l0pcqVur8D25XHVp)V0)emKXGjU6h>MfQ#VX`-d3?M=nUIp0Fl<=D=n*56QpRSC zA2&85GZW2GPefIdvokYu^YbQabp%0-pJ=w2@B+1-z#)hvK0ZESSVDSYVmh9cnS~Gf z3LZj|6)-2MM1{m8OQgw?;8A2e$TL*~25`T6FS)-HVU3-T1N5VHZik^!$6nM^8^Ltc`YR!BTq7MrDu8&Nb< zPBo2G;fob1#Va?xemFi`Uv+hq!*^VnnnQg4Py8 zGBO3ZeXlEbW6b|yOFG!QxeLkd*RCpaH!p&%aN*{zT;wsD^va#^5^-sPNHuB0K=}Tl zpndmI$|Q*?NG}ZxBZeysiarnPrH910QI&{RKy-arAFWWd0%B?p>mQ)d9Z@u~Pa0T& zJ{DqX(QGz~Q(}K}plXrOkvM}d(qj~5AoJ)V_0frdf_EFC?YxjILY#ou4r(WLPaQN^s$Em|_&zUWsT{Qgp zMW&}rd3(z{FHKmIsvEcauPcJD1TUTSOE&$`x$ac5l;|;5ckW*M-p;OPf2YV=G%jIY zv2%@XqRn>ebhqW3s-DueH4D#eIJNEKZoF|Q@DJuEhv_?L4Nkb-j{bBI*)y{@8SoqwJkp>N9}J^oJHhI57jQ- z)xF?sPfy`n3!htea9E>41sA@-qN)WiTqPbKixO%=t;I?MTnnx$RH6kw#z|ILr-dQF zFN><4=e?vx)7sjqZq=(jzB-N0Y&L7OxCX~D;DPzu+&mS)-2Q9`5yG&te%i-*dCucT zAtvSUH1igf3e2NoelD-w9)WlJ!zuthGy%%1(W$i>mrK)sg`Y2N0U+Uo9=O6^)8=J0 zRjl9B?4#Mz7S_#Y_lJP5nh^v@sg84b1yVq~`+_la#LwI8YZQDKTEjN7E&%EW`RVTS z=Q(GeSoh@yX9PO^69M5O`1g5>+y!UgWw(=758Vud+N>58%$H<5G{=yF=^%^-+Q8&v zCW0j}!mQO}ls?~p=_uM^U@1J`nXl~!Wpn#^%1yHn3V^FQfa7p#bvR{kU|IttTLW(LQ# zCZm}#2~e;OWKpHfqQcdo{DhIpMv8ZOd@hS>I_GW<^tsk>F1DJdplG^$yR64}T_;SyvXFob5SD`b6d()ZfD2jT zV=3O_tMPamEvm@zBrnASjQBf67z55qaz9_0;h9<(4- z@^a1(;_*Hi8~7Cb$|+f^Lr z9|{jT%Z0#8p@@%^lnl9 p;w8i?yS$-r)o0hfzDV>)dUlSJ{^N2Z_(wN_*h*(ucNWiU{||(C{pJ7w literal 0 HcmV?d00001 diff --git a/graphics/hud/arrow_up.png.import b/graphics/hud/arrow_up.png.import new file mode 100644 index 0000000..b303c7a --- /dev/null +++ b/graphics/hud/arrow_up.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/arrow_up.png-afb605e867089f8aedd83a8cc3ba6369.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/hud/arrow_up.png" +dest_files=[ "res://.import/arrow_up.png-afb605e867089f8aedd83a8cc3ba6369.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/graphics/hud/scores/pungent.png b/graphics/hud/scores/pungent.png new file mode 100644 index 0000000000000000000000000000000000000000..7754646e8e3c8ffc472d8df941b8f9bc6746fdcd GIT binary patch literal 9390 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 literal 0 HcmV?d00001 diff --git a/graphics/hud/scores/pungent.png.import b/graphics/hud/scores/pungent.png.import new file mode 100644 index 0000000..1265a85 --- /dev/null +++ b/graphics/hud/scores/pungent.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/pungent.png-e07e66e400d4d252772a81c6867bb967.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/hud/scores/pungent.png" +dest_files=[ "res://.import/pungent.png-e07e66e400d4d252772a81c6867bb967.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/graphics/hud/scores/salty.png b/graphics/hud/scores/salty.png new file mode 100644 index 0000000000000000000000000000000000000000..af22ef1b6b659ecaa026e1f6c6f97108bd30b8e7 GIT binary patch literal 697 zcmV;q0!ICbP)EX>4Tx04R}tkvmAkP!xv$riu?L3U&~2$WWauf{HlSDionYs1;guFuCaqnlvOS zE{=k0!NJF3)xpJCR|i)?5PX0*J2)x2NQvhrg%&X$xZIEbp8x0Ga{-}VW}4Lz12o+> zQ;E2k$*ziBuLvQ49t>bYW|lE0NlEzD*FE)8-9>qpf8U?gr{*jM1VrK(GfbO!gLr1s zHaPDShgnfpiO-40O}ZfQBi9v=-#8as7IZLMN=c5CXT3@PWeK{ zW0mt3XRTai&3p0}hI0DKGS_L1Ab~|JL4pVcRg_SMjVSFpDHc+69{2GNyMBpW3b{&P zy{D4^000SaNLh0L z04^T@04^T^c_CX>@2HM@dakSAh-}0001xNklYHAPoLPF#`hw0|O%=#TJu77#J8B7*6D^ zVPIfjU}PjlF$|o@Tf@La$UQEK&r$eHgiPOaUy`5(45zp#K4oh7S literal 0 HcmV?d00001 diff --git a/graphics/hud/scores/salty.png.import b/graphics/hud/scores/salty.png.import new file mode 100644 index 0000000..06ae307 --- /dev/null +++ b/graphics/hud/scores/salty.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/salty.png-44a2905ee6e3795b4fc59059696696a8.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/hud/scores/salty.png" +dest_files=[ "res://.import/salty.png-44a2905ee6e3795b4fc59059696696a8.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/graphics/hud/scores/spicy.png b/graphics/hud/scores/spicy.png new file mode 100644 index 0000000000000000000000000000000000000000..ddace82e572219b3fed5962aef7ae2399757fec1 GIT binary patch literal 662 zcmV;H0%`q;P)EX>4Tx04R}tkvmAkP!xv$riu?L3U&~2$WWauf{HlSDionYs1;guFuCaqnlvOS zE{=k0!NJF3)xpJCR|i)?5PX0*J2)x2NQvhrg%&X$xZIEbp8x0Ga{-}VW}4Lz12o+> zQ;E2k$*ziBuLvQ49t>bYW|lE0NlEzD*FE)8-9>qpf8U?gr{*jM1VrK(GfbO!gLr1s zHaPDShgnfpiO-40O}ZfQBi9v=-#8as7IZLMN=c5CXT3@PWeK{ zW0mt3XRTai&3p0}hI0DKGS_L1Ab~|JL4pVcRg_SMjVSFpDHc+69{2GNyMBpW3b{&P zy{D4^000SaNLh0L z04^T@04^T^c_CX>@2HM@dakSAh-}0001ONklYHAP)S8F_?%^Y%wVWu8D;hQ;`89F2(;3 zIWbsX5Mp3pU|=|rw+613376szJzp8N?|Dp=4gcT!nWG2@ZaRtA2E2fg6w}dd`2YWq w6JEv09D*hzYd}#9Rfsdl8L>nXBR)?900YPEX>4Tx04R}tkvmAkP!xv$riu?L3U&~2$WWauf{HlSDionYs1;guFuCaqnlvOS zE{=k0!NJF3)xpJCR|i)?5PX0*J2)x2NQvhrg%&X$xZIEbp8x0Ga{-}VW}4Lz12o+> zQ;E2k$*ziBuLvQ49t>bYW|lE0NlEzD*FE)8-9>qpf8U?gr{*jM1VrK(GfbO!gLr1s zHaPDShgnfpiO-40O}ZfQBi9v=-#8as7IZLMN=c5CXT3@PWeK{ zW0mt3XRTai&3p0}hI0DKGS_L1Ab~|JL4pVcRg_SMjVSFpDHc+69{2GNyMBpW3b{&P zy{D4^000SaNLh0L z04^T@04^T^c_CX>@2HM@dakSAh-}0001bNklYLzz_Z-u^Hh6F2(;pd_|}h;AUW8U|?jz zsrd3EQ~`+Q|4cYd-n5v3;qhAxNhYi&Po01edHfbdBO^X%z=6y)h+;tx1{S=Ep$ZwU zeu4|JU{#E+P@4}$13`t1f*x=$un?;d)dnIIA`AS-5-vDX002}HI67*DwD$l2002ov JPDHLkV1h2D6qx`3 literal 0 HcmV?d00001 diff --git a/graphics/hud/scores/sweet.png.import b/graphics/hud/scores/sweet.png.import new file mode 100644 index 0000000..8ed72ac --- /dev/null +++ b/graphics/hud/scores/sweet.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/sweet.png-9fd594d4011ef7c51cf9c89d5c0132b0.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://graphics/hud/scores/sweet.png" +dest_files=[ "res://.import/sweet.png-9fd594d4011ef7c51cf9c89d5c0132b0.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/menus/main_menu.gd b/menus/main_menu.gd index 3856a39..f91fb60 100644 --- a/menus/main_menu.gd +++ b/menus/main_menu.gd @@ -52,7 +52,7 @@ func _on_HighScores_button_down() -> void: Game.last_mm_button = @"Panel/HighScores" Fade.fade_out(Options.transition_speed_secs) yield(Fade, "fade_finished") - SceneManager.current_scene = load("res://menus/scoreboards.tscn").instance() + SceneManager.current_scene = load("res://menus/scoreboards_scholar.tscn").instance() func _on_Options_button_down() -> void: diff --git a/menus/results.gd b/menus/results.gd index 641b3eb..7c320e6 100644 --- a/menus/results.gd +++ b/menus/results.gd @@ -1,7 +1,6 @@ extends Node const Text3D = preload("res://objects/hud/3d_text.tscn") -const SubmitScore = preload("res://menus/submit_score.tscn") const LevelSelect := preload("res://menus/level_select_scholar.tscn") onready var shards: Node2D = $ShardsAndBonuses/Shards diff --git a/menus/score_entry.gd b/menus/score_entry.gd index d59a2ce..89927e3 100644 --- a/menus/score_entry.gd +++ b/menus/score_entry.gd @@ -1,26 +1,47 @@ tool extends HBoxContainer +const DIFFICULTY_ICONS = [ + preload("res://graphics/hud/scores/sweet.png"), + preload("res://graphics/hud/scores/salty.png"), + preload("res://graphics/hud/scores/spicy.png"), + preload("res://graphics/hud/scores/pungent.png"), +] + export var place: int = 0 setget _set_place -export var user: String = "Username" setget _set_user -export var score: String = "00000" setget _set_score +export var player: String = "Username" setget _set_player +export var score: int = 0 setget _set_score +export var time: float = 0.0 setget _set_time +export(int, "Sweet", "Salty", "Spicy", "Pungent") var difficulty: int = 0 setget _set_difficulty func _ready() -> void: - $Place.text = " %01d " % place - $User.text = user - $Score.text = score + _set_place(place) + _set_player(player) + _set_score(score) + _set_time(time) + _set_difficulty(difficulty) func _set_place(value: int) -> void: place = value if is_inside_tree(): - $Place.text = " %01d " % place + $Place.text = "%d" % place -func _set_user(value: String) -> void: - user = value +func _set_player(value: String) -> void: + player = value.substr(0, 10) if is_inside_tree(): - $User.text = user + $Player.text = player -func _set_score(value: String) -> void: +func _set_score(value: int) -> void: score = value if is_inside_tree(): - $Score.text = score + $Score.text = "%05d" % score + +func _set_time(value: float) -> void: + time = value + if is_inside_tree(): + $Time.text = Game.format_time(time) + +func _set_difficulty(value: int) -> void: + difficulty = value + if is_inside_tree(): + $Difficulty.texture = DIFFICULTY_ICONS[difficulty] diff --git a/menus/score_entry.tscn b/menus/score_entry.tscn index 2eaac8c..26aaa66 100644 --- a/menus/score_entry.tscn +++ b/menus/score_entry.tscn @@ -1,32 +1,60 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=5 format=2] [ext_resource path="res://ui/theme.tres" type="Theme" id=1] [ext_resource path="res://menus/score_entry.gd" type="Script" id=2] +[ext_resource path="res://graphics/hud/scores/sweet.png" type="Texture" id=3] +[ext_resource path="res://ui/2ndpuberty_scholar_outline.fnt" type="BitmapFont" id=4] [node name="ScoreEntry" type="HBoxContainer"] -margin_right = 210.0 -margin_bottom = 10.0 +margin_right = 228.0 +margin_bottom = 12.0 +rect_min_size = Vector2( 0, 12 ) theme = ExtResource( 1 ) custom_constants/separation = 8 script = ExtResource( 2 ) -user = "--------" -score = "-----" +player = "coolplayer" [node name="Place" type="Label" parent="."] -margin_right = 21.0 -margin_bottom = 10.0 -text = " 0 " +margin_top = 1.0 +margin_right = 16.0 +margin_bottom = 11.0 +rect_min_size = Vector2( 16, 0 ) +custom_fonts/font = ExtResource( 4 ) +text = "0" +align = 1 -[node name="User" type="Label" parent="."] -margin_left = 29.0 -margin_right = 167.0 -margin_bottom = 10.0 -size_flags_horizontal = 3 -text = "--------" +[node name="Player" type="Label" parent="."] +margin_left = 24.0 +margin_top = 1.0 +margin_right = 94.0 +margin_bottom = 11.0 +rect_min_size = Vector2( 70, 0 ) +custom_fonts/font = ExtResource( 4 ) +text = "coolplayer" +align = 1 [node name="Score" type="Label" parent="."] -margin_left = 175.0 -margin_right = 210.0 -margin_bottom = 10.0 -text = "-----" +margin_left = 102.0 +margin_top = 1.0 +margin_right = 137.0 +margin_bottom = 11.0 +rect_min_size = Vector2( 35, 0 ) +custom_fonts/font = ExtResource( 4 ) +text = "00000" align = 2 + +[node name="Time" type="Label" parent="."] +margin_left = 145.0 +margin_top = 1.0 +margin_right = 201.0 +margin_bottom = 11.0 +rect_min_size = Vector2( 56, 0 ) +custom_fonts/font = ExtResource( 4 ) +text = "--:--.--" +align = 2 + +[node name="Difficulty" type="TextureRect" parent="."] +margin_left = 209.0 +margin_right = 221.0 +margin_bottom = 12.0 +texture = ExtResource( 3 ) diff --git a/menus/scoreboards_scholar.gd b/menus/scoreboards_scholar.gd new file mode 100644 index 0000000..10b3f05 --- /dev/null +++ b/menus/scoreboards_scholar.gd @@ -0,0 +1,108 @@ +extends Node + + +const PAGE_SIZE: int = 8 + + +var loaded_scores: Dictionary = {} +var selected_level: int = 0 +var _page: int = 0 + + +onready var scores: VBoxContainer = $"%Scores" +onready var level_title: Button = $"%LevelTitle" + + +func _ready() -> void: + yield(_refresh_scores(), "completed") + Fade.fade_in(Options.transition_speed_secs) + + +func _input(event: InputEvent) -> void: + if event.is_action_pressed("ui_right"): + selected_level = posmod(selected_level + 1, LevelData.levels.size()) + while not LevelData.levels[selected_level].has_scoreboard: + selected_level = posmod(selected_level + 1, LevelData.levels.size()) + _refresh_scores() + elif event.is_action_pressed("ui_left"): + selected_level = posmod(selected_level - 1, LevelData.levels.size()) + while not LevelData.levels[selected_level].has_scoreboard: + selected_level = posmod(selected_level - 1, LevelData.levels.size()) + _refresh_scores() + elif event.is_action_pressed("ui_down"): + _page += 1 + _refresh_scores() + elif event.is_action_pressed("ui_up"): + _page = int(max(_page - 1, 0)) + _refresh_scores() + elif event.is_action_pressed("ui_cancel"): + Fade.fade_out(Options.transition_speed_secs) + yield(Fade, "fade_finished") + SceneManager.current_scene = preload("res://menus/main_menu.tscn").instance() + + +func _refresh_scores() -> void: + level_title.text = LevelData.levels[selected_level].title + + var level = LevelData.levels[selected_level].save_id + if not level in loaded_scores: + yield(_load_scores(level), "completed") + + if ScoreBoard.errored: + push_error("Scoreboard could not be loaded.") + + var entries = loaded_scores.get(level, {}) + + while _page * PAGE_SIZE > entries.size(): + _page -= 1 + + var offset = _page * PAGE_SIZE + + $"%PrevScores".visible = _page > 0 + $"%NextScores".visible = entries.size() - offset > PAGE_SIZE + + for i in 8: + var entry_node = scores.get_node("ScoreEntry%d" % i) + if i >= entries.size() - offset: + entry_node.visible = false + else: + var player = entries.keys()[offset + i] + var entry = entries[player] + entry_node.visible = true + entry_node.place = offset + i + 1 + entry_node.player = player + entry_node.score = entry.score + entry_node.time = float(entry.time) * 0.001 # convert from ms + entry_node.difficulty = entry.difficulty + + +func _load_scores(level: String) -> void: + var result: Dictionary = yield(ScoreBoard.get_scores(level), "completed") + if ScoreBoard.errored: + #TODO: failure indication + return + + var players = result.keys().duplicate() + _sorting_dict = result + players.sort_custom(self, "_sort_scores") + + loaded_scores[level] = {} + for p in players: + loaded_scores[level][p] = result[p] + + +var _sorting_dict: Dictionary = {} +func _sort_scores(a, b) -> bool: + var score_a = _sorting_dict[a] + var score_b = _sorting_dict[b] + + if score_b.score < score_a.score: + return true + elif score_b.score == score_a.score: + if score_b.difficulty < score_a.difficulty: + return true + elif score_b.difficulty == score_a.difficulty: + if score_b.time > score_a.time: + return true + + return false diff --git a/menus/scoreboards_scholar.tscn b/menus/scoreboards_scholar.tscn new file mode 100644 index 0000000..bd9af0f --- /dev/null +++ b/menus/scoreboards_scholar.tscn @@ -0,0 +1,320 @@ +[gd_scene load_steps=16 format=2] + +[ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=1] +[ext_resource path="res://menus/scoreboards_scholar.gd" type="Script" id=2] +[ext_resource path="res://graphics/hud/arrow_down.png" type="Texture" id=3] +[ext_resource path="res://shaders/wibble_wobble.gdshader" type="Shader" id=4] +[ext_resource path="res://ui/theme.tres" type="Theme" id=5] +[ext_resource path="res://graphics/hud/pause_arrow.png" type="Texture" id=6] +[ext_resource path="res://menus/score_entry.tscn" type="PackedScene" id=7] +[ext_resource path="res://ui/2ndpuberty_scholar_outline.fnt" type="BitmapFont" id=8] +[ext_resource path="res://graphics/hud/arrow_up.png" type="Texture" id=9] + +[sub_resource type="ShaderMaterial" id=1] +shader = ExtResource( 1 ) +shader_param/color_1 = Color( 0.615686, 0.670588, 0.984314, 1 ) +shader_param/color_2 = Color( 1, 0.709804, 0.984314, 1 ) +shader_param/checker_size = Vector2( 24, 12 ) +shader_param/pan_speed = Vector2( 0, 0 ) +shader_param/cycle_speed = Vector2( 8, -8 ) +shader_param/cycle_alternation = Vector2( 0, 1 ) +shader_param/uv_transform = Transform2D( 1, 0, 1, 1, 0, 0 ) + +[sub_resource type="ShaderMaterial" id=2] +shader = ExtResource( 4 ) +shader_param/speed = Vector2( 4, 0 ) +shader_param/ammount = Vector2( 2, 0 ) +shader_param/offset = Vector2( 0, 0 ) +shader_param/delay = Vector2( 0, 0 ) + +[sub_resource type="ShaderMaterial" id=3] +shader = ExtResource( 4 ) +shader_param/speed = Vector2( 4, 0 ) +shader_param/ammount = Vector2( 2, 0 ) +shader_param/offset = Vector2( 0, 0 ) +shader_param/delay = Vector2( 4, 0 ) + +[sub_resource type="ShaderMaterial" id=5] +shader = ExtResource( 4 ) +shader_param/speed = Vector2( 0, 4 ) +shader_param/ammount = Vector2( 0, 2 ) +shader_param/offset = Vector2( 0, 0 ) +shader_param/delay = Vector2( 0, 0 ) + +[sub_resource type="ShaderMaterial" id=6] +shader = ExtResource( 4 ) +shader_param/speed = Vector2( 0, 4 ) +shader_param/ammount = Vector2( 0, 2 ) +shader_param/offset = Vector2( 0, 0 ) +shader_param/delay = Vector2( 0, 4 ) + +[sub_resource type="ShaderMaterial" id=4] +shader = ExtResource( 4 ) +shader_param/speed = Vector2( 8, 4 ) +shader_param/ammount = Vector2( 12, 24 ) +shader_param/offset = Vector2( 0, 0 ) +shader_param/delay = Vector2( 0, 0 ) + +[node name="Scoreboards" type="Node"] +script = ExtResource( 2 ) + +[node name="Background" type="ColorRect" parent="."] +material = SubResource( 1 ) +anchor_right = 1.0 +anchor_bottom = 1.0 + +[node name="BoardsScreen" type="VBoxContainer" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +theme = ExtResource( 5 ) +custom_constants/separation = 0 + +[node name="SelectLevel" type="HBoxContainer" parent="BoardsScreen"] +margin_right = 256.0 +margin_bottom = 16.0 +rect_min_size = Vector2( 0, 16 ) +alignment = 1 + +[node name="BackArrow" type="TextureRect" parent="BoardsScreen/SelectLevel"] +unique_name_in_owner = true +material = SubResource( 2 ) +margin_left = 72.0 +margin_top = 4.0 +margin_right = 78.0 +margin_bottom = 12.0 +size_flags_vertical = 4 +texture = ExtResource( 6 ) +flip_h = true + +[node name="LevelTitle" type="Button" parent="BoardsScreen/SelectLevel"] +unique_name_in_owner = true +margin_left = 82.0 +margin_top = 3.0 +margin_right = 173.0 +margin_bottom = 13.0 +size_flags_vertical = 4 +theme = ExtResource( 5 ) +custom_colors/font_color_focus = Color( 1, 0.968627, 0.709804, 1 ) +custom_colors/font_color = Color( 1, 1, 1, 1 ) +custom_fonts/font = ExtResource( 8 ) +text = "Verdant Hills" + +[node name="NextArrow" type="TextureRect" parent="BoardsScreen/SelectLevel"] +unique_name_in_owner = true +material = SubResource( 3 ) +margin_left = 177.0 +margin_top = 4.0 +margin_right = 183.0 +margin_bottom = 12.0 +size_flags_vertical = 4 +texture = ExtResource( 6 ) + +[node name="Scoreboard" type="HBoxContainer" parent="BoardsScreen"] +margin_top = 16.0 +margin_right = 256.0 +margin_bottom = 192.0 +focus_mode = 2 +size_flags_vertical = 3 +alignment = 1 + +[node name="PrevBoard" type="TextureRect" parent="BoardsScreen/Scoreboard"] +unique_name_in_owner = true +visible = false +material = SubResource( 2 ) +margin_top = 84.0 +margin_right = 6.0 +margin_bottom = 92.0 +size_flags_vertical = 4 +texture = ExtResource( 6 ) +flip_h = true + +[node name="MarginContainer" type="MarginContainer" parent="BoardsScreen/Scoreboard"] +margin_left = 10.0 +margin_right = 246.0 +margin_bottom = 176.0 +custom_constants/margin_right = 4 +custom_constants/margin_top = 4 +custom_constants/margin_left = 4 +custom_constants/margin_bottom = 4 + +[node name="VBoxContainer" type="VBoxContainer" parent="BoardsScreen/Scoreboard/MarginContainer"] +margin_left = 4.0 +margin_top = 4.0 +margin_right = 232.0 +margin_bottom = 172.0 + +[node name="Header" type="HBoxContainer" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer"] +margin_right = 228.0 +margin_bottom = 10.0 +rect_min_size = Vector2( 228, 10 ) +custom_constants/separation = 8 + +[node name="Place" type="Label" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/Header"] +margin_right = 16.0 +margin_bottom = 10.0 +rect_min_size = Vector2( 16, 0 ) +custom_fonts/font = ExtResource( 8 ) +text = "#" +align = 1 + +[node name="Player" type="Label" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/Header"] +margin_left = 24.0 +margin_right = 94.0 +margin_bottom = 10.0 +rect_min_size = Vector2( 70, 0 ) +custom_fonts/font = ExtResource( 8 ) +text = "Player" +align = 1 +clip_text = true + +[node name="Score" type="Label" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/Header"] +margin_left = 102.0 +margin_right = 137.0 +margin_bottom = 10.0 +rect_min_size = Vector2( 35, 0 ) +custom_fonts/font = ExtResource( 8 ) +text = "score" +align = 2 + +[node name="Time" type="Label" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/Header"] +margin_left = 145.0 +margin_right = 201.0 +margin_bottom = 10.0 +rect_min_size = Vector2( 56, 0 ) +custom_fonts/font = ExtResource( 8 ) +text = "score" +align = 1 + +[node name="Control" type="Control" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/Header"] +margin_left = 209.0 +margin_right = 221.0 +margin_bottom = 10.0 +rect_min_size = Vector2( 12, 0 ) + +[node name="HSeparator" type="HSeparator" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer"] +margin_top = 14.0 +margin_right = 228.0 +margin_bottom = 15.0 +custom_constants/separation = 1 + +[node name="ScoreboardTabs" type="Control" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer"] +unique_name_in_owner = true +margin_top = 19.0 +margin_right = 228.0 +margin_bottom = 168.0 +size_flags_vertical = 3 + +[node name="Scores" type="VBoxContainer" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs"] +unique_name_in_owner = true +anchor_right = 1.0 +anchor_bottom = 1.0 + +[node name="PrevScores" type="TextureRect" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/Scores"] +unique_name_in_owner = true +visible = false +material = SubResource( 5 ) +margin_left = 110.0 +margin_right = 118.0 +margin_bottom = 8.0 +rect_pivot_offset = Vector2( 3, 4 ) +size_flags_horizontal = 4 +size_flags_vertical = 4 +texture = ExtResource( 9 ) + +[node name="ScoreEntry0" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )] +place = 1 + +[node name="ScoreEntry1" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )] +margin_top = 16.0 +margin_bottom = 28.0 +place = 2 + +[node name="ScoreEntry2" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )] +margin_top = 32.0 +margin_bottom = 44.0 +place = 3 + +[node name="ScoreEntry3" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )] +margin_top = 48.0 +margin_bottom = 60.0 +place = 4 + +[node name="ScoreEntry4" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )] +margin_top = 64.0 +margin_bottom = 76.0 +place = 5 + +[node name="ScoreEntry5" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )] +margin_top = 80.0 +margin_bottom = 92.0 +place = 6 + +[node name="ScoreEntry6" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )] +margin_top = 96.0 +margin_bottom = 108.0 +place = 7 + +[node name="ScoreEntry7" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/Scores" instance=ExtResource( 7 )] +margin_top = 112.0 +margin_bottom = 124.0 +place = 8 + +[node name="NextScores" type="TextureRect" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/Scores"] +unique_name_in_owner = true +visible = false +material = SubResource( 6 ) +margin_left = 110.0 +margin_top = 128.0 +margin_right = 118.0 +margin_bottom = 136.0 +rect_pivot_offset = Vector2( 3, 4 ) +size_flags_horizontal = 4 +size_flags_vertical = 4 +texture = ExtResource( 3 ) + +[node name="LoadingIndicator" type="CenterContainer" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs"] +visible = false +anchor_right = 1.0 +anchor_bottom = 1.0 +size_flags_vertical = 3 + +[node name="Label" type="Label" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/LoadingIndicator"] +material = SubResource( 4 ) +margin_left = 110.0 +margin_top = 69.0 +margin_right = 117.0 +margin_bottom = 79.0 +text = "§" + +[node name="FailedIndicator" type="CenterContainer" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs"] +visible = false +anchor_right = 1.0 +anchor_bottom = 1.0 + +[node name="Label" type="Label" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/ScoreboardTabs/FailedIndicator"] +margin_left = 65.0 +margin_top = 69.0 +margin_right = 163.0 +margin_bottom = 79.0 +text = "Failed to load" + +[node name="PanelContainer" type="PanelContainer" parent="BoardsScreen/Scoreboard"] +visible = false +margin_left = 250.0 +margin_right = 474.0 +margin_bottom = 144.0 +rect_min_size = Vector2( 224, 144 ) +size_flags_horizontal = 4 +size_flags_vertical = 0 + +[node name="NextBoard" type="TextureRect" parent="BoardsScreen/Scoreboard"] +unique_name_in_owner = true +visible = false +material = SubResource( 3 ) +margin_left = 250.0 +margin_top = 84.0 +margin_right = 256.0 +margin_bottom = 92.0 +size_flags_horizontal = 0 +size_flags_vertical = 4 +texture = ExtResource( 6 ) diff --git a/project.godot b/project.godot index 4b61178..d94c3f8 100644 --- a/project.godot +++ b/project.godot @@ -109,7 +109,6 @@ SceneManager="*res://autoloads/scene_manager.tscn" Console="*res://autoloads/console.tscn" Fade="*res://autoloads/fade.tscn" StainLayer="*res://autoloads/stain_layer.tscn" -Ngio="*res://autoloads/ngio.gd" ScoreBoard="*res://autoloads/scoreboard.gd" [debug] diff --git a/scripts/level_entry.gd b/scripts/level_entry.gd index 55024db..db1b37c 100644 --- a/scripts/level_entry.gd +++ b/scripts/level_entry.gd @@ -16,8 +16,7 @@ export var shards_required_spicy: int = 0 export var shards_required_pungent: int = 0 export var boss_required: String = "" export var boss: bool = false -export var scores_id: int = -1 -export var times_id: int = -1 +export var has_scoreboard: bool = false export var scene: PackedScene var shards_required: int = 0 setget , _get_shards_required From 65053aa2230921037cef12ad5f2880c8eb8fd2a0 Mon Sep 17 00:00:00 2001 From: Haze Weathers Date: Sun, 1 Dec 2024 21:37:15 -0500 Subject: [PATCH 4/8] Player scoreboard name option --- autoloads/debug.gd | 5 ++- autoloads/options.gd | 11 ++++-- menus/file_create.gd | 2 ++ objects/hud/options_screen_scholar.gd | 2 +- objects/hud/options_screen_scholar.tscn | 46 +++++++++++++++++++++++-- objects/hud/player_name_input.gd | 29 ++++++++++++++++ project.godot | 6 ++++ 7 files changed, 95 insertions(+), 6 deletions(-) create mode 100644 objects/hud/player_name_input.gd diff --git a/autoloads/debug.gd b/autoloads/debug.gd index e6d493c..606b626 100644 --- a/autoloads/debug.gd +++ b/autoloads/debug.gd @@ -37,7 +37,7 @@ func _ready(): func _physics_process(delta): #DEBUG - if debug == true && !entry && !entry_index > 0: + if debug == true && !entry && !entry_index > 0 && !Options.entry: #Move player to mouse if Input.is_action_just_pressed("debug_move_player"): Audio.play_sound(Audio.a_mkey,Audio.ac_jump) @@ -67,6 +67,9 @@ func _physics_process(delta): if infinite_arrows: Game.arrows = 99 func _input(event): + if Options.entry: + return + if event is InputEventKey && event.is_pressed(): var character = OS.get_scancode_string(event.scancode) if character.length() > 1: diff --git a/autoloads/options.gd b/autoloads/options.gd index fca7516..215948a 100644 --- a/autoloads/options.gd +++ b/autoloads/options.gd @@ -18,7 +18,7 @@ const TRANS_SPEEDS := [0.8, 0.4, 0.2, 0.0000001] #Game var rumble: int = RumbleMode.FULL var gore: int = Gore.FULL -var scoreboard_name: String = "" +var scoreboard_name: String = "" setget _set_scoreboard_name var scoreboard_id: int = -1 #Video @@ -42,6 +42,9 @@ var last_file: int = 0 # default values var defaults = null +# text is being entered +var entry: bool = false + func _ready() -> void: pause_mode = PAUSE_MODE_PROCESS @@ -51,7 +54,7 @@ func _ready() -> void: load_options() func _unhandled_input(event: InputEvent) -> void: - if Debug.entry == false: + if not Debug.entry and not entry: if event.is_action_pressed("fullscreen"): OS.window_fullscreen = not OS.window_fullscreen @@ -125,6 +128,10 @@ func save_options() -> void: # Setters +# game setters +func _set_scoreboard_name(value: String) -> void: + scoreboard_name = value.substr(0, 10).to_lower() + # video setters func _set_fullscreen(value: bool) -> void: fullscreen = value diff --git a/menus/file_create.gd b/menus/file_create.gd index fd6f68a..6a91bf1 100644 --- a/menus/file_create.gd +++ b/menus/file_create.gd @@ -100,6 +100,8 @@ func _on_Exit_area_entered(area: Area2D) -> void: func _on_player_teleport_finished() -> void: if file.name.length() > 0: get_tree().paused = true + if Options.scoreboard_name.empty(): + Options.scoreboard_name = file.name file.save_to_file() Save.current_file = file Game.difficulty = file.difficulty diff --git a/objects/hud/options_screen_scholar.gd b/objects/hud/options_screen_scholar.gd index 4f8d11c..ffb07d0 100644 --- a/objects/hud/options_screen_scholar.gd +++ b/objects/hud/options_screen_scholar.gd @@ -39,7 +39,7 @@ func focus() -> void: func _unhandled_input(event: InputEvent) -> void: Options.save_options() - if can_exit and event.is_action_pressed("ui_cancel"): + if can_exit and event.is_action_pressed("ui_cancel") and not Options.entry: if visible == true: emit_signal("exit") diff --git a/objects/hud/options_screen_scholar.tscn b/objects/hud/options_screen_scholar.tscn index 3e1f343..13733a4 100644 --- a/objects/hud/options_screen_scholar.tscn +++ b/objects/hud/options_screen_scholar.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=16 format=2] +[gd_scene load_steps=19 format=2] [ext_resource path="res://objects/hud/options_screen_scholar.gd" type="Script" id=1] [ext_resource path="res://ui/theme.tres" type="Theme" id=2] @@ -11,6 +11,21 @@ [ext_resource path="res://objects/hud/set_gamepad_button.gd" type="Script" id=9] [ext_resource path="res://objects/hud/scroll_follow_focus.gd" type="Script" id=10] [ext_resource path="res://graphics/hud/levelselect_nexlevel.png" type="Texture" id=11] +[ext_resource path="res://objects/hud/player_name_input.gd" type="Script" id=12] + +[sub_resource type="StyleBoxFlat" id=5] +content_margin_left = 1.0 +content_margin_right = 1.0 +bg_color = Color( 0.14902, 0.0980392, 0.247059, 1 ) +corner_detail = 1 +anti_aliasing = false + +[sub_resource type="StyleBoxFlat" id=6] +content_margin_left = 1.0 +content_margin_right = 1.0 +bg_color = Color( 0.213124, 0.165611, 0.382812, 1 ) +corner_detail = 1 +anti_aliasing = false [sub_resource type="ShaderMaterial" id=1] shader = ExtResource( 4 ) @@ -100,7 +115,6 @@ size_flags_vertical = 3 tabs_visible = false [node name="Game" type="VBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs"] -visible = false anchor_right = 1.0 anchor_bottom = 1.0 focus_next = NodePath("Rumble/SelectRumble") @@ -146,11 +160,34 @@ margin_left = 39.0 margin_right = 218.0 margin_bottom = 12.0 focus_neighbour_top = NodePath("../../Rumble/SelectRumble") +focus_neighbour_bottom = NodePath("../../ScoreBoardName/PlayerNameInput") focus_mode = 2 size_flags_horizontal = 3 script = ExtResource( 3 ) options = [ "none", "no stains", "full" ] +[node name="ScoreBoardName" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game"] +margin_top = 32.0 +margin_right = 218.0 +margin_bottom = 42.0 + +[node name="Label" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/ScoreBoardName"] +margin_right = 112.0 +margin_bottom = 10.0 +text = "Scoreboard name:" + +[node name="PlayerNameInput" type="TextEdit" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/ScoreBoardName"] +margin_left = 130.0 +margin_right = 203.0 +margin_bottom = 10.0 +rect_min_size = Vector2( 73, 0 ) +focus_neighbour_top = NodePath("../../Gore/SelectGore") +size_flags_horizontal = 6 +custom_constants/line_spacing = 0 +custom_styles/focus = SubResource( 5 ) +custom_styles/normal = SubResource( 6 ) +script = ExtResource( 12 ) + [node name="Video" type="VBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs"] visible = false anchor_right = 1.0 @@ -459,6 +496,7 @@ script = ExtResource( 3 ) options = [ "off", "on" ] [node name="Input" type="VBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs"] +visible = false anchor_right = 1.0 anchor_bottom = 1.0 focus_next = NodePath("ScrollContainer/ControlsVBox/Left/Keyboard") @@ -825,6 +863,10 @@ align = 1 [connection signal="selected" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/SelectTab" to="." method="_on_tab_selected"] [connection signal="selected" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/Rumble/SelectRumble" to="." method="_on_Rumble_selected"] [connection signal="selected" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/Gore/SelectGore" to="." method="_on_Gore_selected"] +[connection signal="focus_entered" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/ScoreBoardName/PlayerNameInput" to="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/ScoreBoardName/PlayerNameInput" method="_on_focus_entered"] +[connection signal="focus_exited" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/ScoreBoardName/PlayerNameInput" to="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/ScoreBoardName/PlayerNameInput" method="_on_focus_exited"] +[connection signal="gui_input" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/ScoreBoardName/PlayerNameInput" to="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/ScoreBoardName/PlayerNameInput" method="_on_gui_input"] +[connection signal="text_changed" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/ScoreBoardName/PlayerNameInput" to="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Game/ScoreBoardName/PlayerNameInput" method="_on_text_changed"] [connection signal="selected" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/Fullscreen/SelectFullscreen" to="." method="_on_Fullscreen_selected"] [connection signal="selected" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/WindowSize/SelectWindowSize" to="." method="_on_WindowSize_selected"] [connection signal="selected" from="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/Tabs/Video/Scaling/SelectScaling" to="." method="_on_Scaling_selected"] diff --git a/objects/hud/player_name_input.gd b/objects/hud/player_name_input.gd new file mode 100644 index 0000000..23edaf8 --- /dev/null +++ b/objects/hud/player_name_input.gd @@ -0,0 +1,29 @@ +extends TextEdit + + +func _ready() -> void: + text = Options.scoreboard_name + + +func _exit_tree() -> void: + Options.entry = false + + +func _on_text_changed() -> void: + text = text.substr(0, 10).to_lower().strip_escapes() + Options.scoreboard_name = text + cursor_set_column(text.length()) + + +func _on_focus_entered() -> void: + Options.entry = true + cursor_set_column(text.length()) + + +func _on_focus_exited() -> void: + Options.set_deferred("entry", false) + + +func _on_gui_input(event: InputEvent) -> void: + if event.is_action_pressed("text_enter"): + get_node(focus_neighbour_top).grab_focus() diff --git a/project.godot b/project.godot index d94c3f8..6b26af2 100644 --- a/project.godot +++ b/project.godot @@ -359,6 +359,12 @@ shield={ , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":5,"pressure":0.0,"pressed":false,"script":null) ] } +text_enter={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777221,"physical_scancode":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777217,"physical_scancode":0,"unicode":0,"echo":false,"script":null) + ] +} [input_devices] From 04c87ebf66af89c48541b1777b74e320a152cef7 Mon Sep 17 00:00:00 2001 From: Haze Weathers Date: Sun, 1 Dec 2024 22:34:49 -0500 Subject: [PATCH 5/8] EEEEEH?? EASY MODO?? --- autoloads/game.gd | 6 ++++++ menus/results.gd | 5 +++++ menus/results.tscn | 16 ++++++++++++---- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/autoloads/game.gd b/autoloads/game.gd index a17ea40..83dc856 100644 --- a/autoloads/game.gd +++ b/autoloads/game.gd @@ -9,6 +9,9 @@ enum Difficulty { PUNGENT, # faster enemies, 3 lives } +# score multiplier for easy mode +const EASY_DIFFICULTY_MODIFIER: float = 0.75 + ## resolution the game renders at const RESOLUTION := Vector2(256,192) @@ -139,6 +142,9 @@ func tally_scores() -> void: perfect_bonus += 1000 # final score final_score = score + arrows_bonus + collection_bonus + time_bonus + life_bonus + perfect_bonus + # easy mode modifier + if difficulty == Difficulty.SWEET: + final_score *= EASY_DIFFICULTY_MODIFIER if marathon_mode: marathon_shards += shards_collected.count(true) marathon_score += final_score diff --git a/menus/results.gd b/menus/results.gd index 7c320e6..9748925 100644 --- a/menus/results.gd +++ b/menus/results.gd @@ -28,6 +28,11 @@ func _notification(what: int) -> void: func _ready() -> void: var palette = load("res://graphics/player/palettes/%s.tex" % Game.current_palette) $"%ArrowBonus".material.set_shader_param("palette", palette) + # easy indicator + if Game.difficulty == Game.Difficulty.SWEET: + $EasyIndicator.visible = true + else: + $EasyIndicator.visible = false #preload final score text_3d = Text3D.instance() text_3d.anim = "final score" diff --git a/menus/results.tscn b/menus/results.tscn index aa437f8..d5d1733 100644 --- a/menus/results.tscn +++ b/menus/results.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=34 format=2] +[gd_scene load_steps=35 format=2] [ext_resource path="res://shaders/wibble_wobble.gdshader" type="Shader" id=1] [ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=2] @@ -19,6 +19,7 @@ [ext_resource path="res://scripts/randomize_particle_start.gd" type="Script" id=17] [ext_resource path="res://graphics/hud/pause_arrow.png" type="Texture" id=18] [ext_resource path="res://ui/2ndpuberty_scholar_outline.fnt" type="BitmapFont" id=19] +[ext_resource path="res://graphics/hud/scores/sweet.png" type="Texture" id=20] [sub_resource type="ShaderMaterial" id=5] shader = ExtResource( 2 ) @@ -1054,6 +1055,13 @@ theme = ExtResource( 10 ) text = "Score: 0000000" align = 1 +[node name="EasyIndicator" type="TextureRect" parent="."] +margin_left = 61.0 +margin_top = 7.0 +margin_right = 73.0 +margin_bottom = 19.0 +texture = ExtResource( 20 ) + [node name="Time" type="Label" parent="."] material = ExtResource( 9 ) margin_top = 178.0 @@ -1113,15 +1121,15 @@ rect_pivot_offset = Vector2( 45.5, 18 ) theme = ExtResource( 10 ) [node name="Label" type="Label" parent="CenterContainer/SubmitScore"] -margin_right = 126.0 +margin_right = 91.0 margin_bottom = 10.0 custom_fonts/font = ExtResource( 19 ) text = "submit score?" [node name="YesNoPrompt" type="PanelContainer" parent="CenterContainer/SubmitScore"] -margin_left = 18.0 +margin_left = 1.0 margin_top = 14.0 -margin_right = 107.0 +margin_right = 90.0 margin_bottom = 36.0 size_flags_horizontal = 4 From 2e604bb5f65bbbef1994f382b017e697c637cf7e Mon Sep 17 00:00:00 2001 From: Haze Weathers Date: Sun, 1 Dec 2024 22:35:29 -0500 Subject: [PATCH 6/8] That is supposed to say 'time' --- menus/scoreboards_scholar.tscn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menus/scoreboards_scholar.tscn b/menus/scoreboards_scholar.tscn index bd9af0f..ca8f960 100644 --- a/menus/scoreboards_scholar.tscn +++ b/menus/scoreboards_scholar.tscn @@ -182,7 +182,7 @@ margin_right = 201.0 margin_bottom = 10.0 rect_min_size = Vector2( 56, 0 ) custom_fonts/font = ExtResource( 8 ) -text = "score" +text = "time" align = 1 [node name="Control" type="Control" parent="BoardsScreen/Scoreboard/MarginContainer/VBoxContainer/Header"] From b7b6ff64f3abe04e51cf925ae0f414e3b9b9d542 Mon Sep 17 00:00:00 2001 From: Haze Weathers Date: Sun, 1 Dec 2024 22:54:05 -0500 Subject: [PATCH 7/8] increase http timeout to give a bit more grace period --- autoloads/scoreboard.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoloads/scoreboard.gd b/autoloads/scoreboard.gd index 4464cd5..17a043d 100644 --- a/autoloads/scoreboard.gd +++ b/autoloads/scoreboard.gd @@ -41,7 +41,7 @@ func _ready() -> void: http = HTTPRequest.new() http.download_chunk_size = 4096 - http.timeout = 10.0 + http.timeout = 30.0 http.use_threads = true http.connect("request_completed", self, "_on_request_completed") add_child(http) From ceb65b43189398059450e29af41876d8a81deae4 Mon Sep 17 00:00:00 2001 From: Haze Weathers Date: Sun, 1 Dec 2024 23:09:20 -0500 Subject: [PATCH 8/8] difficulty icons in file create screen :) --- menus/file_create.tscn | 49 ++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/menus/file_create.tscn b/menus/file_create.tscn index 1ca045b..7521d3b 100644 --- a/menus/file_create.tscn +++ b/menus/file_create.tscn @@ -1,23 +1,26 @@ -[gd_scene load_steps=29 format=2] +[gd_scene load_steps=32 format=2] [ext_resource path="res://shaders/ska_plane.gdshader" type="Shader" id=1] [ext_resource path="res://ui/theme.tres" type="Theme" id=2] [ext_resource path="res://shaders/wibble_wobble.gdshader" type="Shader" id=3] [ext_resource path="res://graphics/hud/sg_menu.png" type="Texture" id=4] [ext_resource path="res://graphics/hud/sg_tasting.png" type="Texture" id=5] -[ext_resource path="res://graphics/hud/pause_arrow.png" type="Texture" id=6] +[ext_resource path="res://graphics/hud/scores/salty.png" type="Texture" id=6] [ext_resource path="res://menus/file_create.gd" type="Script" id=7] [ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=8] [ext_resource path="res://tilesets/t_abstract.tres" type="TileSet" id=9] [ext_resource path="res://objects/player/player.tscn" type="PackedScene" id=10] [ext_resource path="res://objects/hud/letter_block.tscn" type="PackedScene" id=11] [ext_resource path="res://tilesets/t_ladders.tres" type="TileSet" id=12] +[ext_resource path="res://graphics/hud/scores/sweet.png" type="Texture" id=13] [ext_resource path="res://graphics/exit/exit.png" type="Texture" id=14] [ext_resource path="res://objects/environment/ladder/ladder.tscn" type="PackedScene" id=15] [ext_resource path="res://objects/hud/menu_sounds.tscn" type="PackedScene" id=16] [ext_resource path="res://shaders/can_stain.tres" type="Material" id=17] [ext_resource path="res://shaders/beam_of_sin.gdshader" type="Shader" id=18] [ext_resource path="res://graphics/exit/exit_back.png" type="Texture" id=19] +[ext_resource path="res://graphics/hud/scores/pungent.png" type="Texture" id=20] +[ext_resource path="res://graphics/hud/scores/spicy.png" type="Texture" id=21] [sub_resource type="ShaderMaterial" id=1] shader = ExtResource( 1 ) @@ -136,20 +139,20 @@ theme = ExtResource( 2 ) [node name="Sweet" type="TextureButton" parent="DifficultySelect/ButtonsPanel"] material = SubResource( 3 ) -margin_left = 8.0 -margin_top = 9.0 -margin_right = 16.0 -margin_bottom = 17.0 +margin_left = 5.0 +margin_top = 8.0 +margin_right = 17.0 +margin_bottom = 20.0 focus_neighbour_top = NodePath("../Pungent") focus_neighbour_bottom = NodePath("../Salty") -texture_focused = ExtResource( 6 ) +texture_focused = ExtResource( 13 ) [node name="Salty" type="TextureButton" parent="DifficultySelect/ButtonsPanel"] material = SubResource( 3 ) -margin_left = 8.0 -margin_top = 22.0 -margin_right = 16.0 -margin_bottom = 30.0 +margin_left = 5.0 +margin_top = 21.0 +margin_right = 17.0 +margin_bottom = 33.0 focus_neighbour_top = NodePath("../Sweet") focus_neighbour_bottom = NodePath("../Spicy") texture_focused = ExtResource( 6 ) @@ -157,29 +160,29 @@ texture_focused = ExtResource( 6 ) [node name="Spicy" type="TextureButton" parent="DifficultySelect/ButtonsPanel"] unique_name_in_owner = true material = SubResource( 3 ) -margin_left = 8.0 -margin_top = 35.0 -margin_right = 16.0 -margin_bottom = 43.0 +margin_left = 5.0 +margin_top = 34.0 +margin_right = 17.0 +margin_bottom = 46.0 focus_neighbour_top = NodePath("../Salty") focus_neighbour_bottom = NodePath("../Pungent") -texture_focused = ExtResource( 6 ) +texture_focused = ExtResource( 21 ) [node name="Pungent" type="TextureButton" parent="DifficultySelect/ButtonsPanel"] material = SubResource( 3 ) -margin_left = 8.0 -margin_top = 48.0 -margin_right = 16.0 -margin_bottom = 56.0 +margin_left = 5.0 +margin_top = 47.0 +margin_right = 17.0 +margin_bottom = 59.0 focus_neighbour_top = NodePath("../Spicy") focus_neighbour_bottom = NodePath("../Sweet") -texture_focused = ExtResource( 6 ) +texture_focused = ExtResource( 20 ) [node name="Body" type="Label" parent="DifficultySelect/ButtonsPanel"] material = SubResource( 2 ) -margin_left = 16.0 +margin_left = 18.0 margin_top = 8.0 -margin_right = 65.0 +margin_right = 67.0 margin_bottom = 57.0 text = "sweet salty