From 3120be4f673c3e106c47ee250ca02179bacec52f Mon Sep 17 00:00:00 2001 From: Clyne Sullivan Date: Thu, 8 Oct 2015 09:10:08 -0400 Subject: [PATCH] improved inventory, debug flags --- Makefile | 8 ++++-- assets/items/ITEM_SWORD.png | Bin 0 -> 420 bytes assets/items/ITEM_TEST.png | Bin 0 -> 6585 bytes include/common.h | 5 ++-- include/inventory.h | 7 ++++- include/ui.h | 6 ++-- include/world.h | 2 +- main.cpp | 2 ++ out/Quest.o | Bin 32596 -> 32616 bytes out/common.o | Bin 2188 -> 2452 bytes out/entities.o | Bin 93600 -> 93736 bytes out/gameplay.o | Bin 43748 -> 44148 bytes out/inventory.o | Bin 3156 -> 4588 bytes out/ui.o | Bin 9844 -> 10012 bytes out/world.o | Bin 38716 -> 39432 bytes src/common.cpp | 54 +++++++++++++++++++++--------------- src/gameplay.cpp | 7 +++++ src/inventory.cpp | 40 ++++++++++++++++++++++++-- src/ui.cpp | 17 +++++++++--- src/world.cpp | 14 ++++++---- 20 files changed, 120 insertions(+), 42 deletions(-) create mode 100644 assets/items/ITEM_SWORD.png create mode 100644 assets/items/ITEM_TEST.png diff --git a/Makefile b/Makefile index a8f2d88..387f5f3 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,7 @@ -LIBS = -lGL -lSDL2_image -lSDL2_mixer +LIBS = -lGL +WIN_LIBS = -lopengl32 -lmingw32 -FLAGS = -m32 -std=c++11 -Iinclude -Iinclude/freetype2 -lSDL2main -lSDL2 -lfreetype +FLAGS = -m32 -std=c++11 -Iinclude -Iinclude/freetype2 -lSDL2main -lSDL2 -lfreetype -lSDL2_image -lSDL2_mixer all: @rm -f out/*.o @@ -8,6 +9,9 @@ all: @echo " CXX main.cpp" @g++ $(FLAGS) -o main main.cpp out/*.o $(LIBS) +win32: + @g++ $(FLAGS) -o main main.cpp src/*.cpp $(WIN_LIBS) + clean: @echo " RM main" @-rm -f main diff --git a/assets/items/ITEM_SWORD.png b/assets/items/ITEM_SWORD.png new file mode 100644 index 0000000000000000000000000000000000000000..306f58c36f62c91e96776813c762a19e33a7bf68 GIT binary patch literal 420 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwgi-X5ltF0(;8c;~G#5JPCIX^cyHLrxhxhOTUBsE2$ zJhLQ2!QIn0AiR-JoPmLn$J50zB;xSVX}1Mi6?j}W_w`0J{S{B-oVMxv;e#h#nK&3{ zK0N%~(`>ee$EhCH2W%hjtS`Q;_*y(+?={H}A{J|&YFlh`_DGUk>7e&{As0geU*B5^ zaR<)2)y{`(8>DueyJy;P>rCl4=iLg=Ysy)(mi9l?W88A(Zm!U`lzVF%=6ziI;hoTw zHeb$rG7e{#tZp=CeZX0tdq~E{;xF%?g$xW)&!ia5y#?5fxZ-piS6;1psHEiacS=;k z+9r0JJqkNrTM|FtS=qn-xQ3kcwfsuIfA7|0`&hgd&fS(+cB6tVBDlCVHvaR61HAnD zeg_{b6n{6Fc_GL8aL&iSw##Co=e)bcs(HDRsf+8+;b&XpBkZduP8L$Q{z@4bcnqGd KelF{r5}E)B52ZQ) literal 0 HcmV?d00001 diff --git a/assets/items/ITEM_TEST.png b/assets/items/ITEM_TEST.png new file mode 100644 index 0000000000000000000000000000000000000000..f3e6c9740afd989d5437b6df0ab238d1999f4657 GIT binary patch literal 6585 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 literal 0 HcmV?d00001 diff --git a/include/common.h b/include/common.h index 3015b11..ed2ed9e 100644 --- a/include/common.h +++ b/include/common.h @@ -41,8 +41,6 @@ enum GENDER{ template //this fuction returns the size of any array int eAmt(T (&)[N]){return N;} -GLuint loadTexture(const char *fileName); - extern bool gameRunning; extern unsigned int deltaTime; extern unsigned int loops; @@ -53,4 +51,7 @@ extern FILE* names; extern Mix_Music *music; extern Mix_Chunk *horn; +GLuint loadTexture(const char *fileName); +void DEBUG_printf(const char *s,...); + #endif // COMMON_H diff --git a/include/inventory.h b/include/inventory.h index 8f42cc5..d68fed9 100644 --- a/include/inventory.h +++ b/include/inventory.h @@ -3,8 +3,11 @@ #include +#define DEBUG + enum ITEM_ID { // Contains item IDs for every item in the game, this is how items are stored. IDs are also used to lookup item strings - TEST_ITEM = 1 // A test item (duh) + TEST_ITEM = 1, // A test item (duh) + SWORD_ITEM }; struct item_t { // Used to define entries in an entity's inventory @@ -26,4 +29,6 @@ public: void draw(void); // Draws a text list of items in this inventory (should only be called for the player for now) }; +unsigned int initInventorySprites(void); // Loads as many inventory textures as it can find, returns count + #endif // INVENTORY_H diff --git a/include/ui.h b/include/ui.h index 5304c1b..6f23a78 100644 --- a/include/ui.h +++ b/include/ui.h @@ -4,6 +4,8 @@ #include #include // For putText() +#define DEBUG + namespace ui { // Functions are kept in a namespace simply // for organization @@ -18,9 +20,9 @@ namespace ui { // Functions are kept in a namespace simply void setFontFace(const char *ttf); // Checks and unpacks the TTF file for use by putString() and putText() void setFontSize(unsigned int size); // Sets the size of the currently loaded font to 'size' pixels - void putString(const float x,const float y,const char *s); // Draws the string 's' to the coordinates ('x','y'). The height (and therefore the width) + float putString(const float x,const float y,const char *s); // Draws the string 's' to the coordinates ('x','y'). The height (and therefore the width) // are determined by what's currently set by setFontSize() - void putText(const float x,const float y,const char *str,...); // Draws the formatted string 'str' using putString() + float putText(const float x,const float y,const char *str,...); // Draws the formatted string 'str' using putString() void dialogBox(const char *name,const char *text,...); // Prepares a dialog box to be drawn (its drawn as a black background at the top of the // screen and then 'text' is putString()'d diff --git a/include/world.h b/include/world.h index 1f8b7e1..4acb9ee 100644 --- a/include/world.h +++ b/include/world.h @@ -28,13 +28,13 @@ protected: float y,gh[2]; unsigned char color; } __attribute__ ((packed)) *line; - unsigned int lineCount; // Size of the array 'line' (aka the width of the world) std::vector platform; // An array (vector thing) of platforms int x_start; // Worlds are centered on the x axis (0,n), this contains // where to start drawing the world to have it centered properly. World *behind,*infront; // Pointers to other areas of land that are behind or in front of this one, respectively. void singleDetect(Entity *e); // Handles an individual entity (gravity n' stuff) public: + unsigned int lineCount; // Size of the array 'line' (aka the width of the world) World *toLeft,*toRight; // Pointers to areas to the left and right of this world. These are made public // so that they can easily be set without a function. diff --git a/main.cpp b/main.cpp index 41f8e79..f0ca288 100644 --- a/main.cpp +++ b/main.cpp @@ -110,6 +110,8 @@ int main(int argc, char *argv[]){ bgImage=loadTexture("assets/bg.png"); + initInventorySprites(); + while(gameRunning){ mainLoop(); } diff --git a/out/Quest.o b/out/Quest.o index 50fd93650c5fcea92bbc2c9453dcce95e562249a..7e52667c35564515eb54085153039073d710ec55 100644 GIT binary patch delta 394 zcmXBOKS)AR6b5k5n;b>R+A<=oKzT2CRD;magO<9r6{P)vsEAB6y{7qW5gICl4AY%&@xWg2R|Mihv4wCNpHb`~e8jChUqW);bwZGeHaiAG{$;bAEhWt&n6xh3B_&rH*q5|{ zB72Cgl%yk^qy*(rXV2hETP-qat3{jVdl&~+ivn9igKa_22>M1YQ&Mb8@R-Bo#hlr% kygBiux^Qed=p9AVtJs%NH9d5JCO>Q%Tv-qQ4rIH30TqCknE(I) delta 369 zcmWm9y-Pw-7zXg(ON%rqQA>kSC`yP#4MmF(h!7qG8!oBP5Dk?d>GhZ&*QKGLp?F%1 zK#Ufl<)%yF5=8X}G>KzFgNxxJi1eQ2x4fL^dCu>Iz9)3;q^Pxc=a>nGcRkK^->T0) z)#^Itbn3MRM~6gL&`$*2qscyE#6BUE6x2p7DX9m0s;-Uq@SFuROkNz&0~-B diff --git a/out/common.o b/out/common.o index 044750a5afc342e73ecdae7141f85241887f1df8..915309476f2bad0dba941be0df08fcf456b99499 100644 GIT binary patch delta 747 zcmZ9I&ubGw6vy98c6Os~Wj84r+a5LvP0b-`HV{)o1Wg*Fv`EDY1#6@RORF}C+9;G3 zg&oM+HSYowXepr zoW7iEJfZJ1@*JDW70YvT1Fs0a43 zxsStpnFE~I%eeo7OelZ-c6>OOxtzaNxjS2$pB@`2E- zh14faEhu#SCj}#~9Mw#w$$}OV26_W>Sqt(cm+#ORLgVF5QByM&4ZxDj9TeZuF7NbA UyA5&L1@J{)L?7^7SMV0zf2p#Bpa1{> delta 500 zcmYk2zb`~V5XWcN+uMB{-o1CuB}nd^+z)Z*M-GVyId^e1LPTNi*5|gT+{IpIxCc>kmrfHgTr5kw==<(Fg0LW@? z0vOdC0x10IjWDT$W`HT35Jp?JV_rsaT1s4zLAHr|rh{c^iEWzd7*AzPR4EnkT{`$8 zEmp-hnGols`7x&)>{1rLW;mh}%!jKgE^g?^Mpwne!(ZW}vcx0N7QU(u!v_#X(~PkK Vrp<)7rXQ=|ycrV(ntV`C@C~ucOvV5J diff --git a/out/entities.o b/out/entities.o index 69472f4d15531e3d4470b354fcd64af3aea0ebff..baec14791f947addedcdfed7f00d6834f3dc03a2 100644 GIT binary patch delta 4713 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 diff --git a/out/gameplay.o b/out/gameplay.o index 68948530d0f9d52cdcc983aef889e6080b3981df..f976e64a9e5b954a3f75c00fefff6f20d5a74ec3 100644 GIT binary patch delta 8431 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 delta 8140 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 diff --git a/out/ui.o b/out/ui.o index e4cd1fd575ce2f875686efe98a2cbf6516609b9f..5cc559bc1b9085275def63e564a1bf40c841dff0 100644 GIT binary patch delta 3614 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 diff --git a/out/world.o b/out/world.o index 4997e5b39d6d19317dcedac43dd7921cd3dccf3d..be84bdfc1052fb88d7223e933b9fcce32ab85d33 100644 GIT binary patch delta 9381 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 delta 8187 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 GLuint loadTexture(const char *fileName){ - SDL_Surface *image = IMG_Load(fileName); - - //SDL_DisplayFormatAlpha(image); - - unsigned object(0); - - glGenTextures(1, &object); - - glBindTexture(GL_TEXTURE_2D, object); - - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image->w, image->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, image->pixels); - - //Free surface - SDL_FreeSurface(image); - - return object; + SDL_Surface *image = IMG_Load(fileName); + + if(!image)return 0; + + //SDL_DisplayFormatAlpha(image); + + unsigned object(0); + + glGenTextures(1, &object); + + glBindTexture(GL_TEXTURE_2D, object); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image->w, image->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, image->pixels); + + //Free surface + SDL_FreeSurface(image); + + return object; +} + +void DEBUG_printf(const char *s,...){ + va_list args; + printf("%s:%u: ",__FILE__,__LINE__); + va_start(args,s); + vprintf(s,args); + va_end(args); } diff --git a/src/gameplay.cpp b/src/gameplay.cpp index b6b939a..a690203 100644 --- a/src/gameplay.cpp +++ b/src/gameplay.cpp @@ -31,6 +31,12 @@ int giveTestQuest(NPC *speaker){ return 0; } +int giveStuff(NPC *speaker){ + ui::dialogBox(speaker->name,"Take my stuff you ugly whore"); + player->inv->addItem(SWORD_ITEM,1); + return 0; +} + void initEverything(void){ unsigned int i; @@ -59,5 +65,6 @@ void initEverything(void){ NPCp(entity[1])->addAIFunc(giveTestQuest); for(i=0;iinWorld=test; + if(entity[i]->type==NPCT&&i>1)NPCp(entity[i])->addAIFunc(giveStuff); } } diff --git a/src/inventory.cpp b/src/inventory.cpp index b8905dd..3882fb0 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -1,11 +1,34 @@ #include #include +#define ITEM_COUNT 2 // Total number of items that actually exist + const char *itemName[]={ "\0", - "Dank Maymay" + "Dank Maymay", + "Sword" +}; + +const char *ITEM_SPRITE[]={ + "\0", // Null + "assets/items/ITEM_TEST.png", // Dank maymay + "assets/items/ITEM_SWORD.png" }; +GLuint *ITEM_TEX; + +unsigned int initInventorySprites(void){ + unsigned int i,loadCount=0; + ITEM_TEX=(GLuint *)calloc(ITEM_COUNT,sizeof(GLuint)); + for(i=0;iloc.x-SCREEN_WIDTH/2,y,"Inventory:"); while(item[i].count){ + y-=HLINE*12; + xoff=ui::putText(player->loc.x-SCREEN_WIDTH/2,y,"%d x ",item[i].count); + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D,ITEM_TEX[item[i].id-1]); + glBegin(GL_QUADS); + glTexCoord2i(0,1);glVertex2i(xoff ,y); + glTexCoord2i(1,1);glVertex2i(xoff+HLINE*10,y); + glTexCoord2i(1,0);glVertex2i(xoff+HLINE*10,y+HLINE*10); + glTexCoord2i(0,0);glVertex2i(xoff ,y+HLINE*10); + glEnd(); y-=ui::fontSize*1.15; - ui::putText(player->loc.x-SCREEN_WIDTH/2,y,"%d x %s",item[i].count,itemName[(unsigned)item[i].id]); + ui::putText(player->loc.x-SCREEN_WIDTH/2,y,"%s",itemName[(unsigned)item[i].id]); + glDisable(GL_TEXTURE_2D); i++; } } diff --git a/src/ui.cpp b/src/ui.cpp index e4af3e2..68601d8 100644 --- a/src/ui.cpp +++ b/src/ui.cpp @@ -28,12 +28,18 @@ namespace ui { abort(); } fontSize=12; // to be safe +#ifdef DEBUG + DEBUG_printf("Initialized FreeType2.\n"); +#endif // DEBUG } void setFontFace(const char *ttf){ if(FT_New_Face(ftl,ttf,0,&ftf)){ std::cout<<"Error! Couldn't open "<alive){ i=(e->loc.x+e->width/2-x_start)/HLINE; // Calculate what line the player is currently on - if(e->loc.y>line[i].y-.002*deltaTime){ // Snap the player to the top of that line if the player is inside it + if(e->type==STRUCTURET||e->loc.yvel.y=0; + e->ground=true; + e->loc.y=line[i].y-.001*deltaTime; + if(e->type==STRUCTURET){ + std::cout<loc.x<<" "<loc.y<loc.y>line[i].y-.002*deltaTime){ // Snap the player to the top of that line if the player is inside it for(i=0;iloc.x+e->width>platform[i].p1.x)&(e->loc.x+e->widthloc.xloc.x>platform[i].p1.x))){ @@ -173,10 +181,6 @@ void World::singleDetect(Entity *e){ } } e->vel.y-=.001*deltaTime; - }else if(e->loc.yvel.y=0; - e->ground=true; - e->loc.y=line[i].y-.001*deltaTime; } if(e->loc.xvel.x=0; -- 2.39.5