From 7300fba94bce1028504da285adae0582fc1f07e3 Mon Sep 17 00:00:00 2001 From: 8bitgentleman Date: Tue, 9 Jun 2015 22:15:40 -0400 Subject: [PATCH 1/7] New player HUD --- src/hud.lua | 208 +++++++++++++++++++------------- src/images/hud/Restricted.png | Bin 0 -> 165 bytes src/images/hud/health_full.png | Bin 0 -> 210 bytes src/images/hud/invincible.png | Bin 0 -> 179 bytes src/images/hud/jumpFactor.png | Bin 0 -> 179 bytes src/images/hud/money.png | Bin 0 -> 14577 bytes src/images/hud/punchDamage.png | Bin 0 -> 179 bytes src/images/hud/questfrankie.png | Bin 0 -> 174 bytes src/images/hud/questhilda.png | Bin 0 -> 221 bytes src/images/hud/questjuanita.png | Bin 0 -> 261 bytes src/images/hud/saving.png | Bin 4364 -> 519 bytes src/images/hud/speedFactor.png | Bin 0 -> 178 bytes src/items/item.lua | 11 ++ 13 files changed, 136 insertions(+), 83 deletions(-) create mode 100644 src/images/hud/Restricted.png create mode 100644 src/images/hud/health_full.png create mode 100644 src/images/hud/invincible.png create mode 100644 src/images/hud/jumpFactor.png create mode 100644 src/images/hud/money.png create mode 100644 src/images/hud/punchDamage.png create mode 100644 src/images/hud/questfrankie.png create mode 100644 src/images/hud/questhilda.png create mode 100644 src/images/hud/questjuanita.png create mode 100644 src/images/hud/speedFactor.png diff --git a/src/hud.lua b/src/hud.lua index eee2d3f5e..f442c8283 100644 --- a/src/hud.lua +++ b/src/hud.lua @@ -4,18 +4,13 @@ local fonts = require 'fonts' local utils = require 'utils' local Timer = require 'vendor/timer' local anim8 = require 'vendor/anim8' +local gamestate = require 'vendor/gamestate' local HUD = {} HUD.__index = HUD -local lens = love.graphics.newImage('images/hud/lens.png') -local chevron = love.graphics.newImage('images/hud/chevron.png') -local energy = love.graphics.newImage('images/hud/energy.png') local savingImage = love.graphics.newImage('images/hud/saving.png') -lens:setFilter('nearest', 'nearest') -chevron:setFilter('nearest', 'nearest') -energy:setFilter('nearest', 'nearest') savingImage:setFilter('nearest', 'nearest') function HUD.new(level) @@ -24,22 +19,47 @@ function HUD.new(level) local character = level.player.character - hud.sheet = level.player.character:sheet() - hud.character_quad = love.graphics.newQuad(0, character.offset or 5, 48, 48, hud.sheet:getWidth(), hud.sheet:getHeight()) - - hud.character_stencil = function( x, y ) - love.graphics.circle( 'fill', x + 31, y + 31, 21 ) - end - - hud.energy_stencil = function( x, y ) - love.graphics.rectangle( 'fill', x + 50, y + 27, 59, 9 ) - end - - hud.saving = false - - local h = anim8.newGrid(36, 36, savingImage:getWidth(), savingImage:getHeight()) - hud.savingAnimation = anim8.newAnimation('loop', h('1-8,1'), .25) - hud.savingAnimation:pause() + hud.money = love.graphics.newImage('images/hud/money.png') + hud.heart_full = love.graphics.newImage('images/hud/health_full.png') + + hud.saving = false + hud.savingImage = love.graphics.newImage('images/hud/saving.png') + local h = anim8.newGrid(17, 16, hud.savingImage:getDimensions()) + hud.savingAnimation = anim8.newAnimation('loop', h('1-7,1'), 0.1, {[7] = 0.4}) + hud.savingAnimation:pause() + + hud.invincible = false + hud.invincibleImage = love.graphics.newImage('images/hud/invincible.png') + local i = anim8.newGrid(16, 17, hud.invincibleImage:getDimensions()) + hud.invincibleAnimation = anim8.newAnimation('loop', i('1-2,1'), 0.1, {[2] = 0.1}) + hud.invincibleAnimation:pause() + + hud.restricted = false + hud.restrictedImage = love.graphics.newImage('images/hud/restricted.png') + local h = anim8.newGrid(19, 19, hud.restrictedImage:getDimensions()) + hud.restrictedAnimation = anim8.newAnimation('loop', h('1-2,1'), 0.1, {[2] = 0.4}) + hud.restrictedAnimation:pause() + + hud.punchDamage = false + hud.punchDamageImage = love.graphics.newImage('images/hud/punchDamage.png') + local i = anim8.newGrid(16, 17, hud.punchDamageImage:getDimensions()) + hud.punchDamageAnimation = anim8.newAnimation('loop', i('1-2,1'), 0.1, {[2] = 0.1}) + hud.punchDamageAnimation:pause() + + hud.jumpFactor = false + hud.jumpFactorImage = love.graphics.newImage('images/hud/jumpFactor.png') + local i = anim8.newGrid(16, 17, hud.jumpFactorImage:getDimensions()) + hud.jumpFactorAnimation = anim8.newAnimation('loop', i('1-2,1'), 0.1, {[2] = 0.1}) + hud.jumpFactorAnimation:pause() + + hud.speedFactor = false + hud.speedFactorImage = love.graphics.newImage('images/hud/speedFactor.png') + local i = anim8.newGrid(16, 17, hud.speedFactorImage:getDimensions()) + hud.speedFactorAnimation = anim8.newAnimation('loop', i('1-2,1'), 0.1, {[2] = 0.1}) + hud.speedFactorAnimation:pause() + + + hud.quest = false return hud end @@ -58,37 +78,21 @@ function HUD:endSave() end function HUD:update(dt) - if self.saving then - self.savingAnimation:update(dt) - end -end - --- Draw the quest badge in HUD --- @param player the player --- @return nil -function HUD:questBadge( player ) - local quest = player.quest - local questParent = player.questParent - - local width = (love.graphics.getFont():getWidth( quest ) * 0.5) + 4 - local height = 24 - local margin = 20 - - local x = camera.x + 125 - local y = camera.y + 23 - - -- Draw rectangle - love.graphics.setColor( 0, 0, 0, 180 ) - love.graphics.rectangle('fill', x, y, width, height) - - -- Draw text - love.graphics.setColor( 255, 255, 255, 255 ) - love.graphics.print(quest, (x + 2), (y + 2), 0, 0.5, 0.5) - love.graphics.push() - love.graphics.printf("for " .. questParent, (x + 2), (y + 15), (width + 8), "left", 0, 0.5, 0.5) - love.graphics.pop() - - love.graphics.setColor( 255, 255, 255, 255 ) + if self.saving then + self.savingAnimation:update(dt) + end + if self.invincible then + self.invincibleAnimation:update(dt) + end + if self.punchDamage then + self.punchDamageAnimation:update(dt) + end + if self.jumpFactor then + self.jumpFactorAnimation:update(dt) + end + if self.speedFactor then + self.speedFactorAnimation:update(dt) + end end function HUD:draw( player ) @@ -96,16 +100,12 @@ function HUD:draw( player ) return end - self.sheet = player.character:sheet() - - fonts.set( 'big' ) + fonts.set('small') - self.x, self.y = camera.x + 10, camera.y + 10 + local x, y = camera.x, camera.y - love.graphics.setStencil( ) - love.graphics.setColor( 255, 255, 255, 255 ) - love.graphics.draw( chevron, self.x, self.y) - love.graphics.setStencil( self.energy_stencil, self.x, self.y ) + -- HEALTH + love.graphics.draw(self.heart_full, x+4 , y + 4) love.graphics.setColor( math.min(utils.map(player.health, player.max_health, player.max_health / 2 + 1, 0, 255 ), 255 ), -- green to yellow math.min(utils.map(player.health, player.max_health / 2, 0, 255, 0), 255), -- yellow to red @@ -113,39 +113,81 @@ function HUD:draw( player ) 255 ) - love.graphics.draw(energy, self.x - (player.max_health - player.health) * .56, self.y) - love.graphics.setStencil(self.character_stencil, self.x, self.y) - love.graphics.setColor(255, 255, 255, 255) + love.graphics.print(player.health .. '%', x+17, y + 6) + love.graphics.setColor( 255, 255, 255, 255 ) + + -- MONEY + love.graphics.print(player.money, x+60, y + 6) + love.graphics.draw(self.money, x+50 , y + 4) + -- WEAPONS local currentWeapon = player.inventory:currentWeapon() if currentWeapon and not player.doBasicAttack or (player.holdingAmmo and currentWeapon) then - local position = {x = self.x + 22, y = self.y + 22} - currentWeapon:draw(position, nil,false) - else - love.graphics.draw(self.sheet, self.character_quad, self.x + 7, self.y + 17) + currentWeapon:drawHud(x + 100, y + 4, true) end - love.graphics.setStencil() - love.graphics.draw(lens, self.x, self.y) - love.graphics.setColor( 0, 0, 0, 255 ) - love.graphics.print(player.money, self.x + 69, self.y + 41,0,0.5,0.5) - love.graphics.print(player.character.name, self.x + 60, self.y + 15,0,0.5,0.5) - if player.activeEffects then - love.graphics.setColor( 0, 0, 0, 255 ) - for i,effect in ipairs(player.activeEffects) do - love.graphics.printf(effect, self.x + 20, self.y + 40 + (20 * i), 350, "left",0,0.5,0.5) - end + + --SAVING + if self.saving then + self.savingAnimation:draw(self.savingImage, x + 120, y + 6) end - if player.quest ~= nil then - self:questBadge( player ) + --ACTIVE POTION & CONSUMABLE EFFECTS + love.graphics.setColor( 255, 255, 255, 255 ) + + local iconX, iconY = x + 4, y + 20 + local icons = 0 + local iconline = 0 + + if player.godmode or player.invulnerable then --TODO: don't show up when getting hurt + if player.consuming then + self.invincible = true + self.invincibleAnimation:draw(self.invincibleImage, iconX + 20*icons, iconY+(iconline*19)) + self.invincibleAnimation:resume() + icons = icons + 1 + print(iconline) + end + end + + if player.jumpFactor > 1 then + self.jumpFactor = true + self.jumpFactorAnimation:draw(self.jumpFactorImage, iconX + 20*icons, iconY+(iconline*19)) + self.jumpFactorAnimation:resume() + icons = icons + 1 + end + + if player.speedFactor > 1 then + self.speedFactor = true + self.speedFactorAnimation:draw(self.speedFactorImage, iconX + 20*icons, iconY+(iconline*19)) + self.speedFactorAnimation:resume() + icons = icons + 1 end - love.graphics.setColor( 255, 255, 255, 255 ) + if player.jumpFactor == 0 or player.speedFactor == 0 then + self.restricted = true + self.restrictedAnimation:draw(self.restrictedImage, iconX + 20*icons, iconY+(iconline*19)) + self.restrictedAnimation:resume() + icons = icons + 1 + end + + if player.punchDamage > 1 then + self.punchDamage = true + self.punchDamageAnimation:draw(self.punchDamageImage, iconX + 20*icons, iconY+(iconline*19)) + self.punchDamageAnimation:resume() + icons = icons + 1 + end - if self.saving then - self.savingAnimation:draw(savingImage, self.x + camera:getWidth() - 60, self.y) + if player.quest ~= nil then + local qParent = player.questParent + print(qParent) + local questIcon = love.graphics.newImage('images/hud/quest' .. player.questParent .. '.png') + self.quest = true + love.graphics.draw(questIcon,iconX + 20*icons, iconY+(iconline*19)) + icons = icons + 1 end + --TODO: add slide damage + + fonts.revert() end diff --git a/src/images/hud/Restricted.png b/src/images/hud/Restricted.png new file mode 100644 index 0000000000000000000000000000000000000000..5241271b86f6e44de20838dcb1d69683e779c0da GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^YCtT^!3HG%bk%PFQaPS3jv*Ddk`p9Y4@>-UKlJ3p z4P8B>y*S3Z&7Qu!lvI6;>1s;*b z3=DjSK$uZf!>a)(C{^MbQ4*Y=R#Ki=l*$m0n3-3i=jR%tP-d)Ws%L2E{@KYKsLIdN z#W6%9xVM*)i$Q^d`EPyy$4+i-=it@Nj%%d_8{S7ec{Y2G@)l9c^IC7y7}I`c*!Sff z<(o4{_0;r;NDcPoD_R^?wW>b|P0bJVbXmj~x1_I!={Oq)&}0TrS3j3^P6Sh3Suh;=|LePbSdXu6s4T-~o7AIXYb5RpE>?61Wf#~aGg~?1 z5rcpWfT_=XSj9d5_WiB=t|7cIQG|+g}#JGZ& deTyvv!$HI9(%fg|@jzEFc)I$ztaD0e0s!$=LQ4Pu literal 0 HcmV?d00001 diff --git a/src/images/hud/money.png b/src/images/hud/money.png new file mode 100644 index 0000000000000000000000000000000000000000..944517bb70d8a3022791035b143bd23fb96a6856 GIT binary patch literal 14577 zcmeI3O>g5w7{>=HAqeeq00{&a;}vKTIAiCfO)Mu>H|f$!q*QGXEf?yHC#}`Q_S()S z?Frb^9(M)OUibhYgv6Nx2k4m_2fhJZ_PR(&VQi<)lef+;+T%n?{AA|;e;)fcFY(3q zc6UBp$-J3C2(4^y)%V!(<>>R`3+(&5ANudI!%N=QVSv!J-=fcR-@JeAErd!p?B+pu z(D+CvZZ~UMZi{9IU5}{|GS&y4Nls}fwdk?!ROClL{~}AaRgpg}Hq?e!qbK&(xli}c zcbeqL6 z829`AY(JlM{bQ_^%Vn(Qa4x4Xg%X@Op*c{T;ChneGEbcb#J9cBb{#3oYqs28SdrzZ zQ2H8OSJz7mIl+h>qlgElhqbJV=b0>$dc2uH>11 zK%+HRkuMirx{al~ROE@*u5OZOKdX{xNl?qc6RqRZN}VH{{eK5A$q(#{YxGa3bJc=M zQpKvpNdmVW_D!E|9J4v`WUD>NJ87IQVBqKOGR&%3jQ_a8??Y_yz zu+MH3Xmzz%%ohzj-8}8swFk6wP`B9%4x)LfF(k2Px?`^KaFG#ojEu=pfxq;4B$HNl z!@%xUaC);cImqc!c*eo_ik@*|m`)UdG`O+A#YF@K0vDvgjRh_)A}A2JAPsITaB&eq zfxrc6aASdsiwFt?E=YqL3tU`8P#|zY8r)dm;v#|qfeX^$#sU`?5flhqkOnsvxVVU* zK;VKjxUs;+MFa%`7o@?B1uiZkC=j?H4Q?!OaS=g*zy)b=V}Xl{2nqx)NP`;-TwFv@ zAaFq%+*sh^B7y>e3)0}m0v8t%6bM|91~(SCxQL)Y;DR)`vB1Se1O);Yq`{2^E-oS{ z5V#->ZY*$d5kY~#1!-{OD{*DUkN;7JJ@eOR5BGic?dBis!9a;@?KKcOe+Qv2?jrQh zkRAU*sHY&(`DNaDC~ghhNGU%gf8d`>GQke|K&k zg)47lhU;Jd`^u8K(rhkYJbvxfN9_l-yWih`p81EvC3JSX^y@wHc7gpw+nYP}A8#Ig F^&fHbzN`QM literal 0 HcmV?d00001 diff --git a/src/images/hud/punchDamage.png b/src/images/hud/punchDamage.png new file mode 100644 index 0000000000000000000000000000000000000000..1b44b20a6b7811e635628f5853c2073daea7bcfc GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^3P3E#!3HGv#H{-Rq^dk!978H@B_}jA{7*?@%X;xY zJ~z%+tWDBoVIA8Xw#CW2EEtab|MlHItjAY3RF+}0P3lpxH4=9P7b`l1vI}gInXR1h zh(SP_ErDy|Pm}TkN#|7yc$iNll@v1UI(njJS1ZFV<_tNe9g7&lKk%O~N(i{Z${Z-o dmr>2Y5O~M&=qvH6b3j)xc)I$ztaD0e0sts-G2e8QcoAhkcwN$2?u!pB_DKQ-q0o+ zVX(1np|;z>jJAn+42Eop5+DA*iL_9=rm#a{Q(6pLqA`o>1QF*6yiTT1F3E}-G2e8C7v#hAr-fh6AtkHOFrnryn*e% zRy2>#n#31f8>KqVE9_Xr6r8$d#stS3b9$}|sDYa~&)w`3Z3kEr z+YXq-M_MxW6iPPb2*fa?S^F6CuzP%NFbr&KxKXn(_+K-Fhj924)e6QTAxr@BqXEP^G0gXBs;~!8S}bNYWXvi1hob4 T6P0WPx|hMz)z4*}Q$iB}E%#1< literal 0 HcmV?d00001 diff --git a/src/images/hud/questjuanita.png b/src/images/hud/questjuanita.png new file mode 100644 index 0000000000000000000000000000000000000000..f7c2d7c15e2b49011018bcb20e07694de450b715 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2e8GoCJvAr-fh6AtkHOFrnryn!vJ zA>#0ctVz?S{#(Cr8I!rpd`Ahk6}wmc6E_!Ym3BL!AaYh=cH)<{5v4m670ga3m`q>P z#(ZX(<<71Gp2^XM-Hb<>N}LZc8F)@OR=f9GK~D~&PR@o(Zrdk;Cd$b(98VZ_By#k$ zNisb?yeBm~m(z^H<#8$Ju5bsFq8keBoMFxrcpZ+NXj5oszjnZtpFf4!L60GELU@6j z;U< literal 0 HcmV?d00001 diff --git a/src/images/hud/saving.png b/src/images/hud/saving.png index 06614645113c3f181994c30779bc79fd8e28153b..93125ca78f74d0bdb45bbb9380cde9b1b7af812d 100644 GIT binary patch literal 519 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 cE 1 then + love.graphics.print("x" .. self.quantity, x + 22, y + 2) + end +end + --this is the action the item takes when it is selected in the inventory function Item:select(player) From 36879fc1916836c039555d5db73ab4fe55a298e6 Mon Sep 17 00:00:00 2001 From: 8bitgentleman Date: Tue, 9 Jun 2015 22:32:51 -0400 Subject: [PATCH 2/7] case change --- src/hud.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hud.lua b/src/hud.lua index f442c8283..7e3271a61 100644 --- a/src/hud.lua +++ b/src/hud.lua @@ -35,7 +35,7 @@ function HUD.new(level) hud.invincibleAnimation:pause() hud.restricted = false - hud.restrictedImage = love.graphics.newImage('images/hud/restricted.png') + hud.restrictedImage = love.graphics.newImage('images/hud/Restricted.png') local h = anim8.newGrid(19, 19, hud.restrictedImage:getDimensions()) hud.restrictedAnimation = anim8.newAnimation('loop', h('1-2,1'), 0.1, {[2] = 0.4}) hud.restrictedAnimation:pause() From ecbb8b43789e97fbd694f8c64db256a66cd47d96 Mon Sep 17 00:00:00 2001 From: 8bitgentleman Date: Tue, 9 Jun 2015 23:00:35 -0400 Subject: [PATCH 3/7] Come back Magnitude! Also start enemy HUD --- src/hud.lua | 6 ++--- src/images/hud/saving.png | Bin 519 -> 4364 bytes src/nodes/enemies/turkeyBoss.lua | 43 +------------------------------ src/nodes/enemy.lua | 28 ++++++++++++++++++++ 4 files changed, 32 insertions(+), 45 deletions(-) diff --git a/src/hud.lua b/src/hud.lua index 7e3271a61..acf8b0e6a 100644 --- a/src/hud.lua +++ b/src/hud.lua @@ -24,8 +24,8 @@ function HUD.new(level) hud.saving = false hud.savingImage = love.graphics.newImage('images/hud/saving.png') - local h = anim8.newGrid(17, 16, hud.savingImage:getDimensions()) - hud.savingAnimation = anim8.newAnimation('loop', h('1-7,1'), 0.1, {[7] = 0.4}) + local h = anim8.newGrid(36, 36, hud.savingImage:getDimensions()) + hud.savingAnimation = anim8.newAnimation('loop', h('1-8,1'), 0.1, {[8] = 0.4}) hud.savingAnimation:pause() hud.invincible = false @@ -113,7 +113,7 @@ function HUD:draw( player ) 255 ) - love.graphics.print(player.health .. '%', x+17, y + 6) + love.graphics.print(player.health, x+17, y + 6) love.graphics.setColor( 255, 255, 255, 255 ) -- MONEY diff --git a/src/images/hud/saving.png b/src/images/hud/saving.png index 93125ca78f74d0bdb45bbb9380cde9b1b7af812d..06614645113c3f181994c30779bc79fd8e28153b 100644 GIT binary patch literal 4364 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 JPDHLkV1gS3 Date: Thu, 11 Jun 2015 19:34:53 -0600 Subject: [PATCH 4/7] Revert bosshud stub --- src/nodes/enemies/turkeyBoss.lua | 43 +++++++++++++++++++++++++++++++- src/nodes/enemy.lua | 28 --------------------- 2 files changed, 42 insertions(+), 29 deletions(-) diff --git a/src/nodes/enemies/turkeyBoss.lua b/src/nodes/enemies/turkeyBoss.lua index cd19a60cb..fd3221cda 100644 --- a/src/nodes/enemies/turkeyBoss.lua +++ b/src/nodes/enemies/turkeyBoss.lua @@ -11,7 +11,6 @@ local fonts = require 'fonts' return { name = 'turkeyBoss', - isBoss = true, attackDelay = 1, height = 115, width = 215, @@ -95,6 +94,48 @@ return { level:addNode(spawnedNode) end, + draw = function( enemy ) + fonts.set( 'small' ) + + love.graphics.setStencil( ) + + local energy = love.graphics.newImage('images/enemies/bossHud/energy.png') + local bossChevron = love.graphics.newImage('images/enemies/bossHud/bossChevron.png') + local bossPic = love.graphics.newImage('images/enemies/bossHud/turkeyBoss.png') + + energy:setFilter('nearest', 'nearest') + bossChevron:setFilter('nearest', 'nearest') + bossPic:setFilter('nearest', 'nearest') + + x, y = camera.x + window.width - 130 , camera.y + 10 + + love.graphics.setColor( 255, 255, 255, 255 ) + love.graphics.draw( bossChevron, x , y ) + love.graphics.draw( bossPic, x + 69, y + 10 ) + + love.graphics.setColor( 0, 0, 0, 255 ) + love.graphics.printf( "TURKEY", x + 15, y + 15, 52, 'center' ) + love.graphics.printf( "BOSS", x + 15, y + 41, 52, 'center' ) + + energy_stencil = function( x, y ) + love.graphics.rectangle( 'fill', x + 11, y + 27, 59, 9 ) + end + love.graphics.setStencil(energy_stencil, x, y) + local max_hp = 100 + local rate = 55/max_hp + love.graphics.setColor( + math.min(utils.map(enemy.hp, max_hp, max_hp / 2 + 1, 0, 255 ), 255), -- green to yellow + math.min(utils.map(enemy.hp, max_hp / 2, 0, 255, 0), 255), -- yellow to red + 0, + 255 + ) + love.graphics.draw(energy, x + ( max_hp - enemy.hp ) * rate, y) + + love.graphics.setStencil( ) + love.graphics.setColor( 255, 255, 255, 255 ) + fonts.revert() + end, + attackBasketball = function( enemy ) local node = { type = 'projectile', diff --git a/src/nodes/enemy.lua b/src/nodes/enemy.lua index f85237d94..cdcf6ce06 100644 --- a/src/nodes/enemy.lua +++ b/src/nodes/enemy.lua @@ -146,11 +146,6 @@ function Enemy.new(node, collider, enemytype) enemy.foreground = node.properties.foreground or enemy.props.foreground or false enemy.db = app.gamesaves:active() - enemy.isBoss = enemy.props.isBoss or false - if enemy.isBoss then - --enemy.hudSprite = love.graphics.newImage('images/enemies/'..type..'_hud.png') - end - return enemy end @@ -452,31 +447,8 @@ function Enemy:updatePosition(map, dx, dy) self.position.y = ny - offset_y end -function Enemy:drawBossHud() - - local x, y = camera.x, camera.y - --[[love.graphics.draw(self.hudSprite, x + 17, y + 70) - - local heartValue = self.maxHealth / 10 - local tracker = 0 - - for i = 1,2 do - for j = 1,5 do - if tracker + heartValue <= self.hp then - love.graphics.draw(self.health_full, x + 58 + 13*(j-1), y + 78 + 13*(i - 1)) - elseif tracker < self.hp then - love.graphics.draw(self.health_empty, x + 58 + 13*(j-1), y + 78 + 13*(i - 1)) - end - tracker = tracker + heartValue - end - end]] -end - function Enemy:draw() local r, g, b, a = love.graphics.getColor() - if self.isBoss then - self:drawBossHud() - end if self.flash then love.graphics.setColor(255, 0, 0, 255) From 0b4d7b3eede333ec919495bab2d08d862a56e717 Mon Sep 17 00:00:00 2001 From: bucketh3ad Date: Thu, 11 Jun 2015 20:21:48 -0600 Subject: [PATCH 5/7] Add black outline to HUD text --- src/hud.lua | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/hud.lua b/src/hud.lua index acf8b0e6a..591cfa1f5 100644 --- a/src/hud.lua +++ b/src/hud.lua @@ -106,6 +106,14 @@ function HUD:draw( player ) -- HEALTH love.graphics.draw(self.heart_full, x+4 , y + 4) + + --Draw black outline using 16s + love.graphics.setColor( 0, 0, 0, 255 ) + love.graphics.printf(player.health, x + 17, y + 6, 16, 'left', 0, 1, 1, 0.5, 0.5) + love.graphics.printf(player.health, x + 17, y + 6, 16, 'left', 0, 1, 1, 0.5, -0.5) + love.graphics.printf(player.health, x + 17, y + 6, 16, 'left', 0, 1, 1, -0.5, 0.5) + love.graphics.printf(player.health, x + 17, y + 6, 16, 'left', 0, 1, 1, -0.5, -0.5) + love.graphics.setColor( math.min(utils.map(player.health, player.max_health, player.max_health / 2 + 1, 0, 255 ), 255 ), -- green to yellow math.min(utils.map(player.health, player.max_health / 2, 0, 255, 0), 255), -- yellow to red @@ -114,9 +122,17 @@ function HUD:draw( player ) ) love.graphics.print(player.health, x+17, y + 6) - love.graphics.setColor( 255, 255, 255, 255 ) -- MONEY + + --Draw black outline using 16s + love.graphics.setColor( 0, 0, 0, 255 ) + love.graphics.printf(player.money, x + 60, y + 6, 16, 'left', 0, 1, 1, 0.5, 0.5) + love.graphics.printf(player.money, x + 60, y + 6, 16, 'left', 0, 1, 1, 0.5, -0.5) + love.graphics.printf(player.money, x + 60, y + 6, 16, 'left', 0, 1, 1, -0.5, 0.5) + love.graphics.printf(player.money, x + 60, y + 6, 16, 'left', 0, 1, 1, -0.5, -0.5) + + love.graphics.setColor( 255, 255, 255, 255 ) love.graphics.print(player.money, x+60, y + 6) love.graphics.draw(self.money, x+50 , y + 4) From a7fdb04fe19e889be8061fbcc1803e25a8ca49ed Mon Sep 17 00:00:00 2001 From: bucketh3ad Date: Thu, 11 Jun 2015 20:31:28 -0600 Subject: [PATCH 6/7] Add outline to HUD ammo count --- src/hud.lua | 4 ++-- src/items/item.lua | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/hud.lua b/src/hud.lua index 591cfa1f5..4878a58a8 100644 --- a/src/hud.lua +++ b/src/hud.lua @@ -107,7 +107,7 @@ function HUD:draw( player ) -- HEALTH love.graphics.draw(self.heart_full, x+4 , y + 4) - --Draw black outline using 16s + --Draw black outline using offsets love.graphics.setColor( 0, 0, 0, 255 ) love.graphics.printf(player.health, x + 17, y + 6, 16, 'left', 0, 1, 1, 0.5, 0.5) love.graphics.printf(player.health, x + 17, y + 6, 16, 'left', 0, 1, 1, 0.5, -0.5) @@ -125,7 +125,7 @@ function HUD:draw( player ) -- MONEY - --Draw black outline using 16s + --Draw black outline using offsets love.graphics.setColor( 0, 0, 0, 255 ) love.graphics.printf(player.money, x + 60, y + 6, 16, 'left', 0, 1, 1, 0.5, 0.5) love.graphics.printf(player.money, x + 60, y + 6, 16, 'left', 0, 1, 1, 0.5, -0.5) diff --git a/src/items/item.lua b/src/items/item.lua index f33678ead..021ea57a5 100644 --- a/src/items/item.lua +++ b/src/items/item.lua @@ -94,6 +94,14 @@ end function Item:drawHud(x, y, quantity) love.graphics.draw(self.image, self.image_q, x, y-2) if quantity and self.quantity > 1 then + --Draw black outline using offsets + love.graphics.setColor( 0, 0, 0, 255 ) + love.graphics.printf("x" .. self.quantity, x + 22, y + 2, 16, 'left', 0, 1, 1, 0.5, 0.5) + love.graphics.printf("x" .. self.quantity, x + 22, y + 2, 16, 'left', 0, 1, 1, 0.5, -0.5) + love.graphics.printf("x" .. self.quantity, x + 22, y + 2, 16, 'left', 0, 1, 1, -0.5, 0.5) + love.graphics.printf("x" .. self.quantity, x + 22, y + 2, 16, 'left', 0, 1, 1, -0.5, -0.5) + + love.graphics.setColor(255, 255, 255, 255) love.graphics.print("x" .. self.quantity, x + 22, y + 2) end end From ad6f522853e9596473c1a8d491ecdb83e07e29c9 Mon Sep 17 00:00:00 2001 From: bucketh3ad Date: Thu, 11 Jun 2015 20:56:39 -0600 Subject: [PATCH 7/7] Update playerEffects for new HUD; Fix invulnerability icon --- src/hud.lua | 13 +++++-------- src/items/consumables/green_potion.lua | 4 ++-- src/playerEffects.lua | 21 ++++++++++++--------- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/hud.lua b/src/hud.lua index 4878a58a8..9f8932695 100644 --- a/src/hud.lua +++ b/src/hud.lua @@ -154,14 +154,11 @@ function HUD:draw( player ) local icons = 0 local iconline = 0 - if player.godmode or player.invulnerable then --TODO: don't show up when getting hurt - if player.consuming then - self.invincible = true - self.invincibleAnimation:draw(self.invincibleImage, iconX + 20*icons, iconY+(iconline*19)) - self.invincibleAnimation:resume() - icons = icons + 1 - print(iconline) - end + if player.godmode or player.activeInvulnEffect then --TODO: don't show up when getting hurt + self.invincible = true + self.invincibleAnimation:draw(self.invincibleImage, iconX + 20*icons, iconY+(iconline*19)) + self.invincibleAnimation:resume() + icons = icons + 1 end if player.jumpFactor > 1 then diff --git a/src/items/consumables/green_potion.lua b/src/items/consumables/green_potion.lua index 65c1bf147..b4dd0633a 100644 --- a/src/items/consumables/green_potion.lua +++ b/src/items/consumables/green_potion.lua @@ -14,8 +14,8 @@ return{ default = false, duration = 5, color = {34,177,76,255}, - startMessage = "invulnerability activated", - endMessage = "invulnerability expired", + startMessage = "invulnerability", + endMessage = "invulnerability", }, }, } diff --git a/src/playerEffects.lua b/src/playerEffects.lua index a5ab016d9..ac929eaaf 100644 --- a/src/playerEffects.lua +++ b/src/playerEffects.lua @@ -7,7 +7,7 @@ local VALID_EFFECTS = { ['heal']=1,['buff']=2,['zombie']=3,['money']=4,['hurt']=5,['alcohol']=6 } -local HUDMessage = function(message, player, duration) +local addEffect = function(message, player, duration) local d = duration or 4 if not player.activeEffects then player.activeEffects = {message} @@ -17,6 +17,9 @@ local HUDMessage = function(message, player, duration) Timer.add(d, function() table.remove(player.activeEffects, 1) end) + + player.activeInvulnEffect = message == "invulnerability" and not player.activeInvulnEffect + end function PlayerEffects.heal(player, value) @@ -33,7 +36,7 @@ function PlayerEffects.buff(player, buff) player[buff.attribute] = buff.value Timer.add(buff.duration, function() player[buff.attribute] = orig - HUDMessage(buff.endMessage, player) + addEffect(buff.endMessage, player) end) player:potionFlash(buff.duration, buff.color or {192,192,192,255}) return buff.startMessage .. (buff.startMessageValue and buff.value or "") @@ -68,10 +71,10 @@ function PlayerEffects.zombie(player) local punchDamage, jumpFactor, jumpDamage, slideDamage, speedFactor, costume = player:initEffectsReset() player:addEffectsTimer(Timer.add(66, function () --Resets damage boost and costume after one minute being active - HUDMessage("a chilling gust of AC makes you forget your hunger for brains", player, 10) + addEffect("a chilling gust of AC makes you forget your hunger for brains", player, 10) player.resetPlayerEffects() end)) - HUDMessage("that taco meat tastes weird...", player) + addEffect("that taco meat tastes weird...", player) for i=1,2 do player:addEffectsTimer(Timer.add(2*i-1, function () -- Damage over time if player.health > 1 then player:hurt(15) end @@ -81,7 +84,7 @@ function PlayerEffects.zombie(player) if love.filesystem.exists("images/characters/" .. player.character.name .. "/zombie.png") then player.character.costume = 'zombie' end - HUDMessage("holy crap, you are a zombie!", player, 10) + addEffect("holy crap, you are a zombie!", player, 10) player.jumpDamage = jumpDamage * 2 player.punchDamage = punchDamage * 2 player.slideDamage = slideDamage * 2 @@ -89,18 +92,18 @@ function PlayerEffects.zombie(player) end function PlayerEffects.dudEffect(item, player) - HUDMessage("that " .. item .. " got stale and lost its power", player, 10) + addEffect("that " .. item .. " got stale and lost its power", player, 10) end function PlayerEffects.alcohol(player) local punchDamage, jumpFactor, jumpDamage, slideDamage, speedFactor, costume = player:initEffectsReset() player:addEffectsTimer(Timer.add(40, function () --Resets everything - HUDMessage("Sobering up", player) + addEffect("Sobering up", player) player.resetPlayerEffects() end)) - HUDMessage("I think you drank too much...", player) + addEffect("I think you drank too much...", player) player.jumpFactor = jumpFactor * (math.random(40, 80) / 100) player.punchDamage = punchDamage * (math.random(40, 80) / 100) player.speedFactor = speedFactor * (math.random(40, 80) / 100) @@ -118,7 +121,7 @@ function PlayerEffects:doEffect(effects, player) if effect == "randEffect" then self:randEffect(player, value) elseif VALID_EFFECTS[effect] then - HUDMessage(self[effect](player, value), player) + addEffect(self[effect](player, value), player) else error("Invalid player effect type: " .. effect) end