Compare commits

...

59 commits

Author SHA1 Message Date
Ategon
439cbf5767 Add basic error pings to buildings 2024-09-23 21:07:44 -04:00
Ategon
02e05b95b2 Add the ability to destroy buildings 2024-09-23 20:36:55 -04:00
Ategon
974efa76cf Add pick block 2024-09-23 19:59:35 -04:00
Ategon
72b0bf1d1e Add covers and basic camera movements 2024-09-17 16:37:19 -04:00
Ategon
88c082ac2a Fix looping 2024-09-15 07:03:24 -04:00
Ategon
b47cce1e53 Fix level 5 water 2024-09-15 05:44:39 -04:00
Ategon
24aa4aea4b Fix win screen bug 2024-09-15 05:40:28 -04:00
Ategon
444bacb717 Make export presets 2024-09-15 05:25:23 -04:00
Ategon
d3c4e6bafb Fix conduits 2024-09-15 05:22:08 -04:00
Ategon
72f22731bf Move resource UI 2024-09-15 05:12:01 -04:00
Ategon
1ce23e1e28 Fix UI 2024-09-15 05:10:15 -04:00
Ategon
268d4748d0 Balance Food 2024-09-15 05:07:54 -04:00
Ategon
2a409b5465 Balance resources 2024-09-15 04:58:02 -04:00
Ategon
8406db2a6a Clean up misc 2024-09-15 04:49:58 -04:00
Ategon
327bad2637 Add flood meter 2024-09-15 04:43:56 -04:00
Ategon
30dcc356e8 Bug fixes 2024-09-15 04:02:55 -04:00
Ategon
60338da019 Add population changes 2024-09-15 03:43:45 -04:00
Ategon
0b8addb1dc Add close bonus 2024-09-15 03:29:19 -04:00
Ategon
4c2ae4da13 Polish info window 2024-09-15 02:15:37 -04:00
Ategon
3047e14916 Add info on hover bottom left 2024-09-15 01:37:02 -04:00
Ategon
14046cef33 Add town hall 2024-09-15 00:46:49 -04:00
Ategon
21720ecc11 Make buildings give max pop 2024-09-15 00:25:59 -04:00
Ategon
f75456cfde Add building costs 2024-09-15 00:22:02 -04:00
Ategon
e14a0ee010 Add collector sprites 2024-09-14 23:58:33 -04:00
Ategon
0c5120b07d Add population count 2024-09-14 23:43:31 -04:00
Ategon
01e58dc8f6 Build correct building on map 2024-09-14 23:33:24 -04:00
Ategon
6162455a71 Start with resources 2024-09-14 23:23:38 -04:00
Ategon
ea2cf5787e Add sprites 2024-09-14 23:21:43 -04:00
Ategon
3dcccf2001 Add title screen 2024-09-14 22:50:11 -04:00
Ategon
413960ed70 Add text on hover 2024-09-14 22:20:30 -04:00
Ategon
9fc1776517 Add tilemap UI 2024-09-14 21:37:29 -04:00
Ategon
098a43c452 Add building deselection 2024-09-14 21:27:59 -04:00
Ategon
5969b56b75 Fix timings 2024-09-14 21:19:19 -04:00
Ategon
4ac76453e1 Polish cursor and add music 2024-09-14 21:09:17 -04:00
Ategon
c7140911a7 Fix building 2024-09-14 18:01:46 -04:00
Ategon
d2a51dd9b3 Fix water visuals 2024-09-14 17:02:18 -04:00
Ategon
0e7a03da82 Tween water levels 2024-09-13 23:00:13 -04:00
Ategon
2ca7fe9d40 Clean up counter script 2024-09-13 21:31:14 -04:00
Ategon
d994deb90f Merge branch 'top_ui' 2024-09-13 21:24:54 -04:00
Ategon
ac3b0682be Add new tileset 2024-09-13 21:16:28 -04:00
zcembbi
7cfc81b16c Changed UI layout 2024-09-14 04:16:14 +03:00
Ategon
4cada48a71 Start to add building info 2024-09-13 21:02:26 -04:00
Ategon
586b3f55dc Icons 2024-09-13 20:32:06 -04:00
d489f3f966 Add Resource Icons 2024-09-14 02:28:38 +02:00
Ategon
ffcb7de8c5 Show and hide info menu 2024-09-13 20:20:51 -04:00
Ategon
c30cc68db8 Add hold and drag building 2024-09-13 20:09:38 -04:00
Ategon
e1753a1587 Add building icons to build menu 2024-09-11 22:40:54 -04:00
Ategon
8bb05c7400 Add building menu 2024-09-11 22:04:24 -04:00
Ategon
9b6fd32480 Add font 2024-09-11 19:39:13 -04:00
d0b11b7c6e Merge pull request 'place_buildings' (#24) from place_buildings into main
Reviewed-on: #24
2024-09-11 23:21:23 +00:00
d3c3920be3 Merge pull request 'Initial Documentation Commit' (#23) from obsidian_documentation into main
Reviewed-on: #23
2024-09-11 23:20:26 +00:00
182eed7bca Merge pull request 'Add Cursor Disabled State Sprite' (#22) from ui-sprites into main
Reviewed-on: #22
2024-09-11 23:19:19 +00:00
zcembbi
e116ac4769 Add basic top ui functionality 2024-09-10 16:03:27 +03:00
45f9c3ba88 Added map
Added map that is randomly generated but has a pattern of placing tiles in a higher layer near the center
Also made it so placing a tower would change according to the top layer
2024-09-10 04:34:30 +03:00
Ategon
ab188c54e0 Make tilemap use mouse handler 2024-09-09 14:19:38 -04:00
285479f89b Added building mode
Added going in and out of building mode by pressing right click, still didn't fully underdstand how to use mouse node
2024-09-09 20:55:23 +03:00
17f4e92df0 Added basic placing of building
Added placing of buildings on the tile map using get input, will try to do it using mouse handler
2024-09-09 20:46:51 +03:00
b53dcdb43f Add Cursor Disabled State Sprite 2024-09-09 01:16:13 +02:00
781e9a452a Added placing buildings 2024-09-08 23:49:37 +03:00
176 changed files with 5863 additions and 28 deletions

1
.gitignore vendored
View file

@ -1,3 +1,4 @@
# Godot 4+ specific ignores # Godot 4+ specific ignores
.godot/ .godot/
/android/ /android/
builds/

BIN
Ac437_IBM_BIOS.ttf Normal file

Binary file not shown.

34
Ac437_IBM_BIOS.ttf.import Normal file
View file

@ -0,0 +1,34 @@
[remap]
importer="font_data_dynamic"
type="FontFile"
uid="uid://d0or8uewq7xxw"
path="res://.godot/imported/Ac437_IBM_BIOS.ttf-7a48879b7e6558f138531588615d399b.fontdata"
[deps]
source_file="res://Ac437_IBM_BIOS.ttf"
dest_files=["res://.godot/imported/Ac437_IBM_BIOS.ttf-7a48879b7e6558f138531588615d399b.fontdata"]
[params]
Rendering=null
antialiasing=1
generate_mipmaps=false
disable_embedded_bitmaps=true
multichannel_signed_distance_field=false
msdf_pixel_range=8
msdf_size=48
allow_system_fallback=true
force_autohinter=false
hinting=1
subpixel_positioning=1
oversampling=0.0
Fallbacks=null
fallbacks=[]
Compress=null
compress=true
preload=[]
language_support={}
script_support={}
opentype_features={}

332
BuildingLevel.gd Normal file
View file

@ -0,0 +1,332 @@
extends TileMapLayer
@export var building_spots: Array[Vector2i]
@export var tree_spots: Array[Vector2i]
@export var rock_spots: Array[Vector2i]
@export var th_spots: Array[Vector2i]
@export var level: int
var ruins_spots: Array[Vector2i]
var error_pings: Dictionary
var building_data = {}
var last_tile
var last_text
var last_food_text
var last_water_text
var rand = 0
const NAME_ICON = preload("res://NameIcon.tscn")
const RESOURCE_GAIN = preload("res://ResourceGain.tscn")
const ERROR_PING = preload("res://ErrorPing.tscn")
var building_to_tile_map = {
"tents": {
"source": 8,
"atlas": 0
},
"quarter": {
"source": 8,
"atlas": 1
},
"house": {
"source": 8,
"atlas": 2
},
"essencecompressor": {
"source": 9,
"atlas": 2
},
"woodcutter": {
"source": 9,
"atlas": 1
},
"stoneminer": {
"source": 9,
"atlas": 0
},
"foodgathering": {
"source": 7,
"atlas": 2
},
"foodprocessing": {
"source": 7,
"atlas": 3
},
"waterprocessor": {
"source": 7,
"atlas": 1
},
"waterpump": {
"source": 7,
"atlas": 0
}
}
func _process(delta: float) -> void:
var tile = local_to_map(get_global_mouse_position())
var building_mode = Persister.get_value("building_mode")
for spot in building_spots:
if not building_data.has(spot) and not tree_spots.has(spot) and not rock_spots.has(spot) and not th_spots.has(spot) and not ruins_spots.has(spot):
erase_cell(spot)
if last_tile != tile:
if last_text and is_instance_valid(last_text) and last_text.selected:
last_text._deselect()
if last_food_text and is_instance_valid(last_food_text) and last_food_text.selected:
last_food_text._deselect()
if last_water_text and is_instance_valid(last_water_text) and last_water_text.selected:
last_water_text._deselect()
rand = randi_range(0, 1)
if not Persister.get_value("building_mode") and Persister.get_value("flood_level", PersisterEnums.Scope.UNKNOWN, 0) < level:
if rock_spots.has(tile):
last_text = NAME_ICON.instantiate()
last_text.text = "[center]Rock"
last_text.position = map_to_local(tile) + Vector2(-25, -10)
add_sibling(last_text)
elif tree_spots.has(tile):
last_text = NAME_ICON.instantiate()
last_text.text = "[center]Tree"
last_text.position = map_to_local(tile) + Vector2(-25, -10)
add_sibling(last_text)
elif th_spots.has(tile):
last_text = NAME_ICON.instantiate()
last_text.text = "[center]Town Hall"
last_text.position = map_to_local(tile) + Vector2(-25, -30)
add_sibling(last_text)
last_food_text = NAME_ICON.instantiate()
last_food_text.text = "[center]%d Food" % [Persister.get_value("food")]
last_food_text.position = map_to_local(tile) + Vector2(-25, -20)
add_sibling(last_food_text)
last_water_text = NAME_ICON.instantiate()
last_water_text.text = "[center]%d Water" % [Persister.get_value("water")]
last_water_text.position = map_to_local(tile) + Vector2(-25, -10)
add_sibling(last_water_text)
elif ruins_spots.has(tile):
last_text = NAME_ICON.instantiate()
last_text.text = "[center]Ruins"
last_text.position = map_to_local(tile) + Vector2(-25, -10)
add_sibling(last_text)
elif building_data.has(tile):
last_text = NAME_ICON.instantiate()
last_text.text = "[center]%s" % [Data.data.buildings[building_data[tile].key].name]
last_text.position = map_to_local(tile) + Vector2(-25, -10)
add_sibling(last_text)
for coords in building_data:
var building = building_data[coords]
if building.has("workers") and building.workers > 0 and (not Data.data.buildings[building.key].has("needs") or (Persister.get_value(Data.data.buildings[building.key].needs, PersisterEnums.Scope.UNKNOWN, 0) > 0)):
building.progress += delta * building.efficiency / 100.0
if building.progress >= Data.data.buildings[building.key].time:
if Data.data.buildings[building.key].has("needs"):
Persister.change_value(Data.data.buildings[building.key].needs, -1)
Persister.change_value(Data.data.buildings[building.key].resource, Data.data.buildings[building.key].amount)
var gain = RESOURCE_GAIN.instantiate()
gain.text = "[center]+1 %s" % [Data.data.buildings[building.key].resourcename]
gain.position = map_to_local(coords) + Vector2(-60, -5)
add_sibling(gain)
building.progress -= Data.data.buildings[building.key].time
if building.has("workers"):
var close_bonus = 1.0
if building.workers == 0 and not error_pings.has(coords):
var new_ping = ERROR_PING.instantiate()
new_ping.type = "workers"
new_ping.position = map_to_local(coords) + Vector2(2, -10)
add_sibling(new_ping)
error_pings[coords] = new_ping
elif building.workers != 0 and error_pings.has(coords) and error_pings[coords].type == "workers":
error_pings[coords].queue_free()
error_pings.erase(coords)
if building.key == "woodcutter":
if tree_spots.size() == 0:
close_bonus = 0
else:
var min_distance = INF
for tree in tree_spots:
var distance = tree.distance_to(coords)
if distance < min_distance:
min_distance = distance
if min_distance > 5:
close_bonus = 0
else:
close_bonus = 1 - (min_distance / 5)
elif building.key == "stoneminer":
if rock_spots.size() == 0:
close_bonus = 0
else:
var min_distance = INF
for tree in rock_spots:
var distance = tree.distance_to(coords)
if distance < min_distance:
min_distance = distance
if min_distance > 5:
close_bonus = 0
else:
close_bonus = 1 - (min_distance / 5)
elif building.key == "waterpump":
var water_level = Persister.get_value("flood_level", PersisterEnums.Scope.UNKNOWN, 0)
var amount = level - water_level
if amount > 3:
close_bonus = 0
else:
close_bonus = (3 - amount)
building.efficiency = (100 + Persister.get_value("conduit_bonus", PersisterEnums.Scope.UNKNOWN, 0)) * building.workers * 0.5 * close_bonus
if building.efficiency == 0 and not building.workers == 0 and not error_pings.has(coords):
var new_ping = ERROR_PING.instantiate()
new_ping.type = "resources"
new_ping.position = map_to_local(coords) + Vector2(2, -10)
add_sibling(new_ping)
error_pings[coords] = new_ping
elif (building.efficiency != 0 or building.workers == 0) and error_pings.has(coords) and error_pings[coords].type == "resources":
error_pings[coords].queue_free()
error_pings.erase(coords)
last_tile = tile
if not building_mode:
return
if building_spots.has(tile) and not rock_spots.has(tile) and not tree_spots.has(tile) and not th_spots.has(tile) and not building_data.has(tile) and not ruins_spots.has(tile):
var build_data = building_to_tile_map[Persister.get_value("building_key")]
set_cell(tile, build_data["source"], Vector2i(build_data["atlas"],rand), 0)
func _ready() -> void:
Triggerer.listen("flood_level", _on_flood_level)
func _on_flood_level(data):
var value = int(data.value)
if value >= level:
for coords in building_data:
var building = building_data[coords]
var build_data = Data.data.buildings[building.key]
var bttm = building_to_tile_map[building.key]
var atlas = bttm.atlas
var source
match build_data.type:
"utility":
source = 11
"housing":
source = 12
"production":
source = 10
if building.has("workers"):
Persister.change_value("avail_population", building.workers)
elif build_data.type == "housing":
Persister.change_value("max_population", -build_data.amount)
ruins_spots.push_back(coords)
set_cell(coords, source, Vector2i(atlas,building.rand), 0)
building_data.clear()
for error_ping in error_pings:
error_pings[error_ping].queue_free()
error_pings.clear()
func kill_citizen():
for coords in building_data:
var building = building_data[coords]
if building.has("workers") and building.workers > 0:
building.workers -= 1
return true
return false
func pick_block():
if Persister.get_value("win") or Persister.get_value("lose"):
return
var tile = local_to_map(get_global_mouse_position())
if building_data.has(tile):
var data = Data.data.buildings[building_data[tile].key]
if (not data.cost.has("wood") or int(data.cost.wood) <= Persister.get_value("wood")) and (not data.cost.has("stone") or int(data.cost.stone) <= Persister.get_value("stone")):
Persister.persist_data("building_mode", true)
Persister.persist_data("building_key", building_data[tile].key)
func destroy(tile: Vector2i):
if building_data.has(tile):
var building = building_data[tile]
var build_data = Data.data.buildings[building.key]
if building.has("workers"):
Persister.change_value("avail_population", building.workers)
elif build_data.type == "housing":
Persister.change_value("max_population", -build_data.amount)
building_data.erase(tile)
ruins_spots = ruins_spots.filter(func(coords): return coords != tile)
if error_pings.has(tile):
error_pings[tile].queue_free()
error_pings.erase(tile)
func place_building():
if Persister.get_value("win") or Persister.get_value("lose"):
return
var tile = local_to_map(get_global_mouse_position())
if building_spots.has(tile) and not building_data.has(tile) and not tree_spots.has(tile) and not rock_spots.has(tile) and not th_spots.has(tile):
Persister.persist_data("building_mode", false)
building_data[tile] = {
"key": Persister.get_value("building_key"),
"rand": rand,
"level": level,
"coords": tile
}
var build_data = Data.data.buildings[Persister.get_value("building_key")]
var cost = build_data.cost
if cost.has("wood"):
Persister.change_value("wood", -int(cost.wood))
if cost.has("stone"):
Persister.change_value("stone", -int(cost.stone))
if build_data.type == "housing":
Persister.change_value("max_population", int(build_data.amount))
building_data[tile].max_population = int(build_data.amount)
elif build_data.name != "Conduit":
building_data[tile].workers = 0
building_data[tile].max_workers = 6
building_data[tile].efficiency = 100 + Persister.get_value("conduit_bonus", PersisterEnums.Scope.UNKNOWN, 0)
building_data[tile].progress = 0
else:
Persister.change_value("conduit_bonus", 20)
Persister.persist_data("drag_mode", false)
func show_info_building():
var tile = local_to_map(get_global_mouse_position())
if building_data.has(tile):
Triggerer.trigger("show_info", building_data[tile])
elif ruins_spots.has(tile):
Triggerer.trigger("show_info", {
"key": "ruins",
"coords": tile,
"level": level
})

18
CloudParticles.tscn Normal file
View file

@ -0,0 +1,18 @@
[gd_scene load_steps=2 format=3 uid="uid://dfflehr042w4"]
[ext_resource type="Texture2D" uid="uid://d4abji2r2gx7i" path="res://cloud.png" id="1_r8347"]
[node name="CPUParticles2D" type="CPUParticles2D"]
modulate = Color(1, 1, 1, 0.0588235)
position = Vector2(-120.54, 140)
amount = 16
lifetime = 15.0
preprocess = 15.0
texture = ExtResource("1_r8347")
emission_shape = 3
emission_rect_extents = Vector2(1, 180)
spread = 5.0
gravity = Vector2(0, 0)
initial_velocity_min = 50.0
initial_velocity_max = 100.0
scale_amount_min = 0.4

13
ErrorPing.tscn Normal file
View file

@ -0,0 +1,13 @@
[gd_scene load_steps=2 format=3 uid="uid://ctpkwdh7lprae"]
[ext_resource type="Script" path="res://error_ping.gd" id="1_5564w"]
[node name="ErrorPing" type="ColorRect"]
z_index = 1
offset_left = -2.0
offset_top = -2.0
offset_right = 2.0
offset_bottom = 2.0
pivot_offset = Vector2(2, 2)
color = Color(1, 0.121569, 0.113725, 1)
script = ExtResource("1_5564w")

14
FloodIcon.tscn Normal file
View file

@ -0,0 +1,14 @@
[gd_scene load_steps=2 format=3 uid="uid://s88w3sskto6k"]
[ext_resource type="Theme" uid="uid://d035h7upxrw3h" path="res://theme.tres" id="1_elk14"]
[node name="RichTextLabel" type="RichTextLabel"]
modulate = Color(0.52549, 0.517647, 0.482353, 1)
clip_contents = false
offset_left = 9.0
offset_top = 5.0
offset_right = 26.0
offset_bottom = 16.0
theme = ExtResource("1_elk14")
theme_override_constants/outline_size = 3
text = "A"

360
InfoWindow.tscn Normal file
View file

@ -0,0 +1,360 @@
[gd_scene load_steps=8 format=3 uid="uid://byyyhq3x8t2d8"]
[ext_resource type="Theme" uid="uid://d035h7upxrw3h" path="res://theme.tres" id="1_emusj"]
[ext_resource type="Script" path="res://info_window.gd" id="1_oy31s"]
[ext_resource type="Texture2D" uid="uid://cd205j7rs5ph7" path="res://ui/buildingmeny.png" id="3_wsa04"]
[ext_resource type="Texture2D" uid="uid://gaiht2weca4g" path="res://parts/buildings/images/woodcutter.png" id="4_sb142"]
[ext_resource type="PackedScene" uid="uid://dykc1mgg5uopw" path="res://components/Cursor/MouseHandler.tscn" id="5_38jqb"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_fnpfc"]
size = Vector2(15, 16)
[sub_resource type="RectangleShape2D" id="RectangleShape2D_2wrr4"]
size = Vector2(41, 16)
[node name="InfoWindow" type="Control"]
layout_mode = 3
anchors_preset = 6
anchor_left = 1.0
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_left = -226.0
offset_top = -133.0
offset_right = -13.0
offset_bottom = 133.0
grow_horizontal = 0
grow_vertical = 2
pivot_offset = Vector2(109, 129)
theme = ExtResource("1_emusj")
script = ExtResource("1_oy31s")
[node name="ColorRect" type="TextureRect" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("3_wsa04")
[node name="ColorRect2" type="ColorRect" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 2.0
offset_top = 2.0
offset_right = -2.0
offset_bottom = -2.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0, 0, 0, 0.231373)
[node name="Icon" type="TextureRect" parent="."]
layout_mode = 1
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -16.0
offset_top = 14.0
offset_right = 16.0
offset_bottom = 46.0
grow_horizontal = 2
texture = ExtResource("4_sb142")
[node name="Title" type="RichTextLabel" parent="."]
clip_contents = false
layout_mode = 1
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -119.5
offset_top = 53.0
offset_right = 120.5
offset_bottom = 83.0
grow_horizontal = 2
theme_override_constants/outline_size = 6
theme_override_font_sizes/normal_font_size = 16
bbcode_enabled = true
text = "[center]Test Title"
[node name="Subtitle" type="RichTextLabel" parent="."]
clip_contents = false
layout_mode = 1
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -83.5
offset_top = 75.0
offset_right = 83.5
offset_bottom = 105.0
grow_horizontal = 2
theme_override_constants/outline_size = 3
bbcode_enabled = true
text = "[center]Test Title"
[node name="Description" type="RichTextLabel" parent="."]
clip_contents = false
layout_mode = 1
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -83.5
offset_top = 105.0
offset_right = 83.5
offset_bottom = 177.0
grow_horizontal = 2
theme_override_constants/outline_size = 3
bbcode_enabled = true
[node name="ColorRect5" type="ColorRect" parent="."]
self_modulate = Color(1, 1, 1, 0.647059)
layout_mode = 1
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_left = 192.0
offset_top = -128.0
offset_right = 208.0
offset_bottom = -112.0
grow_vertical = 2
pivot_offset = Vector2(8, 9)
color = Color(0, 0, 0, 1)
[node name="RichTextLabel" type="RichTextLabel" parent="ColorRect5"]
clip_contents = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 2.0
offset_top = 5.0
offset_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/outline_size = 3
bbcode_enabled = true
text = "[center]X"
[node name="MouseHandler3" parent="ColorRect5" instance=ExtResource("5_38jqb")]
[node name="CollisionShape2D" type="CollisionShape2D" parent="ColorRect5/MouseHandler3"]
position = Vector2(8, 8)
shape = SubResource("RectangleShape2D_fnpfc")
[node name="ResourceAllocation" 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 = 3.0
offset_top = 16.0
offset_right = 69.0
offset_bottom = 56.0
grow_horizontal = 2
grow_vertical = 2
theme = ExtResource("1_emusj")
[node name="RichTextLabel2" type="RichTextLabel" parent="ResourceAllocation"]
clip_contents = false
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -36.0
offset_top = -3.0
offset_right = 36.0
offset_bottom = 21.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/outline_size = 3
bbcode_enabled = true
text = "[center]X/X"
[node name="ColorRect2" type="ColorRect" parent="ResourceAllocation"]
self_modulate = Color(1, 1, 1, 0.647059)
layout_mode = 1
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_top = -8.0
offset_right = 16.0
offset_bottom = 8.0
grow_vertical = 2
pivot_offset = Vector2(7.5, 8)
color = Color(0, 0, 0, 1)
[node name="RichTextLabel" type="RichTextLabel" parent="ResourceAllocation/ColorRect2"]
clip_contents = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 2.0
offset_top = 6.0
offset_bottom = 2.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/outline_size = 3
bbcode_enabled = true
text = "[center]-"
[node name="MouseHandler" parent="ResourceAllocation/ColorRect2" instance=ExtResource("5_38jqb")]
[node name="CollisionShape2D" type="CollisionShape2D" parent="ResourceAllocation/ColorRect2/MouseHandler"]
position = Vector2(8, 8)
shape = SubResource("RectangleShape2D_fnpfc")
[node name="ColorRect3" type="ColorRect" parent="ResourceAllocation"]
self_modulate = Color(1, 1, 1, 0.647059)
layout_mode = 1
anchors_preset = 6
anchor_left = 1.0
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_left = -16.0
offset_top = -8.0
offset_bottom = 8.0
grow_horizontal = 0
grow_vertical = 2
pivot_offset = Vector2(8.5, 8)
color = Color(0, 0, 0, 1)
[node name="RichTextLabel" type="RichTextLabel" parent="ResourceAllocation/ColorRect3"]
clip_contents = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 2.0
offset_top = 6.0
offset_bottom = 2.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/outline_size = 3
bbcode_enabled = true
text = "[center]+"
[node name="MouseHandler2" parent="ResourceAllocation/ColorRect3" instance=ExtResource("5_38jqb")]
position = Vector2(-50, 0)
[node name="CollisionShape2D" type="CollisionShape2D" parent="ResourceAllocation/ColorRect3/MouseHandler2"]
position = Vector2(58, 8)
shape = SubResource("RectangleShape2D_fnpfc")
[node name="RichTextLabel" type="RichTextLabel" parent="ResourceAllocation"]
clip_contents = false
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -86.0
offset_top = -4.0
offset_right = -14.0
offset_bottom = 20.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/outline_size = 3
bbcode_enabled = true
text = "Workers"
[node name="Description2" type="RichTextLabel" parent="ResourceAllocation"]
clip_contents = false
layout_mode = 1
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -119.5
offset_top = 46.0
offset_right = 47.5
offset_bottom = 118.0
grow_horizontal = 2
theme_override_constants/outline_size = 3
bbcode_enabled = true
text = "[center]STATUS: STOPPED"
[node name="Description3" type="RichTextLabel" parent="ResourceAllocation"]
clip_contents = false
layout_mode = 1
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -119.5
offset_top = 61.0
offset_right = 47.5
offset_bottom = 133.0
grow_horizontal = 2
theme_override_constants/outline_size = 3
bbcode_enabled = true
text = "[center]EFFICIENCY: 0%"
[node name="ColorRect4" type="ColorRect" parent="ResourceAllocation"]
layout_mode = 1
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -105.5
offset_top = 78.0
offset_right = 33.5
offset_bottom = 80.0
grow_horizontal = 2
[node name="ColorRect6" type="ColorRect" parent="."]
self_modulate = Color(1, 1, 1, 0.647059)
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -20.5
offset_top = -28.0
offset_right = 20.5
offset_bottom = -12.0
grow_horizontal = 2
grow_vertical = 0
pivot_offset = Vector2(8, 9)
color = Color(0, 0, 0, 1)
[node name="RichTextLabel" type="RichTextLabel" parent="ColorRect6"]
clip_contents = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -11.0
offset_top = 5.0
offset_right = 14.0
offset_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/outline_size = 3
bbcode_enabled = true
text = "[center]Destroy"
[node name="DestroyHandler" parent="ColorRect6" instance=ExtResource("5_38jqb")]
[node name="CollisionShape2D" type="CollisionShape2D" parent="ColorRect6/DestroyHandler"]
position = Vector2(20.5, 8)
shape = SubResource("RectangleShape2D_2wrr4")
[connection signal="clicked" from="ColorRect5/MouseHandler3" to="." method="_on_mouse_handler_3_clicked"]
[connection signal="hovered" from="ColorRect5/MouseHandler3" to="." method="_on_mouse_handler_3_hovered"]
[connection signal="unhovered" from="ColorRect5/MouseHandler3" to="." method="_on_mouse_handler_3_unhovered"]
[connection signal="clicked" from="ResourceAllocation/ColorRect2/MouseHandler" to="." method="_on_mouse_handler_clicked"]
[connection signal="hovered" from="ResourceAllocation/ColorRect2/MouseHandler" to="." method="_on_mouse_handler_hovered"]
[connection signal="unhovered" from="ResourceAllocation/ColorRect2/MouseHandler" to="." method="_on_mouse_handler_unhovered"]
[connection signal="clicked" from="ResourceAllocation/ColorRect3/MouseHandler2" to="." method="_on_mouse_handler_2_clicked"]
[connection signal="hovered" from="ResourceAllocation/ColorRect3/MouseHandler2" to="." method="_on_mouse_handler_2_hovered"]
[connection signal="unhovered" from="ResourceAllocation/ColorRect3/MouseHandler2" to="." method="_on_mouse_handler_2_unhovered"]
[connection signal="clicked" from="ColorRect6/DestroyHandler" to="." method="_on_destroy_handler_clicked"]
[connection signal="hovered" from="ColorRect6/DestroyHandler" to="." method="_on_destroy_handler_hovered"]
[connection signal="unhovered" from="ColorRect6/DestroyHandler" to="." method="_on_destroy_handler_unhovered"]

5
Level.gd Normal file
View file

@ -0,0 +1,5 @@
extends Node2D
func _process(delta: float) -> void:
position = (Vector2(320, 180) - get_global_mouse_position()) / 40

62
Mai8E8B.tmp Normal file
View file

@ -0,0 +1,62 @@
[gd_scene load_steps=10 format=3 uid="uid://5ske2hm55rce"]
[ext_resource type="Theme" uid="uid://d035h7upxrw3h" path="res://theme.tres" id="1_xbn5h"]
[ext_resource type="Texture2D" uid="uid://bsrh0u02bckhy" path="res://iso_building.png" id="3_qa5pv"]
[ext_resource type="Texture2D" uid="uid://bvn5lewpp7pmd" path="res://iso_tile.png" id="4_7pks7"]
[ext_resource type="PackedScene" uid="uid://dykc1mgg5uopw" path="res://components/Cursor/MouseHandler.tscn" id="5_6lpdu"]
[ext_resource type="Script" path="res://tile_map.gd" id="5_v47eg"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_dxrqb"]
texture = ExtResource("4_7pks7")
margins = Vector2i(16, 16)
1:1/0 = 0
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_j7eew"]
texture = ExtResource("3_qa5pv")
margins = Vector2i(15, 14)
texture_region_size = Vector2i(18, 20)
1:1/0 = 0
0:0/0 = 0
[sub_resource type="TileSet" id="TileSet_2mye8"]
tile_shape = 1
tile_layout = 5
tile_size = Vector2i(16, 8)
sources/0 = SubResource("TileSetAtlasSource_dxrqb")
sources/1 = SubResource("TileSetAtlasSource_j7eew")
[sub_resource type="CircleShape2D" id="CircleShape2D_s8q4l"]
radius = 134.7
[node name="Main" type="Node2D"]
[node name="Control" type="Control" parent="."]
layout_mode = 3
anchors_preset = 0
offset_right = 40.0
offset_bottom = 40.0
theme = ExtResource("1_xbn5h")
[node name="TileMap" type="TileMap" parent="."]
tile_set = SubResource("TileSet_2mye8")
rendering_quadrant_size = 128
format = 2
layer_1/name = "Layer1"
layer_2/name = "Layer2"
layer_3/name = "Layer3"
layer_4/name = "Layer4"
layer_5/name = "Layer5"
script = ExtResource("5_v47eg")
[node name="MouseHandler" parent="TileMap" instance=ExtResource("5_6lpdu")]
position = Vector2(318, 178)
[node name="CollisionShape2D" type="CollisionShape2D" parent="TileMap/MouseHandler"]
shape = SubResource("CircleShape2D_s8q4l")
[node name="Camera2D" type="Camera2D" parent="."]
offset = Vector2(50, 150)
[connection signal="clicked" from="TileMap/MouseHandler" to="TileMap" method="_on_mouse_handler_clicked"]
[connection signal="rclicked" from="TileMap/MouseHandler" to="TileMap" method="_on_mouse_handler_rclicked"]

62
MaiD4A.tmp Normal file
View file

@ -0,0 +1,62 @@
[gd_scene load_steps=10 format=3 uid="uid://5ske2hm55rce"]
[ext_resource type="Theme" uid="uid://d035h7upxrw3h" path="res://theme.tres" id="1_xbn5h"]
[ext_resource type="Texture2D" uid="uid://bsrh0u02bckhy" path="res://iso_building.png" id="3_qa5pv"]
[ext_resource type="Texture2D" uid="uid://bvn5lewpp7pmd" path="res://iso_tile.png" id="4_7pks7"]
[ext_resource type="PackedScene" uid="uid://dykc1mgg5uopw" path="res://components/Cursor/MouseHandler.tscn" id="5_6lpdu"]
[ext_resource type="Script" path="res://tile_map.gd" id="5_v47eg"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_dxrqb"]
texture = ExtResource("4_7pks7")
margins = Vector2i(16, 16)
1:1/0 = 0
0:0/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_j7eew"]
texture = ExtResource("3_qa5pv")
margins = Vector2i(15, 14)
texture_region_size = Vector2i(18, 20)
1:1/0 = 0
0:0/0 = 0
[sub_resource type="TileSet" id="TileSet_2mye8"]
tile_shape = 1
tile_layout = 5
tile_size = Vector2i(16, 8)
sources/0 = SubResource("TileSetAtlasSource_dxrqb")
sources/1 = SubResource("TileSetAtlasSource_j7eew")
[sub_resource type="CircleShape2D" id="CircleShape2D_s8q4l"]
radius = 134.7
[node name="Main" type="Node2D"]
[node name="Control" type="Control" parent="."]
layout_mode = 3
anchors_preset = 0
offset_right = 40.0
offset_bottom = 40.0
theme = ExtResource("1_xbn5h")
[node name="TileMap" type="TileMap" parent="."]
tile_set = SubResource("TileSet_2mye8")
rendering_quadrant_size = 128
format = 2
layer_1/name = "Layer1"
layer_2/name = "Layer2"
layer_3/name = "Layer3"
layer_4/name = "Layer4"
layer_5/name = "Layer5"
script = ExtResource("5_v47eg")
[node name="MouseHandler" parent="TileMap" instance=ExtResource("5_6lpdu")]
position = Vector2(318, 178)
[node name="CollisionShape2D" type="CollisionShape2D" parent="TileMap/MouseHandler"]
shape = SubResource("CircleShape2D_s8q4l")
[node name="Camera2D" type="Camera2D" parent="."]
offset = Vector2(50, 150)
[connection signal="clicked" from="TileMap/MouseHandler" to="TileMap" method="_on_mouse_handler_clicked"]
[connection signal="rclicked" from="TileMap/MouseHandler" to="TileMap" method="_on_mouse_handler_rclicked"]

1023
Main.tscn

File diff suppressed because it is too large Load diff

BIN
MxPlus_IBM_VGA_9x8.ttf Normal file

Binary file not shown.

View file

@ -0,0 +1,34 @@
[remap]
importer="font_data_dynamic"
type="FontFile"
uid="uid://ci8skg28ntp1b"
path="res://.godot/imported/MxPlus_IBM_VGA_9x8.ttf-574b37241f4f9381c81f9d827f41a7f2.fontdata"
[deps]
source_file="res://MxPlus_IBM_VGA_9x8.ttf"
dest_files=["res://.godot/imported/MxPlus_IBM_VGA_9x8.ttf-574b37241f4f9381c81f9d827f41a7f2.fontdata"]
[params]
Rendering=null
antialiasing=1
generate_mipmaps=false
disable_embedded_bitmaps=true
multichannel_signed_distance_field=false
msdf_pixel_range=8
msdf_size=48
allow_system_fallback=true
force_autohinter=false
hinting=1
subpixel_positioning=1
oversampling=0.0
Fallbacks=null
fallbacks=[]
Compress=null
compress=true
preload=[]
language_support={}
script_support={}
opentype_features={}

18
NameIcon.tscn Normal file
View file

@ -0,0 +1,18 @@
[gd_scene load_steps=3 format=3 uid="uid://vlp1qstcv4no"]
[ext_resource type="Theme" uid="uid://d035h7upxrw3h" path="res://theme.tres" id="1_yw1uq"]
[ext_resource type="Script" path="res://name_icon.gd" id="2_tyt57"]
[node name="NameIcon" type="RichTextLabel"]
z_index = 10
clip_contents = false
offset_left = 280.0
offset_top = 104.0
offset_right = 332.0
offset_bottom = 121.0
pivot_offset = Vector2(25, 4)
theme = ExtResource("1_yw1uq")
theme_override_constants/outline_size = 3
bbcode_enabled = true
text = "[center]Rock"
script = ExtResource("2_tyt57")

6
Night.tscn Normal file
View file

@ -0,0 +1,6 @@
[gd_scene format=3 uid="uid://v4qfjewow3cb"]
[node name="Night" type="ColorRect"]
offset_right = 640.0
offset_bottom = 360.0
color = Color(0.121569, 0, 0.25098, 0.690196)

BIN
Qubi.ttf Normal file

Binary file not shown.

34
Qubi.ttf.import Normal file
View file

@ -0,0 +1,34 @@
[remap]
importer="font_data_dynamic"
type="FontFile"
uid="uid://cq86fc0y2nf47"
path="res://.godot/imported/Qubi.ttf-ea5af37698a332827bba1729dadf0f79.fontdata"
[deps]
source_file="res://Qubi.ttf"
dest_files=["res://.godot/imported/Qubi.ttf-ea5af37698a332827bba1729dadf0f79.fontdata"]
[params]
Rendering=null
antialiasing=1
generate_mipmaps=false
disable_embedded_bitmaps=true
multichannel_signed_distance_field=false
msdf_pixel_range=8
msdf_size=48
allow_system_fallback=true
force_autohinter=false
hinting=1
subpixel_positioning=1
oversampling=0.0
Fallbacks=null
fallbacks=[]
Compress=null
compress=true
preload=[]
language_support={}
script_support={}
opentype_features={}

105
ResourceAllocation.tscn Normal file
View file

@ -0,0 +1,105 @@
[gd_scene load_steps=3 format=3 uid="uid://bsj3th0rsn7a8"]
[ext_resource type="Theme" uid="uid://d035h7upxrw3h" path="res://theme.tres" id="1_5kjyf"]
[ext_resource type="Script" path="res://resource_allocation.gd" id="2_d6ufs"]
[node name="ResourceAllocation" type="Control"]
layout_mode = 3
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -33.0
offset_top = 30.0
offset_right = 33.0
offset_bottom = 70.0
grow_horizontal = 2
grow_vertical = 2
theme = ExtResource("1_5kjyf")
script = ExtResource("2_d6ufs")
[node name="RichTextLabel2" type="RichTextLabel" parent="."]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -36.0
offset_top = -3.0
offset_right = 36.0
offset_bottom = 21.0
grow_horizontal = 2
grow_vertical = 2
bbcode_enabled = true
text = "[center]X/X"
[node name="ColorRect2" type="ColorRect" parent="."]
self_modulate = Color(1, 1, 1, 0.647059)
layout_mode = 1
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_top = -8.0
offset_right = 16.0
offset_bottom = 8.0
grow_vertical = 2
color = Color(0, 0, 0, 1)
[node name="RichTextLabel" type="RichTextLabel" parent="ColorRect2"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 2.0
offset_top = 6.0
offset_bottom = 2.0
grow_horizontal = 2
grow_vertical = 2
bbcode_enabled = true
text = "[center]-"
[node name="ColorRect3" type="ColorRect" parent="."]
self_modulate = Color(1, 1, 1, 0.647059)
layout_mode = 1
anchors_preset = 6
anchor_left = 1.0
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_left = -16.0
offset_top = -8.0
offset_bottom = 8.0
grow_horizontal = 0
grow_vertical = 2
color = Color(0, 0, 0, 1)
[node name="RichTextLabel" type="RichTextLabel" parent="ColorRect3"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 2.0
offset_top = 6.0
offset_bottom = 2.0
grow_horizontal = 2
grow_vertical = 2
bbcode_enabled = true
text = "[center]+"
[node name="RichTextLabel" type="RichTextLabel" parent="."]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -86.0
offset_top = -4.0
offset_right = -14.0
offset_bottom = 20.0
grow_horizontal = 2
grow_vertical = 2
bbcode_enabled = true
text = "Workers"

18
ResourceGain.tscn Normal file
View file

@ -0,0 +1,18 @@
[gd_scene load_steps=3 format=3 uid="uid://d0sou8ksu22pm"]
[ext_resource type="Theme" uid="uid://d035h7upxrw3h" path="res://theme.tres" id="1_aw2u1"]
[ext_resource type="Script" path="res://resource_gain.gd" id="2_enpvk"]
[node name="NameIcon" type="RichTextLabel"]
z_index = 10
clip_contents = false
offset_left = 243.0
offset_top = 104.0
offset_right = 369.0
offset_bottom = 121.0
pivot_offset = Vector2(62, 4)
theme = ExtResource("1_aw2u1")
theme_override_constants/outline_size = 3
bbcode_enabled = true
text = "[center]Rock"
script = ExtResource("2_enpvk")

247
TIleSet.tres Normal file
View file

@ -0,0 +1,247 @@
[gd_resource type="TileSet" load_steps=29 format=3 uid="uid://dhy53lakrlutm"]
[ext_resource type="Texture2D" uid="uid://bvn5lewpp7pmd" path="res://iso_tile.png" id="1_sa4j6"]
[ext_resource type="Texture2D" uid="uid://bsrh0u02bckhy" path="res://iso_building.png" id="2_bubm3"]
[ext_resource type="Texture2D" uid="uid://dbbhhs5aiuejw" path="res://tiles_ruined_collectors.png" id="3_7x1fh"]
[ext_resource type="Texture2D" uid="uid://bdmao1k7ngu2m" path="res://basic_tiles.png" id="3_rchy6"]
[ext_resource type="Texture2D" uid="uid://fa4m6cupo65w" path="res://tiles_ruined_foodwater.png" id="4_axgg8"]
[ext_resource type="Texture2D" uid="uid://w1abxk1m0fae" path="res://tiles-v3.png" id="4_p6xw0"]
[ext_resource type="Texture2D" uid="uid://cps3axbh7qgc0" path="res://tiles_ruined_houses.png" id="5_16ny2"]
[ext_resource type="Texture2D" uid="uid://cjfpd778ggjer" path="res://select.png" id="5_s3lj1"]
[ext_resource type="Texture2D" uid="uid://cvn1fg4v6kur3" path="res://tilerocks.png" id="6_f8tld"]
[ext_resource type="Texture2D" uid="uid://8sb6dyux6i44" path="res://townhall.png" id="6_q784e"]
[ext_resource type="Texture2D" uid="uid://c43udkovhiiv8" path="res://tiletrees.png" id="7_grd50"]
[ext_resource type="Texture2D" uid="uid://bmxo8xwxghc1k" path="res://tiles_foodwater.png" id="8_tscyy"]
[ext_resource type="Texture2D" uid="uid://cgpbrsl2nlhlr" path="res://tiles_houses.png" id="9_dx80t"]
[ext_resource type="Texture2D" uid="uid://cc7724klwih07" path="res://tile_collectors.png" id="10_ftm4e"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_dxrqb"]
texture = ExtResource("1_sa4j6")
margins = Vector2i(16, 16)
0:0/0 = 0
0:0/0/texture_origin = Vector2i(0, 4)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_j7eew"]
texture = ExtResource("2_bubm3")
1:1/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_83p42"]
texture = ExtResource("3_7x1fh")
0:0/0 = 0
0:0/0/texture_origin = Vector2i(0, 4)
1:0/0 = 0
1:0/0/texture_origin = Vector2i(0, 4)
1:1/0 = 0
1:1/0/texture_origin = Vector2i(0, 4)
2:1/0 = 0
2:1/0/texture_origin = Vector2i(0, 4)
0:1/0 = 0
0:1/0/texture_origin = Vector2i(0, 4)
2:0/0 = 0
2:0/0/texture_origin = Vector2i(0, 4)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_mrgl4"]
texture = ExtResource("4_axgg8")
0:0/0 = 0
0:0/0/texture_origin = Vector2i(0, 4)
0:1/0 = 0
0:1/0/texture_origin = Vector2i(0, 4)
1:1/0 = 0
1:1/0/texture_origin = Vector2i(0, 4)
2:1/0 = 0
2:1/0/texture_origin = Vector2i(0, 4)
3:1/0 = 0
3:1/0/texture_origin = Vector2i(0, 4)
3:0/0 = 0
3:0/0/texture_origin = Vector2i(0, 4)
2:0/0 = 0
2:0/0/texture_origin = Vector2i(0, 4)
1:0/0 = 0
1:0/0/texture_origin = Vector2i(0, 4)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_w6ttr"]
texture = ExtResource("5_16ny2")
0:0/0 = 0
0:0/0/texture_origin = Vector2i(0, 4)
0:1/0 = 0
0:1/0/texture_origin = Vector2i(0, 4)
1:1/0 = 0
1:1/0/texture_origin = Vector2i(0, 4)
2:1/0 = 0
2:1/0/texture_origin = Vector2i(0, 4)
2:0/0 = 0
2:0/0/texture_origin = Vector2i(0, 4)
1:0/0 = 0
1:0/0/texture_origin = Vector2i(0, 4)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_jhyw0"]
texture = ExtResource("6_q784e")
0:0/0 = 0
0:0/0/texture_origin = Vector2i(0, 4)
0:1/0 = 0
0:1/0/texture_origin = Vector2i(0, 4)
1:1/0 = 0
1:1/0/texture_origin = Vector2i(0, 4)
1:0/0 = 0
1:0/0/texture_origin = Vector2i(0, 4)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_w6tof"]
texture = ExtResource("3_rchy6")
1:3/0 = 0
3:3/0 = 0
1:6/0 = 0
3:6/0 = 0
1:7/0 = 0
3:7/0 = 0
1:1/0 = 0
3:1/0 = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_5o051"]
texture = ExtResource("4_p6xw0")
1:1/0 = 0
1:1/0/texture_origin = Vector2i(0, 4)
1:1/0/y_sort_origin = 3
1:3/0 = 0
1:3/0/texture_origin = Vector2i(0, 4)
1:3/0/y_sort_origin = 3
3:3/0 = 0
3:3/0/texture_origin = Vector2i(0, 4)
3:3/0/y_sort_origin = 3
3:1/0 = 0
3:1/0/texture_origin = Vector2i(0, 4)
3:1/0/y_sort_origin = 3
5:1/0 = 0
5:1/0/texture_origin = Vector2i(0, 4)
5:1/0/y_sort_origin = 3
5:3/0 = 0
5:3/0/texture_origin = Vector2i(0, 4)
5:3/0/y_sort_origin = 3
11:3/0 = 0
11:3/0/texture_origin = Vector2i(0, 4)
11:3/0/y_sort_origin = 3
11:1/0 = 0
11:1/0/texture_origin = Vector2i(0, 4)
11:1/0/y_sort_origin = 3
9:1/0 = 0
9:1/0/texture_origin = Vector2i(0, 4)
9:1/0/y_sort_origin = 3
7:1/0 = 0
7:1/0/texture_origin = Vector2i(0, 4)
7:1/0/y_sort_origin = 3
7:3/0 = 0
7:3/0/texture_origin = Vector2i(0, 4)
7:3/0/y_sort_origin = 3
9:3/0 = 0
9:3/0/texture_origin = Vector2i(0, 4)
9:3/0/y_sort_origin = 3
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_sneuq"]
texture = ExtResource("5_s3lj1")
0:0/0 = 0
0:0/0/texture_origin = Vector2i(0, 4)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_l16yl"]
texture = ExtResource("6_f8tld")
0:0/0 = 0
0:0/0/texture_origin = Vector2i(0, 3)
1:0/0 = 0
1:0/0/texture_origin = Vector2i(0, 3)
2:0/0 = 0
2:0/0/texture_origin = Vector2i(0, 3)
2:1/0 = 0
2:1/0/texture_origin = Vector2i(0, 3)
3:1/0 = 0
3:1/0/texture_origin = Vector2i(0, 3)
4:1/0 = 0
4:1/0/texture_origin = Vector2i(0, 3)
1:1/0 = 0
1:1/0/texture_origin = Vector2i(0, 3)
0:1/0 = 0
0:1/0/texture_origin = Vector2i(0, 3)
3:0/0 = 0
3:0/0/texture_origin = Vector2i(0, 3)
4:0/0 = 0
4:0/0/texture_origin = Vector2i(0, 3)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ffqbc"]
texture = ExtResource("7_grd50")
2:1/0 = 0
2:1/0/texture_origin = Vector2i(0, 3)
1:1/0 = 0
1:1/0/texture_origin = Vector2i(0, 3)
0:1/0 = 0
0:1/0/texture_origin = Vector2i(0, 3)
0:0/0 = 0
0:0/0/texture_origin = Vector2i(0, 3)
1:0/0 = 0
1:0/0/texture_origin = Vector2i(0, 3)
2:0/0 = 0
2:0/0/texture_origin = Vector2i(0, 3)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_w46yf"]
texture = ExtResource("8_tscyy")
0:0/0 = 0
0:0/0/texture_origin = Vector2i(0, 4)
0:1/0 = 0
0:1/0/texture_origin = Vector2i(0, 4)
1:1/0 = 0
1:1/0/texture_origin = Vector2i(0, 4)
2:1/0 = 0
2:1/0/texture_origin = Vector2i(0, 4)
3:1/0 = 0
3:1/0/texture_origin = Vector2i(0, 4)
3:0/0 = 0
3:0/0/texture_origin = Vector2i(0, 4)
2:0/0 = 0
2:0/0/texture_origin = Vector2i(0, 4)
1:0/0 = 0
1:0/0/texture_origin = Vector2i(0, 4)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_7cbry"]
texture = ExtResource("9_dx80t")
0:0/0 = 0
0:0/0/texture_origin = Vector2i(0, 4)
0:1/0 = 0
0:1/0/texture_origin = Vector2i(0, 4)
1:1/0 = 0
1:1/0/texture_origin = Vector2i(0, 4)
2:1/0 = 0
2:1/0/texture_origin = Vector2i(0, 4)
2:0/0 = 0
2:0/0/texture_origin = Vector2i(0, 4)
1:0/0 = 0
1:0/0/texture_origin = Vector2i(0, 4)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_0vrje"]
texture = ExtResource("10_ftm4e")
0:0/0 = 0
0:0/0/texture_origin = Vector2i(0, 4)
0:1/0 = 0
0:1/0/texture_origin = Vector2i(0, 4)
1:1/0 = 0
1:1/0/texture_origin = Vector2i(0, 4)
2:1/0 = 0
2:1/0/texture_origin = Vector2i(0, 4)
2:0/0 = 0
2:0/0/texture_origin = Vector2i(0, 4)
1:0/0 = 0
1:0/0/texture_origin = Vector2i(0, 4)
[resource]
tile_shape = 1
tile_layout = 5
tile_size = Vector2i(16, 8)
sources/0 = SubResource("TileSetAtlasSource_dxrqb")
sources/1 = SubResource("TileSetAtlasSource_j7eew")
sources/2 = SubResource("TileSetAtlasSource_w6tof")
sources/3 = SubResource("TileSetAtlasSource_5o051")
sources/4 = SubResource("TileSetAtlasSource_sneuq")
sources/5 = SubResource("TileSetAtlasSource_l16yl")
sources/6 = SubResource("TileSetAtlasSource_ffqbc")
sources/7 = SubResource("TileSetAtlasSource_w46yf")
sources/8 = SubResource("TileSetAtlasSource_7cbry")
sources/9 = SubResource("TileSetAtlasSource_0vrje")
sources/10 = SubResource("TileSetAtlasSource_83p42")
sources/11 = SubResource("TileSetAtlasSource_mrgl4")
sources/12 = SubResource("TileSetAtlasSource_w6ttr")
sources/13 = SubResource("TileSetAtlasSource_jhyw0")

BIN
background.aseprite Normal file

Binary file not shown.

BIN
background.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

34
background.png.import Normal file
View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bccyjf2bn3mpj"
path="res://.godot/imported/background.png-98289422cd7d93003950872a7b97021f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://background.png"
dest_files=["res://.godot/imported/background.png-98289422cd7d93003950872a7b97021f.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

BIN
basic_tiles.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 768 B

34
basic_tiles.png.import Normal file
View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bdmao1k7ngu2m"
path="res://.godot/imported/basic_tiles.png-ab6e820af8e93675a192b178dda8db52.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://basic_tiles.png"
dest_files=["res://.godot/imported/basic_tiles.png-ab6e820af8e93675a192b178dda8db52.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

BIN
button.aseprite Normal file

Binary file not shown.

BIN
button.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 B

34
button.png.import Normal file
View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cpawfy44acsxc"
path="res://.godot/imported/button.png-234620e182281afdeb4aab4d2ed4f8a7.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://button.png"
dest_files=["res://.godot/imported/button.png-234620e182281afdeb4aab4d2ed4f8a7.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

46
camera.gd Normal file
View file

@ -0,0 +1,46 @@
extends Camera2D
# Variables to control zoom limits and speed
var zoom_min = 0.5
var zoom_max = 2.0
var zoom_speed = 0.1
# Variables for panning
var is_panning = false
var last_mouse_position = Vector2()
var pan_speed = 1000
@onready var camera_target = position
func _process(delta: float) -> void:
position = position.move_toward(camera_target, delta * pan_speed)
func _input(event):
if event is InputEventMouseButton:
# Zoom in (scroll up)
if event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
zoom -= Vector2(zoom_speed, zoom_speed)
# Zoom out (scroll down)
elif event.button_index == MOUSE_BUTTON_WHEEL_UP:
zoom += Vector2(zoom_speed, zoom_speed)
# Clamp the zoom value to stay within zoom_min and zoom_max
zoom.x = clamp(zoom.x, zoom_min, zoom_max)
zoom.y = clamp(zoom.y, zoom_min, zoom_max)
# Handle panning with right click
if event.button_index == MOUSE_BUTTON_RIGHT:
if event.pressed:
is_panning = true
last_mouse_position = Cursor.mouse_control.position
else:
is_panning = false
# Handle panning movement
if is_panning and event is InputEventMouseMotion:
var mouse_movement = last_mouse_position - Cursor.mouse_control.position
camera_target += mouse_movement / zoom.x
#global_position += mouse_movement * zoom.x # Adjust movement based on zoom level
last_mouse_position = Cursor.mouse_control.position

BIN
cloud.aseprite Normal file

Binary file not shown.

BIN
cloud.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 B

34
cloud.png.import Normal file
View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d4abji2r2gx7i"
path="res://.godot/imported/cloud.png-dee661b88ca2a546a70f524ffe8e0d75.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://cloud.png"
dest_files=["res://.godot/imported/cloud.png-dee661b88ca2a546a70f524ffe8e0d75.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

View file

@ -1,7 +1,7 @@
[gd_scene load_steps=4 format=3 uid="uid://qecwga1b4yqn"] [gd_scene load_steps=4 format=3 uid="uid://qecwga1b4yqn"]
[ext_resource type="Script" path="res://components/Cursor/cursor.gd" id="1_nmkwm"] [ext_resource type="Script" path="res://components/Cursor/cursor.gd" id="1_nmkwm"]
[ext_resource type="Texture2D" uid="uid://cfhqgy3ueghye" path="res://components/Cursor/cursor_pixel.png" id="2_30mna"] [ext_resource type="Texture2D" uid="uid://dlg0b4gpglj1v" path="res://components/Cursor/cursor_pixel_2.png" id="2_bjcic"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_4cq27"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_4cq27"]
@ -15,8 +15,9 @@ script = ExtResource("1_nmkwm")
shape = SubResource("RectangleShape2D_4cq27") shape = SubResource("RectangleShape2D_4cq27")
[node name="Sprite2D" type="Sprite2D" parent="MouseControl"] [node name="Sprite2D" type="Sprite2D" parent="MouseControl"]
scale = Vector2(0.15625, 0.15625) position = Vector2(7, 7)
texture = ExtResource("2_30mna") texture = ExtResource("2_bjcic")
offset = Vector2(3, 3)
[connection signal="area_entered" from="MouseControl" to="." method="_on_mouse_control_area_entered"] [connection signal="area_entered" from="MouseControl" to="." method="_on_mouse_control_area_entered"]
[connection signal="area_exited" from="MouseControl" to="." method="_on_mouse_control_area_exited"] [connection signal="area_exited" from="MouseControl" to="." method="_on_mouse_control_area_exited"]

View file

@ -9,16 +9,41 @@ const CURSOR = preload("res://components/Cursor/cursor.png")
var cursor_state = "normal" var cursor_state = "normal"
var rotation_tween var rotation_tween
var cursor_tween
func _ready() -> void: func _ready() -> void:
Persister.data_persisted.connect(_on_data_persisted) Persister.data_persisted.connect(_on_data_persisted)
Triggerer.listen("fire", _on_fire)
func _on_fire(_data): func _on_fire(_data):
if cursor_state == "ui": if cursor_state == "ui":
return return
sprite_2d.scale = Vector2.ONE * 1.25 * 0.156
func _on_release():
var overlapping_areas = mouse_control.get_overlapping_areas()
overlapping_areas.sort_custom(func(a, b):
return a.z_index > b.z_index
)
for area in overlapping_areas:
if area.has_method("_on_released"):
var current_node = area
var hidden = false
while current_node:
if "modulate" in current_node:
if current_node.modulate.a < 1:
hidden = true
break
current_node = current_node.get_parent()
if hidden:
continue
if not area._on_released():
break
func _on_click(): func _on_click():
@ -36,6 +61,10 @@ func _on_click():
if current_node.modulate.a < 1: if current_node.modulate.a < 1:
hidden = true hidden = true
break break
if "visible" in current_node:
if not current_node.visible:
hidden = true
break
current_node = current_node.get_parent() current_node = current_node.get_parent()
if hidden: if hidden:
@ -59,6 +88,10 @@ func _on_rclick():
if current_node.modulate.a < 1: if current_node.modulate.a < 1:
hidden = true hidden = true
break break
if "visible" in current_node:
if not current_node.visible:
hidden = true
break
current_node = current_node.get_parent() current_node = current_node.get_parent()
if hidden: if hidden:
@ -69,6 +102,8 @@ func _on_rclick():
func _process(delta): func _process(delta):
if Input.is_action_just_released("lclick"):
_on_release()
if Input.is_action_just_pressed("lclick"): if Input.is_action_just_pressed("lclick"):
_on_click() _on_click()
if Input.is_action_just_pressed("rclick"): if Input.is_action_just_pressed("rclick"):
@ -76,12 +111,38 @@ func _process(delta):
Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN) Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN)
mouse_control.position = mouse_control.get_global_mouse_position() mouse_control.position = mouse_control.get_global_mouse_position()
if not Input.is_action_pressed("lclick"):
sprite_2d.rotation = move_toward(sprite_2d.rotation, 0, delta)
sprite_2d.scale = sprite_2d.scale.move_toward(Vector2.ONE, delta)
else:
sprite_2d.scale = sprite_2d.scale.move_toward(Vector2.ONE * 0.9, delta * 2)
sprite_2d.rotation = move_toward(sprite_2d.rotation, -0.1, delta * 2)
func _on_mouse_control_area_entered(area): func _on_mouse_control_area_entered(area):
if area.has_method("_on_hovered"): if area.has_method("_on_hovered"):
var current_node = area
var hidden = false
while current_node:
if "visible" in current_node:
if not current_node.visible:
hidden = true
break
current_node = current_node.get_parent()
if not hidden:
area._on_hovered() area._on_hovered()
func _on_mouse_control_area_exited(area): func _on_mouse_control_area_exited(area):
if area.has_method("_on_unhovered"): if area.has_method("_on_unhovered"):
var current_node = area
var hidden = false
while current_node:
if "visible" in current_node:
if not current_node.visible:
hidden = true
break
current_node = current_node.get_parent()
if not hidden:
area._on_unhovered() area._on_unhovered()

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://da65ydeo701gm"
path="res://.godot/imported/cursor_pixel_2-sheet.png-34d1a4b260030c4f8614c4b528509bf1.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://components/Cursor/cursor_pixel_2-sheet.png"
dest_files=["res://.godot/imported/cursor_pixel_2-sheet.png-34d1a4b260030c4f8614c4b528509bf1.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dlg0b4gpglj1v"
path="res://.godot/imported/cursor_pixel_2.png-642708b7cfb3eb8b33fd4ecdd3a72582.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://components/Cursor/cursor_pixel_2.png"
dest_files=["res://.godot/imported/cursor_pixel_2.png-642708b7cfb3eb8b33fd4ecdd3a72582.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 462 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dnm8kht7kq14y"
path="res://.godot/imported/cursor_pixel_disabled.png-4037da17bc38b518657b4499e968b087.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://components/Cursor/cursor_pixel_disabled.png"
dest_files=["res://.godot/imported/cursor_pixel_disabled.png-4037da17bc38b518657b4499e968b087.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

View file

@ -5,6 +5,7 @@ signal clicked
signal hovered signal hovered
signal unhovered signal unhovered
signal rclicked signal rclicked
signal released
@export var passthrough = false @export var passthrough = false
@ -18,6 +19,10 @@ func _on_clicked():
clicked.emit() clicked.emit()
return passthrough return passthrough
func _on_released():
released.emit()
return passthrough
func _on_rclicked(): func _on_rclicked():
rclicked.emit() rclicked.emit()
return passthrough return passthrough

View file

@ -46,7 +46,7 @@ func persist_data(key: String, value, category := PersisterEnums.Scope.RUN) -> v
if _persisted[category].has(key) and _persisted[category][key] == value: if _persisted[category].has(key) and _persisted[category][key] == value:
return return
_info("Set key <%s> in category {%s} to value |%s|" % [key, _get_category_name(category), value]) #_info("Set key <%s> in category {%s} to value |%s|" % [key, _get_category_name(category), value])
_persisted[category][key] = value _persisted[category][key] = value
if _triggerer: if _triggerer:

View file

@ -13,7 +13,7 @@ var _connections = {}
## Trigger an event to be read in by other objects ## Trigger an event to be read in by other objects
func trigger(key: String, data: Dictionary = {}) -> void: func trigger(key: String, data: Dictionary = {}) -> void:
_info("Triggered key ∧%s" % [key]) #_info("Triggered key ∧%s∧" % [key])
data.trigger = key data.trigger = key

BIN
cover Copy.aseprite Normal file

Binary file not shown.

BIN
cover.aseprite Normal file

Binary file not shown.

BIN
cover.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 KiB

BIN
cover.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 KiB

34
cover.png.import Normal file
View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://oosowfc5qql6"
path="res://.godot/imported/cover.png-7415a2400197f69905d305dff229e3ab.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://cover.png"
dest_files=["res://.godot/imported/cover.png-7415a2400197f69905d305dff229e3ab.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

BIN
cover2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 KiB

34
cover2.png.import Normal file
View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b7ko742xcklsn"
path="res://.godot/imported/cover2.png-2ef2bf54704d9d001b82b1ad156dc4f6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://cover2.png"
dest_files=["res://.godot/imported/cover2.png-2ef2bf54704d9d001b82b1ad156dc4f6.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

BIN
cover4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 KiB

34
cover4.png.import Normal file
View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://daol7g1lylsmt"
path="res://.godot/imported/cover4.png-19fae104c6b0976f56a020466ca17034.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://cover4.png"
dest_files=["res://.godot/imported/cover4.png-19fae104c6b0976f56a020466ca17034.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

BIN
cover5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 369 KiB

34
cover5.png.import Normal file
View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b2c4geob4lf3q"
path="res://.godot/imported/cover5.png-0c496ad1d8b7fd577db0c14a195a8435.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://cover5.png"
dest_files=["res://.godot/imported/cover5.png-0c496ad1d8b7fd577db0c14a195a8435.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

BIN
cover6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 KiB

34
cover6.png.import Normal file
View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b516bcl3xf6eg"
path="res://.godot/imported/cover6.png-e6099f9f4c556f35ef81470604604e2b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://cover6.png"
dest_files=["res://.godot/imported/cover6.png-e6099f9f4c556f35ef81470604604e2b.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

3
default_bus_layout.tres Normal file
View file

@ -0,0 +1,3 @@
[gd_resource type="AudioBusLayout" format=3 uid="uid://dnndw0lm0ddb5"]
[resource]

View file

@ -25,7 +25,7 @@
"state": { "state": {
"type": "markdown", "type": "markdown",
"state": { "state": {
"file": "Matine before the Great Storm.md", "file": "Buildings/Index.md",
"mode": "source", "mode": "source",
"source": false "source": false
} }
@ -112,7 +112,7 @@
"state": { "state": {
"type": "backlink", "type": "backlink",
"state": { "state": {
"file": "Matine before the Great Storm.md", "file": "Buildings/Index.md",
"collapseAll": false, "collapseAll": false,
"extraContext": false, "extraContext": false,
"sortOrder": "alphabetical", "sortOrder": "alphabetical",
@ -129,7 +129,7 @@
"state": { "state": {
"type": "outgoing-link", "type": "outgoing-link",
"state": { "state": {
"file": "Matine before the Great Storm.md", "file": "Buildings/Index.md",
"linksCollapsed": false, "linksCollapsed": false,
"unlinkedCollapsed": true "unlinkedCollapsed": true
} }
@ -152,7 +152,7 @@
"state": { "state": {
"type": "outline", "type": "outline",
"state": { "state": {
"file": "Matine before the Great Storm.md" "file": "Buildings/Index.md"
} }
} }
} }
@ -165,18 +165,18 @@
}, },
"left-ribbon": { "left-ribbon": {
"hiddenItems": { "hiddenItems": {
"switcher:Abrir selector rápido": false, "switcher:Open quick switcher": false,
"graph:Abrir vista gráfica": false, "graph:Open graph view": false,
"canvas:Crear nuevo lienzo": false, "canvas:Create new canvas": false,
"daily-notes:Abrir la nota de hoy": false, "daily-notes:Open today's daily note": false,
"templates:Insertar plantilla": false, "templates:Insert template": false,
"command-palette:Abrir paleta de comandos": false "command-palette:Open command palette": false
} }
}, },
"active": "ced1d8fedf6a4457", "active": "ced1d8fedf6a4457",
"lastOpenFiles": [ "lastOpenFiles": [
"Buildings/Index.md",
"Matine before the Great Storm.md", "Matine before the Great Storm.md",
"Buildings/Index.md",
"Lore", "Lore",
"Buildings", "Buildings",
"Bienvenido.md" "Bienvenido.md"

18
error_ping.gd Normal file
View file

@ -0,0 +1,18 @@
extends ColorRect
var type
func _ready() -> void:
scale = Vector2.ZERO
var tween = create_tween()
tween.set_ease(Tween.EASE_IN_OUT)
tween.set_trans(Tween.TRANS_QUAD)
tween.set_loops()
tween.tween_property(self, "modulate", Color(1, 1, 1, 0.75), 1)
tween.tween_property(self, "modulate", Color.WHITE, 1)
var tween2 = create_tween()
tween2.set_ease(Tween.EASE_OUT)
tween2.set_trans(Tween.TRANS_BACK)
tween2.tween_property(self, "scale", Vector2.ONE, 0.5)

106
export_presets.cfg Normal file
View file

@ -0,0 +1,106 @@
[preset.0]
name="Web"
platform="Web"
runnable=true
advanced_options=false
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter="*.txt"
exclude_filter=""
export_path="builds/web/index.html"
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.0.options]
custom_template/debug=""
custom_template/release=""
variant/extensions_support=false
variant/thread_support=false
vram_texture_compression/for_desktop=true
vram_texture_compression/for_mobile=false
html/export_icon=true
html/custom_html_shell=""
html/head_include=""
html/canvas_resize_policy=2
html/focus_canvas_on_start=true
html/experimental_virtual_keyboard=false
progressive_web_app/enabled=false
progressive_web_app/ensure_cross_origin_isolation_headers=true
progressive_web_app/offline_page=""
progressive_web_app/display=1
progressive_web_app/orientation=0
progressive_web_app/icon_144x144=""
progressive_web_app/icon_180x180=""
progressive_web_app/icon_512x512=""
progressive_web_app/background_color=Color(0, 0, 0, 1)
[preset.1]
name="Windows Desktop"
platform="Windows Desktop"
runnable=true
advanced_options=false
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter="*.txt"
exclude_filter=""
export_path="builds/floodworks-WIN/Floodworks.exe"
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.1.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/s3tc_bptc=true
texture_format/etc2_astc=false
binary_format/architecture="x86_64"
codesign/enable=false
codesign/timestamp=true
codesign/timestamp_server_url=""
codesign/digest_algorithm=1
codesign/description=""
codesign/custom_options=PackedStringArray()
application/modify_resources=true
application/icon=""
application/console_wrapper_icon=""
application/icon_interpolation=4
application/file_version=""
application/product_version=""
application/company_name=""
application/product_name=""
application/file_description=""
application/copyright=""
application/trademarks=""
application/export_angle=0
application/export_d3d12=0
application/d3d12_agility_sdk_multiarch=true
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}'
$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}'
$trigger = New-ScheduledTaskTrigger -Once -At 00:00
$settings = New-ScheduledTaskSettingsSet
$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true
Start-ScheduledTask -TaskName godot_remote_debug
while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 }
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue"
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
Remove-Item -Recurse -Force '{temp_dir}'"

BIN
heavy version.wav Normal file

Binary file not shown.

24
heavy version.wav.import Normal file
View file

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://dk2thkxy31doi"
path="res://.godot/imported/heavy version.wav-fdc1a92f7e5068e1acde6ae77b88579c.sample"
[deps]
source_file="res://heavy version.wav"
dest_files=["res://.godot/imported/heavy version.wav-fdc1a92f7e5068e1acde6ae77b88579c.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=2
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0

238
info_window.gd Normal file
View file

@ -0,0 +1,238 @@
extends Control
var window_tween
@onready var icon: TextureRect = $Icon
@onready var title: RichTextLabel = $Title
@onready var subtitle: RichTextLabel = $Subtitle
@onready var description: RichTextLabel = $Description
@onready var rich_text_label_2: RichTextLabel = $ResourceAllocation/RichTextLabel2
@onready var resource_allocation: Control = $ResourceAllocation
@onready var description_3: RichTextLabel = $ResourceAllocation/Description3
@onready var color_rect_5: ColorRect = $ColorRect5
@onready var color_rect_2: ColorRect = $ResourceAllocation/ColorRect2
@onready var color_rect_3: ColorRect = $ResourceAllocation/ColorRect3
@onready var color_rect_4: ColorRect = $ResourceAllocation/ColorRect4
@onready var description_2: RichTextLabel = $ResourceAllocation/Description2
@onready var color_rect_6: ColorRect = $ColorRect6
var recent_data
var close_tween
var minus_tween
var plus_tween
var destroy_tween
func _ready() -> void:
Triggerer.listen("show_info", _show_info_window)
Triggerer.listen("hide_info", _hide_info_window)
scale = Vector2.ZERO
Triggerer.listen("flood_level", _on_flood_level)
func _on_flood_level(data):
var value = int(data.value)
if recent_data and value >= recent_data.level:
Triggerer.trigger("hide_info")
func _show_info_window(data):
visible = true
var building_data = Data.data.buildings[data.key]
if window_tween:
window_tween.kill()
window_tween = create_tween()
window_tween.set_ease(Tween.EASE_IN)
window_tween.set_trans(Tween.TRANS_QUAD)
window_tween.tween_property(self, "scale", Vector2.ZERO, 0.25)
window_tween.tween_callback(func():
title.text = "[center]%s" % [building_data.name]
icon.texture = Data.data.images[data.key]
subtitle.text = "[center]%s" % [building_data.short if building_data.has("short") else ""]
if data.has("workers"):
rich_text_label_2.text = "[center]%d/%d" % [data.workers, data.max_workers]
description_3.text = "[center]EFFICIENCY: %d%%" % [data.efficiency]
resource_allocation.visible = true
else:
resource_allocation.visible = false
recent_data = data
)
window_tween.set_ease(Tween.EASE_OUT)
window_tween.set_trans(Tween.TRANS_BACK)
window_tween.tween_property(self, "scale", Vector2.ONE, 0.5)
func _process(delta: float) -> void:
if Input.is_action_just_pressed("rclick"):
_hide_info_window({})
if recent_data and recent_data.has("progress"):
color_rect_4.scale.x = (float(recent_data.progress) / Data.data.buildings[recent_data.key].time)
if recent_data and recent_data.has("workers") and recent_data.workers > 0:
if recent_data.efficiency == 0:
description_2.text = "[center]STATUS: NO RESOURCES"
else:
description_2.text = "[center]STATUS: WORKING"
else:
description_2.text = "[center]STATUS: STOPPED"
if recent_data and recent_data.has("workers"):
description_3.text = "[center]EFFICIENCY: %d%%" % [recent_data.efficiency]
rich_text_label_2.text = "[center]%d/%d" % [recent_data.workers, recent_data.max_workers]
func _hide_info_window(_data):
if window_tween:
window_tween.kill()
window_tween = create_tween()
window_tween.set_ease(Tween.EASE_IN)
window_tween.set_trans(Tween.TRANS_QUAD)
window_tween.tween_property(self, "scale", Vector2.ZERO, 0.25)
func _on_mouse_handler_clicked() -> void:
if recent_data.workers > 0:
recent_data.workers -= 1
Persister.change_value("avail_population", 1)
rich_text_label_2.text = "[center]%d/%d" % [recent_data.workers, recent_data.max_workers]
if minus_tween:
minus_tween.kill()
minus_tween = create_tween()
minus_tween.set_trans(Tween.TRANS_QUAD)
minus_tween.tween_property(color_rect_2, "scale", Vector2.ONE * 0.95, 0.125)
minus_tween.tween_property(color_rect_2, "scale", Vector2.ONE, 0.125)
func _on_mouse_handler_hovered() -> void:
if minus_tween:
minus_tween.kill()
minus_tween = create_tween()
minus_tween.set_ease(Tween.EASE_OUT)
minus_tween.set_trans(Tween.TRANS_BACK)
minus_tween.tween_property(color_rect_2, "scale", Vector2.ONE * 1.05, 0.25)
func _on_mouse_handler_unhovered() -> void:
if minus_tween:
minus_tween.kill()
minus_tween = create_tween()
minus_tween.set_ease(Tween.EASE_OUT)
minus_tween.set_trans(Tween.TRANS_QUAD)
minus_tween.tween_property(color_rect_2, "scale", Vector2.ONE, 0.25)
func _on_mouse_handler_2_clicked() -> void:
if recent_data.workers < recent_data.max_workers and Persister.get_value("avail_population") > 0:
recent_data.workers += 1
Persister.change_value("avail_population", -1)
rich_text_label_2.text = "[center]%d/%d" % [recent_data.workers, recent_data.max_workers]
if plus_tween:
plus_tween.kill()
plus_tween = create_tween()
plus_tween.set_trans(Tween.TRANS_QUAD)
plus_tween.tween_property(color_rect_3, "scale", Vector2.ONE * 0.95, 0.125)
plus_tween.tween_property(color_rect_3, "scale", Vector2.ONE, 0.125)
func _on_mouse_handler_2_hovered() -> void:
if plus_tween:
plus_tween.kill()
plus_tween = create_tween()
plus_tween.set_ease(Tween.EASE_OUT)
plus_tween.set_trans(Tween.TRANS_BACK)
plus_tween.tween_property(color_rect_3, "scale", Vector2.ONE * 1.05, 0.25)
func _on_mouse_handler_2_unhovered() -> void:
if plus_tween:
plus_tween.kill()
plus_tween = create_tween()
plus_tween.set_ease(Tween.EASE_OUT)
plus_tween.set_trans(Tween.TRANS_QUAD)
plus_tween.tween_property(color_rect_3, "scale", Vector2.ONE, 0.25)
func _on_mouse_handler_3_clicked() -> void:
Triggerer.trigger("hide_info")
if close_tween:
close_tween.kill()
close_tween = create_tween()
close_tween.set_trans(Tween.TRANS_QUAD)
close_tween.tween_property(color_rect_5, "scale", Vector2.ONE * 0.95, 0.125)
close_tween.tween_property(color_rect_5, "scale", Vector2.ONE, 0.125)
func _on_mouse_handler_3_hovered() -> void:
if close_tween:
close_tween.kill()
close_tween = create_tween()
close_tween.set_ease(Tween.EASE_OUT)
close_tween.set_trans(Tween.TRANS_BACK)
close_tween.tween_property(color_rect_5, "scale", Vector2.ONE * 1.05, 0.25)
func _on_mouse_handler_3_unhovered() -> void:
if close_tween:
close_tween.kill()
close_tween = create_tween()
close_tween.set_ease(Tween.EASE_OUT)
close_tween.set_trans(Tween.TRANS_QUAD)
close_tween.tween_property(color_rect_5, "scale", Vector2.ONE, 0.25)
func _on_destroy_handler_clicked() -> void:
Triggerer.trigger("destroy", {"tile": recent_data.coords})
Triggerer.trigger("hide_info")
var data = Data.data.buildings[recent_data.key]
if data.has("cost"):
for key in data.cost:
Persister.change_value(key, ceil(data.cost[key]/2))
if destroy_tween:
destroy_tween.kill()
destroy_tween = create_tween()
destroy_tween.set_trans(Tween.TRANS_QUAD)
destroy_tween.tween_property(color_rect_6, "scale", Vector2.ONE * 0.95, 0.125)
destroy_tween.tween_property(color_rect_6, "scale", Vector2.ONE, 0.125)
func _on_destroy_handler_hovered() -> void:
if destroy_tween:
destroy_tween.kill()
destroy_tween = create_tween()
destroy_tween.set_ease(Tween.EASE_OUT)
destroy_tween.set_trans(Tween.TRANS_BACK)
destroy_tween.tween_property(color_rect_6, "scale", Vector2.ONE * 1.05, 0.25)
func _on_destroy_handler_unhovered() -> void:
if close_tween:
close_tween.kill()
destroy_tween = create_tween()
destroy_tween.set_ease(Tween.EASE_OUT)
destroy_tween.set_trans(Tween.TRANS_QUAD)
destroy_tween.tween_property(color_rect_6, "scale", Vector2.ONE, 0.25)

BIN
iso_building.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

34
iso_building.png.import Normal file
View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bsrh0u02bckhy"
path="res://.godot/imported/iso_building.png-07fa6cdf1b52a70a76ecc45b8890244f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://iso_building.png"
dest_files=["res://.godot/imported/iso_building.png-07fa6cdf1b52a70a76ecc45b8890244f.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

BIN
iso_tile.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 B

34
iso_tile.png.import Normal file
View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bvn5lewpp7pmd"
path="res://.godot/imported/iso_tile.png-22fe1886c3f7d12f0ecefdbde6a3adae.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://iso_tile.png"
dest_files=["res://.godot/imported/iso_tile.png-22fe1886c3f7d12f0ecefdbde6a3adae.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

BIN
light version final(1).wav Normal file

Binary file not shown.

View file

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://dfxndvkdey800"
path="res://.godot/imported/light version final(1).wav-a07d786482da1a06a8f63e7795c38e32.sample"
[deps]
source_file="res://light version final(1).wav"
dest_files=["res://.godot/imported/light version final(1).wav-a07d786482da1a06a8f63e7795c38e32.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0

105
main.gd
View file

@ -1 +1,106 @@
extends Node2D extends Node2D
@onready var building_levels = [
$Node2D/Level2/BuildingLevel2,
$Node2D/Level3/BuildingLevel3,
$Node2D/Level4/BuildingLevel4,
$Node2D/Level5/BuildingLevel5,
$Node2D/Node2D/BuildingLevel6
]
@onready var night: ColorRect = $CanvasLayer/Night
var night_tween
var timer = 0
var timer2 = 0
func _ready() -> void:
Triggerer.listen("game_started", _on_game_started)
Triggerer.listen("destroy", _on_destroy)
func _on_game_started(_data):
if night_tween:
night_tween.kill()
night_tween = create_tween()
night_tween.set_loops()
night_tween.tween_property(night, "modulate", Color.TRANSPARENT, 5)
night_tween.tween_interval(15)
night_tween.tween_property(night, "modulate", Color.WHITE, 5)
func _process(delta: float) -> void:
if Persister.get_value("win") or Persister.get_value("lose"):
return
if Persister.get_value("population") <= 0:
Persister.persist_data("lose", true)
if Input.is_action_just_pressed("mclick"):
for build_level in building_levels:
build_level.pick_block()
if Input.is_action_just_released("lclick"):
if Persister.get_value("drag_mode") and Persister.get_value("building_mode"):
for build_level in building_levels:
build_level.place_building()
Persister.persist_data("building_mode", false)
var building_mode = Persister.get_value("building_mode")
if Input.is_action_just_pressed("lclick") and not Persister.get_value("drag_mode"):
if building_mode:
for build_level in building_levels:
build_level.place_building()
else:
for build_level in building_levels:
build_level.show_info_building()
Persister.persist_data("building_mode", false)
if Input.is_action_just_pressed("rclick"):
Persister.persist_data("building_mode", false)
if Persister.get_value("game_started"):
timer += delta
timer2 += delta
if timer >= 5:
var pop = Persister.get_value("population")
var pop_scale = ceil(pop / 5.0)
if Persister.get_value("food") > pop_scale and Persister.get_value("water") > pop_scale:
Persister.change_value("food", -pop_scale)
Persister.change_value("water", -pop_scale)
if Persister.get_value("population") < Persister.get_value("max_population"):
Persister.change_value("population", 1)
Persister.change_value("avail_population", 1)
elif Persister.get_value("population") > Persister.get_value("max_population"):
Persister.change_value("population", -1)
if Persister.get_value("avail_population") > 0:
Persister.change_value("avail_population", -1)
else:
_kill_citizen()
else:
Persister.change_value("population", -1)
if Persister.get_value("avail_population") > 0:
Persister.change_value("avail_population", -1)
else:
_kill_citizen()
timer -= 5
func _on_destroy(data):
var tile = data.tile
for build_level in building_levels:
build_level.destroy(tile)
func _kill_citizen():
for build_level in building_levels:
var val = build_level.kill_citizen()
if val:
return

BIN
mask.aseprite Normal file

Binary file not shown.

BIN
mask.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 B

34
mask.png.import Normal file
View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bcj5syslhrfsx"
path="res://.godot/imported/mask.png-b945516e6475612c1c4c3b4f8dd0bdc6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://mask.png"
dest_files=["res://.godot/imported/mask.png-b945516e6475612c1c4c3b4f8dd0bdc6.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

BIN
meter.aseprite Normal file

Binary file not shown.

32
meter.gd Normal file
View file

@ -0,0 +1,32 @@
extends TextureRect
@onready var globals = Data.data.globals
@onready var flood_levels = globals.flood_levels
var start_pos = Vector2(9, 5)
const FLOOD_ICON = preload("res://FloodIcon.tscn")
@onready var texture_rect_2: TextureRect = $TextureRect2
var flood_icons = []
func _ready() -> void:
var i = 0
for level in flood_levels:
var new_flood_icon = FLOOD_ICON.instantiate()
new_flood_icon.position = start_pos + Vector2(i * 30, 0)
new_flood_icon.text = level
flood_icons.push_back(new_flood_icon)
texture_rect_2.add_child(new_flood_icon)
i += 1
func _process(delta: float) -> void:
var i = 0
for flood_icon in flood_icons:
flood_icon.position = start_pos + Vector2(i * 30 - (Persister.get_value("game_time", PersisterEnums.Scope.UNKNOWN, 0) / 1000.0 * 30.0 / 25.0), 0)
i += 1

BIN
meter.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

34
meter.png.import Normal file
View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cqmbbg06vdb2r"
path="res://.godot/imported/meter.png-ed3ca4a4494efbf7579266c5b98bbd8e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://meter.png"
dest_files=["res://.godot/imported/meter.png-ed3ca4a4494efbf7579266c5b98bbd8e.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

25
name_icon.gd Normal file
View file

@ -0,0 +1,25 @@
extends RichTextLabel
var tween
var selected = true
func _ready() -> void:
scale = Vector2.ZERO
tween = create_tween()
tween.set_ease(Tween.EASE_OUT)
tween.set_trans(Tween.TRANS_BACK)
tween.tween_property(self, "scale", Vector2.ONE, 0.25)
func _deselect() -> void:
selected = false
if tween:
tween.kill()
tween = create_tween()
tween.set_ease(Tween.EASE_OUT)
tween.set_trans(Tween.TRANS_QUAD)
tween.tween_property(self, "scale", Vector2.ZERO, 0.25)
tween.tween_callback(func():
queue_free()
)

View file

@ -0,0 +1,8 @@
name: Conduit
short: Boosts Production
type: production
boost: 5
time: 10
cost[]
stone: 3
wood: 2

View file

@ -0,0 +1,10 @@
name: Field
short: Produces Wheat
type: utility
resource: wheat
resourcename: Wheat
time: 3
amount: 1
max_workers: 6
cost[]
wood: 2

View file

@ -0,0 +1,12 @@
name: Farmhouse
short: Turns Wheat to Food
type: utility
resource: food
time: 6
amount: 1
needs: wheat
max_workers: 6
resourcename: Food
cost[]
wood: 4
stone: 8

View file

@ -0,0 +1,7 @@
name: House
type: housing
short: Space for 5 People
amount: 5
cost[]
wood: 18
stone: 10

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c3t66sxwk078m"
path="res://.godot/imported/essencecompressor.png-a45065e3eea03ba6fb01c8afde8da972.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://parts/buildings/images/essencecompressor.png"
dest_files=["res://.godot/imported/essencecompressor.png-a45065e3eea03ba6fb01c8afde8da972.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dq1nxn0olq4a2"
path="res://.godot/imported/foodgathering.png-64bc2c4bdac412bbc303883b7381019e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://parts/buildings/images/foodgathering.png"
dest_files=["res://.godot/imported/foodgathering.png-64bc2c4bdac412bbc303883b7381019e.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://clqov5mu3bpaw"
path="res://.godot/imported/foodprocessing.png-93b159c111f7b301f0dbec88a0beeca7.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://parts/buildings/images/foodprocessing.png"
dest_files=["res://.godot/imported/foodprocessing.png-93b159c111f7b301f0dbec88a0beeca7.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dyhnvokmhlapt"
path="res://.godot/imported/house.png-1cede27122f87d242275cf359539f076.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://parts/buildings/images/house.png"
dest_files=["res://.godot/imported/house.png-1cede27122f87d242275cf359539f076.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dt43okssvt2ay"
path="res://.godot/imported/quarter.png-6f5b23f21d2704e7f7b52b6cf64e7c7e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://parts/buildings/images/quarter.png"
dest_files=["res://.godot/imported/quarter.png-6f5b23f21d2704e7f7b52b6cf64e7c7e.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bq1pxqo5u270n"
path="res://.godot/imported/ruins.png-d04f8883378a9d2a2942e00c3b80056b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://parts/buildings/images/ruins.png"
dest_files=["res://.godot/imported/ruins.png-d04f8883378a9d2a2942e00c3b80056b.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 375 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dc67sn4g5g2gn"
path="res://.godot/imported/stoneminer.png-4d0191dd1b957fed4add4ef912fef27e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://parts/buildings/images/stoneminer.png"
dest_files=["res://.godot/imported/stoneminer.png-4d0191dd1b957fed4add4ef912fef27e.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bomiraglprech"
path="res://.godot/imported/tents.png-876fae9045d4187edeadba975c811045.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://parts/buildings/images/tents.png"
dest_files=["res://.godot/imported/tents.png-876fae9045d4187edeadba975c811045.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 B

Some files were not shown because too many files have changed in this diff Show more