From a83d037394f37403918b62fdc0083d4b84ea02db Mon Sep 17 00:00:00 2001 From: Clyne Sullivan Date: Wed, 16 Dec 2015 07:27:06 -0500 Subject: [PATCH] music/merge --- Changelog | 6 ++++++ assets/dirt.png | Bin 0 -> 578 bytes assets/door.png | Bin 255 -> 280 bytes assets/maybeplayer.png | Bin 0 -> 2898 bytes include/common.h | 13 +++++++++++++ include/ui.h | 11 ++++++++--- main.cpp | 20 -------------------- src/common.cpp | 10 +++++++++- src/entities.cpp | 7 ++++--- src/gameplay.cpp | 2 +- src/inventory.cpp | 5 +++-- src/ui.cpp | 6 ++++++ src/world.cpp | 25 ++++++++++++++++--------- xcf/dirt.xcf | Bin 0 -> 1239 bytes xcf/door.xcf | Bin 1404 -> 1628 bytes xcf/maybeplayer.xcf | Bin 3117 -> 7564 bytes 16 files changed, 66 insertions(+), 39 deletions(-) create mode 100644 assets/dirt.png create mode 100644 assets/maybeplayer.png create mode 100644 xcf/dirt.xcf diff --git a/Changelog b/Changelog index c894c5c..d1fac71 100644 --- a/Changelog +++ b/Changelog @@ -420,3 +420,9 @@ - fixed fading bugs - continued fixing general game bugs - fixed structure spawn issues + +12/15/2015: +=========== + + - began/continued work on original player sprite + - began working on dirt textures diff --git a/assets/dirt.png b/assets/dirt.png new file mode 100644 index 0000000000000000000000000000000000000000..04c87b676db1ec49d6b863878324b8fef6463ecd GIT binary patch literal 578 zcmV-I0=@l-P)l#72diR_tN{cF zL|~HXbWhjA=A(OrC4affzW3Pj>Eml3v++1oUXtNB?x4eLOxYMxWy($z5I}#PGh=do zzZ6P!Hf^AZf<8@^RGngu2y{{CG@z-1ARPP1rU~3_BYh+2n2f#=?)u29o$|0(c5Oh< zb0vnzrVTvomG`#|hd!VhmY%np$hHy2WaR4T{a(4>Em<8tf17xGDQKrc5SWWGX6NhQ z#E<8K&e=J6C0A!I&X5cM-82Em8D?WHhKekz-rXvxIOo}j0h%aO2i-OS4UPky3fEYj z!%Y_m0x`$}F$jPl0`7|dcSkpkkm@qye5pKLjJY^^9VS3An6fb@M*%dzz6-c7?Y50A zg==&w-0u~$^+z!nRv&L}R_s$Yas_v2qj2a0$3CK`X?eMA1BX7)Ec(%3=fbWPy1n2I zPZwiIhJJre9Q#P8fnxk$)WT{pnWoC0u`*>tKfLY9)fuz%d@-&EsJ#Zj@Z{^VRwQ3e z2|);9A>cqULrK;0KkQG`x~P9p&S0Ml&!8KMV! Q1ONa407*qoM6N<$f~Vu`Pyhe` literal 0 HcmV?d00001 diff --git a/assets/door.png b/assets/door.png index 2a8b0dd975859b9424580d4c205b3b1707b65f7d..582a52db08636df48a49a0b33591e742f658ead5 100644 GIT binary patch delta 206 zcmV;<05Sjn0hj`iQhy8&3?~r_K$89d005;)L_t(o!|m6>34<^ghT+#BIDkVqglEr= z;w+BhIWu(tPkJk*Af!@~l)gC%e|-ER;@1EN1y>8O6}tHh1PU(!?fZq8I5>T2uD%4W zq^VE(>6|a2009C72oNAZK)wHj@#co{=M$K2Zj>_DuN?r7Wk=7SK)-g3Ltq@j6H>(y zG{CWCOyTti=Iq^Y+3kjYiUkM|AV7cs0RrrXf8Gr*n^DOGPAUN#3BJ5ykN^Mx07*qo IM6N<$f?0o5)c^nh delta 181 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 in the standard C++ library. This function simply returns the amount + * of milliseconds that have passed sine the epoch. + */ + +#ifdef __WIN32__ +#define millis() SDL_GetTicks() +#else +unsigned int millis(void); +#endif // __WIN32__ + #endif // COMMON_H diff --git a/include/ui.h b/include/ui.h index 5d17c47..6a81dab 100644 --- a/include/ui.h +++ b/include/ui.h @@ -1,3 +1,7 @@ +/** @file ui.h + * @brief Contains functions for handling the user interface. + */ + #ifndef UI_H #define UI_H @@ -12,9 +16,9 @@ namespace ui { - /* - * Contains the coordinates of the mouse in the window. - */ + /** + * Contains the coordinates of the mouse inside the window. + */ extern vec2 mouse; @@ -90,6 +94,7 @@ namespace ui { void toggleWhiteFast(void); void waitForCover(void); + void waitForNothing(unsigned int); } #endif // UI_H diff --git a/main.cpp b/main.cpp index 5b9b1b6..a9cc2fa 100644 --- a/main.cpp +++ b/main.cpp @@ -4,7 +4,6 @@ */ #include // fopen -#include // see millis() #include #include @@ -188,25 +187,6 @@ std::string readFile(const char *filePath) { vec2 offset; /* OFFSET!!!!!!!!!!!!!!!!!!!! */ -/** - * millis - * - * We've encountered many problems when attempting to create delays for triggering - * the logic function. As a result, we decided on using the timing libraries given - * by in the standard C++ library. This function simply returns the amount - * of milliseconds that have passed sine the epoch. - * -**/ - -#ifdef __WIN32__ -#define millis() SDL_GetTicks() -#else -unsigned int millis(void){ - std::chrono::system_clock::time_point now=std::chrono::system_clock::now(); - return std::chrono::duration_cast(now.time_since_epoch()).count(); -} -#endif - extern WEATHER weather; extern bool fadeEnable; diff --git a/src/common.cpp b/src/common.cpp index a8a964e..7449a35 100644 --- a/src/common.cpp +++ b/src/common.cpp @@ -1,7 +1,15 @@ #include #include +#include -#define DEBUG +#ifndef __WIN32__ + +unsigned int millis(void){ + std::chrono::system_clock::time_point now=std::chrono::system_clock::now(); + return std::chrono::duration_cast(now.time_since_epoch()).count(); +} + +#endif // __WIN32__ void DEBUG_prints(const char* file, int line, const char *s,...){ va_list args; diff --git a/src/entities.cpp b/src/entities.cpp index 24c0d01..7ebe744 100644 --- a/src/entities.cpp +++ b/src/entities.cpp @@ -83,7 +83,8 @@ Player::Player(){ //sets all of the player specific traits on object creation subtype = 0; health = maxHealth = 100; speed = 1; - tex = new Texturec(3, "assets/player1.png", "assets/player.png", "assets/player2.png"); + //tex = new Texturec(3, "assets/player1.png", "assets/player.png", "assets/player2.png"); + tex = new Texturec(3, "assets/maybeplayer.png", "assets/maybeplayer.png", "assets/maybeplayer.png"); inv = new Inventory(PLAYER_INV_SIZE); } Player::~Player(){ @@ -155,8 +156,8 @@ Mob::Mob(int sub){ height = 2000; tex = new Texturec(0); case MS_DOOR: - width = HLINE * 10; - height = HLINE * 16; + width = HLINE * 12; + height = HLINE * 19; tex = new Texturec(1,"assets/door.png"); break; } diff --git a/src/gameplay.cpp b/src/gameplay.cpp index 0ee6055..d3dd03a 100644 --- a/src/gameplay.cpp +++ b/src/gameplay.cpp @@ -133,7 +133,6 @@ void initEverything(void){ //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); @@ -142,6 +141,7 @@ void initEverything(void){ currentWorld = worldSpawnHill1; + worldSpawnHill2->addStructure(STRUCTURET,HOUSE,(rand()%120*HLINE),100,worldSpawnHill1,worldSpawnHill2); player = new Player(); player->spawn(200,100); diff --git a/src/inventory.cpp b/src/inventory.cpp index 5ae97b4..52ae02c 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -299,10 +299,10 @@ void itemDraw(Player *p,ITEM_ID id,ITEM_TYPE type){ glBindTexture(GL_TEXTURE_2D,itemtex[id]); glColor4ub(255,255,255,255); glBegin(GL_QUADS); - glTexCoord2i(0,1);glVertex2f(itemLoc.x, itemLoc.y); + glTexCoord2i(0,1);glVertex2f(itemLoc.x, itemLoc.y); glTexCoord2i(1,1);glVertex2f(itemLoc.x+item[id].width,itemLoc.y); glTexCoord2i(1,0);glVertex2f(itemLoc.x+item[id].width,itemLoc.y+item[id].height); - glTexCoord2i(0,0);glVertex2f(itemLoc.x, itemLoc.y+item[id].height); + glTexCoord2i(0,0);glVertex2f(itemLoc.x, itemLoc.y+item[id].height); glEnd(); glDisable(GL_TEXTURE_2D); glTranslatef(player->loc.x*2,0,0); @@ -341,6 +341,7 @@ int Inventory::useItem(void){ } break; default: + //hangle++; break; } } diff --git a/src/ui.cpp b/src/ui.cpp index 11bc195..08f503f 100644 --- a/src/ui.cpp +++ b/src/ui.cpp @@ -464,6 +464,12 @@ namespace ui { }while(fadeIntensity < 255); fadeIntensity = 255; } + void waitForNothing(unsigned int ms){ + unsigned int target = millis() + ms; + do{ + mainLoop(); + }while(millis() < target); + } void importantText(const char *text,...){ va_list textArgs; diff --git a/src/world.cpp b/src/world.cpp index b964c9a..9a2b6d3 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -17,13 +17,14 @@ bool worldInside = false; // True if player is inside a structure WEATHER weather = SUNNY; -const char *bgPaths[2][6]={ +const char *bgPaths[2][7]={ {"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/dirt.png"}, // Dirt {"assets/bgWoodTile.png", NULL, NULL, @@ -51,7 +52,7 @@ float worldGetYBase(World *w){ void World::setBackground(WORLD_BG_TYPE bgt){ switch(bgt){ case BG_FOREST: - bgTex = new Texturec(6,bgPaths[0]); + bgTex = new Texturec(7,bgPaths[0]); break; case BG_WOODHOUSE: bgTex = new Texturec(1,bgPaths[1]); @@ -549,20 +550,25 @@ LOOP2: */ bool hey=false; + glEnable(GL_TEXTURE_2D); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); //for the s direction + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); //for the t direction + bgTex->bindNext(); glBegin(GL_QUADS); for(i=is;i<(unsigned)ie-GEN_INC;i++){ cline[i].y+=(yoff-DRAW_Y_OFFSET); // Add the y offset if(!cline[i].y){ cline[i].y=base; hey=true; - safeSetColor(cline[i].color-100+shade,cline[i].color-150+shade,cline[i].color-200+shade); + //safeSetColor(cline[i].color-100+shade,cline[i].color-150+shade,cline[i].color-200+shade); }else{ - safeSetColor(cline[i].color+shade,cline[i].color-50+shade,cline[i].color-100+shade); // Set the shaded dirt color + //safeSetColor(cline[i].color+shade,cline[i].color-50+shade,cline[i].color-100+shade); // Set the shaded dirt color } - glVertex2i(cx_start+i*HLINE ,cline[i].y-GRASS_HEIGHT); - glVertex2i(cx_start+i*HLINE+HLINE,cline[i].y-GRASS_HEIGHT); - glVertex2i(cx_start+i*HLINE+HLINE,0); - glVertex2i(cx_start+i*HLINE ,0); + glColor4ub(255,255,255,255); + glTexCoord2i(0,1);glVertex2i(cx_start+i*HLINE ,cline[i].y-GRASS_HEIGHT); + glTexCoord2i(1,1);glVertex2i(cx_start+i*HLINE+HLINE,cline[i].y-GRASS_HEIGHT); + glTexCoord2i(1,0);glVertex2i(cx_start+i*HLINE+HLINE,0); + glTexCoord2i(0,0);glVertex2i(cx_start+i*HLINE ,0); cline[i].y-=(yoff-DRAW_Y_OFFSET); // Restore the line's y value if(hey){ hey=false; @@ -570,6 +576,7 @@ LOOP2: } } glEnd(); + glDisable(GL_TEXTURE_2D); /* * Draw grass on every line. diff --git a/xcf/dirt.xcf b/xcf/dirt.xcf new file mode 100644 index 0000000000000000000000000000000000000000..6b5098131837b28fa99caf3174b7b83e5080c464 GIT binary patch literal 1239 zcmZ`%U2hUu7-kw%8Rq+=gSEAtRSN?QcFNa6I|3aFw1rZ#rCL!orF57M3k(9yw(AnJ zyIC(bX|nNR^}-u3yzOuB*56~|rFu>UgR%Q0&v~EoydP(B&KPE^Bc9aiV%==&Hh@V$ z5efhX5JAAg0ot{HZ8k^%9`Fj_1fVd~ux<*}XF((kFxFqQS}ncZ2YVY#vZ=0K?dyl) zuV(*9%x-KIVTQgaHCt6f_ZwaF5PF~*u}QuDX;T+_R?|H6IHbB!vzk^{lrDn5YaCQX z<&JWJOT^MJlGt zr}w{pAng9$`r>@s3h!YE`QB14Welfb%ar@%h;A=p@68Jiw0PRB!%h90* z!8SXl9b+0B)A*Ps#xw;qoIAo*AmDirouoUH zzh4Zww+p$oXuz!9D{N$Xt%C|u`LETs9`}zetJ7&UPrCZvhBi2^my(geX;zbccqf4?!T8&4;NEnH~Oe8fekw_-uch^>z z1724)wX7`6XVa^(MK4(IuEc<&t{1dKEK%Hxtt7HP?a6_7W-~wMil~v`Eh!lE+*V^D z`R0wJ8uZLfD@wpO=X7}k%7WIZ>mD3at^l0b;}6zM=Q9LG=;CvgOS zM>4DfBU$0vRR=B1+_2-EbNV_?JDoI6&{Mo)5+^9qK1mV;hT2(%B5<7N7#g8J@*Kil z;SugNJH@lW7p7PWa|mEV0?l(Q0~|1z=UMLB49oJu^bARHg41co7%;+t(=>sx3{7Gv e&(Z{HCn<_R!GSb|p%_84G>s7qIOVDB?WfOQ9_2Lv literal 0 HcmV?d00001 diff --git a/xcf/door.xcf b/xcf/door.xcf index 796501889b1b7676a7b1372dc28304477eda465c..ab8e07806394070e38971abaccd36c1178e224f4 100644 GIT binary patch literal 1628 zcmeHF%TB^T6rCw(d1%!50)%9iWr0Dry22mu6DXyvjin_N5?B%cK=%GbcO-84C=(Ow zxqV0*>za)>IlZUn%$=FuThkhi#auIlVc9xE2;hzg;soFvk5i!3do8{Zz|VjpPzNqz zPV3IGzJYvfV%v^2Qcb;MPOKp$M*f%LO&7K^Levsma zDSiY_`z9fS(0LTeu#>w$lI}xidv&ap9h%%XR^fpl3O^_k0d7%8~!C zp$|LiOa7edKHqT6uI7Jif?(q_=3j1UEq1e$P4Bd;ulYYW|4&NKX3JZ?V9UZgqD)`;^Jv}NHTa%H%3xh#_#X1H?b%KhLQvbb$A literal 1404 zcmeHF%TB^T6rC1iC}`C9NCaYLSr#?uR#)%?egdVm z)_cngmWYXoTW)fCPS3q}n4H4JV8|wp$2{S?1d0LfQ9zvnGz}hSfO7k__=W&|4k!Yy z0GCqZ+y%_nfKNCaYl(r)U5iJe4;I1xrx}l?zRTj!7yV|%^tcoHVZ_Xgtcdq)*1BnB zwL{#>RufixJ62Vn{Vs5I5)W-h1f1Qe^D5?ahbJv-9EcGUf%D|XxE*?4?2b0q18e%z zT07gTn1U?rMJZqgz{oM7YTI_6c@&O=EHoV~tP%hNPXT4Aaoms^h%|D#lGD|kKFsN( zoIVDP=c=M0@b|FP$5wX%OMl2Z-&coO{c+pVyZAmM?}_0T0CdBee~@V4t(i*RzyCFl z?L4m&ZP`dx%QRgkHOY1GN}IgZ{66>p{qIzcYwjeo!Uxgj4YHaq7IRXQTnBGf=#Z>S Rp-T;eVmD*x(yU9n=@(j1M{@uG diff --git a/xcf/maybeplayer.xcf b/xcf/maybeplayer.xcf index 55208156a2f7e558cf7e7a837265e1c635ab4ec0..fb885fc1f914471fcfe966b23f9a05986bb979ec 100644 GIT binary patch literal 7564 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 R;PVCl^9~;tg-GYl{{UEheo_Dc literal 3117 zcmb_e`EwN45$>7U*<~;7>R4S|%c*0LkkDlsL<}MEfoz>4fdGRLlB^&kEFprhV>@7i z4H$tr)}h4Zi-g#Te@Rj#c9A#Fy4pfYPd)lt;d-@O|UVP2v9f&D{09pQn#p6=ZRp8U?P_P(CJ{&2oE6!mxQY73VX zmsrmuoKkzL084j0Vrg?Cstk?(S`WzGFbv z_jPs-bnJh)L0SFZPy+e(QaK0vQH~@%jLAcnGxTm~Yv0q=-#6H69h+*WIWfwSo3J^y zFX?XE$3SxQk|U1?mh`=|eBUhJKg$om7vALKf|FdIyzb;)Fr}`u6O&solIVPSGyw+mK``-m z`pajx=;p5}n_{Dqc*uhh)D_5;tK|W+5)_CHviqc}r zU%CjV><~!h@v8FDqC#2{o)1i81xv>&%Su)hEXVQZgm8o!-zDbN6=2F=wiw3~O102Y zVxf!VEnT!AH;aOP54n&$N>$}0MTL1_%*{+EpW6volTDogY8QEFRESB4b28I|AXWk16;@iDVD$>CkG@(N$zMhb=4NMr z&;>$2eIs0ynH#3AeP+{>-=~_VpG0tf(^F4uq^F+v-gnni8r{eEIBneU_`0=- z#y772&RSYmy@qjnDu-x#=W|;(qu$KU?OULsuXk*3-E1`0QQP*`=EhoF<5$~STbdeb zpQ)kNmd3i88bH&{O{lHZJfN1QI!x>kJ)VX7M32K~#JePVJaY8d@sp=Sj}Rt+*x{q1 z$MbY?YPvsjSSPM`4A|!0Pw9g%xrXLdr@I>L7$1!}Iag8L1YR zDslu*NaUCxf*i9#BF8k5V|ARWm1@YbdS)#rT%~$)&FU(uu3jSwT+5GDmJB=H1DK3f>iX2OdR}|8U!h(E}WB&h3jsZjC48zT7 z#ta(T3ZQY)Gwdkki!IP=}RBH3G&xZeajy0Z4Ii ztiBGbQ;@7h-PQ)3Q3ubQJI#jAh;!5(ojyBkZA4);3cwMayztiWiDSUrl3;;abo~68 zQ^)!6D=)I)5?GU5HG2Qt={Mgv$}b-}VB>03c# zI&tjCD=!^n-rJ25`opR7XWl&ilfy5+_``udet!4PSySgupM2x!kAHONK!5KZZr`!( z;nbIGRe5P>@P)lU=;Y_Nwt&%L{L8Ati8}lD^>lZ%aci@jnZx*!qbS67p&k_4&W4Ij zSaVW|?Mhv!gnLnBPB;F|!zW&UjqOsqP)ZIQl)7=3kK>E@V4@Ow8`ezQb6-oPLp;#8 z2bH#MK_!J}WTkFQq0rC)T=o1Ia#aUCdDPfoE zQCPO8X$cq`O_fm9Vh%~O;u%ak6vvbdG9P0JV>;t)B}}rzp(E5)9dQr@x}r}zS=XJ4 z(?TAI?_`8CE|d*I?5a!UAj(@U9{Q3Nk5BOdO161Uw0TR-cR1PUInn7sZu5QN3^kbnWj@$Z14~i<}LE+ivHB(7UFs~V; P6l^tU`fT$fUQho4KZ+NM -- 2.39.5