Jump to content

[DEPRECATED] [Tutorial] Making Custom Skins for Modded Characters!


Hornete
 Share

Recommended Posts

Just now, ILikeHoneyBees said:

[snip]

local assets =
{
    Asset( "ANIM", "anim/zeta.zip" ),
    Asset( "ANIM", "anim/ghost_zeta_build.zip" ),
}

local skins =
{
    normal_skin = "zeta",
    ghost_skin = "ghost_zeta_build",
}

local base_prefab = "zeta"

local tags = {"ZETA", "CHARACTER"}

return CreatePrefabSkin("zeta_none",
{
    base_prefab = base_prefab,
    skins = skins,
    assets = assets,
    tags = tags,

    skip_item_gen = true,
    skip_giftable_gen = true,
})

Remove this part here, it's unnessacary.

Link to comment
Share on other sites

7 minutes ago, Hornete said:

local assets =
{
    Asset( "ANIM", "anim/zeta.zip" ),
    Asset( "ANIM", "anim/ghost_zeta_build.zip" ),
}

local skins =
{
    normal_skin = "zeta",
    ghost_skin = "ghost_zeta_build",
}

local base_prefab = "zeta"

local tags = {"ZETA", "CHARACTER"}

return CreatePrefabSkin("zeta_none",
{
    base_prefab = base_prefab,
    skins = skins,
    assets = assets,
    tags = tags,

    skip_item_gen = true,
    skip_giftable_gen = true,
})

Remove this part here, it's unnessacary.

Hmm, I did that and now the game just closes with no error, here. I'll check the logs..

image.thumb.png.d2d57e5db3fb7456ecb9eeae2af4068e.png

Looks like the same thing as before. I changed the name of the spriter file and what I think are the animation frames themselves

image.png.75b5f3e013d754f70fc2c633f212b8de.png

Any Idea as to what it could be?

 

  • Like 1
Link to comment
Share on other sites

3 minutes ago, Hornete said:

Are you sure you recompiled? Try deleting the zeta_rose.zip and then recompiling the animations again.

okay, the game loaded. but now not even the normal skin shows up. and there isn't a head slot. I'm sorry for taking up so much of your time, but do you have any idea what could be happening?image.thumb.png.11f6219a6d0844f78062fa0d5116b1c3.png

Link to comment
Share on other sites

3 minutes ago, ILikeHoneyBees said:

 

--Hornet: I am currently using wilba as an example, youll want to change all instances of "wilba" to the prefab name of your character!
--Skins
local _G = GLOBAL
local PREFAB_SKINS = _G.PREFAB_SKINS
local PREFAB_SKINS_IDS = _G.PREFAB_SKINS_IDS
local SKIN_AFFINITY_INFO = GLOBAL.require("skin_affinity_info")

modimport("skins_api") --Hornet: We import the file! If you named your file something else other than skins_api then youll want to rename this function to the name of the file

SKIN_AFFINITY_INFO.wilba = {
	"wilba_victorian", --Hornet: These skins will show up for the character when the Survivor filter is enabled
}

--[[ --Hornet: The table of skins youre going to have, You can have as many skins as you want!

PREFAB_SKINS["wilba"] = {
	"wilba_none", 
	"wilba_roseate",
	"wilba_victorian",
} --And So on!

]]

PREFAB_SKINS_IDS = {} --Make sure this is after you  change the PREFAB_SKINS["character"] table
for prefab,skins in pairs(PREFAB_SKINS) do
    PREFAB_SKINS_IDS[prefab] = {}
    for k,v in pairs(skins) do
      	  PREFAB_SKINS_IDS[prefab][v] = k
    end
end



AddSkinnableCharacter("wilba") --Hornet: The character youd like to skin, make sure you use the prefab name. And MAKE sure you run this function AFTER you import the skins_api file

Are you sure you have these lines from the tutorial? 

Link to comment
Share on other sites

8 minutes ago, Hornete said:

--Hornet: I am currently using wilba as an example, youll want to change all instances of "wilba" to the prefab name of your character!
--Skins
local _G = GLOBAL
local PREFAB_SKINS = _G.PREFAB_SKINS
local PREFAB_SKINS_IDS = _G.PREFAB_SKINS_IDS
local SKIN_AFFINITY_INFO = GLOBAL.require("skin_affinity_info")

modimport("skins_api") --Hornet: We import the file! If you named your file something else other than skins_api then youll want to rename this function to the name of the file

SKIN_AFFINITY_INFO.wilba = {
	"wilba_victorian", --Hornet: These skins will show up for the character when the Survivor filter is enabled
}

--[[ --Hornet: The table of skins youre going to have, You can have as many skins as you want!

PREFAB_SKINS["wilba"] = {
	"wilba_none", 
	"wilba_roseate",
	"wilba_victorian",
} --And So on!

]]

PREFAB_SKINS_IDS = {} --Make sure this is after you  change the PREFAB_SKINS["character"] table
for prefab,skins in pairs(PREFAB_SKINS) do
    PREFAB_SKINS_IDS[prefab] = {}
    for k,v in pairs(skins) do
      	  PREFAB_SKINS_IDS[prefab][v] = k
    end
end



AddSkinnableCharacter("wilba") --Hornet: The character youd like to skin, make sure you use the prefab name. And MAKE sure you run this function AFTER you import the skins_api file

Are you sure you have these lines from the tutorial? 

Oh dear me, I am so sorry. I put them in but I think I was saving them to an old back-uped version. I added it to the files I'm using. and I got another error. and I'm back where I started. the last time this was because I mis-named something. but you mentioned something about type=base. I'll go and take a look at the code and get back to you (in case you hadn't already guessed. I'm not a programmer)

 

image.thumb.png.b2322d18f6949562a618755feb803171.png

Link to comment
Share on other sites

Just now, ILikeHoneyBees said:

 

Back to step one, haha. Are you absolutely positive you have this line for both the zeta_none and zeta_rose skins in the CreatePrefabSkin functions?

type = "base"

If you do, share the mods files so I can take a look

Link to comment
Share on other sites

Well, for now here is the modmain file

 

PrefabFiles = {
  "mutantbeecocoon",
  "mutantbee",
  "mutantbeehive",
  "zeta",
  "zeta_none",
  "armor_honey"
}

Assets = {
  Asset( "IMAGE", "images/saveslot_portraits/zeta.tex" ),
  Asset( "ATLAS", "images/saveslot_portraits/zeta.xml" ),

  Asset( "IMAGE", "images/selectscreen_portraits/zeta.tex" ),
  Asset( "ATLAS", "images/selectscreen_portraits/zeta.xml" ),

  Asset( "IMAGE", "images/selectscreen_portraits/zeta_silho.tex" ),
  Asset( "ATLAS", "images/selectscreen_portraits/zeta_silho.xml" ),

  Asset( "IMAGE", "bigportraits/zeta.tex" ),
  Asset( "ATLAS", "bigportraits/zeta.xml" ),
  
    Asset( "IMAGE", "bigportraits/zeta_rose.tex" ),
  Asset( "ATLAS", "bigportraits/zeta_rose.xml" ),

  Asset( "IMAGE", "images/map_icons/zeta.tex" ),
  Asset( "ATLAS", "images/map_icons/zeta.xml" ),
  Asset( "IMAGE", "images/map_icons/mutantbeecocoon.tex" ),
  Asset( "ATLAS", "images/map_icons/mutantbeecocoon.xml" ),
  Asset( "IMAGE", "images/map_icons/mutantbeehive.tex" ),
  Asset( "ATLAS", "images/map_icons/mutantbeehive.xml" ),

  Asset( "IMAGE", "images/avatars/avatar_zeta.tex" ),
  Asset( "ATLAS", "images/avatars/avatar_zeta.xml" ),

  Asset( "IMAGE", "images/avatars/avatar_ghost_zeta.tex" ),
  Asset( "ATLAS", "images/avatars/avatar_ghost_zeta.xml" ),

  Asset( "IMAGE", "images/avatars/self_inspect_zeta.tex" ),
  Asset( "ATLAS", "images/avatars/self_inspect_zeta.xml" ),

  Asset( "IMAGE", "images/names_zeta.tex" ),
  Asset( "ATLAS", "images/names_zeta.xml" ),

  Asset( "IMAGE", "bigportraits/zeta_none.tex" ),
  Asset( "ATLAS", "bigportraits/zeta_none.xml" ),

  Asset("SOUNDPACKAGE", "sound/zeta.fev"),
  Asset("SOUND", "sound/zeta.fsb"),

  Asset("ANIM", "anim/status_symbiosis.zip"),
  Asset("ANIM", "anim/status_meter_symbiosis.zip"),
}

RemapSoundEvent( "dontstarve/characters/zeta/hurt", "zeta/zeta/hurt" )
RemapSoundEvent( "dontstarve/characters/zeta/talk_LP", "zeta/zeta/talk_LP" )
RemapSoundEvent( "dontstarve/characters/zeta/death_voice", "zeta/zeta/death_voice" )
RemapSoundEvent( "dontstarve/characters/zeta/emote", "zeta/zeta/emote" ) --dst
RemapSoundEvent( "dontstarve/characters/zeta/pose", "zeta/zeta/pose" ) --dst
RemapSoundEvent( "dontstarve/characters/zeta/yawn", "zeta/zeta/yawn" ) --dst
RemapSoundEvent( "dontstarve/characters/zeta/ghost_LP", "zeta/zeta/ghost_LP" ) --dst


local require = GLOBAL.require
local STRINGS = GLOBAL.STRINGS
local TUNING = GLOBAL.TUNING
local Ingredient = GLOBAL.Ingredient
local RECIPETABS = GLOBAL.RECIPETABS
local TECH = GLOBAL.TECH

-- Stats
TUNING.OZZY_MAX_HEALTH = 175
TUNING.OZZY_MAX_SANITY = 100
TUNING.OZZY_MAX_HUNGER = 125
TUNING.OZZY_DEFAULT_DAMAGE_MULTIPLIER = 0.75
TUNING.OZZY_HUNGER_SCALE = 1.1
TUNING.OZZY_NUM_PETALS_PER_HONEY = 5
TUNING.OZZY_SHARE_TARGET_DIST = 30
TUNING.OZZY_MAX_SHARE_TARGETS = 20
TUNING.OZZY_DEFAUT_SPEED_MULTIPLIER = 1.0
TUNING.OZZY_SPRING_SPEED_MULTIPLIER = 1.15
TUNING.OZZY_WINTER_SPEED_MULTIPLIER = 0.85
TUNING.OZZY_MAX_SUMMON_BEES = 3
TUNING.OZZY_SUMMON_CHANCE = 0.3
TUNING.OZZY_MAX_BEES_STORE = 7

-- Mutant bee stats
TUNING.MUTANT_BEE_HEALTH = 100
TUNING.MUTANT_BEE_DAMAGE = 10
TUNING.MUTANT_BEE_ATTACK_PERIOD = 1
TUNING.MUTANT_BEE_TARGET_DIST = 8
TUNING.MUTANT_BEE_WATCH_DIST = 20
TUNING.MUTANT_BEE_MAX_POISON_TICKS = 5
TUNING.MUTANT_BEE_POISON_DAMAGE = 5
TUNING.MUTANT_BEE_POISON_PERIOD = 0.75
TUNING.MUTANT_BEE_EXPLOSIVE_DAMAGE_MULTIPLIER = 3.0
TUNING.MUTANT_BEE_EXPLOSIVE_RANGE = 8
TUNING.MUTANT_BEE_FROSTBITE_SPEED_PENALTY = 0.5
TUNING.MUTANT_BEE_FROSTBITE_ATK_PERIOD_PENALTY = 1.65
TUNING.MUTANT_BEE_COLDNESS_ADD = 0.5
TUNING.MUTANT_BEE_WEAPON_ATK_RANGE = 10
TUNING.MUTANT_BEE_RANGED_TARGET_DIST = 10
TUNING.MUTANT_BEE_RANGED_ATK_HEALTH_PENALTY = 1 / 10
TUNING.MUTANT_BEE_RANGED_DAMAGE = 15
TUNING.MUTANT_BEE_RANGED_ATK_PERIOD = 2.5

-- Mutant beehive stats
TUNING.MUTANT_BEEHIVE_DEFAULT_EMERGENCY_BEES = 2
TUNING.MUTANT_BEEHIVE_EMERGENCY_BEES_PER_PLAYER = 100
TUNING.MUTANT_BEEHIVE_EMERGENCY_RADIUS = 30
TUNING.MUTANT_BEEHIVE_BEES = 4
TUNING.MUTANT_BEEHIVE_DEFAULT_RELEASE_TIME = 30
TUNING.MUTANT_BEEHIVE_DEFAULT_REGEN_TIME = 30
TUNING.MUTANT_BEEHIVE_DELTA_BEES = 1
TUNING.MUTANT_BEEHIVE_DELTA_RELEASE_TIME = 10
TUNING.MUTANT_BEEHIVE_DELTA_REGEN_TIME = 5
TUNING.MUTANT_BEEHIVE_UPGRADES_PER_STAGE = 3
TUNING.MUTANT_BEEHIVE_WATCH_DIST = 30
TUNING.MUTANT_BEEHIVE_RECOVER_PER_CHILD = 0.75
TUNING.MUTANT_BEEHIVE_GROW_TIME = {TUNING.TOTAL_DAY_TIME * 10, TUNING.TOTAL_DAY_TIME * 10}

-- Armor honey
TUNING.ARMORHONEY_MAX_ABSORPTION = 0.65
TUNING.ARMORHONEY_MIN_ABSORPTION = 0.35
TUNING.ARMORHONEY_HEAL_TICKS = 5
TUNING.ARMORHONEY_HEAL_INTERVAL = 1
TUNING.ARMORHONEY_MIN_HEAL_PERCENT = 0.01
TUNING.ARMORHONEY_MAX_HEAL_PERCENT = 0.03
TUNING.ARMORHONEY_MIN_HEAL_EXTRA = 1
TUNING.ARMORHONEY_MAX_HEAL_EXTRA = 3
TUNING.ARMORHONEY_ADD_STORE = 1
TUNING.ARMORHONEY_MULT_REGEN_TICK = 2 / 3

-- Parasite
TUNING.METAPIS_PARASITE_HEALTH_DIV = 200
TUNING.METAPIS_MAX_PARASITES_PER_VICTIM = 4
TUNING.METAPIS_PARASITE_NEAR_OWNER_SPAWN_RANGE = 20
TUNING.METAPIS_PARASITE_HEALTH_RATE = 0.5
TUNING.METAPIS_PARASITE_DAMAGE_RATE = 0.5
TUNING.METAPIS_PARASITE_LIFE_SPAN = 30

-- Mod config
local num_bees = GetModConfigData("NUM_BEES_IN_HIVE")
TUNING.MUTANT_BEEHIVE_DEFAULT_EMERGENCY_BEES = TUNING.MUTANT_BEEHIVE_DEFAULT_EMERGENCY_BEES + num_bees * 2
TUNING.MUTANT_BEEHIVE_DEFAULT_REGEN_TIME = TUNING.MUTANT_BEEHIVE_DEFAULT_REGEN_TIME - num_bees * 10

local bee_damage = GetModConfigData("BEE_DAMAGE")
TUNING.MUTANT_BEE_DAMAGE = TUNING.MUTANT_BEE_DAMAGE + bee_damage * 5
TUNING.MUTANT_BEE_ATTACK_PERIOD = TUNING.MUTANT_BEE_ATTACK_PERIOD - bee_damage * 0.5
TUNING.MUTANT_BEE_POISON_DAMAGE = TUNING.MUTANT_BEE_POISON_DAMAGE - bee_damage * 2
TUNING.MUTANT_BEE_RANGED_DAMAGE = TUNING.MUTANT_BEE_RANGED_DAMAGE + bee_damage * 5
TUNING.MUTANT_BEE_RANGED_ATK_PERIOD = TUNING.MUTANT_BEE_RANGED_ATK_PERIOD - bee_damage * 1


-- The character select screen lines
STRINGS.CHARACTER_TITLES.zeta = "The Buzzy"
STRINGS.CHARACTER_NAMES.zeta = "Wuzzy"
STRINGS.CHARACTER_DESCRIPTIONS.zeta = "*Has his own hive\n*Produces honey by eating petals\n*Summons bees by chance on attack"
STRINGS.CHARACTER_QUOTES.zeta = "\"Let's beefriend!\""

-- Custom speech strings
STRINGS.CHARACTERS.ZETA = require "speech_zeta"

-- The character's name as appears in-game
STRINGS.NAMES.ZETA = "Wuzzy"

AddMinimapAtlas("images/map_icons/zeta.xml")
AddMinimapAtlas("images/map_icons/mutantbeecocoon.xml")
AddMinimapAtlas("images/map_icons/mutantbeehive.xml")

-- Add mod character to mod character list. Also specify a gender. Possible genders are MALE, FEMALE, ROBOT, NEUTRAL, and PLURAL.
AddModCharacter("zeta", "MALE")

local function MakeHoneycombUpgrader(prefab)
  if not prefab.components.upgrader then
    prefab:AddComponent("upgrader")
  end
end

AddPrefabPostInit("honeycomb", MakeHoneycombUpgrader)

local function HandleHoneyPerishingInMetapisHive(prefab)
  if prefab.components.perishable and prefab.components.inventoryitem then
    local OldOnPutInInventory = prefab.components.inventoryitem.onputininventoryfn or function() return end
    prefab.components.inventoryitem:SetOnPutInInventoryFn(function(inst, owner)
      if owner.prefab == "mutantbeehive" then
        inst.components.perishable:StopPerishing()
      end

      OldOnPutInInventory(inst, owner)
    end)


    local inventoryitem = prefab.components.inventoryitem
    local OldOnRemoved = inventoryitem.OnRemoved
    local onremovedfn = function(inst, owner)
      if owner.prefab == "mutantbeehive" then
        inst.components.perishable:StartPerishing()
      end
    end

    inventoryitem.OnRemoved = function(comp)
      if comp.owner then
        onremovedfn(comp.inst, comp.owner)
      end
      OldOnRemoved(comp)
    end
  end
end

AddPrefabPostInit("honey", HandleHoneyPerishingInMetapisHive)

local containers = GLOBAL.require("containers")
local oldwidgetsetup = containers.widgetsetup
local MyChests = {
  mutantbeehive = "treasurechest",
}

containers.widgetsetup = function(container, prefab, data)
  prefab = MyChests[prefab or container.inst.prefab] or prefab
  oldwidgetsetup(container, prefab, data)
end

AddRecipe("mutantbeecocoon",
  {
    Ingredient("honeycomb", 1),
    Ingredient("cutgrass", 4),
    Ingredient("honey", 1)
  },
  RECIPETABS.SURVIVAL,
  TECH.NONE,
  nil, nil, nil, nil,
  "beemaster",
  "images/inventoryimages/mutantbeecocoon.xml",
  "mutantbeecocoon.tex"
)

AddRecipe("armorhoney",
  {
    Ingredient("log", 10),
    Ingredient("rope", 1),
    Ingredient("honey", 3)
  },
  RECIPETABS.WAR,
  TECH.NONE,
  nil, nil, nil, nil,
  "beemaster",
  "images/inventoryimages/armor_honey.xml",
  "armor_honey.tex"
)

GLOBAL.ACTIONS.UPGRADE.priority = 1 -- To show over ACTIONS.STORE

local Badge = require("widgets/badge")

local function OnRegenTick(inst, data)
  local percent = inst.components.beesummoner:GetRegenTickPercent()
  inst.symbiosis_percent:set(math.floor(percent * 100 + 0.5))
  inst.symbiosis_maxval:set(inst.components.beesummoner.maxticks)
  inst.symbiosis_numstore:set(inst.components.beesummoner.numstore)

  if data.currenttick > 0 then
    inst.symbiosis_pulse:set(true)
  else
    inst.symbiosis_pulse:set(false)
  end
end

local function OnNumStoreChange(inst, data)
  inst.symbiosis_numstore:set(inst.components.beesummoner.numstore)
end

local function CalcSymbiosisPosition(status)
  -- Assume that brain always stays in the middle, stomach on the left and heart on the right
  local brainPos = status.brain:GetPosition()
  local stomachPos = status.stomach:GetPosition()
  local heartPos = status.heart:GetPosition()

  local pos = GLOBAL.Vector3(2 * stomachPos.x - brainPos.x, brainPos.y, stomachPos.z)
  return pos
end

local function StatusPostConstruct(self)
  if self.owner.prefab == 'zeta' then
    self.symbiosis = self:AddChild(Badge(nil, self.owner, { 48 / 255, 169 / 255, 169 / 255, 1 }, "status_symbiosis"))
    self.symbiosis.backing:GetAnimState():SetBuild("status_meter_symbiosis")

    self.symbiosis:Hide()
    self.symbiosis.num:Show()
    local OldOnLoseFocus = self.symbiosis.OnLoseFocus
    self.symbiosis.OnLoseFocus = function(badge)
      OldOnLoseFocus(badge)
      badge.num:Show()
    end

    self.owner.UpdateSymbiosisBadge = function()
      local percent = self.owner.symbiosis_percent and (self.owner.symbiosis_percent:value() / 100) or 0
      local maxval = self.owner.symbiosis_maxval and self.owner.symbiosis_maxval:value() or 0
      local numstore = self.owner.symbiosis_numstore and self.owner.symbiosis_numstore:value() or 0
      local pulse = self.owner.symbiosis_pulse and self.owner.symbiosis_pulse:value() or false
      local pos = CalcSymbiosisPosition(self)
      self.symbiosis:Show()
      self.symbiosis:SetPosition(pos:Get())
      self.symbiosis:SetScale(self.brain:GetScale():Get())
      self.symbiosis:SetPercent(percent, maxval)
      self.symbiosis.num:SetString(GLOBAL.tostring(numstore))
      if pulse then
        self.symbiosis:PulseGreen()
      end
    end
  end
end

AddClassPostConstruct("widgets/statusdisplays", StatusPostConstruct)

local function onsymbiosisdirty(inst)
  if GLOBAL.ThePlayer and GLOBAL.ThePlayer.UpdateSymbiosisBadge then
    GLOBAL.ThePlayer.UpdateSymbiosisBadge()
  end
end

local function PlayerPostConstruct(inst)
  if inst.prefab ~= 'zeta' then
    return
  end

  inst.symbiosis_percent = GLOBAL.net_byte(inst.GUID, "symbiosis.percent", "symbiosisdirty")
  inst.symbiosis_maxval = GLOBAL.net_byte(inst.GUID, "symbiosis.maxval", "symbiosisdirty")
  inst.symbiosis_numstore = GLOBAL.net_byte(inst.GUID, "symbiosis.numstore", "symbiosisdirty")
  inst.symbiosis_pulse = GLOBAL.net_bool(inst.GUID, "symbiosis.pulse", "symbiosisdirty")

  if GLOBAL.TheWorld.ismastersim then
    inst:ListenForEvent("onregentick", OnRegenTick)
    inst:ListenForEvent("onnumstorechange", OnNumStoreChange)

    -- kick off badge
    inst:DoTaskInTime(0, function() inst:PushEvent("onregentick", {currenttick = 0}) end)
  end

  if not GLOBAL.TheNet:IsDedicated() then
    inst:ListenForEvent("symbiosisdirty", onsymbiosisdirty)
  end
end

AddPlayerPostInit(PlayerPostConstruct)

--Skin Stuff Below
--Hornet: I am currently using wilba as an example, youll want to change all instances of "wilba" to the prefab name of your character!
--Skins
local _G = GLOBAL
local PREFAB_SKINS = _G.PREFAB_SKINS
local PREFAB_SKINS_IDS = _G.PREFAB_SKINS_IDS
local SKIN_AFFINITY_INFO = GLOBAL.require("skin_affinity_info")

modimport("skins_api") --Hornet: We import the file! If you named your file something else other than skins_api then youll want to rename this function to the name of the file

SKIN_AFFINITY_INFO.zeta = {
    "zeta_rose", --Hornet: These skins will show up for the character when the Survivor filter is enabled
}

--[[ --Hornet: The table of skins youre going to have, You can have as many skins as you want!

PREFAB_SKINS["zeta"] = {
    "zeta_none", 
    "zeta_rose",
} --And So on!

]]

PREFAB_SKINS_IDS = {} --Make sure this is after you  change the PREFAB_SKINS["character"] table
for prefab,skins in pairs(PREFAB_SKINS) do
    PREFAB_SKINS_IDS[prefab] = {}
    for k,v in pairs(skins) do
            PREFAB_SKINS_IDS[prefab][v] = k
    end
end

AddSkinnableCharacter("zeta") --Hornet: The character youd like to skin, make sure you use the prefab name. And MAKE sure you run this function AFTER you import the skins_api file

--Skin STRINGS

STRINGS.SKIN_NAMES.zeta_none = "Wuzzy"
STRINGS.SKIN_QUOTES.zeta_none = "\"Bees Together Strong\""
STRINGS.SKIN_DESCRIPTIONS.zeta_none = "Placeholder."

STRINGS.SKIN_NAMES.zeta_rose = "The Roseate"
STRINGS.SKIN_QUOTES.zeta_rose = "\"I think I got more on me than in the hive!\""
STRINGS.SKIN_DESCRIPTIONS.zeta_rose = "Wuzzy loves pollinating flowers at dawn with his fuzzy flying compainions."

Link to comment
Share on other sites

46 minutes ago, Hornete said:

Sorry for being a bit late, can you share the entire mod? 

Hmmm, I've tried twice now and klei can't handle the post. I'm going to try and break it up. and it's only 25MB total 

anim folder

 

armor_honey.zip

bee_anim.zip

esctemplate.zip

ghost_zeta_build.zip

melissa.zip

mutantassassinbee.zip

mutantassassinhive.zip

mutantbee_angry_build.zip

mutantbee_build.zip

mutantbeecocoon.zip

mutantbeehive.zip

mutantdefenderbee.zip

mutantdefenderhive.zip

mutantrangerbee.zip

mutantrangerhive.zip

mutantsoldierbee.zip

mutantworkerbee.zip

pollen_fx.zip

status_meter_symbiosis.zip

status_symbiosis.zip

swap_melissa.zip

symbiosis.zip

zeta.zip

zeta_none.zip

zeta_rose.zip

zetapollen.zip

zeta_rose.xmlzeta_rose.texbigportraitzeta_none.xmlzeta_none.texzeta.xmlzeta.texs folder

bigportraits folder..

zeta_rose.xml

zeta_rose.tex

zeta_none.xm

zeta_none.tex

zeta.xml

zeta.tex

lower arm

arm_lower-0.png

arm_lower-1.png

arm_lower-2.png

arm_lower-3.png

arm_lower-4.png

arm_lower-5.png

arm_lower-6.png

arm_upper-6.png.ff7db6320df506cbb325b6a1fa3ff0d6.pngarm_upper-5.png.c78712ad565a9fdb8c6272822e8c1a04.pngarm_upper-4.png.74cab18c55d0e7bf425cf7c2c0ed95da.pngupper armarm_upper-3.png.36491bc7719fd191c2ad418985a08606.pngarm_upper-2.png.e4a8f47348f544d26592c7197a8f604c.pngarm_upper-1.png.22607d2878bcac7fa59d643c7f356f41.pngarm_upper-0.png.ac8b498cf20e160e1eb699b567877527.png

upper arm skinarm_upper_skin-2.png.d4f8a292d11ed28e58c17bea0abba037.pngarm_upper_skin-1.png.233c66a7e69974b4ea2b0bea06b8755d.pngarm_upper_skin-0.png.e784b08ff829dd0114f5b93950982f8e.png

cheeks 

cheeks-0.png

cheeks-1.png

face-32.png.2ad51be2a9ef3bb447a4d2f53d2b7f22.pngface-31.png.587daccf4350b7c06cbc9add32a3d27e.pngface-30.png.dca7e0a6f35abdad504cfd6d16e6a4ac.pngface-29.png.c6e637cb13d892d514393941ffbf017b.pngface-28.png.ff369a9ec63cd31d7f927568e752bc2e.pngface-27.png.9f588b335a2077ed3bf2a3ad4d90f6a8.pngface-26.png.af9ab4939bad4037b28bdb4736547c44.pngface-25.png.3728dde7ca2eb260a504868c6585e1d7.pngface-24.png.5c282ff380d777516af4bfffd8a8ba42.pngface-23.png.d83af110fd411c8fad8f7aba6cdae523.pngface-22.png.7fd48be6940fe143293454548e4708a8.pngface-21.png.4698e18c4f44656b0324075819880044.pngface-20.png.5a12a744c7a0a571e49d042bf54cb849.pngface-19.png.65b89c0b767f8c9637142a9f05e6103b.pngface-18.png.a3188cad7f2ca5befdec33f50e9f67db.pngface-17.png.553793d146da189683852fe42d8ba2d8.pngface-16.png.8538445a31dac01374565d6af0ed36b7.pngface-15.png.62fbc3afa9e70935c3939d74a34360bc.pngface-14.png.469cdfdb2ad35919d21bb957a4f529fc.pngface-13.png.33855f6fa2efd78d87af291ef60db438.pngface-12.png.a5e46bba45a1e82f94f26510bb1b613d.pngface-11.png.0eaedba5401ee15a7b799754ed856800.pngface-10.png.3fa1ca40e245ceb0f674bf8fced2053e.pngface-9.png.b597a59c468f76713600c88df03dff2f.pngface-8.png.b6d1da86dce002b73c3a8727f2e7bc3d.pngface-7.png.49727534254491bf6e4c2eb6de3d1a0e.pngface-6.png.4568813976316b66532854d0b49dc80d.pngface-5.png.a41ade8be0679e7262cc5adf80291f1b.pngface-4.png.325f1138316e2fe22934cdd6f7f24d1b.pngface-3.png.47c0631f79fcd367fce8d07906030ec6.pngface-2.png.8e670f05f0238ee67907db552419f8b7.pngfaceface-1.png.26b161fc57dedc47ff2e3f366cf45920.pngface-0.png.534bf7c6a3f8a4eed4291d5bce992e2d.png

feetfoot-7.png.0d82ae2ee243f0ce3650061a6503ad92.pngfoot-6.png.16f82682d35a9d2beb8d74e45add7209.pngfoot-5.png.7dd501f96dbe02961d4faa85dd2cad51.pngfoot-4.png.15398e35960901ebd0ffe05e074446d0.pngfoot-3.png.2abf4d06371974ec083ba6ba5eafbca4.pngfoot-2.png.5fc07ed49ee2c883c04efcd95ca1e147.pngfoot-1.png.2f5c47d1be548d8e7e48208cd6524f3b.pngfoot-0.png.45b3e1f92c04c4c12ff3f1414c3ee07d.png

Oh dear this really isn't working. I need to get some sleep now. so I'll check this in the morning. but how do I do his without this discussion crashing?

Link to comment
Share on other sites

12 hours ago, ILikeHoneyBees said:

Oh dear this really isn't working. I need to get some sleep now. so I'll check this in the morning. but how do I do his without this discussion crashing?

Try zipping up the entire mod folder and sending it here.

Link to comment
Share on other sites

1 hour ago, ILikeHoneyBees said:

Hmm, okay I'll do that now

here ya go! again, thanks so much for helping me with this :D

Wuzzy Mod.zip

Ah so the issue was in the modmain, sorry for wasting your time on uploading the mod. Anyways
 

--[[ --Hornet: The table of skins youre going to have, You can have as many skins as you want!

PREFAB_SKINS["zeta"] = {
    "zeta_none", 
    "zeta_rose",
} --And So on!

]]

For some reason this is commented out, but it shouldn't be. So change it to this
 

--Hornet: The table of skins youre going to have, You can have as many skins as you want!

PREFAB_SKINS["zeta"] = {
    "zeta_none", 
    "zeta_rose",
} --And So on!

 

Link to comment
Share on other sites

1 hour ago, Hornete said:

Ah so the issue was in the modmain, sorry for wasting your time on uploading the mod. Anyways
 


--[[ --Hornet: The table of skins youre going to have, You can have as many skins as you want!

PREFAB_SKINS["zeta"] = {
    "zeta_none", 
    "zeta_rose",
} --And So on!

]]

For some reason this is commented out, but it shouldn't be. So change it to this
 


--Hornet: The table of skins youre going to have, You can have as many skins as you want!

PREFAB_SKINS["zeta"] = {
    "zeta_none", 
    "zeta_rose",
} --And So on!

 

OH YES!!!! it works! It WORKS! Oooooo thank you so much. this means so much to me!!!!! YES! 
image.thumb.png.007b952f932cbd1ec749f47f1ef23535.png

I still get an error on my modded world, but hey. I'll fix that myself. quick question though. any idea why the portrait frame is not showing up? TBH I don't care at this point. I'm just so happy it works.

Here's the error by the way if you have any idea what it could be. to me it seems like an issue with the character files themselves (I sure hope that's not the case! I've been on this world for a while and I'd hate to give it up) but I hope it lies within the some 30 mods I run


image.thumb.png.99bd34ecb6b5c97e93dc4bbb5e359046.png

 

If you don't know. that's fine. I'll fix it myself. just, thank you! thank you! thank you!

Link to comment
Share on other sites

Hello, I've been following this tutorial and have ran into similar issues as ILikeHoneyBees, and was able to resolve most of the errors. Only problem now is that the game seems to ignore the skin(s).

 

As-in; the game compiles the mod, and runs without crashes but doesn't "see" the skin whenever starting a new world or opening the wardrobe.

 

Link to comment
Share on other sites

@Goat Slice @Canis @-Variant @PanAzej @Toros @Mr. Tiddles @ILikeHoneyBees

Hello! I apologize deeply if I bothered you, I just wanted to let some of the people I know using the file that I updated it just now, before there was a bug where you wouldn't be able to see your custom skins if the Owned filter was enabled. I now fixed that and you should be able to redownload it from the original post! If you don't want to redownload it you can simply paste this code into your already downloaded file
 

local _GetLockedSkinFilter = _G.GetLockedSkinFilter
function _G.GetLockedSkinFilter()
	local _LockedFilter = _GetLockedSkinFilter()
	function LockedFilter(item_key)
		local index = item_key:find("_")
		local character = item_key:sub(1, index - 1)
		if SKINNABLE_CHARACTERS[character] then
			return true
		end
		
		return _LockedFilter(item_key)
	end
	
	return LockedFilter
end

 

On 4/13/2020 at 9:14 PM, cosmisora said:

Hello, I've been following this tutorial and have ran into similar issues as ILikeHoneyBees, and was able to resolve most of the errors. Only problem now is that the game seems to ignore the skin(s).

 

As-in; the game compiles the mod, and runs without crashes but doesn't "see" the skin whenever starting a new world or opening the wardrobe.

Hey! I'm so so sorry i'm late, I haven't seen this, I hope youre still there! Are you sure you put something like this into your modmain, and created your skin prefab?

PREFAB_SKINS["wilba"] = {"wilba_none", "wilba_victorian"}

it might not be showing up because your owned filter is on, which I just fixed now! So try updating my file

  • Like 2
  • Thanks 1
Link to comment
Share on other sites

Hey!

 

I hope I'm not too late to the party.

I'm a newest member of the "I-might-have-screwed-up-something" club:

Somehow I've stucked in the world generation phase and I get the attached error. Since it's not a crash, I don't really know what should I do about it at the moment.

I've attached the whole character file below.

 

Could you guys help me about it? :(

Thanks in advance!

Névtelen.png

spinel.rar

Link to comment
Share on other sites

Okay, progress has been done: I've had to remove this part from my character.none file:

Spoiler

 

local assets =
{
    Asset( "ANIM", "anim/spinel.zip" ),
    Asset( "ANIM", "anim/ghost_spinel_build.zip" ),
}

local skins =
{
    normal_skin = "spinel",
    ghost_skin = "ghost_spinel_build",
}

return CreatePrefabSkin("spinel_none",
{
    base_prefab = "spinel",
    type = "base",
    assets = assets,
    skins = skins, 
    skin_tags = {"SPINEL", "CHARACTER", "BASE"},
    build_name_override = "spinel",
    rarity = "Character",
})

 

 

Now the world loads in well, the custom skin is chooseable, but I can't pick my original skin. :cower:

Here's my current character file:

Névtelen1.png

spinel.rar

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
  • Create New...