├── ridiculous.png ├── readme-example.gif ├── addons └── ridiculous_coding │ ├── blip.png │ ├── blip.wav │ ├── boom.png │ ├── boom.wav │ ├── under.png │ ├── newline.png │ ├── fireworks.wav │ ├── progress.png │ ├── GravityBold8.ttf │ ├── plugin.cfg │ ├── newline.gd │ ├── blip.wav.import │ ├── boom.wav.import │ ├── fireworks.wav.import │ ├── boom.gd │ ├── blip.png.import │ ├── boom.png.import │ ├── under.png.import │ ├── newline.png.import │ ├── progress.png.import │ ├── GravityBold8.ttf.import │ ├── blip.gd │ ├── font.tres │ ├── newline.tscn │ ├── boom.tscn │ ├── plugin.gd │ ├── dock.tscn │ ├── dock.gd │ └── blip.tscn └── default_env.tres /ridiculous.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jotson/ridiculous_coding/HEAD/ridiculous.png -------------------------------------------------------------------------------- /readme-example.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jotson/ridiculous_coding/HEAD/readme-example.gif -------------------------------------------------------------------------------- /addons/ridiculous_coding/blip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jotson/ridiculous_coding/HEAD/addons/ridiculous_coding/blip.png -------------------------------------------------------------------------------- /addons/ridiculous_coding/blip.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jotson/ridiculous_coding/HEAD/addons/ridiculous_coding/blip.wav -------------------------------------------------------------------------------- /addons/ridiculous_coding/boom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jotson/ridiculous_coding/HEAD/addons/ridiculous_coding/boom.png -------------------------------------------------------------------------------- /addons/ridiculous_coding/boom.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jotson/ridiculous_coding/HEAD/addons/ridiculous_coding/boom.wav -------------------------------------------------------------------------------- /addons/ridiculous_coding/under.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jotson/ridiculous_coding/HEAD/addons/ridiculous_coding/under.png -------------------------------------------------------------------------------- /addons/ridiculous_coding/newline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jotson/ridiculous_coding/HEAD/addons/ridiculous_coding/newline.png -------------------------------------------------------------------------------- /addons/ridiculous_coding/fireworks.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jotson/ridiculous_coding/HEAD/addons/ridiculous_coding/fireworks.wav -------------------------------------------------------------------------------- /addons/ridiculous_coding/progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jotson/ridiculous_coding/HEAD/addons/ridiculous_coding/progress.png -------------------------------------------------------------------------------- /addons/ridiculous_coding/GravityBold8.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jotson/ridiculous_coding/HEAD/addons/ridiculous_coding/GravityBold8.ttf -------------------------------------------------------------------------------- /default_env.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Environment" load_steps=2 format=2] 2 | 3 | [sub_resource type="Sky" id=1] 4 | 5 | [resource] 6 | background_mode = 2 7 | background_sky = SubResource( 1 ) 8 | -------------------------------------------------------------------------------- /addons/ridiculous_coding/plugin.cfg: -------------------------------------------------------------------------------- 1 | [plugin] 2 | 3 | name="Ridiculous Coding - Godot 4" 4 | description="Ridiculous screen-shakey coding inspired by Textreme https://ash-k.itch.io/textreme-2" 5 | author="John Watson" 6 | version="2021.11.28" 7 | script="plugin.gd" 8 | constributors="Jeferson 'Shin' Leite Borges" 9 | -------------------------------------------------------------------------------- /addons/ridiculous_coding/newline.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends Node2D 3 | 4 | var destroy = false 5 | var blips = true 6 | 7 | @onready var animation_player: AnimationPlayer = $AnimationPlayer 8 | @onready var animated_sprite_2d: AnimatedSprite2D = $AnimatedSprite2D 9 | @onready var timer: Timer = $Timer 10 | 11 | 12 | func _ready(): 13 | if blips: 14 | animation_player.stop() 15 | animation_player.play("default") 16 | animated_sprite_2d.frame = 0 17 | animated_sprite_2d.play("default") 18 | 19 | timer.start() 20 | 21 | 22 | func _on_Timer_timeout(): 23 | if destroy: 24 | queue_free() 25 | -------------------------------------------------------------------------------- /addons/ridiculous_coding/blip.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://b2ood3lkcgpqb" 6 | path="res://.godot/imported/blip.wav-b30aed86048a8d09a6b99458d730bd48.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://addons/ridiculous_coding/blip.wav" 11 | dest_files=["res://.godot/imported/blip.wav-b30aed86048a8d09a6b99458d730bd48.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /addons/ridiculous_coding/boom.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://b6841f7osi4rh" 6 | path="res://.godot/imported/boom.wav-8be8413d6a593a69a88c5aabb324258d.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://addons/ridiculous_coding/boom.wav" 11 | dest_files=["res://.godot/imported/boom.wav-8be8413d6a593a69a88c5aabb324258d.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /addons/ridiculous_coding/fireworks.wav.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="wav" 4 | type="AudioStreamWAV" 5 | uid="uid://dyi5lstxrfkdt" 6 | path="res://.godot/imported/fireworks.wav-f51025571a3b9e32e6113159ed26c3be.sample" 7 | 8 | [deps] 9 | 10 | source_file="res://addons/ridiculous_coding/fireworks.wav" 11 | dest_files=["res://.godot/imported/fireworks.wav-f51025571a3b9e32e6113159ed26c3be.sample"] 12 | 13 | [params] 14 | 15 | force/8_bit=false 16 | force/mono=false 17 | force/max_rate=false 18 | force/max_rate_hz=44100 19 | edit/trim=false 20 | edit/normalize=false 21 | edit/loop_mode=0 22 | edit/loop_begin=0 23 | edit/loop_end=-1 24 | compress/mode=0 25 | -------------------------------------------------------------------------------- /addons/ridiculous_coding/boom.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends Node2D 3 | 4 | var destroy = false 5 | var last_key = "" 6 | var sound = true 7 | 8 | @onready var audio_stream_player: AudioStreamPlayer = $AudioStreamPlayer 9 | @onready var animated_sprite_2d: AnimatedSprite2D = $AnimatedSprite2D 10 | @onready var animation_player: AnimationPlayer = $AnimationPlayer 11 | @onready var timer: Timer = $Timer 12 | @onready var label: Label = $Label 13 | 14 | 15 | func _ready(): 16 | if sound: 17 | audio_stream_player.play() 18 | 19 | animated_sprite_2d.frame = 0 20 | animated_sprite_2d.play("default") 21 | animation_player.play("default") 22 | timer.start() 23 | label.text = last_key 24 | label.modulate = Color(randf_range(0,2), randf_range(0,2), randf_range(0,2)) 25 | 26 | 27 | func _on_Timer_timeout(): 28 | if destroy: 29 | queue_free() 30 | -------------------------------------------------------------------------------- /addons/ridiculous_coding/blip.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://d1tio2ceqgm7m" 6 | path="res://.godot/imported/blip.png-7449238b2e7dcd337fbb9eec8c7b957e.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/ridiculous_coding/blip.png" 14 | dest_files=["res://.godot/imported/blip.png-7449238b2e7dcd337fbb9eec8c7b957e.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /addons/ridiculous_coding/boom.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dl75e74oom1i3" 6 | path="res://.godot/imported/boom.png-8824a5a1f762eb053b72081ff54ed1ba.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/ridiculous_coding/boom.png" 14 | dest_files=["res://.godot/imported/boom.png-8824a5a1f762eb053b72081ff54ed1ba.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /addons/ridiculous_coding/under.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dgda8elabipl5" 6 | path="res://.godot/imported/under.png-b737211ee1ab1b3c04a4062a02353851.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/ridiculous_coding/under.png" 14 | dest_files=["res://.godot/imported/under.png-b737211ee1ab1b3c04a4062a02353851.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /addons/ridiculous_coding/newline.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b1vn1823wqae2" 6 | path="res://.godot/imported/newline.png-03ec198c1b51eb116216995dcb893beb.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/ridiculous_coding/newline.png" 14 | dest_files=["res://.godot/imported/newline.png-03ec198c1b51eb116216995dcb893beb.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /addons/ridiculous_coding/progress.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dqpxh1bccjaae" 6 | path="res://.godot/imported/progress.png-7f475b7e84ff0c0c87db61c1f97b4978.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/ridiculous_coding/progress.png" 14 | dest_files=["res://.godot/imported/progress.png-7f475b7e84ff0c0c87db61c1f97b4978.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /addons/ridiculous_coding/GravityBold8.ttf.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="font_data_dynamic" 4 | type="FontFile" 5 | uid="uid://coiaqb8xwuaic" 6 | path="res://.godot/imported/GravityBold8.ttf-e67aa3e4866d0a81519c9b866a8f924b.fontdata" 7 | 8 | [deps] 9 | 10 | source_file="res://addons/ridiculous_coding/GravityBold8.ttf" 11 | dest_files=["res://.godot/imported/GravityBold8.ttf-e67aa3e4866d0a81519c9b866a8f924b.fontdata"] 12 | 13 | [params] 14 | 15 | Rendering=null 16 | antialiasing=1 17 | generate_mipmaps=false 18 | multichannel_signed_distance_field=false 19 | msdf_pixel_range=8 20 | msdf_size=48 21 | allow_system_fallback=true 22 | force_autohinter=false 23 | hinting=1 24 | subpixel_positioning=1 25 | oversampling=0.0 26 | Fallbacks=null 27 | fallbacks=[] 28 | Compress=null 29 | compress=true 30 | preload=[{ 31 | "chars": [], 32 | "glyphs": [], 33 | "name": "New Configuration", 34 | "size": Vector2i(16, 0) 35 | }] 36 | language_support={} 37 | script_support={} 38 | opentype_features={} 39 | -------------------------------------------------------------------------------- /addons/ridiculous_coding/blip.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends Node2D 3 | 4 | var destroy: bool = false 5 | var last_key: String = "" 6 | var pitch_increase: float = 0.0 7 | var sound: bool = true 8 | var blips: bool = true 9 | 10 | @onready var audio_stream_player: AudioStreamPlayer = $AudioStreamPlayer 11 | @onready var animated_sprite_2d: AnimatedSprite2D = $AnimatedSprite2D 12 | @onready var animated_player: AnimationPlayer = $AnimationPlayer 13 | @onready var gpu_particle_2d: GPUParticles2D = $GPUParticles2D 14 | @onready var timer: Timer = $Timer 15 | @onready var label: Label = $Label 16 | 17 | 18 | func _ready(): 19 | if sound: 20 | audio_stream_player.pitch_scale = 1.0 + pitch_increase * 0.01 21 | audio_stream_player.play() 22 | 23 | if blips: 24 | animated_sprite_2d.frame = 0 25 | animated_sprite_2d.play("default") 26 | animated_player.play("default") 27 | gpu_particle_2d.emitting = true 28 | 29 | timer.start() 30 | label.text = last_key 31 | label.modulate = Color(randf_range(0,2), randf_range(0,2), randf_range(0,2)) 32 | 33 | 34 | func _on_Timer_timeout(): 35 | if destroy: 36 | queue_free() 37 | -------------------------------------------------------------------------------- /addons/ridiculous_coding/font.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="FontFile" load_steps=2 format=3 uid="uid://bvwnnnja1ur2i"] 2 | 3 | [ext_resource type="FontFile" uid="uid://coiaqb8xwuaic" path="res://addons/ridiculous_coding/GravityBold8.ttf" id="1"] 4 | 5 | [resource] 6 | fallbacks = Array[Font]([ExtResource("1")]) 7 | cache/0/16/0/ascent = 0.0 8 | cache/0/16/0/descent = 0.0 9 | cache/0/16/0/underline_position = 0.0 10 | cache/0/16/0/underline_thickness = 0.0 11 | cache/0/16/0/scale = 1.0 12 | cache/0/16/0/kerning_overrides/16/0 = Vector2(0, 0) 13 | cache/0/16/0/kerning_overrides/50/0 = Vector2(0, 0) 14 | cache/0/16/0/kerning_overrides/28/0 = Vector2(0, 0) 15 | cache/0/16/0/kerning_overrides/14/0 = Vector2(0, 0) 16 | cache/0/50/0/ascent = 0.0 17 | cache/0/50/0/descent = 0.0 18 | cache/0/50/0/underline_position = 0.0 19 | cache/0/50/0/underline_thickness = 0.0 20 | cache/0/50/0/scale = 1.0 21 | cache/0/50/0/kerning_overrides/16/0 = Vector2(0, 0) 22 | cache/0/50/0/kerning_overrides/50/0 = Vector2(0, 0) 23 | cache/0/50/0/kerning_overrides/28/0 = Vector2(0, 0) 24 | cache/0/50/0/kerning_overrides/14/0 = Vector2(0, 0) 25 | cache/0/28/0/ascent = 0.0 26 | cache/0/28/0/descent = 0.0 27 | cache/0/28/0/underline_position = 0.0 28 | cache/0/28/0/underline_thickness = 0.0 29 | cache/0/28/0/scale = 1.0 30 | cache/0/28/0/kerning_overrides/16/0 = Vector2(0, 0) 31 | cache/0/28/0/kerning_overrides/50/0 = Vector2(0, 0) 32 | cache/0/28/0/kerning_overrides/28/0 = Vector2(0, 0) 33 | cache/0/28/0/kerning_overrides/14/0 = Vector2(0, 0) 34 | cache/0/14/0/ascent = 0.0 35 | cache/0/14/0/descent = 0.0 36 | cache/0/14/0/underline_position = 0.0 37 | cache/0/14/0/underline_thickness = 0.0 38 | cache/0/14/0/scale = 1.0 39 | cache/0/14/0/kerning_overrides/16/0 = Vector2(0, 0) 40 | cache/0/14/0/kerning_overrides/50/0 = Vector2(0, 0) 41 | cache/0/14/0/kerning_overrides/28/0 = Vector2(0, 0) 42 | cache/0/14/0/kerning_overrides/14/0 = Vector2(0, 0) 43 | -------------------------------------------------------------------------------- /addons/ridiculous_coding/newline.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=11 format=3 uid="uid://wd4tkg0uxd18"] 2 | 3 | [ext_resource type="Script" path="res://addons/ridiculous_coding/newline.gd" id="1"] 4 | [ext_resource type="Texture2D" uid="uid://b1vn1823wqae2" path="res://addons/ridiculous_coding/newline.png" id="2"] 5 | 6 | [sub_resource type="AtlasTexture" id="1"] 7 | atlas = ExtResource("2") 8 | region = Rect2(0, 0, 64, 64) 9 | 10 | [sub_resource type="AtlasTexture" id="2"] 11 | atlas = ExtResource("2") 12 | region = Rect2(64, 0, 64, 64) 13 | 14 | [sub_resource type="AtlasTexture" id="3"] 15 | atlas = ExtResource("2") 16 | region = Rect2(128, 0, 64, 64) 17 | 18 | [sub_resource type="AtlasTexture" id="4"] 19 | atlas = ExtResource("2") 20 | region = Rect2(192, 0, 64, 64) 21 | 22 | [sub_resource type="AtlasTexture" id="5"] 23 | atlas = ExtResource("2") 24 | region = Rect2(256, 0, 64, 64) 25 | 26 | [sub_resource type="SpriteFrames" id="6"] 27 | animations = [{ 28 | "frames": [{ 29 | "duration": 1.0, 30 | "texture": SubResource("1") 31 | }, { 32 | "duration": 1.0, 33 | "texture": SubResource("2") 34 | }, { 35 | "duration": 1.0, 36 | "texture": SubResource("3") 37 | }, { 38 | "duration": 1.0, 39 | "texture": SubResource("4") 40 | }, { 41 | "duration": 1.0, 42 | "texture": SubResource("5") 43 | }], 44 | "loop": true, 45 | "name": &"default", 46 | "speed": 12.0 47 | }] 48 | 49 | [sub_resource type="Animation" id="7"] 50 | resource_name = "default" 51 | tracks/0/type = "value" 52 | tracks/0/imported = false 53 | tracks/0/enabled = true 54 | tracks/0/path = NodePath("AnimatedSprite2D:position") 55 | tracks/0/interp = 1 56 | tracks/0/loop_wrap = true 57 | tracks/0/keys = { 58 | "times": PackedFloat32Array(0, 0.1), 59 | "transitions": PackedFloat32Array(0.233258, 1), 60 | "update": 0, 61 | "values": [Vector2(-200, 0), Vector2(-50, 0)] 62 | } 63 | 64 | [sub_resource type="AnimationLibrary" id="AnimationLibrary_gwr1r"] 65 | _data = { 66 | "default": SubResource("7") 67 | } 68 | 69 | [node name="Node2D" type="Node2D"] 70 | texture_filter = 1 71 | script = ExtResource("1") 72 | 73 | [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] 74 | position = Vector2(-50, 0) 75 | rotation = -1.57079 76 | scale = Vector2(2, 2) 77 | sprite_frames = SubResource("6") 78 | frame_progress = 0.432846 79 | 80 | [node name="Timer" type="Timer" parent="."] 81 | one_shot = true 82 | 83 | [node name="AnimationPlayer" type="AnimationPlayer" parent="."] 84 | libraries = { 85 | "": SubResource("AnimationLibrary_gwr1r") 86 | } 87 | autoplay = "default" 88 | 89 | [connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"] 90 | -------------------------------------------------------------------------------- /addons/ridiculous_coding/boom.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=15 format=3 uid="uid://c4rdv4wkukc5g"] 2 | 3 | [ext_resource type="Texture2D" uid="uid://dl75e74oom1i3" path="res://addons/ridiculous_coding/boom.png" id="1"] 4 | [ext_resource type="AudioStream" uid="uid://b6841f7osi4rh" path="res://addons/ridiculous_coding/boom.wav" id="2"] 5 | [ext_resource type="Script" path="res://addons/ridiculous_coding/boom.gd" id="4"] 6 | [ext_resource type="FontFile" uid="uid://bvwnnnja1ur2i" path="res://addons/ridiculous_coding/font.tres" id="5"] 7 | 8 | [sub_resource type="AtlasTexture" id="AtlasTexture_g3t5t"] 9 | atlas = ExtResource("1") 10 | region = Rect2(0, 0, 128, 128) 11 | 12 | [sub_resource type="AtlasTexture" id="AtlasTexture_4skxo"] 13 | atlas = ExtResource("1") 14 | region = Rect2(128, 0, 128, 128) 15 | 16 | [sub_resource type="AtlasTexture" id="AtlasTexture_ccvbr"] 17 | atlas = ExtResource("1") 18 | region = Rect2(256, 0, 128, 128) 19 | 20 | [sub_resource type="AtlasTexture" id="AtlasTexture_0ojec"] 21 | atlas = ExtResource("1") 22 | region = Rect2(384, 0, 128, 128) 23 | 24 | [sub_resource type="AtlasTexture" id="AtlasTexture_1koxs"] 25 | atlas = ExtResource("1") 26 | region = Rect2(512, 0, 128, 128) 27 | 28 | [sub_resource type="AtlasTexture" id="AtlasTexture_g5t7n"] 29 | atlas = ExtResource("1") 30 | region = Rect2(640, 0, 128, 128) 31 | 32 | [sub_resource type="AtlasTexture" id="AtlasTexture_27xno"] 33 | atlas = ExtResource("1") 34 | region = Rect2(0, 128, 128, 128) 35 | 36 | [sub_resource type="SpriteFrames" id="SpriteFrames_ld5tu"] 37 | animations = [{ 38 | "frames": [{ 39 | "duration": 1.0, 40 | "texture": SubResource("AtlasTexture_g3t5t") 41 | }, { 42 | "duration": 1.0, 43 | "texture": SubResource("AtlasTexture_4skxo") 44 | }, { 45 | "duration": 1.0, 46 | "texture": SubResource("AtlasTexture_ccvbr") 47 | }, { 48 | "duration": 1.0, 49 | "texture": SubResource("AtlasTexture_0ojec") 50 | }, { 51 | "duration": 1.0, 52 | "texture": SubResource("AtlasTexture_1koxs") 53 | }, { 54 | "duration": 1.0, 55 | "texture": SubResource("AtlasTexture_g5t7n") 56 | }, { 57 | "duration": 1.0, 58 | "texture": SubResource("AtlasTexture_27xno") 59 | }], 60 | "loop": false, 61 | "name": &"default", 62 | "speed": 24.0 63 | }] 64 | 65 | [sub_resource type="Animation" id="Animation_pxf6h"] 66 | resource_name = "default" 67 | tracks/0/type = "value" 68 | tracks/0/imported = false 69 | tracks/0/enabled = true 70 | tracks/0/path = NodePath("Label:scale") 71 | tracks/0/interp = 1 72 | tracks/0/loop_wrap = true 73 | tracks/0/keys = { 74 | "times": PackedFloat32Array(0, 1), 75 | "transitions": PackedFloat32Array(-2, 1), 76 | "update": 0, 77 | "values": [Vector2(1, 1), Vector2(2, 2)] 78 | } 79 | tracks/1/type = "value" 80 | tracks/1/imported = false 81 | tracks/1/enabled = true 82 | tracks/1/path = NodePath("Label:position") 83 | tracks/1/interp = 1 84 | tracks/1/loop_wrap = true 85 | tracks/1/keys = { 86 | "times": PackedFloat32Array(0, 1), 87 | "transitions": PackedFloat32Array(-2, 1), 88 | "update": 0, 89 | "values": [Vector2(-35, -32), Vector2(-35, -70)] 90 | } 91 | 92 | [sub_resource type="AnimationLibrary" id="AnimationLibrary_ocb2c"] 93 | _data = { 94 | "default": SubResource("Animation_pxf6h") 95 | } 96 | 97 | [node name="Node2D" type="Node2D"] 98 | texture_filter = 1 99 | script = ExtResource("4") 100 | 101 | [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] 102 | scale = Vector2(0.5, 0.5) 103 | sprite_frames = SubResource("SpriteFrames_ld5tu") 104 | frame = 6 105 | frame_progress = 1.0 106 | 107 | [node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] 108 | stream = ExtResource("2") 109 | volume_db = -26.0 110 | autoplay = true 111 | 112 | [node name="Timer" type="Timer" parent="."] 113 | one_shot = true 114 | 115 | [node name="Label" type="Label" parent="."] 116 | modulate = Color(0.852828, 1.64201, 1.90577, 1) 117 | texture_filter = 1 118 | offset_left = -35.0 119 | offset_top = -70.0 120 | offset_right = 35.0 121 | offset_bottom = -47.0 122 | scale = Vector2(2, 2) 123 | pivot_offset = Vector2(35, 8) 124 | theme_override_fonts/font = ExtResource("5") 125 | theme_override_font_sizes/font_size = 16 126 | uppercase = true 127 | 128 | [node name="AnimationPlayer" type="AnimationPlayer" parent="."] 129 | libraries = { 130 | "": SubResource("AnimationLibrary_ocb2c") 131 | } 132 | autoplay = "default" 133 | 134 | [connection signal="animation_finished" from="AnimatedSprite2D" to="." method="_on_AnimatedSprite_animation_finished"] 135 | [connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"] 136 | -------------------------------------------------------------------------------- /addons/ridiculous_coding/plugin.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends EditorPlugin 3 | 4 | signal typing 5 | 6 | # Scenes preloaded 7 | const Boom: PackedScene = preload("res://addons/ridiculous_coding/boom.tscn") 8 | const Blip: PackedScene = preload("res://addons/ridiculous_coding/blip.tscn") 9 | const Newline: PackedScene = preload("res://addons/ridiculous_coding/newline.tscn") 10 | const Dock: PackedScene = preload("res://addons/ridiculous_coding/dock.tscn") 11 | 12 | # Inner Variables 13 | const PITCH_DECREMENT := 2.0 14 | 15 | var shake: float = 0.0 16 | var shake_intensity:float = 0.0 17 | var timer: float = 0.0 18 | var last_key: String = "" 19 | var pitch_increase: float = 0.0 20 | var editors = {} 21 | var dock 22 | 23 | 24 | func _enter_tree(): 25 | var editor: EditorInterface = get_editor_interface() 26 | var script_editor: ScriptEditor = editor.get_script_editor() 27 | script_editor.editor_script_changed.connect(editor_script_changed) 28 | 29 | # Add the main panel 30 | dock = Dock.instantiate() 31 | typing.connect(Callable(dock,"_on_typing")) 32 | add_control_to_dock(DOCK_SLOT_RIGHT_BL, dock) 33 | 34 | 35 | func _exit_tree(): 36 | if dock: 37 | remove_control_from_docks(dock) 38 | dock.free() 39 | 40 | 41 | func get_all_text_editors(parent : Node): 42 | for child in parent.get_children(): 43 | if child.get_child_count(): 44 | get_all_text_editors(child) 45 | 46 | if child is TextEdit: 47 | editors[child] = { 48 | "text": child.text, 49 | "line": child.get_caret_line() 50 | } 51 | 52 | if child.caret_changed.is_connected(caret_changed): 53 | child.caret_changed.disconnect(caret_changed) 54 | child.caret_changed.connect(caret_changed.bind(child)) 55 | 56 | if child.text_changed.is_connected(text_changed): 57 | child.text_changed.disconnect(text_changed) 58 | child.text_changed.connect(text_changed.bind(child)) 59 | 60 | if child.gui_input.is_connected(gui_input): 61 | child.gui_input.disconnect(gui_input) 62 | child.gui_input.connect(gui_input) 63 | 64 | 65 | func gui_input(event): 66 | # Get last key typed 67 | if event is InputEventKey and event.pressed: 68 | event = event as InputEventKey 69 | last_key = OS.get_keycode_string(event.get_keycode_with_modifiers()) 70 | 71 | 72 | func editor_script_changed(script): 73 | var editor = get_editor_interface() 74 | var script_editor = editor.get_script_editor() 75 | 76 | editors.clear() 77 | get_all_text_editors(script_editor) 78 | 79 | 80 | func _process(delta): 81 | var editor = get_editor_interface() 82 | 83 | if shake > 0: 84 | shake -= delta 85 | editor.get_base_control().position = Vector2(randf_range(-shake_intensity,shake_intensity), randf_range(-shake_intensity,shake_intensity)) 86 | else: 87 | editor.get_base_control().position = Vector2.ZERO 88 | 89 | timer += delta 90 | if (pitch_increase > 0.0): 91 | pitch_increase -= delta * PITCH_DECREMENT 92 | 93 | 94 | func shake_screen(duration, intensity): 95 | if shake > 0: 96 | return 97 | 98 | shake = duration 99 | shake_intensity = intensity 100 | 101 | 102 | func caret_changed(textedit): 103 | var editor = get_editor_interface() 104 | 105 | if not editors.has(textedit): 106 | # For some reason the editor instances all change 107 | # when the file is saved so you need to reload them 108 | editors.clear() 109 | get_all_text_editors(editor.get_script_editor()) 110 | 111 | editors[textedit]["line"] = textedit.get_caret_line() 112 | 113 | 114 | func text_changed(textedit : TextEdit): 115 | var line_height = textedit.get_line_height() 116 | var pos = textedit.get_caret_draw_pos() + Vector2(0,-line_height/2.0) 117 | emit_signal("typing") 118 | 119 | if editors.has(textedit): 120 | # Deleting 121 | if timer > 0.1 and len(textedit.text) < len(editors[textedit]["text"]): 122 | timer = 0.0 123 | 124 | if dock.explosions: 125 | # Draw the thing 126 | var thing = Boom.instantiate() 127 | thing.position = pos 128 | thing.destroy = true 129 | if dock.chars: thing.last_key = last_key 130 | thing.sound = dock.sound 131 | textedit.add_child(thing) 132 | 133 | if dock.shake: 134 | # Shake 135 | shake_screen(0.2, 10) 136 | 137 | # Typing 138 | if timer > 0.02 and len(textedit.text) >= len(editors[textedit]["text"]): 139 | timer = 0.0 140 | 141 | # Draw the thing 142 | var thing = Blip.instantiate() 143 | thing.pitch_increase = pitch_increase 144 | pitch_increase += 1.0 145 | thing.position = pos 146 | thing.destroy = true 147 | thing.blips = dock.blips 148 | if dock.chars: thing.last_key = last_key 149 | thing.sound = dock.sound 150 | textedit.add_child(thing) 151 | 152 | if dock.shake: 153 | # Shake 154 | shake_screen(0.05, 5) 155 | 156 | # Newline 157 | if textedit.get_caret_line() != editors[textedit]["line"]: 158 | # Draw the thing 159 | var thing = Newline.instantiate() 160 | thing.position = pos 161 | thing.destroy = true 162 | thing.blips = dock.blips 163 | textedit.add_child(thing) 164 | 165 | if dock.shake: 166 | # Shake 167 | shake_screen(0.05, 5) 168 | 169 | editors[textedit]["text"] = textedit.text 170 | editors[textedit]["line"] = textedit.get_caret_line() 171 | -------------------------------------------------------------------------------- /addons/ridiculous_coding/dock.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=8 format=3 uid="uid://b76vnt4rv4p0q"] 2 | 3 | [ext_resource type="Script" path="res://addons/ridiculous_coding/dock.gd" id="1_bwupq"] 4 | [ext_resource type="Texture2D" uid="uid://c3ltnrdrb2qmg" path="res://addons/ridiculous_coding/under.png" id="3_vdb3k"] 5 | [ext_resource type="AudioStream" uid="uid://g6lh6kjt0ynq" path="res://addons/ridiculous_coding/fireworks.wav" id="4_1o4lv"] 6 | [ext_resource type="Texture2D" uid="uid://dmvuvaqf5uhwi" path="res://addons/ridiculous_coding/progress.png" id="4_y2kl4"] 7 | 8 | [sub_resource type="Gradient" id="Gradient_v1eyn"] 9 | offsets = PackedFloat32Array(0, 0.419689, 0.715026, 1) 10 | colors = PackedColorArray(1, 1, 1, 1, 0.979167, 1, 0.333333, 1, 1, 0, 0, 1, 1, 1, 1, 0) 11 | 12 | [sub_resource type="GradientTexture2D" id="GradientTexture2D_6lmfn"] 13 | gradient = SubResource("Gradient_v1eyn") 14 | 15 | [sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_x4b51"] 16 | lifetime_randomness = 0.29 17 | spread = 20.0 18 | gravity = Vector3(0, 300, 0) 19 | initial_velocity_min = 400.0 20 | initial_velocity_max = 400.0 21 | scale_min = 5.0 22 | scale_max = 6.0 23 | color_ramp = SubResource("GradientTexture2D_6lmfn") 24 | 25 | [node name="Ridiculous Coding Dock" type="Control"] 26 | custom_minimum_size = Vector2(300, 175) 27 | layout_mode = 3 28 | anchors_preset = 15 29 | anchor_right = 1.0 30 | anchor_bottom = 1.0 31 | grow_horizontal = 2 32 | grow_vertical = 2 33 | script = ExtResource("1_bwupq") 34 | 35 | [node name="VBoxContainer" type="VBoxContainer" parent="."] 36 | layout_mode = 1 37 | anchors_preset = 15 38 | anchor_right = 1.0 39 | anchor_bottom = 1.0 40 | grow_horizontal = 2 41 | grow_vertical = 2 42 | 43 | [node name="XP" type="VBoxContainer" parent="VBoxContainer"] 44 | layout_mode = 2 45 | 46 | [node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/XP"] 47 | layout_mode = 2 48 | 49 | [node name="xpLabel" type="Label" parent="VBoxContainer/XP/HBoxContainer"] 50 | layout_mode = 2 51 | size_flags_horizontal = 3 52 | text = "XP: 201 / 350" 53 | 54 | [node name="levelLabel" type="Label" parent="VBoxContainer/XP/HBoxContainer"] 55 | layout_mode = 2 56 | size_flags_horizontal = 3 57 | text = "Level: 3" 58 | horizontal_alignment = 2 59 | 60 | [node name="ProgressBar" type="TextureProgressBar" parent="VBoxContainer/XP"] 61 | custom_minimum_size = Vector2(0, 10) 62 | layout_mode = 2 63 | max_value = 150.0 64 | value = 1.0 65 | nine_patch_stretch = true 66 | texture_under = ExtResource("3_vdb3k") 67 | texture_progress = ExtResource("4_y2kl4") 68 | 69 | [node name="fire1" type="Control" parent="VBoxContainer/XP/ProgressBar"] 70 | layout_mode = 1 71 | anchors_preset = 0 72 | offset_right = 40.0 73 | offset_bottom = 40.0 74 | 75 | [node name="GPUParticles2D" type="GPUParticles2D" parent="VBoxContainer/XP/ProgressBar/fire1"] 76 | rotation = -0.785397 77 | emitting = false 78 | amount = 200 79 | process_material = SubResource("ParticleProcessMaterial_x4b51") 80 | 81 | [node name="fire2" type="Control" parent="VBoxContainer/XP/ProgressBar"] 82 | layout_mode = 1 83 | anchors_preset = 1 84 | anchor_left = 1.0 85 | anchor_right = 1.0 86 | offset_top = 8.0 87 | offset_right = 40.0 88 | offset_bottom = 48.0 89 | grow_horizontal = 0 90 | 91 | [node name="GPUParticles2D" type="GPUParticles2D" parent="VBoxContainer/XP/ProgressBar/fire2"] 92 | rotation = -2.35619 93 | emitting = false 94 | amount = 200 95 | process_material = SubResource("ParticleProcessMaterial_x4b51") 96 | 97 | [node name="fireworksTimer" type="Timer" parent="VBoxContainer/XP/ProgressBar"] 98 | wait_time = 3.0 99 | 100 | [node name="sfxFireworks" type="AudioStreamPlayer" parent="VBoxContainer/XP/ProgressBar"] 101 | stream = ExtResource("4_1o4lv") 102 | volume_db = -12.0 103 | 104 | [node name="GridContainer" type="GridContainer" parent="VBoxContainer"] 105 | layout_mode = 2 106 | columns = 2 107 | 108 | [node name="explosionCheckbox" type="CheckButton" parent="VBoxContainer/GridContainer"] 109 | layout_mode = 2 110 | size_flags_horizontal = 11 111 | button_pressed = true 112 | text = "Explosions" 113 | 114 | [node name="shakeCheckbox" type="CheckButton" parent="VBoxContainer/GridContainer"] 115 | layout_mode = 2 116 | size_flags_horizontal = 11 117 | button_pressed = true 118 | text = "Shake" 119 | 120 | [node name="blipCheckbox" type="CheckButton" parent="VBoxContainer/GridContainer"] 121 | layout_mode = 2 122 | size_flags_horizontal = 11 123 | button_pressed = true 124 | text = "Blips" 125 | 126 | [node name="charsCheckbox" type="CheckButton" parent="VBoxContainer/GridContainer"] 127 | layout_mode = 2 128 | size_flags_horizontal = 11 129 | button_pressed = true 130 | text = "Keys" 131 | 132 | [node name="soundCheckbox" type="CheckButton" parent="VBoxContainer/GridContainer"] 133 | layout_mode = 2 134 | size_flags_horizontal = 11 135 | button_pressed = true 136 | text = "Sound" 137 | 138 | [node name="fireworksCheckbox" type="CheckButton" parent="VBoxContainer/GridContainer"] 139 | layout_mode = 2 140 | size_flags_horizontal = 11 141 | button_pressed = true 142 | text = "Fireworks" 143 | 144 | [node name="CenterContainer" type="CenterContainer" parent="VBoxContainer"] 145 | layout_mode = 2 146 | 147 | [node name="resetButton" type="Button" parent="VBoxContainer/CenterContainer"] 148 | layout_mode = 2 149 | text = "Reset" 150 | -------------------------------------------------------------------------------- /addons/ridiculous_coding/dock.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends Control 3 | 4 | const BASE_XP: int = 50 5 | const STATS_FILE: String = "user://ridiculous_xp.ini" 6 | 7 | var explosions: bool = true 8 | var blips: bool = true 9 | var chars: bool = true 10 | var shake: bool = true 11 | var sound: bool = true 12 | var fireworks: bool = true 13 | var xp: int = 0 14 | var xp_next: int = 2*BASE_XP 15 | var level: int = 1 16 | var stats: ConfigFile = ConfigFile.new() 17 | 18 | @onready var explosion_checkbox: CheckButton = $VBoxContainer/GridContainer/explosionCheckbox 19 | @onready var blip_checkbox: CheckButton = $VBoxContainer/GridContainer/blipCheckbox 20 | @onready var chars_checkbox: CheckButton = $VBoxContainer/GridContainer/charsCheckbox 21 | @onready var shake_checkbox: CheckButton = $VBoxContainer/GridContainer/shakeCheckbox 22 | @onready var sound_checkbox: CheckButton = $VBoxContainer/GridContainer/soundCheckbox 23 | @onready var fireworks_checkbox: CheckButton = $VBoxContainer/GridContainer/fireworksCheckbox 24 | @onready var progress: TextureProgressBar = $VBoxContainer/XP/ProgressBar 25 | @onready var sfx_fireworks: AudioStreamPlayer = $VBoxContainer/XP/ProgressBar/sfxFireworks 26 | @onready var fireworks_timer: Timer = $VBoxContainer/XP/ProgressBar/fireworksTimer 27 | @onready var fire_particles_one: GPUParticles2D = $VBoxContainer/XP/ProgressBar/fire1/GPUParticles2D 28 | @onready var fire_particles_two: GPUParticles2D = $VBoxContainer/XP/ProgressBar/fire2/GPUParticles2D 29 | @onready var xp_label: Label = $VBoxContainer/XP/HBoxContainer/xpLabel 30 | @onready var level_label: Label = $VBoxContainer/XP/HBoxContainer/levelLabel 31 | @onready var reset_button: Button = $VBoxContainer/CenterContainer/resetButton 32 | 33 | 34 | func _ready(): 35 | reset_button.pressed.connect(on_reset_button_pressed) 36 | 37 | load_checkbox_state() 38 | connect_checkboxes() 39 | fireworks_timer.timeout.connect(stop_fireworks) 40 | load_experience_progress() 41 | update_progress() 42 | stop_fireworks() 43 | 44 | 45 | func load_experience_progress(): 46 | if stats.load(STATS_FILE) == OK: 47 | level = stats.get_value("xp", "level", 1) 48 | xp = stats.get_value("xp", "xp", 0) 49 | else: 50 | level = 1 51 | xp = 0 52 | 53 | xp_next = 2*BASE_XP 54 | progress.max_value = xp_next 55 | 56 | for i in range(2,level+1): 57 | xp_next += round(BASE_XP * i / 10.0) * 10 58 | progress.max_value = round(BASE_XP * level / 10.0) * 10 59 | 60 | progress.value = xp - (xp_next - progress.max_value) 61 | 62 | 63 | func save_experioence_progress(): 64 | stats.set_value("xp", "level", level) 65 | stats.set_value("xp", "xp", xp) 66 | stats.save(STATS_FILE) 67 | 68 | 69 | func _on_typing(): 70 | xp += 1 71 | progress.value += 1 72 | 73 | if progress.value >= progress.max_value: 74 | level += 1 75 | xp_next = xp + round(BASE_XP * level / 10.0) * 10 76 | progress.value = 0 77 | progress.max_value = xp_next - xp 78 | 79 | if fireworks: 80 | start_fireworks() 81 | 82 | save_experioence_progress() 83 | update_progress() 84 | 85 | 86 | func start_fireworks(): 87 | sfx_fireworks.play() 88 | fireworks_timer.start() 89 | 90 | fire_particles_one.emitting = true 91 | fire_particles_two.emitting = true 92 | 93 | 94 | func stop_fireworks(): 95 | fire_particles_one.emitting = false 96 | fire_particles_two.emitting = false 97 | 98 | 99 | func update_progress(): 100 | xp_label.text = "XP: %d / %d" % [ xp, xp_next ] 101 | level_label.text = "Level: %d" % level 102 | 103 | 104 | func connect_checkboxes(): 105 | explosion_checkbox.toggled.connect(func(toggled): 106 | explosions = toggled 107 | save_checkbox_state() 108 | ) 109 | 110 | blip_checkbox.toggled.connect(func(toggled): 111 | blips = toggled 112 | save_checkbox_state() 113 | ) 114 | 115 | chars_checkbox.toggled.connect(func(toggled): 116 | chars = toggled 117 | save_checkbox_state() 118 | ) 119 | 120 | shake_checkbox.toggled.connect(func(toggled): 121 | shake = toggled 122 | save_checkbox_state() 123 | ) 124 | 125 | sound_checkbox.toggled.connect(func(toggled): 126 | sound = toggled 127 | save_checkbox_state() 128 | ) 129 | 130 | fireworks_checkbox.toggled.connect(func(toggled): 131 | fireworks = toggled 132 | save_checkbox_state() 133 | ) 134 | 135 | 136 | func save_checkbox_state(): 137 | stats.set_value("settings", "explosion", explosions) 138 | stats.set_value("settings", "blips", blips) 139 | stats.set_value("settings", "chars", chars) 140 | stats.set_value("settings", "shake", shake) 141 | stats.set_value("settings", "sound", sound) 142 | stats.set_value("settings", "fireworks", fireworks) 143 | stats.save(STATS_FILE) 144 | 145 | 146 | func load_checkbox_state(): 147 | if stats.load(STATS_FILE) == OK: 148 | explosions = stats.get_value("settings", "explosion", true) 149 | blips = stats.get_value("settings", "blips", true) 150 | chars = stats.get_value("settings", "chars", true) 151 | shake = stats.get_value("settings", "shake", true) 152 | sound = stats.get_value("settings", "sound", true) 153 | fireworks = stats.get_value("settings", "fireworks", true) 154 | explosion_checkbox.set_pressed_no_signal(explosions) 155 | blip_checkbox.set_pressed_no_signal(blips) 156 | chars_checkbox.set_pressed_no_signal(chars) 157 | shake_checkbox.set_pressed_no_signal(shake) 158 | sound_checkbox.set_pressed_no_signal(sound) 159 | fireworks_checkbox.set_pressed_no_signal(fireworks) 160 | 161 | 162 | func on_reset_button_pressed(): 163 | level = 1 164 | xp = 0 165 | xp_next = 2*BASE_XP 166 | progress.value = 0 167 | progress.max_value = xp_next 168 | update_progress() 169 | -------------------------------------------------------------------------------- /addons/ridiculous_coding/blip.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=19 format=3 uid="uid://c0fhho0dp1svt"] 2 | 3 | [ext_resource type="Script" path="res://addons/ridiculous_coding/blip.gd" id="1_tp8nq"] 4 | [ext_resource type="Texture2D" uid="uid://d1tio2ceqgm7m" path="res://addons/ridiculous_coding/blip.png" id="2_kj7um"] 5 | [ext_resource type="AudioStream" uid="uid://b2ood3lkcgpqb" path="res://addons/ridiculous_coding/blip.wav" id="3_xg6qd"] 6 | [ext_resource type="FontFile" uid="uid://bvwnnnja1ur2i" path="res://addons/ridiculous_coding/font.tres" id="4_ullf3"] 7 | 8 | [sub_resource type="AtlasTexture" id="AtlasTexture_hp4ed"] 9 | atlas = ExtResource("2_kj7um") 10 | region = Rect2(192, 0, 32, 32) 11 | 12 | [sub_resource type="AtlasTexture" id="AtlasTexture_hcxxe"] 13 | atlas = ExtResource("2_kj7um") 14 | region = Rect2(160, 0, 32, 32) 15 | 16 | [sub_resource type="AtlasTexture" id="AtlasTexture_3w7u8"] 17 | atlas = ExtResource("2_kj7um") 18 | region = Rect2(128, 0, 32, 32) 19 | 20 | [sub_resource type="AtlasTexture" id="AtlasTexture_qo2pv"] 21 | atlas = ExtResource("2_kj7um") 22 | region = Rect2(96, 0, 32, 32) 23 | 24 | [sub_resource type="AtlasTexture" id="AtlasTexture_55mlh"] 25 | atlas = ExtResource("2_kj7um") 26 | region = Rect2(64, 0, 32, 32) 27 | 28 | [sub_resource type="AtlasTexture" id="AtlasTexture_3eube"] 29 | atlas = ExtResource("2_kj7um") 30 | region = Rect2(32, 0, 32, 32) 31 | 32 | [sub_resource type="AtlasTexture" id="AtlasTexture_jwwsh"] 33 | atlas = ExtResource("2_kj7um") 34 | region = Rect2(0, 0, 32, 32) 35 | 36 | [sub_resource type="AtlasTexture" id="AtlasTexture_ye4cv"] 37 | atlas = ExtResource("2_kj7um") 38 | region = Rect2(224, 0, 32, 32) 39 | 40 | [sub_resource type="SpriteFrames" id="SpriteFrames_g4ki7"] 41 | animations = [{ 42 | "frames": [{ 43 | "duration": 1.0, 44 | "texture": SubResource("AtlasTexture_hp4ed") 45 | }, { 46 | "duration": 1.0, 47 | "texture": SubResource("AtlasTexture_hcxxe") 48 | }, { 49 | "duration": 1.0, 50 | "texture": SubResource("AtlasTexture_3w7u8") 51 | }, { 52 | "duration": 1.0, 53 | "texture": SubResource("AtlasTexture_qo2pv") 54 | }, { 55 | "duration": 1.0, 56 | "texture": SubResource("AtlasTexture_55mlh") 57 | }, { 58 | "duration": 1.0, 59 | "texture": SubResource("AtlasTexture_3eube") 60 | }, { 61 | "duration": 1.0, 62 | "texture": SubResource("AtlasTexture_jwwsh") 63 | }, { 64 | "duration": 1.0, 65 | "texture": SubResource("AtlasTexture_ye4cv") 66 | }], 67 | "loop": false, 68 | "name": &"default", 69 | "speed": 24.0 70 | }] 71 | 72 | [sub_resource type="Animation" id="Animation_u2m4c"] 73 | tracks/0/type = "value" 74 | tracks/0/imported = false 75 | tracks/0/enabled = true 76 | tracks/0/path = NodePath("AnimatedSprite2D:scale") 77 | tracks/0/interp = 1 78 | tracks/0/loop_wrap = true 79 | tracks/0/keys = { 80 | "times": PackedFloat32Array(0, 0.5), 81 | "transitions": PackedFloat32Array(-2, 1), 82 | "update": 0, 83 | "values": [Vector2(1, 1), Vector2(5, 5)] 84 | } 85 | tracks/1/type = "value" 86 | tracks/1/imported = false 87 | tracks/1/enabled = true 88 | tracks/1/path = NodePath("Label:scale") 89 | tracks/1/interp = 1 90 | tracks/1/loop_wrap = true 91 | tracks/1/keys = { 92 | "times": PackedFloat32Array(0, 1), 93 | "transitions": PackedFloat32Array(-2, 1), 94 | "update": 0, 95 | "values": [Vector2(1, 1), Vector2(2, 2)] 96 | } 97 | tracks/2/type = "value" 98 | tracks/2/imported = false 99 | tracks/2/enabled = true 100 | tracks/2/path = NodePath("Label:position") 101 | tracks/2/interp = 1 102 | tracks/2/loop_wrap = true 103 | tracks/2/keys = { 104 | "times": PackedFloat32Array(0, 1), 105 | "transitions": PackedFloat32Array(-2, 1), 106 | "update": 0, 107 | "values": [Vector2(-35, -32), Vector2(-35, -70)] 108 | } 109 | 110 | [sub_resource type="AnimationLibrary" id="AnimationLibrary_8epm6"] 111 | _data = { 112 | "default": SubResource("Animation_u2m4c") 113 | } 114 | 115 | [sub_resource type="Gradient" id="Gradient_mplh3"] 116 | offsets = PackedFloat32Array(0, 0.350746, 1) 117 | colors = PackedColorArray(0.160156, 0.783478, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0) 118 | 119 | [sub_resource type="GradientTexture2D" id="GradientTexture2D_gu7qo"] 120 | gradient = SubResource("Gradient_mplh3") 121 | 122 | [sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_5k50n"] 123 | lifetime_randomness = 0.5 124 | spread = 180.0 125 | gravity = Vector3(0, 0, 0) 126 | color_ramp = SubResource("GradientTexture2D_gu7qo") 127 | 128 | [node name="Node2D" type="Node2D"] 129 | texture_filter = 1 130 | script = ExtResource("1_tp8nq") 131 | 132 | [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] 133 | scale = Vector2(5, 5) 134 | sprite_frames = SubResource("SpriteFrames_g4ki7") 135 | frame = 7 136 | frame_progress = 1.0 137 | 138 | [node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] 139 | stream = ExtResource("3_xg6qd") 140 | volume_db = -12.0 141 | autoplay = true 142 | 143 | [node name="AnimationPlayer" type="AnimationPlayer" parent="."] 144 | libraries = { 145 | "": SubResource("AnimationLibrary_8epm6") 146 | } 147 | autoplay = "default" 148 | 149 | [node name="GPUParticles2D" type="GPUParticles2D" parent="."] 150 | emitting = false 151 | amount = 50 152 | process_material = SubResource("ParticleProcessMaterial_5k50n") 153 | lifetime = 0.5 154 | one_shot = true 155 | explosiveness = 1.0 156 | 157 | [node name="Timer" type="Timer" parent="."] 158 | one_shot = true 159 | 160 | [node name="Label" type="Label" parent="."] 161 | modulate = Color(1.88557, 1.35563, 0.609976, 1) 162 | texture_filter = 1 163 | offset_left = -35.0 164 | offset_top = -70.0 165 | offset_right = 35.0 166 | offset_bottom = -47.0 167 | scale = Vector2(2, 2) 168 | pivot_offset = Vector2(35, 8) 169 | theme_override_fonts/font = ExtResource("4_ullf3") 170 | theme_override_font_sizes/font_size = 16 171 | uppercase = true 172 | 173 | [connection signal="animation_finished" from="AnimatedSprite2D" to="." method="_on_AnimatedSprite1_animation_finished"] 174 | [connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"] 175 | --------------------------------------------------------------------------------