Jump to content

Make a custom abigail?


Recommended Posts

Does editing your post bump you up to the front page?

I hope so.

 

Anyway, before i edited this post i posted on how i got stumped on making myself a custom abigail, and pretty sure i made it overwhelming for people who looked at my post.

 

I took a small break and went for a different approach on how to make my own abigail and its now progressing!

 

Sorta...

 

I encountered this error!

 

SGu7IGI.jpg

 

Also is the provided file

 

I still want to mention I dont know what I'm doing but i think im progressing?

Using Malcanth's Map Icon sample btw

 

sakuraghost.zip

Edited by rons0n
Link to comment
Share on other sites

@rons0n
L5QdED9.png

It's easier said than done <<; Anyways, here you go. Look for wolfgang_ghost and wolfgang inside the prefabs and in modmain to know how it's made.

You'll also need to have a OnLoad function in your character to spawn back your ghost after you logout/log back in. Look inside wendy to see how it's made. As far as I know modifying OnLoad inside a AddPrefabPost Init isn't possible due to the prefab loading first before applying added functions, that's why I didn't add it.

Feel free to ask any questions that might surge.

WolfgangGhost.zip

Link to comment
Share on other sites

@rons0n

L5QdED9.png

It's easier said than done <<; Anyways, here you go. Look for wolfgang_ghost and wolfgang inside the prefabs and in modmain to know how it's made.

You'll also need to have a OnLoad function in your character to spawn back your ghost after you logout/log back in. Look inside wendy to see how it's made. As far as I know modifying OnLoad inside a AddPrefabPost Init isn't possible due to the prefab loading first before applying added functions, that's why I didn't add it.

Feel free to ask any questions that might surge.

 

@RyuushuAh, I see. Looks like i've over complicated things as usual. Tends to happen when i just go off my head and not by examples :indecisiveness: .

Yours is much easier to look at!

 

I'll be testing this out, much thanks!

 

On a semi-related note, if i extracted the anim files so i edit the sprites and recompile them nothing will go wrong right?

Edited by rons0n
Link to comment
Share on other sites

@rons0n

Hmm, last time I decompiled a ghost its hat fell down in the idle animation, so...

Instead decompiling/compiling again, make your ghost animations based on the ESC Template ghost, they'll work perfectly fine.

 

@Ryuushu I thought for sure i knew what to do with the Onload function but apparently not.

I added it to my Characters prefab and made sure to add inst.sakura_ghost_flowers = {} at the correct spot but my ghost still doesn't appear after relogin.

 

I went and renamed a few things but that only made things more confusing. Am I missing something or was there an error i didn't check?

 

Other than that though, he works perfectly fine and i haven't had a crash with the ghost yet

local MakePlayerCharacter = require "prefabs/player_common"local assets = {        Asset( "ANIM", "anim/player_basic.zip" ),        Asset( "ANIM", "anim/player_idles_shiver.zip" ),        Asset( "ANIM", "anim/player_actions.zip" ),        Asset( "ANIM", "anim/player_actions_axe.zip" ),        Asset( "ANIM", "anim/player_actions_pickaxe.zip" ),        Asset( "ANIM", "anim/player_actions_shovel.zip" ),        Asset( "ANIM", "anim/player_actions_blowdart.zip" ),        Asset( "ANIM", "anim/player_actions_eat.zip" ),        Asset( "ANIM", "anim/player_actions_item.zip" ),        Asset( "ANIM", "anim/player_actions_uniqueitem.zip" ),        Asset( "ANIM", "anim/player_actions_bugnet.zip" ),        Asset( "ANIM", "anim/player_actions_fishing.zip" ),        Asset( "ANIM", "anim/player_actions_boomerang.zip" ),        Asset( "ANIM", "anim/player_bush_hat.zip" ),        Asset( "ANIM", "anim/player_attacks.zip" ),        Asset( "ANIM", "anim/player_idles.zip" ),        Asset( "ANIM", "anim/player_rebirth.zip" ),        Asset( "ANIM", "anim/player_jump.zip" ),        Asset( "ANIM", "anim/player_amulet_resurrect.zip" ),        Asset( "ANIM", "anim/player_teleport.zip" ),        Asset( "ANIM", "anim/wilson_fx.zip" ),        Asset( "ANIM", "anim/player_one_man_band.zip" ),        Asset( "ANIM", "anim/shadow_hands.zip" ),        Asset( "SOUND", "sound/sfx.fsb" ),        Asset( "SOUND", "sound/wilson.fsb" ),        Asset( "ANIM", "anim/beard.zip" ),        Asset( "ANIM", "anim/sakura.zip" ),        Asset( "ANIM", "anim/ghost_sakura_build.zip" ),		}local prefabs = {	"sakura_ghost_flower", "book_tentacles", "researchlab3_blueprint" }local start_inv = {	-- Custom starting items	"sakura_ghost_flower" , "book_tentacles", "researchlab3_blueprint" }local tempCaveVar = false local function updatestats(inst)	if TheWorld.state.phase == "day" then			inst.Light:Enable(true)		inst.components.locomotor.walkspeed = (3.5)		inst.components.locomotor.runspeed = (5)		inst.components.sanity.dapperness = (TUNING.DAPPERNESS_SMALL * -5)				inst.components.combat.damagemultiplier = 0.5			   -- DAPPERNESS_TINY = 100/(day_time*15),       -- DAPPERNESS_SMALL = 100/(day_time*10),       -- DAPPERNESS_MED = 100/(day_time*6),       -- DAPPERNESS_LARGE = 100/(day_time*3),       -- DAPPERNESS_HUGE = 100/(day_time),	   -- daytime is 300	   	elseif TheWorld.state.phase == "dusk" then		inst.components.locomotor.walkspeed = (5)		inst.components.locomotor.runspeed = (6.5)				inst.components.sanity.dapperness = (TUNING.DAPPERNESS_SMALL * 3)				inst.components.combat.damagemultiplier = 1			elseif TheWorld.state.phase == "night" then		inst.components.locomotor.walkspeed = (7.5)		inst.components.locomotor.runspeed = (8)				inst.components.sanity.dapperness = (TUNING.DAPPERNESS_SMALL * 8)		inst.components.combat.damagemultiplier = 2		    elseif tempCaveVar == true then				inst.components.locomotor.walkspeed = (TUNING.WILSON_WALK_SPEED * 1.75)		inst.components.locomotor.runspeed = (TUNING.WILSON_WALK_SPEED * 2.5)				inst.components.sanity.dapperness = (TUNING.DAPPERNESS_SMALL * 6)				inst.components.combat.damagemultiplier = 1						endend-- This initializes for both clients and the hostlocal common_postinit = function(inst) 	-- Minimap icon	inst.MiniMapEntity:SetIcon( "sakura.tex" )endlocal function fn()	inst:AddComponent("sanityaura")	inst.components.sanityaura.aura = -TUNING.SANITYAURA_LARGE		endlocal function OnLoad(inst, data)    if data.abigail ~= nil and inst.abigail == nil then        local abigail = SpawnSaveRecord(data.abigail)        if abigail ~= nil then            abigail.SoundEmitter:PlaySound("dontstarve/common/ghost_spawn")            abigail:LinkToPlayer(inst)        end    endend-- This initializes for the host onlylocal master_postinit = function(inst)	inst:AddComponent("sanityaura")	inst.components.sanityaura.aura = -TUNING.SANITYAURA_LARGE	-- choose which sounds this character will play	inst.soundsname = "wendy"	-- Stats		inst.components.health:SetMaxHealth(125)	inst.components.hunger:SetMax(150)	inst.components.sanity:SetMax(200)		inst.components.eater.monsterimmune = true	inst.components.eater.strongstomach = true		--  Night-vision    inst.entity:AddLight()    inst.Light:Enable(true)    inst.Light:SetRadius(5)    inst.Light:SetFalloff(.6)    inst.Light:SetIntensity(0.9)    inst.Light:SetColour(235/255,12/255,12/255)	inst:ListenForEvent( "nighttime", function() inst.entity:AddLight() end, GetWorld() )		inst.ghostbuild = "ghost_sakura_build"			inst:AddComponent("reader")		inst.sakura_ghost_flowers = {}	inst.OnLoad = OnLoad		inst:WatchWorldState( "startday", function(inst) updatestats(inst) end )	inst:WatchWorldState( "startdusk", function(inst) updatestats(inst) end )	inst:WatchWorldState( "startnight", function(inst) updatestats(inst) end )		updatestats(inst)	return inst	endreturn MakePlayerCharacter("sakura", prefabs, assets, common_postinit, master_postinit, start_inv, fn)
Edited by rons0n
Link to comment
Share on other sites

@rons0n
... I kinda forgot to mention the OnSave part. Makes sense it isn't working on reload.
... And the OnDespawn part.
It seems that Wendy has a couple more things linked to Abigail. Didn't really notice them since I was focused on the ghost.


...local function OnDespawn(inst)    if inst.sakura_ghost ~= nil then        inst.sakura_ghost.components.lootdropper:SetLoot(nil)        inst.sakura_ghost.components.health:SetInvincible(true)        inst.sakura_ghost:PushEvent("death")        --in case the state graph got interrupted somehow, just force        --removal after the dissipate animation should've finished        inst.sakura_ghost:DoTaskInTime(25 * FRAMES, inst.sakura_ghost.Remove)    endendlocal function OnSave(inst, data)    if inst.sakura_ghost ~= nil then        data.sakura_ghost = inst.sakura_ghost:GetSaveRecord()    endendlocal function OnLoad(inst, data)    if data.sakura_ghost ~= nil and inst.sakura_ghost == nil then        local sakura_ghost = SpawnSaveRecord(data.sakura_ghost)        if sakura_ghost ~= nil then            sakura_ghost.SoundEmitter:PlaySound("dontstarve/common/ghost_spawn")            sakura_ghost:LinkToPlayer(inst)        end    endendlocal function master_postinit(inst)    ...    inst.sakura_ghost = nil    inst.sakura_ghost_flowers = {}    inst.OnDespawn = OnDespawn    inst.OnSave = OnSave    inst.OnLoad = OnLoad    ...endreturn MakePlayerCharacter("sakura", prefabs, assets, common_postinit, master_postinit, start_inv, fn)
Edited by Ryuushu
Link to comment
Share on other sites

 

@rons0n

... I kinda forgot to mention the OnSave part. Makes sense it isn't working on reload.

... And the OnDespawn part.

It seems that Wendy has a couple more things linked to Abigail. Didn't really notice them since I was focused on the ghost.

 

@Ryuushu

 

Whew! That took longer than expected, but shes finished!

My character and her new jelly fish ghost friend is now complete.

 

I'll give you a shoutout!

 

te4o6eE.jpg?1

 

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...