* return 1: guard moved, 0: guard didn't, -1: let m_move do it, -2: died */
| 885 | * return 1: guard moved, 0: guard didn't, -1: let m_move do it, -2: died |
| 886 | */ |
| 887 | int |
| 888 | gd_move(struct monst *grd) |
| 889 | { |
| 890 | coordxy x, y, nx, ny, m, n, ex, ey; |
| 891 | coordxy dx, dy, ggx = 0, ggy = 0, fci; |
| 892 | uchar typ; |
| 893 | struct rm *crm; |
| 894 | struct fakecorridor *fcp; |
| 895 | struct egd *egrd = EGD(grd); |
| 896 | long umoney = 0L; |
| 897 | boolean goldincorridor = FALSE, u_in_vault = FALSE, grd_in_vault = FALSE, |
| 898 | semi_dead = DEADMONSTER(grd), |
| 899 | u_carry_gold = FALSE, newspot = FALSE; |
| 900 | |
| 901 | if (!on_level(&(egrd->gdlevel), &u.uz)) |
| 902 | return -1; |
| 903 | |
| 904 | if (semi_dead || !grd->mx || egrd->gddone) { |
| 905 | egrd->gddone = 1; |
| 906 | return gd_move_cleanup(grd, semi_dead, FALSE); |
| 907 | } |
| 908 | debugpline1("gd_move: %s guard", grd->mpeaceful ? "peaceful" : "hostile"); |
| 909 | |
| 910 | u_in_vault = vault_occupied(u.urooms) ? TRUE : FALSE; |
| 911 | grd_in_vault = *in_rooms(grd->mx, grd->my, VAULT) ? TRUE : FALSE; |
| 912 | if (!u_in_vault && !grd_in_vault) |
| 913 | wallify_vault(grd); |
| 914 | |
| 915 | if (!grd->mpeaceful) { |
| 916 | if (!u_in_vault |
| 917 | && (grd_in_vault || (in_fcorridor(grd, grd->mx, grd->my) |
| 918 | && !in_fcorridor(grd, u.ux, u.uy)))) { |
| 919 | (void) rloc(grd, RLOC_MSG); |
| 920 | wallify_vault(grd); |
| 921 | if (!in_fcorridor(grd, grd->mx, grd->my)) |
| 922 | (void) clear_fcorr(grd, TRUE); |
| 923 | gd_letknow(grd); |
| 924 | return -1; |
| 925 | } |
| 926 | if (!in_fcorridor(grd, grd->mx, grd->my)) |
| 927 | (void) clear_fcorr(grd, TRUE); |
| 928 | return -1; |
| 929 | } |
| 930 | if (abs(egrd->ogx - grd->mx) > 1 || abs(egrd->ogy - grd->my) > 1) |
| 931 | return -1; /* teleported guard - treat as monster */ |
| 932 | |
| 933 | if (egrd->witness) { |
| 934 | if (!Deaf) { |
| 935 | SetVoice(grd, 0, 80, 0); |
| 936 | verbalize("How dare you %s that gold, scoundrel!", |
| 937 | (egrd->witness & GD_EATGOLD) ? "consume" : "destroy"); |
| 938 | } |
| 939 | egrd->witness = 0; |
| 940 | grd->mpeaceful = 0; |
| 941 | return -1; |
| 942 | } |
| 943 | |
| 944 | umoney = money_cnt(gi.invent); |
no test coverage detected