diff --git a/wordle/LICENSE b/wordle/LICENSE new file mode 100644 index 0000000..d0d9dd6 --- /dev/null +++ b/wordle/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Awfy + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/wordle/README.md b/wordle/README.md new file mode 100644 index 0000000..36b6144 --- /dev/null +++ b/wordle/README.md @@ -0,0 +1,16 @@ +# Azerdle + +![Azerdle logo](/.media/thumbnails/thumbnail.png) + +This is a Godot v4.3 experiment project. This project contains: +- Reading words from a word file and storing words to an Array, +- Determining matches for each letter and confirming correct guesses similar to Wordle, +- Multiple resolution support using Godot Control nodes, anchors and viewport settings, +- Setup for Desktop, Mobile and Web (with Web being the target platform), +- Setup with custom virtual keyboard, +- Use of AudioStreamRandomiser to play random sounds at random pitches, +- Use of Tweens and AnimationPlayer, +- SignalBus as a singleton for global signal communication. + +Feel free to add more words to the list as I have to add some words manually. +Play Azerdle on Itch.io: https://awfy.itch.io/Azerdle diff --git a/wordle/assets/LeagueSpartan-Bold.otf b/wordle/assets/LeagueSpartan-Bold.otf new file mode 100644 index 0000000..55fedfd Binary files /dev/null and b/wordle/assets/LeagueSpartan-Bold.otf differ diff --git a/wordle/assets/LeagueSpartan-Bold.otf.import b/wordle/assets/LeagueSpartan-Bold.otf.import new file mode 100644 index 0000000..8c6ef0b --- /dev/null +++ b/wordle/assets/LeagueSpartan-Bold.otf.import @@ -0,0 +1,33 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://51nnvssc4vny" +path="res://.godot/imported/LeagueSpartan-Bold.otf-c3d88fd2a49b809cc13c54da11f3bef6.fontdata" + +[deps] + +source_file="res://assets/LeagueSpartan-Bold.otf" +dest_files=["res://.godot/imported/LeagueSpartan-Bold.otf-c3d88fd2a49b809cc13c54da11f3bef6.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +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/wordle/assets/arrows.png b/wordle/assets/arrows.png new file mode 100644 index 0000000..193ae0e Binary files /dev/null and b/wordle/assets/arrows.png differ diff --git a/wordle/assets/arrows.png.import b/wordle/assets/arrows.png.import new file mode 100644 index 0000000..2c0c4cd --- /dev/null +++ b/wordle/assets/arrows.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://1for8xr6r5h4" +path="res://.godot/imported/arrows.png-4802d5ef5af2af6fa5f490e680067993.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/arrows.png" +dest_files=["res://.godot/imported/arrows.png-4802d5ef5af2af6fa5f490e680067993.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/wordle/assets/base_button.png b/wordle/assets/base_button.png new file mode 100644 index 0000000..548b91c Binary files /dev/null and b/wordle/assets/base_button.png differ diff --git a/wordle/assets/base_button.png.import b/wordle/assets/base_button.png.import new file mode 100644 index 0000000..0af51e9 --- /dev/null +++ b/wordle/assets/base_button.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dyqy84ra3sk2l" +path="res://.godot/imported/base_button.png-cfef4cc41cc52120652767fae1566afd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/base_button.png" +dest_files=["res://.godot/imported/base_button.png-cfef4cc41cc52120652767fae1566afd.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/wordle/assets/base_button_2.png b/wordle/assets/base_button_2.png new file mode 100644 index 0000000..4623785 Binary files /dev/null and b/wordle/assets/base_button_2.png differ diff --git a/wordle/assets/base_button_2.png.import b/wordle/assets/base_button_2.png.import new file mode 100644 index 0000000..2e27351 --- /dev/null +++ b/wordle/assets/base_button_2.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ckbhj3b3wno1a" +path="res://.godot/imported/base_button_2.png-ff20b078aa82ccc09889b184e1ce796f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/base_button_2.png" +dest_files=["res://.godot/imported/base_button_2.png-ff20b078aa82ccc09889b184e1ce796f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/wordle/assets/border.png b/wordle/assets/border.png new file mode 100644 index 0000000..7e54a5a Binary files /dev/null and b/wordle/assets/border.png differ diff --git a/wordle/assets/border.png.import b/wordle/assets/border.png.import new file mode 100644 index 0000000..267afab --- /dev/null +++ b/wordle/assets/border.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://if21mrdsbap3" +path="res://.godot/imported/border.png-11bc9554d67dcb5c2c7c5cf3f612a6d8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/border.png" +dest_files=["res://.godot/imported/border.png-11bc9554d67dcb5c2c7c5cf3f612a6d8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/wordle/assets/dust.jpg b/wordle/assets/dust.jpg new file mode 100644 index 0000000..e8de35f Binary files /dev/null and b/wordle/assets/dust.jpg differ diff --git a/wordle/assets/dust.jpg.import b/wordle/assets/dust.jpg.import new file mode 100644 index 0000000..46d7eb1 --- /dev/null +++ b/wordle/assets/dust.jpg.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dblhqqdvucvri" +path="res://.godot/imported/dust.jpg-662d5884d9354fcca57c93f8de8d0771.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/dust.jpg" +dest_files=["res://.godot/imported/dust.jpg-662d5884d9354fcca57c93f8de8d0771.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/wordle/assets/gradient.png b/wordle/assets/gradient.png new file mode 100644 index 0000000..ac96c07 Binary files /dev/null and b/wordle/assets/gradient.png differ diff --git a/wordle/assets/gradient.png.import b/wordle/assets/gradient.png.import new file mode 100644 index 0000000..e1182cc --- /dev/null +++ b/wordle/assets/gradient.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bg6tb0xmsnh2g" +path="res://.godot/imported/gradient.png-d202e9d2061bad1e62c61a0d531cfdd0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gradient.png" +dest_files=["res://.godot/imported/gradient.png-d202e9d2061bad1e62c61a0d531cfdd0.ctex"] + +[params] + +compress/mode=1 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/wordle/assets/hexagon.png b/wordle/assets/hexagon.png new file mode 100644 index 0000000..bad3ac7 Binary files /dev/null and b/wordle/assets/hexagon.png differ diff --git a/wordle/assets/hexagon.png.import b/wordle/assets/hexagon.png.import new file mode 100644 index 0000000..6f1b4f8 --- /dev/null +++ b/wordle/assets/hexagon.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cx6vj6fun71m7" +path="res://.godot/imported/hexagon.png-000d60bfda14ff6fc2ac015517523bb6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/hexagon.png" +dest_files=["res://.godot/imported/hexagon.png-000d60bfda14ff6fc2ac015517523bb6.ctex"] + +[params] + +compress/mode=1 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/wordle/assets/more_button.png b/wordle/assets/more_button.png new file mode 100644 index 0000000..61e4888 Binary files /dev/null and b/wordle/assets/more_button.png differ diff --git a/wordle/assets/more_button.png.import b/wordle/assets/more_button.png.import new file mode 100644 index 0000000..015ef0e --- /dev/null +++ b/wordle/assets/more_button.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ct03xm4l7nftg" +path="res://.godot/imported/more_button.png-fb03accd4bfa770553f161a778a45710.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/more_button.png" +dest_files=["res://.godot/imported/more_button.png-fb03accd4bfa770553f161a778a45710.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/wordle/assets/music_button_off.png b/wordle/assets/music_button_off.png new file mode 100644 index 0000000..34358e6 Binary files /dev/null and b/wordle/assets/music_button_off.png differ diff --git a/wordle/assets/music_button_off.png.import b/wordle/assets/music_button_off.png.import new file mode 100644 index 0000000..31bce5a --- /dev/null +++ b/wordle/assets/music_button_off.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://crr77ferhx7cw" +path="res://.godot/imported/music_button_off.png-da201b4a1aca5115ebba27cae0e46ca2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/music_button_off.png" +dest_files=["res://.godot/imported/music_button_off.png-da201b4a1aca5115ebba27cae0e46ca2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/wordle/assets/music_button_on.png b/wordle/assets/music_button_on.png new file mode 100644 index 0000000..c0aafed Binary files /dev/null and b/wordle/assets/music_button_on.png differ diff --git a/wordle/assets/music_button_on.png.import b/wordle/assets/music_button_on.png.import new file mode 100644 index 0000000..7598089 --- /dev/null +++ b/wordle/assets/music_button_on.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://208t5rbymhi4" +path="res://.godot/imported/music_button_on.png-b56595b1bca1834760a0866cde820c4d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/music_button_on.png" +dest_files=["res://.godot/imported/music_button_on.png-b56595b1bca1834760a0866cde820c4d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/wordle/assets/octogon.png b/wordle/assets/octogon.png new file mode 100644 index 0000000..37b7ccb Binary files /dev/null and b/wordle/assets/octogon.png differ diff --git a/wordle/assets/octogon.png.import b/wordle/assets/octogon.png.import new file mode 100644 index 0000000..96e94ca --- /dev/null +++ b/wordle/assets/octogon.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cc4wlxpjvj2iy" +path="res://.godot/imported/octogon.png-6485d9ee093ca4eff976aa48f4754c33.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/octogon.png" +dest_files=["res://.godot/imported/octogon.png-6485d9ee093ca4eff976aa48f4754c33.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/wordle/assets/text_box_theme.tres b/wordle/assets/text_box_theme.tres new file mode 100644 index 0000000..6d81b6b --- /dev/null +++ b/wordle/assets/text_box_theme.tres @@ -0,0 +1,15 @@ +[gd_resource type="Theme" load_steps=2 format=3 uid="uid://dfw7lrrxmofku"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_sr1iv"] +bg_color = Color(0.14902, 0.14902, 0.14902, 1) +corner_radius_top_left = 3 +corner_radius_top_right = 3 +corner_radius_bottom_right = 3 +corner_radius_bottom_left = 3 +expand_margin_left = 12.0 +expand_margin_top = 12.0 +expand_margin_right = 12.0 +expand_margin_bottom = 12.0 + +[resource] +Label/styles/normal = SubResource("StyleBoxFlat_sr1iv") diff --git a/wordle/assets/vignette.png b/wordle/assets/vignette.png new file mode 100644 index 0000000..ee45c91 Binary files /dev/null and b/wordle/assets/vignette.png differ diff --git a/wordle/assets/vignette.png.import b/wordle/assets/vignette.png.import new file mode 100644 index 0000000..b04b277 --- /dev/null +++ b/wordle/assets/vignette.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bm54pulg1ipc5" +path="res://.godot/imported/vignette.png-616bd0f74b406d55d24cc11a1e977d54.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/vignette.png" +dest_files=["res://.godot/imported/vignette.png-616bd0f74b406d55d24cc11a1e977d54.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/wordle/assets/word_list.txt b/wordle/assets/word_list.txt new file mode 100644 index 0000000..ba8965e --- /dev/null +++ b/wordle/assets/word_list.txt @@ -0,0 +1,4820 @@ +aback +abase +abate +abbey +abbot +abhor +abide +abled +abode +abort +about +above +abuse +abyss +acorn +acrid +actor +acute +adage +adapt +adept +admin +admit +adobe +adopt +adore +adorn +adult +affix +afire +afoot +afoul +after +again +agape +agate +agent +agile +aging +aglow +agony +agree +ahead +aider +aisle +alarm +album +alert +algae +alibi +alien +align +alike +alive +allay +alley +allot +allow +alloy +aloft +alone +along +aloof +aloud +alpha +altar +alter +amass +amaze +amber +amble +amend +amiss +amity +among +ample +amply +amuse +angel +anger +angle +angry +angst +anime +ankle +annex +annoy +annul +anode +antic +anvil +aorta +apart +aphid +aping +apnea +apple +apply +apron +aptly +arbor +ardor +arena +argue +arise +armor +aroma +arose +array +arrow +arson +artsy +ascot +ashen +aside +askew +assay +asset +atoll +atone +attic +audio +audit +augur +aunty +avail +avert +avian +avoid +await +awake +award +aware +awash +awful +awoke +axial +axiom +axion +azure +bacon +badge +badly +bagel +baggy +baker +baler +balmy +banal +banjo +barge +baron +basal +basic +basil +basin +basis +baste +batch +bathe +baton +batty +bawdy +bayou +beach +beady +beard +beast +beech +beefy +befit +began +begat +beget +begin +begun +being +belch +belie +belle +belly +below +bench +beret +berry +berth +beset +betel +bevel +bezel +bible +bicep +biddy +bigot +bilge +billy +binge +bingo +biome +birch +birth +bison +bitty +black +blade +blame +bland +blank +blare +blast +blaze +bleak +bleat +bleed +bleep +blend +bless +blimp +blind +blink +bliss +blitz +bloat +block +bloke +blond +blood +bloom +blown +bluer +bluff +blunt +blurb +blurt +blush +board +boast +bobby +boney +bongo +bonus +booby +boost +booth +booty +booze +boozy +borax +borne +bosom +bossy +botch +bough +boule +bound +bowel +boxer +brace +braid +brain +brake +brand +brash +brass +brave +bravo +brawl +brawn +bread +break +breed +briar +bribe +brick +bride +brief +brine +bring +brink +briny +brisk +broad +broil +broke +brood +brook +broom +broth +brown +brunt +brush +brute +buddy +budge +buggy +bugle +build +built +bulge +bulky +bully +bunch +bunny +burly +burnt +burst +bused +bushy +butch +butte +buxom +buyer +bylaw +cabal +cabby +cabin +cable +cacao +cache +cacti +caddy +cadet +cagey +cairn +camel +cameo +canal +candy +canny +canoe +canon +caper +caput +carat +cargo +carol +carry +carve +caste +catch +cater +catty +caulk +cause +cavil +cease +cedar +cello +chafe +chaff +chain +chair +chalk +champ +chant +chaos +chard +charm +chart +chase +chasm +cheap +cheat +check +cheek +cheer +chess +chest +chick +chide +chief +child +chili +chill +chime +china +chirp +chock +choir +choke +chord +chore +chose +chuck +chump +chunk +churn +chute +cider +cigar +cinch +circa +civic +civil +clack +claim +clamp +clang +clank +clash +clasp +class +clean +clear +cleat +cleft +clerk +click +cliff +climb +cling +clink +cloak +clock +clone +close +cloth +cloud +clout +clove +clown +cluck +clued +clump +clung +coach +coast +cobra +cocoa +colon +color +comet +comfy +comic +comma +conch +condo +conic +copse +coral +corer +corny +couch +cough +could +count +coupe +court +coven +cover +covet +covey +cower +coyly +crack +craft +cramp +crane +crank +crash +crass +crate +crave +crawl +craze +crazy +creak +cream +credo +creed +creek +creep +creme +crepe +crept +cress +crest +crick +cried +crier +crime +crimp +crisp +croak +crock +crone +crony +crook +cross +croup +crowd +crown +crude +cruel +crumb +crump +crush +crust +crypt +cubic +cumin +curio +curly +curry +curse +curve +curvy +cutie +cyber +cycle +cynic +daddy +daily +dairy +daisy +dally +dance +dandy +datum +daunt +dealt +death +debar +debit +debug +debut +decal +decay +decor +decoy +decry +defer +deign +deity +delay +delta +delve +demon +demur +denim +dense +depot +depth +derby +deter +detox +deuce +devil +diary +dicey +digit +dilly +dimly +diner +dingo +dingy +diode +dirge +dirty +disco +ditch +ditto +ditty +diver +dizzy +dodge +dodgy +dogma +doing +dolly +donor +donut +dopey +doubt +dough +dowdy +dowel +downy +dowry +dozen +draft +drain +drake +drama +drank +drape +drawl +drawn +dread +dream +dress +dried +drier +drift +drill +drink +drive +droit +droll +drone +drool +droop +dross +drove +drown +druid +drunk +dryer +dryly +duchy +dully +dummy +dumpy +dunce +dusky +dusty +dutch +duvet +dwarf +dwell +dwelt +dying +eager +eagle +early +earth +easel +eaten +eater +ebony +eclat +edict +edify +eerie +egret +eight +eject +eking +elate +elbow +elder +elect +elegy +elfin +elide +elite +elope +elude +email +embed +ember +emcee +empty +enact +endow +enema +enemy +enjoy +ennui +ensue +enter +entry +envoy +epoch +epoxy +equal +equip +erase +erect +erode +error +erupt +essay +ester +ether +ethic +ethos +etude +evade +event +every +evict +evoke +exact +exalt +excel +exert +exile +exist +expel +extol +extra +exult +eying +fable +facet +faint +fairy +faith +false +fancy +fanny +farce +fatal +fatty +fault +fauna +favor +feast +fecal +feign +fella +felon +femme +femur +fence +feral +ferry +fetal +fetch +fetid +fetus +fever +fewer +fiber +ficus +field +fiend +fiery +fifth +fifty +fight +filer +filet +filly +filmy +filth +final +finch +finer +first +fishy +fixer +fizzy +fjord +flack +flail +flair +flake +flaky +flame +flank +flare +flash +flask +fleck +fleet +flesh +flick +flier +fling +flint +flirt +float +flock +flood +floor +flora +floss +flour +flout +flown +fluff +fluid +fluke +flume +flung +flunk +flush +flute +flyer +foamy +focal +focus +foggy +foist +folio +folly +foray +force +forge +forgo +forte +forth +forty +forum +found +foyer +frail +frame +frank +fraud +freak +freed +freer +fresh +friar +fried +frill +frisk +fritz +frock +frond +front +frost +froth +frown +froze +fruit +fudge +fugue +fully +fungi +funky +funny +furor +furry +fussy +fuzzy +gaffe +gaily +gamer +gamma +gamut +gassy +gaudy +gauge +gaunt +gauze +gavel +gawky +gayer +gayly +gazer +gecko +geeky +geese +genie +genre +ghost +ghoul +giant +giddy +gipsy +girly +girth +given +giver +glade +gland +glare +glass +glaze +gleam +glean +glide +glint +gloat +globe +gloom +glory +gloss +glove +glyph +gnash +gnome +godly +going +golem +golly +gonad +goner +goody +gooey +goofy +goose +gorge +gouge +gourd +grace +grade +graft +grail +grain +grand +grant +grape +graph +grasp +grass +grate +grave +gravy +graze +great +greed +green +greet +grief +grill +grime +grimy +grind +gripe +groan +groin +groom +grope +gross +group +grout +grove +growl +grown +gruel +gruff +grunt +guard +guava +guess +guest +guide +guild +guile +guilt +guise +gulch +gully +gumbo +gummy +guppy +gusto +gusty +gypsy +habit +hairy +halve +handy +happy +hardy +harem +harpy +harry +harsh +haste +hasty +hatch +hater +haunt +haute +haven +havoc +hazel +heady +heard +heart +heath +heave +heavy +hedge +hefty +heist +helix +hello +hence +heron +hilly +hinge +hippo +hippy +hitch +hoard +hobby +hoist +holly +homer +honey +honor +horde +horny +horse +hotel +hotly +hound +house +hovel +hover +howdy +human +humid +humor +humph +humus +hunch +hunky +hurry +husky +hussy +hutch +hydro +hyena +hymen +hyper +icily +icing +ichor +ideal +idiom +idiot +idler +idyll +igloo +iliac +image +imbue +impel +imply +inane +inbox +incur +index +inept +inert +infer +ingot +inlay +inlet +inner +input +inter +intro +ionic +irate +irony +islet +issue +itchy +ivory +jaunt +jazzy +jelly +jerky +jetty +jewel +jiffy +joint +joist +joker +jolly +joust +judge +juice +juicy +jumbo +jumpy +junta +junto +juror +kappa +karma +kayak +kebab +khaki +kinky +kiosk +kitty +knack +knave +knead +kneed +kneel +knelt +knife +knock +knoll +known +koala +krill +label +labor +laden +ladle +lager +lance +lanky +lapel +lapse +large +larva +lasso +latch +later +lathe +latte +laugh +layer +leach +leafy +leaky +leant +leapt +learn +lease +leash +least +leave +ledge +leech +leery +lefty +legal +leggy +lemon +lemur +leper +level +lever +libel +liege +light +liken +lilac +limbo +limit +linen +liner +lingo +lipid +lithe +liver +livid +llama +loamy +loath +lobby +local +locus +lodge +lofty +logic +login +loopy +loose +lorry +loser +louse +lousy +lover +lower +lowly +loyal +lucid +lucky +lumen +lumpy +lunar +lunch +lunge +lupus +lurch +lurid +lusty +lying +lymph +lyric +macaw +macho +macro +madam +madly +mafia +magic +magma +maize +major +maker +mambo +mamma +mammy +manga +mange +mango +mangy +mania +manic +manly +manor +maple +march +marry +marsh +mason +masse +match +matey +mauve +maxim +maybe +mayor +mealy +meant +meaty +mecca +medal +media +medic +melee +melon +mercy +merge +merit +merry +metal +meter +metro +micro +midge +midst +might +milky +mimic +mince +miner +minim +minor +minty +minus +mirth +miser +missy +mocha +modal +model +modem +mogul +moist +molar +moldy +money +month +moody +moose +moral +moron +morph +mossy +motel +motif +motor +motto +moult +mound +mount +mourn +mouse +mouth +mover +movie +mower +mucky +mucus +muddy +mulch +mummy +munch +mural +murky +mushy +music +musky +musty +myrrh +nadir +naive +nanny +nasal +nasty +natal +naval +navel +needy +neigh +nerdy +nerve +never +newer +newly +nicer +niche +niece +night +ninja +ninny +ninth +noble +nobly +noise +noisy +nomad +noose +north +nosey +notch +novel +nudge +nurse +nutty +nylon +nymph +oaken +obese +occur +ocean +octal +octet +odder +oddly +offal +offer +often +olden +older +olive +ombre +omega +onion +onset +opera +opine +opium +optic +orbit +order +organ +other +otter +ought +ounce +outdo +outer +outgo +ovary +ovate +overt +ovine +ovoid +owing +owner +oxide +ozone +paddy +pagan +paint +paler +palsy +panel +panic +pansy +papal +paper +parer +parka +parry +parse +party +pasta +paste +pasty +patch +patio +patsy +patty +pause +payee +payer +peace +peach +pearl +pecan +pedal +penal +pence +penne +penny +perch +peril +perky +pesky +pesto +petal +petty +phase +phone +phony +photo +piano +picky +piece +piety +piggy +pilot +pinch +piney +pinky +pinto +piper +pique +pitch +pithy +pivot +pixel +pixie +pizza +place +plaid +plain +plait +plane +plank +plant +plate +plaza +plead +pleat +plied +plier +pluck +plumb +plume +plump +plunk +plush +poesy +point +poise +poker +polar +polka +polyp +pooch +poppy +porch +poser +posit +posse +pouch +pound +pouty +power +prank +prawn +preen +press +price +prick +pride +pried +prime +primo +print +prior +prism +privy +prize +probe +prone +prong +proof +prose +proud +prove +prowl +proxy +prude +prune +psalm +pubic +pudgy +puffy +pulpy +pulse +punch +pupil +puppy +puree +purer +purge +purse +pushy +putty +pygmy +quack +quail +quake +qualm +quark +quart +quash +quasi +queen +queer +quell +query +quest +queue +quick +quiet +quill +quilt +quirk +quite +quota +quote +quoth +rabbi +rabid +racer +radar +radii +radio +rainy +raise +rajah +rally +ralph +ramen +ranch +randy +range +rapid +rarer +raspy +ratio +ratty +raven +rayon +razor +reach +react +ready +realm +rearm +rebar +rebel +rebus +rebut +recap +recur +recut +reedy +refer +refit +regal +rehab +reign +relax +relay +relic +remit +renal +renew +repay +repel +reply +rerun +reset +resin +retch +retro +retry +reuse +revel +revue +rhino +rhyme +rider +ridge +rifle +right +rigid +rigor +rinse +ripen +riper +risen +riser +risky +rival +river +rivet +roach +roast +robin +robot +rocky +rodeo +roger +rogue +roomy +roost +rotor +rouge +rough +round +rouse +route +rover +rowdy +rower +royal +ruddy +ruder +rugby +ruler +rumba +rumor +rupee +rural +rusty +sadly +safer +saint +salad +sally +salon +salsa +salty +salve +salvo +sandy +saner +sappy +sassy +satin +satyr +sauce +saucy +sauna +saute +savor +savoy +savvy +scald +scale +scalp +scaly +scamp +scant +scare +scarf +scary +scene +scent +scion +scoff +scold +scone +scoop +scope +score +scorn +scour +scout +scowl +scram +scrap +scree +screw +scrub +scrum +scuba +sedan +seedy +segue +seize +semen +sense +sepia +serif +serum +serve +setup +seven +sever +sewer +shack +shade +shady +shaft +shake +shaky +shale +shall +shalt +shame +shank +shape +shard +share +shark +sharp +shave +shawl +shear +sheen +sheep +sheer +sheet +sheik +shelf +shell +shied +shift +shine +shiny +shire +shirk +shirt +shoal +shock +shone +shook +shoot +shore +shorn +short +shout +shove +shown +showy +shrew +shrub +shrug +shuck +shunt +shush +shyly +siege +sieve +sight +sigma +silky +silly +since +sinew +singe +siren +sissy +sixth +sixty +skate +skier +skiff +skill +skimp +skirt +skulk +skull +skunk +slack +slain +slang +slant +slash +slate +sleek +sleep +sleet +slept +slice +slick +slide +slime +slimy +sling +slink +sloop +slope +slosh +sloth +slump +slung +slunk +slurp +slush +slyly +smack +small +smart +smash +smear +smell +smelt +smile +smirk +smite +smith +smock +smoke +smoky +smote +snack +snail +snake +snaky +snare +snarl +sneak +sneer +snide +sniff +snipe +snoop +snore +snort +snout +snowy +snuck +snuff +soapy +sober +soggy +solar +solid +solve +sonar +sonic +sooth +sooty +sorry +sound +south +sower +space +spade +spank +spare +spark +spasm +spawn +speak +spear +speck +speed +spell +spelt +spend +spent +sperm +spice +spicy +spied +spiel +spike +spiky +spill +spilt +spine +spiny +spire +spite +splat +split +spoil +spoke +spoof +spook +spool +spoon +spore +sport +spout +spray +spree +sprig +spunk +spurn +spurt +squad +squat +squib +stack +staff +stage +staid +stain +stair +stake +stale +stalk +stall +stamp +stand +stank +stare +stark +start +stash +state +stave +stead +steak +steal +steam +steed +steel +steep +steer +stein +stern +stick +stiff +still +stilt +sting +stink +stint +stock +stoic +stoke +stole +stomp +stone +stony +stood +stool +stoop +store +stork +storm +story +stout +stove +strap +straw +stray +strip +strut +stuck +study +stuff +stump +stung +stunk +stunt +style +suave +sugar +suing +suite +sulky +sully +sumac +sunny +super +surer +surge +surly +sushi +swami +swamp +swarm +swash +swath +swear +sweat +sweep +sweet +swell +swept +swift +swill +swine +swing +swirl +swish +swoon +swoop +sword +swore +sworn +swung +synod +syrup +tabby +table +taboo +tacit +tacky +taffy +taint +taken +taker +tally +talon +tamer +tango +tangy +taper +tapir +tardy +tarot +taste +tasty +tatty +taunt +tawny +teach +teary +tease +teddy +teeth +tempo +tenet +tenor +tense +tenth +tepee +tepid +terra +terse +testy +thank +theft +their +theme +there +these +theta +thick +thief +thigh +thing +think +third +thong +thorn +those +three +threw +throb +throw +thrum +thumb +thump +thyme +tiara +tibia +tidal +tiger +tight +tilde +timer +timid +tipsy +titan +tithe +title +toast +today +toddy +token +tonal +tonga +tonic +tooth +topaz +topic +torch +torso +torus +total +totem +touch +tough +towel +tower +toxic +toxin +trace +track +tract +trade +trail +train +trait +tramp +trash +trawl +tread +treat +trend +triad +trial +tribe +trice +trick +tried +tripe +trite +troll +troop +trope +trout +trove +truce +truck +truer +truly +trump +trunk +truss +trust +truth +tryst +tubal +tuber +tulip +tulle +tumor +tunic +turbo +tutor +twang +tweak +tweed +tweet +twice +twine +twirl +twist +twixt +tying +udder +ulcer +ultra +umbra +uncle +uncut +under +undid +undue +unfed +unfit +unify +union +unite +unity +unlit +unmet +unset +untie +until +unwed +unzip +upper +upset +urban +urine +usage +usher +using +usual +usurp +utile +utter +vague +valet +valid +valor +value +valve +vapid +vapor +vault +vaunt +vegan +venom +venue +verge +verse +verso +verve +vicar +video +vigil +vigor +villa +vinyl +viola +viper +viral +virus +visit +visor +vista +vital +vivid +vixen +vocal +vodka +vogue +voice +voila +vomit +voter +vouch +vowel +vying +wacky +wafer +wager +wagon +waist +waive +waltz +warty +waste +watch +water +waver +waxen +weary +weave +wedge +weedy +weigh +weird +welch +welsh +whack +whale +wharf +wheat +wheel +whelp +where +which +whiff +while +whine +whiny +whirl +whisk +white +whole +whoop +whose +widen +wider +widow +width +wield +wight +willy +wimpy +wince +winch +windy +wiser +wispy +witch +witty +woken +woman +women +woody +wooer +wooly +woozy +wordy +world +worry +worse +worst +worth +would +wound +woven +wrack +wrath +wreak +wreck +wrest +wring +wrist +write +wrong +wrote +wrung +wryly +yacht +yearn +yeast +yield +young +youth +zebra +zesty +zonal +aback +abase +abate +abaya +abbey +abbot +abets +abhor +abide +abode +abort +about +above +abuse +abuts +abyss +ached +aches +acids +acing +ackee +acorn +acres +acrid +acted +actin +actor +acute +adage +adapt +added +adder +addle +adept +adieu +adios +adman +admin +admit +adobe +adobo +adopt +adore +adorn +adult +aegis +aeons +aerie +affix +afire +afoot +afore +after +again +agape +agate +agave +agent +aggro +agile +aging +aglow +agony +agora +agree +ahead +ahold +aided +aider +aides +ailed +aimed +aimer +aioli +aired +aisle +alarm +album +alder +aleph +alert +algae +algal +alias +alibi +alien +align +alike +alive +alkyd +alkyl +allay +alley +allot +allow +alloy +allyl +aloes +aloft +aloha +alone +along +aloof +aloud +alpha +altar +alter +altos +alums +amass +amaze +amber +ambit +amble +ambos +amend +amide +amine +amino +amiss +amity +amnio +among +amour +amped +ample +amply +amuse +ancho +angel +anger +angle +angry +angst +anima +anime +anion +anise +ankle +annas +annex +annoy +annul +anode +anole +antic +antis +antsy +anvil +aorta +apace +apart +aphid +apnea +apple +apply +apron +apses +apter +aptly +aquas +arbor +ardor +areal +areas +areca +arena +argon +argot +argue +argus +arias +arils +arise +armed +armor +aroma +arose +array +arrow +arses +arson +artsy +asana +ascot +ashen +ashes +aside +asked +asker +askew +aspen +aspic +assay +asses +asset +aster +astir +asura +atlas +atman +atoll +atoms +atone +atopy +attic +audio +audit +auger +aught +augur +aunts +aunty +aural +auras +autos +auxin +avail +avers +avert +avian +avoid +avows +await +awake +award +aware +awash +awful +awoke +axels +axial +axils +axing +axiom +axion +axles +axons +azide +azole +azure +babel +babes +babka +backs +bacon +baddy +badge +badly +bagel +baggy +bails +bairn +baits +baize +baked +baker +bakes +baldy +baled +baler +bales +balks +balky +balls +balms +balmy +balsa +banal +bands +bandy +banes +bangs +banjo +banks +barbs +bards +bared +barer +bares +barge +barks +barmy +barns +baron +barre +basal +based +baser +bases +basic +basil +basin +basis +basks +basso +bassy +baste +batch +bated +bathe +baths +batik +baton +batts +batty +bawdy +bawls +bayed +bayou +beach +beads +beady +beaks +beams +beamy +beans +beard +bears +beast +beats +beaus +beaut +beaux +bebop +becks +beech +beefs +beefy +beeps +beers +beery +beets +befit +began +beget +begin +begun +beige +being +belay +belch +belie +belle +bells +belly +below +belts +bench +bends +bendy +bento +bents +beret +bergs +berms +berry +berth +beryl +beset +bests +betas +betel +betta +bevel +bezel +bhaji +bible +bicep +biddy +bided +bides +bidet +bight +bigot +bijou +biked +biker +bikes +biles +bilge +bills +billy +bimbo +bindi +binds +binge +bingo +biome +biota +bipod +birch +birds +birth +bison +bitch +biter +bites +bitsy +bitty +black +blade +blame +bland +blank +blare +blase +blast +blaze +bleak +bleat +blebs +bleed +bleep +blend +bless +blimp +blind +bling +blini +blink +blips +bliss +blitz +bloat +blobs +block +blocs +blogs +bloke +blond +blood +bloom +bloop +blots +blown +blows +blued +blues +bluey +bluff +blunt +blurb +blurs +blurt +blush +board +boars +boast +boats +bobby +bocce +boche +boded +bodes +boffo +bogey +boggy +bogie +bogus +boils +bolas +boles +bolls +bolts +bolus +bombe +bombs +bonds +boned +boner +bones +boney +bongo +bongs +bonks +bonny +bonus +boobs +booby +booed +books +booms +boomy +boons +boors +boost +booth +boots +booty +booze +boozy +boppy +borax +bored +borer +bores +boric +borne +boron +bosom +boson +bossy +bosun +botch +bough +boule +bound +bouts +bowed +bowel +bower +bowls +boxed +boxer +boxes +boyar +boyos +bozos +brace +bract +brads +brags +braid +brain +brake +brand +brans +brash +brass +brats +brave +bravo +brawl +brawn +brays +braze +bread +break +bream +breed +brews +briar +bribe +brick +bride +brief +brier +brigs +brims +brine +bring +brink +briny +brisk +brits +broad +broch +broil +broke +brome +bronc +brood +brook +broom +broth +brown +brows +bruin +bruit +brunt +brush +brute +bubba +bucks +buddy +budge +buffs +buggy +bugle +build +built +bulbs +bulge +bulks +bulky +bulla +bulls +bully +bumps +bumpy +bunch +bunds +bundt +bunks +bunny +bunts +buoys +burbs +burgs +burka +burly +burns +burnt +burps +burqa +burro +burrs +bursa +burst +bused +buses +bushy +busts +busty +butch +butte +butts +buxom +buyer +buzzy +bylaw +byres +bytes +byway +cabal +cabby +caber +cabin +cable +cacao +cache +cacti +caddy +cadet +cadre +cafes +caged +cages +cagey +cairn +caked +cakes +cakey +calfs +calif +calla +calls +calms +calve +calyx +camel +cameo +campo +camps +campy +canal +candy +caned +canes +canid +canna +canny +canoe +canon +canto +caped +caper +capes +capon +capos +caput +carat +carbo +carbs +cards +cared +carer +cares +cargo +carob +carol +carom +carps +carry +carte +carts +carve +cased +cases +casks +caste +casts +catch +cater +catty +caulk +cause +caved +caver +caves +cavil +cease +cecal +cecum +cedar +ceded +cedes +ceili +celeb +cello +cells +celts +cents +chads +chafe +chaff +chain +chair +chalk +champ +chana +chant +chaos +chaps +chard +charm +chars +chart +chase +chasm +chats +cheap +cheat +check +cheek +cheep +cheer +chefs +chemo +chert +chess +chest +chews +chewy +chica +chick +chico +chide +chief +child +chile +chili +chill +chime +chimp +china +chine +ching +chino +chins +chips +chirp +chits +chive +chock +choir +choke +chomp +chops +chord +chore +chose +chows +chubs +chuck +chuff +chugs +chump +chums +chunk +churn +chute +cider +cigar +cinch +circa +cisco +cited +cites +civet +civic +civil +civvy +clack +clade +claim +clamp +clams +clang +clank +clans +claps +clash +clasp +class +clave +claws +clays +clean +clear +cleat +clefs +cleft +clerk +click +cliff +climb +clime +cline +cling +clink +clips +cloak +clock +clods +clogs +clomp +clone +close +cloth +clots +cloud +clout +clove +clown +clubs +cluck +clued +clues +clump +clung +clunk +coach +coals +coast +coati +coats +cobia +cobra +cocci +cocks +cocky +cocoa +codas +codec +coded +coder +codes +codex +codon +coeds +cohos +coifs +coils +coins +cokes +colas +colds +coles +colic +colin +colon +color +colts +comas +combo +combs +comer +comes +comet +comfy +comic +comma +commo +compo +comps +comte +conch +condo +coned +cones +conga +congo +conic +conks +cooed +cooks +cools +coops +coopt +coped +copes +copra +copse +coral +cords +cored +corer +cores +corgi +corks +corky +corms +corns +cornu +corny +corps +costs +cotta +couch +cough +could +count +coupe +coups +court +coven +cover +coves +covet +covey +cowed +cower +cowls +coyly +crabs +crack +craft +crags +cramp +crams +crane +crank +crape +craps +crash +crass +crate +crave +crawl +craws +craze +crazy +creak +cream +credo +creed +creek +creel +creep +creme +crepe +crept +cress +crest +crews +cribs +crick +cried +crier +cries +crime +crimp +crisp +crits +croak +crock +crocs +croft +crone +crony +crook +croon +crops +cross +croup +crowd +crown +crows +crude +cruel +cruet +crumb +cruse +crush +crust +crypt +cubby +cubed +cubes +cubic +cubit +cuddy +cuffs +culls +culpa +cults +cumin +cupid +cuppa +curbs +curds +cured +cures +curia +curio +curls +curly +curry +curse +curve +curvy +cushy +cusps +cuter +cutie +cutis +cutup +cycad +cycle +cyclo +cynic +cysts +czars +dacha +daddy +dados +daffy +daily +dairy +daisy +dales +dames +damns +damps +dance +dandy +dared +dares +darks +darns +darts +dashi +dated +dater +dates +datum +daubs +daunt +davit +dawns +dazed +deals +dealt +deans +dears +deary +death +debit +debts +debug +debut +decaf +decal +decay +decks +decor +decoy +decry +deeds +deems +deeps +deers +defer +deify +deign +deism +deist +deity +dekes +delay +delft +delis +dells +delta +delve +demon +demos +demur +denim +dense +dents +depot +depth +derby +desks +deter +detox +deuce +devil +dewar +dhikr +dhows +dials +diary +diced +dices +dicey +dicky +dicta +diets +digit +diked +dikes +dills +dilly +dimer +dimes +dimly +dinar +dined +diner +dines +dingo +dings +dingy +dinks +dinky +dinos +diode +dippy +direr +dirge +dirty +disco +discs +dishy +disks +ditch +ditsy +ditto +ditty +ditzy +divan +divas +dived +diver +dives +divot +divvy +dizzy +docks +dodge +dodgy +dodos +doers +doffs +doges +doggy +dogma +doing +doled +doles +dolls +dolly +dolor +dolts +domed +domes +donee +dongs +donna +donor +donut +dooms +doomy +doors +doozy +doped +dopes +dopey +dorks +dorky +dorms +dosas +dosed +doses +doted +dotes +doubt +dough +doula +douse +doves +dowdy +dowel +dower +downs +downy +dowry +dowse +doyen +dozed +dozen +dozer +dozes +drabs +draft +drags +drain +drake +drama +drams +drank +drape +drawl +drawn +draws +drays +dread +dream +dreck +dregs +dress +dribs +dried +drier +dries +drift +drill +drily +drink +drips +drive +droid +droll +drone +drool +droop +drops +dross +drove +drown +drugs +druid +drums +drunk +drupe +dryad +dryer +dryly +duals +ducal +ducat +duchy +ducks +ducky +ducts +dudes +duels +duets +duffs +dukes +dulls +dully +dulse +dumbo +dummy +dumps +dumpy +dunce +dunes +dunks +duomo +duped +dupes +dural +durum +dusks +dusky +dusts +dusty +dutch +duvet +dwarf +dweeb +dwell +dwelt +dyads +dyers +dying +dykes +eager +eagle +eared +earls +early +earns +earth +eased +easel +easer +eases +eaten +eater +eaves +ebbed +ebony +ebook +echos +eclat +edema +edged +edger +edges +edict +edify +edits +eejit +eerie +egged +egret +eider +eidos +eight +eject +ejido +eland +elbow +elder +elect +elegy +elide +elite +elope +elude +elute +elven +elves +email +embed +ember +emcee +emery +emirs +emits +emote +empty +enact +ended +endow +enema +enemy +enjoy +ennui +enoki +enrol +ensue +enter +entry +envoy +eosin +epics +epoch +epoxy +equal +equip +erase +erect +ergot +erode +erred +error +erupt +essay +ether +ethic +ethos +ethyl +etude +euros +evade +evens +event +every +evict +evils +evoke +ewers +exact +exalt +exams +excel +execs +exert +exile +exist +exits +expat +expel +expos +extol +extra +exude +exult +exurb +eying +eyrie +fable +faced +facer +faces +facet +facia +facts +faded +fader +fades +faery +fails +faint +fairs +fairy +faith +faked +faker +fakes +fakie +fakir +falls +famed +fancy +fangs +fanny +farce +fared +fares +farms +farts +fasts +fatal +fated +fates +fatso +fatty +fatwa +fault +fauna +fauns +favas +faves +favor +fawns +faxed +faxes +fazed +fazes +fears +feast +feats +fecal +feces +feeds +feels +feign +feint +fella +fells +felon +felts +femme +femur +fence +fends +feral +feria +ferns +ferny +ferry +fests +fetal +fetch +feted +fetes +fetid +fetus +feuds +fever +fewer +fiats +fiber +fibre +fiche +ficus +fiefs +field +fiend +fiery +fifes +fifth +fifty +fight +filch +filed +filer +files +filet +fills +filly +films +filmy +filth +final +finca +finch +finds +fined +finer +fines +finis +finks +fiord +fired +fires +firms +first +fishy +fists +fitly +fiver +fives +fixed +fixer +fixes +fizzy +fjord +flack +flags +flail +flair +flake +flaky +flame +flank +flans +flaps +flare +flash +flask +flats +flaws +flays +fleas +fleck +flees +fleet +flesh +flick +flier +flies +fling +float +flood +floor +flour +flown +flows +fluid +flyer +focal +focus +folks +fonts +foods +force +forms +forth +forty +forum +found +frame +fraud +fresh +fried +fries +front +frost +fruit +fuels +fully +funds +funny +gains +games +gamma +gases +gates +gauge +gears +genes +genre +ghost +giant +gifts +girls +given +gives +gland +glass +globe +glory +gloss +glove +glued +goals +goats +going +goods +grace +grade +grain +grams +grand +grant +grape +graph +grasp +grass +grave +great +greek +green +greet +grief +grill +grind +grips +gross +group +grove +grown +grows +guard +guess +guest +guide +guild +guilt +habit +hairs +halls +hands +handy +hangs +happy +harsh +hated +hates +haven +hawks +heads +heard +heart +heavy +hedge +heels +hello +helps +hence +herbs +highs +hills +hints +hired +hobby +holds +holes +holly +homes +honey +honor +hooks +hoped +hopes +horns +horse +hosts +hotel +hours +house +hover +human +humor +hurts +icons +ideal +ideas +idiot +image +imply +inbox +incur +index +indie +inner +input +intro +issue +items +jeans +jelly +jewel +joins +joint +jokes +judge +juice +juicy +jumps +keeps +kicks +kills +kinda +kinds +kings +knees +knife +knock +knots +known +knows +label +labor +lacks +lakes +lamps +lands +lanes +large +laser +lasts +later +laugh +layer +leads +leaks +learn +lease +least +leave +legal +lemon +level +lever +light +liked +likes +limbs +limit +lined +linen +liner +lines +links +lions +lists +lived +liver +lives +loads +loans +lobby +local +locks +lodge +logic +logos +looks +loops +loose +lords +loses +loved +lover +loves +lower +loyal +lucky +lunar +lunch +lungs +lying +macro +magic +major +maker +makes +males +maple +march +marks +marry +masks +match +mates +maths +matte +maybe +mayor +meals +means +meant +meats +medal +media +meets +melee +menus +mercy +merge +merit +merry +messy +metal +meter +metro +micro +midst +might +miles +minds +mines +minor +minus +mixed +mixer +mixes +model +modem +modes +moist +money +month +moral +motor +mount +mouse +mouth +moved +moves +movie +music +myths +nails +naked +named +names +nasal +nasty +naval +needs +nerve +never +newer +newly +nexus +nicer +niche +night +ninja +ninth +noble +nodes +noise +noisy +norms +north +notch +noted +notes +novel +nurse +nylon +oasis +occur +ocean +offer +often +older +olive +omega +onion +onset +opens +opera +opted +optic +orate +orbit +order +organ +other +ought +ounce +outer +owned +owner +oxide +packs +pages +pains +paint +pairs +panel +panic +pants +paper +parks +parts +party +pasta +paste +patch +paths +patio +pause +peace +peach +peaks +pearl +pedal +peers +penis +penny +perks +pests +petty +phase +phone +photo +piano +picks +piece +piles +pills +pilot +pinch +pipes +pitch +pixel +pizza +place +plain +plane +plans +plant +plate +plays +plaza +plots +plugs +poems +point +poker +polar +poles +polls +pools +porch +pores +ports +posed +poses +posts +pouch +pound +power +press +price +pride +prime +print +prior +prize +probe +promo +prone +proof +props +proud +prove +proxy +psalm +pulls +pulse +pumps +punch +pupil +puppy +purse +queen +query +quest +queue +quick +quiet +quilt +quite +quote +races +racks +radar +radio +rails +rainy +raise +rally +ranch +range +ranks +rapid +rated +rates +ratio +razor +reach +react +reads +ready +realm +rebel +refer +reign +relax +relay +renal +renew +reply +reset +resin +retro +rider +rides +ridge +rifle +right +rigid +rings +rinse +risen +rises +risks +risky +rival +river +roads +robot +rocks +rocky +rogue +roles +rolls +roman +rooms +roots +ropes +roses +rough +round +route +royal +rugby +ruins +ruled +ruler +rules +rural +sadly +safer +salad +sales +salon +sandy +satin +sauce +saved +saves +scale +scalp +scans +scare +scarf +scary +scene +scent +scoop +scope +score +scout +scrap +screw +seals +seams +seats +seeds +seeks +seems +sells +sends +sense +serum +serve +setup +seven +sewer +shade +shaft +shake +shall +shame +shape +share +shark +sharp +sheep +sheer +sheet +shelf +shell +shift +shine +shiny +ships +shirt +shock +shoes +shook +shoot +shops +shore +short +shots +shown +shows +sides +siege +sight +sigma +signs +silly +since +sites +sixth +sized +sizes +skies +skill +skins +skirt +skull +slate +slave +sleek +sleep +slept +slice +slide +slope +slots +small +smart +smell +smile +smoke +snack +snake +sneak +socks +soils +solar +solid +solve +songs +sonic +sorry +sorts +souls +sound +south +space +spare +spark +speak +specs +speed +spell +spend +spent +sperm +spice +spicy +spike +spine +spite +split +spoke +spoon +sport +spots +spray +spurs +squad +stack +staff +stage +stain +stake +stamp +stand +stark +stars +start +state +stats +stays +steak +steal +steam +steel +steep +steer +stems +steps +stick +stiff +still +stock +stole +stone +stood +stool +stops +store +storm +story +stove +strap +straw +strip +stuck +study +stuff +style +sucks +sugar +suite +suits +sunny +super +surge +sushi +swear +sweat +sweet +swept +swift +swing +swiss +sword +syrup +table +taken +takes +tales +talks +tanks +tapes +tasks +taste +tasty +taxes +teach +teams +tears +teens +teeth +tells +tempo +tends +tenth +tents +terms +tests +texts +thank +theft +their +theme +there +these +thick +thief +thigh +thing +think +third +those +three +threw +throw +thumb +tiger +tight +tiles +timer +times +tired +tires +title +toast +today +token +tones +tools +tooth +topic +torch +total +touch +tough +tours +towel +tower +towns +toxic +trace +track +tract +trade +trail +train +trait +trans +traps +trash +treat +trees +trend +trial +tribe +trick +tried +tries +trips +trout +truck +truly +trump +trunk +trust +truth +tubes +tumor +tuned +tunes +turbo +turns +tutor +tweet +twice +twins +twist +types +tyres +ultra +uncle +under +union +unite +units +unity +until +upper +upset +urban +urged +urine +usage +users +using +usual +vague +valid +value +valve +vapor +vault +vegan +veins +vents +venue +verse +video +views +villa +vinyl +viral +virus +visas +visit +vital +vivid +vocal +vodka +voice +volts +voted +voter +votes +wages +wagon +waist +walks +walls +wants +warns +waste +watch +water +watts +waves +wears +weeds +weeks +weigh +weird +wells +welsh +whale +wheat +wheel +where +which +while +white +whole +whose +wider +widow +width +winds +wines +wings +wiped +wired +wires +witch +wives +woman +women +woods +words +works +world +worms +worry +worse +worst +worth +would +wound +wrath +wrist +write +wrong +wrote +yacht +yards +years +yeast +yield +young +yours +youth +yummy +zones +synth +swims +moons +wasps +leeks +peels +maids +mazes +loots +gangs +honed +hares +ponds \ No newline at end of file diff --git a/wordle/azerdle_icon.png b/wordle/azerdle_icon.png new file mode 100644 index 0000000..04e70a0 Binary files /dev/null and b/wordle/azerdle_icon.png differ diff --git a/wordle/azerdle_icon.png.import b/wordle/azerdle_icon.png.import new file mode 100644 index 0000000..b72c7cd --- /dev/null +++ b/wordle/azerdle_icon.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cj1j8a7femxss" +path="res://.godot/imported/azerdle_icon.png-f150034cb6a6d7944ad421472b667f45.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://azerdle_icon.png" +dest_files=["res://.godot/imported/azerdle_icon.png-f150034cb6a6d7944ad421472b667f45.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/wordle/icon.svg b/wordle/icon.svg new file mode 100644 index 0000000..b370ceb --- /dev/null +++ b/wordle/icon.svg @@ -0,0 +1 @@ + diff --git a/wordle/icon.svg.import b/wordle/icon.svg.import new file mode 100644 index 0000000..a8e862c --- /dev/null +++ b/wordle/icon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cghyu5ef5ocos" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/wordle/license.txt b/wordle/license.txt new file mode 100644 index 0000000..35b4b92 --- /dev/null +++ b/wordle/license.txt @@ -0,0 +1,6 @@ +Azerdle by Awf Ibrahim (Awfy) +Music: 'Cosmic aurora', 'Dream nebula', 'Nature's Symphony' by Lof Cosmos from Pixabay. +Sound effects by Ellr license under Attribution 4.0 International (CC BY 4.0) + +https://pixabay.com/es/users/lofcosmos-36957151/ +https://ellr.itch.io/ diff --git a/wordle/project.godot b/wordle/project.godot new file mode 100644 index 0000000..21503b6 --- /dev/null +++ b/wordle/project.godot @@ -0,0 +1,83 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="Azerdle" +config/version="1.1" +config/tags=PackedStringArray("experiment", "learning") +run/main_scene="res://scenes/main.tscn" +config/features=PackedStringArray("4.3", "Mobile") +boot_splash/bg_color=Color(0.262745, 0.239216, 0.494118, 1) +boot_splash/show_image=false +config/icon="res://azerdle_icon.png" + +[audio] + +driver/output_latency.web=100 + +[autoload] + +SignalBus="*res://scripts/signal_bus.gd" + +[display] + +window/size/viewport_width=720 +window/size/viewport_height=1280 +window/stretch/mode="canvas_items" +window/stretch/aspect="expand" +window/stretch/scale=1.5 +window/handheld/orientation=1 + +[importer_defaults] + +texture={ +"compress/channel_pack": 0, +"compress/hdr_compression": 1, +"compress/high_quality": false, +"compress/lossy_quality": 0.7, +"compress/mode": 0, +"compress/normal_map": 0, +"detect_3d/compress_to": 0, +"mipmaps/generate": false, +"mipmaps/limit": -1, +"process/fix_alpha_border": true, +"process/hdr_as_srgb": false, +"process/hdr_clamp_exposure": false, +"process/normal_map_invert_y": false, +"process/premult_alpha": false, +"process/size_limit": 0, +"roughness/mode": 0, +"roughness/src_normal": "" +} + +[input] + +quit={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +confirm={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194309,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +erase={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194308,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} + +[rendering] + +renderer/rendering_method="gl_compatibility" +renderer/rendering_method.mobile="gl_compatibility" +textures/vram_compression/import_etc2_astc=true diff --git a/wordle/scenes/back_button.tscn b/wordle/scenes/back_button.tscn new file mode 100644 index 0000000..1ff9160 --- /dev/null +++ b/wordle/scenes/back_button.tscn @@ -0,0 +1,86 @@ +[gd_scene load_steps=8 format=3 uid="uid://cwkxeg6f2r444"] + +[ext_resource type="FontFile" uid="uid://51nnvssc4vny" path="res://assets/LeagueSpartan-Bold.otf" id="1_lopm2"] +[ext_resource type="Script" path="res://scripts/back_button.gd" id="2_7ppfn"] +[ext_resource type="Texture2D" uid="uid://ckbhj3b3wno1a" path="res://assets/base_button_2.png" id="3_tnbid"] + +[sub_resource type="LabelSettings" id="LabelSettings_t0vk7"] +resource_local_to_scene = true +font = ExtResource("1_lopm2") +font_color = Color(0.14902, 0.14902, 0.14902, 1) + +[sub_resource type="Animation" id="Animation_eg3ov"] +resource_name = "squish" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:scale") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(0.9, 0.9), Vector2(1, 1)] +} + +[sub_resource type="Animation" id="Animation_1ap8f"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:scale") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_738gg"] +_data = { +"RESET": SubResource("Animation_1ap8f"), +"squish": SubResource("Animation_eg3ov") +} + +[node name="BackButton" type="Label"] +custom_minimum_size = Vector2(64, 48) +anchors_preset = -1 +anchor_right = 0.05 +anchor_bottom = 0.067 +offset_bottom = -0.240002 +pivot_offset = Vector2(32, 24) +text = "<<" +label_settings = SubResource("LabelSettings_t0vk7") +horizontal_alignment = 1 +vertical_alignment = 1 +uppercase = true +script = ExtResource("2_7ppfn") +metadata/_edit_use_anchors_ = true + +[node name="TextureButton" type="TextureButton" parent="."] +show_behind_parent = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +focus_mode = 0 +action_mode = 0 +texture_normal = ExtResource("3_tnbid") +ignore_texture_size = true +stretch_mode = 0 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_738gg") +} +speed_scale = 6.0 + +[connection signal="mouse_entered" from="TextureButton" to="." method="_on_button_mouse_entered"] +[connection signal="mouse_exited" from="TextureButton" to="." method="_on_button_mouse_exited"] +[connection signal="pressed" from="TextureButton" to="." method="_on_button_pressed"] diff --git a/wordle/scenes/block.tscn b/wordle/scenes/block.tscn new file mode 100644 index 0000000..98e4fb0 --- /dev/null +++ b/wordle/scenes/block.tscn @@ -0,0 +1,214 @@ +[gd_scene load_steps=11 format=3 uid="uid://lajlrl2ewg5o"] + +[ext_resource type="Script" path="res://scripts/block.gd" id="1_kkqej"] +[ext_resource type="FontFile" uid="uid://51nnvssc4vny" path="res://assets/LeagueSpartan-Bold.otf" id="1_p5wgk"] +[ext_resource type="Texture2D" uid="uid://if21mrdsbap3" path="res://assets/border.png" id="2_2x62s"] +[ext_resource type="AudioStream" uid="uid://daph7l1pefqx8" path="res://sounds/flip.mp3" id="4_foumq"] + +[sub_resource type="LabelSettings" id="LabelSettings_1bnbj"] +resource_local_to_scene = true +line_spacing = 0.0 +font = ExtResource("1_p5wgk") +font_size = 32 +font_color = Color(0.14902, 0.14902, 0.14902, 1) + +[sub_resource type="Animation" id="Animation_t7r4b"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:scale") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Label:scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} + +[sub_resource type="Animation" id="Animation_djxb6"] +resource_name = "flip" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:scale") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, -1)] +} +tracks/1/type = "method" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("FlipSound") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0.5), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [0.0], +"method": &"play" +}] +} +tracks/2/type = "method" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath(".") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0.5), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"update_state" +}] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Label:scale") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [Vector2(1, 1), Vector2(1, -1)] +} + +[sub_resource type="Animation" id="Animation_7cxl6"] +resource_name = "scale_down" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:scale") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(0.8, 0.8), Vector2(1, 1)] +} +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(0), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"update_state" +}] +} + +[sub_resource type="Animation" id="Animation_kq16m"] +resource_name = "scale_up" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:scale") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(1.2, 1.2), Vector2(1, 1)] +} +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(0), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"update_state" +}] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_em5lj"] +_data = { +"RESET": SubResource("Animation_t7r4b"), +"flip": SubResource("Animation_djxb6"), +"scale_down": SubResource("Animation_7cxl6"), +"scale_up": SubResource("Animation_kq16m") +} + +[node name="Block" type="Control"] +custom_minimum_size = Vector2(64, 64) +layout_mode = 3 +anchors_preset = 0 +offset_right = 64.0 +offset_bottom = 64.0 +pivot_offset = Vector2(32, 32) +script = ExtResource("1_kkqej") +tint_grey = Color(0.14902, 0.14902, 0.14902, 1) +tint_green = Color(0, 0.815686, 0.247059, 1) +tint_yellow = Color(0.807843, 0.803922, 0.0470588, 1) +tint_white = Color(1, 1, 1, 1) +metadata/_edit_group_ = true + +[node name="ColorRect" type="ColorRect" parent="."] +visible = false +custom_minimum_size = Vector2(64, 64) +layout_mode = 1 +offset_right = 64.0 +offset_bottom = 64.0 + +[node name="Label" type="Label" parent="."] +visible = false +layout_mode = 1 +offset_top = 4.0 +offset_right = 64.0 +offset_bottom = 68.0 +pivot_offset = Vector2(32, 28) +text = "W" +label_settings = SubResource("LabelSettings_1bnbj") +horizontal_alignment = 1 +vertical_alignment = 1 +uppercase = true + +[node name="Border" type="TextureRect" parent="."] +modulate = Color(0.14902, 0.14902, 0.14902, 1) +layout_mode = 0 +offset_right = 64.0 +offset_bottom = 64.0 +texture = ExtResource("2_2x62s") + +[node name="FlipSound" type="AudioStreamPlayer" parent="."] +stream = ExtResource("4_foumq") +pitch_scale = 0.6 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_em5lj") +} +speed_scale = 5.0 diff --git a/wordle/scenes/enter_button.tscn b/wordle/scenes/enter_button.tscn new file mode 100644 index 0000000..bd77ebe --- /dev/null +++ b/wordle/scenes/enter_button.tscn @@ -0,0 +1,86 @@ +[gd_scene load_steps=8 format=3 uid="uid://c71kj11s2qa6f"] + +[ext_resource type="FontFile" uid="uid://51nnvssc4vny" path="res://assets/LeagueSpartan-Bold.otf" id="1_1hq36"] +[ext_resource type="Script" path="res://scripts/enter_button.gd" id="2_82y5m"] +[ext_resource type="Texture2D" uid="uid://ckbhj3b3wno1a" path="res://assets/base_button_2.png" id="3_enmlu"] + +[sub_resource type="LabelSettings" id="LabelSettings_4d0xq"] +resource_local_to_scene = true +font = ExtResource("1_1hq36") +font_color = Color(0.14902, 0.14902, 0.14902, 1) + +[sub_resource type="Animation" id="Animation_eg3ov"] +resource_name = "squish" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:scale") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(0.9, 0.9), Vector2(1, 1)] +} + +[sub_resource type="Animation" id="Animation_1ap8f"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:scale") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_738gg"] +_data = { +"RESET": SubResource("Animation_1ap8f"), +"squish": SubResource("Animation_eg3ov") +} + +[node name="EnterButton" type="Label"] +custom_minimum_size = Vector2(64, 48) +anchors_preset = -1 +anchor_right = 0.05 +anchor_bottom = 0.067 +offset_bottom = -0.240002 +pivot_offset = Vector2(32, 24) +text = "enter" +label_settings = SubResource("LabelSettings_4d0xq") +horizontal_alignment = 1 +vertical_alignment = 1 +uppercase = true +script = ExtResource("2_82y5m") +metadata/_edit_use_anchors_ = true + +[node name="TextureButton" type="TextureButton" parent="."] +show_behind_parent = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +focus_mode = 0 +action_mode = 0 +texture_normal = ExtResource("3_enmlu") +ignore_texture_size = true +stretch_mode = 0 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_738gg") +} +speed_scale = 6.0 + +[connection signal="mouse_entered" from="TextureButton" to="." method="_on_button_mouse_entered"] +[connection signal="mouse_exited" from="TextureButton" to="." method="_on_button_mouse_exited"] +[connection signal="pressed" from="TextureButton" to="." method="_on_button_pressed"] diff --git a/wordle/scenes/key_button.tscn b/wordle/scenes/key_button.tscn new file mode 100644 index 0000000..5d6baf4 --- /dev/null +++ b/wordle/scenes/key_button.tscn @@ -0,0 +1,91 @@ +[gd_scene load_steps=8 format=3 uid="uid://bgqxqalifar0j"] + +[ext_resource type="FontFile" uid="uid://51nnvssc4vny" path="res://assets/LeagueSpartan-Bold.otf" id="1_ndiqa"] +[ext_resource type="Script" path="res://scripts/key_button.gd" id="2_i5ib0"] +[ext_resource type="Texture2D" uid="uid://dyqy84ra3sk2l" path="res://assets/base_button.png" id="3_byu72"] + +[sub_resource type="LabelSettings" id="LabelSettings_4d0xq"] +resource_local_to_scene = true +font = ExtResource("1_ndiqa") +font_color = Color(0.14902, 0.14902, 0.14902, 1) + +[sub_resource type="Animation" id="Animation_1ap8f"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:scale") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} + +[sub_resource type="Animation" id="Animation_eg3ov"] +resource_name = "squish" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:scale") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(0.9, 0.9), Vector2(1, 1)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_738gg"] +_data = { +"RESET": SubResource("Animation_1ap8f"), +"squish": SubResource("Animation_eg3ov") +} + +[node name="KeyButton" type="Label"] +custom_minimum_size = Vector2(40, 48) +anchors_preset = -1 +anchor_right = 0.03125 +anchor_bottom = 0.067 +offset_bottom = -0.240002 +pivot_offset = Vector2(20, 24) +text = "q" +label_settings = SubResource("LabelSettings_4d0xq") +horizontal_alignment = 1 +vertical_alignment = 1 +uppercase = true +script = ExtResource("2_i5ib0") +tint_grey = Color(0.14902, 0.14902, 0.14902, 1) +tint_green = Color(0, 0.815686, 0.247059, 1) +tint_yellow = Color(0.807843, 0.803922, 0.0470588, 1) +tint_white = Color(1, 1, 1, 1) +metadata/_edit_use_anchors_ = true + +[node name="TextureButton" type="TextureButton" parent="."] +show_behind_parent = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +focus_mode = 0 +action_mode = 0 +texture_normal = ExtResource("3_byu72") +ignore_texture_size = true +stretch_mode = 0 +metadata/_edit_use_anchors_ = true + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_738gg") +} +speed_scale = 6.0 + +[connection signal="mouse_entered" from="TextureButton" to="." method="_on_button_mouse_entered"] +[connection signal="mouse_exited" from="TextureButton" to="." method="_on_button_mouse_exited"] +[connection signal="pressed" from="TextureButton" to="." method="_on_button_pressed"] diff --git a/wordle/scenes/keyboard.tscn b/wordle/scenes/keyboard.tscn new file mode 100644 index 0000000..3bed98c --- /dev/null +++ b/wordle/scenes/keyboard.tscn @@ -0,0 +1,222 @@ +[gd_scene load_steps=10 format=3 uid="uid://b6mgrhmu47gco"] + +[ext_resource type="PackedScene" uid="uid://bgqxqalifar0j" path="res://scenes/key_button.tscn" id="1_iif7k"] +[ext_resource type="FontFile" uid="uid://51nnvssc4vny" path="res://assets/LeagueSpartan-Bold.otf" id="2_o0n64"] +[ext_resource type="PackedScene" uid="uid://c71kj11s2qa6f" path="res://scenes/enter_button.tscn" id="3_e1su1"] +[ext_resource type="PackedScene" uid="uid://cwkxeg6f2r444" path="res://scenes/back_button.tscn" id="4_gsmx3"] + +[sub_resource type="LabelSettings" id="LabelSettings_jpaos"] +resource_local_to_scene = true +font = ExtResource("2_o0n64") +font_color = Color(0.14902, 0.14902, 0.14902, 1) + +[sub_resource type="LabelSettings" id="LabelSettings_j634h"] +resource_local_to_scene = true +font = ExtResource("2_o0n64") +font_color = Color(0.14902, 0.14902, 0.14902, 1) + +[sub_resource type="LabelSettings" id="LabelSettings_2abmr"] +resource_local_to_scene = true +font = ExtResource("2_o0n64") +font_color = Color(0.14902, 0.14902, 0.14902, 1) + +[sub_resource type="LabelSettings" id="LabelSettings_2si47"] +resource_local_to_scene = true +font = ExtResource("2_o0n64") +font_color = Color(0.14902, 0.14902, 0.14902, 1) + +[sub_resource type="LabelSettings" id="LabelSettings_7ca85"] +resource_local_to_scene = true +font = ExtResource("2_o0n64") +font_size = 12 +font_color = Color(0.14902, 0.14902, 0.14902, 1) + +[node name="Keyboard" type="Control"] +layout_mode = 3 +anchors_preset = 0 +mouse_filter = 2 + +[node name="Row" type="HBoxContainer" 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 = -178.0 +offset_top = -24.0 +offset_right = 178.0 +offset_bottom = 24.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +alignment = 1 + +[node name="KeyButton" parent="Row" instance=ExtResource("1_iif7k")] +layout_mode = 2 +label_settings = SubResource("LabelSettings_jpaos") + +[node name="KeyButton2" parent="Row" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "w" +label_settings = SubResource("LabelSettings_jpaos") + +[node name="KeyButton3" parent="Row" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "e" +label_settings = SubResource("LabelSettings_jpaos") + +[node name="KeyButton4" parent="Row" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "r" +label_settings = SubResource("LabelSettings_jpaos") + +[node name="KeyButton5" parent="Row" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "t" +label_settings = SubResource("LabelSettings_jpaos") + +[node name="KeyButton6" parent="Row" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "y" +label_settings = SubResource("LabelSettings_jpaos") + +[node name="KeyButton7" parent="Row" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "u" +label_settings = SubResource("LabelSettings_jpaos") + +[node name="KeyButton8" parent="Row" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "i" +label_settings = SubResource("LabelSettings_jpaos") + +[node name="KeyButton9" parent="Row" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "o" +label_settings = SubResource("LabelSettings_jpaos") + +[node name="KeyButton10" parent="Row" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "p" +label_settings = SubResource("LabelSettings_jpaos") + +[node name="Row2" type="HBoxContainer" 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 = -178.0 +offset_top = 32.0 +offset_right = 178.0 +offset_bottom = 80.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +alignment = 1 + +[node name="KeyButton" parent="Row2" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "a" +label_settings = SubResource("LabelSettings_j634h") + +[node name="KeyButton2" parent="Row2" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "s" +label_settings = SubResource("LabelSettings_j634h") + +[node name="KeyButton3" parent="Row2" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "d" +label_settings = SubResource("LabelSettings_j634h") + +[node name="KeyButton4" parent="Row2" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "f" +label_settings = SubResource("LabelSettings_j634h") + +[node name="KeyButton5" parent="Row2" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "g" +label_settings = SubResource("LabelSettings_j634h") + +[node name="KeyButton6" parent="Row2" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "h" +label_settings = SubResource("LabelSettings_j634h") + +[node name="KeyButton7" parent="Row2" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "j" +label_settings = SubResource("LabelSettings_j634h") + +[node name="KeyButton8" parent="Row2" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "k" +label_settings = SubResource("LabelSettings_j634h") + +[node name="KeyButton9" parent="Row2" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "l" +label_settings = SubResource("LabelSettings_j634h") + +[node name="Row3" type="HBoxContainer" 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 = -178.0 +offset_top = 88.0 +offset_right = 178.0 +offset_bottom = 136.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +alignment = 1 + +[node name="BackButton" parent="Row3" instance=ExtResource("4_gsmx3")] +layout_mode = 2 +label_settings = SubResource("LabelSettings_2abmr") + +[node name="KeyButton" parent="Row3" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "z" +label_settings = SubResource("LabelSettings_2si47") + +[node name="KeyButton2" parent="Row3" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "x" +label_settings = SubResource("LabelSettings_2si47") + +[node name="KeyButton3" parent="Row3" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "c" +label_settings = SubResource("LabelSettings_2si47") + +[node name="KeyButton4" parent="Row3" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "v" +label_settings = SubResource("LabelSettings_2si47") + +[node name="KeyButton5" parent="Row3" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "b" +label_settings = SubResource("LabelSettings_2si47") + +[node name="KeyButton6" parent="Row3" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "n" +label_settings = SubResource("LabelSettings_2si47") + +[node name="KeyButton7" parent="Row3" instance=ExtResource("1_iif7k")] +layout_mode = 2 +text = "m" +label_settings = SubResource("LabelSettings_2si47") + +[node name="EnterButton" parent="Row3" instance=ExtResource("3_e1su1")] +layout_mode = 2 +label_settings = SubResource("LabelSettings_7ca85") diff --git a/wordle/scenes/main.tscn b/wordle/scenes/main.tscn new file mode 100644 index 0000000..a57d638 --- /dev/null +++ b/wordle/scenes/main.tscn @@ -0,0 +1,541 @@ +[gd_scene load_steps=39 format=3 uid="uid://bvkr1c7xqwdcj"] + +[ext_resource type="Script" path="res://scripts/main.gd" id="1_cpvhk"] +[ext_resource type="Texture2D" uid="uid://cx6vj6fun71m7" path="res://assets/hexagon.png" id="2_b2mr2"] +[ext_resource type="PackedScene" uid="uid://potup42bld23" path="res://scenes/row.tscn" id="2_cna64"] +[ext_resource type="Texture2D" uid="uid://bm54pulg1ipc5" path="res://assets/vignette.png" id="2_xh5ls"] +[ext_resource type="Texture2D" uid="uid://cc4wlxpjvj2iy" path="res://assets/octogon.png" id="3_eok08"] +[ext_resource type="Theme" uid="uid://dfw7lrrxmofku" path="res://assets/text_box_theme.tres" id="3_somg6"] +[ext_resource type="FontFile" uid="uid://51nnvssc4vny" path="res://assets/LeagueSpartan-Bold.otf" id="4_45vqo"] +[ext_resource type="Texture2D" uid="uid://dblhqqdvucvri" path="res://assets/dust.jpg" id="4_hkpnb"] +[ext_resource type="Texture2D" uid="uid://bg6tb0xmsnh2g" path="res://assets/gradient.png" id="5_y61tn"] +[ext_resource type="AudioStream" uid="uid://wmjp43e444xa" path="res://sounds/type1.mp3" id="9_inyl6"] +[ext_resource type="AudioStream" uid="uid://i4d6lhqkyl2l" path="res://sounds/type2.mp3" id="10_11jrp"] +[ext_resource type="AudioStream" uid="uid://clxe6enn15o4p" path="res://sounds/error.mp3" id="11_f41qj"] +[ext_resource type="PackedScene" uid="uid://b6mgrhmu47gco" path="res://scenes/keyboard.tscn" id="11_yvcxw"] +[ext_resource type="AudioStream" uid="uid://djcr6qnwqxhdn" path="res://sounds/delete1.mp3" id="12_ac7mh"] +[ext_resource type="PackedScene" uid="uid://bu83x6x3mossv" path="res://scenes/mute_button.tscn" id="13_3jp4a"] +[ext_resource type="AudioStream" uid="uid://c5mhws7ipgvjk" path="res://sounds/delete2.mp3" id="13_8w1ra"] +[ext_resource type="AudioStream" uid="uid://kkiu1nwso0oq" path="res://sounds/win.mp3" id="14_k150y"] +[ext_resource type="AudioStream" uid="uid://chbcycp8qr0i1" path="res://sounds/music/cosmic-aurora-lofi-228368.mp3" id="14_khlph"] +[ext_resource type="AudioStream" uid="uid://oxjgsibd72m0" path="res://sounds/confirm.mp3" id="15_6130v"] +[ext_resource type="AudioStream" uid="uid://dab3m7hqg5cte" path="res://sounds/music/dream-nebula-lofi-228369.mp3" id="15_voy81"] +[ext_resource type="AudioStream" uid="uid://d4vw3htndj81" path="res://sounds/music/naturex27s-symphony-156040.mp3" id="17_hls0l"] +[ext_resource type="AudioStream" uid="uid://qpgmh1uh4uvg" path="res://sounds/lose.mp3" id="18_vv7jk"] +[ext_resource type="Texture2D" uid="uid://1for8xr6r5h4" path="res://assets/arrows.png" id="19_qdy5d"] +[ext_resource type="PackedScene" uid="uid://myvh4o7j2pa4" path="res://scenes/more_button.tscn" id="21_o1chm"] + +[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_5w4y0"] +blend_mode = 3 + +[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_m4k33"] +blend_mode = 1 + +[sub_resource type="LabelSettings" id="LabelSettings_hqt74"] +line_spacing = 0.0 +font = ExtResource("4_45vqo") + +[sub_resource type="LabelSettings" id="LabelSettings_kbwat"] +font = ExtResource("4_45vqo") +font_size = 48 +outline_color = Color(0.14902, 0.14902, 0.14902, 1) + +[sub_resource type="LabelSettings" id="LabelSettings_cbfxk"] +font = ExtResource("4_45vqo") +font_size = 48 +font_color = Color(0.537255, 1, 0.607843, 1) +outline_color = Color(0.14902, 0.14902, 0.14902, 1) + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_pcml6"] +content_margin_left = 32.0 +content_margin_right = 32.0 +bg_color = Color(0.14902, 0.14902, 0.14902, 1) + +[sub_resource type="LabelSettings" id="LabelSettings_3cyds"] +line_spacing = 12.0 +font = ExtResource("4_45vqo") +font_size = 18 + +[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_7bynu"] +streams_count = 3 +stream_0/stream = ExtResource("14_khlph") +stream_1/stream = ExtResource("15_voy81") +stream_2/stream = ExtResource("17_hls0l") + +[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_74osk"] +playback_mode = 1 +random_pitch = 1.5 +streams_count = 2 +stream_0/stream = ExtResource("9_inyl6") +stream_1/stream = ExtResource("10_11jrp") + +[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_urg4j"] +random_pitch = 1.3 +streams_count = 1 +stream_0/stream = ExtResource("11_f41qj") + +[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_8ytqn"] +playback_mode = 1 +random_pitch = 1.3 +streams_count = 2 +stream_0/stream = ExtResource("12_ac7mh") +stream_1/stream = ExtResource("13_8w1ra") + +[sub_resource type="Animation" id="Animation_dubw6"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("../ArrowLeftAnchor/ArrowLeft:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(432, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("../ArrowRightAnchor/ArrowRight:position") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(828, 0)] +} + +[sub_resource type="Animation" id="Animation_4gf0w"] +resource_name = "sine" +length = 4.0 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("../ArrowLeftAnchor/ArrowLeft:position") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 2, 4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(432, 0), Vector2(424, 0), Vector2(432, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("../ArrowRightAnchor/ArrowRight:position") +tracks/1/interp = 2 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 2, 4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(828, 0), Vector2(836, 0), Vector2(828, 0)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_c0mwv"] +_data = { +"RESET": SubResource("Animation_dubw6"), +"sine": SubResource("Animation_4gf0w") +} + +[node name="Main" 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_cpvhk") + +[node name="VisualsGroup" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +metadata/_edit_lock_ = true + +[node name="ColorRect" type="ColorRect" parent="VisualsGroup"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0.47451, 0.486275, 0.466667, 1) +metadata/_edit_lock_ = true + +[node name="Shape" type="TextureRect" parent="VisualsGroup"] +modulate = Color(0.223529, 0.239216, 0.231373, 0.235294) +layout_mode = 0 +offset_left = -224.0 +offset_top = -232.0 +offset_right = 176.0 +offset_bottom = 168.0 +pivot_offset = Vector2(200, 200) +texture = ExtResource("3_eok08") + +[node name="Shape2" type="TextureRect" parent="VisualsGroup"] +modulate = Color(0.223529, 0.239216, 0.231373, 0.235294) +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -176.0 +offset_top = -160.0 +offset_right = 224.0 +offset_bottom = 240.0 +grow_horizontal = 0 +grow_vertical = 0 +pivot_offset = Vector2(200, 200) +texture = ExtResource("3_eok08") + +[node name="Shape3" type="TextureRect" parent="VisualsGroup"] +modulate = Color(0.172549, 0.215686, 0.247059, 0.105882) +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -400.0 +offset_top = -400.0 +offset_right = 400.0 +offset_bottom = 400.0 +grow_horizontal = 2 +grow_vertical = 2 +pivot_offset = Vector2(400, 400) +texture = ExtResource("2_b2mr2") + +[node name="Shape4" type="TextureRect" parent="VisualsGroup"] +modulate = Color(0.270588, 0.317647, 0.32549, 0.235294) +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -320.0 +offset_top = -320.0 +offset_right = 320.0 +offset_bottom = 320.0 +grow_horizontal = 2 +grow_vertical = 2 +pivot_offset = Vector2(320, 320) +texture = ExtResource("2_b2mr2") + +[node name="Vignette" type="TextureRect" parent="VisualsGroup"] +modulate = Color(0.0313726, 0.196078, 0.454902, 0.14902) +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("2_xh5ls") +expand_mode = 1 +metadata/_edit_lock_ = true + +[node name="CornerGradient" type="TextureRect" parent="VisualsGroup"] +material = SubResource("CanvasItemMaterial_5w4y0") +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("5_y61tn") +expand_mode = 1 +metadata/_edit_lock_ = true + +[node name="DustTexture" type="TextureRect" parent="VisualsGroup"] +modulate = Color(0.172549, 0.203922, 0.337255, 0.192157) +material = SubResource("CanvasItemMaterial_m4k33") +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("4_hkpnb") +expand_mode = 1 +metadata/_edit_lock_ = true + +[node name="Wipe" type="ColorRect" parent="VisualsGroup"] +visible = false +top_level = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0.262745, 0.239216, 0.494118, 1) + +[node name="Modulate" type="ColorRect" parent="VisualsGroup"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0.0470588, 0, 1, 0.235294) +metadata/_edit_lock_ = true + +[node name="Guesses" type="VBoxContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = -64.0 +offset_bottom = -64.0 +grow_horizontal = 2 +grow_vertical = 2 +alignment = 1 + +[node name="Row" parent="Guesses" instance=ExtResource("2_cna64")] +layout_mode = 2 +size_flags_horizontal = 4 +metadata/_edit_use_anchors_ = true + +[node name="Row2" parent="Guesses" instance=ExtResource("2_cna64")] +layout_mode = 2 +size_flags_horizontal = 4 +metadata/_edit_use_anchors_ = true + +[node name="Row3" parent="Guesses" instance=ExtResource("2_cna64")] +layout_mode = 2 +size_flags_horizontal = 4 +metadata/_edit_use_anchors_ = true + +[node name="Row4" parent="Guesses" instance=ExtResource("2_cna64")] +layout_mode = 2 +size_flags_horizontal = 4 +metadata/_edit_use_anchors_ = true + +[node name="Row5" parent="Guesses" instance=ExtResource("2_cna64")] +layout_mode = 2 +size_flags_horizontal = 4 +metadata/_edit_use_anchors_ = true + +[node name="Row6" parent="Guesses" instance=ExtResource("2_cna64")] +layout_mode = 2 +size_flags_horizontal = 4 +metadata/_edit_use_anchors_ = true + +[node name="ErrorBox" type="Label" parent="."] +layout_mode = 1 +anchors_preset = -1 +anchor_left = 0.5 +anchor_top = 0.237 +anchor_right = 0.5 +anchor_bottom = 0.237 +offset_left = -1.0 +offset_top = -114.36 +offset_right = 1.0 +offset_bottom = -92.36 +grow_horizontal = 2 +grow_vertical = 2 +pivot_offset = Vector2(1, 11) +theme = ExtResource("3_somg6") +label_settings = SubResource("LabelSettings_hqt74") +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="RoundsText" type="Label" parent="."] +layout_mode = 0 +offset_left = -80.0 +offset_top = 40.0 +offset_right = 210.0 +offset_bottom = 101.0 +pivot_offset = Vector2(80, -40) +text = "999" +label_settings = SubResource("LabelSettings_kbwat") +horizontal_alignment = 1 + +[node name="WinsText" type="Label" parent="."] +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -216.0 +offset_top = -48.0 +offset_right = 74.0 +offset_bottom = -17.0 +grow_horizontal = 0 +grow_vertical = 0 +pivot_offset = Vector2(216, 78) +text = "999" +label_settings = SubResource("LabelSettings_cbfxk") +horizontal_alignment = 1 + +[node name="ArrowLeftAnchor" type="Control" 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 = -640.0 +offset_top = -264.0 +offset_right = -624.0 +offset_bottom = -248.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="ArrowLeft" type="TextureRect" parent="ArrowLeftAnchor"] +layout_mode = 0 +offset_left = 432.0 +offset_right = 452.0 +offset_bottom = 64.0 +pivot_offset = Vector2(10, 32) +texture = ExtResource("19_qdy5d") + +[node name="ArrowRightAnchor" type="Control" 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 = -640.0 +offset_top = -264.0 +offset_right = -624.0 +offset_bottom = -248.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="ArrowRight" type="TextureRect" parent="ArrowRightAnchor"] +layout_mode = 0 +offset_left = 828.0 +offset_right = 848.0 +offset_bottom = 64.0 +scale = Vector2(-1, 1) +pivot_offset = Vector2(10, 32) +texture = ExtResource("19_qdy5d") + +[node name="Keyboard" parent="." instance=ExtResource("11_yvcxw")] +layout_mode = 1 +anchors_preset = -1 +anchor_left = 0.5 +anchor_top = 0.725 +anchor_right = 0.5 +anchor_bottom = 0.725 +offset_top = 24.6398 +offset_bottom = 24.6398 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Info" type="Label" parent="."] +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme = ExtResource("3_somg6") +theme_override_styles/normal = SubResource("StyleBoxFlat_pcml6") +text = "Azerdle by Awf Ibrahim (Awfy) + +Music: 'Cosmic aurora', 'Dream nebula', 'Nature's Symphony' by Lof Cosmos from Pixabay. + +Sound effects by Ellr license under Attribution 4.0 International (CC BY 4.0) + +Version 1.1" +label_settings = SubResource("LabelSettings_3cyds") +horizontal_alignment = 1 +vertical_alignment = 1 +autowrap_mode = 3 + +[node name="MoreButton" parent="." instance=ExtResource("21_o1chm")] +layout_mode = 1 +anchors_preset = 1 +anchor_left = 1.0 +anchor_right = 1.0 +offset_left = -80.0 +offset_top = 32.0 +offset_right = -32.0 +offset_bottom = 80.0 +grow_horizontal = 0 + +[node name="MuteButton" parent="." instance=ExtResource("13_3jp4a")] +layout_mode = 1 +anchors_preset = 1 +anchor_left = 1.0 +anchor_right = 1.0 +offset_left = -80.0 +offset_top = 96.0 +offset_right = -32.0 +offset_bottom = 144.0 +grow_horizontal = 0 + +[node name="TimerGroup" type="Node" parent="."] + +[node name="ErrorTimer" type="Timer" parent="TimerGroup"] +wait_time = 1.5 +one_shot = true + +[node name="RestartTimer" type="Timer" parent="TimerGroup"] +wait_time = 2.0 +one_shot = true + +[node name="RelaxTimer" type="Timer" parent="TimerGroup"] +wait_time = 5.0 +one_shot = true + +[node name="AudioGroup" type="Node" parent="."] + +[node name="Music" type="AudioStreamPlayer" parent="AudioGroup"] +stream = SubResource("AudioStreamRandomizer_7bynu") +volume_db = -6.0 +autoplay = true + +[node name="TypeSound" type="AudioStreamPlayer" parent="AudioGroup"] +stream = SubResource("AudioStreamRandomizer_74osk") +volume_db = 14.0 + +[node name="ErrorSound" type="AudioStreamPlayer" parent="AudioGroup"] +stream = SubResource("AudioStreamRandomizer_urg4j") +volume_db = 4.0 + +[node name="DeleteSound" type="AudioStreamPlayer" parent="AudioGroup"] +stream = SubResource("AudioStreamRandomizer_8ytqn") + +[node name="WinSound" type="AudioStreamPlayer" parent="AudioGroup"] +stream = ExtResource("14_k150y") +volume_db = 3.0 + +[node name="ConfirmSound" type="AudioStreamPlayer" parent="AudioGroup"] +stream = ExtResource("15_6130v") +volume_db = 4.0 + +[node name="LoseSound" type="AudioStreamPlayer" parent="AudioGroup"] +stream = ExtResource("18_vv7jk") +volume_db = 10.0 + +[node name="AnimationGroup" type="Node" parent="."] + +[node name="ArrowsAnim" type="AnimationPlayer" parent="AnimationGroup"] +libraries = { +"": SubResource("AnimationLibrary_c0mwv") +} +autoplay = "sine" +speed_scale = 2.0 + +[connection signal="pressed" from="MoreButton" to="." method="_on_more_button_pressed"] +[connection signal="pressed" from="MuteButton" to="." method="_on_mute_button_pressed"] +[connection signal="timeout" from="TimerGroup/ErrorTimer" to="." method="_on_error_timer_timeout"] +[connection signal="timeout" from="TimerGroup/RestartTimer" to="." method="_on_restart_timer_timeout"] +[connection signal="timeout" from="TimerGroup/RelaxTimer" to="." method="_on_relax_timer_timeout"] +[connection signal="finished" from="AudioGroup/Music" to="." method="_on_music_finished"] diff --git a/wordle/scenes/more_button.tscn b/wordle/scenes/more_button.tscn new file mode 100644 index 0000000..48b1306 --- /dev/null +++ b/wordle/scenes/more_button.tscn @@ -0,0 +1,62 @@ +[gd_scene load_steps=6 format=3 uid="uid://myvh4o7j2pa4"] + +[ext_resource type="Texture2D" uid="uid://ct03xm4l7nftg" path="res://assets/more_button.png" id="1_v5s4e"] +[ext_resource type="Script" path="res://scripts/more_button.gd" id="2_dpexa"] + +[sub_resource type="Animation" id="Animation_1ap8f"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:scale") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} + +[sub_resource type="Animation" id="Animation_eg3ov"] +resource_name = "squish" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:scale") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(0.9, 0.9), Vector2(1, 1)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_738gg"] +_data = { +"RESET": SubResource("Animation_1ap8f"), +"squish": SubResource("Animation_eg3ov") +} + +[node name="MoreButton" type="TextureButton"] +offset_right = 48.0 +offset_bottom = 48.0 +pivot_offset = Vector2(24, 24) +focus_mode = 0 +action_mode = 0 +texture_normal = ExtResource("1_v5s4e") +ignore_texture_size = true +stretch_mode = 0 +script = ExtResource("2_dpexa") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_738gg") +} +speed_scale = 6.0 + +[connection signal="mouse_entered" from="." to="." method="_on_mouse_entered"] +[connection signal="mouse_exited" from="." to="." method="_on_mouse_exited"] +[connection signal="pressed" from="." to="." method="_on_pressed"] diff --git a/wordle/scenes/mute_button.tscn b/wordle/scenes/mute_button.tscn new file mode 100644 index 0000000..5344b76 --- /dev/null +++ b/wordle/scenes/mute_button.tscn @@ -0,0 +1,64 @@ +[gd_scene load_steps=7 format=3 uid="uid://bu83x6x3mossv"] + +[ext_resource type="Texture2D" uid="uid://208t5rbymhi4" path="res://assets/music_button_on.png" id="1_3fywr"] +[ext_resource type="Texture2D" uid="uid://crr77ferhx7cw" path="res://assets/music_button_off.png" id="2_8dlpt"] +[ext_resource type="Script" path="res://scripts/mute_button.gd" id="2_rl5bg"] + +[sub_resource type="Animation" id="Animation_1ap8f"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:scale") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} + +[sub_resource type="Animation" id="Animation_eg3ov"] +resource_name = "squish" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:scale") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(0.9, 0.9), Vector2(1, 1)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_738gg"] +_data = { +"RESET": SubResource("Animation_1ap8f"), +"squish": SubResource("Animation_eg3ov") +} + +[node name="MuteButton" type="TextureButton"] +offset_right = 48.0 +offset_bottom = 48.0 +pivot_offset = Vector2(24, 24) +focus_mode = 0 +action_mode = 0 +texture_normal = ExtResource("1_3fywr") +ignore_texture_size = true +stretch_mode = 0 +script = ExtResource("2_rl5bg") +off = ExtResource("2_8dlpt") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_738gg") +} +speed_scale = 6.0 + +[connection signal="mouse_entered" from="." to="." method="_on_mouse_entered"] +[connection signal="mouse_exited" from="." to="." method="_on_mouse_exited"] +[connection signal="pressed" from="." to="." method="_on_pressed"] diff --git a/wordle/scenes/row.tscn b/wordle/scenes/row.tscn new file mode 100644 index 0000000..4a220ec --- /dev/null +++ b/wordle/scenes/row.tscn @@ -0,0 +1,27 @@ +[gd_scene load_steps=3 format=3 uid="uid://potup42bld23"] + +[ext_resource type="Script" path="res://scripts/row.gd" id="1_2dtsr"] +[ext_resource type="PackedScene" uid="uid://lajlrl2ewg5o" path="res://scenes/block.tscn" id="1_2ix87"] + +[node name="Row" type="HBoxContainer"] +anchors_preset = -1 +anchor_right = 1.0 +anchor_bottom = 0.089 +offset_bottom = -0.0800018 +alignment = 1 +script = ExtResource("1_2dtsr") + +[node name="Block" parent="." instance=ExtResource("1_2ix87")] +layout_mode = 2 + +[node name="Block2" parent="." instance=ExtResource("1_2ix87")] +layout_mode = 2 + +[node name="Block3" parent="." instance=ExtResource("1_2ix87")] +layout_mode = 2 + +[node name="Block4" parent="." instance=ExtResource("1_2ix87")] +layout_mode = 2 + +[node name="Block5" parent="." instance=ExtResource("1_2ix87")] +layout_mode = 2 diff --git a/wordle/scripts/back_button.gd b/wordle/scripts/back_button.gd new file mode 100644 index 0000000..d1a12bd --- /dev/null +++ b/wordle/scripts/back_button.gd @@ -0,0 +1,18 @@ +extends Label + +@onready var button = $TextureButton +@onready var anim = $AnimationPlayer + + +func _on_button_pressed(): + SignalBus.virtual_back_pressed.emit() + anim.stop() + anim.play("squish") + + +func _on_button_mouse_entered(): + button.modulate.a = 0.7 + + +func _on_button_mouse_exited(): + button.modulate.a = 1.0 diff --git a/wordle/scripts/block.gd b/wordle/scripts/block.gd new file mode 100644 index 0000000..88f8c62 --- /dev/null +++ b/wordle/scripts/block.gd @@ -0,0 +1,59 @@ +extends Control + +const base_pitch: float = 0.6 + +enum states {DEFAULT, READY, WRONG, CORRECT, HALF_CORRECT} + +@export var tint_grey: Color +@export var tint_green: Color +@export var tint_yellow: Color +@export var tint_white: Color + +@onready var color_rect: ColorRect = $ColorRect +@onready var label: Label = $Label +@onready var border: TextureRect = $Border +@onready var flip_sound: AudioStreamPlayer = $FlipSound +@onready var anim: AnimationPlayer = $AnimationPlayer + +var state: int = states.DEFAULT + + +func change_visibility(c: bool, l: bool, b: bool): + color_rect.visible = c + label.visible = l + border.visible = b + + +func change_color(c: Color, l: Color, b: Color): + color_rect.color = c + label.label_settings.font_color = l + border.modulate = b + + +func _ready(): + SignalBus.game_started.connect(refresh_state) + + +func update_state(): + match state: + states.DEFAULT: + change_color(tint_grey, tint_grey, tint_grey) + change_visibility(false, false, true) + states.READY: + change_color(tint_white, tint_grey, tint_grey) + change_visibility(true, true, true) + states.WRONG: + change_color(tint_grey, tint_white, tint_grey) + change_visibility(true, true, false) + states.CORRECT: + change_color(tint_green, tint_white, tint_grey) + change_visibility(true, true, false) + states.HALF_CORRECT: + change_color(tint_yellow, tint_white, tint_grey) + change_visibility(true, true, false) + + +func refresh_state(): + state = states.DEFAULT + update_state() + anim.play("RESET") diff --git a/wordle/scripts/enter_button.gd b/wordle/scripts/enter_button.gd new file mode 100644 index 0000000..57c4d87 --- /dev/null +++ b/wordle/scripts/enter_button.gd @@ -0,0 +1,18 @@ +extends Label + +@onready var button = $TextureButton +@onready var anim = $AnimationPlayer + + +func _on_button_pressed(): + SignalBus.virtual_enter_pressed.emit() + anim.stop() + anim.play("squish") + + +func _on_button_mouse_entered(): + button.modulate.a = 0.7 + + +func _on_button_mouse_exited(): + button.modulate.a = 1.0 diff --git a/wordle/scripts/key_button.gd b/wordle/scripts/key_button.gd new file mode 100644 index 0000000..94dd1ac --- /dev/null +++ b/wordle/scripts/key_button.gd @@ -0,0 +1,70 @@ +extends Label + +enum states {DEFAULT, READY, WRONG, CORRECT, HALF_CORRECT} + +@onready var button = $TextureButton +@onready var anim = $AnimationPlayer + +@export var tint_grey: Color +@export var tint_green: Color +@export var tint_yellow: Color +@export var tint_white: Color + +var state: int = states.DEFAULT + + +func _ready(): + SignalBus.game_started.connect(refresh_state) + SignalBus.row_finished.connect(change_state) + + +func refresh_state(): + state = states.DEFAULT + update_visuals() + + +# give priority in the order correct>half_correct>wrong when changing state +# lock the state if the state is already met in the given priority order +func change_state(c_list: Array, h_list: Array, w_list: Array): + if text.to_lower() in c_list or state == states.CORRECT: + state = states.CORRECT + update_visuals() + return + elif text.to_lower() in h_list or state == states.HALF_CORRECT: + state = states.HALF_CORRECT + update_visuals() + return + elif text.to_lower() in w_list or state == states.WRONG: + state = states.WRONG + update_visuals() + return + + +func update_visuals(): + match state: + states.DEFAULT: + label_settings.font_color = tint_grey + button.modulate = tint_white + states.CORRECT: + label_settings.font_color = tint_white + button.modulate = tint_green + states.HALF_CORRECT: + label_settings.font_color = tint_white + button.modulate = tint_yellow + states.WRONG: + label_settings.font_color = tint_white + button.modulate = tint_grey + + +func _on_button_pressed(): + SignalBus.virtual_key_pressed.emit(text) + anim.stop() + anim.play("squish") + + +func _on_button_mouse_entered(): + button.modulate.a = 0.7 + + +func _on_button_mouse_exited(): + button.modulate.a = 1.0 diff --git a/wordle/scripts/main.gd b/wordle/scripts/main.gd new file mode 100644 index 0000000..3c93828 --- /dev/null +++ b/wordle/scripts/main.gd @@ -0,0 +1,351 @@ +extends Control + +const MAX_WORD_LENGTH: int = 5 +const alphabet_list: Array[String] = [ + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', +] +const music_volume: float = -6.0 +const rot_speed: float = 4.0 +const arrow_speed: float = 2.0 +const counter_speed: float = 0.6 +const counter_scale: float = 1.2 +const error_speed: float = 2.0 +const error_scale: float = 1.2 +const color_speed: float = 0.5 +const wipe_speed: float = 1.0 + +@onready var guesses: VBoxContainer = $Guesses +@onready var error_box: Label = $ErrorBox +@onready var error_timer: Timer = $TimerGroup/ErrorTimer +@onready var restart_timer: Timer = $TimerGroup/RestartTimer +@onready var rounds_text: Label = $RoundsText +@onready var wins_text: Label = $WinsText +@onready var shape: TextureRect = $VisualsGroup/Shape +@onready var shape_2: TextureRect = $VisualsGroup/Shape2 +@onready var shape_3: TextureRect = $VisualsGroup/Shape3 +@onready var shape_4: TextureRect = $VisualsGroup/Shape4 +@onready var mod_color: ColorRect = $VisualsGroup/Modulate +@onready var arrow_left_anchor: Control = $ArrowLeftAnchor +@onready var arrow_right_anchor: Control = $ArrowRightAnchor +@onready var keyboard: Control = $Keyboard +@onready var info: Label = $Info +@onready var more_button: TextureButton = $MoreButton +@onready var relax_timer: Timer = $TimerGroup/RelaxTimer +@onready var wipe: ColorRect = $VisualsGroup/Wipe +@onready var mute_button: TextureButton = $MuteButton + +@onready var music: AudioStreamPlayer = $AudioGroup/Music +@onready var type_sound: AudioStreamPlayer = $AudioGroup/TypeSound +@onready var error_sound: AudioStreamPlayer = $AudioGroup/ErrorSound +@onready var delete_sound: AudioStreamPlayer = $AudioGroup/DeleteSound +@onready var win_sound: AudioStreamPlayer = $AudioGroup/WinSound +@onready var confirm_sound: AudioStreamPlayer = $AudioGroup/ConfirmSound +@onready var lose_sound: AudioStreamPlayer = $AudioGroup/LoseSound + +var word_list: Array[String] +var word: String +var max_guesses: int +var arrow_tween: Tween + +var can_type: bool = true +var can_check_info: bool = true +var current_block: int = 0 +var current_row: int = 0 +var round_count: int = 1 +var win_count: int = 0 + + +# code for starting a round +func initialize_round(): + SignalBus.game_started.emit() + pick_new_word() + if round_count > 1: + tween_round_counter() + reset_arrows() + + error_box.hide() + max_guesses = guesses.get_child_count() + rounds_text.text = str(round_count) + current_block = 0 + current_row = 0 + can_type = true + can_check_info = true + + +# pick new word +func pick_new_word(): + word = word_list.pick_random() + #print(word) + + +# type a letter into the current block of the current row +func type_letter(letter: String): + if current_block < MAX_WORD_LENGTH: + var block = guesses.get_child(current_row).get_child(current_block) + block.label.text = letter + block.state = block.states.READY + block.anim.play("scale_up") + current_block += 1 + type_sound.play() + + +# erase the letter in the previous block of the current row +func erase_letter(): + if current_block > 0: + current_block -= 1 + var block = guesses.get_child(current_row).get_child(current_block) + block.label.text = "" + block.state = block.states.DEFAULT + block.anim.play("scale_down") + delete_sound.play() + + +# display error message +func show_error(message: String, sound: AudioStreamPlayer = error_sound): + error_box.text = message + error_box.show() + error_box.pivot_offset.x = error_box.size.x / 2.0 + error_timer.start() + sound.play() + var error_tween = get_tree().create_tween().set_ease(Tween.EASE_OUT + ).set_trans(Tween.TRANS_CUBIC) + error_tween.tween_property(error_box, "scale", Vector2.ONE, 1/error_speed + ).from(Vector2(error_scale, error_scale)) + + +# combine the letters and return the result +func get_guess(): + var row = guesses.get_child(current_row) + var guess: String + for block in row.get_children(): + guess += block.label.text + return guess.to_lower() + + +# shows the result for each block of the current row +func confirm_answer(): + # error check + if current_block < MAX_WORD_LENGTH: + show_error("Not enough letters") + return + elif not get_guess() in word_list: + show_error("Not in word list") + return + + can_type = false + can_check_info = false + var row = guesses.get_child(current_row) + confirm_sound.play() + + # create a copy of the word; used to prevent repeated confirmation of half-correct(yellow) letters + var word_copy = word + + # to send to virtual keys + var c_list = [] + var h_list = [] + var w_list = [] + + # check which letters are correct, blank them from word_copy + for block in row.get_children(): + if block.label.text.to_lower() == word[block.get_index()]: + block.state = block.states.CORRECT + c_list.append(block.label.text.to_lower()) + word_copy[block.get_index()] = " " + + # check which letters half-correct, blank them from word_copy + for block in row.get_children(): + if block.label.text.to_lower() in word_copy and not block.state == block.states.CORRECT: + block.state = block.states.HALF_CORRECT + h_list.append(block.label.text.to_lower()) + var letter_index = word_copy.findn(block.label.text, 0) + word_copy[letter_index] = " " + + # the rest of the letters are wrong + for block in row.get_children(): + if block.state == block.states.READY: + block.state = block.states.WRONG + w_list.append(block.label.text.to_lower()) + + # play flip animtion for each letter + for block in row.get_children(): + block.anim.play("flip") + await block.anim.animation_finished + + # update keys in virtual keyboard + SignalBus.row_finished.emit(c_list, h_list, w_list) + + # check if round was either won or lost + if get_guess() == word: + win_round() + elif current_row == max_guesses - 1: + lose_round() + else: + current_row += 1 + current_block = 0 + can_type = true + can_check_info = true + tween_arrows() + + +func lose_round(): + round_count += 1 + lose_sound.play() + show_error(word.to_upper(), lose_sound) + restart_timer.start() + + +func win_round(): + show_error("Great Job!", win_sound) + restart_timer.start() + round_count += 1 + win_count += 1 + tween_win_counter() + change_background_color() + wins_text.text = str(win_count) + wins_text.show() + win_sound.play() + + +func tween_arrows(): + var next_pos = guesses.get_child(current_row).global_position.y + arrow_tween = get_tree().create_tween().set_ease(Tween.EASE_OUT + ).set_trans(Tween.TRANS_CUBIC).set_parallel() + arrow_tween.tween_property(arrow_left_anchor, "position:y", next_pos, 1/arrow_speed) + arrow_tween.tween_property(arrow_right_anchor, "position:y", next_pos, 1/arrow_speed) + + +func reset_arrows(): + if arrow_tween: + arrow_tween.kill() + var next_pos = guesses.get_child(0).global_position.y + arrow_left_anchor.position.y = next_pos + arrow_right_anchor.position.y = next_pos + + +func tween_round_counter(): + var counter_tween = get_tree().create_tween().set_ease(Tween.EASE_OUT + ).set_trans(Tween.TRANS_QUINT).set_parallel() + + counter_tween.tween_property(rounds_text, "scale", Vector2.ONE, 1/counter_speed + ).from(Vector2(counter_scale, counter_scale)) + counter_tween.tween_property(shape, "scale", Vector2.ONE, 1/counter_speed + ).from(Vector2(counter_scale, counter_scale)) + + +func tween_win_counter(): + var counter_tween = get_tree().create_tween().set_ease(Tween.EASE_OUT + ).set_trans(Tween.TRANS_QUINT).set_parallel() + + counter_tween.tween_property(wins_text, "scale", Vector2.ONE, 1/counter_speed + ).from(Vector2(counter_scale, counter_scale)) + counter_tween.tween_property(shape_2, "scale", Vector2.ONE, 1/counter_speed + ).from(Vector2(counter_scale, counter_scale)) + + +func tween_wipe(): + wipe.show() + var wipe_tween = get_tree().create_tween().set_ease(Tween.EASE_OUT + ).set_trans(Tween.TRANS_QUINT) + wipe_tween.tween_property(wipe, "size:y", 0, 1/wipe_speed) + await wipe_tween.finished + wipe.hide() + + +func change_background_color(): + var new_color = Color.from_hsv(randf(), 1.0, 1.0, 0.25) + var mod_tween = get_tree().create_tween().set_ease(Tween.EASE_IN_OUT + ).set_trans(Tween.TRANS_SINE) + mod_tween.tween_property(mod_color, "color", new_color, 1/color_speed) + + +func _ready(): + # feel free to add more words if needed, simply add the word to the bottom of the text file + if FileAccess.file_exists("res://assets/word_list.txt"): + var file = FileAccess.open("res://assets/word_list.txt", FileAccess.READ) + while not file.eof_reached(): + var line = file.get_line() + if not line in word_list: + word_list.append(line.to_lower()) + file.close() + + music.volume_db = music_volume + initialize_round() + tween_wipe() + wins_text.hide() + + SignalBus.virtual_key_pressed.connect(virtual_key_received) + SignalBus.virtual_enter_pressed.connect(virtual_enter_received) + SignalBus.virtual_back_pressed.connect(virtual_back_received) + + +# for visuals only +func _process(delta): + shape.rotation_degrees += rot_speed * delta + shape_2.rotation_degrees += rot_speed * delta + shape_3.rotation_degrees += rot_speed * delta + shape_4.rotation_degrees -= rot_speed * delta + + +# check for any keyboard input +# ignore the input if it is held down (ie. no echo) +# input must be an English letter +func _unhandled_key_input(event): + if can_type: + if event is InputEventKey and event.is_pressed() and not event.is_echo(): + var key_input = OS.get_keycode_string(event.key_label) + # can only quit application if in editor + if event.is_action_pressed("quit") and OS.has_feature("editor"): + get_tree().quit() + if event.is_action_pressed("erase"): + erase_letter() + if event.is_action_pressed("confirm"): + confirm_answer() + if key_input in alphabet_list: + type_letter(key_input) + + +func virtual_key_received(char: String): + if can_type: + type_letter(char) + + +func virtual_enter_received(): + if can_type: + confirm_answer() + + +func virtual_back_received(): + if can_type: + erase_letter() + + +func _on_more_button_pressed(): + if can_check_info: + info.visible = not info.visible + can_type = not can_type + confirm_sound.play() + + +func _on_mute_button_pressed(): + confirm_sound.play() + if mute_button.is_mute: + music.volume_db = -80 + else: + music.volume_db = music_volume + + +func _on_error_timer_timeout(): + error_box.hide() + + +func _on_restart_timer_timeout(): + initialize_round() + + +func _on_relax_timer_timeout(): + music.play() + + +func _on_music_finished(): + relax_timer.start() diff --git a/wordle/scripts/more_button.gd b/wordle/scripts/more_button.gd new file mode 100644 index 0000000..87c399e --- /dev/null +++ b/wordle/scripts/more_button.gd @@ -0,0 +1,16 @@ +extends TextureButton + +@onready var anim: AnimationPlayer = $AnimationPlayer + + +func _on_mouse_entered(): + modulate.a = 0.7 + + +func _on_mouse_exited(): + modulate.a = 1.0 + + +func _on_pressed(): + anim.stop() + anim.play("squish") diff --git a/wordle/scripts/mute_button.gd b/wordle/scripts/mute_button.gd new file mode 100644 index 0000000..abf4e55 --- /dev/null +++ b/wordle/scripts/mute_button.gd @@ -0,0 +1,27 @@ +extends TextureButton + +@onready var anim: AnimationPlayer = $AnimationPlayer + +@export_category("Images") +@export var on = preload("res://assets/music_button_on.png") +@export var off = preload("res://assets/music_button_on.png") + +var is_mute: bool = false + + +func _on_mouse_entered(): + modulate.a = 0.7 + + +func _on_mouse_exited(): + modulate.a = 1.0 + + +func _on_pressed(): + anim.stop() + anim.play("squish") + is_mute = not is_mute + if is_mute: + texture_normal = off + else: + texture_normal = on diff --git a/wordle/scripts/row.gd b/wordle/scripts/row.gd new file mode 100644 index 0000000..fbddccd --- /dev/null +++ b/wordle/scripts/row.gd @@ -0,0 +1,6 @@ +extends HBoxContainer + + +func _ready(): + for block in get_children(): + block.flip_sound.pitch_scale = block.base_pitch + (0.1 * block.get_index()) diff --git a/wordle/scripts/signal_bus.gd b/wordle/scripts/signal_bus.gd new file mode 100644 index 0000000..1f419fc --- /dev/null +++ b/wordle/scripts/signal_bus.gd @@ -0,0 +1,8 @@ +extends Node + + +signal game_started +signal virtual_key_pressed(char: String) +signal virtual_enter_pressed +signal virtual_back_pressed +signal row_finished(c_list: Array, h_list: Array, w_list: Array) diff --git a/wordle/sounds/confirm.mp3 b/wordle/sounds/confirm.mp3 new file mode 100644 index 0000000..2ecca45 Binary files /dev/null and b/wordle/sounds/confirm.mp3 differ diff --git a/wordle/sounds/confirm.mp3.import b/wordle/sounds/confirm.mp3.import new file mode 100644 index 0000000..8d4d376 --- /dev/null +++ b/wordle/sounds/confirm.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://oxjgsibd72m0" +path="res://.godot/imported/confirm.mp3-0d254aeabb2c24a4b17a4c594b40d9ce.mp3str" + +[deps] + +source_file="res://sounds/confirm.mp3" +dest_files=["res://.godot/imported/confirm.mp3-0d254aeabb2c24a4b17a4c594b40d9ce.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/wordle/sounds/delete1.mp3 b/wordle/sounds/delete1.mp3 new file mode 100644 index 0000000..1302628 Binary files /dev/null and b/wordle/sounds/delete1.mp3 differ diff --git a/wordle/sounds/delete1.mp3.import b/wordle/sounds/delete1.mp3.import new file mode 100644 index 0000000..1b766ef --- /dev/null +++ b/wordle/sounds/delete1.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://djcr6qnwqxhdn" +path="res://.godot/imported/delete1.mp3-3aeb6f0c1d477e7afdf1beea3fdb630f.mp3str" + +[deps] + +source_file="res://sounds/delete1.mp3" +dest_files=["res://.godot/imported/delete1.mp3-3aeb6f0c1d477e7afdf1beea3fdb630f.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/wordle/sounds/delete2.mp3 b/wordle/sounds/delete2.mp3 new file mode 100644 index 0000000..b1b623a Binary files /dev/null and b/wordle/sounds/delete2.mp3 differ diff --git a/wordle/sounds/delete2.mp3.import b/wordle/sounds/delete2.mp3.import new file mode 100644 index 0000000..a34d9d8 --- /dev/null +++ b/wordle/sounds/delete2.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://c5mhws7ipgvjk" +path="res://.godot/imported/delete2.mp3-82d8ff211cab3d358a197c13c71219e7.mp3str" + +[deps] + +source_file="res://sounds/delete2.mp3" +dest_files=["res://.godot/imported/delete2.mp3-82d8ff211cab3d358a197c13c71219e7.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/wordle/sounds/error.mp3 b/wordle/sounds/error.mp3 new file mode 100644 index 0000000..2faf5a2 Binary files /dev/null and b/wordle/sounds/error.mp3 differ diff --git a/wordle/sounds/error.mp3.import b/wordle/sounds/error.mp3.import new file mode 100644 index 0000000..a85860d --- /dev/null +++ b/wordle/sounds/error.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://clxe6enn15o4p" +path="res://.godot/imported/error.mp3-d79bd4a1796280355a9030b3ef208871.mp3str" + +[deps] + +source_file="res://sounds/error.mp3" +dest_files=["res://.godot/imported/error.mp3-d79bd4a1796280355a9030b3ef208871.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/wordle/sounds/flip.mp3 b/wordle/sounds/flip.mp3 new file mode 100644 index 0000000..4cd1b6e Binary files /dev/null and b/wordle/sounds/flip.mp3 differ diff --git a/wordle/sounds/flip.mp3.import b/wordle/sounds/flip.mp3.import new file mode 100644 index 0000000..69d5fde --- /dev/null +++ b/wordle/sounds/flip.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://daph7l1pefqx8" +path="res://.godot/imported/flip.mp3-3935e9fa46e265f839992740d2b41f19.mp3str" + +[deps] + +source_file="res://sounds/flip.mp3" +dest_files=["res://.godot/imported/flip.mp3-3935e9fa46e265f839992740d2b41f19.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/wordle/sounds/lose.mp3 b/wordle/sounds/lose.mp3 new file mode 100644 index 0000000..0a68574 Binary files /dev/null and b/wordle/sounds/lose.mp3 differ diff --git a/wordle/sounds/lose.mp3.import b/wordle/sounds/lose.mp3.import new file mode 100644 index 0000000..9b4e909 --- /dev/null +++ b/wordle/sounds/lose.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://qpgmh1uh4uvg" +path="res://.godot/imported/lose.mp3-ac0dd19dd97913b5d3fabb52d4279711.mp3str" + +[deps] + +source_file="res://sounds/lose.mp3" +dest_files=["res://.godot/imported/lose.mp3-ac0dd19dd97913b5d3fabb52d4279711.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/wordle/sounds/music/cosmic-aurora-lofi-228368.mp3 b/wordle/sounds/music/cosmic-aurora-lofi-228368.mp3 new file mode 100644 index 0000000..e9acd75 Binary files /dev/null and b/wordle/sounds/music/cosmic-aurora-lofi-228368.mp3 differ diff --git a/wordle/sounds/music/cosmic-aurora-lofi-228368.mp3.import b/wordle/sounds/music/cosmic-aurora-lofi-228368.mp3.import new file mode 100644 index 0000000..36f2c78 --- /dev/null +++ b/wordle/sounds/music/cosmic-aurora-lofi-228368.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://chbcycp8qr0i1" +path="res://.godot/imported/cosmic-aurora-lofi-228368.mp3-138bcd5167ef96e61985e75bc05637dd.mp3str" + +[deps] + +source_file="res://sounds/music/cosmic-aurora-lofi-228368.mp3" +dest_files=["res://.godot/imported/cosmic-aurora-lofi-228368.mp3-138bcd5167ef96e61985e75bc05637dd.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/wordle/sounds/music/dream-nebula-lofi-228369.mp3 b/wordle/sounds/music/dream-nebula-lofi-228369.mp3 new file mode 100644 index 0000000..16b752c Binary files /dev/null and b/wordle/sounds/music/dream-nebula-lofi-228369.mp3 differ diff --git a/wordle/sounds/music/dream-nebula-lofi-228369.mp3.import b/wordle/sounds/music/dream-nebula-lofi-228369.mp3.import new file mode 100644 index 0000000..8892515 --- /dev/null +++ b/wordle/sounds/music/dream-nebula-lofi-228369.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://dab3m7hqg5cte" +path="res://.godot/imported/dream-nebula-lofi-228369.mp3-924651b9ed4a87193809661aca0e7e6a.mp3str" + +[deps] + +source_file="res://sounds/music/dream-nebula-lofi-228369.mp3" +dest_files=["res://.godot/imported/dream-nebula-lofi-228369.mp3-924651b9ed4a87193809661aca0e7e6a.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/wordle/sounds/music/naturex27s-symphony-156040.mp3 b/wordle/sounds/music/naturex27s-symphony-156040.mp3 new file mode 100644 index 0000000..392f409 Binary files /dev/null and b/wordle/sounds/music/naturex27s-symphony-156040.mp3 differ diff --git a/wordle/sounds/music/naturex27s-symphony-156040.mp3.import b/wordle/sounds/music/naturex27s-symphony-156040.mp3.import new file mode 100644 index 0000000..2d91cc7 --- /dev/null +++ b/wordle/sounds/music/naturex27s-symphony-156040.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://d4vw3htndj81" +path="res://.godot/imported/naturex27s-symphony-156040.mp3-6166c1087aeab45d76261cc6c26b53e8.mp3str" + +[deps] + +source_file="res://sounds/music/naturex27s-symphony-156040.mp3" +dest_files=["res://.godot/imported/naturex27s-symphony-156040.mp3-6166c1087aeab45d76261cc6c26b53e8.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/wordle/sounds/type1.mp3 b/wordle/sounds/type1.mp3 new file mode 100644 index 0000000..27d14eb Binary files /dev/null and b/wordle/sounds/type1.mp3 differ diff --git a/wordle/sounds/type1.mp3.import b/wordle/sounds/type1.mp3.import new file mode 100644 index 0000000..dfe1d9f --- /dev/null +++ b/wordle/sounds/type1.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://wmjp43e444xa" +path="res://.godot/imported/type1.mp3-984deba762a8663a9ad4696515819c32.mp3str" + +[deps] + +source_file="res://sounds/type1.mp3" +dest_files=["res://.godot/imported/type1.mp3-984deba762a8663a9ad4696515819c32.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/wordle/sounds/type2.mp3 b/wordle/sounds/type2.mp3 new file mode 100644 index 0000000..3169588 Binary files /dev/null and b/wordle/sounds/type2.mp3 differ diff --git a/wordle/sounds/type2.mp3.import b/wordle/sounds/type2.mp3.import new file mode 100644 index 0000000..8083ea1 --- /dev/null +++ b/wordle/sounds/type2.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://i4d6lhqkyl2l" +path="res://.godot/imported/type2.mp3-2af69f1079c4ce289aa0710d2b1fc750.mp3str" + +[deps] + +source_file="res://sounds/type2.mp3" +dest_files=["res://.godot/imported/type2.mp3-2af69f1079c4ce289aa0710d2b1fc750.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/wordle/sounds/win.mp3 b/wordle/sounds/win.mp3 new file mode 100644 index 0000000..a47b96e Binary files /dev/null and b/wordle/sounds/win.mp3 differ diff --git a/wordle/sounds/win.mp3.import b/wordle/sounds/win.mp3.import new file mode 100644 index 0000000..150a5f7 --- /dev/null +++ b/wordle/sounds/win.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://kkiu1nwso0oq" +path="res://.godot/imported/win.mp3-19c388147eb63d6ae8a168af7bb40f00.mp3str" + +[deps] + +source_file="res://sounds/win.mp3" +dest_files=["res://.godot/imported/win.mp3-19c388147eb63d6ae8a168af7bb40f00.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4