diff --git a/client/public/img/game/buildings/riverside_house_ceiling.svg b/client/public/img/game/buildings/riverside_house_ceiling.svg
new file mode 100644
index 0000000000..f980724e70
--- /dev/null
+++ b/client/public/img/game/buildings/riverside_house_ceiling.svg
@@ -0,0 +1,490 @@
+
+
+
+
diff --git a/client/public/img/game/buildings/riverside_house_floor.svg b/client/public/img/game/buildings/riverside_house_floor.svg
new file mode 100644
index 0000000000..9dd0574f41
--- /dev/null
+++ b/client/public/img/game/buildings/riverside_house_floor.svg
@@ -0,0 +1,827 @@
+
+
+
+
diff --git a/client/public/img/game/obstacles/bathtub.svg b/client/public/img/game/obstacles/bathtub.svg
new file mode 100644
index 0000000000..fa81ff6856
--- /dev/null
+++ b/client/public/img/game/obstacles/bathtub.svg
@@ -0,0 +1,107 @@
+
+
+
+
diff --git a/client/public/img/game/obstacles/bed2.svg b/client/public/img/game/obstacles/bed2.svg
new file mode 100644
index 0000000000..c74275c506
--- /dev/null
+++ b/client/public/img/game/obstacles/bed2.svg
@@ -0,0 +1,117 @@
+
+
diff --git a/client/public/img/game/obstacles/fireplace.svg b/client/public/img/game/obstacles/fireplace.svg
new file mode 100644
index 0000000000..56f51d4485
--- /dev/null
+++ b/client/public/img/game/obstacles/fireplace.svg
@@ -0,0 +1,158 @@
+
+
+
+
diff --git a/client/public/img/game/obstacles/riverside_house_wall.svg b/client/public/img/game/obstacles/riverside_house_wall.svg
new file mode 100644
index 0000000000..c7166b23c9
--- /dev/null
+++ b/client/public/img/game/obstacles/riverside_house_wall.svg
@@ -0,0 +1,94 @@
+
+
+
+
diff --git a/client/public/img/game/obstacles/riverside_house_wall_2.svg b/client/public/img/game/obstacles/riverside_house_wall_2.svg
new file mode 100644
index 0000000000..5dcc0214f0
--- /dev/null
+++ b/client/public/img/game/obstacles/riverside_house_wall_2.svg
@@ -0,0 +1,106 @@
+
+
+
+
diff --git a/client/public/img/game/obstacles/riverside_house_wall_3.svg b/client/public/img/game/obstacles/riverside_house_wall_3.svg
new file mode 100644
index 0000000000..cea1f0307c
--- /dev/null
+++ b/client/public/img/game/obstacles/riverside_house_wall_3.svg
@@ -0,0 +1,110 @@
+
+
+
+
diff --git a/client/public/img/game/obstacles/riverside_house_wall_exterior.svg b/client/public/img/game/obstacles/riverside_house_wall_exterior.svg
new file mode 100644
index 0000000000..4fe6df698d
--- /dev/null
+++ b/client/public/img/game/obstacles/riverside_house_wall_exterior.svg
@@ -0,0 +1,179 @@
+
+
+
+
diff --git a/client/public/img/game/obstacles/slide_door.svg b/client/public/img/game/obstacles/slide_door.svg
new file mode 100644
index 0000000000..8a553d5792
--- /dev/null
+++ b/client/public/img/game/obstacles/slide_door.svg
@@ -0,0 +1,84 @@
+
+
+
+
diff --git a/client/public/img/game/obstacles/table2.svg b/client/public/img/game/obstacles/table2.svg
new file mode 100644
index 0000000000..4ec5b67599
--- /dev/null
+++ b/client/public/img/game/obstacles/table2.svg
@@ -0,0 +1,243 @@
+
+
+
+
diff --git a/client/public/img/game/particles/fireplace_particle.svg b/client/public/img/game/particles/fireplace_particle.svg
new file mode 100644
index 0000000000..bf722db9c3
--- /dev/null
+++ b/client/public/img/game/particles/fireplace_particle.svg
@@ -0,0 +1,83 @@
+
+
+
+
diff --git a/client/public/img/game/residues/fireplace_residue.svg b/client/public/img/game/residues/fireplace_residue.svg
new file mode 100644
index 0000000000..937d696090
--- /dev/null
+++ b/client/public/img/game/residues/fireplace_residue.svg
@@ -0,0 +1,239 @@
+
+
+
+
diff --git a/common/src/definitions/buildings.ts b/common/src/definitions/buildings.ts
index 249a6aac25..4525fe5300 100644
--- a/common/src/definitions/buildings.ts
+++ b/common/src/definitions/buildings.ts
@@ -1035,6 +1035,125 @@ export const Buildings = ObjectDefinitions.create()(
{ table: "ground_loot", position: Vec.create(-15.42, 17.44) }
]
},
+
+ {
+ idString: "riverside_house",
+ name: "riverside_house",
+ spawnHitbox:
+ RectangleHitbox.fromRect(85, 85),
+
+ scopeHitbox: new HitboxGroup(
+ RectangleHitbox.fromRect(50, 50,Vec.create(2, 0)),
+ RectangleHitbox.fromRect(47, 47,Vec.create(-8.4, -8.8)),
+ ),
+ floorImages: [
+ {
+ key: "riverside_house_floor",
+ position: Vec.create(0, 0)
+ },
+ ],
+ ceilingImages: [{
+ key: "riverside_house_ceiling",
+ position: Vec.create(-1.62, -2.5),
+ }],
+ obstacles: [
+ {
+ idString: "slide_door",
+ position: Vec.create(15.15, -15.4),
+ rotation: 1
+ },
+ {
+ idString: "slide_door",
+ position: Vec.create(-12, 14.6),
+ rotation: 2
+ },
+ {
+ idString: "riverside_house_wall_exterior",
+ position: Vec.create(-8.5, -8.9),
+ rotation: 4
+ },
+ {
+ idString: "window",
+ position: Vec.create(-30.95, -9),
+ rotation: 0
+ },
+ {
+ idString: "small_drawer",
+ position: Vec.create(-26, -26.9),
+ rotation: 0
+ },
+ {
+ idString: "gun_mount_maul",
+ position: Vec.create(-28, -19),
+ rotation: 1
+ },
+ {
+ idString: "large_drawer",
+ position: Vec.create(-23, 9.7),
+ rotation: 2
+ },
+ {
+ idString: "table2",
+ position: Vec.create(-24.5, 1),
+ rotation: 1
+ },
+ {
+ idString: "bookshelf",
+ position: Vec.create(-5, 4),
+ rotation: 1
+ },
+ {
+ idString: { toilet: 2, used_toilet: 1 },
+ position: Vec.create(10, 8.9),
+ rotation: 2
+ },
+ {
+ idString: "bathtub",
+ position: Vec.create(3, 6.5),
+ rotation: 2
+ },
+ {
+ idString: "fireplace",
+ position: Vec.create(-11.9, -25.9),
+ rotation: 1
+ },
+ {
+ idString: "bed2",
+ position: Vec.create(5.2, -27.5),
+ rotation: 3
+ },
+ {
+ idString: "riverside_house_wall",
+ position: Vec.create(-1.1, -6.5),
+ rotation: 3
+ },
+ {
+ idString: "riverside_house_wall_3",
+ position: Vec.create(2.5, -6.5),
+ rotation: 3
+ },
+ {
+ idString: "riverside_house_wall_2",
+ position: Vec.create(-1.1, 3.95),
+ rotation: 2
+ },
+ {
+ idString: "door",
+ position: Vec.create(9.15, -6.5),
+ rotation: 2
+ },
+ {
+ idString: "box",
+ position: Vec.create(19, 13.5),
+ rotation: 2
+ },
+ {
+ idString: "box",
+ position: Vec.create(22, 19),
+ rotation: 2
+ },
+ ]
+ },
{
idString: "crane",
name: "Crane",
diff --git a/common/src/definitions/obstacles.ts b/common/src/definitions/obstacles.ts
index 318bd3354d..b4fe914712 100644
--- a/common/src/definitions/obstacles.ts
+++ b/common/src/definitions/obstacles.ts
@@ -844,6 +844,27 @@ export const Obstacles = ObjectDefinitions.create()(
particle: "furniture_particle"
}
},
+ {
+ idString: "slide_door",
+ name: "slide_Door",
+ material: "wood",
+ health: 120,
+ scale: {
+ spawnMin: 1,
+ spawnMax: 1,
+ destroy: 1
+ },
+ hitbox: RectangleHitbox.fromRect(10.15, 1.6, Vec.create(-0.44, 0)),
+ rotationMode: RotationMode.Limited,
+ noResidue: true,
+ role: ObstacleSpecialRoles.Door,
+ hingeOffset: Vec.create(-5.5, 0),
+ operationStyle: "slide",
+ zIndex: ZIndexes.ObstaclesLayer3,
+ frames: {
+ particle: "furniture_particle"
+ }
+ },
{
idString: "vault_door",
name: "Vault Door",
@@ -959,6 +980,26 @@ export const Obstacles = ObjectDefinitions.create()(
hitbox: RectangleHitbox.fromRect(6.85, 15.4, Vec.create(-0.3, 0)),
rotationMode: RotationMode.Limited
},
+ {
+ idString: "fireplace",
+ name: "fireplace",
+ material: "metal",
+ health: 100,
+ scale: {
+ spawnMin: 1,
+ spawnMax: 1,
+ destroy: 0.9
+ },
+ hideOnMap: true,
+ hitbox: new HitboxGroup(
+ RectangleHitbox.fromRect(9.5, 13.5, Vec.create(0, -1)),
+ new CircleHitbox(3, Vec.create(0, 5.35)),
+
+ ),
+ explosion: "barrel_explosion",
+ rotationMode: RotationMode.Limited
+
+ },
{
idString: "tv",
name: "TV",
@@ -996,6 +1037,49 @@ export const Obstacles = ObjectDefinitions.create()(
zIndex: ZIndexes.ObstaclesLayer3,
noCollisions: true
},
+ {
+ idString: "table2",
+ name: "Table2",
+ material: "wood",
+ health: 100,
+ scale: {
+ spawnMin: 1,
+ spawnMax: 1,
+ destroy: 0.9
+ },
+ hideOnMap: true,
+ hitbox: RectangleHitbox.fromRect(9, 7.7),
+ rotationMode: RotationMode.Limited,
+ frames: {
+ particle: "furniture_particle"
+ },
+ zIndex: ZIndexes.ObstaclesLayer3,
+ noCollisions: true
+ },
+ {
+ idString: "bathtub",
+ name: "bathtub",
+ material: "porcelain",
+ health: 100,
+ scale: {
+ spawnMin: 1,
+ spawnMax: 1,
+ destroy: 0.9
+ },
+ hideOnMap: true,
+ hitbox: new HitboxGroup(
+ RectangleHitbox.fromRect(5.8, 10, Vec.create(0, -1.5)),
+ new CircleHitbox(2.65, Vec.create(0, 3.7)),
+
+ ),
+ rotationMode: RotationMode.Limited,
+ allowFlyover: FlyoverPref.Always,
+ hasLoot: true,
+ frames: {
+ particle: "porta_potty_toilet_particle",
+ residue: "porta_potty_toilet_residue"
+ }
+ },
{
idString: "green_house_large_table",
name: "Green House Large Table",
@@ -1123,6 +1207,66 @@ export const Obstacles = ObjectDefinitions.create()(
particle: "furniture_particle"
}
},
+ {
+ idString: "riverside_house_wall",
+ name: "riverside_house_wall",
+ material: "wood",
+ health: 250,
+ hideOnMap: true,
+ hitbox: RectangleHitbox.fromRect(2.3, 2.3),
+ rotationMode: RotationMode.Limited,
+ allowFlyover: FlyoverPref.Never,
+ reflectBullets: true,
+ frames: {
+ particle: "wall_particle"
+ }
+ },
+ {
+ idString: "riverside_house_wall_2",
+ name: "riverside_house_wall_2",
+ material: "wood",
+ health: 250,
+ hideOnMap: true,
+ hitbox: RectangleHitbox.fromRect(1.65, 18.5),
+ rotationMode: RotationMode.Limited,
+ allowFlyover: FlyoverPref.Never,
+ reflectBullets: true,
+ frames: {
+ particle: "wall_particle"
+ }
+ },
+ {
+ idString: "riverside_house_wall_3",
+ name: "riverside_house_wall_3",
+ material: "wood",
+ health: 250,
+ hideOnMap: true,
+ hitbox: RectangleHitbox.fromRect(1.65, 4.5),
+ rotationMode: RotationMode.Limited,
+ allowFlyover: FlyoverPref.Never,
+ reflectBullets: true,
+ frames: {
+ particle: "wall_particle"
+ }
+ },
+ {
+ idString: "bed2",
+ name: "Bed2",
+ material: "wood",
+ health: 100,
+ scale: {
+ spawnMin: 1,
+ spawnMax: 1,
+ destroy: 0.9
+ },
+ hideOnMap: true,
+ hitbox: RectangleHitbox.fromRect(5.6, 16),
+ rotationMode: RotationMode.Limited,
+ allowFlyover: FlyoverPref.Always,
+ frames: {
+ particle: "furniture_particle"
+ }
+ },
{
idString: "bunk_bed",
name: "Bunk Bed",
@@ -1196,6 +1340,51 @@ export const Obstacles = ObjectDefinitions.create()(
residue: "porta_potty_toilet_residue"
}
},
+ {
+ idString: "riverside_house_wall_exterior",
+ name: "riverside_house_wall_exterior",
+ material: "wood",
+ indestructible: true,
+ reflectBullets: false,
+ health: 1000,
+ noResidue: true,
+ scale: {
+ spawnMin: 1,
+ spawnMax: 1,
+ destroy: 0.9
+ },
+ hideOnMap: true,
+ hitbox: new HitboxGroup(
+ RectangleHitbox.fromRect(22.3, 1.9, Vec.create(12.9, 23.3)),
+ RectangleHitbox.fromRect(1.9, 25, Vec.create(23.5, 11.5)),
+ RectangleHitbox.fromRect(1.9, 13.3, Vec.create(23.5, -17.8)),
+ RectangleHitbox.fromRect(14.9, 1.9, Vec.create(-15.3, 23.3)),
+ RectangleHitbox.fromRect(45.75, 1.9, Vec.create(0, -23.2)),
+ RectangleHitbox.fromRect(1.9, 18, Vec.create(-22, 13.8)),
+ RectangleHitbox.fromRect(1.9, 18, Vec.create(-22, -13.8)),
+ RectangleHitbox.fromRect(1.6, 8.5, Vec.create(-13.7, 28.5)),
+ RectangleHitbox.fromRect(2.3, 2.3, Vec.create(-13.7, 34)),
+ RectangleHitbox.fromRect(4.5, 1.3, Vec.create(-10.3, 34)),
+ RectangleHitbox.fromRect(4.5, 1.3, Vec.create(3.7, 34)),
+ RectangleHitbox.fromRect(2.3, 2.3, Vec.create(7.3, 34)),
+ RectangleHitbox.fromRect(24.78, 1.3, Vec.create(20.8, 34)),
+ RectangleHitbox.fromRect(2.3, 2.3, Vec.create(34.4, 34)),
+ RectangleHitbox.fromRect(1.6, 27.8, Vec.create(34.4, 19.4)),
+ RectangleHitbox.fromRect(2.3, 2.3, Vec.create(34.4, 4.2)),
+ RectangleHitbox.fromRect(1.3, 4.5, Vec.create(34.4, 1.1)),
+ RectangleHitbox.fromRect(1.3, 4.5, Vec.create(34.4, -13.5)),
+ RectangleHitbox.fromRect(2.3, 2.3, Vec.create(34.4, -17)),
+ RectangleHitbox.fromRect(8.8, 1.6, Vec.create(28.7, -16.8)),
+
+ ),
+
+ rotationMode: RotationMode.Limited,
+ allowFlyover: FlyoverPref.Never,
+ role: ObstacleSpecialRoles.Wall,
+ frames: {
+ particle: "furniture_particle"
+ }
+ },
{
idString: "porta_potty_back_wall",
name: "Porta Potty Back Wall",
diff --git a/server/src/data/lootTables.ts b/server/src/data/lootTables.ts
index 8f7674425a..b5890c2a57 100644
--- a/server/src/data/lootTables.ts
+++ b/server/src/data/lootTables.ts
@@ -260,6 +260,15 @@ export const LootTables: Record = {
{ item: "basic_outfit", weight: 0.001 }
]
},
+ bathtub: {
+ min: 2,
+ max: 3,
+ loot: [
+ { tier: "healing_items", weight: 3 },
+ { tier: "scopes", weight: 0.1 },
+ { tier: "guns", weight: 0.05 }
+ ]
+ },
toilet: {
min: 2,
max: 3,
@@ -269,6 +278,7 @@ export const LootTables: Record = {
{ tier: "guns", weight: 0.05 }
]
},
+
used_toilet: {
min: 2,
max: 3,
diff --git a/server/src/data/maps.ts b/server/src/data/maps.ts
index 3526274446..f2165463ca 100644
--- a/server/src/data/maps.ts
+++ b/server/src/data/maps.ts
@@ -72,6 +72,7 @@ const maps = {
green_house: 2,
mobile_home: 9,
porta_potty: 12,
+ riverside_house: 5,
container_3: 2,
container_4: 2,
container_5: 2,