Here is the script as I currently have it, in case anybody might find it useful, or find something to improve
It needs the walkabout for the hero to be set to one of the same size as wished, but completely transparent.
The actual visible walkabout is 'PlayerBase', to avoid the visual inconsistency by the 1 tick delay mentioned by TMC.
The numbers in PlayerSettings directly translate to walkabout numbers or palette numbers.
Feel free to criticize, maybe I did something incredibly stupid here and haven't realized yet
Code:
define constant(1, timer: redrawDoll)
global variable, begin
# Gender, 1; Hairstyle, 23, Haircolor: 4, Skintone: 5, Clothes: 67
1, PlayerSettings
# 0: Reset needed, 1: No reset needed
2, ResetPlayerDoll
# PlayerWalk, layerBase, PlayerHair, PlayerCloth
3, PlayerBase
4, PlayerHair
# Not implemented yet
#5, PlayerCloth
end
plotscript, Update Doll, begin
if(ResetPlayerDoll == 0) then, begin
# TEMP, need to tie in to Character Creation
if(PlayerSettings == 0) then, begin
PlayerSettings := 020841399
end
# pGender:number of walkabout to be used as a base
# pHairstyle: number of walkabout to be used as a hair.
# pHaircolor: number of palette used for hair
# pSkintone: number of palette used for skin
# pClothes: number of palette used for clothes
variable(pGender, pHairstyle, pHaircolor, pSkintone, pClothes, pVisCloth)
pGender := PlayerSettings / 100000000
pHairstyle := (PlayerSettings, mod, 100000000) / 10000000
pHaircolor := (PlayerSettings, mod, 10000000) / 100000
pSkintone := (PlayerSettings, mod, 100000) / 10000
pClothes := (PlayerSettings, mod, 10000) / 100
# Not implemented yet
#pVisCloth := (PlayerSettings, mod, 100)
if(PlayerBase <> 0) then (free slice(PlayerBase))
if(PlayerHair <> 0) then (free slice(PlayerHair))
# (+ 7 if female, offset to female hair graphics (i.e. walkabouts 2-8 for males, 9-15 for females)
if(pGender == 1) then (pHairstyle := pHairstyle + 7)
PlayerBase := load walkabout sprite(pGender, pSkintone)
PlayerHair := load walkabout sprite(pHairstyle, pHaircolor)
set parent(PlayerBase, getHeroSprite(me))
set parent(PlayerHair, getHeroSprite(me))
ResetPlayerDoll := 1
end
else if(ResetPlayerDoll == 1) then, begin
variable(frame)
frame := get sprite frame (lookup slice(sl:walkabout sprite component, get hero slice(me)))
set sprite frame (PlayerBase, frame)
set sprite frame (PlayerHair, frame)
end
set timer(timer:redrawDoll, 0, 1, @Update Doll) # Run this script again next next
end