From b447a664066e98cc827626526179b3a3db22fa30 Mon Sep 17 00:00:00 2001
From: Clyne Sullivan <tullivan99@gmail.com>
Date: Wed, 2 Dec 2015 08:48:39 -0500
Subject: world bg improvements

---
 Changelog             |   9 +++++++++
 assets/bgWoodTile.png | Bin 0 -> 65078 bytes
 include/Texture.h     |   1 +
 include/entities.h    |   2 +-
 include/world.h       |   5 +++--
 src/Texture.cpp       |  11 +++++++++++
 src/entities.cpp      |   8 ++------
 src/gameplay.cpp      |  13 ++++++++++++-
 src/world.cpp         |  43 ++++++++++++++++++++++++++++++-------------
 xcf/bgWoodTile.xcf    | Bin 0 -> 511093 bytes
 10 files changed, 69 insertions(+), 23 deletions(-)
 create mode 100644 assets/bgWoodTile.png
 create mode 100644 xcf/bgWoodTile.xcf

diff --git a/Changelog b/Changelog
index f1e8841..a272795 100644
--- a/Changelog
+++ b/Changelog
@@ -355,3 +355,12 @@
 	- ran game through valgrind, fixed almost all memory leaks/errors
 	- smoothed out game animations
 	- broke the game
+
+12/2/2015:
+==========
+
+	- fixed many item related segfaults :)
+	- removed std::thread calls
+	- improved world background drawing; added that to IndoorWorld's
+	- improved inventory functionality
+	- fixed issues with cutscenes
diff --git a/assets/bgWoodTile.png b/assets/bgWoodTile.png
new file mode 100644
index 0000000..0c7c64b
Binary files /dev/null and b/assets/bgWoodTile.png differ
diff --git a/include/Texture.h b/include/Texture.h
index 1a32aae..5f5758b 100644
--- a/include/Texture.h
+++ b/include/Texture.h
@@ -16,6 +16,7 @@ public:
 	GLuint *image;
 	
 	Texturec(uint amt, ...);
+	Texturec(uint amt,const char **paths);
 	~Texturec();
 	
 	void bindNext();
diff --git a/include/entities.h b/include/entities.h
index 4413d41..19dd492 100644
--- a/include/entities.h
+++ b/include/entities.h
@@ -125,7 +125,7 @@ public:
 class Mob : public Entity{
 public:
 	double init_y;
-	void (*hey)();
+	void (*hey)(Mob *callee);
 	
 	Mob(int);
 	Mob(int,unsigned int);
diff --git a/include/world.h b/include/world.h
index 6c0395d..57ea091 100644
--- a/include/world.h
+++ b/include/world.h
@@ -12,7 +12,8 @@
 #define DAY_CYCLE 3000
 
 typedef enum {
-	BG_FOREST
+	BG_FOREST,
+	BG_WOODHOUSE
 } WORLD_BG_TYPE;
 
 typedef enum {
@@ -106,7 +107,7 @@ public:
 	
 	void addStructure(_TYPE t,float x,float y,World *outside,World *inside);
 	void addMob(int t,float x,float y);
-	void addMob(int t,float x,float y,void (*hey)());
+	void addMob(int t,float x,float y,void (*hey)(Mob *));
 	void addNPC(float x,float y);
 	void addObject(ITEM_ID, bool, const char *, float, float);
 	
diff --git a/src/Texture.cpp b/src/Texture.cpp
index a3a8afe..a44f1a7 100644
--- a/src/Texture.cpp
+++ b/src/Texture.cpp
@@ -23,6 +23,9 @@ namespace Texture{
 			}
 		}
 
+		if(!fileName)
+			return 0;
+
 		if(!(image = IMG_Load(fileName)))
 			return 0;
 #ifdef DEBUG
@@ -73,6 +76,14 @@ Texturec::Texturec(uint amt, ...){
 	va_end(fNames);
 }
 
+Texturec::Texturec(uint amt,const char **paths){
+	texState = 0;
+	image = new GLuint[amt];
+	for(int i = 0; i < amt; i++){
+		image[i] = Texture::loadTexture(paths[i]);
+	}
+}
+
 Texturec::~Texturec(){
 	delete[] image;
 }
diff --git a/src/entities.cpp b/src/entities.cpp
index 3286784..9c5e3cb 100644
--- a/src/entities.cpp
+++ b/src/entities.cpp
@@ -280,10 +280,6 @@ void Player::interact(){ //the function that will cause the player to search for
  *	NPC::wander, this makes the npcs wander around the near area
  *
  *	timeRun					This variable is the amount of gameloop ticks the entity will wander for
- *
- *	*v 						This is a pointer to whatever vec2 value is passed to it, usually the value
- *							passed is the entities vec2 for coordinates. Since the value is a pointer
- *							the memory address passed to it is directly modified.
 */
 
 void NPC::wander(int timeRun){
@@ -339,7 +335,7 @@ void NPC::interact(){ //have the npc's interact back to the player
 	}
 }
 
-void Object::interact(void){	
+void Object::interact(void){
 	if(questObject && alive){
 		ui::dialogBox("You",":Yes:No",pickupDialog);		
 		ui::waitForDialog();
@@ -435,7 +431,7 @@ void Mob::wander(int timeRun){
 		   player->loc.x + player->width / 2 < loc.x + width ){
 			if(player->left)player->loc.x = loc.x + width;
 			else if(player->right) player->loc.x = loc.x - player->width;
-			hey();
+			hey(this);
 		}
 		break;
 	default:
diff --git a/src/gameplay.cpp b/src/gameplay.cpp
index 64b3908..711fc1d 100644
--- a/src/gameplay.cpp
+++ b/src/gameplay.cpp
@@ -34,7 +34,7 @@ int giveTestQuest(NPC *speaker){
 
 static Arena *a;
 
-void CUTSCENEEE(void){
+void CUTSCENEEE(Mob *callee){
 	player->vel.x = 0;
 	
 	ui::dialogBox(player->name,":K.","No way I\'m gettin\' up this hill.");
@@ -48,6 +48,15 @@ void CUTSCENEEE(void){
 	player->loc.x += HLINE * 5;*/
 }
 
+void CUTSCENEEE2(Mob *callee){
+	player->vel.x = 0;
+	ui::dialogBox(player->name,":Yeah.",
+	"What the fuck is this dead end supposed \
+	to mean, and why this place smells like soap.");
+	ui::waitForDialog();
+	callee->alive = false;
+}
+
 float playerSpawnHillFunc(float x){
 	return (float)(pow(2,(-x+200)/5) + 80);
 }
@@ -99,7 +108,9 @@ void initEverything(void){
 	*/
 	
 	iw=new IndoorWorld();
+	iw->setBackground(BG_WOODHOUSE);
 	iw->generate(200);
+	iw->addMob(MS_TRIGGER,0,0,CUTSCENEEE2);
 	
 	/*
 	 *	Spawn some entities.
diff --git a/src/world.cpp b/src/world.cpp
index c078726..d81d8de 100644
--- a/src/world.cpp
+++ b/src/world.cpp
@@ -18,13 +18,19 @@ bool worldInside = false;		// True if player is inside a structure
 
 WEATHER weather = SUNNY;
 
-const char *bgPaths[6]={
-	"assets/bg.png",				// Daytime background
+const char *bgPaths[2][6]={
+	{"assets/bg.png",				// Daytime background
 	"assets/bgn.png",				// Nighttime background
 	"assets/bgFarMountain.png",		// Furthest layer
 	"assets/forestTileBack.png",	// Closer layer
 	"assets/forestTileMid.png",		// Near layer
-	"assets/forestTileFront.png"	// Closest layer
+	"assets/forestTileFront.png"},	// Closest layer
+	{"assets/bgWoodTile.png",
+	 NULL,
+	 NULL,
+	 NULL,
+	 NULL,
+	 NULL}
 };
 
 const float bgDraw[3][3]={
@@ -45,14 +51,11 @@ float worldGetYBase(World *w){
 
 void World::setBackground(WORLD_BG_TYPE bgt){
 	switch(bgt){
-	default:
-		bgTex = new Texturec(6,bgPaths[0],
-							   bgPaths[1],
-							   bgPaths[2],
-							   bgPaths[3],
-							   bgPaths[4],
-							   bgPaths[5]
-							   );
+	case BG_FOREST:
+		bgTex = new Texturec(6,bgPaths[0]);
+		break;
+	case BG_WOODHOUSE:
+		bgTex = new Texturec(1,bgPaths[1]);
 		break;
 	}
 }
@@ -768,7 +771,7 @@ void World::addMob(int t,float x,float y){
 	entity.push_back(mob.back());
 }
 
-void World::addMob(int t,float x,float y,void (*hey)()){
+void World::addMob(int t,float x,float y,void (*hey)(Mob *)){
 	mob.push_back(new Mob(t));
 	mob.back()->spawn(x,y);
 	mob.back()->hey = hey;
@@ -910,13 +913,27 @@ void IndoorWorld::generate(unsigned int width){		// Generates a flat area of wid
 void IndoorWorld::draw(Player *p){
 	int i,ie,v_offset;
 	
+	glEnable(GL_TEXTURE_2D);
+	bgTex->bind(0);
+	glColor4ub(255,255,255,255);
+	glBegin(GL_QUADS);
+		for(i = x_start - SCREEN_WIDTH / 2;i < -x_start + SCREEN_WIDTH / 2; i += 1024){
+			glTexCoord2i(1,1);glVertex2i(i     ,0);
+			glTexCoord2i(0,1);glVertex2i(i+1024,0);
+			glTexCoord2i(0,0);glVertex2i(i+1024,1024);
+			glTexCoord2i(1,0);glVertex2i(i     ,1024);
+		}
+	glEnd();
+	glDisable(GL_TEXTURE_2D);
+	
 	v_offset=(p->loc.x-x_start)/HLINE;					// Calculate the player's offset in the array 'line' using the player's location 'vec'
 	i=v_offset-SCREEN_WIDTH/2;							// um
 	if(i<0)i=0;											// If the player is past the start of that world 'i' should start at the beginning
 														// of the world
 	ie=v_offset+SCREEN_WIDTH/2;							// Set how many lines should be drawn (the drawing for loop loops from 'i' to 'ie')
 	if(ie>lineCount)ie=lineCount;						// If the player is past the end of that world 'ie' should contain the end of that world
-	glClearColor(.3,.1,0,0);
+	//glClearColor(.3,.1,0,0);
+	
 	glBegin(GL_QUADS);
 		for(i=i;i<ie-GEN_INC;i++){						// For lines in array 'line' from 'i' to 'ie'
 			safeSetColor(150,100,50);
diff --git a/xcf/bgWoodTile.xcf b/xcf/bgWoodTile.xcf
new file mode 100644
index 0000000..9aa0005
Binary files /dev/null and b/xcf/bgWoodTile.xcf differ
-- 
cgit v1.2.3


From 6b44ecd9da08087f4a44dd3daef211e763eb1c61 Mon Sep 17 00:00:00 2001
From: Clyne Sullivan <tullivan99@gmail.com>
Date: Thu, 3 Dec 2015 07:26:22 -0500
Subject: exit fixes, faster dialog

---
 src/entities.cpp |  8 +++++---
 src/ui.cpp       | 16 ++++++++++++++--
 src/world.cpp    |  6 ++----
 3 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/src/entities.cpp b/src/entities.cpp
index 9c5e3cb..f0e7d16 100644
--- a/src/entities.cpp
+++ b/src/entities.cpp
@@ -120,11 +120,13 @@ Structures::Structures(){ //sets the structure type
 	tex = new Texturec(1,"assets/house1.png");
 	
 	inWorld = NULL;
+	name = NULL;
 }
 Structures::~Structures(){
-	delete inv;
+	//delete inv;
 	delete tex;
-	delete[] name;
+	if(name)
+		delete[] name;
 }
 
 Mob::Mob(int sub){
@@ -177,7 +179,7 @@ Object::Object(ITEM_ID id, bool qo, const char *pd){
 Object::~Object(){
 	delete[] pickupDialog;
 	
-	delete inv;
+	//delete inv;
 	delete tex;
 	delete[] name;
 }
diff --git a/src/ui.cpp b/src/ui.cpp
index e10ed46..f01dab8 100644
--- a/src/ui.cpp
+++ b/src/ui.cpp
@@ -48,6 +48,7 @@ static char *dialogBoxText			= NULL;
 static char *dialogOptText[4];
 static float dialogOptLoc[4][3];
 static unsigned char dialogOptCount = 0;
+static bool typeOutDone = true;
 
 extern void mainLoop(void);
 
@@ -318,18 +319,23 @@ namespace ui {
 			size=strlen(str);		//	Set the new target string size
 			linc=0;					//	Reset the incrementers
 			sinc=1;
+			typeOutDone = false;
 		}
 		
 		/*
 		 *	Draw the next letter if necessary.
 		*/
 		
-		if(++sinc==2){
+		if(typeOutDone)
+			return str;
+		else if(++sinc==2){
 			sinc=0;
 			
 			strncpy(ret+linc,str+linc,1);	//	Get next character
 			
-			if(linc<size)linc++;
+			if(linc<size)
+				linc++;
+			else typeOutDone = true;
 		}
 		
 		return ret;		//	The buffered string.
@@ -533,6 +539,12 @@ namespace ui {
 				break;
 			case SDL_MOUSEBUTTONDOWN:
 				if((e.button.button&SDL_BUTTON_RIGHT)&&dialogBoxExists){
+				
+					if(!typeOutDone){
+						typeOutDone = true;
+						break;
+					}
+				
 					for(i=0;i<dialogOptCount;i++){
 						if(mouse.x > dialogOptLoc[i][0] &&
 						   mouse.x < dialogOptLoc[i][2] &&
diff --git a/src/world.cpp b/src/world.cpp
index d81d8de..3557121 100644
--- a/src/world.cpp
+++ b/src/world.cpp
@@ -95,11 +95,9 @@ void World::deleteEntities(void){
 }
 
 World::~World(void){
-	
-	if(behind){
+	if(behind)
 		delete behind;
-	}
-
+	
 	delete bgTex;
 	delete[] star;
 	delete[] line;
-- 
cgit v1.2.3