aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Changelog7
-rw-r--r--include/Quest.h10
-rw-r--r--src/Quest.cpp67
-rw-r--r--src/entities.cpp6
-rw-r--r--src/gameplay.cpp39
-rw-r--r--src/ui.cpp20
-rw-r--r--xml/playerSpawnHill1.xml33
7 files changed, 76 insertions, 106 deletions
diff --git a/Changelog b/Changelog
index 2077ac0..5a94cac 100644
--- a/Changelog
+++ b/Changelog
@@ -625,3 +625,10 @@
- improved font rendering codes
- added font selection to settings.xml
- XML'd important text
+
+2/8/2016:
+=========
+
+ - partially fixed text drawing
+ - XML'd quest checking, working on quest requirements
+ - worked on XML'ing villages
diff --git a/include/Quest.h b/include/Quest.h
index cc01d27..7ba77c8 100644
--- a/include/Quest.h
+++ b/include/Quest.h
@@ -24,17 +24,9 @@ typedef struct {
std::string title;
std::string desc;
struct item_t reward;
+ std::vector<std::string> need;
} Quest;
-/*class Quest {
-public:
- char *title;
- char *desc;
- struct item_t reward;
- Quest(const char *t,const char *d,struct item_t r);
- ~Quest();
-};*/
-
/**
* The Quest Handler class.
*
diff --git a/src/Quest.cpp b/src/Quest.cpp
index f0be63c..0151706 100644
--- a/src/Quest.cpp
+++ b/src/Quest.cpp
@@ -1,81 +1,14 @@
#include <Quest.h>
-/*const Quest QuestList[1] = {
- Quest("Not a quest","Stop",(struct item_t){0,0})
-};*/
-
-
-/*Quest::Quest(const char *t,const char *d,struct item_t r){
- title = new char[strlen(t)+1];
- desc = new char[strlen(d)+1];
- strcpy(title,t);
- strcpy(desc,d);
- memcpy(&reward,&r,sizeof(struct item_t));
-}
-
-Quest::~Quest(){
- delete[] title;
- delete[] desc;
- memset(&reward,0,sizeof(struct item_t));
-}*/
-
int QuestHandler::assign(const char *t){
- /*unsigned char i;
- for(i=0;i<current.size();i++){ // Make sure we don't already have this quest
- if(!strcmp(current[i]->title,t)){
-#ifdef DEBUG
- DEBUG_printf("The QuestHandler already has this quest: %s\n",t);
-#endif // DEBUG
- return -2;
- }
- }
- for(i=0;i<0;i++){ // Add the quest (if it really exists)
- if(!strcmp(QuestList[i].title,t)){
- current.push_back(&QuestList[i]);
-#ifdef DEBUG
- DEBUG_printf("Added quest %s, now have %u active quests.\n",t,current.size());
-#endif // DEBUG
- return current.size();
- }
-#ifdef DEBUG
- DEBUG_printf("Finding quest: %s != %s\n",t,QuestList[i].title);
-#endif // DEBUG
- }
-#ifdef DEBUG
- DEBUG_printf("Quest %s does not exist.\n",t);
-#endif // DEBUG*/
return strcmp(t,"h");
}
int QuestHandler::drop(const char *t){
- /*unsigned char i;
- for(i=0;i<current.size();i++){
- if(!strcmp(current[i]->title,t)){
- current.erase(current.begin()+i);
- return current.size();
- }
- }*/
return strcmp(t,"h");
}
int QuestHandler::finish(const char *t,void *completer){
- /*unsigned char i;
- for(i=0;i<current.size();i++){
- if(!strcmp(current[i]->title,t)){
-#ifdef DEBUG
- DEBUG_printf("Completing quest %s.\n",t);
-#endif // DEBUG
- ((Entity *)completer)->inv->addItem(current[i]->reward.id,current[i]->reward.count);
- current.erase(current.begin()+i);
-#ifdef DEBUG
- DEBUG_printf("QuestHandler now has %u active quests.\n",current.size());
-#endif // DEBUG
- return 0;
- }
- }
-#ifdef DEBUG
- DEBUG_printf("QuestHandler never had quest %s.\n",t);
-#endif // DEBUG*/
return strncmp(t,(char *)completer,1);
}
diff --git a/src/entities.cpp b/src/entities.cpp
index 5a9c42a..f079b03 100644
--- a/src/entities.cpp
+++ b/src/entities.cpp
@@ -3,6 +3,8 @@
#include <istream>
+#define RAND_DIALOG_COUNT 13
+
extern std::istream *names;
extern unsigned int loops;
@@ -126,7 +128,7 @@ NPC::NPC(){ //sets all of the NPC specific traits on object creation
tex = new Texturec(1,"assets/NPC.png");
inv = new Inventory(NPC_INV_SIZE);
- randDialog = 6;//rand() % 12 - 1;
+ randDialog = rand() % RAND_DIALOG_COUNT - 1;
dialogIndex = 0;
}
NPC::~NPC(){
@@ -392,7 +394,7 @@ void NPC::clearAIFunc(void){
aiFunc.clear();
}
-const char *randomDialog[] = {
+const char *randomDialog[RAND_DIALOG_COUNT] = {
"What a beautiful day it is.",
"Have you ever went fast? I have.",
"I heard if you complete a quest, you'll get a special reward.",
diff --git a/src/gameplay.cpp b/src/gameplay.cpp
index 00faf70..5633eb8 100644
--- a/src/gameplay.cpp
+++ b/src/gameplay.cpp
@@ -33,6 +33,8 @@ int commonAIFunc(NPC *speaker){
XMLDocument xml;
XMLElement *exml,*oxml;
+ static unsigned int oldidx = 9999;
+
const char *name;
unsigned int idx = 0;
bool stop = false;
@@ -67,9 +69,30 @@ int commonAIFunc(NPC *speaker){
if((oxml = exml->FirstChildElement("quest"))){
const char *qname;
+ Quest tmp;
while(oxml){
- if((qname = oxml->Attribute("assign")))
- player->qh.current.push_back((Quest){qname,"None",(struct item_t){0,0}});
+ if((qname = oxml->Attribute("assign"))){
+ tmp.title = qname;
+ tmp.desc = "None";
+ tmp.reward = (struct item_t){0,0};
+
+ if(oxml->GetText()){
+ tmp.need.push_back(oxml->GetText());
+ }
+
+ player->qh.current.push_back(tmp);
+ }else if((qname = oxml->Attribute("check"))){
+ if(player->qh.hasQuest(qname)){
+ ui::dialogBox(speaker->name,NULL,false,"Nice meme");
+ ui::waitForDialog();
+ return 0;
+ }else{
+ oldidx = speaker->dialogIndex;
+ speaker->dialogIndex = oxml->UnsignedAttribute("fail");
+ return commonAIFunc(speaker);
+ }
+ }
+
oxml = oxml->NextSiblingElement();
}
}
@@ -177,10 +200,16 @@ int commonAIFunc(NPC *speaker){
return 1;
}else return commonAIFunc(speaker);
}else{
- speaker->dialogIndex = 9999;
- return 0;
+ if(oldidx != 9999){
+ speaker->dialogIndex = oldidx;
+ oldidx = 9999;
+ return 1;
+ }else{
+ speaker->dialogIndex = 9999;
+ return 0;
+ }
}
- return 1;
+ //return 1;
}
}
diff --git a/src/ui.cpp b/src/ui.cpp
index 56a88a3..5adb7b5 100644
--- a/src/ui.cpp
+++ b/src/ui.cpp
@@ -224,9 +224,9 @@ namespace ui {
buf = new char[ftf->glyph->bitmap.width * ftf->glyph->bitmap.rows * 4];
for(j=0;j<ftf->glyph->bitmap.width*ftf->glyph->bitmap.rows;j++){
- buf[j*4 ]=fontColor[0];
- buf[j*4+1]=fontColor[1];
- buf[j*4+2]=fontColor[2];
+ buf[j*4 ]=255;//fontColor[0];
+ buf[j*4+1]=255;//fontColor[1];
+ buf[j*4+2]=255;//fontColor[2];
buf[j*4+3]=ftf->glyph->bitmap.buffer[j] ? 255 : 0;
//buf[j*4+3]=ftf->glyph->bitmap.buffer[j];
}
@@ -258,9 +258,11 @@ namespace ui {
* Draws a character at the specified coordinates, aborting if the character is unknown.
*/
- vec2 putChar(float x,float y,char c){
+ vec2 putChar(float xx,float yy,char c){
vec2 c1,c2;
+ int x = xx, y = yy;
+
/*
* Get the width and height of the rendered character.
*/
@@ -332,10 +334,12 @@ namespace ui {
return xo; // i.e. the string width
}
- float putStringCentered(const float x,const float y,const char *s){
+ float putStringCentered(const float xx,const float yy,const char *s){
unsigned int i = 0;
float width = 0;
+ int x = xx,y = yy;
+
do{
if(s[i]=='\n'){ // Handle newlines
// TODO
@@ -626,13 +630,13 @@ namespace ui {
if(player->inv->invOpen){
hub.y = player->loc.y + fontSize * 8;
- hub.x = player->loc.x;
+ hub.x = player->loc.x;// + player->width / 2;
putStringCentered(hub.x,hub.y,"Current Quests:");
for(auto &c : player->qh.current){
hub.y -= fontSize * 1.15;
- putString(hub.x,hub.y,c.title.c_str());
+ putStringCentered(hub.x,hub.y,c.title.c_str());
}
}
}
@@ -726,7 +730,7 @@ namespace ui {
void drawMenu(Menu *menu){
- setFontSize(20);
+ setFontSize(24);
SDL_Event e;
mouse.x=premouse.x+offset.x-(SCREEN_WIDTH/2);
diff --git a/xml/playerSpawnHill1.xml b/xml/playerSpawnHill1.xml
index 55612d3..cf42cda 100644
--- a/xml/playerSpawnHill1.xml
+++ b/xml/playerSpawnHill1.xml
@@ -10,7 +10,7 @@
<trigger x="-300" id="Test" />
<npc name="Ralph" hasDialog="true" />
- <npc name="Johnny" hasDialog="true" />
+ <npc name="Johnny" hasDialog="false" />
<structure type="5" inside="playerSpawnHill1_Building1.xml" />
</World>
@@ -22,30 +22,33 @@ And it wasn't stormy.
<Dialog name="Ralph">
- <text id="0">
- Hello there!
- <option text="Hello" nextid="1" />
- <option text="Frig" nextid="2" />
+ <text id="0" nextid="1" >
+ Hello there! My name is Ralph.
</text>
- <text id="1">
- gg.
+ <text id="1" nextid="2" call="Johnny" callid="0" pause="true" >
+ You should go talk to my friend Johnny. He's a pretty chill dude.
</text>
- <text id="2" call="Johnny" callid="1">
- what you have done it to trick Microsoft
+ <text id="2" >
+ <quest check="Your First Quest" fail="3" />
+ Niice.
</text>
+ <text id="3">
+ Go check out Johnny. He's cool.
+ </text>
</Dialog>
<Dialog name="Johnny">
- <text id="0" nextid="1" pause="true">
- Sup bro!
- <quest assign="Quest #1" />
+ <text id="0" nextid="1" pause="true" >
+ Sup bro! Have a quest. To complete it, just go talk to Ralph again.
+ <quest assign="Your First Quest" >
+ Dank Maymay
+ </quest>
</text>
- <text id="1" stop="true">
- My name's Johnny.
- <give id="Dank Maymay" count="1" />
+ <text id="1" nextid="1" pause="true" >
+ Broooooooooooooo...
</text>
</Dialog>