|
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 i
Length: 4101 (0x1005) Types: TextFile Names: »init.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Pm/BSD/init.c«
/* ** init.c - game initializations ** ** [pm by Peter Costantinidis, Jr. @ University of California at Davis] */ #include "pm.h" coord pm_pos; struct timeb _tp; /* used for timing */ long thescore = 0L, /* player's score */ hi_score = 0L, /* high score so far */ move_cntr = 0L, /* # of moves made by player */ chcnt = 0L, /* character count */ demon = 0L; /* # of loops game made (psuedo time) */ char fr_ch, /* fruit character */ ch = ' ', /* current move of pm */ oldch = '\0', /* old (temporary) move */ newch = '\0', /* new move (future) */ baud = '\0', /* output baud rate of terminal */ *argv0, /* argv[0] */ *mesg; /* pointer to last message */ int timeit = FALSE, /* printing loop/move counter? */ quiet = TRUE, /* bells and whistles */ fast = FALSE, /* skip senseless looping */ timer = 0, /* duration timer for energizers */ level = 0, /* level (board) number */ seed, /* rnd num seed */ fr_val, /* fruit value */ d_left = MAX_DOTS, /* number of dots left on board */ e_left = MAX_ENERGY, /* number of energizers left on board */ mons_eaten = -1, /* number of monsters eaten (<= 4) */ pm_eaten = FALSE, /* got eaten */ pms_left = 3, /* pm's left (you start with three) */ pm_bonus = TRUE, /* can get a bonus pm */ pm_run = TRUE, /* TRUE if eatable */ pm_tunn = FALSE, /* " if in tunnel */ pm_extunn, /* how long left in tunnel */ is_wiz = FALSE, /* TRUE if currently wizard */ was_wiz = FALSE, /* TRUE if ever was wizard */ uid; /* user's uid */ mons ghosts[MAX_MONS], /* array of monsters */ *h, *g, *c, *z; /* pointers into array of monsters */ char fruit[] = "%&00++$$~~^^_", fruit_eaten[15] = " ", moves[] = "hjkl"; int fruit_val[] = /* the values of each succeeding fruit */ { 100, 300, 500, 500, 700, 700, 1000, 1000, 2000, 2000, 3000, 3000, 5000 }; int mons_val[] = /* the values of the monsters when eaten */ { 200, 400, 800, 1600 }; int eat_times[] = /* the duration of the power pill */ { 130, 130, 120, 115, 110, 100, 95, 85, 75, 70, 65, 55, 45 }; int bauds[] = { /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15*/ /* 0 50 75 110 134 150 200 300 600 1200 1800 2400 4800 9600 EXTA EXTB*/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1200, 1800, 2400, 4800, 9600, 19200, 0 }; /* ** init() - perform necessary intializations */ void init () { if ((uid = getuid()) < 0) { fprintf(stderr, "Who the hell are you???\n"); exit(1); } randomize(SEED); #ifdef PM_USER if (chk_pm_user()) /* check user log file */ fprintf(stderr, "%s: Can not make entry into user log file\n", argv0); #endif hi_score = get_hi_scr(); if (initscr() == ERR) { fprintf(stderr, "initscr() error\n"); perror(argv0); exit(1); } if (!baud) /* if baud, then we are trying to simulate another */ { if (!bauds[_tty.sg_ospeed]) { fprintf(stderr, "pm: baud rate must be at least %d(%d)\n", MIN_BAUD, _tty.sg_ospeed); endwin(); exit(1); } baud = _tty.sg_ospeed; } trap(0); h = &ghosts[0]; g = &ghosts[1]; c = &ghosts[2]; z = &ghosts[3]; mons_init(); crmode(); noecho(); mesg = NULL; draw_screen(); } /* ** mons_init() - initialize the monsters ** - MUST be called before monsters()!!! ** Note: I am sure that there was a reason why I did not statically ** initialize these structures. When I remember the reason ** I will mention it here at a later date. */ void mons_init () { reg int i; h->mo_attrib = SMART | SLOW; g->mo_attrib = SMART | FAST; c->mo_attrib = NORMAL | FAST; z->mo_attrib = DUMB | MED; h->mo_name = HARPO; g->mo_name = GROUCHO; c->mo_name = CHICO; z->mo_name = ZEPPO; for (i = 0; i < 4; i++) m_init(&ghosts[i]); g->mo_inside = FALSE; } /* ** m_init() - initialize a single monster ** - this function is called from p_monsters() (every time a ** new screen is entered) */ m_init (m) reg mons *m; { m->mo_inch = EMPTY; m->mo_run = FALSE; m->mo_tunn = FALSE; m->mo_eaten = FALSE; m->mo_inside = TRUE; m->mo_ch = ' '; m->mo_cnt = 0; m->mo_extunn = 0; }