|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T d
Length: 9434 (0x24da) Types: TextFile Names: »demons.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/World/demons.c«
#include "parame.inc" #include "variab.h" #include "arrays.h" /* World C Version 1.00 copyright 1987 J.D.McDonald Use as you like for non-commercial purposes, but please leave this note, and document any changes you make as yours */ mdemon() { int qtim, z, i, kkwr; /* * subroutine to care for comings and goings of martians */ qtim = (turns % 100) < 75; /* * the player must have entered mars once in the day and once at night, * and then wait 4 turns before they come close */ if (martim < 7) { if (loc == 27 || loc == 50 || loc == 41) { oldloc = 0; speak(152); } if (loc >= 26 && loc <= 50) { if (qtim && (martim == 0 || martim == 2)) martim |= 1; if (!qtim && (martim == 0 || martim == 1)) martim |= 2; if (martim >= 3) martim += 1; } } if (qtim) return; /* * they will appear at once if he falls in their hockey rink */ if (loc == 38 && !marflg[5]) { marflg[5] = 1; martim = 7; speak(169); return; } for (i = 0; i < 5; i++) marflg[i] = 0; z = (turns % 100); /* wont come close if martim < 7 */ if (martim < 7) { if (loc != 51) speak(141); goto lab60; } if (z > 75 && z < 99) marflg[4] = 1; if (z > 76 && z < 98) marflg[0] = 1; if (z > 78 && z < 95) marflg[3] = 1; if (z > 78 && z < 96) marflg[2] = 1; if (z > 77 && z < 97 && obloc[HPUCK] == 38) marflg[1] = 1; /* announce the goings on of the martians */ if (marflg[5] && z == 75 && loc != 38) speak(154); if (marflg[5] && z == 99 && loc != 38) speak(155); /* the first time they come close */ if (!marflg[5] && loc < 51) { marflg[5] = 1; speak(142); } if (loc == 28) { if (marflg[3]) speak(143); } else if (loc >= 43 && loc <= 45) { if (marflg[4]) speak(144); } /* at home */ else if (loc == 42 || loc == 30) { if (marflg[0]) { if (!marflg[6] || pct(20)) { speak(145); marflg[6] = 1; } else speak(146); } } /* the hockey game */ else if (loc == 29 || (loc >= 31 && loc <= 38)) { if (marflg[1]) { if (!marflg[7] || pct(20)) { speak(147); marflg[7] = 1; } else speak(148); } } else if (loc == 40) { if (marflg[2]) speak(149); } else; if (((loc == 42 && marflg[0]) || (loc == 38)) && !deadf) { /* oops! he ran inot one and got fried */ if (loc == 42) speak(150); if (loc == 38) { if (marflg[1]) speak(151); else speak(171); for (i = 32; i <= 37; i++) locdat[i] |= 16384; } vdead(); oldlc2 = 0; oldloc = 0; } /* move his belongings to the dump */ lab60: for (i = 1; i <= MOVMAX; i++) { if (obloc[i] == loc || (obloc[i] == 48 && loc == 49) || obloc[i] < 27 || obloc[i] > 50) continue; if (i == ZWIRE) { if (obloc[i] == 1000 || wirelc[0] == 1000 || wirelc[5] == 1000 || wirelc[0] == loc || wirelc[1] == loc || wirelc[2] == loc || wirelc[3] == loc || wirelc[4] == loc || wirelc[5] == loc) continue; obimpr[ZWIRE] = (obimpr[ZWIRE] & ~56) + 8; /* ~56=177707 octal */ for (kkwr = 0; kkwr < 6; kkwr++) wirelc[kkwr] = 0; } if (obloc[i] >= 27 && obloc[i] <= 50) obloc[i] = 40; if (i == HPUCK) obloc[i] = 38; if (i == ZDIAMO) { obimpr[i] = (obimpr[i] & ~56) + 8; obloc[i] = 49; } if (i == RBOULD) obloc[i] = 27; } return; } wdemon() { int i, n, i2, vloc; /* * take care of playing out and taking in the wire take it in */ if (wirelc[5] == 1000) { for (i = 1; i <= 4; i++) { n = 5 - i; if (wirelc[n] == oldloc && wirelc[n - 1] == loc) { wirelc[n] = 1000; speak(216); if (wirelc[1] == 1000 && obloc[ZWIRE] == 1000 && wirelc[0] == loc) { for (i2 = 0; i2 < 5; i2++) wirelc[i2] = 0; speak(219); } return; } } if (wirelc[1] == 1000 && wirelc[0] == oldloc && obloc[ZWIRE] == loc) { wirelc[0] = 1000; speak(216); return; } /* play it out */ if (loc >= 32 && loc <= 38) { speak(257); if (oldloc == 31 || oldloc == 32) vloc = 32; else vloc = 37; for (i = 0; i < 6; i++) if (wirelc[i] == 1000) wirelc[i] = vloc; return; } for (i = 0; i < 4; i++) { if (wirelc[i] == oldloc && wirelc[i + 1] == 1000) { wirelc[i + 1] = loc; speak(217); return; } } if (wirelc[0] == 1000 && obloc[ZWIRE] == oldloc) { wirelc[0] = loc; speak(217); return; } /* out of wire */ if (wirelc[4] == oldloc) { speak(218); wirelc[5] = wirelc[4]; return; } } else; } timer(xloc) int xloc; { int bplce, cplce, gplce, iplce, objen, qq, i; /* prevent him from being outside the valley at sunset */ if (loc <= 3 && loc * 15 < turns) { speak(255); oldlc2 = oldloc; oldloc = loc; loc += 1; } /* * daytim=1 if it is intrinsically light here (i.e. lights are always on * or it is outside and the sun is up or he is carrying sphere or bead */ if ((locdat[loc] & 17) != 0 || ((locdat[loc] & 8) != 0 && (turns % 100) < 75) || obloc[GSPHER] == 1000 || obloc[GSPHER] == loc || obloc[ZBEAD] == 1000 || obloc[ZBEAD] == loc) daytim = 1; else daytim = 0; /* he is killed if on tower in daytime */ if (loc == 49 && daytim == 1 && !deadf) { speak(166); oldlc2 = 0; oldloc = 0; loc = 48; vdead(); } /* announce rising and setting of both suns */ if ((locdat[loc] & 8) != 0) { if (daytim == 0) speak(124); else if ((turns % 100) >= 72 && (turns % 100) < 75) speak(125); else if ((turns % 100) < 3 && turns > 4) speak(126); else; } /* * check to see if he is not wearing shoes or boots if too long without * them, he dies */ if ((obloc[CSHOES] != 3000 && obloc[HBOOTS] != 3000) && !deadf && (loc != 16 && loc < 153)) { noshoe -= 1; if (noshoe == 0) speak(99); else if (noshoe < -6 && pct(10 * (-6 - noshoe))) { speak(100); vdead(); } } /* fish need water to live! */ if (obloc[DFISH] == 0) { if (obloc[CFISH] != 16 && !(obloc[CFISH] == (2000 + PLBAG) && (((obimpr[PLBAG] / 512) % 8) == 5))) { fshlif -= 1; if (fshlif == 0) { obloc[DFISH] = obloc[CFISH]; obloc[CFISH] = 0; obimpr[CFISH] = 0; obimpr[DFISH] = 137; } } } /* check on status of bug repellent */ if (obimpr[ZDEET] >= 4096) obimpr[ZDEET] -= 4096; /* check on radioactive exposure of film in camera */ itsher(ZBEAD, &bplce); itsher(GSPHER, &gplce); if (oextim < 8000) { itsher(ICAMER, &iplce); if (obloc[GSPHER] == obloc[ICAMER]) oextim += 1; else { if (iplce != 0 && gplce != 0) oextim += 1; } if (obloc[ZBEAD] == obloc[ICAMER]) oextim += 7; else { if (iplce != 0 && bplce != 0) oextim += 4; } } /* check on radiation poisoning */ if (!deadf && bplce != 0 && obloc[ZBEAD] != 2000 + ZSINK) { rdietm = (rdietm / 5) * 5; rdietm += 5; if (rdietm > 0 && (rdietm % 10) == 0) speak(rdietm / 10 + 320); } else { rdietm -= 1; if (rdietm <= 0) rdietm = 0; if (rdietm == 36) speak(326); if (rdietm == 24) speak(327); if (rdietm == 12) speak(328); } /* check on changing of loc 89 */ if (easttm == 1) speak(376); if (easttm == 15) speak(377); if (easttm == 50) speak(378); if (easttm >= 1 && easttm <= 50) easttm += 1; if (!deadf) eattim += 1; if (eattim == 170) speak(367); if (eattim == 240) speak(368); if (eattim == 270) speak(369); if (eattim == 300) { speak(384); vdead(); } /* exposing the x-ray film */ itsher(ZCASSE, &cplce); if (obloc[ZCASSE] == 2000 + ZRACK && obloc[ZBEAD] == 2000 + ZTRAY) { objen = 0; for (i = 0; i <= MOVMAX; i++) { if (obloc[i] == ZENLAR + 2000) { if (fimage != 0 && fimage != i) filmst = 1; qq = i; objen += 1; } } if (objen > 1) filmst = 1; if (objen == 0) filmtm += 10; if (objen >= 1) { filmtm += 1; fimage = qq; } } else if (obloc[ZBEAD] == obloc[ZCASSE] || (obloc[ZBEAD] != ZSINK + 2000 && bplce != 0 && cplce != 0)) filmtm += 1000; else; if (filmtm > 3000) filmtm = 3000; /* * dispersing of the cloud from the seed we are using obimpr(zseed) as a * clock; this is ok since it no longer exists ( o.e. obloc(zseed)=0 ) * despite this being stupid */ if (obloc[ZSEED] == 0 && obimpr[ZSEED] > 0) { if ((loc == 99 || loc == 131) && obimpr[ZSEED] == 1) speak(406); obimpr[ZSEED] -= 1; } if (screef > 0) screef -= 1; /* the chase is on!!!! */ if (chaset != 0) { if (adverb == QUICKL) chaser += 1; if (chaset <= 8) { if (xloc == loc || loc == oldlc2 || loc == 174 || loc == 166) { if (chaset != 1) { speak(557); vdead(); } else speak(554); } else if (chaset >= 5 && chaser < 3) speak(556); else speak(555); } else if (chaset == 9) { if (chaser >= 3) { speak(558); guardl = loc; } else { speak(557); vdead(); } } else if ((chaset > 9 && chaset < 18) && loc == guardl) { speak(563); vdead(); } else if (loc < 176 && chaset == 18) { if (!(loc == 175 && (obimpr[BDOOR] & 2) != 0)) { speak(560); vdead(); } } chaset += 1; if (chaset == 19) chaset = 0; } }