aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authordrumsetmonkey <abelleisle@roadrunner.com>2015-12-14 08:43:23 -0500
committerdrumsetmonkey <abelleisle@roadrunner.com>2015-12-14 08:43:23 -0500
commit3f70fa248e411178f33075f4b90f112eced37f14 (patch)
tree4d95da1a5b0bfb4f9f154e2fb6898950bed9bd5a /src
parentc5050b17d16670c6151d5c135c3b01d66b7530f9 (diff)
parent43bbcf02fd5e4e69a9aa521fa4cd572cc8675cf3 (diff)
Shit
Diffstat (limited to 'src')
-rw-r--r--src/entities.cpp8
-rw-r--r--src/gameplay.cpp231
-rw-r--r--src/ui.cpp30
-rw-r--r--src/world.cpp50
4 files changed, 154 insertions, 165 deletions
diff --git a/src/entities.cpp b/src/entities.cpp
index 1fefa9a..9d0ea9b 100644
--- a/src/entities.cpp
+++ b/src/entities.cpp
@@ -151,7 +151,7 @@ Mob::Mob(int sub){
height = HLINE * 8;
tex = new Texturec(1, "assets/robin.png");
case MS_TRIGGER:
- width = HLINE * 8;
+ width = HLINE * 20;
height = 2000;
tex = new Texturec(0);
break;
@@ -355,7 +355,7 @@ void NPC::interact(){ //have the npc's interact back to the player
if(aiFunc.size())aiFunc.erase(aiFunc.begin());
}
}else{
- ui::dialogBox(name,NULL,randomDialog[randDialog]);
+ ui::dialogBox(name,NULL,false,randomDialog[randDialog]);
}
ui::waitForDialog();
canMove=true;
@@ -363,7 +363,7 @@ void NPC::interact(){ //have the npc's interact back to the player
void Object::interact(void){
if(questObject && alive){
- ui::dialogBox(player->name,":Yes:No",pickupDialog);
+ ui::dialogBox(player->name,":Yes:No",false,pickupDialog);
ui::waitForDialog();
if(ui::dialogOptChosen == 1){
player->inv->addItem((ITEM_ID)(identifier), (char)1);
@@ -453,8 +453,6 @@ void Mob::wander(int timeRun){
case MS_TRIGGER:
if(player->loc.x + player->width / 2 > loc.x &&
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(this);
}
break;
diff --git a/src/gameplay.cpp b/src/gameplay.cpp
index 54ef432..59320af 100644
--- a/src/gameplay.cpp
+++ b/src/gameplay.cpp
@@ -1,150 +1,146 @@
#include <common.h>
+#include <entities.h>
#include <world.h>
#include <ui.h>
-#include <entities.h>
extern World *currentWorld;
extern Player *player;
-int compTestQuest(NPC *speaker){
- ui::dialogBox(speaker->name,NULL,"Ooo, that's a nice quest you got there. Lemme finish that for you ;).");
- player->qh.finish("Test",player);
- return 0;
+/*
+ * int (npc*)
+ *
+ * dialog
+ * wait...
+ *
+ * switch optchosen
+ *
+ * qh.assign
+ * addAIFunc?
+ *
+ * return 1 = repeat
+ */
+
+void story(Mob *callee){
+ player->vel.x = 0;
+ Mix_FadeOutMusic(0);
+ ui::importantText("It was a dark and stormy night...");
+ ui::waitForDialog();
+ callee->alive = false;
}
-int giveTestQuest(NPC *speaker){
- ui::dialogBox(speaker->name,":Yes:No","Here, have a quest!");
- ui::waitForDialog();
-
- if(ui::dialogOptChosen == 1){
-
- ui::dialogBox(speaker->name,"","Have a good day! :)");
- ui::waitForDialog();
-
- player->qh.assign("Test");
- currentWorld->npc[1]->addAIFunc(compTestQuest,true);
-
- }else return 1;
-
- return 0;
+float gen_worldSpawnHill1(float x){
+ return (float)(pow(2,(-x+200)/5) + GEN_MIN);
}
-void CUTSCENEEE(Mob *callee){
- player->vel.x = 0;
-
- ui::dialogBox(player->name,":K then","No way I\'m gettin\' up this hill.");
- ui::waitForDialog();
+float gen_worldSpawnHill3(float x){
+ float tmp = 60*atan(-(x/30-20))+GEN_MIN*2;
+ return tmp>GEN_MIN?tmp:GEN_MIN;
+}
- player->right = true;
- player->left = false;
- player->loc.x += HLINE * 5;
-
+/*
+ * Thing-thangs
+ */
+
+void worldSpawnHill1_hillBlock(Mob *callee){
+ player->vel.x = 0;
+ player->loc.x = callee->loc.x + callee->width;
+ ui::dialogBox(player->name,NULL,false,"This hill seems to steep to climb up...");
callee->alive = true;
}
-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 smell like soap.");
- ui::waitForDialog();
+void worldSpawnHill2_infoSprint(Mob *callee){
+ ui::dialogBox("B-) ",NULL,true,"Press \'Shift\' to run!");
callee->alive = false;
}
-void story(Mob *callee){
- player->vel.x = 0;
- Mix_FadeOutMusic(0);
- ui::importantText("It was a dark and stormy night...");
- ui::waitForDialog();
+void worldSpawnHill3_itemGet(Mob *callee){
+ ui::dialogBox("B-) ",NULL,true,"Right click to pick up items!");
callee->alive = false;
}
-float playerSpawnHillFunc(float x){
- return (float)(pow(2,(-x+200)/5) + 80);
+void worldSpawnHill3_itemSee(Mob *callee){
+ ui::dialogBox("B-) ",NULL,true,"Press \'e\' to open your inventory!");
+ callee->alive = false;
}
-static World *test;
-static World *playerSpawnHill;
-static IndoorWorld *iw;
+void worldSpawnHill3_leave(Mob *callee){
+ ui::dialogBox("B-) ",NULL,true,"Now jump in this hole, and let your journey begin :)");
+ callee->alive = false;
+}
-void destroyEverything(void);
+/*
+ * new world
+ * gen
+ * setbackground
+ * setbgm
+ * add...
+ *
+ */
+
+/*
+ * World definitions
+ */
+
+static World *worldSpawnHill1;
+static World *worldSpawnHill2;
+static World *worldSpawnHill3;
+/*
+ * initEverything() start
+ */
+
+void destroyEverything(void);
void initEverything(void){
- //FILE *load;
-
- /*
- * World creation:
- */
-
- test=new World();
-
- test->generate(SCREEN_WIDTH*2);
- test->setBackground(BG_FOREST);
- test->setBGM("assets/music/embark.wav");
-
- test->addHole(100,150);
- test->addLayer(400);
-
- playerSpawnHill=new World();
- playerSpawnHill->setBackground(BG_FOREST);
- playerSpawnHill->setBGM("assets/music/embark.wav");
-
- /*if((load=fopen("world.dat","rb"))){
- playerSpawnHill->load(load);
- fclose(load);
- }else{*/
- playerSpawnHill->generateFunc(1280,playerSpawnHillFunc);
- //}
- /*
- * Setup the current world, making the player initially spawn in `test`.
- */
-
- currentWorld=playerSpawnHill;
-
- playerSpawnHill->toRight=test;
- test->toLeft=playerSpawnHill;
-
- /*
- * Create the player.
- */
-
- player=new Player();
- player->spawn(-1000,200);
-
- /*
- * Create a structure (this will create villagers when spawned).
- */
-
- iw=new IndoorWorld();
- iw->setBackground(BG_WOODHOUSE);
- iw->setBGM(NULL);
- iw->generate(200);
- iw->addMob(MS_TRIGGER,0,0,CUTSCENEEE2);
-
+ worldSpawnHill1 = new World();
+ worldSpawnHill1->generateFunc(400,gen_worldSpawnHill1);
+ worldSpawnHill1->setBackground(BG_FOREST);
+ worldSpawnHill1->setBGM("assets/music/embark.wav");
+ worldSpawnHill1->addMob(MS_TRIGGER,0,0,worldSpawnHill1_hillBlock);
+
+ worldSpawnHill2 = new World();
+ worldSpawnHill2->generate(700);
+ worldSpawnHill2->setBackground(BG_FOREST);
+ worldSpawnHill2->setBGM("assets/music/embark.wav");
+ worldSpawnHill2->addMob(MS_TRIGGER,-400,0,worldSpawnHill2_infoSprint);
+
+ worldSpawnHill3 = new World();
+ worldSpawnHill3->generateFunc(1000,gen_worldSpawnHill3);
+ worldSpawnHill3->setBackground(BG_FOREST);
+ worldSpawnHill3->setBGM("assets/music/embark.wav");
+ worldSpawnHill3->addMob(MS_TRIGGER,-500,0,worldSpawnHill3_itemGet);
+ worldSpawnHill3->addMob(MS_TRIGGER,0,0,worldSpawnHill3_itemSee);
+ worldSpawnHill3->addObject(TEST_ITEM,false,"",-200,300);
+ worldSpawnHill3->addMob(MS_TRIGGER,400,0,worldSpawnHill3_leave);
+ worldSpawnHill3->addHole(800,1000);
+
+ worldSpawnHill1->toRight = worldSpawnHill2;
+ worldSpawnHill2->toLeft = worldSpawnHill1;
+ worldSpawnHill2->toRight = worldSpawnHill3;
+ worldSpawnHill3->toLeft = worldSpawnHill2;
+
/*
* Spawn some entities.
*/
- playerSpawnHill->addMob(MS_TRIGGER,player->loc.x,0,story);
+ //playerSpawnHill->addMob(MS_TRIGGER,player->loc.x,0,story);
- playerSpawnHill->addStructure(STRUCTURET,HOUSE,(rand()%120*HLINE),100,test,iw);
- playerSpawnHill->addStructure(STRUCTURET,FOUNTAIN,(rand()%120*HLINE)+100*HLINE,100,test,iw);
+ //worldSpawnHill2->addStructure(STRUCTURET,HOUSE,(rand()%120*HLINE),100,worldSpawnHill1,worldSpawnHill2);
+ //playerSpawnHill->addStructure(STRUCTURET,FOUNTAIN,(rand()%120*HLINE)+100*HLINE,100,test,iw);
//playerSpawnHill->addStructure(STRUCTURET,HOUSE2,(rand()%120*HLINE)+300*HLINE,100,test,iw);
//playerSpawnHill->addVillage(5,1,4,STRUCTURET,rand()%500+120,(float)200,playerSpawnHill,iw);
- playerSpawnHill->addMob(MS_TRIGGER,-1300,0,CUTSCENEEE);
-
- playerSpawnHill->addObject(SWORD_WOOD, false, "", 480,200);
- playerSpawnHill->addObject(FLASHLIGHT, false, "", 500,200);
- playerSpawnHill->addObject(PLAYER_BAG, false, "", 520,200);
- playerSpawnHill->addObject(TEST_ITEM, false, "", 540,200);
+ //playerSpawnHill->addMob(MS_TRIGGER,-1300,0,CUTSCENEEE);*/
+
+
+ currentWorld = worldSpawnHill1;
+ worldSpawnHill2->addStructure(STRUCTURET,FOUNTAIN,(rand()%120*HLINE)+100*HLINE,100,worldSpawnHill2,worldSpawnHill2);
- test->addMob(MS_RABBIT,200,100);
- test->addMob(MS_BIRD,-500,500);
+ player = new Player();
+ player->spawn(200,100);
- playerSpawnHill->npc[0]->addAIFunc(giveTestQuest,false);
+ currentWorld->bgmPlay(NULL);
- currentWorld->bgmPlay();
atexit(destroyEverything);
}
@@ -152,21 +148,8 @@ extern std::vector<int (*)(NPC *)> AIpreload;
extern std::vector<NPC *> AIpreaddr;
void destroyEverything(void){
- //FILE *save;
-
- /*save = fopen("world.dat","wb");
- playerSpawnHill->save(save);
- fclose(save);*/
-
- delete test;
- delete playerSpawnHill;
-
- while(!AIpreload.empty()){
+ while(!AIpreload.empty())
AIpreload.pop_back();
- }
- while(!AIpreaddr.empty()){
+ while(!AIpreaddr.empty())
AIpreaddr.pop_back();
- }
-
- //delete iw; // segfaults
}
diff --git a/src/ui.cpp b/src/ui.cpp
index 013d1ae..26b30c4 100644
--- a/src/ui.cpp
+++ b/src/ui.cpp
@@ -48,6 +48,7 @@ static char dialogBoxText[512];
static char *dialogOptText[4];
static float dialogOptLoc[4][3];
static unsigned char dialogOptCount = 0;
+static bool dialogPassive = false;
static bool typeOutDone = true;
Mix_Chunk *dialogClick;
@@ -346,7 +347,8 @@ namespace ui {
if(linc<size)
linc++;
- else typeOutDone = true;
+ else
+ typeOutDone = true;
}
return ret; // The buffered string.
@@ -385,11 +387,13 @@ namespace ui {
return width;
}
- void dialogBox(const char *name,const char *opt,const char *text,...){
+ void dialogBox(const char *name,const char *opt,bool passive,const char *text,...){
va_list dialogArgs;
unsigned int len;
char *sopt,*soptbuf;
+ dialogPassive = passive;
+
/*
* Set up the text buffer.
*/
@@ -422,7 +426,7 @@ namespace ui {
};
dialogOptChosen=0;
- dialogOptCount=0;
+ memset(&dialogOptLoc,0,sizeof(float)*12);
if(opt){
@@ -632,7 +636,8 @@ DONE:
player->ground=false;
}
break;
- }else if(!dialogBoxExists){//&&!fadeEnable){
+ }else if(!dialogBoxExists || dialogPassive){
+ tmp = currentWorld;
switch(SDL_KEY){
case SDLK_a:
player->vel.x=-.15;
@@ -641,6 +646,8 @@ DONE:
left = true;
right = false;
currentWorld=currentWorld->goWorldLeft(player);
+ if(tmp!=currentWorld)
+ dialogBoxExists = false;
break;
case SDLK_d:
player->vel.x=.15;
@@ -649,6 +656,8 @@ DONE:
left = false;
right = true;
currentWorld=currentWorld->goWorldRight(player);
+ if(tmp!=currentWorld)
+ dialogBoxExists = false;
break;
case SDLK_s:
if(player->ground == 2){
@@ -662,7 +671,6 @@ DONE:
else currentWorld=currentWorld->goInsideStructure(player);
break;
case SDLK_i:
- tmp=currentWorld;
currentWorld=currentWorld->goWorldBack(player); // Go back a layer if possible
if(tmp!=currentWorld){
currentWorld->detect(player);
@@ -672,7 +680,6 @@ DONE:
}
break;
case SDLK_k:
- tmp=currentWorld;
currentWorld=currentWorld->goWorldFront(player); // Go forward a layer if possible
if(tmp!=currentWorld){
currentWorld->behind->detect(player);
@@ -682,7 +689,13 @@ DONE:
}
break;
case SDLK_LSHIFT:
- player->speed = debug ? 4.0f : 1.75f;
+ if(debug){
+ Mix_Chunk *sanic;
+ sanic = Mix_LoadWAV("assets/sounds/sanic.wav");
+ Mix_PlayChannel(1,sanic,-1);
+ player->speed = 4.0f;
+ }else
+ player->speed = 2.0f;
break;
case SDLK_LCTRL:
player->speed = .5;
@@ -720,6 +733,9 @@ DONE:
right = false;
break;
case SDLK_LSHIFT:
+ if(player->speed == 4){
+ Mix_FadeOutChannel(1,2000);
+ }
player->speed = 1;
break;
case SDLK_LCTRL:
diff --git a/src/world.cpp b/src/world.cpp
index 8994f6c..c1c306e 100644
--- a/src/world.cpp
+++ b/src/world.cpp
@@ -3,8 +3,6 @@
#define getWidth(w) ((w->lineCount-GEN_INC)*HLINE) // Calculates the width of world 'w'
-#define GEN_MIN 80
-#define GEN_MAX 110
#define GEN_INIT 60
#define GRASS_HEIGHT 4 // Defines how long the grass layer of a line should be in multiples of HLINE.
@@ -119,9 +117,13 @@ void World::deleteEntities(void){
}
World::~World(void){
- if(behind)
+ if(behind != NULL)
delete behind;
+ if(bgmObj)
+ Mix_FreeMusic(bgmObj);
+ if(bgm)
+ delete[] bgm;
delete bgTex;
delete[] star;
delete[] line;
@@ -343,24 +345,13 @@ void World::setBGM(const char *path){
}
}
-static Mix_Music *bgmC;
-
-void World::bgmPlay(void){
- if(bgmObj && bgmC != bgmObj){
+void World::bgmPlay(World *prev){
+ if(!prev || strcmp(bgm,prev->bgm)){
Mix_VolumeMusic(50);
Mix_PlayMusic(bgmObj,-1); // Loop infinitely
- bgmC = bgmObj;
- }else{
+ }/*else{
Mix_FadeOutMusic(800);
- }
-}
-
-void World::bgmStop(void){
- if(bgmObj){
- if(bgmC != bgmObj){
- Mix_FreeMusic(bgmObj);
- }
- }
+ }*/
}
int worldShade = 0;
@@ -549,10 +540,7 @@ LOOP2:
*/
for(auto &b : current->build){
- //b->loc.y+=(yoff-DRAW_Y_OFFSET);
b->draw();
- //b->loc.y-=(yoff-DRAW_Y_OFFSET);
- //std::cout<<b->loc.x<<" "<<b->loc.y<<std::endl;
}
/*
@@ -809,29 +797,33 @@ void World::singleDetect(Entity *e){
* Check that the entity isn't trying to run through a wall.
*/
- if(e->loc.y + e->height > line[i-(int)e->width/2/HLINE].y &&
- e->loc.y + e->height > line[i+(int)e->width/2/HLINE].y ){
+ //if(e->loc.y + e->height > line[i-(int)e->width/2/HLINE].y &&
+ // e->loc.y + e->height > line[i+(int)e->width/2/HLINE].y ){
e->loc.y=line[i].y - .001 * deltaTime;
e->ground=true;
e->vel.y=0;
- }else{
+ //}else{
/*
* Push the entity out of the wall if it's trying to go through it.
*/
- do{
+ /*do{
e->loc.x+=.001 * e->vel.x>0?-1:1;
l=(e->loc.x - e->width / 2 - x_start) / HLINE;
- if(l < 0){ e->alive = false; return; }
+ if(l < 0){
+ std::cout<<"push kill lol "<<e->type<<std::endl;
+ e->alive = false; return; }
i = l;
- if(i > lineCount-1){ e->alive = false; return; }
+ if(i > lineCount-1){
+ std::cout<<"push kill lol "<<e->type<<std::endl;
+ e->alive = false; return; }
}while(line[i].y>e->loc.y+ e->height);
- }
+ }*/
/*
* Handle gravity if the entity is above the line.
@@ -845,7 +837,7 @@ void World::singleDetect(Entity *e){
e->ground = true;
return;
}else if(e->vel.y > -2)e->vel.y-=.003 * deltaTime;
-
+
}
/*