Game Description

Lil' Beans is a collection based game that was designed with a light hearted and happy feel. The player, who is represented by the lil' bean, is meant to collect the bananas on the island; once all bananas are collected the player wins. There are obstacles and enemies in the way of the goal, but do not worry, this game is safe for children of all ages. The game play was based on the movement and style of "Frogger 2: Swampy's Revenge" and other inspiration for the aesthetic came from the Spyro games.


Controls

  • WASD to move player around
  • Space Bar to jump
  • Mouse will move the camera view
  • Up and Down arrow keys will move the camera in and out
  • R key will reset the camera


  • Technologies

    Camera

    We implemented an arcball camera which rotated around the player. The camera eye was scaled by a radius, which controlled how far away the camera was tethered to the player. The radius could be changed by the user. Mouse scrolling changed the rotation of the camera, always keeping the player at the center of the view.


    Environment and Character motion

    The environment was built with obj models and hierarchical models. The lil' bean squashed and stretched when it jumped and hopped around.


    Collision Detection and Spatial Data Structure

    We used Axis Aligned Bounding Boxes for collision detection. To optimize the game, we used a spatial data structure, where the collisions were checked by island.


    View Frustum Culling

    View Frustum Culling was implemented using the structures of the islands. The islands and objects on them are culled when they are not in the view.

    Rendering Techniques for Shading

    Within this game, we implemented a few different shading techniques including cel shading, deffered shading, and bloom.


    Cel Shading

    Cel shading added to the cartoon feel of the game. Instead of shading by gradients, which looks more realistic, we binned all of the colors of our scene. We rounded colors to the nearest tenth to create the hard line for color shifts. This created the cartoon vibes we were going for!


    Deffered Shading

    A common technique in real-time graphics is to do deferred shading. In our game, deferred shading helped us set up our textures for bloom.


    Bloom

    To make the objective of collecting bananas more obvious, we wanted to make them glow. To do this, we implemented a variation of bloom where, instead of blooming all bright parts of a scene, we just blurred the bananas.


    HUD

    Kirsten implemented a totally sick HUD. It shows the amount of lives left and how many nans have been collected.


    Shadow Mapping



    Game Footage

    Here is a runthrough of our legendary game of beans! Sorry about the sound quality though...

    References

    These are the sources for images and tutorials I used for this project! I also used base code from previous labs and projects from this class! I also had plenty of help from the TA Amy. Thanks Amy!

    https://learnopengl.com/In-Practice/2D-Game/Collisions/Collision-detection
    https://learnopengl.com/Advanced-Lighting/Bloom
    https://github.com/RetroRebirth/CPE476_JapaneseFestival/blob/master/Camera.cpp
    https://www.turbosquid.com/FullPreview/Index.cfm/ID/652982
    https://stackoverflow.com/questions/8804880/use-playsound-in-c-opengl-to-play-sound-in-background