Allora per quanto riguarda la bacheca io ho fatto così:
Ti crei la mesh che deve contenere la mesh di un npc dal lato in cui dovrai utilizzarla (vedi per esempio la sedia), ed esportala come asc con il nome "xxx_01.asc" (xxx nome che vuoi). Gli scrivi poi la onStateFunc in maiuscolo per sicurezza, tipo "FUNC"
Poi devi modificare anche le animazioni di humans. Quindi decompila humans.msb, o mds non mi ricordo che estensione ha gothic1, apri il file mds decompilato e aggiungi queste stringhe:
CODICE
ani ("t_Board_Stand_2_S0" 1 "s_Board_S0" 0.1 0.0 M. "Hum_Guard_Ambient_B_Jue01.asc" F 1 1)
ani ("s_Board_S0" 1 "s_Board_S0" 0.0 0.0 M. "Hum_Guard_Ambient_B_Jue01.asc" F 1 1)
ani ("t_Board_S0_2_Stand" 1 "" 0.1 0.1 M. "Hum_Guard_Ambient_B_Jue01.asc" R 1 1)
ani ("t_Board_S0_2_S1" 1 "s_Board_S1" 0.0 0.0 M. "Hum_Guard_Ambient_B_Jue01.asc" F 1 24 FPS:10)
ani ("t_Board_S1_2_S0" 1 "s_Board_S0" 0.1 0.1 M. "Hum_Guard_Ambient_B_Jue01.asc" F 75 85 FPS:10)
ani ("s_Board_S1" 1 "s_Board_S1" 0.0 0.0 M. "Hum_Guard_Ambient_B_Jue01.asc" F 25 74 FPS:5)
Dove invece di board ci metti il nome func della funzione e ovviamente poi l'animazione la regoli di conseguenza. Io ho usato Hum_Guard_Ambient_B_Jue01.asc che è quella delle guardie quando si mettono a braccia conserte. I numeri dopo F sono i frame iniziali e finali (ed eventualmente la velocità data dagli fps).
Nel file di script basta che ti crei una FUNC_S1 tipo questa:
CODICE
func void Board_S1()
{
var C_Npc her;
her = Hlp_GetNpc(PC_Hero);
if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(her))
{
self.aivar[AIV_INVINCIBLE] = TRUE;
PLAYER_MOBSI_PRODUCTION = MOBSI_Board;
AI_ProcessInfos(her);
};
};
E i dialoghi devono avere per npc l'istanza dell'eroe, e la condizione PLAYER_MOBSI_PRODUCTION == MOBSI_Board (invece di board quello che ti pare).
Per rendere effettive le modifiche alle animazioni ti faccio l'esempio di g2 perché non sono esperto delle animazioni di g1 anche se sono quasi uguali:
Io elimino i file humans.msb e humans.mdh compilati (file responsabili solo della gestione, non contengono alcuna animazione). Poi nella cartella anims metto il file humans.mds modificato e il file hum_body_naked.asc che è la mesh degli npc. Poi lanci gothic e compilerà il tutto. Eventualmente se da problemi con le animazioni al primo avvio fallo crashare (quindi non da "esci dal gioco") e riavvia.
Per quanto riguarda la decompilazione si chiama decdat.
Per i mostri parlanti, devi crearli come gli umani, ma cambiare solo e soltanto la visuale. Quindi no gilda da mostro, no routine da mostro. Ti faccio un esempio:
CODICE
instance NpcMostro(Npc_Default)
{
name[0] = "NpcMostro";
guild = GIL_NONE;
id = 121;
// questi sotto non sono necessari, usa i tuoi
flags = NPC_FLAG_IMMORTAL;
npcType = NPCTYPE_FRIEND;
aivar[AIV_ToughGuy] = TRUE;
aivar[AIV_ToughGuyNewsOverride] = TRUE;
aivar[AIV_IGNORE_Murder] = TRUE;
aivar[AIV_IGNORE_Theft] = TRUE;
aivar[AIV_IGNORE_Sheepkiller] = TRUE;
aivar[AIV_IgnoresArmor] = TRUE;
//////
B_SetAttributesToChapter(self,0);
fight_tactic = FAI_HUMAN_COWARD;
Mdl_SetVisual(self,"HumanS.mds");
Mdl_ApplyOverlayMds(self,"humans_skeleton.mds");
Mdl_SetVisualBody(self,"Ske_Body",DEFAULT,DEFAULT,"",DEFAULT,DEFAULT,-1);
daily_routine = Rtn_Start_121;
};
Quindi niente guild = GIL_WOLF, né start_aistate che sono tipiche dei mostri. Cambia solo le funzione MDL.
Inoltre crea direttamente l'istanza e falla ereditare da Npc_Default se ci sta in gothic 1