diff --git a/Font/pixeloid-font/PixeloidMono-1G8ae.ttf b/Font/pixeloid-font/PixeloidMono-1G8ae.ttf new file mode 100644 index 0000000..a797c1e Binary files /dev/null and b/Font/pixeloid-font/PixeloidMono-1G8ae.ttf differ diff --git a/Font/pixeloid-font/PixeloidSans-nR3g1.ttf b/Font/pixeloid-font/PixeloidSans-nR3g1.ttf new file mode 100644 index 0000000..2f9a03b Binary files /dev/null and b/Font/pixeloid-font/PixeloidSans-nR3g1.ttf differ diff --git a/Font/pixeloid-font/PixeloidSansBold-RpeJo.ttf b/Font/pixeloid-font/PixeloidSansBold-RpeJo.ttf new file mode 100644 index 0000000..81194f5 Binary files /dev/null and b/Font/pixeloid-font/PixeloidSansBold-RpeJo.ttf differ diff --git a/Font/pixeloid-font/info.txt b/Font/pixeloid-font/info.txt new file mode 100644 index 0000000..d88da86 --- /dev/null +++ b/Font/pixeloid-font/info.txt @@ -0,0 +1,2 @@ +license: SIL Open Font License (OFL) +link: https://www.fontspace.com/pixeloid-font-f69232 \ No newline at end of file diff --git a/Menu/Scrollbar.tres b/Menu/Scrollbar.tres new file mode 100644 index 0000000..8f17dc7 --- /dev/null +++ b/Menu/Scrollbar.tres @@ -0,0 +1,8 @@ +[gd_resource type="StyleBoxFlat" format=2] + +[resource] +bg_color = Color( 0.517647, 0.745098, 0.929412, 1 ) +border_width_left = 4 +border_width_right = 4 +border_width_bottom = 2 +border_color = Color( 0.14902, 0.0431373, 0.129412, 1 ) diff --git a/Menu/Theme.tres b/Menu/Theme.tres index 8a44629..28a7a0e 100644 --- a/Menu/Theme.tres +++ b/Menu/Theme.tres @@ -1,3 +1,44 @@ -[gd_resource type="Theme" format=2] +[gd_resource type="Theme" load_steps=5 format=2] + +[ext_resource path="res://Menu/Scrollbar.tres" type="StyleBox" id=1] + +[sub_resource type="StyleBoxFlat" id=1] +content_margin_left = 2.0 +content_margin_right = 2.0 +content_margin_top = 4.0 +content_margin_bottom = 4.0 +bg_color = Color( 0.14902, 0.0431373, 0.129412, 1 ) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color( 0.517647, 0.745098, 0.929412, 1 ) + +[sub_resource type="StyleBoxFlat" id=2] +bg_color = Color( 0.14902, 0.0431373, 0.129412, 1 ) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color( 0.745098, 0.929412, 0.517647, 1 ) + +[sub_resource type="StyleBoxFlat" id=3] +bg_color = Color( 0.14902, 0.0431373, 0.129412, 1 ) +border_width_left = 1 +border_width_top = 1 +border_width_right = 1 +border_width_bottom = 1 +border_color = Color( 0.745098, 0.929412, 0.517647, 1 ) [resource] +VScrollBar/icons/decrement = null +VScrollBar/icons/decrement_highlight = null +VScrollBar/icons/decrement_pressed = null +VScrollBar/icons/increment = null +VScrollBar/icons/increment_highlight = null +VScrollBar/icons/increment_pressed = null +VScrollBar/styles/grabber = SubResource( 1 ) +VScrollBar/styles/grabber_highlight = SubResource( 2 ) +VScrollBar/styles/grabber_pressed = SubResource( 3 ) +VScrollBar/styles/scroll = ExtResource( 1 ) +VScrollBar/styles/scroll_focus = ExtResource( 1 ) diff --git a/World/Main.tscn b/World/Main.tscn index 4405dfe..68b728e 100644 --- a/World/Main.tscn +++ b/World/Main.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=12 format=2] +[gd_scene load_steps=18 format=2] [ext_resource path="res://World/Plant.tscn" type="PackedScene" id=1] [ext_resource path="res://World/FullscreenButton.gd" type="Script" id=2] @@ -9,6 +9,10 @@ [ext_resource path="res://Aseprite/music.png" type="Texture" id=7] [ext_resource path="res://Aseprite/music_hover.png" type="Texture" id=8] [ext_resource path="res://Aseprite/pot.png" type="Texture" id=9] +[ext_resource path="res://Font/pixeloid-font/PixeloidMono-1G8ae.ttf" type="DynamicFontData" id=10] +[ext_resource path="res://World/Terminal.gd" type="Script" id=11] + +[sub_resource type="Theme" id=7] [sub_resource type="StyleBoxFlat" id=1] bg_color = Color( 0.14902, 0.0431373, 0.129412, 1 ) @@ -18,6 +22,21 @@ bg_color = Color( 0.517647, 0.745098, 0.929412, 1 ) expand_margin_left = 2.0 expand_margin_right = 2.0 +[sub_resource type="CanvasItemMaterial" id=3] + +[sub_resource type="DynamicFont" id=4] +size = 8 +extra_spacing_char = 1 +font_data = ExtResource( 10 ) + +[sub_resource type="StyleBoxFlat" id=6] +content_margin_left = 2.0 +content_margin_right = 2.0 +content_margin_top = 2.0 +content_margin_bottom = 2.0 +bg_color = Color( 0.14902, 0.0431373, 0.129412, 1 ) +border_color = Color( 0.517647, 0.745098, 0.929412, 1 ) + [node name="Main" type="Node2D"] [node name="Plant" parent="." instance=ExtResource( 1 )] @@ -27,7 +46,7 @@ margin_left = 236.0 margin_top = 2.0 margin_right = 254.0 margin_bottom = 142.0 -theme = ExtResource( 5 ) +theme = SubResource( 7 ) custom_styles/panel = SubResource( 1 ) __meta__ = { "_edit_use_anchors_": false @@ -68,43 +87,37 @@ margin_left = 128.0 margin_top = 2.0 margin_right = 234.0 margin_bottom = 142.0 -theme = ExtResource( 5 ) +theme = SubResource( 7 ) custom_styles/panel = SubResource( 1 ) __meta__ = { "_edit_use_anchors_": false } -[node name="RichTextLabel" type="RichTextLabel" parent="RightPanel"] +[node name="Terminal" type="RichTextLabel" parent="RightPanel"] +material = SubResource( 3 ) margin_left = 1.0 margin_top = 1.0 margin_right = 105.0 margin_bottom = 120.0 +theme = ExtResource( 5 ) +custom_colors/default_color = Color( 0.94902, 0.988235, 0.878431, 1 ) +custom_fonts/normal_font = SubResource( 4 ) +custom_styles/normal = SubResource( 6 ) bbcode_enabled = true -bbcode_text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Cras pulvinar mattis nunc sed blandit libero volutpat sed cras. Vulputate ut pharetra sit amet. Viverra ipsum nunc aliquet bibendum enim facilisis gravida. Sed egestas egestas fringilla phasellus. Amet consectetur adipiscing elit pellentesque. Egestas egestas fringilla phasellus faucibus scelerisque eleifend donec. Facilisi nullam vehicula ipsum a arcu. At erat pellentesque adipiscing commodo elit at imperdiet. Sed euismod nisi porta lorem. Purus faucibus ornare suspendisse sed nisi lacus sed viverra. Sed sed risus pretium quam vulputate. Massa ultricies mi quis hendrerit. Diam in arcu cursus euismod quis viverra nibh cras pulvinar. Nulla pharetra diam sit amet. Sed euismod nisi porta lorem mollis aliquam ut porttitor. Cursus turpis massa tincidunt dui ut ornare lectus. In aliquam sem fringilla ut morbi. - -Proin sagittis nisl rhoncus mattis rhoncus urna neque. In massa tempor nec feugiat nisl pretium fusce id. Urna condimentum mattis pellentesque id. Ut lectus arcu bibendum at varius vel pharetra vel. Volutpat est velit egestas dui id ornare arcu odio ut. Turpis egestas sed tempus urna. Amet dictum sit amet justo donec. Cursus sit amet dictum sit amet justo. Tellus in hac habitasse platea dictumst vestibulum rhoncus est. Amet nisl purus in mollis nunc. Amet tellus cras adipiscing enim eu turpis egestas pretium. Hac habitasse platea dictumst quisque sagittis purus sit. Eu scelerisque felis imperdiet proin fermentum leo. - -Vitae ultricies leo integer malesuada nunc vel. Tempus urna et pharetra pharetra massa massa ultricies. Scelerisque purus semper eget duis. Urna condimentum mattis pellentesque id nibh tortor id aliquet lectus. Ut ornare lectus sit amet est placerat in egestas. Eget lorem dolor sed viverra ipsum nunc aliquet bibendum enim. Nam libero justo laoreet sit amet cursus. Amet consectetur adipiscing elit duis tristique sollicitudin nibh. Odio euismod lacinia at quis risus sed vulputate. Mi in nulla posuere sollicitudin aliquam ultrices sagittis. Sapien et ligula ullamcorper malesuada proin libero. Vitae turpis massa sed elementum tempus. Diam quis enim lobortis scelerisque. Volutpat est velit egestas dui id ornare arcu odio. - -Ultricies lacus sed turpis tincidunt id. Id ornare arcu odio ut sem nulla pharetra diam sit. Quam viverra orci sagittis eu volutpat odio facilisis. Vulputate mi sit amet mauris commodo quis imperdiet massa. Blandit massa enim nec dui nunc mattis enim ut tellus. Integer vitae justo eget magna fermentum iaculis eu non diam. Et odio pellentesque diam volutpat commodo sed egestas. Leo a diam sollicitudin tempor id eu nisl. Quis hendrerit dolor magna eget est lorem ipsum dolor. Ultrices gravida dictum fusce ut placerat orci nulla pellentesque dignissim. - -Duis at tellus at urna condimentum mattis. At urna condimentum mattis pellentesque id nibh tortor. In ante metus dictum at tempor commodo. Nulla porttitor massa id neque aliquam. Duis tristique sollicitudin nibh sit amet commodo nulla. Mauris vitae ultricies leo integer malesuada nunc vel risus commodo. Faucibus a pellentesque sit amet. Turpis in eu mi bibendum neque egestas congue quisque egestas. Quam lacus suspendisse faucibus interdum posuere. In egestas erat imperdiet sed euismod nisi porta lorem. Tempor nec feugiat nisl pretium fusce id. Ipsum dolor sit amet consectetur adipiscing elit." -text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Cras pulvinar mattis nunc sed blandit libero volutpat sed cras. Vulputate ut pharetra sit amet. Viverra ipsum nunc aliquet bibendum enim facilisis gravida. Sed egestas egestas fringilla phasellus. Amet consectetur adipiscing elit pellentesque. Egestas egestas fringilla phasellus faucibus scelerisque eleifend donec. Facilisi nullam vehicula ipsum a arcu. At erat pellentesque adipiscing commodo elit at imperdiet. Sed euismod nisi porta lorem. Purus faucibus ornare suspendisse sed nisi lacus sed viverra. Sed sed risus pretium quam vulputate. Massa ultricies mi quis hendrerit. Diam in arcu cursus euismod quis viverra nibh cras pulvinar. Nulla pharetra diam sit amet. Sed euismod nisi porta lorem mollis aliquam ut porttitor. Cursus turpis massa tincidunt dui ut ornare lectus. In aliquam sem fringilla ut morbi. - -Proin sagittis nisl rhoncus mattis rhoncus urna neque. In massa tempor nec feugiat nisl pretium fusce id. Urna condimentum mattis pellentesque id. Ut lectus arcu bibendum at varius vel pharetra vel. Volutpat est velit egestas dui id ornare arcu odio ut. Turpis egestas sed tempus urna. Amet dictum sit amet justo donec. Cursus sit amet dictum sit amet justo. Tellus in hac habitasse platea dictumst vestibulum rhoncus est. Amet nisl purus in mollis nunc. Amet tellus cras adipiscing enim eu turpis egestas pretium. Hac habitasse platea dictumst quisque sagittis purus sit. Eu scelerisque felis imperdiet proin fermentum leo. - -Vitae ultricies leo integer malesuada nunc vel. Tempus urna et pharetra pharetra massa massa ultricies. Scelerisque purus semper eget duis. Urna condimentum mattis pellentesque id nibh tortor id aliquet lectus. Ut ornare lectus sit amet est placerat in egestas. Eget lorem dolor sed viverra ipsum nunc aliquet bibendum enim. Nam libero justo laoreet sit amet cursus. Amet consectetur adipiscing elit duis tristique sollicitudin nibh. Odio euismod lacinia at quis risus sed vulputate. Mi in nulla posuere sollicitudin aliquam ultrices sagittis. Sapien et ligula ullamcorper malesuada proin libero. Vitae turpis massa sed elementum tempus. Diam quis enim lobortis scelerisque. Volutpat est velit egestas dui id ornare arcu odio. - -Ultricies lacus sed turpis tincidunt id. Id ornare arcu odio ut sem nulla pharetra diam sit. Quam viverra orci sagittis eu volutpat odio facilisis. Vulputate mi sit amet mauris commodo quis imperdiet massa. Blandit massa enim nec dui nunc mattis enim ut tellus. Integer vitae justo eget magna fermentum iaculis eu non diam. Et odio pellentesque diam volutpat commodo sed egestas. Leo a diam sollicitudin tempor id eu nisl. Quis hendrerit dolor magna eget est lorem ipsum dolor. Ultrices gravida dictum fusce ut placerat orci nulla pellentesque dignissim. - -Duis at tellus at urna condimentum mattis. At urna condimentum mattis pellentesque id nibh tortor. In ante metus dictum at tempor commodo. Nulla porttitor massa id neque aliquam. Duis tristique sollicitudin nibh sit amet commodo nulla. Mauris vitae ultricies leo integer malesuada nunc vel risus commodo. Faucibus a pellentesque sit amet. Turpis in eu mi bibendum neque egestas congue quisque egestas. Quam lacus suspendisse faucibus interdum posuere. In egestas erat imperdiet sed euismod nisi porta lorem. Tempor nec feugiat nisl pretium fusce id. Ipsum dolor sit amet consectetur adipiscing elit." +scroll_following = true +script = ExtResource( 11 ) __meta__ = { "_edit_use_anchors_": false } +[node name="Reveal" type="Timer" parent="RightPanel/Terminal"] +wait_time = 0.15 + [node name="Pot" type="Sprite" parent="."] position = Vector2( 64, 136 ) texture = ExtResource( 9 ) +[connection signal="has_need" from="Plant" to="RightPanel/Terminal" method="_on_Plant_has_need"] [connection signal="pressed" from="Options/FullscreenButton" to="Options/FullscreenButton" method="_on_FullscreenButton_pressed"] [connection signal="value_changed" from="Options/MusicVolume" to="Options/MusicVolume" method="_on_MusicVolume_value_changed"] +[connection signal="timeout" from="RightPanel/Terminal/Reveal" to="RightPanel/Terminal" method="_on_Reveal_timeout"] diff --git a/World/Plant.gd b/World/Plant.gd index eb61c49..47132af 100644 --- a/World/Plant.gd +++ b/World/Plant.gd @@ -6,14 +6,49 @@ var active = [] var rng var branches = 4 +var water = 10 +var health = 100 +var social = 50 +var light = 50 +var last_need = ["x", -100] + +signal has_need(need_and_value) + +func get_mood() -> int: + return ( + abs(50 - water) * 2 + + abs(50 - light) * 2 + + (100 - social) + + (100 - health)) + func _process(_delta): #step() pass + func step(): + $Timer.wait_time = float(get_mood()) / 100 + 0.25 call_deferred("grow") - if randi() % 400 == 0: + if (randi() % 200 == 0) && (get_mood() < 50): blossom() + communicate_needs() + +func communicate_needs(): + var needs = [(50 - water) * 2, 100 - health, 100 - social, (50 - light) * 2] + var n + var most_important = [n, needs[0]] + var i = 0 + for need in needs: + if most_important[1] <= need: + most_important[1] = need + most_important[0] = i + i += 1 + var names = ["water", "health", "social", "light"] + most_important[0] = names[most_important[0]] + if (last_need[0] != most_important[0]) or (abs(last_need[1] - most_important[1]) >= 10): + emit_signal("has_need", most_important) + last_need = most_important + func _ready(): randomize() @@ -26,6 +61,7 @@ func _ready(): branches = rng.randi_range(2, 24) print(branches) + func spawn_pixels(): for n in size.x: var pixels_y = [] @@ -42,17 +78,20 @@ func spawn_pixels(): pixels_y.append(pixel) pixels_x.append(pixels_y) + func plant_seed(): var plant_seed = pixels_x[size.x / 2][size.y - 10] plant_seed.active = true active.append(plant_seed) - + + func grow(): if (randi() % branches) >= 1: new_pixel(active[active.size() - 1]) else: new_pixel(active[randi() % active.size()]) + func new_pixel(original_pixel): var var_x = rng.randi_range(-1, 1) var var_y @@ -68,7 +107,7 @@ func new_pixel(original_pixel): if !new_pixel.active: active.append(new_pixel) new_pixel.age_up() - + func blossom(): var Flower = preload("res://World/Flower.tscn") @@ -76,3 +115,7 @@ func blossom(): var main = get_tree().current_scene flower.global_position = active[randi() % active.size()].position main.add_child(flower) + + +func _on_WaterTimer_timeout() -> void: + water = clamp(water - 1, 0, 100) diff --git a/World/Plant.tscn b/World/Plant.tscn index 314be6b..8d496a1 100644 --- a/World/Plant.tscn +++ b/World/Plant.tscn @@ -9,4 +9,9 @@ script = ExtResource( 2 ) wait_time = 0.25 autostart = true +[node name="WaterTimer" type="Timer" parent="."] +wait_time = 0.25 +autostart = true + [connection signal="timeout" from="Timer" to="." method="step"] +[connection signal="timeout" from="WaterTimer" to="." method="_on_WaterTimer_timeout"] diff --git a/World/Terminal.gd b/World/Terminal.gd new file mode 100644 index 0000000..0bc1753 --- /dev/null +++ b/World/Terminal.gd @@ -0,0 +1,17 @@ +extends RichTextLabel + +func _ready() -> void: + visible_characters = 0 + +func _on_Plant_has_need(need_and_value) -> void: + print_message(need_and_value) + +func print_message(mesage): + $Reveal.start() + text = text + "\n >" + str(mesage) + "\n " + + +func _on_Reveal_timeout() -> void: + if visible_characters <= text.length(): + visible_characters += 1 + else: $Reveal.stop()