diff urogue/getplay.c @ 256:c495a4f288c6

Import UltraRogue from the Roguelike Restoration Project (r1490)
author John "Elwin" Edwards
date Tue, 31 Jan 2017 19:56:04 -0500
parents
children 778938a5c21d
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/urogue/getplay.c	Tue Jan 31 19:56:04 2017 -0500
@@ -0,0 +1,350 @@
+/*
+    getplay.c - Procedures for saving and retrieving a characters starting
+                attributes, armour, and weapon.
+  
+    UltraRogue: The Ultimate Adventure in the Dungeons of Doom
+    Copyright (C) 1985, 1986, 1992, 1993, 1995 Herb Chong
+    All rights reserved.
+
+    See the file LICENSE.TXT for full copyright and licensing information.
+*/
+
+/* 11/08/83  ???, S.A. Hester */
+
+#include <stdlib.h>
+#include <ctype.h>
+#include <string.h>
+#include "rogue.h"
+
+#define I_STR       0
+#define I_INTEL     1
+#define I_WISDOM    2
+#define I_DEXT      3
+#define I_CONST     4
+#define I_CHARISMA  5
+#define I_HPT       6
+#define I_POWER     7
+#define I_CTYPE     8
+#define MAXPATT     9   /* Total Number of above defines. */
+#define MAXPDEF     10  /* Maximum number of pre-defined chars */
+
+static int def_array[MAXPDEF][MAXPATT];    /* Pre-def'd chars */
+
+static void get_chr_filename(char *filename, int size)
+{
+    const char *home;
+ 
+    home = getenv("HOME");
+
+    if (home) {
+        if ((int)strlen(home) < (size - 12) )
+        {
+            strcpy(filename, home);
+            strcat(filename,"/urogue.chr");
+        }
+        else
+	    strncpy(filename,"urogue.chr",size);
+    }    
+    else 
+        strcpy(filename, "urogue.chr");
+}
+
+int
+geta_player(void)
+{
+    int  i;
+    FILE *fd;
+    char pbuf[2 * LINELEN];
+    char filename[200];
+
+    get_chr_filename(filename, sizeof(filename));
+
+    if ((fd = fopen(filename, "r")) == NULL)
+        return(FALSE);
+
+    fread(def_array, sizeof(def_array), 1, fd);
+    fclose(fd);
+
+    wclear(hw);
+    touchwin(hw);
+
+    print_stored();
+    mvwaddstr(hw, 0, 0, "Do you wish to select a character? ");
+    wrefresh(hw);
+
+    if (readcharw(hw) != 'y')
+        return FALSE;
+
+    do
+    {
+        wmove(hw, LINES - 1, 0);
+        wclrtoeol(hw);
+        mvwaddstr(hw, 0, 0, "Enter the number of a pre-defined character: ");
+        wclrtoeol(hw);
+        wrefresh(hw);
+        get_string(pbuf, hw);
+        i = atoi(pbuf) - 1;
+
+        if (i < 0 || i > MAXPDEF - 1)
+        {
+            wstandout(hw);
+            mvwaddstr(hw, 1, 0, "Please use the range 1 to");
+            wprintw(hw, " %d.", MAXPDEF);
+            wstandend(hw);
+            wclrtoeol(hw);
+            wrefresh(hw);
+        }
+        else if (def_array[i][I_STR] == 0)
+        {
+            wstandout(hw);
+            mvwaddstr(hw,1,0,"Please enter the number of a known character: ");
+            wstandend(hw);
+            wclrtoeol(hw);
+        }
+        else
+        {
+            mvwaddstr(hw, 1, 0, "");
+            wclrtoeol(hw);
+        }
+
+    }
+    while (i < 0 || i > MAXPDEF - 1 || (def_array[i][I_STR] == 0));
+
+    pstats.s_str      = def_array[i][I_STR];
+    pstats.s_intel    = def_array[i][I_INTEL];
+    pstats.s_wisdom   = def_array[i][I_WISDOM];
+    pstats.s_dext     = def_array[i][I_DEXT];
+    pstats.s_const    = def_array[i][I_CONST];
+    pstats.s_charisma = def_array[i][I_CHARISMA];
+    pstats.s_hpt      = def_array[i][I_HPT];
+    pstats.s_power    = def_array[i][I_POWER];
+    player.t_ctype    = char_type = def_array[i][I_CTYPE];
+    max_stats         = pstats;
+
+    return(TRUE);
+}
+
+void
+puta_player(void)
+{
+    FILE *fd;
+    char    pbuf[2 * LINELEN];
+    char filename[200];
+    int   i;
+    char    *class = which_class(player.t_ctype);
+
+    sprintf(pbuf, "You have a %s with the following attributes:", class);
+    mvwaddstr(hw, 2, 0, pbuf);
+    wclrtoeol(hw);
+
+    sprintf(pbuf,
+        "Int: %d Str: %d Wis: %d Dex: %d Con: %d Cha: %d Pow: %d Hpt: %d",
+        pstats.s_intel,
+        pstats.s_str,
+        pstats.s_wisdom,
+        pstats.s_dext,
+        pstats.s_const,
+        pstats.s_charisma,
+        pstats.s_power,
+        pstats.s_hpt );
+
+    mvwaddstr(hw, 3, 0, "");
+    wclrtoeol(hw);
+    mvwaddstr(hw, 4, 0, pbuf);
+    wclrtoeol(hw);
+    mvwaddstr(hw, 5, 0, "");
+    wclrtoeol(hw);
+    mvwaddstr(hw, 0, 0, "Would you like to save this character?");
+    wclrtoeol(hw);
+
+
+    wrefresh(hw);
+
+    if ((readcharw(hw) & 0177) != 'y')
+        return;
+
+    do
+    {
+        mvwaddstr(hw, 0, 0, "Overwrite which number? ");
+        wclrtoeol(hw);
+        wrefresh(hw);
+        get_string(pbuf, hw);
+        i = atoi(pbuf) - 1;
+
+        if (i < 0 || i > MAXPDEF - 1)
+        {
+            wstandout(hw);
+            mvwaddstr(hw, 1, 0, "Use the range 1 to");
+            wprintw(hw, " %d!", MAXPDEF);
+            wstandend(hw);
+            wclrtoeol(hw);
+            wrefresh(hw);
+        }
+    }
+    while (i < 0 || i > MAXPDEF - 1);
+
+    /* Set some global stuff */
+
+    def_array[i][I_STR]      = pstats.s_str;
+    def_array[i][I_INTEL]    = pstats.s_intel;
+    def_array[i][I_WISDOM]   = pstats.s_wisdom;
+    def_array[i][I_DEXT]     = pstats.s_dext;
+    def_array[i][I_CONST]    = pstats.s_const;
+    def_array[i][I_CHARISMA] = pstats.s_charisma;
+    def_array[i][I_HPT]      = pstats.s_hpt;
+    def_array[i][I_POWER]    = pstats.s_power;
+    def_array[i][I_CTYPE]    = player.t_ctype;
+
+    /* OK. Now let's write this stuff out! */
+
+    get_chr_filename(filename, sizeof(filename));
+
+
+    if ((fd = fopen(filename, "w")) == NULL)
+    {
+        sprintf(pbuf, "I can't seem to open/create urogue.chr.");
+        mvwaddstr(hw, 5, 5, pbuf);
+        mvwaddstr(hw, 6, 5, "However I'll let you play it anyway!");
+        mvwaddstr(hw, LINES - 1, 0, spacemsg);
+        wrefresh(hw);
+        wait_for(' ');
+
+        return;
+    }
+
+    fwrite(def_array, sizeof(def_array), 1, fd);
+    fclose(fd);
+    return;
+}
+
+void
+do_getplayer(void)
+{
+	print_stored();
+
+    if (char_type == C_NOTSET)
+        do
+        {
+            /* See what type character will be */
+
+            mvwaddstr(hw, 3, 0, "[a] Fighter\t"
+                                "[b] Paladin\t"
+                                "[c] Ranger\n"
+                                "[d] Cleric\t"
+                                "[e] Druid\t"
+                                "[f] Magician\n"
+                                "[g] Illusionist\t"
+                                "[h] Thief\t"
+                                "[i] Assasin\t"
+                                "[j] Ninja");
+
+            mvwaddstr(hw, 0, 0, "What character class do you desire? ");
+            wrefresh(hw);
+            char_type = readcharw(hw) - 'a';
+
+            if (char_type < C_FIGHTER || char_type >= C_MONSTER)
+            {
+                wstandout(hw);
+                mvwaddstr(hw, 1, 0, "Please enter a letter from a - j");
+                wstandend(hw);
+                wclrtoeol(hw);
+                wrefresh(hw);
+            }
+            else
+            {
+                mvwaddstr(hw, 1, 0, "");
+                wclrtoeol(hw);
+            }
+        }
+        while (char_type < C_FIGHTER || char_type >= C_MONSTER);
+
+   player.t_ctype = char_type;
+}
+
+void
+print_stored(void)
+{
+    int i;
+    char    *class;
+    char    pbuf[2 * LINELEN];
+
+    wstandout(hw);
+    mvwaddstr(hw, 9, 0, "YOUR CURRENT CHARACTERS:");
+    wstandend(hw);
+    wclrtoeol(hw);
+
+    for (i = 0; i < MAXPDEF; i++)
+    {
+        if (def_array[i][I_STR])
+        {
+            class = which_class(def_array[i][I_CTYPE]);
+
+            sprintf(pbuf,
+                "%2d. (%s): Int: %d Str: %d Wis: %d Dex: %d Con: %d Cha: %d"
+                " Pow: %d Hpt: %d",
+                i + 1,
+                class,
+                def_array[i][I_INTEL],
+                def_array[i][I_STR],
+                def_array[i][I_WISDOM],
+                def_array[i][I_DEXT],
+                def_array[i][I_CONST],
+                def_array[i][I_CHARISMA],
+                def_array[i][I_POWER],
+                def_array[i][I_HPT]);
+
+            mvwaddstr(hw, 11 + i, 0, pbuf);
+
+        }
+        else
+        {
+            sprintf(pbuf, "%2d.  ### NONE ###", i + 1);
+            mvwaddstr(hw, 11 + i, 0, pbuf);
+        }
+    }
+}
+
+char *
+which_class(int c_class)
+{
+    char    *class;
+
+    switch (c_class)
+    {
+        case C_FIGHTER:   
+		    class = "Fighter"; 
+			break;
+        case C_MAGICIAN:  
+		    class = "Magician"; 
+			break;
+        case C_CLERIC:    
+		    class = "Cleric"; 
+			break;
+        case C_THIEF:     
+		    class = "Thief"; 
+			break;
+        case C_PALADIN:   
+		    class = "Paladin"; 
+			break;
+        case C_RANGER:    
+		    class = "Ranger"; 
+			break;
+        case C_DRUID:     
+		    class = "Druid"; 
+			break;
+        case C_ILLUSION:  
+		    class = "Illusionist"; 
+			break;
+        case C_ASSASIN:   
+		    class = "Assasin"; 
+			break;
+        case C_NINJA:     
+		    class = "Ninja"; 
+			break;
+        default:          
+		    class = "Monster"; 
+			break;
+    }
+
+    return (class);
+}