From d2aa39603eb8a26142a0230188d2572fb0398af5 Mon Sep 17 00:00:00 2001 From: Clyne Sullivan Date: Wed, 9 Dec 2015 07:47:00 -0500 Subject: dialog clicks --- assets/click.wav | Bin 0 -> 17684 bytes src/gameplay.cpp | 14 +++++++++++++- src/ui.cpp | 9 +++++++++ src/world.cpp | 2 +- 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 assets/click.wav diff --git a/assets/click.wav b/assets/click.wav new file mode 100644 index 0000000..976fb42 Binary files /dev/null and b/assets/click.wav differ diff --git a/src/gameplay.cpp b/src/gameplay.cpp index 856b397..f665b38 100644 --- a/src/gameplay.cpp +++ b/src/gameplay.cpp @@ -39,7 +39,7 @@ void CUTSCENEEE(Mob *callee){ player->left = false; player->loc.x += HLINE * 5; - callee->alive = false; + callee->alive = true; } void CUTSCENEEE2(Mob *callee){ @@ -54,6 +54,18 @@ void story(Mob *callee){ player->vel.x = 0; ui::importantText("It was a dark and stormy night..."); ui::waitForDialog(); + ui::importantText("...and Clyne wanted to hear what the click track sounds like."); + ui::waitForDialog(); + ui::importantText("So Clyne made a really long piece of dialog so that the sound"); + ui::waitForDialog(); + ui::importantText("plays"); + ui::waitForDialog(); + ui::importantText("multiple"); + ui::waitForDialog(); + ui::importantText("times."); + ui::waitForDialog(); + ui::importantText("Clyne is quite satisfied."); + ui::waitForDialog(); callee->alive = false; } diff --git a/src/ui.cpp b/src/ui.cpp index 6fa2770..f843e7d 100644 --- a/src/ui.cpp +++ b/src/ui.cpp @@ -52,6 +52,8 @@ static bool typeOutDone = true; static bool dialogImportant = false; +Mix_Chunk *dialogClick; + extern void mainLoop(void); /* @@ -111,6 +113,8 @@ namespace ui { #ifdef DEBUG DEBUG_printf("Initialized FreeType2.\n",NULL); #endif // DEBUG + dialogClick = Mix_LoadWAV("assets/click.wav"); + Mix_Volume(1,50); } /* @@ -516,6 +520,11 @@ namespace ui { } setFontColor(255,255,255); } + + if(strcmp(rtext,dialogBoxText)){ + Mix_PlayChannel(1,dialogClick,0); + } + }else if(!dialogImportant){ vec2 hub = { diff --git a/src/world.cpp b/src/world.cpp index 2bceba5..f751287 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -299,7 +299,7 @@ static Mix_Music *bgmC; void World::bgmPlay(void){ if(bgmObj && bgmC != bgmObj){ - Mix_VolumeMusic(15); + Mix_VolumeMusic(50); Mix_PlayMusic(bgmObj,-1); // Loop infinitely bgmC = bgmObj; } -- cgit v1.2.3 From 380137ca06c2c74806c1838cb10ef3a17dda8406 Mon Sep 17 00:00:00 2001 From: Clyne Sullivan Date: Wed, 9 Dec 2015 08:14:12 -0500 Subject: fade improvements --- include/ui.h | 3 ++ main.cpp | 15 ++++++---- src/ui.cpp | 88 ++++++++++++++++++++++++++++++++++++----------------------- src/world.cpp | 7 +++++ 4 files changed, 74 insertions(+), 39 deletions(-) diff --git a/include/ui.h b/include/ui.h index f2c0114..a5a2ec0 100644 --- a/include/ui.h +++ b/include/ui.h @@ -85,6 +85,9 @@ namespace ui { */ void toggleBlack(void); + void toggleBlackFast(void); + void toggleWhite(void); + void waitForCover(void); } diff --git a/main.cpp b/main.cpp index d1fd85e..4cafc24 100644 --- a/main.cpp +++ b/main.cpp @@ -208,6 +208,8 @@ unsigned int millis(void){ extern WEATHER weather; extern bool fadeEnable; +extern bool fadeWhite; +extern bool fadeFast; extern unsigned int fadeIntensity; /******************************************************************************* @@ -709,7 +711,10 @@ void render(){ */ if(fadeIntensity){ - glColor4ub(0,0,0,fadeIntensity); + if(fadeWhite) + glColor4ub(255,255,255,fadeIntensity); + else + glColor4ub(0,0,0,fadeIntensity); glRectf(offset.x-SCREEN_WIDTH /2, offset.y-SCREEN_HEIGHT/2, offset.x+SCREEN_WIDTH /2, @@ -965,11 +970,11 @@ void logic(){ * Transition to and from black if necessary. */ if(fadeEnable){ - if(fadeIntensity < 160)fadeIntensity+=10; - else if(fadeIntensity < 255)fadeIntensity+=5; + if(fadeIntensity < 150)fadeIntensity+=fadeFast?30:10; + else if(fadeIntensity < 255)fadeIntensity+=fadeFast?15:5; }else{ - if(fadeIntensity > 150)fadeIntensity-=5; - else if(fadeIntensity > 0) fadeIntensity-=10; + if(fadeIntensity > 150)fadeIntensity-=fadeFast?15:5; + else if(fadeIntensity > 0) fadeIntensity-=fadeFast?30:10; } /* diff --git a/src/ui.cpp b/src/ui.cpp index f843e7d..d72bf2c 100644 --- a/src/ui.cpp +++ b/src/ui.cpp @@ -61,6 +61,8 @@ extern void mainLoop(void); */ bool fadeEnable = false; +bool fadeWhite = false; +bool fadeFast = false; unsigned int fadeIntensity = 0; bool inBattle = false; @@ -452,6 +454,11 @@ namespace ui { mainLoop(); }while(ui::dialogBoxExists); } + void waitForCover(void){ + do{ + mainLoop(); + }while(fadeIntensity != 255); + } void importantText(const char *text,...){ va_list textArgs; @@ -525,7 +532,7 @@ namespace ui { Mix_PlayChannel(1,dialogClick,0); } - }else if(!dialogImportant){ + }else if(!dialogImportant && !fadeIntensity){ vec2 hub = { (SCREEN_WIDTH/2+offset.x)-fontSize*10, @@ -560,11 +567,34 @@ namespace ui { } } } + void dialogAdvance(void){ + unsigned char i; + if(!typeOutDone){ + typeOutDone = true; + return; + } + + for(i=0;i dialogOptLoc[i][0] && + mouse.x < dialogOptLoc[i][2] && + mouse.y > dialogOptLoc[i][1] && + mouse.y < dialogOptLoc[i][1] + 16 ){ // fontSize + dialogOptChosen = i + 1; + goto DONE; + } + } +DONE: + if(dialogImportant){ + dialogImportant = false; + setFontSize(16); + toggleBlack(); + } + dialogBoxExists = false; + } void handleEvents(void){ static bool left=true,right=false; static vec2 premouse={0,0}; static int heyOhLetsGo = 0; - unsigned char i; World *tmp; SDL_Event e; @@ -582,28 +612,7 @@ namespace ui { break; case SDL_MOUSEBUTTONDOWN: if((e.button.button&SDL_BUTTON_RIGHT)&&dialogBoxExists){ - - if(!typeOutDone){ - typeOutDone = true; - break; - } - - for(i=0;i dialogOptLoc[i][0] && - mouse.x < dialogOptLoc[i][2] && - mouse.y > dialogOptLoc[i][1] && - mouse.y < dialogOptLoc[i][1] + 16 ){ // fontSize - dialogOptChosen = i + 1; - goto DONE; - } - } -DONE: - if(dialogImportant){ - dialogImportant = false; - setFontSize(16); - toggleBlack(); - } - dialogBoxExists = false; + dialogAdvance(); } break; /* @@ -612,12 +621,18 @@ DONE: case SDL_KEYDOWN: if(SDL_KEY == SDLK_ESCAPE){ gameRunning = false; + return; + }else if(SDL_KEY == SDLK_SPACE){ + if(dialogBoxExists) + dialogAdvance(); + else if(player->ground){ + player->vel.y=.4; + player->loc.y+=HLINE*2; + player->ground=false; + } break; }else if(!dialogBoxExists){//&&!fadeEnable){ switch(SDL_KEY){ - case SDLK_ESCAPE: - gameRunning=false; - break; case SDLK_a: player->vel.x=-.15; player->left = true; @@ -645,13 +660,6 @@ DONE: currentWorld=((Arena *)currentWorld)->exitArena(player); else currentWorld=currentWorld->goInsideStructure(player); break; - case SDLK_SPACE: - if(player->ground){ - player->vel.y=.4; - player->loc.y+=HLINE*2; - player->ground=false; - } - break; case SDLK_i: tmp=currentWorld; currentWorld=currentWorld->goWorldBack(player); // Go back a layer if possible @@ -757,5 +765,17 @@ DONE: void toggleBlack(void){ fadeEnable ^= true; + fadeWhite = false; + fadeFast = false; + } + void toggleBlackFast(void){ + fadeEnable ^= true; + fadeWhite = false; + fadeFast = true; + } + void toggleWhite(void){ + fadeEnable ^= true; + fadeWhite = true; + fadeFast = false; } } diff --git a/src/world.cpp b/src/world.cpp index f751287..cb5f3ec 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -1,4 +1,5 @@ #include +#include #define getWidth(w) ((w->lineCount-GEN_INC)*HLINE) // Calculates the width of world 'w' @@ -923,6 +924,9 @@ World *World::goInsideStructure(Player *p){ if(p->loc.x > b->loc.x && p->loc.x + p->width < b->loc.x + b->width ){ thing.push_back(this); + ui::toggleBlackFast(); + ui::waitForCover(); + ui::toggleBlackFast(); return (World *)b->inside; } } @@ -932,6 +936,9 @@ World *World::goInsideStructure(Player *p){ World *tmp = (World *)thing.back(); p->loc.x = b->loc.x + (b->width / 2) - (p->width / 2); thing.erase(thing.end()-1); + ui::toggleBlackFast(); + ui::waitForCover(); + ui::toggleBlackFast(); return tmp; } } -- cgit v1.2.3 From 996a2b90c40b078dabc9a435156a836b9693d0b1 Mon Sep 17 00:00:00 2001 From: drumsetmonkey Date: Wed, 9 Dec 2015 08:21:08 -0500 Subject: Did Shit --- assets/sounds/cricket.wav | Bin 0 -> 8695476 bytes assets/sounds/longSwing.mp3 | Bin 0 -> 7941 bytes assets/sounds/longSwing.wav | Bin 0 -> 85376 bytes assets/sounds/shortSwing.wav | Bin 0 -> 100196 bytes main.cpp | 7 +++++++ src/gameplay.cpp | 2 +- src/inventory.cpp | 8 ++++++-- src/ui.cpp | 3 +-- 8 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 assets/sounds/cricket.wav create mode 100644 assets/sounds/longSwing.mp3 create mode 100644 assets/sounds/longSwing.wav create mode 100644 assets/sounds/shortSwing.wav diff --git a/assets/sounds/cricket.wav b/assets/sounds/cricket.wav new file mode 100644 index 0000000..70be7e5 Binary files /dev/null and b/assets/sounds/cricket.wav differ diff --git a/assets/sounds/longSwing.mp3 b/assets/sounds/longSwing.mp3 new file mode 100644 index 0000000..cb6dced Binary files /dev/null and b/assets/sounds/longSwing.mp3 differ diff --git a/assets/sounds/longSwing.wav b/assets/sounds/longSwing.wav new file mode 100644 index 0000000..e9b60f2 Binary files /dev/null and b/assets/sounds/longSwing.wav differ diff --git a/assets/sounds/shortSwing.wav b/assets/sounds/shortSwing.wav new file mode 100644 index 0000000..bd42737 Binary files /dev/null and b/assets/sounds/shortSwing.wav differ diff --git a/main.cpp b/main.cpp index d1fd85e..e02677d 100644 --- a/main.cpp +++ b/main.cpp @@ -116,6 +116,8 @@ unsigned int deltaTime = 0; GLuint fragShader; GLuint shaderProgram; +Mix_Chunk *crickets; + /* * names is used to open a file containing all possible NPC names. It is externally * referenced in src/entities.cpp for getting random names. @@ -401,6 +403,9 @@ int main(/*int argc, char *argv[]*/){ */ names = fopen("assets/names_en-us", "r+"); + + crickets=Mix_LoadWAV("assets/sounds/crickets.wav"); + Mix_Volume(3,25); /* * Create all the worlds, entities, mobs, and the player. This function is defined in @@ -950,8 +955,10 @@ void logic(){ if(!(tickCount%DAY_CYCLE)||!tickCount){ if(weather==SUNNY){ weather=DARK; + Mix_PlayChannel(3,crickets,0); }else{ weather=SUNNY; + Mix_Pause(3); } } diff --git a/src/gameplay.cpp b/src/gameplay.cpp index f665b38..9eacf2a 100644 --- a/src/gameplay.cpp +++ b/src/gameplay.cpp @@ -64,7 +64,7 @@ void story(Mob *callee){ ui::waitForDialog(); ui::importantText("times."); ui::waitForDialog(); - ui::importantText("Clyne is quite satisfied."); + ui::importantText("Clyne is a faggot."); ui::waitForDialog(); callee->alive = false; } diff --git a/src/inventory.cpp b/src/inventory.cpp index c1595e8..8d8f958 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -10,6 +10,7 @@ static float hangle = 0.0f; static bool up = true; static float xc,yc; static vec2 itemLoc; +Mix_Chunk* swordSwing; static const Item item[ITEM_COUNT]= { #include "../config/items.h" @@ -23,6 +24,9 @@ void initInventorySprites(void){ for(i = 0;i < ITEM_COUNT;i++){ itemtex[i] = Texture::loadTexture(getItemTexturePath((ITEM_ID)i)); } + + swordSwing = Mix_LoadWAV("assets/sounds/shortSwing.wav"); + Mix_Volume(2,75); } char *getItemTexturePath(ITEM_ID id){ @@ -311,11 +315,11 @@ int Inventory::useItem(void){ switch(type){ case SWORD: if(!player->left){ - if(hangle==-15)up=true; + if(hangle==-15){up=true;Mix_PlayChannel(2,swordSwing,0);} if(up)hangle-=15; if(hangle<=-90)hangle=-14; }else{ - if(hangle==15)up=true; + if(hangle==15){up=true;Mix_PlayChannel(2,swordSwing,0);} if(up)hangle+=15; if(hangle>=90)hangle=14; } diff --git a/src/ui.cpp b/src/ui.cpp index f843e7d..b0ed64c 100644 --- a/src/ui.cpp +++ b/src/ui.cpp @@ -525,8 +525,7 @@ namespace ui { Mix_PlayChannel(1,dialogClick,0); } - }else if(!dialogImportant){ - + }else if(!dialogImportant && !fadeIntensity){ vec2 hub = { (SCREEN_WIDTH/2+offset.x)-fontSize*10, (offset.y+SCREEN_HEIGHT/2)-fontSize -- cgit v1.2.3 From 04481c298a5df5dd0327d64284db9ed80bf619e4 Mon Sep 17 00:00:00 2001 From: Clyne Sullivan Date: Wed, 9 Dec 2015 08:22:44 -0500 Subject: music fading --- include/ui.h | 2 +- src/gameplay.cpp | 1 + src/ui.cpp | 5 ++--- src/world.cpp | 6 ++++++ 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/include/ui.h b/include/ui.h index a5a2ec0..97e4bbf 100644 --- a/include/ui.h +++ b/include/ui.h @@ -27,7 +27,7 @@ namespace ui { extern unsigned int fontSize; extern bool dialogBoxExists; extern unsigned char dialogOptChosen; - extern bool edown; + extern bool dialogImportant; /* * Initializes the FreeType system. diff --git a/src/gameplay.cpp b/src/gameplay.cpp index f665b38..07f5572 100644 --- a/src/gameplay.cpp +++ b/src/gameplay.cpp @@ -52,6 +52,7 @@ void CUTSCENEEE2(Mob *callee){ void story(Mob *callee){ player->vel.x = 0; + Mix_FadeOutMusic(0); ui::importantText("It was a dark and stormy night..."); ui::waitForDialog(); ui::importantText("...and Clyne wanted to hear what the click track sounds like."); diff --git a/src/ui.cpp b/src/ui.cpp index d72bf2c..04123c3 100644 --- a/src/ui.cpp +++ b/src/ui.cpp @@ -50,8 +50,6 @@ static float dialogOptLoc[4][3]; static unsigned char dialogOptCount = 0; static bool typeOutDone = true; -static bool dialogImportant = false; - Mix_Chunk *dialogClick; extern void mainLoop(void); @@ -91,7 +89,8 @@ namespace ui { * Dialog stuff that needs to be 'public'. */ - bool dialogBoxExists=false; + bool dialogBoxExists = false; + bool dialogImportant = false; unsigned char dialogOptChosen = 0; /* diff --git a/src/world.cpp b/src/world.cpp index cb5f3ec..2fd3591 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -285,6 +285,12 @@ void World::update(Player *p,unsigned int delta){ else if(e->vel.x > 0)e->left = false; } } + + if(ui::dialogImportant){ + Mix_FadeOutMusic(2000); + }else if(!Mix_PlayingMusic()){ + Mix_FadeInMusic(bgmObj,-1,2000); + } } void World::setBGM(const char *path){ -- cgit v1.2.3 From 4e3ceb550b26e3b7810b4493943db98918d7bef1 Mon Sep 17 00:00:00 2001 From: Clyne Sullivan Date: Wed, 9 Dec 2015 08:28:39 -0500 Subject: npc facing --- src/entities.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/entities.cpp b/src/entities.cpp index f2d7270..08af0a9 100644 --- a/src/entities.cpp +++ b/src/entities.cpp @@ -313,6 +313,10 @@ void NPC::interact(){ //have the npc's interact back to the player if(aiFunc.size()){ func=aiFunc.front(); canMove=false; + + left = (player->loc.x < loc.x); + right = !left; + if(!func(this)){ if(aiFunc.size())aiFunc.erase(aiFunc.begin()); } -- cgit v1.2.3 From a0e500dbf1a3fddebf8e057905fa299d1205a5fc Mon Sep 17 00:00:00 2001 From: Clyne Sullivan Date: Wed, 9 Dec 2015 08:46:35 -0500 Subject: random dialog --- include/entities.h | 1 + src/entities.cpp | 31 +++++++++++++++++++++++++------ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/include/entities.h b/include/entities.h index 77ca347..64a251a 100644 --- a/include/entities.h +++ b/include/entities.h @@ -79,6 +79,7 @@ public: Texturec *tex; + unsigned int randDialog; void draw(void); void spawn(float, float); diff --git a/src/entities.cpp b/src/entities.cpp index 08af0a9..fc2c316 100644 --- a/src/entities.cpp +++ b/src/entities.cpp @@ -102,6 +102,8 @@ 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 = rand() % 10; } NPC::~NPC(){ while(!aiFunc.empty()){ @@ -307,26 +309,43 @@ void NPC::addAIFunc(int (*func)(NPC *),bool preload){ else aiFunc.push_back(func); } +const char *randomDialog[10] = { + "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." + "How much wood could a woodchuck chuck if a woodchuck could chuck wood?", + "I don\'t think anyone has ever been able to climb up that hill.", + "If you ever see a hole in the ground, watch out; it could mean the end for you.", + "Did you know this game has over 4000 lines of code? I didn\'t. I didn't even know I was in a game until now...", + "HELP MY CAPS LOCK IS STUCK", + "You know, if anyone ever asked me who I wanted to be when I grow up, I would say Abby Ross.", + "I want to have the wallpaper in our house changed. It doesn\'t really fit the environment." +}; + void NPC::interact(){ //have the npc's interact back to the player int (*func)(NPC *); loc.y += 5; + + canMove=false; + left = (player->loc.x < loc.x); + right = !left; + if(aiFunc.size()){ func=aiFunc.front(); - canMove=false; - - left = (player->loc.x < loc.x); - right = !left; if(!func(this)){ if(aiFunc.size())aiFunc.erase(aiFunc.begin()); } - canMove=true; + }else{ + ui::dialogBox(name,NULL,randomDialog[randDialog]); } + ui::waitForDialog(); + canMove=true; } void Object::interact(void){ if(questObject && alive){ - ui::dialogBox("You",":Yes:No",pickupDialog); + ui::dialogBox(player->name,":Yes:No",pickupDialog); ui::waitForDialog(); if(ui::dialogOptChosen == 1){ player->inv->addItem((ITEM_ID)(identifier), (char)1); -- cgit v1.2.3 From fb1cb2e2f3af4a7bc5717e31b31175d850dd7be9 Mon Sep 17 00:00:00 2001 From: drumsetmonkey Date: Wed, 9 Dec 2015 08:47:45 -0500 Subject: Made sword swing at screen fps --- assets/BennyHillTheme.wav | Bin 21318852 -> 0 bytes assets/air-horn-club-sample_1.wav | Bin 149804 -> 0 bytes main.cpp | 5 ----- src/ui.cpp | 3 +++ src/world.cpp | 3 +++ 5 files changed, 6 insertions(+), 5 deletions(-) delete mode 100644 assets/BennyHillTheme.wav delete mode 100644 assets/air-horn-club-sample_1.wav diff --git a/assets/BennyHillTheme.wav b/assets/BennyHillTheme.wav deleted file mode 100644 index a926902..0000000 Binary files a/assets/BennyHillTheme.wav and /dev/null differ diff --git a/assets/air-horn-club-sample_1.wav b/assets/air-horn-club-sample_1.wav deleted file mode 100644 index 50c5bf8..0000000 Binary files a/assets/air-horn-club-sample_1.wav and /dev/null differ diff --git a/main.cpp b/main.cpp index bde880d..b28a8da 100644 --- a/main.cpp +++ b/main.cpp @@ -829,11 +829,6 @@ void logic(){ * click detection is done as well for NPC/player interaction. * */ - if((SDL_GetMouseState(NULL, NULL) & SDL_BUTTON(SDL_BUTTON_LEFT)) && !ui::dialogBoxExists)player->inv->usingi = true; - if(player->inv->usingi){ - player->inv->useItem(); - } - for(auto &n : currentWorld->npc){ if(n->alive){ /* diff --git a/src/ui.cpp b/src/ui.cpp index 9ab8141..14ad64b 100644 --- a/src/ui.cpp +++ b/src/ui.cpp @@ -612,6 +612,9 @@ DONE: if((e.button.button&SDL_BUTTON_RIGHT)&&dialogBoxExists){ dialogAdvance(); } + if((e.button.button&SDL_BUTTON_LEFT)&&!dialogBoxExists){ + player->inv->usingi = true; + } break; /* KEYDOWN diff --git a/src/world.cpp b/src/world.cpp index 2fd3591..9674b64 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -272,6 +272,9 @@ void World::update(Player *p,unsigned int delta){ p->loc.y += p->vel.y * delta; p->loc.x +=(p->vel.x * p->speed) * delta; + if(p->inv->usingi){ + p->inv->useItem(); + } /* * Update coordinates of all entities except for structures. -- cgit v1.2.3 From 2baf10d54f1cbfdb781b9b37987e0815dbdafc3f Mon Sep 17 00:00:00 2001 From: Clyne Sullivan Date: Thu, 10 Dec 2015 08:13:10 -0500 Subject: buildings stay --- src/entities.cpp | 6 ++-- src/gameplay.cpp | 13 +------ src/ui.cpp | 2 +- src/world.cpp | 103 ++++++++++++++++++++++++++++++++++--------------------- 4 files changed, 68 insertions(+), 56 deletions(-) diff --git a/src/entities.cpp b/src/entities.cpp index fc2c316..1c36ca7 100644 --- a/src/entities.cpp +++ b/src/entities.cpp @@ -103,7 +103,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 = rand() % 10; + randDialog = rand() % 10 - 1; } NPC::~NPC(){ while(!aiFunc.empty()){ @@ -309,10 +309,10 @@ void NPC::addAIFunc(int (*func)(NPC *),bool preload){ else aiFunc.push_back(func); } -const char *randomDialog[10] = { +const char *randomDialog[] = { "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." + "I heard if you complete a quest, you'll get a special reward.", "How much wood could a woodchuck chuck if a woodchuck could chuck wood?", "I don\'t think anyone has ever been able to climb up that hill.", "If you ever see a hole in the ground, watch out; it could mean the end for you.", diff --git a/src/gameplay.cpp b/src/gameplay.cpp index fbcc782..b9aa328 100644 --- a/src/gameplay.cpp +++ b/src/gameplay.cpp @@ -55,18 +55,6 @@ void story(Mob *callee){ Mix_FadeOutMusic(0); ui::importantText("It was a dark and stormy night..."); ui::waitForDialog(); - ui::importantText("...and Clyne wanted to hear what the click track sounds like."); - ui::waitForDialog(); - ui::importantText("So Clyne made a really long piece of dialog so that the sound"); - ui::waitForDialog(); - ui::importantText("plays"); - ui::waitForDialog(); - ui::importantText("multiple"); - ui::waitForDialog(); - ui::importantText("times."); - ui::waitForDialog(); - ui::importantText("Clyne is a faggot."); - ui::waitForDialog(); callee->alive = false; } @@ -129,6 +117,7 @@ void initEverything(void){ iw=new IndoorWorld(); iw->setBackground(BG_WOODHOUSE); + iw->setBGM(NULL); iw->generate(200); iw->addMob(MS_TRIGGER,0,0,CUTSCENEEE2); diff --git a/src/ui.cpp b/src/ui.cpp index 14ad64b..ff5a84a 100644 --- a/src/ui.cpp +++ b/src/ui.cpp @@ -675,9 +675,9 @@ DONE: tmp=currentWorld; currentWorld=currentWorld->goWorldFront(player); // Go forward a layer if possible if(tmp!=currentWorld){ - player->loc.y=0; currentWorld->behind->detect(player); player->vel.y=.2; + player->loc.y+=HLINE*5; player->ground=false; } break; diff --git a/src/world.cpp b/src/world.cpp index 9674b64..3fdfa7f 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -41,7 +41,13 @@ const float bgDraw[3][3]={ }; float worldGetYBase(World *w){ - return w?GEN_MIN:0; + World *tmp = w; + float base = GEN_MIN; + while(tmp->infront){ + tmp = tmp->infront; + base -= DRAW_Y_OFFSET; + } + return base; } void World::setBackground(WORLD_BG_TYPE bgt){ @@ -298,11 +304,14 @@ void World::update(Player *p,unsigned int delta){ void World::setBGM(const char *path){ if(!bgm) delete[] bgm; - //if(!path){ + if(path != NULL){ bgm = new char[strlen(path) + 1]; strcpy(bgm,path); bgmObj = Mix_LoadMUS(bgm); - //}else std::cout<infront){ + current=current->infront; + goto LLLOOP; + } + cx_start = current->x_start; + width = (-x_start) << 1; + glEnable(GL_TEXTURE_2D); bgTex->bind(0); safeSetColorA(255,255,255,255 - worldShade * 4); glBegin(GL_QUADS); - glTexCoord2i(0,0);glVertex2i( x_start,SCREEN_HEIGHT); - glTexCoord2i(1,0);glVertex2i(-x_start,SCREEN_HEIGHT); - glTexCoord2i(1,1);glVertex2i(-x_start,0); - glTexCoord2i(0,1);glVertex2i( x_start,0); + glTexCoord2i(0,0);glVertex2i( cx_start,SCREEN_HEIGHT); + glTexCoord2i(1,0);glVertex2i(-cx_start,SCREEN_HEIGHT); + glTexCoord2i(1,1);glVertex2i(-cx_start,0); + glTexCoord2i(0,1);glVertex2i( cx_start,0); glEnd(); bgTex->bindNext(); safeSetColorA(255,255,255,worldShade * 4); glBegin(GL_QUADS); - glTexCoord2i(0,0);glVertex2i( x_start,SCREEN_HEIGHT); - glTexCoord2i(1,0);glVertex2i(-x_start,SCREEN_HEIGHT); - glTexCoord2i(1,1);glVertex2i(-x_start,0); - glTexCoord2i(0,1);glVertex2i( x_start,0); + glTexCoord2i(0,0);glVertex2i( cx_start,SCREEN_HEIGHT); + glTexCoord2i(1,0);glVertex2i(-cx_start,SCREEN_HEIGHT); + glTexCoord2i(1,1);glVertex2i(-cx_start,0); + glTexCoord2i(0,1);glVertex2i( cx_start,0); glEnd(); glDisable(GL_TEXTURE_2D); @@ -399,10 +419,10 @@ void World::draw(Player *p){ glBegin(GL_QUADS); for(int i = 0; i <= width/1920; i++){ - glTexCoord2i(0,1);glVertex2i(width/-2+(1920*i )+offset.x*.85,GEN_MIN); - glTexCoord2i(1,1);glVertex2i(width/-2+(1920*(i+1))+offset.x*.85,GEN_MIN); - glTexCoord2i(1,0);glVertex2i(width/-2+(1920*(i+1))+offset.x*.85,GEN_MIN+1080); - glTexCoord2i(0,0);glVertex2i(width/-2+(1920*i )+offset.x*.85,GEN_MIN+1080); + glTexCoord2i(0,1);glVertex2i(width/-2+(1920*i )+offset.x*.85,base); + glTexCoord2i(1,1);glVertex2i(width/-2+(1920*(i+1))+offset.x*.85,base); + glTexCoord2i(1,0);glVertex2i(width/-2+(1920*(i+1))+offset.x*.85,base+1080); + glTexCoord2i(0,0);glVertex2i(width/-2+(1920*i )+offset.x*.85,base+1080); } glEnd(); @@ -415,11 +435,11 @@ void World::draw(Player *p){ safeSetColorA(bgDraw[i][0]-bgshade,bgDraw[i][0]-bgshade,bgDraw[i][0]-bgshade,bgDraw[i][1]); glBegin(GL_QUADS); - for(int j = x_start; j <= -x_start; j += 600){ - glTexCoord2i(0,1);glVertex2i( j +offset.x*bgDraw[i][2],GEN_MIN); - glTexCoord2i(1,1);glVertex2i((j+600)+offset.x*bgDraw[i][2],GEN_MIN); - glTexCoord2i(1,0);glVertex2i((j+600)+offset.x*bgDraw[i][2],GEN_MIN+400); - glTexCoord2i(0,0);glVertex2i( j +offset.x*bgDraw[i][2],GEN_MIN+400); + for(int j = cx_start; j <= -cx_start; j += 600){ + glTexCoord2i(0,1);glVertex2i( j +offset.x*bgDraw[i][2],base); + glTexCoord2i(1,1);glVertex2i((j+600)+offset.x*bgDraw[i][2],base); + glTexCoord2i(1,0);glVertex2i((j+600)+offset.x*bgDraw[i][2],base+400); + glTexCoord2i(0,0);glVertex2i( j +offset.x*bgDraw[i][2],base+400); } glEnd(); } @@ -500,9 +520,10 @@ LOOP2: */ for(auto &b : current->build){ - b->loc.y+=(yoff-DRAW_Y_OFFSET); + //b->loc.y+=(yoff-DRAW_Y_OFFSET); b->draw(); - b->loc.y-=(yoff-DRAW_Y_OFFSET); + //b->loc.y-=(yoff-DRAW_Y_OFFSET); + std::cout<loc.x<<" "<loc.y<vel.y > -2)e->vel.y-=.003 * deltaTime; + if(e->type == STRUCTURET && e->loc.y > 2000){ + e->loc.y = line[i].y; + e->vel.y = 0; + e->ground = true; + return; + }else if(e->vel.y > -2)e->vel.y-=.003 * deltaTime; } @@ -811,6 +837,7 @@ void World::singleDetect(Entity *e){ } void World::detect(Player *p){ + World *hey = this; /* * Handle the player. @@ -822,8 +849,13 @@ void World::detect(Player *p){ * Handle all remaining entities in this world. */ - for(auto &e : entity) - singleDetect(e); +LOOOOP: + for(auto &e : hey->entity) + hey->singleDetect(e); + if(hey->infront){ + hey = hey->infront; + goto LOOOOP; + } } void World::addStructure(_TYPE t,float x,float y,World *outside,World *inside){ @@ -834,18 +866,6 @@ void World::addStructure(_TYPE t,float x,float y,World *outside,World *inside){ entity.push_back(build.back()); } - -/*template -void World::getEntityLocation(std::vector&vecBuf, unsigned int n){ - T bufVar = vecBuf.at(n); - unsigned int i = 0; - for(auto &e : entity){ - if(entity.at(i) == bufVar){ - entity.erase(entity.begin()+i); - } - i++; - } -}*/ void World::addMob(int t,float x,float y){ mob.push_back(new Mob(t)); @@ -892,6 +912,9 @@ void World::addLayer(unsigned int width){ behind=new World(); behind->generate(width); behind->infront=this; + behind->star=star; + behind->bgmObj=bgmObj; + behind->bgTex=bgTex; } World *World::goWorldLeft(Player *p){ -- cgit v1.2.3 From 43bbcf02fd5e4e69a9aa521fa4cd572cc8675cf3 Mon Sep 17 00:00:00 2001 From: Clyne Sullivan Date: Fri, 11 Dec 2015 08:38:38 -0500 Subject: first areas plotted --- Changelog | 20 ++++ Goals.txt | 2 +- assets/sounds/longSwing.mp3 | Bin 7941 -> 0 bytes assets/sounds/sanic.wav | Bin 0 -> 2299686 bytes config/items.h | 4 +- include/Texture.h | 2 +- include/common.h | 2 +- include/entities.h | 2 +- include/ui.h | 2 +- include/world.h | 8 +- main.cpp | 4 +- src/entities.cpp | 8 +- src/gameplay.cpp | 223 +++++++++++++++++++------------------------- src/ui.cpp | 30 ++++-- src/world.cpp | 50 +++++----- 15 files changed, 180 insertions(+), 177 deletions(-) delete mode 100644 assets/sounds/longSwing.mp3 create mode 100644 assets/sounds/sanic.wav diff --git a/Changelog b/Changelog index fbe14bc..44e0bfc 100644 --- a/Changelog +++ b/Changelog @@ -388,3 +388,23 @@ - added border to dialogBox - fix entity movement handling; npcs stop when you talk to them - added sword animation? + +12/9/2015, +12/10/2015: +=========== + + - added sound effects + - fixed disappearing building + - began actually plotting areas + - fixed layer switching-ish + - added passive dialogs + - began working on particles stuffses + - improved village spawning + +12/11/2015: +=========== + + - plotted out a tutorial-ish area in game + - imrpoved BGM handling + - continued work on particles, made a fountain + - added sanic diff --git a/Goals.txt b/Goals.txt index 208c7e5..140cdd3 100644 --- a/Goals.txt +++ b/Goals.txt @@ -27,7 +27,7 @@ Summary: idea of a parallaxed background was applied, with up to four layers of tiled background material. Combinations of background layers were sorted and added to the World class with a World::setBackground() function. The inventory was created, with an animated inventory view based off of the player finished -by the end of the month. +by the end of the month. ... End of December: ================ diff --git a/assets/sounds/longSwing.mp3 b/assets/sounds/longSwing.mp3 deleted file mode 100644 index cb6dced..0000000 Binary files a/assets/sounds/longSwing.mp3 and /dev/null differ diff --git a/assets/sounds/sanic.wav b/assets/sounds/sanic.wav new file mode 100644 index 0000000..18708a9 Binary files /dev/null and b/assets/sounds/sanic.wav differ diff --git a/config/items.h b/config/items.h index 1bd9111..9012ff6 100644 --- a/config/items.h +++ b/config/items.h @@ -11,8 +11,8 @@ ID DEBUG_ITEM ID TEST_ITEM NAME "Dank MayMay" TYPE TOOL - WIDTH HLINE*1 - HEIGHT HLINE*1 + WIDTH HLINE*10 + HEIGHT HLINE*10 STACKSIZE 420 TEX "assets/items/ITEM_TEST.png" ENI diff --git a/include/Texture.h b/include/Texture.h index bcd95af..85225d8 100644 --- a/include/Texture.h +++ b/include/Texture.h @@ -52,7 +52,7 @@ public: * Contains an array of the GLuints returned from Texture::loadTexture(). */ - GLuint *image; + GLuint *image = NULL; /** * Populates the image array from a list of strings, with each string as a diff --git a/include/common.h b/include/common.h index f8bd935..095b3e3 100644 --- a/include/common.h +++ b/include/common.h @@ -64,7 +64,7 @@ typedef struct { * The desired width of the game window. */ -#define SCREEN_WIDTH 1280 +#define SCREEN_WIDTH 1024 /** * The desired height of the game window. diff --git a/include/entities.h b/include/entities.h index 64a251a..dd3adab 100644 --- a/include/entities.h +++ b/include/entities.h @@ -16,7 +16,7 @@ enum _TYPE { //these are the main types of entities OBJECTT = -2, - STRUCTURET = -1, + STRUCTURET, PLAYERT, NPCT, MOBT diff --git a/include/ui.h b/include/ui.h index 97e4bbf..2fe3b0a 100644 --- a/include/ui.h +++ b/include/ui.h @@ -60,7 +60,7 @@ namespace ui { * limited until a right click is given, closing the box. */ - void dialogBox(const char *name,const char *opt,const char *text,...); + void dialogBox(const char *name,const char *opt,bool passive,const char *text,...); void waitForDialog(void); /* diff --git a/include/world.h b/include/world.h index ccf93a8..1e78cd0 100644 --- a/include/world.h +++ b/include/world.h @@ -17,6 +17,11 @@ #define GEN_INC 10 + +#define GEN_MIN 80 +#define GEN_MAX 110 + + /** * Defines how many game ticks it takes for a day to elapse. */ @@ -194,8 +199,7 @@ public: */ void setBGM(const char *path); - void bgmPlay(void); - void bgmStop(void); + void bgmPlay(World *prev); /* * Looks for the furthest back layer in this world and adds a new layer of width `width` behind it. diff --git a/main.cpp b/main.cpp index b28a8da..4e45189 100644 --- a/main.cpp +++ b/main.cpp @@ -256,6 +256,7 @@ int main(/*int argc, char *argv[]*/){ std::cout << "SDL_mixer could not initialize! Error: " << Mix_GetError() << std::endl; return -1; } + Mix_AllocateChannels(8); // Run Mix_Quit when main returns atexit(Mix_CloseAudio); @@ -492,8 +493,7 @@ void mainLoop(void){ ui::handleEvents(); if(prev != currentWorld){ - prev->bgmStop(); - currentWorld->bgmPlay(); + currentWorld->bgmPlay(prev); } if(prevPrevTime + MSEC_PER_TICK <= currentTime){ diff --git a/src/entities.cpp b/src/entities.cpp index 1c36ca7..5c00cc7 100644 --- a/src/entities.cpp +++ b/src/entities.cpp @@ -148,7 +148,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; @@ -337,7 +337,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; @@ -345,7 +345,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); @@ -434,8 +434,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 b9aa328..74414d7 100644 --- a/src/gameplay.cpp +++ b/src/gameplay.cpp @@ -1,146 +1,132 @@ #include +#include #include #include -#include 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); + + 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); - /* - * Create a structure (this will create villagers when spawned). - */ + 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); - iw=new IndoorWorld(); - iw->setBackground(BG_WOODHOUSE); - iw->setBGM(NULL); - iw->generate(200); - iw->addMob(MS_TRIGGER,0,0,CUTSCENEEE2); + worldSpawnHill1->toRight = worldSpawnHill2; + worldSpawnHill2->toLeft = worldSpawnHill1; - /* - * Spawn some entities. - */ - - playerSpawnHill->addMob(MS_TRIGGER,player->loc.x,0,story); - - playerSpawnHill->addStructure(STRUCTURET,(rand()%120*HLINE),100,test,iw); - playerSpawnHill->addMob(MS_TRIGGER,-1300,0,CUTSCENEEE); + worldSpawnHill2->toRight = worldSpawnHill3; + worldSpawnHill3->toLeft = worldSpawnHill2; - 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); + currentWorld = worldSpawnHill1; - 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); } @@ -148,21 +134,8 @@ extern std::vector AIpreload; extern std::vector 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 ff5a84a..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(lincground=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 : 3.0f; + 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 3fdfa7f..3f35e21 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. @@ -112,9 +110,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; @@ -314,24 +316,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; @@ -520,10 +511,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<loc.x<<" "<loc.y<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 "<type<alive = false; return; } i = l; - if(i > lineCount-1){ e->alive = false; return; } + if(i > lineCount-1){ + std::cout<<"push kill lol "<type<alive = false; return; } }while(line[i].y>e->loc.y+ e->height); - } + }*/ /* * Handle gravity if the entity is above the line. @@ -815,7 +807,7 @@ void World::singleDetect(Entity *e){ e->ground = true; return; }else if(e->vel.y > -2)e->vel.y-=.003 * deltaTime; - + } /* -- cgit v1.2.3