224 lines
6.2 KiB
C++
224 lines
6.2 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"
|
||
|
|
||
|
RECT8 QSRects[32] =
|
||
|
{
|
||
|
{ { 19u, 47u }, { 26u, 55u } },
|
||
|
{ { 26u, 49u }, { 30u, 53u } },
|
||
|
{ { 33u, 19u }, { 47u, 29u } },
|
||
|
{ { 37u, 29u }, { 43u, 39u } },
|
||
|
{ { 27u, 53u }, { 35u, 61u } },
|
||
|
{ { 27u, 35u }, { 34u, 42u } },
|
||
|
{ { 45u, 35u }, { 53u, 43u } },
|
||
|
{ { 45u, 53u }, { 53u, 61u } },
|
||
|
{ { 31u, 39u }, { 49u, 57u } },
|
||
|
{ { 49u, 45u }, { 58u, 51u } },
|
||
|
{ { 57u, 31u }, { 62u, 37u } },
|
||
|
{ { 63u, 31u }, { 69u, 40u } },
|
||
|
{ { 59u, 41u }, { 73u, 55u } },
|
||
|
{ { 63u, 55u }, { 69u, 65u } },
|
||
|
{ { 73u, 45u }, { 78u, 51u } },
|
||
|
{ { 79u, 43u }, { 89u, 53u } },
|
||
|
{ { 43u, 19u }, { 50u, 26u } },
|
||
|
{ { 51u, 19u }, { 59u, 26u } },
|
||
|
{ { 35u, 27u }, { 42u, 34u } },
|
||
|
{ { 43u, 27u }, { 49u, 34u } },
|
||
|
{ { 50u, 27u }, { 59u, 34u } },
|
||
|
{ { 19u, 31u }, { 34u, 47u } },
|
||
|
{ { 34u, 35u }, { 42u, 42u } },
|
||
|
{ { 43u, 35u }, { 50u, 42u } },
|
||
|
{ { 51u, 35u }, { 62u, 42u } },
|
||
|
{ { 63u, 31u }, { 66u, 46u } },
|
||
|
{ { 67u, 31u }, { 78u, 34u } },
|
||
|
{ { 67u, 35u }, { 78u, 42u } },
|
||
|
{ { 67u, 43u }, { 78u, 46u } },
|
||
|
{ { 35u, 43u }, { 42u, 51u } },
|
||
|
{ { 43u, 43u }, { 49u, 51u } },
|
||
|
{ { 50u, 43u }, { 59u, 51u } }
|
||
|
};
|
||
|
char *quest_level_names[] =
|
||
|
{
|
||
|
&empty_string,
|
||
|
"Skeleton King's Lair",
|
||
|
"Bone Chamber",
|
||
|
"Maze",
|
||
|
"Poisoned Water Supply",
|
||
|
"Archbishop Lazarus' Lair"
|
||
|
};
|
||
|
|
||
|
//----- (00456625) --------------------------------------------------------
|
||
|
int __fastcall ObjIndex(int x, int y)
|
||
|
{
|
||
|
int i; // edi
|
||
|
int oi; // esi
|
||
|
|
||
|
i = 0;
|
||
|
|
||
|
if ( nobjects > 0 )
|
||
|
{
|
||
|
while ( 1 )
|
||
|
{
|
||
|
oi = objectactive[i];
|
||
|
if ( object[oi]._ox == x && object[oi]._oy == y )
|
||
|
return oi;
|
||
|
if ( ++i >= nobjects )
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
TermMsg("ObjIndex: Active object not found at (%d,%d)", x, y);
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
//----- (0045666B) --------------------------------------------------------
|
||
|
void __cdecl AddSKingObjs()
|
||
|
{
|
||
|
SetObjMapRange(ObjIndex(64, 34), 20, 7, 23, 10, 1);
|
||
|
SetObjMapRange(ObjIndex(64, 59), 20, 14, 21, 16, 2);
|
||
|
SetObjMapRange(ObjIndex(27, 37), 8, 1, 15, 11, 3);
|
||
|
SetObjMapRange(ObjIndex(46, 35), 8, 1, 15, 11, 3);
|
||
|
SetObjMapRange(ObjIndex(49, 53), 8, 1, 15, 11, 3);
|
||
|
SetObjMapRange(ObjIndex(27, 53), 8, 1, 15, 11, 3);
|
||
|
}
|
||
|
|
||
|
//----- (0045671A) --------------------------------------------------------
|
||
|
void __cdecl AddSChamObjs()
|
||
|
{
|
||
|
SetObjMapRange(ObjIndex(37, 30), 17, 0, 21, 5, 1);
|
||
|
SetObjMapRange(ObjIndex(37, 46), 13, 0, 16, 5, 2);
|
||
|
}
|
||
|
|
||
|
//----- (00456755) --------------------------------------------------------
|
||
|
void __cdecl AddVileObjs()
|
||
|
{
|
||
|
SetObjMapRange(ObjIndex(26, 45), 1, 1, 9, 10, 1);
|
||
|
SetObjMapRange(ObjIndex(45, 46), 11, 1, 20, 10, 2);
|
||
|
SetObjMapRange(ObjIndex(35, 36), 7, 11, 13, 18, 3);
|
||
|
}
|
||
|
|
||
|
//----- (004567AD) --------------------------------------------------------
|
||
|
void __fastcall DRLG_SetMapTrans(char *sFileName)
|
||
|
{
|
||
|
unsigned char *pLevelMap; // ecx
|
||
|
int v2; // ebx
|
||
|
int v3; // edi
|
||
|
int v4; // eax
|
||
|
int v5; // edi
|
||
|
int v6; // eax
|
||
|
int v7; // ebx
|
||
|
char *v8; // esi
|
||
|
char *v9; // eax
|
||
|
int v10; // [esp+Ch] [ebp-8h]
|
||
|
int v11; // [esp+10h] [ebp-4h]
|
||
|
|
||
|
pLevelMap = LoadFileInMem(sFileName, 0);
|
||
|
v11 = 0;
|
||
|
v2 = *pLevelMap;
|
||
|
v3 = pLevelMap[2];
|
||
|
v4 = v3;
|
||
|
v5 = 2 * v3;
|
||
|
v6 = v2 * v4;
|
||
|
v7 = 2 * v2;
|
||
|
v8 = (char *)&pLevelMap[6 * v7 * v5 + 4 + 2 * v6];
|
||
|
if ( v5 > 0 )
|
||
|
{
|
||
|
do
|
||
|
{
|
||
|
if ( v7 > 0 )
|
||
|
{
|
||
|
v10 = v7;
|
||
|
v9 = &dung_map[16][v11 + 16];
|
||
|
do
|
||
|
{
|
||
|
*v9 = *v8;
|
||
|
v8 += 2;
|
||
|
v9 += 112;
|
||
|
--v10;
|
||
|
}
|
||
|
while ( v10 );
|
||
|
}
|
||
|
++v11;
|
||
|
}
|
||
|
while ( v11 < v5 );
|
||
|
}
|
||
|
mem_free_dbg(pLevelMap);
|
||
|
}
|
||
|
|
||
|
//----- (00456819) --------------------------------------------------------
|
||
|
void __cdecl LoadSetMap()
|
||
|
{
|
||
|
switch ( setlvlnum )
|
||
|
{
|
||
|
case SL_SKELKING:
|
||
|
if ( quests[12]._qactive == 1 )
|
||
|
{
|
||
|
quests[12]._qactive = 2;
|
||
|
quests[12]._qvar1 = 1;
|
||
|
}
|
||
|
LoadPreL1Dungeon("Levels\\L1Data\\SklKng1.DUN", 83, 45);
|
||
|
LoadL1Dungeon("Levels\\L1Data\\SklKng2.DUN", 83, 45);
|
||
|
LoadPalette("Levels\\L1Data\\L1_2.pal");
|
||
|
DRLG_AreaTrans(2, (unsigned char *)QSRects);
|
||
|
DRLG_ListTrans(2, (unsigned char *)&QSRects[2]);
|
||
|
DRLG_AreaTrans(5, (unsigned char *)&QSRects[4]);
|
||
|
DRLG_ListTrans(7, (unsigned char *)&QSRects[9]);
|
||
|
AddL1Objs(0, 0, 112, 112);
|
||
|
AddSKingObjs();
|
||
|
InitSKingTriggers();
|
||
|
break;
|
||
|
case SL_BONECHAMB:
|
||
|
LoadPreL2Dungeon("Levels\\L2Data\\Bonecha2.DUN", 69, 39);
|
||
|
LoadL2Dungeon("Levels\\L2Data\\Bonecha1.DUN", 69, 39);
|
||
|
LoadPalette("Levels\\L2Data\\L2_2.pal");
|
||
|
DRLG_ListTrans(5, (unsigned char *)&QSRects[16]);
|
||
|
DRLG_AreaTrans(2, (unsigned char *)&QSRects[21]);
|
||
|
DRLG_ListTrans(9, (unsigned char *)&QSRects[23]);
|
||
|
AddL2Objs(0, 0, 112, 112);
|
||
|
AddSChamObjs();
|
||
|
InitSChambTriggers();
|
||
|
break;
|
||
|
case SL_MAZE:
|
||
|
LoadPreL1Dungeon("Levels\\L1Data\\Lv1MazeA.DUN", 20, 50);
|
||
|
LoadL1Dungeon("Levels\\L1Data\\Lv1MazeB.DUN", 20, 50);
|
||
|
LoadPalette("Levels\\L1Data\\L1_5.pal");
|
||
|
AddL1Objs(0, 0, 112, 112);
|
||
|
DRLG_SetMapTrans("Levels\\L1Data\\Lv1MazeA.DUN");
|
||
|
break;
|
||
|
case SL_POISONWATER:
|
||
|
if ( quests[13]._qactive == 1 )
|
||
|
quests[13]._qactive = 2;
|
||
|
LoadPreL3Dungeon("Levels\\L3Data\\Foulwatr.DUN", 19, 50);
|
||
|
LoadL3Dungeon("Levels\\L3Data\\Foulwatr.DUN", 20, 50);
|
||
|
LoadPalette("Levels\\L3Data\\L3pfoul.pal");
|
||
|
InitPWaterTriggers();
|
||
|
break;
|
||
|
case SL_VILEBETRAYER:
|
||
|
if ( quests[15]._qactive == 3 )
|
||
|
{
|
||
|
quests[15]._qvar2 = 4;
|
||
|
}
|
||
|
else if ( quests[15]._qactive == 2 )
|
||
|
{
|
||
|
quests[15]._qvar2 = 3;
|
||
|
}
|
||
|
LoadPreL1Dungeon("Levels\\L1Data\\Vile1.DUN", 35, 36);
|
||
|
LoadL1Dungeon("Levels\\L1Data\\Vile2.DUN", 35, 36);
|
||
|
LoadPalette("Levels\\L1Data\\L1_2.pal");
|
||
|
AddL1Objs(0, 0, 112, 112);
|
||
|
AddVileObjs();
|
||
|
DRLG_SetMapTrans("Levels\\L1Data\\Vile1.DUN");
|
||
|
InitNoTriggers();
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
// 5CCB10: using guessed type char setlvlnum;
|