It's Cow Game! Version 2.04!
|
|
@ -0,0 +1,7 @@
|
|||
extends Node2D
|
||||
|
||||
func _process(delta):
|
||||
if position.y < (LocationManager.currentLocation.upperCameraLimit - 200):
|
||||
queue_free()
|
||||
|
||||
self.translate(Vector2(5, -50)*delta)
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
[gd_scene load_steps=3 format=3 uid="uid://c86wufmefnko6"]
|
||||
|
||||
[ext_resource type="Script" path="res://Objects/SkillSpecific/Building/BeaverDam/BalloonCreature.gd" id="1_egvkc"]
|
||||
[ext_resource type="Texture2D" uid="uid://cc8l1kncjpjya" path="res://Objects/SkillSpecific/Building/BeaverDam/BalloonDam.png" id="2_r5q60"]
|
||||
|
||||
[node name="BalloonCreature" type="Node2D"]
|
||||
script = ExtResource("1_egvkc")
|
||||
|
||||
[node name="BalloonDam" type="Sprite2D" parent="."]
|
||||
position = Vector2(0, -86)
|
||||
texture = ExtResource("2_r5q60")
|
||||
BIN
Objects/SkillSpecific/Building/BeaverDam/BalloonDam.png
Normal file
|
After Width: | Height: | Size: 2 KiB |
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cc8l1kncjpjya"
|
||||
path="res://.godot/imported/BalloonDam.png-d79a09e00470a4afb8eacc7c8166c459.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Objects/SkillSpecific/Building/BeaverDam/BalloonDam.png"
|
||||
dest_files=["res://.godot/imported/BalloonDam.png-d79a09e00470a4afb8eacc7c8166c459.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
|
||||
119
Objects/SkillSpecific/Building/BeaverDam/BeaverDam.gd
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
extends "res://Objects/SkillSpecific/Building/BuildingZone.gd"
|
||||
|
||||
const balloonCreatureScene = preload("res://Objects/SkillSpecific/Building/BeaverDam/BalloonCreature.tscn")
|
||||
|
||||
var itemDisplays = []
|
||||
|
||||
var itemsOnBridge = []
|
||||
var cowOnBridge = false
|
||||
|
||||
var stateCheckDelay = 0.5
|
||||
|
||||
func _ready():
|
||||
for itemSprite in $FrontItems.get_children():
|
||||
itemDisplays.append(itemSprite)
|
||||
|
||||
for itemSprite in $BackItems.get_children():
|
||||
itemDisplays.append(itemSprite)
|
||||
|
||||
for itemSprite in $MiddleItems.get_children():
|
||||
itemDisplays.append(itemSprite)
|
||||
|
||||
super._ready()
|
||||
state_check()
|
||||
|
||||
func _process(delta):
|
||||
super._process(delta)
|
||||
if complete:
|
||||
var bridgeLoad = get_bridge_load()
|
||||
var gumption = get_gumption(buildingMaterial)
|
||||
if bridgeLoad > gumption:
|
||||
var overloadDamage = 45
|
||||
overloadDamage += bridgeLoad - gumption
|
||||
|
||||
var maxDamage = maxHealth
|
||||
if maxDamage < 200:
|
||||
maxDamage = 200
|
||||
if overloadDamage > maxDamage:
|
||||
overloadDamage = maxDamage
|
||||
|
||||
take_damage(overloadDamage * delta)
|
||||
|
||||
if stateCheckDelay > 0:
|
||||
stateCheckDelay -= delta
|
||||
if stateCheckDelay <= 0:
|
||||
state_check()
|
||||
stateCheckDelay = 0.5
|
||||
|
||||
func state_check():
|
||||
if !SaveManager.get_save_value("BeaverLoveQuestStarted", false):
|
||||
visible = false
|
||||
else:
|
||||
visible = true
|
||||
|
||||
func get_bridge_load():
|
||||
var load = 0
|
||||
if cowOnBridge:
|
||||
load += InventoryManager.get_inventory_weight()
|
||||
|
||||
for groundItem:GroundItem in itemsOnBridge:
|
||||
if groundItem.item != null:
|
||||
load += groundItem.item.get_weight()
|
||||
|
||||
return load
|
||||
|
||||
func hide_other_visuals():
|
||||
$FrontItems.visible = false
|
||||
$BackItems.visible = false
|
||||
$MiddleItems.visible = false
|
||||
|
||||
func fully_built(loadedState = false):
|
||||
super.fully_built(loadedState)
|
||||
|
||||
if "Balloon" in buildingMaterial.get_name():
|
||||
AchievementManager.complete_achievement("Transient Art")
|
||||
var newCreature:Node2D = balloonCreatureScene.instantiate()
|
||||
get_parent().add_child(newCreature)
|
||||
newCreature.global_position = global_position + Vector2(0, 90)
|
||||
unbuilt()
|
||||
elif buildingMaterial.get_name(false) == "Worm on a String" or buildingMaterial.get_name(false) == "Basket on a String":
|
||||
$MainSprite.self_modulate = Color.WHITE
|
||||
|
||||
if rng.randi_range(0,1) == 1:
|
||||
$MainSprite.play("worm1")
|
||||
else:
|
||||
$MainSprite.play("worm2")
|
||||
|
||||
$MainSprite.visible = true
|
||||
$FrontItems.visible = false
|
||||
$BackItems.visible = false
|
||||
$MiddleItems.visible = false
|
||||
else:
|
||||
$MainSprite.play("default")
|
||||
$MainSprite.visible = true
|
||||
set_visible_bridge_material(buildingMaterial)
|
||||
|
||||
func set_visible_bridge_material(materialItem:Item):
|
||||
var itemSprite = materialItem.get_sprite()
|
||||
for sprite in itemDisplays:
|
||||
sprite.texture = itemSprite
|
||||
|
||||
$FrontItems.visible = true
|
||||
$BackItems.visible = true
|
||||
$MiddleItems.visible = true
|
||||
|
||||
var unmodifiedSprite = materialItem.get_sprite(false)
|
||||
var averageColor = SpriteGeneration.get_average_color(unmodifiedSprite.get_image())
|
||||
$MainSprite.self_modulate = averageColor
|
||||
|
||||
func _on_standing_zone_area_entered(area):
|
||||
if area.get_parent() is Cow:
|
||||
cowOnBridge = true
|
||||
elif area.get_parent() is GroundItem:
|
||||
itemsOnBridge.append(area.get_parent())
|
||||
|
||||
func _on_standing_zone_area_exited(area):
|
||||
if area.get_parent() is Cow:
|
||||
cowOnBridge = false
|
||||
elif area.get_parent() is GroundItem:
|
||||
itemsOnBridge.erase(area.get_parent())
|
||||
492
Objects/SkillSpecific/Building/BeaverDam/BeaverDam.tscn
Normal file
|
|
@ -0,0 +1,492 @@
|
|||
[gd_scene load_steps=15 format=3 uid="uid://cp1kh50u1k7sp"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cufhvngt5p0pu" path="res://Objects/SkillSpecific/Building/BuildingZone.tscn" id="1_rsgpe"]
|
||||
[ext_resource type="Texture2D" uid="uid://c3m2e2k7pa3al" path="res://Items/Foods/Fruits/Sprites/Apple.png" id="2_7ibea"]
|
||||
[ext_resource type="Script" path="res://Objects/SkillSpecific/Building/BeaverDam/BeaverDam.gd" id="2_8kkhm"]
|
||||
[ext_resource type="Texture2D" uid="uid://ba25fbsflxkft" path="res://Skills/Arson/FireAnim/Fire1.png" id="4_qcu1w"]
|
||||
[ext_resource type="Texture2D" uid="uid://dufwp4sp2kyuv" path="res://Skills/Arson/FireAnim/Fire2.png" id="5_af1ax"]
|
||||
[ext_resource type="Texture2D" uid="uid://b67o4ynk1eu4j" path="res://Objects/SkillSpecific/Building/BeaverDam/BeaverDamBase.png" id="5_tvs6d"]
|
||||
[ext_resource type="Texture2D" uid="uid://b6a4awj22skbe" path="res://Skills/Arson/FireAnim/Fire3.png" id="6_fpjux"]
|
||||
[ext_resource type="Texture2D" uid="uid://cdve37obs7abb" path="res://Objects/SkillSpecific/Building/BeaverDam/DamOnAString1.png" id="6_knvos"]
|
||||
[ext_resource type="Script" path="res://Utils/PlayOnReady.gd" id="7_somjb"]
|
||||
[ext_resource type="Texture2D" uid="uid://bms7t3kyueg0r" path="res://Objects/SkillSpecific/Building/BeaverDam/DamOnAString2.png" id="7_x7xji"]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_8kxhm"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("5_tvs6d")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"default",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("6_knvos")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"worm1",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("7_x7xji")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"worm2",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_kr21r"]
|
||||
radius = 23.0217
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_6h3kv"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("4_qcu1w")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("5_af1ax")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("6_fpjux")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"default",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_nny5n"]
|
||||
size = Vector2(448, 139)
|
||||
|
||||
[node name="BeaverDam" instance=ExtResource("1_rsgpe")]
|
||||
y_sort_enabled = true
|
||||
script = ExtResource("2_8kkhm")
|
||||
|
||||
[node name="SelectionRegionIndicator" parent="." index="0"]
|
||||
position = Vector2(264, 5)
|
||||
scale = Vector2(0.64, 1.02)
|
||||
|
||||
[node name="FrontItems" type="Node2D" parent="." index="1"]
|
||||
y_sort_enabled = true
|
||||
position = Vector2(0, 1)
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="FrontItems" index="0"]
|
||||
position = Vector2(-219.172, 50.7978)
|
||||
scale = Vector2(1.18333, 1.075)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D2" type="Sprite2D" parent="FrontItems" index="1"]
|
||||
position = Vector2(-186.172, 49.7978)
|
||||
scale = Vector2(0.941667, 0.870833)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D3" type="Sprite2D" parent="FrontItems" index="2"]
|
||||
position = Vector2(-147.172, 54.7978)
|
||||
scale = Vector2(0.9875, 1.01875)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D4" type="Sprite2D" parent="FrontItems" index="3"]
|
||||
position = Vector2(-112.172, 57.7978)
|
||||
scale = Vector2(0.727083, 0.659375)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D6" type="Sprite2D" parent="FrontItems" index="4"]
|
||||
position = Vector2(-31.1716, 52.7978)
|
||||
scale = Vector2(1.39375, 1.12604)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D7" type="Sprite2D" parent="FrontItems" index="5"]
|
||||
position = Vector2(17.6018, 57.7705)
|
||||
scale = Vector2(1.00755, 0.865755)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D8" type="Sprite2D" parent="FrontItems" index="6"]
|
||||
position = Vector2(59.8284, 55.7978)
|
||||
scale = Vector2(1.08177, 0.93151)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D5" type="Sprite2D" parent="FrontItems" index="7"]
|
||||
position = Vector2(-79.1716, 54.7978)
|
||||
scale = Vector2(0.938542, 0.821354)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D9" type="Sprite2D" parent="FrontItems" index="8"]
|
||||
position = Vector2(98.8284, 56.7978)
|
||||
scale = Vector2(0.877084, 0.776042)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D10" type="Sprite2D" parent="FrontItems" index="9"]
|
||||
position = Vector2(222.828, 55.7978)
|
||||
scale = Vector2(0.844271, 0.89401)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D11" type="Sprite2D" parent="FrontItems" index="10"]
|
||||
position = Vector2(148.828, 56.7978)
|
||||
scale = Vector2(1.6776, 1.12734)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D12" type="Sprite2D" parent="FrontItems" index="11"]
|
||||
position = Vector2(194.828, 57.7978)
|
||||
scale = Vector2(0.605469, 0.613672)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="BackItems" type="Node2D" parent="." index="2"]
|
||||
y_sort_enabled = true
|
||||
position = Vector2(4, -109)
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="BackItems" index="0"]
|
||||
position = Vector2(-221.172, 53.7978)
|
||||
scale = Vector2(1.18333, 1.075)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D2" type="Sprite2D" parent="BackItems" index="1"]
|
||||
position = Vector2(-186.172, 49.7978)
|
||||
scale = Vector2(0.941667, 0.870833)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D3" type="Sprite2D" parent="BackItems" index="2"]
|
||||
position = Vector2(-147.172, 54.7978)
|
||||
scale = Vector2(0.9875, 1.01875)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D4" type="Sprite2D" parent="BackItems" index="3"]
|
||||
position = Vector2(-112.172, 57.7978)
|
||||
scale = Vector2(0.727083, 0.659375)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D6" type="Sprite2D" parent="BackItems" index="4"]
|
||||
position = Vector2(-31.1716, 55.7978)
|
||||
scale = Vector2(1.39375, 1.12604)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D7" type="Sprite2D" parent="BackItems" index="5"]
|
||||
position = Vector2(17.6018, 57.7705)
|
||||
scale = Vector2(1.00755, 0.865755)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D8" type="Sprite2D" parent="BackItems" index="6"]
|
||||
position = Vector2(59.8284, 55.7978)
|
||||
scale = Vector2(1.08177, 0.93151)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D5" type="Sprite2D" parent="BackItems" index="7"]
|
||||
position = Vector2(-78.0154, 58.4384)
|
||||
scale = Vector2(0.938542, 0.821354)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D9" type="Sprite2D" parent="BackItems" index="8"]
|
||||
position = Vector2(98.8284, 56.7978)
|
||||
scale = Vector2(0.877084, 0.776042)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D10" type="Sprite2D" parent="BackItems" index="9"]
|
||||
position = Vector2(214.828, 62.7978)
|
||||
scale = Vector2(0.844271, 0.89401)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D11" type="Sprite2D" parent="BackItems" index="10"]
|
||||
position = Vector2(149.828, 57.7978)
|
||||
scale = Vector2(1.6776, 1.12734)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D12" type="Sprite2D" parent="BackItems" index="11"]
|
||||
position = Vector2(194.828, 57.7978)
|
||||
scale = Vector2(0.605469, 0.613672)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="MiddleItems" type="Node2D" parent="." index="3"]
|
||||
y_sort_enabled = true
|
||||
|
||||
[node name="Sprite2D23" type="Sprite2D" parent="MiddleItems" index="0"]
|
||||
position = Vector2(-217.917, -30.1576)
|
||||
scale = Vector2(0.975156, 1.03785)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D24" type="Sprite2D" parent="MiddleItems" index="1"]
|
||||
position = Vector2(-183.354, -27.1013)
|
||||
scale = Vector2(0.717995, 0.671738)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D36" type="Sprite2D" parent="MiddleItems" index="2"]
|
||||
position = Vector2(-212.586, 12.8311)
|
||||
scale = Vector2(1.44714, 1.06319)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D25" type="Sprite2D" parent="MiddleItems" index="3"]
|
||||
position = Vector2(-103.367, -29.1388)
|
||||
scale = Vector2(1.37633, 1.14715)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D26" type="Sprite2D" parent="MiddleItems" index="4"]
|
||||
position = Vector2(-55.2032, -27.1291)
|
||||
scale = Vector2(0.994956, 0.881988)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D27" type="Sprite2D" parent="MiddleItems" index="5"]
|
||||
position = Vector2(-13.5044, -29.1388)
|
||||
scale = Vector2(1.06825, 0.948976)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D28" type="Sprite2D" parent="MiddleItems" index="6"]
|
||||
position = Vector2(-149.625, -26.4487)
|
||||
scale = Vector2(0.92681, 0.836754)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D29" type="Sprite2D" parent="MiddleItems" index="7"]
|
||||
position = Vector2(25.0081, -28.1201)
|
||||
scale = Vector2(0.86612, 0.790593)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D30" type="Sprite2D" parent="MiddleItems" index="8"]
|
||||
position = Vector2(148.446, -27.1013)
|
||||
scale = Vector2(0.833718, 0.910773)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D31" type="Sprite2D" parent="MiddleItems" index="9"]
|
||||
position = Vector2(75.3706, -27.1013)
|
||||
scale = Vector2(1.65663, 1.14848)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D32" type="Sprite2D" parent="MiddleItems" index="10"]
|
||||
position = Vector2(119.808, -27.1013)
|
||||
scale = Vector2(0.597901, 0.625178)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D3" type="Sprite2D" parent="MiddleItems" index="11"]
|
||||
position = Vector2(-210.547, 36.8478)
|
||||
scale = Vector2(0.9875, 1.01875)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D4" type="Sprite2D" parent="MiddleItems" index="12"]
|
||||
position = Vector2(-175.547, 39.8478)
|
||||
scale = Vector2(0.727083, 0.659375)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D6" type="Sprite2D" parent="MiddleItems" index="13"]
|
||||
position = Vector2(-94.5466, 37.8478)
|
||||
scale = Vector2(1.39375, 1.12604)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D7" type="Sprite2D" parent="MiddleItems" index="14"]
|
||||
position = Vector2(-45.7732, 39.8205)
|
||||
scale = Vector2(1.00755, 0.865755)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D8" type="Sprite2D" parent="MiddleItems" index="15"]
|
||||
position = Vector2(-3.54663, 37.8478)
|
||||
scale = Vector2(1.08177, 0.93151)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D5" type="Sprite2D" parent="MiddleItems" index="16"]
|
||||
position = Vector2(-141.39, 40.4884)
|
||||
scale = Vector2(0.938542, 0.821354)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D9" type="Sprite2D" parent="MiddleItems" index="17"]
|
||||
position = Vector2(35.8284, 29.7978)
|
||||
scale = Vector2(0.877084, 0.776042)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D33" type="Sprite2D" parent="MiddleItems" index="18"]
|
||||
position = Vector2(204.828, 36.7978)
|
||||
scale = Vector2(1.2776, 0.944375)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D10" type="Sprite2D" parent="MiddleItems" index="19"]
|
||||
position = Vector2(160.453, 39.8478)
|
||||
scale = Vector2(0.844271, 0.89401)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D11" type="Sprite2D" parent="MiddleItems" index="20"]
|
||||
position = Vector2(86.4534, 39.8478)
|
||||
scale = Vector2(1.6776, 1.12734)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D12" type="Sprite2D" parent="MiddleItems" index="21"]
|
||||
position = Vector2(131.453, 39.8478)
|
||||
scale = Vector2(0.605469, 0.613672)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D13" type="Sprite2D" parent="MiddleItems" index="22"]
|
||||
position = Vector2(-150.547, 2.84776)
|
||||
scale = Vector2(0.9875, 1.01875)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D14" type="Sprite2D" parent="MiddleItems" index="23"]
|
||||
position = Vector2(-115.547, 5.84776)
|
||||
scale = Vector2(0.727083, 0.659375)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D15" type="Sprite2D" parent="MiddleItems" index="24"]
|
||||
position = Vector2(-34.5466, 3.84776)
|
||||
scale = Vector2(1.39375, 1.12604)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D16" type="Sprite2D" parent="MiddleItems" index="25"]
|
||||
position = Vector2(14.2268, 5.82046)
|
||||
scale = Vector2(1.00755, 0.865755)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D17" type="Sprite2D" parent="MiddleItems" index="26"]
|
||||
position = Vector2(56.4534, 3.84775)
|
||||
scale = Vector2(1.08177, 0.93151)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D18" type="Sprite2D" parent="MiddleItems" index="27"]
|
||||
position = Vector2(-81.3904, 6.48835)
|
||||
scale = Vector2(0.938542, 0.821354)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D19" type="Sprite2D" parent="MiddleItems" index="28"]
|
||||
position = Vector2(95.4534, 4.84776)
|
||||
scale = Vector2(0.877084, 0.776042)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D20" type="Sprite2D" parent="MiddleItems" index="29"]
|
||||
position = Vector2(220.453, 5.84776)
|
||||
scale = Vector2(0.844271, 0.89401)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D34" type="Sprite2D" parent="MiddleItems" index="30"]
|
||||
position = Vector2(199.664, -19.0197)
|
||||
scale = Vector2(1.10547, 1.04547)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D35" type="Sprite2D" parent="MiddleItems" index="31"]
|
||||
position = Vector2(-168.172, 17.7978)
|
||||
scale = Vector2(0.952734, 0.892427)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D21" type="Sprite2D" parent="MiddleItems" index="32"]
|
||||
position = Vector2(146.453, 5.84776)
|
||||
scale = Vector2(1.6776, 1.12734)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="Sprite2D22" type="Sprite2D" parent="MiddleItems" index="33"]
|
||||
position = Vector2(191.453, 5.84776)
|
||||
scale = Vector2(0.605469, 0.613672)
|
||||
texture = ExtResource("2_7ibea")
|
||||
offset = Vector2(0, -16)
|
||||
|
||||
[node name="MainSprite" parent="." index="4"]
|
||||
z_index = -1
|
||||
sprite_frames = SubResource("SpriteFrames_8kxhm")
|
||||
|
||||
[node name="Panel" parent="Interactable" index="1"]
|
||||
offset_left = 231.0
|
||||
offset_top = -46.0
|
||||
offset_right = 296.0
|
||||
offset_bottom = 56.0
|
||||
|
||||
[node name="Buildable" parent="." index="6"]
|
||||
position = Vector2(295, 5)
|
||||
|
||||
[node name="CollisionShape2D" parent="Buildable/InteractionArea" index="0"]
|
||||
shape = SubResource("CircleShape2D_kr21r")
|
||||
|
||||
[node name="BuildingBar" parent="." index="8"]
|
||||
offset_left = -59.0
|
||||
offset_top = -103.0
|
||||
offset_right = 54.0
|
||||
offset_bottom = -87.0
|
||||
|
||||
[node name="HealthBar" parent="." index="9"]
|
||||
offset_left = -58.0
|
||||
offset_top = -115.0
|
||||
offset_right = 52.0
|
||||
offset_bottom = -101.0
|
||||
|
||||
[node name="Fires" parent="." index="11"]
|
||||
visible = false
|
||||
y_sort_enabled = true
|
||||
|
||||
[node name="Fire" type="AnimatedSprite2D" parent="Fires" index="0"]
|
||||
position = Vector2(-156, 19)
|
||||
sprite_frames = SubResource("SpriteFrames_6h3kv")
|
||||
offset = Vector2(0, -40)
|
||||
script = ExtResource("7_somjb")
|
||||
|
||||
[node name="Fire2" type="AnimatedSprite2D" parent="Fires" index="1"]
|
||||
position = Vector2(-7, -14)
|
||||
sprite_frames = SubResource("SpriteFrames_6h3kv")
|
||||
offset = Vector2(0, -40)
|
||||
script = ExtResource("7_somjb")
|
||||
|
||||
[node name="Fire3" type="AnimatedSprite2D" parent="Fires" index="2"]
|
||||
position = Vector2(148, 17)
|
||||
sprite_frames = SubResource("SpriteFrames_6h3kv")
|
||||
offset = Vector2(0, -40)
|
||||
script = ExtResource("7_somjb")
|
||||
|
||||
[node name="StandingZone" type="Area2D" parent="." index="14"]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="StandingZone" index="0"]
|
||||
position = Vector2(-1, -3.5)
|
||||
shape = SubResource("RectangleShape2D_nny5n")
|
||||
|
||||
[connection signal="area_entered" from="StandingZone" to="." method="_on_standing_zone_area_entered"]
|
||||
[connection signal="area_exited" from="StandingZone" to="." method="_on_standing_zone_area_exited"]
|
||||
|
||||
[editable path="Interactable"]
|
||||
[editable path="Interactable/ActionMenu"]
|
||||
[editable path="Buildable"]
|
||||
BIN
Objects/SkillSpecific/Building/BeaverDam/BeaverDamBase.png
Normal file
|
After Width: | Height: | Size: 600 B |
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b67o4ynk1eu4j"
|
||||
path="res://.godot/imported/BeaverDamBase.png-cb0f888401f4f87ec68d88d76eb9ef48.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Objects/SkillSpecific/Building/BeaverDam/BeaverDamBase.png"
|
||||
dest_files=["res://.godot/imported/BeaverDamBase.png-cb0f888401f4f87ec68d88d76eb9ef48.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
Objects/SkillSpecific/Building/BeaverDam/DamOnAString1.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cdve37obs7abb"
|
||||
path="res://.godot/imported/DamOnAString1.png-e8e855aced964410a7a46240217c57d7.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Objects/SkillSpecific/Building/BeaverDam/DamOnAString1.png"
|
||||
dest_files=["res://.godot/imported/DamOnAString1.png-e8e855aced964410a7a46240217c57d7.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
Objects/SkillSpecific/Building/BeaverDam/DamOnAString2.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bms7t3kyueg0r"
|
||||
path="res://.godot/imported/DamOnAString2.png-976aa6b62d0539119435e7426613360e.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Objects/SkillSpecific/Building/BeaverDam/DamOnAString2.png"
|
||||
dest_files=["res://.godot/imported/DamOnAString2.png-976aa6b62d0539119435e7426613360e.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
|
||||
399
Objects/SkillSpecific/Building/BuildingZone.gd
Normal file
|
|
@ -0,0 +1,399 @@
|
|||
extends Node2D
|
||||
|
||||
@export var savePrefix:String = ""
|
||||
var materialInvName
|
||||
var smokeScene = preload("res://Skills/Arson/Smoke.tscn")
|
||||
var groundItemScene = preload("res://Objects/GroundItems/GroundItem.tscn")
|
||||
|
||||
const damFireStarterClass = preload("res://Items/Artificial/Products/DamFireStarter.gd")
|
||||
|
||||
var buildingMaterial:Item
|
||||
var buildingHealth = 0
|
||||
var buildingProgress = -1
|
||||
|
||||
var fireSound:AudioStreamPlayer2D
|
||||
var onFire = false
|
||||
var fireDamage = 10
|
||||
|
||||
var flintSoundPlayer
|
||||
var lastSoundIndex = -1
|
||||
var flintSounds = []
|
||||
|
||||
var health = 0
|
||||
var maxHealth = 0
|
||||
|
||||
var fireXpCounter = 10
|
||||
var fireXpCollected = 0
|
||||
|
||||
var complete = false
|
||||
|
||||
var rng = RandomNumberGenerator.new()
|
||||
|
||||
func _ready():
|
||||
fireSound = $FireSound
|
||||
initialize_flint_sounds()
|
||||
|
||||
load_build()
|
||||
|
||||
if buildingMaterial != null and buildingProgress >= get_stages_for_item(buildingMaterial):
|
||||
fully_built(true)
|
||||
else:
|
||||
if buildingMaterial != null:
|
||||
%BuildingBar.value = 0
|
||||
%BuildingBar.max_value = get_stages_for_item(buildingMaterial)
|
||||
$MainSprite.visible = false
|
||||
complete = false
|
||||
hide_other_visuals()
|
||||
|
||||
func load_build():
|
||||
materialInvName = savePrefix + "Material"
|
||||
var materialInv = InventoryManager.get_inventory(materialInvName)
|
||||
if materialInv.items.size() > 0:
|
||||
buildingMaterial = materialInv.items[0]
|
||||
|
||||
buildingProgress = SaveManager.get_save_value(savePrefix + "Progress", -1)
|
||||
|
||||
func save_build():
|
||||
var materialInv = InventoryManager.get_inventory(materialInvName)
|
||||
materialInv.clear()
|
||||
if buildingMaterial != null:
|
||||
materialInv.add_item(buildingMaterial)
|
||||
|
||||
SaveManager.set_save_value(savePrefix + "Progress", buildingProgress)
|
||||
|
||||
func _process(delta):
|
||||
if onFire:
|
||||
if !complete:
|
||||
onFire = false
|
||||
else:
|
||||
$Fires.visible = true
|
||||
if !fireSound.playing:
|
||||
fireSound.play()
|
||||
take_damage(fireDamage * delta, true)
|
||||
else:
|
||||
$Fires.visible = false
|
||||
if fireSound != null and fireSound.playing:
|
||||
fireSound.stop()
|
||||
|
||||
if complete:
|
||||
%StageCounter.visible = false
|
||||
%BuildingBar.visible = false
|
||||
|
||||
if health >= maxHealth:
|
||||
%HealthBar.visible = false
|
||||
else:
|
||||
%HealthBar.visible = true
|
||||
%HealthBar.max_value = maxHealth
|
||||
%HealthBar.value = health
|
||||
else:
|
||||
if buildingProgress == -1:
|
||||
%StageCounter.visible = false
|
||||
%BuildingBar.visible = false
|
||||
%HealthBar.visible = false
|
||||
elif buildingProgress >= 0:
|
||||
%StageCounter.visible = true
|
||||
%BuildingBar.visible = true
|
||||
%HealthBar.visible = false
|
||||
|
||||
%StageCounter.text = "Stages: " + str(buildingProgress) + "/" + str(get_stages_for_item(buildingMaterial))
|
||||
%BuildingBar.value = buildingProgress
|
||||
|
||||
func take_damage(damage, fireDamage = false):
|
||||
health -= damage
|
||||
if fireDamage:
|
||||
fireXpCounter -= damage
|
||||
if fireXpCounter <= 0:
|
||||
LevelManager.add_XP("arson", 6)
|
||||
fireXpCounter += 10
|
||||
fireXpCollected += damage
|
||||
|
||||
if health <= 0:
|
||||
if onFire and fireXpCollected > 0:
|
||||
LevelManager.add_XP("arson", fireXpCollected)
|
||||
|
||||
if onFire:
|
||||
LevelManager.get_skill("appreciating").experience_event("Dam", "burned a", 230)
|
||||
else:
|
||||
LevelManager.get_skill("appreciating").experience_event("Dam", "overloaded a", 230)
|
||||
experiencing_destruction(buildingMaterial)
|
||||
|
||||
if get_gumption(buildingMaterial) <= 0:
|
||||
AchievementManager.complete_achievement("Dunk Trap")
|
||||
|
||||
var itemToDrop = buildingMaterial.duplicate()
|
||||
if onFire:
|
||||
itemToDrop = AshGenerator.generate_ash(itemToDrop)
|
||||
|
||||
drop_items(itemToDrop)
|
||||
|
||||
unbuilt()
|
||||
|
||||
func experiencing_destruction(item):
|
||||
pass
|
||||
|
||||
func stage_complete():
|
||||
buildingProgress += 1
|
||||
var xp = 0
|
||||
if buildingProgress >= get_stages_for_item(buildingMaterial):
|
||||
xp += get_completion_xp()
|
||||
else:
|
||||
xp += get_stage_xp()
|
||||
|
||||
LevelManager.add_XP("building", xp)
|
||||
|
||||
save_build()
|
||||
if buildingProgress < get_stages_for_item(buildingMaterial):
|
||||
return true
|
||||
else:
|
||||
fully_built()
|
||||
return false
|
||||
|
||||
func demolish():
|
||||
if demolish_check():
|
||||
var player:Cow = GameVariables.player
|
||||
player.demolish(self)
|
||||
|
||||
func demolish_check():
|
||||
if !complete and buildingProgress > 0:
|
||||
return true
|
||||
return false
|
||||
|
||||
func get_demolishing_speed():
|
||||
if buildingProgress <= 1:
|
||||
return 100
|
||||
else:
|
||||
var speed = 100/(buildingProgress/2)
|
||||
return speed
|
||||
|
||||
func demolished():
|
||||
unbuilt()
|
||||
|
||||
func arson():
|
||||
if arson_check():
|
||||
play_flint_sound()
|
||||
if arson_skill_check():
|
||||
burn()
|
||||
|
||||
func arson_check():
|
||||
if complete and !onFire:
|
||||
return true
|
||||
return false
|
||||
|
||||
func arson_skill_check():
|
||||
var fireChance = buildingMaterial.get_flammability()*0.5
|
||||
fireChance -= 30
|
||||
|
||||
var currentLevel = LevelManager.get_skill("arson").currentLevel
|
||||
fireChance += currentLevel*1.5
|
||||
|
||||
var penalty = floor(((70-buildingMaterial.get_flammability()) - currentLevel)/10)
|
||||
if penalty > 0:
|
||||
for i in range(penalty):
|
||||
fireChance = fireChance * 0.75
|
||||
|
||||
if InventoryManager.check_if_in_inventory(damFireStarterClass.new(), 1, "keyItems"):
|
||||
if fireChance < 0:
|
||||
fireChance = 0
|
||||
fireChance += 3
|
||||
|
||||
if rng.randi_range(0, 100) <= fireChance:
|
||||
return true
|
||||
else:
|
||||
if fireChance >= 1:
|
||||
smoke()
|
||||
return false
|
||||
|
||||
func initialize_flint_sounds():
|
||||
flintSoundPlayer = $FlintSounds
|
||||
flintSounds.append(load("res://Sounds/SFX/Fire/Flint/flint1.mp3"))
|
||||
flintSounds.append(load("res://Sounds/SFX/Fire/Flint/flint2.mp3"))
|
||||
flintSounds.append(load("res://Sounds/SFX/Fire/Flint/flint3.mp3"))
|
||||
flintSounds.append(load("res://Sounds/SFX/Fire/Flint/flint4.mp3"))
|
||||
flintSounds.append(load("res://Sounds/SFX/Fire/Flint/flint5.mp3"))
|
||||
flintSounds.append(load("res://Sounds/SFX/Fire/Flint/flint6.mp3"))
|
||||
flintSounds.append(load("res://Sounds/SFX/Fire/Flint/flint7.mp3"))
|
||||
flintSounds.append(load("res://Sounds/SFX/Fire/Flint/flint8.mp3"))
|
||||
|
||||
func play_flint_sound():
|
||||
var newIndex = rng.randi_range(0, flintSounds.size() - 1)
|
||||
|
||||
if newIndex == lastSoundIndex:
|
||||
newIndex = rng.randi_range(0, flintSounds.size() - 1)
|
||||
|
||||
flintSoundPlayer.stream = flintSounds[newIndex]
|
||||
flintSoundPlayer.play()
|
||||
lastSoundIndex = newIndex
|
||||
|
||||
func burn():
|
||||
onFire = true
|
||||
|
||||
func smoke():
|
||||
var smokeOffsets = [Vector2(-156, 20), Vector2(-7, -14), Vector2(148, 17)]
|
||||
|
||||
for offset in smokeOffsets:
|
||||
var newSmoke = smokeScene.instantiate()
|
||||
newSmoke.position = position + offset
|
||||
newSmoke.emitting = true
|
||||
get_parent().add_child(newSmoke)
|
||||
|
||||
func unbuilt():
|
||||
$MainSprite.visible = false
|
||||
complete = false
|
||||
buildingProgress = -1
|
||||
buildingMaterial = null
|
||||
hide_other_visuals()
|
||||
save_build()
|
||||
|
||||
func drop_items(item):
|
||||
var groundItemOffsets = [Vector2(80, 10), Vector2(-80, 10), Vector2(0, -20),
|
||||
Vector2(-160, 20), Vector2(160, 20)]
|
||||
|
||||
var itemsBack = 0
|
||||
var itemsUsed = get_stages_for_item(buildingMaterial)
|
||||
if itemsUsed >= 2:
|
||||
itemsBack += 1
|
||||
if itemsUsed >= 5:
|
||||
itemsBack += 1
|
||||
if itemsUsed >= 25:
|
||||
itemsBack += 3
|
||||
|
||||
for offset in groundItemOffsets:
|
||||
if itemsBack <= 0:
|
||||
break
|
||||
else:
|
||||
itemsBack -= 1
|
||||
var newGroundItem = groundItemScene.instantiate()
|
||||
newGroundItem.set_item(item.duplicate())
|
||||
newGroundItem.global_position = global_position + offset
|
||||
|
||||
LocationManager.currentLocation.add_child(newGroundItem)
|
||||
|
||||
func hide_other_visuals():
|
||||
pass
|
||||
|
||||
func fully_built(loadedState = false):
|
||||
if !loadedState:
|
||||
LevelManager.get_skill("appreciating").experience_item(buildingMaterial, "dammed")
|
||||
|
||||
maxHealth = get_max_health()
|
||||
health = maxHealth
|
||||
complete = true
|
||||
|
||||
fireXpCollected = ceili(get_completion_xp()/4)
|
||||
fireXpCounter = 10
|
||||
|
||||
func get_max_health():
|
||||
var newMaxHealth = 20
|
||||
newMaxHealth += get_gumption(buildingMaterial) * 2
|
||||
if newMaxHealth > 500:
|
||||
newMaxHealth = 500
|
||||
|
||||
if newMaxHealth <= 5:
|
||||
newMaxHealth = 5
|
||||
|
||||
return newMaxHealth
|
||||
|
||||
func get_stage_xp():
|
||||
var difficulty = abs(buildingMaterial.get_hardness() - 30)
|
||||
var xpReward = 1
|
||||
xpReward += difficulty * 0.2
|
||||
|
||||
xpReward = floori(xpReward)
|
||||
return xpReward
|
||||
|
||||
func get_completion_xp():
|
||||
var difficulty = abs(buildingMaterial.get_hardness() - 30)
|
||||
var xpReward = 250
|
||||
xpReward += get_stages_for_item(buildingMaterial) * 2
|
||||
xpReward += difficulty * 8
|
||||
|
||||
xpReward = floori(xpReward)
|
||||
return xpReward
|
||||
|
||||
func build():
|
||||
if build_check():
|
||||
var player:Cow = GameVariables.player
|
||||
player.build(buildingMaterial, self)
|
||||
|
||||
func build_check():
|
||||
if buildingProgress >= 0 and !complete:
|
||||
return true
|
||||
return false
|
||||
|
||||
func plan():
|
||||
if plan_check():
|
||||
open_planning_menu()
|
||||
|
||||
func open_planning_menu():
|
||||
$PlanningWindow.popup_centered()
|
||||
$PlanningWindow.opened()
|
||||
|
||||
func plan_check():
|
||||
if buildingProgress <= 0:
|
||||
return true
|
||||
return false
|
||||
|
||||
func set_plan(material:Item):
|
||||
buildingMaterial = material
|
||||
buildingProgress = 0
|
||||
%BuildingBar.value = 0
|
||||
%BuildingBar.max_value = get_stages_for_item(buildingMaterial)
|
||||
save_build()
|
||||
|
||||
func get_success_chance(item:Item):
|
||||
var chance = 100
|
||||
var playerLevel = LevelManager.get_skill("building").currentLevel
|
||||
|
||||
var difficulty = abs(item.get_hardness() - 30)
|
||||
var difficultyDif = difficulty - playerLevel
|
||||
if difficultyDif <= 0:
|
||||
difficultyDif = 0
|
||||
|
||||
var difficultySteps = floori(difficultyDif/5)
|
||||
chance -= difficultySteps * 5
|
||||
chance -= difficultyDif * 2
|
||||
|
||||
if difficultyDif > 5:
|
||||
chance -= 15
|
||||
if difficultyDif > 10:
|
||||
chance -= 10
|
||||
|
||||
if chance <= 1:
|
||||
chance = 1
|
||||
elif chance > 100:
|
||||
chance = 100
|
||||
|
||||
return chance
|
||||
|
||||
func get_stages_for_item(item:Item):
|
||||
if item == null:
|
||||
return 0
|
||||
|
||||
var stages = 0
|
||||
|
||||
if item.get_weight() <= 0:
|
||||
stages = 10
|
||||
elif item.get_weight() <= 0.2:
|
||||
stages = 250
|
||||
else:
|
||||
stages = ceili(float(50)/float(item.get_weight()))
|
||||
|
||||
if item.get_name(false) == "Worm on a String" or item.get_name(false) == "Basket on a String":
|
||||
stages = 80
|
||||
|
||||
return stages
|
||||
|
||||
func get_gumption(item:Item):
|
||||
var gumption = 0
|
||||
gumption += item.get_hardness() * 2
|
||||
if item.get_hardness() > 30:
|
||||
gumption += (item.get_hardness() - 30) * 2
|
||||
if item.get_hardness() > 50:
|
||||
gumption += (item.get_hardness() - 50) * 5
|
||||
if item.get_hardness() > 70:
|
||||
gumption += (item.get_hardness() - 70) * 10
|
||||
if item.get_hardness() > 90:
|
||||
gumption += (item.get_hardness() - 90) * 50
|
||||
|
||||
return gumption
|
||||
|
||||
129
Objects/SkillSpecific/Building/BuildingZone.tscn
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
[gd_scene load_steps=13 format=3 uid="uid://cufhvngt5p0pu"]
|
||||
|
||||
[ext_resource type="Script" path="res://Objects/SkillSpecific/Building/BuildingZone.gd" id="1_vrk03"]
|
||||
[ext_resource type="Texture2D" uid="uid://b67o4ynk1eu4j" path="res://Objects/SkillSpecific/Building/BeaverDam/BeaverDamBase.png" id="1_ysxqw"]
|
||||
[ext_resource type="PackedScene" uid="uid://bqibe7ha6r5ls" path="res://Interactions/Interactable/interactable.tscn" id="3_2nolj"]
|
||||
[ext_resource type="Texture2D" uid="uid://bl4mkg8ccwrhk" path="res://MiscArt/White.png" id="4_jvrsc"]
|
||||
[ext_resource type="PackedScene" uid="uid://cf3aqkjfurrjs" path="res://Interactions/Building/BuildingSpot/Buildable.tscn" id="5_4q0jh"]
|
||||
[ext_resource type="PackedScene" uid="uid://do0yyc8tr7wbh" path="res://UI/Building/PlanningWindow.tscn" id="6_dpwye"]
|
||||
[ext_resource type="AudioStream" uid="uid://dvhansvh7f4hx" path="res://Sounds/SFX/Fire/fire.mp3" id="7_wapdb"]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_6l052"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("1_ysxqw")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"default",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_7gb4c"]
|
||||
bg_color = Color(0.729412, 0.556863, 0.482353, 1)
|
||||
border_width_left = 2
|
||||
border_width_top = 2
|
||||
border_width_right = 2
|
||||
border_width_bottom = 2
|
||||
border_color = Color(0, 0, 0, 1)
|
||||
corner_radius_top_left = 6
|
||||
corner_radius_top_right = 6
|
||||
corner_radius_bottom_right = 6
|
||||
corner_radius_bottom_left = 6
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ymita"]
|
||||
bg_color = Color(0.211765, 0.313726, 0.968627, 1)
|
||||
border_width_left = 2
|
||||
border_width_top = 2
|
||||
border_width_right = 2
|
||||
border_width_bottom = 2
|
||||
border_color = Color(0.8, 0.8, 0.8, 0)
|
||||
corner_radius_top_left = 5
|
||||
corner_radius_top_right = 5
|
||||
corner_radius_bottom_right = 5
|
||||
corner_radius_bottom_left = 5
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_rwi2n"]
|
||||
bg_color = Color(0.929412, 0.866667, 0.968627, 1)
|
||||
border_width_left = 2
|
||||
border_width_top = 2
|
||||
border_width_right = 2
|
||||
border_width_bottom = 2
|
||||
border_color = Color(0, 0, 0, 1)
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_33uhg"]
|
||||
bg_color = Color(0.913725, 0, 0.172549, 1)
|
||||
border_width_left = 2
|
||||
border_width_top = 2
|
||||
border_width_right = 2
|
||||
border_width_bottom = 2
|
||||
border_color = Color(0.8, 0.8, 0.8, 0)
|
||||
|
||||
[node name="BuildingZone" type="Node2D"]
|
||||
script = ExtResource("1_vrk03")
|
||||
|
||||
[node name="SelectionRegionIndicator" type="Sprite2D" parent="."]
|
||||
self_modulate = Color(0.341176, 1, 1, 0.564706)
|
||||
z_index = -1
|
||||
position = Vector2(0, 73)
|
||||
texture = ExtResource("4_jvrsc")
|
||||
|
||||
[node name="MainSprite" type="AnimatedSprite2D" parent="."]
|
||||
sprite_frames = SubResource("SpriteFrames_6l052")
|
||||
|
||||
[node name="Interactable" parent="." instance=ExtResource("3_2nolj")]
|
||||
|
||||
[node name="Buildable" parent="." instance=ExtResource("5_4q0jh")]
|
||||
|
||||
[node name="PlanningWindow" parent="." instance=ExtResource("6_dpwye")]
|
||||
visible = false
|
||||
|
||||
[node name="BuildingBar" type="ProgressBar" parent="."]
|
||||
unique_name_in_owner = true
|
||||
offset_left = -58.0
|
||||
offset_top = -100.0
|
||||
offset_right = 55.0
|
||||
offset_bottom = -84.0
|
||||
theme_override_styles/background = SubResource("StyleBoxFlat_7gb4c")
|
||||
theme_override_styles/fill = SubResource("StyleBoxFlat_ymita")
|
||||
show_percentage = false
|
||||
|
||||
[node name="HealthBar" type="ProgressBar" parent="."]
|
||||
unique_name_in_owner = true
|
||||
offset_left = -52.0
|
||||
offset_top = -79.0
|
||||
offset_right = 51.0
|
||||
offset_bottom = -70.0
|
||||
theme_override_styles/background = SubResource("StyleBoxFlat_rwi2n")
|
||||
theme_override_styles/fill = SubResource("StyleBoxFlat_33uhg")
|
||||
value = 40.0
|
||||
show_percentage = false
|
||||
|
||||
[node name="StageCounter" type="Label" parent="."]
|
||||
unique_name_in_owner = true
|
||||
offset_left = -93.0
|
||||
offset_top = -134.0
|
||||
offset_right = 89.0
|
||||
offset_bottom = -105.0
|
||||
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||
theme_override_constants/outline_size = 10
|
||||
theme_override_font_sizes/font_size = 20
|
||||
text = "Stages: 500/500"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="Fires" type="Node2D" parent="."]
|
||||
|
||||
[node name="FireSound" type="AudioStreamPlayer2D" parent="."]
|
||||
stream = ExtResource("7_wapdb")
|
||||
max_distance = 600.0
|
||||
bus = &"SFX"
|
||||
|
||||
[node name="FlintSounds" type="AudioStreamPlayer2D" parent="."]
|
||||
max_distance = 400.0
|
||||
bus = &"SFX"
|
||||
|
||||
[editable path="Interactable"]
|
||||
[editable path="Interactable/ActionMenu"]
|
||||
|
After Width: | Height: | Size: 918 B |
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c3cg3cj6squn1"
|
||||
path="res://.godot/imported/SandCastleSprite.png-287405f6640cd67bc8cf97c6d0767957.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Objects/SkillSpecific/Building/SandcastleBuilding/SandCastleSprite.png"
|
||||
dest_files=["res://.godot/imported/SandCastleSprite.png-287405f6640cd67bc8cf97c6d0767957.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
|
||||
|
After Width: | Height: | Size: 918 B |
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://uq5dcqmnqaql"
|
||||
path="res://.godot/imported/SandCastleSprite1.png-54691a4cc9c89d3b1504496309ce36a5.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Objects/SkillSpecific/Building/SandcastleBuilding/SandCastleSprite1.png"
|
||||
dest_files=["res://.godot/imported/SandCastleSprite1.png-54691a4cc9c89d3b1504496309ce36a5.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
|
||||
|
After Width: | Height: | Size: 997 B |
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bxtx623v3t51f"
|
||||
path="res://.godot/imported/SandCastleSprite2.png-c7eefb999ed1fd307b6b1b8305ffec1b.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Objects/SkillSpecific/Building/SandcastleBuilding/SandCastleSprite2.png"
|
||||
dest_files=["res://.godot/imported/SandCastleSprite2.png-c7eefb999ed1fd307b6b1b8305ffec1b.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
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dtdjvhf5igqb0"
|
||||
path="res://.godot/imported/SandCastleSprite3.png-745a2a20dfce4f8c57bae7152d11b47a.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Objects/SkillSpecific/Building/SandcastleBuilding/SandCastleSprite3.png"
|
||||
dest_files=["res://.godot/imported/SandCastleSprite3.png-745a2a20dfce4f8c57bae7152d11b47a.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
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cn27yxm81u1i6"
|
||||
path="res://.godot/imported/SandCastleSprite4.png-dff1bc366c7a00306e80bcd5a12631d0.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Objects/SkillSpecific/Building/SandcastleBuilding/SandCastleSprite4.png"
|
||||
dest_files=["res://.godot/imported/SandCastleSprite4.png-dff1bc366c7a00306e80bcd5a12631d0.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
|
||||
|
After Width: | Height: | Size: 910 B |
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dti4tf7wh63g6"
|
||||
path="res://.godot/imported/SandCastleSprite5.png-a530521ff1fd212c1f3b3f4d8a584c6f.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Objects/SkillSpecific/Building/SandcastleBuilding/SandCastleSprite5.png"
|
||||
dest_files=["res://.godot/imported/SandCastleSprite5.png-a530521ff1fd212c1f3b3f4d8a584c6f.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
|
||||
|
After Width: | Height: | Size: 336 B |
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://coscvhegqejkr"
|
||||
path="res://.godot/imported/SandCastleSprite6.png-2ed72fac70324553c48041b8d2bee3d8.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Objects/SkillSpecific/Building/SandcastleBuilding/SandCastleSprite6.png"
|
||||
dest_files=["res://.godot/imported/SandCastleSprite6.png-2ed72fac70324553c48041b8d2bee3d8.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
|
||||
118
Objects/SkillSpecific/Building/SandcastleBuilding/Sandcastle.gd
Normal file
|
|
@ -0,0 +1,118 @@
|
|||
extends "res://Objects/SkillSpecific/Building/BuildingZone.gd"
|
||||
|
||||
func _ready():
|
||||
super._ready()
|
||||
|
||||
func _process(delta):
|
||||
super._process(delta)
|
||||
if complete:
|
||||
take_damage(3 * delta)
|
||||
$SelectionRegionIndicator.visible = false
|
||||
|
||||
var castleDeterioration = (1 - float(float(health)/float(maxHealth)))
|
||||
var stepSize = float(1)/float(6)
|
||||
var castleFrame = floori(castleDeterioration/stepSize)
|
||||
if castleFrame > 5:
|
||||
castleFrame = 5
|
||||
$MainSprite.frame = castleFrame
|
||||
else:
|
||||
$SelectionRegionIndicator.visible = true
|
||||
|
||||
func experiencing_destruction(item):
|
||||
LevelManager.get_skill("appreciating").experience_item(item, "washed away")
|
||||
|
||||
func drop_items(item):
|
||||
pass
|
||||
|
||||
func get_stages_for_item(item:Item):
|
||||
if item == null:
|
||||
return 0
|
||||
|
||||
var stages = 0
|
||||
if item.get_weight() <= 0:
|
||||
stages = 4
|
||||
elif item.get_weight() <= 0.2:
|
||||
stages = 40
|
||||
else:
|
||||
stages = ceili(float(8)/float(item.get_weight()))
|
||||
|
||||
if item.get_name(false) == "Worm on a String" or item.get_name(false) == "Basket on a String":
|
||||
stages = 8
|
||||
|
||||
return stages
|
||||
|
||||
func take_damage(damage, fireDamage = false):
|
||||
health -= damage
|
||||
|
||||
if health <= 0:
|
||||
experiencing_destruction(buildingMaterial)
|
||||
unbuilt()
|
||||
|
||||
func get_stage_xp():
|
||||
var difficulty = abs(buildingMaterial.get_hardness() - 30)
|
||||
var xpReward = 1
|
||||
xpReward += difficulty * 0.1
|
||||
|
||||
xpReward = floori(xpReward)
|
||||
return xpReward
|
||||
|
||||
func get_completion_xp():
|
||||
var difficulty = abs(buildingMaterial.get_hardness() - 30)
|
||||
var xpReward = 48
|
||||
xpReward += get_stages_for_item(buildingMaterial) * 3
|
||||
xpReward += difficulty * 4
|
||||
|
||||
xpReward = floori(xpReward)
|
||||
return xpReward
|
||||
|
||||
func get_success_chance(item:Item):
|
||||
var chance = 100
|
||||
var playerLevel = LevelManager.get_skill("building").currentLevel
|
||||
|
||||
var difficulty = abs(item.get_hardness() - 30)
|
||||
var difficultyDif = difficulty - playerLevel - 10
|
||||
if difficultyDif <= 0:
|
||||
difficultyDif = 0
|
||||
|
||||
var difficultySteps = floori(difficultyDif/5)
|
||||
chance -= difficultySteps * 5
|
||||
chance -= difficultyDif * 2
|
||||
|
||||
if difficultyDif > 5:
|
||||
chance -= 15
|
||||
if difficultyDif > 10:
|
||||
chance -= 10
|
||||
|
||||
if chance <= 1:
|
||||
chance = 1
|
||||
elif chance > 100:
|
||||
chance = 100
|
||||
|
||||
return chance
|
||||
|
||||
func fully_built(loadedState = false):
|
||||
if !loadedState:
|
||||
LevelManager.get_skill("appreciating").experience_item(buildingMaterial, "castled")
|
||||
|
||||
maxHealth = get_max_health()
|
||||
health = maxHealth
|
||||
complete = true
|
||||
|
||||
if buildingMaterial.get_name(false) == "Worm on a String" or buildingMaterial.get_name(false) == "Basket on a String":
|
||||
$MainSprite.self_modulate = Color.WHITE
|
||||
$MainSprite.play("worm")
|
||||
$MainSprite.visible = true
|
||||
else:
|
||||
$MainSprite.play("default")
|
||||
$MainSprite.visible = true
|
||||
set_visible_bridge_material(buildingMaterial)
|
||||
|
||||
if buildingMaterial.get_name(false) == "Dirt":
|
||||
AchievementManager.complete_achievement("Hurt")
|
||||
|
||||
func set_visible_bridge_material(materialItem:Item):
|
||||
var itemSprite = materialItem.get_sprite()
|
||||
|
||||
var unmodifiedSprite = materialItem.get_sprite(false)
|
||||
var averageColor = SpriteGeneration.get_average_color(unmodifiedSprite.get_image())
|
||||
$MainSprite.self_modulate = averageColor
|
||||
|
|
@ -0,0 +1,180 @@
|
|||
[gd_scene load_steps=20 format=3 uid="uid://dkp3008p0m1ni"]
|
||||
|
||||
[ext_resource type="Script" path="res://Objects/SkillSpecific/Building/SandcastleBuilding/Sandcastle.gd" id="1_sh1by"]
|
||||
[ext_resource type="Texture2D" uid="uid://c3cg3cj6squn1" path="res://Objects/SkillSpecific/Building/SandcastleBuilding/SandCastleSprite.png" id="3_4suqa"]
|
||||
[ext_resource type="Texture2D" uid="uid://bbmlkil40xcbc" path="res://MiscArt/WhiteCircle.png" id="3_ev3yg"]
|
||||
[ext_resource type="Texture2D" uid="uid://cjqngnhrbng5m" path="res://Objects/SkillSpecific/Building/SandcastleBuilding/WormCastleSprite.png" id="4_f1juh"]
|
||||
[ext_resource type="PackedScene" uid="uid://bqibe7ha6r5ls" path="res://Interactions/Interactable/interactable.tscn" id="4_rkakq"]
|
||||
[ext_resource type="Texture2D" uid="uid://bxtx623v3t51f" path="res://Objects/SkillSpecific/Building/SandcastleBuilding/SandCastleSprite2.png" id="4_tv006"]
|
||||
[ext_resource type="Texture2D" uid="uid://dtdjvhf5igqb0" path="res://Objects/SkillSpecific/Building/SandcastleBuilding/SandCastleSprite3.png" id="5_4ni2r"]
|
||||
[ext_resource type="PackedScene" uid="uid://cf3aqkjfurrjs" path="res://Interactions/Building/BuildingSpot/Buildable.tscn" id="5_b7e6r"]
|
||||
[ext_resource type="PackedScene" uid="uid://b640j6bgsnyuq" path="res://UI/Building/SandcastlePlanningWindow.tscn" id="6_2q67m"]
|
||||
[ext_resource type="Texture2D" uid="uid://cn27yxm81u1i6" path="res://Objects/SkillSpecific/Building/SandcastleBuilding/SandCastleSprite4.png" id="6_vrgeq"]
|
||||
[ext_resource type="Script" path="res://Interactions/Building/BuildingSpot/SandcastleBuildable.gd" id="6_xrxsv"]
|
||||
[ext_resource type="Texture2D" uid="uid://dti4tf7wh63g6" path="res://Objects/SkillSpecific/Building/SandcastleBuilding/SandCastleSprite5.png" id="7_2j531"]
|
||||
[ext_resource type="Texture2D" uid="uid://coscvhegqejkr" path="res://Objects/SkillSpecific/Building/SandcastleBuilding/SandCastleSprite6.png" id="8_itbgy"]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_h8fjf"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("3_4suqa")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("4_tv006")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("5_4ni2r")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("6_vrgeq")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("7_2j531")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("8_itbgy")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"default",
|
||||
"speed": 5.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("4_f1juh")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("4_f1juh")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("4_f1juh")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("4_f1juh")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("4_f1juh")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"worm",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_ji20m"]
|
||||
radius = 63.0317
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_7gb4c"]
|
||||
bg_color = Color(0.729412, 0.556863, 0.482353, 1)
|
||||
border_width_left = 2
|
||||
border_width_top = 2
|
||||
border_width_right = 2
|
||||
border_width_bottom = 2
|
||||
border_color = Color(0, 0, 0, 1)
|
||||
corner_radius_top_left = 6
|
||||
corner_radius_top_right = 6
|
||||
corner_radius_bottom_right = 6
|
||||
corner_radius_bottom_left = 6
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ymita"]
|
||||
bg_color = Color(0.211765, 0.313726, 0.968627, 1)
|
||||
border_width_left = 2
|
||||
border_width_top = 2
|
||||
border_width_right = 2
|
||||
border_width_bottom = 2
|
||||
border_color = Color(0.8, 0.8, 0.8, 0)
|
||||
corner_radius_top_left = 5
|
||||
corner_radius_top_right = 5
|
||||
corner_radius_bottom_right = 5
|
||||
corner_radius_bottom_left = 5
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_rwi2n"]
|
||||
bg_color = Color(0.929412, 0.866667, 0.968627, 1)
|
||||
border_width_left = 2
|
||||
border_width_top = 2
|
||||
border_width_right = 2
|
||||
border_width_bottom = 2
|
||||
border_color = Color(0, 0, 0, 1)
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_33uhg"]
|
||||
bg_color = Color(0.913725, 0, 0.172549, 1)
|
||||
border_width_left = 2
|
||||
border_width_top = 2
|
||||
border_width_right = 2
|
||||
border_width_bottom = 2
|
||||
border_color = Color(0.8, 0.8, 0.8, 0)
|
||||
|
||||
[node name="Sandcastle" type="Node2D"]
|
||||
script = ExtResource("1_sh1by")
|
||||
savePrefix = null
|
||||
|
||||
[node name="SelectionRegionIndicator" type="Sprite2D" parent="."]
|
||||
self_modulate = Color(0.341176, 1, 1, 0.564706)
|
||||
z_index = -1
|
||||
position = Vector2(-2, -8)
|
||||
scale = Vector2(3.05167, 0.926667)
|
||||
texture = ExtResource("3_ev3yg")
|
||||
|
||||
[node name="MainSprite" type="AnimatedSprite2D" parent="."]
|
||||
position = Vector2(-2, -39)
|
||||
sprite_frames = SubResource("SpriteFrames_h8fjf")
|
||||
|
||||
[node name="Interactable" parent="." instance=ExtResource("4_rkakq")]
|
||||
|
||||
[node name="Panel" parent="Interactable" index="1"]
|
||||
offset_left = -93.0
|
||||
offset_top = -37.0
|
||||
offset_right = 90.0
|
||||
offset_bottom = 20.0
|
||||
|
||||
[node name="Buildable" parent="." instance=ExtResource("5_b7e6r")]
|
||||
position = Vector2(-2, 0)
|
||||
script = ExtResource("6_xrxsv")
|
||||
|
||||
[node name="CollisionShape2D" parent="Buildable/InteractionArea" index="0"]
|
||||
position = Vector2(4, -22)
|
||||
shape = SubResource("CircleShape2D_ji20m")
|
||||
|
||||
[node name="PlanningWindow" parent="." instance=ExtResource("6_2q67m")]
|
||||
visible = false
|
||||
|
||||
[node name="BuildingBar" type="ProgressBar" parent="."]
|
||||
unique_name_in_owner = true
|
||||
offset_left = -58.0
|
||||
offset_top = -112.0
|
||||
offset_right = 55.0
|
||||
offset_bottom = -96.0
|
||||
theme_override_styles/background = SubResource("StyleBoxFlat_7gb4c")
|
||||
theme_override_styles/fill = SubResource("StyleBoxFlat_ymita")
|
||||
show_percentage = false
|
||||
|
||||
[node name="HealthBar" type="ProgressBar" parent="."]
|
||||
unique_name_in_owner = true
|
||||
offset_left = -57.0
|
||||
offset_top = -111.0
|
||||
offset_right = 53.0
|
||||
offset_bottom = -97.0
|
||||
theme_override_styles/background = SubResource("StyleBoxFlat_rwi2n")
|
||||
theme_override_styles/fill = SubResource("StyleBoxFlat_33uhg")
|
||||
value = 40.0
|
||||
show_percentage = false
|
||||
|
||||
[node name="StageCounter" type="Label" parent="."]
|
||||
unique_name_in_owner = true
|
||||
offset_left = -90.0
|
||||
offset_top = -145.0
|
||||
offset_right = 92.0
|
||||
offset_bottom = -116.0
|
||||
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||
theme_override_constants/outline_size = 10
|
||||
theme_override_font_sizes/font_size = 20
|
||||
text = "Stages: 500/500"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="Fires" type="Node2D" parent="."]
|
||||
|
||||
[editable path="Interactable"]
|
||||
[editable path="Interactable/ActionMenu"]
|
||||
[editable path="Buildable"]
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cjqngnhrbng5m"
|
||||
path="res://.godot/imported/WormCastleSprite.png-b6de59a71f8d9baa8c6685667a72031d.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Objects/SkillSpecific/Building/SandcastleBuilding/WormCastleSprite.png"
|
||||
dest_files=["res://.godot/imported/WormCastleSprite.png-b6de59a71f8d9baa8c6685667a72031d.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
|
||||