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

Comparing deliantra/server/server/move.C (file contents):
Revision 1.24 by root, Tue May 6 16:55:26 2008 UTC vs.
Revision 1.28 by root, Sat Dec 27 02:31:19 2008 UTC

175 i = find_first_free_spot (op, op->map, x, y); 175 i = find_first_free_spot (op, op->map, x, y);
176 176
177 if (i == -1) 177 if (i == -1)
178 return 0; /* No free spot */ 178 return 0; /* No free spot */
179 179
180 if (op->head != NULL)
181 op = op->head; 180 op = op->head_ ();
182 op->remove (); 181 op->remove ();
182
183 for (tmp = op; tmp != NULL; tmp = tmp->more) 183 for (object *tmp = op; tmp; tmp = tmp->more)
184 {
184 tmp->x = x + freearr_x[i] + (tmp->arch == NULL ? 0 : tmp->arch->x), 185 tmp->x = x + freearr_x[i] + (!tmp->arch ? 0 : tmp->arch->x);
185 tmp->y = y + freearr_y[i] + (tmp->arch == NULL ? 0 : tmp->arch->y); 186 tmp->y = y + freearr_y[i] + (!tmp->arch ? 0 : tmp->arch->y);
187 }
186 188
187 tmp = insert_ob_in_map (op, op->map, originator, 0); 189 op = insert_ob_in_map (op, op->map, originator, 0);
188 if (tmp) 190
189 return 0; 191 return !op;
190 else
191 return 1;
192} 192}
193 193
194/* 194/*
195 * Return value: 1 if object was destroyed, 0 otherwise. 195 * Return value: 1 if object was destroyed, 0 otherwise.
196 * Modified so that instead of passing the 'originator' that had no 196 * Modified so that instead of passing the 'originator' that had no
224 for (i = -5; i < 6; i++) 224 for (i = -5; i < 6; i++)
225 for (j = -5; j < 6; j++) 225 for (j = -5; j < 6; j++)
226 { 226 {
227 if (i == 0 && j == 0) 227 if (i == 0 && j == 0)
228 continue; 228 continue;
229
229 /* Perhaps this should be extended to support tiled maps */ 230 /* Perhaps this should be extended to support tiled maps */
230 if (OUT_OF_REAL_MAP (teleporter->map, teleporter->x + i, teleporter->y + j)) 231 if (OUT_OF_REAL_MAP (teleporter->map, teleporter->x + i, teleporter->y + j))
231 continue; 232 continue;
233
232 other_teleporter = GET_MAP_OB (teleporter->map, teleporter->x + i, teleporter->y + j); 234 other_teleporter = GET_MAP_OB (teleporter->map, teleporter->x + i, teleporter->y + j);
233 235
234 while (other_teleporter) 236 while (other_teleporter)
235 { 237 {
236 if (other_teleporter->type == tele_type) 238 if (other_teleporter->type == tele_type)
237 break; 239 break;
238 other_teleporter = other_teleporter->above; 240 other_teleporter = other_teleporter->above;
239 } 241 }
242
240 if (other_teleporter && !(RANDOM () % ++nrofalt)) 243 if (other_teleporter && !rndm (++nrofalt))
241 altern = other_teleporter; 244 altern = other_teleporter;
242 } 245 }
243 246
244 if (!nrofalt) 247 if (!nrofalt)
245 { 248 {
284 } 287 }
285 288
286 user->remove (); 289 user->remove ();
287 290
288 /* Update location for the object */ 291 /* Update location for the object */
289 for (tmp = user; tmp != NULL; tmp = tmp->more) 292 for (tmp = user; tmp; tmp = tmp->more)
290 { 293 {
291 tmp->x = other_teleporter->x + freearr_x[k] + (tmp->arch == NULL ? 0 : tmp->arch->x); 294 tmp->x = other_teleporter->x + freearr_x[k] + (tmp->arch ? tmp->arch->x : 0);
292 tmp->y = other_teleporter->y + freearr_y[k] + (tmp->arch == NULL ? 0 : tmp->arch->y); 295 tmp->y = other_teleporter->y + freearr_y[k] + (tmp->arch ? tmp->arch->y : 0);
293 } 296 }
297
294 tmp = insert_ob_in_map (user, other_teleporter->map, NULL, 0); 298 tmp = insert_ob_in_map (user, other_teleporter->map, NULL, 0);
295 return (tmp == NULL); 299 return !tmp;
296} 300}
297 301
298void 302void
299recursive_roll (object *op, int dir, object *pusher) 303recursive_roll (object *op, int dir, object *pusher)
300{ 304{
373 op = op->head; 377 op = op->head;
374 378
375 x = op->x + freearr_x[dir]; 379 x = op->x + freearr_x[dir];
376 y = op->y + freearr_y[dir]; 380 y = op->y + freearr_y[dir];
377 381
378 if (!QUERY_FLAG (op, FLAG_CAN_ROLL) || (op->weight && random_roll (0, op->weight / 50000 - 1, pusher, PREFER_LOW) > pusher->stats.Str)) 382 if (!QUERY_FLAG (op, FLAG_CAN_ROLL)
383 || (op->weight && random_roll (0, op->weight / 50000 - 1, pusher, PREFER_LOW)
384 > pusher->stats.Str))
379 return 0; 385 return 0;
380 386
381 m = op->map; 387 m = op->map;
382 flags = get_map_flags (m, &m, x, y, &x, &y); 388 flags = get_map_flags (m, &m, x, y, &x, &y);
383 389

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines