Add modular holdover fishing world

This commit is contained in:
Alexander Sellite 2026-07-26 00:33:37 -04:00
parent 6a5923fdb8
commit a91f2b9825
17 changed files with 1354 additions and 191 deletions

View file

@ -0,0 +1,140 @@
[gd_scene load_steps=21 format=3]
[ext_resource type="Script" path="res://world/regions/graybox_region.gd" id="1_region"]
[ext_resource type="Script" path="res://world/fishable_water_region.gd" id="2_water"]
[ext_resource type="Resource" path="res://fish/pools/test_water_pool.tres" id="3_pool"]
[ext_resource type="Script" path="res://world/player_water_trigger.gd" id="4_trigger"]
[ext_resource type="Script" path="res://world/safe_respawn_point.gd" id="5_safe"]
[sub_resource type="BoxShape3D" id="ShoreShape"]
size = Vector3(90, 6, 18)
[sub_resource type="BoxMesh" id="ShoreMesh"]
size = Vector3(90, 6, 18)
[sub_resource type="BoxShape3D" id="DockShape"]
size = Vector3(7, 0.4, 25)
[sub_resource type="BoxMesh" id="DockMesh"]
size = Vector3(7, 0.4, 25)
[sub_resource type="BoxShape3D" id="DockRampShape"]
size = Vector3(7, 0.35, 4)
[sub_resource type="BoxMesh" id="DockRampMesh"]
size = Vector3(7, 0.35, 4)
[sub_resource type="CylinderMesh" id="TowerMesh"]
top_radius = 2.4
bottom_radius = 3.4
height = 13
[sub_resource type="CylinderMesh" id="BeaconMesh"]
top_radius = 1.4
bottom_radius = 1.4
height = 2.5
[sub_resource type="BoxMesh" id="CraneArmMesh"]
size = Vector3(1, 1, 10)
[sub_resource type="PlaneMesh" id="WaterMesh"]
size = Vector2(90, 54)
[sub_resource type="BoxShape3D" id="WaterShape"]
size = Vector3(90, 0.2, 54)
[sub_resource type="BoxShape3D" id="RecoveryShape"]
size = Vector3(90, 5, 54)
[sub_resource type="StandardMaterial3D" id="ShoreMaterial"]
albedo_color = Color(0.7, 0.66, 0.5, 1)
[sub_resource type="StandardMaterial3D" id="DockMaterial"]
albedo_color = Color(0.58, 0.4, 0.2, 1)
[sub_resource type="StandardMaterial3D" id="TowerMaterial"]
albedo_color = Color(0.92, 0.9, 0.76, 1)
[sub_resource type="StandardMaterial3D" id="BeaconMaterial"]
albedo_color = Color(0.95, 0.28, 0.22, 1)
[sub_resource type="StandardMaterial3D" id="WaterMaterial"]
transparency = 1
albedo_color = Color(0.04, 0.3, 0.62, 0.84)
[node name="CoastalDockRegion" type="Node3D"]
script = ExtResource("1_region")
region_id = &"coast"
[node name="Visuals" type="Node3D" parent="."]
[node name="Shore" type="MeshInstance3D" parent="Visuals"]
position = Vector3(0, -3, 22)
mesh = SubResource("ShoreMesh")
material_override = SubResource("ShoreMaterial")
[node name="Ocean" type="MeshInstance3D" parent="Visuals"]
position = Vector3(0, 0.2, -14)
mesh = SubResource("WaterMesh")
material_override = SubResource("WaterMaterial")
[node name="MainDock" type="MeshInstance3D" parent="Visuals"]
position = Vector3(0, 0.45, -3.5)
mesh = SubResource("DockMesh")
material_override = SubResource("DockMaterial")
[node name="DockApproachRamp" type="MeshInstance3D" parent="Visuals"]
position = Vector3(0, 0.155, 11)
rotation_degrees = Vector3(9, 0, 0)
mesh = SubResource("DockRampMesh")
material_override = SubResource("DockMaterial")
[node name="Lighthouse" type="MeshInstance3D" parent="Visuals"]
position = Vector3(-32, 6.5, 20)
mesh = SubResource("TowerMesh")
material_override = SubResource("TowerMaterial")
[node name="Beacon" type="MeshInstance3D" parent="Visuals"]
position = Vector3(-32, 14, 20)
mesh = SubResource("BeaconMesh")
material_override = SubResource("BeaconMaterial")
[node name="CraneArm" type="MeshInstance3D" parent="Visuals"]
position = Vector3(17, 5, 19)
rotation_degrees = Vector3(0, 0, 60)
mesh = SubResource("CraneArmMesh")
material_override = SubResource("BeaconMaterial")
[node name="CoastLabel" type="Label3D" parent="Visuals"]
position = Vector3(25, 3.2, 23)
text = "COAST"
font_size = 38
outline_size = 8
billboard = 1
no_depth_test = true
[node name="StaticCollision" type="Node3D" parent="."]
[node name="Shore" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/Shore"]
position = Vector3(0, -3, 22)
shape = SubResource("ShoreShape")
[node name="MainDock" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/MainDock"]
position = Vector3(0, 0.45, -3.5)
shape = SubResource("DockShape")
[node name="DockApproachRamp" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/DockApproachRamp"]
position = Vector3(0, 0.155, 11)
rotation_degrees = Vector3(9, 0, 0)
shape = SubResource("DockRampShape")
[node name="FishingWater" type="Node3D" parent="."]
[node name="CoastalWater" type="Area3D" parent="FishingWater"]
position = Vector3(0, 0.2, -14)
collision_layer = 4
collision_mask = 0
monitoring = false
script = ExtResource("2_water")
location_tags = Array[StringName]([&"coast"])
fish_pool = ExtResource("3_pool")
[node name="Shape" type="CollisionShape3D" parent="FishingWater/CoastalWater"]
shape = SubResource("WaterShape")
[node name="WaterRecovery" type="Node3D" parent="."]
[node name="CoastalRecovery" type="Area3D" parent="WaterRecovery"]
position = Vector3(0, -2.3, -14)
collision_layer = 8
collision_mask = 2
script = ExtResource("4_trigger")
surface_height = 0.2
[node name="Shape" type="CollisionShape3D" parent="WaterRecovery/CoastalRecovery"]
shape = SubResource("RecoveryShape")
[node name="SafeRespawns" type="Node3D" parent="."]
[node name="DockApproach" type="Marker3D" parent="SafeRespawns"]
position = Vector3(8, 0.58, 23)
rotation_degrees = Vector3(0, 180, 0)
script = ExtResource("5_safe")
[node name="DockMidpoint" type="Marker3D" parent="SafeRespawns"]
position = Vector3(0, 1.23, 0)
rotation_degrees = Vector3(0, 180, 0)
script = ExtResource("5_safe")
[node name="LighthouseShore" type="Marker3D" parent="SafeRespawns"]
position = Vector3(-24, 0.58, 24)
rotation_degrees = Vector3(0, -135, 0)
script = ExtResource("5_safe")

View file

@ -0,0 +1,43 @@
class_name GrayboxRegion
extends Node3D
@export var region_id: StringName
@export var fishable_water_root: NodePath = ^"FishingWater"
@export var water_recovery_root: NodePath = ^"WaterRecovery"
@export var safe_respawns_root: NodePath = ^"SafeRespawns"
func get_fishable_water_regions() -> Array[FishableWaterRegion]:
var regions: Array[FishableWaterRegion] = []
var root: Node = get_node_or_null(fishable_water_root)
if root == null:
return regions
for child: Node in root.get_children():
var water: FishableWaterRegion = child as FishableWaterRegion
if water != null:
regions.append(water)
return regions
func get_water_recovery_triggers() -> Array[PlayerWaterTrigger]:
var triggers: Array[PlayerWaterTrigger] = []
var root: Node = get_node_or_null(water_recovery_root)
if root == null:
return triggers
for child: Node in root.get_children():
var trigger: PlayerWaterTrigger = child as PlayerWaterTrigger
if trigger != null:
triggers.append(trigger)
return triggers
func get_safe_respawn_points() -> Array[SafeRespawnPoint]:
var points: Array[SafeRespawnPoint] = []
var root: Node = get_node_or_null(safe_respawns_root)
if root == null:
return points
for child: Node in root.get_children():
var point: SafeRespawnPoint = child as SafeRespawnPoint
if point != null:
points.append(point)
return points

View file

@ -0,0 +1 @@
uid://bb1j0uhvrbf5n

View file

@ -0,0 +1,141 @@
[gd_scene load_steps=17 format=3]
[ext_resource type="Script" path="res://world/regions/graybox_region.gd" id="1_region"]
[ext_resource type="Script" path="res://world/fishable_water_region.gd" id="2_water"]
[ext_resource type="Resource" path="res://fish/pools/test_water_pool.tres" id="3_pool"]
[ext_resource type="Script" path="res://world/player_water_trigger.gd" id="4_trigger"]
[ext_resource type="Script" path="res://world/safe_respawn_point.gd" id="5_safe"]
[sub_resource type="BoxShape3D" id="BankNSShape"]
size = Vector3(58, 6, 10)
[sub_resource type="BoxShape3D" id="BankEWShape"]
size = Vector3(8, 6, 36)
[sub_resource type="BoxMesh" id="BankNSMesh"]
size = Vector3(58, 6, 10)
[sub_resource type="BoxMesh" id="BankEWMesh"]
size = Vector3(8, 6, 36)
[sub_resource type="BoxShape3D" id="DockShape"]
size = Vector3(10, 0.4, 7)
[sub_resource type="BoxMesh" id="DockMesh"]
size = Vector3(10, 0.4, 7)
[sub_resource type="BoxShape3D" id="DockRampShape"]
size = Vector3(4, 0.35, 7)
[sub_resource type="BoxMesh" id="DockRampMesh"]
size = Vector3(4, 0.35, 7)
[sub_resource type="PlaneMesh" id="WaterMesh"]
size = Vector2(42, 36)
[sub_resource type="BoxShape3D" id="WaterShape"]
size = Vector3(42, 0.2, 36)
[sub_resource type="BoxShape3D" id="RecoveryShape"]
size = Vector3(42, 5, 36)
[sub_resource type="StandardMaterial3D" id="GrassMaterial"]
albedo_color = Color(0.34, 0.65, 0.3, 1)
[sub_resource type="StandardMaterial3D" id="DockMaterial"]
albedo_color = Color(0.55, 0.34, 0.16, 1)
[sub_resource type="StandardMaterial3D" id="WaterMaterial"]
transparency = 1
albedo_color = Color(0.08, 0.43, 0.75, 0.82)
[node name="LakeRegion" type="Node3D"]
script = ExtResource("1_region")
region_id = &"lake"
[node name="Visuals" type="Node3D" parent="."]
[node name="NorthBank" type="MeshInstance3D" parent="Visuals"]
position = Vector3(0, -3, 23)
mesh = SubResource("BankNSMesh")
material_override = SubResource("GrassMaterial")
[node name="SouthBank" type="MeshInstance3D" parent="Visuals"]
position = Vector3(0, -3, -23)
mesh = SubResource("BankNSMesh")
material_override = SubResource("GrassMaterial")
[node name="WestBank" type="MeshInstance3D" parent="Visuals"]
position = Vector3(-25, -3, 0)
mesh = SubResource("BankEWMesh")
material_override = SubResource("GrassMaterial")
[node name="EastBank" type="MeshInstance3D" parent="Visuals"]
position = Vector3(25, -3, 0)
mesh = SubResource("BankEWMesh")
material_override = SubResource("GrassMaterial")
[node name="Water" type="MeshInstance3D" parent="Visuals"]
position = Vector3(0, 0.2, 0)
mesh = SubResource("WaterMesh")
material_override = SubResource("WaterMaterial")
[node name="WestDock" type="MeshInstance3D" parent="Visuals"]
position = Vector3(-12, 0.45, 0)
mesh = SubResource("DockMesh")
material_override = SubResource("DockMaterial")
[node name="WestDockRamp" type="MeshInstance3D" parent="Visuals"]
position = Vector3(-19, 0.155, 0)
rotation_degrees = Vector3(0, 0, 9)
mesh = SubResource("DockRampMesh")
material_override = SubResource("DockMaterial")
[node name="LakeLabel" type="Label3D" parent="Visuals"]
position = Vector3(-25, 3, 20)
text = "LAKE"
font_size = 38
outline_size = 8
billboard = 1
no_depth_test = true
[node name="StaticCollision" type="Node3D" parent="."]
[node name="NorthBank" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/NorthBank"]
position = Vector3(0, -3, 23)
shape = SubResource("BankNSShape")
[node name="SouthBank" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/SouthBank"]
position = Vector3(0, -3, -23)
shape = SubResource("BankNSShape")
[node name="WestBank" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/WestBank"]
position = Vector3(-25, -3, 0)
shape = SubResource("BankEWShape")
[node name="EastBank" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/EastBank"]
position = Vector3(25, -3, 0)
shape = SubResource("BankEWShape")
[node name="WestDock" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/WestDock"]
position = Vector3(-12, 0.45, 0)
shape = SubResource("DockShape")
[node name="WestDockRamp" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/WestDockRamp"]
position = Vector3(-19, 0.155, 0)
rotation_degrees = Vector3(0, 0, 9)
shape = SubResource("DockRampShape")
[node name="FishingWater" type="Node3D" parent="."]
[node name="LakeWater" type="Area3D" parent="FishingWater"]
position = Vector3(0, 0.2, 0)
collision_layer = 4
collision_mask = 0
monitoring = false
script = ExtResource("2_water")
location_tags = Array[StringName]([&"lake"])
fish_pool = ExtResource("3_pool")
[node name="Shape" type="CollisionShape3D" parent="FishingWater/LakeWater"]
shape = SubResource("WaterShape")
[node name="WaterRecovery" type="Node3D" parent="."]
[node name="LakeRecovery" type="Area3D" parent="WaterRecovery"]
position = Vector3(0, -2.3, 0)
collision_layer = 8
collision_mask = 2
script = ExtResource("4_trigger")
surface_height = 0.2
[node name="Shape" type="CollisionShape3D" parent="WaterRecovery/LakeRecovery"]
shape = SubResource("RecoveryShape")
[node name="SafeRespawns" type="Node3D" parent="."]
[node name="WestDockApproach" type="Marker3D" parent="SafeRespawns"]
position = Vector3(-25, 0.58, 8)
rotation_degrees = Vector3(0, -90, 0)
script = ExtResource("5_safe")
[node name="NorthShore" type="Marker3D" parent="SafeRespawns"]
position = Vector3(0, 0.58, 24)
rotation_degrees = Vector3(0, 180, 0)
script = ExtResource("5_safe")
[node name="SouthEastShore" type="Marker3D" parent="SafeRespawns"]
position = Vector3(25, 0.58, -23)
rotation_degrees = Vector3(0, 45, 0)
script = ExtResource("5_safe")

View file

@ -0,0 +1,164 @@
[gd_scene load_steps=20 format=3]
[ext_resource type="Script" path="res://world/regions/graybox_region.gd" id="1_region"]
[ext_resource type="Script" path="res://world/fishable_water_region.gd" id="2_water"]
[ext_resource type="Resource" path="res://fish/pools/test_water_pool.tres" id="3_pool"]
[ext_resource type="Script" path="res://world/player_water_trigger.gd" id="4_trigger"]
[ext_resource type="Script" path="res://world/safe_respawn_point.gd" id="5_safe"]
[sub_resource type="BoxShape3D" id="BankNSShape"]
size = Vector3(50, 6, 8)
[sub_resource type="BoxShape3D" id="BankEWShape"]
size = Vector3(8, 6, 30)
[sub_resource type="BoxMesh" id="BankNSMesh"]
size = Vector3(50, 6, 8)
[sub_resource type="BoxMesh" id="BankEWMesh"]
size = Vector3(8, 6, 30)
[sub_resource type="BoxShape3D" id="BoardwalkShape"]
size = Vector3(6, 0.4, 22)
[sub_resource type="BoxMesh" id="BoardwalkMesh"]
size = Vector3(6, 0.4, 22)
[sub_resource type="BoxShape3D" id="BoardwalkRampShape"]
size = Vector3(6, 0.35, 4)
[sub_resource type="BoxMesh" id="BoardwalkRampMesh"]
size = Vector3(6, 0.35, 4)
[sub_resource type="CylinderMesh" id="ReedMesh"]
top_radius = 0.06
bottom_radius = 0.1
height = 2.2
[sub_resource type="PlaneMesh" id="WaterMesh"]
size = Vector2(38, 30)
[sub_resource type="BoxShape3D" id="WaterShape"]
size = Vector3(38, 0.2, 30)
[sub_resource type="BoxShape3D" id="RecoveryShape"]
size = Vector3(38, 5, 30)
[sub_resource type="StandardMaterial3D" id="BankMaterial"]
albedo_color = Color(0.38, 0.53, 0.27, 1)
[sub_resource type="StandardMaterial3D" id="BoardwalkMaterial"]
albedo_color = Color(0.48, 0.32, 0.18, 1)
[sub_resource type="StandardMaterial3D" id="ReedMaterial"]
albedo_color = Color(0.59, 0.67, 0.2, 1)
[sub_resource type="StandardMaterial3D" id="WaterMaterial"]
transparency = 1
albedo_color = Color(0.1, 0.48, 0.48, 0.8)
[node name="MarshRegion" type="Node3D"]
script = ExtResource("1_region")
region_id = &"marsh"
[node name="Visuals" type="Node3D" parent="."]
[node name="NorthBank" type="MeshInstance3D" parent="Visuals"]
position = Vector3(0, -3, 19)
mesh = SubResource("BankNSMesh")
material_override = SubResource("BankMaterial")
[node name="SouthBank" type="MeshInstance3D" parent="Visuals"]
position = Vector3(0, -3, -19)
mesh = SubResource("BankNSMesh")
material_override = SubResource("BankMaterial")
[node name="WestBank" type="MeshInstance3D" parent="Visuals"]
position = Vector3(-23, -3, 0)
mesh = SubResource("BankEWMesh")
material_override = SubResource("BankMaterial")
[node name="EastBank" type="MeshInstance3D" parent="Visuals"]
position = Vector3(23, -3, 0)
mesh = SubResource("BankEWMesh")
material_override = SubResource("BankMaterial")
[node name="Water" type="MeshInstance3D" parent="Visuals"]
position = Vector3(0, 0.2, 0)
mesh = SubResource("WaterMesh")
material_override = SubResource("WaterMaterial")
[node name="Boardwalk" type="MeshInstance3D" parent="Visuals"]
position = Vector3(0, 0.45, 0)
mesh = SubResource("BoardwalkMesh")
material_override = SubResource("BoardwalkMaterial")
[node name="BoardwalkNorthRamp" type="MeshInstance3D" parent="Visuals"]
position = Vector3(0, 0.155, 13)
rotation_degrees = Vector3(9, 0, 0)
mesh = SubResource("BoardwalkRampMesh")
material_override = SubResource("BoardwalkMaterial")
[node name="BoardwalkSouthRamp" type="MeshInstance3D" parent="Visuals"]
position = Vector3(0, 0.155, -13)
rotation_degrees = Vector3(-9, 0, 0)
mesh = SubResource("BoardwalkRampMesh")
material_override = SubResource("BoardwalkMaterial")
[node name="ReedWest" type="MeshInstance3D" parent="Visuals"]
position = Vector3(-13, 1.1, -8)
mesh = SubResource("ReedMesh")
material_override = SubResource("ReedMaterial")
[node name="ReedEast" type="MeshInstance3D" parent="Visuals"]
position = Vector3(12, 1.1, 7)
mesh = SubResource("ReedMesh")
material_override = SubResource("ReedMaterial")
[node name="MarshLabel" type="Label3D" parent="Visuals"]
position = Vector3(21, 3, 17)
text = "MARSH"
font_size = 36
outline_size = 8
billboard = 1
no_depth_test = true
[node name="StaticCollision" type="Node3D" parent="."]
[node name="NorthBank" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/NorthBank"]
position = Vector3(0, -3, 19)
shape = SubResource("BankNSShape")
[node name="SouthBank" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/SouthBank"]
position = Vector3(0, -3, -19)
shape = SubResource("BankNSShape")
[node name="WestBank" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/WestBank"]
position = Vector3(-23, -3, 0)
shape = SubResource("BankEWShape")
[node name="EastBank" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/EastBank"]
position = Vector3(23, -3, 0)
shape = SubResource("BankEWShape")
[node name="Boardwalk" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/Boardwalk"]
position = Vector3(0, 0.45, 0)
shape = SubResource("BoardwalkShape")
[node name="BoardwalkNorthRamp" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/BoardwalkNorthRamp"]
position = Vector3(0, 0.155, 13)
rotation_degrees = Vector3(9, 0, 0)
shape = SubResource("BoardwalkRampShape")
[node name="BoardwalkSouthRamp" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/BoardwalkSouthRamp"]
position = Vector3(0, 0.155, -13)
rotation_degrees = Vector3(-9, 0, 0)
shape = SubResource("BoardwalkRampShape")
[node name="FishingWater" type="Node3D" parent="."]
[node name="MarshWater" type="Area3D" parent="FishingWater"]
position = Vector3(0, 0.2, 0)
collision_layer = 4
collision_mask = 0
monitoring = false
script = ExtResource("2_water")
location_tags = Array[StringName]([&"marsh"])
fish_pool = ExtResource("3_pool")
[node name="Shape" type="CollisionShape3D" parent="FishingWater/MarshWater"]
shape = SubResource("WaterShape")
[node name="WaterRecovery" type="Node3D" parent="."]
[node name="MarshRecovery" type="Area3D" parent="WaterRecovery"]
position = Vector3(0, -2.3, 0)
collision_layer = 8
collision_mask = 2
script = ExtResource("4_trigger")
surface_height = 0.2
[node name="Shape" type="CollisionShape3D" parent="WaterRecovery/MarshRecovery"]
shape = SubResource("RecoveryShape")
[node name="SafeRespawns" type="Node3D" parent="."]
[node name="BoardwalkNorth" type="Marker3D" parent="SafeRespawns"]
position = Vector3(8, 0.58, 19)
rotation_degrees = Vector3(0, 180, 0)
script = ExtResource("5_safe")
[node name="BoardwalkSouth" type="Marker3D" parent="SafeRespawns"]
position = Vector3(-8, 0.58, -19)
script = ExtResource("5_safe")
[node name="EastBank" type="Marker3D" parent="SafeRespawns"]
position = Vector3(23, 0.58, 7)
rotation_degrees = Vector3(0, 90, 0)
script = ExtResource("5_safe")

View file

@ -0,0 +1,143 @@
[gd_scene load_steps=19 format=3]
[ext_resource type="Script" path="res://world/regions/graybox_region.gd" id="1_region"]
[ext_resource type="Script" path="res://world/fishable_water_region.gd" id="2_water"]
[ext_resource type="Resource" path="res://fish/pools/test_water_pool.tres" id="3_pool"]
[ext_resource type="Script" path="res://world/player_water_trigger.gd" id="4_trigger"]
[ext_resource type="Script" path="res://world/safe_respawn_point.gd" id="5_safe"]
[sub_resource type="BoxShape3D" id="BankShape"]
size = Vector3(13, 6, 61)
[sub_resource type="BoxMesh" id="BankMesh"]
size = Vector3(13, 6, 61)
[sub_resource type="BoxShape3D" id="BridgeShape"]
size = Vector3(6, 0.4, 7)
[sub_resource type="BoxMesh" id="BridgeMesh"]
size = Vector3(6, 0.4, 7)
[sub_resource type="BoxShape3D" id="BridgeRampShape"]
size = Vector3(4, 0.35, 7)
[sub_resource type="BoxMesh" id="BridgeRampMesh"]
size = Vector3(4, 0.35, 7)
[sub_resource type="BoxMesh" id="RailMesh"]
size = Vector3(14, 0.25, 0.25)
[sub_resource type="PlaneMesh" id="WaterMesh"]
size = Vector2(14, 58)
[sub_resource type="BoxShape3D" id="WaterShape"]
size = Vector3(14, 0.2, 58)
[sub_resource type="BoxShape3D" id="RecoveryShape"]
size = Vector3(14, 5, 58)
[sub_resource type="StandardMaterial3D" id="BankMaterial"]
albedo_color = Color(0.31, 0.61, 0.37, 1)
[sub_resource type="StandardMaterial3D" id="BridgeMaterial"]
albedo_color = Color(0.58, 0.58, 0.54, 1)
[sub_resource type="StandardMaterial3D" id="RailMaterial"]
albedo_color = Color(0.3, 0.32, 0.34, 1)
[sub_resource type="StandardMaterial3D" id="WaterMaterial"]
transparency = 1
albedo_color = Color(0.12, 0.48, 0.72, 0.8)
[node name="RiverRegion" type="Node3D"]
script = ExtResource("1_region")
region_id = &"river"
[node name="Visuals" type="Node3D" parent="."]
[node name="WestBank" type="MeshInstance3D" parent="Visuals"]
position = Vector3(-13.5, -3, -1.5)
mesh = SubResource("BankMesh")
material_override = SubResource("BankMaterial")
[node name="EastBank" type="MeshInstance3D" parent="Visuals"]
position = Vector3(13.5, -3, -1.5)
mesh = SubResource("BankMesh")
material_override = SubResource("BankMaterial")
[node name="Water" type="MeshInstance3D" parent="Visuals"]
position = Vector3(0, 0.2, 0)
mesh = SubResource("WaterMesh")
material_override = SubResource("WaterMaterial")
[node name="Bridge" type="MeshInstance3D" parent="Visuals"]
position = Vector3(0, 0.45, 7)
mesh = SubResource("BridgeMesh")
material_override = SubResource("BridgeMaterial")
[node name="WestBridgeRamp" type="MeshInstance3D" parent="Visuals"]
position = Vector3(-5, 0.155, 7)
rotation_degrees = Vector3(0, 0, 9)
mesh = SubResource("BridgeRampMesh")
material_override = SubResource("BridgeMaterial")
[node name="EastBridgeRamp" type="MeshInstance3D" parent="Visuals"]
position = Vector3(5, 0.155, 7)
rotation_degrees = Vector3(0, 0, -9)
mesh = SubResource("BridgeRampMesh")
material_override = SubResource("BridgeMaterial")
[node name="NorthRail" type="MeshInstance3D" parent="Visuals"]
position = Vector3(0, 1.15, 10.2)
mesh = SubResource("RailMesh")
material_override = SubResource("RailMaterial")
[node name="SouthRail" type="MeshInstance3D" parent="Visuals"]
position = Vector3(0, 1.15, 3.8)
mesh = SubResource("RailMesh")
material_override = SubResource("RailMaterial")
[node name="RiverLabel" type="Label3D" parent="Visuals"]
position = Vector3(-16, 3, 20)
text = "RIVER"
font_size = 34
outline_size = 7
billboard = 1
no_depth_test = true
[node name="StaticCollision" type="Node3D" parent="."]
[node name="WestBank" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/WestBank"]
position = Vector3(-13.5, -3, -1.5)
shape = SubResource("BankShape")
[node name="EastBank" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/EastBank"]
position = Vector3(13.5, -3, -1.5)
shape = SubResource("BankShape")
[node name="Bridge" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/Bridge"]
position = Vector3(0, 0.45, 7)
shape = SubResource("BridgeShape")
[node name="WestBridgeRamp" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/WestBridgeRamp"]
position = Vector3(-5, 0.155, 7)
rotation_degrees = Vector3(0, 0, 9)
shape = SubResource("BridgeRampShape")
[node name="EastBridgeRamp" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/EastBridgeRamp"]
position = Vector3(5, 0.155, 7)
rotation_degrees = Vector3(0, 0, -9)
shape = SubResource("BridgeRampShape")
[node name="FishingWater" type="Node3D" parent="."]
[node name="RiverWater" type="Area3D" parent="FishingWater"]
position = Vector3(0, 0.2, 0)
collision_layer = 4
collision_mask = 0
monitoring = false
script = ExtResource("2_water")
location_tags = Array[StringName]([&"river"])
fish_pool = ExtResource("3_pool")
[node name="Shape" type="CollisionShape3D" parent="FishingWater/RiverWater"]
shape = SubResource("WaterShape")
[node name="WaterRecovery" type="Node3D" parent="."]
[node name="RiverRecovery" type="Area3D" parent="WaterRecovery"]
position = Vector3(0, -2.3, 0)
collision_layer = 8
collision_mask = 2
script = ExtResource("4_trigger")
surface_height = 0.2
[node name="Shape" type="CollisionShape3D" parent="WaterRecovery/RiverRecovery"]
shape = SubResource("RecoveryShape")
[node name="SafeRespawns" type="Node3D" parent="."]
[node name="BridgeWest" type="Marker3D" parent="SafeRespawns"]
position = Vector3(-15, 0.58, 14)
rotation_degrees = Vector3(0, -90, 0)
script = ExtResource("5_safe")
[node name="NorthEastBank" type="Marker3D" parent="SafeRespawns"]
position = Vector3(14, 0.58, 24)
rotation_degrees = Vector3(0, 90, 0)
script = ExtResource("5_safe")
[node name="SouthWestBank" type="Marker3D" parent="SafeRespawns"]
position = Vector3(-14, 0.58, -25)
rotation_degrees = Vector3(0, -90, 0)
script = ExtResource("5_safe")

View file

@ -0,0 +1,114 @@
[gd_scene load_steps=14 format=3]
[ext_resource type="Script" path="res://world/regions/graybox_region.gd" id="1_region"]
[ext_resource type="Script" path="res://world/fishable_water_region.gd" id="2_water"]
[ext_resource type="Resource" path="res://fish/pools/test_water_pool.tres" id="3_pool"]
[ext_resource type="Script" path="res://world/player_water_trigger.gd" id="4_trigger"]
[ext_resource type="Script" path="res://world/safe_respawn_point.gd" id="5_safe"]
[sub_resource type="BoxShape3D" id="BankNSShape"]
size = Vector3(36, 6, 8)
[sub_resource type="BoxShape3D" id="BankEWShape"]
size = Vector3(6, 6, 20)
[sub_resource type="BoxMesh" id="BankNSMesh"]
size = Vector3(36, 6, 8)
[sub_resource type="BoxMesh" id="BankEWMesh"]
size = Vector3(6, 6, 20)
[sub_resource type="PlaneMesh" id="WaterMesh"]
size = Vector2(24, 20)
[sub_resource type="BoxShape3D" id="WaterShape"]
size = Vector3(24, 0.2, 20)
[sub_resource type="BoxShape3D" id="RecoveryShape"]
size = Vector3(24, 5, 20)
[sub_resource type="StandardMaterial3D" id="GrassMaterial"]
albedo_color = Color(0.43, 0.75, 0.34, 1)
[sub_resource type="StandardMaterial3D" id="WaterMaterial"]
transparency = 1
albedo_color = Color(0.16, 0.58, 0.78, 0.78)
roughness = 0.25
[node name="StarterPondRegion" type="Node3D"]
script = ExtResource("1_region")
region_id = &"starter_pond"
[node name="Visuals" type="Node3D" parent="."]
[node name="NorthBank" type="MeshInstance3D" parent="Visuals"]
position = Vector3(0, -3, 14)
mesh = SubResource("BankNSMesh")
material_override = SubResource("GrassMaterial")
[node name="SouthBank" type="MeshInstance3D" parent="Visuals"]
position = Vector3(0, -3, -14)
mesh = SubResource("BankNSMesh")
material_override = SubResource("GrassMaterial")
[node name="WestBank" type="MeshInstance3D" parent="Visuals"]
position = Vector3(-15, -3, 0)
mesh = SubResource("BankEWMesh")
material_override = SubResource("GrassMaterial")
[node name="EastBank" type="MeshInstance3D" parent="Visuals"]
position = Vector3(15, -3, 0)
mesh = SubResource("BankEWMesh")
material_override = SubResource("GrassMaterial")
[node name="Water" type="MeshInstance3D" parent="Visuals"]
position = Vector3(0, 0.2, 0)
mesh = SubResource("WaterMesh")
material_override = SubResource("WaterMaterial")
[node name="PondLabel" type="Label3D" parent="Visuals"]
position = Vector3(-14, 2.4, 11)
text = "POND"
font_size = 34
outline_size = 7
billboard = 1
no_depth_test = true
[node name="StaticCollision" type="Node3D" parent="."]
[node name="NorthBank" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/NorthBank"]
position = Vector3(0, -3, 14)
shape = SubResource("BankNSShape")
[node name="SouthBank" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/SouthBank"]
position = Vector3(0, -3, -14)
shape = SubResource("BankNSShape")
[node name="WestBank" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/WestBank"]
position = Vector3(-15, -3, 0)
shape = SubResource("BankEWShape")
[node name="EastBank" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/EastBank"]
position = Vector3(15, -3, 0)
shape = SubResource("BankEWShape")
[node name="FishingWater" type="Node3D" parent="."]
[node name="StarterPondWater" type="Area3D" parent="FishingWater"]
position = Vector3(0, 0.2, 0)
collision_layer = 4
collision_mask = 0
monitoring = false
script = ExtResource("2_water")
location_tags = Array[StringName]([&"starter_pond"])
fish_pool = ExtResource("3_pool")
[node name="Shape" type="CollisionShape3D" parent="FishingWater/StarterPondWater"]
shape = SubResource("WaterShape")
[node name="WaterRecovery" type="Node3D" parent="."]
[node name="StarterPondRecovery" type="Area3D" parent="WaterRecovery"]
position = Vector3(0, -2.3, 0)
collision_layer = 8
collision_mask = 2
script = ExtResource("4_trigger")
surface_height = 0.2
[node name="Shape" type="CollisionShape3D" parent="WaterRecovery/StarterPondRecovery"]
shape = SubResource("RecoveryShape")
[node name="SafeRespawns" type="Node3D" parent="."]
[node name="EastShore" type="Marker3D" parent="SafeRespawns"]
position = Vector3(15, 0.58, 4)
rotation_degrees = Vector3(0, 90, 0)
script = ExtResource("5_safe")
[node name="NorthShore" type="Marker3D" parent="SafeRespawns"]
position = Vector3(0, 0.58, 14)
rotation_degrees = Vector3(0, 180, 0)
script = ExtResource("5_safe")
[node name="SouthShore" type="Marker3D" parent="SafeRespawns"]
position = Vector3(0, 0.58, -14)
script = ExtResource("5_safe")

View file

@ -0,0 +1,179 @@
[gd_scene load_steps=16 format=3]
[ext_resource type="Script" path="res://world/regions/graybox_region.gd" id="1_region"]
[ext_resource type="Script" path="res://world/safe_respawn_point.gd" id="2_safe"]
[ext_resource type="PackedScene" path="res://world/interactables/fishing_shop_world.tscn" id="3_shop"]
[ext_resource type="PackedScene" path="res://world/interactables/pelican_buyer_world.tscn" id="4_pelican"]
[sub_resource type="BoxShape3D" id="GroundShape"]
size = Vector3(48, 6, 36)
[sub_resource type="BoxShape3D" id="BuildingShape"]
size = Vector3(8, 5, 7)
[sub_resource type="BoxMesh" id="GroundMesh"]
size = Vector3(48, 6, 36)
[sub_resource type="BoxMesh" id="PlazaMesh"]
size = Vector3(22, 0.02, 18)
[sub_resource type="BoxMesh" id="BuildingMesh"]
size = Vector3(8, 5, 7)
[sub_resource type="CylinderMesh" id="RoofMesh"]
top_radius = 0
bottom_radius = 5.5
height = 3
radial_segments = 4
[sub_resource type="CylinderMesh" id="TowerMesh"]
top_radius = 2.4
bottom_radius = 2.4
height = 8
[sub_resource type="CylinderMesh" id="TowerTankMesh"]
top_radius = 3.2
bottom_radius = 3.2
height = 3.2
[sub_resource type="BoxMesh" id="PavilionRoofMesh"]
size = Vector3(9, 0.35, 7)
[sub_resource type="BoxMesh" id="PavilionPostMesh"]
size = Vector3(0.3, 3.2, 0.3)
[sub_resource type="StandardMaterial3D" id="GrassMaterial"]
albedo_color = Color(0.37, 0.68, 0.3, 1)
[sub_resource type="StandardMaterial3D" id="PlazaMaterial"]
albedo_color = Color(0.76, 0.69, 0.54, 1)
[sub_resource type="StandardMaterial3D" id="BuildingMaterial"]
albedo_color = Color(0.92, 0.55, 0.34, 1)
[sub_resource type="StandardMaterial3D" id="RoofMaterial"]
albedo_color = Color(0.2, 0.46, 0.53, 1)
[sub_resource type="StandardMaterial3D" id="LandmarkMaterial"]
albedo_color = Color(0.95, 0.82, 0.28, 1)
[node name="VillageRegion" type="Node3D"]
script = ExtResource("1_region")
region_id = &"village"
[node name="Visuals" type="Node3D" parent="."]
[node name="Ground" type="MeshInstance3D" parent="Visuals"]
position = Vector3(0, -3, 0)
mesh = SubResource("GroundMesh")
material_override = SubResource("GrassMaterial")
[node name="Plaza" type="MeshInstance3D" parent="Visuals"]
position = Vector3(0, 0.011, 0)
mesh = SubResource("PlazaMesh")
material_override = SubResource("PlazaMaterial")
[node name="WestBuilding" type="MeshInstance3D" parent="Visuals"]
position = Vector3(-17, 2.5, 9)
mesh = SubResource("BuildingMesh")
material_override = SubResource("BuildingMaterial")
[node name="WestRoof" type="MeshInstance3D" parent="Visuals"]
position = Vector3(-17, 6.1, 9)
rotation_degrees = Vector3(0, 45, 0)
mesh = SubResource("RoofMesh")
material_override = SubResource("RoofMaterial")
[node name="NorthBuilding" type="MeshInstance3D" parent="Visuals"]
position = Vector3(-7, 2.5, 13)
mesh = SubResource("BuildingMesh")
material_override = SubResource("BuildingMaterial")
[node name="NorthRoof" type="MeshInstance3D" parent="Visuals"]
position = Vector3(-7, 6.1, 13)
rotation_degrees = Vector3(0, 45, 0)
mesh = SubResource("RoofMesh")
material_override = SubResource("RoofMaterial")
[node name="WaterTower" type="MeshInstance3D" parent="Visuals"]
position = Vector3(18, 4, 11)
mesh = SubResource("TowerMesh")
material_override = SubResource("RoofMaterial")
[node name="WaterTank" type="MeshInstance3D" parent="Visuals"]
position = Vector3(18, 8.5, 11)
mesh = SubResource("TowerTankMesh")
material_override = SubResource("LandmarkMaterial")
[node name="PavilionRoof" type="MeshInstance3D" parent="Visuals"]
position = Vector3(-12, 3.3, -10)
mesh = SubResource("PavilionRoofMesh")
material_override = SubResource("LandmarkMaterial")
[node name="PavilionPostNW" type="MeshInstance3D" parent="Visuals"]
position = Vector3(-15.5, 1.6, -12.5)
mesh = SubResource("PavilionPostMesh")
material_override = SubResource("RoofMaterial")
[node name="PavilionPostSE" type="MeshInstance3D" parent="Visuals"]
position = Vector3(-8.5, 1.6, -7.5)
mesh = SubResource("PavilionPostMesh")
material_override = SubResource("RoofMaterial")
[node name="VillageLabel" type="Label3D" parent="Visuals"]
position = Vector3(0, 3.2, 7)
text = "VILLAGE"
font_size = 42
outline_size = 8
billboard = 1
no_depth_test = true
[node name="StaticCollision" type="Node3D" parent="."]
[node name="Ground" type="StaticBody3D" parent="StaticCollision"]
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticCollision/Ground"]
position = Vector3(0, -3, 0)
shape = SubResource("GroundShape")
[node name="WestBuilding" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/WestBuilding"]
position = Vector3(-17, 2.5, 9)
shape = SubResource("BuildingShape")
[node name="NorthBuilding" type="StaticBody3D" parent="StaticCollision"]
[node name="Shape" type="CollisionShape3D" parent="StaticCollision/NorthBuilding"]
position = Vector3(-7, 2.5, 13)
shape = SubResource("BuildingShape")
[node name="FishingWater" type="Node3D" parent="."]
[node name="WaterRecovery" type="Node3D" parent="."]
[node name="SafeRespawns" type="Node3D" parent="."]
[node name="VillageCenter" type="Marker3D" parent="SafeRespawns"]
position = Vector3(0, 0.58, 2)
script = ExtResource("2_safe")
[node name="VillageWest" type="Marker3D" parent="SafeRespawns"]
position = Vector3(-19, 0.58, -2)
rotation_degrees = Vector3(0, -90, 0)
script = ExtResource("2_safe")
[node name="VillageSouth" type="Marker3D" parent="SafeRespawns"]
position = Vector3(5, 0.58, -14)
rotation_degrees = Vector3(0, 180, 0)
script = ExtResource("2_safe")
[node name="Interactables" type="Node3D" parent="."]
[node name="FishingShopWorld" parent="Interactables" instance=ExtResource("3_shop")]
position = Vector3(12, 0, 3)
rotation_degrees = Vector3(0, -25, 0)
[node name="PelicanCoolerPerch" parent="Interactables" instance=ExtResource("4_pelican")]
position = Vector3(-19, 0, -9)
rotation_degrees = Vector3(0, 20, 0)