diff --git a/3rdParty/Storm/Source/storm.cpp b/3rdParty/Storm/Source/storm.cpp
index 5ba8cf4a2..2802af22a 100644
--- a/3rdParty/Storm/Source/storm.cpp
+++ b/3rdParty/Storm/Source/storm.cpp
@@ -36,7 +36,7 @@ BOOL STORMAPI SNetSendTurn(char *data, size_t databytes) rBool;
BOOL STORMAPI SNetSetGameMode(DWORD modeFlags, bool makePublic) rBool;
BOOL STORMAPI SNetEnumGamesEx(int a1, int a2, int (__fastcall *callback)(DWORD, DWORD, DWORD), int *hintnextcall) rBool;
-BOOL STORMAPI SNetSetServerChatCommand(const char *command) rBool;
+BOOL STORMAPI SNetSendServerChatCommand(const char *command) rBool;
BOOL STORMAPI SNetDisconnectAll(DWORD flags) rBool;
BOOL STORMAPI SNetCreateLadderGame(const char *pszGameName, const char *pszGamePassword, const char *pszGameStatString, DWORD dwGameType, DWORD dwGameLadderType, DWORD dwGameModeFlags, char *GameTemplateData, int GameTemplateSize, int playerCount, char *creatorName, char *a11, int *playerID) rBool;
diff --git a/3rdParty/Storm/Source/storm.def b/3rdParty/Storm/Source/storm.def
index 240ce501d..fde2f7b9a 100644
--- a/3rdParty/Storm/Source/storm.def
+++ b/3rdParty/Storm/Source/storm.def
@@ -34,7 +34,7 @@ EXPORTS
SNetUnregisterEventHandler @131 NONAME
SNetEnumGamesEx @133 NONAME
- SNetSetServerChatCommand @134 NONAME
+ SNetSendServerChatCommand @134 NONAME
;SNetSendDatagram @135 NONAME
;SNetReceiveDatagram @136 NONAME
SNetDisconnectAll @137 NONAME
diff --git a/3rdParty/Storm/Source/storm.h b/3rdParty/Storm/Source/storm.h
index 39b69942e..541b410f3 100644
--- a/3rdParty/Storm/Source/storm.h
+++ b/3rdParty/Storm/Source/storm.h
@@ -432,7 +432,7 @@ SNetSetGameMode(
#define SNMakeGamePublic() SNetSetGameMode( (DWORD mode, SNetGetGameInfo(GAMEINFO_MODEFLAGS, &mode, 4), mode), true)
BOOL STORMAPI SNetEnumGamesEx(int a1, int a2, int (__fastcall *callback)(DWORD, DWORD, DWORD), int *hintnextcall);
-BOOL STORMAPI SNetSetServerChatCommand(const char *command);
+BOOL STORMAPI SNetSendServerChatCommand(const char *command);
BOOL STORMAPI SNetDisconnectAll(DWORD flags);
BOOL STORMAPI SNetCreateLadderGame(const char *pszGameName, const char *pszGamePassword, const char *pszGameStatString, DWORD dwGameType, DWORD dwGameLadderType, DWORD dwGameModeFlags, char *GameTemplateData, int GameTemplateSize, int playerCount, char *creatorName, char *a11, int *playerID);
diff --git a/3rdParty/Storm/Source/storm_gcc.def b/3rdParty/Storm/Source/storm_gcc.def
index 96812125f..d6b10a925 100644
--- a/3rdParty/Storm/Source/storm_gcc.def
+++ b/3rdParty/Storm/Source/storm_gcc.def
@@ -51,8 +51,8 @@ EXPORTS
SNetUnregisterEventHandler@8 @131 NONAME
SNetEnumGamesEx @133 NONAME
- SNetSetServerChatCommand @134 NONAME
- SNetSetServerChatCommand@4 @134 NONAME
+ SNetSendServerChatCommand @134 NONAME
+ SNetSendServerChatCommand@4 @134 NONAME
;SNetSendDatagram @135 NONAME
;SNetReceiveDatagram @136 NONAME
SNetDisconnectAll @137 NONAME
diff --git a/Diablo.dsp b/Diablo.dsp
index ebddb788a..d0eb23b86 100644
--- a/Diablo.dsp
+++ b/Diablo.dsp
@@ -391,7 +391,7 @@ SOURCE=.\Source\wave.cpp
# End Source File
# Begin Source File
-SOURCE=.\Source\world.cpp
+SOURCE=.\Source\render.cpp
# End Source File
# End Group
# Begin Group "Resource Files"
diff --git a/Diablo.vcxproj b/Diablo.vcxproj
index 5c8043519..6378ca9e0 100644
--- a/Diablo.vcxproj
+++ b/Diablo.vcxproj
@@ -190,7 +190,7 @@
-
+
@@ -270,7 +270,7 @@
-
+
@@ -287,4 +287,4 @@
-
\ No newline at end of file
+
diff --git a/Diablo.vcxproj.filters b/Diablo.vcxproj.filters
index 1e55ea38d..5fb895af3 100644
--- a/Diablo.vcxproj.filters
+++ b/Diablo.vcxproj.filters
@@ -1,4 +1,4 @@
-
+
@@ -220,7 +220,7 @@
Source Files
-
+
Source Files
@@ -445,7 +445,7 @@
Header Files
-
+
Header Files
@@ -464,4 +464,4 @@
PKWare
-
\ No newline at end of file
+
diff --git a/DiabloUI/diabloui.h b/DiabloUI/diabloui.h
index 86228f70e..7a130adab 100644
--- a/DiabloUI/diabloui.h
+++ b/DiabloUI/diabloui.h
@@ -1,45 +1,40 @@
-/*
- * Diablo(TM)
- *
- * Copyright (C) 1996 Blizzard Entertainment
- * All Rights Reserved.
- *
- * DiabloUI.h
- * definitions for DiabloUI
- */
-
+//HEADER_GOES_HERE
+#ifndef __DIABLOUI_H__
+#define __DIABLOUI_H__
#ifdef __GNUC__
extern "C" {
#endif
-void __cdecl UiDestroy(); // { return; }
-void __stdcall UiTitleDialog(int a1); // { return; }
-void __cdecl UiInitialize(); // { return; }
-void __stdcall UiCopyProtError(int a1); // { return; }
-void __stdcall UiAppActivate(int a1); // { return; }
-int __stdcall UiValidPlayerName(char *a1); // { return 0; }
-int __stdcall UiSelHeroMultDialog(void *fninfo, void *fncreate, void *fnremove, void *fnstats, int *a5, int *a6, char *name); // { return 0; }
-int __stdcall UiSelHeroSingDialog(void *fninfo, void *fncreate, void *fnremove, void *fnstats, int *a5, char *name, int *difficulty); // { return 0; }
-void __stdcall UiCreditsDialog(int a1); // { return; }
-int __stdcall UiMainMenuDialog(char *name, int *a2, void *fnSound, int a4); // { return 0; }
-int __stdcall UiProgressDialog(HWND window, char *msg, int a3, void *fnfunc, int a5); // { return 0; }
-int __cdecl UiProfileGetString(); // { return; }
-void __cdecl UiProfileCallback(); // { return; }
-void __cdecl UiProfileDraw(); // { return; }
-void __cdecl UiCategoryCallback(); // { return; }
-void __cdecl UiGetDataCallback(); // { return; }
-void __cdecl UiAuthCallback(); // { return; }
-void __cdecl UiSoundCallback(); // { return; }
-void __cdecl UiMessageBoxCallback(); // { return; }
-void __cdecl UiDrawDescCallback(); // { return; }
-void __cdecl UiCreateGameCallback(); // { return; }
-void __cdecl UiArtCallback(); // { return; }
-int __stdcall UiSelectGame(int a1, _SNETPROGRAMDATA *client_info, _SNETPLAYERDATA *user_info, _SNETUIDATA *ui_info, _SNETVERSIONDATA *file_info, int *a6); // { return 0; }
-int __stdcall UiSelectProvider(int a1, _SNETPROGRAMDATA *client_info, _SNETPLAYERDATA *user_info, _SNETUIDATA *ui_info, _SNETVERSIONDATA *file_info, int *type); // { return 0; }
-int __stdcall UiCreatePlayerDescription(_uiheroinfo *info, int mode, char *desc); // { return 0; }
-int __stdcall UiSetupPlayerInfo(char *str, _uiheroinfo *info, int mode); // { return 0; }
+void __cdecl UiDestroy();
+void __stdcall UiTitleDialog(int a1);
+void __cdecl UiInitialize();
+void __stdcall UiCopyProtError(int a1);
+void __stdcall UiAppActivate(int a1);
+int __stdcall UiValidPlayerName(char *a1);
+int __stdcall UiSelHeroMultDialog(void *fninfo, void *fncreate, void *fnremove, void *fnstats, int *a5, int *a6, char *name);
+int __stdcall UiSelHeroSingDialog(void *fninfo, void *fncreate, void *fnremove, void *fnstats, int *a5, char *name, int *difficulty);
+void __stdcall UiCreditsDialog(int a1);
+int __stdcall UiMainMenuDialog(char *name, int *a2, void *fnSound, int a4);
+int __stdcall UiProgressDialog(HWND window, char *msg, int a3, void *fnfunc, int a5);
+int __cdecl UiProfileGetString();
+void __cdecl UiProfileCallback();
+void __cdecl UiProfileDraw();
+void __cdecl UiCategoryCallback();
+void __cdecl UiGetDataCallback();
+void __cdecl UiAuthCallback();
+void __cdecl UiSoundCallback();
+void __cdecl UiMessageBoxCallback();
+void __cdecl UiDrawDescCallback();
+void __cdecl UiCreateGameCallback();
+void __cdecl UiArtCallback();
+int __stdcall UiSelectGame(int a1, _SNETPROGRAMDATA *client_info, _SNETPLAYERDATA *user_info, _SNETUIDATA *ui_info, _SNETVERSIONDATA *file_info, int *a6);
+int __stdcall UiSelectProvider(int a1, _SNETPROGRAMDATA *client_info, _SNETPLAYERDATA *user_info, _SNETUIDATA *ui_info, _SNETVERSIONDATA *file_info, int *type);
+int __stdcall UiCreatePlayerDescription(_uiheroinfo *info, int mode, char *desc);
+int __stdcall UiSetupPlayerInfo(char *str, _uiheroinfo *info, int mode);
#ifdef __GNUC__
}
#endif
+
+#endif /* __DIABLOUI_H__ */
diff --git a/Source/capture.cpp b/Source/capture.cpp
index f46a7de64..ee8f64057 100644
--- a/Source/capture.cpp
+++ b/Source/capture.cpp
@@ -14,7 +14,7 @@ void __cdecl CaptureScreen()
lpDDPalette->GetEntries(0, 0, 256, palette);
RedPalette(palette);
- dx_lock_mutex();
+ lock_buf_priv();
bool success = CaptureHdr(hObject, 640, 480);
if (success)
{
@@ -24,7 +24,7 @@ void __cdecl CaptureScreen()
success = CapturePal(hObject, palette);
}
}
- dx_unlock_mutex();
+ unlock_buf_priv();
CloseHandle(hObject);
if (!success)
diff --git a/Source/dx.cpp b/Source/dx.cpp
index 54db8528f..e531673b9 100644
--- a/Source/dx.cpp
+++ b/Source/dx.cpp
@@ -184,7 +184,7 @@ HRESULT __fastcall dx_DirectDrawCreate(GUID *guid, IDirectDraw **DD, void *unkno
return ((int (__stdcall *)(GUID *, IDirectDraw **, void *))v5)(v8, v3, unknown);
}
-void __cdecl dx_lock_mutex()
+void __cdecl lock_buf_priv()
{
Screen *v0; // eax
int v1; // eax
@@ -215,7 +215,7 @@ LABEL_9:
}
// 69CF0C: using guessed type int screen_buf_end;
-void __cdecl dx_unlock_mutex()
+void __cdecl unlock_buf_priv()
{
Screen *v0; // eax
int v1; // eax
@@ -287,12 +287,12 @@ void __cdecl dx_reinit()
ClearCursor();
v0 = sgdwLockCount;
while ( sgdwLockCount )
- dx_unlock_mutex();
+ unlock_buf_priv();
dx_cleanup();
drawpanflag = 255;
dx_init(ghMainWnd);
for ( ; v0; --v0 )
- dx_lock_mutex();
+ lock_buf_priv();
LeaveCriticalSection(&sgMemCrit);
}
// 52571C: using guessed type int drawpanflag;
diff --git a/Source/dx.h b/Source/dx.h
index 35bf00c3e..ddf5e5be2 100644
--- a/Source/dx.h
+++ b/Source/dx.h
@@ -23,10 +23,10 @@ void __fastcall dx_init(HWND hWnd);
void __cdecl dx_create_back_buffer();
void __cdecl dx_create_primary_surface();
HRESULT __fastcall dx_DirectDrawCreate(GUID *guid, IDirectDraw **DD, void *unknown);
-void __cdecl j_dx_lock_mutex();
-void __cdecl dx_lock_mutex();
-void __cdecl j_dx_unlock_mutex();
-void __cdecl dx_unlock_mutex();
+void __cdecl j_lock_buf_priv();
+void __cdecl lock_buf_priv();
+void __cdecl j_unlock_buf_priv();
+void __cdecl unlock_buf_priv();
void __cdecl dx_cleanup();
void __cdecl dx_reinit();
void __cdecl j_dx_reinit();
diff --git a/Source/gamemenu.cpp b/Source/gamemenu.cpp
index 1fceffed8..bec5fc602 100644
--- a/Source/gamemenu.cpp
+++ b/Source/gamemenu.cpp
@@ -109,7 +109,7 @@ void __cdecl gamemenu_quit_game()
void __cdecl gamemenu_load_game()
{
- LRESULT (__stdcall *saveProc)(HWND, UINT, WPARAM, LPARAM); // edi
+ WNDPROC saveProc; // edi
saveProc = SetWindowProc(DisableInputWndProc);
gamemenu_off();
@@ -132,7 +132,7 @@ void __cdecl gamemenu_load_game()
void __cdecl gamemenu_save_game()
{
- LRESULT (__stdcall *saveProc)(HWND, UINT, WPARAM, LPARAM); // edi
+ WNDPROC saveProc; // edi
if ( pcurs == CURSOR_HAND )
{
diff --git a/Source/gamemenu.h b/Source/gamemenu.h
index 2470e42cb..192a09308 100644
--- a/Source/gamemenu.h
+++ b/Source/gamemenu.h
@@ -9,8 +9,8 @@ void __cdecl gamemenu_off();
void __cdecl gamemenu_handle_previous();
void __cdecl gamemenu_new_game();
void __cdecl gamemenu_quit_game();
-void __cdecl gamemenu_load_game();
-void __cdecl gamemenu_save_game();
+void __cdecl gamemenu_load_game(); // should have 1-2 args
+void __cdecl gamemenu_save_game(); // should have 1-2 args
void __cdecl gamemenu_restart_town();
void __cdecl gamemenu_options();
void __cdecl gamemenu_get_music();
diff --git a/Source/interfac.cpp b/Source/interfac.cpp
index 0c10b2ccc..0f46236c6 100644
--- a/Source/interfac.cpp
+++ b/Source/interfac.cpp
@@ -49,7 +49,7 @@ void __cdecl DrawCutscene()
{
unsigned int v0; // esi
- dx_lock_mutex();
+ lock_buf_priv();
CelDecodeOnly(64, 639, sgpBackCel, 1, 640);
v0 = 0;
if ( sgdwProgress )
@@ -61,7 +61,7 @@ void __cdecl DrawCutscene()
progress_id);
while ( v0 < sgdwProgress );
}
- dx_unlock_mutex();
+ unlock_buf_priv();
drawpanflag = 255;
scrollrt_draw_game_screen(0);
}
@@ -85,7 +85,7 @@ void __fastcall DrawProgress(int screen_x, int screen_y, int progress_id)
void __fastcall ShowProgress(int uMsg)
{
- LRESULT (__stdcall *saveProc)(HWND, UINT, WPARAM, LPARAM); // edi
+ WNDPROC saveProc; // edi
bool v3; // cl
int v4; // eax
int v5; // edx
diff --git a/Source/movie.cpp b/Source/movie.cpp
index 0718b4a9c..a518ae391 100644
--- a/Source/movie.cpp
+++ b/Source/movie.cpp
@@ -21,7 +21,7 @@ struct movie_cpp_init
void __fastcall play_movie(char *pszMovie, bool user_can_close)
{
char *v2; // esi
- LRESULT (__stdcall *saveProc)(HWND, UINT, WPARAM, LPARAM); // edi
+ WNDPROC saveProc; // edi
//int v4; // eax
MSG Msg; // [esp+8h] [ebp-24h]
BOOL v6; // [esp+24h] [ebp-8h]
diff --git a/Source/mpqapi.cpp b/Source/mpqapi.cpp
index c27728096..09a771681 100644
--- a/Source/mpqapi.cpp
+++ b/Source/mpqapi.cpp
@@ -12,6 +12,8 @@ bool save_archive_open; // weak
int mpqapi_inf = 0x7F800000; // weak
+//note: 32872 = 32768 + 104 (sizeof(TMPQHEADER))
+
/* rdata */
HANDLE sghArchive = (HANDLE)0xFFFFFFFF; // idb
diff --git a/Source/msgcmd.cpp b/Source/msgcmd.cpp
index 44dbb915f..eb48db683 100644
--- a/Source/msgcmd.cpp
+++ b/Source/msgcmd.cpp
@@ -62,7 +62,7 @@ void __cdecl msgcmd_send_chat()
if ( (unsigned int)(v1 - sgdwMsgCmdTimer) >= 2000 )
{
sgdwMsgCmdTimer = v1;
- SNetSetServerChatCommand(v0->command);
+ SNetSendServerChatCommand(v0->command);
msgcmd_delete_server_cmd_W(&sgChat_Cmd, v0);
}
}
diff --git a/Source/objects.cpp b/Source/objects.cpp
index 696c41ef4..236fafadd 100644
--- a/Source/objects.cpp
+++ b/Source/objects.cpp
@@ -2838,24 +2838,24 @@ void __fastcall Obj_BCrossDamage(int i)
int v4; // edx
char v5; // al
int v6; // ecx
- int damage[5]; // [esp+4h] [ebp-18h]
+ int damage[4]; // [esp+4h] [ebp-18h]
int v8; // [esp+18h] [ebp-4h]
v1 = myplr;
v8 = i;
v2 = plr[myplr]._pmode == PM_DEATH;
- damage[1] = 6;
- damage[2] = 8;
- damage[3] = 10;
- damage[4] = 12;
+ damage[0] = 6;
+ damage[1] = 8;
+ damage[2] = 10;
+ damage[3] = 12;
if ( !v2 )
{
v3 = plr[v1]._pFireResist;
if ( v3 > 0 )
- damage[(unsigned char)leveltype] -= v3 * damage[(unsigned char)leveltype] / 100;
+ damage[(unsigned char)leveltype-1] -= v3 * damage[(unsigned char)leveltype-1] / 100;
if ( plr[v1].WorldX == object[v8]._ox && plr[v1].WorldY == object[v8]._oy - 1 )
{
- v4 = damage[(unsigned char)leveltype];
+ v4 = damage[(unsigned char)leveltype-1];
plr[v1]._pHitPoints -= v4;
plr[v1]._pHPBase -= v4;
if ( (signed int)(plr[v1]._pHitPoints & 0xFFFFFFC0) <= 0 )
diff --git a/Source/player.cpp b/Source/player.cpp
index 35cd2adf3..daa00a0dd 100644
--- a/Source/player.cpp
+++ b/Source/player.cpp
@@ -663,26 +663,26 @@ LABEL_11:
}
// 5BB1ED: using guessed type char leveltype;
-void __fastcall ClearPlrRVars(PlayerStruct *pPlayer)
+void __fastcall ClearPlrRVars(PlayerStruct *p)
{
- pPlayer->bReserved[0] = 0;
- pPlayer->bReserved[1] = 0;
- pPlayer->bReserved[2] = 0;
- pPlayer->wReserved[0] = 0;
- pPlayer->wReserved[1] = 0;
- pPlayer->wReserved[2] = 0;
- pPlayer->wReserved[3] = 0;
- pPlayer->wReserved[4] = 0;
- pPlayer->wReserved[5] = 0;
- pPlayer->wReserved[6] = 0;
- pPlayer->wReserved[7] = 0;
- pPlayer->dwReserved[0] = 0;
- pPlayer->dwReserved[1] = 0;
- pPlayer->dwReserved[2] = 0;
- pPlayer->dwReserved[3] = 0;
- pPlayer->dwReserved[4] = 0;
- pPlayer->dwReserved[5] = 0;
- pPlayer->dwReserved[6] = 0;
+ p->bReserved[0] = 0;
+ p->bReserved[1] = 0;
+ p->bReserved[2] = 0;
+ p->wReserved[0] = 0;
+ p->wReserved[1] = 0;
+ p->wReserved[2] = 0;
+ p->wReserved[3] = 0;
+ p->wReserved[4] = 0;
+ p->wReserved[5] = 0;
+ p->wReserved[6] = 0;
+ p->wReserved[7] = 0;
+ p->dwReserved[0] = 0;
+ p->dwReserved[1] = 0;
+ p->dwReserved[2] = 0;
+ p->dwReserved[3] = 0;
+ p->dwReserved[4] = 0;
+ p->dwReserved[5] = 0;
+ p->dwReserved[6] = 0;
}
void __fastcall CreatePlayer(int pnum, char c)
diff --git a/Source/player.h b/Source/player.h
index 09820bbc3..9e655b1a2 100644
--- a/Source/player.h
+++ b/Source/player.h
@@ -29,7 +29,7 @@ void __fastcall FreePlayerGFX(int pnum);
void __fastcall NewPlrAnim(int pnum, int Peq, int numFrames, int Delay, int width);
void __fastcall ClearPlrPVars(int pnum);
void __fastcall SetPlrAnims(int pnum);
-void __fastcall ClearPlrRVars(PlayerStruct *pPlayer);
+void __fastcall ClearPlrRVars(PlayerStruct *p);
void __fastcall CreatePlayer(int pnum, char c);
int __fastcall CalcStatDiff(int pnum);
void __fastcall NextPlrLevel(int pnum);
diff --git a/Source/world.cpp b/Source/render.cpp
similarity index 96%
rename from Source/world.cpp
rename to Source/render.cpp
index 5e3dc3706..e44f7fd12 100644
--- a/Source/world.cpp
+++ b/Source/render.cpp
@@ -53,6 +53,7 @@ int WorldTbl3x16[48] =
60, 60, 60
};
+// slope/angle tables, left and right
int WorldTbl17_1[17] = { 0, 4, 8, 16, 24, 36, 48, 64, 80, 100, 120, 144, 168, 196, 224, 256, 288 };
int WorldTbl17_2[17] = { 0, 32, 60, 88, 112, 136, 156, 176, 192, 208, 220, 232, 240, 248, 252, 256, 288 };
diff --git a/Source/world.h b/Source/render.h
similarity index 90%
rename from Source/world.h
rename to Source/render.h
index 428f09480..bdc08b316 100644
--- a/Source/world.h
+++ b/Source/render.h
@@ -1,6 +1,6 @@
//HEADER_GOES_HERE
-#ifndef __WORLD_H__
-#define __WORLD_H__
+#ifndef __RENDER_H__
+#define __RENDER_H__
void __fastcall drawTopArchesUpperScreen(unsigned char *pbDst);
void __fastcall drawBottomArchesUpperScreen(unsigned char *pbDst, unsigned int *pMask);
@@ -25,4 +25,4 @@ extern int WorldTbl3x16[48];
extern int WorldTbl17_1[17];
extern int WorldTbl17_2[17];
-#endif /* __WORLD_H__ */
+#endif /* __RENDER_H__ */
diff --git a/Source/scrollrt.cpp b/Source/scrollrt.cpp
index e78044f15..8453dc580 100644
--- a/Source/scrollrt.cpp
+++ b/Source/scrollrt.cpp
@@ -2828,12 +2828,12 @@ void __cdecl ClearScreenBuffer()
{
int i; // edx
- dx_lock_mutex();
+ lock_buf_priv();
for(i = 0; i < 480; i++)
memset(gpBuffer->row[i].pixels, 0, 640);
- dx_unlock_mutex();
+ unlock_buf_priv();
}
#ifdef _DEBUG
@@ -2973,16 +2973,16 @@ void __fastcall scrollrt_draw_game_screen(bool draw_cursor)
}
if ( draw_cursor )
{
- dx_lock_mutex();
+ lock_buf_priv();
scrollrt_draw_cursor_item();
- dx_unlock_mutex();
+ unlock_buf_priv();
}
DrawMain(dwHgt, 0, 0, 0, 0, 0);
if ( draw_cursor )
{
- dx_lock_mutex();
+ lock_buf_priv();
scrollrt_draw_cursor_back_buffer();
- dx_unlock_mutex();
+ unlock_buf_priv();
}
}
// 52571C: using guessed type int drawpanflag;
@@ -3312,7 +3312,7 @@ void __fastcall DoBlitScreen(int dwX, int dwY, int dwWdt, int dwHgt)
v6 = 768 - dwWdt;
error_codea = (unsigned int)dwWdt >> 2;
v16 = v6;
- dx_lock_mutex();
+ lock_buf_priv();
v7 = (char *)gpBuffer + v14;
v8 = (char *)DDS_desc.lpSurface + v15;
v9 = dwHgt;
@@ -3324,7 +3324,7 @@ void __fastcall DoBlitScreen(int dwX, int dwY, int dwWdt, int dwHgt)
--v9;
}
while ( v9 );
- dx_unlock_mutex();
+ unlock_buf_priv();
}
}
@@ -3355,7 +3355,7 @@ void __cdecl DrawAndBlit()
dwHgt = 352;
}
drawpanflag = 0;
- dx_lock_mutex();
+ lock_buf_priv();
if ( leveltype )
DrawView(ViewX, ViewY);
else
@@ -3376,11 +3376,11 @@ void __cdecl DrawAndBlit()
dwHgt = 480;
}
scrollrt_draw_cursor_item();
- dx_unlock_mutex();
+ unlock_buf_priv();
DrawMain(dwHgt, ddsdesc, drawhpflag, drawmanaflag, drawsbarflag, drawbtnflag);
- dx_lock_mutex();
+ lock_buf_priv();
scrollrt_draw_cursor_back_buffer();
- dx_unlock_mutex();
+ unlock_buf_priv();
drawhpflag = 0;
drawmanaflag = 0;
drawbtnflag = 0;
diff --git a/defs.h b/defs.h
index 97323ea63..033d2b162 100644
--- a/defs.h
+++ b/defs.h
@@ -140,12 +140,9 @@ typedef ull uint64;
#ifdef __cplusplus
-
-// memcpy() with determined behavoir: it always copies
-// from the start to the end of the buffer
-// note: it copies byte by byte, so it is not equivalent to, for example, rep movsd
+#ifdef FAST_MEMCPY
#define qmemcpy memcpy
-/*
+#else
inline void *qmemcpy(void *dst, const void *src, size_t cnt)
{
char *out = (char *)dst;
@@ -156,7 +153,8 @@ inline void *qmemcpy(void *dst, const void *src, size_t cnt)
--cnt;
}
return dst;
-} */
+}
+#endif
// Generate a reference to pair of operands
template int16 __PAIR__( int8 high, T low) { return ((( int16)high) << sizeof(high)*8) | uint8(low); }
diff --git a/types.h b/types.h
index 027771f2b..952405d6f 100644
--- a/types.h
+++ b/types.h
@@ -53,6 +53,10 @@
#endif
// If defined, don't fry the CPU [Default -> Undefined]
#define SLEEP
+// If defined, use standard memcpy() in place of qmemcpy() [Default -> Undefined]
+// Will be replaced with [rep movsd] if optimization is used
+#define FAST_MEMCPY
+
/* temp macro for asm XLAT */
#define ASM_XLAT(eax,ebx) eax = (eax & 0xFFFFFF00) + LOBYTE(ebx[LOBYTE(eax)])
@@ -125,6 +129,6 @@
#include "Source/track.h"
#include "Source/trigs.h"
#include "Source/wave.h"
-#include "Source/world.h"
+#include "Source/render.h" // linked last, likely .s/.asm
#endif