Oh my god, it’s already that time of the month again, the month was fulfilled with unfocused work, many different projects, many different experimentations and my attention divided into classes, capstones and personal projects.
This month I will have to narrow down what I’m working on at school and start focusing more to get more interesting projects going on, but at the time I’m just enjoying the experience of being able to work on games all day every day and being able to explore different things.
Setting these aside, here is a brief overview of what I worked on this month!
We Broke O.R.B.Y
I briefly talked about this project last month, this little game had 6 people working on and we did a two-level 3D platformer prototype for the Research and Team Dynamics class. In the video, you can see the second level being played by me!
My main contributions to this project were the character controller and the camera, I know the camera looks bad, I’m sorry.
And this is the result of the “Make a Jump” assignment, I tried copying the exact same feel as Super Mario Bros 3 and added a few of my own touches! So it has a similar feel but not quite the exact same.
I learned a lot by reverse engineering a game, I made many improvements on my previous platformer engine and these changes actually were incorporated in Midnight Journey.
Top Down Adventure
After the jump assignment, my next task is creating a top-down adventure, I talked to some people who went through this task and read the documentation and realized I could make something very based on Pokémon, which is something that is on my backlog for a long time already.
So I had this idea of dungeon exploring roguelike where the combat is based on Pokemon and I have to do it in 1 month. Sounds like a very sane plan!
One of the nice things of this month is that I had a Summer Break (that lasted a glorious whole week) and I wanted to make a prototype this week. So I got into my backlog of mechanics and found D.S.L.R.
D.S.L.R. is a game where you are a Forensic Photographer and have to investigate murders, the trick is, the pictures you take of the crime scene shows the crime scene at the moment of the crime.
The prototype is just about taking pictures and seeing them on the camera, but hey, it’s something.
So finally we arrive at Midnight Journey, the game I’m really working on as a project, my goal with this one is to be a full platformer game and I’m aiming at about 1 hour of gameplay, just something so I can release. At this point, I really feel like I need to release a platformer commercially.
I will write more in-depth Devlog posts about this one, these are going to be done on Fourth Dimension devlog! But I will link everything here.
I decided to make Midnight Journey very heavy on Wall Jump, you are going to explore a tower and it makes sense to have a lot of verticality.
Here is a quick list of some things I’ve done this month for this project, I won’t be getting into much detail because this post is damn long already!
I’ve created the Pause Menu, which will feature a map of the tower, the menu changes where it appears based on where the character is on the screen, I thought this would be a nice touch. I’m planning to have an animation on the character where they would be looking at a map or something like this.
Created the Main Menu finally! I want the “created by Guilherme de Oliveira” thing on the main menu to make me seem more important lol
Made some Level Design for the initial segment of the game! This would work as a tutorial and aims to teach you how to use the jump effectively.
I’ve added InControl and reworked the Input system for the game;
Reworked the platformer engine, incorporating improvements from Jumpy Jump;
Reworked Wall Jump so now it feels better;
Added a Dialogue System;
Added an Environmental Notes System;
Started writing the notes the player will find on the environment.
Summarizing it all, a lot of things were done this month, there are still some other things that are under NDA and I can’t really be talking about it here, but I feel like I didn’t focus on anything, I’m fine with that at the moment because I’m working on 3 capstones, classes and personal projects, but in 1 month I will have to decide on just 1 capstone and then I believe I will be able to have more quality and not so many quantities.
This month I realized I should start working on a portfolio, I should have a decent portfolio and keep it constantly updated, I also want to do more tech posts on my other blog where I get into code specific stuff and the line of thought of how I developed some features.
This is why I have gifs or videos for everything, I am making some kind of library of media to use on my portfolio.
So next month I want to have:
1 Portfolio Piece: I want to write about the development of platformers games, I’ve worked on 6 platformers mechanics to this day: Secludere, Journey to the Light, happily(never)after, which were game jam games, JumpyJump, which was an assignment and Midnight Journey and Freshman’s Quest, which are games that are under development – I want to write about how I first did it, how iterating on it was important and how the code looks like after all the iteration, it will also have some handful tips on how to make a platformer feel good.
1 Tech Blog Post: For one of the capstones I got to work on a Billiards prototype, and getting the stick rotation around the ball was something that involved some interesting math and code stuff, I want to write a tech post about that.
As I said on my last update, now I’m studying Game Design Master’s at Full Sail and a lot of things are going on here, also last month I said I was going to work on a new platformer game, Midnight Journey.
But before getting into all game related stuff, a paragraph about school.
So at Full Sail, you have what is called a “Capstone Project” which involves you working somewhere in University for the last 8 months of the program, there are 5 capstones in total. 2 works just like a real studio, one focuses on bigger projects and one focuses on smaller and faster projects, one is a research lab for user experience and two are focused on Producer activities.
Before Capstone, you do what is called “shadowing”, where you are not officially working there but you go there and work there, the thing is that I’m shadowing 4 of the studios and almost all of my time is going to them!! I would show things here if it wasn’t NDA related, in fact, 1 doesn’t have an NDA and resulted in a cool portfolio piece for me, I’m going to talk about that.
Yes, I have to make games as homework.
Month 2 class is “Research on Team Dynamics” and, as the name implies, is about working in teams, so, what happens in a team dynamics class on game design masters? you get into a team and make games!
That’s when the first 3D platformer I’ve ever worked on was born.
My team consists of 2 designers, which are designing different levels and doing producer work, 1 3D artist and 2 programmers (I’m one of them!) – I programmed the player controller, it was interesting how much of the 2D Platformers knowledge translated to 3D, I could achieve something I’m happy with on my first try. There are lots to improve, but it is a 3D platformer that at least feels ok.
I will be working on that until the end of the month to get a better feel on the player controller and figure out the camera.
Make a Jump.
One of the capstones gave me a task in order to understand my problem-solving skills and see a little bit of my code. The task? “Make a Jump – Pick a game, and make a jump”.
ME? MAKING A JUMP? I’VE MADE 4 2D PLATFORMERS BACK TO BACK, I WILL MAKE THE BEST JUMP THIS GUY WILL EVER SEE.
That’s what I thought on that day.
But seriously, there were still plenty of things for me to learn on the land of 2D platformers, this time I tried something new: describing the player jump in function of:
height of the peak of the jump;
distance on x-axis to the peak of the jump;
character’s movement speed.
And oh boy, I think I’ve reached the perfect formula for programming 2D platformers. I’ve decided to pick Super Mario Bros 3 and try to get its feel.
The first thing I wanted to do right is the damping, how Mario takes its time to change directions and stop moving, after that, I decided I could use some beautiful 2D art.
At this point, the task of “making a jump” was pretty much complete, but I decided to play some more, I liked the feel and the code so much that maybe I could use it as a Gameplay Programming portfolio piece, maybe I can use the code in the future for a 48h game jam.
So the end result is this:
I’m really proud of this platforming code, to be honest, and it’s Open Source!
Midnight Journey is a platformer with exploration elements.
Rooms that changes.
Explore a tower collecting pieces of a story to know what happened there.
The first thing I wanted to do to get this game up and running was (a) basic platforming, which is already outdated since I’ve started this before the Super Mario Bros 3 reverse engineering, I will rewrite that, and (b) THAT camera transition (you know which one I’m talking about)
After that, the next step I wanted was to get the “Rooms that changes” part of the equation done, I did that based on my level generation for the Mobile Roguelike, which maps individual colors of an image into specific objects to instantiate. But I made a very welcome and important change, it doesn’t instantiate objects anymore, it has a tilemap to work on and it maps color to a tile and fills the tilemap according to the template. And also, I’ve incorporated rule tiles into it.
The last thing I’ve worked on this game was an aesthetic element, I want the player to have a cape, and I want its behavior to be interesting, it should follow the player and really act as a cloth, think something similar to Madeline’s hair in Celeste.
I wanted the cape to have the same effect, but it should be bigger and more visible, so I believe it would be something very interesting to have on this game. I started prototyping possible solutions and this is what I have.
Right now it is just some round sprites that follow the player with an offset and some frames of delay, but I want to use the glorious power of Trigonometry to add an interesting behavior to them and after that, I would make it look like a cape and not just a bunch of balls.
So that was it for this monthly update! Now I have a Windows PC and I can record gifs very easily, which is something I always liked to do. It’s way better than trying to describe things, so expect lots of gifs on every update from now on!
Last update I said I was moving, and yeah, it happened, I thought it was going to take 2 weeks for me to get everything done and make a post about it, but it actually took me (more than) the whole month!
Now I’m living in Winter Park, Florida, about 10 miles from Orlando. The thing is that I am here to take a Masters in Game Design at Full Sail.
My classes had already started actually and I’m really liking the classes and how the school itself works, I believe the students get plenty of opportunities to really work on projects and get a ton of experience!
Anyway, I don’t want this post to be boring talking about all the moving process, buying things, assembling things, getting used to the new place (FLORIDA IS SO HOT!!!), buying a bike and all that juicy stuff. The important is thing that I’m here. I’m back at updates, I’m studying Game Design formally and I’m having plenty of opportunities to improve on it, I’m confident that in a year I will finally be able to join a company in the game industry.
What about the games?!
I was working on a Roguelike for Mobile and I talked about it a lot on the last update, but, honestly I got bored with it and I’m not motivated to keep working on it, so I’m taking a break.
I will start working on a platformer project that I want to finish in around 3 months (hopefully).
This new game is going to be called Midnight Journey – and it is a platformer with explorarion elements (kinda think of it as a Metroidvania without combat), there are going to have rooms that changes and you will have to explore a tower collecting pieces of information/story to find out why are you there and what happened.
I know it may sound a little bit weird but I want to try something very experimental. Hopefully I will have a good amount of it on the next month!
Midnight Journey should be release by 21st August.
Thanks for reading this quick update that was also typed very quickly!
Hey there fellow game developers! Time for another monthly update! I think this month wasn’t productive as others were (considering I’m doing game development full time), because of constantly changing focus between projects and also ’cause I’m taking care of some personal things. I’m moving next Tuesday, so lots of banking stuff, health check up, going out with everyone, those sort of things.
I will talk more about the moving thing on a random update, which should be in about 1 or 2 weeks.
So I will quickly write about my projects and focus on the Mobile Roguelike, as it was the only one I had significant progress on.
Freshman’s Quest – Management Talk
Freshman’s Quest is a platformer pixel art game I’m currently working mainly as a programmer with a local small team, we are currently 9 people.
It’s been around 6 months since we started this project and the focus hugely changed since we first started it. So we really needed to stop development a little bit and get to talk.
When it al started, the goal was mainly for it to be a portfolio project for everyone as it is everyone’s first game, without worrying about finances and competitive advantages on other games, but it changed as we generally got a very good response on twitter about it and there are people on the team able and willing to work 30 to 40 hours each week on the project.
And this is a problem because everyone on the team is on a different context right now, some are only able to work 10hrs/week on it, others can put 40hrs/week and everyone had different expectations and emotional investment on the project. So we have to stop and get everyone on the same page, willing to do the same effort and expecting the same from the project.
And also, changing the focus from a portfolio project to a fully comercial game, we have to answer the question everyone is afraid to answer: “What makes your platformer special? Does the world really need another platformer?” – Which is something not always so easy to do.
This is some boring management/team building talk, but it’s part of game development!
I’ve been doing an Internship on GILP Studio since the beginning of January and it is something that made me learn a lot and have some cool opportunities, such as attending GDC!
After doing some work on one of their games, Upside Down , we started another project that was really interesting for me, even though I complained a bit about these kind of work some months ago on an update.
We started building a more generic library with game services, some kind of service that would make really easy to integrate Achievements, Leaderboards, Analytics, ADS, etc… into any game, the idea was to make it open source or publish it on the Asset Store.
This is interesting because I want to develop more mobile games in the future, and having an easy way to add all of those services will come in handy. But I don’t know if I will keep working on it as last Thursday was my last day there (due to the moving thing). At least I have access to the source code and can keep improving it!
Mobile Roguelike – Adding Content!
Oh boy, this game suffered the last months from identity crisis, but after dropping it on the psychiatrist, it finally founds itself.
By dropping it on the psychiatrist I mean I had to write a 25 page Game Design Document and create a Trello board to effectively keep me organized and find out what this game wants to be.
And what it wants to be is really a Mobile Roguelike with a fair complexity, so I came up with these three core foundations for it:
The Emergence experience: A game being emergent means the game have many verbs and many objects that can interact with different verbs. This means that objects can be interacted in a number of ways and maybe you can act on them with 2 or more verbs, leading to multiple ways for achieving a given objective.
The Lord of the Rings experience: The game will be heavily inspired by Lord of the Rings and aesthetic, that means theme, colors, characters and the overall vibe is very the lord of the rings. It is like a Lord of the Rings Roguelike game, there will also be a lot of aesthetic inspiration from The Crypt of the Necrodancer and, of course, Zelda.
The Interesting/Surprise experience: A very important pillar is that on this mobile roguelike the player should always be taking interesting decisions and they should be frequently surprised by the outcomes of their action. A way to achieve this is by the emergent gameplay and more random components on the game.
This ultimately led me to see the game as a complex interaction between systems and a huge part of it is the turn based system, which has Dynamic Actors, Static Actors, Moving Hazards, Tiles, Hazards, etc… The Turn Based System is something I will be focusing a lot on this game because the game is just a consequence of the complexity the system can handle.
And by having a well programmed system that handles a complex environment I can work on future roguelike games, which is something I would really like to do, specially considering I will have to cut a lot of content and functionalities for the mobile roguelike. Maybe I can even target PC and Console for a future game using this system!
I’m really proud of my mobile roguelike game, it dreams so big! I created 6 enemies and 7 hazards on total and I have 5 more enemies and 1 more hazard on my to do list, which I plan to have finished by the next month.
If you want to see all the enemies and hazards I added, you can see on the Fourth Dimension Devlog (this is a direct link to the post) – With a clear vision, a clear plan on what to do and a time constraint I will probably start having more progress on this game to show on the next updates, and probably the updates are going to be focused solely on this game too!
Last quick update I talked about a new platformer controller I was trying, I just want to post a GIF here on it, I’m really excited that I’ve written my own platformer controller from scratch and I can see a possibility of building my own paltformer engine on Unity.
This is something that I will rarely work on, but it is a side side project I’m really having fun with.
That was it for this Monthly Update! Thanks for reading it, you can reach me on twitter or even on Fourth Dimension’s twitter.
Going to GDC is a hell of experience, but due to the amount of work GILP Studio put on their game for GDC, they took a break for the whole week, so I also had to. Not that this is a bad thing, going to a conference and being exposed to so much new stuff makes your brain produce a lot of dopamine for that time so you kinda feel “down” the days after. The point here is I took a break for a week and I’m writing this post to assimilate everything that happened these two weeks.
Game Developer’s Conference 2019
I arrived in San Francisco on Tuesday, 11am after two long and tiresome São Paulo – Toronto, Toronto – San Francisco flights. GDC was happening already, but my pass didn’t allow me to do much on Tuesday, so I went there just to see how it was, take my badge, get to know the surroundings, etc… I got early to the AirBnb and crashed on bed.
Indie Games at GDC
It’s always interesting to see the Indie Games on these kind of events, I didn’t know a lot of them, but I could spot Return of the Obra Dinn and Minit (picture), but also Wandersong (aaand Drawdog), but there were plenty of other interesting games that I, unfortunately, didn’t have enough time to go through.
I had the opportunity to exchange a few words with Lucas Pope (Papers, Please and Return of the Obra Dinn) and Noel Berry (Celeste) – I like chatting with people so I can see what kind of mindset led them to their work. Lucas Pope, for example, has an approach of using limitations, on Paper, Please you can only interact with the ambient through a Booth and only by analyzing, accepting or denying people entrance to your country. On Return of the Obra Dinn, the only way to get information on story events is by a dead character, and also the huge visual limitation, as the whole game is 1 bit.
With Noel Berry I had more of a technical conversation about different technologies, all in all, I could see he liked rolling his own stuff using XNA(or FNA or MonoGame), which is interesting and totally different from what people are doing nowadays. But it is interesting as it gives more control to the developer and the game overall is lighter, as there isn’t too much engine stuff there.
Unity at GDC
When I arrived into the Unity Booth at GDC, I felt extremely… comfortable?
I’ve been using Unity back-and-forth (having pauses to try using C++ and GameMaker) for about 4 years now and watching almost all of their public presentations, keynotes I happened to like the engine as well as the company behind it.
At the Unity Booth I got a free shirt (yay!) and took a deep look on their Adaptive Performance demo (which runs with Megacity), their new High Definition Render Pipeline demo and a demo with lots of the new 2D tools they are working on or improving.
There was also a Mobile section with a game really similar to Clash Royale (I think the name was Unity Roylale) that used pretty much all of the new Unity stuff into a mobile game, it was said the project will be going public in a few months (you heard here first).
There was also a showcase of their new Multiplayer architecture (which is a Unity + Google thing), it was on Unity Royale but it was also on Google’s Booth. Awkward Story. I saw it first on Google Booth and got really interested so I spent like 10 minutes talking with the person there (I think her name was Karen) and at some point I asked with which version this feature would come out and… proceeded to explain the release system Unity does. I have no idea why I started doing that as I’m not the kind of person that explains stuff out of nowhere. While doing that my brain just went like “Dude, you are talking with someone that WORKS at Unity Technologies”, so I just cut the explanation really short and simplified, said sorry and asked if it was correct. Apparently she didn’t care much and explained how the release was going to be.
But when I remember I did that I still feel like facepalming myself to death.
We need to talk about Unreal and Epic Games
Unreal Engine won, hands down, my award for “Best Booth” and everyone’s else too probably. Before GDC even begin people were like: “Epic Games won billions with Fortnite, they are going to throw money away at GDC”. And, oh boy, they were correct: Free beer, cookies, soda, t-shirts, bottles, socks, huuuuge booth and they also gave money to some of their games have their own t-shirts.
I’ve never extensively used Unreal Engine before but being there made me want to (unfortunately, I probably won’t) and I could play a little bit of two amazing games: Morphies Law and Kine.
But besides these indie games, not much attracted me on Unreal’s Booth because I’m not an user, which was just expected. Free bear, soda and cookies were great though, thanks Epic Games, keep it going!
On the last day of GDC, rumor were that they were giving extra t-shirts (it was said that it was one per person, so I got one on the first day) so I went there and was like “Hey… I would like a M or L please” and the woman working there came back with 4 t-shirts, and I was like… “Okay…. Thanks!”
At the end I ended up with the image on the right where I got 8 t-shirts from Fortnite, Unreal Engine and games made on Unreal.
Of course I can’t forget to talk about Areia.
Areia is the game GILP Studio (the studio I’m working on) is currently developing, although I’m not actively working on it, it was a huge GDC for them!
From what I could see, Areia’s got a lot of attention on the GDC Play section, which features games from smaller studios, studios that usually don’t even have enough budget to attend GDC by themselves. Which is great since they are working for Publishers and funding to keep working on the game.
And also it is because of Areia and GILP Studio I could be at GDC and meet a lot of awesome people from Guildhall and RIT! At one point I was playing Mowin’ & Throwin’, a 4 player party game, with Marcelo (the Designer on GILP) against two of the developers of the game, which also studied at Guildhall with Marcelo.
San Francisco is great I want to live there. That’s the takeaway from the city. I could go to Chipotle (something I love from the bottom of my heart, please come to Brazil!) and try different Korean restaurants. At one night we went to an Indian Restaurant with some people from RIT (where the programmer from GILP Studio did his Master’s), and damn it was great.
On the other day we went to a Korean Restaurant, on Chinatown, for a lunch with people from Guildhall (where the Designer from GILP Studio did his Master’s) and there I was, when I realized two of them worked on Ark and we discussed a lot of points around the development of Ark and somehow the conversation ended up in Politics.
Although not much happened, it had an impact on me and I took one week to think about life in general, and here are my conclusions.
I decided to focus on using Unity engine. Recently, I’ve been looking into Godot, GameMaker, C++ engines and MonoGame thinking on a path I could go in the future in case something happened with Unity. But I decided to focus on Unity and take the risk of it going into a bad path, worst case scenario, I just have to learn a new tool, which wouldn’t take that much time.
I gave some thought on the limitation’s approach I talked about and I will try to use it more on my design approach.
I realized, for once and for all, that Brazil is not a good place to be in case you want to be a game developer. I already knew that and I’m on my away of getting something to go abroad, but, there’s always the thought of “Maybe things could go well here”, but this time, I really think things can’t go well here.
The Next Week
When I take a “break” I like coming up with prototypes and programming things just out of curiosity. So I programmed my own platformer controller in Unity from scratch, which was nice because I could get the base class (which handles movement) working with 284 lines, way less than I expected.
The Player Controller currently has 199 lines and I have a character moving around, jumping and wall jumping satisfactorily.
Here is the story of how I started my Fifth Platformer back to back! This is actually a prototype for something I might work later this year.
And the reason I created this prototype is I wanted to test a new way to set gravity and control better the jumping.
Here’s my variables.
This is the best platformer controller I’ve programmed and, as you can see, the key is defining gravity as a function of jump height and time! (Don’t tell Isaac Newton).
Anyway, this was just a random mid month update post talking about GDC, so I wouldn’t have to approach these topics on the Monthly Update.
Another month went by and let’s start talking about what happened and what is happening… I’m kind of in a hurry (It’s 2:17am right now and I have to be on the airport 8am, so…) and I will try to be faster and funnier, but I always say that!
Last update I talked more about my Internship and what I was doing, after a lot of tools and systems programming, I finally was able to port the game to iOS, yay! Right? Well, no. Setting the game on iTunes Connect was kind of a pain but I eventually managed to do it and launch to Beta, I was able to test it on an iPhone and on an iPad, yay! Right?
Well, no. For some reason the In App Purchase prices wasn’t showing and I just couldn’t figure out why. After researching I found out the answer was on my face all along. On iTunes Connect there was a big message like “YOU NEED TO UPDATE YOUR CONTRACT! OR ELSE YOU CAN’T SELL GAMES OR HAVE IN APP PURCHASES” – this made me feel dumb.
So, after updating all the dependencies, creating an achievements system and going through all the trouble of resizing screenshots, I have to… wait… until bureaucracy happen. Oh well.
So we had a talk there basically about what we (the interns) would like to focus on and do, we decided to focus on our project related to University (Freshman’s Quest) and think something else after GDC. And after a little bit of thought, I realized what I would like to focus on and I’ll try work on at least one of them on the internship. I would like to focus on (i) Learning Entity Component System (ECS), (ii) Definitively get into music composition for games (I just bought a MIDI Controller that comes with Ableton Live, yay! Right? Well, yes!) and (iii) just make games.
So last month I announced (finally!) this project I’ve been working on for some time, this month development just kept going, what I have to do right now is mainly assist designers and artists on getting their work done, as a big part of the programming is done (I did the character controller, menus and dialogue system).
(Spoiler Alert) As I’m going to GDC, we talked with our partners at GILP and they recommended us to at least have a build or something to talk about our game, so we put up a weird build for Android devices, put it on a tablet they had and connected an Xbox One controller to the tablet. That’s how are going to showcase our game at GDC.
But showcasing this game is not my main purpose there, I will just ask someone to play if the opportunity come as I’m talking with them. My purpose there is mainly getting my feet wet and maybe meeting people that I can contact for a job after my Masters (this might be another spoiler)
I will just leave up with a gif from this game on Twitter!
I actually managed to put a lot of work on this game, but I don’t know if it’s enough for me to talk more about it here because I mainly have to work on the progression and room design here. You can play an early build here.
Here’s a quick bullet list of some things that I added:
Refactored the Level Generation System into its own thing.
A lot of code reorganization and optimization
Create a Hazard, which is a tile that deals damage when active.
Divided all my Actors into DynamicActors and StaticActors (more code reorganization, but this time on the Turn Based System).
Create a nice Camera Shake effect (I should create a post on my tech blog about this one)
Added music and SFX (that I got from Crypt of the Necrodancer)
Added User Interface and the options to Start and Pause the Game.
Added Particle instantiation on the dynamic actors and items.
The Level Generation System now, when generating prefabs, can have chances or each possible prefab to generate on a tile, having tiles that will spawn more often on the same color.
Added Falling Ground (disappears after activated) and Ice Ground (force the actor the repeat the last turn’s movement).
Finally created the Mobile Input (and it feels good!)
Added feedback texts (text pops up for damage and rewards).
Woof. That’s a lot of stuff, but none of it really matters without a good progression and room design, so I’m planning to work on that for this next month and put on a Beta release on Play Store.
Next month I will also have to worry with art, aesthetics and music.
The Customizable Dungeon Generator
I said that one of my goals was to create an asset this year and I said that I made the level generation system on Mobile Roguelike its own thing, right? So, yeah, ‘its own thing’ means that it works like an asset on my project.
I published the Customizable Dungeon Generator about a week ago and I had astonishing 0 sells! The worst thing is that I have no idea on how to promote it and whether the approach to assets is just publishing and waiting for the store to do its job.
I linked the asset store page with google analytics, I had a total of 60 active users (29 from Japan) and an average Session Duration of … (dramatic pause) 3 seconds!
I know that this asset solves a very specific problem but I think it’s a valuable and well done solution, I have to research on how to go about promoting and improving it!
So… I’m going to GDC this year, and that’s nice. The studio where I’m an intern consists of 4 people and they have a partnership with the Brazilian Government where they get 8 tickets, I asked and they accepted to give one to me and the other intern!
“The one who asks, eventually gets to Rome.” – Badly translated Portuguese proverb saying that people who “has mouth” (i.e. is not afraid of asking/speaking) gets to Rome, I have no idea why this proverb exists around Rome. But the idea suits here.
Not having to pay those $350 makes it easier as sharing rooms makes the trip more accessible.
I want to be there mainly to talk to people, see how it’s like, maybe talk to developers that I enjoyed their games?! I heart the creators of Celeste are going to be there, that would cool. Vlambeer, Thomas Brush, Butterscotch Shenanigans, all of those I’m interested in exchanging words. And also all the industry people, like people from Blizzard and Naughty Dog maybe where I can ask for a job as a joke that is not really a joke. People from Unity, Nintendo, etc…
I just realized I’m paying to go to another country to talk to people. That’s… weird? and interesting. Anyway, there it is!
I typed a lot again and won’t have time to proofread and correct everything, so sorry if anything is rushed or with some mistakes! Se y’all next month where I will talk about how GDC was and about the Masters thing, which should change how this blog goes.
As I started to type from an AirBnb room in Sao Paulo, I realized this will be a really, really long update. Lots of things to talk about and some tech details I want to get into. I will try to point what I’m going to talk about on each section of this update, so feel free to read the points you would like.
Where I was last month?
A month seems like a big measure of time, to the point I feel the need to read my last update and remember where I was back then
I took a break from some projects (I didn’t even remember that!)
Made Cult Cultivation for another Weekly Game Jam – Said that I was coding an Idle Framework that I wanted to sell on the Unity Asset Store.
Released an Update for Pizza Clicker (V3.7) and said I was going to get back to it in February.
Said I was working on a new mobile game, temporarily named Mobile Dreamlands.
Announced I started an Internship on a local game dev company
Said I liked to work on Udemy courses
Cult Cultivation, the Idle Game Framework and Pizza Clicker
Yup, I’m grouping all the idle ones in a single topic.
Being very straight to the point here, I’m at that point where someone gets a lot of things to do and can’t handle everything. My original plans was to finish the Idle Framework before the end of February, which I didn’t, so I had to put this on hold.
Also, it’s already February 15th and I haven’t even touched Pizza Clicker V4.
About the Internship
Talking a little more about the Internship, it is on a company called Gilp Studios and I’m working on a game called Upside Down.
The project was originally on Unity 2017.1, we tried to upgrade for the 2018.3 version, everything was broken. Then we tried 2018.2. Everything was broken. Then we settled for 2017.4 LTS and it worked out well. Important Note: The game used to run on 30fps (not locked) and, just by upgrading the version, it runs on ~40fps, which is a good margin and should result in not having frame drops on the live version if we lock on 30fps, which is the default for Android Devices.
Me and the other intern made some things like developing a Colorblindness Mode, which was really well received since the game relies so much on colors. We had to also integrate that into the Localization Module, which was interesting because I had not ever seen how localization worked before. Another thing we made was some Interface Improvement, for example, changing some texts, recompile the Chinese Font to have the Colorblindness Mode in Chinese, adding some juicing on the UI buttons and fixing a transition on the music when you lost the game.
The music on the game was made using FMOD, I had never tried FMOD before, and boy, if you know how regret feels you know how I feel. It is so simple to work with and to integrate with the game to the point you have Dynamic Music very easily. I fell in love with FMOD and want to use it on every project now. In the end the transitions were just some minor transition timing thing, the lesson is that I love FMOD.
After all that I started working on the iOS Port, which is something I always wanted to try and, guess what, every dependency had broken while porting to iOS, I had to upgrade Google Play Games Services from 0.9.39 to 0.9.60, upgrade Firebase Version and Google AdMob version. After doing all that and refactoring some code (thanks #if macros) I finally got it to work on iOS.
After some more refactoring and code writing I managed to integrate Game Services on the game and add a Leaderboard, the remaining tasks would be doing the Achievements and IAP on iOS.
If you plan to release mobiles games, this paragraph is important. I’m currently stuck on the Achievements thing. The thing is that the way achievements works on Google Play and Apple Game Center are different. Google Play Games have three kind of achievements (Locked/Unlocked, Steps, Percentages) whereas Apple Game Center only deals with percentages, and when an achievement reaches 100% it is automatically completed and awarded (which does not happen on Google Play Games). So, how to effectively work with Achievements on Google Play and App Store? The answer is pretty simple! You build your own Achievement System and create interfaces to get percentages for ALL OF THEM, this way you can also display the achievements with your own UI, but that’s not the point. The point is to have your own small achievement system and have interfaces to send their data to Google Play and App Store. It’s really not that complex but needs to be planned ahead.
Anyway, back to what I was doing, Upside Down was originally only for Android, so there’s no underlying achievement system and all the code relies on Google Play. What I’ve done? Nothing. The story reached the present moment. I’m thinking on building an achievement system mirroring the Google Play Achievements and use them for the iOS Version.
These stories are not the most exciting, in fact, as someone who aims to be a Gameplay Programmer, they are pretty boring, but integrating with the stores, having achievements, leaderboards, having analytics with firebase, handling all dependencies and project version are very important tasks, it is that final 5% that gets the attention to your game. These are not really my cup of tea but doing them makes me value the ones who does them (I’m having flashbacks about my last job as a QA right now)
This was not even the longest part of the update.
Announcing Freshman’s Quest
Freshman’s Quest is a pixel platformer take that places on an university/fantasy mixed universe! Follow us on Twitter!
Some months ago I talked about a game development club I was a part of at the University, after a year messing with a lot of different things we started a real project, recently we decided to go public and start to gain some visibility to a project, the next goal is to have 2 polished levels and release a demo.
Here’s and old gameplay footage (the level design and level art are pretty much all different now);
It is a platformer, as simple as it can get. Our team currently consists of 1 Designer, 3 Programmers (which some of them sometimes dabble in art and design), 2 artists (which one of them also do Level Design) and a musician. The inspirations are, obviously, Celeste, Mario, Shovel Knight, Owlboy, Hollow Knight and all the recent games with some kind of platforming action.
The goal is to have a polished finished product and sell it on itch.io or Steam, if possible. The price would no more than $5. As we run to finish and polish the game, now we have to build a website, presskits, trailers, and all those things.
But it is a project that I’m proud of and teached me A LOT on working with groups, something that is really valuable. I’m thinking of setting its own Development Blog and creating a post explaining more about the project, if I don’t do that, I will post on Fourth Dimension Studio Devlog.
Mobile Dreamlands (temporary name) is some sort of mobile turn based roguelike game, the objective is to kill monsters, collect gold and go further down the dungeon. Your “success” is going to be measured by how far on Y axis you go and by how much monsters you kill. The amount of monsters you kill influences the amount of gold your earn.
I wanted to finish this game by the end of February and then work on a PC Roguelike game, which would be Dreamlands, but I ended up liking this project so much that I think I will stick with it until the end of April.
A basic core gameplay loop is done, I still have to polish and add content to it, but the 80% is done there. When I say I want to stick with it for a couple more months I’m saying I want to make it a REAL mobile game. I want to have it on Android and iOS, I want to have leaderboards, achievements, integration with Google Play Games and Apple’s Game Center, I want it to have monetization, but not in an intrusive way (which I hate about mobile games) and I’m even reasoning about searching for publishers, trying something with Gilp would be a good fit as I could make a more friendly contract.
I know that a roguelike mobile game seems a little bit weird but this project could really reflect some of my values on gameplay, how much fun it could give, how it could be a “real game” (i.e. not a casual money grab) on mobile, using ADS and IAP but not in a way that makes your experience worse if you don’t want to watch/spend. On a more personal level, I love turn based games and I’m thinking on having the aesthetics resembling Lord of the Rings, which is also something I love.
Talking about the art, I’m going to have a partnership for the art on Mobile Dreamlands! It is one of the artists from the game above (Freshman’s Quest), her name is Barbara Franco and she has an art studio in my city, called Hovel 102.
About the Monetization, what I’m thinking is pretty straightforward, about watching advertisement, it could give a second chance after watching, giving a temporary buff or maybe doubling the amount of gold in a run. Other than that, the gold is going to be persistent and you can maybe buy temporary buffs (i.e. having 2x gold for a run, 2x damage for a run, 2 turns for a run, more life, etc…), with that, having the option to buy gold with real money is also a thing.
Still on the Monetization topic, I’m thinking on having some sort of “DLCs” – For example, you can pay for $1 a new land with new enemies, new traps, new styles of design, different art, new music, etc…
Another idea is to have an In Game Shop, and my idea with this one (besides the buffs) is to have many different playable characters that can be unlocked with gold. I could make every character have a particular trait (more life, two movements per turn, more damage, etc…), but this is something I’m still thinking about, the real plan with the unlockable characters is to have aesthetically different playable characters, such as elves, dwarves, aliens (??) and maybe I can try the idea of having characters of different color, race and gender to add a little bit of representation on the game.
By working on this game for more time, I could also try to create some music for it, which is something I’ve been studying on the side and really enjoying.
I want to get technical about Mobile Dreamlands. It has basically two big systems: a level generation system and a turn based system. As I stated previously, one of my goals was to have an asset published in 2019, and the Level Generation System is a possible candidate, so I made some extra effort to have something good and reusable.
The Level Generation System
The Level Generation System is composed simply by three scripts: the Room, the RoomInstance and the LevelManager, besides that, there are three ScriptableObjects, the ColorToGameObject, RoomTypeToInstance and RoomGenerationMapping.
Room: It’s the abstract representation of a 9×17 grid, what is important is that it has a type, some examples of types is Start, Easy, Reward, Rest, Medium, Hard, …
RoomInstance: It’s the representation of a room on the Scene, it has a template and a ColorToGameObject – The way it works is that it receives a template, a template is a 9×17 image where each pixel represents a tile (I do them on Photoshop), then the RoomInstance iterates through this image and for each pixel, it gets its color, searches the color on the ColorToGameObject and instantiates the equivalent GameObject for that color, if there’s more than one GameObject, it chooses a random one.
Here’s an example of a template, the way it is configured, every black instantiates a random ground Prefab, the red points instantiates a random enemy and the yellow instantiates a “border”.
LevelManager: The LevelManager is the Big Boss. It has a RoomTypeToInstance and a RoomGenerationMapping – The RoomGenerationMapping is a ScriptableObject that maps a single room into an array of rooms.
When the level is initialized, it just adds a Start Room to the list, after that it searches on the RoomGenerationMapping for the mappings that starts on the Start Room, let’s pretend it adds an Easy Room and a Reward Room, the next step would be searching on the mappings for one that maps a Reward Room on something else.
I do this on the initialization until I have 5 rooms (totally arbitrary number), after that I do the same but on runtime while player progresses.
Having the Rooms List, the Level Manager has to create their Instances, it uses the RoomTypeToInstance to do that – which is a Scriptable Object that matches a room type to a prefab of a room Instance.
I liked the way this system turned out because I can add new rooms, new mappings, add more content simply by creating more ScriptableObjects, without having to hard code the logic. Even someone who doesn’t understand programming could use, although a Level Generation System would totally be aimed for programmers.
Smart pieces of code I couldn’t live without
As you could see, I’ve used a lot of Scriptable Objects lately, it happens that I learned how to use them better recently and I added them everywhere I could on this project. Scriptable Objects are really good for configurations.
Something I’ve been using a lot recently is Linq, a Query/Set Library which helps a lot, all these matches I talked about I’ve made using Linq, but the real smart boy I did this month, the month’s MVP is the RandomOrDefault():
I’ve had this idea when using Linq, the idea is simple, it returns a Random element from an array or a list, the beauty of this code is that it works for both data structures. If the list/array is empty, returns the default for that type.
Anyway, I’ve been writing for more than 2 hours straight. I’ll finish this update here! It was a long long one because I had a lot to report and a lot I wanted to talk about, but hopefully some of the things are useful!