2 years ago

particle stars

(generated with an especially-made Godot project)


#ArtPicture made in Godot v4.2.stable.official [46dc27791] for Art Weeklies. themes used:

  • ⭕ Scene: Night View

  • ❌ Fanart: Games based around Space (No Man's Sky, Starfield, Outer Wilds...)

  • ❌ Random: Explorer


the picture is from a Desktop app that uses Godot's particle system (the CPUParticles2D variant) to generate stars.

the trick is that all particle movement is disabled and the speed_scale is set to 0, so the particles don't move and disappear.


the app is licensed under MIT License. you only need to save these 2 text files in a new folder (recommended name particle-stars) to get the Godot project :

project.godot

		
			; 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="particle stars"
config/tags=PackedStringArray("free_libre", "mit_license", "toy")
run/main_scene="res://main.tscn"
config/features=PackedStringArray("4.2", "GL Compatibility")
config/icon="res://stars.webp"

[display]

window/size/viewport_width=360
window/size/viewport_height=360
window/size/window_width_override=720
window/size/window_height_override=720
window/energy_saving/keep_screen_on=false
window/stretch/mode="canvas_items"
window/stretch/aspect="expand"
window/handheld/orientation=6

[filesystem]

import/blender/enabled=false
import/fbx/enabled=false

[gui]

theme/default_font_multichannel_signed_distance_field=true

[input]

help={
"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":4194332,"key_label":0,"unicode":0,"echo":false,"script":null)
]
}
hide={
"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":72,"key_label":0,"unicode":104,"echo":false,"script":null)
]
}
fullscreen={
"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":4194342,"key_label":0,"unicode":0,"echo":false,"script":null)
]
}
reload={
"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":82,"key_label":0,"unicode":114,"echo":false,"script":null)
]
}
photograph={
"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,"echo":false,"script":null)
]
}
open_folder={
"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":70,"key_label":0,"unicode":102,"echo":false,"script":null)
]
}
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,"echo":false,"script":null)
]
}

[input_devices]

pointing/emulate_mouse_from_touch=false

[rendering]

renderer/rendering_method="gl_compatibility"
renderer/rendering_method.mobile="gl_compatibility"
environment/defaults/default_clear_color=Color(0.0117647, 0.0196078, 0.0392157, 1)

		
	

main.tscn

		
			[gd_scene load_steps=7 format=3 uid="uid://c3umnq4fyl4it"]

[sub_resource type="Gradient" id="Gradient_057wi"]
offsets = PackedFloat32Array(0, 0.69, 0.7)
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)

[sub_resource type="GradientTexture2D" id="GradientTexture2D_c07i2"]
gradient = SubResource("Gradient_057wi")
fill = 1
fill_from = Vector2(0.5, 0.5)
fill_to = Vector2(1, 1)

[sub_resource type="Gradient" id="Gradient_5n0pf"]
colors = PackedColorArray(0.0117647, 0.0196078, 0.0392157, 1, 0.941, 1, 1, 1)

[sub_resource type="GDScript" id="GDScript_x0qky"]
script/source = "# this script is licensed under MIT License:
# 	https://codeberg.org/sosasees/mit-license/raw/branch/no-year/LICENSE
# source:
# 	https://gamejolt.com/p/particle-stars-vp4gmvwf
extends CPUParticles2D


func _ready() -> void:
	set_emitting(true)
	await RenderingServer.frame_post_draw
	set_speed_scale(0)


func reload() -> void:
	set_speed_scale(4096)
	await RenderingServer.frame_post_draw
	await RenderingServer.frame_post_draw
	set_speed_scale(1)
	await RenderingServer.frame_post_draw
	await RenderingServer.frame_post_draw
	set_emitting(true)
	await RenderingServer.frame_post_draw
	await RenderingServer.frame_post_draw
	set_speed_scale(0)
"

[sub_resource type="GDScript" id="GDScript_syjdu"]
script/source = "# this script is licensed under MIT License:
# 	https://codeberg.org/sosasees/mit-license/raw/branch/no-year/LICENSE
# source:
# 	https://gamejolt.com/p/particle-stars-vp4gmvwf
extends Control


signal reload_button_pressed


func _ready() -> void:
	hide()
	await RenderingServer.frame_post_draw
	show()


func _input(event: InputEvent) -> void:
	if event.is_action_pressed('help'):
		show()
	if event.is_action_pressed('hide'):
		set_visible(not is_visible())
	if event.is_action_pressed('fullscreen'):
		var window: Window = get_tree().get_root()
		if not window.get_mode() == Window.Mode.MODE_FULLSCREEN:
			window.set_mode(Window.MODE_FULLSCREEN)
		else:
			window.set_mode(Window.MODE_WINDOWED)
	if event.is_action_pressed('reload'):
		reload_button_pressed.emit()
	if event.is_action_pressed('photograph'):
		if is_visible():
			hide()
			await RenderingServer.frame_post_draw
			get_tree().get_root().get_texture().get_image().save_webp(
				'res://stars.webp', true
			)
			show()
		else:
			get_tree().get_root().get_texture().get_image().save_webp(
				'res://stars.webp', true
			)
	if event.is_action_pressed('open_folder'):
		get_tree().get_root().set_mode(Window.MODE_WINDOWED)
		OS.shell_show_in_file_manager(
			ProjectSettings.globalize_path('res://stars.webp'), false
		)
	if event.is_action_pressed('quit'):
		get_tree().quit()
"

[sub_resource type="LabelSettings" id="LabelSettings_k5ihk"]
font_size = 14
font_color = Color(0.941, 1, 1, 1)
outline_size = 2
outline_color = Color(0.0117647, 0.0196078, 0.0392157, 1)

[node name="Main" type="Node"]

[node name="CPUParticles2D" type="CPUParticles2D" parent="."]
position = Vector2(640, 640)
emitting = false
amount = 511
lifetime = 0.2
one_shot = true
explosiveness = 1.0
randomness = 1.0
fract_delta = false
local_coords = true
texture = SubResource("GradientTexture2D_c07i2")
emission_shape = 3
emission_rect_extents = Vector2(640, 640)
direction = Vector2(0, 0)
gravity = Vector2(0, 0)
scale_amount_min = 0.02
scale_amount_max = 0.06
color_initial_ramp = SubResource("Gradient_5n0pf")
hue_variation_min = -1.0
hue_variation_max = 1.0
script = SubResource("GDScript_x0qky")

[node name="Control" type="Control" parent="."]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = SubResource("GDScript_syjdu")

[node name="ControlsText" type="Label" parent="Control"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 4.0
offset_top = 4.0
offset_right = -4.0
offset_bottom = -4.0
grow_horizontal = 2
grow_vertical = 2
text = "[H] show/hide this text
[f11] fullscreen
[R] reload
[enter] photograph (overrides res://stars.webp)
[F] open folder (res://)"
label_settings = SubResource("LabelSettings_k5ihk")
vertical_alignment = 2

[connection signal="reload_button_pressed" from="Control" to="CPUParticles2D" method="reload"]

		
	

(yes, you don't need to download the icon. it gets generated when you press photograph in the app )



1 comment

Loading...

Next up

:D forgot to post this

So i did this animation on alight motion few months ago

Please read all the way to the end! ➡️ ✨

I drew this comic, not just as a way to help remind myself of my goals, this goes out to everyone who’s ever held themselves back and felt like they’re not good enough or prepared to follow their dreams. 🌟 #comic

Anya Forger!!! 🩷

Short intro of us 💕✌️

We're an eletro duo based in Seoul 🇰🇷 Heavily influenced by the 90s.

Our new album #Xennials is all about the nostalgia of that era 💽 CD listenin 📟 beeper beepin 💾 floppy disks floppin days 😎

Stream now! 🎧

https://open.spotify.com/album/3YwWhnHWVy5cA8XOpbaGRA?si=8E9awqU…

Shoobies leave a sticky trail of mucus in their wake, which can impede movement for any creature that steps in it.

Today I was setting up the location of the first boss. His name is "Father" and he is the first of the Patagonians. His task is to guard the road to the House.🛡🗡 Bookmark pre-launch page🔖🔖🔖

https://www.kickstarter.com/projects/rdvindiegame/the-patagonian…

Heya! I wanted to show some gameplay progress i made so far. I hope you like it ^^

Rockin the Guitar, an Axe like Guitar I made for my Uni project

An infected room from the second part of Cybel ! Are you up for some cleansing?

Alone Together....