diff --git a/Main.tscn b/Main.tscn
index bf86ccf..bb2a25a 100644
--- a/Main.tscn
+++ b/Main.tscn
@@ -1,10 +1,13 @@
-[gd_scene load_steps=6 format=3 uid="uid://bs6ojoud4mvb8"]
+[gd_scene load_steps=9 format=3 uid="uid://bs6ojoud4mvb8"]
 
 [ext_resource type="Script" path="res://main.gd" id="1_x66oe"]
 [ext_resource type="PackedScene" uid="uid://ccdhbljb3e0oh" path="res://src/ui/MainUI.tscn" id="2_anen6"]
 [ext_resource type="PackedScene" uid="uid://cr2nvts234wlw" path="res://src/manager/TimeManager.tscn" id="2_rrhko"]
 [ext_resource type="Texture2D" uid="uid://c37jv23kd15ay" path="res://parts/zones/images/home.png" id="3_kjcur"]
 [ext_resource type="AudioStream" uid="uid://br26r6ck51wa1" path="res://Bossa Monstra.wav" id="5_qgck0"]
+[ext_resource type="AudioStream" uid="uid://c06j2q7c0j6br" path="res://sfx/UI Click 2.wav" id="6_xxay8"]
+[ext_resource type="AudioStream" uid="uid://cv6th0edghuyr" path="res://sfx/pick up coin.wav" id="7_612ep"]
+[ext_resource type="AudioStream" uid="uid://dpqyst1dkgwnr" path="res://sfx/coin spawn.wav" id="8_ddf5u"]
 
 [node name="Main" type="Node2D"]
 script = ExtResource("1_x66oe")
@@ -27,4 +30,16 @@ stream = ExtResource("5_qgck0")
 volume_db = -18.0
 autoplay = true
 
+[node name="AudioStreamPlayer2" type="AudioStreamPlayer" parent="."]
+stream = ExtResource("6_xxay8")
+volume_db = 5.0
+
+[node name="AudioStreamPlayer3" type="AudioStreamPlayer" parent="."]
+stream = ExtResource("7_612ep")
+volume_db = -11.0
+
+[node name="AudioStreamPlayer4" type="AudioStreamPlayer" parent="."]
+stream = ExtResource("8_ddf5u")
+volume_db = -15.0
+
 [connection signal="timeout" from="Timer" to="." method="_on_timer_timeout"]
diff --git a/components/Cursor/Cursor.tscn b/components/Cursor/Cursor.tscn
index 99e6fa5..35650ac 100644
--- a/components/Cursor/Cursor.tscn
+++ b/components/Cursor/Cursor.tscn
@@ -7,7 +7,7 @@
 [ext_resource type="AudioStream" uid="uid://bqn8ygvwt58sg" path="res://sfx/pick up.wav" id="5_mmqlh"]
 
 [sub_resource type="RectangleShape2D" id="RectangleShape2D_4cq27"]
-size = Vector2(8, 8)
+size = Vector2(4, 4)
 
 [node name="Cursor" type="CanvasLayer"]
 process_mode = 3
diff --git a/components/Cursor/cursor.gd b/components/Cursor/cursor.gd
index 41533f4..0e4c46e 100644
--- a/components/Cursor/cursor.gd
+++ b/components/Cursor/cursor.gd
@@ -41,6 +41,8 @@ func _on_grab_creature(data):
 	grabbed_creature = CREATURE.instantiate()
 	grabbed_creature.key = data.creature
 	grabbed_creature.held = true
+	grabbed_creature.tiles = data.tiles
+	grabbed_creature.tiled = data.tiled
 	mouse_control.add_child(grabbed_creature)
 	grabbed_creature.position = Vector2(0, 0)
 	holding = true
@@ -58,20 +60,34 @@ func let_go():
 			new_creature.key = grabbed_creature.key
 			new_creature.position = original_position
 			original_window.add_child(new_creature)
+			audio_stream_player_2.play()
 		
 		if get_window().get_window_id() == 0:
 			Persister.persist_data("grabbing", false)
-			
-			if Persister.get_value("hovered"):
-				audio_stream_player_2.play()
-			else:
-				audio_stream_player.play()
 		
 		if signal_object and signal_object.mouse_in_window:
-			var new_creature = CREATURE.instantiate()
-			new_creature.key = grabbed_creature.key
-			new_creature.global_position = grabbed_creature.global_position
-			get_window().add_child(new_creature)
+			if get_window().name == "CreatureWindow":
+				var new_creature = CREATURE.instantiate()
+				new_creature.key = grabbed_creature.key
+				new_creature.global_position = grabbed_creature.global_position
+				get_window().add_child(new_creature)
+				audio_stream_player_2.play()
+				
+				if grabbed_creature.tiled:
+					original_window.remove_tiles(grabbed_creature.tiles)
+			else:
+				if not get_window().attempt_place(grabbed_creature.key, mouse_control.position, grabbed_creature.tiles):
+					var new_creature = CREATURE.instantiate()
+					new_creature.key = grabbed_creature.key
+					new_creature.position = original_position
+					new_creature.tiles = grabbed_creature.tiles
+					new_creature.tiled = grabbed_creature.tiled
+					original_window.add_child(new_creature)
+					audio_stream_player.play()
+				else:
+					audio_stream_player_2.play()
+					if grabbed_creature.tiled:
+						original_window.remove_tiles(grabbed_creature.tiles)
 		grabbed_creature.queue_free()
 		grabbed_creature = null
 	
diff --git a/favicon.ico b/favicon.ico
new file mode 100644
index 0000000..92f019c
Binary files /dev/null and b/favicon.ico differ
diff --git a/favicon.svg b/favicon.svg
new file mode 100644
index 0000000..c6e6be5
--- /dev/null
+++ b/favicon.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs" width="16" height="16" viewBox="0 0 16 16"><image width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACrSURBVDhPY9zzbN1/BgoAigEuUkFQFn4A1ANlMTAwQWmiNYMAslqwAdg0I9sCAuh8mB64C8gFeA0A2QrDuABWA0AaQsp2wTE+gNWA5fdmgOk1XW5gGh/A6wWQ7cEZ9+AGYgM4DQBpBGEYwOUVrAbMtYEoXjtDCYXGBnC6AN0QXABvGCADZO8gA3hewJYak4+gxgLMVSAASxtwF6AnFnTNIAATQ1ZLYXZmYAAAN3hJfOuteYcAAAAOZVhJZk1NACoAAAAIAAAAAAAAANJTkwAAAABJRU5ErkJggg=="></image><style>@media (prefers-color-scheme: light) { :root { filter: none; } }
+@media (prefers-color-scheme: dark) { :root { filter: none; } }
+</style></svg>
\ No newline at end of file
diff --git a/favicon.svg.import b/favicon.svg.import
new file mode 100644
index 0000000..b996745
--- /dev/null
+++ b/favicon.svg.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://rxpgln3d4n8g"
+path="res://.godot/imported/favicon.svg-a165518550174d7996e87d364e3b1023.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://favicon.svg"
+dest_files=["res://.godot/imported/favicon.svg-a165518550174d7996e87d364e3b1023.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
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/main.gd b/main.gd
index 2923685..d7365ea 100644
--- a/main.gd
+++ b/main.gd
@@ -13,12 +13,18 @@ var build_object
 
 @onready var upgrade_pool = Data.data.upgrades.keys()
 @onready var zone_pool = Data.data.zones.keys()
+@onready var audio_stream_player_2: AudioStreamPlayer = $AudioStreamPlayer2
+@onready var audio_stream_player_3: AudioStreamPlayer = $AudioStreamPlayer3
+@onready var audio_stream_player_4: AudioStreamPlayer = $AudioStreamPlayer4
 
 func _ready() -> void:
 	Persister.persist_data("creature_resource_spawn_rate", 20)
 	Triggerer.listen("spawn_window", _on_spawn_window)
 	Triggerer.listen("upgrade_menu", _on_build_menu)
 	Triggerer.listen("quit", _on_quit)
+	Triggerer.listen("creature_sound", _on_creature_sound)
+	Triggerer.listen("coin_sound", _on_coin_sound)
+	Triggerer.listen("coin_collect_sound", _on_coin_collect_sound)
 	DisplayServer.window_set_title("Home")
 	get_viewport().transparent_bg = true
 	DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_MOUSE_PASSTHROUGH, true)
@@ -29,6 +35,18 @@ func _ready() -> void:
 	add_child(new_buttons)
 
 
+func _on_creature_sound(_data):
+	audio_stream_player_2.play()
+
+
+func _on_coin_collect_sound(_data):
+	audio_stream_player_3.play()
+
+
+func _on_coin_sound(_data):
+	audio_stream_player_4.play()
+
+
 func _process(delta: float) -> void:
 	if Input.is_action_just_pressed("test"):
 		Triggerer.trigger("spawn_window", {"key": ["farm", "desert", "lake", "forest"].pick_random()})
diff --git a/parts/creatures/images/1x1-1.png b/parts/creatures/images/1x1-1.png
index 808a583..cc5b737 100644
Binary files a/parts/creatures/images/1x1-1.png and b/parts/creatures/images/1x1-1.png differ
diff --git a/parts/creatures/images/1x2-1.png b/parts/creatures/images/1x2-1.png
index ba5900d..05af398 100644
Binary files a/parts/creatures/images/1x2-1.png and b/parts/creatures/images/1x2-1.png differ
diff --git a/parts/creatures/images/2x1-1.png b/parts/creatures/images/2x1-1.png
index bc11a37..2790be2 100644
Binary files a/parts/creatures/images/2x1-1.png and b/parts/creatures/images/2x1-1.png differ
diff --git a/parts/creatures/images/2x2-1.png b/parts/creatures/images/2x2-1.png
index 852e42d..9d6b732 100644
Binary files a/parts/creatures/images/2x2-1.png and b/parts/creatures/images/2x2-1.png differ
diff --git a/parts/upgrades/farm-card.aseprite b/parts/upgrades/farm-card.aseprite
index f1f9737..7196f6f 100644
Binary files a/parts/upgrades/farm-card.aseprite and b/parts/upgrades/farm-card.aseprite differ
diff --git a/parts/upgrades/farm-card.png b/parts/upgrades/farm-card.png
index 9396ab9..378253d 100644
Binary files a/parts/upgrades/farm-card.png and b/parts/upgrades/farm-card.png differ
diff --git a/parts/upgrades/more-creature-resources.txt b/parts/upgrades/more-creature-resources.txt
index 1dbc544..a25881f 100644
--- a/parts/upgrades/more-creature-resources.txt
+++ b/parts/upgrades/more-creature-resources.txt
@@ -3,4 +3,4 @@ description: 10%   higher   chance   for   a   creature   to   drop   coins   ev
 property: creature_resource_spawn_rate
 type: percent
 amount: 10
-cost: 10
+cost: 5
diff --git a/parts/upgrades/more-creatures.txt b/parts/upgrades/more-creatures.txt
index d0f0ed4..4a41bdf 100644
--- a/parts/upgrades/more-creatures.txt
+++ b/parts/upgrades/more-creatures.txt
@@ -2,4 +2,4 @@ name: Creature   Bait
 description: 2   More   creatures   will   wander   onto   your   property   every   day
 property: creature_amount
 amount: 2
-cost: 15
+cost: 7
diff --git a/parts/zones/images/farm.png b/parts/zones/images/farm.png
index 29f7611..a692e74 100644
Binary files a/parts/zones/images/farm.png and b/parts/zones/images/farm.png differ
diff --git a/project.godot b/project.godot
index b6b9c83..865a2db 100644
--- a/project.godot
+++ b/project.godot
@@ -13,7 +13,7 @@ config_version=5
 config/name="ld-56"
 run/main_scene="res://Main.tscn"
 config/features=PackedStringArray("4.3", "GL Compatibility")
-config/icon="res://icon.svg"
+config/icon="res://favicon.svg"
 
 [autoload]
 
diff --git a/sfx/coin spawn.wav b/sfx/coin spawn.wav
new file mode 100644
index 0000000..0f41418
Binary files /dev/null and b/sfx/coin spawn.wav differ
diff --git a/sfx/coin spawn.wav.import b/sfx/coin spawn.wav.import
new file mode 100644
index 0000000..4456820
--- /dev/null
+++ b/sfx/coin spawn.wav.import	
@@ -0,0 +1,24 @@
+[remap]
+
+importer="wav"
+type="AudioStreamWAV"
+uid="uid://dpqyst1dkgwnr"
+path="res://.godot/imported/coin spawn.wav-f206cd96b45c72a52c96538391684b3c.sample"
+
+[deps]
+
+source_file="res://sfx/coin spawn.wav"
+dest_files=["res://.godot/imported/coin spawn.wav-f206cd96b45c72a52c96538391684b3c.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
diff --git a/sfx/pick up coin.wav b/sfx/pick up coin.wav
new file mode 100644
index 0000000..504e1d4
Binary files /dev/null and b/sfx/pick up coin.wav differ
diff --git a/sfx/pick up coin.wav.import b/sfx/pick up coin.wav.import
new file mode 100644
index 0000000..e34ebf5
--- /dev/null
+++ b/sfx/pick up coin.wav.import	
@@ -0,0 +1,24 @@
+[remap]
+
+importer="wav"
+type="AudioStreamWAV"
+uid="uid://cv6th0edghuyr"
+path="res://.godot/imported/pick up coin.wav-c21724f7cdbce893b4cf124a00df4ec9.sample"
+
+[deps]
+
+source_file="res://sfx/pick up coin.wav"
+dest_files=["res://.godot/imported/pick up coin.wav-c21724f7cdbce893b4cf124a00df4ec9.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
diff --git a/src/BuildWindow.tscn b/src/BuildWindow.tscn
index 6eddfa3..9cb13c0 100644
--- a/src/BuildWindow.tscn
+++ b/src/BuildWindow.tscn
@@ -20,6 +20,7 @@ size = Vector2(52, 73)
 
 [node name="BuildWindow" type="Window"]
 canvas_item_default_texture_filter = 0
+title = "Shop"
 position = Vector2i(0, 36)
 size = Vector2i(900, 500)
 unresizable = true
@@ -72,7 +73,6 @@ offset_right = 83.15
 offset_bottom = 145.945
 grow_horizontal = 2
 bbcode_enabled = true
-text = "[center]Test Description"
 
 [node name="Upgrade" type="TextureRect" parent="Control"]
 custom_minimum_size = Vector2(32, 40)
diff --git a/src/Coin.tscn b/src/Coin.tscn
index b1ebd9c..0edfbcb 100644
--- a/src/Coin.tscn
+++ b/src/Coin.tscn
@@ -1,8 +1,9 @@
-[gd_scene load_steps=5 format=3 uid="uid://dyd3gq1oc117t"]
+[gd_scene load_steps=6 format=3 uid="uid://dyd3gq1oc117t"]
 
 [ext_resource type="PackedScene" uid="uid://dykc1mgg5uopw" path="res://components/Cursor/MouseHandler.tscn" id="1_53keb"]
 [ext_resource type="Script" path="res://src/coin.gd" id="1_l62nl"]
 [ext_resource type="Texture2D" uid="uid://cndrtahwhbkli" path="res://src/ui/coin.png" id="2_5qokh"]
+[ext_resource type="AudioStream" uid="uid://cv6th0edghuyr" path="res://sfx/pick up coin.wav" id="4_rysea"]
 
 [sub_resource type="RectangleShape2D" id="RectangleShape2D_6mwyk"]
 size = Vector2(8, 8)
@@ -18,4 +19,8 @@ shape = SubResource("RectangleShape2D_6mwyk")
 [node name="Sprite2D" type="Sprite2D" parent="."]
 texture = ExtResource("2_5qokh")
 
+[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
+stream = ExtResource("4_rysea")
+volume_db = -11.0
+
 [connection signal="hovered" from="MouseHandler" to="." method="_on_mouse_handler_hovered"]
diff --git a/src/Creature.tscn b/src/Creature.tscn
index 913bdda..9e7968d 100644
--- a/src/Creature.tscn
+++ b/src/Creature.tscn
@@ -1,8 +1,10 @@
-[gd_scene load_steps=5 format=3 uid="uid://yao5smo8c43u"]
+[gd_scene load_steps=7 format=3 uid="uid://yao5smo8c43u"]
 
 [ext_resource type="Script" path="res://src/creature.gd" id="1_34bi4"]
 [ext_resource type="Texture2D" uid="uid://dnvnm78idadmn" path="res://parts/creatures/images/1x1-1.png" id="2_upgji"]
 [ext_resource type="PackedScene" uid="uid://dykc1mgg5uopw" path="res://components/Cursor/MouseHandler.tscn" id="3_vlaga"]
+[ext_resource type="AudioStream" uid="uid://dpqyst1dkgwnr" path="res://sfx/coin spawn.wav" id="4_g8x0y"]
+[ext_resource type="AudioStream" uid="uid://c06j2q7c0j6br" path="res://sfx/UI Click 2.wav" id="5_wsv0d"]
 
 [sub_resource type="RectangleShape2D" id="RectangleShape2D_4rqgs"]
 size = Vector2(12, 12)
@@ -18,4 +20,13 @@ texture = ExtResource("2_upgji")
 [node name="CollisionShape2D" type="CollisionShape2D" parent="MouseHandler"]
 shape = SubResource("RectangleShape2D_4rqgs")
 
+[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
+stream = ExtResource("4_g8x0y")
+volume_db = -15.0
+
+[node name="AudioStreamPlayer2" type="AudioStreamPlayer" parent="."]
+stream = ExtResource("5_wsv0d")
+volume_db = 5.0
+
 [connection signal="clicked" from="MouseHandler" to="." method="_on_mouse_handler_clicked"]
+[connection signal="hovered" from="MouseHandler" to="." method="_on_mouse_handler_hovered"]
diff --git a/src/CreatureWindow.tscn b/src/CreatureWindow.tscn
index e0ad1d9..c0c0dee 100644
--- a/src/CreatureWindow.tscn
+++ b/src/CreatureWindow.tscn
@@ -6,6 +6,7 @@
 
 [node name="CreatureWindow" type="Window"]
 canvas_item_default_texture_filter = 0
+title = "Wild"
 position = Vector2i(0, 36)
 size = Vector2i(300, 300)
 unresizable = true
@@ -20,3 +21,39 @@ texture = ExtResource("3_bxvic")
 script = ExtResource("1_eufhm")
 
 [node name="MouseSignals" parent="." instance=ExtResource("2_3cu4o")]
+
+[node name="Timer" type="Timer" parent="."]
+one_shot = true
+autostart = true
+
+[node name="Timer2" type="Timer" parent="."]
+wait_time = 6.0
+one_shot = true
+autostart = true
+
+[node name="Timer3" type="Timer" parent="."]
+wait_time = 12.0
+one_shot = true
+autostart = true
+
+[node name="Timer4" type="Timer" parent="."]
+wait_time = 20.0
+one_shot = true
+autostart = true
+
+[node name="Timer5" type="Timer" parent="."]
+wait_time = 30.0
+one_shot = true
+autostart = true
+
+[node name="Timer6" type="Timer" parent="."]
+wait_time = 50.0
+one_shot = true
+autostart = true
+
+[connection signal="timeout" from="Timer" to="Node2D" method="_on_timer_timeout"]
+[connection signal="timeout" from="Timer2" to="Node2D" method="_on_timer_timeout"]
+[connection signal="timeout" from="Timer3" to="Node2D" method="_on_timer_timeout"]
+[connection signal="timeout" from="Timer4" to="Node2D" method="_on_timer_timeout"]
+[connection signal="timeout" from="Timer5" to="Node2D" method="_on_timer_timeout"]
+[connection signal="timeout" from="Timer6" to="Node2D" method="_on_timer_timeout"]
diff --git a/src/build_window.gd b/src/build_window.gd
index c2a7a05..0b7fc94 100644
--- a/src/build_window.gd
+++ b/src/build_window.gd
@@ -81,7 +81,7 @@ func _update_card(index):
 			main.zone_pool.shuffle()
 		choice = main.zone_pool.pop_back()
 		card_data = Data.data.zones[choice]
-		cost = 20
+		cost = 10 + (5 * Persister.get_value("zones_bought", PersisterEnums.Scope.UNKNOWN, 0))
 		cards[index].object.texture = Data.data.images["%s-card" % [choice]]
 	else:
 		if main.upgrade_pool.size() == 0:
@@ -89,12 +89,15 @@ func _update_card(index):
 			main.upgrade_pool.shuffle()
 		choice = main.upgrade_pool.pop_back()
 		card_data = Data.data.upgrades[choice]
-		cost = card_data.cost
+		cost = card_data.cost + (round(card_data.cost / 2) * Persister.get_value(choice, PersisterEnums.Scope.UNKNOWN, 0))
 	
 	cards[index].title.text = "[center]%s" % [card_data.name]
 	cards[index].cost.text = "[center]%d G" % [cost]
 	card_data.key = choice
 	chosen_cards[index] = card_data
+	
+	if (index == 1 and chosen_cards[0].key == choice) or (index == 0 and chosen_cards[1] and chosen_cards[1].key == choice):
+		_update_card(index)
 
 
 func _on_mouse_handler_clicked() -> void:
@@ -130,8 +133,8 @@ func _buy_upgrade(index):
 		return
 	
 	var card_data = chosen_cards[index]
-	if Persister.get_value("gold", PersisterEnums.Scope.UNKNOWN, 0) >= (card_data.cost if card_data.has("cost") else 20):
-		Persister.change_value("gold", -(card_data.cost if card_data.has("cost") else 20))
+	if Persister.get_value("gold", PersisterEnums.Scope.UNKNOWN, 0) >= (card_data.cost if card_data.has("cost") else 10 + (5 * Persister.get_value("zones_bought", PersisterEnums.Scope.UNKNOWN, 0))):
+		Persister.change_value("gold", -(card_data.cost if card_data.has("cost") else 10 + (5 * Persister.get_value("zones_bought", PersisterEnums.Scope.UNKNOWN, 0))))
 		
 		buying[index] = true
 		
@@ -151,9 +154,11 @@ func _buy_upgrade(index):
 		if index == 2:
 			Triggerer.trigger("spawn_window", {"key": card_data.key})
 			audio_stream_player_2.play()
+			Persister.change_value("zones_bought", 1)
 		else:
 			Persister.change_value(card_data.property, card_data.amount)
 			audio_stream_player.play()
+			Persister.change_value(card_data.key, 1)
 	else:
 		audio_stream_player_3.play()
 		
diff --git a/src/coin.gd b/src/coin.gd
index 9868ef4..e72efc9 100644
--- a/src/coin.gd
+++ b/src/coin.gd
@@ -1,6 +1,38 @@
 extends Node2D
 
+var hovered = false
+
+@onready var audio_stream_player: AudioStreamPlayer = $AudioStreamPlayer
+@onready var sprite_2d: Sprite2D = $Sprite2D
+
+var tween
+
+func _ready() -> void:
+	sprite_2d.scale = Vector2.ZERO
+	tween = create_tween()
+	tween.set_ease(Tween.EASE_OUT)
+	tween.set_trans(Tween.TRANS_BACK)
+	tween.tween_property(sprite_2d, "scale", Vector2.ONE, 0.25)
 
 func _on_mouse_handler_hovered() -> void:
+	if hovered:
+		return
+	
+	hovered = true
+	#audio_stream_player.play()
+	Triggerer.trigger("coin_collect_sound")
 	Persister.change_value("gold", 1)
-	queue_free()
+	
+	if tween:
+		tween.kill()
+	
+	tween = create_tween()
+	tween.tween_property(sprite_2d, "scale:x", 0, 0.125)
+	tween.tween_property(sprite_2d, "scale:x", 1, 0.125)
+	tween.tween_property(sprite_2d, "scale:x", 0, 0.125)
+	tween.tween_property(sprite_2d, "scale:x", 1, 0.125)
+	tween.tween_callback(queue_free)
+	
+	var start_pos = position.y
+	var tween2 = create_tween()
+	tween2.tween_property(self, "position:y", start_pos - 5, 0.5)
diff --git a/src/creature.gd b/src/creature.gd
index 33ddbc4..60ce6d3 100644
--- a/src/creature.gd
+++ b/src/creature.gd
@@ -6,24 +6,73 @@ var key
 @onready var image = Data.data.images[key]
 
 @onready var sprite_2d: Sprite2D = $Sprite2D
+@onready var audio_stream_player: AudioStreamPlayer = $AudioStreamPlayer
+@onready var audio_stream_player_2: AudioStreamPlayer = $AudioStreamPlayer2
 
 const COIN = preload("res://src/Coin.tscn")
 
 var held = false
+var target
+var start_pos
+var lifetime_timer = randi_range(10, 15)
+var end_pos
+var tween
+var tiled = false
+var tiles = []
 
 func _ready() -> void:
 	sprite_2d.texture = image
 	Triggerer.listen("hour", _on_hour)
 
 
+func _process(delta: float) -> void:
+	if target:
+		position = position.lerp(target, delta * 2)
+	
+	if get_window().name == "CreatureWindow":
+		if Persister.get_value("paused"):
+			return
+		lifetime_timer -= delta
+		
+		if lifetime_timer <= 0 and not end_pos:
+			end_pos = true
+			match randi_range(0, 3):
+				0:
+					target = Vector2(-25, randi_range(-25, 100))
+				1:
+					target = Vector2(100, randi_range(-25, 100))
+				2:
+					target = Vector2(randi_range(-25, 100), -25)
+				3:
+					target = Vector2(randi_range(-25, 100), 100)
+		if lifetime_timer <= -2:
+			queue_free()
+
+
 func _on_hour(_data):
 	if not held and randf() < (Persister.get_value("creature_resource_spawn_rate") / 100.0):
 		var new_coin = COIN.instantiate()
 		new_coin.global_position = global_position
 		get_window().add_child(new_coin)
+		#audio_stream_player.play()
+		Triggerer.trigger("coin_sound")
 
 
 func _on_mouse_handler_clicked() -> void:
-	Triggerer.trigger("grab_creature", {"creature": key, "old_window": get_window(), "old_position": position})
+	Triggerer.trigger("grab_creature", {"creature": key, "old_window": get_window(), "old_position": position, "tiled": tiled, "tiles": tiles})
 	Persister.persist_data("grabbing", true)
 	queue_free()
+
+
+func _on_mouse_handler_hovered() -> void:
+	if held:
+		return
+	
+	if tween:
+		tween.kill()
+	
+	tween = create_tween()
+	tween.tween_property(sprite_2d, "position:y", -1, 0.075)
+	tween.tween_property(sprite_2d, "position:y", 0, 0.075)
+	#audio_stream_player_2.play()
+	Triggerer.trigger("creature_sound")
diff --git a/src/creature_window.gd b/src/creature_window.gd
index d9a4659..d6ab6fc 100644
--- a/src/creature_window.gd
+++ b/src/creature_window.gd
@@ -24,11 +24,22 @@ func _on_minutes(_data):
 	minutes_left -= 1
 	
 	if spawn_times.has(minutes_left):
-		var new_creature = CREATURE.instantiate()
-		new_creature.position = Vector2(50, 50)
-		new_creature.key = Data.data.creatures.keys().pick_random()
-		add_child(new_creature)
+		_spawn_creature()
 
+func _spawn_creature():
+	var new_creature = CREATURE.instantiate()
+	match randi_range(0, 3):
+		0:
+			new_creature.position = Vector2(-25, randi_range(-25, 100))
+		1:
+			new_creature.position = Vector2(100, randi_range(-25, 100))
+		2:
+			new_creature.position = Vector2(randi_range(-25, 100), -25)
+		3:
+			new_creature.position = Vector2(randi_range(-25, 100), 100)
+	new_creature.target = Vector2(randi_range(25, 50), randi_range(25, 50))
+	new_creature.key = Data.data.creatures.keys().pick_random()
+	add_child(new_creature)
 
 func _on_day(_data):
 	minutes_left = 6 * 24
@@ -41,3 +52,7 @@ func _generate_spawn_times():
 	
 	for i in range(0, 4):
 		spawn_times.push_back(randi_range(2, 6 * 24 - 2))
+
+
+func _on_timer_timeout() -> void:
+	_spawn_creature()
diff --git a/src/zone.gd b/src/zone.gd
index aa3d59a..40a0953 100644
--- a/src/zone.gd
+++ b/src/zone.gd
@@ -9,6 +9,9 @@ var key
 
 const CREATURE = preload("res://src/Creature.tscn")
 
+var tiles = []
+var newt = []
+
 func _ready() -> void:
 	var window_size = get_tree().root.get_window().size
 	
@@ -19,6 +22,129 @@ func _ready() -> void:
 	sprite_2d.position = Vector2(int(data.size[0]) * 12 / 2, int(data.size[1]) * 12 / 2)
 
 
+func attempt_place(key, position, tiles2):
+	var creature_data = Data.data.creatures[key]
+	
+	var tile_size = Vector2(12, 12)
+	
+	var round_bound = round(position.x / tile_size.x)
+	var lower_bound = round_bound - 1
+	var upper_bound = round_bound
+	var lower_bound2 = round_bound
+	var upper_bound2 = round_bound + 1
+	var bound_2 = round((position.x + 6) / tile_size.x)
+	
+	var round_bound_y = round(position.y / tile_size.y)
+	var lower_bound_y = round_bound_y - 1
+	var upper_bound_y = round_bound_y
+	var lower_bound_y2 = round_bound_y
+	var upper_bound_y2 = round_bound_y + 1
+	var bound_2_y = round((position.y + 6) / tile_size.y)
+	
+	prints(position / tile_size.x)
+	
+	if lower_bound_y == upper_bound_y:
+		upper_bound_y += 1
+	
+	if lower_bound_y2 == upper_bound_y2:
+		upper_bound_y2 += 1
+	
+	var tile_x = round(position.x / tile_size.x)
+	var tile_y = round(position.y / tile_size.y)
+	
+	var valid_x = false
+	var bounds_x
+	var bounds_y
+	
+	if creature_data.width == 1:
+		valid_x = _check_tile(bound_2, 0)
+	else:
+		var check1 = _check_tile(lower_bound, 0) and _check_tile(upper_bound, 0)
+		var check2 = _check_tile(lower_bound2, 0) and _check_tile(upper_bound2, 0)
+		valid_x = check1 or check2
+		
+		if check1:
+			bounds_x = Vector2(lower_bound, upper_bound)
+		if check2:
+			bounds_x = Vector2(lower_bound2, upper_bound2)
+	
+	var valid_y = false
+	
+	if creature_data.height == 1:
+		valid_y = _check_tile(bound_2_y, 1)
+	else:
+		var check1 = _check_tile(lower_bound_y, 1) and _check_tile(upper_bound_y, 1)
+		var check2 = _check_tile(lower_bound_y2, 1) and _check_tile(upper_bound_y2, 1)
+		valid_y = check1 or check2
+		
+		if check1:
+			bounds_y = Vector2(lower_bound_y, upper_bound_y)
+		if check2:
+			bounds_y = Vector2(lower_bound_y2, upper_bound_y2)
+	
+	if valid_x and valid_y:
+		if _check_if_contains(creature_data, bound_2, bound_2_y, bounds_x, bounds_y, tiles2):
+			return false
+		
+		var new_creature = CREATURE.instantiate()
+		new_creature.key = key
+		new_creature.position = Vector2((bound_2 - 0.5) if creature_data.width == 1 else bounds_x[1] - 1, (bound_2_y - 0.5) if creature_data.height == 1 else bounds_y[1] - 1) * 12
+		get_window().add_child(new_creature)
+		new_creature.tiled = true
+		new_creature.tiles = newt
+		return true
+
+
+func remove_tiles(array):
+	for element in array:
+		tiles.erase(element)
+
+
+func _check_if_contains(data, bound1, bound1y, bounds2, bounds2y, tiles2):
+	newt = []
+	var checks = []
+	
+	if data.width == 1:
+		if data.height == 1:
+			checks.push_back(Vector2i(bound1, bound1y))
+		else:
+			checks.push_back(Vector2i(bound1, bounds2y[0]))
+			checks.push_back(Vector2i(bound1, bounds2y[1]))
+	else:
+		if data.height == 1:
+			checks.push_back(Vector2i(bounds2[0], bound1y))
+			checks.push_back(Vector2i(bounds2[1], bound1y))
+		else:
+			checks.push_back(Vector2i(bounds2[0], bounds2y[0]))
+			checks.push_back(Vector2i(bounds2[1], bounds2y[0]))
+			checks.push_back(Vector2i(bounds2[0], bounds2y[1]))
+			checks.push_back(Vector2i(bounds2[1], bounds2y[1]))
+	
+	for check in checks:
+		if tiles.has(check):
+			if tiles2:
+				if not tiles2.has(check):
+					return true
+			else:
+				return true
+	
+	for check in checks:
+		newt.push_back(check)
+		tiles.push_back(check)
+	
+	return false
+
+
+func _check_tile(coords, dir):
+	var placeable_min = 2
+	var placeable_max = int(data.size[dir]) - 1
+	
+	if coords >= placeable_min and coords <= placeable_max:
+		return true
+	
+	return false
+
+
 #
 #New Zones
 #
diff --git a/wall.png b/wall.png
index 55d6707..bd5beb8 100644
Binary files a/wall.png and b/wall.png differ
diff --git a/wild.png b/wild.png
index ef36e1d..0930c2a 100644
Binary files a/wild.png and b/wild.png differ