diff --git a/roles/7dtd/files/mods/MoreAnimals.zip b/roles/7dtd/files/mods/MoreAnimals.zip
new file mode 100644
index 0000000..538ace6
Binary files /dev/null and b/roles/7dtd/files/mods/MoreAnimals.zip differ
diff --git a/roles/7dtd/files/mods/MoreAnimals/Config/spawning.xml b/roles/7dtd/files/mods/MoreAnimals/Config/spawning.xml
new file mode 100644
index 0000000..796ebea
--- /dev/null
+++ b/roles/7dtd/files/mods/MoreAnimals/Config/spawning.xml
@@ -0,0 +1,33 @@
+
+
+
+
+ 4
+ 0.25,0.438,0.338,0.25,0.163,0.088
+
+
+ 3
+ 0.6,1.05,0.81,0.6,0.39,0.21
+
\ No newline at end of file
diff --git a/roles/7dtd/files/mods/MoreAnimals/ModInfo.xml b/roles/7dtd/files/mods/MoreAnimals/ModInfo.xml
new file mode 100644
index 0000000..fe020df
--- /dev/null
+++ b/roles/7dtd/files/mods/MoreAnimals/ModInfo.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/roles/7dtd/tasks/main.yml b/roles/7dtd/tasks/main.yml
index e67abac..6fa45da 100644
--- a/roles/7dtd/tasks/main.yml
+++ b/roles/7dtd/tasks/main.yml
@@ -36,33 +36,39 @@
# Mods live in the bind-mounted serverfiles; the container loads them on its next start
# (recreate on every deploy re-reads them). zips come from roles/7dtd/files/mods (sdtd_mods
# in vars.yml), extracted one level deep (each zip carries its own mod subfolder; prefix
-# folders with z- if they must sort LAST for load order). unarchive only ADDS — it never
-# removes, so a mod dropped from sdtd_mods would keep loading: with an empty list we wipe
-# the whole dir and the create-task below rebuilds it empty. Partial mod swaps are not
-# auto-cleaned (the role only knows zip names, not the folders zips unpack into) — remove
-# those retired folders from the box by hand.
+# folders with z- if they must sort LAST for load order).
+# Deployed now: MoreAnimals — a PURE XML data patch (no DLL/Harmony) raising wild-game/predator
+# spawn density (v3.x schema: maxcount per 80x80m chunk + 6-value respawndelay tuples). Works
+# with EAC ON, needs NO client install (spawning is server-authoritative; the server pushes its
+# XML state to clients on connect). GATE: XML values apply only while the sandbox Density options
+# are Default — once sdtd_sandbox_code sets any density != Default, the sandbox value wins and
+# this patch is inert; use SandboxCode Day/Night Animal Density + Respawn instead.
+# unarchive only ADDS — it never removes, so a mod dropped from sdtd_mods would keep loading:
+# with an empty list we wipe the whole dir and the create-task below rebuilds it empty.
+# Partial mod swaps are not auto-cleaned (the role only knows zip names, not the folders zips
+# unpack into) — remove those retired folders from the box by hand.
- name: Remove 7 Days to Die Mods directory when no mods are deployed
ansible.builtin.file:
path: /opt/apps/7dtd/serverfiles/Mods
state: absent
when: sdtd_mods | length == 0
-# - name: Create 7 Days to Die Mods directory (container user)
-# ansible.builtin.file:
-# path: /opt/apps/7dtd/serverfiles/Mods
-# state: directory
-# owner: '1000'
-# group: '1000'
-# mode: '0755'
+- name: Create 7 Days to Die Mods directory (container user)
+ ansible.builtin.file:
+ path: /opt/apps/7dtd/serverfiles/Mods
+ state: directory
+ owner: '1000'
+ group: '1000'
+ mode: '0755'
-# - name: Deploy 7 Days to Die mods from vendored zips
-# ansible.builtin.unarchive:
-# src: "mods/{{ item }}"
-# dest: /opt/apps/7dtd/serverfiles/Mods
-# owner: '1000'
-# group: '1000'
-# mode: '0755'
-# loop: "{{ sdtd_mods }}"
+- name: Deploy 7 Days to Die mods from vendored zips
+ ansible.builtin.unarchive:
+ src: "mods/{{ item }}"
+ dest: /opt/apps/7dtd/serverfiles/Mods
+ owner: '1000'
+ group: '1000'
+ mode: '0755'
+ loop: "{{ sdtd_mods }}"
- name: Template 7 Days to Die serverconfig from vars.yml
ansible.builtin.template:
diff --git a/roles/7dtd/templates/sdtdserver.xml.j2 b/roles/7dtd/templates/sdtdserver.xml.j2
index 243e595..6aa16e1 100644
--- a/roles/7dtd/templates/sdtdserver.xml.j2
+++ b/roles/7dtd/templates/sdtdserver.xml.j2
@@ -62,52 +62,35 @@
-
-
-
-
-
-
+
+{% if sdtd_sandbox_code %}
+
+{% endif %}
+
+
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/vars.yml b/vars.yml
index dfa47d0..9aa3497 100755
--- a/vars.yml
+++ b/vars.yml
@@ -184,6 +184,18 @@ sdtd_game_world: RWG
sdtd_worldgen_seed: boxswapper
sdtd_worldgen_size: 10240
sdtd_game_name: Boxswapper
+## v3.0+ SandboxCode — the ONLY gameplay tuning v3.x reads. The vars below this block
+## (sdtd_difficulty .. sdtd_airdrop_frequency) are REFERENCE-ONLY: v3.0 removed them from
+## serverconfig.xml, the template no longer renders them, and the game IGNORES them. Empty
+## code = Adventurer defaults. To restore the server's intended tuning generate a code:
+## client -> New Game -> Sandbox Options -> set options to match the vars below
+## (Difficulty Nomad, XP 250, DayNight 60, DayLight 18, Blood Moon 20 days, DropOnDeath
+## Everything, Loot 150, AirDrop 24h) PLUS Day Animal Density = High and
+## Day Animal Respawn = Fast (Night similar if you want night wildlife) -> copy -> paste here.
+## While the code is empty, the MoreAnimals modlet controls wildlife density (it applies only
+## while the sandbox Density options are Default).
+sdtd_sandbox_code: ""
+## ── REFERENCE VARS FOR SANDBOXCODE GENERATION (not rendered to serverconfig.xml on v3.x) ──
## Difficulty: 0 = Scavenger, 1 = Adventurer, 2 = Nomad, 3 = Warrior, 4 = Survivalist, 5 = Insane
sdtd_difficulty: "2"
sdtd_day_night_length: 60
@@ -200,15 +212,17 @@ sdtd_airdrop_frequency: 24
## PlayerKillingMode: 0 = no killing, 1 = kill allies only, 2 = kill strangers only, 3 = kill everyone
sdtd_player_killing_mode: "3"
sdtd_max_spawned_zombies: 64
-## EAC is ON (default protection). It was OFF while code mods were deployed — EAC blocks
-## their Harmony hooks, so keep "false" if mods are ever reinstalled.
+## EAC is ON (default protection). EAC blocks CODE mods (Harmony DLL hooks) — that is why it was
+## OFF while code mods were deployed. PURE XML data modlets (like MoreAnimals below) carry no DLL
+## and work fine with EAC ON; keep "false" only if code mods are ever reinstalled.
sdtd_eac_enabled: "true"
-## Game mods: NONE deployed (Singularity 4.1.3 + No Respawn Near Backpack 2.0.0.0 were
-## removed; EAC was flipped back on as part of that change). To re-add a mod: drop the zip
-## into roles/7dtd/files/mods/ and list its name here. NOTE: the role's unarchive task only
-## ADDS mods — retiring to an EMPTY list wipes the whole server Mods dir; swapping one mod
-## for another (non-empty list) requires removing the retired folder from the box by hand.
-sdtd_mods: []
+## Game mods deployed: MoreAnimals.zip — pure XML spawn-density patch (roles/7dtd/files/mods).
+## Server-side only: clients join vanilla with EAC ON, nothing to install. To re-add/swap a mod:
+## drop the zip into roles/7dtd/files/mods/ and list its name here. unarchive only ADDS — it
+## never removes, so a mod dropped from this list would keep loading: with an EMPTY list we wipe
+## the whole server Mods dir; swapping one mod for another (non-empty list) requires removing the
+## retired folder from the box by hand.
+sdtd_mods: [MoreAnimals.zip]
sdtd_xp_multiplier: 250
sdtd_telnet_enabled: "true"