Enemy Target Selection

Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
master
sigonasr2 2 years ago
parent be3a8fd996
commit e3decd2fd4
  1. BIN
      C++ProjectTemplate
  2. 72
      main.cpp

Binary file not shown.

@ -347,9 +347,10 @@ namespace Battle{
}
class Entity{
public:
private:
int HP=0;
int targetHP=0;
public:
int maxHP=0;
int PP=0;
int targetPP=0;
@ -378,6 +379,30 @@ class Entity{
this->targetHP=HP;
this->targetPP=PP;
}
//Get the HP that the rolling counter is moving towards.
int GetTargetHP() {
return targetHP;
}
//Gets the current actual health of the target.
int GetHP() {
return HP;
}
//Sets the rolling counter target to this health value.
void SetTargetHP(int hp) {
targetHP=hp;
}
//Subtracts from the rolling counter target from this health value.
void SubtractHP(int hp) {
targetHP-=hp;
}
//Adds to the rolling counter target from this health value.
void AddHP(int hp) {
targetHP=std::clamp(HP+hp,0,maxHP);
}
//THIS IS FOR SPECIAL USE CASES ONLY! Normally you want to touch the rolling counter amount instead using SetTargetHP()!
void _SetDirectHP(int hp) {
HP=hp;
}
};
class Encounter{
@ -391,7 +416,7 @@ class Encounter{
:id(id),pos(pos),objs(objs),chance(chance),playerPos(playerPos){}
bool IsEncounterAlive() {
for (int i=0;i<objs.size();i++) {
if (objs[i]->HP>0) {
if (objs[i]->GetHP()>0) {
return true;
}
}
@ -661,15 +686,15 @@ goes on a very long time, I hope you can understand this is only for testing pur
for (int j=0;j<3;j++) {
switch (j) {
case 0:{
player_rollhp_display[i][j]=member->HP%10;
player_rollhp_display[i][j]=member->GetHP()%10;
player_rollpp_display[i][j]=member->PP%10;
}break;
case 1:{
player_rollhp_display[i][j]=member->HP/10%10;
player_rollhp_display[i][j]=member->GetHP()/10%10;
player_rollpp_display[i][j]=member->PP/10%10;
}break;
case 2:{
player_rollhp_display[i][j]=member->HP/100%10;
player_rollhp_display[i][j]=member->GetHP()/100%10;
player_rollpp_display[i][j]=member->PP/100%10;
}break;
}
@ -682,11 +707,11 @@ goes on a very long time, I hope you can understand this is only for testing pur
case BattleState::WAIT:{
for (int i=0;i<PARTY_MEMBER_COUNT;i++) {
Entity*member=PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]];
if (member->HP>std::clamp(member->targetHP,0,member->targetHP)) {
if (member->GetHP()>std::clamp(member->GetTargetHP(),0,member->GetTargetHP())) {
if (player_rollhp_counter[i][0]<=0) {
player_rollhp_display[i][0]--;
player_rollhp_counter[i][0]=13;
member->HP--;
member->_SetDirectHP(member->GetHP()-1);
if (player_rollhp_display[i][0]<0) {
player_rollhp_display[i][0]=9;
player_rollhp_counter[i][0]=13;
@ -701,11 +726,11 @@ goes on a very long time, I hope you can understand this is only for testing pur
}
}
if (player_rollhp_counter[i][0]>0) {
if (member->targetHP<-member->maxHP) {
player_rollhp_counter[i][0]-=HEALTH_ROLLING_SPEED+(member->maxHP-member->targetHP)/10;
if (member->GetTargetHP()<-member->maxHP) {
player_rollhp_counter[i][0]-=HEALTH_ROLLING_SPEED+(member->maxHP-member->GetTargetHP())/10;
} else
if (member->targetHP<0) {
player_rollhp_counter[i][0]-=HEALTH_ROLLING_SPEED+(member->maxHP-member->targetHP)/20;
if (member->GetTargetHP()<0) {
player_rollhp_counter[i][0]-=HEALTH_ROLLING_SPEED+(member->maxHP-member->GetTargetHP())/20;
} else {
player_rollhp_counter[i][0]-=HEALTH_ROLLING_SPEED;
}
@ -717,11 +742,11 @@ goes on a very long time, I hope you can understand this is only for testing pur
player_rollhp_counter[i][2]--;
}
} else
if (member->HP<member->targetHP) {
if (member->GetHP()<member->GetTargetHP()) {
if (player_rollhp_counter[i][0]>=0) {
player_rollhp_display[i][0]++;
player_rollhp_counter[i][0]=-13;
member->HP++;
member->_SetDirectHP(member->GetHP()+1);
if (player_rollhp_display[i][0]>9) {
player_rollhp_display[i][0]=0;
player_rollhp_counter[i][0]=-13;
@ -825,6 +850,9 @@ goes on a very long time, I hope you can understand this is only for testing pur
//Enemy picks a random move from the movelist. And a random target.
BATTLE_ENCOUNTER->objs[i]->selectedMove=BATTLE_ENCOUNTER->objs[i]->moveSet[rand()%BATTLE_ENCOUNTER->objs[i]->moveSet.size()];
BATTLE_ENCOUNTER->objs[i]->channelTimeRemaining=BATTLE_ENCOUNTER->objs[i]->selectedMove->channelTime;
do {
BATTLE_ENCOUNTER->objs[i]->selectedTarget=-rand()%PARTY_MEMBER_COUNT-1;
} while (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-BATTLE_ENCOUNTER->objs[i]->selectedTarget-1]]->GetHP()<=0);
printf(" %s chose move %s.\n",BATTLE_ENCOUNTER->objs[i]->obj->name.c_str(),BATTLE_ENCOUNTER->objs[i]->selectedMove->name.c_str());
BATTLE_STATE=BattleState::WAIT;
BATTLE_SELECTION_CURSOR=0;
@ -1355,14 +1383,14 @@ goes on a very long time, I hope you can understand this is only for testing pur
//Set Default Target.
if (BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[-CURRENT_TURN-1]][POWER_GRADE_CURSOR[-CURRENT_TURN-1]]->friendly) {
for (int i=0;i<PARTY_MEMBER_COUNT;i++) {
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->HP>0||getProperty(Property::REVIVE,BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[-CURRENT_TURN-1]][POWER_GRADE_CURSOR[-CURRENT_TURN-1]])) {
if (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[i]]->GetHP()>0||getProperty(Property::REVIVE,BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[-CURRENT_TURN-1]][POWER_GRADE_CURSOR[-CURRENT_TURN-1]])) {
SELECTED_TARGET=-i-1;
break;
}
}
} else {
for (int i=0;i<BATTLE_ENCOUNTER->objs.size();i++) {
if (BATTLE_ENCOUNTER->objs[i]->HP>0) {
if (BATTLE_ENCOUNTER->objs[i]->GetHP()>0) {
SELECTED_TARGET=i;
break;
}
@ -1379,14 +1407,14 @@ goes on a very long time, I hope you can understand this is only for testing pur
if (SELECTED_TARGET==0) {
SELECTED_TARGET=-4;
}
} while (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-SELECTED_TARGET-1]]->HP<=0&&!getProperty(Property::REVIVE,BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[-CURRENT_TURN-1]][POWER_GRADE_CURSOR[-CURRENT_TURN-1]]));
} while (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-SELECTED_TARGET-1]]->GetHP()<=0&&!getProperty(Property::REVIVE,BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[-CURRENT_TURN-1]][POWER_GRADE_CURSOR[-CURRENT_TURN-1]]));
} else {
do {
SELECTED_TARGET--;
if (SELECTED_TARGET<0) {
SELECTED_TARGET=BATTLE_ENCOUNTER->objs.size()-1;
}
} while (BATTLE_ENCOUNTER->objs[SELECTED_TARGET]->HP<=0);
} while (BATTLE_ENCOUNTER->objs[SELECTED_TARGET]->GetHP()<=0);
}
}
if (RightPressed()) {
@ -1396,11 +1424,11 @@ goes on a very long time, I hope you can understand this is only for testing pur
if (SELECTED_TARGET<-PARTY_MEMBER_COUNT) {
SELECTED_TARGET=-1;
}
} while (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-SELECTED_TARGET-1]]->HP<=0&&!getProperty(Property::REVIVE,BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[-CURRENT_TURN-1]][POWER_GRADE_CURSOR[-CURRENT_TURN-1]]));
} while (PARTY_MEMBER_STATS[PARTY_MEMBER_ID[-SELECTED_TARGET-1]]->GetHP()<=0&&!getProperty(Property::REVIVE,BATTLE_MOVELIST_DISPLAY[POWER_SELECTION_CURSOR[-CURRENT_TURN-1]][POWER_GRADE_CURSOR[-CURRENT_TURN-1]]));
} else {
do {
SELECTED_TARGET=(SELECTED_TARGET+1)%BATTLE_ENCOUNTER->objs.size();
} while (BATTLE_ENCOUNTER->objs[SELECTED_TARGET]->HP<=0);
} while (BATTLE_ENCOUNTER->objs[SELECTED_TARGET]->GetHP()<=0);
}
}
if (UpPressed()) {
@ -1793,7 +1821,7 @@ goes on a very long time, I hope you can understand this is only for testing pur
}
}
DrawStringDecal(hpTextPos,"HP",olc::BLACK);
DrawRollingCounter(hpTextPos,member->HP,player_rollhp_display[i],player_rollhp_counter[i]);
DrawRollingCounter(hpTextPos,member->GetHP(),player_rollhp_display[i],player_rollhp_counter[i]);
const olc::vi2d mpTextPos = {box.x+5,hpTextPos.y+17};
for (int x=-1;x<=1;x++) {
for (int y=-1;y<=1;y++) {
@ -2694,7 +2722,7 @@ goes on a very long time, I hope you can understand this is only for testing pur
for (int i=0;i<ENCOUNTER_LIST[id]->objs.size();i++) {
Entity*ent=ENCOUNTER_LIST[id]->objs[i];
Object*newObj=new Object(ent->obj->id,ent->obj->name,ent->obj->GetPos(),ent->obj->spr,ent->obj->GetScale(),ent->obj->color,ent->obj->animationSpd,ent->obj->temp);
ents.push_back(new Entity(newObj,ent->HP,ent->maxHP,ent->PP,ent->maxPP,ent->baseAtk,ent->resistances,ent->speed,ent->moveSet,ent->damageReduction,ent->smart,ent->dumb));
ents.push_back(new Entity(newObj,ent->GetHP(),ent->maxHP,ent->PP,ent->maxPP,ent->baseAtk,ent->resistances,ent->speed,ent->moveSet,ent->damageReduction,ent->smart,ent->dumb));
}
Encounter*data=new Encounter(id,pos,ENCOUNTER_LIST[id]->playerPos,ents,chance);
data->chance=chance;
@ -2702,7 +2730,7 @@ goes on a very long time, I hope you can understand this is only for testing pur
for (int i=0;i<data->objs.size();i++) {
data->objs[i]->obj->enc=true;
if (!successful) {
data->objs[i]->HP=0;
data->objs[i]->_SetDirectHP(0);
data->objs[i]->obj->dead=true;
}
}

Loading…
Cancel
Save