ref: 691f1b3acbe3e9f847b7ded5aac98425fea054f0
parent: bdcfa27ef342b4e6b92be1481da8497a0d5cadb7
author: Samuel Villareal <svkaiser@gmail.com>
date: Wed Sep 8 01:24:40 EDT 2010
+ Converting needamountx and needitemx to arrays in choice struct + Dialog drawer updated to draw choices Subversion-branch: /branches/strife-branch Subversion-revision: 2041
--- a/src/strife/p_dialog.c
+++ b/src/strife/p_dialog.c
@@ -411,18 +411,18 @@
for(j = 0; j < 5; j++)
{
mapdlgchoice_t *curchoice = &(curdialog->choices[j]);
- DIALOG_INT(curchoice->giveitem, rover);
- DIALOG_INT(curchoice->needitem1, rover);
- DIALOG_INT(curchoice->needitem2, rover);
- DIALOG_INT(curchoice->needitem3, rover);
- DIALOG_INT(curchoice->needamount1, rover);
- DIALOG_INT(curchoice->needamount2, rover);
- DIALOG_INT(curchoice->needamount3, rover);
- DIALOG_STR(curchoice->text, rover, MDLG_CHOICELEN);
- DIALOG_STR(curchoice->textok, rover, MDLG_MSGLEN);
- DIALOG_INT(curchoice->next, rover);
- DIALOG_INT(curchoice->objective, rover);
- DIALOG_STR(curchoice->textno, rover, MDLG_MSGLEN);
+ DIALOG_INT(curchoice->giveitem, rover);
+ DIALOG_INT(curchoice->needitems[0], rover);
+ DIALOG_INT(curchoice->needitems[1], rover);
+ DIALOG_INT(curchoice->needitems[2], rover);
+ DIALOG_INT(curchoice->needamounts[0], rover);
+ DIALOG_INT(curchoice->needamounts[1], rover);
+ DIALOG_INT(curchoice->needamounts[2], rover);
+ DIALOG_STR(curchoice->text, rover, MDLG_CHOICELEN);
+ DIALOG_STR(curchoice->textok, rover, MDLG_MSGLEN);
+ DIALOG_INT(curchoice->next, rover);
+ DIALOG_INT(curchoice->objective, rover);
+ DIALOG_STR(curchoice->textno, rover, MDLG_MSGLEN);
}
}
}
@@ -695,8 +695,10 @@
{
angle_t angle;
int y;
+ int i;
int height;
int finaly;
+ char choicetext[64];
// Run down bonuscount faster than usual so that flashes from being given
// items are less obvious.
@@ -715,7 +717,7 @@
// Dismiss the dialog if the player is out of alignment, or the thing he was
// talking to is now engaged in battle.
- if(angle > 0x20000000 && angle < 0xE0000000 || dialogtalker->flags & MF_INCOMBAT)
+ if(angle > ANG45 && angle < (ANG270+ANG45) || dialogtalker->flags & MF_INCOMBAT)
P_DialogDoChoice(dialogmenu.numitems - 1);
dialogtalker->reactiontime = 2;
@@ -748,8 +750,24 @@
M_WriteText(42, finaly - 6, "______________________________");
/*
- dialogmenu
+ dialogmenu // villsa [STRIFE] added 09/08/10
*/
+
+ dialogmenu.y = finaly + 6;
+ y = 0;
+
+ for(i = 0; i < dialogmenu.numitems - 1; i++)
+ {
+ sprintf(choicetext, "%d) %s", i + 1, currentdialog->choices[i].text);
+ if(currentdialog->choices[i].needamounts[0] > 0)
+ sprintf(choicetext, "%s for %d", choicetext, currentdialog->choices[i].needamounts[0]);
+
+ M_WriteText(dialogmenu.x, dialogmenu.y + 3 + y, choicetext);
+ y += 19;
+ }
+
+ M_WriteText(dialogmenu.x, 19 * i + dialogmenu.y + 3, dialoglastmsgbuffer);
+
}
}
--- a/src/strife/p_dialog.h
+++ b/src/strife/p_dialog.h
@@ -41,18 +41,14 @@
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 needitems[MDLG_MAXITEMS]; // item needed for success
+ int needamounts[MDLG_MAXITEMS]; // amount of items 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