- 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
GLuint *image;
Texturec(uint amt, ...);
+ Texturec(uint amt,const char **paths);
~Texturec();
void bindNext();
class Mob : public Entity{
public:
double init_y;
- void (*hey)();
+ void (*hey)(Mob *callee);
Mob(int);
Mob(int,unsigned int);
#define DAY_CYCLE 3000
typedef enum {
- BG_FOREST
+ BG_FOREST,
+ BG_WOODHOUSE
} WORLD_BG_TYPE;
typedef enum {
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);
}
}
+ if(!fileName)
+ return 0;
+
if(!(image = IMG_Load(fileName)))
return 0;
#ifdef DEBUG
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;
}
* 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){
}
}
-void Object::interact(void){
+void Object::interact(void){
if(questObject && alive){
ui::dialogBox("You",":Yes:No",pickupDialog);
ui::waitForDialog();
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:
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.");
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);
}
*/
iw=new IndoorWorld();
+ iw->setBackground(BG_WOODHOUSE);
iw->generate(200);
+ iw->addMob(MS_TRIGGER,0,0,CUTSCENEEE2);
/*
* Spawn some entities.
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]={
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;
}
}
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;
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);