X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FAwards.cpp;h=959c69907f34d8caa05e8747a7c90ab4bf140f95;hb=2ce8e2f8ac6921286ebd6b30362c35b38e935977;hp=8640bdf948b2eea78184becff7b1066dbbc2171c;hpb=fb33deea78909d498c363d973cda2c5d0d334314;p=lugaru.git diff --git a/Source/Awards.cpp b/Source/Awards.cpp index 8640bdf..959c699 100644 --- a/Source/Awards.cpp +++ b/Source/Awards.cpp @@ -28,6 +28,23 @@ float bonusvalue; float bonustotal; float startbonustotal; float bonustime; +float bonusnum[100]; + +static const int bonus_values[bonus_count] = { +#define DECLARE_BONUS(id, name, value, ...) value, +#include "Bonuses.def" +#undef DECLARE_BONUS +}; + +void +award_bonus(int playerid, int bonusid, int alt_value) +{ + if (playerid != 0) + return; + bonus = bonusid; + bonustime = 0; + bonusvalue = alt_value ? alt_value : bonus_values[bonusid]; +} // FIXME: make these per-player float damagetaken; @@ -50,78 +67,81 @@ int maxalarmed; int award_awards(int *awards) { - int numawards = 0, i; - if(damagetaken==0&&player[0].bloodloss==0){ - awards[numawards]=awardflawless; - numawards++; - } - bool alldead = true; - for(i=1;i0){ - awards[numawards]=awardbojutsu; - numawards++; - } - if(numattacks==numswordattack&&numattacks>0){ - awards[numawards]=awardswordsman; - numawards++; - } - if(numattacks==numknifeattack&&numattacks>0){ - awards[numawards]=awardknifefighter; - numawards++; - } - if(numattacks==numunarmedattack&&numthrowkill==0&&weapons.numweapons>0){ - awards[numawards]=awardkungfu; - numawards++; - } - if(numescaped>0){ - awards[numawards]=awardevasion; - numawards++; - } - if(numflipfail==0&&numflipped+numwallflipped*2>20){ - awards[numawards]=awardacrobat; - numawards++; - } - if(numthrowkill==numplayers-1){ - awards[numawards]=awardlongrange; - numawards++; - } - alldead=1; - for(i=1;i0&&alldead){ - awards[numawards]=awardbrutal; - numawards++; - } - if(numreversals>((float)numattacks)*.8&&numreversals>3){ - awards[numawards]=awardaikido; - numawards++; - } - if(maxalarmed==1&&numplayers>2){ - awards[numawards]=awardstrategy; - numawards++; - } - if(numflipfail>3){ - awards[numawards]=awardklutz; - numawards++; - } - return numawards; + int numawards = 0, i; + if (damagetaken == 0 && Person::players[0]->bloodloss == 0) { + awards[numawards] = awardflawless; + numawards++; + } + bool alldead = true; + for (i = 1; i < numplayers; i++) { + if (Person::players[i]->dead != 2) + alldead = 0; + } + if (alldead) { + awards[numawards] = awardalldead; + numawards++; + } + alldead = 1; + for (i = 1; i < numplayers; i++) { + if (Person::players[i]->dead != 1) + alldead = 0; + } + if (alldead) { + awards[numawards] = awardnodead; + numawards++; + } + if (numresponded == 0 && !numthrowkill) { + awards[numawards] = awardstealth; + numawards++; + } + if (numattacks == numstaffattack && numattacks > 0) { + awards[numawards] = awardbojutsu; + numawards++; + } + if (numattacks == numswordattack && numattacks > 0) { + awards[numawards] = awardswordsman; + numawards++; + } + if (numattacks == numknifeattack && numattacks > 0) { + awards[numawards] = awardknifefighter; + numawards++; + } + if (numattacks == numunarmedattack && numthrowkill == 0 && weapons.size() > 0) { + awards[numawards] = awardkungfu; + numawards++; + } + if (numescaped > 0) { + awards[numawards] = awardevasion; + numawards++; + } + if (numflipfail == 0 && numflipped + numwallflipped * 2 > 20) { + awards[numawards] = awardacrobat; + numawards++; + } + if (numthrowkill == numplayers - 1) { + awards[numawards] = awardlongrange; + numawards++; + } + alldead = 1; + for (i = 1; i < numplayers; i++) { + if (Person::players[i]->dead != 2) + alldead = 0; + } + if (numafterkill > 0 && alldead) { + awards[numawards] = awardbrutal; + numawards++; + } + if (numreversals > ((float)numattacks)*.8 && numreversals > 3) { + awards[numawards] = awardaikido; + numawards++; + } + if (maxalarmed == 1 && numplayers > 2) { + awards[numawards] = awardstrategy; + numawards++; + } + if (numflipfail > 3) { + awards[numawards] = awardklutz; + numawards++; + } + return numawards; }