aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Texture.cpp11
-rw-r--r--src/entities.cpp8
-rw-r--r--src/gameplay.cpp13
-rw-r--r--src/world.cpp43
4 files changed, 55 insertions, 20 deletions
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);