From 8917efbc5148bfe0ce90a40a7eb5a4e31a437c20 Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Fri, 8 Mar 2024 23:40:04 -0600 Subject: [PATCH] Fix having the exact amount of XP not actually leveling you up. Fix strange shadow text clipping for text scaled less than 1.0 vertically. Release Build 8068. --- Adventures in Lestoria/Player.cpp | 2 +- Adventures in Lestoria/State_Death.cpp | 2 ++ Adventures in Lestoria/State_GameHub.cpp | 1 + .../State_LevelComplete.cpp | 2 ++ Adventures in Lestoria/State_MainMenu.cpp | 2 ++ Adventures in Lestoria/State_OverworldMap.cpp | 2 ++ Adventures in Lestoria/State_Story.cpp | 2 ++ Adventures in Lestoria/TODO.txt | 6 +----- Adventures in Lestoria/Version.h | 2 +- .../assets/nico-Ranger_512.png | Bin 3388 -> 2726 bytes Adventures in Lestoria/olcPGEX_ViewPort.h | 4 ++-- Adventures in Lestoria/olcPixelGameEngine.h | 4 ++-- x64/Release/Adventures in Lestoria.exe | Bin 3394048 -> 3394560 bytes 13 files changed, 18 insertions(+), 11 deletions(-) diff --git a/Adventures in Lestoria/Player.cpp b/Adventures in Lestoria/Player.cpp index 098e1a9f..57bf1cbe 100644 --- a/Adventures in Lestoria/Player.cpp +++ b/Adventures in Lestoria/Player.cpp @@ -1282,7 +1282,7 @@ void Player::AddXP(const uint32_t xpGain){ totalXPEarned+=xpGain; if(Level()nextLevelXP){ + while(currentLevelXP>=nextLevelXP){ currentLevelXP-=nextLevelXP; SetLevel(Level()+1); OnLevelUp(); diff --git a/Adventures in Lestoria/State_Death.cpp b/Adventures in Lestoria/State_Death.cpp index ce2b4e94..c9890376 100644 --- a/Adventures in Lestoria/State_Death.cpp +++ b/Adventures in Lestoria/State_Death.cpp @@ -101,5 +101,7 @@ void State_Death::OnUserUpdate(AiL*game){ accTime=0.f; } } + + game->ClearTimedOutGarbage(); } void State_Death::Draw(AiL*game){} \ No newline at end of file diff --git a/Adventures in Lestoria/State_GameHub.cpp b/Adventures in Lestoria/State_GameHub.cpp index b81cafbd..e1feeb6c 100644 --- a/Adventures in Lestoria/State_GameHub.cpp +++ b/Adventures in Lestoria/State_GameHub.cpp @@ -64,6 +64,7 @@ void State_GameHub::OnLevelLoad(){ } void State_GameHub::OnUserUpdate(AiL*game){ State_GameRun::OnUserUpdate(game); + game->ClearTimedOutGarbage(); } void State_GameHub::Draw(AiL*game){ State_GameRun::Draw(game); diff --git a/Adventures in Lestoria/State_LevelComplete.cpp b/Adventures in Lestoria/State_LevelComplete.cpp index d9c6d062..5f0977f0 100644 --- a/Adventures in Lestoria/State_LevelComplete.cpp +++ b/Adventures in Lestoria/State_LevelComplete.cpp @@ -124,6 +124,8 @@ void State_LevelComplete::OnUserUpdate(AiL*game){ }else{ Audio::Engine().SetVolume(xpGainSound,0.f); } + + game->ClearTimedOutGarbage(); }; void State_LevelComplete::Draw(AiL*game){ game->RenderHud(); diff --git a/Adventures in Lestoria/State_MainMenu.cpp b/Adventures in Lestoria/State_MainMenu.cpp index 6764821b..f0acad6f 100644 --- a/Adventures in Lestoria/State_MainMenu.cpp +++ b/Adventures in Lestoria/State_MainMenu.cpp @@ -74,6 +74,8 @@ void State_MainMenu::OnUserUpdate(AiL*game){ ItemDrop::UpdateDrops(game->GetElapsedTime()); game->UpdateBullets(game->GetElapsedTime()); game->UpdateCamera(game->GetElapsedTime()); + + game->ClearTimedOutGarbage(); }; void State_MainMenu::Draw(AiL*game){ TitleScreen::Draw(); diff --git a/Adventures in Lestoria/State_OverworldMap.cpp b/Adventures in Lestoria/State_OverworldMap.cpp index 7b4b64e8..294452db 100644 --- a/Adventures in Lestoria/State_OverworldMap.cpp +++ b/Adventures in Lestoria/State_OverworldMap.cpp @@ -151,6 +151,8 @@ void State_OverworldMap::OnUserUpdate(AiL*game){ if(abs(game->KEY_SCROLLVERT_L.Analog())<0.2f&&abs(game->KEY_SCROLLHORZ_L.Analog())<0.2f){ analogMove=false; } + + game->ClearTimedOutGarbage(); }; void State_OverworldMap::Draw(AiL*game){ currentTime+=game->GetElapsedTime(); diff --git a/Adventures in Lestoria/State_Story.cpp b/Adventures in Lestoria/State_Story.cpp index de20d801..194589df 100644 --- a/Adventures in Lestoria/State_Story.cpp +++ b/Adventures in Lestoria/State_Story.cpp @@ -38,6 +38,7 @@ All rights reserved. #include "State_Story.h" #include "VisualNovel.h" #include "Menu.h" +#include "AdventuresInLestoria.h" void State_Story::OnStateChange(GameState*prevState){ Menu::CloseAllMenus(); @@ -45,6 +46,7 @@ void State_Story::OnStateChange(GameState*prevState){ void State_Story::OnLevelLoad(){} void State_Story::OnUserUpdate(AiL*game){ VisualNovel::novel.Update(); + game->ClearTimedOutGarbage(); }; void State_Story::Draw(AiL*game){ VisualNovel::novel.Draw(); diff --git a/Adventures in Lestoria/TODO.txt b/Adventures in Lestoria/TODO.txt index ce7b134e..ea9af8d1 100644 --- a/Adventures in Lestoria/TODO.txt +++ b/Adventures in Lestoria/TODO.txt @@ -10,8 +10,4 @@ should gemstones dropp from boss stages aswell? (Maybe lower droprate?) Funny text colors with text color override on blacksmith menu -Toggle for displaying error messages - -Fix size of icons in merchant menus. -Sherman's consumable crafting menu needs enabling/disabling of +/- buttons -Label doesn't constantly update in the merchant window. \ No newline at end of file +Toggle for displaying error messages \ No newline at end of file diff --git a/Adventures in Lestoria/Version.h b/Adventures in Lestoria/Version.h index 17909534..b1ceb873 100644 --- a/Adventures in Lestoria/Version.h +++ b/Adventures in Lestoria/Version.h @@ -39,7 +39,7 @@ All rights reserved. #define VERSION_MAJOR 0 #define VERSION_MINOR 5 #define VERSION_PATCH 1 -#define VERSION_BUILD 8066 +#define VERSION_BUILD 8068 #define stringify(a) stringify_(a) #define stringify_(a) #a diff --git a/Adventures in Lestoria/assets/nico-Ranger_512.png b/Adventures in Lestoria/assets/nico-Ranger_512.png index 3e1dada735b3d2410278362102a87108bb4332d5..490f5fd93559e376aae96310063379a649ab5e3d 100644 GIT binary patch delta 1408 zcmY+CdoQ-6Gp=KQcH3(I{=VP$`8?12wC}7Yadp`;oJcy|gF&ZL zPRGTDMMj505VbJ9(8{^ngP5~f?c%*>TcQ%7-=l0^D91ANHq7EY@riiWHC=5S@q}A> zcORCIL~C92MyrGeY6Kwd#4?lf!pgTg`sG)Nem%*rPuohP&rxw$1Kx+AX_DC;otufMs;RP&~*jWc;RlKDU>N9?%$c$#Jo!tNVCe`oO6j zz>4+`MOF3rrGHRCeH?SSGUuh68;rr|X&-XLhk6BRA8K=CU&tetJ+xl$&bMV4l?H^; z;ta20NkvoW&FqOrbKFzUm}4|lykKPMp{mjd@=C%>sZI038;p>R;@@c&j6rW~7Ay2R-upxp8?CxE^XS0 z%K3zXBt1#|(87e(?UfDa*1ov*qr5c`@Zw zCf2fgpJZ3OY>kfzI7o`4EZ&xJ>EGe0$d39qSy61=4=`oAyTuPf_eUlfv4!8=sNesY1~b1TyC{WDd)lPF+^ z(SU7WK{rkXWXhv=2@k-^5%8pAXrXwSjJLu-_W}N-l`bw&==Zb%oUfZ~&m!JM^ z-S(~4In!T$a=?nBXQRX~WWRQ9D*_J;4xCfC2Dl3Hs-3PYIJ31IVg|eC7+i0N;oxS^ IKNOVpH)xDs-v9sr delta 2080 zcmYjQdpOhkAOAA8lIzisk%cAJToOa>99g;$mRpDzDV9sEDceylWpepSE@SKb$gRw^ z5XN!oMqBQw5Jx+iYs4Jlx1Q(M`JF#L&+~cS&-4DguAhhSX61AZ3S=?V&dwQUXNM$4 zMg)gm3<3a?)KvG65%1l0TiuTEDN?XvR^OF|r?A{zy&DnAkGr8bu=tCua%1m^PSMMl zaAntF<0t)>+!?E)5t0H3wFb5~on)&l*|}OXCsK!VwSf<67Fk4(T8DtE@#Vxymg}># z-3=KmiYf1^+}OJmO3f-eQYnKRb68*09=G|hWIm~?yFc0E z94UM1V27cKnv99-%z=RHl%nB!ok>*ZcSD2qi;~MK@%0*%QwCdb zkNlEj`Ki@h3R{03bNsVcoC5zpsQIJB@&4}D$+5DOzeZ=oIG!F4gMFvB63}=3q@!eq zFtu)fTHdyAVRl>350`W|U`!{b_C z^*RqY1C{03K`pBG*Ol&~4m15bBshw$eK8Hp~rCl^WVf1;AY z3HbPKW!dsD7d@qVv!}7p!Eg7%qu4$!i?Xt&5Vny)4@EObu(l5Ax*W*T-z?qlRp_tP zwz|!+wG{r$FUQTx*k$j_z70ssSCrK!XZ&qZpU8H13=9uWe`{{(ke;OY8tK~+bp1M) zxDB~>h4vH`&}%jK=T0*K~8_Rqy-nuiyl30=&RQa8lqa z*mM3CgWZm({p4wcD-N>V5D$? zeR~IH$IPFSnn@Tay{%<%aJAZm74HQ(DGn#uBwi&eK@YX)Te5tJYBIA5zSOQlqQ=}bs;gC zhD8?Tz6@S9=ZIhLSzn!+1v5|%VGj?b~#Heua!A_*Eu}f9FP7OTksrmOhK~Gc~3%k5|^vZnr zB;9W)&ZxE@dqz!xVY)O?qgSzw{z-1PP&-1yKRF)mma(z9_`3g8MNa{V*m#>~W!yT9 zWyW`X`)zG}8y*h6g~)>)Fuh%EiDqbOjlwW28vrXIDB-@k`pCg{A;-u5d?#)9Ttwi? zrogXV3i!9%|1(fsX~eoJ{^5D_0d(;IpO}gEr!-AX8KVloyv1IxPWj zBgWu?pf06~o)g+e2DQb!h%fYd&<2Xr_#A`h#y-ZWbfEV-AC$q1I0Ro7ULN1g4$18 z3^7|;9ySZpeGtMMmC{J=#sa?E%Y;7%u9cf_e@w&Xksb&E@ndCPgl}s9(1ROO;Q&=w zL@@x+zhj0DIi_o&U+lJ-UQ3WMs{QfE9ZvI&zLe2dguzVZ@j<1)O5(u8r5G?n`~WBm zMMxxS3qga>z_y4m3VTga00_ZXiR!$#5hv(4`c&Actxa&!@D#hXug8}ix5Zym{s8_4 zlmC$!C@U@{NtF^uGkG;|ft1+KLZB4?)z;`}JkYx%m2S9E+6K14gkkSM2tN%JT;7?V fDIu+-e{dVn!W6aHjlK01$^dY`p0uyD^^gBA7t_f+ diff --git a/Adventures in Lestoria/olcPGEX_ViewPort.h b/Adventures in Lestoria/olcPGEX_ViewPort.h index 7444191c..09387635 100644 --- a/Adventures in Lestoria/olcPGEX_ViewPort.h +++ b/Adventures in Lestoria/olcPGEX_ViewPort.h @@ -707,7 +707,7 @@ void olc::ViewPort::DrawShadowStringDecal(const olc::vf2d& pos, std::string_view vi2d imageSize=pge->GetWrappedTextSize(sText,width,scale); Decal*newDecal=nullptr; if(!pge->garbageCollector.count(key)){ - newDecal=new Decal(new Sprite(imageSize.x/scale.x,imageSize.y/scale.x)); + newDecal=new Decal(new Sprite(imageSize.x/scale.x,imageSize.x/scale.x)); pge->garbageCollector[key].decal=newDecal; }else{ newDecal=pge->garbageCollector[key].decal; @@ -754,7 +754,7 @@ void olc::ViewPort::DrawShadowStringPropDecal(const olc::vf2d& pos, std::string_ vi2d imageSize=pge->GetWrappedTextSizeProp(sText,width,scale); Decal*newDecal=nullptr; if(!pge->garbageCollector.count(key)){ - newDecal=new Decal(new Sprite(imageSize.x/scale.x,imageSize.y/scale.x)); + newDecal=new Decal(new Sprite(imageSize.x/scale.x,imageSize.x/scale.x)); pge->garbageCollector[key].decal=newDecal; }else{ newDecal=pge->garbageCollector[key].decal; diff --git a/Adventures in Lestoria/olcPixelGameEngine.h b/Adventures in Lestoria/olcPixelGameEngine.h index 0c8855d8..f3197d98 100644 --- a/Adventures in Lestoria/olcPixelGameEngine.h +++ b/Adventures in Lestoria/olcPixelGameEngine.h @@ -3552,7 +3552,7 @@ namespace olc vi2d imageSize=GetWrappedTextSize(sText,width,scale); Decal*newDecal=nullptr; if(!garbageCollector.count(key)){ - newDecal=new Decal(new Sprite(imageSize.x/scale.x,imageSize.y/scale.x)); + newDecal=new Decal(new Sprite(imageSize.x/scale.x,imageSize.x/scale.x)); garbageCollector[key].decal=newDecal; }else{ newDecal=garbageCollector[key].decal; @@ -3654,7 +3654,7 @@ namespace olc vi2d imageSize=GetWrappedTextSizeProp(sText,width,scale); Decal*newDecal=nullptr; if(!garbageCollector.count(key)){ - newDecal=new Decal(new Sprite(imageSize.x/scale.x,imageSize.y/scale.x)); + newDecal=new Decal(new Sprite(imageSize.x/scale.x,imageSize.x/scale.x)); garbageCollector[key].decal=newDecal; }else{ newDecal=garbageCollector[key].decal; diff --git a/x64/Release/Adventures in Lestoria.exe b/x64/Release/Adventures in Lestoria.exe index 7c078c442d35921dd89ac5482c858869ac8e1ac6..a423d5e7415971638fd0f7113fd59577fa1f3b15 100644 GIT binary patch delta 807368 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