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.47 by root, Fri May 11 21:24:29 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 if (op->type == PLAYER)
1329 animate_object (op, op->facing);
1330 else
1331 animate_object (op, op->direction); 1317 animate_object (op, op->contr ? op->facing : op->direction);
1332 1318
1333 if (QUERY_FLAG (op, FLAG_SEE_ANYWHERE)) 1319 if (QUERY_FLAG (op, FLAG_SEE_ANYWHERE))
1334 make_sure_seen (op); 1320 make_sure_seen (op);
1335 } 1321 }
1336 1322
1323 if (op->flag [FLAG_GENERATOR]
1324 || op->flag [FLAG_CHANGING]
1325 || op->flag [FLAG_IS_USED_UP])
1326 {
1337 if (QUERY_FLAG (op, FLAG_CHANGING) && !op->state) 1327 if (QUERY_FLAG (op, FLAG_CHANGING) && !op->state)
1338 { 1328 {
1339 change_object (op); 1329 change_object (op);
1340 return 1; 1330 return;
1341 } 1331 }
1342 1332
1343 if (QUERY_FLAG (op, FLAG_GENERATOR) && !QUERY_FLAG (op, FLAG_FRIENDLY)) 1333 if (QUERY_FLAG (op, FLAG_GENERATOR) && !QUERY_FLAG (op, FLAG_FRIENDLY))
1344 generate_monster (op); 1334 generate_monster (op);
1345 1335
1346 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)
1347 { 1337 {
1348 if (QUERY_FLAG (op, FLAG_APPLIED)) 1338 if (QUERY_FLAG (op, FLAG_APPLIED))
1349 remove_force (op); 1339 remove_force (op);
1350 else 1340 else
1351 { 1341 {
1352 /* IF necessary, delete the item from the players inventory */ 1342 /* If necessary, delete the item from the players inventory */
1353 object *pl = op->in_player (); 1343 object *pl = op->in_player ();
1354 1344
1355 if (pl) 1345 if (pl)
1356 esrv_del_item (pl->contr, op->count); 1346 esrv_del_item (pl->contr, op->count);
1357 1347
1358 op->remove (); 1348 op->remove ();
1359 1349
1360 if (QUERY_FLAG (op, FLAG_SEE_ANYWHERE)) 1350 if (QUERY_FLAG (op, FLAG_SEE_ANYWHERE))
1361 make_sure_not_seen (op); 1351 make_sure_not_seen (op);
1362 1352
1363 op->destroy (); 1353 op->destroy ();
1364 } 1354 }
1365 1355
1366 return 1; 1356 return;
1357 }
1367 } 1358 }
1368 1359
1369 switch (op->type) 1360 switch (op->type)
1370 { 1361 {
1371 case SPELL_EFFECT: 1362 case SPELL_EFFECT:
1372 move_spell_effect (op); 1363 move_spell_effect (op);
1373 return 1; 1364 break;
1374 1365
1375 case ROD: 1366 case ROD:
1376 case HORN: 1367 case HORN:
1377 regenerate_rod (op); 1368 regenerate_rod (op);
1378 return 1; 1369 break;
1379 1370
1380 case FORCE: 1371 case FORCE:
1381 case POTION_EFFECT: 1372 case POTION_EFFECT:
1382 remove_force (op); 1373 remove_force (op);
1383 return 1; 1374 break;
1384 1375
1385 case BLINDNESS: 1376 case BLINDNESS:
1386 remove_blindness (op); 1377 remove_blindness (op);
1387 return 0; 1378 break;
1388 1379
1389 case POISONING: 1380 case POISONING:
1390 poison_more (op); 1381 poison_more (op);
1391 return 0; 1382 break;
1392 1383
1393 case DISEASE: 1384 case DISEASE:
1394 move_disease (op); 1385 move_disease (op);
1395 return 0; 1386 break;
1396 1387
1397 case SYMPTOM: 1388 case SYMPTOM:
1398 move_symptom (op); 1389 move_symptom (op);
1399 return 0; 1390 break;
1400 1391
1401 case THROWN_OBJ: 1392 case THROWN_OBJ:
1402 case ARROW: 1393 case ARROW:
1403 move_arrow (op); 1394 move_arrow (op);
1404 return 0; 1395 break;
1405 1396
1406 case DOOR: 1397 case DOOR:
1407 remove_door (op); 1398 remove_door (op);
1408 return 0; 1399 break;
1409 1400
1410 case LOCKED_DOOR: 1401 case LOCKED_DOOR:
1411 remove_door2 (op); 1402 remove_door2 (op);
1412 return 0; 1403 break;
1413 1404
1414 case TELEPORTER: 1405 case TELEPORTER:
1415 move_teleporter (op); 1406 move_teleporter (op);
1416 return 0; 1407 break;
1417 1408
1418 case GOLEM: 1409 case GOLEM:
1419 move_golem (op); 1410 move_golem (op);
1420 return 0; 1411 break;
1421 1412
1422 case EARTHWALL: 1413 case EARTHWALL:
1423 hit_player (op, 2, op, AT_PHYSICAL, 1); 1414 hit_player (op, 2, op, AT_PHYSICAL, 1);
1424 return 0; 1415 break;
1425 1416
1426 case FIREWALL: 1417 case FIREWALL:
1427 move_firewall (op); 1418 move_firewall (op);
1428 if (op->stats.maxsp) 1419 if (op->stats.maxsp)
1429 animate_turning (op); 1420 animate_turning (op);
1430 return 0; 1421 break;
1431 1422
1432 case MOOD_FLOOR: 1423 case MOOD_FLOOR:
1433 do_mood_floor (op); 1424 do_mood_floor (op);
1434 return 0; 1425 break;
1435 1426
1436 case GATE: 1427 case GATE:
1437 move_gate (op); 1428 move_gate (op);
1438 return 0; 1429 break;
1439 1430
1440 case TIMED_GATE: 1431 case TIMED_GATE:
1441 move_timed_gate (op); 1432 move_timed_gate (op);
1442 return 0; 1433 break;
1443 1434
1444 case TRIGGER: 1435 case TRIGGER:
1445 case TRIGGER_BUTTON: 1436 case TRIGGER_BUTTON:
1446 case TRIGGER_PEDESTAL: 1437 case TRIGGER_PEDESTAL:
1447 case TRIGGER_ALTAR: 1438 case TRIGGER_ALTAR:
1448 animate_trigger (op); 1439 animate_trigger (op);
1449 return 0; 1440 break;
1450 1441
1451 case DETECTOR: 1442 case DETECTOR:
1452 move_detector (op); 1443 move_detector (op);
1453 1444
1454 case DIRECTOR: 1445 case DIRECTOR:
1455 if (op->stats.maxsp) 1446 if (op->stats.maxsp)
1456 animate_turning (op); 1447 animate_turning (op);
1457 return 0; 1448 break;
1458 1449
1459 case HOLE: 1450 case HOLE:
1460 move_hole (op); 1451 move_hole (op);
1461 return 0; 1452 break;
1462 1453
1463 case DEEP_SWAMP: 1454 case DEEP_SWAMP:
1464 move_deep_swamp (op); 1455 move_deep_swamp (op);
1465 return 0; 1456 break;
1466 1457
1467 case RUNE: 1458 case RUNE:
1468 case TRAP: 1459 case TRAP:
1469 move_rune (op); 1460 move_rune (op);
1470 return 0; 1461 break;
1471 1462
1472 case PLAYERMOVER: 1463 case PLAYERMOVER:
1473 move_player_mover (op); 1464 move_player_mover (op);
1474 return 0; 1465 break;
1475 1466
1476 case CREATOR: 1467 case CREATOR:
1477 move_creator (op); 1468 move_creator (op);
1478 return 0; 1469 break;
1479 1470
1480 case MARKER: 1471 case MARKER:
1481 move_marker (op); 1472 move_marker (op);
1482 return 0; 1473 break;
1483 1474
1484 case PLAYER_CHANGER: 1475 case PLAYER_CHANGER:
1485 move_player_changer (op); 1476 move_player_changer (op);
1486 return 0; 1477 break;
1487 1478
1488 case PEACEMAKER: 1479 case PEACEMAKER:
1489 move_peacemaker (op); 1480 move_peacemaker (op);
1490 return 0; 1481 break;
1491 }
1492 1482
1493 return 0; 1483 case PLAYER:
1484 // players have their own speed-management, so undo the --speed_left
1485 ++op->speed_left;
1486 break;
1487 }
1494} 1488}
1489

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines