Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics

Good Junk (an iOS match-3 game about beer and junk food) [Available on the App Store]

A topic by IncludeBeer created Nov 12, 2016 Views: 1,857 Replies: 24
Viewing posts 1 to 19
(11 edits)

EDIT: Progress = 100% !!! Available on the App Store!

I started developing a small iOS game during last summer (2016). It's called Good Junk and It's a match-3 puzzle. I know there's literally a ton of this kind of game on the app store, but since it's my first game, I make it for fun and to learn something new. My goal is absolutely not to release a Candy Crush killer. I already have a good full time job, and I'm not evil enough to rip off people like they do!

What will make this game fun and different from all the other games (I think!), is the theme. Forget the candies, cup cakes and other pink cute stuff. You'll have to match and collect beer, pizza, hamburger and all kind of junk food. There's a fat guy you can use as a "power up" to clear one item from the board (he eats them all). There will also be some "good" food, but they will be the "enemy". It's not a serious game, it's supposed to be funny and stupid!

Enough text, here's the first video preview of the game itself:

Progress, To-do's and Credits

What is done + credits:

  • Food item sprites (original graphics by JuicyVitamin, sprites by me)
  • Background graphics (original graphic by Game Art Guppy)
  • Custom font (Kenney font + BMGlyph)
  • Animation for fatso man (original graphic by eryprihananto, animation by me)
  • Polka music (by Kevin MacLeod)
  • Game logic to make chains of 3, 4 or 5 items, L shape and T shape chains
  • Power up when creating L or T shape chains
  • Power up to clear all items of one type
  • Collect a number of items to complete a level
  • Reach a target score to complete a level
  • Loading level data from JSON files
  • Saving game progress
  • Main screen with menu and animation
  • In-game menu

What needs to be done:

  • More food items sprites
  • Create a whole bunch of levels (+100) and tweak the difficulty level so it's well balanced between too easy and too hard
  • Screen before starting a new level: Display level number, high score to beat, and goals to complete the level
  • Screen after completing a level: Display score, high score, retry or go to next level
  • Screen to list all levels: level completed (retry and beat your score), locked (see your progress and what's next)
  • Add new items and new goals to make the gameplay more interesting
  • Add juice: more and better animations and sound effects

What I will maybe do later, I'm not sure yet:

  • Manage multiple save games (so you can let a friend play without screwing your own game)
  • Configuration screen to set music on/off, sound effects on/off
  • GameCenter integration
  • Social network (post score on Twitter / Facebook, or beat your friend's score)
  • In-app purchase (I will probably just sell the game at a very low price, but it may be free with possibility to unlock the complete game)
You can follow me on Twitter: @IncludeBeer

To-do update

    I was super busy since my last update, but I have completed these two tasks :

    • Screen before starting a new level: Display level number, high score to beat, and goals to complete the level
    • Screen after completing a level: Display score, high score, retry or go to next level
    Now I'm working on this :
    • Screen to list all levels: level completed (retry and beat your score), locked (see your progress and what's next)

    I think match-3 games are generally undervalued inside the industry, but they are actually very difficult to make well, and to make them funny. Anyway, it's very useful to build games with more typical gameplay from time to time. You can explore and realize by yourself why the mechanics work with people. Then you can play around with what you've learned and make it special.

    Thanks for sharing!

    Yeah, most "hardcore" gamers will say match-3 games are crap for "casual" gamers. But they are still very popular.

    Anyway, this game is mostly for my own amusement. It allows me to learn SpriteKit and build a game I enjoy playing. We'll see how it goes when it's finished, and what I will come up with after this experience !

    Thank you for your feedback!

    (1 edit)

    Today I learned the magic of centerRect to stretch a sprite while keeping the edges at the original scale. It's very useful to resize buttons.

    Here's the code I used in an Xcode Playground:

    import UIKit
    import SpriteKit
    import PlaygroundSupport
    let sceneView = SKView(frame: CGRect(x: 0, y: 0, width: 320, height: 480))
    let scene = SKScene(size: CGSize(width: 320, height: 480))
    scene.anchorPoint = CGPoint(x: 0.5, y: 0.5)
    PlaygroundPage.current.needsIndefiniteExecution = true
    PlaygroundPage.current.liveView = sceneView
    // Original
    let btnNode = SKNode()
    btnNode.position = CGPoint(x: 0, y: 200)
    let btn = SKSpriteNode(imageNamed: "yellow_button00")
    let btnLabel = SKLabelNode(fontNamed: "Avenir-Black")
    btnLabel.text = "Original sprite"
    btnLabel.fontColor = .black
    btnLabel.fontSize = 16
    btnLabel.horizontalAlignmentMode = .center
    btnLabel.verticalAlignmentMode = .center
    // X stretched without centerRect
    let btnNode2 = SKNode()
    btnNode2.position = CGPoint(x: 0, y: 130)
    let btn2 = SKSpriteNode(imageNamed: "yellow_button00")
    btn2.size = CGSize(width: 300, height: 49)
    let btnLabel2 = SKLabelNode(fontNamed: "Avenir-Black")
    btnLabel2.text = "X stretched without centerRect"
    btnLabel2.fontColor = .black
    btnLabel2.fontSize = 16
    btnLabel2.horizontalAlignmentMode = .center
    btnLabel2.verticalAlignmentMode = .center
    // X stretched with centerRect
    let btnNode3 = SKNode()
    btnNode3.position = CGPoint(x: 0, y: 60)
    let btn3 = SKSpriteNode(imageNamed: "yellow_button00")
    btn3.centerRect = CGRect(x: 10.0/190.0, y: 10.0/49.0, width: 170.0/190.0, height: 29.0/49.0)
    btn3.xScale = 300.0/190.0
    btn3.yScale = 49.0/49.0
    let btnLabel3 = SKLabelNode(fontNamed: "Avenir-Black")
    btnLabel3.text = "X stretched with centerRect"
    btnLabel3.fontColor = .black
    btnLabel3.fontSize = 16
    btnLabel3.horizontalAlignmentMode = .center
    btnLabel3.verticalAlignmentMode = .center
    // X/Y stretched without centerRect
    let btnNode4 = SKNode()
    btnNode4.position = CGPoint(x: 0, y: -40)
    let btn4 = SKSpriteNode(imageNamed: "yellow_button00")
    btn4.size = CGSize(width: 300, height: 100)
    let btnLabel4 = SKLabelNode(fontNamed: "Avenir-Black")
    btnLabel4.text = "X/Y stretched without centerRect"
    btnLabel4.fontColor = .black
    btnLabel4.fontSize = 16
    btnLabel4.horizontalAlignmentMode = .center
    btnLabel4.verticalAlignmentMode = .center
    // X/Y stretched with centerRect
    let btnNode5 = SKNode()
    btnNode5.position = CGPoint(x: 0, y: -160)
    let btn5 = SKSpriteNode(imageNamed: "yellow_button00")
    btn5.centerRect = CGRect(x: 10.0/190.0, y: 10.0/49.0, width: 170.0/190.0, height: 29.0/49.0)
    btn5.xScale = 300.0/190.0
    btn5.yScale = 100.0/49.0
    let btnLabel5 = SKLabelNode(fontNamed: "Avenir-Black")
    btnLabel5.text = "X/Y stretched with centerRect"
    btnLabel5.fontColor = .black
    btnLabel5.fontSize = 16
    btnLabel5.horizontalAlignmentMode = .center
    btnLabel5.verticalAlignmentMode = .center

    I forgot to add the link to the API doc. It explains how centerRect work. See the section "Resizing a sprite node":

    Level select screen: DONE! :)

    Now working on a progress bar for the power up button. When it's at 100%, the button is enabled and the player can use the power up to call the fatso man. You can see a preview of the fatso man drinking all the beers in the second animated gif in my first post. It's a basic animation for now. I hope to have something more polished when the game is finished.

    More screenshots soon!

    Progress now at 70%: New screens, level select, new animations, progress bar... :)

    via GIPHY

    via GIPHY

    via GIPHY

    New food sprites!

    I just added a lot of new food items. There's now 10 junk food (beer, burger, fried chicken, hot dog, pizza, taco, chocolat, donut, fries and wine) and 5 good food (apple, banana, carrot, grapes and strawberry), for a total of 15.

    Every match of 3 to 5 items gives you points and increase the progress bar. When it reach 100% it unlock the power up that will clear the item of your choice from the grid. But there's a twist! If you match good food, the progress bar will decrease, because fatso man doesn't like fruits! Think of the progress bar as fatso man's happiness. Also, the power up won't let you choose a fruit. Fatso man will only eat the junk food. So the only way to get rid of those evils fruits is to make a chain of 3 to 5 items... and make fatso man sad!

    Next step: create a ton of levels, then play, adjust, re-play, re-adjust, and repeat until I'm almost insane!

    Finally I didn't work on the levels. I worked on adding juice! Animations and particles are very fun to work with! More screenshots this week-end!

    By the way, I would love to have some feedback. Is it a game you would play? Do you find this funny or stupid? Do you have any idea to make this game better? Let me know!

    Preview #2 :)

    Beta testing with TestFlight ! :)

    GoodJunk now have its own Facebook page:

    The beta tests are going well. I will release the 3rd, and hopefully the last, beta version this week-end on TestFlight. This version include bug fixes and new features such as :

    • Bonus points at the end of levels if you still have remaining moves (with sound and animation)
    • Tutorial at the beginning of the first 5 levels, and then when there's a new feature available to use in the game.

    The final game should be available on the Apple AppStore this Spring 2017 ! :)

    Almost finished! Here is a preview of the new level layouts I just made :


    I wanted to chime in and say I am your audience. Junk food appeals to me... I am eating a doughnut as I try to type this right now with my pinkies. I also enjoy this match three style of game since a specific other game got me hooked and shall remain nameless. Others laughed at me for playing the game, but like everything good just add frosting and people will like it more!

    You also look to be a dapper developer even with an apt user name considering the game :-)

    Thanks for your comment! I also like this type of game but they're all about stupid candy. Now we can play with food we really like! :)

    And don't be fooled by my profile pic, I made this with an app! ;)

    I assume because candy appeals to kids and included beer appeals to adults and rebel teens.

    Yes, I think there's definitely a public for a game with beer, junk food and burp sounds! We'll see when it's released if it can get some attention in the middle of thousands of other match-3 games.

    There are thousands of every type of game at this point with a few rare exceptions that within a year or six months.... they too will be covered.

    At last, I have finished!

    I'm making screenshots and a video preview for the app store,  a last round of tests, then I submit the game on the app store! :)

    GoodJunk is now available on the App Store! :)

    App preview video

    Now translated in french and russian!

    I'm currently working on the iPad version.

    Try it right now!