MCPcopy Index your code
hub / github.com/NetHack/NetHack / gd_move

Function gd_move

src/vault.c:887–1201  ·  view source on GitHub ↗

* return 1: guard moved, 0: guard didn't, -1: let m_move do it, -2: died */

Source from the content-addressed store, hash-verified

885 * return 1: guard moved, 0: guard didn't, -1: let m_move do it, -2: died
886 */
887int
888gd_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);

Callers 3

uleftvaultFunction · 0.85
movemon_singlemonFunction · 0.85
m_moveFunction · 0.85

Calls 15

on_levelFunction · 0.85
gd_move_cleanupFunction · 0.85
vault_occupiedFunction · 0.85
in_roomsFunction · 0.85
wallify_vaultFunction · 0.85
in_fcorridorFunction · 0.85
rlocFunction · 0.85
clear_fcorrFunction · 0.85
gd_letknowFunction · 0.85
verbalizeFunction · 0.85
money_cntFunction · 0.85
hidden_goldFunction · 0.85

Tested by

no test coverage detected