diff --git a/Source/inv.cpp b/Source/inv.cpp index 6e5e9bd2d..73f8f0a09 100644 --- a/Source/inv.cpp +++ b/Source/inv.cpp @@ -1765,10 +1765,8 @@ void InvGetItem(int pnum, int ii) CheckBookLevel(pnum); CheckItemStats(pnum); cursor_updated = FALSE; -#ifdef HELLFIRE - if (plr[pnum].HoldItem._itype == ITYPE_GOLD && GoldAutoPlace(pnum)) + if (gbIsHellfire && plr[pnum].HoldItem._itype == ITYPE_GOLD && GoldAutoPlace(pnum)) cursor_updated = TRUE; -#endif dItem[item[ii]._ix][item[ii]._iy] = 0; if (currlevel == 21 && item[ii]._ix == CornerStone.x && item[ii]._iy == CornerStone.y) { CornerStone.item.IDidx = -1; @@ -1953,9 +1951,6 @@ void AutoGetItem(int pnum, int ii) RespawnItem(ii, TRUE); NetSendCmdPItem(TRUE, CMD_RESPAWNITEM, item[ii]._ix, item[ii]._iy); plr[pnum].HoldItem._itype = ITYPE_NONE; -#ifdef HELLFIRE - NewCursor(CURSOR_HAND); -#endif } } diff --git a/Source/itemdat.cpp b/Source/itemdat.cpp index 1734f7f23..d17964e30 100644 --- a/Source/itemdat.cpp +++ b/Source/itemdat.cpp @@ -278,7 +278,7 @@ const PLStruct PL_Prefix[] = { /** Contains the data related to each item suffix. */ const PLStruct PL_Suffix[] = { -// clang-format off + // clang-format off // PLName, PLPower, PLParam1, PLParam2, PLMinLvl, PLIType, PLGOE, PLDouble, PLOk, PLMinVal, PLMaxVal, PLMultVal { "quality", IPL_DAMMOD, 1, 2, 2, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 100, 200, 2 }, { "maiming", IPL_DAMMOD, 3, 5, 7, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 1300, 1500, 3 }, @@ -364,15 +364,9 @@ const PLStruct PL_Suffix[] = { { "vampires", IPL_STEALMANA, 5, 5, 19, PLT_WEAP , GOE_ANY, FALSE, TRUE, 15000, 15000, 3 }, { "the leech", IPL_STEALLIFE, 3, 3, 8, PLT_WEAP , GOE_ANY, FALSE, TRUE, 7500, 7500, 3 }, { "blood", IPL_STEALLIFE, 5, 5, 19, PLT_WEAP , GOE_ANY, FALSE, TRUE, 15000, 15000, 3 }, -#ifdef HELLFIRE { "piercing", IPL_TARGAC, 1, 1, 1, PLT_WEAP | PLT_BOW , GOE_ANY, FALSE, TRUE, 1000, 1000, 3 }, { "puncturing", IPL_TARGAC, 2, 2, 9, PLT_WEAP | PLT_BOW , GOE_ANY, FALSE, TRUE, 2000, 2000, 6 }, { "bashing", IPL_TARGAC, 3, 3, 17, PLT_WEAP , GOE_ANY, FALSE, TRUE, 4000, 4000, 12 }, -#else - { "piercing", IPL_TARGAC, 2, 6, 1, PLT_WEAP | PLT_BOW , GOE_ANY, FALSE, TRUE, 1000, 1000, 3 }, - { "puncturing", IPL_TARGAC, 4, 12, 9, PLT_WEAP | PLT_BOW , GOE_ANY, FALSE, TRUE, 2000, 2000, 6 }, - { "bashing", IPL_TARGAC, 8, 24, 17, PLT_WEAP , GOE_ANY, FALSE, TRUE, 4000, 4000, 12 }, -#endif { "readiness", IPL_FASTATTACK, 1, 1, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 2000, 2000, 2 }, { "swiftness", IPL_FASTATTACK, 2, 2, 10, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 4000, 4000, 4 }, { "speed", IPL_FASTATTACK, 3, 3, 19, PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 8000, 8000, 8 }, diff --git a/Source/items.cpp b/Source/items.cpp index 27fc50878..cfc8a07ff 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -1820,11 +1820,7 @@ void GetItemAttrs(int i, int idata, int lvl) item[i]._iMinDam = AllItemsList[idata].iMinDam; item[i]._iMaxDam = AllItemsList[idata].iMaxDam; item[i]._iAC = AllItemsList[idata].iMinAC + random_(20, AllItemsList[idata].iMaxAC - AllItemsList[idata].iMinAC + 1); -#ifndef HELLFIRE item[i]._iFlags = AllItemsList[idata].iFlags; -#else - item[i]._iFlags = 0; -#endif item[i]._iMiscId = AllItemsList[idata].iMiscId; item[i]._iSpell = AllItemsList[idata].iSpell; item[i]._iMagical = ITEM_QUALITY_NORMAL; @@ -2107,27 +2103,19 @@ void SaveItemPower(int i, int power, int param1, int param2, int minval, int max break; case IPL_FIRE_ARROWS: item[i]._iFlags |= ISPL_FIRE_ARROWS; -#ifdef HELLFIRE item[i]._iFlags &= ~ISPL_LIGHT_ARROWS; -#endif item[i]._iFMinDam = param1; item[i]._iFMaxDam = param2; -#ifdef HELLFIRE item[i]._iLMinDam = 0; item[i]._iLMaxDam = 0; -#endif break; case IPL_LIGHT_ARROWS: item[i]._iFlags |= ISPL_LIGHT_ARROWS; -#ifdef HELLFIRE item[i]._iFlags &= ~ISPL_FIRE_ARROWS; -#endif item[i]._iLMinDam = param1; item[i]._iLMaxDam = param2; -#ifdef HELLFIRE item[i]._iFMinDam = 0; item[i]._iFMaxDam = 0; -#endif break; case IPL_FIREBALL: item[i]._iFlags |= (ISPL_LIGHT_ARROWS | ISPL_FIRE_ARROWS); @@ -2176,11 +2164,10 @@ void SaveItemPower(int i, int power, int param1, int param2, int minval, int max drawhpflag = TRUE; break; case IPL_TARGAC: -#ifdef HELLFIRE - item[i]._iPLEnAc = param1; -#else - item[i]._iPLEnAc += r; -#endif + if (gbIsHellfire) + item[i]._iPLEnAc = param1; + else + item[i]._iPLEnAc += r; break; case IPL_FASTATTACK: if (param1 == 1) @@ -2310,6 +2297,28 @@ void SaveItemPower(int i, int power, int param1, int param2, int minval, int max } } +static void SaveItemSuffix(int i, int sufidx) +{ + int param1 = PL_Suffix[sufidx].PLParam1; + int param2 = PL_Suffix[sufidx].PLParam1; + + if (!gbIsHellfire) { + if (sufidx >= 84 && sufidx <= 86) { + param1 = 2 << param1; + param2 = 6 << param2; + } + } + + SaveItemPower( + i, + PL_Suffix[sufidx].PLPower, + param1, + param2, + PL_Suffix[sufidx].PLMinVal, + PL_Suffix[sufidx].PLMaxVal, + PL_Suffix[sufidx].PLMultVal); +} + void GetItemPower(int i, int minlvl, int maxlvl, int flgs, BOOL onlygood) { int pre, post, nt, nl, j, preidx, sufidx; @@ -2381,14 +2390,7 @@ void GetItemPower(int i, int minlvl, int maxlvl, int flgs, BOOL onlygood) sprintf(istr, "%s of %s", item[i]._iIName, PL_Suffix[sufidx].PLName); strcpy(item[i]._iIName, istr); item[i]._iMagical = ITEM_QUALITY_MAGIC; - SaveItemPower( - i, - PL_Suffix[sufidx].PLPower, - PL_Suffix[sufidx].PLParam1, - PL_Suffix[sufidx].PLParam2, - PL_Suffix[sufidx].PLMinVal, - PL_Suffix[sufidx].PLMaxVal, - PL_Suffix[sufidx].PLMultVal); + SaveItemSuffix(i, sufidx); item[i]._iSufPower = PL_Suffix[sufidx].PLPower; } } @@ -3885,11 +3887,7 @@ void PrintItemPower(char plidx, ItemStruct *x) strcpy(tempstr, "hit steals 5% life"); break; case IPL_TARGAC: -#ifdef HELLFIRE strcpy(tempstr, "penetrates target's armor"); -#else - strcpy(tempstr, "damages target's armor"); -#endif break; case IPL_FASTATTACK: if (x->_iFlags & ISPL_QUICKATTACK) @@ -4685,8 +4683,6 @@ static void SpawnOnePremium(int i, int plvl, int myplr) if (plvl < 1) plvl = 1; - int maxValue = gbIsHellfire ? 200000 : 140000; - do { item[0]._iSeed = GetRndSeed(); SetRndSeed(item[0]._iSeed); @@ -4695,7 +4691,7 @@ static void SpawnOnePremium(int i, int plvl, int myplr) GetItemBonus(0, itype, plvl >> 1, plvl, TRUE, FALSE); if (!gbIsHellfire) { - if (item[0]._iIvalue > maxValue) + if (item[0]._iIvalue > 140000) continue; break; } @@ -4738,7 +4734,7 @@ static void SpawnOnePremium(int i, int plvl, int myplr) ivalue *= 0.8; count++; - } while ((item[0]._iIvalue > maxValue + } while ((item[0]._iIvalue > 200000 || item[0]._iMinStr > strength || item[0]._iMinMag > magic || item[0]._iMinDex > dexterity @@ -4917,7 +4913,7 @@ void SpawnWitch(int lvl) && lvl >= AllItemsList[i].iMinMLvl) { item[0]._iSeed = GetRndSeed(); SetRndSeed(item[0]._iSeed); - volatile int junk = random_(0, 1); + random_(0, 1); GetItemAttrs(0, i, lvl); witchitem[j] = item[0]; @@ -4985,7 +4981,6 @@ void SpawnBoy(int lvl) { int itype; -#ifdef HELLFIRE int ivalue; int count = 0; @@ -5008,17 +5003,20 @@ void SpawnBoy(int lvl) magic = plr[myplr]._pMagic; } magic *= 1.2; -#endif if (boylevel < (lvl >> 1) || boyitem._itype == ITYPE_NONE) { - int maxValue = gbIsHellfire ? 200000 : 140000; do { item[0]._iSeed = GetRndSeed(); SetRndSeed(item[0]._iSeed); itype = RndBoyItem(lvl) - 1; GetItemAttrs(0, itype, lvl); GetItemBonus(0, itype, lvl, 2 * lvl, TRUE, TRUE); -#ifdef HELLFIRE + + if (!gbIsHellfire) { + if (item[0]._iIvalue > 140000) + continue; + break; + } ivalue = 0; @@ -5090,15 +5088,12 @@ void SpawnBoy(int lvl) break; } } - } while ((item[0]._iIvalue > maxValue + } while ((item[0]._iIvalue > 200000 || item[0]._iMinStr > strength || item[0]._iMinMag > magic || item[0]._iMinDex > dexterity || item[0]._iIvalue < ivalue) && count < 250); -#else - } while (item[0]._iIvalue > maxValue); -#endif boyitem = item[0]; boyitem._iCreateInfo = lvl | CF_BOY; boyitem._iIdentified = TRUE; @@ -5109,75 +5104,31 @@ void SpawnBoy(int lvl) BOOL HealerItemOk(int i) { - BOOL result; - - result = FALSE; if (AllItemsList[i].itype != ITYPE_MISC) return FALSE; - if (AllItemsList[i].iMiscId == IMISC_SCROLL && AllItemsList[i].iSpell == SPL_HEAL) - result = TRUE; - if (AllItemsList[i].iMiscId == IMISC_SCROLLT && AllItemsList[i].iSpell == SPL_RESURRECT && gbMaxPlayers != 1) - result = FALSE; - if (AllItemsList[i].iMiscId == IMISC_SCROLLT && AllItemsList[i].iSpell == SPL_HEALOTHER && gbMaxPlayers != 1) - result = TRUE; + if (AllItemsList[i].iMiscId == IMISC_SCROLL) + return AllItemsList[i].iSpell == SPL_HEAL; + if (AllItemsList[i].iMiscId == IMISC_SCROLLT) + return AllItemsList[i].iSpell == SPL_HEALOTHER && gbMaxPlayers != 1; if (gbMaxPlayers == 1) { -#ifdef HELLFIRE - if (AllItemsList[i].iMiscId == IMISC_ELIXSTR && plr[myplr]._pBaseStr < MaxStats[plr[myplr]._pClass][ATTRIB_STR]) - result = TRUE; - else if (AllItemsList[i].iMiscId == IMISC_ELIXMAG && plr[myplr]._pBaseMag < MaxStats[plr[myplr]._pClass][ATTRIB_MAG]) - result = TRUE; - else if (AllItemsList[i].iMiscId == IMISC_ELIXDEX && plr[myplr]._pBaseDex < MaxStats[plr[myplr]._pClass][ATTRIB_DEX]) - result = TRUE; - else if (AllItemsList[i].iMiscId == IMISC_ELIXVIT && plr[myplr]._pBaseVit < MaxStats[plr[myplr]._pClass][ATTRIB_VIT]) - result = TRUE; - } - - if (AllItemsList[i].iMiscId == IMISC_FULLHEAL) // BUGFIX this is a duplicate with the wrong case - result = TRUE; - - else if (AllItemsList[i].iMiscId == IMISC_REJUV) - result = TRUE; - else if (AllItemsList[i].iMiscId == IMISC_FULLREJUV) - result = TRUE; - else if (AllItemsList[i].iMiscId == IMISC_HEAL) - result = FALSE; - else if (AllItemsList[i].iMiscId == IMISC_FULLHEAL) - result = FALSE; - else if (AllItemsList[i].iMiscId == IMISC_MANA) - result = FALSE; - else if (AllItemsList[i].iMiscId == IMISC_FULLMANA) - result = FALSE; -#else if (AllItemsList[i].iMiscId == IMISC_ELIXSTR) - result = TRUE; + return !gbIsHellfire || plr[myplr]._pBaseStr < MaxStats[plr[myplr]._pClass][ATTRIB_STR]; if (AllItemsList[i].iMiscId == IMISC_ELIXMAG) - result = TRUE; + return !gbIsHellfire || plr[myplr]._pBaseMag < MaxStats[plr[myplr]._pClass][ATTRIB_MAG]; if (AllItemsList[i].iMiscId == IMISC_ELIXDEX) - result = TRUE; + return !gbIsHellfire || plr[myplr]._pBaseDex < MaxStats[plr[myplr]._pClass][ATTRIB_DEX]; if (AllItemsList[i].iMiscId == IMISC_ELIXVIT) - result = TRUE; + return !gbIsHellfire || plr[myplr]._pBaseVit < MaxStats[plr[myplr]._pClass][ATTRIB_VIT]; } - if (AllItemsList[i].iMiscId == IMISC_FULLHEAL) // BUGFIX this is a duplicate with the wrong case - result = TRUE; - if (AllItemsList[i].iMiscId == IMISC_REJUV) - result = TRUE; + return TRUE; if (AllItemsList[i].iMiscId == IMISC_FULLREJUV) - result = TRUE; - if (AllItemsList[i].iMiscId == IMISC_HEAL) - result = FALSE; - if (AllItemsList[i].iMiscId == IMISC_FULLHEAL) - result = FALSE; - if (AllItemsList[i].iMiscId == IMISC_MANA) - result = FALSE; - if (AllItemsList[i].iMiscId == IMISC_FULLMANA) - result = FALSE; -#endif + return TRUE; - return result; + return FALSE; } int RndHealerItem(int lvl) @@ -5247,11 +5198,7 @@ void SpawnHealer(int lvl) } else { srnd = 2; } -#ifdef HELLFIRE - nsi = random_(50, 10) + 10; -#else - nsi = random_(50, 8) + 10; -#endif + nsi = random_(50, gbIsHellfire ? 10 : 8) + 10; for (i = srnd; i < nsi; i++) { item[0]._iSeed = GetRndSeed(); SetRndSeed(item[0]._iSeed); @@ -5321,28 +5268,22 @@ void RecreateWitchItem(int ii, int idx, int lvl, int iseed) if (idx == IDI_MANA || idx == IDI_FULLMANA || idx == IDI_PORTAL) { GetItemAttrs(ii, idx, lvl); + } else if (gbIsHellfire && idx >= 114 && idx <= 117) { + SetRndSeed(iseed); + random_(0, 1); + iblvl = lvl; + GetItemAttrs(ii, idx, iblvl); } else { -#ifdef HELLFIRE - if (idx >= 114 && idx <= 117) { - SetRndSeed(iseed); - volatile int hi_predelnik = random_(0, 1); - iblvl = lvl; - GetItemAttrs(ii, idx, iblvl); - } else { -#endif - SetRndSeed(iseed); - itype = RndWitchItem(lvl) - 1; - GetItemAttrs(ii, itype, lvl); - iblvl = -1; - if (random_(51, 100) <= 5) - iblvl = 2 * lvl; - if (iblvl == -1 && item[ii]._iMiscId == IMISC_STAFF) - iblvl = 2 * lvl; - if (iblvl != -1) - GetItemBonus(ii, itype, iblvl >> 1, iblvl, TRUE, TRUE); -#ifdef HELLFIRE - } -#endif + SetRndSeed(iseed); + itype = RndWitchItem(lvl) - 1; + GetItemAttrs(ii, itype, lvl); + iblvl = -1; + if (random_(51, 100) <= 5) + iblvl = 2 * lvl; + if (iblvl == -1 && item[ii]._iMiscId == IMISC_STAFF) + iblvl = 2 * lvl; + if (iblvl != -1) + GetItemBonus(ii, itype, iblvl >> 1, iblvl, TRUE, TRUE); } item[ii]._iSeed = iseed; diff --git a/Source/msg.cpp b/Source/msg.cpp index fbc40bdf3..f52c684dc 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -2019,11 +2019,7 @@ static DWORD On_MONSTDAMAGE(TCmd *pCmd, int pnum) else if (pnum != myplr) { if (currlevel == plr[pnum].plrlevel) { monster[p->wMon].mWhoHit |= 1 << pnum; -#ifdef HELLFIRE - if (monster[p->wMon]._mhitpoints >= 0) { -#else - if (monster[p->wMon]._mhitpoints != 0) { -#endif + if (monster[p->wMon]._mhitpoints > 0) { monster[p->wMon]._mhitpoints -= p->dwDam; if ((monster[p->wMon]._mhitpoints >> 6) < 1) monster[p->wMon]._mhitpoints = 1 << 6; diff --git a/Source/stores.cpp b/Source/stores.cpp index e696894a3..3d9ee5fa4 100644 --- a/Source/stores.cpp +++ b/Source/stores.cpp @@ -1180,11 +1180,10 @@ void S_StartBBoy() else AddSText(20, 10, FALSE, boyitem._iName, iclr, TRUE); -#ifdef HELLFIRE - AddSTextVal(10, boyitem._iIvalue - (boyitem._iIvalue >> 2)); -#else - AddSTextVal(10, boyitem._iIvalue + (boyitem._iIvalue >> 1)); -#endif + if (gbIsHellfire) + AddSTextVal(10, boyitem._iIvalue - (boyitem._iIvalue >> 2)); + else + AddSTextVal(10, boyitem._iIvalue + (boyitem._iIvalue >> 1)); PrintStoreItem(&boyitem, 11, iclr); AddSText(0, 22, TRUE, "Leave", COL_WHITE, TRUE); OffsetSTextY(22, 6); @@ -2420,19 +2419,16 @@ void S_BBuyEnter() stextshold = STORE_BBOY; stextvhold = stextsval; stextlhold = 10; -#ifdef HELLFIRE - if (plr[myplr]._pGold < boyitem._iIvalue - (boyitem._iIvalue >> 2)) { -#else - if (plr[myplr]._pGold < boyitem._iIvalue + (boyitem._iIvalue >> 1)) { -#endif + int price = boyitem._iIvalue; + if (gbIsHellfire) + price -= boyitem._iIvalue >> 2; + else + price += boyitem._iIvalue >> 1; + if (plr[myplr]._pGold < price) { StartStore(STORE_NOMONEY); } else { plr[myplr].HoldItem = boyitem; -#ifdef HELLFIRE - plr[myplr].HoldItem._iIvalue -= plr[myplr].HoldItem._iIvalue >> 2; -#else - plr[myplr].HoldItem._iIvalue += plr[myplr].HoldItem._iIvalue >> 1; -#endif + plr[myplr].HoldItem._iIvalue = price; SetCursor_(plr[myplr].HoldItem._iCurs + CURSOR_FIRSTITEM); done = FALSE; for (i = 0; i < NUM_INV_GRID_ELEM && !done; i++) { diff --git a/SourceX/DiabloUI/credits_lines.cpp b/SourceX/DiabloUI/credits_lines.cpp index 0a297acff..08c6b076c 100644 --- a/SourceX/DiabloUI/credits_lines.cpp +++ b/SourceX/DiabloUI/credits_lines.cpp @@ -3,99 +3,6 @@ namespace dvl { const char *const CREDITS_LINES[] = { -#ifdef HELLFIRE - " Synergistic Software", - "", - "General Manager", - " Bob Clardy", - "", - "Lead Programmer", - " Donald Tsang", - "", - "Software Engineering", - " Jim Edwards, Gary Powell, D'Andre Pritchett", - "", - "Art Director", - " Kirt Lemons", - "", - "Artists", - " Darren Lamb, Mike McMillen,", - " Jason Robertson, Peter Watje", - "", - "Design", - " Kirt Lemons, Donald Tsang, Peter Watje", - " Jim Edwards, Mike McMillen", - "", - "Additional Design", - " Michael Ormsby", - "", - "Sound Design, SFX & Audio Engineering", - " Craig Utterback", - "", - "Quality Assurance Lead", - " Mona Branham", - "", - "Testers", - " Chris Barker, Steve Chin, Derek Clardy, Conor Durdy,", - " Amy Edwards, Greg Hightower, Tim Jensen, Jeremy Jones,", - " John Lang, Daudi Pritchett, Doug Van Horne, Gordon Wilcox", - "", - "Manual", - " Suzanne David, Linda Westerfield,", - " Ann Dickens Clardy, Kirt Lemons", - "", - "Voices", - " Jim Edwards, Paul Eiding, Eve Forward,", - " Mackenzie Powell, Rodney Sherwood, Craig Utterback", - "", - "", - " Additional Work", - "", - "Quest Text Writing", - " Eve Forward", - "", - "Thanks to", - " Trisha Durdy, Dustin Freeman, D'Andre Pritchett", - "", - "", - "", - " Special Thanks to Blizzard Entertainment", - "", - "", - "", - "", - " Sierra On-Line Inc. Northwest", - "", - "Quality Assurance Manager", - " Gary Stevens", - "", - "Quality Assurance Lead Tester", - " Bernadette Pryor", - "", - "Main Testers", - " Erik Johnson, David Lee, Kristofer Hall", - "", - "Additional Testers", - " Cade Myers, Jeff Ingham, Phil Kuhlmey,", - " Eric Gelfand, Mark Wyman, Torsten Reinl,", - " Erinn Hamilton", - "", - "Product Marketing Manager", - " Eddie Ranchigoda", - "", - "Public Relations Manager", - " Eric Twelker", - "", - "Associate Product Manager", - " Joe Roth", - "", - "Thanks to", - " Cindy Vanous, Joshua Bentley, Robert Zimmerman, Robert Jerauld,", - " Dennis Ham, Andrea Stone, Beth Quintana, Jennifer Keenan, Gary Brown,", - " Ken Eaton, Matt Eslick, Kate Powell, Bryon Mcpherson, David Beetlestone", - "", - "" -#else "Game Design", " Blizzard North", "", @@ -299,6 +206,97 @@ const char *const CREDITS_LINES[] = { " Bob and Jan Davidson", " Walter Forbes", "", + " Synergistic Software", + "", + "General Manager", + " Bob Clardy", + "", + "Lead Programmer", + " Donald Tsang", + "", + "Software Engineering", + " Jim Edwards, Gary Powell, D'Andre Pritchett", + "", + "Art Director", + " Kirt Lemons", + "", + "Artists", + " Darren Lamb, Mike McMillen,", + " Jason Robertson, Peter Watje", + "", + "Design", + " Kirt Lemons, Donald Tsang, Peter Watje", + " Jim Edwards, Mike McMillen", + "", + "Additional Design", + " Michael Ormsby", + "", + "Sound Design, SFX & Audio Engineering", + " Craig Utterback", + "", + "Quality Assurance Lead", + " Mona Branham", + "", + "Testers", + " Chris Barker, Steve Chin, Derek Clardy, Conor Durdy,", + " Amy Edwards, Greg Hightower, Tim Jensen, Jeremy Jones,", + " John Lang, Daudi Pritchett, Doug Van Horne, Gordon Wilcox", + "", + "Manual", + " Suzanne David, Linda Westerfield,", + " Ann Dickens Clardy, Kirt Lemons", + "", + "Voices", + " Jim Edwards, Paul Eiding, Eve Forward,", + " Mackenzie Powell, Rodney Sherwood, Craig Utterback", + "", + "", + " Additional Work", + "", + "Quest Text Writing", + " Eve Forward", + "", + "Thanks to", + " Trisha Durdy, Dustin Freeman, D'Andre Pritchett", + "", + "", + "", + " Special Thanks to Blizzard Entertainment", + "", + "", + "", + "", + " Sierra On-Line Inc. Northwest", + "", + "Quality Assurance Manager", + " Gary Stevens", + "", + "Quality Assurance Lead Tester", + " Bernadette Pryor", + "", + "Main Testers", + " Erik Johnson, David Lee, Kristofer Hall", + "", + "Additional Testers", + " Cade Myers, Jeff Ingham, Phil Kuhlmey,", + " Eric Gelfand, Mark Wyman, Torsten Reinl,", + " Erinn Hamilton", + "", + "Product Marketing Manager", + " Eddie Ranchigoda", + "", + "Public Relations Manager", + " Eric Twelker", + "", + "Associate Product Manager", + " Joe Roth", + "", + "Thanks to", + " Cindy Vanous, Joshua Bentley, Robert Zimmerman, Robert Jerauld,", + " Dennis Ham, Andrea Stone, Beth Quintana, Jennifer Keenan, Gary Brown,", + " Ken Eaton, Matt Eslick, Kate Powell, Bryon Mcpherson, David Beetlestone", + "", + "", "The Ring of One Thousand", " Andrew Abernathy, Christopher Abramo, David Adams, David ", " Adcox, Marko Agterberg, Cory Aiken, Judah Altaras, John ", @@ -551,7 +549,6 @@ const char *const CREDITS_LINES[] = { " ", " ", " " -#endif }; const std::size_t CREDITS_LINES_SIZE = sizeof(CREDITS_LINES) / sizeof(CREDITS_LINES[0]);