diff --git a/.vscode/settings.json b/.vscode/settings.json index d4fc2c30f..48e724a2e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,6 +5,38 @@ "initializer_list": "cpp", "utility": "cpp", "*.tcc": "cpp", - "typeinfo": "cpp" + "typeinfo": "cpp", + "deque": "cpp", + "vector": "cpp", + "cctype": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "cstdarg": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "list": "cpp", + "unordered_map": "cpp", + "exception": "cpp", + "fstream": "cpp", + "functional": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "new": "cpp", + "ostream": "cpp", + "numeric": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "system_error": "cpp", + "cinttypes": "cpp", + "type_traits": "cpp", + "tuple": "cpp", + "algorithm": "cpp" } } \ No newline at end of file diff --git a/README.md b/README.md index f5e9eff6b..e89915136 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ set(SDL2_LIBRARIES "-L${SDL2_LIBDIR} -lSDL2 -lSDL2_image -lSDL2_mixer -lSDL2_tt Copy the "diablodat.mpq" from your Diablo CD to the Diablo Directory and make sure it is LOWERCASE. -Copy the Xresources and fonts file to your Diablo Directory. +COPY THE *prealpha.mpq* from this directory TO YOUR DIABLO DIRECTORY. Keep in mind please that this is still being worked on and is missing parts of UI and SoundEffects are not properly playing now. diff --git a/Source/gmenu.cpp b/Source/gmenu.cpp index a8b58676d..a36976678 100644 --- a/Source/gmenu.cpp +++ b/Source/gmenu.cpp @@ -21,6 +21,10 @@ void *pPentSmall; void *pTitlqtxtCel; void *pDiabfrCel; void *BigTGold_cel; + +//int gb_Lfont_pix_width; +//int gb_Lfont_str_len; + int gdwLogoWidth; int gdwLogoHeight; void *pPcxLogoImage; @@ -61,6 +65,10 @@ void *pPcxFont3Image; unsigned char *pFont3; +void *GameTitle; +int GameTitleHeight; +int GameTitleWidth; + #endif @@ -100,6 +108,7 @@ void __cdecl gmenu_draw_pause() } // 69BEF8: using guessed type int light_table_index; + PALETTEENTRY pcxPal[256]; void __fastcall LoadPalInMem(PALETTEENTRY *pPal) @@ -149,6 +158,10 @@ BOOL __cdecl LoadArtWithPal(char *pszFile, void **pBuffer, int frames, DWORD *da return 0; LoadPalInMem(pcxPal); + + + + // lpDDPalette->SetEntries(0, 0, 256, orig_palette); if (pBuffer && data) @@ -373,9 +386,12 @@ void __cdecl gmenu_init_menu() dword_63448C = 0; byte_634464 = 0; - LoadArtImage("ui_art\\cursor.pcx", &pPcxCursorImage, 1, dwData); - gdwCursorWidth = dwData[0]; - gdwCursorHeight = dwData[1]; + // LoadArtImage("ui_art\\cursor.pcx", &pPcxCursorImage, 1, dwData); + // gdwCursorWidth = dwData[0]; + // gdwCursorHeight = dwData[1]; + // printf("%d\n",gdwCursorWidth); + + LoadArtWithPal("ui_art\\mainmenu.pcx", &pPcxTitleImage, 1, dwData); gdwTitleWidth = dwData[0]; @@ -416,6 +432,10 @@ void __cdecl gmenu_init_menu() gdwFont3Height = dwData[1]; pFont3 = LoadFileInMem("ui_art\\font16.bin", 0); + + + //pPcxCursorImage = LoadFileInMem("data\\inv\\objcurs.cel",0); + GameTitle= LoadFileInMem("Gendata\\Diabfr.CEL",0); sgpLogo = LoadFileInMem("Data\\Diabsmal.CEL", 0); BigTGold_cel = LoadFileInMem("Data\\BigTGold.CEL", 0); PentSpin_cel = LoadFileInMem("Data\\PentSpin.CEL", 0); diff --git a/Source/gmenu.h b/Source/gmenu.h index 6b5d19717..9b26870ed 100644 --- a/Source/gmenu.h +++ b/Source/gmenu.h @@ -7,6 +7,7 @@ extern bool byte_634464; // weak extern void *PentSpin_cel; extern TMenuItem *sgpCurrItem; extern void *BigTGold_cel; +extern void *GameTitle; extern int dword_634474; // weak extern char byte_634478; // weak extern void (__cdecl *dword_63447C)(); diff --git a/Stub/diabloui.cpp b/Stub/diabloui.cpp index 8d3622f1c..58b3b6562 100644 --- a/Stub/diabloui.cpp +++ b/Stub/diabloui.cpp @@ -37,24 +37,33 @@ BOOL __stdcall UiSelHeroSingDialog(BOOL(__stdcall *fninfo)(BOOL(__stdcall *fninf hero_infos.clear(); fninfo(&ui_add_hero_info); + + if (CreateSinglePlayerChar) { + const char *test_name = HeroUndecidedName; + DUMMY_PRINT("create hero: %s", test_name); + + strcpy(name, test_name); + + _uiheroinfo hero_info = {1 }; + strcpy(hero_info.name, test_name); + hero_info.heroclass = HeroChosen; + + fncreate(&hero_info); + } + + + + // If a hero is available, load it, otherwise create a new one - if (!hero_infos.empty()) { + //if (!hero_infos.empty()) { + + else { const char *hero_name = chr_name_str; DUMMY_PRINT("use hero: %s", hero_name); strcpy(name, hero_name); *dlgresult = 2; - } else { - const char *test_name = "tester"; - DUMMY_PRINT("create hero: %s", test_name); - - strcpy(name, test_name); - - _uiheroinfo hero_info = {0}; - strcpy(hero_info.name, test_name); - hero_info.heroclass = PC_SORCERER; - - fncreate(&hero_info); + } return TRUE; diff --git a/Stub/init.cpp b/Stub/init.cpp index ba21a3ed0..9f81eecc3 100644 --- a/Stub/init.cpp +++ b/Stub/init.cpp @@ -16,6 +16,9 @@ int gbActive; char gszVersionNumber[260]; char gszProductName[260]; +char HeroUndecidedName[17] = {0}; +bool CreateSinglePlayerChar; +int HeroChosen = 0; /** * Case insensitive search for a file name in a directory. @@ -45,7 +48,9 @@ static std::string find_file_in_std_directories(const char *file) { for (auto dir : {".", "..", "../.."}) { auto path = find_file_in_directory(dir, file); + if (!path.empty()) { + printf("%s \n", path.c_str()); return path; } } @@ -90,7 +95,7 @@ void __cdecl init_archives() SFileOpenArchive(find_file_in_std_directories("patch_rt.mpq").c_str(), 1000, 0, &patch_rt_mpq); assert(patch_rt_mpq); - + // I don' think this works, like I would intend. SFileOpenArchive(find_file_in_std_directories("prealpha.mpq").c_str(), 1000, 0, &prealpha_mpq); assert(prealpha_mpq); } @@ -117,6 +122,7 @@ void LoadCharNamesintoMemory(int start, int end) if (CharFile) { if (pfile_read_hero(CharFile, &pkplr)) { strcpy(p_hero_names, pkplr.pName); + printf("Player Strength %d\n", (int)pkplr.pBaseStr); UnPackPlayer(&pkplr, 0, 0); pfile_archive_contains_game(CharFile); } @@ -150,349 +156,387 @@ void SDL_Diablo_UI() // I anticipate to move this later. music_start(5); signed int NewHeroNameIndex = 0; + int menu = 0; SDL_Event event; int x, y; bool quit = false; int CharsLoaded = 0; + int HeroPortrait = 3; printf("Main Menu Init\n"); // SDL_ShowCursor(SDL_DISABLE);//Doesn't really work... Use HideCursor() instead. SdlDiabloMainWindow(); ClearScreenBuffer(); - LoadPalette("Levels\\L3Data\\L3pwater.pal"); - // LoadPalette("Gendata\\Cutstart.pal"); // Doesn't exist.?? + //LoadPalette("gendata\\charscrn.pal"); // Uncomenting this fixes the the PCXs... + LoadPalette("Gendata\\Title.pal"); const Uint8 *state = SDL_GetKeyboardState(NULL); // static std::deque message_queue; while (1 && quit == false) { - DrawMouse(); + // DrawMouse(); PaletteFadeIn(8); if (menu == 0) { // CreateMainDiabloMenu(); SDL_RenderDiabloMainPage(); DrawMouse(); - // sdl_present_surface(); + } if (menu == 2) { if (CharsLoaded == 0) { - LoadCharNamesintoMemory(0, 2); + LoadCharNamesintoMemory(0, 7); + // LoadHeroStats(); CharsLoaded = 1; } SDL_RenderDiabloSinglePlayerPage(); gbMaxPlayers = 1; + DrawMouse(); // Not accurate for some reason. It adds too much and I am not sure why. + ConstantButtons(); } if (menu == 3) { + // HeroPortrait = 3; + CreateHeroMenu(); - CreateMenuDialogBox(); + DrawNewHeroKartinka(HeroPortrait, 1); + ConstantButtons(); + DrawMouse(); } + + int m4Loaded = 0; if (menu == 4) { - SDL_RenderDiabloSinglePlayerPage(); - if (event.type == SDL_KEYDOWN && NewHeroNameIndex < 17) { - /*put stuff*/ - } + + DrawNewHeroKartinka(HeroPortrait, 0); + RenderDefaultStats(HeroPortrait); + RenderUndecidedHeroName(); + ConstantButtons(); + DrawMouse(); } if (menu == 10) { ShowCredts(); } - if (SDL_PollEvent(&event)) { - // DrawMouse(); //Doesn't work yet ; Too slow. + if (SDL_PollEvent(&event)) { // Technically if this is a while look then it would probably work fine... + // but my code above wouldnt escape switch (event.type) { case SDL_KEYDOWN: - printf("Key press detected\n"); - switch( event.key.keysym.sym ){ - case SDLK_ESCAPE: - menu = 0; - break; + switch (event.key.keysym.sym) { + case SDLK_ESCAPE: + menu = 0; + break; + + case SDLK_BACKSPACE: + if (NewHeroNameIndex > 0) { + HeroUndecidedName[NewHeroNameIndex - 1] = 0; + --NewHeroNameIndex; + } + break; + + case SDLK_RETURN: + default: + char letter = event.key.keysym.sym; // This is just a way to ensure alpha keys are pressed only + //printf("%d", event.key.keysym.sym); + if (int(letter) > 96 && int(letter) < 123 || int(letter) == 32) + + if (NewHeroNameIndex < 17) { + HeroUndecidedName[NewHeroNameIndex] = letter; + NewHeroNameIndex++; + // printf("%s\n ", HeroUndecidedName); + } + + break; } - break; case SDL_KEYUP: - printf("Key release detected\n"); + //printf("Key release detected\n"); break; default: + // printf("%c", event.key.keysym.sym); break; } - - - if (event.type == SDL_QUIT) { - - quit = true; - SDL_Quit(); - exit(0); // SDL quit doesn't always work. - } - - if (event.type == SDL_MOUSEMOTION) { - // Get the mouse offsets - x = event.motion.x; - y = event.motion.y; - MouseX = x; - MouseY = y; - - // SDL_GetMouseState(&MouseX, &MouseY); - } - // if (event.type == SDL_KEYDOWN && menu == 4 ){ - // char * keyz = SDL_GetKeyName(event.key.keysym.sym); - // printf("SDLKEY PRESSED %s", keyz); + if (event.type == SDL_QUIT) { - // } - - // If a key was pressed - if (event.type == SDL_MOUSEBUTTONDOWN /*&& event.button.clicks == 2*/) { - - if (event.button.button == SDL_BUTTON_LEFT) { - x = event.button.x; - y = event.button.y; - printf("X %d , Y %d\n", x, y); - - if (menu == 0) { - - int ClickListStart = 195; - int sizeOfBox = 60; - int WidthOfBox = 400; - int ClickListEnd = 343; - - if ((x > ClickListStart) && (y > ClickListStart) && (x < ClickListStart + WidthOfBox) && - (y < ClickListStart + sizeOfBox)) { // Single clicked - printf("SinglePlayer Diablo\n"); - // effects_play_sound("Sfx\\Items\\Titlslct.wav"); - menu = 2; - } - - if ((x > ClickListStart) && (y > ClickListStart + (sizeOfBox)) && - (x < ClickListStart + WidthOfBox) && - (y < ClickListStart + (sizeOfBox) + sizeOfBox)) { // MultiBox clicked - printf("MultiPlayer Diablo\n"); - } - if ((x > ClickListStart) && (y > ClickListStart + (sizeOfBox * 2)) && - (x < ClickListStart + WidthOfBox) && - (y < ClickListStart + (sizeOfBox * 2) + sizeOfBox)) { // Reply Intro clicked - printf("Replay Intro\n"); - } - if ((x > ClickListStart) && (y > ClickListStart + (sizeOfBox * 4)) && - (x < ClickListStart + WidthOfBox) && - (y < ClickListStart + (sizeOfBox * 4) + sizeOfBox)) { // ShowCredits clicked - printf("Show Credits\n"); - menu = 10; - // effects_play_sound("Sfx\\Items\\Titlslct.wav"); - // UiCreditsDialog(16); - } - - if ((x > ClickListStart) && (y > ClickListStart + (sizeOfBox * 5)) && - (x < ClickListStart + WidthOfBox) && - (y < ClickListStart + (sizeOfBox * 5) + sizeOfBox)) { // ExitBox clicked - printf("Exiting Diablo\n"); - // effects_play_sound("Sfx\\Items\\Titlslct.wav"); - - quit = true; - SDL_Quit(); - exit(0); - // goto LABEL_16; - } - - } // End of this Menu0 - - if (menu == 2) { - // int x = 440; - // int y = 430; - int ClickListStart = 315; - int sizeOfBox = 30; - int WidthOfBox = 400; - int ClickListEnd = 343; - - // Render Clicks - if (TotalPlayers >= 1 && (x > ClickListStart) && (y > ClickListStart) && - (x < ClickListStart + WidthOfBox) && (y < ClickListStart + sizeOfBox)) { // MultiBox clicked - // printf("Player %s\n", hero_names[0]); - // effects_play_sound("Sfx\\Items\\Titlslct.wav"); - strcpy(chr_name_str, hero_names[0]); - printf("Player %s\n", chr_name_str); - // FreeMenuItems(); - break; - } - - if (TotalPlayers >= 2 && (x > ClickListStart) && (y > ClickListStart + (sizeOfBox)) && - (x < ClickListStart + WidthOfBox) && - (y < ClickListStart + (sizeOfBox) + sizeOfBox)) { // MultiBox clicked - printf("Player 2 Diablo\n"); - // effects_play_sound("Sfx\\Items\\Titlslct.wav"); - strcpy(chr_name_str, hero_names[1]); - printf("Player %s\n", chr_name_str); - // FreeMenuItems(); - // XStartGame(); - break; - } - if (TotalPlayers >= 3 && (x > ClickListStart) && (y > ClickListStart + (sizeOfBox * 2)) && - (x < ClickListStart + WidthOfBox) && - (y < ClickListStart + (sizeOfBox * 2) + sizeOfBox)) { // MultiBox clicked - printf("Player 3 Diablo\n"); - effects_play_sound("Sfx\\Items\\Titlslct.wav"); - strcpy(chr_name_str, hero_names[2]); - printf("Player %s\n", chr_name_str); - // FreeMenuItems(); - break; - // XStartGame(); - } - if (TotalPlayers >= 4 && (x > ClickListStart) && (y > ClickListStart + (sizeOfBox * 3)) && - (x < ClickListStart + WidthOfBox) && - (y < ClickListStart + (sizeOfBox * 3) + sizeOfBox)) { // MultiBox clicked - printf("Player 4 Diablo\n"); - effects_play_sound("Sfx\\Items\\Titlslct.wav"); - strcpy(chr_name_str, hero_names[3]); - printf("Player %s\n", chr_name_str); - // FreeMenuItems(); - break; - // XStartGame(); - } - if (TotalPlayers >= 5 && (x > ClickListStart) && (y > ClickListStart + (sizeOfBox * 4)) && - (x < ClickListStart + WidthOfBox) && - (y < ClickListStart + (sizeOfBox * 4) + sizeOfBox)) { // MultiBox clicked - printf("Player 5 Diablo\n"); - effects_play_sound("Sfx\\Items\\Titlslct.wav"); - strcpy(chr_name_str, hero_names[4]); - printf("Player %s\n", chr_name_str); - // FreeMenuItems(); - break; - // XStartGame(); - } - if (TotalPlayers >= 6 && (x > ClickListStart) && (y > ClickListStart + (sizeOfBox * 5)) && - (x < ClickListStart + WidthOfBox) && - (y < ClickListStart + (sizeOfBox * 5) + sizeOfBox)) { // MultiBox clicked - printf("Player 6 Diablo\n"); - effects_play_sound("Sfx\\Items\\Titlslct.wav"); - strcpy(chr_name_str, hero_names[5]); - printf("Player %s\n", chr_name_str); - // FreeMenuItems(); - break; - // XStartGame(); - } + quit = true; + SDL_Quit(); + exit(0); // SDL quit doesn't always work. + } - if ((x > SinglePlayerMenuCancelBox.x) && (y > SinglePlayerMenuCancelBox.y) && - (x < SinglePlayerMenuCancelBox.w) && (y < SinglePlayerMenuCancelBox.h)) { // ExitBox clicked - printf("CancelBox Diablo\n"); - effects_play_sound("Sfx\\Items\\Titlslct.wav"); + if (event.type == SDL_MOUSEMOTION) { + // Get the mouse offsets + x = event.motion.x; + y = event.motion.y; + MouseX = x; + MouseY = y; + } - menu = 0; - } - if ((x > CreateHeroBox.x) && (y > CreateHeroBox.y) && (x < CreateHeroBox.w) && - (y < CreateHeroBox.h)) { - printf("Clicked Create Hero Box\n"); - menu = 3; - } - } - if (menu == 3) { - // SinglePlayerMenuItemsLoaded = 0; - printf("\n\nmenu3 X%d Y%d \n ", x, y); - - int WarriorSelectBoxY = 379; - int WarriorSelectBoxW = 100; - int WarriorSelectBoxS = 100; - - int RogueSelectBoxX = 360; - int RogueSelectBoxY = 345; - int SorcerorSelectBoxX = 383; - int SorcerorSelectBoxY = 365; - int CreateHeroOkBoxX = 330; - int CreateHeroOkBoxY = 441; - int CreateHeroCanBBoxX = 445; - int CreateHeroCanBBoxY = 473; - - SDL_Rect WarriorSelectBox; - WarriorSelectBox.y = 280; - WarriorSelectBox.x = 375; - WarriorSelectBox.w = WarriorSelectBox.x + 100; - WarriorSelectBox.h = WarriorSelectBox.y + 30; - - SDL_Rect RogueSelectBox; - RogueSelectBox.y = 320; - RogueSelectBox.x = 400; - RogueSelectBox.w = RogueSelectBox.x + 100; - RogueSelectBox.h = RogueSelectBox.y + 30; - - SDL_Rect SorcerorSelectBox; - SorcerorSelectBox.y = 360; - SorcerorSelectBox.x = 380; - SorcerorSelectBox.w = SorcerorSelectBox.x + 100; - SorcerorSelectBox.h = SorcerorSelectBox.y + 30; - - SDL_Rect CreateHeroCancelBox; - CreateHeroCancelBox.y = 450; - CreateHeroCancelBox.x = 450; - CreateHeroCancelBox.w = CreateHeroCancelBox.x + 100; - CreateHeroCancelBox.h = CreateHeroCancelBox.y + 30; - - if ((x > WarriorSelectBox.x) && (y > WarriorSelectBox.y) && (x < WarriorSelectBox.w) && - (y < WarriorSelectBox.h)) { - - printf("I was hit\n\n\n"); - WarriorCreateSelected = 1; - RogueCreateSelected = 0; - SorcerorCreateSelected = 0; - menu = 4; + // if (event.type == SDL_KEYDOWN && menu == 4 ){ + // char * keyz = SDL_GetKeyName(event.key.keysym.sym); + // printf("SDLKEY PRESSED %s", keyz); + + // } + + // If a key was pressed + if (event.type == SDL_MOUSEBUTTONDOWN /*&& event.button.clicks == 2*/) { + + if (event.button.button == SDL_BUTTON_LEFT) { + x = event.button.x; + y = event.button.y; + printf("X %d , Y %d\n", x, y); + + if (menu == 0) { + + int ClickListStart = 195; + int sizeOfBox = 60; + int WidthOfBox = 400; + int ClickListEnd = 343; + + if ((x > ClickListStart) && (y > ClickListStart) && (x < ClickListStart + WidthOfBox) && + (y < ClickListStart + sizeOfBox)) { // Single clicked + printf("SinglePlayer Diablo\n"); + // effects_play_sound("Sfx\\Items\\Titlslct.wav"); + menu = 2; + } + + if ((x > ClickListStart) && (y > ClickListStart + (sizeOfBox)) && + (x < ClickListStart + WidthOfBox) && + (y < ClickListStart + (sizeOfBox) + sizeOfBox)) { // MultiBox clicked + printf("MultiPlayer Diablo\n"); + } + if ((x > ClickListStart) && (y > ClickListStart + (sizeOfBox * 2)) && + (x < ClickListStart + WidthOfBox) && + (y < ClickListStart + (sizeOfBox * 2) + sizeOfBox)) { // Reply Intro clicked + printf("Replay Intro\n"); + } + if ((x > ClickListStart) && (y > ClickListStart + (sizeOfBox * 4)) && + (x < ClickListStart + WidthOfBox) && + (y < ClickListStart + (sizeOfBox * 4) + sizeOfBox)) { // ShowCredits clicked + printf("Show Credits\n"); + menu = 10; + // effects_play_sound("Sfx\\Items\\Titlslct.wav"); + // UiCreditsDialog(16); + } + + if ((x > ClickListStart) && (y > ClickListStart + (sizeOfBox * 5)) && + (x < ClickListStart + WidthOfBox) && + (y < ClickListStart + (sizeOfBox * 5) + sizeOfBox)) { // ExitBox clicked + printf("Exiting Diablo\n"); + // effects_play_sound("Sfx\\Items\\Titlslct.wav"); + + quit = true; + SDL_Quit(); + exit(0); + // goto LABEL_16; + } + + } // End of this Menu0 + + if (menu == 2) { // Yes, I know. Skipped 1 and I going to hell for it. + // int x = 440; + // int y = 430; + int ClickListStart = 315; + int sizeOfBox = 30; + int WidthOfBox = 400; + int ClickListEnd = 343; + + int CreateHeroY = 555; + int CreateHeroX = 305; + + SDL_Rect CreateHeroCancelBox; + CreateHeroCancelBox.y = 550; + CreateHeroCancelBox.x = 675; + CreateHeroCancelBox.w = CreateHeroCancelBox.x + 100; + CreateHeroCancelBox.h = CreateHeroCancelBox.y + 30; + + // Render Clicks + if (TotalPlayers >= 1 && (x > ClickListStart) && (y > ClickListStart) && + (x < ClickListStart + WidthOfBox) && (y < ClickListStart + sizeOfBox)) { // MultiBox clicked + strcpy(chr_name_str, hero_names[0]); + printf("Player %s\n", chr_name_str); + break; + } + + if (TotalPlayers >= 2 && (x > ClickListStart) && (y > ClickListStart + (sizeOfBox)) && + (x < ClickListStart + WidthOfBox) && + (y < ClickListStart + (sizeOfBox) + sizeOfBox)) { // MultiBox clicked + printf("Player 2 Diablo\n"); + strcpy(chr_name_str, hero_names[1]); + printf("Player %s\n", chr_name_str); + break; + } + + if (TotalPlayers >= 3 && (x > ClickListStart) && (y > ClickListStart + (sizeOfBox * 2)) && + (x < ClickListStart + WidthOfBox) && + (y < ClickListStart + (sizeOfBox * 2) + sizeOfBox)) { // MultiBox clicked + printf("Player 3 Diablo\n"); + // effects_play_sound("Sfx\\Items\\Titlslct.wav"); + strcpy(chr_name_str, hero_names[2]); + printf("Player %s\n", chr_name_str); + break; + } + + if (TotalPlayers >= 4 && (x > ClickListStart) && (y > ClickListStart + (sizeOfBox * 3)) && + (x < ClickListStart + WidthOfBox) && + (y < ClickListStart + (sizeOfBox * 3) + sizeOfBox)) { // MultiBox clicked + printf("Player 4 Diablo\n"); + effects_play_sound("Sfx\\Items\\Titlslct.wav"); + strcpy(chr_name_str, hero_names[3]); + printf("Player %s\n", chr_name_str); + break; + } + + if (TotalPlayers >= 5 && (x > ClickListStart) && (y > ClickListStart + (sizeOfBox * 4)) && + (x < ClickListStart + WidthOfBox) && + (y < ClickListStart + (sizeOfBox * 4) + sizeOfBox)) { // MultiBox clicked + printf("Player 5 Diablo\n"); + effects_play_sound("Sfx\\Items\\Titlslct.wav"); + strcpy(chr_name_str, hero_names[4]); + printf("Player %s\n", chr_name_str); + break; + } + + if (TotalPlayers >= 6 && (x > ClickListStart) && (y > ClickListStart + (sizeOfBox * 5)) && + (x < ClickListStart + WidthOfBox) && + (y < ClickListStart + (sizeOfBox * 5) + sizeOfBox)) { // MultiBox clicked + printf("Player 6 Diablo\n"); + effects_play_sound("Sfx\\Items\\Titlslct.wav"); + strcpy(chr_name_str, hero_names[5]); + printf("Player %s\n", chr_name_str); + break; + } + + if ((x > CreateHeroCancelBox.x) && (y > CreateHeroCancelBox.y) && (x < CreateHeroCancelBox.w) && + (y < CreateHeroCancelBox.h)) { + HeroPortrait = 3; + + printf("Cancel\n\n\n"); + menu = 0; + } + if ((x > CreateHeroX) && (y > CreateHeroY) && (x < CreateHeroX + WidthOfBox) && + (y < CreateHeroY + sizeOfBox)) { + printf("Clicked Create Hero Box\n"); + menu = 3; + } } - if ((x > RogueSelectBox.x) && (y > RogueSelectBox.y) && (x < RogueSelectBox.w) && - (y < RogueSelectBox.h)) { - - printf("I was hit\n\n\n"); - WarriorCreateSelected = 0; - RogueCreateSelected = 1; - SorcerorCreateSelected = 0; - menu = 4; + if (menu == 3) { + // SinglePlayerMenuItemsLoaded = 0; + printf("\n\nmenu3 X%d Y%d \n ", x, y); + + int WarriorSelectBoxY = 430; + int WarriorSelectBoxW = 100; + int WarriorSelectBoxS = 100; + + int RogueSelectBoxX = 450; + int RogueSelectBoxY = 392; + int SorcerorSelectBoxX = 383; + int SorcerorSelectBoxY = 365; + int CreateHeroOkBoxX = 330; + int CreateHeroOkBoxY = 441; + int CreateHeroCanBBoxX = 445; + int CreateHeroCanBBoxY = 473; + + SDL_Rect WarriorSelectBox; + WarriorSelectBox.y = 350; + WarriorSelectBox.x = 450; + WarriorSelectBox.w = WarriorSelectBox.x + 100; + WarriorSelectBox.h = WarriorSelectBox.y + 30; + + SDL_Rect RogueSelectBox; + RogueSelectBox.y = 392; + RogueSelectBox.x = 450; + RogueSelectBox.w = RogueSelectBox.x + 100; + RogueSelectBox.h = RogueSelectBox.y + 30; + // X450 Y 392 ; + + SDL_Rect SorcerorSelectBox; + SorcerorSelectBox.y = 428; + SorcerorSelectBox.x = 450; + SorcerorSelectBox.w = SorcerorSelectBox.x + 100; + SorcerorSelectBox.h = SorcerorSelectBox.y + 30; + // X 447 Y 428 + + SDL_Rect CreateHeroCancelBox; + CreateHeroCancelBox.y = 550; + CreateHeroCancelBox.x = 675; + CreateHeroCancelBox.w = CreateHeroCancelBox.x + 100; + CreateHeroCancelBox.h = CreateHeroCancelBox.y + 30; + + if ((x > WarriorSelectBox.x) && (y > WarriorSelectBox.y) && (x < WarriorSelectBox.w) && + (y < WarriorSelectBox.h)) { + + printf(" warrior I was hit\n\n\n"); + HeroPortrait = 0; + HeroChosen = 0; + menu = 4; + } + if ((x > RogueSelectBox.x) && (y > RogueSelectBox.y) && (x < RogueSelectBox.w) && + (y < RogueSelectBox.h)) { + + printf(" rogue I was hit\n\n\n"); + HeroPortrait = 1; + HeroChosen = 1; + menu = 4; + } + if ((x > SorcerorSelectBox.x) && (y > SorcerorSelectBox.y) && (x < SorcerorSelectBox.w) && + (y < SorcerorSelectBox.h)) { + HeroPortrait = 2; + printf("sorceror I was hit\n\n\n"); + HeroChosen = 2; + menu = 4; + } + + if ((x > CreateHeroCancelBox.x) && (y > CreateHeroCancelBox.y) && (x < CreateHeroCancelBox.w) && + (y < CreateHeroCancelBox.h)) { + HeroPortrait = 3; + + printf("Cancel\n\n\n"); + --menu; + } } - if ((x > SorcerorSelectBox.x) && (y > SorcerorSelectBox.y) && (x < SorcerorSelectBox.w) && - (y < SorcerorSelectBox.h)) { - - printf("I was hit\n\n\n"); - WarriorCreateSelected = 0; - RogueCreateSelected = 0; - SorcerorCreateSelected = 1; - menu = 4; - } - - if ((x > CreateHeroCancelBox.x) && (y > CreateHeroCancelBox.y) && (x < CreateHeroCancelBox.w) && - (y < CreateHeroCancelBox.h)) { - - printf("Cancel\n\n\n"); - menu = 2; - } - } - if (menu == 4) { - printf("sozdat geroya"); - - // if (SDL_PollEvent(&event)) { - // if (event.type == SDL_KEYDOWN && menu == 4) { - // char *keyz = SDL_GetKeyName(event.key.keysym.sym); - // printf("SDLKEY PRESSED %s\n", keyz); - // } - // } - - SDL_Rect CreateHeroCancelBox; - CreateHeroCancelBox.y = 450; - CreateHeroCancelBox.x = 450; - CreateHeroCancelBox.w = CreateHeroCancelBox.x + 100; - CreateHeroCancelBox.h = CreateHeroCancelBox.y + 30; - - if ((x > CreateHeroCancelBox.x) && (y > CreateHeroCancelBox.y) && (x < CreateHeroCancelBox.w) && - (y < CreateHeroCancelBox.h)) { - - printf("Cancel\n\n\n"); - menu = 3; + if (menu == 4) { + printf("sozdat geroya"); + SDL_Rect CreateHeroCancelBox; + CreateHeroCancelBox.y = 550; + CreateHeroCancelBox.x = 675; + CreateHeroCancelBox.w = CreateHeroCancelBox.x + 100; + CreateHeroCancelBox.h = CreateHeroCancelBox.y + 30; + + // X 549 , Y 551 + SDL_Rect ClickOkBox; + ClickOkBox.y = 550; + ClickOkBox.x = 550; + ClickOkBox.w = ClickOkBox.x + 30; + ClickOkBox.h = ClickOkBox.y + 30; + + if ((x > CreateHeroCancelBox.x) && (y > CreateHeroCancelBox.y) && (x < CreateHeroCancelBox.w) && + (y < CreateHeroCancelBox.h)) { + memset(HeroUndecidedName, 0, 17); + + printf("Cancel\n\n\n"); + HeroPortrait = 3; + menu = 3; + } + + if ((x > ClickOkBox.x) && (y > ClickOkBox.y) && (x < ClickOkBox.w) && (y < ClickOkBox.h)) { + + printf("Ok\n"); + CreateSinglePlayerChar = 1; + const char *test_name = HeroUndecidedName; + printf("%s\n", test_name); + break; + } } } } } } } -} diff --git a/Stub/miniwin.h b/Stub/miniwin.h index f418a2d79..c5f6423df 100644 --- a/Stub/miniwin.h +++ b/Stub/miniwin.h @@ -44,6 +44,8 @@ #define VOID void +extern void *prealpha_mpq; + typedef char CHAR; typedef uint16_t SHORT; typedef int32_t LONG; diff --git a/Stub/miniwin_sdl.h b/Stub/miniwin_sdl.h index 5f43979b4..8f01e2c12 100644 --- a/Stub/miniwin_sdl.h +++ b/Stub/miniwin_sdl.h @@ -106,7 +106,9 @@ extern int gdwFont3Height; extern void *pPcxFont3Image; extern unsigned char *pFont3; - +extern char HeroUndecidedName[17]; +extern bool CreateSinglePlayerChar; +extern int HeroChosen; //Menu2 // Single player menu rects //extern static std::vector<_uiheroinfo> hero_infos; @@ -126,9 +128,12 @@ void SDL_Diablo_UI(); void FreeMenuItems(); void DrawMouse(); void DrawCursor(int mx, int my); - - - +void CreateHeroMenu(); +void DrawNewHeroKartinka(int image , int ShowClasses); +void ConstantButtons(); +void RenderUndecidedHeroName(); +void LoadHeroStats(); +void RenderDefaultStats(int HeroChosen); typedef unsigned char BYTE; void DrawArtWithMask(int SX, int SY, int SW, int SH, int nFrame, BYTE bMask, void *pBuffer); \ No newline at end of file diff --git a/Stub/sdlrender.cpp b/Stub/sdlrender.cpp index 74ac5cdcb..e3f310ac4 100644 --- a/Stub/sdlrender.cpp +++ b/Stub/sdlrender.cpp @@ -36,6 +36,8 @@ bool SinglePlayerMenuItemsLoaded = 0; bool DiabloImageLoaded = 0; bool DiabloMainMenuListLoaded = 0; +_uiheroinfo heroarray[10]; + struct timespec ts; ////////////////////////////////////// @@ -66,510 +68,505 @@ void *pPcxCreditsImage; int gdwCreditsWidth; int gdwCreditsHeight; - - - - - - //////////////// -//new vars +// new vars int gb_Lfont_str_len; int gb_Lfont_pix_width; int the_pcx_frame; - - - - -char *the_long_credits[] = -{ - "","","","","","","","","","","","", - "$-- Devilution --", - "Reversed by Andi \"GalaXyHaXz\"", - "", - "$-- Meet the Team --", - "seritools", - "mewmew", - "nomdenom", - "AJenbo", - "ApertureSecurity", - "", - "$-- Special Thanks --", - "The Sanctuary preservation project", - "Jarulf's guide to the Devil himself", - "", - "", - "$...The Devil is in the details", - "", - "", - "$Game Design", - "Blizzard North", - "", - "$Senior Designers", - "Erich Schaefer, David Brevik", - "", - "$Additional Design", - "Max Schaefer, Eric Sexton, Kenneth Williams", - "", - "$Lead Programmer", - "David Brevik", - "", - "$Senior Programmers", - "Richard Seis, Doron Gartner,", - "Patrick Wyatt, Mike O'Brien", - "", - "$Programming", - "Peter Brevik, Robin van der Wel, Jon Morin", - "", - "$Special Guest Programmers", - "Collin Murray, Frank Pearce", - "", - "$Battle.net Programming", - "Mike O'Brien, Mike Morhaime, Dan Liebgold", - "", - "$Serial Communications Programming", - "Jeff Strain, Mike O'Brien", - "", - "$Installer Programming", - "Bob Fitch, Patrick Wyatt", - "", - "$Art Directors", - "Erich Schaefer, Samwise Didier", - "", - "$Artwork", - "Michio Okamura, Eric Sexton, Ben Haas, Patrick Tougas,", - "Kelly Johnson, Erich Schaefer, Max Schaefer, Hugh Tom", - "Byrne, Roman Kenney, Samwise Didier, Dave Berggren,", - "Micky Neilson, Eric Flannum, Justin Thavirat, Brian", - "Sousa, Stu Rose, Nick Carpenter, Joeyray Hall", - "", - "$Technical Artwork", - "Christopher Root, Mark Sutherland,", - "Robert Djordjevich, Jeffrey Vaughn", - "", - "$Cinematic Art Directors", - "Duane Stinnett, Matt Samia", - "", - "$3D Cinematic Artwork", - "Duane Stinnett, Matt Samia, Rob McNaughton,", - "Eric Flannum, Dave Pursley, Micky Neilson,", - "Maxx Marshall, Trevor Jacobs, Brian Sousa,", - "Samwise Didier, Ron Smorynski, Ben Haas, Patrick Tougas", - "", - "$Cinematic Technical Artwork", - "Joeyray Hall ", - "", - "$Executive Producer", - "Allen Adham", - "", - "$Producer", - "Bill Roper", - "", - "$Associate Producer", - "James Phinney", - "", - "$Diablo Strike Team", - "Allen Adham, Ron Millar, Mike O'Brien,", - "James Phinney, Bill Roper, Patrick Wyatt", - "", - "$Music", - "Matt Uelmen", - "", - "$Sound Design", - "Matt Uelmen, Glenn Stafford", - "", - "$Cinematic Music & Sound", - "Glenn Stafford, Matt Uelmen", - "", - "$Voice Production, Direction & Casting", - "Mark Schwarz, Glenn Stafford, Bill Roper", - "", - "$Script & Story", - "Erich Schaefer, Eric Sexton,", - "Chris Metzen, Bill Roper", - "", - "$Voice Editing", - "Glenn Stafford", - "", - "$Voices", - "Michael Haley, Glynnis Talken, Michael Gough,", - "Paul Eiding, Lani Minella, Steve Brodie, Bill Roper,", - "Mark Schwarz, Glenn Stafford, Chris Metzen, Max Schaefer", - "", - "$Recording Engineer", - "Robert Koenigsberg", - "", - "$Manual Design & Layout", - "Peter Underwood, Jeffrey Vaughn,", - "Chris Metzen, Bill Roper", - "", - "$Manual Artwork", - "Samwise Didier, Chris Metzen,", - "Roman Kenney, Maxx Marshall", - "", - "$Provisional Director of QA (Lead Tester)", - "Shane Dabiri", - "", - "$QA Assault Team (Testers)", - "Christopher Cross, Mike Givens, Dave Hale,", - "Brian \"Doc\" Love, Hung Nguyen, Dean Shipley,", - "Chris Sigaty, Ian Welke, Jamie Wiggs", - "", - "$QA Special Ops Team (Compatibility Testers)", - "Adam Maxwell, Russell \"Rug\" Miller", - "", - "$QA Artillery Support (Additional Testers) ", - "Rich Alcazar, Mike Jones, Rev. Dan Moore, Matt Morris,", - "Mark Pfeiffer, Harish \"Pepe the Enforcer\" Rao, Chris Millar", - "", - "$QA Counterintelligence", - "Alan Dabiri, Jesse McReynolds, Walter Takata", - "", - "$Order of Network Information Services", - "Robert Bridenbecker, Jason \"Brother Shaggy\" Schmit,", - "Jamie \"Brother Gug\" Steigerwald, Richard Seis ", - "", - "$Customer Support", - "John Schwartz, Vic Larson, Chad Chaudry, Mick Yanko,", - "Brandon Riseling, Kirk Mahony, Tony Hardy, Richard", - "Amtower, Collin Smith, Andrew Edwards, Roger Eberhart", - "", - "$Sales", - "Jorge Rivero, Rob Beatie", - "", - "$Dunsel", - "Alan Dabiri", - "", - "$Mr. Dabiri's Background Vocalists", - "Karin Colenzo, Christina Cade,", - "Kim Farrington, Melissa Edwards", - "", - "$Public Relations", - "Linda Duttenhaver, Susan Wooley", - "", - "$Marketing", - "John Patrick, Steve Huot, Neal Hubbard, Kathy Carter", - "", - "$International Sales", - "Ralph Becker, Chris Yoshimura", - "", - "$U.S. Sales", - "Todd Coyle, Danny Kearns", - "", - "$Manufacturing", - "John Goodman, Tom Bryan", - "", - "$Legal & Business", - "Paula Duffy, Eric Roeder, Paul Sams, Kenneth Williams", - "", - "$Special Thanks To", - "Primenet, Earthlink, AOL, Compuserve, ATI, Matrox, STB, ", - "Creative Labs, Logitech, U.S. Robotics, Gravis, Cyrix", - "", - "$Thanks To", - "Ian Colquhoun, Rod Shean, Brian Fitzgerald, Sharon Schafer, Todd ", - "Schafer, Richard and Sandra Schaefer, Rick Bowles, Greg Bogden, ", - "Cindy Sievert, Brad Mason, Chuck Goldman, Karin Colenzo, Wendy ", - "Brevik, Jennie Brevik, Hanna Carroll, Katie Newell, Karen Weiss, ", - "Kurt Beaver, Stan McDonald, Brian Sexton, Michael Wan, Megan ", - "Williams, Jessica Gensley, Beth Ann Parks, Brian Piltin, Johnathan ", - "Root, Brett Supernaw, Sabeer Bhatia, Mark Rearick, Brad Mason, ", - "Diane Kodama, Bernadette Sexton, Barbara Uhlmann, Patricia", - "McDonald, Kris Kelley, Alissa Vaage, Denise Hernandez, Paula ", - "White, Rachel Marie Hawley, Laura Gaber, Isaac Matarasso,", - "Susan Stafford, Gretchen Witte, Jason Sailor, Eufemia Palomino, ", - "Nathalie Didier, Nicole Welke, Dawn Caddel, Anna-Marcelle ", - "Okamura, Amber Okamura, Megan Okamura Tracey McNaughton, ", - "Trisha Ann Ochoa, Annie Strain, Dr. Gregory T. Street, Ray the Soda ", - "Guy, Sam Raimi, A. Guinness Brewing Co., John Woo, Chow Yun Fat, ", - "Jackie Chan,Proposition 215, Rumiko Takahashi, Bunchy & Mason, ", - "The Friends of Stan, The Zoo Crew, Team Hamro, Brazil 2001, RUSH, ", - "Cornholio, THE BROS., Dar, Emeril Lagasse, Tom Waits, Ice-Cube, ", - "The Strike Team Deflectors, Tony Levin, Big Jim and the Twins, ", - "Jag`rmeister, The Megasphere, Condor, The Allower, The Sunday ", - "Night Group, Gravitar, Steinway Pianos, Round Table Pizza, The Poxy ", - "Boggards, Urban Mystic & Co., Caffeine, Hunter Rose, Marly ", - "mediums in the box, sweet Poteen, Dave Scarpitti, TheByter, Bim ", - "Man, Krissann for color, Patty at Avalon Tattoo, James, Whaleboy, ", - "Dunsel Training Institute, monkeys, Dob Bole, Rootes Group, Porshe, ", - "Bongo, Scarlett, Apollo, The House of Mediocrity, Amelias, The King, ", - "Saag and all the folks at Davidson", - "", - "$In memory of", - "Lawrence and Barbara Williams", - "David A. Hargrave", - "Tony \"Xatre\" Collin", - "Thomas H Sexton", - "", - "$Very Special Thanks to", - "Bob and Jan Davidson", - "Walter Forbes", - "", - "$The Ring of One Thousand", - "Andrew Abernathy, Christopher Abramo, David Adams, David ", - "Adcox, Marko Agterberg, Cory Aiken, Judah Altaras, John ", - "Alvarez, Jose Alvarez, Richard Amable, Alexander Amaral, ", - "Scott Amis, Vincent Amoroso, Mark An, David Andersen, Jason ", - "Andrew Abernathy, Christopher Abramo, David Adams, David ", - "Adcox, Marko Agterberg, Cory Aiken, Judah Altaras, John ", - "Alvarez, Jose Alvarez, Richard Amable, Alexander Amaral, ", - "Scott Amis, Vincent Amoroso, Mark An, David Andersen, Jason ", - "Andersen, Aaron Anderson, George Anderson, Matthew ", - "Anderson, Michael Anderson, Sean Anderson, Robert Andrade, ", - "Cerny Andre, Michael Andreev, Devin Angle, Brian Apple, ", - "Brian Arbuthnot, Billy Arden, Dorian Arnold, Andre Arsenault, ", - "Erik Asplund, Mark Assam, John Athey, Jason Attard, Jeff ", - "Atwood, Ricky Au, Scott Avery, Rand Babcock, Steve Babel, ", - "Raymond Bacalso, Ed Bachta, Steven Back, Scott Baeder, Alex ", - "Baevski, Scott Bailey, Kenneth Baird, Thomas Baker, Todd ", - "Bala, Jan Ball, Greg Baltz, Blake Baltzley, Doug Bambrick, Wes ", - "Bangerter, Paul Barfuss, Chris Barghout, Dave Barnebey, Jon ", - "Barnhart, Terje Barth, Nicole Baskin, Bernard Baylen, Ryan ", - "Bear, Phil Bedard, Todd Belcher, Chip Bell, Erez Ben-Aharon, ", - "Jonathan Bender, Nick Bennett, Ireney Berezniak, Ted Berg, ", - "Gunnar Bergem, Russell Beuker, Ed Bickford, Stephen Biles, ", - "John Billdt, Gerald Binder, John Bird, Hannah Blackerby, Tom ", - "Blackerby, Clayton Blackwell, Thomas Blake, Shawn Blaszak, ", - "Daniel Bliss, Fred Bliss, Jeff Bliss, Jon Blum, Rune Boersjoe, ", - "Andrew Boggs, Dave Boisvenu, Joe Bolt, John Bonds, Jeff ", - "Borenstein, Dorian Borin, Ed Boris, Bartholomew Botta, ", - "Michael Boutin, Michael Boyd, Charles Boyer, Mike ", - "Boyersmith, Michael Boyko, Eric Bradberry, John Brandstetter, ", - "Ryan Breding, Paul Brinkmann, Patrick Briscoe, Scott Brisko, ", - "Jeremy Britton, Adrian Broadhead, Glenn Brouwer, Joe Brown, ", - "Sebastien Brulotte, Darrell Brunsch, William Bryan, Jason ", - "Bucher, Chris Buchinger, Clayton Buckingham, John Buckles, ", - "David Bugay, Ed Bujone, Erik Burgess, Gabriel Burkett, Chris ", - "Burnes, Richard Butler, Jeffrey Bye, Dougall Campbell, Donnie ", - "Cannon, Shane Cantrell, Connor Caple, Daniel Carey, James ", - "Carlton, Michael Carmel, Mike Carpenter, Ronald Carruthers, ", - "Phil Carter, Bryce Cartmill, Eric Cartwright, Anthony Caruso, ", - "Lon Casey, Tim Caster, Aaron Chan, Otto Chan, Gene Chang, ", - "Hsiao-Lung Chang, William Chang, George Chappel, Larry ", - "Charbonneau, Troy Chase, Bruce Chen, Chun Hsien Chen, Sam ", - "Chen, Tzu-Mainn Chen, Mike Cheng, Chris Chiapusio, Damien ", - "Chiesa, Nick Chin, Nim Ching, Jonathan Chinn, Michael Chinn, ", - "Philander Chiu, Thayne Christiansen, Philip Chui, Steve ", - "Cintamani, Richard Ciordia, Colin Clark, Steve Clark, Samuel ", - "Clements, Meredith Clifton, Jeff Cohen, Dale Colton, Dax ", - "Combe, Matt Compton, Jacob Conklin, Richard Conn, Zac ", - "Cook, Tim Coolong, Gregory Coomer, Dennis Cosgrove, Kelly ", - "Couch, Andrew Coulter, Eric Coutinho, David Coutts, James ", - "Craig, John Craig, Kazial Craig, John Crawford, Marcelo ", - "Crespo, Orville Crews, Tim Cristy, Elmer Crosby III, Russell ", - "Cullison, Ryan Cupples, Andrew Dagley, Steve Dallaire, Richard ", - "Dalton, David Dandar, Pro Daulo, Rob Dautermann, Mike ", - "Davies, Kalieb Davis, Marshall Davis, Ronald Davis, Danny De ", - "Bie, Marc De Filippis, Myles Deighton, Kent Dejarnett, Anthony ", - "Delarosa, Neil Dempster, Peter Denitto, Joaquim Dentz, Scott ", - "Dewar, Anish Dhingra, Philip Dhingra, David Diaz, Stewart ", - "Dicks, Brad Dietz, Josh Dietz, Colleen Diggins, Mike Ditchburn, ", - "Eric Dittman, Allen Do, Huy Doan, Matthew Dolman, Antoine ", - "Dongois, Eamonn Donohoe, Bill Dorell, Mark Dorison, Dan ", - "Dorsett, Chris Dorsey, Jim Dose, Willis Doss, Chin Du, William ", - "Dubis, Timothy Duewell, Brandon Dunn, Andrew Durham, Don ", - "Duvall, Kevin Dvojack, Daniel Eaton, Paul Eberting, Eric ", - "Echelbarger, Lance Eddleman, Ben Eggers, David Eggum, John ", - "Ehde, Brian Eikenberry, Patrick Elven, Peter Engdahl, Philip ", - "Engdahl, Michael Ennis, Darren Eslinger, Eric Ezell, Darren ", - "Falslev, Stephen Feather, Tony Fenn, Ben Ferguson, Mike ", - "Fernandez, Gwendal Feuillet, Guy Fietz, Julian Figueroa, Dale ", - "Fillpot, Stan Finchem, Michael Finley, Nick Fisher, William ", - "Fisher, Mark Fitlin, Dave Flatt, Joel J. Flores, John Folkers, ", - "Steven Forgie, Tom Forsythe, Matthew Foster, Scott Francis, ", - "Jim Frank, Paulo Fraser, Glenn French, Kurt Frerichs, Chris ", - "Frey, Mark Friedman, Charles Friedmann, Dan Friend, Kirk ", - "Fry, Aaron Fu, Erik Gaalema, Brandon Gabbard, Phil Gagner, ", - "Tommy Gannon, David Gappmayer, Chris Garrison, Tony ", - "Garrison, David Gasca, Jeremy Gasser, Michael Geist, Michael ", - "Genereux, Daniel Genovese, Josh Gerwin, Paul Gibson, William ", - "Gilchrist, Gabriel Gils Carbo, Chad Glendenin, Ryan Glinski, ", - "Dean Gobrecht, Andrew Goldfinch, David Goodman, Mark ", - "Goodson, Matt Gordon, Frank Gorgenyi, Sean Gould, Perry ", - "Goutsos, Ed Govednik, Michael Grayson, Chris Green, Justin ", - "Grenier, Jeff Greulich, Don Grey, Rob Griesbeck, Don Griffes, ", - "Kimberly Griffeth, Jay Grizzard, Don Gronlund, Joe Gross, ", - "Troy Growden, Greg Guilford, David Gusovsky, Jeremy ", - "Guthrie, Adam Gutierrez, James Guzicki, Matthew Haas, Matt ", - "Hadley, Ryan Hagelstrom, Bobby Hagen, Ben Hall, Brian Hall, ", - "Kris Hall, Calvin Hamilton, Kris Hamilton, Bo Hammil, Dave ", - "Hans, Rick Hansen, Robert Harlan, Travis Harlan, Seth ", - "Harman, Jeff Harris, Shawn Hartford, Adam Hartsell, Neil ", - "Harvey, Ray Hayes, John Hein, Chris Heinonen, Christer ", - "Helsing, Chris Hempel, Dustin Hempel, Mathieu Henaire, Matt ", - "Henry, Chuck Herb, Michael Herron, Sage Herron, Thomas ", - "Herschbach, Cliff Hicks, Nelson Hicks, Paul Hierling, William ", - "Hiers, Mike Higdon, Tim Hildebrand, Casey Hinkle, Ryan ", - "Hitchings, Wes Hix, Alan Ho, Jenson Ho, Alan Hoffman, Jeff ", - "Hoffman, Eleanor Hoffmann, Steve Hogg, Richard Holler, Brian ", - "Homolya, Wade Hone, Joe Horvath, Jeff Howe, Eric Hudson, ", - "Glen Huey, Chris Hufnagel, Joshua Hughes, Melissa Hughes, ", - "Arief Hujaya, Thomas Hulen, Ryan Hupp, Justin Hurst, Rick ", - "Hutchins, Steve Iams, Mike Iarossi, Bjorn Idren, Johan Idren, ", - "Micah Imparato, Joe Ingersoll, David Ingram, Greg Ipp, Rodney ", - "Irvin, Darin Isola, Justin Itoh, Mario Ivan, Fredrik Ivarsson, ", - "Dax Jacobson, Michael Jacques, Stevens Jacques, Duane Jahnke, ", - "William Jambrosek, Daniel Janick, Narciso Jaramillo, Neil ", - "Jariwala, Harvie Jarriell, Scott Javadi, Joe Jenkins, Bart ", - "Jennings, Paul Jennings, Julien Jenny, Jason Jensen, Martin ", - "Jeremy, Mark Jeschke, Andy Johnson, James Johnson, Leigh ", - "Johnson, Mark Johnson, Rupert Johnson, Clyde Jones, Michael ", - "Jones, Tim Jordan, Ben Judy, Michael Kaae, Steve Kaczkowski, ", - "Neville Kadwa, Brian Kaisner, Yoshihisa Kameyama, Michael ", - "Kanemura, Daniel Kao, Eric Karabin, Ben Katz, Christopher ", - "Kawamura, Erick Kayser, Craig Keddie, Kevin Kelley, Bryan ", - "Kemp, Michael Kendrigan, Dan Kerber, Timothy Kerber, Tomi ", - "Keski-Heikkila, Greg Kettering, Nathan Kilber, Howard Kim, ", - "Orrin Kinion, Jon Kirst, David Kitch, John Klingbeil, Neil ", - "Klopfenstein, Kerry Knouse, David Knox, Said Kobeissi, Jeff ", - "Koches, Hades Kong, Jeff Kong, Kevin Konkle, Steve Koon, ", - "David Koontz, Dan Koopmann, Steve Koskela, Kuan Kou, ", - "Cameron Kracke, Jensen Krage, York Kramer, Cedar Kraus, ", - "Jason Kraus, Bobby Krimen, Melissa Krispli, Steven Krispli, ", - "James Kruger, Charles Kubasta, Kimmo Kulonen, Frank ", - "Lackaff, Michael Lacour, Matt Lake, Jason Landry, Hans Erik ", - "Lange, Michael Laramee, Brad Lascelle, Pat Laschinger, Alan ", - "Lau, Sean Laurence, Anthony Lavey, Jr., Gary Le, Huey Le, ", - "Stephane Le Roy Audy, Lim Leandro, Charles Lee, Conroy Lee, ", - "Mike Lee, Shih-Hang Lee, Jonathan Leipert, Jason Lemann, ", - "Ron Lenzi, Mitchell Leon, Stephanie Lesniewski, Brendan ", - "Lewis, Robert Lewis, Sam Liao, Tom Liem, Adam Ligas, Steven ", - "Liggett, Roger Lilley, Benjamin Lim, Jeff Lindholm, Johnson ", - "Linwood, David Litchman, Bruce Lithimane, William Liu, ", - "Wilson Liu, Robert Lobdell, Chris Logan, Razvan Loghin, Jack ", - "Loh, George Loo, Russell Love, Juan Loyola, Ricardo Lozano, ", - "Mike Luban, Tim Luc, Henry Luciano, Dianne Ludwig, Charles ", - "Lueras, Derek Lung, Phong Ly, Scott MacGillivray, Dave Mack, ", - "Alec Mak, Steve Mamayek, Michael Mancini, Daniel Mann, ", - "Michael Mann, Chris Manofsky, Abdullah Marafie, Nicholas ", - "Marcy, Piompino Mariano, Bob Marius, Trey Marshall, Dane ", - "Martin, Gregg Martin, Renard Martin, Rich Martin, Scott ", - "Martin, Thomas Martin, Jon Masters, Christopher Mathews, ", - "Jay Mathis, Marc Matthews, Chris Mazur, Doug McBride, ", - "Mackey McCandlish, Robin McCollum, Steven McCombie, ", - "Andy McConnell, Michael McCourt, Bill McCoy, Doug ", - "McCracken, Michael McDeed, Robert McDonald, Steve ", - "McEachron, Craig McGee, Ryan McKenzie, Michael McKeown, ", - "Daniel McMahon, Colin McMillan, Ian McWilliam, Mark ", - "McWilliams, Khann Mean, Bryan Meason, Kenneth Medley, ", - "Jeff Meek, John Mehr, Christopher Mende, Brian Mendenhall, ", - "Peter Mengel, Michael Mersic, Mike Messom, Don Metcalf, ", - "Gary Metzker, Scott Meyer, Joseph Michaud, Andrew Mielke, ", - "Travis Mikalson, Troy Milburn, Ike Miller, Ronnie Miller, Sean ", - "Miller, Steve Miller, Arthur Min, David Minniti, Brenda ", - "Mirsberger, Bill Misek, David Mitchell, Joseph Mobley, Robert ", - "Mollard, Will Mooar, Curtis Moore, Matthew Moore, Al ", - "Morales, Ryan Moran, Lance Mortensen, Karel Mrazek, Ward ", - "Mullee, William Munoz, Kirk Munro, Craig Murray, Shawn P. ", - "Murray, Travis Murray, Michael Mushrush, Tom Mustaine, ", - "David Myers, Joseph Myett, Morgan Najar, Kenta Nakamura, ", - "Damian Nastri, Joshua Naumann, Nick Navarro, Douglas ", - "Neitzel, Arnold Ng, Anthony Nguyen, Steve Nguyen, Joseph ", - "Nicholas, Charles Nickolaus, Jon Nisbet, Patrick Nomee, David ", - "Norling-Christensen, Bobby Norton, Joseph Nottingham, Frank ", - "O'Connor, Jon Oden, David Oester, Lavern Ogden, Zach ", - "Oglesby, Lucas Oldfield, Toby Olsson, Aaron Ondek, Sean ", - "O'Neill, John Orlando, Samuel Orlando, Donovan Orloski, ", - "David Pai, Nikolas Paldan, David Palek, John Palmieri, Anthony ", - "Palmisano, Sanjay Pandit, Jesse Park, Alex Parker, Jimmy ", - "Pasher, Lukasz Paszek, Andy Patterson, William Pelletier, ", - "Duane Pemberton, Ivan Pemic, Kelly Pendergast, Mike ", - "Penezich, Jon Penk, Willie Penley, Ron Penna, Matthew ", - "Pennington, Kevin Pereira, Ross Perez, Ken Perkins, Brian ", - "Peterik, Kelly Peterson, Chris Phillips, Rod Pickett, Cameron ", - "Pierce, Reuben Pierce, Tim Pilger, Billy Pippin, Brad Plank, ", - "Brian Plant, Craig Platt, David Plunkett, Michael Politi, Albert ", - "Portillo, Brian Powell, David Powell, Franklin Powers Jr., Alan ", - "Precourt, Michael Pronchick, Julian Quintana, Justin Radziej, ", - "Steven Rajewski, Shawn Rawles, Ian Reardon, Marc Reed, Ric ", - "Reichelt, Judd Reiffin, David Reilly, Garry Reisky, Drew ", - "Ressler, Robert Reynolds, Walter Reynolds, Michael Rice, Ian ", - "Richards, James Richards, Raymond Richmond, Dustin Riggs, ", - "Keith Riskey, Brian Ro, Scott Roberts, Jorge Rodriguez, Chad ", - "Rogers, Clint Rogers, Robert Rogers, Steve Rogers, Ethan Roots, ", - "Ron Roque, William Ross, Sebastian Rossi, Jeff Rostis, Ben ", - "Roth, Demar Roth, Rich Rouse, Oleg Rovner, Jonathan Roy, ", - "Drew Rozema, Mike Ruggles, Mathias Russ, James Russell, Jim ", - "Rutledge, James Rutter, Dave Ryder, Chris Salvadras, Anders ", - "Samnerud, Nick Sanders, Jakob Sandgren, Joe Sapinsky, Tyler ", - "Sargent, Jonas Saunders, Mark Savage, Scott Sawyer, Robert ", - "Scanlon, Trevor Schaben, Aaron Schmidt, Chris Schmidt, Greg ", - "Schultz, Nicholas Schumacher, Scott Schumacher, Kevin Scott, ", - "Rastislav Seffer, Robert Seidler, Corey Sellers, Justin Sellers, ", - "Marc Senecal, George Shannon, Ian Sheffield, Anoop Shekar, ", - "Sandeep Shekar, Kevin Shelton, Leon Shephard, Eric Shepperd, ", - "Jeffrey Shneidman, Samuel Shockey, Mark Shoemaker, Mike ", - "Shupe, Sean Sibbet, Brian Sidharta, Jimmy Sieben, Eric ", - "Siemens, William Silva, Jody Simpson, Jatinder Singh, Sonia ", - "Siu, Omar Skarsvaag, Tom Skiba, Carl Skow, David Skuse, ", - "Robert Slifka, Brent Smith, C. Eric Smith, Jared Smith, Jeffrey ", - "Smith, Owen Smith, Shannon Smith, Steven Smith, Edward Smola, ", - "Matthew Sneep, Eric Snow, Brad Sobel, Jean-Pierre Solignac, Rasmus ", - "Sorensen, Andrew Sorg, Poppy Southcott, Ross Specter, Erik Spencer, ", - "Keith Spencer, Chris Springer, Erikson Squier, Dean St. Onge, Stewart ", - "Stanfield, John Stanley, Terrence Staton, Benjamin Stein, James ", - "Steiner, David Steyer, William Stickney, Chris Stiff, James Stofer, ", - "Norm Storch, Patrick Stovall, Brandon Sturgeon, Sean Stutler, Anne ", - "Sukprasert, Jamal Sullivan, Bruce Sully, Jay Sung, Park Sung ", - "Joon, Stein Sunnarvik, Nathan Surginer, Robert Swaringen, Lee ", - "Sweeney, David Szabo, Scott Taft, Christian Takvam, Patrick ", - "Talaska, Tadashi Tamaki, Simon Tan, Mark Taraba, Khon-", - "Whey Tay, John Taylor, Keith Taylor, Donald Temean, Phillip ", - "Tesar, Pete Thao, Brian Thomas, Keith Thomas, Speed Thomas, ", - "Miles Thorpe, Paul Thurrott, Mike Timbol, Nicholas Timmins, ", - "Tom Tobin, Robert Towster, Hien Tran, Timothy Traviss, Toby ", - "Traylor, Tony Treadwell, George Tremoulis, Paul Trinh, Thanh ", - "Trinh, Chris Tristan, Brad Truswell, Jason Tryon, Mike Tu, ", - "Gernel Tuazon, Eric Tuggle, Mike Turnbull, Lyle Ubben, ", - "Amilcar Ubiera, Robert Ulozas, Arie Upton, Mark Van Noy, ", - "Matthew Van Sickler, Jake Vantlin, Tony Vasquez, Brady ", - "Vauclin, Gianpiero Vecchi, Chad Verrall, Chris Vicente, Brett ", - "Vickers, David Vickery, Jonathan Vilante, Simon Vince, Ben ", - "Vinson, David Voelkert, Paul Vogt, Nicholas Voorhies, Robert ", - "Vreeland, Mike Vrooman, Rick Vuong, Brian Wachhaus, Todd ", - "Wachhaus, Caine Wade, Mathew Wadstein, Kenneth Wagenius, ", - "Trevor Wagner, John Wagstaff, Asad Wahid, Richard ", - "Wahlberg, Helio Wakasugui, Richard Walker, Wilkins Walker, ", - "Matthew Wallace, Daniel Walsh, Joel Walters, Andrew Waltz, ", - "Tom Wang, Tony Wang, Jay Ward, Jonathan Ward, John ", - "Warner, Mark Warren, Matt Washer, Mike Watson, Sean ", - "Wattles, Mike Wayne, Christian Wehba, Benjamin Wei, Richard ", - "Weight, Cary Wells, David Wenck, Bill Werring, Leonard ", - "Wesley, Marlon West, Mikael Westerbacka, Brian Wharry, ", - "Chris White, Chris White, Jeremy White, Greg Whitlock, Gary ", - "Widener, Marty Wilfried, Israel Wilkinson, Michael Willams, ", - "Derek Williams, Sean Willson, Nitzan Wilnai, Jim Wilson, ", - "Karsten Wilson, William Wilt, Tim Winn, Brian Winzeler, Matt ", - "Wise, Lee Wissmiller, Brendan Wolfe, Daniel Wolpert, Felix ", - "Wong, Power Wong, Tony Wong, Tim Wood, Timothy Wood, ", - "Jeremy Woods, Michael Woods, Bill Wright, Keith Wright, ", - "Patrick Wu, Gang Xie, Robert Yao, Sun Lim Yap, Stephen Yau, ", - "Erek Yedwabnick, Christopher Yee, Nick Yee, Juan Yip, David ", - "Young, Rob Young, Seth Young, Alex Yu, Terry Zahn, Jia-Ning ", - "Zhang, Eric Zieg, Jordan Zielin, Clint Zimmerman, Matt Zinke ", - "", - "", - "", - "", - "$No souls were sold in the making of this game.", - "", - "", - " ", - " ", - " ", - NULL -}; - - +char *the_long_credits[] = {"", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "$-- Devilution --", + "Reversed by Andi \"GalaXyHaXz\"", + "", + "$-- Meet the Team --", + "seritools", + "mewmew", + "nomdenom", + "AJenbo", + "ApertureSecurity", + "", + "$-- Special Thanks --", + "The Sanctuary preservation project", + "Jarulf's guide to the Devil himself", + "", + "", + "$...The Devil is in the details", + "", + "", + "$Game Design", + "Blizzard North", + "", + "$Senior Designers", + "Erich Schaefer, David Brevik", + "", + "$Additional Design", + "Max Schaefer, Eric Sexton, Kenneth Williams", + "", + "$Lead Programmer", + "David Brevik", + "", + "$Senior Programmers", + "Richard Seis, Doron Gartner,", + "Patrick Wyatt, Mike O'Brien", + "", + "$Programming", + "Peter Brevik, Robin van der Wel, Jon Morin", + "", + "$Special Guest Programmers", + "Collin Murray, Frank Pearce", + "", + "$Battle.net Programming", + "Mike O'Brien, Mike Morhaime, Dan Liebgold", + "", + "$Serial Communications Programming", + "Jeff Strain, Mike O'Brien", + "", + "$Installer Programming", + "Bob Fitch, Patrick Wyatt", + "", + "$Art Directors", + "Erich Schaefer, Samwise Didier", + "", + "$Artwork", + "Michio Okamura, Eric Sexton, Ben Haas, Patrick Tougas,", + "Kelly Johnson, Erich Schaefer, Max Schaefer, Hugh Tom", + "Byrne, Roman Kenney, Samwise Didier, Dave Berggren,", + "Micky Neilson, Eric Flannum, Justin Thavirat, Brian", + "Sousa, Stu Rose, Nick Carpenter, Joeyray Hall", + "", + "$Technical Artwork", + "Christopher Root, Mark Sutherland,", + "Robert Djordjevich, Jeffrey Vaughn", + "", + "$Cinematic Art Directors", + "Duane Stinnett, Matt Samia", + "", + "$3D Cinematic Artwork", + "Duane Stinnett, Matt Samia, Rob McNaughton,", + "Eric Flannum, Dave Pursley, Micky Neilson,", + "Maxx Marshall, Trevor Jacobs, Brian Sousa,", + "Samwise Didier, Ron Smorynski, Ben Haas, Patrick Tougas", + "", + "$Cinematic Technical Artwork", + "Joeyray Hall ", + "", + "$Executive Producer", + "Allen Adham", + "", + "$Producer", + "Bill Roper", + "", + "$Associate Producer", + "James Phinney", + "", + "$Diablo Strike Team", + "Allen Adham, Ron Millar, Mike O'Brien,", + "James Phinney, Bill Roper, Patrick Wyatt", + "", + "$Music", + "Matt Uelmen", + "", + "$Sound Design", + "Matt Uelmen, Glenn Stafford", + "", + "$Cinematic Music & Sound", + "Glenn Stafford, Matt Uelmen", + "", + "$Voice Production, Direction & Casting", + "Mark Schwarz, Glenn Stafford, Bill Roper", + "", + "$Script & Story", + "Erich Schaefer, Eric Sexton,", + "Chris Metzen, Bill Roper", + "", + "$Voice Editing", + "Glenn Stafford", + "", + "$Voices", + "Michael Haley, Glynnis Talken, Michael Gough,", + "Paul Eiding, Lani Minella, Steve Brodie, Bill Roper,", + "Mark Schwarz, Glenn Stafford, Chris Metzen, Max Schaefer", + "", + "$Recording Engineer", + "Robert Koenigsberg", + "", + "$Manual Design & Layout", + "Peter Underwood, Jeffrey Vaughn,", + "Chris Metzen, Bill Roper", + "", + "$Manual Artwork", + "Samwise Didier, Chris Metzen,", + "Roman Kenney, Maxx Marshall", + "", + "$Provisional Director of QA (Lead Tester)", + "Shane Dabiri", + "", + "$QA Assault Team (Testers)", + "Christopher Cross, Mike Givens, Dave Hale,", + "Brian \"Doc\" Love, Hung Nguyen, Dean Shipley,", + "Chris Sigaty, Ian Welke, Jamie Wiggs", + "", + "$QA Special Ops Team (Compatibility Testers)", + "Adam Maxwell, Russell \"Rug\" Miller", + "", + "$QA Artillery Support (Additional Testers) ", + "Rich Alcazar, Mike Jones, Rev. Dan Moore, Matt Morris,", + "Mark Pfeiffer, Harish \"Pepe the Enforcer\" Rao, Chris Millar", + "", + "$QA Counterintelligence", + "Alan Dabiri, Jesse McReynolds, Walter Takata", + "", + "$Order of Network Information Services", + "Robert Bridenbecker, Jason \"Brother Shaggy\" Schmit,", + "Jamie \"Brother Gug\" Steigerwald, Richard Seis ", + "", + "$Customer Support", + "John Schwartz, Vic Larson, Chad Chaudry, Mick Yanko,", + "Brandon Riseling, Kirk Mahony, Tony Hardy, Richard", + "Amtower, Collin Smith, Andrew Edwards, Roger Eberhart", + "", + "$Sales", + "Jorge Rivero, Rob Beatie", + "", + "$Dunsel", + "Alan Dabiri", + "", + "$Mr. Dabiri's Background Vocalists", + "Karin Colenzo, Christina Cade,", + "Kim Farrington, Melissa Edwards", + "", + "$Public Relations", + "Linda Duttenhaver, Susan Wooley", + "", + "$Marketing", + "John Patrick, Steve Huot, Neal Hubbard, Kathy Carter", + "", + "$International Sales", + "Ralph Becker, Chris Yoshimura", + "", + "$U.S. Sales", + "Todd Coyle, Danny Kearns", + "", + "$Manufacturing", + "John Goodman, Tom Bryan", + "", + "$Legal & Business", + "Paula Duffy, Eric Roeder, Paul Sams, Kenneth Williams", + "", + "$Special Thanks To", + "Primenet, Earthlink, AOL, Compuserve, ATI, Matrox, STB, ", + "Creative Labs, Logitech, U.S. Robotics, Gravis, Cyrix", + "", + "$Thanks To", + "Ian Colquhoun, Rod Shean, Brian Fitzgerald, Sharon Schafer, Todd ", + "Schafer, Richard and Sandra Schaefer, Rick Bowles, Greg Bogden, ", + "Cindy Sievert, Brad Mason, Chuck Goldman, Karin Colenzo, Wendy ", + "Brevik, Jennie Brevik, Hanna Carroll, Katie Newell, Karen Weiss, ", + "Kurt Beaver, Stan McDonald, Brian Sexton, Michael Wan, Megan ", + "Williams, Jessica Gensley, Beth Ann Parks, Brian Piltin, Johnathan ", + "Root, Brett Supernaw, Sabeer Bhatia, Mark Rearick, Brad Mason, ", + "Diane Kodama, Bernadette Sexton, Barbara Uhlmann, Patricia", + "McDonald, Kris Kelley, Alissa Vaage, Denise Hernandez, Paula ", + "White, Rachel Marie Hawley, Laura Gaber, Isaac Matarasso,", + "Susan Stafford, Gretchen Witte, Jason Sailor, Eufemia Palomino, ", + "Nathalie Didier, Nicole Welke, Dawn Caddel, Anna-Marcelle ", + "Okamura, Amber Okamura, Megan Okamura Tracey McNaughton, ", + "Trisha Ann Ochoa, Annie Strain, Dr. Gregory T. Street, Ray the Soda ", + "Guy, Sam Raimi, A. Guinness Brewing Co., John Woo, Chow Yun Fat, ", + "Jackie Chan,Proposition 215, Rumiko Takahashi, Bunchy & Mason, ", + "The Friends of Stan, The Zoo Crew, Team Hamro, Brazil 2001, RUSH, ", + "Cornholio, THE BROS., Dar, Emeril Lagasse, Tom Waits, Ice-Cube, ", + "The Strike Team Deflectors, Tony Levin, Big Jim and the Twins, ", + "Jag`rmeister, The Megasphere, Condor, The Allower, The Sunday ", + "Night Group, Gravitar, Steinway Pianos, Round Table Pizza, The Poxy ", + "Boggards, Urban Mystic & Co., Caffeine, Hunter Rose, Marly ", + "mediums in the box, sweet Poteen, Dave Scarpitti, TheByter, Bim ", + "Man, Krissann for color, Patty at Avalon Tattoo, James, Whaleboy, ", + "Dunsel Training Institute, monkeys, Dob Bole, Rootes Group, Porshe, ", + "Bongo, Scarlett, Apollo, The House of Mediocrity, Amelias, The King, ", + "Saag and all the folks at Davidson", + "", + "$In memory of", + "Lawrence and Barbara Williams", + "David A. Hargrave", + "Tony \"Xatre\" Collin", + "Thomas H Sexton", + "", + "$Very Special Thanks to", + "Bob and Jan Davidson", + "Walter Forbes", + "", + "$The Ring of One Thousand", + "Andrew Abernathy, Christopher Abramo, David Adams, David ", + "Adcox, Marko Agterberg, Cory Aiken, Judah Altaras, John ", + "Alvarez, Jose Alvarez, Richard Amable, Alexander Amaral, ", + "Scott Amis, Vincent Amoroso, Mark An, David Andersen, Jason ", + "Andrew Abernathy, Christopher Abramo, David Adams, David ", + "Adcox, Marko Agterberg, Cory Aiken, Judah Altaras, John ", + "Alvarez, Jose Alvarez, Richard Amable, Alexander Amaral, ", + "Scott Amis, Vincent Amoroso, Mark An, David Andersen, Jason ", + "Andersen, Aaron Anderson, George Anderson, Matthew ", + "Anderson, Michael Anderson, Sean Anderson, Robert Andrade, ", + "Cerny Andre, Michael Andreev, Devin Angle, Brian Apple, ", + "Brian Arbuthnot, Billy Arden, Dorian Arnold, Andre Arsenault, ", + "Erik Asplund, Mark Assam, John Athey, Jason Attard, Jeff ", + "Atwood, Ricky Au, Scott Avery, Rand Babcock, Steve Babel, ", + "Raymond Bacalso, Ed Bachta, Steven Back, Scott Baeder, Alex ", + "Baevski, Scott Bailey, Kenneth Baird, Thomas Baker, Todd ", + "Bala, Jan Ball, Greg Baltz, Blake Baltzley, Doug Bambrick, Wes ", + "Bangerter, Paul Barfuss, Chris Barghout, Dave Barnebey, Jon ", + "Barnhart, Terje Barth, Nicole Baskin, Bernard Baylen, Ryan ", + "Bear, Phil Bedard, Todd Belcher, Chip Bell, Erez Ben-Aharon, ", + "Jonathan Bender, Nick Bennett, Ireney Berezniak, Ted Berg, ", + "Gunnar Bergem, Russell Beuker, Ed Bickford, Stephen Biles, ", + "John Billdt, Gerald Binder, John Bird, Hannah Blackerby, Tom ", + "Blackerby, Clayton Blackwell, Thomas Blake, Shawn Blaszak, ", + "Daniel Bliss, Fred Bliss, Jeff Bliss, Jon Blum, Rune Boersjoe, ", + "Andrew Boggs, Dave Boisvenu, Joe Bolt, John Bonds, Jeff ", + "Borenstein, Dorian Borin, Ed Boris, Bartholomew Botta, ", + "Michael Boutin, Michael Boyd, Charles Boyer, Mike ", + "Boyersmith, Michael Boyko, Eric Bradberry, John Brandstetter, ", + "Ryan Breding, Paul Brinkmann, Patrick Briscoe, Scott Brisko, ", + "Jeremy Britton, Adrian Broadhead, Glenn Brouwer, Joe Brown, ", + "Sebastien Brulotte, Darrell Brunsch, William Bryan, Jason ", + "Bucher, Chris Buchinger, Clayton Buckingham, John Buckles, ", + "David Bugay, Ed Bujone, Erik Burgess, Gabriel Burkett, Chris ", + "Burnes, Richard Butler, Jeffrey Bye, Dougall Campbell, Donnie ", + "Cannon, Shane Cantrell, Connor Caple, Daniel Carey, James ", + "Carlton, Michael Carmel, Mike Carpenter, Ronald Carruthers, ", + "Phil Carter, Bryce Cartmill, Eric Cartwright, Anthony Caruso, ", + "Lon Casey, Tim Caster, Aaron Chan, Otto Chan, Gene Chang, ", + "Hsiao-Lung Chang, William Chang, George Chappel, Larry ", + "Charbonneau, Troy Chase, Bruce Chen, Chun Hsien Chen, Sam ", + "Chen, Tzu-Mainn Chen, Mike Cheng, Chris Chiapusio, Damien ", + "Chiesa, Nick Chin, Nim Ching, Jonathan Chinn, Michael Chinn, ", + "Philander Chiu, Thayne Christiansen, Philip Chui, Steve ", + "Cintamani, Richard Ciordia, Colin Clark, Steve Clark, Samuel ", + "Clements, Meredith Clifton, Jeff Cohen, Dale Colton, Dax ", + "Combe, Matt Compton, Jacob Conklin, Richard Conn, Zac ", + "Cook, Tim Coolong, Gregory Coomer, Dennis Cosgrove, Kelly ", + "Couch, Andrew Coulter, Eric Coutinho, David Coutts, James ", + "Craig, John Craig, Kazial Craig, John Crawford, Marcelo ", + "Crespo, Orville Crews, Tim Cristy, Elmer Crosby III, Russell ", + "Cullison, Ryan Cupples, Andrew Dagley, Steve Dallaire, Richard ", + "Dalton, David Dandar, Pro Daulo, Rob Dautermann, Mike ", + "Davies, Kalieb Davis, Marshall Davis, Ronald Davis, Danny De ", + "Bie, Marc De Filippis, Myles Deighton, Kent Dejarnett, Anthony ", + "Delarosa, Neil Dempster, Peter Denitto, Joaquim Dentz, Scott ", + "Dewar, Anish Dhingra, Philip Dhingra, David Diaz, Stewart ", + "Dicks, Brad Dietz, Josh Dietz, Colleen Diggins, Mike Ditchburn, ", + "Eric Dittman, Allen Do, Huy Doan, Matthew Dolman, Antoine ", + "Dongois, Eamonn Donohoe, Bill Dorell, Mark Dorison, Dan ", + "Dorsett, Chris Dorsey, Jim Dose, Willis Doss, Chin Du, William ", + "Dubis, Timothy Duewell, Brandon Dunn, Andrew Durham, Don ", + "Duvall, Kevin Dvojack, Daniel Eaton, Paul Eberting, Eric ", + "Echelbarger, Lance Eddleman, Ben Eggers, David Eggum, John ", + "Ehde, Brian Eikenberry, Patrick Elven, Peter Engdahl, Philip ", + "Engdahl, Michael Ennis, Darren Eslinger, Eric Ezell, Darren ", + "Falslev, Stephen Feather, Tony Fenn, Ben Ferguson, Mike ", + "Fernandez, Gwendal Feuillet, Guy Fietz, Julian Figueroa, Dale ", + "Fillpot, Stan Finchem, Michael Finley, Nick Fisher, William ", + "Fisher, Mark Fitlin, Dave Flatt, Joel J. Flores, John Folkers, ", + "Steven Forgie, Tom Forsythe, Matthew Foster, Scott Francis, ", + "Jim Frank, Paulo Fraser, Glenn French, Kurt Frerichs, Chris ", + "Frey, Mark Friedman, Charles Friedmann, Dan Friend, Kirk ", + "Fry, Aaron Fu, Erik Gaalema, Brandon Gabbard, Phil Gagner, ", + "Tommy Gannon, David Gappmayer, Chris Garrison, Tony ", + "Garrison, David Gasca, Jeremy Gasser, Michael Geist, Michael ", + "Genereux, Daniel Genovese, Josh Gerwin, Paul Gibson, William ", + "Gilchrist, Gabriel Gils Carbo, Chad Glendenin, Ryan Glinski, ", + "Dean Gobrecht, Andrew Goldfinch, David Goodman, Mark ", + "Goodson, Matt Gordon, Frank Gorgenyi, Sean Gould, Perry ", + "Goutsos, Ed Govednik, Michael Grayson, Chris Green, Justin ", + "Grenier, Jeff Greulich, Don Grey, Rob Griesbeck, Don Griffes, ", + "Kimberly Griffeth, Jay Grizzard, Don Gronlund, Joe Gross, ", + "Troy Growden, Greg Guilford, David Gusovsky, Jeremy ", + "Guthrie, Adam Gutierrez, James Guzicki, Matthew Haas, Matt ", + "Hadley, Ryan Hagelstrom, Bobby Hagen, Ben Hall, Brian Hall, ", + "Kris Hall, Calvin Hamilton, Kris Hamilton, Bo Hammil, Dave ", + "Hans, Rick Hansen, Robert Harlan, Travis Harlan, Seth ", + "Harman, Jeff Harris, Shawn Hartford, Adam Hartsell, Neil ", + "Harvey, Ray Hayes, John Hein, Chris Heinonen, Christer ", + "Helsing, Chris Hempel, Dustin Hempel, Mathieu Henaire, Matt ", + "Henry, Chuck Herb, Michael Herron, Sage Herron, Thomas ", + "Herschbach, Cliff Hicks, Nelson Hicks, Paul Hierling, William ", + "Hiers, Mike Higdon, Tim Hildebrand, Casey Hinkle, Ryan ", + "Hitchings, Wes Hix, Alan Ho, Jenson Ho, Alan Hoffman, Jeff ", + "Hoffman, Eleanor Hoffmann, Steve Hogg, Richard Holler, Brian ", + "Homolya, Wade Hone, Joe Horvath, Jeff Howe, Eric Hudson, ", + "Glen Huey, Chris Hufnagel, Joshua Hughes, Melissa Hughes, ", + "Arief Hujaya, Thomas Hulen, Ryan Hupp, Justin Hurst, Rick ", + "Hutchins, Steve Iams, Mike Iarossi, Bjorn Idren, Johan Idren, ", + "Micah Imparato, Joe Ingersoll, David Ingram, Greg Ipp, Rodney ", + "Irvin, Darin Isola, Justin Itoh, Mario Ivan, Fredrik Ivarsson, ", + "Dax Jacobson, Michael Jacques, Stevens Jacques, Duane Jahnke, ", + "William Jambrosek, Daniel Janick, Narciso Jaramillo, Neil ", + "Jariwala, Harvie Jarriell, Scott Javadi, Joe Jenkins, Bart ", + "Jennings, Paul Jennings, Julien Jenny, Jason Jensen, Martin ", + "Jeremy, Mark Jeschke, Andy Johnson, James Johnson, Leigh ", + "Johnson, Mark Johnson, Rupert Johnson, Clyde Jones, Michael ", + "Jones, Tim Jordan, Ben Judy, Michael Kaae, Steve Kaczkowski, ", + "Neville Kadwa, Brian Kaisner, Yoshihisa Kameyama, Michael ", + "Kanemura, Daniel Kao, Eric Karabin, Ben Katz, Christopher ", + "Kawamura, Erick Kayser, Craig Keddie, Kevin Kelley, Bryan ", + "Kemp, Michael Kendrigan, Dan Kerber, Timothy Kerber, Tomi ", + "Keski-Heikkila, Greg Kettering, Nathan Kilber, Howard Kim, ", + "Orrin Kinion, Jon Kirst, David Kitch, John Klingbeil, Neil ", + "Klopfenstein, Kerry Knouse, David Knox, Said Kobeissi, Jeff ", + "Koches, Hades Kong, Jeff Kong, Kevin Konkle, Steve Koon, ", + "David Koontz, Dan Koopmann, Steve Koskela, Kuan Kou, ", + "Cameron Kracke, Jensen Krage, York Kramer, Cedar Kraus, ", + "Jason Kraus, Bobby Krimen, Melissa Krispli, Steven Krispli, ", + "James Kruger, Charles Kubasta, Kimmo Kulonen, Frank ", + "Lackaff, Michael Lacour, Matt Lake, Jason Landry, Hans Erik ", + "Lange, Michael Laramee, Brad Lascelle, Pat Laschinger, Alan ", + "Lau, Sean Laurence, Anthony Lavey, Jr., Gary Le, Huey Le, ", + "Stephane Le Roy Audy, Lim Leandro, Charles Lee, Conroy Lee, ", + "Mike Lee, Shih-Hang Lee, Jonathan Leipert, Jason Lemann, ", + "Ron Lenzi, Mitchell Leon, Stephanie Lesniewski, Brendan ", + "Lewis, Robert Lewis, Sam Liao, Tom Liem, Adam Ligas, Steven ", + "Liggett, Roger Lilley, Benjamin Lim, Jeff Lindholm, Johnson ", + "Linwood, David Litchman, Bruce Lithimane, William Liu, ", + "Wilson Liu, Robert Lobdell, Chris Logan, Razvan Loghin, Jack ", + "Loh, George Loo, Russell Love, Juan Loyola, Ricardo Lozano, ", + "Mike Luban, Tim Luc, Henry Luciano, Dianne Ludwig, Charles ", + "Lueras, Derek Lung, Phong Ly, Scott MacGillivray, Dave Mack, ", + "Alec Mak, Steve Mamayek, Michael Mancini, Daniel Mann, ", + "Michael Mann, Chris Manofsky, Abdullah Marafie, Nicholas ", + "Marcy, Piompino Mariano, Bob Marius, Trey Marshall, Dane ", + "Martin, Gregg Martin, Renard Martin, Rich Martin, Scott ", + "Martin, Thomas Martin, Jon Masters, Christopher Mathews, ", + "Jay Mathis, Marc Matthews, Chris Mazur, Doug McBride, ", + "Mackey McCandlish, Robin McCollum, Steven McCombie, ", + "Andy McConnell, Michael McCourt, Bill McCoy, Doug ", + "McCracken, Michael McDeed, Robert McDonald, Steve ", + "McEachron, Craig McGee, Ryan McKenzie, Michael McKeown, ", + "Daniel McMahon, Colin McMillan, Ian McWilliam, Mark ", + "McWilliams, Khann Mean, Bryan Meason, Kenneth Medley, ", + "Jeff Meek, John Mehr, Christopher Mende, Brian Mendenhall, ", + "Peter Mengel, Michael Mersic, Mike Messom, Don Metcalf, ", + "Gary Metzker, Scott Meyer, Joseph Michaud, Andrew Mielke, ", + "Travis Mikalson, Troy Milburn, Ike Miller, Ronnie Miller, Sean ", + "Miller, Steve Miller, Arthur Min, David Minniti, Brenda ", + "Mirsberger, Bill Misek, David Mitchell, Joseph Mobley, Robert ", + "Mollard, Will Mooar, Curtis Moore, Matthew Moore, Al ", + "Morales, Ryan Moran, Lance Mortensen, Karel Mrazek, Ward ", + "Mullee, William Munoz, Kirk Munro, Craig Murray, Shawn P. ", + "Murray, Travis Murray, Michael Mushrush, Tom Mustaine, ", + "David Myers, Joseph Myett, Morgan Najar, Kenta Nakamura, ", + "Damian Nastri, Joshua Naumann, Nick Navarro, Douglas ", + "Neitzel, Arnold Ng, Anthony Nguyen, Steve Nguyen, Joseph ", + "Nicholas, Charles Nickolaus, Jon Nisbet, Patrick Nomee, David ", + "Norling-Christensen, Bobby Norton, Joseph Nottingham, Frank ", + "O'Connor, Jon Oden, David Oester, Lavern Ogden, Zach ", + "Oglesby, Lucas Oldfield, Toby Olsson, Aaron Ondek, Sean ", + "O'Neill, John Orlando, Samuel Orlando, Donovan Orloski, ", + "David Pai, Nikolas Paldan, David Palek, John Palmieri, Anthony ", + "Palmisano, Sanjay Pandit, Jesse Park, Alex Parker, Jimmy ", + "Pasher, Lukasz Paszek, Andy Patterson, William Pelletier, ", + "Duane Pemberton, Ivan Pemic, Kelly Pendergast, Mike ", + "Penezich, Jon Penk, Willie Penley, Ron Penna, Matthew ", + "Pennington, Kevin Pereira, Ross Perez, Ken Perkins, Brian ", + "Peterik, Kelly Peterson, Chris Phillips, Rod Pickett, Cameron ", + "Pierce, Reuben Pierce, Tim Pilger, Billy Pippin, Brad Plank, ", + "Brian Plant, Craig Platt, David Plunkett, Michael Politi, Albert ", + "Portillo, Brian Powell, David Powell, Franklin Powers Jr., Alan ", + "Precourt, Michael Pronchick, Julian Quintana, Justin Radziej, ", + "Steven Rajewski, Shawn Rawles, Ian Reardon, Marc Reed, Ric ", + "Reichelt, Judd Reiffin, David Reilly, Garry Reisky, Drew ", + "Ressler, Robert Reynolds, Walter Reynolds, Michael Rice, Ian ", + "Richards, James Richards, Raymond Richmond, Dustin Riggs, ", + "Keith Riskey, Brian Ro, Scott Roberts, Jorge Rodriguez, Chad ", + "Rogers, Clint Rogers, Robert Rogers, Steve Rogers, Ethan Roots, ", + "Ron Roque, William Ross, Sebastian Rossi, Jeff Rostis, Ben ", + "Roth, Demar Roth, Rich Rouse, Oleg Rovner, Jonathan Roy, ", + "Drew Rozema, Mike Ruggles, Mathias Russ, James Russell, Jim ", + "Rutledge, James Rutter, Dave Ryder, Chris Salvadras, Anders ", + "Samnerud, Nick Sanders, Jakob Sandgren, Joe Sapinsky, Tyler ", + "Sargent, Jonas Saunders, Mark Savage, Scott Sawyer, Robert ", + "Scanlon, Trevor Schaben, Aaron Schmidt, Chris Schmidt, Greg ", + "Schultz, Nicholas Schumacher, Scott Schumacher, Kevin Scott, ", + "Rastislav Seffer, Robert Seidler, Corey Sellers, Justin Sellers, ", + "Marc Senecal, George Shannon, Ian Sheffield, Anoop Shekar, ", + "Sandeep Shekar, Kevin Shelton, Leon Shephard, Eric Shepperd, ", + "Jeffrey Shneidman, Samuel Shockey, Mark Shoemaker, Mike ", + "Shupe, Sean Sibbet, Brian Sidharta, Jimmy Sieben, Eric ", + "Siemens, William Silva, Jody Simpson, Jatinder Singh, Sonia ", + "Siu, Omar Skarsvaag, Tom Skiba, Carl Skow, David Skuse, ", + "Robert Slifka, Brent Smith, C. Eric Smith, Jared Smith, Jeffrey ", + "Smith, Owen Smith, Shannon Smith, Steven Smith, Edward Smola, ", + "Matthew Sneep, Eric Snow, Brad Sobel, Jean-Pierre Solignac, Rasmus ", + "Sorensen, Andrew Sorg, Poppy Southcott, Ross Specter, Erik Spencer, ", + "Keith Spencer, Chris Springer, Erikson Squier, Dean St. Onge, Stewart ", + "Stanfield, John Stanley, Terrence Staton, Benjamin Stein, James ", + "Steiner, David Steyer, William Stickney, Chris Stiff, James Stofer, ", + "Norm Storch, Patrick Stovall, Brandon Sturgeon, Sean Stutler, Anne ", + "Sukprasert, Jamal Sullivan, Bruce Sully, Jay Sung, Park Sung ", + "Joon, Stein Sunnarvik, Nathan Surginer, Robert Swaringen, Lee ", + "Sweeney, David Szabo, Scott Taft, Christian Takvam, Patrick ", + "Talaska, Tadashi Tamaki, Simon Tan, Mark Taraba, Khon-", + "Whey Tay, John Taylor, Keith Taylor, Donald Temean, Phillip ", + "Tesar, Pete Thao, Brian Thomas, Keith Thomas, Speed Thomas, ", + "Miles Thorpe, Paul Thurrott, Mike Timbol, Nicholas Timmins, ", + "Tom Tobin, Robert Towster, Hien Tran, Timothy Traviss, Toby ", + "Traylor, Tony Treadwell, George Tremoulis, Paul Trinh, Thanh ", + "Trinh, Chris Tristan, Brad Truswell, Jason Tryon, Mike Tu, ", + "Gernel Tuazon, Eric Tuggle, Mike Turnbull, Lyle Ubben, ", + "Amilcar Ubiera, Robert Ulozas, Arie Upton, Mark Van Noy, ", + "Matthew Van Sickler, Jake Vantlin, Tony Vasquez, Brady ", + "Vauclin, Gianpiero Vecchi, Chad Verrall, Chris Vicente, Brett ", + "Vickers, David Vickery, Jonathan Vilante, Simon Vince, Ben ", + "Vinson, David Voelkert, Paul Vogt, Nicholas Voorhies, Robert ", + "Vreeland, Mike Vrooman, Rick Vuong, Brian Wachhaus, Todd ", + "Wachhaus, Caine Wade, Mathew Wadstein, Kenneth Wagenius, ", + "Trevor Wagner, John Wagstaff, Asad Wahid, Richard ", + "Wahlberg, Helio Wakasugui, Richard Walker, Wilkins Walker, ", + "Matthew Wallace, Daniel Walsh, Joel Walters, Andrew Waltz, ", + "Tom Wang, Tony Wang, Jay Ward, Jonathan Ward, John ", + "Warner, Mark Warren, Matt Washer, Mike Watson, Sean ", + "Wattles, Mike Wayne, Christian Wehba, Benjamin Wei, Richard ", + "Weight, Cary Wells, David Wenck, Bill Werring, Leonard ", + "Wesley, Marlon West, Mikael Westerbacka, Brian Wharry, ", + "Chris White, Chris White, Jeremy White, Greg Whitlock, Gary ", + "Widener, Marty Wilfried, Israel Wilkinson, Michael Willams, ", + "Derek Williams, Sean Willson, Nitzan Wilnai, Jim Wilson, ", + "Karsten Wilson, William Wilt, Tim Winn, Brian Winzeler, Matt ", + "Wise, Lee Wissmiller, Brendan Wolfe, Daniel Wolpert, Felix ", + "Wong, Power Wong, Tony Wong, Tim Wood, Timothy Wood, ", + "Jeremy Woods, Michael Woods, Bill Wright, Keith Wright, ", + "Patrick Wu, Gang Xie, Robert Yao, Sun Lim Yap, Stephen Yau, ", + "Erek Yedwabnick, Christopher Yee, Nick Yee, Juan Yip, David ", + "Young, Rob Young, Seth Young, Alex Yu, Terry Zahn, Jia-Ning ", + "Zhang, Eric Zieg, Jordan Zielin, Clint Zimmerman, Matt Zinke ", + "", + "", + "", + "", + "$No souls were sold in the making of this game.", + "", + "", + " ", + " ", + " ", + NULL}; int creditline = 0; int ybase = 0; int linecount = 24; int nottheend = 1; - ///////////////////////////////////////// void FreeMenuItems() @@ -606,10 +603,7 @@ uint32_t XgetTick() return theTick; } -void SDLCreateDiabloCursor() -{ - -} +void SDLCreateDiabloCursor() {} void SdlDiabloMainWindow() { @@ -634,28 +628,20 @@ void SdlDiabloMainWindow() palette = SDL_AllocPalette(256); lock_buf_priv(); - } - - void DrawArtImage(int SX, int SY, int SW, int SH, int nFrame, void *pBuffer) { - BYTE *src = (BYTE *)pBuffer+(SW * SH * nFrame); + BYTE *src = (BYTE *)pBuffer + (SW * SH * nFrame); BYTE *dst = (BYTE *)&gpBuffer->row[SY].pixels[SX]; - for(int i = 0; i < SH; i++, src += SW, dst += 768) - { - for(int j = 0; j < SW; j++) - { + for (int i = 0; i < SH; i++, src += SW, dst += 768) { + for (int j = 0; j < SW; j++) { dst[j] = src[j]; } } } - - - void __fastcall print_title_str_large(int a1, int a2, char *a3) { assert(BigTGold_cel); @@ -668,10 +654,9 @@ void __fastcall print_title_str_large(int a1, int a2, char *a3) screen_y = a2; screen_x = a1; v7 = strlen(a3); - for ( i = 0; v7 > i; ++i ) - { + for (i = 0; v7 > i; ++i) { v5 = lfontframe[fontidx[a3[i]]]; - if ( v5 ) + if (v5) CelDecodeOnly(screen_x, screen_y, BigTGold_cel, v5, 46); screen_x += lfontkern[v5] + 2; } @@ -679,7 +664,6 @@ void __fastcall print_title_str_large(int a1, int a2, char *a3) gb_Lfont_str_len = v7; } - void __fastcall print_title_str_small(int a1, int a2, char *a3) { int screen_y; // [esp+Ch] [ebp-14h] @@ -691,236 +675,159 @@ void __fastcall print_title_str_small(int a1, int a2, char *a3) screen_y = a2; screen_x = a1; v7 = strlen(a3); - for ( i = 0; i < v7; ++i ) - { + for (i = 0; i < v7; ++i) { v5 = mfontframe[fontidx[a3[i]]]; - if ( v5 ) + if (v5) CelDecodeOnly(screen_x, screen_y, pMedTextCels, v5, 22); screen_x += mfontkern[v5] + 2; } } +void LoadDiabloMenuLogoImage() {} +void DiabloMainMenuItemsLoaded() {} - - - -void LoadDiabloMenuLogoImage() -{ - - - - -} - -void DiabloMainMenuItemsLoaded() -{ - - -} - -void CreateMainDiabloMenu() -{ - - - -} - - - - +void CreateMainDiabloMenu() {} void DrawArtWithMask(int SX, int SY, int SW, int SH, int nFrame, BYTE bMask, void *pBuffer) { - BYTE *src = (BYTE *)pBuffer+(SW * SH * nFrame); + BYTE *src = (BYTE *)pBuffer + (SW * SH * nFrame); BYTE *dst = (BYTE *)&gpBuffer->row[SY].pixels[SX]; - for(int i = 0; i < SH; i++, src += SW, dst += 768) - { - for(int j = 0; j < SW; j++) - { - if(src[j] != bMask) + for (int i = 0; i < SH; i++, src += SW, dst += 768) { + for (int j = 0; j < SW; j++) { + if (src[j] != bMask) dst[j] = src[j]; } } } - void DrawPCXString(int x, int y, int w, int h, char *str, BYTE *font, void *pBuff) { int i; int len = 0; - for(i = 0; i < strlen(str); i++) - { - DrawArtWithMask(x+len, y, w, h, str[i], 32, pBuff); - //DrawPCX(x+len, y, str[i], 32); - if(font[str[i]+2]) - len += font[str[i]+2]; + for (i = 0; i < strlen(str); i++) { + DrawArtWithMask(x + len, y, w, h, str[i], 32, pBuff); + // DrawPCX(x+len, y, str[i], 32); + if (font[str[i] + 2]) + len += font[str[i] + 2]; else len += *font; } } - - - int __fastcall GetPCXFontWidth(char *str, BYTE *font) { - int len; // eax - unsigned __int8 i; // bl - BYTE chr; // bl - int width; // esi - - len = 0; - for ( i = *str; *str; i = *str ) - { - chr = font[i + 2]; - if ( chr ) - width = chr; - else - width = *font; - len += width; - ++str; - } - return len; + int len; // eax + unsigned __int8 i; // bl + BYTE chr; // bl + int width; // esi + + len = 0; + for (i = *str; *str; i = *str) { + chr = font[i + 2]; + if (chr) + width = chr; + else + width = *font; + len += width; + ++str; + } + return len; } - - - - - - void ShowCredts() { ybase += 1; - if(ybase >= pFont2[1]) - { + if (ybase >= pFont2[1]) { ybase = 0; - if(!nottheend) - { + if (!nottheend) { linecount--; creditline++; - } - else if(the_long_credits[creditline+24] == NULL) - { + } else if (the_long_credits[creditline + 24] == NULL) { nottheend = 0; - //linecount--; - } - else + // linecount--; + } else creditline++; } - - DrawArtImage(0, 0, gdwCreditsWidth, gdwCreditsHeight, 0, pPcxCreditsImage); - - - for(int i = 0; i < linecount; i++) { - - - - // Needs to be slower... - if(*the_long_credits[creditline+i] == '$') + for (int i = 0; i < linecount; i++) { + // Needs to be slower... + if (*the_long_credits[creditline + i] == '$') - DrawPCXString( 320-(GetPCXFontWidth(the_long_credits[creditline+i]+1, pFont2)/2), - 50+(i*pFont2[1])-ybase, - gdwFont2Width, - gdwFont2Height, - the_long_credits[creditline+i]+1, - pFont2, - pPcxFont2Image); + DrawPCXString(320 - (GetPCXFontWidth(the_long_credits[creditline + i] + 1, pFont2) / 2), + 50 + (i * pFont2[1]) - ybase, gdwFont2Width, gdwFont2Height, + the_long_credits[creditline + i] + 1, pFont2, pPcxFont2Image); else - DrawPCXString( 320-(GetPCXFontWidth(the_long_credits[creditline+i], pFont3)/2), - 50+(i*pFont3[1])-ybase, - gdwFont3Width, - gdwFont3Height, - the_long_credits[creditline+i], - pFont3, - pPcxFont3Image); + DrawPCXString(320 - (GetPCXFontWidth(the_long_credits[creditline + i], pFont3) / 2), + 50 + (i * pFont3[1]) - ybase, gdwFont3Width, gdwFont3Height, the_long_credits[creditline + i], + pFont3, pPcxFont3Image); } - } - - - - - - - - - - ///////////////////////////Renders void RenderDiabloLogo() { - int diablogo_cel_frame = 1; + int diablogo_cel_frame = 1; - - int MyPcxDelay = 60; - int MyPcxFRAME = (SDL_GetTicks() / MyPcxDelay) % 15; - if ( ++MyPcxFRAME == 15 ){ + int MyPcxFRAME = (SDL_GetTicks() / MyPcxDelay) % 15; + if (++MyPcxFRAME == 29) { MyPcxFRAME = 1; } - DrawArtWithMask(320-(gdwLogoWidth/2), 0, gdwLogoWidth, gdwLogoHeight, MyPcxFRAME, 250, pPcxLogoImage); + CelDecodeOnly(64, 320, GameTitle, MyPcxFRAME, 640); + - if ( ++diablogo_cel_frame == 29 ){ - diablogo_cel_frame = 1; - - } - - +// DrawArtWithMask(320 - (gdwLogoWidth / 2), 0, gdwLogoWidth, gdwLogoHeight, MyPcxFRAME, 250, pPcxLogoImage); + // if (++diablogo_cel_frame == 29) { + // diablogo_cel_frame = 1; + // } } - -void DrawCursor(int mx, int my){ +void DrawCursor(int mx, int my) +{ SDL_GetMouseState(&mx, &my); -int lines = gdwCursorHeight; + int lines = gdwCursorWidth; + CelDecodeOnly(403, 326, pPcxCursorImage, 1, 36); - - - -DrawArtWithMask(mx, my, gdwCursorWidth, lines, 0, 0, pPcxCursorImage); -unlock_buf_priv(); - +// DrawArtWithMask(mx, my, gdwCursorWidth, lines, 0, 0, pPcxCursorImage); + unlock_buf_priv(); } - void DrawMouse() { - + int lines = gdwCursorHeight; - if(MouseY > 480-gdwCursorHeight) - lines -= (MouseY - (480-gdwCursorHeight)); - int mx = MouseX; - if(mx < 0) mx = 0; - if(mx >639) mx = 639; - int my = MouseY; - if(my < 0) my = 0; - if(my > 480) my = 480; - - - -// lock_buf_priv(); - DrawArtWithMask(MouseX, MouseY, gdwCursorWidth, lines, 0, 0, pPcxCursorImage); -// unlock_buf_priv(); + // if(MouseY > 480-gdwCursorHeight) + // lines -= (MouseY - (480-gdwCursorHeight)); + // int mx = MouseX; + // if(mx < 0) mx = 0; + // if(mx >639) mx = 639; + // int my = MouseY; + // if(my < 0) my = 0; + // if(my > 480) my = 480; + + SDL_GetMouseState(&MouseX, &MouseY); + + CelDecodeOnly(403, 326, pPcxCursorImage, 1, 36); + + // lock_buf_priv(); + //DrawArtWithMask(MouseX, MouseY, gdwCursorWidth, lines, 0, 0, pPcxCursorImage); + // unlock_buf_priv(); } - - void SDL_RenderDiabloMainPage() { DrawArtImage(0, 0, gdwTitleWidth, gdwTitleHeight, 0, pPcxTitleImage); @@ -929,73 +836,55 @@ void SDL_RenderDiabloMainPage() int PentdelayPerFrame = 60; int Pentframe = (SDL_GetTicks() / PentdelayPerFrame) % totalPentFrames; - if ( ++Pentframe == 9 ){ + if (++Pentframe == 9) { Pentframe = 1; } - - - int PentPositionX1 = (SCREEN_WIDTH / 2) - (SCREEN_WIDTH *0.28) ; - int PentPositionY1 = ( SCREEN_HEIGHT /2 )+ ( SCREEN_HEIGHT * 0.1); - int PentPositionX2 = (SCREEN_WIDTH / 2) - (SCREEN_WIDTH *0.75) ; - int PentPositionY2 = ( SCREEN_HEIGHT /2 )+ ( SCREEN_HEIGHT * 0.1); - - - - //scrollrt_draw_cursor_back_buffer(); // Doesn't work? + int PentPositionX1 = (SCREEN_WIDTH / 2) - (SCREEN_WIDTH * 0.28); + int PentPositionY1 = (SCREEN_HEIGHT / 2) + (SCREEN_HEIGHT * 0.1); + int PentPositionX2 = (SCREEN_WIDTH / 2) - (SCREEN_WIDTH * 0.75); + int PentPositionY2 = (SCREEN_HEIGHT / 2) + (SCREEN_HEIGHT * 0.1); + // scrollrt_draw_cursor_back_buffer(); // Doesn't work? RenderDiabloLogo(); - - - //CelDecodeOnly(236, 282, pDiabfrCel, 1, 296);//CelDecodeOnly(64, 377, pDiabfrCel, diablogo_cel_frame, 640); - //CelDecodeOnly(PentPositionX1, PentPositionY1, pTitlgrayCel_sgpBackCel ,1, 48); + // CelDecodeOnly(236, 282, pDiabfrCel, 1, 296);//CelDecodeOnly(64, 377, pDiabfrCel, diablogo_cel_frame, 640); + // CelDecodeOnly(PentPositionX1, PentPositionY1, pTitlgrayCel_sgpBackCel ,1, 48); CelDecodeOnly(64, 639, pTitlgrayCel_sgpBackCel, 1, 640); - gmenu_print_text( (SCREEN_WIDTH / 2) - (SCREEN_WIDTH *0.2), ( SCREEN_HEIGHT /2 )+ ( SCREEN_HEIGHT * 0.1), "Single Player"); - gmenu_print_text( (SCREEN_WIDTH / 2) - (SCREEN_WIDTH *0.2), ( SCREEN_HEIGHT /2 )+ ( SCREEN_HEIGHT * 0.2), "Multi Player"); - gmenu_print_text( (SCREEN_WIDTH / 2) - (SCREEN_WIDTH *0.2), ( SCREEN_HEIGHT /2 )+ ( SCREEN_HEIGHT * 0.3), "Show Replay"); - gmenu_print_text( (SCREEN_WIDTH / 2) - (SCREEN_WIDTH *0.2), ( SCREEN_HEIGHT /2 )+ ( SCREEN_HEIGHT * 0.4), "Play Credits"); - gmenu_print_text( (SCREEN_WIDTH / 2) - (SCREEN_WIDTH *0.2), ( SCREEN_HEIGHT /2 )+ ( SCREEN_HEIGHT * 0.5), "Exit Diablo"); - - CelDecodeOnly(PentPositionX1, PentPositionY1, PentSpin_cel, (int ) Pentframe, 48); - CelDecodeOnly(PentPositionX2, PentPositionY2, PentSpin_cel, (int ) Pentframe, 48); - - ADD_PlrStringXY(0, 600-150, 640, "DedicaTed To David Brevik, Erich Schaefer, Max Schaefer,", COL_GOLD); - ADD_PlrStringXY(0, 600-130, 640, " MaTT Uelman, and The Blizzard North Team ThaT Gave Us A Childhood.", COL_GOLD); - - - - - -} - -void CreateNewHeroClickBox() {} - -void LoadSinglePlayerMenuItems() -{ + //print_title_str_large(); + gmenu_print_text((SCREEN_WIDTH / 2) - (SCREEN_WIDTH * 0.2), (SCREEN_HEIGHT / 2) + (SCREEN_HEIGHT * 0.1), + "Single Player"); + gmenu_print_text((SCREEN_WIDTH / 2) - (SCREEN_WIDTH * 0.2), (SCREEN_HEIGHT / 2) + (SCREEN_HEIGHT * 0.2), + "Multi Player"); + gmenu_print_text((SCREEN_WIDTH / 2) - (SCREEN_WIDTH * 0.2), (SCREEN_HEIGHT / 2) + (SCREEN_HEIGHT * 0.3), + "Show Replay"); + gmenu_print_text((SCREEN_WIDTH / 2) - (SCREEN_WIDTH * 0.2), (SCREEN_HEIGHT / 2) + (SCREEN_HEIGHT * 0.4), + "Play Credits"); + gmenu_print_text((SCREEN_WIDTH / 2) - (SCREEN_WIDTH * 0.2), (SCREEN_HEIGHT / 2) + (SCREEN_HEIGHT * 0.5), + "Exit Diablo"); + + CelDecodeOnly(PentPositionX1, PentPositionY1, PentSpin_cel, (int)Pentframe, 48); + CelDecodeOnly(PentPositionX2, PentPositionY2, PentSpin_cel, (int)Pentframe, 48); + + ADD_PlrStringXY(0, 600 - 150, 640, "DedicaTed To David Brevik, Erich Schaefer, Max Schaefer,", COL_GOLD); + ADD_PlrStringXY(0, 600 - 130, 640, " MaTT Uelman, and The Blizzard North Team ThaT Gave Us A Childhood.", COL_GOLD); + } void SDL_RenderDiabloSinglePlayerPage() { -DrawArtImage(0, 0, gdwTitleWidth, gdwTitleHeight, 0, pPcxTitleImage); -DrawArtImage(0, 0, gdwSHeroWidth, gdwSHeroHeight, 0, pPcxGameImage); -RenderDiabloLogo(); -RenderCharNames(); - - - - + DrawArtImage(0, 0, gdwTitleWidth, gdwTitleHeight, 0, pPcxTitleImage); + DrawArtImage(0, 0, gdwSHeroWidth, gdwSHeroHeight, 0, pPcxSHeroImage); + RenderDiabloLogo(); + RenderCharNames(); } -void LoadFont() -{ - -} +void LoadFont() {} void LoadClickBoxes(int numberofchars) { @@ -1044,15 +933,112 @@ void LoadClickBoxes(int numberofchars) int LoadedFont = 0; int TotalPlayers = 0; +void DrawNewHeroKartinka(int image, int ShowClasses) +{ + + DrawArtImage(0, 0, gdwTitleWidth, gdwTitleHeight, 0, pPcxTitleImage); + DrawArtImage(0, 0, gdwSHeroWidth, gdwSHeroHeight, 0, pPcxSHeroImage); + RenderDiabloLogo(); + + char *heroclasses[3] = {"Warrior", "Rogue", "Sorceror"}; + + // this should not be hard coded. + int x = 420; + int y = 430; + DrawArtImage(30, 211, gdwHeroWidth, gdwHeroHeight, image, pPcxHeroImage); + + if (ShowClasses == 1) { + for (int i = 0; i < 3; i++) { + y += 30; + print_title_str_small(x, y, heroclasses[i]); + } + } +} + +void RenderDefaultStats(int HeroChosen) +{ + int x = 50; + int y = 330; + char *WarriorStats[4] = {" Strenght : 30", " Magic : 10", "Dexterity : 20", " Vitality : 25"}; + char *RogueStats[4] = {" Strenght : 20", " Magic : 15", "Dexterity : 30", " Vitality : 20"}; + char *SorcerorStats[4] = {" Strenght : 15", " Magic : 35", "Dexterity : 15", " Vitality : 20"}; + + if (HeroChosen == 0) { + for (int i = 0; i < 4; i++) { + DrawPCXString(x, y, gdwFont3Width, gdwFont3Height, WarriorStats[i], pFont3, pPcxFont3Image); + y += 20; + } + } + if (HeroChosen == 1) { + for (int i = 0; i < 4; i++) { + DrawPCXString(x, y, gdwFont3Width, gdwFont3Height, RogueStats[i], pFont3, pPcxFont3Image); + y += 20; + } + } + if (HeroChosen == 2) { + for (int i = 0; i < 4; i++) { + DrawPCXString(x, y, gdwFont3Width, gdwFont3Height, SorcerorStats[i], pFont3, pPcxFont3Image); + y += 20; + } + } +} + +void RenderUndecidedHeroName() +{ + print_title_str_small(400, 500, (char *)HeroUndecidedName); +} + +void SetHeroStats(_uiheroinfo *a1) +{ + memcpy(&heroarray[TotalPlayers], a1, sizeof(_uiheroinfo)); +} + +void LoadHeroStats() +{ + pfile_ui_set_hero_infos(SetHeroStats); +} +void DrawHeroStats() +{ + int x = 80; + int y = 415; + + // print_title_str_small(x, y, ); + + // sprintf(tempstr, " Level: %i", heroarray[i].level); + + // hero_info.heroclass; + + // for ( int i = 0; i < 10; ++i ) + // { + // if(heroarray[i].name) { + // if( heroarray[i].level) + // { + // DrawArtImage(30, 211, gdwHeroWidth, gdwHeroHeight, heroarray[i].heroclass, pPcxHeroImage); + + // int add_this_to_the_ypos = 320; + // sprintf(tempstr, " Level: %i", heroarray[i].level); + // DrawPCXString(46, add_this_to_the_ypos, gdwFont3Width, gdwFont3Height, tempstr, pFont3, + // pPcxFont3Image); add_this_to_the_ypos += pFont3[1]*2; sprintf(tempstr, " Strength: %i", + // heroarray[i].strength); DrawPCXString(50, add_this_to_the_ypos, gdwFont3Width, gdwFont3Height, tempstr, + // pFont3, pPcxFont3Image); add_this_to_the_ypos += pFont3[1]; sprintf(tempstr, " Magic: + // %i", heroarray[i].magic); DrawPCXString(52, add_this_to_the_ypos, gdwFont3Width, gdwFont3Height, + // tempstr, pFont3, pPcxFont3Image); add_this_to_the_ypos += pFont3[1]; sprintf(tempstr, " + // Dexterity: %i", heroarray[i].dexterity); DrawPCXString(50, add_this_to_the_ypos, gdwFont3Width, + // gdwFont3Height, tempstr, pFont3, pPcxFont3Image); add_this_to_the_ypos += pFont3[1]; + // sprintf(tempstr, " Vitality: %i", heroarray[i].vitality); DrawPCXString(50, add_this_to_the_ypos, + // gdwFont3Width, gdwFont3Height, tempstr, pFont3, pPcxFont3Image); + // } + // } +} void RenderCharNames() { - // const char *hero_name = hero_infos[0].name; - // DUMMY_PRINT("use hero: %s", hero_name); - // strcpy(name, hero_name); - // *dlgresult = 2; + // const char *hero_name = hero_infos[0].name; + // DUMMY_PRINT("use hero: %s", hero_name); + // strcpy(name, hero_name); + // *dlgresult = 2; // X 355, Y 269 int x = 440; @@ -1062,97 +1048,36 @@ void RenderCharNames() if (hero_names[i][0] != 0) { // Checking if section of array is empty. // if array has something in this then draw name. - print_title_str_small(x, y, hero_names[i]); + print_title_str_small(x, y, hero_names[i]); y += 35; TotalPlayers++; } + if (TotalPlayers < 6 || TotalPlayers == 0) { + print_title_str_small(305, 620, "New Hero"); + } } - //SDL_RenderPresent(renderer); + // SDL_RenderPresent(renderer); } - - - - - - - - - - - - - +void ConstantButtons() +{ + print_title_str_small(500, 620, "Ok"); + print_title_str_small(600, 620, "Cancel"); +} bool LoadCreateHeroDialogImages = 0; bool SorcerorCreateSelected = 0; bool RogueCreateSelected = 0; bool WarriorCreateSelected = 1; -void LoadCreateHeroDialogMenu() -{ - // GetWorkingLocationOfFile("/Xresources/warriorcreate.bmp"); - - // CreateHeroDialogSurface = IMG_Load(gLDirectory); - // CreateHeroDialogTextureW = SDL_CreateTextureFromSurface(renderer, CreateHeroDialogSurface); - - // GetWorkingLocationOfFile("/Xresources/roguecreate.bmp"); - // CreateHeroDialogSurface = IMG_Load(gLDirectory); - // CreateHeroDialogTextureR = SDL_CreateTextureFromSurface(renderer, CreateHeroDialogSurface); - - // GetWorkingLocationOfFile("/Xresources/sorcerorcreate.bmp"); - // CreateHeroDialogSurface = IMG_Load(gLDirectory); - // CreateHeroDialogTextureS = SDL_CreateTextureFromSurface(renderer, CreateHeroDialogSurface); - - // LoadCreateHeroDialogImages = 1; -} +void LoadCreateHeroDialogMenu() {} // Have this load the function above and then render it in the main menu. // Cnacel box is also needed. -void CreateMenuDialogBox() +void CreateHeroMenu() { - - // RenderDiabloLogo(); - - // int cx, cy; - // SDL_GetMouseState(&cx, &cy); - - // CusorLocation.x = cx; - // CusorLocation.y = cy; - // CusorLocation.h = 29; - // CusorLocation.w = 33; - - // if (LoadCreateHeroDialogImages == 0) { - // LoadCreateHeroDialogMenu(); - // } - - // SDL_Rect MenuSelectNewHeroWRect; - // MenuSelectNewHeroWRect.x = 0; - // MenuSelectNewHeroWRect.y = 140; - // MenuSelectNewHeroWRect.w = 640; - // MenuSelectNewHeroWRect.h = 350; - - // SDL_Rect MenuSelectNewHeroTRect; - // MenuSelectNewHeroTRect.x = 0; - // MenuSelectNewHeroTRect.y = 0; - // MenuSelectNewHeroTRect.w = 907; - // MenuSelectNewHeroTRect.h = 500; - - // if (WarriorCreateSelected) { - // SDL_RenderCopy(renderer, CreateHeroDialogTextureW, &MenuSelectNewHeroTRect, NULL); - // // printf("WarriorCreateSelected\n"); - // } - // if (RogueCreateSelected) { - // SDL_RenderCopy(renderer, CreateHeroDialogTextureR, &MenuSelectNewHeroTRect, NULL); - // // printf("RogueCreateSelected\n"); - // } - // if (SorcerorCreateSelected) { - // SDL_RenderCopy(renderer, CreateHeroDialogTextureS, &MenuSelectNewHeroTRect, NULL); - // // printf("SorcerorCreateSelected\n"); - // } - - // SDL_RenderCopy(renderer, DiablologoAnimT, &textureRect, &windowRect); - // SDL_RenderCopy(renderer, CursorTexture, NULL, &CusorLocation); - // SDL_RenderPresent(renderer); + DrawArtImage(0, 0, gdwTitleWidth, gdwTitleHeight, 0, pPcxTitleImage); + DrawArtImage(0, 0, gdwSHeroWidth, gdwSHeroHeight, 0, pPcxSHeroImage); + RenderDiabloLogo(); } \ No newline at end of file diff --git a/Stub/storm.cpp b/Stub/storm.cpp index d6dc75385..06dfbe814 100644 --- a/Stub/storm.cpp +++ b/Stub/storm.cpp @@ -126,10 +126,18 @@ BOOL STORMAPI SFileOpenFile(const char *filename, HANDLE *phFile) { BOOL result; //eprintf("%s: %s\n", __FUNCTION__, filename); + + + result = SFileOpenFileEx((HANDLE)patch_rt_mpq, filename, 0, phFile); if (!result) { - result = SFileOpenFileEx((HANDLE)diabdat_mpq, filename, 0, phFile); + result = SFileOpenFileEx((HANDLE)prealpha_mpq, filename, 0, phFile); + if(!result){ + result = SFileOpenFileEx((HANDLE)diabdat_mpq, filename, 0, phFile); + + } + } if (!result || !*phFile) { diff --git a/types.h b/types.h index b29f09168..3adc065a2 100644 --- a/types.h +++ b/types.h @@ -9,6 +9,7 @@ #ifdef MINIWIN #include "miniwin.h" + #else #define WIN32_LEAN_AND_MEAN