diff --git a/asset_credits.org b/asset_credits.org index 862c823..ce8f06f 100644 --- a/asset_credits.org +++ b/asset_credits.org @@ -45,6 +45,14 @@ Asset credits *** License: OFL 1.1 +** Orbitron + +*** Retrieved from https://fonts.google.com/specimen/Orbitron + +*** Author: Matt McInerney + +*** License: OFL 1.1 + * Sound ** drive1.wav diff --git a/assets/fonts/Geo/Geo_Bold.tres b/assets/fonts/Geo/Geo_Bold.tres new file mode 100644 index 0000000..658c176 --- /dev/null +++ b/assets/fonts/Geo/Geo_Bold.tres @@ -0,0 +1,7 @@ +[gd_resource type="FontVariation" load_steps=2 format=3 uid="uid://ehkfcv7lram0"] + +[ext_resource type="FontFile" uid="uid://s4c1kf0rk2mb" path="res://assets/fonts/Geo/Geo-Regular.ttf" id="1_6hjgi"] + +[resource] +base_font = ExtResource("1_6hjgi") +variation_embolden = 0.5 diff --git a/assets/fonts/Geo/Geo_Bold_Italics.tres b/assets/fonts/Geo/Geo_Bold_Italics.tres new file mode 100644 index 0000000..27f7041 --- /dev/null +++ b/assets/fonts/Geo/Geo_Bold_Italics.tres @@ -0,0 +1,7 @@ +[gd_resource type="FontVariation" load_steps=2 format=3 uid="uid://c2olk85hfh4ln"] + +[ext_resource type="FontFile" uid="uid://b6gxwgomstkgu" path="res://assets/fonts/Geo/Geo-Italic.ttf" id="1_l0o26"] + +[resource] +base_font = ExtResource("1_l0o26") +variation_embolden = 0.5 diff --git a/assets/fonts/Orbitron/OFL.txt b/assets/fonts/Orbitron/OFL.txt new file mode 100644 index 0000000..57641e9 --- /dev/null +++ b/assets/fonts/Orbitron/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2018 The Orbitron Project Authors (https://github.com/theleagueof/orbitron), with Reserved Font Name: "Orbitron" + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/assets/fonts/Orbitron/Orbitron-VariableFont_wght.ttf b/assets/fonts/Orbitron/Orbitron-VariableFont_wght.ttf new file mode 100644 index 0000000..2f33003 Binary files /dev/null and b/assets/fonts/Orbitron/Orbitron-VariableFont_wght.ttf differ diff --git a/assets/fonts/Orbitron/Orbitron-VariableFont_wght.ttf.import b/assets/fonts/Orbitron/Orbitron-VariableFont_wght.ttf.import new file mode 100644 index 0000000..5285ad1 --- /dev/null +++ b/assets/fonts/Orbitron/Orbitron-VariableFont_wght.ttf.import @@ -0,0 +1,34 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://cbaqlaqdobnux" +path="res://.godot/imported/Orbitron-VariableFont_wght.ttf-19ead88ef6e90de37fa6547cf6fb513b.fontdata" + +[deps] + +source_file="res://assets/fonts/Orbitron/Orbitron-VariableFont_wght.ttf" +dest_files=["res://.godot/imported/Orbitron-VariableFont_wght.ttf-19ead88ef6e90de37fa6547cf6fb513b.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/assets/fonts/Orbitron/Orbitron_Bold_Italics.tres b/assets/fonts/Orbitron/Orbitron_Bold_Italics.tres new file mode 100644 index 0000000..9c577a6 --- /dev/null +++ b/assets/fonts/Orbitron/Orbitron_Bold_Italics.tres @@ -0,0 +1,7 @@ +[gd_resource type="FontVariation" load_steps=2 format=3 uid="uid://y3lcfr4ys8d3"] + +[ext_resource type="FontFile" uid="uid://dyx4wcq8wlpbh" path="res://assets/fonts/Orbitron/static/Orbitron-Black.ttf" id="1_sdwod"] + +[resource] +base_font = ExtResource("1_sdwod") +variation_transform = Transform2D(1, 0.2, 0, 1, 0, 0) diff --git a/assets/fonts/Orbitron/Orbitron_Italics.tres b/assets/fonts/Orbitron/Orbitron_Italics.tres new file mode 100644 index 0000000..232b48d --- /dev/null +++ b/assets/fonts/Orbitron/Orbitron_Italics.tres @@ -0,0 +1,7 @@ +[gd_resource type="FontVariation" load_steps=2 format=3 uid="uid://cjisjunqauv68"] + +[ext_resource type="FontFile" uid="uid://bmv0pofrw1wh0" path="res://assets/fonts/Orbitron/static/Orbitron-Regular.ttf" id="1_1cs6e"] + +[resource] +base_font = ExtResource("1_1cs6e") +variation_transform = Transform2D(1, 0.2, 0, 1, 0, 0) diff --git a/assets/fonts/Orbitron/README.txt b/assets/fonts/Orbitron/README.txt new file mode 100644 index 0000000..be5114f --- /dev/null +++ b/assets/fonts/Orbitron/README.txt @@ -0,0 +1,68 @@ +Orbitron Variable Font +====================== + +This download contains Orbitron as both a variable font and static fonts. + +Orbitron is a variable font with this axis: + wght + +This means all the styles are contained in a single file: + Orbitron-VariableFont_wght.ttf + +If your app fully supports variable fonts, you can now pick intermediate styles +that aren’t available as static fonts. Not all apps support variable fonts, and +in those cases you can use the static font files for Orbitron: + static/Orbitron-Regular.ttf + static/Orbitron-Medium.ttf + static/Orbitron-SemiBold.ttf + static/Orbitron-Bold.ttf + static/Orbitron-ExtraBold.ttf + static/Orbitron-Black.ttf + +Get started +----------- + +1. Install the font files you want to use + +2. Use your app's font picker to view the font family and all the +available styles + +Learn more about variable fonts +------------------------------- + + https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts + https://variablefonts.typenetwork.com + https://medium.com/variable-fonts + +In desktop apps + + https://theblog.adobe.com/can-variable-fonts-illustrator-cc + https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts + +Online + + https://developers.google.com/fonts/docs/getting_started + https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide + https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts + +Installing fonts + + MacOS: https://support.apple.com/en-us/HT201749 + Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux + Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows + +Android Apps + + https://developers.google.com/fonts/docs/android + https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts + +License +------- +Please read the full license text (OFL.txt) to understand the permissions, +restrictions and requirements for usage, redistribution, and modification. + +You can use them in your products & projects – print or digital, +commercial or otherwise. + +This isn't legal advice, please consider consulting a lawyer and see the full +license for all details. diff --git a/assets/fonts/Orbitron/static/Orbitron-Black.ttf b/assets/fonts/Orbitron/static/Orbitron-Black.ttf new file mode 100644 index 0000000..64d216b Binary files /dev/null and b/assets/fonts/Orbitron/static/Orbitron-Black.ttf differ diff --git a/assets/fonts/Orbitron/static/Orbitron-Black.ttf.import b/assets/fonts/Orbitron/static/Orbitron-Black.ttf.import new file mode 100644 index 0000000..e1989d5 --- /dev/null +++ b/assets/fonts/Orbitron/static/Orbitron-Black.ttf.import @@ -0,0 +1,34 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://dyx4wcq8wlpbh" +path="res://.godot/imported/Orbitron-Black.ttf-4f56be6116e641811a86edeabcd2d703.fontdata" + +[deps] + +source_file="res://assets/fonts/Orbitron/static/Orbitron-Black.ttf" +dest_files=["res://.godot/imported/Orbitron-Black.ttf-4f56be6116e641811a86edeabcd2d703.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/assets/fonts/Orbitron/static/Orbitron-Bold.ttf b/assets/fonts/Orbitron/static/Orbitron-Bold.ttf new file mode 100644 index 0000000..9c8643c Binary files /dev/null and b/assets/fonts/Orbitron/static/Orbitron-Bold.ttf differ diff --git a/assets/fonts/Orbitron/static/Orbitron-Bold.ttf.import b/assets/fonts/Orbitron/static/Orbitron-Bold.ttf.import new file mode 100644 index 0000000..ce5b698 --- /dev/null +++ b/assets/fonts/Orbitron/static/Orbitron-Bold.ttf.import @@ -0,0 +1,34 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://djk8vf63wdnsx" +path="res://.godot/imported/Orbitron-Bold.ttf-8b89fbe3c12c453b18cf8303d33da7bc.fontdata" + +[deps] + +source_file="res://assets/fonts/Orbitron/static/Orbitron-Bold.ttf" +dest_files=["res://.godot/imported/Orbitron-Bold.ttf-8b89fbe3c12c453b18cf8303d33da7bc.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/assets/fonts/Orbitron/static/Orbitron-ExtraBold.ttf b/assets/fonts/Orbitron/static/Orbitron-ExtraBold.ttf new file mode 100644 index 0000000..6081973 Binary files /dev/null and b/assets/fonts/Orbitron/static/Orbitron-ExtraBold.ttf differ diff --git a/assets/fonts/Orbitron/static/Orbitron-ExtraBold.ttf.import b/assets/fonts/Orbitron/static/Orbitron-ExtraBold.ttf.import new file mode 100644 index 0000000..3708cf0 --- /dev/null +++ b/assets/fonts/Orbitron/static/Orbitron-ExtraBold.ttf.import @@ -0,0 +1,34 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://dbeni2o18lk3a" +path="res://.godot/imported/Orbitron-ExtraBold.ttf-89bec0e872cbcfe16e37e73e9e75d81b.fontdata" + +[deps] + +source_file="res://assets/fonts/Orbitron/static/Orbitron-ExtraBold.ttf" +dest_files=["res://.godot/imported/Orbitron-ExtraBold.ttf-89bec0e872cbcfe16e37e73e9e75d81b.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/assets/fonts/Orbitron/static/Orbitron-Medium.ttf b/assets/fonts/Orbitron/static/Orbitron-Medium.ttf new file mode 100644 index 0000000..1feb3ef Binary files /dev/null and b/assets/fonts/Orbitron/static/Orbitron-Medium.ttf differ diff --git a/assets/fonts/Orbitron/static/Orbitron-Medium.ttf.import b/assets/fonts/Orbitron/static/Orbitron-Medium.ttf.import new file mode 100644 index 0000000..4d2a056 --- /dev/null +++ b/assets/fonts/Orbitron/static/Orbitron-Medium.ttf.import @@ -0,0 +1,34 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://b4f2gbckqpae4" +path="res://.godot/imported/Orbitron-Medium.ttf-d8d4495b34cc31a0e3d103c2a99dad64.fontdata" + +[deps] + +source_file="res://assets/fonts/Orbitron/static/Orbitron-Medium.ttf" +dest_files=["res://.godot/imported/Orbitron-Medium.ttf-d8d4495b34cc31a0e3d103c2a99dad64.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/assets/fonts/Orbitron/static/Orbitron-Regular.ttf b/assets/fonts/Orbitron/static/Orbitron-Regular.ttf new file mode 100644 index 0000000..ebaece0 Binary files /dev/null and b/assets/fonts/Orbitron/static/Orbitron-Regular.ttf differ diff --git a/assets/fonts/Orbitron/static/Orbitron-Regular.ttf.import b/assets/fonts/Orbitron/static/Orbitron-Regular.ttf.import new file mode 100644 index 0000000..f60a129 --- /dev/null +++ b/assets/fonts/Orbitron/static/Orbitron-Regular.ttf.import @@ -0,0 +1,34 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://bmv0pofrw1wh0" +path="res://.godot/imported/Orbitron-Regular.ttf-2f53598a38b7cf8511acdd2231e8bfe4.fontdata" + +[deps] + +source_file="res://assets/fonts/Orbitron/static/Orbitron-Regular.ttf" +dest_files=["res://.godot/imported/Orbitron-Regular.ttf-2f53598a38b7cf8511acdd2231e8bfe4.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/assets/fonts/Orbitron/static/Orbitron-SemiBold.ttf b/assets/fonts/Orbitron/static/Orbitron-SemiBold.ttf new file mode 100644 index 0000000..81894d5 Binary files /dev/null and b/assets/fonts/Orbitron/static/Orbitron-SemiBold.ttf differ diff --git a/assets/fonts/Orbitron/static/Orbitron-SemiBold.ttf.import b/assets/fonts/Orbitron/static/Orbitron-SemiBold.ttf.import new file mode 100644 index 0000000..c982928 --- /dev/null +++ b/assets/fonts/Orbitron/static/Orbitron-SemiBold.ttf.import @@ -0,0 +1,34 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://dxegxmpnkyna4" +path="res://.godot/imported/Orbitron-SemiBold.ttf-48a2c690838e0199310d9d72e5469267.fontdata" + +[deps] + +source_file="res://assets/fonts/Orbitron/static/Orbitron-SemiBold.ttf" +dest_files=["res://.godot/imported/Orbitron-SemiBold.ttf-48a2c690838e0199310d9d72e5469267.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/assets/text/text.csv b/assets/text/text.csv index 653d4e6..b5c4ad8 100644 --- a/assets/text/text.csv +++ b/assets/text/text.csv @@ -137,3 +137,10 @@ BALL_POWER,Powerball MAP_DEBUG,"Debug Island" , CHARACTER_DEBUG,"Debug Girl" +, +, +MSG_ABOUT_SINGLE_PLAYER,"Go GFOLF yourself!" +MSG_ABOUT_MULTI_PLAYER,"Go GFOLF your friends, too!" +MSG_ABOUT_SETTINGS,"View and change gameplay, accessibility, graphics, sound, and input options." +MSG_ABOUT_CREDITS,"Meet the people who made the game!" +MSG_ABOUT_QUIT,"Exit the game. See you next mission!" diff --git a/src/ui/decorations/text_effects/typewriter/typewriter_effect.gd b/src/ui/decorations/text_effects/typewriter/typewriter_effect.gd index e28a414..a51b587 100644 --- a/src/ui/decorations/text_effects/typewriter/typewriter_effect.gd +++ b/src/ui/decorations/text_effects/typewriter/typewriter_effect.gd @@ -9,6 +9,8 @@ extends RichTextEffect signal typing +const EDITOR_DEFAULT_SPEED = 20.0 + @export var scale_curve: Curve @export var translation_curve: CurveXYZTexture @@ -24,47 +26,54 @@ var bbcode: String = "type" var _force_visible := false -func _init(force_visible_signal: Signal) -> void: - if force_visible_signal: - force_visible_signal.connect(_set_force_visible) +func _init(force_visible_signal: Variant = null) -> void: + if force_visible_signal is Signal: + (force_visible_signal as Signal).connect(_set_force_visible) + + +func _get_default_speed() -> float: + if Engine.is_editor_hint(): + return EDITOR_DEFAULT_SPEED + return Game.settings.default_text_speed func _process_custom_fx(char_fx: CharFXTransform) -> bool: if not _force_visible: - var speed: float = char_fx.env.get("speed", Game.settings.default_text_speed) + var speed: float = char_fx.env.get("speed", _get_default_speed()) var delay: float = char_fx.env.get("delay", 0.0) var factor: float = char_fx.env.get("factor", 1.0) - var server := TextServerManager.get_primary_interface() - var glyph_size := server.font_get_glyph_size( - char_fx.font, 0.5 * glyph_size_factor * Vector2i.ONE, char_fx.glyph_index - ) - var pivot := glyph_size * Vector2(-1, 1) - var rel_time := (speed * (char_fx.elapsed_time - delay) - char_fx.relative_index) / factor - var scale := Vector2.ONE - if scale_curve: - scale *= scale_curve.sample_baked(rel_time) - - var translation := Vector2.ZERO - if translation_curve: - if translation_curve.curve_x: - translation.x = translation_curve.curve_x.sample_baked(rel_time) - if translation_curve.curve_y: - translation.y = translation_curve.curve_y.sample_baked(rel_time) - - char_fx.transform = ( - char_fx - . transform - . translated_local(-pivot) - . scaled_local(scale) - . translated_local(pivot) - . translated_local(translation) - ) - char_fx.visible = rel_time > 0 + if scale_curve or translation_curve: + var server := TextServerManager.get_primary_interface() + var glyph_size := server.font_get_glyph_size( + char_fx.font, 0.5 * glyph_size_factor * Vector2i.ONE, char_fx.glyph_index + ) + var pivot := glyph_size * Vector2(-1, 1) + + var scale := Vector2.ONE + if scale_curve: + scale *= scale_curve.sample_baked(rel_time) + + var translation := Vector2.ZERO + if translation_curve: + if translation_curve.curve_x: + translation.x = translation_curve.curve_x.sample_baked(rel_time) + if translation_curve.curve_y: + translation.y = translation_curve.curve_y.sample_baked(rel_time) + + char_fx.transform = ( + char_fx + . transform + . translated_local(-pivot) + . scaled_local(scale) + . translated_local(pivot) + . translated_local(translation) + ) + if rel_time < 1: typing.emit() diff --git a/src/ui/decorations/text_effects/typewriter/typewriter_label.gd b/src/ui/decorations/text_effects/typewriter/typewriter_label.gd index d1f2c82..78e7100 100644 --- a/src/ui/decorations/text_effects/typewriter/typewriter_label.gd +++ b/src/ui/decorations/text_effects/typewriter/typewriter_label.gd @@ -35,6 +35,8 @@ func _ready() -> void: if text: _finished = false + visibility_changed.connect(restart) + ## Is the typewriter effect finished? func is_finished() -> bool: diff --git a/src/ui/main_theme.tres b/src/ui/main_theme.tres index d4631fd..9752809 100644 --- a/src/ui/main_theme.tres +++ b/src/ui/main_theme.tres @@ -1,10 +1,14 @@ -[gd_resource type="Theme" load_steps=11 format=3 uid="uid://diodjft5u2cck"] +[gd_resource type="Theme" load_steps=15 format=3 uid="uid://diodjft5u2cck"] [ext_resource type="FontFile" uid="uid://dsa0oh7c0h4pu" path="res://assets/fonts/Racing_Sans_One/RacingSansOne-Regular.ttf" id="1_3rv2b"] [ext_resource type="FontFile" uid="uid://comihs66wounx" path="res://assets/fonts/Dokdo/Dokdo-Regular.ttf" id="1_eha6a"] [ext_resource type="FontFile" uid="uid://b6gxwgomstkgu" path="res://assets/fonts/Geo/Geo-Italic.ttf" id="2_5ty6u"] [ext_resource type="FontFile" uid="uid://dyog4ex5nqfat" path="res://assets/fonts/promptfont/promptfont.otf" id="2_8kux8"] [ext_resource type="FontFile" uid="uid://s4c1kf0rk2mb" path="res://assets/fonts/Geo/Geo-Regular.ttf" id="3_cee6l"] +[ext_resource type="FontFile" uid="uid://dyx4wcq8wlpbh" path="res://assets/fonts/Orbitron/static/Orbitron-Black.ttf" id="5_7lyjk"] +[ext_resource type="FontVariation" uid="uid://y3lcfr4ys8d3" path="res://assets/fonts/Orbitron/Orbitron_Bold_Italics.tres" id="6_r7l37"] +[ext_resource type="FontVariation" uid="uid://cjisjunqauv68" path="res://assets/fonts/Orbitron/Orbitron_Italics.tres" id="7_0c31n"] +[ext_resource type="FontFile" uid="uid://bmv0pofrw1wh0" path="res://assets/fonts/Orbitron/static/Orbitron-Regular.ttf" id="8_njdo1"] [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_5pkn5"] content_margin_left = 16.0 @@ -179,6 +183,16 @@ ShotFeedback/constants/shadow_offset_x = 6 ShotFeedback/constants/shadow_offset_y = 4 ShotFeedback/font_sizes/normal_font_size = 272 ShotFeedback/fonts/normal_font = ExtResource("1_eha6a") +TitleCrawlText/base_type = &"RichTextLabel" +TitleCrawlText/font_sizes/bold_font_size = 32 +TitleCrawlText/font_sizes/bold_italics_font_size = 32 +TitleCrawlText/font_sizes/italics_font_size = 32 +TitleCrawlText/font_sizes/mono_font_size = 32 +TitleCrawlText/font_sizes/normal_font_size = 32 +TitleCrawlText/fonts/bold_font = ExtResource("5_7lyjk") +TitleCrawlText/fonts/bold_italics_font = ExtResource("6_r7l37") +TitleCrawlText/fonts/italics_font = ExtResource("7_0c31n") +TitleCrawlText/fonts/normal_font = ExtResource("8_njdo1") TitleScreenMenuLabel/base_type = &"Label" TitleScreenMenuLabel/colors/font_outline_color = Color(0, 0, 0, 1) TitleScreenMenuLabel/constants/outline_size = 6 diff --git a/src/ui/menus/title_screen/title_crawl.gd b/src/ui/menus/title_screen/title_crawl.gd new file mode 100644 index 0000000..a24f4b7 --- /dev/null +++ b/src/ui/menus/title_screen/title_crawl.gd @@ -0,0 +1,18 @@ +extends Control + +@onready var animation_player: AnimationPlayer = $AnimationPlayer + + +func _input(event: InputEvent) -> void: + if ( + event is InputEventKey + or event is InputEventMouseButton + or event is InputEventJoypadButton + or event is InputEventScreenTouch + ): + get_viewport().set_input_as_handled() + fade_out() + + +func fade_out() -> void: + animation_player.play("fade_out") diff --git a/src/ui/menus/title_screen/title_crawl.tscn b/src/ui/menus/title_screen/title_crawl.tscn new file mode 100644 index 0000000..5d2e6a3 --- /dev/null +++ b/src/ui/menus/title_screen/title_crawl.tscn @@ -0,0 +1,416 @@ +[gd_scene load_steps=7 format=3 uid="uid://cqu315hviu72n"] + +[ext_resource type="Script" path="res://src/ui/decorations/text_effects/typewriter/typewriter_label.gd" id="1_i0kuc"] +[ext_resource type="Script" path="res://src/ui/menus/title_screen/title_crawl.gd" id="1_wsvjl"] + +[sub_resource type="Animation" id="Animation_dmc3y"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("TitleQuote:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("TitleQuote:modulate") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("VBoxContainer/TitleCrawl1:visible") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("VBoxContainer/TitleCrawl2:visible") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("VBoxContainer/TitleCrawl3:visible") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("VBoxContainer/TitleCrawl4:visible") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("VBoxContainer/TitleCrawl5:visible") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Blackout:color") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(0, 0, 0, 0)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("VBoxContainer:offset_top") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0.0] +} + +[sub_resource type="Animation" id="Animation_hrox7"] +resource_name = "play" +length = 55.0 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("TitleQuote:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 3), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("TitleQuote:modulate") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 11, 13), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("VBoxContainer/TitleCrawl1:visible") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 14, 55), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [false, true, false] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("VBoxContainer/TitleCrawl2:visible") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 16.4, 55), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [false, true, false] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("VBoxContainer/TitleCrawl3:visible") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 31, 55), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [false, true, false] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("VBoxContainer/TitleCrawl4:visible") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 39, 55), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [false, true, false] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("VBoxContainer/TitleCrawl5:visible") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 45, 55), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [false, true, false] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Blackout:color") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0, 52, 55), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(0, 0, 0, 0), Color(0, 0, 0, 0), Color(0, 0, 0, 1)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("VBoxContainer:offset_top") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0, 16, 55), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0.0, 0.0, -700] +} +tracks/10/type = "method" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath(".") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(55), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"fade_out" +}] +} + +[sub_resource type="Animation" id="Animation_hkogt"] +resource_name = "fade_out" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/1/type = "method" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(1), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"queue_free" +}] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_1o035"] +_data = { +"RESET": SubResource("Animation_dmc3y"), +"fade_out": SubResource("Animation_hkogt"), +"play": SubResource("Animation_hrox7") +} + +[node name="TitleCrawl" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_wsvjl") + +[node name="BackgroundColor" type="ColorRect" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 0, 0, 1) + +[node name="TitleQuote" type="RichTextLabel" parent="."] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -555.5 +offset_top = -45.0 +offset_right = 555.5 +offset_bottom = 45.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_type_variation = &"TitleCrawlText" +bbcode_enabled = true +text = "[center][i][type speed=20]\"If [b]GFOLF[/b] did not exist,[/type] [type speed=20 delay=2]it would be necessary to create it.\"[/type][/i][/center] +[right][type speed=40 delay=6]— Voltaire[/type][/right]" +script = ExtResource("1_i0kuc") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +custom_minimum_size = Vector2(1111, 0) +layout_mode = 1 +anchors_preset = -1 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -400.0 +offset_right = 400.0 +offset_bottom = 70.0 +grow_horizontal = 2 +theme_override_constants/separation = 32 + +[node name="TitleCrawl1" type="RichTextLabel" parent="VBoxContainer"] +visible = false +layout_mode = 2 +theme_type_variation = &"TitleCrawlText" +bbcode_enabled = true +text = "[center][type speed=16]The year is 1999[/type][type speed=20 delay=1.3]024 CE.[/type][/center]" +fit_content = true +script = ExtResource("1_i0kuc") + +[node name="TitleCrawl2" type="RichTextLabel" parent="VBoxContainer"] +visible = false +layout_mode = 2 +theme_type_variation = &"TitleCrawlText" +bbcode_enabled = true +text = "[center][type speed=20]The avarice of [b]MAN[/b] in an age long past caused the seas to consume the earth.[/type] [type speed=20 delay=4.3]Now, the [b]INFORMATION SOCIETY[/b] controls the full wealth of the entire world, ruling from their secret compound on [b]GFOLFZONE EVEREST-ONE[/b], the only habitable land left on the planet's surface.[/type][/center]" +fit_content = true +script = ExtResource("1_i0kuc") + +[node name="TitleCrawl3" type="RichTextLabel" parent="VBoxContainer"] +visible = false +layout_mode = 2 +theme_type_variation = &"TitleCrawlText" +bbcode_enabled = true +text = "[center][type speed=20]In the future,[/type] [type speed=20 delay=1.1] there is no [b]LAW[/b] but the [b]LAW of the BALL[/b], and the warrior-poets known as [b]GFOLFers[/b] enforce their [b]LAW[/b] with a [b]FIVE-IRON FIST.[/b][/type][/center]" +fit_content = true +script = ExtResource("1_i0kuc") + +[node name="TitleCrawl4" type="RichTextLabel" parent="VBoxContainer"] +visible = false +layout_mode = 2 +theme_type_variation = &"TitleCrawlText" +bbcode_enabled = true +text = "[center][type speed=20]It is a future you feared,[/type] [type speed=20, delay=1.7]but a future you've chosen.[/type][/center]" +fit_content = true +script = ExtResource("1_i0kuc") + +[node name="Spacer" type="Control" parent="VBoxContainer"] +layout_mode = 2 + +[node name="TitleCrawl5" type="RichTextLabel" parent="VBoxContainer"] +visible = false +layout_mode = 2 +size_flags_vertical = 10 +theme_type_variation = &"TitleCrawlText" +bbcode_enabled = true +text = "[center][i][type speed=16]IN THE FUTURE[/type][type speed=16 delay=1.0].[/type][type speed=16 delay=1.2].[/type][type speed=16 delay=1.4].[/type] [type speed=16 delay=2.4]THERE IS ONLY[/type] [b][type speed=16 delay=3.6]GFOLF.[/type][/b][/i][/center]" +fit_content = true +script = ExtResource("1_i0kuc") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_1o035") +} +autoplay = "play" + +[node name="Blackout" type="ColorRect" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 0, 0, 0) diff --git a/src/ui/menus/title_screen/title_screen.gd b/src/ui/menus/title_screen/title_screen.gd index bdfde52..de58cf2 100644 --- a/src/ui/menus/title_screen/title_screen.gd +++ b/src/ui/menus/title_screen/title_screen.gd @@ -2,23 +2,33 @@ class_name TitleScreen extends Control const SCENE := "res://src/ui/menus/title_screen/title_screen.tscn" +@export var title_crawl_scene: PackedScene @export var settings_scene: PackedScene @export var local_deathmatch_setup_scene: PackedScene @onready var menu: Control = %Menu @onready var settings_container: MarginContainer = %SettingsContainer @onready var deathmatch_setup_container: MarginContainer = %DeathmatchSetupContainer +@onready var title_crawl_container: MarginContainer = %TitleCrawlContainer @onready var state_machine: AnimationTree = $Menu/MenuStateMachine @onready var menu_state: AnimationNodeStateMachinePlayback = state_machine["parameters/playback"] @onready var confirm_sfx: AudioStreamPlayer = %ConfirmSFX +@onready var idle_timer: Timer = %IdleTimer + func play_chime() -> void: confirm_sfx.play() +func start_title_crawl() -> void: + var instance: Node = title_crawl_scene.instantiate() + instance.tree_exiting.connect(idle_timer.start) + title_crawl_container.add_child(instance) + + func _input(event: InputEvent) -> void: if event is InputEventKey or event is InputEventJoypadButton or event is InputEventMouseButton: if menu_state.get_current_node() in ["press_start_fade_in", "press_start_idle"]: @@ -34,6 +44,7 @@ func _hide() -> void: func _to_main_menu() -> void: + idle_timer.stop() menu_state.travel("main_idle") diff --git a/src/ui/menus/title_screen/title_screen.tscn b/src/ui/menus/title_screen/title_screen.tscn index aad1e05..736a265 100644 --- a/src/ui/menus/title_screen/title_screen.tscn +++ b/src/ui/menus/title_screen/title_screen.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=64 format=3 uid="uid://7fsgocmdas7i"] +[gd_scene load_steps=65 format=3 uid="uid://7fsgocmdas7i"] [ext_resource type="Script" path="res://src/ui/menus/title_screen/title_screen.gd" id="1_2qtlb"] [ext_resource type="Texture2D" uid="uid://880x5n8j3b5l" path="res://assets/logo/title.png" id="1_pm82i"] @@ -6,6 +6,7 @@ [ext_resource type="Texture2D" uid="uid://clesl8lljs6of" path="res://assets/logo/subtitle.png" id="2_y0ulk"] [ext_resource type="PackedScene" uid="uid://ccx2u5oli6men" path="res://src/ui/menus/title_screen/deathmatch_setup/deathmatch_setup.tscn" id="3_bo4ty"] [ext_resource type="AudioStream" uid="uid://8uynlpios7u1" path="res://assets/sound/sfx/ui/ecofuture2.wav" id="5_fg1a4"] +[ext_resource type="PackedScene" uid="uid://cqu315hviu72n" path="res://src/ui/menus/title_screen/title_crawl.tscn" id="7_r26eu"] [sub_resource type="Animation" id="Animation_fths4"] length = 0.001 @@ -1176,6 +1177,7 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_2qtlb") +title_crawl_scene = ExtResource("7_r26eu") settings_scene = ExtResource("2_g5q2v") local_deathmatch_setup_scene = ExtResource("3_bo4ty") @@ -1235,7 +1237,7 @@ grow_horizontal = 2 grow_vertical = 2 [node name="PressStart" type="Label" parent="Menu"] -modulate = Color(1, 1, 1, 0.997297) +modulate = Color(1, 1, 1, 0.999998) layout_mode = 1 anchors_preset = 8 anchor_left = 0.5 @@ -1265,27 +1267,32 @@ metadata/_edit_use_anchors_ = true [node name="SinglePlayer" type="Button" parent="Menu/MainMenu"] layout_mode = 2 +tooltip_text = "MSG_ABOUT_SINGLE_PLAYER" theme_type_variation = &"PauseMenuButton" text = "TITLE_SINGLE_PLAYER" [node name="MultiPlayer" type="Button" parent="Menu/MainMenu"] layout_mode = 2 +tooltip_text = "MSG_ABOUT_MULTI_PLAYER" theme_type_variation = &"PauseMenuButton" text = "TITLE_MULTI_PLAYER" [node name="Settings" type="Button" parent="Menu/MainMenu"] layout_mode = 2 +tooltip_text = "MSG_ABOUT_SETTINGS" theme_type_variation = &"PauseMenuButton" text = "PAUSE_SETTINGS" [node name="Credits" type="Button" parent="Menu/MainMenu"] layout_mode = 2 +tooltip_text = "MSG_ABOUT_CREDITS" theme_type_variation = &"PauseMenuButton" disabled = true text = "TITLE_CREDITS" [node name="Quit" type="Button" parent="Menu/MainMenu"] layout_mode = 2 +tooltip_text = "MSG_ABOUT_QUIT" theme_type_variation = &"PauseMenuButton" theme_override_colors/font_color = Color(0.819608, 0.196078, 0.196078, 1) text = "PAUSE_QUIT" @@ -1478,6 +1485,22 @@ theme_override_constants/margin_top = 64 theme_override_constants/margin_right = 64 theme_override_constants/margin_bottom = 64 +[node name="TitleCrawlContainer" type="MarginContainer" parent="."] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="IdleTimer" type="Timer" parent="TitleCrawlContainer"] +unique_name_in_owner = true +wait_time = 20.0 +one_shot = true +autostart = true + [connection signal="pressed" from="Menu/MainMenu/SinglePlayer" to="." method="_to_single_player"] [connection signal="pressed" from="Menu/MainMenu/MultiPlayer" to="." method="_to_multi_player"] [connection signal="pressed" from="Menu/MainMenu/Settings" to="." method="_open_settings"] @@ -1489,3 +1512,4 @@ theme_override_constants/margin_bottom = 64 [connection signal="pressed" from="Menu/LocalMultiplayerMenu/Deathmatch" to="." method="_open_local_deathmatch_setup"] [connection signal="pressed" from="Menu/LocalMultiplayerMenu/Back" to="." method="_to_multi_player"] [connection signal="pressed" from="Menu/NetMultiplayerMenu/Back" to="." method="_to_multi_player"] +[connection signal="timeout" from="TitleCrawlContainer/IdleTimer" to="." method="start_title_crawl"]