@ -153,6 +153,7 @@ void ItemInfo::InitializeItems(){
std : : unordered_set < std : : string > equippableClass ;
std : : unordered_set < std : : string > equippableClass ;
EventName useSound ;
EventName useSound ;
std : : optional < std : : string > fragmentName ;
std : : optional < std : : string > fragmentName ;
std : : optional < std : : string > fragmentIcon ;
for ( auto & [ itemKey , itemValue ] : data [ key ] . GetKeys ( ) ) {
for ( auto & [ itemKey , itemValue ] : data [ key ] . GetKeys ( ) ) {
std : : string keyName = itemKey ;
std : : string keyName = itemKey ;
if ( keyName = = " Description " ) {
if ( keyName = = " Description " ) {
@ -204,6 +205,9 @@ void ItemInfo::InitializeItems(){
} else
} else
if ( keyName . starts_with ( " Fragment Name " ) ) {
if ( keyName . starts_with ( " Fragment Name " ) ) {
fragmentName = data [ key ] [ keyName ] . GetString ( ) ;
fragmentName = data [ key ] [ keyName ] . GetString ( ) ;
} else
if ( keyName . starts_with ( " Fragment Icon " ) ) {
fragmentIcon = data [ key ] [ keyName ] . GetString ( ) ;
} else { //THis is a custom override modifier for a script. NO-OP
} else { //THis is a custom override modifier for a script. NO-OP
}
}
}
}
@ -326,6 +330,7 @@ void ItemInfo::InitializeItems(){
it . minStats = minStats ;
it . minStats = minStats ;
it . maxStats = maxStats ;
it . maxStats = maxStats ;
it . fragmentName = fragmentName ;
it . fragmentName = fragmentName ;
it . fragmentIcon = fragmentIcon ;
# pragma region Equipment Category Verification Tests
# pragma region Equipment Category Verification Tests
int equipmentCategories = 0 ;
int equipmentCategories = 0 ;
@ -368,16 +373,24 @@ void ItemInfo::InitializeItems(){
ItemInfo & it { ITEM_DATA [ fragmentName ] } ;
ItemInfo & it { ITEM_DATA [ fragmentName ] } ;
GFX [ fragmentName ] . Create ( 24 , 24 ) ;
GFX [ fragmentName ] . Create ( 24 , 24 ) ;
if ( ! game - > TestingModeEnabled ( ) ) {
if ( ! game - > TestingModeEnabled ( ) ) {
# pragma region Collect colors from source ring image
if ( it . FragmentIcon ( ) ) {
std : : set < Pixel > colors ;
game - > SetDrawTarget ( GFX . at ( fragmentName ) . Sprite ( ) ) ;
for ( int y = 0 ; y < 24 ; y + + ) {
game - > Clear ( BLANK ) ;
for ( int x = 0 ; x < 24 ; x + + ) {
game - > SetPixelMode ( Pixel : : ALPHA ) ;
colors . insert ( ITEM_DATA . at ( itemName ) . img - > sprite - > GetPixel ( x , y ) ) ;
game - > DrawSprite ( { } , GFX . at ( it . FragmentIcon ( ) . value ( ) ) . Sprite ( ) ) ;
game - > SetDrawTarget ( nullptr ) ;
GFX . at ( fragmentName ) . Decal ( ) - > Update ( ) ;
} else {
# pragma region Collect colors from source ring image
std : : set < Pixel > colors ;
for ( int y = 0 ; y < 24 ; y + + ) {
for ( int x = 0 ; x < 24 ; x + + ) {
colors . insert ( ITEM_DATA . at ( itemName ) . img - > sprite - > GetPixel ( x , y ) ) ;
}
}
}
}
colors . erase ( BLANK ) ;
colors . erase ( BLANK ) ;
# pragma endregion
# pragma endregion
# pragma region Generate fragment with randomly sampled pixels from the source ring image
# pragma region Generate fragment with randomly sampled pixels from the source ring image
game - > SetDrawTarget ( GFX . at ( fragmentName ) . Sprite ( ) ) ;
game - > SetDrawTarget ( GFX . at ( fragmentName ) . Sprite ( ) ) ;
game - > DrawSprite ( { } , GFX . at ( " items/Fragment.png " ) . Sprite ( ) , 1U , 0U , [ colors ] ( const Pixel & in ) {
game - > DrawSprite ( { } , GFX . at ( " items/Fragment.png " ) . Sprite ( ) , 1U , 0U , [ colors ] ( const Pixel & in ) {
if ( in = = BLANK ) return in ;
if ( in = = BLANK ) return in ;
@ -389,6 +402,7 @@ void ItemInfo::InitializeItems(){
game - > SetDrawTarget ( nullptr ) ;
game - > SetDrawTarget ( nullptr ) ;
GFX . at ( fragmentName ) . Decal ( ) - > Update ( ) ;
GFX . at ( fragmentName ) . Decal ( ) - > Update ( ) ;
# pragma endregion
# pragma endregion
}
}
}
it . img = GFX . at ( fragmentName ) . Decal ( ) ;
it . img = GFX . at ( fragmentName ) . Decal ( ) ;
it . name = fragmentName ;
it . name = fragmentName ;
@ -1495,3 +1509,6 @@ const bool Item::SelectedEquipIsDifferent(const std::weak_ptr<Item>equipAttempti
}
}
}
}
}
}
const std : : optional < std : : string > & ItemInfo : : FragmentIcon ( ) const {
return fragmentIcon ;
}