(09.07.2021 01:11)Berserker Wrote: Щиты снайперов и иже с ним прочие wog-способности Spoiler (Click to View) Code: static void _SetUpBeforeBattle2(void) { #include "templ.h" int i,j,tp; Byte *bm=(Byte *)SUBB_BatMan; Byte *mon; // _Hero_ *hp1=(_Hero_ *)*(Dword *)&bm[0x53CC]; // _Hero_ *hp2=(_Hero_ *)*(Dword *)&bm[0x53D0]; NMT_First=0; // Сброс для Санта Гремлина и других, кто иниц. после тактики /////////// PlaceNPCAtBattleStart(bm); // CrExpBon::PrepareBFExpStructure(bm); // if(bm[0x13D68]==0){ // NO tactic phase *(int *)&((Byte *)bm)[0x13D6C]=0; // clear the turn index // } for(i=0;i<(21*2);i++){ mon=&bm[0x54CC+0x548*i]; *(int *)&mon[0x288]=0; // not being hypnotized *(int *)&mon[0xF4] =i/21; // initial side // 3.58 Tower skip if(i==20) continue; // 3.58 if(i==41) continue; // 3.58 mon=&bm[0x54CC+0x548*i]; // AdjustStackParams(/*bm,*/mon,0); // 3.58 Creature experience CrExpBon::Apply(mon); tp=*(int *)&mon[0x34]; if((tp>=174)&&(tp<=191)){ AddMagic2NPC(mon,bm); } if(tp==152){ // титан SetMonMagic(mon,28,1000,3,0); // воздушный щит } if(tp==156){ // чудище *(int *)&mon[0x454]=2; } if(tp==158){ // феникс SetMonMagic(mon,0x1D,1000,1,0); // огненный щит SetMonMagic(mon,55,1000,3,0); // палач } if(tp==195){ // Hell Steed (fire horse) SetMonMagic(mon,0x1D,1000,1,0); // огненный щит } if((tp>=GODMONTSTRT)&&(tp<(GODMONTSTRT+GODMONTNUM))){ // бог *(int *)&mon[0x454]=0; // не отвечает на атаку } if(tp==164){ // огненный голем SetMonMagic(mon,31,1000,3,0); // защита от огня } if(tp==165){ // огненный голем SetMonMagic(mon,33,1000,3,0); // защита от земли } if(tp==166){ // огненный голем SetMonMagic(mon,30,1000,3,0); // защита от воздуха } if(tp==167){ // огненный голем SetMonMagic(mon,32,1000,3,0); // защита от воды } if(tp==169){ // белый монах SetMonMagic(mon,36,1000,3,0); // волшебное зеркало } if(tp==170){ // белый шутер SetMonMagic(mon,28,1000,3,0); // воздушный щит } if(tp==171){ // красный шутер SetMonMagic(mon,0x1D,1000,1,0); // огненный щит } if(tp==192){ // Centaur-Elf SetMonMagic(mon,49,1000,3,0); // Mirth } for(j=0;j<100;j++){ if(MonsterOfWeek[j]==-1) break; if(tp==MonsterOfWeek[j]){ // монстр недели SetMonMagic(mon,48,1000,3,0); // воздушный щит } } CrExpBon::ApplySpell(mon,bm); // CrExpBon::ApplyMassSpell(mon); if(tp==0x95){ // башня _CastleSetup_ *cp; cp=(_CastleSetup_ *)*(Dword *)&bm[0x53C8]; if(IsCastleSetup(cp)==1){ // замок SetTowerBunus(cp,mon); /* int side=*(int *)&mon[0xF4]; // сторона _Hero_ *htmp; _Hero_ *hpo=(_Hero_ *)*(Dword *)&bm[0x53CC]; _Hero_ *hpe=(_Hero_ *)*(Dword *)&bm[0x53D0]; if(side!=0){ htmp=hpo; hpo=hpe; hpe=htmp; } if((hpo!=0)&&(HeroHasArt(hpo,0x8E))){ // свой // *(int *)&mon[0x4C]=99; } */ } } Code: static void _SetUpNewRound(void) { #include "templ.h" int j; Byte *sgp,*bmp=(Byte *)SUNR_BatMan; Byte *mon=(Byte *)SUNR_Mon; int tp=*(int *)&mon[0x34]; // Byte *bm=(Byte *)SUNR_BatMan; // _Hero_ *hp1=(_Hero_ *)*(Dword *)&bm[0x53CC]; // _Hero_ *hp2=(_Hero_ *)*(Dword *)&bm[0x53D0]; if((tp>=174)&&(tp<=191)){ AddMagic2NPC(mon,bmp); } CrExpBon::Apply2(mon); if(tp==152){ // титан SetMonMagic(mon,28,1000,3,0); // воздушный щит } if(tp==156){ // чудище *(int *)&mon[0x454]=2; // отвечает дважды } if(tp==158){ // феникс SetMonMagic(mon,0x1D,1000,1,0); // огненный щит SetMonMagic(mon,55,1000,3,0); // палач } if(tp==195){ // Hell Steed (fire horse) SetMonMagic(mon,0x1D,1000,1,0); // огненный щит } for(j=0;j<100;j++){ if(MonsterOfWeek[j]==-1) break; if(tp==MonsterOfWeek[j]){ // монстр недели SetMonMagic(mon,48,1000,3,0); // воздушный щит } } if((tp>=GODMONTSTRT)&&(tp<(GODMONTSTRT+GODMONTNUM))){ // бог *(int *)&mon[0x454]=0; // не отвечает на атаку } if(tp==164){ // огненный голем SetMonMagic(mon,31,1000,3,0); // защита от огня } if(tp==165){ // огненный голем SetMonMagic(mon,33,1000,3,0); // защита от земли } if(tp==166){ // огненный голем SetMonMagic(mon,30,1000,3,0); // защита от воздуха } if(tp==167){ // огненный голем SetMonMagic(mon,32,1000,3,0); // защита от воды } if(tp==169){ // белый монах SetMonMagic(mon,36,1000,3,0); // волшебное зеркало } if(tp==170){ // белый шутер SetMonMagic(mon,28,1000,3,0); // воздушный щит } if(tp==171){ // красный шутер SetMonMagic(mon,0x1D,1000,1,0); // огненный щит } if(tp==192){ // Centaur-Elf SetMonMagic(mon,49,1000,3,0); // Mirth } CrExpBon::ApplySpell(mon,bmp); for(j=0;j<SG_GuardsSet;j++){ if(SG_GuardsSetUp[j].own_stack!=-1){ sgp=&bmp[0x54CC+0x548*SG_GuardsSetUp[j].sg_stack]; if((*(int *)&sgp[0x4C])<=0){ sgp=&bmp[0x54CC+0x548*SG_GuardsSetUp[j].own_stack]; *(int *)&sgp[0xC4]=SG_GuardsSetUp[j].own_speed; } } }
static void _SetUpBeforeBattle2(void) { #include "templ.h" int i,j,tp; Byte *bm=(Byte *)SUBB_BatMan; Byte *mon; // _Hero_ *hp1=(_Hero_ *)*(Dword *)&bm[0x53CC]; // _Hero_ *hp2=(_Hero_ *)*(Dword *)&bm[0x53D0]; NMT_First=0; // Сброс для Санта Гремлина и других, кто иниц. после тактики /////////// PlaceNPCAtBattleStart(bm); // CrExpBon::PrepareBFExpStructure(bm); // if(bm[0x13D68]==0){ // NO tactic phase *(int *)&((Byte *)bm)[0x13D6C]=0; // clear the turn index // } for(i=0;i<(21*2);i++){ mon=&bm[0x54CC+0x548*i]; *(int *)&mon[0x288]=0; // not being hypnotized *(int *)&mon[0xF4] =i/21; // initial side // 3.58 Tower skip if(i==20) continue; // 3.58 if(i==41) continue; // 3.58 mon=&bm[0x54CC+0x548*i]; // AdjustStackParams(/*bm,*/mon,0); // 3.58 Creature experience CrExpBon::Apply(mon); tp=*(int *)&mon[0x34]; if((tp>=174)&&(tp<=191)){ AddMagic2NPC(mon,bm); } if(tp==152){ // титан SetMonMagic(mon,28,1000,3,0); // воздушный щит } if(tp==156){ // чудище *(int *)&mon[0x454]=2; } if(tp==158){ // феникс SetMonMagic(mon,0x1D,1000,1,0); // огненный щит SetMonMagic(mon,55,1000,3,0); // палач } if(tp==195){ // Hell Steed (fire horse) SetMonMagic(mon,0x1D,1000,1,0); // огненный щит } if((tp>=GODMONTSTRT)&&(tp<(GODMONTSTRT+GODMONTNUM))){ // бог *(int *)&mon[0x454]=0; // не отвечает на атаку } if(tp==164){ // огненный голем SetMonMagic(mon,31,1000,3,0); // защита от огня } if(tp==165){ // огненный голем SetMonMagic(mon,33,1000,3,0); // защита от земли } if(tp==166){ // огненный голем SetMonMagic(mon,30,1000,3,0); // защита от воздуха } if(tp==167){ // огненный голем SetMonMagic(mon,32,1000,3,0); // защита от воды } if(tp==169){ // белый монах SetMonMagic(mon,36,1000,3,0); // волшебное зеркало } if(tp==170){ // белый шутер SetMonMagic(mon,28,1000,3,0); // воздушный щит } if(tp==171){ // красный шутер SetMonMagic(mon,0x1D,1000,1,0); // огненный щит } if(tp==192){ // Centaur-Elf SetMonMagic(mon,49,1000,3,0); // Mirth } for(j=0;j<100;j++){ if(MonsterOfWeek[j]==-1) break; if(tp==MonsterOfWeek[j]){ // монстр недели SetMonMagic(mon,48,1000,3,0); // воздушный щит } } CrExpBon::ApplySpell(mon,bm); // CrExpBon::ApplyMassSpell(mon); if(tp==0x95){ // башня _CastleSetup_ *cp; cp=(_CastleSetup_ *)*(Dword *)&bm[0x53C8]; if(IsCastleSetup(cp)==1){ // замок SetTowerBunus(cp,mon); /* int side=*(int *)&mon[0xF4]; // сторона _Hero_ *htmp; _Hero_ *hpo=(_Hero_ *)*(Dword *)&bm[0x53CC]; _Hero_ *hpe=(_Hero_ *)*(Dword *)&bm[0x53D0]; if(side!=0){ htmp=hpo; hpo=hpe; hpe=htmp; } if((hpo!=0)&&(HeroHasArt(hpo,0x8E))){ // свой // *(int *)&mon[0x4C]=99; } */ } }
static void _SetUpNewRound(void) { #include "templ.h" int j; Byte *sgp,*bmp=(Byte *)SUNR_BatMan; Byte *mon=(Byte *)SUNR_Mon; int tp=*(int *)&mon[0x34]; // Byte *bm=(Byte *)SUNR_BatMan; // _Hero_ *hp1=(_Hero_ *)*(Dword *)&bm[0x53CC]; // _Hero_ *hp2=(_Hero_ *)*(Dword *)&bm[0x53D0]; if((tp>=174)&&(tp<=191)){ AddMagic2NPC(mon,bmp); } CrExpBon::Apply2(mon); if(tp==152){ // титан SetMonMagic(mon,28,1000,3,0); // воздушный щит } if(tp==156){ // чудище *(int *)&mon[0x454]=2; // отвечает дважды } if(tp==158){ // феникс SetMonMagic(mon,0x1D,1000,1,0); // огненный щит SetMonMagic(mon,55,1000,3,0); // палач } if(tp==195){ // Hell Steed (fire horse) SetMonMagic(mon,0x1D,1000,1,0); // огненный щит } for(j=0;j<100;j++){ if(MonsterOfWeek[j]==-1) break; if(tp==MonsterOfWeek[j]){ // монстр недели SetMonMagic(mon,48,1000,3,0); // воздушный щит } } if((tp>=GODMONTSTRT)&&(tp<(GODMONTSTRT+GODMONTNUM))){ // бог *(int *)&mon[0x454]=0; // не отвечает на атаку } if(tp==164){ // огненный голем SetMonMagic(mon,31,1000,3,0); // защита от огня } if(tp==165){ // огненный голем SetMonMagic(mon,33,1000,3,0); // защита от земли } if(tp==166){ // огненный голем SetMonMagic(mon,30,1000,3,0); // защита от воздуха } if(tp==167){ // огненный голем SetMonMagic(mon,32,1000,3,0); // защита от воды } if(tp==169){ // белый монах SetMonMagic(mon,36,1000,3,0); // волшебное зеркало } if(tp==170){ // белый шутер SetMonMagic(mon,28,1000,3,0); // воздушный щит } if(tp==171){ // красный шутер SetMonMagic(mon,0x1D,1000,1,0); // огненный щит } if(tp==192){ // Centaur-Elf SetMonMagic(mon,49,1000,3,0); // Mirth } CrExpBon::ApplySpell(mon,bmp); for(j=0;j<SG_GuardsSet;j++){ if(SG_GuardsSetUp[j].own_stack!=-1){ sgp=&bmp[0x54CC+0x548*SG_GuardsSetUp[j].sg_stack]; if((*(int *)&sgp[0x4C])<=0){ sgp=&bmp[0x54CC+0x548*SG_GuardsSetUp[j].own_stack]; *(int *)&sgp[0xC4]=SG_GuardsSetUp[j].own_speed; } } }