Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

Unfinished source BMD (3dMesh) to SMD

Experienced Elementalist
Joined
Apr 8, 2008
Messages
218
Reaction score
141
elf bows also have animations, and it's old. and if you want to replace existing bow with new model with added animation, it certainly should work if you do all correct.

probably there is a way to add such things for all weapons, need to check main.

weapons/wings have their own skeleton, but pants, boots, gloves, etc. use player skeleton, and they "copy" all player animation - you fly = pants fly :D

PS, but you can make player skeleton more complicated and change animations:
add new bones, create item that uses these bones, and you have your own animated armor part.
for example take a look on the dragon armor and bronze armor, dragon armor uses more bones and have additional animation =)
The only problem - as i remember, weapons/wings/other link to player by hard coded bone numbers, so if there is a way to add new bones by keeping bone numbers from original player.bmd you can try to implement this thing.

Yes its true, already i have the skeleton from Lineage and i adjust this for Mu, this have more bones and its more complex, take me lot of time adjust this and animations looks amazing already, but the problem Gembrid its i cant made the .bmd of player.bmd animations if this cant be fixed in the BMD.EXE.:thumbup1:
 
Hybrid
Loyal Member
Joined
Mar 15, 2006
Messages
451
Reaction score
285
Yes its true, already i have the skeleton from Lineage and i adjust this for Mu, this have more bones and its more complex, take me lot of time adjust this and animations looks amazing already, but the problem Gembrid its i cant made the .bmd of player.bmd animations if this cant be fixed in the BMD.EXE.:thumbup1:

and what's the problem?)
 
Junior Spellweaver
Joined
Sep 3, 2008
Messages
146
Reaction score
75
and what's the problem?)

Remember gembrid. If BMD have animations, BMD Comverter wont work 100% cuz have some errors on converted X/Y/Z structs. If Rimbros wants Add new bones inside Sets/Weapons, he need edit player.bmd to make it news animation works.
 
Experienced Elementalist
Joined
Apr 8, 2008
Messages
218
Reaction score
141
and what's the problem?)
The problem bro its:

1- Take any PLAYER.BMD from any client u have installed.
2- With pentium tools free version convert this to SMD.
3- With the BMD.EXE convert this SMD to .BMD back.
4- Run in game with any pj, now u get the error in animation.
 
Hybrid
Loyal Member
Joined
Mar 15, 2006
Messages
451
Reaction score
285
The problem bro its:

1- Take any PLAYER.BMD from any client u have installed.
2- With pentium tools free version convert this to SMD.
3- With the BMD.EXE convert this SMD to .BMD back.
4- Run in game with any pj, now u get the error in animation.

i've already tested) everything was ok =\

have you tried player.bmd i've uploaded?
 
Experienced Elementalist
Joined
Apr 8, 2008
Messages
218
Reaction score
141
i've already tested) everything was ok =\

have you tried player.bmd i've uploaded?

O sorry, yes this works fine.

Abouth animations in items, ok, let me explain, this weapon mace have animation rotation, but if u added a new weapon item with animations .bmd file the animation not run, and the object looks withouth animation, the only way its replace the item, but how its posible in main allow a item to run animations?... this question are here by years. I dont think only this man sobieh know the answer ot this.

mauka - Unfinished source BMD (3dMesh) to SMD - RaGEZONE Forums
 
Hybrid
Loyal Member
Joined
Mar 15, 2006
Messages
451
Reaction score
285
O sorry, yes this works fine.

Abouth animations in items, ok, let me explain, this weapon mace have animation rotation, but if u added a new weapon item with animations .bmd file the animation not run, and the object looks withouth animation, the only way its replace the item, but how its posible in main allow a item to run animations?... this question are here by years. I dont think only this man sobieh know the answer ot this.

1. find the code in main for original item
2. analyze
3. change the code to support new items
4. :D

it was easy to find it for raven stick and stop the animation
 
Experienced Elementalist
Joined
Apr 8, 2008
Messages
218
Reaction score
141
1. find the code in main for original item
2. analyze
3. change the code to support new items
4. :D

it was easy to find it for raven stick and stop the animation

That its the point, nobody find the code, only sobieh but of course he never shared.:thumbdown:
I ask to you because i remember u are the only find how to changue the size in NPC.
U are good finding codes.
 
Joined
Oct 29, 2007
Messages
1,267
Reaction score
1,284
I can find assembly code for every item.. using: olly, but I don't know how extend limit.. to load me lacking struct for load effects in items, I don't know the way that: main.exe load effect in every item

for example:

Code:
 Loop for load Bows in: 1.03.52 (Eng)
CPU Disasm
Address   Hex dump          Command                                  Comments
00629EC1  |.  6A 14         PUSH 14                                  ; /Arg4 = 14
00629EC3  |.  68 78C09A00   PUSH OFFSET 009AC078                     ; |Arg3 = ASCII "Bow"
00629EC8  |.  68 7CC09A00   PUSH OFFSET 009AC07C                     ; |Arg2 = ASCII "Data\Item\"
00629ECD  |.  68 A70C0000   PUSH 0CA7                                ; |Arg1 = 0CA7  ---> [COLOR="Red"]Item offset in array for bows[/COLOR]
00629ED2  |.  E8 B1D2FFFF   CALL 00627188                            ; \Main-Funcional.00627188
00629ED7  |.  83C4 10       ADD ESP,10

0CA7 = 3239 in dec with this and ItemGet, you can found: exactly ItemID, for Bows how: "Ari Lyn Bow" that have special effects (you can found calls in main for this effect and redirect to: New Added Bow).
 
Last edited:
Experienced Elementalist
Joined
Apr 8, 2008
Messages
218
Reaction score
141
I can find assembly code for every item.. using: olly, but I don't know how extend limit.. to load me lacking struct for load effects in items, I don't know the way that: main.exe load effect in every item

Yea this its the most hard think in Main.exe found a effects and animations control, to extend limit of items u can made a Dll. btw i found interesting thinks, like light spots in something bones names, but out of this i dont know, another think i see its the sobieh effects in items looks very rare, not look nice like the original effects, i think he made a Dll or something to put OpenGl effects or something to the items, and he not working with the original code. Its only a think i supposse.

I search control animation coz i search release armors in Mu like the Inmortals Online..

Of course do this i have my hown skeleton structure. Compatible with all the armors released and with extra bones.



 
Last edited:
Joined
Oct 29, 2007
Messages
1,267
Reaction score
1,284
Here decompiled to: 1.03h Jpn -> Season 4.5

Added Cross Shield to: Season II - with Glass Effect
2oPKq - Unfinished source BMD (3dMesh) to SMD - RaGEZONE Forums


Code:
Func2:

void gObjSetItemEffect2(UNK0 * arg1, UNK1 * lpMsg, int iID, float arg4, int arg5, float arg6, int arg7) //Completed
{
if(iID == ITEMID(0,26)) //Flameberge
{
func_51932D(arg1, arg5, arg4, (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), *(float*)(&lpMsg->ukn3[0x0A0]), 5, -1);
}
else if(iID == ITEMID(0,27)) //Sword Breaker
{
func_5168A0(arg1, 0, arg5, *(float*)(&lpMsg->ukn3[0x1A8]), (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), *(float*)(&lpMsg->ukn3[0x0A0]), -1);
}
else if(iID == ITEMID(0,28)) //Rune Bastard Sword
{
func_5168A0(arg1, 2, arg5, *(float*)(&lpMsg->ukn3[0x1A8]), (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), *(float*)(&lpMsg->ukn3[0x0A0]), -1);
}
else if(iID == ITEMID(5,30)) //Deadly Staff
{
func_51932D(arg1, arg5, arg4, (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), *(float*)(&lpMsg->ukn3[0x0A0]), -1, arg7);

lpMsg->ukn3[0x94] = 1;

*(float*)(&arg1->ukn[0x48]) = 1.0f;
*(float*)(&arg1->ukn[0x4C]) = 1.0f;
*(float*)(&arg1->ukn[0x50]) = 1.0f;

func_5168A0(arg1, 1, arg5, *(float*)(&lpMsg->ukn3[0x1A8]), (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), *(float*)(&lpMsg->ukn3[0x0A0]), -1);
}
else if(iID == ITEMID(5,32)) //Unknown (weird but Season4.5 have it)
{
func_5168A0(arg1, 1, arg5, *(float*)(&lpMsg->ukn3[0x1A8]), (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), *(float*)(&lpMsg->ukn3[0x0A0]), -1);
}
else if(iID == ITEMID(6,19)) //Frost Barrier
{
func_5168A0(arg1, 0, arg5, *(float*)(&lpMsg->ukn3[0x1A8]), (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), *(float*)(&lpMsg->ukn3[0x0A0]), -1);
}
else if(iID == ITEMID(6,20)) //Guardian Shield
{
func_5168A0(arg1, 0, arg5, *(float*)(&lpMsg->ukn3[0x1A8]), (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), *(float*)(&lpMsg->ukn3[0x0A0]), -1);
}
else if(iID == ITEMID(7,49)) //Seraphim Helm
{
func_5168A0(arg1, 0, arg5, *(float*)(&lpMsg->ukn3[0x1A8]), (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), *(float*)(&lpMsg->ukn3[0x0A0]), -1);
}
else if(iID == ITEMID(7,50)) //Divine Helm
{
func_5168A0(arg1, 1, arg5, *(float*)(&lpMsg->ukn3[0x1A8]), (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), *(float*)(&lpMsg->ukn3[0x0A0]), -1);
}
else if(iID == ITEMID(7,53)) //Unknown (weird but Season4.5 have it)
{
func_5168A0(arg1, 2, arg5, *(float*)(&lpMsg->ukn3[0x1A8]), (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), *(float*)(&lpMsg->ukn3[0x0A0]), -1);
}
else if(iID == ITEMID(6,21)) //Cross Shield
{
func_5168A0(arg1, 0, arg5, *(float*)(&lpMsg->ukn3[0x1A8]), (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), *(float*)(&lpMsg->ukn3[0x0A0]), -1);
}
else
{
OriginalEffectFunc2(arg1, lpMsg, iID, arg4, arg5, arg6, arg7);
}
}

void gObjSetItemEffect3(UNK0 * arg1, UNK1 * lpMsg, int iID, float arg4, int arg5, float arg6, int arg7) //Completed
{
if(iID == ITEMID(0,26)) //Flameberge
{
func_51932D(arg1, arg5, arg4, (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), *(float*)(&lpMsg->ukn3[0x0A0]), 5, arg7);
}
else if(iID == ITEMID(6,19)) //Frost Barrier
{
func_5168A0(arg1, 0, arg5, *(float*)(&lpMsg->ukn3[0x1A8]), (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), *(float*)(&lpMsg->ukn3[0x0A0]), -1);
}
else if(iID == ITEMID(7,49)) //Seraphim Helm
{
func_5168A0(arg1, 0, arg5, *(float*)(&lpMsg->ukn3[0x1A8]), (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), *(float*)(&lpMsg->ukn3[0x0A0]), -1);
}
else if(iID == ITEMID(7,53)) //Unknown (weird but Season4.5 have it)
{
func_5168A0(arg1, 2, arg5, *(float*)(&lpMsg->ukn3[0x1A8]), (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), *(float*)(&lpMsg->ukn3[0x0A0]), -1);
}
else if(iID == ITEMID(7,50)) //Divine Helm
{
func_5168A0(arg1, 1, arg5, *(float*)(&lpMsg->ukn3[0x1A8]), (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), *(float*)(&lpMsg->ukn3[0x0A0]), -1);
}
else
{
OriginalEffectFunc3(arg1, lpMsg, iID, arg4, arg5, arg6, arg7);
} 
}


























//Função 1
else if(iID == ITEMID(6,21)) //Cross Shield
{
glColor3f(1.0f, 1.0f, 1.0f); //OpenGL Set Color

func_5168A0(arg1, 0, 2, *(float*)(&lpMsg->ukn3[0x1A8]), (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), *(float*)(&lpMsg->ukn3[0x0A0]), -1);

arg1->ukn[0x94] = 1; //Unknown value (need check)

func_5168A0(arg1, 1, 70, *(float*)(&lpMsg->ukn3[0x1A8]), (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), -((int)(*( float*)0x587C650))%2000, -1); //Shield Glass Effect Animation
func_5168A0(arg1, 2, 66, *(float*)(&lpMsg->ukn3[0x1A8]), (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), *(float*)(&lpMsg->ukn3[0x0A0]), -1);
}

//Função 2
else if(iID == ITEMID(6,21)) //Cross Shield
{
func_5168A0(arg1, 0, arg5, *(float*)(&lpMsg->ukn3[0x1A8]), (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), *(float*)(&lpMsg->ukn3[0x0A0]), -1);
}

















































Code :


//Função 1
else if(iID == ITEMID(6,21)) //Cross Shield
{
glColor3f(1.0f, 1.0f, 1.0f); //OpenGL Set Color

func_5168A0(arg1, 0, 2, *(float*)(&lpMsg->ukn3[0x1A8]), (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), *(float*)(&lpMsg->ukn3[0x0A0]), -1);

arg1->ukn[0x94] = 1; //Unknown value (need check)

func_5168A0(arg1, 1, 70, *(float*)(&lpMsg->ukn3[0x1A8]), (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), -((int)(*( float*)0x587C650))%2000, -1); //Shield Glass Effect Animation
func_5168A0(arg1, 2, 66, *(float*)(&lpMsg->ukn3[0x1A8]), (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), *(float*)(&lpMsg->ukn3[0x0A0]), -1);
}

//Função 2
else if(iID == ITEMID(6,21)) //Cross Shield
{
func_5168A0(arg1, 0, arg5, *(float*)(&lpMsg->ukn3[0x1A8]), (int)lpMsg->ukn3[0x94], *(float*)(&lpMsg->ukn3[0x98]), *(float*)(&lpMsg->ukn3[0x9C]), *(float*)(&lpMsg->ukn3[0x0A0]), -1);
}
 

Attachments

You must be registered for see attachments list
Experienced Elementalist
Joined
Apr 8, 2008
Messages
218
Reaction score
141
Amazing release, mmm btw maybe u can put Glass Effect with alpha channels modification too, and brightnes texture. But its good begining that u made.
 
Newbie Spellweaver
Joined
Jul 19, 2005
Messages
22
Reaction score
53
i found 3 functions related to effects.
webzen coded effects for each item like cross shield, flameberge i added in season2. For example cross shield uses this formula "-((int)(*( float*)0x587C650))%2000" to make the cool glass animation and flameberge this one:
PHP:
float Formula1 = (((int)(( *(float*)0x587C650) * 0.05f )) % 16) / 4;
float Formula2 = Formula1 * 0.25f;

also the rotate thing from the mace is from one of those 3 functions too and uses a similar formula

Preview:
mauka - Unfinished source BMD (3dMesh) to SMD - RaGEZONE Forums


btw i never tested different values to see what happens to it xD
 
Junior Spellweaver
Joined
Aug 5, 2008
Messages
149
Reaction score
38
Nice man :D with this we can add effects like glass and fire effect =) is good :)

This part of code is for main ... Seadon 2? What version Exactly ...?
 
Last edited:
Experienced Elementalist
Joined
Apr 8, 2008
Messages
218
Reaction score
141
Btw, the fire effect its only a illusion, already looks like fire because in
the .ozt the texture its fire frames, its like a .GIF image, u can changue this by lighting or changue the color to purple or green etc etc... mmm this u post its a source but how abouth the offset? search a float in ollyDBG its a kick in the as.
 
Joined
Oct 29, 2007
Messages
1,267
Reaction score
1,284
i found 3 functions related to effects.
webzen coded effects for each item like cross shield, flameberge i added in season2. For example cross shield uses this formula "-((int)(*( float*)0x587C650))%2000" to make the cool glass animation and flameberge this one:
PHP:
float Formula1 = (((int)(( *(float*)0x587C650) * 0.05f )) % 16) / 4;
float Formula2 = Formula1 * 0.25f;

also the rotate thing from the mace is from one of those 3 functions too and uses a similar formula

Preview:
mauka - Unfinished source BMD (3dMesh) to SMD - RaGEZONE Forums


btw i never tested different values to see what happens to it xD

Hey hermex, is lacking this:

Code:
g_ItemEffect.func_5168A0(arg1, 5, 66, Value_5, 5, Value_2, Value_3, Formula2, -1 );

Here I leave the last version of: AriethMu_S6.dll, unpacked. ready for decompilation.

--> for main: 1.08C+ -> 1.08.29 (Kor) Season 6 Episode 2

PS: I think that, the hermex code it's based in: 1.03h (Jpn) Season 4.5
 
Last edited:
Junior Spellweaver
Joined
Jun 10, 2006
Messages
136
Reaction score
100
Hey hermex, is lacking this:

Code:
g_ItemEffect.func_5168A0(arg1, 5, 66, Value_5, 5, Value_2, Value_3, Formula2, -1 );

Here I leave the last version of: AriethMu_S6.dll, unpacked. ready for decompilation.

--> for main: 1.08C+ -> 1.08.29 (Kor) Season 6 Episode 2

PS: I think that, the hermex code it's based in: 1.03h (Jpn) Season 4.5

It's not easy to decompile, coz the important areas of code are virtualized...
 
Junior Spellweaver
Joined
Sep 22, 2008
Messages
126
Reaction score
37
Maybe u should create a new thread to discuss about this.... this thread start as a opensource bmd <> smd converter, and is becoming a main functions thread.
 
Last edited:
Back
Top