ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/compat.C
(Generate patch)

Comparing deliantra/server/common/compat.C (file contents):
Revision 1.3 by root, Fri Nov 6 13:07:28 2009 UTC vs.
Revision 1.8 by root, Sun Apr 4 04:59:20 2010 UTC

1/* 1/*
2 * This file is part of Deliantra, the Roguelike Realtime MMORPG. 2 * This file is part of Deliantra, the Roguelike Realtime MMORPG.
3 * 3 *
4 * Copyright (©) 2005,2006,2007,2008,2009 Marc Alexander Lehmann / Robin Redeker / the Deliantra team 4 * Copyright (©) 2005,2006,2007,2008,2009,2010 Marc Alexander Lehmann / Robin Redeker / the Deliantra team
5 * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team 5 * Copyright (©) 2002 Mark Wedel & Crossfire Development Team
6 * Copyright (©) 1992,2007 Frank Tore Johansen 6 * Copyright (©) 1992 Frank Tore Johansen
7 * 7 *
8 * Deliantra is free software: you can redistribute it and/or modify it under 8 * Deliantra is free software: you can redistribute it and/or modify it under
9 * the terms of the Affero GNU General Public License as published by the 9 * the terms of the Affero GNU General Public License as published by the
10 * Free Software Foundation, either version 3 of the License, or (at your 10 * Free Software Foundation, either version 3 of the License, or (at your
11 * option) any later version. 11 * option) any later version.
57 return 0; 57 return 0;
58} 58}
59 59
60///////////////////////////////////////////////////////////////////////////// 60/////////////////////////////////////////////////////////////////////////////
61 61
62static const char *const fatalmsgs[80] = {
63 "Failed to allocate memory",
64 "Failed repeatedly to load maps",
65 "Hashtable for archetypes is too small",
66 "Too many errors"
67};
68
69/* 62/*
70 * fatal() is meant to be called whenever a fatal signal is intercepted. 63 * fatal() is meant to be called whenever a fatal signal is intercepted.
71 * It will call the emergency_save and the clean_tmp_files functions. 64 * It will call the emergency_save and the clean_tmp_files functions.
72 */ 65 */
66//TODO: only one caller left
73void 67void
74fatal (int err) 68fatal (const char *msg)
75{ 69{
76 LOG (llevError, "Fatal: %s\n", fatalmsgs [err]); 70 LOG (llevError, "FATAL: %s\n", msg);
77 cleanup (fatalmsgs[err], 1); 71 cleanup (msg, 1);
78} 72}
79 73
80///////////////////////////////////////////////////////////////////////////// 74/////////////////////////////////////////////////////////////////////////////
81 75
82/* 76/*
160 * The args are num D size (ie 4d6) [garbled 20010916] 154 * The args are num D size (ie 4d6) [garbled 20010916]
161 */ 155 */
162int 156int
163die_roll (int num, int size, const object *op, int goodbad) 157die_roll (int num, int size, const object *op, int goodbad)
164{ 158{
165 int min, luck, total, i, gotlucky; 159 int min_roll, luck, total, i, gotlucky;
166 160
167 int diff = size; 161 int diff = size;
168 min = 1; 162 min_roll = 1;
169 luck = total = gotlucky = 0; 163 luck = total = gotlucky = 0;
170 int base = diff > 2 ? 20 : 50; /* d2 and d3 are corner cases */ 164 int base = diff > 2 ? 20 : 50; /* d2 and d3 are corner cases */
171 165
172 if (size < 2 || diff < 1) 166 if (size < 2 || diff < 1)
173 { 167 {
178 if (op->type == PLAYER) 172 if (op->type == PLAYER)
179 luck = op->stats.luck; 173 luck = op->stats.luck;
180 174
181 for (i = 0; i < num; i++) 175 for (i = 0; i < num; i++)
182 { 176 {
183 if (rndm (base) < MIN (10, abs (luck)) && !gotlucky) 177 if (rndm (base) < min (10, abs (luck)) && !gotlucky)
184 { 178 {
185 /* we have a winner */ 179 /* we have a winner */
186 gotlucky++; 180 gotlucky++;
187 ((luck > 0) ? (luck = 1) : (luck = -1)); 181 ((luck > 0) ? (luck = 1) : (luck = -1));
188 diff -= luck; 182 diff -= luck;
189 if (diff < 1) 183 if (diff < 1)
190 return (num); /*check again */ 184 return (num); /*check again */
191 ((goodbad) ? (min += luck) : (diff)); 185 ((goodbad) ? (min_roll += luck) : (diff));
192 total += MAX (1, MIN (size, rndm (diff) + min)); 186 total += max (1, min (size, rndm (diff) + min_roll));
193 } 187 }
194 else 188 else
195 total += rndm (size) + 1; 189 total += rndm (size) + 1;
196 } 190 }
197 191

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines