Да, щиты в коде:
(09.07.2021 01:11)Berserker Wrote: Щиты снайперов и иже с ним прочие wog-способности
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;
}
}
}
Тут нужно определяться, кого конкретно хотим отключить. И делать это патчем. По-хорошему вынести бы эти способности в скрипт.
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
|