79

Game feel why your death animation sucks (nicolae berbece)

Embed Size (px)

DESCRIPTION

CodeCampIasi25Oct2014

Citation preview

  • 1. Hello!

2. Title: Nicolae Berbece Released: 1992 Platforms: Bucharest | Romania Genre: Game Developer Meta Critic score: Pending Founder: Those Awesome Guys Removed Features: Long hair, softTo the touch 3. Stuff I madeMost of these are really old and rathershitty, just pretend they are impressive... 4. ________________Game FeelWhy your death animation sucks 5. _G_a_m_e_ _F_e_e_l_______ Visual Queues Audio Haptic Feedback Responsiveness 6. Feedback 7. Game Feel Examples: 8. Firing a weapon | Lack of Feedback 9. Firing a weapon | Good Feedback 10. Swinging a sword| Lack of Feedback 11. Swinging a sword | Good Feedback 12. Conclusion 13. Game Feel :The thing that makes you sayHoly shit in a game 14. Game Feel in Move or Die________________ Death animation No animated VFX 15. Lua | Love2D | Box2DLets make anawesome death animation! 16. The Basics________________ Movement Death Condition 17. Basics | Movementlocal acc= joeAcceleration;local sp = joeTopSpeed;if(self.topSpeed~= nil)then sp= self.topSpeedendlocal topSpeed= sp* self.anim.animationSpeed;local xspeed,yspeed= self.b2Object.body:getLinearVelocity();if(directionButtonPressed)thenif(self.speedX< 0)then self.speedX= self.speedX* .95 endself.speedX= self.speedX+ acc;if (self.speedX>= topSpeed) then self.speedX= topSpeedend;end 18. Basics | Jumpingxspeed,yspeed= self.b2Object.body:getLinearVelocity();if(jumpButtonand self.jumping== false)thenself.upLetGo= false;endlocal f = 1;local x,y= _world:getGravity();if(y * self.b2Object.body:getGravityScale() < 0)then f = -1 endlocal jumpPower = self.jumpPoweror joeJumpPower;local newYSpeed= jumpPower* f;if(self.jumpc>= 0.05)then newYSpeed= jumpPower* f * 1.3; end 19. Basics | Death Conditionif(P1 == "P1Feet" and P2Fixture:isSensor() == false)thenP2.dead = true;P2.health = 0; 20. DEMO 21. _A_n_im__a_t_io_n_s_______ Creating animations Sprite sheets vs Asset Sheets Exporting & Packing Implementing 22. Animations| Breakdown 23. Animations| Animating 24. Animations| Sprite Sheets 25. Animations| Asset Sheets 26. Animations| Exporting Animation 27. Animations| Exporting Animation"-name":"LegRight","Frame": [ 13{ "x":"38.05","y":"45.6","scaleX":"1.00","scaleY":"1.00","rotation":"0.000","alpha":"1.00","ColorMatrix":"1.000,0.000,0.000,0.000,1.000,0.000,1.000,0.000","depth":"1","blendMode":"normal" } 28. Sprite Sheet| 5700x3100 px 29. Asset Sheet| 460x210 px (less than 1%) 30. _A_ss_e_t_ S_h_e_e_t_ _A_d_v_a_n_tages Small File Flexible & Optimized Individual control over many variables Interpolation 31. Animations| Slow Motion Goodness 32. Animations| Implementationif(self.overrideAnimations~= true)thenif(rightPressed== false and leftPressed== false or rightPressed== true and leftPressed== true)thenif(self.anim:getCurrentFrame() == "Run")thenif(self.movedEnough)then self.anim:gotoAndPlay("Break","Idle") else self.anim:gotoAndPlay("Idle") endendendend 33. DEMO 34. S_o_u__n_d_ E_f_fe_c_t_s_____ Movement Death Environment 35. Sound Effects| Where to find themsoundjay.com freesfx.co.uk soundsnap.com 36. Sound Effects| EditingAudacity 37. Sound Effects| MovementT_i_p_s_____________ Subtle Variation 38. Sound Effects| MovementJumping Sound Effect 39. Sound Effects| MovementJumping SFX Preview 40. Sound Effects| MovementSubtle 41. Sound Effects| MovementVariation (Pitch Shift) 42. Sound Effects| MovementF_o_o__ts_t_e_p_s________ Subtle! Variation! 43. Sound Effects| Death_C_o_m_p_o_s_i_ti_o_n______ Combination of multiple sounds Satisfying end result 44. Sound Effects| DeathStrong Impact 45. Sound Effects| DeathSmall Impact 46. Sound Effects| DeathSquishy Sound 47. Sound Effects| DeathCombine all of them 48. Sound Effects| EnvironmentTemp Tile SFX 49. DEMO 50. _D_e_a_th__ P_a_i_n_t______ Reward your actions A way to mark the death spot A way to tell who died there and when 51. Death Paint| Assets 52. Death Paint| Randomized SpawnSpawn when playerd_i_es________ Match paint color with player Randomized paint asset Random scale Random rotation Lower opacity 53. Death Paint| Looks bad 54. Death Paint| DepthTake advantageof depth__________Spawn behindeverything exceptbackground 55. Death Paint| Foreground MaskGenerate alphamask from tiles__________Render all the tilesseparately on a blackbackground and tintthem white. Mask! 56. Death Paint| Foreground Paint_P_u_tt_i_n_g_ t_h_e_ p_a_i_n_t_ t_ogether Spawn a second layer of paint Apply the mask Additive blending mode 57. Death Paint| Foreground Paint 58. BUTBEFORE THE DEMO 59. _P_a_in_t_ P_a_r_t_ic_l_e_s____ Spawn random number of particles Fly outwards Leave paint on the floor on collision 60. Death Paint| Particles 61. DEMO 62. F_i_n_a_l_ T_o_u_c_h_e_s_____ Screen shake Chromatic aberration Shockwave Haptic Feedback 63. Final Touches| Screen Shake_cam.x= _cam.x+ math.random() * 90;_cam.y= _cam.y+ math.random() * 90;Too much? 64. Final Touches| Screen Shake 65. Final Touches| Chromatic Aberration 66. Final Touches| Chromatic Aberration 67. Final Touches| Shockwaveif ((dis = (time -shockParams.z))){number diff = (dis - time);number powDiff= 1.0 -pow(abs(diff*shockParams.x),shockParams.y);number diffTime= diff * powDiff;vec2 diffUV= normalize(texture_coords -center);texture_coords=texture_coords + diffUV* diffTime;} 68. Final Touches| Shockwave 69. Final Touches| Haptic Feedbacklocal factor = original + (target -original) * (counter/time)self.vibrateCounter= counter+ dt;if(counter >= time)thenself.vibrating = false;self.vibrateTween= {target,target,time}endif(joystick ~= nil)thenjoystick:setVibration(factor,factor);end 70. DEMO 71. THANK YOU! 72. Other thingsProps Landing Dust Eyes Rhythm 73. xelubest [email protected] 74. THANK YOU!Lets keep the discussion [email protected]