]> git.jsancho.org Git - lugaru.git/blob - Source/Awards.cpp
726eaec8d1d9cdbb5696bb818b014e39b40d1c12
[lugaru.git] / Source / Awards.cpp
1 /*
2 Copyright (C) 2010 - Lugaru authors
3
4 This file is part of Lugaru.
5
6 Lugaru is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public License
8 as published by the Free Software Foundation; either version 2
9 of the License, or (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14
15 See the GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20 */
21
22 #include "Awards.h"
23 #include "Person.h"
24 #include "Game.h"
25
26 int bonus;
27 float bonusvalue;
28 float bonustotal;
29 float startbonustotal;
30 float bonustime;
31 float bonusnum[100];
32
33 static const int bonus_values[bonus_count] = {
34 #define DECLARE_BONUS(id, name, value, ...) value,
35 #include "Bonuses.def"
36 #undef DECLARE_BONUS
37 };
38
39 void
40 award_bonus(int playerid, int bonusid, int alt_value)
41 {
42   if (playerid != 0)
43     return;
44   bonus = bonusid;
45   bonustime = 0;
46   bonusvalue = alt_value ? alt_value : bonus_values[bonusid];
47 }
48
49 // FIXME: make these per-player
50 float damagetaken;
51 int numfalls;
52 int numflipfail;
53 int numseen;
54 int numresponded;
55 int numstaffattack;
56 int numswordattack;
57 int numknifeattack;
58 int numunarmedattack;
59 int numescaped;
60 int numflipped;
61 int numwallflipped;
62 int numthrowkill;
63 int numafterkill;
64 int numreversals;
65 int numattacks;
66 int maxalarmed;
67
68 int award_awards(int *awards)
69 {
70   int numawards = 0, i;
71   if(damagetaken==0&&player[0].bloodloss==0){
72     awards[numawards]=awardflawless;
73     numawards++;
74   }
75   bool alldead = true;
76   for(i=1;i<numplayers;i++){
77     if(player[i].dead!=2)alldead=0;
78   }
79   if(alldead){
80     awards[numawards]=awardalldead;
81     numawards++;
82   }
83   alldead=1;
84   for(i=1;i<numplayers;i++){
85     if(player[i].dead!=1)alldead=0;
86   }
87   if(alldead){
88     awards[numawards]=awardnodead;
89     numawards++;
90   }
91   if(numresponded==0&&!numthrowkill){
92     awards[numawards]=awardstealth;
93     numawards++;
94   }
95   if(numattacks==numstaffattack&&numattacks>0){
96     awards[numawards]=awardbojutsu;
97     numawards++;
98   }
99   if(numattacks==numswordattack&&numattacks>0){
100     awards[numawards]=awardswordsman;
101     numawards++;
102   }
103   if(numattacks==numknifeattack&&numattacks>0){
104     awards[numawards]=awardknifefighter;
105     numawards++;
106   }
107   if(numattacks==numunarmedattack&&numthrowkill==0&&weapons.size()>0){
108     awards[numawards]=awardkungfu;
109     numawards++;
110   }
111   if(numescaped>0){
112     awards[numawards]=awardevasion;
113     numawards++;
114   }
115   if(numflipfail==0&&numflipped+numwallflipped*2>20){
116     awards[numawards]=awardacrobat;
117     numawards++;
118   }
119   if(numthrowkill==numplayers-1){
120     awards[numawards]=awardlongrange;
121     numawards++;
122   }
123   alldead=1;
124   for(i=1;i<numplayers;i++){
125     if(player[i].dead!=2)alldead=0;
126   }
127   if(numafterkill>0&&alldead){
128     awards[numawards]=awardbrutal;
129     numawards++;
130   }
131   if(numreversals>((float)numattacks)*.8&&numreversals>3){
132     awards[numawards]=awardaikido;
133     numawards++;
134   }
135   if(maxalarmed==1&&numplayers>2){
136     awards[numawards]=awardstrategy;
137     numawards++;
138   }
139   if(numflipfail>3){
140     awards[numawards]=awardklutz;
141     numawards++;
142   }
143   return numawards;
144 }