shithub: choc

Download patch

ref: 994d69c7fb2c91017d4e0f10fd3cf4ea9e532565
parent: 7755e7a52cbef4b9f0f17b1aac7fc6a10f1d1d30
author: Samuel Villareal <svkaiser@gmail.com>
date: Wed Sep 8 00:04:50 EDT 2010

+ Update to mapdialog struct
+ P_StartDialog updated

Subversion-branch: /branches/strife-branch
Subversion-revision: 2038

--- a/src/strife/p_dialog.c
+++ b/src/strife/p_dialog.c
@@ -59,9 +59,6 @@
     memcpy(field, ptr, len);        \
     ptr += len;
 
-#define MAXITEMREQUIREMENTS 3
-#define MAXCHOICES          5
-
 //
 // Globals
 //
@@ -399,16 +396,16 @@
         int j;
         mapdialog_t *curdialog = &((*dialogs)[i]);
 
-        DIALOG_INT(curdialog->speakerid,  rover);
-        DIALOG_INT(curdialog->dropitem,   rover);
-        DIALOG_INT(curdialog->checkitem1, rover);
-        DIALOG_INT(curdialog->checkitem2, rover);
-        DIALOG_INT(curdialog->checkitem3, rover);
-        DIALOG_INT(curdialog->jumptoconv, rover);
-        DIALOG_STR(curdialog->name,       rover, MDLG_NAMELEN);
-        DIALOG_STR(curdialog->voice,      rover, MDLG_LUMPLEN);
-        DIALOG_STR(curdialog->backpic,    rover, MDLG_LUMPLEN);
-        DIALOG_STR(curdialog->text,       rover, MDLG_TEXTLEN);
+        DIALOG_INT(curdialog->speakerid,    rover);
+        DIALOG_INT(curdialog->dropitem,     rover);
+        DIALOG_INT(curdialog->checkitem[0], rover);
+        DIALOG_INT(curdialog->checkitem[1], rover);
+        DIALOG_INT(curdialog->checkitem[2], rover);
+        DIALOG_INT(curdialog->jumptoconv,   rover);
+        DIALOG_STR(curdialog->name,         rover, MDLG_NAMELEN);
+        DIALOG_STR(curdialog->voice,        rover, MDLG_LUMPLEN);
+        DIALOG_STR(curdialog->backpic,      rover, MDLG_LUMPLEN);
+        DIALOG_STR(curdialog->text,         rover, MDLG_TEXTLEN);
 
         // copy choices
         for(j = 0; j < 5; j++)
@@ -820,19 +817,19 @@
         return;
 
     // check item requirements
-    for(i = 0; i < MAXITEMREQUIREMENTS; i++)
+    for(i = 0; i < MDLG_MAXITEMS; i++)
     {
         currentdialog = P_DialogFind(linetarget->type);
 
         // dialog's jumptoconv equal to 0?
-        if(currentdialog[0].jumptoconv == 0)
+        if(currentdialog[i].jumptoconv == 0)
             break;
 
-        for(j = 0; j < MAXITEMREQUIREMENTS; j++)
+        for(j = 0; j < MDLG_MAXITEMS; j++)
         {
             dialog = &currentdialog[j];
-            if(dialog->checkitem1 != 0 &&
-                P_PlayerHasItem(dialogtalker, dialog->checkitem1) < 1)
+            if(dialog->checkitem[j] != 0 &&
+                P_PlayerHasItem(dialogtalker, dialog->checkitem[j]) < 1)
             {
                 currentdialog = dialog;
                 break;
@@ -860,7 +857,7 @@
     }
 
     // setup number of choices to choose from
-    for(i = 0; i < MAXCHOICES; i++)
+    for(i = 0; i < MDLG_MAXCHOICES; i++)
     {
         if(!currentdialog->choices[i].giveitem)
             break;
--- a/src/strife/p_dialog.h
+++ b/src/strife/p_dialog.h
@@ -31,41 +31,40 @@
 #ifndef P_DIALOG_H__
 #define P_DIALOG_H__
 
-#define MDLG_CHOICELEN   32
-#define MDLG_MSGLEN      80
-#define MDLG_NAMELEN     16
-#define MDLG_LUMPLEN      8
-#define MDLG_TEXTLEN    320
-#define MDLG_MAXCHOICES   5
+#define MDLG_CHOICELEN      32
+#define MDLG_MSGLEN         80
+#define MDLG_NAMELEN        16
+#define MDLG_LUMPLEN        8
+#define MDLG_TEXTLEN        320
+#define MDLG_MAXCHOICES     5
+#define MDLG_MAXITEMS       3
 
 typedef struct mapdlgchoice_s
 {
-    int  giveitem;             // item given when successful
-    int  needitem1;            // first item needed for success
-    int  needitem2;            // second item needed for success, if any
-    int  needitem3;            // third item needed for success, if any
-    int  needamount1;          // amount of first item needed
-    int  needamount2;          // amount of second item needed
-    int  needamount3;          // amount of third item needed
-    char text[MDLG_CHOICELEN]; // normal text
-    char textok[MDLG_MSGLEN];  // message given on success
-    int next;                  // next dialog?
-    int objective;             // ???
-    char textno[MDLG_MSGLEN];  // message given on failure
+    int  giveitem;                  // item given when successful
+    int  needitem1;                 // first item needed for success
+    int  needitem2;                 // second item needed for success, if any
+    int  needitem3;                 // third item needed for success, if any
+    int  needamount1;               // amount of first item needed
+    int  needamount2;               // amount of second item needed
+    int  needamount3;               // amount of third item needed
+    char text[MDLG_CHOICELEN];      // normal text
+    char textok[MDLG_MSGLEN];       // message given on success
+    int next;                       // next dialog?
+    int objective;                  // ???
+    char textno[MDLG_MSGLEN];       // message given on failure
 } mapdlgchoice_t;
 
 typedef struct mapdialog_s
 {
-    int speakerid;  // script ID# for mobjtype that will use this dialog
-    int dropitem;   // item to drop if that thingtype is killed
-    int checkitem1; // first item needed to see this dialog
-    int checkitem2; // second item needed to see this dialog, if any
-    int checkitem3; // third item needed to see this dialog, if any
-    int jumptoconv; // conversation to jump to when... ?
-    char name[MDLG_NAMELEN];    // name of speaker
-    char voice[MDLG_LUMPLEN];   // voice file to play
-    char backpic[MDLG_LUMPLEN]; // backdrop pic for character, if any
-    char text[MDLG_TEXTLEN];    // main message text
+    int speakerid;                  // script ID# for mobjtype that will use this dialog
+    int dropitem;                   // item to drop if that thingtype is killed
+    int checkitem[MDLG_MAXITEMS];   // item(s) needed to see this dialog
+    int jumptoconv;                 // conversation to jump to when... ?
+    char name[MDLG_NAMELEN];        // name of speaker
+    char voice[MDLG_LUMPLEN];       // voice file to play
+    char backpic[MDLG_LUMPLEN];     // backdrop pic for character, if any
+    char text[MDLG_TEXTLEN];        // main message text
     
     // options that this dialog gives the player
     mapdlgchoice_t choices[MDLG_MAXCHOICES];