Compare commits

..

63 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
06e3b6e229 Initial Documentation Commit 2024-09-09 21:44:50 +02: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
Ategon
df83dce3a6 Add basic building framework 2024-09-08 21:17:35 -04:00
83b519823f Merge pull request 'storm_manager' (#21) from storm_manager into main
Reviewed-on: #21
2024-09-08 23:19:18 +00:00
b53dcdb43f Add Cursor Disabled State Sprite 2024-09-09 01:16:13 +02:00
b3ebf482b5 Add new pixel mouse 2024-09-09 00:54:59 +02:00
781e9a452a Added placing buildings 2024-09-08 23:49:37 +03:00
191 changed files with 6324 additions and 47 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")

View file

@ -0,0 +1,7 @@
[plugin]
name="Laia Highlighter"
description="A highlighter to highting laia scripting files"
author="Ategon"
version="v1.0.0"
script="plugin.gd"

View file

@ -0,0 +1,81 @@
@tool
extends EditorPlugin
var dialogue_highlighter:DialogueHighlighter
func _enter_tree() -> void:
dialogue_highlighter = DialogueHighlighter.new()
var script_editor = EditorInterface.get_script_editor()
print(script_editor)
print(dialogue_highlighter)
script_editor.register_syntax_highlighter(dialogue_highlighter)
print(script_editor.get_current_script())
print(script_editor.get_open_scripts())
script_editor.goto_line(20)
func _exit_tree() -> void:
if is_instance_valid(dialogue_highlighter):
var script_editor = EditorInterface.get_script_editor()
script_editor.unregister_syntax_highlighter(dialogue_highlighter)
dialogue_highlighter = null
class DialogueHighlighter extends EditorSyntaxHighlighter:
func _get_name() -> String:
return "Laia"
func _get_supported_languages() -> PackedStringArray:
return ["TextFile"]
func _get_line_syntax_highlighting(line: int) -> Dictionary:
var color_map = {}
var text_editor = get_text_edit()
var str = text_editor.get_line(line)
# Comment
if str.strip_edges().begins_with("#"):
color_map[0] = { "color": Color.WEB_GRAY }
return color_map
# Key
var regex3 = RegEx.new()
regex3.compile("([a-zA-Z0-9_]+:).*")
var result3 = regex3.search(str)
if result3:
color_map[result3.get_start(1)] = { "color": Color.SEA_GREEN }
color_map[result3.get_end(1)] = { "color": Color.WHITE }
# Array
var regex = RegEx.new()
regex.compile("([a-zA-Z0-9_\\-])+\\[\\]")
var result = regex.search(str)
if result:
color_map[result.get_start()] = { "color": Color.CYAN }
color_map[result.get_end(1)] = { "color": Color.LIGHT_CYAN }
# Enum
var regex4 = RegEx.new()
regex4.compile("[a-zA-Z0-9_]+(\\.[a-zA-Z0-9_]+)")
var result4 = regex4.search(str)
if result4:
color_map[result4.get_start()] = { "color": Color.ORANGE }
color_map[result4.get_start(1)] = { "color": Color.ORANGE_RED }
color_map[result4.get_end()] = { "color": Color.WHITE }
# Color
var regex2 = RegEx.new()
regex2.compile("#[a-zA-Z0-9]+")
var result2 = regex2.search(str)
if result2:
color_map[result2.get_start()] = { "color": Color(result2.get_string()) }
return color_map

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

8
buildings/Building.tscn Normal file
View file

@ -0,0 +1,8 @@
[gd_scene load_steps=2 format=3 uid="uid://daicnavgi0gpo"]
[ext_resource type="Script" path="res://buildings/building.gd" id="1_db3yd"]
[node name="Building" type="Node2D"]
script = ExtResource("1_db3yd")
[node name="Sprite2D" type="Sprite2D" parent="."]

12
buildings/building.gd Normal file
View file

@ -0,0 +1,12 @@
extends Node2D
@onready var sprite_2d: Sprite2D = $Sprite2D
var key
@onready var data = Data.data.buildings[key]
#@onready var image = Data.data.images[key]
func _ready() -> void:
#sprite_2d.texture = image
pass

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://q4wsbkhirtoh" path="res://components/Cursor/cursor.png" id="2_luk0m"] [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_luk0m") 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,19 +102,47 @@ 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"):
_on_rclick() _on_rclick()
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"):
area._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()
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"):
area._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()

Binary file not shown.

After

Width:  |  Height:  |  Size: 511 B

View file

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

@ -0,0 +1 @@
{}

View file

@ -0,0 +1 @@
{}

View file

@ -0,0 +1,30 @@
{
"file-explorer": true,
"global-search": true,
"switcher": true,
"graph": true,
"backlink": true,
"canvas": true,
"outgoing-link": true,
"tag-pane": true,
"properties": false,
"page-preview": true,
"daily-notes": true,
"templates": true,
"note-composer": true,
"command-palette": true,
"slash-command": false,
"editor-status": true,
"bookmarks": true,
"markdown-importer": false,
"zk-prefixer": false,
"random-note": false,
"outline": true,
"word-count": true,
"slides": false,
"audio-recorder": false,
"workspaces": false,
"file-recovery": true,
"publish": false,
"sync": false
}

View file

@ -0,0 +1,20 @@
[
"file-explorer",
"global-search",
"switcher",
"graph",
"backlink",
"canvas",
"outgoing-link",
"tag-pane",
"page-preview",
"daily-notes",
"templates",
"note-composer",
"command-palette",
"editor-status",
"bookmarks",
"outline",
"word-count",
"file-recovery"
]

View file

@ -0,0 +1,22 @@
{
"collapse-filter": true,
"search": "",
"showTags": false,
"showAttachments": false,
"hideUnresolved": false,
"showOrphans": true,
"collapse-color-groups": true,
"colorGroups": [],
"collapse-display": true,
"showArrow": false,
"textFadeMultiplier": 0,
"nodeSizeMultiplier": 1,
"lineSizeMultiplier": 1,
"collapse-forces": true,
"centerStrength": 0.518713248970312,
"repelStrength": 10,
"linkStrength": 1,
"linkDistance": 250,
"scale": 1,
"close": true
}

View file

@ -0,0 +1,184 @@
{
"main": {
"id": "ef31c39114966eaa",
"type": "split",
"children": [
{
"id": "b4e7c82227a52b85",
"type": "tabs",
"children": [
{
"id": "716b36a353f94ac0",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "Buildings/Index.md",
"mode": "source",
"source": false
}
}
},
{
"id": "ced1d8fedf6a4457",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "Buildings/Index.md",
"mode": "source",
"source": false
}
}
}
],
"currentTab": 1
},
{
"id": "d0e13a6b9b66e58f",
"type": "tabs",
"children": [
{
"id": "5d72603a6c3d1821",
"type": "leaf",
"state": {
"type": "graph",
"state": {}
}
}
]
}
],
"direction": "vertical"
},
"left": {
"id": "8a86080a79bb451d",
"type": "split",
"children": [
{
"id": "19d5807e1472a50d",
"type": "tabs",
"children": [
{
"id": "f0b9c7182c679066",
"type": "leaf",
"state": {
"type": "file-explorer",
"state": {
"sortOrder": "alphabetical"
}
}
},
{
"id": "9f1fb877abc7d581",
"type": "leaf",
"state": {
"type": "search",
"state": {
"query": "",
"matchingCase": false,
"explainSearch": false,
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical"
}
}
},
{
"id": "65ac97af6514672d",
"type": "leaf",
"state": {
"type": "bookmarks",
"state": {}
}
}
]
}
],
"direction": "horizontal",
"width": 300
},
"right": {
"id": "1e79793f6bfbcfff",
"type": "split",
"children": [
{
"id": "c146cb52be8a309e",
"type": "tabs",
"children": [
{
"id": "f9536916b6786a64",
"type": "leaf",
"state": {
"type": "backlink",
"state": {
"file": "Buildings/Index.md",
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
"showSearch": false,
"searchQuery": "",
"backlinkCollapsed": false,
"unlinkedCollapsed": true
}
}
},
{
"id": "52a1d2f92e610d22",
"type": "leaf",
"state": {
"type": "outgoing-link",
"state": {
"file": "Buildings/Index.md",
"linksCollapsed": false,
"unlinkedCollapsed": true
}
}
},
{
"id": "d00a5c04180177ac",
"type": "leaf",
"state": {
"type": "tag",
"state": {
"sortOrder": "frequency",
"useHierarchy": true
}
}
},
{
"id": "76511cc895eea11b",
"type": "leaf",
"state": {
"type": "outline",
"state": {
"file": "Buildings/Index.md"
}
}
}
]
}
],
"direction": "horizontal",
"width": 300,
"collapsed": true
},
"left-ribbon": {
"hiddenItems": {
"switcher:Open quick switcher": false,
"graph:Open graph view": false,
"canvas:Create new canvas": false,
"daily-notes:Open today's daily note": false,
"templates:Insert template": false,
"command-palette:Open command palette": false
}
},
"active": "ced1d8fedf6a4457",
"lastOpenFiles": [
"Matine before the Great Storm.md",
"Buildings/Index.md",
"Lore",
"Buildings",
"Bienvenido.md"
]
}

View file

@ -0,0 +1,31 @@
## Resource Gathering
Stone Miner
Wood Cutter
Essence Compressor
## Housing
Tents
Quarter
House
## Utility
Water Pump
Water Processor
Food Gathering
Food Processing

View file

@ -0,0 +1,6 @@
1. Mantine was a calm region for part of its history; some small cities formed, but growth was slow and dispersed throughout the region.
3. Two main distinctions happened after a while between the inland and the coast land. The Coast region's economy was purely based on fishing and some farming.
4. Having ancient ways of doing so that still remain today.
5. The Inland region's discovered some mines, gathering metal and developing ways of smelting and using them; later on, they would create powerful tools mixing magic and machines; this made the Coast Region aware that they were falling behind in research and development. After a while, the region of Medine started to export raw materials to other countries.
6. The Queen of Sidone, who only sold some of the overall produced nourishment to Medine, noticed that Medine's relationship with some countries also included reselling what they were buying from them. Which escalated the relationship between both regions. Through decades, both regions were on the brink of a civil war. One of the earliest depictions of diplomacy appeared through this era between the Chancellor of Medine, the main inland city, and the Queen of Sidone. The most tense event from this period occurred when a party of Medine's Army tried getting some steel to Sidone's port, where a ship from another country was waiting. The Queen of Sidone retained this party for a time; she wouldn't allow this to happen without some competition for the crown. While this happened, The Great Storm of Mantine started.

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

106
main.gd Normal file
View file

@ -0,0 +1,106 @@
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

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