diff --git a/resources/include/std_zh/std_constants.zh b/resources/include/std_zh/std_constants.zh index e895ad7b29..596cb41308 100644 --- a/resources/include/std_zh/std_constants.zh +++ b/resources/include/std_zh/std_constants.zh @@ -75,8 +75,8 @@ DEFINE MAX_FFC = 128; DEFINE MIN_OBJ = 1; //Short, const for loops. DEFINE MIN_COUNTER_INDEX = 0; -DEFINE MAX_COUNTER_INDEX = 31; -DEFINE NUM_COUNTERS = 32; //0 to 31 +DEFINE MAX_COUNTER_INDEX = 106; +DEFINE NUM_COUNTERS = 107; //0 to 106 DEFINE MIN_COMBO_POS = 0; DEFINE MAX_COMBO_POS = 175; @@ -441,64 +441,54 @@ DEFINE EXT_NOSHADOW = 4; // Extended; NPC has no shadow. //! We need some better names for Extend constants. //Generic counters. Use with itemclass->Counter, Game->Counter[], Game->MCounter[] and Game->DCounter[] -DEFINE CR_NONE = -1; -DEFINE CR_LIFE = 0; -DEFINE CR_RUPEES = 1; -DEFINE CR_BOMBS = 2; -DEFINE CR_ARROWS = 3; -DEFINE CR_MAGIC = 4; -DEFINE CR_KEYS = 5; -DEFINE CR_SBOMBS = 6; -DEFINE CR_SCRIPT1 = 7; -DEFINE CR_SCRIPT2 = 8; -DEFINE CR_SCRIPT3 = 9; -DEFINE CR_SCRIPT4 = 10; -DEFINE CR_SCRIPT5 = 11; -DEFINE CR_SCRIPT6 = 12; -DEFINE CR_SCRIPT7 = 13; -DEFINE CR_SCRIPT8 = 14; -DEFINE CR_SCRIPT9 = 15; -DEFINE CR_SCRIPT10 = 16; -DEFINE CR_SCRIPT11 = 17; -DEFINE CR_SCRIPT12 = 18; -DEFINE CR_SCRIPT13 = 19; -DEFINE CR_SCRIPT14 = 20; -DEFINE CR_SCRIPT15 = 21; -DEFINE CR_SCRIPT16 = 22; -DEFINE CR_SCRIPT17 = 23; -DEFINE CR_SCRIPT18 = 24; -DEFINE CR_SCRIPT19 = 25; -DEFINE CR_SCRIPT20 = 26; -DEFINE CR_SCRIPT21 = 27; -DEFINE CR_SCRIPT22 = 28; -DEFINE CR_SCRIPT23 = 29; -DEFINE CR_SCRIPT24 = 30; -DEFINE CR_SCRIPT25 = 31; -DEFINE CR_CUSTOM1 = 7; -DEFINE CR_CUSTOM2 = 8; -DEFINE CR_CUSTOM3 = 9; -DEFINE CR_CUSTOM4 = 10; -DEFINE CR_CUSTOM5 = 11; -DEFINE CR_CUSTOM6 = 12; -DEFINE CR_CUSTOM7 = 13; -DEFINE CR_CUSTOM8 = 14; -DEFINE CR_CUSTOM9 = 15; -DEFINE CR_CUSTOM10 = 16; -DEFINE CR_CUSTOM11 = 17; -DEFINE CR_CUSTOM12 = 18; -DEFINE CR_CUSTOM13 = 19; -DEFINE CR_CUSTOM14 = 20; -DEFINE CR_CUSTOM15 = 21; -DEFINE CR_CUSTOM16 = 22; -DEFINE CR_CUSTOM17 = 23; -DEFINE CR_CUSTOM18 = 24; -DEFINE CR_CUSTOM19 = 25; -DEFINE CR_CUSTOM20 = 26; -DEFINE CR_CUSTOM21 = 27; -DEFINE CR_CUSTOM22 = 28; -DEFINE CR_CUSTOM23 = 29; -DEFINE CR_CUSTOM24 = 30; -DEFINE CR_CUSTOM25 = 31; +enum +{ + CR_NONE = -1, + CR_LIFE, CR_MONEY, CR_BOMBS, CR_ARROWS, CR_MAGIC, + CR_KEYS, CR_SBOMBS, CR_CUSTOM1, CR_CUSTOM2, CR_CUSTOM3, + CR_CUSTOM4, CR_CUSTOM5, CR_CUSTOM6, CR_CUSTOM7, CR_CUSTOM8, + CR_CUSTOM9, CR_CUSTOM10, CR_CUSTOM11, CR_CUSTOM12, CR_CUSTOM13, + CR_CUSTOM14, CR_CUSTOM15, CR_CUSTOM16, CR_CUSTOM17, CR_CUSTOM18, + CR_CUSTOM19, CR_CUSTOM20, CR_CUSTOM21, CR_CUSTOM22, CR_CUSTOM23, + CR_CUSTOM24, CR_CUSTOM25, CR_CUSTOM26, CR_CUSTOM27, CR_CUSTOM28, + CR_CUSTOM29, CR_CUSTOM30, CR_CUSTOM31, CR_CUSTOM32, CR_CUSTOM33, + CR_CUSTOM34, CR_CUSTOM35, CR_CUSTOM36, CR_CUSTOM37, CR_CUSTOM38, + CR_CUSTOM39, CR_CUSTOM40, CR_CUSTOM41, CR_CUSTOM42, CR_CUSTOM43, + CR_CUSTOM44, CR_CUSTOM45, CR_CUSTOM46, CR_CUSTOM47, CR_CUSTOM48, + CR_CUSTOM49, CR_CUSTOM50, CR_CUSTOM51, CR_CUSTOM52, CR_CUSTOM53, + CR_CUSTOM54, CR_CUSTOM55, CR_CUSTOM56, CR_CUSTOM57, CR_CUSTOM58, + CR_CUSTOM59, CR_CUSTOM60, CR_CUSTOM61, CR_CUSTOM62, CR_CUSTOM63, + CR_CUSTOM64, CR_CUSTOM65, CR_CUSTOM66, CR_CUSTOM67, CR_CUSTOM68, + CR_CUSTOM69, CR_CUSTOM70, CR_CUSTOM71, CR_CUSTOM72, CR_CUSTOM73, + CR_CUSTOM74, CR_CUSTOM75, CR_CUSTOM76, CR_CUSTOM77, CR_CUSTOM78, + CR_CUSTOM79, CR_CUSTOM80, CR_CUSTOM81, CR_CUSTOM82, CR_CUSTOM83, + CR_CUSTOM84, CR_CUSTOM85, CR_CUSTOM86, CR_CUSTOM87, CR_CUSTOM88, + CR_CUSTOM89, CR_CUSTOM90, CR_CUSTOM91, CR_CUSTOM92, CR_CUSTOM93, + CR_CUSTOM94, CR_CUSTOM95, CR_CUSTOM96, CR_CUSTOM97, CR_CUSTOM98, + CR_CUSTOM99, CR_CUSTOM100, + // + CR_SCRIPT1 = CR_CUSTOM1, CR_SCRIPT2, CR_SCRIPT3, + CR_SCRIPT4, CR_SCRIPT5, CR_SCRIPT6, CR_SCRIPT7, CR_SCRIPT8, + CR_SCRIPT9, CR_SCRIPT10, CR_SCRIPT11, CR_SCRIPT12, CR_SCRIPT13, + CR_SCRIPT14, CR_SCRIPT15, CR_SCRIPT16, CR_SCRIPT17, CR_SCRIPT18, + CR_SCRIPT19, CR_SCRIPT20, CR_SCRIPT21, CR_SCRIPT22, CR_SCRIPT23, + CR_SCRIPT24, CR_SCRIPT25, CR_SCRIPT26, CR_SCRIPT27, CR_SCRIPT28, + CR_SCRIPT29, CR_SCRIPT30, CR_SCRIPT31, CR_SCRIPT32, CR_SCRIPT33, + CR_SCRIPT34, CR_SCRIPT35, CR_SCRIPT36, CR_SCRIPT37, CR_SCRIPT38, + CR_SCRIPT39, CR_SCRIPT40, CR_SCRIPT41, CR_SCRIPT42, CR_SCRIPT43, + CR_SCRIPT44, CR_SCRIPT45, CR_SCRIPT46, CR_SCRIPT47, CR_SCRIPT48, + CR_SCRIPT49, CR_SCRIPT50, CR_SCRIPT51, CR_SCRIPT52, CR_SCRIPT53, + CR_SCRIPT54, CR_SCRIPT55, CR_SCRIPT56, CR_SCRIPT57, CR_SCRIPT58, + CR_SCRIPT59, CR_SCRIPT60, CR_SCRIPT61, CR_SCRIPT62, CR_SCRIPT63, + CR_SCRIPT64, CR_SCRIPT65, CR_SCRIPT66, CR_SCRIPT67, CR_SCRIPT68, + CR_SCRIPT69, CR_SCRIPT70, CR_SCRIPT71, CR_SCRIPT72, CR_SCRIPT73, + CR_SCRIPT74, CR_SCRIPT75, CR_SCRIPT76, CR_SCRIPT77, CR_SCRIPT78, + CR_SCRIPT79, CR_SCRIPT80, CR_SCRIPT81, CR_SCRIPT82, CR_SCRIPT83, + CR_SCRIPT84, CR_SCRIPT85, CR_SCRIPT86, CR_SCRIPT87, CR_SCRIPT88, + CR_SCRIPT89, CR_SCRIPT90, CR_SCRIPT91, CR_SCRIPT92, CR_SCRIPT93, + CR_SCRIPT94, CR_SCRIPT95, CR_SCRIPT96, CR_SCRIPT97, CR_SCRIPT98, + CR_SCRIPT99, CR_SCRIPT100 +}; //Generic data indices. Use this with Game->Generic[] DEFINE GEN_HEARTPIECES = 0; // Heart Pieces currently possessed diff --git a/src/base/zdefs.h b/src/base/zdefs.h index 658015c2da..04378089a2 100644 --- a/src/base/zdefs.h +++ b/src/base/zdefs.h @@ -242,7 +242,7 @@ enum {ENC_METHOD_192B104=0, ENC_METHOD_192B105, ENC_METHOD_192B185, ENC_METHOD_2 #define V_GUYS 47 #define V_MIDIS 4 #define V_CHEATS 1 -#define V_SAVEGAME 32 +#define V_SAVEGAME 33 #define V_COMBOALIASES 4 #define V_HEROSPRITES 16 #define V_SUBSCREEN 7 @@ -2530,7 +2530,22 @@ enum crCUSTOM9, crCUSTOM10, crCUSTOM11, crCUSTOM12, crCUSTOM13, crCUSTOM14, crCUSTOM15, crCUSTOM16, crCUSTOM17, crCUSTOM18, crCUSTOM19, crCUSTOM20, crCUSTOM21, crCUSTOM22, crCUSTOM23, - crCUSTOM24, crCUSTOM25, MAX_COUNTERS + crCUSTOM24, crCUSTOM25, crCUSTOM26, crCUSTOM27, crCUSTOM28, + crCUSTOM29, crCUSTOM30, crCUSTOM31, crCUSTOM32, crCUSTOM33, + crCUSTOM34, crCUSTOM35, crCUSTOM36, crCUSTOM37, crCUSTOM38, + crCUSTOM39, crCUSTOM40, crCUSTOM41, crCUSTOM42, crCUSTOM43, + crCUSTOM44, crCUSTOM45, crCUSTOM46, crCUSTOM47, crCUSTOM48, + crCUSTOM49, crCUSTOM50, crCUSTOM51, crCUSTOM52, crCUSTOM53, + crCUSTOM54, crCUSTOM55, crCUSTOM56, crCUSTOM57, crCUSTOM58, + crCUSTOM59, crCUSTOM60, crCUSTOM61, crCUSTOM62, crCUSTOM63, + crCUSTOM64, crCUSTOM65, crCUSTOM66, crCUSTOM67, crCUSTOM68, + crCUSTOM69, crCUSTOM70, crCUSTOM71, crCUSTOM72, crCUSTOM73, + crCUSTOM74, crCUSTOM75, crCUSTOM76, crCUSTOM77, crCUSTOM78, + crCUSTOM79, crCUSTOM80, crCUSTOM81, crCUSTOM82, crCUSTOM83, + crCUSTOM84, crCUSTOM85, crCUSTOM86, crCUSTOM87, crCUSTOM88, + crCUSTOM89, crCUSTOM90, crCUSTOM91, crCUSTOM92, crCUSTOM93, + crCUSTOM94, crCUSTOM95, crCUSTOM96, crCUSTOM97, crCUSTOM98, + crCUSTOM99, crCUSTOM100, MAX_COUNTERS }; #define MAX_SAVED_PORTALS 10000 diff --git a/src/subscr.cpp b/src/subscr.cpp index bfd27da2a7..03e5d83f68 100644 --- a/src/subscr.cpp +++ b/src/subscr.cpp @@ -4302,6 +4302,140 @@ bool is_counter_item(int32_t itemtype, int32_t countertype) return false; } +void add_ssc_ctr(int itemtype, bool& infinite, int32_t& value, bool alt) +{ + switch(itemtype) + { + case -3: + case -2: + break; + case sscRUPEES: + if(alt) break; + if(current_item_power(itype_wallet)) + infinite=true; + + value+=game->get_rupies(); + break; + + case sscBOMBS: + if(current_item_power(itype_bombbag)) + infinite=true; + + value+=game->get_bombs(); + break; + + case sscSBOMBS: + { + int32_t itemid = current_item_id(itype_bombbag); + + if(itemid>-1 && itemsbuf[itemid].power>0 && itemsbuf[itemid].flags & ITEM_FLAG1) + infinite=true; + + value+=game->get_sbombs(); + break; + } + + case sscLIFE: + { + if(alt) break; + value+=game->get_life(); + break; + } + case sscMAGIC: + { + value+=game->get_magic(); + break; + } + + case sscMAXHP: + { + value+=game->get_maxlife(); + break; + } + case sscMAXMP: + { + value+=game->get_maxmagic(); + break; + } + + case sscARROWS: + if((!get_qr(qr_TRUEARROWS) && current_item_power(itype_wallet)) || current_item_power(itype_quiver)) + infinite=true; + + // If Hero somehow got ammunition before getting the arrow, + // or if the arrow was disabled in a DMap, + // we shouldn't put the value as zero. + // if(/*current_item_id(itype_arrow)>-1*/ true) + { + if(get_qr(qr_TRUEARROWS)) + { + value+=game->get_arrows(); + } + else + { + value+=game->get_rupies(); + } + } + break; + + case sscGENKEYMAGIC: + case sscLEVKEYMAGIC: + case sscANYKEYMAGIC: + { + int32_t itemid = current_item_id(itype_magickey); + + if(itemid>-1 && !infinite) + { + if(itemsbuf[itemid].flags&ITEM_FLAG1) + infinite = itemsbuf[itemid].power>=get_dlevel(); + else + infinite = itemsbuf[itemid].power==get_dlevel(); + } + } + + //fall through + case sscANYKEYNOMAGIC: + case sscLEVKEYNOMAGIC: + case sscGENKEYNOMAGIC: + if(itemtype == sscGENKEYNOMAGIC || itemtype == sscANYKEYNOMAGIC + || itemtype == sscGENKEYMAGIC || itemtype == sscANYKEYMAGIC) + value += game->get_keys(); + + if(itemtype == sscLEVKEYNOMAGIC || itemtype == sscANYKEYNOMAGIC + || itemtype == sscLEVKEYMAGIC || itemtype == sscANYKEYMAGIC) + value += game->get_lkeys(); + + break; + + case sscSCRIPT1: case sscSCRIPT2: case sscSCRIPT3: case sscSCRIPT4: case sscSCRIPT5: + case sscSCRIPT6: case sscSCRIPT7: case sscSCRIPT8: case sscSCRIPT9: case sscSCRIPT10: + case sscSCRIPT11: case sscSCRIPT12: case sscSCRIPT13: case sscSCRIPT14: case sscSCRIPT15: + case sscSCRIPT16: case sscSCRIPT17: case sscSCRIPT18: case sscSCRIPT19: case sscSCRIPT20: + case sscSCRIPT21: case sscSCRIPT22: case sscSCRIPT23: case sscSCRIPT24: case sscSCRIPT25: + value += game->get_counter(itemtype-3); + break; + case sscSCRIPT26: case sscSCRIPT27: case sscSCRIPT28: case sscSCRIPT29: case sscSCRIPT30: + case sscSCRIPT31: case sscSCRIPT32: case sscSCRIPT33: case sscSCRIPT34: case sscSCRIPT35: + case sscSCRIPT36: case sscSCRIPT37: case sscSCRIPT38: case sscSCRIPT39: case sscSCRIPT40: + case sscSCRIPT41: case sscSCRIPT42: case sscSCRIPT43: case sscSCRIPT44: case sscSCRIPT45: + case sscSCRIPT46: case sscSCRIPT47: case sscSCRIPT48: case sscSCRIPT49: case sscSCRIPT50: + case sscSCRIPT51: case sscSCRIPT52: case sscSCRIPT53: case sscSCRIPT54: case sscSCRIPT55: + case sscSCRIPT56: case sscSCRIPT57: case sscSCRIPT58: case sscSCRIPT59: case sscSCRIPT60: + case sscSCRIPT61: case sscSCRIPT62: case sscSCRIPT63: case sscSCRIPT64: case sscSCRIPT65: + case sscSCRIPT66: case sscSCRIPT67: case sscSCRIPT68: case sscSCRIPT69: case sscSCRIPT70: + case sscSCRIPT71: case sscSCRIPT72: case sscSCRIPT73: case sscSCRIPT74: case sscSCRIPT75: + case sscSCRIPT76: case sscSCRIPT77: case sscSCRIPT78: case sscSCRIPT79: case sscSCRIPT80: + case sscSCRIPT81: case sscSCRIPT82: case sscSCRIPT83: case sscSCRIPT84: case sscSCRIPT85: + case sscSCRIPT86: case sscSCRIPT87: case sscSCRIPT88: case sscSCRIPT89: case sscSCRIPT90: + case sscSCRIPT91: case sscSCRIPT92: case sscSCRIPT93: case sscSCRIPT94: case sscSCRIPT95: + case sscSCRIPT96: case sscSCRIPT97: case sscSCRIPT98: case sscSCRIPT99: case sscSCRIPT100: + value += game->get_counter(itemtype-7); + break; + + default: + break; + } +} // itemtype1, itemtype2, itemtype3: Only itemtype1 is used. I'm unsure who made these, who disabled the code // for them, and when each occurred. They should probably be hidden, but some very old 2.11/2.50b quests // may have used this and we'd need to edit the uest to fix it as-is, so perrhaps hide them only conditionally? @@ -4356,145 +4490,14 @@ void counter(BITMAP *dest, int32_t x, int32_t y, FONT *tempfont, int32_t color, */ - switch(itemtype) - { - case sscRUPEES: - if(current_item_power(itype_wallet)) - infinite=true; - - value+=game->get_rupies(); - break; - - case sscBOMBS: - if(current_item_power(itype_bombbag)) - infinite=true; - - value+=game->get_bombs(); - break; - - case sscSBOMBS: - { - int32_t itemid = current_item_id(itype_bombbag); - - if(itemid>-1 && itemsbuf[itemid].power>0 && itemsbuf[itemid].flags & ITEM_FLAG1) - infinite=true; - - value+=game->get_sbombs(); - break; - } - - case sscLIFE: - { - value+=game->get_life(); - break; - } - case sscMAGIC: - { - value+=game->get_magic(); - break; - } - - case sscMAXHP: - { - value+=game->get_maxlife(); - break; - } - case sscMAXMP: - { - value+=game->get_maxmagic(); - break; - } - - case sscARROWS: - if((!get_qr(qr_TRUEARROWS) && current_item_power(itype_wallet)) || current_item_power(itype_quiver)) - infinite=true; - - // If Hero somehow got ammunition before getting the arrow, - // or if the arrow was disabled in a DMap, - // we shouldn't put the value as zero. -// if(/*current_item_id(itype_arrow)>-1*/ true) - { - if(get_qr(qr_TRUEARROWS)) - { - value+=game->get_arrows(); - } - else - { - value+=game->get_rupies(); - } - } - break; - - case sscGENKEYMAGIC: - case sscLEVKEYMAGIC: - case sscANYKEYMAGIC: - { - int32_t itemid = current_item_id(itype_magickey); - - if(itemid>-1 && !infinite) - { - if(itemsbuf[itemid].flags&ITEM_FLAG1) - infinite = itemsbuf[itemid].power>=get_dlevel(); - else - infinite = itemsbuf[itemid].power==get_dlevel(); - } - } - - //fall through - case sscANYKEYNOMAGIC: - case sscLEVKEYNOMAGIC: - case sscGENKEYNOMAGIC: - if(itemtype == sscGENKEYNOMAGIC || itemtype == sscANYKEYNOMAGIC - || itemtype == sscGENKEYMAGIC || itemtype == sscANYKEYMAGIC) - value += game->get_keys(); - - if(itemtype == sscLEVKEYNOMAGIC || itemtype == sscANYKEYNOMAGIC - || itemtype == sscLEVKEYMAGIC || itemtype == sscANYKEYMAGIC) - value += game->get_lkeys(); - - break; - - case sscSCRIPT1: - case sscSCRIPT2: - case sscSCRIPT3: - case sscSCRIPT4: - case sscSCRIPT5: - case sscSCRIPT6: - case sscSCRIPT7: - case sscSCRIPT8: - case sscSCRIPT9: - case sscSCRIPT10: - case sscSCRIPT11: - case sscSCRIPT12: - case sscSCRIPT13: - case sscSCRIPT14: - case sscSCRIPT15: - case sscSCRIPT16: - case sscSCRIPT17: - case sscSCRIPT18: - case sscSCRIPT19: - case sscSCRIPT20: - case sscSCRIPT21: - case sscSCRIPT22: - case sscSCRIPT23: - case sscSCRIPT24: - case sscSCRIPT25: - value += game->get_counter(itemtype-3); - break; - - default: - break; - } - - //Re-implement item2 and item3 stacking counters. -Z 26-Jan-2020 + add_ssc_ctr(itemtype1,infinite,value,false); + //Re-implement item2 and item3 stacking counters. -Z 26-Jan-2020 if ( /*get_qr(qrSTACKSUBSCREENCOUNTERS) || (*/( FFCore.getQuestHeaderInfo(vZelda) == 0x250 && FFCore.getQuestHeaderInfo(vBuild) >= 33 ) //this ishowit looks in 2.53.1, Beta 25 || ( FFCore.getQuestHeaderInfo(vZelda) > 0x250 ) ) /*)*/ - { //add item2 and item3 values to item1 values for (int32_t i=1; i<3; ++i) { - switch (i) { case 1: @@ -4525,146 +4528,7 @@ void counter(BITMAP *dest, int32_t x, int32_t y, FONT *tempfont, int32_t color, } } - - switch(itemtype) - { - case -3: - case -2: - case sscLIFE: - case sscRUPEES: - { - //do nothing if any of these three. -Z - //value+=game->get_life(); Life cannot stack. It's NULL. :/ - break; - } - //case sscRUPEES: - //{ - // if(current_item_power(itype_wallet)) - // infinite=true; - // value+=game->get_rupies(); - // break; - //} - case sscBOMBS: - { - if(current_item_power(itype_bombbag)) - infinite=true; - value+=game->get_bombs(); - break; - } - case sscSBOMBS: - { - int32_t itemid = current_item_id(itype_bombbag); - if(itemid>-1 && itemsbuf[itemid].power>0 && itemsbuf[itemid].flags & ITEM_FLAG1) - infinite=true; - value+=game->get_sbombs(); - break; - } - case sscMAGIC: - { - value+=game->get_magic(); - break; - } - case sscMAXHP: - { - value+=game->get_maxlife(); - break; - } - case sscMAXMP: - { - value+=game->get_maxmagic(); - break; - } - case sscARROWS: - if((!get_qr(qr_TRUEARROWS) && current_item_power(itype_wallet)) || current_item_power(itype_quiver)) - infinite=true; - - // If Hero somehow got ammunition before getting the arrow, - // or if the arrow was disabled in a DMap, - // we shouldn't put the value as zero. - // if(/*current_item_id(itype_arrow)>-1*/ true) - { - if(get_qr(qr_TRUEARROWS)) - { - value+=game->get_arrows(); - } - else - { - value+=game->get_rupies(); - } - } - break; - - case sscGENKEYMAGIC: - case sscLEVKEYMAGIC: - case sscANYKEYMAGIC: - { - int32_t itemid = current_item_id(itype_magickey); - if(itemid>-1 && !infinite) - { - if(itemsbuf[itemid].flags&ITEM_FLAG1) - { - infinite = itemsbuf[itemid].power>=get_dlevel(); - } - else - { - infinite = itemsbuf[itemid].power==get_dlevel(); - } - } - } - - //fall through - case sscANYKEYNOMAGIC: - case sscLEVKEYNOMAGIC: - case sscGENKEYNOMAGIC: - if(itemtype == sscGENKEYNOMAGIC || itemtype == sscANYKEYNOMAGIC - || itemtype == sscGENKEYMAGIC || itemtype == sscANYKEYMAGIC) - { - value += game->get_keys(); - } - - if(itemtype == sscLEVKEYNOMAGIC || itemtype == sscANYKEYNOMAGIC - || itemtype == sscLEVKEYMAGIC || itemtype == sscANYKEYMAGIC) - { - value += game->get_lkeys(); - } - break; - - case sscSCRIPT1: - case sscSCRIPT2: - case sscSCRIPT3: - case sscSCRIPT4: - case sscSCRIPT5: - case sscSCRIPT6: - case sscSCRIPT7: - case sscSCRIPT8: - case sscSCRIPT9: - case sscSCRIPT10: - case sscSCRIPT11: - case sscSCRIPT12: - case sscSCRIPT13: - case sscSCRIPT14: - case sscSCRIPT15: - case sscSCRIPT16: - case sscSCRIPT17: - case sscSCRIPT18: - case sscSCRIPT19: - case sscSCRIPT20: - case sscSCRIPT21: - case sscSCRIPT22: - case sscSCRIPT23: - case sscSCRIPT24: - case sscSCRIPT25: - { - value += game->get_counter(itemtype-3); - break; - } - - default: - { - break; - } - } - + add_ssc_ctr(itemtype,infinite,value,true); } } @@ -5944,36 +5808,33 @@ int32_t scounter_to_ctr(int32_t ssc) case sscBOMBS: return crBOMBS; case sscSBOMBS: return crSBOMBS; case sscARROWS: return crARROWS; - case sscSCRIPT1: return crCUSTOM1; - case sscSCRIPT2: return crCUSTOM2; - case sscSCRIPT3: return crCUSTOM3; - case sscSCRIPT4: return crCUSTOM4; - case sscSCRIPT5: return crCUSTOM5; - case sscSCRIPT6: return crCUSTOM6; - case sscSCRIPT7: return crCUSTOM7; - case sscSCRIPT8: return crCUSTOM8; - case sscSCRIPT9: return crCUSTOM9; - case sscSCRIPT10: return crCUSTOM10; - case sscSCRIPT11: return crCUSTOM11; - case sscSCRIPT12: return crCUSTOM12; - case sscSCRIPT13: return crCUSTOM13; - case sscSCRIPT14: return crCUSTOM14; - case sscSCRIPT15: return crCUSTOM15; - case sscSCRIPT16: return crCUSTOM16; - case sscSCRIPT17: return crCUSTOM17; - case sscSCRIPT18: return crCUSTOM18; - case sscSCRIPT19: return crCUSTOM19; - case sscSCRIPT20: return crCUSTOM20; - case sscSCRIPT21: return crCUSTOM21; - case sscSCRIPT22: return crCUSTOM22; - case sscSCRIPT23: return crCUSTOM23; - case sscSCRIPT24: return crCUSTOM24; - case sscSCRIPT25: return crCUSTOM25; case sscLIFE: return crLIFE; case sscMAGIC: return crMAGIC; case sscGENKEYMAGIC: case sscGENKEYNOMAGIC: case sscANYKEYMAGIC: case sscANYKEYNOMAGIC: return crKEYS; + case sscSCRIPT1: case sscSCRIPT2: case sscSCRIPT3: case sscSCRIPT4: case sscSCRIPT5: + case sscSCRIPT6: case sscSCRIPT7: case sscSCRIPT8: case sscSCRIPT9: case sscSCRIPT10: + case sscSCRIPT11: case sscSCRIPT12: case sscSCRIPT13: case sscSCRIPT14: case sscSCRIPT15: + case sscSCRIPT16: case sscSCRIPT17: case sscSCRIPT18: case sscSCRIPT19: case sscSCRIPT20: + case sscSCRIPT21: case sscSCRIPT22: case sscSCRIPT23: case sscSCRIPT24: case sscSCRIPT25: + return ssc-3; + case sscSCRIPT26: case sscSCRIPT27: case sscSCRIPT28: case sscSCRIPT29: case sscSCRIPT30: + case sscSCRIPT31: case sscSCRIPT32: case sscSCRIPT33: case sscSCRIPT34: case sscSCRIPT35: + case sscSCRIPT36: case sscSCRIPT37: case sscSCRIPT38: case sscSCRIPT39: case sscSCRIPT40: + case sscSCRIPT41: case sscSCRIPT42: case sscSCRIPT43: case sscSCRIPT44: case sscSCRIPT45: + case sscSCRIPT46: case sscSCRIPT47: case sscSCRIPT48: case sscSCRIPT49: case sscSCRIPT50: + case sscSCRIPT51: case sscSCRIPT52: case sscSCRIPT53: case sscSCRIPT54: case sscSCRIPT55: + case sscSCRIPT56: case sscSCRIPT57: case sscSCRIPT58: case sscSCRIPT59: case sscSCRIPT60: + case sscSCRIPT61: case sscSCRIPT62: case sscSCRIPT63: case sscSCRIPT64: case sscSCRIPT65: + case sscSCRIPT66: case sscSCRIPT67: case sscSCRIPT68: case sscSCRIPT69: case sscSCRIPT70: + case sscSCRIPT71: case sscSCRIPT72: case sscSCRIPT73: case sscSCRIPT74: case sscSCRIPT75: + case sscSCRIPT76: case sscSCRIPT77: case sscSCRIPT78: case sscSCRIPT79: case sscSCRIPT80: + case sscSCRIPT81: case sscSCRIPT82: case sscSCRIPT83: case sscSCRIPT84: case sscSCRIPT85: + case sscSCRIPT86: case sscSCRIPT87: case sscSCRIPT88: case sscSCRIPT89: case sscSCRIPT90: + case sscSCRIPT91: case sscSCRIPT92: case sscSCRIPT93: case sscSCRIPT94: case sscSCRIPT95: + case sscSCRIPT96: case sscSCRIPT97: case sscSCRIPT98: case sscSCRIPT99: case sscSCRIPT100: + return ssc-7; } return crNONE; } diff --git a/src/subscr.h b/src/subscr.h index 0cf16c803c..0537bb5fb6 100644 --- a/src/subscr.h +++ b/src/subscr.h @@ -106,14 +106,30 @@ enum { ssmstSSVINETILE, ssmstMAGICMETER, ssmstMAX }; // counter objects enum { sscRUPEES, sscBOMBS, sscSBOMBS, sscARROWS, - sscGENKEYMAGIC, sscGENKEYNOMAGIC, sscLEVKEYMAGIC, sscLEVKEYNOMAGIC, - sscANYKEYMAGIC, sscANYKEYNOMAGIC, sscSCRIPT1, sscSCRIPT2, - sscSCRIPT3, sscSCRIPT4, sscSCRIPT5, sscSCRIPT6, - sscSCRIPT7, sscSCRIPT8, sscSCRIPT9, sscSCRIPT10, - sscSCRIPT11, sscSCRIPT12, sscSCRIPT13, sscSCRIPT14, - sscSCRIPT15, sscSCRIPT16, sscSCRIPT17, sscSCRIPT18, - sscSCRIPT19, sscSCRIPT20, sscSCRIPT21, sscSCRIPT22, - sscSCRIPT23, sscSCRIPT24, sscSCRIPT25, sscLIFE, sscMAGIC, sscMAXHP, sscMAXMP, sscMAX + sscGENKEYMAGIC, sscGENKEYNOMAGIC, sscLEVKEYMAGIC, sscLEVKEYNOMAGIC, + sscANYKEYMAGIC, sscANYKEYNOMAGIC, sscSCRIPT1, sscSCRIPT2, + sscSCRIPT3, sscSCRIPT4, sscSCRIPT5, sscSCRIPT6, + sscSCRIPT7, sscSCRIPT8, sscSCRIPT9, sscSCRIPT10, + sscSCRIPT11, sscSCRIPT12, sscSCRIPT13, sscSCRIPT14, + sscSCRIPT15, sscSCRIPT16, sscSCRIPT17, sscSCRIPT18, + sscSCRIPT19, sscSCRIPT20, sscSCRIPT21, sscSCRIPT22, + sscSCRIPT23, sscSCRIPT24, sscSCRIPT25, sscLIFE, sscMAGIC, sscMAXHP, sscMAXMP, + sscSCRIPT26, sscSCRIPT27, sscSCRIPT28, sscSCRIPT29, sscSCRIPT30, + sscSCRIPT31, sscSCRIPT32, sscSCRIPT33, sscSCRIPT34, sscSCRIPT35, + sscSCRIPT36, sscSCRIPT37, sscSCRIPT38, sscSCRIPT39, sscSCRIPT40, + sscSCRIPT41, sscSCRIPT42, sscSCRIPT43, sscSCRIPT44, sscSCRIPT45, + sscSCRIPT46, sscSCRIPT47, sscSCRIPT48, sscSCRIPT49, sscSCRIPT50, + sscSCRIPT51, sscSCRIPT52, sscSCRIPT53, sscSCRIPT54, sscSCRIPT55, + sscSCRIPT56, sscSCRIPT57, sscSCRIPT58, sscSCRIPT59, sscSCRIPT60, + sscSCRIPT61, sscSCRIPT62, sscSCRIPT63, sscSCRIPT64, sscSCRIPT65, + sscSCRIPT66, sscSCRIPT67, sscSCRIPT68, sscSCRIPT69, sscSCRIPT70, + sscSCRIPT71, sscSCRIPT72, sscSCRIPT73, sscSCRIPT74, sscSCRIPT75, + sscSCRIPT76, sscSCRIPT77, sscSCRIPT78, sscSCRIPT79, sscSCRIPT80, + sscSCRIPT81, sscSCRIPT82, sscSCRIPT83, sscSCRIPT84, sscSCRIPT85, + sscSCRIPT86, sscSCRIPT87, sscSCRIPT88, sscSCRIPT89, sscSCRIPT90, + sscSCRIPT91, sscSCRIPT92, sscSCRIPT93, sscSCRIPT94, sscSCRIPT95, + sscSCRIPT96, sscSCRIPT97, sscSCRIPT98, sscSCRIPT99, sscSCRIPT100, + sscMAX }; int32_t scounter_to_ctr(int32_t ssc); diff --git a/src/zc/saves.cpp b/src/zc/saves.cpp index eb9d124437..d1b9ff6ef6 100644 --- a/src/zc/saves.cpp +++ b/src/zc/saves.cpp @@ -673,9 +673,15 @@ static int32_t read_saves(ReadMode read_mode, std::string filename, std::vector< } } - if(section_version>2) + if(section_version>2) //read counters { - for(int32_t j=0; j<32; j++) + word num_ctr = 32; + if(section_version > 32) + { + if(!p_igetw(&num_ctr,f)) + return 109; + } + for(int32_t j=0; j19) @@ -1274,7 +1286,19 @@ static int32_t write_save(PACKFILE* f, save_t* save) } } - for(int32_t j=0; j<32; j++) + word num_ctr = 0; + for(auto c = MAX_COUNTERS-1; c >= 0; --c) + { + //Find the last counter that isn't unused + if(game.get_counter(c) || game.get_maxcounter(c) || game.get_dcounter(c)) + { + num_ctr = c+1; + break; + } + } + if(!p_iputw(num_ctr, f)) + return 109; + for(int32_t j=0; j
    \n
  1. CR_NONE
  2. \n
  3. CR_LIFE
  4. \n
  5. CR_RUPEES
  6. \n
  7. CR_BOMBS
  8. \n
  9. CR_ARROWS
  10. \n
  11. CR_MAGIC
  12. \n
  13. CR_KEYS
  14. \n
  15. CR_SBOMBS
  16. \n
  17. CR_CUSTOM1
  18. \n
  19. CR_CUSTOM2
  20. \n
  21. CR_CUSTOM3
  22. \n
  23. CR_CUSTOM4
  24. \n
  25. CR_CUSTOM5
  26. \n
  27. CR_CUSTOM6
  28. \n
  29. CR_CUSTOM7
  30. \n
  31. CR_CUSTOM8
  32. \n
  33. CR_CUSTOM9
    \n
  1. CR_CUSTOM10
  2. \n
  3. CR_CUSTOM11
  4. \n
  5. CR_CUSTOM12
  6. \n
  7. CR_CUSTOM13
  8. \n
  9. CR_CUSTOM14
  10. \n
  11. CR_CUSTOM15
  12. \n
  13. CR_CUSTOM16
  14. \n
  15. CR_CUSTOM17
  16. \n
  17. CR_CUSTOM18
  18. \n
  19. CR_CUSTOM19
  20. \n
  21. CR_CUSTOM20
  22. \n
  23. CR_CUSTOM21
  24. \n
  25. CR_CUSTOM22
  26. \n
  27. CR_CUSTOM23
  28. \n
  29. CR_CUSTOM24
  30. \n
  31. CR_CUSTOM25
" + "val": "
    \n
  1. CR_NONE
  2. \n
  3. CR_LIFE
  4. \n
  5. CR_RUPEES
  6. \n
  7. CR_BOMBS
  8. \n
  9. CR_ARROWS
  10. \n
  11. CR_MAGIC
  12. \n
  13. CR_KEYS
  14. \n
  15. CR_SBOMBS
  16. \n
  17. CR_CUSTOM1
  18. \n
  19. CR_CUSTOM2
  20. \n
  21. CR_CUSTOM3
  22. \n
  23. CR_CUSTOM4
  24. \n
  25. CR_CUSTOM5
  26. \n
  27. CR_CUSTOM6
  28. \n
  29. CR_CUSTOM7
  30. \n
  31. CR_CUSTOM8
  32. \n
  33. CR_CUSTOM9
  34. \n
  35. CR_CUSTOM10
  36. \n
  37. CR_CUSTOM11
  38. \n
  39. CR_CUSTOM12
  40. \n
  41. CR_CUSTOM13
  42. \n
  43. CR_CUSTOM14
  44. \n
  45. CR_CUSTOM15
  46. \n
  47. CR_CUSTOM16
  48. \n
  49. CR_CUSTOM17
  50. \n
  51. CR_CUSTOM18
    \n
  1. CR_CUSTOM19
  2. \n
  3. CR_CUSTOM20
  4. \n
  5. CR_CUSTOM21
  6. \n
  7. CR_CUSTOM22
  8. \n
  9. CR_CUSTOM23
  10. \n
  11. CR_CUSTOM24
  12. \n
  13. CR_CUSTOM25
  14. \n
  15. CR_CUSTOM26
  16. \n
  17. CR_CUSTOM27
  18. \n
  19. CR_CUSTOM28
  20. \n
  21. CR_CUSTOM29
  22. \n
  23. CR_CUSTOM30
  24. \n
  25. CR_CUSTOM31
  26. \n
  27. CR_CUSTOM32
  28. \n
  29. CR_CUSTOM33
  30. \n
  31. CR_CUSTOM34
  32. \n
  33. CR_CUSTOM35
  34. \n
  35. CR_CUSTOM36
  36. \n
  37. CR_CUSTOM37
  38. \n
  39. CR_CUSTOM38
  40. \n
  41. CR_CUSTOM39
  42. \n
  43. CR_CUSTOM40
  44. \n
  45. CR_CUSTOM41
  46. \n
  47. CR_CUSTOM42
  48. \n
  49. CR_CUSTOM43
    \n
  1. CR_CUSTOM44
  2. \n
  3. CR_CUSTOM45
  4. \n
  5. CR_CUSTOM46
  6. \n
  7. CR_CUSTOM47
  8. \n
  9. CR_CUSTOM48
  10. \n
  11. CR_CUSTOM49
  12. \n
  13. CR_CUSTOM50
  14. \n
  15. CR_CUSTOM51
  16. \n
  17. CR_CUSTOM52
  18. \n
  19. CR_CUSTOM53
  20. \n
  21. CR_CUSTOM54
  22. \n
  23. CR_CUSTOM55
  24. \n
  25. CR_CUSTOM56
  26. \n
  27. CR_CUSTOM57
  28. \n
  29. CR_CUSTOM58
  30. \n
  31. CR_CUSTOM59
  32. \n
  33. CR_CUSTOM60
  34. \n
  35. CR_CUSTOM61
  36. \n
  37. CR_CUSTOM62
  38. \n
  39. CR_CUSTOM63
  40. \n
  41. CR_CUSTOM64
  42. \n
  43. CR_CUSTOM65
  44. \n
  45. CR_CUSTOM66
  46. \n
  47. CR_CUSTOM67
  48. \n
  49. CR_CUSTOM68
    \n
  1. CR_CUSTOM69
  2. \n
  3. CR_CUSTOM70
  4. \n
  5. CR_CUSTOM71
  6. \n
  7. CR_CUSTOM72
  8. \n
  9. CR_CUSTOM73
  10. \n
  11. CR_CUSTOM74
  12. \n
  13. CR_CUSTOM75
  14. \n
  15. CR_CUSTOM76
  16. \n
  17. CR_CUSTOM77
  18. \n
  19. CR_CUSTOM78
  20. \n
  21. CR_CUSTOM79
  22. \n
  23. CR_CUSTOM80
  24. \n
  25. CR_CUSTOM81
  26. \n
  27. CR_CUSTOM82
  28. \n
  29. CR_CUSTOM83
  30. \n
  31. CR_CUSTOM84
  32. \n
  33. CR_CUSTOM85
  34. \n
  35. CR_CUSTOM86
  36. \n
  37. CR_CUSTOM87
  38. \n
  39. CR_CUSTOM88
  40. \n
  41. CR_CUSTOM89
  42. \n
  43. CR_CUSTOM90
  44. \n
  45. CR_CUSTOM91
  46. \n
  47. CR_CUSTOM92
  48. \n
  49. CR_CUSTOM93
    \n
  1. CR_CUSTOM94
  2. \n
  3. CR_CUSTOM95
  4. \n
  5. CR_CUSTOM96
  6. \n
  7. CR_CUSTOM97
  8. \n
  9. CR_CUSTOM98
  10. \n
  11. CR_CUSTOM99
  12. \n
  13. CR_CUSTOM100
" }, { "name": "OBJTYPE_",