📄 init.c
字号:
/* * init.c * * This source herein may be modified and/or distributed by anybody who * so desires, with the following restrictions: * 1.) No portion of this notice shall be removed. * 2.) Credit shall not be taken for the creation of this source. * 3.) This code is not to be traded, sold, or used for personal * gain or profit. * */#ifndef lintstatic char sccsid[] = "@(#)init.c 5.1 (Berkeley) 11/25/87";#endif /* not lint */#include <stdio.h>#include "rogue.h"char login_name[MAX_OPT_LEN];char *nick_name = (char *) 0;char *rest_file = 0;boolean cant_int = 0;boolean did_int = 0;boolean score_only;boolean init_curses = 0;boolean save_is_interactive = 1;boolean ask_quit = 1;boolean no_skull = 0;boolean passgo = 0;char *error_file = "rogue.esave";char *byebye_string = "Okay, bye bye!";extern char *fruit;extern char *save_file;extern short party_room;extern boolean jump;init(argc, argv)int argc;char *argv[];{ char *pn; int seed; pn = md_gln(); if ((!pn) || (strlen(pn) >= MAX_OPT_LEN)) { clean_up("Hey! Who are you?"); } (void) strcpy(login_name, pn); do_args(argc, argv); do_opts(); if (!score_only && !rest_file) { printf("Hello %s, just a moment while I dig the dungeon...", nick_name); fflush(stdout); } initscr(); if ((LINES < DROWS) || (COLS < DCOLS)) { clean_up("must be played on 24 x 80 screen"); } start_window(); init_curses = 1; md_heed_signals(); if (score_only) { put_scores((object *) 0, 0); } seed = md_gseed(); (void) srrandom(seed); if (rest_file) { restore(rest_file); return(1); } mix_colors(); get_wand_and_ring_materials(); make_scroll_titles(); level_objects.next_object = (object *) 0; level_monsters.next_monster = (object *) 0; player_init(); ring_stats(0); return(0);}player_init(){ object *obj; rogue.pack.next_object = (object *) 0; obj = alloc_object(); get_food(obj, 1); (void) add_to_pack(obj, &rogue.pack, 1); obj = alloc_object(); /* initial armor */ obj->what_is = ARMOR; obj->which_kind = RINGMAIL; obj->class = RINGMAIL+2; obj->is_protected = 0; obj->d_enchant = 1; (void) add_to_pack(obj, &rogue.pack, 1); do_wear(obj); obj = alloc_object(); /* initial weapons */ obj->what_is = WEAPON; obj->which_kind = MACE; obj->damage = "2d3"; obj->hit_enchant = obj->d_enchant = 1; obj->identified = 1; (void) add_to_pack(obj, &rogue.pack, 1); do_wield(obj); obj = alloc_object(); obj->what_is = WEAPON; obj->which_kind = BOW; obj->damage = "1d2"; obj->hit_enchant = 1; obj->d_enchant = 0; obj->identified = 1; (void) add_to_pack(obj, &rogue.pack, 1); obj = alloc_object(); obj->what_is = WEAPON; obj->which_kind = ARROW; obj->quantity = get_rand(25, 35); obj->damage = "1d2"; obj->hit_enchant = 0; obj->d_enchant = 0; obj->identified = 1; (void) add_to_pack(obj, &rogue.pack, 1);}clean_up(estr)char *estr;{ if (save_is_interactive) { if (init_curses) { move(DROWS-1, 0); refresh(); stop_window(); } printf("\n%s\n", estr); } md_exit(0);}start_window(){ crmode(); noecho();#ifndef BAD_NONL nonl();#endif md_control_keybord(0);}stop_window(){ endwin(); md_control_keybord(1);}byebye(){ md_ignore_signals(); if (ask_quit) { quit(1); } else { clean_up(byebye_string); } md_heed_signals();}onintr(){ md_ignore_signals(); if (cant_int) { did_int = 1; } else { check_message(); message("interrupt", 1); } md_heed_signals();}error_save(){ save_is_interactive = 0; save_into_file(error_file); clean_up("");}do_args(argc, argv)int argc;char *argv[];{ short i, j; for (i = 1; i < argc; i++) { if (argv[i][0] == '-') { for (j = 1; argv[i][j]; j++) { switch(argv[i][j]) { case 's': score_only = 1; break; } } } else { rest_file = argv[i]; } }}do_opts(){ char *eptr; if (eptr = md_getenv("ROGUEOPTS")) { for (;;) { while ((*eptr) == ' ') { eptr++; } if (!(*eptr)) { break; } if (!strncmp(eptr, "fruit=", 6)) { eptr += 6; env_get_value(&fruit, eptr, 1); } else if (!strncmp(eptr, "file=", 5)) { eptr += 5; env_get_value(&save_file, eptr, 0); } else if (!strncmp(eptr, "jump", 4)) { jump = 1; } else if (!strncmp(eptr, "name=", 5)) { eptr += 5; env_get_value(&nick_name, eptr, 0); } else if (!strncmp(eptr, "noaskquit", 9)) { ask_quit = 0; } else if (!strncmp(eptr, "noskull", 5) || !strncmp(eptr,"notomb", 6)) { no_skull = 1; } else if (!strncmp(eptr, "passgo", 5)) { passgo = 1; } while ((*eptr) && (*eptr != ',')) { eptr++; } if (!(*(eptr++))) { break; } } } /* If some strings have not been set through ROGUEOPTS, assign defaults * to them so that the options editor has data to work with. */ init_str(&nick_name, login_name); init_str(&save_file, "rogue.save"); init_str(&fruit, "slime-mold");}env_get_value(s, e, add_blank)char **s, *e;boolean add_blank;{ short i = 0; char *t; t = e; while ((*e) && (*e != ',')) { if (*e == ':') { *e = ';'; /* ':' reserved for score file purposes */ } e++; if (++i >= MAX_OPT_LEN) { break; } } *s = md_malloc(MAX_OPT_LEN + 2); (void) strncpy(*s, t, i); if (add_blank) { (*s)[i++] = ' '; } (*s)[i] = '\0';}init_str(str, dflt)char **str, *dflt;{ if (!(*str)) { *str = md_malloc(MAX_OPT_LEN + 2); (void) strcpy(*str, dflt); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -