forked from Sokomine/yl_speak_up
individual skins and preview functions depending on model and npc
This commit is contained in:
parent
0a52637271
commit
fe4eb48822
24
config.lua
24
config.lua
@ -24,12 +24,12 @@ yl_speak_up.talk_after_spawn = true
|
|||||||
-- diffrent NPC may use diffrent models
|
-- diffrent NPC may use diffrent models
|
||||||
-- IMPORTANT: If you want to support an NPC with a diffrent model, provide
|
-- IMPORTANT: If you want to support an NPC with a diffrent model, provide
|
||||||
-- an entry in this array! Else setting its skin will fail horribly.
|
-- an entry in this array! Else setting its skin will fail horribly.
|
||||||
-- TODO: provide function for preview image
|
|
||||||
yl_speak_up.mesh_data = {}
|
yl_speak_up.mesh_data = {}
|
||||||
yl_speak_up.mesh_data["error"] = {
|
yl_speak_up.mesh_data["error"] = {
|
||||||
texture_index = 1,
|
texture_index = 1,
|
||||||
-- TODO: actually handle that and call the right formspec
|
-- TODO: actually handle that and call the right formspec
|
||||||
can_show_wielded_items = false,
|
can_show_wielded_items = false,
|
||||||
|
skin_preview = yl_speak_up.skin_preview_normal,
|
||||||
}
|
}
|
||||||
-- this model is used by mobs_npc
|
-- this model is used by mobs_npc
|
||||||
yl_speak_up.mesh_data["mobs_character.b3d"] = {
|
yl_speak_up.mesh_data["mobs_character.b3d"] = {
|
||||||
@ -37,16 +37,36 @@ yl_speak_up.mesh_data["mobs_character.b3d"] = {
|
|||||||
texture_index = 1,
|
texture_index = 1,
|
||||||
-- there is no support for capes or wielded items
|
-- there is no support for capes or wielded items
|
||||||
can_show_wielded_items = false,
|
can_show_wielded_items = false,
|
||||||
|
-- which function can be used to draw the skin?
|
||||||
|
skin_preview = yl_speak_up.skin_preview_normal,
|
||||||
}
|
}
|
||||||
yl_speak_up.mesh_data["skinsdb_3d_armor_character_5.b3d"] = {
|
yl_speak_up.mesh_data["skinsdb_3d_armor_character_5.b3d"] = {
|
||||||
-- the second texture is the skin
|
-- the second texture is the skin
|
||||||
texture_index = 2,
|
texture_index = 2,
|
||||||
-- they can wear and show capes and wield items
|
-- they can wear and show capes and wield items
|
||||||
can_show_wielded_items = true,
|
can_show_wielded_items = true,
|
||||||
|
-- this model needs its own preview function
|
||||||
|
skin_preview = yl_speak_up.skin_preview_skinsdb_3d_armor_character_5,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
-- TODO: provide skin texture list for the diffrent NPC (self.name)
|
-- diffrent mob types may want to wear diffrent skins - even if they share the
|
||||||
|
-- same model/mesh
|
||||||
|
yl_speak_up.mob_skins = {}
|
||||||
|
|
||||||
|
-- mobs_redo usually uses 64 x 32 textures:
|
||||||
|
yl_speak_up.mob_skins["mobs_npc:npc"] = {
|
||||||
|
"mobs_npc.png", "mobs_npc2.png", "mobs_npc3.png", "mobs_npc4.png", "mobs_npc_baby.png"}
|
||||||
|
yl_speak_up.mob_skins["mobs_npc:igor"] = {
|
||||||
|
"mobs_igor.png", "mobs_igor2.png", "mobs_igor3.png", "mobs_igor4.png",
|
||||||
|
"mobs_igor5.png", "mobs_igor6.png", "mobs_igor7.png", "mobs_igor8.png"}
|
||||||
|
yl_speak_up.mob_skins["mobs_npc:trader"] = {
|
||||||
|
"mobs_trader.png", "mobs_trader2.png", "mobs_trader3.png"}
|
||||||
|
|
||||||
|
-- this here uses 64 x 64 textures:
|
||||||
|
yl_speak_up.mob_skins["yl_speak_up:human"] = {
|
||||||
|
"yl_speak_up_main_default.png"}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- some properties from external NPC can be edited and changed (they have the self. prefix),
|
-- some properties from external NPC can be edited and changed (they have the self. prefix),
|
||||||
|
@ -20,6 +20,25 @@ yl_speak_up.get_mesh = function(pname)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- diffrent mobs (distinguished by self.name) may want to wear diffrent skins
|
||||||
|
-- even if they share the same model; find out which mob we're dealing with
|
||||||
|
yl_speak_up.get_mob_type = function(pname)
|
||||||
|
if(not(pname)) then
|
||||||
|
return "error"
|
||||||
|
end
|
||||||
|
local obj = yl_speak_up.speak_to[pname].obj
|
||||||
|
if(not(obj)) then
|
||||||
|
return "error"
|
||||||
|
end
|
||||||
|
local entity = obj:get_luaentity()
|
||||||
|
if(not(entity)) then
|
||||||
|
return "error"
|
||||||
|
end
|
||||||
|
return entity.name
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
local function cape2texture(t)
|
local function cape2texture(t)
|
||||||
return "yl_speak_up_mask_cape.png^[combine:32x64:56,20=" .. t
|
return "yl_speak_up_mask_cape.png^[combine:32x64:56,20=" .. t
|
||||||
end
|
end
|
||||||
@ -145,6 +164,8 @@ local function get_npc_capes(cape)
|
|||||||
return rettable, retstring, retindex
|
return rettable, retstring, retindex
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- TODO: this function is now kind of obsolete
|
||||||
local function create_preview(main_skin)
|
local function create_preview(main_skin)
|
||||||
if main_skin == nil or main_skin == "" then
|
if main_skin == nil or main_skin == "" then
|
||||||
main_skin = "default_greyscale.png"
|
main_skin = "default_greyscale.png"
|
||||||
@ -190,6 +211,7 @@ local function create_preview(main_skin)
|
|||||||
return skin
|
return skin
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- TODO: link that somehow for NPC that support it
|
-- TODO: link that somehow for NPC that support it
|
||||||
yl_speak_up.get_fs_fashion_extended = function(pname)
|
yl_speak_up.get_fs_fashion_extended = function(pname)
|
||||||
local textures = yl_speak_up.speak_to[pname].textures
|
local textures = yl_speak_up.speak_to[pname].textures
|
||||||
@ -301,15 +323,15 @@ yl_speak_up.input_fashion = function(player, formname, fields)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
-- TODO: get that list from somewhere
|
|
||||||
local skins = {"mobs_npc.png", "mobs_npc2.png", "mobs_npc3.png", "mobs_npc4.png",
|
|
||||||
"mobs_npc_baby.png"}
|
|
||||||
|
|
||||||
local mesh = yl_speak_up.get_mesh(pname)
|
|
||||||
-- which texture from the textures list are we talking about?
|
-- which texture from the textures list are we talking about?
|
||||||
-- this depends on the model!
|
-- this depends on the model!
|
||||||
|
local mesh = yl_speak_up.get_mesh(pname)
|
||||||
local texture_index = yl_speak_up.mesh_data[mesh].texture_index
|
local texture_index = yl_speak_up.mesh_data[mesh].texture_index
|
||||||
|
|
||||||
|
-- which skins are available? this depends on mob_type
|
||||||
|
local mob_type = yl_speak_up.get_mob_type(pname)
|
||||||
|
local skins = yl_speak_up.mob_skins[mob_type]
|
||||||
|
|
||||||
local textures = yl_speak_up.speak_to[pname].textures
|
local textures = yl_speak_up.speak_to[pname].textures
|
||||||
local skin = (textures[texture_index] or "")
|
local skin = (textures[texture_index] or "")
|
||||||
local skin_index = table.indexof(skins, skin)
|
local skin_index = table.indexof(skins, skin)
|
||||||
@ -516,16 +538,15 @@ end
|
|||||||
-- capes and wielded items are supported by an extended formspec for those
|
-- capes and wielded items are supported by an extended formspec for those
|
||||||
-- NPC that can handle them
|
-- NPC that can handle them
|
||||||
yl_speak_up.get_fs_fashion = function(pname)
|
yl_speak_up.get_fs_fashion = function(pname)
|
||||||
|
|
||||||
-- TODO: get that list from somewhere (it may depend on the model...)
|
|
||||||
local skins = {"mobs_npc.png", "mobs_npc2.png", "mobs_npc3.png", "mobs_npc4.png",
|
|
||||||
"mobs_npc_baby.png"}
|
|
||||||
|
|
||||||
local mesh = yl_speak_up.get_mesh(pname)
|
|
||||||
-- which texture from the textures list are we talking about?
|
-- which texture from the textures list are we talking about?
|
||||||
-- this depends on the model!
|
-- this depends on the model!
|
||||||
|
local mesh = yl_speak_up.get_mesh(pname)
|
||||||
local texture_index = yl_speak_up.mesh_data[mesh].texture_index
|
local texture_index = yl_speak_up.mesh_data[mesh].texture_index
|
||||||
|
|
||||||
|
-- which skins are available? this depends on mob_type
|
||||||
|
local mob_type = yl_speak_up.get_mob_type(pname)
|
||||||
|
local skins = yl_speak_up.mob_skins[mob_type]
|
||||||
|
|
||||||
local textures = yl_speak_up.speak_to[pname].textures
|
local textures = yl_speak_up.speak_to[pname].textures
|
||||||
local skin = (textures[texture_index] or "")
|
local skin = (textures[texture_index] or "")
|
||||||
-- store the old texture so that we can go back to it
|
-- store the old texture so that we can go back to it
|
||||||
@ -548,20 +569,7 @@ yl_speak_up.get_fs_fashion = function(pname)
|
|||||||
skin_index = ""
|
skin_index = ""
|
||||||
end
|
end
|
||||||
|
|
||||||
-- TODO: the preview depends on the model as well
|
local preview = yl_speak_up.mesh_data[mesh].skin_preview(skin)
|
||||||
local preview =
|
|
||||||
"image[4.5,1.8;3,3;[combine:8x9:-8,-9="..skin..":-40,-9="..skin.."]".. -- head, beard
|
|
||||||
"image[4.5,4.12;3,4.5;[combine:8x12:-20,-20="..skin.."]".. -- body
|
|
||||||
"image[4.5,8.02;1.5,4.5;[combine:4x12:-4,-20="..skin.."]".. -- left leg
|
|
||||||
"image[5.73,8.02;1.5,4.5;[combine:4x12:-4,-20="..skin.."^[transformFX]".. -- right leg
|
|
||||||
"image[3.15,4.12;1.5,4.5;[combine:4x12:-44,-20="..skin.."]".. -- left hand
|
|
||||||
"image[7.35,4.12;1.5,4.5;[combine:4x12:-44,-20="..skin.."^[transformFX]".. -- right hand
|
|
||||||
"image[10.5,1.8;3,3;[combine:8x8:-24,-8="..skin.."]".. -- back head
|
|
||||||
"image[10.5,4.12;3,4.5;[combine:8x12:-32,-20="..skin.."]".. -- body back
|
|
||||||
"image[10.5,8.02;1.5,4.5;[combine:4x12:-12,-20="..skin.."]".. -- left leg back
|
|
||||||
"image[11.73,8.02;1.5,4.5;[combine:4x12:-12,-20="..skin.."^[transformFX]".. -- right leg back
|
|
||||||
"image[9.3,4.12;1.5,4.5;[combine:4x12:-52,-20="..skin.."]".. -- left hand back
|
|
||||||
"image[12.95,4.12;1.5,4.5;[combine:4x12:-52,-20="..skin.."^[transformFX]" -- right hand back
|
|
||||||
|
|
||||||
local formspec = {
|
local formspec = {
|
||||||
"container[0.5,4.0]",
|
"container[0.5,4.0]",
|
||||||
|
3
init.lua
3
init.lua
@ -26,6 +26,9 @@ yl_speak_up.fs_version = {}
|
|||||||
yl_speak_up.custom_server_functions = {}
|
yl_speak_up.custom_server_functions = {}
|
||||||
|
|
||||||
|
|
||||||
|
-- this file defines preview functions for skins - which are needed in config.lua
|
||||||
|
-- (skin preview depends on model)
|
||||||
|
dofile(modpath .. "skin_preview.lua")
|
||||||
-- the server-specific configuration
|
-- the server-specific configuration
|
||||||
dofile(modpath .. "config.lua")
|
dofile(modpath .. "config.lua")
|
||||||
-- players *and* npc need privs for certain things
|
-- players *and* npc need privs for certain things
|
||||||
|
62
skin_preview.lua
Normal file
62
skin_preview.lua
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
-- this file contains the preview images for the skins of the NPC;
|
||||||
|
-- it does depend on the model used
|
||||||
|
|
||||||
|
-- this is a suitable version for most models/meshes that use normal player skins
|
||||||
|
-- (i.e. mobs_redo)
|
||||||
|
yl_speak_up.skin_preview_normal = function(skin)
|
||||||
|
return "image[4.5,1.8;3,3;[combine:8x9:-8,-9="..skin..":-40,-9="..skin.."]".. -- head, beard
|
||||||
|
"image[4.5,4.12;3,4.5;[combine:8x12:-20,-20="..skin.."]".. -- body
|
||||||
|
"image[4.5,8.02;1.5,4.5;[combine:4x12:-4,-20="..skin.."]".. -- left leg
|
||||||
|
"image[5.73,8.02;1.5,4.5;[combine:4x12:-4,-20="..skin.."^[transformFX]".. -- right leg
|
||||||
|
"image[3.15,4.12;1.5,4.5;[combine:4x12:-44,-20="..skin.."]".. -- left hand
|
||||||
|
"image[7.35,4.12;1.5,4.5;[combine:4x12:-44,-20="..skin.."^[transformFX]".. -- right hand
|
||||||
|
"image[10.5,1.8;3,3;[combine:8x8:-24,-8="..skin.."]".. -- back head
|
||||||
|
"image[10.5,4.12;3,4.5;[combine:8x12:-32,-20="..skin.."]".. -- body back
|
||||||
|
"image[10.5,8.02;1.5,4.5;[combine:4x12:-12,-20="..skin.."]".. -- left leg back
|
||||||
|
"image[11.73,8.02;1.5,4.5;[combine:4x12:-12,-20="..skin.."^[transformFX]".. -- right leg back
|
||||||
|
"image[9.3,4.12;1.5,4.5;[combine:4x12:-52,-20="..skin.."]".. -- left hand back
|
||||||
|
"image[12.95,4.12;1.5,4.5;[combine:4x12:-52,-20="..skin.."^[transformFX]" -- right hand back
|
||||||
|
end
|
||||||
|
|
||||||
|
-- this is a version for the yl_speak_up mobs
|
||||||
|
yl_speak_up.skin_preview_skinsdb_3d_armor_character_5 = function(main_skin)
|
||||||
|
if main_skin == nil or main_skin == "" then
|
||||||
|
main_skin = "default_greyscale.png"
|
||||||
|
end
|
||||||
|
|
||||||
|
local player_skin = "(" .. main_skin .. ")"
|
||||||
|
local skin = -- Consistent on both sizes:
|
||||||
|
--Chest
|
||||||
|
"([combine:16x32:-16,-12="..player_skin.."^[mask:yl_speak_up_mask_chest.png)^"..
|
||||||
|
|
||||||
|
--Head
|
||||||
|
"([combine:16x32:-4,-8="..player_skin.."^[mask:yl_speak_up_mask_head.png)^"..
|
||||||
|
|
||||||
|
--Hat
|
||||||
|
"([combine:16x32:-36,-8="..player_skin.."^[mask:yl_speak_up_mask_head.png)^"..
|
||||||
|
--Right Arm
|
||||||
|
"([combine:16x32:-44,-12="..player_skin.."^[mask:yl_speak_up_mask_rarm.png)^"..
|
||||||
|
--Right Leg
|
||||||
|
"([combine:16x32:0,0="..player_skin.."^[mask:yl_speak_up_mask_rleg.png)^"..
|
||||||
|
|
||||||
|
-- Left Arm
|
||||||
|
"([combine:16x32:-24,-44="..player_skin.."^[mask:(yl_speak_up_mask_rarm.png^[transformFX))^"..
|
||||||
|
--Left Leg
|
||||||
|
"([combine:16x32:-12,-32="..player_skin.."^[mask:(yl_speak_up_mask_rleg.png^[transformFX))^"..
|
||||||
|
|
||||||
|
-- Add overlays for 64x skins. these wont appear if skin is 32x because it will be cropped out
|
||||||
|
--Chest Overlay
|
||||||
|
"([combine:16x32:-16,-28="..player_skin.."^[mask:yl_speak_up_mask_chest.png)^"..
|
||||||
|
--Right Arm Overlay
|
||||||
|
"([combine:16x32:-44,-28="..player_skin.."^[mask:yl_speak_up_mask_rarm.png)^"..
|
||||||
|
--Right Leg Overlay
|
||||||
|
"([combine:16x32:0,-16="..player_skin.."^[mask:yl_speak_up_mask_rleg.png)^"..
|
||||||
|
--Left Arm Overlay
|
||||||
|
"([combine:16x32:-40,-44="..player_skin.."^[mask:(yl_speak_up_mask_rarm.png^[transformFX))^"..
|
||||||
|
--Left Leg Overlay
|
||||||
|
"([combine:16x32:4,-32="..player_skin.."^[mask:(yl_speak_up_mask_rleg.png^[transformFX))"
|
||||||
|
|
||||||
|
-- Full Preview
|
||||||
|
skin = "((("..skin..")^[resize:64x128)^[mask:yl_speak_up_transform.png)"
|
||||||
|
return "image[4.5,1.8;9,10.5;"..skin.."]"
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user