@ -91,7 +91,12 @@ void selhero_Free()
void selhero_SetStats ( )
{
SELHERO_DIALOG_HERO_IMG - > m_frame = selhero_heroInfo . heroclass ;
int heroclass = selhero_heroInfo . heroclass ;
# ifdef HELLFIRE
if ( heroclass = = UI_BARBARIAN )
heroclass = UI_WARRIOR ;
# endif
SELHERO_DIALOG_HERO_IMG - > m_frame = heroclass ;
snprintf ( textStats [ 0 ] , sizeof ( textStats [ 0 ] ) , " %d " , selhero_heroInfo . level ) ;
snprintf ( textStats [ 1 ] , sizeof ( textStats [ 1 ] ) , " %d " , selhero_heroInfo . strength ) ;
snprintf ( textStats [ 2 ] , sizeof ( textStats [ 2 ] ) , " %d " , selhero_heroInfo . magic ) ;
@ -208,7 +213,7 @@ void selhero_List_Init()
SDL_Rect rect5 = { PANEL_LEFT + 489 , ( UI_OFFSET_Y + 429 ) , 120 , 35 } ;
vecSelDlgItems . push_back ( new UiArtTextButton ( " Cancel " , & UiFocusNavigationEsc , rect5 , UIS_CENTER | UIS_BIG | UIS_GOLD ) ) ;
UiInitList ( 0 , selhero_SaveCount , selhero_List_Focus , selhero_List_Select , selhero_List_Esc , vecSelDlgItems , false , selhero_List_DeleteYesNo ) ;
UiInitList ( selhero_SaveCount + 1 , selhero_List_Focus , selhero_List_Select , selhero_List_Esc , vecSelDlgItems , false , selhero_List_DeleteYesNo ) ;
UiInitScrollBar ( scrollBar , kMaxViewportItems , & listOffset ) ;
if ( selhero_isMultiPlayer ) {
strcpy ( title , " Multi Player Characters " ) ;
@ -230,7 +235,11 @@ void selhero_List_Focus(int value)
return ;
}
# ifdef HELLFIRE
SELHERO_DIALOG_HERO_IMG - > m_frame = 5 ;
# else
SELHERO_DIALOG_HERO_IMG - > m_frame = UI_NUM_CLASSES ;
# endif
strncpy ( textStats [ 0 ] , " -- " , sizeof ( textStats [ 0 ] ) - 1 ) ;
strncpy ( textStats [ 1 ] , " -- " , sizeof ( textStats [ 1 ] ) - 1 ) ;
strncpy ( textStats [ 2 ] , " -- " , sizeof ( textStats [ 2 ] ) - 1 ) ;
@ -256,10 +265,23 @@ void selhero_List_Select(int value)
vecSelDlgItems . push_back ( new UiArtText ( " Choose Class " , rect1 , UIS_CENTER | UIS_BIG ) ) ;
selhero_FreeListItems ( ) ;
int itemH = 33 ;
vecSelHeroDlgItems . push_back ( new UiListItem ( " Warrior " , UI_WARRIOR ) ) ;
vecSelHeroDlgItems . push_back ( new UiListItem ( " Rogue " , UI_ROGUE ) ) ;
vecSelHeroDlgItems . push_back ( new UiListItem ( " Sorcerer " , UI_SORCERER ) ) ;
vecSelDlgItems . push_back ( new UiList ( vecSelHeroDlgItems , PANEL_LEFT + 264 , ( UI_OFFSET_Y + 285 ) , 320 , 33 , UIS_CENTER | UIS_MED | UIS_GOLD ) ) ;
# ifdef HELLFIRE
vecSelHeroDlgItems . push_back ( new UiListItem ( " Monk " , UI_MONK ) ) ;
if ( UseBardTest ) {
vecSelHeroDlgItems . push_back ( new UiListItem ( " Bard " , UI_BARD ) ) ;
}
if ( UseBarbarianTest ) {
vecSelHeroDlgItems . push_back ( new UiListItem ( " Barbarian " , UI_BARBARIAN ) ) ;
}
if ( vecSelHeroDlgItems . size ( ) > 4 )
itemH = 26 ;
# endif
int itemY = 246 + ( 176 - vecSelHeroDlgItems . size ( ) * itemH ) / 2 ;
vecSelDlgItems . push_back ( new UiList ( vecSelHeroDlgItems , PANEL_LEFT + 264 , ( UI_OFFSET_Y + itemY ) , 320 , itemH , UIS_CENTER | UIS_MED | UIS_GOLD ) ) ;
SDL_Rect rect2 = { PANEL_LEFT + 279 , ( UI_OFFSET_Y + 429 ) , 140 , 35 } ;
vecSelDlgItems . push_back ( new UiArtTextButton ( " OK " , & UiFocusNavigationSelect , rect2 , UIS_CENTER | UIS_BIG | UIS_GOLD ) ) ;
@ -267,7 +289,7 @@ void selhero_List_Select(int value)
SDL_Rect rect3 = { PANEL_LEFT + 429 , ( UI_OFFSET_Y + 429 ) , 140 , 35 } ;
vecSelDlgItems . push_back ( new UiArtTextButton ( " Cancel " , & UiFocusNavigationEsc , rect3 , UIS_CENTER | UIS_BIG | UIS_GOLD ) ) ;
UiInitList ( 0 , 2 , selhero_ClassSelector_Focus , selhero_ClassSelector_Select , selhero_ClassSelector_Esc , vecSelDlgItems ) ;
UiInitList ( vecSelHeroDlgItems . size ( ) , selhero_ClassSelector_Focus , selhero_ClassSelector_Select , selhero_ClassSelector_Esc , vecSelDlgItems ) ;
memset ( & selhero_heroInfo . name , 0 , sizeof ( selhero_heroInfo . name ) ) ;
strncpy ( title , " New Single Player Hero " , sizeof ( title ) - 1 ) ;
if ( selhero_isMultiPlayer ) {
@ -293,7 +315,7 @@ void selhero_List_Select(int value)
SDL_Rect rect3 = { PANEL_LEFT + 429 , ( UI_OFFSET_Y + 427 ) , 140 , 35 } ;
vecSelDlgItems . push_back ( new UiArtTextButton ( " Cancel " , & UiFocusNavigationEsc , rect3 , UIS_CENTER | UIS_VCENTER | UIS_BIG | UIS_GOLD ) ) ;
UiInitList ( 0 , 1 , selhero_Load_Focus , selhero_Load_Select , selhero_List_Init , vecSelDlgItems , true ) ;
UiInitList ( vecSelHeroDlgItems . size ( ) , selhero_Load_Focus , selhero_Load_Select , selhero_List_Init , vecSelDlgItems , true ) ;
strncpy ( title , " Single Player Characters " , sizeof ( title ) - 1 ) ;
return ;
}
@ -315,7 +337,7 @@ void selhero_ClassSelector_Focus(int value)
gfnHeroStats ( value , & defaults ) ;
selhero_heroInfo . level = 1 ;
selhero_heroInfo . heroclass = value ;
selhero_heroInfo . heroclass = vecSelHeroDlgItems [ value ] - > m_v alue ;
selhero_heroInfo . strength = defaults . strength ;
selhero_heroInfo . magic = defaults . magic ;
selhero_heroInfo . dexterity = defaults . dexterity ;
@ -326,7 +348,8 @@ void selhero_ClassSelector_Focus(int value)
void selhero_ClassSelector_Select ( int value )
{
if ( gbSpawned & & ( value = = 1 | | value = = 2 ) ) {
int hClass = vecSelHeroDlgItems [ value ] - > m_value ;
if ( gbSpawned & & ( hClass = = UI_ROGUE | | hClass = = UI_SORCERER ) ) {
ArtBackground . Unload ( ) ;
UiSelOkDialog ( NULL , " The Rogue and Sorcerer are only available in the full retail version of Diablo. Visit https://www.gog.com/game/diablo to purchase. " , false ) ;
LoadBackgroundArt ( " ui_art \\ selhero.pcx " ) ;
@ -355,7 +378,7 @@ void selhero_ClassSelector_Select(int value)
SDL_Rect rect4 = { PANEL_LEFT + 429 , ( UI_OFFSET_Y + 429 ) , 140 , 35 } ;
vecSelDlgItems . push_back ( new UiArtTextButton ( " Cancel " , & UiFocusNavigationEsc , rect4 , UIS_CENTER | UIS_BIG | UIS_GOLD ) ) ;
UiInitList ( 0 , 0 , NULL , selhero_Name_Select , selhero_Name_Esc , vecSelDlgItems ) ;
UiInitList ( 0 , NULL , selhero_Name_Select , selhero_Name_Esc , vecSelDlgItems ) ;
}
void selhero_ClassSelector_Esc ( )
@ -405,7 +428,7 @@ void selhero_Name_Select(int value)
# ifdef PREFILL_PLAYER_NAME
strncpy ( selhero_heroInfo . name , selhero_GenerateName ( selhero_heroInfo . heroclass ) , sizeof ( selhero_heroInfo . name ) - 1 ) ;
# endif
selhero_ClassSelector_Select ( selhero_heroInfo . heroclass ) ;
selhero_ClassSelector_Select ( 0 ) ;
}
void selhero_Name_Esc ( )
@ -421,7 +444,7 @@ void selhero_Load_Select(int value)
{
UiInitList_clear ( ) ;
selhero_endMenu = true ;
if ( value = = 0 ) {
if ( vecSelHeroDlgItems [ value ] - > m_v alue = = 0 ) {
selhero_result = SELHERO_CONTINUE ;
return ;
} else if ( ! selhero_isMultiPlayer ) {