Wins & Fails of Q4 2017

My first visit to India with Aneesha

At the beginning of 2017 I decided to set some goals for myself. Instead of setting yearly goals I did it for every quarter of the year. Yearly goals are easy to forget as you don’t review them often. So for the past year I’ve been doing quarterly reviews, and this is the last one. You can check the previous ones here(1st), here(2nd) and here(3rd).

My idea was to write this a few weeks ago but Christmas got in the middle. I’m (finally) starting to get out of the food coma that comes with the combination Christmas + going back home, so let’s have a look to the last quarter of 2017:

  • Keep learning web development stuff: I’m actually quite happy with this. I’ve been learning a lot of Javascript lately. More importantly, I’m happier with the way I write JS code now. There’s still a lot to learn, but I’m on the right path. Win
  • Improve my exercise routine: It’ll be great to be able to do exercise for a few weeks without getting injured or sick, but I haven’t been very lucky on that front so far. If we forget about that, I think I’ve done some improvements. Now I’m playing football once a week with a group of guys in Al Quoz and I’m still doing Yoga. I’ve gone with Aneesha to a couple of extra classes, including a Muay Thai class that was both difficult and fascinating. Win but I can do better
  • Keep improving on time management: I fricking suck at this. It has been probably my worst quarter of the year on this matter. Fail
  • Do some creative work: I have actually done some. Didn’t know what I was gonna do when I put this on my list and it turned out that I wrote a short story. Well, part of it. Anyway, it was cool to do that. I might or might not publish it on the blog in the future, if I finish it. But the point was to do something different, even if it was only for a few hours and I did it. Win

As you can see, I’m not setting goals for Q1 2018. I haven’t decided if I’m gonna do it this year. I could do it, but I’m going to need some time to think about what I want for this 2018. Anyway, I hope all of you have accomplished whatever you wanted this past year And I hope you have a great 2018 too 🙂

P.S. The picture was taken on my first trip to India!

Fe-men-ism: boys do cry

ian-espinosa-223462

Twitter is a great place to be. You can find all kind interesting stuff on the social network. Yesterday I came across a series of tweets by a guy called Matt Haig that I believe it’s an important thing to discuss:

I don’t know the accuracy of the data he talks about in the first tweet, and to be honest, I don’t care. I don’t think that’s the point. We tend to keep an idea of men and women that are not a representation of reality. You can’t group people by their sex and just tag them as strong or weak. That’s not how it works.

I’m pretty sure that being a man, and from Spain, some people might tend to think I’m some kind of Spanish macho that runs in front of bulls or some nonsense like that. But it takes 5 minutes of talking to me to see I’m not like that. In fact I’m a sensitive and emotional person, I’m scared of a bunch of things and I’ve experience some of the issues described above, like anxiety and depression.

As this Matt guy says, it’s okay to cry or being scared being a man. As it is ok to be the bravest or the strongest of the group being a woman. Don’t let anyone tell you how you should be.

P.s. Obviously that title is too much word play for me, thank you Aneesha for helping me all the time with my blog 🙂

Photo by Ian Espinosa on Unsplash

The one-man development team

It’s a bit weird when you are your company’s whole development team. We’re used to work in groups and collaborate with others. It can be pretty stressful, specially if what you develop is the software that the whole company uses to do their work.

That’s been my case for the last 4 and a half years. Most of the time it’s been fine, but it has had its little drama here and there. I still remember when I had to look for a laptop in the middle of the night while on holiday in Thailand to solve an issue that was too urgent to ignore.

With all these years of experience, I believe that there are a few things that you can do to deal with it without going crazy in the process:

  1. Understand that you are the only one doing this. We all want to take our time to do our job, we don’t like to be interrupted, and we don’t like to change tasks continuously. But in this kind of job, that’s a luxury that you can’t afford all the time. There will be times when you need to solve an issue, bug or maybe change your priorities. That’s how it is, but you should also…
  2. Mark your territory. This is very important. Software development is your thing, you are who knows about it. You have to be able to tell people that they’re wrong. It doesn’t matter if the one who is wrong is your boss. You’re the expert and you have the last word.
  3. Learn to say no. This apply to life in general, but it is extremely important on this case. I’ve learnt it the hard way. It took me a few years to realize that I’m not Superman (yeah, I’m dumb). Sometimes what you’re asked is just not feasible, and you shouldn’t try to demonstrate anything. This is about getting things done, and done properly. You don’t have to demonstrate anything.
  4. Be aware of your limitations. You don’t know everything. And you’re gonna make mistakes. Probably lots of them. There will be things that you do really well, and other maybe not so much. That happens when you’re asked to do many different things. But don’t get angry, just learn from you’re mistakes and keep going.

I think when you’re in a situation like this, the most important things are not about coding, are about the way you work. This is the best advice I can give. Ah yes, I almost forgot, don’t reinvent the wheel.

P.s main pic is by Simon Abrams

Wins & Fails of Q3 2017, Q4 goals

Francisco & Aneesha trip to Spain

I feel like this 2017 has gone really fast. I can’t believe we’re already at the last quarter of the year. Q3 has been a bit strange, as I had a long holiday (19 days), something I’m not used to. It was a wonderful trip and I wish I could do that more often.

Anyway, regarding my goals for Q3…well, you can see the title. I was aware that this quarter wouldn’t be easy for various reasons, and when I wrote my goals I tried to be less ambitious. It didn’t work. Let’s have a look at the list:

  • Manage my time better: this is probably the only thing I have improved over the last 3 months. I’m more aware of when I’m losing my time procrastinating or surfing the web for no reason. Now I force myself to stop and do something more useful or something that I truly enjoy. It’s an improvement but there’s a lot of margin to get better at this. I can”t say it’s a win, so I’m gonna give it a Meh.
  • Continue working on my Unity project: there are a few reason I haven’t worked on this. I’ve gone through a deep introspective analysis of my life and bla bla bla… I’m gonna stop game development. It’s not like I’m gonna forget about it but I need to put it on hold. I might write about the reasons soon. Anyway, this is a FAIL.
  • Keep my exercise routing going: I didn’t add anything to my routine as I wanted. I’m happy that I keep going for yoga with Aneesha, but it is not enough. On top of that I’ve put some weight back. You lazy bastard. FAIL.
  • Keep learning web development stuff: I did learn some things, but because IS MY FRICKING JOB. I haven’t been proactive, and haven’t done much outside of work. I’m changing that routine now, but I started too late. FAIL.

Ok, so now let’s try to do a list for the 4th quarter. I’m gonna try to be a bit more serious about it and avoid disaster:

  • Keep learning web development stuff: I’m working on it right now. I’m starting with Javascript and taking it seriously. I’m doing Pluralsight courses on the topic, and I plan to dive deep on it. If you have any recommendations of websites or other resources, I’ll be happy to hear about it.
  • Improve my exercise routine: stop being so lazy and do something more than just yoga. This is gonna be difficult, my sofa is giving me eyes.
  • Keep improving on time management: first step is taken. Next goal is to just stop checking social media and my favorite websites so much.
  • Do some creative work: it doesn’t matter what it is. It doesn’t have to be big or complex. But if I’m not gonna be doing the gamedev thing, I want to do something else.

That’s it for me. I hope this last quarter of the year is better than the last one. I’d like to end the year full of energy, as 2018 looks like is gonna be a very important year for me. Salud

The picture is from the trip to Spain that Aneesha and me did on August.

Wins & Fails of Q2 2017, Q3 goals

Here I go again. I made this list last April, and I’m going to go through it to see how I’ve done. This helps me see what I can and can’t do, and also put a little pressure on myself to keep going and not let myself go. So, let’s get to it:

  • Manage my time better: I suck at time management. I think I’ve even gotten worse through the last three months. Not happy at all with this. Big Fail
  • Develop at least one game prototype: have I ever told you that I’m not very smart? Let’s see, I started a new and exciting project. A little puzzle-adventure game that I think looks pretty good so far. But I committed a few mistakes that had led me to not finish it. The first mistake was to do it in Unity. Unity is a wonderful tool but it’s not easy. There’s lots of technical stuff to deal with and, to be honest, I don’t have the time nor the knowledge and patience to deal with it. On top of that, on mid May there was this game jam going on, and I decided to participate. So, to make it clear, while I was struggling with one project I started another one. After that Ramadan came and my brain was already fried so I haven’t done anything in the last month. Silly fail
  • Do a web project with a JS library / PHP framework I’m new to: I haven’t created a full project, but I have experimented with a couple of things. I started the EmberJS tutorial, what made me question the way we do things on this industry. Also made some silly “instastories” mini webapp. That made me learn to use the javascript camera API. I’m gonna be good and give myself a little Win
  • Getting my #*!$ driving license: finally! And I got a car! WIN
    Me and my car
  • Again with the exercise routine: I haven’t been back to the gym on a daily routine, but  I have started a new one with yoga. I go once or twice a week with Aneesha. It’s pretty good and it surely makes my body work way more than running on the treadmill or doing some cycling. I’m half happy with it, but I think i could complement it with some extra gym time. Win (for now)

Now that I’ve gone through my objectives for Q2, I’m going to set some for Q3. To be honest, I don’t want to be ambitious at all this time. I feel like I’m aiming for too much, specially when it comes to develop stuff. I’ve been struggling with doing coding related stuff, as my mind is a bit tired by the time I can really get to work on my side projects. Also I have a really nice, long holiday planned on August so I won’t be able to do anything for 3 weeks. With that said, let’s do the list:

  • Manage my time better: as I said last April, this is more of a general purpose thing. I want to improve. but so far is not going well. Let’s see
  • Continue working on my Unity project: I wish I can say I hope to finish it, but I think is going to be impossible. At least I would like to make good progress and have something that people can try.
  • Keep my exercise routing going: I’m happy with where I am right now. If I can add to it one or two days of some gym stuff that would be awesome.
  • Keep learning web development stuff: a good thing would be to dive deep in ES6, the last javascript specification.

That’s all for today. O’ll come back to this post at the beginning of October. BTW, the main picture is from our holiday in Budapest, wonderful city

Using cannons to kill mosquitoes

Javascript code on a text editor

Believe it or not, my first job after university was as a web designer, working on websites for the department of labor of the Catalan government. Since then, I’ve been a web developer, working for a couple of companies, plus some time as a freelance. Through this years, my profile has become way more technical, as web development has evolved on that direction. Now everything is more ‘serious’.

As part of my ‘journey’, I have to constantly learn new stuff. The last couple of weeks I’ve been doing some tutorials of something called EmberJS. EmberJS is one of the three major modern Javascript libraries/frameworks (the older and the minor of the three), being the other two ReactJS and Angular. For those of you that don’t know what Javascript is, it’s a language that allows developers to add bigger and more complex interactivity to websites. When you click on a link and a popup ‘flies’ from the side while the rest becomes dark – Javascript. Anyway, I decided to have a look at Ember as it is what they use at Unsplash (I think they’re moving to React now…), one of my favorite websites.

The thing is, once I got into it and just having explored the surface, I find difficult to understand why to use Ember on a project. Yes, it’s really cool. Yeah, I know it has lots of features. And yes, the people behind it is way (WAY) smarter than me. I’m not saying is not good, but I think we have lost perspective on web development. Using Ember on an average website to do a couple of things is unnecessary.I’m not saying these libraries are not good. They have amazing features and for complex tasks, they can be very useful. But using one of these on a simple web/e-commerce site doesn’t make sense on 90% of the cases. Is like buying a Ferrari to go around your neighborhood at 40 km/h. You may think you look cool, but is a stupid thing to do.

Good design doesn’t age

Good design - Doom II Hell on Earth

A couple of days ago, I was watching the ending credits of Doom II: Hell on Earth. And while doing that, I couldn’t think of anything else but what a masterpiece I had played.

For those that are not familiar with the game, Doom II is a game released in 1994 by id software, creators of the first person shooter (FPS) genre. The game was a sequel of the highly acclaimed Doom, launched just a year before. The mechanics of the game are quite simple: explore the levels finding keys to open doors that would lead you to the level “exit” while killing anything that moves.

The enormous success of Doom and it’s sequel was due to the technological revolution that they meant for the medium. But now, 23 years later, the games are as good as they were at the time. Obviously the technology is not a factor anymore. There are (literally) hundreds of FPS games, all of them with more possibilities in terms of control and movement.

Why are they still so good? Then answer is on the level design. Every single level on Doom II is an experience. The levels have “something”, that makes you explore every single corner of the map. Look for every enemy to kill. And while doing so, the game innovates constantly, putting you in situations you haven’t been before. I think the last few levels (26th to 30th or so) are absolutely amazing. They’re difficult, frenetic, almost stressful, but you can’t stop playing. You NEED to see what’s after the next corner, door or portal. And that’s simply invaluable.

That’s why Doom II is still relevant almost 25 years after its launch. Good design doesn’t age, a well design product will never be completely obsolete. And this applies to more than just video games. Thanks to my friend Sergi, who is an interior designer, I know that the most famous and well designed chairs, were designed on the first half of the 20th century. And at Ford, they’re still trying to do a modern version of the Mustang that looks as good as the 70’s models.

When you create something, whatever it is, pay attention to the design. That can be the difference between a product easily forgotten and one that lasts forever.

Good fail

adventureJam

For a few weeks, if not months, the idea of participating on a game jam has been in my mind. My friend Jordi has been doing it for a few years now, and I have the feel that it’s been very positive for him. It has helped him develop his abilities as a designer, has boosted his creativity and has helped him to be productive and try lots of different things. For those who don’t know who Jordi is, he is the founder, game designer, writer, lead programmer (and more) at Deconstructeam. And their first commercial game was born on a game jam – Gods Will Be Watching.

So, a couple of weeks ago, I discovered that the Adventure Game Jam was starting. This jam is a two weeks competition where you have to develop an adventure game. It seemed like a good opportunity to me, so I subscribed. The competition ended last Friday and, what can I say? I failed. Big time. I’m not even close to finish the little adventure I started. I didn’t prepare at all for this competition and I had a number of social commitments I couldn’t cancel. Plus, you know, a full time job (and it’s also coding…).

But even failing at it, I have to admit it feels like a good fail. Though I didn’t accomplish what it was intended, I’ve learned a number of things about game development and about myself. I discovered that:

  1. I can be creative under pressure.
  2. My Photoshop skills are better than I thought.
  3. My web development knowledge can be handy in some situations.
  4. Developing tools can be fun.
  5. Working with limitations is a good thing. It keeps you focused and makes you scope the project better (I say this like I finished the project…).

With that in mind, I’ll keep working on this little game for a couple of weeks. I can’t promise I’ll finish on that time. Currently, I’m struggling a bit combining a full time web developer job and game development (and a life :P). But I feel like this few days of “failed” game jam are very valuable. I hope to participate in other competitions in the future and continue learning as much as I did on this.

TCOP Devlog 2: Camera & character control

The Curse of Pargo WIP

Camera and character control are two aspects of games that are closely related. Since the start of third person 3D games, when Sega Saturn and Playstation came to life around 1994, cameras have been a pain for developers. Games like Tomb Raider, Resident Evil, Metal Gear Solid or Super Mario 64 had different approaches that worked on some levels and failed on others. Since then, there has been some advancements on the subject. Resident Evil 4 introduced a new type of camera, closer to the player, that has become an standard for third person shooters (specially thanks to the success of Gears of War). 3D platformers are almost extint, but Nintendo still launches 3D Mario games regularly (thank god) and they have tried different approaches. First, they evolved the camera seen in Super Mario 64. That is, behind the character but keeping some distance and from a higher ground. The other approach they have tried is the one seen on Super Mario 3D Land and, specially, Super Mario 3D World . This camera follows the character, but not from behind the character. They keeping a big distance and height from him, and they only rotate when it makes sense on the context of the level.

My game camera

I’m explaining all this because that last approach is the same I’m following on The Curse of Pargo. I got to this through experimentation. Initially, my intention was to use an isometric view and leave full control of the camera angle to the player. This approach was seen recently in another Nintendo game, Captain Toad Treasure Tracker.

My game has some similarities with Captain Toad’s game, but as soon I implemented it I realized that this camera wouldn’t work. The main reason is that I’m making the game for PC, and rotating the camera with a keyboard sucks and the mouse was out of the picture. Using the free camera was a pain, and as soon as there was any obstacle you were force to rotate a camera that didn’t feel responsive or precise.

 

After failing with the free camera, I decided to go on and try a camera with fixed angles. The camera was still manual, but the player could rotate between the 4 corners of the level. This approach wasn’t bad, but I felt it was limiting me to work on small levels for it to work properly. I’m not going to do huge levels, but I wanted to do something bigger than what you can see on the video over this lines.

Although I wasn’t happy with the result, I thought the idea of the fixed camera angles could still work doing some changes. The first change was to follow and rotate around the character instead of just the level, keeping always the same distance to the player. That allowed me to work with larger levels. To avoid a “mechanic” look of the camera, I decided to give it some delay towards the movement of the character. I also used a Unity function (Transform.lookAt) that allows for an object (the camera) to look to another (the player). This gave the camera a very smooth feel. Combining this smooth movements with the fixed angles/positions worked pretty well but also created an issue with the character control.

Camera based control

As I said at the beginning, camera and player control are closely related on 3D games. In this game I’ve worked with an 8 directions control, depending on the camera. That means that pressing up will always get you away of the camera, down close, etc. That didn’t work that well with the free camera because of the keyboard, but now, with the camera constantly adjusting its position, it was an absolute mess. To avoid this issue I came up with a simple solution. I could take the angle of the camera and find out  which of the fixed positions/angles is currently active. The movement of the player it’s then conditioned by this fixed predefined angle, not the real camera angle. This approach works surprisingly well, and now I feel like the combination of camera and character control are good. The character feels responsive and coherent at all moments, while at the same time the camera system is simple, smooth and works really well.

Right now I’m experimenting with camera triggers. It’s a way of automatize the camera rotation and make it easier for the player. I’m not convinced with this approach 100%, as it’s been seen in a number of games and it always has the same problem: the player doesn’t expect the camera to move and that leads to deaths or annoying situations. I will continue experimenting with it as I create levels for the final game. I believe cameras in games should never get in the middle, so hopefully I’ll make it work.

Below you can have a quick look to the current state of camera and control:

 

Also in case you want to check out the code I leave the player controller and the camera controller.

The Curse of Pargo Devlog 1: defining the basics

Hi there! I’ve been pretty busy for the past few weeks. After finally killing this, I took some time off of development. Coding is what I do for a living, so sometimes is difficult for me to find the inspiration and the will to go back to coding. It’s easier to relax, watch some Netflix or play a game.

But the thing is that, the few weeks I took off I couldn’t stop thinking about what project to start next. I had a few ideas and I finally decided to work on a puzzle game. This time I wanted to do things a bit better than last time> To do so, I created a little document defining the main aspects of the game. Last time I didn’t do anything like this, so I was working without direction. That’s a really bad idea, specially when you have tendency to lose focus easily like me.

The first thing I did was to do a brief description of the game and what I pretend to achieve with it. I came up with this:

Puzzle-adventure game. It takes elements from Captain Toad, Bomberman and Minecraft. Every level is a puzzle that combines different mechanics like breaking blocks, recollecting materials and keys and fight enemies. It’s a slow-pace game focused on combining the different mechanics. The goal on every level is to reach the final treasure chest.

With this on paper I started to describe the controls of the player:

  1. Movement: 8 direction based control, camera based. That means that the directions of the character will be modified with the movement of the camera. The character moving and turning has to be fast, smooth and precise so the player can react quickly to level events. Though the game won’t have much action there will be some enemies, and elements that can kill the player.
  2. Bomb: bombs are not planted on the ground but thrown slightly forward. Could we thrown further if the player leaves the fire button pressed?
  3. Action: activate buttons or push boxes.
  4. Structure: build and place a structure based on a recipe we collected before. Each recipe needs materials.

I also defined different types of objects and interactions that would be seen through out the game:

  1. Bombs: the player can throw them to break blocks or attack enemies.
  2. Destructible blocks: player can throw a bomb next to a block and destroy them with the explosion.
  3. Bounce pads: Sonic-like platforms that impulse the player up in the air.
  4. Collectible objects:
    • Doubloons: like coins in Super Mario or rings in Sonic. Collect 100 to get a life.
    • Keys: colored keys that open specific doors, like in Doom and other games.
    • Construction blocks: every time you break a destructible block you’ll be able to collect a construction block. Use it later to construct structure that help you finish the level.
    • Recipes: recipes will let you construct different structures to solve the puzzles.
  5. Wall and floor buttons: used to activate mobile platforms or open doors.
  6. Boxes: like in a lot of adventure games, you will be able to move boxes to help you reach a part of the level otherwise unreachable or activate floor buttons.
  7. Structures: when the player has acquired a recipe and enough construction blocks, he’ll be able to create structures that help him solve the levels.

Lastly, I wrote some lines regarding tone, setting and visual style:

The game will aim for a relaxed, fun style. The game is not child oriented so there can be swearing and violence. Something along the lines of LucasArts/DoubleFine games.

And:

Very colorful, cartoon-like. I feel something close to Sea of Thieves or Fable Legends characters could work really well. The environment will be pirate-like and probably should use Monkey Island as main inspiration.

As you see, I decided to place the game on a pirate setting. I guess I’ve seen too much Black Sails and too many videos of Sea of Thieves 😛 Anyway, is something I quite like and I thing it’ll fit well with the little story (more like an outline) that I have in mind.

Technology-wise I’m gonna keep working on with Unity. My previous project had a lot of fighting with the engine, but now I feel I know how to solve deal with a lot of things. This time I want to focus more on the design and create a polished gameplay experience, and if I have to start from scratch with another game engine that won’t happen.

Also I’m making the move to Maya LT. This version of the software is aimed to indie devs and, as far as I know, has all the features I might need. On the audio front I’m undecided about what to do. It’s an unexplored area for me, but this time I would like to do something better, make some music, sounds effects, etc. We’ll see how that goes.

On the following weeks I’ll keep talking about the process I’m following with this game. I hope you enjoy this kind of content, let me know what you think!

Note: the main picture is by Glenn Carstens-Peters, see his work here.