3981 lines
99 KiB
C++
3981 lines
99 KiB
C++
|
/*
|
||
|
* UNPUBLISHED -- Rights reserved under the copyright laws of the
|
||
|
* United States. Use of a copyright notice is precautionary only and
|
||
|
* does not imply publication or disclosure.
|
||
|
*
|
||
|
* THIS DOCUMENTATION CONTAINS CONFIDENTIAL AND PROPRIETARY INFORMATION
|
||
|
* OF BLIZZARD ENTERTAINMENT. ANY DUPLICATION, MODIFICATION,
|
||
|
* DISTRIBUTION, OR DISCLOSURE IS STRICTLY PROHIBITED WITHOUT THE PRIOR
|
||
|
* EXPRESS WRITTEN PERMISSION OF BLIZZARD ENTERTAINMENT.
|
||
|
*/
|
||
|
|
||
|
#include "../types.h"
|
||
|
|
||
|
int sgdwOwnerWait; // weak
|
||
|
int msg_cpp_init_value; // weak
|
||
|
int sgdwRecvOffset; // idb
|
||
|
int sgnCurrMegaPlayer; // weak
|
||
|
DLevel sgLevels[17];
|
||
|
char sbLastCmd; // weak
|
||
|
TMegaPkt *sgpCurrPkt;
|
||
|
char sgRecvBuf[4722];
|
||
|
unsigned char sgbRecvCmd; // idb
|
||
|
LocalLevel sgLocals[17];
|
||
|
DJunk sgJunk[4];
|
||
|
TMegaPkt *sgpMegaPkt;
|
||
|
char sgbDeltaChanged; // weak
|
||
|
char sgbDeltaChunks; // weak
|
||
|
int deltaload; // weak
|
||
|
char gbBufferMsgs; // weak
|
||
|
int dword_676198; // weak
|
||
|
int msg_err_timer; // weak
|
||
|
|
||
|
int msg_inf = 0x7F800000; // weak
|
||
|
|
||
|
//----- (0043BBA9) --------------------------------------------------------
|
||
|
struct msg_cpp_init
|
||
|
{
|
||
|
msg_cpp_init()
|
||
|
{
|
||
|
msg_cpp_init_value = msg_inf;
|
||
|
}
|
||
|
} _msg_cpp_init;
|
||
|
// 47F14C: using guessed type int msg_inf;
|
||
|
// 65AB1C: using guessed type int msg_cpp_init_value;
|
||
|
|
||
|
//----- (0043BBB4) --------------------------------------------------------
|
||
|
void __fastcall msg_send_drop_pkt(int pnum, int reason)
|
||
|
{
|
||
|
TFakeDropPlr cmd; // [esp+0h] [ebp-8h]
|
||
|
|
||
|
cmd.dwReason = reason;
|
||
|
cmd.bCmd = FAKE_CMD_DROPID;
|
||
|
cmd.bPlr = pnum;
|
||
|
msg_send_packet(pnum, &cmd, 6);
|
||
|
}
|
||
|
|
||
|
//----- (0043BBCF) --------------------------------------------------------
|
||
|
void __fastcall msg_send_packet(int pnum, void *packet, int dwSize)
|
||
|
{
|
||
|
void *v3; // edi
|
||
|
TMegaPkt *v4; // eax
|
||
|
TFakeCmdPlr cmd; // [esp+Ah] [ebp-2h]
|
||
|
|
||
|
v3 = packet;
|
||
|
if ( pnum != sgnCurrMegaPlayer )
|
||
|
{
|
||
|
sgnCurrMegaPlayer = pnum;
|
||
|
cmd.bCmd = FAKE_CMD_SETID;
|
||
|
cmd.bPlr = pnum;
|
||
|
msg_send_packet(pnum, &cmd, 2);
|
||
|
}
|
||
|
v4 = sgpCurrPkt;
|
||
|
if ( sgpCurrPkt->dwSpaceLeft < (unsigned int)dwSize )
|
||
|
{
|
||
|
msg_get_next_packet();
|
||
|
v4 = sgpCurrPkt;
|
||
|
}
|
||
|
memcpy((char *)&v4[1] - v4->dwSpaceLeft, v3, dwSize);
|
||
|
sgpCurrPkt->dwSpaceLeft -= dwSize;
|
||
|
}
|
||
|
// 65AB24: using guessed type int sgnCurrMegaPlayer;
|
||
|
|
||
|
//----- (0043BC31) --------------------------------------------------------
|
||
|
TMegaPkt *__cdecl msg_get_next_packet()
|
||
|
{
|
||
|
TMegaPkt *v0; // eax
|
||
|
TMegaPkt *v1; // ecx
|
||
|
TMegaPkt *result; // eax
|
||
|
|
||
|
v0 = (TMegaPkt *)DiabloAllocPtr(32008);
|
||
|
sgpCurrPkt = v0;
|
||
|
v0->pNext = 0;
|
||
|
sgpCurrPkt->dwSpaceLeft = 32000;
|
||
|
v1 = sgpMegaPkt;
|
||
|
result = (TMegaPkt *)&sgpMegaPkt;
|
||
|
while ( v1 )
|
||
|
{
|
||
|
result = v1;
|
||
|
v1 = v1->pNext;
|
||
|
}
|
||
|
result->pNext = sgpCurrPkt;
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
//----- (0043BC6D) --------------------------------------------------------
|
||
|
int __cdecl msg_wait_resync()
|
||
|
{
|
||
|
int v0; // eax
|
||
|
|
||
|
msg_get_next_packet();
|
||
|
sgbDeltaChunks = 0;
|
||
|
sgnCurrMegaPlayer = -1;
|
||
|
sgbRecvCmd = CMD_DLEVEL_END;
|
||
|
gbBufferMsgs = 1;
|
||
|
sgdwOwnerWait = GetTickCount();
|
||
|
v0 = UiProgressDialog(ghMainWnd, "Waiting for game data...", 1, msg_wait_for_turns, 20);
|
||
|
gbBufferMsgs = 0;
|
||
|
if ( !v0 )
|
||
|
goto LABEL_6;
|
||
|
if ( gbGameDestroyed )
|
||
|
{
|
||
|
DrawDlg("The game ended");
|
||
|
LABEL_6:
|
||
|
msg_free_packets();
|
||
|
return 0;
|
||
|
}
|
||
|
if ( sgbDeltaChunks != 21 )
|
||
|
{
|
||
|
DrawDlg("Unable to get level data");
|
||
|
goto LABEL_6;
|
||
|
}
|
||
|
return 1;
|
||
|
}
|
||
|
// 65AB18: using guessed type int sgdwOwnerWait;
|
||
|
// 65AB24: using guessed type int sgnCurrMegaPlayer;
|
||
|
// 67618D: using guessed type char sgbDeltaChunks;
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
// 67862D: using guessed type char gbGameDestroyed;
|
||
|
|
||
|
//----- (0043BCED) --------------------------------------------------------
|
||
|
void __cdecl msg_free_packets()
|
||
|
{
|
||
|
TMegaPkt *v0; // eax
|
||
|
TMegaPkt *v1; // ecx
|
||
|
|
||
|
v0 = sgpMegaPkt;
|
||
|
while ( v0 )
|
||
|
{
|
||
|
v1 = v0->pNext;
|
||
|
sgpMegaPkt = 0;
|
||
|
sgpCurrPkt = v1;
|
||
|
mem_free_dbg(v0);
|
||
|
v0 = sgpCurrPkt;
|
||
|
sgpMegaPkt = sgpCurrPkt;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//----- (0043BD19) --------------------------------------------------------
|
||
|
int __cdecl msg_wait_for_turns()
|
||
|
{
|
||
|
//int v0; // eax
|
||
|
//int v2; // eax
|
||
|
int recieved; // [esp+0h] [ebp-8h]
|
||
|
int turns; // [esp+4h] [ebp-4h]
|
||
|
|
||
|
if ( !sgbDeltaChunks )
|
||
|
{
|
||
|
nthread_send_and_recv_turn(0, 0);
|
||
|
//_LOBYTE(v0) = SNetGetOwnerTurnsWaiting(&turns);
|
||
|
if ( !SNetGetOwnerTurnsWaiting(&turns) && SErrGetLastError() == STORM_ERROR_NOT_IN_GAME )
|
||
|
return 100;
|
||
|
if ( GetTickCount() - sgdwOwnerWait <= 2000 && turns < (unsigned int)gdwTurnsInTransit )
|
||
|
return 0;
|
||
|
++sgbDeltaChunks;
|
||
|
}
|
||
|
multi_process_network_packets();
|
||
|
nthread_send_and_recv_turn(0, 0);
|
||
|
//_LOBYTE(v2) = nthread_has_500ms_passed();
|
||
|
if ( nthread_has_500ms_passed() )
|
||
|
nthread_recv_turns(&recieved);
|
||
|
if ( gbGameDestroyed )
|
||
|
return 100;
|
||
|
if ( (unsigned char)gbDeltaSender >= 4u )
|
||
|
{
|
||
|
sgbDeltaChunks = 0;
|
||
|
sgbRecvCmd = CMD_DLEVEL_END;
|
||
|
gbDeltaSender = myplr;
|
||
|
nthread_set_turn_upper_bit();
|
||
|
}
|
||
|
if ( sgbDeltaChunks == 20 )
|
||
|
{
|
||
|
sgbDeltaChunks = 21;
|
||
|
return 99;
|
||
|
}
|
||
|
return 100 * (unsigned char)sgbDeltaChunks / 21;
|
||
|
}
|
||
|
// 65AB18: using guessed type int sgdwOwnerWait;
|
||
|
// 67618D: using guessed type char sgbDeltaChunks;
|
||
|
// 67862D: using guessed type char gbGameDestroyed;
|
||
|
// 6796E4: using guessed type char gbDeltaSender;
|
||
|
// 679738: using guessed type int gdwTurnsInTransit;
|
||
|
|
||
|
//----- (0043BDEB) --------------------------------------------------------
|
||
|
void __cdecl msg_process_net_packets()
|
||
|
{
|
||
|
if ( gbMaxPlayers != 1 )
|
||
|
{
|
||
|
gbBufferMsgs = 2;
|
||
|
msg_pre_packet();
|
||
|
gbBufferMsgs = 0;
|
||
|
msg_free_packets();
|
||
|
}
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
// 679660: using guessed type char gbMaxPlayers;
|
||
|
|
||
|
//----- (0043BE0D) --------------------------------------------------------
|
||
|
void __cdecl msg_pre_packet()
|
||
|
{
|
||
|
TMegaPkt *v0; // edi
|
||
|
int i; // ebp
|
||
|
signed int v2; // ebx
|
||
|
TFakeCmdPlr *v3; // esi
|
||
|
TFakeCmdPlr *v4; // eax
|
||
|
TFakeDropPlr *v5; // eax
|
||
|
int v6; // eax
|
||
|
|
||
|
v0 = sgpMegaPkt;
|
||
|
for ( i = -1; v0; v0 = v0->pNext )
|
||
|
{
|
||
|
v2 = 32000;
|
||
|
v3 = (TFakeCmdPlr *)v0->data;
|
||
|
while ( v2 != v0->dwSpaceLeft )
|
||
|
{
|
||
|
if ( v3->bCmd == FAKE_CMD_SETID )
|
||
|
{
|
||
|
v4 = v3;
|
||
|
++v3;
|
||
|
i = (unsigned char)v4->bPlr;
|
||
|
v2 -= 2;
|
||
|
}
|
||
|
else if ( v3->bCmd == FAKE_CMD_DROPID )
|
||
|
{
|
||
|
v5 = (TFakeDropPlr *)v3;
|
||
|
v3 += 3;
|
||
|
v2 -= 6;
|
||
|
multi_player_left((unsigned char)v5->bPlr, v5->dwReason);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v6 = ParseCmd(i, (TCmd *)v3);
|
||
|
v3 = (TFakeCmdPlr *)((char *)v3 + v6);
|
||
|
v2 -= v6;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//----- (0043BE74) --------------------------------------------------------
|
||
|
void __fastcall DeltaExportData(int pnum)
|
||
|
{
|
||
|
char *v1; // edi
|
||
|
DObjectStr *v2; // esi
|
||
|
void *v3; // ebx
|
||
|
void *v4; // eax
|
||
|
void *v5; // eax
|
||
|
void *v6; // eax
|
||
|
int v7; // eax
|
||
|
char *v8; // eax
|
||
|
int v9; // eax
|
||
|
int player_num; // [esp+0h] [ebp-Ch]
|
||
|
int v11; // [esp+4h] [ebp-8h]
|
||
|
char src; // [esp+Bh] [ebp-1h]
|
||
|
|
||
|
player_num = pnum;
|
||
|
if ( sgbDeltaChanged )
|
||
|
{
|
||
|
v11 = 0;
|
||
|
v1 = (char *)DiabloAllocPtr(4722);
|
||
|
v2 = sgLevels[0].object;
|
||
|
v3 = v1 + 1;
|
||
|
do
|
||
|
{
|
||
|
v4 = DeltaExportItem(v3, &v2[-2794]);
|
||
|
v5 = DeltaExportObject(v4, v2);
|
||
|
v6 = DeltaExportMonster(v5, &v2[127]);
|
||
|
v7 = msg_comp_level(v1, (int)v6);
|
||
|
dthread_send_delta(player_num, (_BYTE)v11++ + CMD_DLEVEL_0, v1, v7);
|
||
|
v2 += 4721;
|
||
|
}
|
||
|
while ( (signed int)v2 < (signed int)&sgLevels[17].object );
|
||
|
v8 = DeltaExportJunk((char *)v3);
|
||
|
v9 = msg_comp_level(v1, (int)v8);
|
||
|
dthread_send_delta(player_num, CMD_DLEVEL_JUNK, v1, v9);
|
||
|
mem_free_dbg(v1);
|
||
|
}
|
||
|
src = 0;
|
||
|
dthread_send_delta(player_num, CMD_DLEVEL_END, &src, 1);
|
||
|
}
|
||
|
// 67618C: using guessed type char sgbDeltaChanged;
|
||
|
|
||
|
//----- (0043BF2B) --------------------------------------------------------
|
||
|
void *__fastcall DeltaExportItem(void *dst, void *src)
|
||
|
{
|
||
|
_BYTE *v2; // edi
|
||
|
_BYTE *v3; // esi
|
||
|
signed int v4; // ebx
|
||
|
|
||
|
v2 = (unsigned char *)src;
|
||
|
v3 = (unsigned char *)dst;
|
||
|
v4 = 127;
|
||
|
do
|
||
|
{
|
||
|
if ( *v2 == -1 )
|
||
|
{
|
||
|
*v3++ = -1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
memcpy(v3, v2, 0x16u);
|
||
|
v3 += 22;
|
||
|
}
|
||
|
v2 += 22;
|
||
|
--v4;
|
||
|
}
|
||
|
while ( v4 );
|
||
|
return v3;
|
||
|
}
|
||
|
|
||
|
//----- (0043BF5B) --------------------------------------------------------
|
||
|
void *__fastcall DeltaExportObject(void *dst, void *src)
|
||
|
{
|
||
|
char *v2; // esi
|
||
|
|
||
|
v2 = (char *)dst;
|
||
|
memcpy(dst, src, 0x7Fu);
|
||
|
return v2 + 127;
|
||
|
}
|
||
|
|
||
|
//----- (0043BF6F) --------------------------------------------------------
|
||
|
void *__fastcall DeltaExportMonster(void *dst, void *src)
|
||
|
{
|
||
|
_BYTE *v2; // edi
|
||
|
_BYTE *v3; // esi
|
||
|
signed int v4; // ebx
|
||
|
|
||
|
v2 = (unsigned char *)src;
|
||
|
v3 = (unsigned char *)dst;
|
||
|
v4 = 200;
|
||
|
do
|
||
|
{
|
||
|
if ( *v2 == -1 )
|
||
|
{
|
||
|
*v3++ = -1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
memcpy(v3, v2, 9u);
|
||
|
v3 += 9;
|
||
|
}
|
||
|
v2 += 9;
|
||
|
--v4;
|
||
|
}
|
||
|
while ( v4 );
|
||
|
return v3;
|
||
|
}
|
||
|
|
||
|
//----- (0043BFA1) --------------------------------------------------------
|
||
|
char *__fastcall DeltaExportJunk(char *a1)
|
||
|
{
|
||
|
char *v1; // ebx
|
||
|
DJunk *v2; // edi
|
||
|
MultiQuests *v3; // esi
|
||
|
unsigned char *v4; // edi
|
||
|
int *v5; // ebp
|
||
|
|
||
|
v1 = a1;
|
||
|
v2 = sgJunk;
|
||
|
v3 = sgJunk[0].quests;
|
||
|
do
|
||
|
{
|
||
|
if ( v2->portal[0].x == -1 )
|
||
|
{
|
||
|
*v1++ = -1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
memcpy(v1, v2, 5u);
|
||
|
v1 += 5;
|
||
|
}
|
||
|
v2 = (DJunk *)((char *)v2 + 5);
|
||
|
}
|
||
|
while ( (signed int)v2 < (signed int)sgJunk[0].quests );
|
||
|
v4 = &quests[0]._qactive;
|
||
|
v5 = &questlist[0]._qflags;
|
||
|
do
|
||
|
{
|
||
|
if ( *(_BYTE *)v5 & 1 )
|
||
|
{
|
||
|
v3->qlog = v4[18];
|
||
|
v3->qstate = *v4;
|
||
|
v3->qvar1 = v4[13];
|
||
|
memcpy(v1, v3, 3u);
|
||
|
v1 += 3;
|
||
|
++v3;
|
||
|
}
|
||
|
v5 += 5;
|
||
|
v4 += 24;
|
||
|
}
|
||
|
while ( (signed int)v5 < (signed int)&questlist[16]._qflags );
|
||
|
return v1;
|
||
|
}
|
||
|
|
||
|
//----- (0043C019) --------------------------------------------------------
|
||
|
int __fastcall msg_comp_level(char *buffer, int size)
|
||
|
{
|
||
|
char *v2; // esi
|
||
|
int v3; // edi
|
||
|
int v4; // eax
|
||
|
|
||
|
v2 = buffer;
|
||
|
v3 = size - (_DWORD)buffer - 1;
|
||
|
v4 = encrypt_compress(buffer + 1, v3);
|
||
|
*v2 = v3 != v4;
|
||
|
return v4 + 1;
|
||
|
}
|
||
|
|
||
|
//----- (0043C035) --------------------------------------------------------
|
||
|
void __cdecl delta_init()
|
||
|
{
|
||
|
sgbDeltaChanged = 0;
|
||
|
memset(sgJunk, 255, 0x20u);
|
||
|
memset(sgLevels, 255, 0x13981u);
|
||
|
memset(sgLocals, 0, 0x6A40u);
|
||
|
deltaload = 0;
|
||
|
}
|
||
|
// 67618C: using guessed type char sgbDeltaChanged;
|
||
|
// 676190: using guessed type int deltaload;
|
||
|
|
||
|
//----- (0043C07C) --------------------------------------------------------
|
||
|
void __fastcall delta_kill_monster(int mi, unsigned char x, unsigned char y, unsigned char bLevel)
|
||
|
{
|
||
|
DMonsterStr *v4; // eax
|
||
|
char v5; // cl
|
||
|
|
||
|
if ( gbMaxPlayers != 1 )
|
||
|
{
|
||
|
v4 = &sgLevels[bLevel].monster[mi];
|
||
|
sgbDeltaChanged = 1;
|
||
|
v5 = monster[mi]._mdir;
|
||
|
v4->_mhitpoints = 0;
|
||
|
v4->_mx = x;
|
||
|
v4->_mdir = v5;
|
||
|
v4->_my = y;
|
||
|
}
|
||
|
}
|
||
|
// 67618C: using guessed type char sgbDeltaChanged;
|
||
|
// 679660: using guessed type char gbMaxPlayers;
|
||
|
|
||
|
//----- (0043C0C2) --------------------------------------------------------
|
||
|
void __fastcall delta_monster_hp(int mi, int hp, unsigned char bLevel)
|
||
|
{
|
||
|
DMonsterStr *v3; // eax
|
||
|
|
||
|
if ( gbMaxPlayers != 1 )
|
||
|
{
|
||
|
sgbDeltaChanged = 1;
|
||
|
v3 = &sgLevels[bLevel].monster[mi];
|
||
|
if ( v3->_mhitpoints > hp )
|
||
|
v3->_mhitpoints = hp;
|
||
|
}
|
||
|
}
|
||
|
// 67618C: using guessed type char sgbDeltaChanged;
|
||
|
// 679660: using guessed type char gbMaxPlayers;
|
||
|
|
||
|
//----- (0043C0F2) --------------------------------------------------------
|
||
|
void __fastcall delta_sync_monster(TCmdLocParam1 *packet, char level)
|
||
|
{
|
||
|
DMonsterStr *v2; // eax
|
||
|
char v3; // dl
|
||
|
|
||
|
if ( gbMaxPlayers != 1 )
|
||
|
{
|
||
|
sgbDeltaChanged = 1;
|
||
|
v2 = &sgLevels[(unsigned char)level].monster[(unsigned char)packet->bCmd];
|
||
|
if ( v2->_mhitpoints )
|
||
|
{
|
||
|
v2->_mx = packet->x;
|
||
|
v3 = packet->y;
|
||
|
v2->_mactive = -1;
|
||
|
v2->_my = v3;
|
||
|
v2->_menemy = packet->wParam1;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
// 67618C: using guessed type char sgbDeltaChanged;
|
||
|
// 679660: using guessed type char gbMaxPlayers;
|
||
|
|
||
|
//----- (0043C134) --------------------------------------------------------
|
||
|
void __fastcall delta_sync_golem(TCmdGolem *pG, int pnum, int bLevel)
|
||
|
{
|
||
|
DMonsterStr *v3; // eax
|
||
|
char v4; // dl
|
||
|
|
||
|
if ( gbMaxPlayers != 1 )
|
||
|
{
|
||
|
sgbDeltaChanged = 1;
|
||
|
v3 = &sgLevels[(unsigned char)bLevel].monster[pnum];
|
||
|
v3->_mx = pG->_mx;
|
||
|
v4 = pG->_my;
|
||
|
v3->_mactive = -1;
|
||
|
v3->_my = v4;
|
||
|
v3->_menemy = pG->_menemy;
|
||
|
v3->_mdir = pG->_mdir;
|
||
|
v3->_mhitpoints = pG->_mhitpoints;
|
||
|
}
|
||
|
}
|
||
|
// 67618C: using guessed type char sgbDeltaChanged;
|
||
|
// 679660: using guessed type char gbMaxPlayers;
|
||
|
|
||
|
//----- (0043C17D) --------------------------------------------------------
|
||
|
void __fastcall delta_leave_sync(unsigned char bLevel)
|
||
|
{
|
||
|
unsigned char v1; // bl
|
||
|
bool v2; // zf
|
||
|
int v3; // eax
|
||
|
int i; // ebp
|
||
|
int v5; // ecx
|
||
|
int v6; // esi
|
||
|
DMonsterStr *v7; // edi
|
||
|
|
||
|
v1 = bLevel;
|
||
|
if ( gbMaxPlayers != 1 )
|
||
|
{
|
||
|
v2 = currlevel == 0;
|
||
|
if ( !currlevel )
|
||
|
{
|
||
|
v3 = GetRndSeed();
|
||
|
v2 = currlevel == 0;
|
||
|
glSeedTbl[0] = v3;
|
||
|
}
|
||
|
if ( !v2 )
|
||
|
{
|
||
|
for ( i = 0; i < nummonsters; ++i )
|
||
|
{
|
||
|
v5 = monstactive[i];
|
||
|
v6 = monstactive[i];
|
||
|
if ( monster[v6]._mhitpoints )
|
||
|
{
|
||
|
sgbDeltaChanged = 1;
|
||
|
v7 = &sgLevels[v1].monster[v5];
|
||
|
v7->_mx = monster[v6]._mx;
|
||
|
v7->_my = monster[v6]._my;
|
||
|
v7->_mdir = monster[v6]._mdir;
|
||
|
v7->_menemy = encode_enemy(v5);
|
||
|
v7->_mhitpoints = monster[v6]._mhitpoints;
|
||
|
v7->_mactive = monster[v6]._msquelch;
|
||
|
}
|
||
|
}
|
||
|
memcpy(&sgLocals[v1], automapview, 0x640u);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
// 43C17D: could not find valid save-restore pair for edi
|
||
|
// 67618C: using guessed type char sgbDeltaChanged;
|
||
|
// 679660: using guessed type char gbMaxPlayers;
|
||
|
|
||
|
//----- (0043C24F) --------------------------------------------------------
|
||
|
bool __fastcall delta_portal_inited(int portal_num)
|
||
|
{
|
||
|
return sgJunk[0].portal[portal_num].x == -1;
|
||
|
}
|
||
|
|
||
|
//----- (0043C25D) --------------------------------------------------------
|
||
|
bool __fastcall delta_quest_inited(int quest_num)
|
||
|
{
|
||
|
return sgJunk[0].quests[quest_num].qstate != -1;
|
||
|
}
|
||
|
|
||
|
//----- (0043C26B) --------------------------------------------------------
|
||
|
void __fastcall DeltaAddItem(int ii)
|
||
|
{
|
||
|
int v1; // eax
|
||
|
int v2; // ecx
|
||
|
signed int v3; // ebp
|
||
|
DLevel *v4; // edx
|
||
|
DLevel *v5; // edi
|
||
|
char v6; // bl
|
||
|
int v7; // esi
|
||
|
signed int v8; // esi
|
||
|
int v9; // eax
|
||
|
char v10; // cl
|
||
|
char v11; // cl
|
||
|
|
||
|
v1 = ii;
|
||
|
if ( gbMaxPlayers != 1 )
|
||
|
{
|
||
|
v2 = currlevel;
|
||
|
v3 = 0;
|
||
|
v4 = &sgLevels[v2];
|
||
|
v5 = &sgLevels[v2];
|
||
|
while ( 1 )
|
||
|
{
|
||
|
v6 = v5->item[0].bCmd;
|
||
|
if ( v5->item[0].bCmd != -1 )
|
||
|
{
|
||
|
v7 = v1;
|
||
|
if ( (unsigned short)v5->item[0].wIndx == item[v1].IDidx
|
||
|
&& v5->item[0].wCI == item[v7]._iCreateInfo
|
||
|
&& v5->item[0].dwSeed == item[v7]._iSeed
|
||
|
&& (v6 == 1 || !v6) )
|
||
|
{
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
++v3;
|
||
|
v5 = (DLevel *)((char *)v5 + 22);
|
||
|
if ( v3 >= 127 )
|
||
|
{
|
||
|
v8 = 0;
|
||
|
while ( v4->item[0].bCmd != -1 )
|
||
|
{
|
||
|
++v8;
|
||
|
v4 = (DLevel *)((char *)v4 + 22);
|
||
|
if ( v8 >= 127 )
|
||
|
return;
|
||
|
}
|
||
|
v4->item[0].bCmd = 0;
|
||
|
v9 = 368 * v1;
|
||
|
v10 = *((_BYTE *)&item[0]._ix + v9);
|
||
|
sgbDeltaChanged = 1;
|
||
|
v4->item[0].x = v10;
|
||
|
v4->item[0].y = *((_BYTE *)&item[0]._iy + v9);
|
||
|
v4->item[0].wIndx = *(_WORD *)((char *)&item[0].IDidx + v9);
|
||
|
v4->item[0].wCI = *(short *)((char *)&item[0]._iCreateInfo + v9);
|
||
|
v4->item[0].dwSeed = *(int *)((char *)&item[0]._iSeed + v9);
|
||
|
v4->item[0].bId = *((_BYTE *)&item[0]._iIdentified + v9);
|
||
|
v4->item[0].bDur = *((_BYTE *)&item[0]._iDurability + v9);
|
||
|
v4->item[0].bMDur = *((_BYTE *)&item[0]._iMaxDur + v9);
|
||
|
v4->item[0].bCh = *((_BYTE *)&item[0]._iCharges + v9);
|
||
|
v11 = *((_BYTE *)&item[0]._iMaxCharges + v9);
|
||
|
_LOWORD(v9) = *(_WORD *)((char *)&item[0]._ivalue + v9);
|
||
|
v4->item[0].bMCh = v11;
|
||
|
v4->item[0].wValue = v9;
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
// 67618C: using guessed type char sgbDeltaChanged;
|
||
|
// 679660: using guessed type char gbMaxPlayers;
|
||
|
|
||
|
//----- (0043C372) --------------------------------------------------------
|
||
|
void __cdecl DeltaSaveLevel()
|
||
|
{
|
||
|
int v0; // eax
|
||
|
int v1; // edx
|
||
|
int *v2; // ecx
|
||
|
unsigned char v3; // cl
|
||
|
|
||
|
if ( gbMaxPlayers != 1 )
|
||
|
{
|
||
|
v0 = myplr;
|
||
|
v1 = 0;
|
||
|
v2 = &plr[0]._pGFXLoad;
|
||
|
do
|
||
|
{
|
||
|
if ( v1 != v0 )
|
||
|
*v2 = 0;
|
||
|
v2 += 5430;
|
||
|
++v1;
|
||
|
}
|
||
|
while ( (signed int)v2 < (signed int)&plr[4]._pGFXLoad );
|
||
|
v3 = currlevel;
|
||
|
plr[v0]._pLvlVisited[currlevel] = 1;
|
||
|
delta_leave_sync(v3);
|
||
|
}
|
||
|
}
|
||
|
// 679660: using guessed type char gbMaxPlayers;
|
||
|
|
||
|
//----- (0043C3BA) --------------------------------------------------------
|
||
|
void __cdecl DeltaLoadLevel()
|
||
|
{
|
||
|
int v0; // ebx
|
||
|
int *v1; // esi
|
||
|
int v2; // eax
|
||
|
int v3; // ecx
|
||
|
int v4; // edx
|
||
|
int v5; // edi
|
||
|
char v6; // al
|
||
|
int v7; // eax
|
||
|
signed int v8; // esi
|
||
|
int v9; // eax
|
||
|
char v10; // cl
|
||
|
int v11; // eax
|
||
|
char *v12; // edx
|
||
|
int v13; // eax
|
||
|
int v14; // ebx
|
||
|
int *v15; // edx
|
||
|
unsigned short v16; // cx
|
||
|
int v17; // ST1C_4
|
||
|
int v18; // ST18_4
|
||
|
int v19; // eax
|
||
|
int v20; // ecx
|
||
|
int v21; // edx
|
||
|
int v22; // eax
|
||
|
int v23; // eax
|
||
|
int v24; // esi
|
||
|
int v25; // edi
|
||
|
int v26; // eax
|
||
|
int v27; // eax
|
||
|
int v28; // esi
|
||
|
unsigned char v29; // al
|
||
|
int j; // esi
|
||
|
int v31; // eax
|
||
|
signed int v32; // [esp+0h] [ebp-24h]
|
||
|
int v33; // [esp+4h] [ebp-20h]
|
||
|
int o2; // [esp+8h] [ebp-1Ch]
|
||
|
int i; // [esp+Ch] [ebp-18h]
|
||
|
signed int v36; // [esp+10h] [ebp-14h]
|
||
|
int v37; // [esp+14h] [ebp-10h]
|
||
|
signed int v38; // [esp+18h] [ebp-Ch]
|
||
|
signed int v39; // [esp+1Ch] [ebp-8h]
|
||
|
int v40; // [esp+20h] [ebp-4h]
|
||
|
signed int v41; // [esp+20h] [ebp-4h]
|
||
|
|
||
|
if ( gbMaxPlayers != 1 )
|
||
|
{
|
||
|
deltaload = 1;
|
||
|
if ( currlevel )
|
||
|
{
|
||
|
v0 = 0;
|
||
|
if ( nummonsters > 0 )
|
||
|
{
|
||
|
v40 = 0;
|
||
|
v1 = &monster[0]._mfuty;
|
||
|
do
|
||
|
{
|
||
|
if ( sgLevels[currlevel].monster[v40]._mx != -1 )
|
||
|
{
|
||
|
M_ClearSquares(v0);
|
||
|
v2 = v40 * 9 + 4721 * currlevel;
|
||
|
v3 = *((unsigned char *)&sgLevels[0].monster[0]._mx + v2);
|
||
|
v4 = *((unsigned char *)&sgLevels[0].monster[0]._my + v2);
|
||
|
v5 = *(int *)((char *)&sgLevels[0].monster[0]._mhitpoints + v2);
|
||
|
*(v1 - 3) = v3;
|
||
|
*(v1 - 2) = v4;
|
||
|
v1[1] = v3;
|
||
|
v1[2] = v4;
|
||
|
*(v1 - 1) = v3;
|
||
|
*v1 = v4;
|
||
|
if ( v5 != -1 )
|
||
|
v1[26] = v5;
|
||
|
if ( v5 )
|
||
|
{
|
||
|
decode_enemy(v0, *((unsigned char *)&sgLevels[0].monster[0]._menemy + v2));
|
||
|
v7 = *(v1 - 3);
|
||
|
if ( v7 && v7 != 1 || *(v1 - 2) )
|
||
|
dMonster[0][*(v1 - 2) + 112 * v7] = v0 + 1;
|
||
|
if ( (signed int)v1 >= (signed int)&monster[4]._mfuty )
|
||
|
{
|
||
|
M_StartStand(v0, v1[7]);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
MAI_Golum(v0);
|
||
|
v1[28] |= 0x30u;
|
||
|
}
|
||
|
*((_BYTE *)v1 + 116) = sgLevels[currlevel].monster[v40]._mactive;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v1[1] = v3;
|
||
|
v1[2] = v4;
|
||
|
M_ClearSquares(v0);
|
||
|
if ( *((_BYTE *)v1 + 108) != 27 )
|
||
|
{
|
||
|
if ( *((_BYTE *)v1 + 144) )
|
||
|
v6 = *((_BYTE *)v1 + 146);
|
||
|
else
|
||
|
v6 = *(_BYTE *)(v1[44] + 317);
|
||
|
AddDead(*(v1 - 3), *(v1 - 2), v6, (direction)v1[7]);
|
||
|
}
|
||
|
v1[16] = 1;
|
||
|
M_UpdateLeader(v0);
|
||
|
}
|
||
|
}
|
||
|
++v40;
|
||
|
++v0;
|
||
|
v1 += 57;
|
||
|
}
|
||
|
while ( v0 < nummonsters );
|
||
|
}
|
||
|
memcpy(automapview, &sgLocals[currlevel], 0x640u);
|
||
|
}
|
||
|
v8 = 0;
|
||
|
i = 0;
|
||
|
v32 = 0;
|
||
|
do
|
||
|
{
|
||
|
v9 = v8 + 4721 * currlevel;
|
||
|
v10 = *(&sgLevels[0].item[0].bCmd + v9);
|
||
|
if ( v10 != -1 )
|
||
|
{
|
||
|
if ( v10 == 1 )
|
||
|
{
|
||
|
v11 = FindGetItem(
|
||
|
*(unsigned short *)((char *)&sgLevels[0].item[0].wIndx + v9),
|
||
|
*(short *)((char *)&sgLevels[0].item[0].wCI + v9),
|
||
|
*(int *)((char *)&sgLevels[0].item[0].dwSeed + v9));
|
||
|
if ( v11 != -1 )
|
||
|
{
|
||
|
v12 = &dItem[item[v11]._ix][item[v11]._iy];
|
||
|
if ( *v12 == v11 + 1 )
|
||
|
*v12 = 0;
|
||
|
DeleteItem(v11, i);
|
||
|
}
|
||
|
}
|
||
|
v13 = v8 + 4721 * currlevel;
|
||
|
if ( *(&sgLevels[0].item[0].bCmd + v13) == 2 )
|
||
|
{
|
||
|
v14 = itemavail[0];
|
||
|
v33 = itemavail[0];
|
||
|
v15 = &itemavail[-numitems + 126];
|
||
|
itemactive[numitems] = itemavail[0];
|
||
|
v16 = *(short *)((char *)&sgLevels[0].item[0].wIndx + v13);
|
||
|
itemavail[0] = *v15;
|
||
|
if ( v16 == IDI_EAR )
|
||
|
{
|
||
|
RecreateEar(
|
||
|
v14,
|
||
|
*(short *)((char *)&sgLevels[0].item[0].wCI + v13),
|
||
|
*(int *)((char *)&sgLevels[0].item[0].dwSeed + v13),
|
||
|
*(&sgLevels[0].item[0].bId + v13),
|
||
|
*((unsigned char *)&sgLevels[0].item[0].bDur + v13),
|
||
|
*((unsigned char *)&sgLevels[0].item[0].bMDur + v13),
|
||
|
*((unsigned char *)&sgLevels[0].item[0].bCh + v13),
|
||
|
*((unsigned char *)&sgLevels[0].item[0].bMCh + v13),
|
||
|
*(unsigned short *)((char *)&sgLevels[0].item[0].wValue + v13),
|
||
|
*(int *)((char *)&sgLevels[0].item[0].dwBuff + v13));
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v17 = *(unsigned short *)((char *)&sgLevels[0].item[0].wValue + v13);
|
||
|
v18 = *(int *)((char *)&sgLevels[0].item[0].dwSeed + v13);
|
||
|
_LOWORD(v13) = *(short *)((char *)&sgLevels[0].item[0].wCI + v13);
|
||
|
RecreateItem(v14, v16, v13, v18, v17);
|
||
|
v19 = v8 + 4721 * currlevel;
|
||
|
if ( *(&sgLevels[0].item[0].bId + v19) )
|
||
|
item[v14]._iIdentified = 1;
|
||
|
v20 = v14;
|
||
|
item[v20]._iDurability = *((unsigned char *)&sgLevels[0].item[0].bDur + v19);
|
||
|
item[v20]._iMaxDur = *((unsigned char *)&sgLevels[0].item[0].bMDur + v19);
|
||
|
v21 = *((unsigned char *)&sgLevels[0].item[0].bCh + v19);
|
||
|
v22 = *((unsigned char *)&sgLevels[0].item[0].bMCh + v19);
|
||
|
item[v20]._iCharges = v21;
|
||
|
item[v20]._iMaxCharges = v22;
|
||
|
}
|
||
|
v23 = v8 + 4721 * currlevel;
|
||
|
v24 = *((unsigned char *)&sgLevels[0].item[0].x + v23);
|
||
|
v25 = *((unsigned char *)&sgLevels[0].item[0].y + v23);
|
||
|
if ( !CanPut(v24, v25) )
|
||
|
{
|
||
|
v39 = 0;
|
||
|
v26 = -1;
|
||
|
v41 = 1;
|
||
|
v36 = -1;
|
||
|
do
|
||
|
{
|
||
|
if ( v39 )
|
||
|
break;
|
||
|
v37 = v26;
|
||
|
while ( v26 <= v41 && !v39 )
|
||
|
{
|
||
|
o2 = v25 + v37;
|
||
|
v38 = v36;
|
||
|
do
|
||
|
{
|
||
|
if ( v39 )
|
||
|
break;
|
||
|
if ( CanPut(v38 + v24, o2) )
|
||
|
{
|
||
|
v25 = o2;
|
||
|
v39 = 1;
|
||
|
v24 += v38;
|
||
|
}
|
||
|
++v38;
|
||
|
v14 = v33;
|
||
|
}
|
||
|
while ( v38 <= v41 );
|
||
|
v26 = ++v37;
|
||
|
}
|
||
|
++v41;
|
||
|
v26 = v36-- - 1;
|
||
|
}
|
||
|
while ( v36 > -50 );
|
||
|
}
|
||
|
v27 = v14;
|
||
|
item[v27]._ix = v24;
|
||
|
item[v27]._iy = v25;
|
||
|
dItem[v24][v25] = v14 + 1;
|
||
|
RespawnItem(v14, 0);
|
||
|
++numitems;
|
||
|
v8 = v32;
|
||
|
}
|
||
|
}
|
||
|
++i;
|
||
|
v8 += 22;
|
||
|
v32 = v8;
|
||
|
}
|
||
|
while ( v8 < 2794 );
|
||
|
if ( currlevel )
|
||
|
{
|
||
|
v28 = 0;
|
||
|
do
|
||
|
{
|
||
|
v29 = sgLevels[currlevel].object[v28].bCmd;
|
||
|
if ( v29 >= CMD_OPENDOOR )
|
||
|
{
|
||
|
if ( v29 <= CMD_PLROPOBJ )
|
||
|
{
|
||
|
SyncOpObject(-1, v29, v28);
|
||
|
}
|
||
|
else if ( v29 == CMD_BREAKOBJ )
|
||
|
{
|
||
|
SyncBreakObj(-1, v28);
|
||
|
}
|
||
|
}
|
||
|
++v28;
|
||
|
}
|
||
|
while ( v28 < 127 );
|
||
|
for ( j = 0; j < nobjects; ++j )
|
||
|
{
|
||
|
v31 = object[objectactive[j]]._otype;
|
||
|
if ( v31 == OBJ_TRAPL || v31 == OBJ_TRAPR )
|
||
|
Obj_Trap(objectactive[j]);
|
||
|
}
|
||
|
}
|
||
|
deltaload = 0;
|
||
|
}
|
||
|
}
|
||
|
// 676190: using guessed type int deltaload;
|
||
|
// 679660: using guessed type char gbMaxPlayers;
|
||
|
|
||
|
//----- (0043C873) --------------------------------------------------------
|
||
|
void __fastcall NetSendCmd(unsigned char bHiPri, unsigned char bCmd)
|
||
|
{
|
||
|
TCmd cmd; // [esp+3h] [ebp-1h]
|
||
|
|
||
|
cmd.bCmd = bCmd;
|
||
|
if ( bHiPri )
|
||
|
NetSendHiPri((unsigned char *)&cmd, 1u);
|
||
|
else
|
||
|
NetSendLoPri((unsigned char *)&cmd, 1u);
|
||
|
}
|
||
|
|
||
|
//----- (0043C891) --------------------------------------------------------
|
||
|
void __fastcall NetSendCmdGolem(unsigned char mx, unsigned char my, unsigned char dir, unsigned char menemy, int hp, int cl)
|
||
|
{
|
||
|
TCmdGolem cmd; // [esp+0h] [ebp-Ch]
|
||
|
|
||
|
cmd._mx = mx;
|
||
|
cmd._mdir = dir;
|
||
|
cmd._menemy = menemy;
|
||
|
cmd._mhitpoints = hp;
|
||
|
cmd._my = my;
|
||
|
cmd.bCmd = CMD_AWAKEGOLEM;
|
||
|
cmd._currlevel = cl;
|
||
|
NetSendLoPri((unsigned char *)&cmd, 0xAu);
|
||
|
}
|
||
|
|
||
|
//----- (0043C8C7) --------------------------------------------------------
|
||
|
void __fastcall NetSendCmdLoc(unsigned char bHiPri, unsigned char bCmd, unsigned char x, unsigned char y)
|
||
|
{
|
||
|
TCmdLoc cmd; // [esp+1h] [ebp-3h]
|
||
|
|
||
|
cmd.bCmd = bCmd;
|
||
|
cmd.x = x;
|
||
|
cmd.y = y;
|
||
|
if ( bHiPri )
|
||
|
NetSendHiPri((unsigned char *)&cmd, 3u);
|
||
|
else
|
||
|
NetSendLoPri((unsigned char *)&cmd, 3u);
|
||
|
}
|
||
|
|
||
|
//----- (0043C8F3) --------------------------------------------------------
|
||
|
void __fastcall NetSendCmdLocParam1(unsigned char bHiPri, unsigned char bCmd, unsigned char x, unsigned char y, int wParam1)
|
||
|
{
|
||
|
TCmdLocParam1 cmd; // [esp+0h] [ebp-8h]
|
||
|
|
||
|
cmd.bCmd = bCmd;
|
||
|
cmd.x = x;
|
||
|
cmd.y = y;
|
||
|
cmd.wParam1 = wParam1;
|
||
|
if ( bHiPri )
|
||
|
NetSendHiPri((unsigned char *)&cmd, 5u);
|
||
|
else
|
||
|
NetSendLoPri((unsigned char *)&cmd, 5u);
|
||
|
}
|
||
|
|
||
|
//----- (0043C928) --------------------------------------------------------
|
||
|
void __fastcall NetSendCmdLocParam2(unsigned char bHiPri, unsigned char bCmd, unsigned char x, unsigned char y, int wParam1, int wParam2)
|
||
|
{
|
||
|
TCmdLocParam2 cmd; // [esp+0h] [ebp-8h]
|
||
|
|
||
|
cmd.bCmd = bCmd;
|
||
|
cmd.x = x;
|
||
|
cmd.y = y;
|
||
|
cmd.wParam1 = wParam1;
|
||
|
cmd.wParam2 = wParam2;
|
||
|
if ( bHiPri )
|
||
|
NetSendHiPri((unsigned char *)&cmd, 7u);
|
||
|
else
|
||
|
NetSendLoPri((unsigned char *)&cmd, 7u);
|
||
|
}
|
||
|
|
||
|
//----- (0043C965) --------------------------------------------------------
|
||
|
void __fastcall NetSendCmdLocParam3(unsigned char bHiPri, unsigned char bCmd, unsigned char x, unsigned char y, int wParam1, int wParam2, int wParam3)
|
||
|
{
|
||
|
TCmdLocParam3 cmd; // [esp+0h] [ebp-Ch]
|
||
|
|
||
|
cmd.bCmd = bCmd;
|
||
|
cmd.x = x;
|
||
|
cmd.y = y;
|
||
|
cmd.wParam1 = wParam1;
|
||
|
cmd.wParam2 = wParam2;
|
||
|
cmd.wParam3 = wParam3;
|
||
|
if ( bHiPri )
|
||
|
NetSendHiPri((unsigned char *)&cmd, 9u);
|
||
|
else
|
||
|
NetSendLoPri((unsigned char *)&cmd, 9u);
|
||
|
}
|
||
|
|
||
|
//----- (0043C9AB) --------------------------------------------------------
|
||
|
void __fastcall NetSendCmdParam1(unsigned char bHiPri, unsigned char bCmd, unsigned short wParam1)
|
||
|
{
|
||
|
TCmdParam1 cmd; // [esp+1h] [ebp-3h]
|
||
|
|
||
|
cmd.bCmd = bCmd;
|
||
|
cmd.wParam1 = wParam1;
|
||
|
if ( bHiPri )
|
||
|
NetSendHiPri((unsigned char *)&cmd, 3u);
|
||
|
else
|
||
|
NetSendLoPri((unsigned char *)&cmd, 3u);
|
||
|
}
|
||
|
|
||
|
//----- (0043C9D3) --------------------------------------------------------
|
||
|
void __fastcall NetSendCmdParam2(unsigned char bHiPri, unsigned char bCmd, unsigned short wParam1, unsigned short wParam2)
|
||
|
{
|
||
|
TCmdParam2 cmd; // [esp+0h] [ebp-8h]
|
||
|
|
||
|
cmd.bCmd = bCmd;
|
||
|
cmd.wParam1 = wParam1;
|
||
|
cmd.wParam2 = wParam2;
|
||
|
if ( bHiPri )
|
||
|
NetSendHiPri((unsigned char *)&cmd, 5u);
|
||
|
else
|
||
|
NetSendLoPri((unsigned char *)&cmd, 5u);
|
||
|
}
|
||
|
|
||
|
//----- (0043CA04) --------------------------------------------------------
|
||
|
void __fastcall NetSendCmdParam3(unsigned char bHiPri, unsigned char bCmd, unsigned short wParam1, unsigned short wParam2, int wParam3)
|
||
|
{
|
||
|
TCmdParam3 cmd; // [esp+0h] [ebp-8h]
|
||
|
|
||
|
cmd.bCmd = bCmd;
|
||
|
cmd.wParam1 = wParam1;
|
||
|
cmd.wParam2 = wParam2;
|
||
|
cmd.wParam3 = wParam3;
|
||
|
if ( bHiPri )
|
||
|
NetSendHiPri((unsigned char *)&cmd, 7u);
|
||
|
else
|
||
|
NetSendLoPri((unsigned char *)&cmd, 7u);
|
||
|
}
|
||
|
|
||
|
//----- (0043CA3D) --------------------------------------------------------
|
||
|
void __fastcall NetSendCmdQuest(unsigned char bHiPri, unsigned char q)
|
||
|
{
|
||
|
int v2; // eax
|
||
|
char v3; // dl
|
||
|
TCmdQuest cmd; // [esp+0h] [ebp-8h]
|
||
|
|
||
|
cmd.q = q;
|
||
|
cmd.bCmd = CMD_SYNCQUEST;
|
||
|
v2 = 24 * q;
|
||
|
cmd.qstate = *(&quests[0]._qactive + v2);
|
||
|
v3 = *((_BYTE *)&quests[0]._qlog + v2);
|
||
|
_LOBYTE(v2) = *(&quests[0]._qvar1 + v2);
|
||
|
cmd.qlog = v3;
|
||
|
cmd.qvar1 = v2;
|
||
|
if ( bHiPri )
|
||
|
NetSendHiPri((unsigned char *)&cmd, 5u);
|
||
|
else
|
||
|
NetSendLoPri((unsigned char *)&cmd, 5u);
|
||
|
}
|
||
|
|
||
|
//----- (0043CA84) --------------------------------------------------------
|
||
|
void __fastcall NetSendCmdGItem(unsigned char bHiPri, unsigned char bCmd, unsigned char mast, unsigned char pnum, int ii)
|
||
|
{
|
||
|
int v5; // eax
|
||
|
bool v6; // zf
|
||
|
short v7; // dx
|
||
|
short v8; // bx
|
||
|
int v9; // esi
|
||
|
int v10; // esi
|
||
|
char v11; // dl
|
||
|
short v12; // ax
|
||
|
TCmdGItem cmd; // [esp+4h] [ebp-20h]
|
||
|
|
||
|
cmd.bCmd = bCmd;
|
||
|
cmd.bPnum = pnum;
|
||
|
cmd.bMaster = mast;
|
||
|
cmd.bLevel = currlevel;
|
||
|
cmd.bCursitem = ii;
|
||
|
cmd.dwTime = 0;
|
||
|
v5 = (unsigned char)ii;
|
||
|
cmd.x = item[v5]._ix;
|
||
|
cmd.y = item[v5]._iy;
|
||
|
v6 = item[v5].IDidx == IDI_EAR;
|
||
|
cmd.wIndx = item[v5].IDidx;
|
||
|
if ( v6 )
|
||
|
{
|
||
|
_LOBYTE(v7) = 0;
|
||
|
_HIBYTE(v7) = item[v5]._iName[7];
|
||
|
_LOBYTE(v8) = 0;
|
||
|
_HIBYTE(v8) = item[v5]._iName[18];
|
||
|
v9 = item[v5]._iName[10];
|
||
|
cmd.wCI = item[v5]._iName[8] | v7;
|
||
|
cmd.dwSeed = item[v5]._iName[12] | ((item[v5]._iName[11] | ((v9 | (item[v5]._iName[9] << 8)) << 8)) << 8);
|
||
|
cmd.bId = item[v5]._iName[13];
|
||
|
cmd.bDur = item[v5]._iName[14];
|
||
|
cmd.bMDur = item[v5]._iName[15];
|
||
|
cmd.bCh = item[v5]._iName[16];
|
||
|
cmd.bMCh = item[v5]._iName[17];
|
||
|
v10 = item[v5]._iName[20];
|
||
|
cmd.wValue = _LOWORD(item[v5]._ivalue) | v8 | ((_LOWORD(item[v5]._iCurs) - 19) << 6);
|
||
|
cmd.dwBuff = item[v5]._iName[22] | ((item[v5]._iName[21] | ((v10 | (item[v5]._iName[19] << 8)) << 8)) << 8);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
cmd.wCI = item[v5]._iCreateInfo;
|
||
|
cmd.dwSeed = item[v5]._iSeed;
|
||
|
cmd.bId = item[v5]._iIdentified;
|
||
|
cmd.bDur = item[v5]._iDurability;
|
||
|
cmd.bMDur = item[v5]._iMaxDur;
|
||
|
cmd.bCh = item[v5]._iCharges;
|
||
|
v11 = item[v5]._iMaxCharges;
|
||
|
v12 = item[v5]._ivalue;
|
||
|
cmd.bMCh = v11;
|
||
|
cmd.wValue = v12;
|
||
|
}
|
||
|
if ( bHiPri )
|
||
|
NetSendHiPri((unsigned char *)&cmd, 0x1Eu);
|
||
|
else
|
||
|
NetSendLoPri((unsigned char *)&cmd, 0x1Eu);
|
||
|
}
|
||
|
|
||
|
//----- (0043CC09) --------------------------------------------------------
|
||
|
void __fastcall NetSendCmdGItem2(unsigned char usonly, unsigned char bCmd, unsigned char mast, unsigned char pnum, struct TCmdGItem *p)
|
||
|
{
|
||
|
unsigned char v5; // bl
|
||
|
int v6; // esi
|
||
|
int v7; // eax
|
||
|
TCmdGItem cmd; // [esp+8h] [ebp-20h]
|
||
|
|
||
|
v5 = bCmd;
|
||
|
v6 = usonly;
|
||
|
memcpy(&cmd, p, 0x1Eu);
|
||
|
cmd.bPnum = pnum;
|
||
|
cmd.bCmd = v5;
|
||
|
cmd.bMaster = mast;
|
||
|
if ( !v6 )
|
||
|
{
|
||
|
cmd.dwTime = 0;
|
||
|
NetSendHiPri((unsigned char *)&cmd, 0x1Eu);
|
||
|
return;
|
||
|
}
|
||
|
v7 = GetTickCount();
|
||
|
if ( cmd.dwTime )
|
||
|
{
|
||
|
if ( v7 - cmd.dwTime > 5000 )
|
||
|
return;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
cmd.dwTime = v7;
|
||
|
}
|
||
|
multi_msg_add(&cmd.bCmd, 0x1Eu);
|
||
|
}
|
||
|
|
||
|
//----- (0043CC74) --------------------------------------------------------
|
||
|
bool __fastcall NetSendCmdReq2(unsigned char bCmd, unsigned char mast, unsigned char pnum, struct TCmdGItem *p)
|
||
|
{
|
||
|
unsigned char v4; // bl
|
||
|
int v5; // eax
|
||
|
TCmdGItem cmd; // [esp+4h] [ebp-24h]
|
||
|
unsigned char v8; // [esp+24h] [ebp-4h]
|
||
|
|
||
|
v4 = mast;
|
||
|
v8 = bCmd;
|
||
|
memcpy(&cmd, p, 0x1Eu);
|
||
|
cmd.bCmd = v8;
|
||
|
cmd.bPnum = pnum;
|
||
|
cmd.bMaster = v4;
|
||
|
v5 = GetTickCount();
|
||
|
if ( !cmd.dwTime )
|
||
|
{
|
||
|
cmd.dwTime = v5;
|
||
|
LABEL_3:
|
||
|
multi_msg_add(&cmd.bCmd, 0x1Eu);
|
||
|
return 1;
|
||
|
}
|
||
|
if ( v5 - cmd.dwTime <= 5000 )
|
||
|
goto LABEL_3;
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
//----- (0043CCCF) --------------------------------------------------------
|
||
|
void __fastcall NetSendCmdExtra(struct TCmdGItem *p)
|
||
|
{
|
||
|
TCmdGItem cmd; // [esp+0h] [ebp-20h]
|
||
|
|
||
|
memcpy(&cmd, p, 0x1Eu);
|
||
|
cmd.dwTime = 0;
|
||
|
cmd.bCmd = CMD_ITEMEXTRA;
|
||
|
NetSendHiPri((unsigned char *)&cmd, 0x1Eu);
|
||
|
}
|
||
|
|
||
|
//----- (0043CCF8) --------------------------------------------------------
|
||
|
void __fastcall NetSendCmdPItem(unsigned char bHiPri, unsigned char bCmd, unsigned char x, unsigned char y)
|
||
|
{
|
||
|
int v4; // eax
|
||
|
short *v5; // edx
|
||
|
bool v6; // zf
|
||
|
short v7; // dx
|
||
|
short v8; // bx
|
||
|
int v9; // esi
|
||
|
int v10; // esi
|
||
|
char v11; // dl
|
||
|
short v12; // ax
|
||
|
TCmdPItem cmd; // [esp+4h] [ebp-18h]
|
||
|
|
||
|
cmd.bCmd = bCmd;
|
||
|
cmd.x = x;
|
||
|
cmd.y = y;
|
||
|
v4 = myplr;
|
||
|
v5 = (short *)&plr[myplr].HoldItem.IDidx;
|
||
|
v6 = *(_DWORD *)v5 == IDI_EAR;
|
||
|
cmd.wIndx = *v5;
|
||
|
if ( v6 )
|
||
|
{
|
||
|
_LOBYTE(v7) = 0;
|
||
|
_HIBYTE(v7) = plr[v4].HoldItem._iName[7];
|
||
|
_LOBYTE(v8) = 0;
|
||
|
_HIBYTE(v8) = plr[v4].HoldItem._iName[18];
|
||
|
v9 = plr[v4].HoldItem._iName[10];
|
||
|
cmd.wCI = plr[v4].HoldItem._iName[8] | v7;
|
||
|
cmd.dwSeed = plr[v4].HoldItem._iName[12] | ((plr[v4].HoldItem._iName[11] | ((v9 | (plr[v4].HoldItem._iName[9] << 8)) << 8)) << 8);
|
||
|
cmd.bId = plr[v4].HoldItem._iName[13];
|
||
|
cmd.bDur = plr[v4].HoldItem._iName[14];
|
||
|
cmd.bMDur = plr[v4].HoldItem._iName[15];
|
||
|
cmd.bCh = plr[v4].HoldItem._iName[16];
|
||
|
cmd.bMCh = plr[v4].HoldItem._iName[17];
|
||
|
v10 = plr[v4].HoldItem._iName[20];
|
||
|
cmd.wValue = _LOWORD(plr[v4].HoldItem._ivalue) | v8 | ((_LOWORD(plr[v4].HoldItem._iCurs) - 19) << 6);
|
||
|
cmd.dwBuff = plr[v4].HoldItem._iName[22] | ((plr[v4].HoldItem._iName[21] | ((v10 | (plr[v4].HoldItem._iName[19] << 8)) << 8)) << 8);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
cmd.wCI = plr[v4].HoldItem._iCreateInfo;
|
||
|
cmd.dwSeed = plr[v4].HoldItem._iSeed;
|
||
|
cmd.bId = plr[v4].HoldItem._iIdentified;
|
||
|
cmd.bDur = plr[v4].HoldItem._iDurability;
|
||
|
cmd.bMDur = plr[v4].HoldItem._iMaxDur;
|
||
|
cmd.bCh = plr[v4].HoldItem._iCharges;
|
||
|
v11 = plr[v4].HoldItem._iMaxCharges;
|
||
|
v12 = plr[v4].HoldItem._ivalue;
|
||
|
cmd.bMCh = v11;
|
||
|
cmd.wValue = v12;
|
||
|
}
|
||
|
if ( bHiPri )
|
||
|
NetSendHiPri((unsigned char *)&cmd, 0x16u);
|
||
|
else
|
||
|
NetSendLoPri((unsigned char *)&cmd, 0x16u);
|
||
|
}
|
||
|
|
||
|
//----- (0043CE5B) --------------------------------------------------------
|
||
|
void __fastcall NetSendCmdChItem(unsigned char bHiPri, unsigned char bLoc)
|
||
|
{
|
||
|
short v2; // dx
|
||
|
char v3; // al
|
||
|
TCmdChItem cmd; // [esp+0h] [ebp-Ch]
|
||
|
|
||
|
cmd.bLoc = bLoc;
|
||
|
v2 = plr[myplr].HoldItem.IDidx;
|
||
|
cmd.bCmd = CMD_CHANGEPLRITEMS;
|
||
|
cmd.wIndx = v2;
|
||
|
cmd.wCI = plr[myplr].HoldItem._iCreateInfo;
|
||
|
v3 = plr[myplr].HoldItem._iIdentified;
|
||
|
cmd.dwSeed = plr[myplr].HoldItem._iSeed;
|
||
|
cmd.bId = v3;
|
||
|
if ( bHiPri )
|
||
|
NetSendHiPri((unsigned char *)&cmd, 0xBu);
|
||
|
else
|
||
|
NetSendLoPri((unsigned char *)&cmd, 0xBu);
|
||
|
}
|
||
|
|
||
|
//----- (0043CEB2) --------------------------------------------------------
|
||
|
void __fastcall NetSendCmdDelItem(unsigned char bHiPri, unsigned char bLoc)
|
||
|
{
|
||
|
TCmdDelItem cmd; // [esp+2h] [ebp-2h]
|
||
|
|
||
|
cmd.bLoc = bLoc;
|
||
|
cmd.bCmd = CMD_DELPLRITEMS;
|
||
|
if ( bHiPri )
|
||
|
NetSendHiPri((unsigned char *)&cmd, 2u);
|
||
|
else
|
||
|
NetSendLoPri((unsigned char *)&cmd, 2u);
|
||
|
}
|
||
|
|
||
|
//----- (0043CED4) --------------------------------------------------------
|
||
|
void __fastcall NetSendCmdDItem(unsigned char bHiPri, int ii)
|
||
|
{
|
||
|
int v2; // eax
|
||
|
short *v3; // edx
|
||
|
bool v4; // zf
|
||
|
short v5; // dx
|
||
|
short v6; // bx
|
||
|
int v7; // esi
|
||
|
int v8; // esi
|
||
|
char v9; // dl
|
||
|
short v10; // ax
|
||
|
TCmdPItem cmd; // [esp+4h] [ebp-18h]
|
||
|
|
||
|
v2 = ii;
|
||
|
cmd.bCmd = CMD_DROPITEM;
|
||
|
cmd.x = item[ii]._ix;
|
||
|
cmd.y = item[ii]._iy;
|
||
|
v3 = (short *)&item[ii].IDidx;
|
||
|
v4 = *(_DWORD *)v3 == IDI_EAR;
|
||
|
cmd.wIndx = *v3;
|
||
|
if ( v4 )
|
||
|
{
|
||
|
_LOBYTE(v5) = 0;
|
||
|
_HIBYTE(v5) = item[v2]._iName[7];
|
||
|
_LOBYTE(v6) = 0;
|
||
|
_HIBYTE(v6) = item[v2]._iName[18];
|
||
|
v7 = item[v2]._iName[10];
|
||
|
cmd.wCI = item[v2]._iName[8] | v5;
|
||
|
cmd.dwSeed = item[v2]._iName[12] | ((item[v2]._iName[11] | ((v7 | (item[v2]._iName[9] << 8)) << 8)) << 8);
|
||
|
cmd.bId = item[v2]._iName[13];
|
||
|
cmd.bDur = item[v2]._iName[14];
|
||
|
cmd.bMDur = item[v2]._iName[15];
|
||
|
cmd.bCh = item[v2]._iName[16];
|
||
|
cmd.bMCh = item[v2]._iName[17];
|
||
|
v8 = item[v2]._iName[20];
|
||
|
cmd.wValue = _LOWORD(item[v2]._ivalue) | v6 | ((_LOWORD(item[v2]._iCurs) - 19) << 6);
|
||
|
cmd.dwBuff = item[v2]._iName[22] | ((item[v2]._iName[21] | ((v8 | (item[v2]._iName[19] << 8)) << 8)) << 8);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
cmd.wCI = item[v2]._iCreateInfo;
|
||
|
cmd.dwSeed = item[v2]._iSeed;
|
||
|
cmd.bId = item[v2]._iIdentified;
|
||
|
cmd.bDur = item[v2]._iDurability;
|
||
|
cmd.bMDur = item[v2]._iMaxDur;
|
||
|
cmd.bCh = item[v2]._iCharges;
|
||
|
v9 = item[v2]._iMaxCharges;
|
||
|
v10 = item[v2]._ivalue;
|
||
|
cmd.bMCh = v9;
|
||
|
cmd.wValue = v10;
|
||
|
}
|
||
|
if ( bHiPri )
|
||
|
NetSendHiPri((unsigned char *)&cmd, 0x16u);
|
||
|
else
|
||
|
NetSendLoPri((unsigned char *)&cmd, 0x16u);
|
||
|
}
|
||
|
|
||
|
//----- (0043D039) --------------------------------------------------------
|
||
|
void __fastcall NetSendCmdDamage(unsigned char bHiPri, unsigned char bPlr, unsigned int dwDam)
|
||
|
{
|
||
|
TCmdDamage cmd; // [esp+0h] [ebp-8h]
|
||
|
|
||
|
cmd.bPlr = bPlr;
|
||
|
cmd.bCmd = CMD_PLRDAMAGE;
|
||
|
cmd.dwDam = dwDam;
|
||
|
if ( bHiPri )
|
||
|
NetSendHiPri((unsigned char *)&cmd, 6u);
|
||
|
else
|
||
|
NetSendLoPri((unsigned char *)&cmd, 6u);
|
||
|
}
|
||
|
|
||
|
//----- (0043D064) --------------------------------------------------------
|
||
|
void __fastcall NetSendCmdString(int a1, const char *pszStr)
|
||
|
{
|
||
|
const char *v2; // esi
|
||
|
int v3; // edi
|
||
|
char dwStrLen; // bl
|
||
|
TCmdString cmd; // [esp+Ch] [ebp-54h]
|
||
|
|
||
|
v2 = pszStr;
|
||
|
v3 = a1;
|
||
|
dwStrLen = strlen(pszStr);
|
||
|
cmd.bCmd = CMD_STRING;
|
||
|
strcpy(cmd.str, v2);
|
||
|
multi_send_msg_packet(v3, &cmd.bCmd, dwStrLen + 2);
|
||
|
}
|
||
|
|
||
|
//----- (0043D09D) --------------------------------------------------------
|
||
|
void __fastcall RemovePlrPortal(int pnum)
|
||
|
{
|
||
|
memset((char *)sgJunk + 5 * pnum, 255, 5u);
|
||
|
sgbDeltaChanged = 1;
|
||
|
}
|
||
|
// 67618C: using guessed type char sgbDeltaChanged;
|
||
|
|
||
|
//----- (0043D0BC) --------------------------------------------------------
|
||
|
int __fastcall ParseCmd(int pnum, TCmd *pCmd)
|
||
|
{
|
||
|
bool v2; // zf
|
||
|
TCmd *v3; // eax
|
||
|
char v4; // dl
|
||
|
unsigned char v5; // bl
|
||
|
int result; // eax
|
||
|
TCmd *v7; // esi
|
||
|
|
||
|
v2 = sgwPackPlrOffsetTbl[pnum] == 0;
|
||
|
v3 = pCmd;
|
||
|
v4 = pCmd->bCmd;
|
||
|
sbLastCmd = v4;
|
||
|
if ( !v2 && v4 != CMD_ACK_PLRINFO && v4 != CMD_SEND_PLRINFO )
|
||
|
return 0;
|
||
|
v5 = v3->bCmd;
|
||
|
switch ( v3->bCmd )
|
||
|
{
|
||
|
case CMD_WALKXY:
|
||
|
return On_WALKXY((struct TCmdLoc *)v3, pnum);
|
||
|
case CMD_ACK_PLRINFO:
|
||
|
return On_ACK_PLRINFO((struct TCmdPlrInfoHdr *)v3, pnum);
|
||
|
case CMD_ADDSTR:
|
||
|
return On_ADDSTR((struct TCmdParam1 *)v3, pnum);
|
||
|
case CMD_ADDMAG:
|
||
|
return On_ADDMAG((struct TCmdParam1 *)v3, pnum);
|
||
|
case CMD_ADDDEX:
|
||
|
return On_ADDDEX((struct TCmdParam1 *)v3, pnum);
|
||
|
case CMD_ADDVIT:
|
||
|
return On_ADDVIT((struct TCmdParam1 *)v3, pnum);
|
||
|
case CMD_SBSPELL:
|
||
|
return On_SBSPELL((struct TCmdParam1 *)v3, pnum);
|
||
|
case CMD_GETITEM:
|
||
|
return On_GETITEM((struct TCmdGItem *)v3, pnum);
|
||
|
case CMD_AGETITEM:
|
||
|
return On_AGETITEM((struct TCmdGItem *)v3, pnum);
|
||
|
case CMD_PUTITEM:
|
||
|
return On_PUTITEM((struct TCmdPItem *)v3, pnum);
|
||
|
case CMD_RESPAWNITEM:
|
||
|
return On_RESPAWNITEM((struct TCmdPItem *)v3, pnum);
|
||
|
case CMD_ATTACKXY:
|
||
|
return On_ATTACKXY((struct TCmdLoc *)v3, pnum);
|
||
|
case CMD_RATTACKXY:
|
||
|
return On_RATTACKXY((struct TCmdLoc *)v3, pnum);
|
||
|
case CMD_SPELLXY:
|
||
|
return On_SPELLXY((struct TCmdLocParam2 *)v3, pnum);
|
||
|
case CMD_TSPELLXY:
|
||
|
return On_TSPELLXY((struct TCmdLocParam2 *)v3, pnum);
|
||
|
case CMD_OPOBJXY:
|
||
|
return On_OPOBJXY((struct TCmdLocParam1 *)v3, pnum);
|
||
|
case CMD_DISARMXY:
|
||
|
return On_DISARMXY((struct TCmdLocParam1 *)v3, pnum);
|
||
|
case CMD_ATTACKID:
|
||
|
return On_ATTACKID((struct TCmdParam1 *)v3, pnum);
|
||
|
case CMD_ATTACKPID:
|
||
|
return On_ATTACKPID((struct TCmdParam1 *)v3, pnum);
|
||
|
case CMD_RATTACKID:
|
||
|
return On_RATTACKID((struct TCmdParam1 *)v3, pnum);
|
||
|
case CMD_RATTACKPID:
|
||
|
return On_RATTACKPID((struct TCmdParam1 *)v3, pnum);
|
||
|
case CMD_SPELLID:
|
||
|
return On_SPELLID((struct TCmdLocParam2 *)v3, pnum);
|
||
|
case CMD_SPELLPID:
|
||
|
return On_SPELLPID((struct TCmdLocParam2 *)v3, pnum);
|
||
|
case CMD_TSPELLID:
|
||
|
return On_TSPELLID((struct TCmdLocParam2 *)v3, pnum);
|
||
|
case CMD_TSPELLPID:
|
||
|
return On_TSPELLPID((struct TCmdLocParam2 *)v3, pnum);
|
||
|
case CMD_RESURRECT:
|
||
|
return On_RESURRECT((struct TCmdParam1 *)v3, pnum);
|
||
|
case CMD_OPOBJT:
|
||
|
return On_OPOBJT((struct TCmdParam1 *)v3, pnum);
|
||
|
case CMD_KNOCKBACK:
|
||
|
return On_KNOCKBACK((struct TCmdParam1 *)v3, pnum);
|
||
|
case CMD_TALKXY:
|
||
|
return On_TALKXY((struct TCmdLocParam1 *)v3, pnum);
|
||
|
case CMD_NEWLVL:
|
||
|
return On_NEWLVL((struct TCmdParam2 *)v3, pnum);
|
||
|
case CMD_WARP:
|
||
|
return On_WARP((struct TCmdParam1 *)v3, pnum);
|
||
|
#ifdef _DEBUG
|
||
|
case CMD_CHEAT_EXPERIENCE:
|
||
|
return On_CHEAT_EXPERIENCE(v3, pnum);
|
||
|
case CMD_CHEAT_SPELL_LEVEL:
|
||
|
return On_CHEAT_SPELL_LEVEL(v3, pnum);
|
||
|
#else
|
||
|
case CMD_CHEAT_EXPERIENCE:
|
||
|
return On_DEBUG();
|
||
|
case CMD_CHEAT_SPELL_LEVEL:
|
||
|
return On_DEBUG();
|
||
|
#endif
|
||
|
case CMD_DEBUG:
|
||
|
return On_DEBUG();
|
||
|
case CMD_SYNCDATA:
|
||
|
return On_SYNCDATA(v3, pnum);
|
||
|
case CMD_MONSTDEATH:
|
||
|
return On_MONSTDEATH((struct TCmdLocParam1 *)v3, pnum);
|
||
|
case CMD_MONSTDAMAGE:
|
||
|
return On_MONSTDAMAGE((struct TCmdLocParam1 *)v3, pnum);
|
||
|
case CMD_PLRDEAD:
|
||
|
return On_PLRDEAD((struct TCmdParam1 *)v3, pnum);
|
||
|
case CMD_REQUESTGITEM:
|
||
|
return On_REQUESTGITEM((struct TCmdGItem *)v3, pnum);
|
||
|
case CMD_REQUESTAGITEM:
|
||
|
return On_REQUESTAGITEM((struct TCmdGItem *)v3, pnum);
|
||
|
case CMD_GOTOGETITEM:
|
||
|
return On_GOTOGETITEM((struct TCmdLocParam1 *)v3, pnum);
|
||
|
case CMD_GOTOAGETITEM:
|
||
|
return On_GOTOAGETITEM((struct TCmdLocParam1 *)v3, pnum);
|
||
|
case CMD_OPENDOOR:
|
||
|
return On_OPENDOOR((struct TCmdParam1 *)v3, pnum);
|
||
|
case CMD_CLOSEDOOR:
|
||
|
return On_CLOSEDOOR((struct TCmdParam1 *)v3, pnum);
|
||
|
case CMD_OPERATEOBJ:
|
||
|
return On_OPERATEOBJ((struct TCmdParam1 *)v3, pnum);
|
||
|
case CMD_PLROPOBJ:
|
||
|
return On_PLROPOBJ((struct TCmdParam2 *)v3, pnum);
|
||
|
case CMD_BREAKOBJ:
|
||
|
return On_BREAKOBJ((struct TCmdParam2 *)v3, pnum);
|
||
|
case CMD_CHANGEPLRITEMS:
|
||
|
return On_CHANGEPLRITEMS((struct TCmdChItem *)v3, pnum);
|
||
|
case CMD_DELPLRITEMS:
|
||
|
return On_DELPLRITEMS((struct TCmdDelItem *)v3, pnum);
|
||
|
case CMD_PLRDAMAGE:
|
||
|
return On_PLRDAMAGE((struct TCmdDamage *)v3, pnum);
|
||
|
case CMD_PLRLEVEL:
|
||
|
return On_PLRLEVEL((struct TCmdParam1 *)v3, pnum);
|
||
|
case CMD_DROPITEM:
|
||
|
return On_DROPITEM((struct TCmdPItem *)v3, pnum);
|
||
|
case CMD_PLAYER_JOINLEVEL:
|
||
|
return On_PLAYER_JOINLEVEL((struct TCmdLocParam1 *)v3, pnum);
|
||
|
case CMD_SEND_PLRINFO:
|
||
|
return On_SEND_PLRINFO((struct TCmdPlrInfoHdr *)v3, pnum);
|
||
|
case CMD_SATTACKXY:
|
||
|
return On_SATTACKXY((struct TCmdLoc *)v3, pnum);
|
||
|
case CMD_ACTIVATEPORTAL:
|
||
|
return On_ACTIVATEPORTAL((DJunk *)v3, pnum);
|
||
|
case CMD_DEACTIVATEPORTAL:
|
||
|
return On_DEACTIVATEPORTAL(v3, pnum);
|
||
|
case CMD_HEALOTHER:
|
||
|
return On_HEALOTHER((struct TCmdParam1 *)v3, pnum);
|
||
|
case CMD_STRING:
|
||
|
return On_STRING((struct TCmdString *)v3, pnum);
|
||
|
case CMD_SETSTR:
|
||
|
return On_SETSTR((struct TCmdParam1 *)v3, pnum);
|
||
|
case CMD_SETMAG:
|
||
|
return On_SETMAG((struct TCmdParam1 *)v3, pnum);
|
||
|
case CMD_SETDEX:
|
||
|
return On_SETDEX((struct TCmdParam1 *)v3, pnum);
|
||
|
case CMD_SETVIT:
|
||
|
return On_SETVIT((struct TCmdParam1 *)v3, pnum);
|
||
|
case CMD_RETOWN:
|
||
|
return On_RETOWN(v3, pnum);
|
||
|
case CMD_SPELLXYD:
|
||
|
return On_SPELLXYD((struct TCmdLocParam3 *)v3, pnum);
|
||
|
case CMD_ITEMEXTRA:
|
||
|
return On_ITEMEXTRA((struct TCmdGItem *)v3, pnum);
|
||
|
case CMD_SYNCPUTITEM:
|
||
|
return On_SYNCPUTITEM((struct TCmdPItem *)v3, pnum);
|
||
|
case CMD_KILLGOLEM:
|
||
|
return On_KILLGOLEM((struct TCmdLocParam1 *)v3, pnum);
|
||
|
case CMD_SYNCQUEST:
|
||
|
return On_SYNCQUEST((struct TCmdQuest *)v3, pnum);
|
||
|
case CMD_ENDSHIELD:
|
||
|
return On_ENDSHIELD((int)v3, pnum);
|
||
|
case CMD_AWAKEGOLEM:
|
||
|
return On_AWAKEGOLEM((struct TCmdGolem *)v3, pnum);
|
||
|
case CMD_NOVA:
|
||
|
return On_NOVA((struct TCmdLoc *)v3, pnum);
|
||
|
case CMD_SETSHIELD:
|
||
|
return On_SETSHIELD((int)v3, pnum);
|
||
|
case CMD_REMSHIELD:
|
||
|
return On_REMSHIELD((int)v3, pnum);
|
||
|
default:
|
||
|
if ( v5 < CMD_DLEVEL_0 || v5 > CMD_DLEVEL_END )
|
||
|
{
|
||
|
SNetDropPlayer(pnum, 0x40000006);
|
||
|
return 0;
|
||
|
}
|
||
|
v7 = v3;
|
||
|
if ( (unsigned char)gbDeltaSender == pnum )
|
||
|
{
|
||
|
if ( sgbRecvCmd != CMD_DLEVEL_END )
|
||
|
{
|
||
|
if ( sgbRecvCmd == v3->bCmd )
|
||
|
{
|
||
|
LABEL_99:
|
||
|
memcpy(&sgRecvBuf[*(unsigned short *)&v7[1].bCmd], &v7[5], *(unsigned short *)&v7[3].bCmd);
|
||
|
sgdwRecvOffset += *(unsigned short *)&v7[3].bCmd;
|
||
|
goto LABEL_100;
|
||
|
}
|
||
|
DeltaImportData(sgbRecvCmd, sgdwRecvOffset);
|
||
|
if ( v7->bCmd == CMD_DLEVEL_END )
|
||
|
{
|
||
|
sgbDeltaChunks = 20;
|
||
|
sgbRecvCmd = CMD_DLEVEL_END;
|
||
|
goto LABEL_100;
|
||
|
}
|
||
|
sgdwRecvOffset = 0;
|
||
|
LABEL_98:
|
||
|
sgbRecvCmd = v7->bCmd;
|
||
|
goto LABEL_99;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if ( v3->bCmd != CMD_DLEVEL_END && (v3->bCmd != CMD_DLEVEL_0 || *(_WORD *)&v3[1].bCmd) )
|
||
|
goto LABEL_100;
|
||
|
gbDeltaSender = pnum;
|
||
|
sgbRecvCmd = CMD_DLEVEL_END;
|
||
|
}
|
||
|
if ( v3->bCmd == CMD_DLEVEL_END )
|
||
|
{
|
||
|
sgbDeltaChunks = 20;
|
||
|
goto LABEL_100;
|
||
|
}
|
||
|
if ( v3->bCmd == CMD_DLEVEL_0 && !*(_WORD *)&v3[1].bCmd )
|
||
|
{
|
||
|
sgdwRecvOffset = 0;
|
||
|
goto LABEL_98;
|
||
|
}
|
||
|
LABEL_100:
|
||
|
result = *(unsigned short *)&v7[3].bCmd + 5;
|
||
|
break;
|
||
|
}
|
||
|
return result;
|
||
|
}
|
||
|
// 66E4A9: using guessed type char sbLastCmd;
|
||
|
// 67618D: using guessed type char sgbDeltaChunks;
|
||
|
// 6796E4: using guessed type char gbDeltaSender;
|
||
|
|
||
|
//----- (0043D632) --------------------------------------------------------
|
||
|
void __fastcall DeltaImportData(unsigned char cmd, int recv_offset)
|
||
|
{
|
||
|
unsigned char v2; // bl
|
||
|
int v3; // esi
|
||
|
void *v4; // eax
|
||
|
void *v5; // eax
|
||
|
|
||
|
v2 = cmd;
|
||
|
if ( sgRecvBuf[0] )
|
||
|
encrypt_decompress(&sgRecvBuf[1], recv_offset, 4721);
|
||
|
if ( v2 == CMD_DLEVEL_JUNK )
|
||
|
{
|
||
|
DeltaImportJunk((int)&sgRecvBuf[1]);
|
||
|
}
|
||
|
else if ( v2 < CMD_DLEVEL_0 || v2 > CMD_DLEVEL_16 )
|
||
|
{
|
||
|
TermMsg("msg:1");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v3 = (unsigned char)(v2 - CMD_DLEVEL_0);
|
||
|
v4 = DeltaImportItem(&sgRecvBuf[1], &sgLevels[v3]);
|
||
|
v5 = DeltaImportObject(v4, sgLevels[v3].object);
|
||
|
DeltaImportMonster(v5, sgLevels[v3].monster);
|
||
|
}
|
||
|
++sgbDeltaChunks;
|
||
|
sgbDeltaChanged = 1;
|
||
|
}
|
||
|
// 67618C: using guessed type char sgbDeltaChanged;
|
||
|
// 67618D: using guessed type char sgbDeltaChunks;
|
||
|
|
||
|
//----- (0043D6BA) --------------------------------------------------------
|
||
|
void *__fastcall DeltaImportItem(void *src, void *dst)
|
||
|
{
|
||
|
char *v2; // edi
|
||
|
_BYTE *v3; // esi
|
||
|
signed int v4; // ebx
|
||
|
|
||
|
v2 = (char *)dst;
|
||
|
v3 = (unsigned char *)src;
|
||
|
v4 = 127;
|
||
|
do
|
||
|
{
|
||
|
if ( *v3 == -1 )
|
||
|
{
|
||
|
memset(v2, 255, 0x16u);
|
||
|
++v3;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
memcpy(v2, v3, 0x16u);
|
||
|
v3 += 22;
|
||
|
}
|
||
|
v2 += 22;
|
||
|
--v4;
|
||
|
}
|
||
|
while ( v4 );
|
||
|
return v3;
|
||
|
}
|
||
|
|
||
|
//----- (0043D6F5) --------------------------------------------------------
|
||
|
void *__fastcall DeltaImportObject(void *src, void *dst)
|
||
|
{
|
||
|
char *v2; // esi
|
||
|
|
||
|
v2 = (char *)src;
|
||
|
memcpy(dst, src, 0x7Fu);
|
||
|
return v2 + 127;
|
||
|
}
|
||
|
|
||
|
//----- (0043D709) --------------------------------------------------------
|
||
|
void *__fastcall DeltaImportMonster(void *src, void *dst)
|
||
|
{
|
||
|
char *v2; // edi
|
||
|
_BYTE *v3; // esi
|
||
|
signed int v4; // ebx
|
||
|
|
||
|
v2 = (char *)dst;
|
||
|
v3 = (unsigned char *)src;
|
||
|
v4 = 200;
|
||
|
do
|
||
|
{
|
||
|
if ( *v3 == -1 )
|
||
|
{
|
||
|
memset(v2, 255, 9u);
|
||
|
++v3;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
memcpy(v2, v3, 9u);
|
||
|
v3 += 9;
|
||
|
}
|
||
|
v2 += 9;
|
||
|
--v4;
|
||
|
}
|
||
|
while ( v4 );
|
||
|
return v3;
|
||
|
}
|
||
|
|
||
|
//----- (0043D746) --------------------------------------------------------
|
||
|
char __fastcall DeltaImportJunk(int a1)
|
||
|
{
|
||
|
_BYTE *v1; // ebx
|
||
|
int v2; // edi
|
||
|
DJunk *v3; // esi
|
||
|
char result; // al
|
||
|
MultiQuests *v5; // esi
|
||
|
unsigned char *v6; // edi
|
||
|
int *v7; // ebp
|
||
|
|
||
|
v1 = (_BYTE *)a1;
|
||
|
v2 = 0;
|
||
|
v3 = sgJunk;
|
||
|
do
|
||
|
{
|
||
|
if ( *v1 == -1 )
|
||
|
{
|
||
|
memset(v3, 255, 5u);
|
||
|
++v1;
|
||
|
SetPortalStats(v2, 0, 0, 0, 0, 0);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
memcpy(v3, v1, 5u);
|
||
|
v1 += 5;
|
||
|
SetPortalStats(
|
||
|
v2,
|
||
|
1,
|
||
|
(unsigned char)v3->portal[0].x,
|
||
|
(unsigned char)v3->portal[0].y,
|
||
|
(unsigned char)v3->portal[0].level,
|
||
|
(unsigned char)v3->portal[0].ltype);
|
||
|
}
|
||
|
v3 = (DJunk *)((char *)v3 + 5);
|
||
|
++v2;
|
||
|
}
|
||
|
while ( (signed int)v3 < (signed int)sgJunk[0].quests );
|
||
|
v5 = sgJunk[0].quests;
|
||
|
v6 = &quests[0]._qactive;
|
||
|
v7 = &questlist[0]._qflags;
|
||
|
do
|
||
|
{
|
||
|
if ( *(_BYTE *)v7 & 1 )
|
||
|
{
|
||
|
memcpy(v5, v1, 3u);
|
||
|
*(_DWORD *)(v6 + 18) = (unsigned char)v5->qlog;
|
||
|
*v6 = v5->qstate;
|
||
|
result = v5->qvar1;
|
||
|
v1 += 3;
|
||
|
v6[13] = result;
|
||
|
++v5;
|
||
|
}
|
||
|
v7 += 5;
|
||
|
v6 += 24;
|
||
|
}
|
||
|
while ( (signed int)v7 < (signed int)&questlist[16]._qflags );
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
//----- (0043D7F1) --------------------------------------------------------
|
||
|
int __fastcall On_SYNCDATA(void *packet, int pnum)
|
||
|
{
|
||
|
return SyncData(pnum, (TSyncHeader *)packet);
|
||
|
}
|
||
|
|
||
|
//----- (0043D7FC) --------------------------------------------------------
|
||
|
int __fastcall On_WALKXY(struct TCmdLoc *pCmd, int pnum)
|
||
|
{
|
||
|
int v2; // ebx
|
||
|
struct TCmdLoc *v3; // edi
|
||
|
int v4; // esi
|
||
|
|
||
|
v2 = pnum;
|
||
|
v3 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
v4 = pnum;
|
||
|
if ( currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
ClrPlrPath(pnum);
|
||
|
MakePlrPath(v2, (unsigned char)v3->x, (unsigned char)v3->y, 1u);
|
||
|
plr[v4].destAction = -1;
|
||
|
}
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043D84A) --------------------------------------------------------
|
||
|
int __fastcall On_ADDSTR(struct TCmdParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
unsigned short v2; // cx
|
||
|
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 3);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v2 = pCmd->wParam1;
|
||
|
if ( v2 <= 0x100u )
|
||
|
ModifyPlrStr(pnum, v2);
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043D87B) --------------------------------------------------------
|
||
|
int __fastcall On_ADDMAG(struct TCmdParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
unsigned short v2; // cx
|
||
|
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 3);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v2 = pCmd->wParam1;
|
||
|
if ( v2 <= 0x100u )
|
||
|
ModifyPlrMag(pnum, v2);
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043D8AC) --------------------------------------------------------
|
||
|
int __fastcall On_ADDDEX(struct TCmdParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
unsigned short v2; // cx
|
||
|
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 3);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v2 = pCmd->wParam1;
|
||
|
if ( v2 <= 0x100u )
|
||
|
ModifyPlrDex(pnum, v2);
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043D8DD) --------------------------------------------------------
|
||
|
int __fastcall On_ADDVIT(struct TCmdParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
unsigned short v2; // cx
|
||
|
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 3);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v2 = pCmd->wParam1;
|
||
|
if ( v2 <= 0x100u )
|
||
|
ModifyPlrVit(pnum, v2);
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043D90E) --------------------------------------------------------
|
||
|
int __fastcall On_SBSPELL(struct TCmdParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
int v2; // eax
|
||
|
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
if ( currlevel || *(_DWORD *)&spelldata[(unsigned short)pCmd->wParam1].sTownSpell )
|
||
|
{
|
||
|
v2 = pnum;
|
||
|
plr[v2]._pSpell = (unsigned short)pCmd->wParam1;
|
||
|
plr[v2]._pSplType = plr[v2]._pSBkSplType;
|
||
|
plr[v2]._pSplFrom = 1;
|
||
|
plr[v2].destAction = 12;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
msg_errorf("%s has cast an illegal spell.", plr[pnum]._pName);
|
||
|
}
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043D97D) --------------------------------------------------------
|
||
|
void msg_errorf(char *pszFmt, ...)
|
||
|
{
|
||
|
DWORD v1; // eax
|
||
|
char v2[256]; // [esp+0h] [ebp-100h]
|
||
|
va_list va; // [esp+10Ch] [ebp+Ch]
|
||
|
|
||
|
va_start(va, pszFmt);
|
||
|
v1 = GetTickCount();
|
||
|
if ( v1 - msg_err_timer >= 5000 )
|
||
|
{
|
||
|
msg_err_timer = v1;
|
||
|
vsprintf(v2, pszFmt, va);
|
||
|
ErrorPlrMsg(v2);
|
||
|
}
|
||
|
}
|
||
|
// 67619C: using guessed type int msg_err_timer;
|
||
|
|
||
|
//----- (0043D9C4) --------------------------------------------------------
|
||
|
int __fastcall On_GOTOGETITEM(struct TCmdLocParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdLocParam1 *v2; // edi
|
||
|
int v3; // esi
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
v3 = pnum;
|
||
|
if ( currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
MakePlrPath(pnum, (unsigned char)pCmd->x, (unsigned char)pCmd->y, 0);
|
||
|
plr[v3].destAction = 15;
|
||
|
plr[v3].destParam1 = (unsigned short)v2->wParam1;
|
||
|
}
|
||
|
}
|
||
|
return 5;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043DA16) --------------------------------------------------------
|
||
|
int __fastcall On_REQUESTGITEM(struct TCmdGItem *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdGItem *v2; // esi
|
||
|
int v4; // edx
|
||
|
int v5; // edx
|
||
|
int v7; // edi
|
||
|
unsigned char v8; // al
|
||
|
int v9; // edx
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
if ( i_own_level(plr[pnum].plrlevel) )
|
||
|
{
|
||
|
_LOWORD(v4) = v2->wCI;
|
||
|
if ( GetItemRecord(v2->dwSeed, v4, (unsigned short)v2->wIndx) )
|
||
|
{
|
||
|
_LOWORD(v5) = v2->wCI;
|
||
|
v7 = FindGetItem((unsigned short)v2->wIndx, v5, v2->dwSeed);
|
||
|
v8 = v2->bPnum;
|
||
|
if ( v7 == -1 )
|
||
|
{
|
||
|
if ( !NetSendCmdReq2(CMD_REQUESTGITEM, myplr, v8, v2) )
|
||
|
NetSendCmdExtra(v2);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
NetSendCmdGItem2(0, CMD_GETITEM, myplr, v8, v2);
|
||
|
if ( (unsigned char)v2->bPnum == myplr )
|
||
|
InvGetItem(myplr, v7);
|
||
|
else
|
||
|
SyncGetItem(
|
||
|
(unsigned char)v2->x,
|
||
|
(unsigned char)v2->y,
|
||
|
(unsigned short)v2->wIndx,
|
||
|
v2->wCI,
|
||
|
v2->dwSeed);
|
||
|
_LOWORD(v9) = v2->wCI;
|
||
|
SetItemRecord(v2->dwSeed, v9, (unsigned short)v2->wIndx);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return 30;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043DAE6) --------------------------------------------------------
|
||
|
bool __fastcall i_own_level(int nReqLevel)
|
||
|
{
|
||
|
int v1; // edx
|
||
|
unsigned char *v2; // eax
|
||
|
|
||
|
v1 = 0;
|
||
|
v2 = &plr[0]._pLvlChanging;
|
||
|
do
|
||
|
{
|
||
|
if ( *(v2 - 290) && !*v2 && *(_DWORD *)(v2 - 267) == nReqLevel && (v1 != myplr || !gbBufferMsgs) )
|
||
|
break;
|
||
|
v2 += 21720;
|
||
|
++v1;
|
||
|
}
|
||
|
while ( (signed int)v2 < (signed int)&plr[4]._pLvlChanging );
|
||
|
return v1 == myplr;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043DB2D) --------------------------------------------------------
|
||
|
int __fastcall On_GETITEM(struct TCmdGItem *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdGItem *v2; // esi
|
||
|
int v4; // edi
|
||
|
char v6; // al
|
||
|
int v7; // ecx
|
||
|
int v8; // edx
|
||
|
int v9; // eax
|
||
|
int v10; // edx
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet((unsigned short)pnum, pCmd, 30);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v4 = FindGetItem((unsigned short)pCmd->wIndx, pCmd->wCI, pCmd->dwSeed);
|
||
|
if ( !delta_get_item(v2, v2->bLevel) )
|
||
|
{
|
||
|
NetSendCmdGItem2(1u, CMD_GETITEM, v2->bMaster, v2->bPnum, v2);
|
||
|
return 30;
|
||
|
}
|
||
|
v6 = v2->bLevel;
|
||
|
v7 = myplr;
|
||
|
if ( (currlevel == v6 || (unsigned char)v2->bPnum == myplr) && (unsigned char)v2->bMaster != myplr )
|
||
|
{
|
||
|
if ( (unsigned char)v2->bPnum != myplr )
|
||
|
{
|
||
|
SyncGetItem(
|
||
|
(unsigned char)v2->x,
|
||
|
(unsigned char)v2->y,
|
||
|
(unsigned short)v2->wIndx,
|
||
|
v2->wCI,
|
||
|
v2->dwSeed);
|
||
|
return 30;
|
||
|
}
|
||
|
if ( currlevel == v6 )
|
||
|
{
|
||
|
v10 = v4;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v8 = (unsigned char)v2->bId;
|
||
|
_LOWORD(v8) = v2->wCI;
|
||
|
v9 = SyncPutItem(
|
||
|
myplr,
|
||
|
plr[myplr].WorldX,
|
||
|
plr[myplr].WorldY,
|
||
|
(unsigned short)v2->wIndx,
|
||
|
v8,
|
||
|
v2->dwSeed,
|
||
|
(unsigned char)v2->bId,
|
||
|
(unsigned char)v2->bDur,
|
||
|
(unsigned char)v2->bMDur,
|
||
|
(unsigned char)v2->bCh,
|
||
|
(unsigned char)v2->bMCh,
|
||
|
(unsigned short)v2->wValue,
|
||
|
v2->dwBuff);
|
||
|
if ( v9 == -1 )
|
||
|
return 30;
|
||
|
v7 = myplr;
|
||
|
v10 = v9;
|
||
|
}
|
||
|
InvGetItem(v7, v10);
|
||
|
return 30;
|
||
|
}
|
||
|
}
|
||
|
return 30;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043DC3D) --------------------------------------------------------
|
||
|
bool __fastcall delta_get_item(struct TCmdGItem *pI, unsigned char bLevel)
|
||
|
{
|
||
|
struct TCmdGItem *v2; // esi
|
||
|
signed int v3; // ecx
|
||
|
DLevel *v4; // edi
|
||
|
DLevel *v5; // eax
|
||
|
char v6; // cl
|
||
|
DLevel *v8; // eax
|
||
|
signed int v9; // ecx
|
||
|
|
||
|
v2 = pI;
|
||
|
if ( gbMaxPlayers != 1 )
|
||
|
{
|
||
|
v3 = 0;
|
||
|
v4 = &sgLevels[bLevel];
|
||
|
v5 = &sgLevels[bLevel];
|
||
|
while ( v5->item[0].bCmd == -1
|
||
|
|| v5->item[0].wIndx != v2->wIndx
|
||
|
|| v5->item[0].wCI != v2->wCI
|
||
|
|| v5->item[0].dwSeed != v2->dwSeed )
|
||
|
{
|
||
|
++v3;
|
||
|
v5 = (DLevel *)((char *)v5 + 22);
|
||
|
if ( v3 >= 127 )
|
||
|
goto LABEL_15;
|
||
|
}
|
||
|
v6 = v5->item[0].bCmd;
|
||
|
if ( v5->item[0].bCmd == 1 )
|
||
|
return 1;
|
||
|
if ( !v6 )
|
||
|
{
|
||
|
sgbDeltaChanged = 1;
|
||
|
v5->item[0].bCmd = 1;
|
||
|
return 1;
|
||
|
}
|
||
|
if ( v6 == 2 )
|
||
|
{
|
||
|
v5->item[0].bCmd = -1;
|
||
|
sgbDeltaChanged = 1;
|
||
|
return 1;
|
||
|
}
|
||
|
TermMsg("delta:1");
|
||
|
LABEL_15:
|
||
|
if ( v2->wCI >= 0 )
|
||
|
return 0;
|
||
|
v8 = v4;
|
||
|
v9 = 0;
|
||
|
while ( v8->item[0].bCmd != -1 )
|
||
|
{
|
||
|
++v9;
|
||
|
v8 = (DLevel *)((char *)v8 + 22);
|
||
|
if ( v9 >= 127 )
|
||
|
return 1;
|
||
|
}
|
||
|
sgbDeltaChanged = 1;
|
||
|
v8->item[0].bCmd = 1;
|
||
|
v8->item[0].x = v2->x;
|
||
|
v8->item[0].y = v2->y;
|
||
|
v8->item[0].wIndx = v2->wIndx;
|
||
|
v8->item[0].wCI = v2->wCI;
|
||
|
v8->item[0].dwSeed = v2->dwSeed;
|
||
|
v8->item[0].bId = v2->bId;
|
||
|
v8->item[0].bDur = v2->bDur;
|
||
|
v8->item[0].bMDur = v2->bMDur;
|
||
|
v8->item[0].bCh = v2->bCh;
|
||
|
v8->item[0].bMCh = v2->bMCh;
|
||
|
v8->item[0].wValue = v2->wValue;
|
||
|
v8->item[0].dwBuff = v2->dwBuff;
|
||
|
}
|
||
|
return 1;
|
||
|
}
|
||
|
// 67618C: using guessed type char sgbDeltaChanged;
|
||
|
// 679660: using guessed type char gbMaxPlayers;
|
||
|
|
||
|
//----- (0043DD40) --------------------------------------------------------
|
||
|
int __fastcall On_GOTOAGETITEM(struct TCmdLocParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdLocParam1 *v2; // edi
|
||
|
int v3; // esi
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
v3 = pnum;
|
||
|
if ( currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
MakePlrPath(pnum, (unsigned char)pCmd->x, (unsigned char)pCmd->y, 0);
|
||
|
plr[v3].destAction = 16;
|
||
|
plr[v3].destParam1 = (unsigned short)v2->wParam1;
|
||
|
}
|
||
|
}
|
||
|
return 5;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043DD92) --------------------------------------------------------
|
||
|
int __fastcall On_REQUESTAGITEM(struct TCmdGItem *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdGItem *v2; // esi
|
||
|
int v4; // edx
|
||
|
int v5; // edx
|
||
|
int v7; // zf
|
||
|
unsigned char v8; // al
|
||
|
int v9; // edx
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
if ( i_own_level(plr[pnum].plrlevel) )
|
||
|
{
|
||
|
_LOWORD(v4) = v2->wCI;
|
||
|
if ( GetItemRecord(v2->dwSeed, v4, (unsigned short)v2->wIndx) )
|
||
|
{
|
||
|
_LOWORD(v5) = v2->wCI;
|
||
|
v7 = FindGetItem((unsigned short)v2->wIndx, v5, v2->dwSeed);
|
||
|
v8 = v2->bPnum;
|
||
|
if ( v7 == -1 )
|
||
|
{
|
||
|
if ( !NetSendCmdReq2(CMD_REQUESTAGITEM, myplr, v8, v2) )
|
||
|
NetSendCmdExtra(v2);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
NetSendCmdGItem2(0, CMD_AGETITEM, myplr, v8, v2);
|
||
|
if ( (unsigned char)v2->bPnum == myplr )
|
||
|
AutoGetItem(myplr, (unsigned char)v2->bCursitem);
|
||
|
else
|
||
|
SyncGetItem(
|
||
|
(unsigned char)v2->x,
|
||
|
(unsigned char)v2->y,
|
||
|
(unsigned short)v2->wIndx,
|
||
|
v2->wCI,
|
||
|
v2->dwSeed);
|
||
|
_LOWORD(v9) = v2->wCI;
|
||
|
SetItemRecord(v2->dwSeed, v9, (unsigned short)v2->wIndx);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return 30;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043DE60) --------------------------------------------------------
|
||
|
int __fastcall On_AGETITEM(struct TCmdGItem *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdGItem *v2; // esi
|
||
|
char v4; // al
|
||
|
int v5; // ecx
|
||
|
int v6; // edx
|
||
|
int v7; // eax
|
||
|
int v8; // edx
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet((unsigned short)pnum, pCmd, 30);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
FindGetItem((unsigned short)pCmd->wIndx, pCmd->wCI, pCmd->dwSeed);
|
||
|
if ( !delta_get_item(v2, v2->bLevel) )
|
||
|
{
|
||
|
NetSendCmdGItem2(1u, CMD_AGETITEM, v2->bMaster, v2->bPnum, v2);
|
||
|
return 30;
|
||
|
}
|
||
|
v4 = v2->bLevel;
|
||
|
v5 = myplr;
|
||
|
if ( (currlevel == v4 || (unsigned char)v2->bPnum == myplr) && (unsigned char)v2->bMaster != myplr )
|
||
|
{
|
||
|
if ( (unsigned char)v2->bPnum != myplr )
|
||
|
{
|
||
|
SyncGetItem(
|
||
|
(unsigned char)v2->x,
|
||
|
(unsigned char)v2->y,
|
||
|
(unsigned short)v2->wIndx,
|
||
|
v2->wCI,
|
||
|
v2->dwSeed);
|
||
|
return 30;
|
||
|
}
|
||
|
if ( currlevel == v4 )
|
||
|
{
|
||
|
v8 = (unsigned char)v2->bCursitem;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v6 = (unsigned char)v2->bId;
|
||
|
_LOWORD(v6) = v2->wCI;
|
||
|
v7 = SyncPutItem(
|
||
|
myplr,
|
||
|
plr[myplr].WorldX,
|
||
|
plr[myplr].WorldY,
|
||
|
(unsigned short)v2->wIndx,
|
||
|
v6,
|
||
|
v2->dwSeed,
|
||
|
(unsigned char)v2->bId,
|
||
|
(unsigned char)v2->bDur,
|
||
|
(unsigned char)v2->bMDur,
|
||
|
(unsigned char)v2->bCh,
|
||
|
(unsigned char)v2->bMCh,
|
||
|
(unsigned short)v2->wValue,
|
||
|
v2->dwBuff);
|
||
|
if ( v7 == -1 )
|
||
|
return 30;
|
||
|
v5 = myplr;
|
||
|
v8 = v7;
|
||
|
}
|
||
|
AutoGetItem(v5, v8);
|
||
|
return 30;
|
||
|
}
|
||
|
}
|
||
|
return 30;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043DF6E) --------------------------------------------------------
|
||
|
int __fastcall On_ITEMEXTRA(struct TCmdGItem *pCmd, int pnum)
|
||
|
{
|
||
|
int v2; // edi
|
||
|
struct TCmdGItem *v3; // esi
|
||
|
|
||
|
v2 = pnum;
|
||
|
v3 = pCmd;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 30);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
delta_get_item(pCmd, pCmd->bLevel);
|
||
|
if ( currlevel == plr[v2].plrlevel )
|
||
|
SyncGetItem(
|
||
|
(unsigned char)v3->x,
|
||
|
(unsigned char)v3->y,
|
||
|
(unsigned short)v3->wIndx,
|
||
|
v3->wCI,
|
||
|
v3->dwSeed);
|
||
|
}
|
||
|
return 30;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043DFC9) --------------------------------------------------------
|
||
|
int __fastcall On_PUTITEM(struct TCmdPItem *pCmd, int pnum)
|
||
|
{
|
||
|
int v2; // edi
|
||
|
struct TCmdPItem *v3; // esi
|
||
|
unsigned char *v4; // ebx
|
||
|
int v5; // edx
|
||
|
int v6; // eax
|
||
|
int v7; // edx
|
||
|
int v8; // ebp
|
||
|
|
||
|
v2 = pnum;
|
||
|
v3 = pCmd;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 22);
|
||
|
return 22;
|
||
|
}
|
||
|
v4 = (unsigned char *)&plr[pnum].plrlevel;
|
||
|
if ( currlevel != *(_DWORD *)v4 )
|
||
|
{
|
||
|
_LOWORD(pnum) = pCmd->wCI;
|
||
|
PutItemRecord(pCmd->dwSeed, pnum, (unsigned short)pCmd->wIndx);
|
||
|
delta_put_item(v3, (unsigned char)v3->x, (unsigned char)v3->y, *v4);
|
||
|
check_update_plr(v2);
|
||
|
return 22;
|
||
|
}
|
||
|
v5 = (unsigned char)pCmd->x;
|
||
|
if ( v2 == myplr )
|
||
|
v6 = InvPutItem(v2, v5, (unsigned char)pCmd->y);
|
||
|
else
|
||
|
v6 = SyncPutItem(
|
||
|
v2,
|
||
|
v5,
|
||
|
(unsigned char)pCmd->y,
|
||
|
(unsigned short)pCmd->wIndx,
|
||
|
(unsigned short)pCmd->wCI,
|
||
|
pCmd->dwSeed,
|
||
|
(unsigned char)pCmd->bId,
|
||
|
(unsigned char)pCmd->bDur,
|
||
|
(unsigned char)pCmd->bMDur,
|
||
|
(unsigned char)pCmd->bCh,
|
||
|
(unsigned char)pCmd->bMCh,
|
||
|
(unsigned short)pCmd->wValue,
|
||
|
pCmd->dwBuff);
|
||
|
v8 = v6;
|
||
|
if ( v6 != -1 )
|
||
|
{
|
||
|
_LOWORD(v7) = v3->wCI;
|
||
|
PutItemRecord(v3->dwSeed, v7, (unsigned short)v3->wIndx);
|
||
|
delta_put_item(v3, item[v8]._ix, item[v8]._iy, *v4);
|
||
|
check_update_plr(v2);
|
||
|
}
|
||
|
return 22;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043E0CE) --------------------------------------------------------
|
||
|
void __fastcall delta_put_item(struct TCmdPItem *pI, int x, int y, unsigned char bLevel)
|
||
|
{
|
||
|
struct TCmdPItem *v4; // ebx
|
||
|
int v5; // eax
|
||
|
DLevel *v6; // esi
|
||
|
DLevel *v7; // edi
|
||
|
char v8; // al
|
||
|
signed int v9; // eax
|
||
|
char v10; // [esp+Ch] [ebp-4h]
|
||
|
signed int bLevela; // [esp+1Ch] [ebp+Ch]
|
||
|
|
||
|
v10 = x;
|
||
|
v4 = pI;
|
||
|
if ( gbMaxPlayers != 1 )
|
||
|
{
|
||
|
v5 = bLevel;
|
||
|
bLevela = 0;
|
||
|
v6 = &sgLevels[v5];
|
||
|
v7 = &sgLevels[v5];
|
||
|
do
|
||
|
{
|
||
|
v8 = v7->item[0].bCmd;
|
||
|
if ( v7->item[0].bCmd != 1
|
||
|
&& v8 != -1
|
||
|
&& v7->item[0].wIndx == v4->wIndx
|
||
|
&& v7->item[0].wCI == v4->wCI
|
||
|
&& v7->item[0].dwSeed == v4->dwSeed )
|
||
|
{
|
||
|
if ( v8 == 2 )
|
||
|
return;
|
||
|
TermMsg("Trying to drop a floor item?");
|
||
|
}
|
||
|
++bLevela;
|
||
|
v7 = (DLevel *)((char *)v7 + 22);
|
||
|
}
|
||
|
while ( bLevela < 127 );
|
||
|
v9 = 0;
|
||
|
while ( v6->item[0].bCmd != -1 )
|
||
|
{
|
||
|
++v9;
|
||
|
v6 = (DLevel *)((char *)v6 + 22);
|
||
|
if ( v9 >= 127 )
|
||
|
return;
|
||
|
}
|
||
|
sgbDeltaChanged = 1;
|
||
|
memcpy(v6, v4, 0x16u);
|
||
|
v6->item[0].x = v10;
|
||
|
v6->item[0].bCmd = 2;
|
||
|
v6->item[0].y = y;
|
||
|
}
|
||
|
}
|
||
|
// 67618C: using guessed type char sgbDeltaChanged;
|
||
|
// 679660: using guessed type char gbMaxPlayers;
|
||
|
|
||
|
//----- (0043E179) --------------------------------------------------------
|
||
|
void __fastcall check_update_plr(int pnum)
|
||
|
{
|
||
|
if ( gbMaxPlayers != 1 && pnum == myplr )
|
||
|
pfile_update(1);
|
||
|
}
|
||
|
// 679660: using guessed type char gbMaxPlayers;
|
||
|
|
||
|
//----- (0043E193) --------------------------------------------------------
|
||
|
int __fastcall On_SYNCPUTITEM(struct TCmdPItem *pCmd, int pnum)
|
||
|
{
|
||
|
int v2; // ebx
|
||
|
struct TCmdPItem *v3; // esi
|
||
|
unsigned char *v4; // edi
|
||
|
int v5; // edx
|
||
|
int v6; // ebp
|
||
|
|
||
|
v2 = pnum;
|
||
|
v3 = pCmd;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 22);
|
||
|
return 22;
|
||
|
}
|
||
|
v4 = (unsigned char *)&plr[pnum].plrlevel;
|
||
|
if ( currlevel != *(_DWORD *)v4 )
|
||
|
{
|
||
|
_LOWORD(pnum) = pCmd->wCI;
|
||
|
PutItemRecord(pCmd->dwSeed, pnum, (unsigned short)pCmd->wIndx);
|
||
|
delta_put_item(v3, (unsigned char)v3->x, (unsigned char)v3->y, *v4);
|
||
|
check_update_plr(v2);
|
||
|
return 22;
|
||
|
}
|
||
|
v6 = SyncPutItem(
|
||
|
pnum,
|
||
|
(unsigned char)pCmd->x,
|
||
|
(unsigned char)pCmd->y,
|
||
|
(unsigned short)pCmd->wIndx,
|
||
|
(unsigned short)pCmd->wCI,
|
||
|
pCmd->dwSeed,
|
||
|
(unsigned char)pCmd->bId,
|
||
|
(unsigned char)pCmd->bDur,
|
||
|
(unsigned char)pCmd->bMDur,
|
||
|
(unsigned char)pCmd->bCh,
|
||
|
(unsigned char)pCmd->bMCh,
|
||
|
(unsigned short)pCmd->wValue,
|
||
|
pCmd->dwBuff);
|
||
|
if ( v6 != -1 )
|
||
|
{
|
||
|
_LOWORD(v5) = v3->wCI;
|
||
|
PutItemRecord(v3->dwSeed, v5, (unsigned short)v3->wIndx);
|
||
|
delta_put_item(v3, item[v6]._ix, item[v6]._iy, *v4);
|
||
|
check_update_plr(v2);
|
||
|
}
|
||
|
return 22;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043E284) --------------------------------------------------------
|
||
|
int __fastcall On_RESPAWNITEM(struct TCmdPItem *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdPItem *v2; // esi
|
||
|
unsigned char *v3; // edi
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 22);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v3 = (unsigned char *)&plr[pnum].plrlevel;
|
||
|
if ( currlevel == *(_DWORD *)v3 && pnum != myplr )
|
||
|
SyncPutItem(
|
||
|
pnum,
|
||
|
(unsigned char)pCmd->x,
|
||
|
(unsigned char)pCmd->y,
|
||
|
(unsigned short)pCmd->wIndx,
|
||
|
(unsigned short)pCmd->wCI,
|
||
|
pCmd->dwSeed,
|
||
|
(unsigned char)pCmd->bId,
|
||
|
(unsigned char)pCmd->bDur,
|
||
|
(unsigned char)pCmd->bMDur,
|
||
|
(unsigned char)pCmd->bCh,
|
||
|
(unsigned char)pCmd->bMCh,
|
||
|
(unsigned short)pCmd->wValue,
|
||
|
pCmd->dwBuff);
|
||
|
_LOWORD(pnum) = v2->wCI;
|
||
|
PutItemRecord(v2->dwSeed, pnum, (unsigned short)v2->wIndx);
|
||
|
delta_put_item(v2, (unsigned char)v2->x, (unsigned char)v2->y, *v3);
|
||
|
}
|
||
|
return 22;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043E32A) --------------------------------------------------------
|
||
|
int __fastcall On_ATTACKXY(struct TCmdLoc *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdLoc *v2; // edi
|
||
|
int v3; // esi
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
v3 = pnum;
|
||
|
if ( currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
MakePlrPath(pnum, (unsigned char)pCmd->x, (unsigned char)pCmd->y, 0);
|
||
|
plr[v3].destAction = 9;
|
||
|
plr[v3].destParam1 = (unsigned char)v2->x;
|
||
|
plr[v3].destParam2 = (unsigned char)v2->y;
|
||
|
}
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043E386) --------------------------------------------------------
|
||
|
int __fastcall On_SATTACKXY(struct TCmdLoc *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdLoc *v2; // edi
|
||
|
int v3; // esi
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
v3 = pnum;
|
||
|
if ( currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
ClrPlrPath(pnum);
|
||
|
plr[v3].destAction = 9;
|
||
|
plr[v3].destParam1 = (unsigned char)v2->x;
|
||
|
plr[v3].destParam2 = (unsigned char)v2->y;
|
||
|
}
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043E3D5) --------------------------------------------------------
|
||
|
int __fastcall On_RATTACKXY(struct TCmdLoc *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdLoc *v2; // edi
|
||
|
int v3; // esi
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
v3 = pnum;
|
||
|
if ( currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
ClrPlrPath(pnum);
|
||
|
plr[v3].destAction = 10;
|
||
|
plr[v3].destParam1 = (unsigned char)v2->x;
|
||
|
plr[v3].destParam2 = (unsigned char)v2->y;
|
||
|
}
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043E424) --------------------------------------------------------
|
||
|
int __fastcall On_SPELLXYD(struct TCmdLocParam3 *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdLocParam3 *v2; // edi
|
||
|
int v3; // esi
|
||
|
int v4; // eax
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
v3 = pnum;
|
||
|
if ( currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
if ( currlevel || *(_DWORD *)&spelldata[(unsigned short)pCmd->wParam1].sTownSpell )
|
||
|
{
|
||
|
ClrPlrPath(pnum);
|
||
|
plr[v3].destAction = 26;
|
||
|
plr[v3].destParam1 = (unsigned char)v2->x;
|
||
|
plr[v3].destParam2 = (unsigned char)v2->y;
|
||
|
plr[v3].destParam3 = (unsigned short)v2->wParam2;
|
||
|
plr[v3].destParam4 = (unsigned short)v2->wParam3;
|
||
|
v4 = (unsigned short)v2->wParam1;
|
||
|
plr[v3]._pSplFrom = 0;
|
||
|
plr[v3]._pSpell = v4;
|
||
|
plr[v3]._pSplType = plr[v3]._pRSplType;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
msg_errorf("%s has cast an illegal spell.", plr[v3]._pName);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return 9;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043E4D2) --------------------------------------------------------
|
||
|
int __fastcall On_SPELLXY(struct TCmdLocParam2 *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdLocParam2 *v2; // edi
|
||
|
int v3; // esi
|
||
|
int v4; // eax
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
v3 = pnum;
|
||
|
if ( currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
if ( currlevel || *(_DWORD *)&spelldata[(unsigned short)pCmd->wParam1].sTownSpell )
|
||
|
{
|
||
|
ClrPlrPath(pnum);
|
||
|
plr[v3].destAction = 12;
|
||
|
plr[v3].destParam1 = (unsigned char)v2->x;
|
||
|
plr[v3].destParam2 = (unsigned char)v2->y;
|
||
|
plr[v3].destParam3 = (unsigned short)v2->wParam2;
|
||
|
v4 = (unsigned short)v2->wParam1;
|
||
|
plr[v3]._pSplFrom = 0;
|
||
|
plr[v3]._pSpell = v4;
|
||
|
plr[v3]._pSplType = plr[v3]._pRSplType;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
msg_errorf("%s has cast an illegal spell.", plr[v3]._pName);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return 7;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043E576) --------------------------------------------------------
|
||
|
int __fastcall On_TSPELLXY(struct TCmdLocParam2 *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdLocParam2 *v2; // edi
|
||
|
int v3; // esi
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
v3 = pnum;
|
||
|
if ( currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
if ( currlevel || *(_DWORD *)&spelldata[(unsigned short)pCmd->wParam1].sTownSpell )
|
||
|
{
|
||
|
ClrPlrPath(pnum);
|
||
|
plr[v3].destAction = 12;
|
||
|
plr[v3].destParam1 = (unsigned char)v2->x;
|
||
|
plr[v3].destParam2 = (unsigned char)v2->y;
|
||
|
plr[v3].destParam3 = (unsigned short)v2->wParam2;
|
||
|
plr[v3]._pSpell = (unsigned short)v2->wParam1;
|
||
|
plr[v3]._pSplType = plr[v3]._pTSplType;
|
||
|
plr[v3]._pSplFrom = 2;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
msg_errorf("%s has cast an illegal spell.", plr[v3]._pName);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return 7;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043E61A) --------------------------------------------------------
|
||
|
int __fastcall On_OPOBJXY(struct TCmdLocParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdLocParam1 *v2; // esi
|
||
|
int v3; // edi
|
||
|
int v4; // eax
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
v3 = pnum;
|
||
|
if ( currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
v4 = (unsigned short)pCmd->wParam1;
|
||
|
if ( object[v4]._oSolidFlag || object[v4]._oDoorFlag )
|
||
|
MakePlrPath(pnum, (unsigned char)pCmd->x, (unsigned char)pCmd->y, 0);
|
||
|
else
|
||
|
MakePlrPath(pnum, (unsigned char)pCmd->x, (unsigned char)pCmd->y, 1u);
|
||
|
plr[v3].destAction = 13;
|
||
|
plr[v3].destParam1 = (unsigned short)v2->wParam1;
|
||
|
}
|
||
|
}
|
||
|
return 5;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043E68A) --------------------------------------------------------
|
||
|
int __fastcall On_DISARMXY(struct TCmdLocParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdLocParam1 *v2; // esi
|
||
|
int v3; // edi
|
||
|
int v4; // eax
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
v3 = pnum;
|
||
|
if ( currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
v4 = (unsigned short)pCmd->wParam1;
|
||
|
if ( object[v4]._oSolidFlag || object[v4]._oDoorFlag )
|
||
|
MakePlrPath(pnum, (unsigned char)pCmd->x, (unsigned char)pCmd->y, 0);
|
||
|
else
|
||
|
MakePlrPath(pnum, (unsigned char)pCmd->x, (unsigned char)pCmd->y, 1u);
|
||
|
plr[v3].destAction = 14;
|
||
|
plr[v3].destParam1 = (unsigned short)v2->wParam1;
|
||
|
}
|
||
|
}
|
||
|
return 5;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043E6FA) --------------------------------------------------------
|
||
|
int __fastcall On_OPOBJT(struct TCmdParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
int v2; // eax
|
||
|
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
v2 = pnum;
|
||
|
if ( currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
plr[v2].destAction = 18;
|
||
|
plr[v2].destParam1 = (unsigned short)pCmd->wParam1;
|
||
|
}
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043E732) --------------------------------------------------------
|
||
|
int __fastcall On_ATTACKID(struct TCmdParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
int v2; // ebp
|
||
|
struct TCmdParam1 *v3; // edi
|
||
|
int v4; // esi
|
||
|
int v5; // ebx
|
||
|
int v6; // eax
|
||
|
|
||
|
v2 = pnum;
|
||
|
v3 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
v4 = pnum;
|
||
|
if ( currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
v5 = abs(plr[v4].WorldX - monster[(unsigned short)pCmd->wParam1]._mfutx);
|
||
|
v6 = abs(plr[v4].WorldY - monster[(unsigned short)v3->wParam1]._mfuty);
|
||
|
if ( v5 > 1 || v6 > 1 )
|
||
|
MakePlrPath(
|
||
|
v2,
|
||
|
monster[(unsigned short)v3->wParam1]._mfutx,
|
||
|
monster[(unsigned short)v3->wParam1]._mfuty,
|
||
|
0);
|
||
|
plr[v4].destAction = 20;
|
||
|
plr[v4].destParam1 = (unsigned short)v3->wParam1;
|
||
|
}
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043E7DF) --------------------------------------------------------
|
||
|
int __fastcall On_ATTACKPID(struct TCmdParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdParam1 *v2; // edi
|
||
|
int v3; // esi
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
v3 = pnum;
|
||
|
if ( currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
MakePlrPath(pnum, plr[(unsigned short)pCmd->wParam1]._px, plr[(unsigned short)pCmd->wParam1]._py, 0);
|
||
|
plr[v3].destAction = 21;
|
||
|
plr[v3].destParam1 = (unsigned short)v2->wParam1;
|
||
|
}
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043E840) --------------------------------------------------------
|
||
|
int __fastcall On_RATTACKID(struct TCmdParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdParam1 *v2; // edi
|
||
|
int v3; // esi
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
v3 = pnum;
|
||
|
if ( currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
ClrPlrPath(pnum);
|
||
|
plr[v3].destAction = 22;
|
||
|
plr[v3].destParam1 = (unsigned short)v2->wParam1;
|
||
|
}
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043E885) --------------------------------------------------------
|
||
|
int __fastcall On_RATTACKPID(struct TCmdParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdParam1 *v2; // edi
|
||
|
int v3; // esi
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
v3 = pnum;
|
||
|
if ( currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
ClrPlrPath(pnum);
|
||
|
plr[v3].destAction = 23;
|
||
|
plr[v3].destParam1 = (unsigned short)v2->wParam1;
|
||
|
}
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043E8CA) --------------------------------------------------------
|
||
|
int __fastcall On_SPELLID(struct TCmdLocParam2 *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdLocParam2 *v2; // edi
|
||
|
int v3; // esi
|
||
|
int v4; // eax
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
v3 = pnum;
|
||
|
if ( currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
if ( currlevel || *(_DWORD *)&spelldata[(unsigned short)pCmd->wParam1].sTownSpell )
|
||
|
{
|
||
|
ClrPlrPath(pnum);
|
||
|
plr[v3].destAction = 24;
|
||
|
plr[v3].destParam1 = *(unsigned short *)&v2->x;
|
||
|
plr[v3].destParam2 = (unsigned short)v2->wParam2;
|
||
|
v4 = (unsigned short)v2->wParam1;
|
||
|
plr[v3]._pSplFrom = 0;
|
||
|
plr[v3]._pSpell = v4;
|
||
|
plr[v3]._pSplType = plr[v3]._pRSplType;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
msg_errorf("%s has cast an illegal spell.", plr[v3]._pName);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return 7;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043E964) --------------------------------------------------------
|
||
|
int __fastcall On_SPELLPID(struct TCmdLocParam2 *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdLocParam2 *v2; // edi
|
||
|
int v3; // esi
|
||
|
int v4; // eax
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
v3 = pnum;
|
||
|
if ( currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
if ( currlevel || *(_DWORD *)&spelldata[(unsigned short)pCmd->wParam1].sTownSpell )
|
||
|
{
|
||
|
ClrPlrPath(pnum);
|
||
|
plr[v3].destAction = 25;
|
||
|
plr[v3].destParam1 = *(unsigned short *)&v2->x;
|
||
|
plr[v3].destParam2 = (unsigned short)v2->wParam2;
|
||
|
v4 = (unsigned short)v2->wParam1;
|
||
|
plr[v3]._pSplFrom = 0;
|
||
|
plr[v3]._pSpell = v4;
|
||
|
plr[v3]._pSplType = plr[v3]._pRSplType;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
msg_errorf("%s has cast an illegal spell.", plr[v3]._pName);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return 7;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043E9FE) --------------------------------------------------------
|
||
|
int __fastcall On_TSPELLID(struct TCmdLocParam2 *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdLocParam2 *v2; // edi
|
||
|
int v3; // esi
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
v3 = pnum;
|
||
|
if ( currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
if ( currlevel || *(_DWORD *)&spelldata[(unsigned short)pCmd->wParam1].sTownSpell )
|
||
|
{
|
||
|
ClrPlrPath(pnum);
|
||
|
plr[v3].destAction = 24;
|
||
|
plr[v3].destParam1 = *(unsigned short *)&v2->x;
|
||
|
plr[v3].destParam2 = (unsigned short)v2->wParam2;
|
||
|
plr[v3]._pSpell = (unsigned short)v2->wParam1;
|
||
|
plr[v3]._pSplType = plr[v3]._pTSplType;
|
||
|
plr[v3]._pSplFrom = 2;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
msg_errorf("%s has cast an illegal spell.", plr[v3]._pName);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return 7;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043EA98) --------------------------------------------------------
|
||
|
int __fastcall On_TSPELLPID(struct TCmdLocParam2 *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdLocParam2 *v2; // edi
|
||
|
int v3; // esi
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
v3 = pnum;
|
||
|
if ( currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
if ( currlevel || *(_DWORD *)&spelldata[(unsigned short)pCmd->wParam1].sTownSpell )
|
||
|
{
|
||
|
ClrPlrPath(pnum);
|
||
|
plr[v3].destAction = 25;
|
||
|
plr[v3].destParam1 = *(unsigned short *)&v2->x;
|
||
|
plr[v3].destParam2 = (unsigned short)v2->wParam2;
|
||
|
plr[v3]._pSpell = (unsigned short)v2->wParam1;
|
||
|
plr[v3]._pSplType = plr[v3]._pTSplType;
|
||
|
plr[v3]._pSplFrom = 2;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
msg_errorf("%s has cast an illegal spell.", plr[v3]._pName);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return 7;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043EB32) --------------------------------------------------------
|
||
|
int __fastcall On_KNOCKBACK(struct TCmdParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
int v2; // edi
|
||
|
struct TCmdParam1 *v3; // esi
|
||
|
|
||
|
v2 = pnum;
|
||
|
v3 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 && currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
M_GetKnockback((unsigned short)pCmd->wParam1);
|
||
|
M_StartHit((unsigned short)v3->wParam1, v2, 0);
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043EB74) --------------------------------------------------------
|
||
|
int __fastcall On_RESURRECT(struct TCmdParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
int v2; // esi
|
||
|
|
||
|
v2 = pnum;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 3);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
DoResurrect(pnum, (unsigned short)pCmd->wParam1);
|
||
|
check_update_plr(v2);
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043EBA4) --------------------------------------------------------
|
||
|
int __fastcall On_HEALOTHER(struct TCmdParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
if ( gbBufferMsgs != 1 && currlevel == plr[pnum].plrlevel )
|
||
|
DoHealOther(pnum, (unsigned short)pCmd->wParam1);
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043EBD5) --------------------------------------------------------
|
||
|
int __fastcall On_TALKXY(struct TCmdLocParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdLocParam1 *v2; // edi
|
||
|
int v3; // esi
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
v3 = pnum;
|
||
|
if ( currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
MakePlrPath(pnum, (unsigned char)pCmd->x, (unsigned char)pCmd->y, 0);
|
||
|
plr[v3].destAction = 17;
|
||
|
plr[v3].destParam1 = (unsigned short)v2->wParam1;
|
||
|
}
|
||
|
}
|
||
|
return 5;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043EC27) --------------------------------------------------------
|
||
|
int __fastcall On_NEWLVL(struct TCmdParam2 *pCmd, int pnum)
|
||
|
{
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 5);
|
||
|
}
|
||
|
else if ( pnum != myplr )
|
||
|
{
|
||
|
StartNewLvl(pnum, (unsigned short)pCmd->wParam1, (unsigned short)pCmd->wParam2);
|
||
|
}
|
||
|
return 5;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043EC5B) --------------------------------------------------------
|
||
|
int __fastcall On_WARP(struct TCmdParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
int v2; // esi
|
||
|
|
||
|
v2 = pnum;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 3);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
StartWarpLvl(pnum, (unsigned short)pCmd->wParam1);
|
||
|
if ( v2 == myplr && pcurs >= CURSOR_FIRSTITEM )
|
||
|
{
|
||
|
qmemcpy(&item[127], &plr[myplr].HoldItem, sizeof(ItemStruct));
|
||
|
AutoGetItem(myplr, 127);
|
||
|
}
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043ECBA) --------------------------------------------------------
|
||
|
int __fastcall On_MONSTDEATH(struct TCmdLocParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdLocParam1 *v2; // esi
|
||
|
unsigned char *v3; // edi
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 5);
|
||
|
}
|
||
|
else if ( pnum != myplr )
|
||
|
{
|
||
|
v3 = (unsigned char *)&plr[pnum].plrlevel;
|
||
|
if ( currlevel == *(_DWORD *)v3 )
|
||
|
M_SyncStartKill((unsigned short)pCmd->wParam1, (unsigned char)pCmd->x, (unsigned char)pCmd->y, pnum);
|
||
|
delta_kill_monster((unsigned short)v2->wParam1, v2->x, v2->y, *v3);
|
||
|
}
|
||
|
return 5;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043ED23) --------------------------------------------------------
|
||
|
int __fastcall On_KILLGOLEM(struct TCmdLocParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
int v2; // edi
|
||
|
struct TCmdLocParam1 *v3; // esi
|
||
|
|
||
|
v2 = pnum;
|
||
|
v3 = pCmd;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 5);
|
||
|
}
|
||
|
else if ( pnum != myplr )
|
||
|
{
|
||
|
if ( currlevel == pCmd->wParam1 )
|
||
|
M_SyncStartKill(pnum, (unsigned char)pCmd->x, (unsigned char)pCmd->y, pnum);
|
||
|
delta_kill_monster(v2, v3->x, v3->y, plr[v2].plrlevel);
|
||
|
}
|
||
|
return 5;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043ED89) --------------------------------------------------------
|
||
|
int __fastcall On_AWAKEGOLEM(struct TCmdGolem *pCmd, int pnum)
|
||
|
{
|
||
|
int v2; // esi
|
||
|
int v3; // eax
|
||
|
signed int v4; // ebp
|
||
|
int v5; // edi
|
||
|
int v6; // edx
|
||
|
|
||
|
v2 = pnum;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 10);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v3 = 21720 * pnum;
|
||
|
if ( currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
if ( pnum != myplr )
|
||
|
{
|
||
|
v4 = 1;
|
||
|
v5 = 0;
|
||
|
if ( nummissiles <= 0 )
|
||
|
goto LABEL_16;
|
||
|
do
|
||
|
{
|
||
|
v6 = missileactive[v5];
|
||
|
if ( missile[v6]._mitype == MIS_GOLEM && missile[v6]._misource == v2 )
|
||
|
v4 = 0;
|
||
|
++v5;
|
||
|
}
|
||
|
while ( v5 < nummissiles );
|
||
|
if ( v4 )
|
||
|
LABEL_16:
|
||
|
AddMissile(
|
||
|
*(int *)((char *)&plr[0].WorldX + v3),
|
||
|
*(int *)((char *)&plr[0].WorldY + v3),
|
||
|
(unsigned char)pCmd->_mx,
|
||
|
(unsigned char)pCmd->_my,
|
||
|
(unsigned char)pCmd->_mdir,
|
||
|
MIS_GOLEM,
|
||
|
0,
|
||
|
v2,
|
||
|
0,
|
||
|
1);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
_LOBYTE(v3) = pCmd->_currlevel;
|
||
|
delta_sync_golem(pCmd, pnum, v3);
|
||
|
}
|
||
|
}
|
||
|
return 10;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043EE3D) --------------------------------------------------------
|
||
|
int __fastcall On_MONSTDAMAGE(struct TCmdLocParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
int v2; // edi
|
||
|
struct TCmdLocParam1 *v3; // edx
|
||
|
unsigned char *v4; // ebx
|
||
|
char *v5; // esi
|
||
|
int *v6; // ecx
|
||
|
int *v7; // eax
|
||
|
|
||
|
v2 = pnum;
|
||
|
v3 = pCmd;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(v2, pCmd, 5);
|
||
|
}
|
||
|
else if ( v2 != myplr )
|
||
|
{
|
||
|
v4 = (unsigned char *)&plr[v2].plrlevel;
|
||
|
if ( currlevel == *(_DWORD *)v4 )
|
||
|
{
|
||
|
v5 = &monster[*(unsigned short *)&pCmd->x].mWhoHit;
|
||
|
*v5 |= 1 << v2;
|
||
|
v6 = &monster[*(unsigned short *)&pCmd->x]._mhitpoints;
|
||
|
if ( *v6 )
|
||
|
{
|
||
|
*v6 -= (unsigned short)v3->wParam1;
|
||
|
v7 = &monster[*(unsigned short *)&v3->x]._mhitpoints;
|
||
|
if ( (signed int)(*v7 & 0xFFFFFFC0) < 64 )
|
||
|
*v7 = 64;
|
||
|
delta_monster_hp(*(unsigned short *)&v3->x, monster[*(unsigned short *)&v3->x]._mhitpoints, *v4);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return 5;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043EEF5) --------------------------------------------------------
|
||
|
int __fastcall On_PLRDEAD(struct TCmdParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 3);
|
||
|
}
|
||
|
else if ( pnum == myplr )
|
||
|
{
|
||
|
check_update_plr(pnum);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
StartPlayerKill(pnum, (unsigned short)pCmd->wParam1);
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043EF2D) --------------------------------------------------------
|
||
|
int __fastcall On_PLRDAMAGE(struct TCmdDamage *pCmd, int pnum)
|
||
|
{
|
||
|
int v2; // edi
|
||
|
int v3; // eax
|
||
|
int v4; // esi
|
||
|
int *v5; // esi
|
||
|
int v6; // ecx
|
||
|
|
||
|
v2 = myplr;
|
||
|
if ( (unsigned char)pCmd->bPlr == myplr )
|
||
|
{
|
||
|
if ( currlevel )
|
||
|
{
|
||
|
if ( gbBufferMsgs != 1 && currlevel == plr[pnum].plrlevel && pCmd->dwDam <= 0x2EE00u )
|
||
|
{
|
||
|
v3 = myplr;
|
||
|
v4 = plr[myplr]._pHitPoints;
|
||
|
if ( (signed int)(v4 & 0xFFFFFFC0) > 0 )
|
||
|
{
|
||
|
drawhpflag = 1;
|
||
|
plr[v3]._pHitPoints = v4 - pCmd->dwDam;
|
||
|
v5 = &plr[v3]._pHPBase;
|
||
|
*v5 -= pCmd->dwDam;
|
||
|
v6 = plr[v3]._pMaxHP;
|
||
|
if ( plr[v3]._pHitPoints > v6 )
|
||
|
{
|
||
|
plr[v3]._pHitPoints = v6;
|
||
|
*v5 = plr[v3]._pMaxHPBase;
|
||
|
}
|
||
|
if ( (signed int)(plr[v3]._pHitPoints & 0xFFFFFFC0) <= 0 )
|
||
|
SyncPlrKill(v2, 1);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return 6;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043EFDD) --------------------------------------------------------
|
||
|
int __fastcall On_OPENDOOR(struct TCmdParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdParam1 *v2; // edi
|
||
|
unsigned char *v3; // esi
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 3);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v3 = (unsigned char *)&plr[pnum].plrlevel;
|
||
|
if ( currlevel == *(_DWORD *)v3 )
|
||
|
SyncOpObject(pnum, CMD_OPENDOOR, (unsigned short)pCmd->wParam1);
|
||
|
delta_sync_object((unsigned short)v2->wParam1, 0x2Bu, *v3);
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043F033) --------------------------------------------------------
|
||
|
void __fastcall delta_sync_object(int oi, unsigned char bCmd, unsigned char bLevel)
|
||
|
{
|
||
|
if ( gbMaxPlayers != 1 )
|
||
|
{
|
||
|
sgbDeltaChanged = 1;
|
||
|
sgLevels[bLevel].object[oi].bCmd = bCmd;
|
||
|
}
|
||
|
}
|
||
|
// 67618C: using guessed type char sgbDeltaChanged;
|
||
|
// 679660: using guessed type char gbMaxPlayers;
|
||
|
|
||
|
//----- (0043F058) --------------------------------------------------------
|
||
|
int __fastcall On_CLOSEDOOR(struct TCmdParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdParam1 *v2; // edi
|
||
|
unsigned char *v3; // esi
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 3);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v3 = (unsigned char *)&plr[pnum].plrlevel;
|
||
|
if ( currlevel == *(_DWORD *)v3 )
|
||
|
SyncOpObject(pnum, CMD_CLOSEDOOR, (unsigned short)pCmd->wParam1);
|
||
|
delta_sync_object((unsigned short)v2->wParam1, 0x2Cu, *v3);
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043F0AE) --------------------------------------------------------
|
||
|
int __fastcall On_OPERATEOBJ(struct TCmdParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdParam1 *v2; // edi
|
||
|
unsigned char *v3; // esi
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 3);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v3 = (unsigned char *)&plr[pnum].plrlevel;
|
||
|
if ( currlevel == *(_DWORD *)v3 )
|
||
|
SyncOpObject(pnum, CMD_OPERATEOBJ, (unsigned short)pCmd->wParam1);
|
||
|
delta_sync_object((unsigned short)v2->wParam1, 0x2Du, *v3);
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043F104) --------------------------------------------------------
|
||
|
int __fastcall On_PLROPOBJ(struct TCmdParam2 *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdParam2 *v2; // esi
|
||
|
unsigned char *v3; // edi
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 5);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v3 = (unsigned char *)&plr[pnum].plrlevel;
|
||
|
if ( currlevel == *(_DWORD *)v3 )
|
||
|
SyncOpObject((unsigned short)pCmd->wParam1, CMD_PLROPOBJ, (unsigned short)pCmd->wParam2);
|
||
|
delta_sync_object((unsigned short)v2->wParam2, 0x2Eu, *v3);
|
||
|
}
|
||
|
return 5;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043F15C) --------------------------------------------------------
|
||
|
int __fastcall On_BREAKOBJ(struct TCmdParam2 *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdParam2 *v2; // esi
|
||
|
unsigned char *v3; // edi
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 5);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v3 = (unsigned char *)&plr[pnum].plrlevel;
|
||
|
if ( currlevel == *(_DWORD *)v3 )
|
||
|
SyncBreakObj((unsigned short)pCmd->wParam1, (unsigned short)pCmd->wParam2);
|
||
|
delta_sync_object((unsigned short)v2->wParam2, 0x2Fu, *v3);
|
||
|
}
|
||
|
return 5;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043F1B0) --------------------------------------------------------
|
||
|
int __fastcall On_CHANGEPLRITEMS(struct TCmdChItem *pCmd, int pnum)
|
||
|
{
|
||
|
int v2; // eax
|
||
|
int v3; // edx
|
||
|
int v4; // ST04_4
|
||
|
int v5; // edx
|
||
|
|
||
|
v2 = pnum;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 11);
|
||
|
}
|
||
|
else if ( pnum != myplr )
|
||
|
{
|
||
|
v3 = (unsigned char)pCmd->bId;
|
||
|
_LOWORD(v3) = pCmd->wCI;
|
||
|
v4 = v3;
|
||
|
v5 = (unsigned short)pCmd->wIndx;
|
||
|
_LOBYTE(v5) = pCmd->bLoc;
|
||
|
CheckInvSwap(v2, v5, (unsigned short)pCmd->wIndx, v4, pCmd->dwSeed, (unsigned char)pCmd->bId);
|
||
|
}
|
||
|
return 11;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043F1F0) --------------------------------------------------------
|
||
|
int __fastcall On_DELPLRITEMS(struct TCmdDelItem *pCmd, int pnum)
|
||
|
{
|
||
|
int v2; // eax
|
||
|
|
||
|
v2 = pnum;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 2);
|
||
|
}
|
||
|
else if ( pnum != myplr )
|
||
|
{
|
||
|
_LOBYTE(pnum) = pCmd->bLoc;
|
||
|
inv_update_rem_item(v2, pnum);
|
||
|
}
|
||
|
return 2;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043F21E) --------------------------------------------------------
|
||
|
int __fastcall On_PLRLEVEL(struct TCmdParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 3);
|
||
|
}
|
||
|
else if ( pCmd->wParam1 <= 0x33u && pnum != myplr )
|
||
|
{
|
||
|
plr[pnum]._pLevel = pCmd->wParam1;
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043F258) --------------------------------------------------------
|
||
|
int __fastcall On_DROPITEM(struct TCmdPItem *pCmd, int pnum)
|
||
|
{
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
msg_send_packet(pnum, pCmd, 22);
|
||
|
else
|
||
|
delta_put_item(pCmd, (unsigned char)pCmd->x, (unsigned char)pCmd->y, plr[pnum].plrlevel);
|
||
|
return 22;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043F28F) --------------------------------------------------------
|
||
|
int __fastcall On_SEND_PLRINFO(struct TCmdPlrInfoHdr *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdPlrInfoHdr *v2; // esi
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
msg_send_packet(pnum, pCmd, (unsigned short)pCmd->wBytes + 5);
|
||
|
else
|
||
|
multi_player_joins(pnum, pCmd, pCmd->bCmd == 2);
|
||
|
return (unsigned short)v2->wBytes + 5;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
int __fastcall On_ACK_PLRINFO(struct TCmdPlrInfoHdr *pCmd, int pnum)
|
||
|
{
|
||
|
return On_SEND_PLRINFO(pCmd, pnum);
|
||
|
}
|
||
|
|
||
|
//----- (0043F2CE) --------------------------------------------------------
|
||
|
int __fastcall On_PLAYER_JOINLEVEL(struct TCmdLocParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
int v2; // ebx
|
||
|
struct TCmdLocParam1 *v3; // edi
|
||
|
int v4; // esi
|
||
|
int v5; // ecx
|
||
|
int v6; // ST08_4
|
||
|
int v7; // edx
|
||
|
int v8; // eax
|
||
|
int v9; // ecx
|
||
|
int v10; // eax
|
||
|
int v11; // eax
|
||
|
|
||
|
v2 = pnum;
|
||
|
v3 = pCmd;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 5);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v4 = pnum;
|
||
|
plr[pnum]._pLvlChanging = 0;
|
||
|
if ( plr[pnum]._pName[0] && !plr[v4].plractive )
|
||
|
{
|
||
|
plr[v4].plractive = 1;
|
||
|
++gbActivePlayers;
|
||
|
EventPlrMsg("Player '%s' (level %d) just joined the game", plr[pnum]._pName, plr[v4]._pLevel);
|
||
|
}
|
||
|
if ( plr[v4].plractive )
|
||
|
{
|
||
|
if ( myplr != v2 )
|
||
|
{
|
||
|
plr[v4].WorldX = (unsigned char)v3->x;
|
||
|
plr[v4].WorldY = (unsigned char)v3->y;
|
||
|
v5 = (unsigned short)v3->wParam1;
|
||
|
plr[v4]._pGFXLoad = 0;
|
||
|
plr[v4].plrlevel = v5;
|
||
|
if ( currlevel == plr[v4].plrlevel )
|
||
|
{
|
||
|
LoadPlrGFX(v2, 1);
|
||
|
SyncInitPlr(v2);
|
||
|
if ( (signed int)(plr[v4]._pHitPoints & 0xFFFFFFC0) <= 0 )
|
||
|
{
|
||
|
plr[v4]._pgfxnum = 0;
|
||
|
LoadPlrGFX(v2, 128);
|
||
|
v6 = plr[v4]._pDWidth;
|
||
|
v7 = plr[v4]._pDAnim[0];
|
||
|
plr[v4]._pmode = PM_DEATH;
|
||
|
NewPlrAnim(v2, v7, plr[v4]._pDFrames, 1, v6);
|
||
|
v8 = plr[v4]._pAnimLen;
|
||
|
v9 = v8 - 1;
|
||
|
plr[v4]._pVar8 = 2 * v8;
|
||
|
v10 = plr[v4].WorldX;
|
||
|
plr[v4]._pAnimFrame = v9;
|
||
|
dFlags[v10][plr[v4].WorldY] |= 4u;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
StartStand(v2, 0);
|
||
|
}
|
||
|
v11 = AddVision(plr[v4].WorldX, plr[v4].WorldY, plr[v4]._pLightRad, v2 == myplr);
|
||
|
plr[v4]._plid = -1;
|
||
|
plr[v4]._pvid = v11;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return 5;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
// 67862C: using guessed type char gbActivePlayers;
|
||
|
|
||
|
//----- (0043F448) --------------------------------------------------------
|
||
|
int __fastcall On_ACTIVATEPORTAL(DJunk *pCmd, int pnum)
|
||
|
{
|
||
|
signed int v2; // ebx
|
||
|
int v3; // edi
|
||
|
DJunk *v4; // esi
|
||
|
int v5; // eax
|
||
|
int v6; // edx
|
||
|
int v7; // ecx
|
||
|
int v8; // ST0C_4
|
||
|
int v9; // ST08_4
|
||
|
int v10; // ST04_4
|
||
|
|
||
|
v2 = 1;
|
||
|
v3 = pnum;
|
||
|
v4 = pCmd;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 9);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
ActivatePortal(
|
||
|
pnum,
|
||
|
(unsigned char)pCmd->portal[0].y,
|
||
|
(unsigned char)pCmd->portal[0].level,
|
||
|
*(unsigned short *)&pCmd->portal[0].ltype,
|
||
|
*(unsigned short *)&pCmd->portal[1].x,
|
||
|
*(unsigned short *)&pCmd->portal[1].level);
|
||
|
if ( v3 != myplr )
|
||
|
{
|
||
|
if ( currlevel )
|
||
|
{
|
||
|
if ( currlevel == plr[v3].plrlevel )
|
||
|
{
|
||
|
v6 = nummissiles;
|
||
|
v7 = 0;
|
||
|
if ( nummissiles <= 0 )
|
||
|
goto LABEL_19;
|
||
|
do
|
||
|
{
|
||
|
v5 = 176 * missileactive[v7];
|
||
|
if ( *(int *)((char *)&missile[0]._mitype + v5) == MIS_TOWN
|
||
|
&& *(int *)((char *)&missile[0]._misource + v5) == v3 )
|
||
|
{
|
||
|
v2 = 0;
|
||
|
}
|
||
|
++v7;
|
||
|
}
|
||
|
while ( v7 < nummissiles );
|
||
|
if ( v2 )
|
||
|
LABEL_19:
|
||
|
AddWarpMissile(v3, (unsigned char)v4->portal[0].y, (unsigned char)v4->portal[0].level);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
RemovePortalMissile(v3);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
AddInTownPortal(v3);
|
||
|
}
|
||
|
}
|
||
|
_LOBYTE(v5) = v4->portal[1].level;
|
||
|
_LOBYTE(v6) = v4->portal[0].y;
|
||
|
v8 = v5;
|
||
|
_LOBYTE(v5) = v4->portal[1].x;
|
||
|
v9 = v5;
|
||
|
_LOBYTE(v5) = v4->portal[0].ltype;
|
||
|
v10 = v5;
|
||
|
_LOBYTE(v5) = v4->portal[0].level;
|
||
|
delta_open_portal(v3, v6, v5, v10, v9, v8);
|
||
|
}
|
||
|
return 9;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043F521) --------------------------------------------------------
|
||
|
void __fastcall delta_open_portal(int pnum, int x, int y, int bLevel, int bLType, int bSetLvl)
|
||
|
{
|
||
|
int v6; // eax
|
||
|
|
||
|
v6 = pnum;
|
||
|
sgbDeltaChanged = 1;
|
||
|
sgJunk[0].portal[v6].y = y;
|
||
|
sgJunk[0].portal[v6].level = bLevel;
|
||
|
sgJunk[0].portal[v6].ltype = bLType;
|
||
|
sgJunk[0].portal[v6].x = x;
|
||
|
sgJunk[0].portal[v6].setlvl = bSetLvl;
|
||
|
}
|
||
|
// 67618C: using guessed type char sgbDeltaChanged;
|
||
|
|
||
|
//----- (0043F55C) --------------------------------------------------------
|
||
|
int __fastcall On_DEACTIVATEPORTAL(struct TCmd *pCmd, int pnum)
|
||
|
{
|
||
|
int v2; // esi
|
||
|
|
||
|
v2 = pnum;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 1);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if ( PortalOnLevel(pnum) )
|
||
|
RemovePortalMissile(v2);
|
||
|
DeactivatePortal(v2);
|
||
|
RemovePlrPortal(v2);
|
||
|
}
|
||
|
return 1;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043F59A) --------------------------------------------------------
|
||
|
int __fastcall On_RETOWN(struct TCmd *pCmd, int pnum)
|
||
|
{
|
||
|
int v2; // esi
|
||
|
|
||
|
v2 = pnum;
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 1);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if ( pnum == myplr )
|
||
|
{
|
||
|
deathflag = 0;
|
||
|
gamemenu_off();
|
||
|
}
|
||
|
RestartTownLvl(v2);
|
||
|
}
|
||
|
return 1;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043F5D3) --------------------------------------------------------
|
||
|
int __fastcall On_SETSTR(struct TCmdParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
unsigned short v2; // cx
|
||
|
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 3);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v2 = pCmd->wParam1;
|
||
|
if ( v2 <= 0x2EEu && pnum != myplr )
|
||
|
SetPlrStr(pnum, v2);
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043F60C) --------------------------------------------------------
|
||
|
int __fastcall On_SETDEX(struct TCmdParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
unsigned short v2; // cx
|
||
|
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 3);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v2 = pCmd->wParam1;
|
||
|
if ( v2 <= 0x2EEu && pnum != myplr )
|
||
|
SetPlrDex(pnum, v2);
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043F645) --------------------------------------------------------
|
||
|
int __fastcall On_SETMAG(struct TCmdParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
unsigned short v2; // cx
|
||
|
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 3);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v2 = pCmd->wParam1;
|
||
|
if ( v2 <= 0x2EEu && pnum != myplr )
|
||
|
SetPlrMag(pnum, v2);
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043F67E) --------------------------------------------------------
|
||
|
int __fastcall On_SETVIT(struct TCmdParam1 *pCmd, int pnum)
|
||
|
{
|
||
|
unsigned short v2; // cx
|
||
|
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 3);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v2 = pCmd->wParam1;
|
||
|
if ( v2 <= 0x2EEu && pnum != myplr )
|
||
|
SetPlrVit(pnum, v2);
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043F6B7) --------------------------------------------------------
|
||
|
int __fastcall On_STRING(struct TCmdString *pCmd, int pnum)
|
||
|
{
|
||
|
const char *v2; // esi
|
||
|
int v3; // edi
|
||
|
size_t v4; // ebx
|
||
|
|
||
|
v2 = pCmd->str;
|
||
|
v3 = pnum;
|
||
|
v4 = strlen(pCmd->str);
|
||
|
if ( !gbBufferMsgs )
|
||
|
SendPlrMsg(v3, v2);
|
||
|
return v4 + 2;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043F6EC) --------------------------------------------------------
|
||
|
int __fastcall On_SYNCQUEST(struct TCmdQuest *pCmd, int pnum)
|
||
|
{
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 5);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if ( pnum != myplr )
|
||
|
SetMultiQuest(
|
||
|
(unsigned char)pCmd->q,
|
||
|
(unsigned char)pCmd->qstate,
|
||
|
pCmd->qlog,
|
||
|
(unsigned char)pCmd->qvar1);
|
||
|
sgbDeltaChanged = 1;
|
||
|
}
|
||
|
return 5;
|
||
|
}
|
||
|
// 67618C: using guessed type char sgbDeltaChanged;
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043F72E) --------------------------------------------------------
|
||
|
int __fastcall On_ENDSHIELD(int a1, int pnum)
|
||
|
{
|
||
|
int v2; // ebx
|
||
|
int i; // esi
|
||
|
int v4; // edi
|
||
|
int v5; // eax
|
||
|
|
||
|
v2 = pnum;
|
||
|
if ( gbBufferMsgs != 1 && pnum != myplr && currlevel == plr[pnum].plrlevel )
|
||
|
{
|
||
|
for ( i = 0; i < nummissiles; ++i )
|
||
|
{
|
||
|
v4 = missileactive[i];
|
||
|
v5 = missileactive[i];
|
||
|
if ( missile[v5]._mitype == MIS_MANASHIELD && missile[v5]._misource == v2 )
|
||
|
{
|
||
|
ClearMissileSpot(missileactive[i]);
|
||
|
DeleteMissile(v4, i);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return 1;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
int __fastcall On_CHEAT_EXPERIENCE(struct TCmd *pCmd, int pnum)
|
||
|
{
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
{
|
||
|
msg_send_packet(pnum, pCmd, 1);
|
||
|
}
|
||
|
else if ( plr[pnum]._pLevel < 50 )
|
||
|
{
|
||
|
plr[pnum]._pExperience = plr[pnum]._pNextExper;
|
||
|
NextPlrLevel(pnum);
|
||
|
}
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
int __fastcall On_CHEAT_SPELL_LEVEL(struct TCmd *pCmd, int pnum)
|
||
|
{
|
||
|
if ( gbBufferMsgs == 1 )
|
||
|
msg_send_packet(pnum, pCmd, 1);
|
||
|
else
|
||
|
plr[pnum]._pSplLvl[plr[pnum]._pRSpell]++;
|
||
|
|
||
|
return 1;
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
//----- (0043F7A5) --------------------------------------------------------
|
||
|
int __cdecl On_DEBUG()
|
||
|
{
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
//----- (0043F7A9) --------------------------------------------------------
|
||
|
int __fastcall On_NOVA(struct TCmdLoc *pCmd, int pnum)
|
||
|
{
|
||
|
struct TCmdLoc *v2; // edi
|
||
|
int v3; // esi
|
||
|
|
||
|
v2 = pCmd;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
{
|
||
|
v3 = pnum;
|
||
|
if ( currlevel == plr[pnum].plrlevel && pnum != myplr )
|
||
|
{
|
||
|
ClrPlrPath(pnum);
|
||
|
plr[v3]._pSpell = SPL_NOVA;
|
||
|
plr[v3]._pSplType = 4;
|
||
|
plr[v3]._pSplFrom = 3;
|
||
|
plr[v3].destAction = 12;
|
||
|
plr[v3].destParam1 = (unsigned char)v2->x;
|
||
|
plr[v3].destParam2 = (unsigned char)v2->y;
|
||
|
}
|
||
|
}
|
||
|
return 3;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043F818) --------------------------------------------------------
|
||
|
int __fastcall On_SETSHIELD(int unused, int pnum)
|
||
|
{
|
||
|
int result; // eax
|
||
|
|
||
|
result = 1;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
plr[pnum].pManaShield = 1;
|
||
|
return result;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|
||
|
|
||
|
//----- (0043F830) --------------------------------------------------------
|
||
|
int __fastcall On_REMSHIELD(int unused, int pnum)
|
||
|
{
|
||
|
int result; // eax
|
||
|
|
||
|
result = 1;
|
||
|
if ( gbBufferMsgs != 1 )
|
||
|
plr[pnum].pManaShield = 0;
|
||
|
return result;
|
||
|
}
|
||
|
// 676194: using guessed type char gbBufferMsgs;
|