mirror of
https://github.com/galaxyhaxz/devilution.git
synced 2026-02-15 04:05:55 +00:00
initial up
This commit is contained in:
209
2020_03_31/Source/plrmsg.cpp
Normal file
209
2020_03_31/Source/plrmsg.cpp
Normal file
@@ -0,0 +1,209 @@
|
||||
#include "diablo.h"
|
||||
|
||||
int plrmsg_ticks; // weak
|
||||
char plr_msg_slot; // weak
|
||||
_plrmsg plr_msgs[8];
|
||||
|
||||
const char text_color_from_player_num[5] = { COL_WHITE, COL_WHITE, COL_WHITE, COL_WHITE, COL_GOLD };
|
||||
|
||||
void plrmsg_delay(int a1)
|
||||
{
|
||||
_plrmsg *pMsg; // eax
|
||||
signed int v2; // ecx
|
||||
|
||||
if ( a1 )
|
||||
{
|
||||
plrmsg_ticks = -GetTickCount();
|
||||
}
|
||||
else
|
||||
{
|
||||
plrmsg_ticks += GetTickCount();
|
||||
pMsg = plr_msgs;
|
||||
v2 = 8;
|
||||
do
|
||||
{
|
||||
pMsg->time += plrmsg_ticks;
|
||||
++pMsg;
|
||||
--v2;
|
||||
}
|
||||
while ( v2 );
|
||||
}
|
||||
}
|
||||
|
||||
char *ErrorPlrMsg(char *pszMsg)
|
||||
{
|
||||
_plrmsg *pMsg; // esi
|
||||
char *v2; // edi
|
||||
char *result; // eax
|
||||
|
||||
pMsg = &plr_msgs[(unsigned char)plr_msg_slot];
|
||||
v2 = pszMsg;
|
||||
plr_msg_slot = (plr_msg_slot + 1) & 7;
|
||||
pMsg->player = 4;
|
||||
pMsg->time = GetTickCount();
|
||||
result = strncpy(pMsg->str, v2, 0x90u);
|
||||
pMsg->str[143] = 0;
|
||||
return result;
|
||||
}
|
||||
|
||||
size_t __cdecl EventPlrMsg(char *pszFmt, ...)
|
||||
{
|
||||
char *v1; // esi
|
||||
va_list va; // [esp+Ch] [ebp+8h]
|
||||
|
||||
va_start(va, pszFmt);
|
||||
v1 = (char *)&plr_msgs[(unsigned char)plr_msg_slot];
|
||||
plr_msg_slot = (plr_msg_slot + 1) & 7;
|
||||
v1[4] = 4;
|
||||
*(_DWORD *)v1 = GetTickCount();
|
||||
v1 += 5;
|
||||
vsprintf(v1, pszFmt, va);
|
||||
return strlen(v1);
|
||||
}
|
||||
|
||||
void SendPlrMsg(int pnum, const char *pszStr)
|
||||
{
|
||||
_plrmsg *pMsg; // esi
|
||||
int v3; // ebx
|
||||
const char *v4; // ebp
|
||||
int v5; // edi
|
||||
const char *v6; // ebx
|
||||
|
||||
pMsg = &plr_msgs[(unsigned char)plr_msg_slot];
|
||||
v3 = pnum;
|
||||
v4 = pszStr;
|
||||
plr_msg_slot = (plr_msg_slot + 1) & 7;
|
||||
pMsg->player = pnum;
|
||||
pMsg->time = GetTickCount();
|
||||
v5 = v3;
|
||||
v6 = plr[v3]._pName;
|
||||
strlen(v6); /* these are used in debug */
|
||||
strlen(v4);
|
||||
sprintf(pMsg->str, "%s (lvl %d): %s", v6, plr[v5]._pLevel, v4);
|
||||
}
|
||||
|
||||
void ClearPlrMsg()
|
||||
{
|
||||
_plrmsg *pMsg; // esi
|
||||
DWORD v1; // eax
|
||||
signed int v2; // ecx
|
||||
|
||||
pMsg = plr_msgs;
|
||||
v1 = GetTickCount();
|
||||
v2 = 8;
|
||||
do
|
||||
{
|
||||
if ( (signed int)(v1 - pMsg->time) > 10000 )
|
||||
pMsg->str[0] = 0;
|
||||
++pMsg;
|
||||
--v2;
|
||||
}
|
||||
while ( v2 );
|
||||
}
|
||||
|
||||
void InitPlrMsg()
|
||||
{
|
||||
memset(plr_msgs, 0, 0x4C0u);
|
||||
plr_msg_slot = 0;
|
||||
}
|
||||
|
||||
void DrawPlrMsg()
|
||||
{
|
||||
int v0; // ebx
|
||||
int v1; // ebp
|
||||
int v2; // edi
|
||||
char *v3; // esi
|
||||
signed int v4; // [esp+Ch] [ebp-4h]
|
||||
|
||||
v0 = 74;
|
||||
v1 = 230;
|
||||
v2 = 620;
|
||||
if ( chrflag || questlog )
|
||||
{
|
||||
if ( invflag || sbookflag )
|
||||
return;
|
||||
v0 = 394;
|
||||
goto LABEL_9;
|
||||
}
|
||||
if ( invflag || sbookflag )
|
||||
LABEL_9:
|
||||
v2 = 300;
|
||||
v3 = plr_msgs[0].str;
|
||||
v4 = 8;
|
||||
do
|
||||
{
|
||||
if ( *v3 )
|
||||
PrintPlrMsg(v0, v1, v2, v3, (unsigned char)text_color_from_player_num[(unsigned char)*(v3 - 1)]);
|
||||
v3 += 152;
|
||||
v1 += 35;
|
||||
--v4;
|
||||
}
|
||||
while ( v4 );
|
||||
}
|
||||
|
||||
void PrintPlrMsg(int no, int x, int y, char *str, int just)
|
||||
{
|
||||
char *v5; // edi
|
||||
int *v6; // edx
|
||||
int v7; // esi
|
||||
char *v8; // edx
|
||||
int v9; // esi
|
||||
unsigned int v10; // eax
|
||||
unsigned char v11; // cl
|
||||
unsigned char v12; // cl
|
||||
int v13; // eax
|
||||
unsigned char v14; // bl
|
||||
int v15; // [esp+Ch] [ebp-Ch]
|
||||
int *v16; // [esp+10h] [ebp-8h]
|
||||
int v17; // [esp+14h] [ebp-4h]
|
||||
char *stra; // [esp+24h] [ebp+Ch]
|
||||
|
||||
v17 = 0;
|
||||
v5 = str;
|
||||
v15 = no;
|
||||
if ( *str )
|
||||
{
|
||||
v6 = &PitchTbl[x];
|
||||
v16 = v6;
|
||||
do
|
||||
{
|
||||
v7 = *v6;
|
||||
v8 = v5;
|
||||
v9 = v15 + v7;
|
||||
v10 = 0;
|
||||
stra = v5;
|
||||
while ( 1 )
|
||||
{
|
||||
v11 = *v8;
|
||||
if ( !*v8 )
|
||||
break;
|
||||
++v8;
|
||||
v12 = fontframe[gbFontTransTbl[v11]];
|
||||
v10 += fontkern[v12] + 1;
|
||||
if ( v12 )
|
||||
{
|
||||
if ( v10 >= y )
|
||||
goto LABEL_13;
|
||||
}
|
||||
else
|
||||
{
|
||||
stra = v8;
|
||||
}
|
||||
}
|
||||
stra = v8;
|
||||
LABEL_13:
|
||||
while ( v5 < stra )
|
||||
{
|
||||
v13 = (unsigned char)*v5++;
|
||||
v14 = fontframe[gbFontTransTbl[v13]];
|
||||
if ( v14 )
|
||||
PrintChar(v9, v14, just);
|
||||
v9 += fontkern[v14] + 1;
|
||||
}
|
||||
v6 = v16 + 10;
|
||||
++v17;
|
||||
v16 += 10;
|
||||
}
|
||||
while ( v17 != 3 && *v5 );
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user