@ -32,7 +32,7 @@ namespace {
std : : size_t selhero_SaveCount = 0 ;
_uiheroinfo selhero_heros [ MAX_CHARACTERS ] ;
_uiheroinfo selhero_heroInfo ;
const size_t k MaxViewportItems = 6 ;
const size_t K MaxViewportItems = 6 ;
char textStats [ 5 ] [ 4 ] ;
char title [ 32 ] ;
_selhero_selections selhero_result ;
@ -47,25 +47,25 @@ UiImage *SELHERO_DIALOG_HERO_IMG;
bool bUIElementsLoaded = false ;
void selhero_List_ Focus( int value ) ;
void selhero_List_ Select( int value ) ;
void selhero_List_ Esc( ) ;
void selhero_Load_ Focus( int value ) ;
void selhero_Load_ Select( int value ) ;
void selhero_Name_ Select( int value ) ;
void selhero_Name_ Esc( ) ;
void selhero_ClassSelector_ Focus( int value ) ;
void selhero_ClassSelector_ Select( int value ) ;
void selhero_ClassSelector_ Esc( ) ;
const char * selhero_GenerateName ( HeroClass hero_c lass) ;
void selhero_ UiFocusNavigationYesNo( )
void SelheroList Focus( int value ) ;
void SelheroList Select( int value ) ;
void SelheroList Esc( ) ;
void SelheroLoad Focus( int value ) ;
void SelheroLoad Select( int value ) ;
void SelheroName Select( int value ) ;
void SelheroName Esc( ) ;
void SelheroClassSelector Focus( int value ) ;
void SelheroClassSelector Select( int value ) ;
void SelheroClassSelector Esc( ) ;
const char * SelheroGenerateName ( HeroClass heroC lass) ;
void Selhero UiFocusNavigationYesNo( )
{
if ( selhero_deleteEnabled )
UiFocusNavigationYesNo ( ) ;
}
void selhero_ FreeListItems( )
void Selhero FreeListItems( )
{
for ( auto pUIItem : vecSelHeroDlgItems ) {
delete pUIItem ;
@ -73,7 +73,7 @@ void selhero_FreeListItems()
vecSelHeroDlgItems . clear ( ) ;
}
void selhero_ FreeDlgItems( )
void Selhero FreeDlgItems( )
{
for ( auto pUIItem : vecSelDlgItems ) {
delete pUIItem ;
@ -81,7 +81,7 @@ void selhero_FreeDlgItems()
vecSelDlgItems . clear ( ) ;
}
void selhero_ Free( )
void Selhero Free( )
{
ArtBackground . Unload ( ) ;
@ -90,14 +90,14 @@ void selhero_Free()
}
vecSelHeroDialog . clear ( ) ;
selhero_ FreeDlgItems( ) ;
selhero_ FreeListItems( ) ;
Selhero FreeDlgItems( ) ;
Selhero FreeListItems( ) ;
UnloadScrollBar ( ) ;
bUIElementsLoaded = false ;
}
void selhero_ SetStats( )
void Selhero SetStats( )
{
SELHERO_DIALOG_HERO_IMG - > m_frame = static_cast < int > ( selhero_heroInfo . heroclass ) ;
snprintf ( textStats [ 0 ] , sizeof ( textStats [ 0 ] ) , " %d " , selhero_heroInfo . level ) ;
@ -110,34 +110,34 @@ void selhero_SetStats()
std : : size_t listOffset = 0 ;
UiArtTextButton * SELLIST_DIALOG_DELETE_BUTTON ;
void selhero_ UpdateViewportItems( )
void Selhero UpdateViewportItems( )
{
const std : : size_t num_viewport_h eroes = std : : min ( selhero_SaveCount - listOffset , k MaxViewportItems) ;
for ( std : : size_t i = 0 ; i < num_viewport_h eroes ; i + + ) {
const std : : size_t numViewportH eroes = std : : min ( selhero_SaveCount - listOffset , K MaxViewportItems) ;
for ( std : : size_t i = 0 ; i < numViewportH eroes ; i + + ) {
const std : : size_t index = i + listOffset ;
vecSelHeroDlgItems [ i ] - > m_text = selhero_heros [ index ] . name ;
vecSelHeroDlgItems [ i ] - > m_value = static_cast < int > ( index ) ;
}
if ( num_viewport_heroes < k MaxViewportItems ) {
vecSelHeroDlgItems [ num_viewport_h eroes ] - > m_text = " New Hero " ;
vecSelHeroDlgItems [ num_viewport_h eroes ] - > m_value = static_cast < int > ( selhero_SaveCount ) ;
if ( numViewportHeroes < K MaxViewportItems ) {
vecSelHeroDlgItems [ numViewportH eroes ] - > m_text = " New Hero " ;
vecSelHeroDlgItems [ numViewportH eroes ] - > m_value = static_cast < int > ( selhero_SaveCount ) ;
}
}
void selhero_ ScrollIntoView( std : : size_t index )
void Selhero ScrollIntoView( std : : size_t index )
{
std : : size_t new_o ffset = listOffset ;
if ( index > = listOffset + k MaxViewportItems)
new_o ffset = index - ( k MaxViewportItems - 1 ) ;
std : : size_t newO ffset = listOffset ;
if ( index > = listOffset + K MaxViewportItems)
newO ffset = index - ( K MaxViewportItems - 1 ) ;
if ( index < listOffset )
new_o ffset = index ;
if ( new_o ffset ! = listOffset ) {
listOffset = new_o ffset ;
selhero_ UpdateViewportItems( ) ;
newO ffset = index ;
if ( newO ffset ! = listOffset ) {
listOffset = newO ffset ;
Selhero UpdateViewportItems( ) ;
}
}
bool SelHero_ GetHeroInfo ( _uiheroinfo * pInfo )
bool SelHeroGetHeroInfo ( _uiheroinfo * pInfo )
{
selhero_heros [ selhero_SaveCount ] = * pInfo ;
selhero_SaveCount + + ;
@ -145,14 +145,14 @@ bool SelHero_GetHeroInfo(_uiheroinfo *pInfo)
return true ;
}
void selhero_List_ Focus( int value )
void SelheroList Focus( int value )
{
const auto index = static_cast < std : : size_t > ( value ) ;
selhero_ ScrollIntoView( index ) ;
Selhero ScrollIntoView( index ) ;
int baseFlags = UIS_CENTER | UIS_BIG ;
if ( selhero_SaveCount & & index < selhero_SaveCount ) {
memcpy ( & selhero_heroInfo , & selhero_heros [ index ] , sizeof ( selhero_heroInfo ) ) ;
selhero_ SetStats( ) ;
Selhero SetStats( ) ;
SELLIST_DIALOG_DELETE_BUTTON - > m_iFlags = baseFlags | UIS_GOLD ;
selhero_deleteEnabled = true ;
return ;
@ -168,22 +168,22 @@ void selhero_List_Focus(int value)
selhero_deleteEnabled = false ;
}
bool selhero_List_ DeleteYesNo( )
bool SelheroList DeleteYesNo( )
{
selhero_navigateYesNo = selhero_deleteEnabled ;
return selhero_navigateYesNo ;
}
void selhero_List_ Select( int value )
void SelheroList Select( int value )
{
if ( static_cast < std : : size_t > ( value ) = = selhero_SaveCount ) {
selhero_ FreeDlgItems( ) ;
Selhero FreeDlgItems( ) ;
SDL_Rect rect1 = { ( Sint16 ) ( PANEL_LEFT + 264 ) , ( Sint16 ) ( UI_OFFSET_Y + 211 ) , 320 , 33 } ;
vecSelDlgItems . push_back ( new UiArtText ( " Choose Class " , rect1 , UIS_CENTER | UIS_BIG ) ) ;
selhero_ FreeListItems( ) ;
Selhero FreeListItems( ) ;
int itemH = 33 ;
vecSelHeroDlgItems . push_back ( new UiListItem ( " Warrior " , static_cast < int > ( HeroClass : : Warrior ) ) ) ;
vecSelHeroDlgItems . push_back ( new UiListItem ( " Rogue " , static_cast < int > ( HeroClass : : Rogue ) ) ) ;
@ -208,7 +208,7 @@ void selhero_List_Select(int value)
SDL_Rect rect3 = { ( Sint16 ) ( PANEL_LEFT + 429 ) , ( Sint16 ) ( UI_OFFSET_Y + 429 ) , 140 , 35 } ;
vecSelDlgItems . push_back ( new UiArtTextButton ( " Cancel " , & UiFocusNavigationEsc , rect3 , UIS_CENTER | UIS_BIG | UIS_GOLD ) ) ;
UiInitList ( vecSelHeroDlgItems . size ( ) , selhero_ClassSelector_Focus , selhero_ClassSelector_Select , selhero_ClassSelector_ Esc, vecSelDlgItems ) ;
UiInitList ( vecSelHeroDlgItems . size ( ) , SelheroClassSelectorFocus , SelheroClassSelectorSelect , SelheroClassSelector Esc, vecSelDlgItems ) ;
memset ( & selhero_heroInfo . name , 0 , sizeof ( selhero_heroInfo . name ) ) ;
strncpy ( title , " New Single Player Hero " , sizeof ( title ) - 1 ) ;
if ( selhero_isMultiPlayer ) {
@ -218,12 +218,12 @@ void selhero_List_Select(int value)
}
if ( selhero_heroInfo . hassaved ) {
selhero_ FreeDlgItems( ) ;
Selhero FreeDlgItems( ) ;
SDL_Rect rect1 = { ( Sint16 ) ( PANEL_LEFT + 264 ) , ( Sint16 ) ( UI_OFFSET_Y + 211 ) , 320 , 33 } ;
vecSelDlgItems . push_back ( new UiArtText ( " Save File Exists " , rect1 , UIS_CENTER | UIS_BIG ) ) ;
selhero_ FreeListItems( ) ;
Selhero FreeListItems( ) ;
vecSelHeroDlgItems . push_back ( new UiListItem ( " Load Game " , 0 ) ) ;
vecSelHeroDlgItems . push_back ( new UiListItem ( " New Game " , 1 ) ) ;
vecSelDlgItems . push_back ( new UiList ( vecSelHeroDlgItems , PANEL_LEFT + 265 , ( UI_OFFSET_Y + 285 ) , 320 , 33 , UIS_CENTER | UIS_MED | UIS_GOLD ) ) ;
@ -234,15 +234,15 @@ void selhero_List_Select(int value)
SDL_Rect rect3 = { ( Sint16 ) ( PANEL_LEFT + 429 ) , ( Sint16 ) ( UI_OFFSET_Y + 427 ) , 140 , 35 } ;
vecSelDlgItems . push_back ( new UiArtTextButton ( " Cancel " , & UiFocusNavigationEsc , rect3 , UIS_CENTER | UIS_VCENTER | UIS_BIG | UIS_GOLD ) ) ;
UiInitList ( vecSelHeroDlgItems . size ( ) , selhero_Load_Focus , selhero_Load_ Select, selhero_List_Init , vecSelDlgItems , true ) ;
UiInitList ( vecSelHeroDlgItems . size ( ) , SelheroLoadFocus , SelheroLoad Select, selhero_List_Init , vecSelDlgItems , true ) ;
strncpy ( title , " Single Player Characters " , sizeof ( title ) - 1 ) ;
return ;
}
selhero_Load_ Select( 1 ) ;
SelheroLoad Select( 1 ) ;
}
void selhero_List_ Esc( )
void SelheroList Esc( )
{
UiInitList_clear ( ) ;
@ -250,24 +250,24 @@ void selhero_List_Esc()
selhero_result = SELHERO_PREVIOUS ;
}
void selhero_ClassSelector_ Focus( int value )
void SelheroClassSelector Focus( int value )
{
const auto hero_c lass = static_cast < HeroClass > ( vecSelHeroDlgItems [ value ] - > m_value ) ;
const auto heroC lass = static_cast < HeroClass > ( vecSelHeroDlgItems [ value ] - > m_value ) ;
_uidefaultstats defaults ;
gfnHeroStats ( static_cast < unsigned int > ( hero_c lass ) , & defaults ) ;
gfnHeroStats ( static_cast < unsigned int > ( heroC lass ) , & defaults ) ;
selhero_heroInfo . level = 1 ;
selhero_heroInfo . heroclass = hero_c lass ;
selhero_heroInfo . heroclass = heroC lass ;
selhero_heroInfo . strength = defaults . strength ;
selhero_heroInfo . magic = defaults . magic ;
selhero_heroInfo . dexterity = defaults . dexterity ;
selhero_heroInfo . vitality = defaults . vitality ;
selhero_ SetStats( ) ;
Selhero SetStats( ) ;
}
bool s houldPrefillHeroName( )
bool S houldPrefillHeroName( )
{
# if defined __3DS__
return false ;
@ -278,14 +278,14 @@ bool shouldPrefillHeroName()
# endif
}
void selhero_ClassSelector_ Select( int value )
void SelheroClassSelector Select( int value )
{
auto hClass = static_cast < HeroClass > ( vecSelHeroDlgItems [ value ] - > m_value ) ;
if ( gbSpawned & & ( hClass = = HeroClass : : Rogue | | hClass = = HeroClass : : Sorcerer | | ( hClass = = HeroClass : : Bard & & ! hfbard_mpq ) ) ) {
ArtBackground . Unload ( ) ;
UiSelOkDialog ( nullptr , " 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 " ) ;
selhero_List_ Select( selhero_SaveCount ) ;
SelheroList Select( selhero_SaveCount ) ;
return ;
}
@ -297,9 +297,9 @@ void selhero_ClassSelector_Select(int value)
# if defined __3DS__
ctr_vkbdInput ( " Enter Hero name.. " , selhero_GenerateName ( selhero_heroInfo . heroclass ) , selhero_heroInfo . name ) ;
# endif
if ( s houldPrefillHeroName( ) )
strncpy ( selhero_heroInfo . name , selhero_ GenerateName( selhero_heroInfo . heroclass ) , sizeof ( selhero_heroInfo . name ) - 1 ) ;
selhero_ FreeDlgItems( ) ;
if ( S houldPrefillHeroName( ) )
strncpy ( selhero_heroInfo . name , Selhero GenerateName( selhero_heroInfo . heroclass ) , sizeof ( selhero_heroInfo . name ) - 1 ) ;
Selhero FreeDlgItems( ) ;
SDL_Rect rect1 = { ( Sint16 ) ( PANEL_LEFT + 264 ) , ( Sint16 ) ( UI_OFFSET_Y + 211 ) , 320 , 33 } ;
vecSelDlgItems . push_back ( new UiArtText ( " Enter Name " , rect1 , UIS_CENTER | UIS_BIG ) ) ;
@ -312,23 +312,23 @@ void selhero_ClassSelector_Select(int value)
SDL_Rect rect4 = { ( Sint16 ) ( PANEL_LEFT + 429 ) , ( Sint16 ) ( UI_OFFSET_Y + 429 ) , 140 , 35 } ;
vecSelDlgItems . push_back ( new UiArtTextButton ( " Cancel " , & UiFocusNavigationEsc , rect4 , UIS_CENTER | UIS_BIG | UIS_GOLD ) ) ;
UiInitList ( 0 , nullptr , selhero_Name_Select , selhero_Name_ Esc, vecSelDlgItems ) ;
UiInitList ( 0 , nullptr , SelheroNameSelect , SelheroName Esc, vecSelDlgItems ) ;
}
void selhero_ClassSelector_ Esc( )
void SelheroClassSelector Esc( )
{
selhero_ FreeDlgItems( ) ;
selhero_ FreeListItems( ) ;
Selhero FreeDlgItems( ) ;
Selhero FreeListItems( ) ;
if ( selhero_SaveCount ) {
selhero_List_Init ( ) ;
return ;
}
selhero_List_ Esc( ) ;
SelheroList Esc( ) ;
}
void selhero_Name_ Select( int value )
void SelheroName Select( int value )
{
if ( ! UiValidPlayerName ( selhero_heroInfo . name ) ) {
@ -350,7 +350,7 @@ void selhero_Name_Select(int value)
if ( overwrite ) {
if ( gfnHeroCreate ( & selhero_heroInfo ) ) {
selhero_Load_ Select( 1 ) ;
SelheroLoad Select( 1 ) ;
return ;
}
UiErrorOkDialog ( " Unable to create character. " , vecSelDlgItems ) ;
@ -358,19 +358,19 @@ void selhero_Name_Select(int value)
}
memset ( selhero_heroInfo . name , ' \0 ' , sizeof ( selhero_heroInfo . name ) ) ;
selhero_ClassSelector_ Select( 0 ) ;
SelheroClassSelector Select( 0 ) ;
}
void selhero_Name_ Esc( )
void SelheroName Esc( )
{
selhero_List_ Select( selhero_SaveCount ) ;
SelheroList Select( selhero_SaveCount ) ;
}
void selhero_Load_ Focus( int value )
void SelheroLoad Focus( int value )
{
}
void selhero_Load_ Select( int value )
void SelheroLoad Select( int value )
{
UiInitList_clear ( ) ;
selhero_endMenu = true ;
@ -389,7 +389,7 @@ void selhero_Load_Select(int value)
// This means selhero's render loop will render selgame's items,
// which happens to work because the render loops are similar.
selhero_endMenu = false ;
selhero_ Free( ) ;
Selhero Free( ) ;
LoadBackgroundArt ( " ui_art \\ selgame.pcx " ) ;
selgame_GameSelection_Select ( 0 ) ;
}
@ -397,9 +397,9 @@ void selhero_Load_Select(int value)
selhero_result = SELHERO_NEW_DUNGEON ;
}
const char * selhero_GenerateName ( HeroClass hero_c lass)
const char * SelheroGenerateName ( HeroClass heroC lass)
{
static const char * const k Names[ 6 ] [ 10 ] = {
static const char * const K Names[ 6 ] [ 10 ] = {
{
// Warrior
" Aidan " ,
@ -482,7 +482,7 @@ const char *selhero_GenerateName(HeroClass hero_class)
int iRand = rand ( ) % 10 ;
return k Names[ static_cast < std : : size_t > ( hero_c lass ) % 6 ] [ iRand ] ;
return K Names[ static_cast < std : : size_t > ( heroC lass ) % 6 ] [ iRand ] ;
}
} // namespace
@ -495,10 +495,10 @@ void selhero_Init()
LoadScrollBar ( ) ;
selhero_SaveCount = 0 ;
gfnHeroInfo ( SelHero_ GetHeroInfo ) ;
gfnHeroInfo ( SelHeroGetHeroInfo ) ;
std : : reverse ( selhero_heros , selhero_heros + selhero_SaveCount ) ;
selhero_ FreeDlgItems( ) ;
Selhero FreeDlgItems( ) ;
SDL_Rect rect1 = { ( Sint16 ) ( PANEL_LEFT + 24 ) , ( Sint16 ) ( UI_OFFSET_Y + 161 ) , 590 , 35 } ;
vecSelHeroDialog . push_back ( new UiArtText ( title , rect1 , UIS_CENTER | UIS_BIG ) ) ;
@ -538,17 +538,17 @@ void selhero_Init()
void selhero_List_Init ( )
{
listOffset = 0 ;
selhero_ FreeDlgItems( ) ;
Selhero FreeDlgItems( ) ;
SDL_Rect rect1 = { ( Sint16 ) ( PANEL_LEFT + 264 ) , ( Sint16 ) ( UI_OFFSET_Y + 211 ) , 320 , 33 } ;
vecSelDlgItems . push_back ( new UiArtText ( " Select Hero " , rect1 , UIS_CENTER | UIS_BIG ) ) ;
selhero_ FreeListItems( ) ;
const size_t num_viewport_h eroes = std : : min ( selhero_SaveCount + 1 , k MaxViewportItems) ;
for ( std : : size_t i = 0 ; i < num_viewport_h eroes ; i + + ) {
Selhero FreeListItems( ) ;
const size_t numViewportH eroes = std : : min ( selhero_SaveCount + 1 , K MaxViewportItems) ;
for ( std : : size_t i = 0 ; i < numViewportH eroes ; i + + ) {
vecSelHeroDlgItems . push_back ( new UiListItem ( " " , - 1 ) ) ;
}
selhero_ UpdateViewportItems( ) ;
Selhero UpdateViewportItems( ) ;
vecSelDlgItems . push_back ( new UiList ( vecSelHeroDlgItems , PANEL_LEFT + 265 , ( UI_OFFSET_Y + 256 ) , 320 , 26 , UIS_CENTER | UIS_MED | UIS_GOLD ) ) ;
@ -560,14 +560,14 @@ void selhero_List_Init()
vecSelDlgItems . push_back ( new UiArtTextButton ( " OK " , & UiFocusNavigationSelect , rect3 , UIS_CENTER | UIS_BIG | UIS_GOLD ) ) ;
SDL_Rect rect4 = { ( Sint16 ) ( PANEL_LEFT + 364 ) , ( Sint16 ) ( UI_OFFSET_Y + 429 ) , 120 , 35 } ;
SELLIST_DIALOG_DELETE_BUTTON = new UiArtTextButton ( " Delete " , & selhero_ UiFocusNavigationYesNo, rect4 , UIS_CENTER | UIS_BIG | UIS_DISABLED ) ;
SELLIST_DIALOG_DELETE_BUTTON = new UiArtTextButton ( " Delete " , & Selhero UiFocusNavigationYesNo, rect4 , UIS_CENTER | UIS_BIG | UIS_DISABLED ) ;
vecSelDlgItems . push_back ( SELLIST_DIALOG_DELETE_BUTTON ) ;
SDL_Rect rect5 = { ( Sint16 ) ( PANEL_LEFT + 489 ) , ( Sint16 ) ( UI_OFFSET_Y + 429 ) , 120 , 35 } ;
vecSelDlgItems . push_back ( new UiArtTextButton ( " Cancel " , & UiFocusNavigationEsc , rect5 , UIS_CENTER | UIS_BIG | UIS_GOLD ) ) ;
UiInitList ( selhero_SaveCount + 1 , selhero_List_Focus , selhero_List_Select , selhero_List_ Esc, vecSelDlgItems , false , selhero_List_ DeleteYesNo) ;
UiInitScrollBar ( scrollBar , k MaxViewportItems, & listOffset ) ;
UiInitList ( selhero_SaveCount + 1 , SelheroListFocus , SelheroListSelect , SelheroList Esc, vecSelDlgItems , false , SelheroList DeleteYesNo) ;
UiInitScrollBar ( scrollBar , K MaxViewportItems, & listOffset ) ;
if ( selhero_isMultiPlayer ) {
strcpy ( title , " Multi Player Characters " ) ;
} else {
@ -598,7 +598,7 @@ static void UiSelHeroDialog(
if ( selhero_SaveCount ) {
selhero_List_Init ( ) ;
} else {
selhero_List_ Select( selhero_SaveCount ) ;
SelheroList Select( selhero_SaveCount ) ;
}
selhero_endMenu = false ;
@ -607,7 +607,7 @@ static void UiSelHeroDialog(
UiRenderItems ( vecSelHeroDialog ) ;
UiPollAndRender ( ) ;
}
selhero_ Free( ) ;
Selhero Free( ) ;
if ( selhero_navigateYesNo ) {
char dialogTitle [ 32 ] ;