diff options
author | drumsetmonkey <abelleisle@roadrunner.com> | 2015-12-22 20:04:04 -0500 |
---|---|---|
committer | drumsetmonkey <abelleisle@roadrunner.com> | 2015-12-22 20:04:04 -0500 |
commit | 1ccd85fd022ab5d628c9e26a213e47cf2687fce7 (patch) | |
tree | 05a55beccc626259a6bd34c11aad67f39325a24b /src | |
parent | 426809972df04eebb4702432c352b8e7d88f792d (diff) | |
parent | e67bfdde0b7e15ac6bc29993a92a89a844474554 (diff) |
shit
Diffstat (limited to 'src')
-rw-r--r-- | src/entities.cpp | 33 | ||||
-rw-r--r-- | src/gameplay.cpp | 29 | ||||
-rw-r--r-- | src/inventory.cpp | 42 | ||||
-rw-r--r-- | src/ui.cpp | 75 | ||||
-rw-r--r-- | src/world.cpp | 109 |
5 files changed, 233 insertions, 55 deletions
diff --git a/src/entities.cpp b/src/entities.cpp index 5c00cc7..24c0d01 100644 --- a/src/entities.cpp +++ b/src/entities.cpp @@ -10,6 +10,8 @@ extern Player *player; extern const char *itemName; +extern + void getRandomName(Entity *e){ int tempNum,max=0; char *bufs; @@ -57,6 +59,7 @@ void Entity::spawn(float x, float y){ //spawns the entity you pass to it based o near = false; canMove = true; ground = false; + hit = false; ticksToUse = 0; @@ -116,12 +119,12 @@ NPC::~NPC(){ } Structures::Structures(){ //sets the structure type - health = maxHealth = 1; + health = maxHealth = 25; alive = false; near = false; - tex = new Texturec(1,"assets/house1.png"); + tex = new Texturec(3,"assets/house1.png", "assets/house2.png", "assets/fountain1.png"); inWorld = NULL; name = NULL; @@ -151,6 +154,10 @@ Mob::Mob(int sub){ width = HLINE * 20; height = 2000; tex = new Texturec(0); + case MS_DOOR: + width = HLINE * 10; + height = HLINE * 16; + tex = new Texturec(1,"assets/door.png"); break; } @@ -211,6 +218,7 @@ void Entity::draw(void){ //draws the entities static int texState = 0; static bool up = true; if(loops % (int)((float)4/(float)speed) == 0){ + //currentWorld->addParticle(loc.x,loc.y-HLINE,HLINE,HLINE,0,0,{0.0f,.17f,0.0f},1000); if(up){ if(++texState==2)up=false; tex->bindNext(); @@ -236,11 +244,25 @@ void Entity::draw(void){ //draws the entities goto NOPE; break; case MS_BIRD: + case MS_DOOR: default: tex->bind(0); break; } break; + case STRUCTURET: + for(auto &strt : currentWorld->build){ + if(this == strt){ + if(strt->bsubtype == HOUSE){ + tex->bind(0); + }else if(strt->bsubtype == HOUSE2){ + tex->bind(1); + }else if(strt->bsubtype == FOUNTAIN){ + tex->bind(2); + } + } + } + break; default: tex->bind(0); break; @@ -319,7 +341,8 @@ const char *randomDialog[] = { "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." + "I want to have the wallpaper in our house changed. It doesn\'t really fit the environment.", + "Frig." }; void NPC::interact(){ //have the npc's interact back to the player @@ -368,7 +391,7 @@ void Object::interact(void){ * point to have non-normal traits so it could be invisible or invincible... */ -unsigned int Structures::spawn(_TYPE t, float x, float y){ +unsigned int Structures::spawn(_TYPE t, BUILD_SUB sub, float x, float y){ loc.x = x; loc.y = y; type = t; @@ -377,6 +400,7 @@ unsigned int Structures::spawn(_TYPE t, float x, float y){ width = 50 * HLINE; height = 40 * HLINE; + bsubtype = sub; /* * tempN is the amount of entities that will be spawned in the village. Currently the village @@ -437,6 +461,7 @@ void Mob::wander(int timeRun){ hey(this); } break; + case MS_DOOR: default: break; } diff --git a/src/gameplay.cpp b/src/gameplay.cpp index a9d29c4..70630dd 100644 --- a/src/gameplay.cpp +++ b/src/gameplay.cpp @@ -48,9 +48,17 @@ void worldSpawnHill1_hillBlock(Mob *callee){ callee->alive = true; } +static Arena *a; void worldSpawnHill2_infoSprint(Mob *callee){ - ui::dialogBox("B-) ",NULL,true,"Press \'Shift\' to run!"); callee->alive = false; + a = new Arena(currentWorld,player); + a->setBackground(BG_FOREST); + a->setBGM("assets/music/embark.wav"); + ui::toggleWhiteFast(); + ui::waitForCover(); + currentWorld = a; + ui::toggleWhiteFast(); + //ui::dialogBox("B-) ",NULL,true,"Press \'Shift\' to run!"); } void worldSpawnHill3_itemGet(Mob *callee){ @@ -103,7 +111,7 @@ void initEverything(void){ 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); @@ -116,10 +124,23 @@ void initEverything(void){ worldSpawnHill1->toRight = worldSpawnHill2; worldSpawnHill2->toLeft = worldSpawnHill1; - worldSpawnHill2->toRight = worldSpawnHill3; worldSpawnHill3->toLeft = worldSpawnHill2; - + + /* + * Spawn some entities. + */ + + //playerSpawnHill->addMob(MS_TRIGGER,player->loc.x,0,story); + + //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);*/ + + currentWorld = worldSpawnHill1; player = new Player(); diff --git a/src/inventory.cpp b/src/inventory.cpp index 8d8f958..5ae97b4 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -7,7 +7,7 @@ extern Player *player; extern GLuint invUI; static float hangle = 0.0f; -static bool up = true; +static bool swing = false; static float xc,yc; static vec2 itemLoc; Mix_Chunk* swordSwing; @@ -26,7 +26,7 @@ void initInventorySprites(void){ } swordSwing = Mix_LoadWAV("assets/sounds/shortSwing.wav"); - Mix_Volume(2,75); + Mix_Volume(2,100); } char *getItemTexturePath(ITEM_ID id){ @@ -278,13 +278,13 @@ void itemDraw(Player *p,ITEM_ID id,ITEM_TYPE type){ if(hangle < 15){ hangle=15.0f; p->inv->usingi = false; - up = false; + //swing=false; } }else{ if(hangle > -15){ hangle=-15.0f; p->inv->usingi = false; - up = false; + //swing=false; } } break; @@ -310,19 +310,35 @@ void itemDraw(Player *p,ITEM_ID id,ITEM_TYPE type){ } int Inventory::useItem(void){ + static bool up = false; ITEM_TYPE type = item[inv[sel].id].type; if(!invHover){ switch(type){ case SWORD: - if(!player->left){ - 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;Mix_PlayChannel(2,swordSwing,0);} - if(up)hangle+=15; - if(hangle>=90)hangle=14; - } + if(swing){ + if(!player->left){ + if(hangle==-15){up=true;Mix_PlayChannel(2,swordSwing,0);} + if(up)hangle-=.75*deltaTime; + if(hangle<=-90)hangle=-14; + }else{ + if(hangle==15){up=true;Mix_PlayChannel(2,swordSwing,0);} + if(up)hangle+=.75*deltaTime; + if(hangle>=90)hangle=14; + /* + if(hangle<90&&!up)hangle+=.75*deltaTime; + if(hangle>=90&&!up)up=true; + if(up)hangle-=.75*deltaTime; + if(up&&hangle<=15){ + up=false; + swing=false; + hangle=15; + return 0; + }*/ + } + }else if(!swing){ + swing=true; + Mix_PlayChannel(2,swordSwing,0); + } break; default: break; @@ -65,6 +65,7 @@ bool fadeFast = false; unsigned int fadeIntensity = 0; bool inBattle = false; +Mix_Chunk *battleStart; namespace ui { @@ -460,7 +461,8 @@ namespace ui { void waitForCover(void){ do{ mainLoop(); - }while(fadeIntensity != 255); + }while(fadeIntensity < 255); + fadeIntensity = 255; } void importantText(const char *text,...){ va_list textArgs; @@ -598,6 +600,7 @@ DONE: static vec2 premouse={0,0}; static int heyOhLetsGo = 0; World *tmp; + vec2 oldpos,tmppos; SDL_Event e; mouse.x=premouse.x+offset.x-(SCREEN_WIDTH/2); @@ -628,9 +631,9 @@ DONE: gameRunning = false; return; }else if(SDL_KEY == SDLK_SPACE){ - if(dialogBoxExists) + /*if(dialogBoxExists) dialogAdvance(); - else if(player->ground){ + else */if(player->ground){ player->vel.y=.4; player->loc.y+=HLINE*2; player->ground=false; @@ -640,35 +643,65 @@ DONE: tmp = currentWorld; switch(SDL_KEY){ case SDLK_a: + if(fadeEnable)break; player->vel.x=-.15; player->left = true; player->right = false; left = true; right = false; - currentWorld=currentWorld->goWorldLeft(player); - if(tmp!=currentWorld) - dialogBoxExists = false; + if(currentWorld->isWorldLeft()){ + memcpy(&oldpos,&player->loc,sizeof(vec2)); + tmp = currentWorld->goWorldLeft(player); + if(currentWorld != tmp){ + memcpy(&tmppos,&player->loc,sizeof(vec2)); + memcpy(&player->loc,&oldpos,sizeof(vec2)); + toggleBlackFast(); + waitForCover(); + memcpy(&player->loc,&tmppos,sizeof(vec2)); + currentWorld = tmp; + toggleBlackFast(); + dialogBoxExists = false; + } + } break; case SDLK_d: + if(fadeEnable)break; player->vel.x=.15; player->right = true; player->left = false; left = false; right = true; - currentWorld=currentWorld->goWorldRight(player); - if(tmp!=currentWorld) - dialogBoxExists = false; + if(currentWorld->isWorldRight()){ + memcpy(&oldpos,&player->loc,sizeof(vec2)); + tmp = currentWorld->goWorldRight(player); + if(currentWorld != tmp){ + memcpy(&tmppos,&player->loc,sizeof(vec2)); + memcpy(&player->loc,&oldpos,sizeof(vec2)); + toggleBlackFast(); + waitForCover(); + memcpy(&player->loc,&tmppos,sizeof(vec2)); + currentWorld = tmp; + toggleBlackFast(); + dialogBoxExists = false; + } + } break; case SDLK_s: - if(player->ground == 2){ + /*if(player->ground == 2){ player->ground=false; player->loc.y-=HLINE*1.5; - } + }*/ break; case SDLK_w: - if(inBattle) - currentWorld=((Arena *)currentWorld)->exitArena(player); - else currentWorld=currentWorld->goInsideStructure(player); + if(inBattle){ + tmp = currentWorld; + currentWorld = ((Arena *)currentWorld)->exitArena(player); + if(tmp != currentWorld){ + //delete &tmp; + toggleBlackFast(); + } + }else + currentWorld=currentWorld->goInsideStructure(player); break; case SDLK_i: currentWorld=currentWorld->goWorldBack(player); // Go back a layer if possible @@ -718,6 +751,13 @@ DONE: default: break; } + if(tmp != currentWorld){ + std::swap(tmp,currentWorld); + toggleBlackFast(); + waitForCover(); + std::swap(tmp,currentWorld); + toggleBlackFast(); + } } break; /* @@ -795,4 +835,11 @@ DONE: fadeWhite = true; fadeFast = false; } + void toggleWhiteFast(void){ + fadeEnable ^= true; + fadeWhite = true; + fadeFast = true; + battleStart = Mix_LoadWAV("assets/sounds/frig.wav"); + Mix_PlayChannel(1,battleStart,0); + } } diff --git a/src/world.cpp b/src/world.cpp index 3f35e21..1b460a2 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -106,7 +106,13 @@ void World::deleteEntities(void){ delete object.back(); object.pop_back(); } - while(!entity.empty()) entity.pop_back(); + while(!entity.empty()){ + entity.pop_back(); + } + while(!particles.empty()){ + delete particles.back(); + particles.pop_back(); + } } World::~World(void){ @@ -296,6 +302,28 @@ void World::update(Player *p,unsigned int delta){ else if(e->vel.x > 0)e->left = false; } } + uint oh = 0; + for(auto &pa : particles){ + if(pa->kill(deltaTime)){ + delete pa; + particles.erase(particles.begin()+oh); + }else if(pa->canMove){ + pa->loc.y += pa->vely * deltaTime; + pa->loc.x += pa->velx * deltaTime; + + for(auto &b : build){ + if(b->bsubtype==FOUNTAIN){ + if(pa->loc.x >= b->loc.x && pa->loc.x <= b->loc.x+b->width){ + if(pa->loc.y <= b->loc.y + b->height*.25){ + delete pa; + particles.erase(particles.begin()+oh); + } + } + } + } + } + oh++; + }oh=0; if(ui::dialogImportant){ Mix_FadeOutMusic(2000); @@ -351,7 +379,7 @@ LLLOOP: current=current->infront; goto LLLOOP; } - cx_start = current->x_start; + cx_start = current->x_start * 1.5; width = (-x_start) << 1; glEnable(GL_TEXTURE_2D); @@ -437,6 +465,9 @@ LLLOOP: glDisable(GL_TEXTURE_2D); + glColor3ub(0,0,0); + glRectf(cx_start,GEN_MIN,-cx_start,0); + /* * World drawing is done recursively, meaning that this function jumps * back as many 'layers' as it can and then draws, eventually coming @@ -592,7 +623,7 @@ LOOP2: /* * Draw non-structure entities. */ - + for(auto &part : particles){part->draw();} for(auto &n : current->npc){ n->loc.y+=(yoff-DRAW_Y_OFFSET); n->draw(); @@ -610,6 +641,7 @@ LOOP2: o->loc.y-=(yoff-DRAW_Y_OFFSET); } } + /* * If we're drawing the closest/last world, handle and draw the player. @@ -842,23 +874,52 @@ void World::detect(Player *p){ */ LOOOOP: + static int what = 0; for(auto &e : hey->entity) hey->singleDetect(e); + for(auto &part : particles){ + int l; + unsigned int i; + l=(part->loc.x + part->width / 2 - x_start) / HLINE; + if(l < 0) l=0; + i = l; + if(i > lineCount-1) i=lineCount-1; + if(part->loc.y < line[i].y){ + part->loc.y = line[i].y; + part->vely = 0; + part->velx = 0; + part->canMove = false; + }else{ + if(part->vely > -2)part->vely-=.003 * deltaTime; + } + what++; + }what=0; if(hey->infront){ hey = hey->infront; goto LOOOOP; } } - -void World::addStructure(_TYPE t,float x,float y,World *outside,World *inside){ +void World::addStructure(_TYPE t,BUILD_SUB sub, float x,float y,World *outside,World *inside){ build.push_back(new Structures()); - build.back()->spawn(t,x,y); + build.back()->spawn(t,sub,x,y); build.back()->inWorld=outside; build.back()->inside=(void *)inside; entity.push_back(build.back()); } +void World::addVillage(int bCount, int npcMin, int npcMax,_TYPE t,float x,float y,World *outside,World *inside){ + std::cout << npcMin << ", " << npcMax << std::endl; + int xwasd; + for(int i = 0; i < bCount; i++){ + xwasd = (rand()%(int)x+1000*HLINE); + HERE: + for(auto &bu : build){ + if(xwasd > bu->loc.x && xwasd < bu->loc.x+bu->width)goto HERE; + } + addStructure(t,HOUSE,xwasd,y,outside,inside); + } +} void World::addMob(int t,float x,float y){ mob.push_back(new Mob(t)); mob.back()->spawn(x,y); @@ -888,6 +949,11 @@ void World::addObject(ITEM_ID i, bool q, const char *p, float x, float y){ entity.push_back(object.back()); } +void World::addParticle(float x, float y, float w, float h, float vx, float vy, Color color, int d){ + particles.push_back(new Particles(x,y,w,h,vx,vy,color,d)); + particles.back()->canMove = true; +} + /*void World::removeObject(Object i){ object.delete[](i); }*/ @@ -941,6 +1007,14 @@ World *World::goWorldFront(Player *p){ return this; } +bool World::isWorldLeft(void){ + return toLeft ? true : false; +} + +bool World::isWorldRight(void){ + return toRight ? true : false; +} + std::vector<void *>thing; World *World::goInsideStructure(Player *p){ if(!thing.size()){ @@ -1078,18 +1152,13 @@ extern bool inBattle; Arena::Arena(World *leave,Player *p){ generate(300); - //door.y = line[299].y; - //door.x = 100; - exit = leave; - - /*npc.push_back(new NPC()); - entity.push_back(npc.back()); - entity.back()->spawn(door.x,door.y); - entity.back()->width = HLINE * 12; - entity.back()->height = HLINE * 16;*/ - + addMob(MS_DOOR,100,100); inBattle = true; + exit = leave; pxy = p->loc; + + star = new vec2[100]; + memset(star,0,100 * sizeof(vec2)); } Arena::~Arena(void){ @@ -1101,11 +1170,11 @@ Arena::~Arena(void){ } World *Arena::exitArena(Player *p){ - npc[0]->loc.x = door.x; - npc[0]->loc.y = door.y; - if(p->loc.x + p->width / 2 > door.x && - p->loc.x + p->width / 2 < door.x + HLINE * 12 ){ + if(p->loc.x + p->width / 2 > mob[0]->loc.x && + p->loc.x + p->width / 2 < mob[0]->loc.x + HLINE * 12 ){ inBattle = false; + ui::toggleBlackFast(); + ui::waitForCover(); p->loc = pxy; return exit; }else{ |