Aplicativos utilizados:
Observações:
ALGUMAS FUNÇÕES PODEM SER DIFERENTES DO BGC PARA A SEASON 1, OU SEJA, SERÁ NECESSARIO REMOVE-LAS ( COMENTA-LAS ) ou ACHAR ALGUMA FUNÇÃO SIMILAR E UTILIZA-LÁ.
- Os procedimentos abaixo feitos foram realizados em um servidor caseiro com cliente season 1 inalterado, ou seja os arquivos a serem editados podem variar, caso o cliente que você utilize esteja com os arquivos editados no main.exe.
- Existem mascotes como o Chester que possuem efeitos que devem ser colocados no pettemplate, cujo não irei explicar no tutorial, mas explorando será facil para você por.
- Existem mascotes como o Catbot que são bastantes complexos e não basta apenas adapta-los simplesmente, sendo que possa ser necessario fazer gambiarras no petaction.lua para o mesmo funcionar quase que perfeitamente.
- Isso é apenas um tutorial, vocês terão que ir estudando e testando seus mascotes por que não é tão facil quanto pode parecer.
- Crie um arquivo de texto em branco para adicionar informaçoes cruciais durante a edição.
- Após uma recente mudança, criar mascotes ficou mais complexo, como é demonstrado no tutorial abaixo já que é necessario fazer mais edições.
- Descobrir o nome original do mascote e seu codinome, é questão de logica e busca.
- É necessario pegar as imagens das cartas/skills e particulas nos arquivos de textura do cliente.
• Particulas:
- Arquivos Texture\particle\particleX.kom
• Cartas:
- Arquivos Texture\sbtaXX.kom
Arquivos manipulados ( cliente season 1 ):
Stage\str_p.stg ( arquivo de texto )
Stage\gcnewmapparticle.stg
Stage\script.kom:
- datafiles.lua
- enum.stg
- fireinfo.stg
- sort_p.stg
- petaction.lua
- pettemplate.stg
- sound.stg
E claro, os arquivos do pet.
Arquivos manipulados ( cliente season xaus / hiro ):
Stage\str_br.stg ( arquivo de texto )
Stage\char_script.kom:
- DamageOld.stg
Stage\script.kom:
- sound.stg
Stage\particle_script.kom:
- gcnewmappartie.stg ou arquivo do pet.
Stage\pettemplate.kom:
- Arquivo do pet.
ResSet ou Sound:
- Todos arquivos ( para os sons do pet )
Texture\particle\:
- Todos arquivos.
E claro, os arquivos do pet².
Tutorial:
0 - Antes de tudo, crie uma pasta com o nome do pet, e nesta pasta você deverá colocar os arquivos do pet que você irá coletar tais como: texturas, esqueletos, frames, arquivos de som e particulas.
1 - ID do Pet, Template ( pettemplate.stg ):
1.1. Todo Pet possui um id de sistema que pode ser definido pelo usuario, esse id serve para estabelecer o 'template' e 'ações' do mascote junto ao cliente, você deve estabelecer o id de acordo à ordem ja existente no pettemplate.stg, como segue na imagem abaixo:
1.2. A Template é referente aos dados do mascote tais como descrição, nome, modo de apresentação, mesh's, texturas, frames e etc..., abaixo segue o template do Mascote Diabinho em uma imagem comentada e o codigo do mesmo Pet no BGC construido de maneira diferente é claro.
1.2. Enquanto no BGC o arquivo pet_devil.stg ( encontrado no pettemplate.kom ) possui uma estrutura bem diferente, que terá que ser adaptada ( obvio ), com a mesma estrutura que foi apresentada acima do Mascote Diabinho, mas com todos valores e dados editados em relação ao mascote em questão a ser adicionado.
PetTemplate[17] = {};
template = SPetTemplate();
template.iPetID = 17;
template.iPromotion =
13879;
template.fScale = 0.55;
template.fDistX = 0.15;
templat
e.fNameHeight = -0.07;
template.iNameID = 3954;
e:AddDesc( PET_DESC_FIRST, 3962 );
templ
template:AddDesc( PET_DESC_SHOP, 3961 );
templa
tate.fResultScale = 0.15;
template:SetAxisCorrectionX( 0.0 );
Z( 0.0 );
template.iMaxEvolutionLev
template:SetAxisCorrectionY( 0.0 );
template:SetAxisCorrectio
nel = 0;
template.iItemDescID = -1;
template:AddMent( PET_MENT_HUNGRY, 500, 3958 );
00, 3956 );
template:AddMent( PET_MENT_MYINFO,
template:AddMent( PET_MENT_MYINFO, 500, 3955 );
template:AddMent( PET_MENT_MYINFO,
5500, 3957 );
template:AddMent( PET_MENT_ROOM, 500, 3955 );
template:AddMent( PET_MENT_ROOM, 500, 3956 );
nt( PET_MENT_FEEDING_3000, 500, 1730 );
templ
template:AddMent( PET_MENT_ROOM, 500, 3957 );
template:AddMent( PET_MENT_SHOP, 500, 3961 );
template:AddM
eate:AddMent( PET_MENT_FEEDING_6000, 500, 1730 );
template:AddMent( PET_MENT_HUNGRY_ZERO, 500, 3959 );
template:AddMent( PET_MENT_LEVELUP, 500, 3960 );
, "pet_tex017_0_devil.dds", "pet_tex017_0_showroom.dd
template:AddMent( PET_MENT_CHAR_LEVELUP, 500, 1713 );
template:AddMent( PET_MENT_FIRST_MEETING, 500, 3962 );
template:PushMeshInfo( "pet017_0_devil.p3m
"s", CARTOON_PETS );
template:PushSoundInfo( 293 );
template:PushSoundInfo( 292 );
template:PushSoundInfo( 36 );
template:PushSoundInfo( 665 );
template:PushSoundInfo( 666 );
template.SkillGP = 13880;
Motion = "pet017_0_08.frm",
template.SkillCash = 13881;
PetTemplate[17][0] = {};
PetTemplate[17][0]._class = template;
PetTemplate[17][0]._skill = {
[13881] = 13880,
[13880] = {
[PetMotion.ATTACK] = {
Action = function ( iPlayer, iFrame )
local Pet = g_MyD3D:GetPet(iPlayer, 0); --Ŭ·¡½º¸¦ ¹Þ¾Æ¿É´Ï´Ù.
if( iFrame == 45 ) then
Pet:PlaySound( 11, 0 );
iPlayer, iFrame )
local Pet = g_MyD3D:GetPe
Pet:AddDamage( DT_DEVILPET, 0 , 0.1, 0);
end
end
},
[PetMotion.TELEPORT_READY] = {
Motion = "pet017_0_10.frm",
Action = function
(t(iPlayer, 0); --Ŭ·¡½º¸¦ ¹Þ¾Æ¿É´Ï´Ù.
local dwMaxFrame = Pet:GetNumFrame(Pet.iMotion);
if( Pet.iFrame == dwMaxFrame - 10 ) then
Pet:AddParticle( "pet-teleport_1", 0, 0 );
= function ( iPlayer, iFrame )
local Pet = g_
Pet:AddParticle( "pet-teleport_2", 0, 0 );
Pet:PlaySound( 293, 0 );
end
end
},
[PetMotion.TELEPORT_ARRIVE] = {
Motion = "pet017_0_11.frm",
Actio
nMyD3D:GetPet(iPlayer, 0); --Ŭ·¡½º¸¦ ¹Þ¾Æ¿É´Ï´Ù.
if( Pet.iFrame == 1 ) then
Pet:PlaySound( 292, 0 );
end
end
},
},
}
1.3. Salve o arquivo e mantenha-o aberto.
2 - Sons do mascote:
2.1. Primeiramente, abra o sound.stg do BGC, e então procure pelos arquivos de som tendo como referencia os ids que estão nopet_devil.stg ( NO CASO DO PET USADO NESSE TUTORIAL ) e copie as linhas para um arquivo de texto a parte:
Código:
Exemplo do arquivos de som usados pelo Diabinho como demonstrado no pet_devil.stg:
template:PushSoundInfo( 293 );
template:PushSoundInfo( 292 );
mplate:PushSoundInfo( 666 );
template:PushSoundInfo( 36 );
template:PushSoundInfo( 665 );
t
e
2.2. Abaixo segue um exemplo de como estará o 'arquivo a parte' após coletar todas informações referentes para o arquivo de texto:
Código:
{ ID = "293", FILENAME = "Pet_Teleport_Out_Effect.wav", },
{ ID = "292", FILENAME = "Pet_Teleport_In_Effect.wav", },
FILENAME = "Cupid_Atk1.wav", },
{ ID =
{ ID = "36", FILENAME = "MDash.wav", },
{ ID = "665",
"666", FILENAME = "Cupid_Boom.wav", },
2.3. Agora que ja temos o nome de arquivo, iremos verificar se os mesmos ja existem no sound.stg do nosso cliente cujo qual o mascote esta sendo adicionado, caso o arquivo ja exista, não iremos adiciona-lo novamente e iremos remover do arquivo à parte os dados referentes ao som, deixando apenas o seguinte como mostra o exemplo, pois os ids dos sons deverão ser mudados nos arquivos que contem os ids como se fossem do BGC:
Código:
id bgc = meu novo id para o som no meu cliente
36 = 36
2.4. Agora iremos somar os novos ids ao total do nosso sound.stg:
2.5. Agora iremos adicionar os arquivos ao sound.stg, sendo que os ids deverão ser em ordem crescente,:
Código:
No caso, adicionei assim ao final do arquivo:
SOUND671 = { FILENAME = "Pet_Teleport_Out_Effect.wav", }
SOUND672 = { FILENAME = "Pet_Teleport_In_Effect.wav", }
{ FILENAME = "Cupid_Boom.wav", }
SOUND673 = { FILENAME = "Cupid_Atk1.wav", }
SOUND674
=
2.6. Como os ids mudaram, é claro que terei que substituir os mesmos no pettemplate.stg e os demais arquivos que serão editados, colocando os novos ids, levando em consideração o id anterior referente ao mesmo arquivo de som, ou seja os ids ficarão ( exemplo no pettemplate.stg ):
Código:
De:
Sound =
{
293, 292, 36, 665, 666,
};
Para:
Sound =
{
671, 672, 36, 673, 6
7
2.7. Salve o arquivo e mantenha-o aberto.
3. PetSkill.lua:
3.1. A parte do PetSkill.lua é bastante simples como mostra a imagem abaixo, sendo que você só terá que adicionar os mesmos referentes aos ids dos ataques do mascote, sim, aqueles que tem no pettemplate.stg.
3.2. Salve o arquivo e feche-o.
4. PetAction.lua:
4.1. Cada pet possui 17 conjuntos de frames, sendo que esses conjuntos de frames são referentes a ações, e essas ações são designadas no arquivo PetAction.lua que serve para definir ataques e etc como mostra a imagem:
4.2. Abaixo segue uma lista das ações e seus id's que tambem podem ser encontradas no petaction.lua:
Código:
WAIT = 0;
MOVE = 1;
JUMP_READY =
2 3;
JUMP_DOWN = 4;
START = 5;
WIN
SE = 7;
ATTACK = 8;
MAGIC = 9;
TELEPORT_READY =
111;
ROOM = 12;
SHOP = 13;
JUMP_LAND = 14;
GAME_LOADING = 15;
SHO
P_END = 17;
4.3. Para construir as ações do seu mascote, basta ir no template do seu mascote no bgc, copiar as ações e em um arquivo a parte, colar e adapta-lo, abaixo segue um exemplo.
De:
Código:
[PetMotion.ATTACK] = {
Motion = "pet017_0_08.frm",
Action = function ( iPlayer, iFrame )
local Pet = g_MyD3D:GetPet(iPlayer, 0); --Ŭ·¡½º¸¦ ¹Þ¾Æ¿É´Ï´Ù.
if( iFrame == 45 ) then
Pet:PlaySound( 11,
0EVILPET, 0 , 0.1, 0);
end
end
},
10.frm",
Action = function
[PetMotion.TELEPORT_READY] = {
Motion = "pet017_0
_ ( iPlayer, iFrame )
local Pet = g_MyD3D:GetPet(iPlayer, 0); --Ŭ·¡½º¸¦ ¹Þ¾Æ¿É´Ï´Ù.
if( Pet.i
local dwMaxFrame = Pet:GetNumFrame(Pet.iMotion);
Frame == dwMaxFrame - 10 ) then
Pet:AddParticle( "pet-teleport_1", 0, 0 );
Pet:AddParticle( "pet-teleport_2", 0, 0 );
Pet:PlaySoun
d [PetMotion.TELEPORT_ARRIVE] = {
Motion = "pet017_0_11.frm",
Action = function ( iPlayer, iFrame )
Pet:PlaySound( 292, 0 );
end
local Pet = g_MyD3D:GetPet(iPlayer, 0); --Ŭ·¡½º¸¦ ¹Þ¾Æ¿É´Ï´Ù.
if( Pet.iFrame == 1 ) then
end
},
Para:
Código:
function Pet_Action14_0_8(iPlayer, iFrame)
local Pet = g_MyD3D:GetPet(iPlayer, 0); --Ŭ·¡½º¸¦ ¹Þ¾Æ¿É´Ï´Ù.
if( iFrame == 45 ) then
Pet:PlaySound( 11,
0EVILPET, 0 , 0.1, 0);
end
end
local Pet = g_MyD3D:GetPet(iPl
function Pet_Action14_0_10(iPlayer, iFrame)
ayer, 0); --Ŭ·¡½º¸¦ ¹Þ¾Æ¿É´Ï´Ù.
(Pet.iMotion);
if( Pet.iFrame == dw
local dwMaxFrame = Pet:GetNumFram
eMaxFrame - 10 ) then
Pet:AddParticle( "pet-teleport_1", 0, 0 );
t:PlaySound( 293, 0 );
end
end
end
Pet:AddParticle( "pet-teleport_2", 0, 0 );
P
e
function Pet_Action14_0_11(iPlayer, iFrame)
local Pet = g_MyD3D:GetPet(iPlayer, 0); --Ŭ·¡½º¸¦ ¹Þ¾Æ¿É´Ï´Ù.
if( Pet.iFrame == 1 ) then
Pet:PlaySound( 292, 0 );
end
end
4.4. Agora copie o que foi adaptado, vá e cole no fim do petacion.lua, logo apos caso falte alguma ação, pegue em outro mascote as ações restantes ( com o mesmo numero de ação ) e mude o id e coloque em ordem junto ao que foi adaptado.
4.5. Lembre-se de mudar os sons de acordo ao id dos novos sons equivalentes ( olhe a função PlaySound, e veja que tem o mesmo id, então é só substituir caso seja necessário ).
4.6. Salve o arquivo e mantenha-o aberto.
5. Enum.stg:
5.1. O enum.stg tem a utilidade de enumerar diversos valores do jogo, mas isso não vou explicar aqui, o importante é que os danos do mascotes ( como será mostrado na imagem abaixo ), primeiramente devem ser adicionados nesse arquivo, levando em consideração a ordem crescente de numeros.
5.2. Mas como indentificar os danos? é bem simples, basta no petaction do mascote em questão verificar as palavras que sejam relacionadas a uma função que contenha damage ( ex: AddDamage ) e essa constante comece com DT.
5.3. Salve o arquivo e mantenha-o aberto.
6. FireInfo.stg:
6.1. Primeiramente iremos alterar o valor do MAX_DAMAGE_NUM para o novo valor total, acrescentado o valor dos damages novos (no meu caso é 1 ).
Exemplo:
Código:
De:
ireInfo =
F{
MAX_DAMAGE_TEX_NUM = 194,
}
Para:
FireInfo =
{
MAX_DAMAGE_NUM
=NUM = 194,
}
6.2. Agora vá até o final do arquivo e crie o seguinte codigo ( no meu caso é FireInfo753 por que o id do unico damage do diabinho é 753 ):
Código:
FireInfo753 =
{
}
6.3. Agora no DamageOld.stg do BGC iremos procurar pelo dano do pet, tendo como referencia o nome dele, no caso do diabinho tive o seguinte resultado:
Código:
Damage[DT_DEVILPET] = {
--DT_DevilPet
START_LIFE =
2 = TRUE,
START_SCAL
ER_X = 0.5,
START_LOCATE_X = 0.1,
START_LOCATE_Y = 0,
SPEE
D DAMAGE_SOUND = 6,
A_ONETIME_DAMAGE,
AGIC_EFF = 108,
MMAG
DAMAGE_FLAG = DA_HIT_LIGHT +
DIC_TIME = 2.0,
TEXTURE = 210,
DAMAGETO_MONSTER = -24,
TTACKDIR_UP,
PUSH_X_TO_MONSTER = 0.01,
ATTACK_TYPE_TO_MONSTER = ATTACKTYPE_NORMAL,
ATTACK_DIR_TO_MONSTER =
APUSH_Y_TO_MONSTER = 0.0,
}
6.4. Agora iremos montar esse codigo dentro do fireinfo como mostra abaixo:
Código:
FireInfo753 =
{
START_LIFE = 255,
ENABLE_DAMAGE = TRUE,
SSCALE_Y_PER_X = 0.5,
START_LOCATE_X =
00,
SPEED_X = 0.0250000,
DAMAGE_FLAG = DA_HIT_LIGHT +
DAMAGE_SOUND = 6,
DA_ONETIME_DAMAGE,
MAGIC_EFF = 108,
MAGIC_TIME = 2.0,
ATTACK_T
TEXTURE = 210,
DAMAGETO_MONSTER = -0.024,
YPE_TO_MONSTER = ATTACKTYPE_NORMAL,
_UP,
PUSH_X_TO_MONSTER = 0.01,
PU
ATTACK_DIR_TO_MONSTER = ATTACKDI
RSH_Y_TO_MONSTER = 0.0,
}
6.5. Salve o arquivo e mantenha-o aberto.
7. str_p.stg:
7.1. Copie os valores do sort_br.stg do BGC referente aos valores de texto do mascote do pettemplate.stg
7.2. Salve o str_p.stg e feche-o.
8. sort_p.stg:
8.1. Adicione ao sort a carta e as tecnicas especiais do mascote.
8.2. Salve o sort e feche-o.
9. gcnewmapparticle.stg:
9.1. Você deverá coletar os nomes das particulas que o pet utiliza, mas como identificar? basta no petaction e no fireinfo do mascote em questão verificar as palavras que sejam relacionadas a uma função que contenha particle ( ex: AddParticle ).
9.2. Agora verifique no gcnewmapparticle.stg do seu Grand Chase se as particulas em questão existem, caso não voce deverá repassar os particle info do gcnewmapparticle.stg do bgc ( ou do particle file script do pet ) para o seu gcnewmapparticle.stg.
9.3. Salve o arquivo e feche-o.
10. Arquivos:
10.1. Agora você deverá coletar os arquivos de som, os arquivos de particula e os arquivos de pets e colar na pasta cuja qual será criada o kom a partir dessa pasta que conterá os arquivo do pet.
10.2. Você deverá renomear os arquivos do pet que contenham a extensão frm, exemplo:
Código:
pet017_0_09.frm para pet0ID_0_09.frm
exemplo do diabinho:
pet017_0_09.frm para
pet014_0_09.frm
10.2. Adicione no DataFiles.lua o caminho do arquivo kom que contem os arquivos do mascote.
10.3. Comprima o script.kom e o arquivo kom do pet, coloque-o em seus respectivos diretorios.
10.4. Enjoy.
Creditos:
Yondaime12