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.42 by root, Sat Mar 17 20:36:05 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 {
87 } 87 }
88 88
89 op->destroy (); 89 op->destroy ();
90} 90}
91 91
92/* Will generate a monster according to content
93 * of generator.
94 */
95void 92void
96generate_monster_inv (object *gen) 93generate_monster (object *gen)
97{ 94{
98 int i;
99 object *op, *head = NULL;
100
101 int qty = 0;
102
103 /* Code below assumes the generator is on a map, as it tries
104 * to place the monster on the map. So if the generator
105 * isn't on a map, complain and exit.
106 */
107 if (gen->map == NULL)
108 {
109 //LOG(llevError,"Generator (%s) not on a map?\n", gen->name);
110 return;
111 }
112 /*First count numer of objects in inv */
113 for (op = gen->inv; op; op = op->below)
114 qty++;
115 if (!qty)
116 {
117 LOG (llevError, "Generator (%s) has no inventory in generate_monster_inv?\n", &gen->name);
118 return; /*No inventory */
119 }
120 qty = rndm (0, qty - 1);
121 for (op = gen->inv; qty; qty--)
122 op = op->below;
123 i = find_free_spot (op, gen->map, gen->x, gen->y, 1, 9);
124 if (i == -1)
125 return;
126 head = object_create_clone (op);
127 CLEAR_FLAG (head, FLAG_IS_A_TEMPLATE);
128 unflag_inv (head, FLAG_IS_A_TEMPLATE);
129 if (rndm (0, 9))
130 generate_artifact (head, gen->map->difficulty);
131 insert_ob_in_map_at (head, gen->map, gen, 0, gen->x + freearr_x[i], gen->y + freearr_y[i]);
132 if (QUERY_FLAG (head, FLAG_FREED))
133 return;
134 if (head->has_random_items ())
135 create_treasure (head->randomitems, head, GT_APPLY, gen->map->difficulty, 0);
136}
137
138void
139generate_monster_arch (object *gen)
140{
141 int i;
142 object *op, *head = NULL, *prev = NULL;
143 archetype *at = gen->other_arch;
144
145 if (!gen->other_arch)
146 return;
147
148 /* Code below assumes the generator is on a map, as it tries
149 * to place the monster on the map. So if the generator
150 * isn't on a map, complain and exit.
151 */
152 if (!gen->map) 95 if (!gen->map)
153 return; 96 return;
154 97
155 i = find_free_spot (&at->clone, gen->map, gen->x, gen->y, 1, 9);
156 if (i == -1)
157 return;
158
159 while (at)
160 {
161 op = arch_to_object (at);
162 op->x = gen->x + freearr_x[i] + at->clone.x;
163 op->y = gen->y + freearr_y[i] + at->clone.y;
164
165 if (head)
166 op->head = head, prev->more = op;
167
168 if (rndm (0, 9))
169 generate_artifact (op, gen->map->difficulty);
170
171 insert_ob_in_map (op, gen->map, gen, 0);
172 if (QUERY_FLAG (op, FLAG_FREED))
173 return;
174
175 if (op->has_random_items ())
176 create_treasure (op->randomitems, op, GT_APPLY, gen->map->difficulty, 0);
177
178 if (head == NULL)
179 head = op;
180
181 prev = op;
182 at = at->more;
183 }
184}
185
186void
187generate_monster (object *gen)
188{
189
190 if (GENERATE_SPEED (gen) && rndm (0, GENERATE_SPEED (gen) - 1)) 98 if (GENERATE_SPEED (gen) && rndm (0, GENERATE_SPEED (gen) - 1))
191 return; 99 return;
192 100
101 object *op;
102
193 if (QUERY_FLAG (gen, FLAG_CONTENT_ON_GEN)) 103 if (QUERY_FLAG (gen, FLAG_CONTENT_ON_GEN))
194 generate_monster_inv (gen); 104 {
105 // either copy one item form the inventory...
106 if (!gen->inv)
107 return;
108
109 // first select one item from the inventory
110 int index = 0;
111 for (object *tmp = gen->inv; tmp; tmp = tmp->below)
112 if (!rndm (++index))
113 op = tmp;
114
115 op = object_create_clone (op);
116
117 CLEAR_FLAG (op, FLAG_IS_A_TEMPLATE);
118 unflag_inv (op, FLAG_IS_A_TEMPLATE);
119 }
195 else 120 else
196 generate_monster_arch (gen); 121 {
122 // ...or use other_arch
123 if (archetype *at = gen->other_arch)
124 op = arch_to_object (at);
125 else
126 return;
127 }
197 128
129 op->expand_tail ();
130
131 int i = find_free_spot (op, gen->map, gen->x, gen->y, 1, 9);
132 if (i >= 0)
133 {
134 if (insert_ob_in_map_at (op, gen->map, gen, 0, gen->x + freearr_x[i], gen->y + freearr_y[i]))
135 {
136 if (rndm (0, 9))
137 generate_artifact (op, gen->map->difficulty);
138
139 if (op->has_random_items ())
140 create_treasure (op->randomitems, op, GT_APPLY, gen->map->difficulty);
141
142 return;
143 }
144 }
145
146 op->destroy ();
198} 147}
199 148
200void 149void
201remove_force (object *op) 150remove_force (object *op)
202{ 151{
271} 220}
272 221
273 222
274void 223void
275move_gate (object *op) 224move_gate (object *op)
276{ /* 1 = going down, 0 = goind up */ 225{ /* 1 = going down, 0 = going up */
277 object *tmp; 226 object *tmp;
278 227
279 if (op->stats.wc < 0 || (int) op->stats.wc >= NUM_ANIMATIONS (op)) 228 if (op->stats.wc < 0 || (int) op->stats.wc >= NUM_ANIMATIONS (op))
280 { 229 {
281 LOG (llevError, "Gate error: animation was %d, max=%d\n", op->stats.wc, NUM_ANIMATIONS (op)); 230 LOG (llevError, "Gate error: animation was %d, max=%d\n", op->stats.wc, NUM_ANIMATIONS (op));
353 */ 302 */
354 if ((int) op->stats.wc >= NUM_ANIMATIONS (op) / 2) 303 if ((int) op->stats.wc >= NUM_ANIMATIONS (op) / 2)
355 { 304 {
356 /* Halfway or further, check blocks */ 305 /* Halfway or further, check blocks */
357 /* First, get the top object on the square. */ 306 /* First, get the top object on the square. */
358 for (tmp = op->above; tmp != NULL && tmp->above != NULL; tmp = tmp->above); 307 for (tmp = op->above; tmp && tmp->above; tmp = tmp->above)
308 ;
359 309
360 if (tmp != NULL) 310 if (tmp)
361 { 311 {
362 if (QUERY_FLAG (tmp, FLAG_ALIVE)) 312 if (QUERY_FLAG (tmp, FLAG_ALIVE))
363 { 313 {
364 hit_player (tmp, random_roll (1, op->stats.dam, tmp, PREFER_LOW), op, AT_PHYSICAL, 1); 314 hit_player (tmp, random_roll (0, op->stats.dam, tmp, PREFER_LOW), op, AT_PHYSICAL, 1);
315
365 if (tmp->type == PLAYER) 316 if (tmp->type == PLAYER)
366 new_draw_info_format (NDI_UNIQUE, 0, tmp, "You are crushed by the %s!", &op->name); 317 new_draw_info_format (NDI_UNIQUE, 0, tmp, "You are crushed by the %s!", &op->name);
367 } 318 }
368 else 319 else
369 /* If the object is not alive, and the object either can 320 /* If the object is not alive, and the object either can
623 return NULL; 574 return NULL;
624 } 575 }
625 576
626 op->set_speed (0); 577 op->set_speed (0);
627 op->direction = 0; 578 op->direction = 0;
628 op->move_on = 0; 579 op->move_on = 0;
629 op->move_type = 0; 580 op->move_type = 0;
581 op->skill = 0; // really?
582
583 // restore original wc, dam, attacktype and slaying
630 op->stats.wc = op->stats.sp; 584 op->stats.wc = op->stats.sp;
631 op->stats.dam = op->stats.hp; 585 op->stats.dam = op->stats.hp;
632 op->attacktype = op->stats.grace; 586 op->attacktype = op->stats.grace;
633 op->slaying = 0;
634 op->skill = 0;
635 587
636 if (op->spellarg != NULL) 588 if (op->spellarg)
637 { 589 {
638 op->slaying = op->spellarg; 590 op->slaying = op->spellarg;
639 free (op->spellarg); 591 free (op->spellarg);
640 op->spellarg = NULL; 592 op->spellarg = 0;
641 } 593 }
642 else 594 else
643 op->slaying = NULL; 595 op->slaying = 0;
644 596
645 /* Reset these to zero, so that object::can_merge will work properly */ 597 /* Reset these to zero, so that object::can_merge will work properly */
646 op->spellarg = NULL; 598 op->spellarg = NULL;
647 op->stats.sp = 0; 599 op->stats.sp = 0;
648 op->stats.hp = 0; 600 op->stats.hp = 0;
677 op->destroy (); 629 op->destroy ();
678 } 630 }
679 else 631 else
680 { 632 {
681 op = fix_stopped_arrow (op); 633 op = fix_stopped_arrow (op);
634
682 if (op) 635 if (op)
683 merge_ob (op, NULL); 636 merge_ob (op, 0);
684 } 637 }
685} 638}
686 639
687/* Move an arrow along its course. op is the arrow or thrown object. 640/* Move an arrow along its course. op is the arrow or thrown object.
688 */ 641 */
1086 * it'll paralyze the victim for hp*his speed/op->speed 1039 * it'll paralyze the victim for hp*his speed/op->speed
1087 */ 1040 */
1088void 1041void
1089move_player_mover (object *op) 1042move_player_mover (object *op)
1090{ 1043{
1091 object *victim, *nextmover;
1092 int dir = op->stats.sp; 1044 int dir = op->stats.sp;
1093 sint16 nx, ny; 1045 sint16 nx, ny;
1094 maptile *m; 1046 maptile *m;
1095 1047
1096 /* 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 */
1097 if (!dir) 1049 if (!dir)
1098 dir = rndm (1, 8); 1050 dir = rndm (1, 8);
1099 1051
1100 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)
1101 { 1053 {
1102 if (QUERY_FLAG (victim, FLAG_ALIVE) && !QUERY_FLAG (victim, FLAG_WIZPASS) && 1054 if (QUERY_FLAG (victim, FLAG_ALIVE) && !QUERY_FLAG (victim, FLAG_WIZPASS) &&
1103 (victim->move_type & op->move_type || !victim->move_type)) 1055 (victim->move_type & op->move_type || !victim->move_type))
1104 { 1056 {
1105 1057
1122 } 1074 }
1123 1075
1124 if (should_director_abort (op, victim)) 1076 if (should_director_abort (op, victim))
1125 return; 1077 return;
1126 1078
1127 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)
1128 { 1080 {
1129 if (nextmover->type == PLAYERMOVER) 1081 if (nextmover->type == PLAYERMOVER)
1130 nextmover->speed_left = -.99; 1082 nextmover->speed_left = -.99f;
1083
1131 if (QUERY_FLAG (nextmover, FLAG_ALIVE)) 1084 if (QUERY_FLAG (nextmover, FLAG_ALIVE))
1132 {
1133 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 */
1134 }
1135 } 1086 }
1136 1087
1137 if (victim->type == PLAYER) 1088 if (victim->type == PLAYER)
1138 { 1089 {
1139 /* only level >=1 movers move people */ 1090 /* only level >=1 movers move people */
1143 * is cleared, otherwise the player will get stuck in 1094 * is cleared, otherwise the player will get stuck in
1144 * place. This can happen if the player used a spell to 1095 * place. This can happen if the player used a spell to
1145 * get to this space. 1096 * get to this space.
1146 */ 1097 */
1147 victim->contr->fire_on = 0; 1098 victim->contr->fire_on = 0;
1148 victim->speed_left = -FABS (victim->speed); 1099 victim->speed_left = 0.f;
1149 move_player (victim, dir); 1100 move_player (victim, dir);
1150 } 1101 }
1151 else 1102 else
1152 return; 1103 return;
1153 } 1104 }
1157 if (!op->stats.maxsp && op->attacktype) 1108 if (!op->stats.maxsp && op->attacktype)
1158 op->stats.maxsp = 2; 1109 op->stats.maxsp = 2;
1159 1110
1160 if (op->attacktype) 1111 if (op->attacktype)
1161 { /* flag to paralyze the player */ 1112 { /* flag to paralyze the player */
1162
1163 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));
1164 /* Not sure why, but for some chars on metalforge, they
1165 * would sometimes get -inf speed_left, and from the
1166 * description, it could only happen here, so just put
1167 * a lower sanity limit. My only guess is that the
1168 * mover has 0 speed.
1169 */
1170 if (victim->speed_left < -5.0)
1171 victim->speed_left = -5.0;
1172 } 1114 }
1173 } 1115 }
1174 } 1116 }
1175} 1117}
1176 1118
1355 } 1297 }
1356 } 1298 }
1357 } 1299 }
1358} 1300}
1359 1301
1360int 1302void
1361process_object (object *op) 1303process_object (object *op)
1362{ 1304{
1363 if (QUERY_FLAG (op, FLAG_IS_A_TEMPLATE)) 1305 if (QUERY_FLAG (op, FLAG_IS_A_TEMPLATE))
1364 return 0; 1306 return;
1365 1307
1366 if (INVOKE_OBJECT (TICK, op)) 1308 if (INVOKE_OBJECT (TICK, op))
1367 return 0; 1309 return;
1368 1310
1369 if (QUERY_FLAG (op, FLAG_MONSTER)) 1311 if (QUERY_FLAG (op, FLAG_MONSTER))
1370 if (move_monster (op) || QUERY_FLAG (op, FLAG_FREED)) 1312 if (move_monster (op) || QUERY_FLAG (op, FLAG_FREED))
1371 return 1; 1313 return;
1372 1314
1373 if (QUERY_FLAG (op, FLAG_ANIMATE) && op->anim_speed == 0) 1315 if (QUERY_FLAG (op, FLAG_ANIMATE) && op->anim_speed == 0)
1374 { 1316 {
1375 if (op->type == PLAYER)
1376 animate_object (op, op->facing);
1377 else
1378 animate_object (op, op->direction); 1317 animate_object (op, op->contr ? op->facing : op->direction);
1379 1318
1380 if (QUERY_FLAG (op, FLAG_SEE_ANYWHERE)) 1319 if (QUERY_FLAG (op, FLAG_SEE_ANYWHERE))
1381 make_sure_seen (op); 1320 make_sure_seen (op);
1382 } 1321 }
1383 1322
1323 if (op->flag [FLAG_GENERATOR]
1324 || op->flag [FLAG_CHANGING]
1325 || op->flag [FLAG_IS_USED_UP])
1326 {
1384 if (QUERY_FLAG (op, FLAG_CHANGING) && !op->state) 1327 if (QUERY_FLAG (op, FLAG_CHANGING) && !op->state)
1385 { 1328 {
1386 change_object (op); 1329 change_object (op);
1387 return 1; 1330 return;
1388 } 1331 }
1389 1332
1390 if (QUERY_FLAG (op, FLAG_GENERATOR) && !QUERY_FLAG (op, FLAG_FRIENDLY)) 1333 if (QUERY_FLAG (op, FLAG_GENERATOR) && !QUERY_FLAG (op, FLAG_FRIENDLY))
1391 generate_monster (op); 1334 generate_monster (op);
1392 1335
1393 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)
1394 { 1337 {
1395 if (QUERY_FLAG (op, FLAG_APPLIED)) 1338 if (QUERY_FLAG (op, FLAG_APPLIED))
1396 remove_force (op); 1339 remove_force (op);
1397 else 1340 else
1398 { 1341 {
1399 /* IF necessary, delete the item from the players inventory */ 1342 /* If necessary, delete the item from the players inventory */
1400 object *pl = op->in_player (); 1343 object *pl = op->in_player ();
1401 1344
1402 if (pl) 1345 if (pl)
1403 esrv_del_item (pl->contr, op->count); 1346 esrv_del_item (pl->contr, op->count);
1404 1347
1405 op->remove (); 1348 op->remove ();
1406 1349
1407 if (QUERY_FLAG (op, FLAG_SEE_ANYWHERE)) 1350 if (QUERY_FLAG (op, FLAG_SEE_ANYWHERE))
1408 make_sure_not_seen (op); 1351 make_sure_not_seen (op);
1409 1352
1410 op->destroy (); 1353 op->destroy ();
1411 } 1354 }
1412 1355
1413 return 1; 1356 return;
1357 }
1414 } 1358 }
1415 1359
1416 switch (op->type) 1360 switch (op->type)
1417 { 1361 {
1418 case SPELL_EFFECT: 1362 case SPELL_EFFECT:
1419 move_spell_effect (op); 1363 move_spell_effect (op);
1420 return 1; 1364 break;
1421 1365
1422 case ROD: 1366 case ROD:
1423 case HORN: 1367 case HORN:
1424 regenerate_rod (op); 1368 regenerate_rod (op);
1425 return 1; 1369 break;
1426 1370
1427 case FORCE: 1371 case FORCE:
1428 case POTION_EFFECT: 1372 case POTION_EFFECT:
1429 remove_force (op); 1373 remove_force (op);
1430 return 1; 1374 break;
1431 1375
1432 case BLINDNESS: 1376 case BLINDNESS:
1433 remove_blindness (op); 1377 remove_blindness (op);
1434 return 0; 1378 break;
1435 1379
1436 case POISONING: 1380 case POISONING:
1437 poison_more (op); 1381 poison_more (op);
1438 return 0; 1382 break;
1439 1383
1440 case DISEASE: 1384 case DISEASE:
1441 move_disease (op); 1385 move_disease (op);
1442 return 0; 1386 break;
1443 1387
1444 case SYMPTOM: 1388 case SYMPTOM:
1445 move_symptom (op); 1389 move_symptom (op);
1446 return 0; 1390 break;
1447 1391
1448 case THROWN_OBJ: 1392 case THROWN_OBJ:
1449 case ARROW: 1393 case ARROW:
1450 move_arrow (op); 1394 move_arrow (op);
1451 return 0; 1395 break;
1452 1396
1453 case DOOR: 1397 case DOOR:
1454 remove_door (op); 1398 remove_door (op);
1455 return 0; 1399 break;
1456 1400
1457 case LOCKED_DOOR: 1401 case LOCKED_DOOR:
1458 remove_door2 (op); 1402 remove_door2 (op);
1459 return 0; 1403 break;
1460 1404
1461 case TELEPORTER: 1405 case TELEPORTER:
1462 move_teleporter (op); 1406 move_teleporter (op);
1463 return 0; 1407 break;
1464 1408
1465 case GOLEM: 1409 case GOLEM:
1466 move_golem (op); 1410 move_golem (op);
1467 return 0; 1411 break;
1468 1412
1469 case EARTHWALL: 1413 case EARTHWALL:
1470 hit_player (op, 2, op, AT_PHYSICAL, 1); 1414 hit_player (op, 2, op, AT_PHYSICAL, 1);
1471 return 0; 1415 break;
1472 1416
1473 case FIREWALL: 1417 case FIREWALL:
1474 move_firewall (op); 1418 move_firewall (op);
1475 if (op->stats.maxsp) 1419 if (op->stats.maxsp)
1476 animate_turning (op); 1420 animate_turning (op);
1477 return 0; 1421 break;
1478 1422
1479 case MOOD_FLOOR: 1423 case MOOD_FLOOR:
1480 do_mood_floor (op); 1424 do_mood_floor (op);
1481 return 0; 1425 break;
1482 1426
1483 case GATE: 1427 case GATE:
1484 move_gate (op); 1428 move_gate (op);
1485 return 0; 1429 break;
1486 1430
1487 case TIMED_GATE: 1431 case TIMED_GATE:
1488 move_timed_gate (op); 1432 move_timed_gate (op);
1489 return 0; 1433 break;
1490 1434
1491 case TRIGGER: 1435 case TRIGGER:
1492 case TRIGGER_BUTTON: 1436 case TRIGGER_BUTTON:
1493 case TRIGGER_PEDESTAL: 1437 case TRIGGER_PEDESTAL:
1494 case TRIGGER_ALTAR: 1438 case TRIGGER_ALTAR:
1495 animate_trigger (op); 1439 animate_trigger (op);
1496 return 0; 1440 break;
1497 1441
1498 case DETECTOR: 1442 case DETECTOR:
1499 move_detector (op); 1443 move_detector (op);
1500 1444
1501 case DIRECTOR: 1445 case DIRECTOR:
1502 if (op->stats.maxsp) 1446 if (op->stats.maxsp)
1503 animate_turning (op); 1447 animate_turning (op);
1504 return 0; 1448 break;
1505 1449
1506 case HOLE: 1450 case HOLE:
1507 move_hole (op); 1451 move_hole (op);
1508 return 0; 1452 break;
1509 1453
1510 case DEEP_SWAMP: 1454 case DEEP_SWAMP:
1511 move_deep_swamp (op); 1455 move_deep_swamp (op);
1512 return 0; 1456 break;
1513 1457
1514 case RUNE: 1458 case RUNE:
1515 case TRAP: 1459 case TRAP:
1516 move_rune (op); 1460 move_rune (op);
1517 return 0; 1461 break;
1518 1462
1519 case PLAYERMOVER: 1463 case PLAYERMOVER:
1520 move_player_mover (op); 1464 move_player_mover (op);
1521 return 0; 1465 break;
1522 1466
1523 case CREATOR: 1467 case CREATOR:
1524 move_creator (op); 1468 move_creator (op);
1525 return 0; 1469 break;
1526 1470
1527 case MARKER: 1471 case MARKER:
1528 move_marker (op); 1472 move_marker (op);
1529 return 0; 1473 break;
1530 1474
1531 case PLAYER_CHANGER: 1475 case PLAYER_CHANGER:
1532 move_player_changer (op); 1476 move_player_changer (op);
1533 return 0; 1477 break;
1534 1478
1535 case PEACEMAKER: 1479 case PEACEMAKER:
1536 move_peacemaker (op); 1480 move_peacemaker (op);
1537 return 0; 1481 break;
1538 }
1539 1482
1540 return 0; 1483 case PLAYER:
1484 // players have their own speed-management, so undo the --speed_left
1485 ++op->speed_left;
1486 break;
1487 }
1541} 1488}
1489

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines