]> git.jsancho.org Git - lugaru.git/blob - Source/Awards.cpp
426ad7a334fb28798f3338fdb4ba0c1a39b25aae
[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 }