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

Comparing deliantra/server/server/time.C (file contents):
Revision 1.48 by root, Sat May 12 21:56:35 2007 UTC vs.
Revision 1.51 by root, Fri May 18 20:45:37 2007 UTC

41 object *tmp; 41 object *tmp;
42 42
43 for (i = 1; i < 9; i += 2) 43 for (i = 1; i < 9; i += 2)
44 if ((tmp = present (DOOR, op->map, op->x + freearr_x[i], op->y + freearr_y[i])) != NULL) 44 if ((tmp = present (DOOR, op->map, op->x + freearr_x[i], op->y + freearr_y[i])) != NULL)
45 { 45 {
46 tmp->set_speed (0.1); 46 tmp->set_speed (0.1f);
47 tmp->speed_left = -0.2; 47 tmp->speed_left = -0.2f;
48 } 48 }
49 49
50 if (op->other_arch) 50 if (op->other_arch)
51 { 51 {
52 tmp = arch_to_object (op->other_arch); 52 tmp = arch_to_object (op->other_arch);
69 for (i = 1; i < 9; i += 2) 69 for (i = 1; i < 9; i += 2)
70 { 70 {
71 tmp = present (LOCKED_DOOR, op->map, op->x + freearr_x[i], op->y + freearr_y[i]); 71 tmp = present (LOCKED_DOOR, op->map, op->x + freearr_x[i], op->y + freearr_y[i]);
72 if (tmp && tmp->slaying == op->slaying) 72 if (tmp && tmp->slaying == op->slaying)
73 { /* same key both doors */ 73 { /* same key both doors */
74 tmp->set_speed (0.1); 74 tmp->set_speed (0.1f);
75 tmp->speed_left = -0.2; 75 tmp->speed_left = -0.2f;
76 } 76 }
77 } 77 }
78 78
79 if (op->other_arch) 79 if (op->other_arch)
80 { 80 {
1039 * it'll paralyze the victim for hp*his speed/op->speed 1039 * it'll paralyze the victim for hp*his speed/op->speed
1040 */ 1040 */
1041void 1041void
1042move_player_mover (object *op) 1042move_player_mover (object *op)
1043{ 1043{
1044 object *victim, *nextmover;
1045 int dir = op->stats.sp; 1044 int dir = op->stats.sp;
1046 sint16 nx, ny; 1045 sint16 nx, ny;
1047 maptile *m; 1046 maptile *m;
1048 1047
1049 /* Determine direction now for random movers so we do the right thing */ 1048 /* Determine direction now for random movers so we do the right thing */
1050 if (!dir) 1049 if (!dir)
1051 dir = rndm (1, 8); 1050 dir = rndm (1, 8);
1052 1051
1053 for (victim = GET_MAP_OB (op->map, op->x, op->y); victim != NULL; victim = victim->above) 1052 for (object *victim = op->ms ().bot; victim; victim = victim->above)
1054 { 1053 {
1055 if (QUERY_FLAG (victim, FLAG_ALIVE) && !QUERY_FLAG (victim, FLAG_WIZPASS) && 1054 if (QUERY_FLAG (victim, FLAG_ALIVE) && !QUERY_FLAG (victim, FLAG_WIZPASS) &&
1056 (victim->move_type & op->move_type || !victim->move_type)) 1055 (victim->move_type & op->move_type || !victim->move_type))
1057 { 1056 {
1058 1057
1075 } 1074 }
1076 1075
1077 if (should_director_abort (op, victim)) 1076 if (should_director_abort (op, victim))
1078 return; 1077 return;
1079 1078
1080 for (nextmover = GET_MAP_OB (m, nx, ny); nextmover != NULL; nextmover = nextmover->above) 1079 for (object *nextmover = m->at (nx, ny).bot; nextmover; nextmover = nextmover->above)
1081 { 1080 {
1082 if (nextmover->type == PLAYERMOVER) 1081 if (nextmover->type == PLAYERMOVER)
1083 nextmover->speed_left = -.99; 1082 nextmover->speed_left = -.99f;
1083
1084 if (QUERY_FLAG (nextmover, FLAG_ALIVE)) 1084 if (QUERY_FLAG (nextmover, FLAG_ALIVE))
1085 {
1086 op->speed_left = -1.1; /* wait until the next thing gets out of the way */ 1085 op->speed_left = -1.1f; /* wait until the next thing gets out of the way */
1087 }
1088 } 1086 }
1089 1087
1090 if (victim->type == PLAYER) 1088 if (victim->type == PLAYER)
1091 { 1089 {
1092 /* only level >=1 movers move people */ 1090 /* only level >=1 movers move people */
1096 * is cleared, otherwise the player will get stuck in 1094 * is cleared, otherwise the player will get stuck in
1097 * place. This can happen if the player used a spell to 1095 * place. This can happen if the player used a spell to
1098 * get to this space. 1096 * get to this space.
1099 */ 1097 */
1100 victim->contr->fire_on = 0; 1098 victim->contr->fire_on = 0;
1101 victim->speed_left = -FABS (victim->speed); 1099 victim->speed_left = 0.f;
1102 move_player (victim, dir); 1100 move_player (victim, dir);
1103 } 1101 }
1104 else 1102 else
1105 return; 1103 return;
1106 } 1104 }
1110 if (!op->stats.maxsp && op->attacktype) 1108 if (!op->stats.maxsp && op->attacktype)
1111 op->stats.maxsp = 2; 1109 op->stats.maxsp = 2;
1112 1110
1113 if (op->attacktype) 1111 if (op->attacktype)
1114 { /* flag to paralyze the player */ 1112 { /* flag to paralyze the player */
1115
1116 victim->speed_left = -FABS (op->stats.maxsp * victim->speed / op->speed); 1113 victim->speed_left = max (-5.f, -FABS (op->stats.maxsp * victim->speed / op->speed));
1117 /* Not sure why, but for some chars on metalforge, they
1118 * would sometimes get -inf speed_left, and from the
1119 * description, it could only happen here, so just put
1120 * a lower sanity limit. My only guess is that the
1121 * mover has 0 speed.
1122 */
1123 if (victim->speed_left < -5.0)
1124 victim->speed_left = -5.0;
1125 } 1114 }
1126 } 1115 }
1127 } 1116 }
1128} 1117}
1129 1118
1308 } 1297 }
1309 } 1298 }
1310 } 1299 }
1311} 1300}
1312 1301
1313int 1302void
1314process_object (object *op) 1303process_object (object *op)
1315{ 1304{
1316 if (QUERY_FLAG (op, FLAG_IS_A_TEMPLATE)) 1305 if (QUERY_FLAG (op, FLAG_IS_A_TEMPLATE))
1317 return 0; 1306 return;
1318 1307
1319 if (INVOKE_OBJECT (TICK, op)) 1308 if (INVOKE_OBJECT (TICK, op))
1320 return 0; 1309 return;
1321 1310
1322 if (QUERY_FLAG (op, FLAG_MONSTER)) 1311 if (QUERY_FLAG (op, FLAG_MONSTER))
1323 if (move_monster (op) || QUERY_FLAG (op, FLAG_FREED)) 1312 if (move_monster (op) || QUERY_FLAG (op, FLAG_FREED))
1324 return 1; 1313 return;
1325 1314
1326 if (QUERY_FLAG (op, FLAG_ANIMATE) && op->anim_speed == 0) 1315 if (QUERY_FLAG (op, FLAG_ANIMATE) && op->anim_speed == 0)
1327 { 1316 {
1328 animate_object (op, op->contr ? op->facing : op->direction); 1317 animate_object (op, op->contr ? op->facing : op->direction);
1329 1318
1330 if (QUERY_FLAG (op, FLAG_SEE_ANYWHERE)) 1319 if (QUERY_FLAG (op, FLAG_SEE_ANYWHERE))
1331 make_sure_seen (op); 1320 make_sure_seen (op);
1332 } 1321 }
1333 1322
1323 if (op->flag [FLAG_GENERATOR]
1324 || op->flag [FLAG_CHANGING]
1325 || op->flag [FLAG_IS_USED_UP])
1326 {
1334 if (QUERY_FLAG (op, FLAG_CHANGING) && !op->state) 1327 if (QUERY_FLAG (op, FLAG_CHANGING) && !op->state)
1335 { 1328 {
1336 change_object (op); 1329 change_object (op);
1337 return 1; 1330 return;
1338 } 1331 }
1339 1332
1340 if (QUERY_FLAG (op, FLAG_GENERATOR) && !QUERY_FLAG (op, FLAG_FRIENDLY)) 1333 if (QUERY_FLAG (op, FLAG_GENERATOR) && !QUERY_FLAG (op, FLAG_FRIENDLY))
1341 generate_monster (op); 1334 generate_monster (op);
1342 1335
1343 if (QUERY_FLAG (op, FLAG_IS_USED_UP) && --op->stats.food <= 0) 1336 if (QUERY_FLAG (op, FLAG_IS_USED_UP) && --op->stats.food <= 0)
1344 { 1337 {
1345 if (QUERY_FLAG (op, FLAG_APPLIED)) 1338 if (QUERY_FLAG (op, FLAG_APPLIED))
1346 remove_force (op); 1339 remove_force (op);
1347 else 1340 else
1348 { 1341 {
1349 /* If necessary, delete the item from the players inventory */ 1342 /* If necessary, delete the item from the players inventory */
1350 object *pl = op->in_player (); 1343 object *pl = op->in_player ();
1351 1344
1352 if (pl) 1345 if (pl)
1353 esrv_del_item (pl->contr, op->count); 1346 esrv_del_item (pl->contr, op->count);
1354 1347
1355 op->remove (); 1348 op->remove ();
1356 1349
1357 if (QUERY_FLAG (op, FLAG_SEE_ANYWHERE)) 1350 if (QUERY_FLAG (op, FLAG_SEE_ANYWHERE))
1358 make_sure_not_seen (op); 1351 make_sure_not_seen (op);
1359 1352
1360 op->destroy (); 1353 op->destroy ();
1361 } 1354 }
1362 1355
1363 return 1; 1356 return;
1357 }
1364 } 1358 }
1365 1359
1366 switch (op->type) 1360 switch (op->type)
1367 { 1361 {
1368 case SPELL_EFFECT: 1362 case SPELL_EFFECT:
1369 move_spell_effect (op); 1363 move_spell_effect (op);
1370 return 1; 1364 break;
1371 1365
1372 case ROD: 1366 case ROD:
1373 case HORN: 1367 case HORN:
1374 regenerate_rod (op); 1368 regenerate_rod (op);
1375 return 1; 1369 break;
1376 1370
1377 case FORCE: 1371 case FORCE:
1378 case POTION_EFFECT: 1372 case POTION_EFFECT:
1379 remove_force (op); 1373 remove_force (op);
1380 return 1; 1374 break;
1381 1375
1382 case BLINDNESS: 1376 case BLINDNESS:
1383 remove_blindness (op); 1377 remove_blindness (op);
1384 return 0; 1378 break;
1385 1379
1386 case POISONING: 1380 case POISONING:
1387 poison_more (op); 1381 poison_more (op);
1388 return 0; 1382 break;
1389 1383
1390 case DISEASE: 1384 case DISEASE:
1391 move_disease (op); 1385 move_disease (op);
1392 return 0; 1386 break;
1393 1387
1394 case SYMPTOM: 1388 case SYMPTOM:
1395 move_symptom (op); 1389 move_symptom (op);
1396 return 0; 1390 break;
1397 1391
1398 case THROWN_OBJ: 1392 case THROWN_OBJ:
1399 case ARROW: 1393 case ARROW:
1400 move_arrow (op); 1394 move_arrow (op);
1401 return 0; 1395 break;
1402 1396
1403 case DOOR: 1397 case DOOR:
1404 remove_door (op); 1398 remove_door (op);
1405 return 0; 1399 break;
1406 1400
1407 case LOCKED_DOOR: 1401 case LOCKED_DOOR:
1408 remove_door2 (op); 1402 remove_door2 (op);
1409 return 0; 1403 break;
1410 1404
1411 case TELEPORTER: 1405 case TELEPORTER:
1412 move_teleporter (op); 1406 move_teleporter (op);
1413 return 0; 1407 break;
1414 1408
1415 case GOLEM: 1409 case GOLEM:
1416 move_golem (op); 1410 move_golem (op);
1417 return 0; 1411 break;
1418 1412
1419 case EARTHWALL: 1413 case EARTHWALL:
1420 hit_player (op, 2, op, AT_PHYSICAL, 1); 1414 hit_player (op, 2, op, AT_PHYSICAL, 1);
1421 return 0; 1415 break;
1422 1416
1423 case FIREWALL: 1417 case FIREWALL:
1424 move_firewall (op); 1418 move_firewall (op);
1425 if (op->stats.maxsp) 1419 if (op->stats.maxsp)
1426 animate_turning (op); 1420 animate_turning (op);
1427 return 0; 1421 break;
1428 1422
1429 case MOOD_FLOOR: 1423 case MOOD_FLOOR:
1430 do_mood_floor (op); 1424 do_mood_floor (op);
1431 return 0; 1425 break;
1432 1426
1433 case GATE: 1427 case GATE:
1434 move_gate (op); 1428 move_gate (op);
1435 return 0; 1429 break;
1436 1430
1437 case TIMED_GATE: 1431 case TIMED_GATE:
1438 move_timed_gate (op); 1432 move_timed_gate (op);
1439 return 0; 1433 break;
1440 1434
1441 case TRIGGER: 1435 case TRIGGER:
1442 case TRIGGER_BUTTON: 1436 case TRIGGER_BUTTON:
1443 case TRIGGER_PEDESTAL: 1437 case TRIGGER_PEDESTAL:
1444 case TRIGGER_ALTAR: 1438 case TRIGGER_ALTAR:
1445 animate_trigger (op); 1439 animate_trigger (op);
1446 return 0; 1440 break;
1447 1441
1448 case DETECTOR: 1442 case DETECTOR:
1449 move_detector (op); 1443 move_detector (op);
1450 1444
1451 case DIRECTOR: 1445 case DIRECTOR:
1452 if (op->stats.maxsp) 1446 if (op->stats.maxsp)
1453 animate_turning (op); 1447 animate_turning (op);
1454 return 0; 1448 break;
1455 1449
1456 case HOLE: 1450 case HOLE:
1457 move_hole (op); 1451 move_hole (op);
1458 return 0; 1452 break;
1459 1453
1460 case DEEP_SWAMP: 1454 case DEEP_SWAMP:
1461 move_deep_swamp (op); 1455 move_deep_swamp (op);
1462 return 0; 1456 break;
1463 1457
1464 case RUNE: 1458 case RUNE:
1465 case TRAP: 1459 case TRAP:
1466 move_rune (op); 1460 move_rune (op);
1467 return 0; 1461 break;
1468 1462
1469 case PLAYERMOVER: 1463 case PLAYERMOVER:
1470 move_player_mover (op); 1464 move_player_mover (op);
1471 return 0; 1465 break;
1472 1466
1473 case CREATOR: 1467 case CREATOR:
1474 move_creator (op); 1468 move_creator (op);
1475 return 0; 1469 break;
1476 1470
1477 case MARKER: 1471 case MARKER:
1478 move_marker (op); 1472 move_marker (op);
1479 return 0; 1473 break;
1480 1474
1481 case PLAYER_CHANGER: 1475 case PLAYER_CHANGER:
1482 move_player_changer (op); 1476 move_player_changer (op);
1483 return 0; 1477 break;
1484 1478
1485 case PEACEMAKER: 1479 case PEACEMAKER:
1486 move_peacemaker (op); 1480 move_peacemaker (op);
1487 return 0; 1481 break;
1488 }
1489 1482
1490 return 0; 1483 case PLAYER:
1484 // players have their own speed-management, so undo the --speed_left
1485 ++op->speed_left;
1486 break;
1487 }
1491} 1488}
1492 1489

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines