Skip to content

Commit

Permalink
Simplify spawn groups
Browse files Browse the repository at this point in the history
  • Loading branch information
GrewsomeC committed Feb 25, 2024
1 parent d585977 commit 6bac41e
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 114 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,9 @@ Anthro Survivors works by adding a full-body piece of clothing to the character

You can probably see where this is going. Anthro Zeds Extended (as well as the original, Anthro Zeds) combines these together. We inject a list of "underwear" that comprises every possible furry model into UnderwearDefinitions, set the underwear chance to 100%, and make the spawn weight massive. This causes the game to spawn and equip a random furry model to every zombie (with an extremely small leftover chance of being human with underwear). The only downside to this is that zombies now only extremely rarely spawn with underwear, but since bras/underpants don't actually do anything in Zomboid, this is not really a problem.

The main thing that Anthro Zeds Extended does is we do **not** use the "_Deceased" version of furry heads. For some reason, the base Anthro Survivors mod requires four versions of every species: male, female, male deceased, and female deceased. Here's the thing, though: **the deceased versions are literally the same model and texture.** There is no difference. The *only* change is that the "deceased" version is a different item that is equipped to the "bandage" layer rather than the "fur" layer.
The main thing that Anthro Zeds Extended changes is we do **not** use the "_Deceased" version of furry heads. For some reason, the base Anthro Survivors mod requires four versions of every species: male, female, male deceased, and female deceased. Thing is, **the deceased versions are literally the same model and texture.** There is no difference. The *only* change is that the "deceased" version is a different item that is equipped to the "bandage" layer rather than the "fur" layer.

Why? Quite frankly, I have absolutely *zero idea*. I cannot find a reason why this is done, especially since Anthro Survivors only uses this "deceased" version on the game over screen when the player is zombified.
Why? Quite frankly, I have absolutely *zero idea*. I cannot find a reason why this is done, especially since Anthro Survivors only uses this "deceased" version on the game over screen when the player is zombified. I have attempted to reach out to the creators, Wuffwick and Jaql, to try and ask why this is done but neither will accept my messages on Steam and have no other public contact info.

The problem with this is that the "bandage" layer is "multi item". Meaning, you can have multiple "bandage" layer clothing equipped (because you have different bandage locations). This was (partially) the cause of the "hybrid" glitch in the original Anthro Zeds mod; if a zombie had two "deceased" furry heads, both could be equipped at the same time. The "fur" layer doesn't have this issue, as it is a unique slot (like almost every piece of clothing in Zomboid).

Expand Down
178 changes: 66 additions & 112 deletions media/lua/client/anthrozedsEX.lua
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ UnderwearDefinition = UnderwearDefinition or {};
AnthroZedsEX = {}

-- create empty table to fill

-- Does this "F_Black" section actually do anything, or is this just a case of "everyone does it beacuse everyone does it"? Find out.
UnderwearDefinition.Female_F_Black = {
chanceToSpawn = 10000,
gender = "female",
Expand All @@ -21,133 +21,87 @@ UnderwearDefinition.Male_F_Black = {
bottom = "",
}

-- Ungulates list

AnthroZedsEX.AnthroUngulatesF = {
"Furry_AnthroUngulates_FemaleBlackSheep",
"Furry_AnthroUngulates_FemaleWhiteSheep",
"Furry_AnthroUngulates_FemaleBlackWhiteSheep",
"Furry_AnthroUngulates_FemaleHerdwickSheep",
"Furry_AnthroUngulates_FemaleJacobsSheep",
"Furry_AnthroUngulates_FemaleScottishBlackSheep",
"Furry_AnthroUngulates_FemalePinkSheep",
"Furry_AnthroUngulates_FemaleWildBoar",
"Furry_AnthroUngulates_FemaleCowBrown",
"Furry_AnthroUngulates_FemaleCowBlackWhite",
"Furry_AnthroUngulates_FemaleCowBlack",
"Furry_AnthroUngulates_FemaleCowBlue",
"Furry_AnthroUngulates_FemaleGoatBrown"
}
AnthroZedsEX.AnthroUngulatesM = {
"Furry_AnthroUngulates_MaleBlackSheep",
"Furry_AnthroUngulates_MaleWhiteSheep",
"Furry_AnthroUngulates_MaleBlackWhiteSheep",
"Furry_AnthroUngulates_MaleHerdwickSheep",
"Furry_AnthroUngulates_MaleJacobsSheep",
"Furry_AnthroUngulates_MaleScottishBlackSheep",
"Furry_AnthroUngulates_MalePinkSheep",
"Furry_AnthroUngulates_MaleWildBoar",
"Furry_AnthroUngulates_MaleCowBrown",
"Furry_AnthroUngulates_MaleCowBlackWhite",
"Furry_AnthroUngulates_MaleCowBlack",
"Furry_AnthroUngulates_MaleCowBlue",
"Furry_AnthroUngulates_MaleGoatBrown"
-- Ungulates list
AnthroZedsEX.Ungulates = {}
AnthroZedsEX.Ungulates.start = "Furry_AnthroUngulates"
AnthroZedsEX.Ungulates.types = {
"BlackSheep",
"WhiteSheep",
"BlackWhiteSheep",
"JacobsSheep",
"ScottishBlackSheep",
"PinkSheep",
"WildBoar",
"CowBrown",
"CowBlackWhite",
"CowBlack",
"CowBlue",
"GoatBrown"
}

-- Loong list

AnthroZedsEX.LoongF = {
"Furry_Loong_FemaleLunarLoong",
"Furry_Loong_FemaleRedLoong",
"Furry_Loong_FemaleGreenLoong",
"Furry_Loong_FemaleTransLoong",
"Furry_Loong_FemaleGoldLoong",
"Furry_Loong_FemaleBlueLoong"
}

AnthroZedsEX.LoongM = {
"Furry_Loong_MaleLunarLoong",
"Furry_Loong_MaleRedLoong",
"Furry_Loong_MaleGreenLoong",
"Furry_Loong_MaleTransLoong",
"Furry_Loong_MaleGoldLoong",
"Furry_Loong_MaleBlueLoong"
AnthroZedsEX.Loong = {}
AnthroZedsEX.Loong.start = "Furry_Loong_"
AnthroZedsEX.Loong.types = {
"LunarLoong",
"RedLoong",
"GreenLoong",
"TransLoong",
"GoldLoong",
"BlueLoong"
}

-- Cobra/Jackalope list

AnthroZedsEX.CJF = {
"Furry_CobraJackalope_FemaleLunarJackalope",
"Furry_CobraJackalope_FemaleDuskCobra",
"Furry_CobraJackalope_FemaleDuskJackalopeRitual",
"Furry_CobraJackalope_FemaleLunarCobraHorned"
}

AnthroZedsEX.CJM = {
"Furry_CobraJackalope_MaleLunarJackalope",
"Furry_CobraJackalope_MaleDuskCobra",
"Furry_CobraJackalope_MaleDuskJackalopeRitual",
"Furry_CobraJackalope_MaleLunarCobraHorned"
AnthroZedsEX.CJ = {}
AnthroZedsEX.CJ.start = "Furry_CobraJackalope_"
AnthroZedsEX.CJ.types = {
"LunarJackalope",
"DuskCobra",
"DuskJackalopeRitual",
"LunarCobraHorned"
}

-- Anthro Survivors base mod list

AnthroZedsEX.baseSpeciesF = {
"Furry_FemaleCat",
"Furry_FemaleDeer",
"Furry_FemaleDog",
"Furry_FemaleFox",
"Furry_FemaleFox_Black",
"Furry_FemaleFox_White",
"Furry_FemaleJackal",
"Furry_FemaleRabbit",
"Furry_FemaleTrashPanda",
"Furry_FemaleSpiffy",
"Furry_FemaleSnep",
"Furry_FemaleWolf",
"Furry_FemaleWolf_Black",
"Furry_FemaleWolf_White",
"Furry_FemaleWolf_Red",
"Furry_FemaleLeggy",
"Furry_FemaleTubeRat",
"Furry_FemaleMarten"
AnthroZedsEX.baseSpecies = {}
AnthroZedsEX.baseSpecies.start = "Furry_"
AnthroZedsEX.baseSpecies.types = {
"Cat",
"Deer",
"Dog",
"Fox",
"Fox_Black",
"Fox_White",
"Jackal",
"Rabbit",
"TrashPanda",
"Spiffy",
"Snep",
"Wolf",
"Wolf_Black",
"Wolf_White",
"Wolf_Red",
"Leggy",
"TubeRat",
"Marten"
}

AnthroZedsEX.baseSpeciesM = {
"Furry_MaleCat",
"Furry_MaleDeer",
"Furry_MaleDog",
"Furry_MaleFox",
"Furry_MaleFox_Black",
"Furry_MaleFox_White",
"Furry_MaleJackal",
"Furry_MaleRabbit",
"Furry_MaleTrashPanda",
"Furry_MaleSpiffy",
"Furry_MaleSnep",
"Furry_MaleWolf",
"Furry_MaleWolf_Black",
"Furry_MaleWolf_White",
"Furry_MaleWolf_Red",
"Furry_MaleLeggy",
"Furry_MaleTubeRat",
"Furry_MaleMarten"
}


--Define which mod uses which list
AnthroZedsEX.modList = {
AnthroUngulates = {AnthroZedsEX.AnthroUngulatesF, AnthroZedsEX.AnthroUngulatesM},
Loong = {AnthroZedsEX.LoongF, AnthroZedsEX.LoongM},
CobraJackalope = {AnthroZedsEX.CJF, AnthroZedsEX.CJM}
AnthroUngulates = AnthroZedsEX.Ungulates,
Loong = AnthroZedsEX.Loong,
CobraJackalope = AnthroZedsEX.CJ
}

--Add models to the spawn list
function AnthroZedsEX.addToSpawn(femaleList, maleList)
for i = 1, #femaleList do
table.insert(UnderwearDefinition.Female_F_Black.top, {name=""..femaleList[i], chance=1});
print(""..femaleList[i].." added to female spawns.");
table.insert(UnderwearDefinition.Male_F_Black.top, {name=""..maleList[i], chance=1});
print(""..maleList[i].." added to male spawns.");
function AnthroZedsEX.addToSpawn(modTable)
for i = 1, #modTable.types do
table.insert(UnderwearDefinition.Female_F_Black.top, {name=""..modTable.start.."Female"..modTable.types[i], chance=1})
print(""..modTable.start.."Female"..modTable.types[i].." added to female spawns.")
table.insert(UnderwearDefinition.Male_F_Black.top, {name=""..modTable.start.."Male"..modTable.types[i], chance=1})
print(""..modTable.start.."Male"..modTable.types[i].." added to male spawns.")
end
end

Expand All @@ -156,7 +110,7 @@ function AnthroZedsEX.checkMod(modID)
print("Checking for mod "..modID..".")
if getActivatedMods():contains(modID) then
print("" .. modID .. " detected, adding to spawn list.");
AnthroZedsEX.addToSpawn(AnthroZedsEX.modList[modID][1], AnthroZedsEX.modList[modID][2]);
AnthroZedsEX.addToSpawn(AnthroZedsEX.modList[modID]);
end
end

Expand All @@ -173,7 +127,7 @@ end
--Add the default models, then check for every submod and whether it is installed or not
function AnthroZedsEX.onGameBoot()
print("Anthro Zeds Expanded has loaded.")
AnthroZedsEX.addToSpawn(AnthroZedsEX.baseSpeciesF, AnthroZedsEX.baseSpeciesM);
AnthroZedsEX.addToSpawn(AnthroZedsEX.baseSpecies);
AnthroZedsEX.checkMod("AnthroUngulates");
AnthroZedsEX.checkMod("Loong");
AnthroZedsEX.checkMod("CobraJackalope")
Expand Down

0 comments on commit 6bac41e

Please sign in to comment.