Author: hash17devlog

I want to talk about a interesting video that I watched other day that gave me very insightful info about how to design the puzzles for the game. And here’s a little more about the video and what i learned from it:

The video talked about two different parts of our brains: the fast part and the slow part. The fast part is responsible for aswering easy questions quickly; while the slow part is responsible for focusing and thinking about the answer.

This is very important for this game, because I want the commands to be on the fast part, so that the player don’t have to think about typing commands or remembering which command do what; And at the same time I want the player to be focused on the puzzle that they are solving.

Another interesting fact is that the slow part can only work with 4 chunks of information at a any given time. So every puzzle has to have at most 4 elements to it (4 files, 4 person of interest, 4 necessary commands, etc).

I’ll be designing the puzzles and missions of the game keeping all that in mind. I’ll also try to design the game in such a way that the player is being trained without realizing it, so that commands will eventually be on their “muscle memory” but the puzzle they are solving will be on the slow and thinkful part of their brain.

How am I gonna do that?

I’ll build a box with some limitations: every puzzle has to have at most 4 elements to it. So every puzzle will have no more than 4 images, folders, people, passwords, files, etc. I can have more than 4 elements for the whole puzzle, but at most 4 at any given moment.

Another thing I’ll do is make the player repeat the same command lots of times, but not pointlessly. I’ll have to find a way to repeat command in such a way that everytime the player runs them, they are doing so for a reason. So the player always gets a stimulus after running a command and getting so, they are actually being rewarded for that. Simple action-reaction system to imprint in the player’s mind what a command do and how to run them.

I’ll also make everything that it’s crucial to the puzzle really hard to understand. You may think that this is a bad idea, why would i want to make things harder to understand? Well, research shows that when a question is harder to read (because it was hand-written for example), the reader has to pay more attention to it, thus reducing the risk of the fast part of their brain answering the question.

When something is really clear and seems obvious at first sight, the fast part of your brain thinks it knows the answer and gives you what it thinks is right. The problem is that this is almost never accurate. Since this is a game where the player is doing things that they don’t do on their day-to-day life, these automatic answers will be wrong most of the time. I need to make the player think about the problem before answering. And making the problem harder to understand actually makes it easier to solve with less mistakes. And we want to avoid mistakes as much as possible, since they only frustrates the player and makes them feel stupid, which is exactly the opposite of what I am trying to accomplish.

So, just to organize my thoughts:

Make puzzles that have no more than 4 elements at a time. The slow part of the brain can only work with 4 chunks of information at any given moment.

Make important part of puzzles hard to understand so players will have to use the slow part of the brain to solve it.

Make so that the players will have to run the same command multiple times – but always with a clear purpose and result – so that they keep this commands on the muscle memory.

Make commands be processed on the fast part of the brain- so that players don’t have to think about how to execute a program, but rather think about what program to execute.

These are the four points that I’ll build my puzzles upon. I don’t actually know how I’ll apply them, but I’ll find a way to do so.

For the third entry in the dev log, i think i should write about the design and concept behind this game.

Before i go further, i would like to clarify that i am not a designer. I am a programmer. I’m trying my best to become a good designer though.

When i think about design, i think about manipulation. For me, at least to this day, design is the art of manipulating the player into doing – and feeling – the way you want them to.

I want people who play HASH17 to feel like hackers. To feel in control. To feel that behind that terminal, they can do anything and they fear nothing. I also want them to feel like the action they take in the world of the game have an impact. I want to give the player the chance to change the world – at least the game’s world.

In order to accomplish that, i am taking a few things as guide-lines, to put myself into a creative box and focus my feeble creativity:

Everything the player do in the game has to be grounded on reality – every program, device, technology, hacking, everything that the player sees and does – has to be possible in the real life. The player may not know that it’s possible, but the fact that it’s makes it more easy to create something believable.

Every happening in the game is a consequence of a player’s action. Even the first dialog is triggered only after the player types help. The player has the option of delaying the dialog or just refusing it. (In the end the dialog will happen anyway, but the player still feels like they had control over it). The player needs to feel in control of the world. This opens opportunity to create moments that they are not in control, which will create a panic feeling that may be useful for some puzzle/decision.

All the images on the game have to be real photos – not art assets. That’s because i want the player to feel like they are still on the real world. They are not on some game, they are sit behind a computer, typing stuff on the keyboard – much like they do everyday – but at the same time they are in another place. They are at a place where they can change the world, where they can hack into computers, crack encrypted files and do things that they cannot do on real life.

No tutorials. No directions. Drop players into a box and let them explore the box. If they hit a wall, tell them that they hit a wall. Do not turn them to the right direction. They will get there, eventually. This way the player feels like it’s them doing all the work, figuring out how to do something that they never did before. They feel smart. And they are.

The first dialog – and probably all of them – have to be almost surreal. That’s because i want players to feel like something so amazing is happening to them that it’s almost unbelievable. I want them to feel like Neo on the first Matrix. When he is scaping the office and say “Why me? I am nobody.”. And a surreal dialog communicates that feeling. Who doesn’t want to be called and told: “I can give you a chance to change the world?”. And what are the changes of that happening in real life?

Every action the player takes has to be rewarded in some way. I am still figuring this one out.

I read an article on Gamasutra that said “The player is the one supposed to do cool stuff, the NPCs have to watch the player do cool stuff”. And i am taking this very seriously. The player is the one doing the hacking and breaking and all that. The NPC is just watching.

These items above are my design guide line s ofar. They might change in the future. And they might not even work at all. But i am sticking with them so far.

I would also like to do a exercise here and answer some questions found on this article about the development of Deus Ex:

What’s the core idea? Can you describe the core of the game in 2-3 sentences?
You are a hacker choosen to be part of the most notorious and dangerous group of hackers there is. Being part of this group comes with difficult moral decisions and responsibilities, but with the potention to change the world.

Why do this game?
Because i see a lack of story-focused hacking games. Most hacking games are focused on hacking and getting money and game. I want a hacking game that is not about hacking, but rather about the impact your actions have on the world and on people. The hacking is just the tool you use to impact the world.

What are the development challenges?
Time, which i don’t have much. Experience, wich i also don’t have much. And the usual: design, story telling, etc…

How well-suited to games is the idea?
Very, i think. The idea is that your actions and choises shape the world you live in. Games are the only media that the consumer has the ability to choose and do things that change the flow of the experience.

What’s the player fantasy? (If the fantasy and goals aren’t there, it’s probably a bad idea)
The player fantasy is to be a powerful hacker. To be someone that can do anything as long as they have a computer (a common object in most places). To feel like they can change the world. (Who doesn’t want to change the world?).

What does the player do? (What are the “verbs” of the game?)
Hack. Kill. Sabotage. Talk. Save. Discover. Choose.

Has anyone done this before?
There’s a few hacking games out there. But none of them is a totaly text-based, story driven game.

What’s the one new thing? (“You can always find one thing that hasn’t been done before [in games], even if you’re making a My Little Pony game.”)
Meshup between story/choise-driven gameplay and hacking gameplay.

Do you have something to say? (“In Deus Ex I wanted to explore all sorts of big issues,” said Spector. “And I wanted players to explore those things in ways that only games could do.”)
I want to say that anyone can change the world – if they have the opportunity do so.

Just to finish: i want to say that i have no idea of what i am doing. I never designed a comercial game before, so all i said here might just be garbage. So, please, if you’re reading this and know something i don’t know, disagrees with me or wants to say i am right, please do so through comment or contact me on the contact page.

Hello, Matheus here. For the second entry on the dev log i’m going to talk about the tech and approuch i’ve been taken on the development so far. Hope you enjoy and take something out of this long, but hopefully, worthy reading.

Since this is a dev log, i figure i would put something about the technology used to build the game.

The tech

I am currently using Unity 5.5.1f and Visual Studio 2013 Community Edition. My language of choise is C#.

I started using SVN because i heard it handles binary files better than Git, but i end up going back to Git because merging in SVN seems a bit more complicated, at least for me. And this project won’t have huge ammounts of binary files anyway. I’m hosting on Microsoft’s Visual Studio thing that i don’t know the name.

I’m also using Trello as a task tracker and Yodiz as a bug tracker.

I wasn’t going to use Unity for this game at first. I considered using SFML (C++), libGDX (Java) and Mono (C#). I end up using Unity because of NGUI. This game has a lot of images, text, a window system, and more GUI-releated stuff, so the GUI system has to be powerful, simple and complete. And there’s no better GUI system (that i know of) than NGUI.

The philosophy

In this project i used a different approch to the way i handle some things code-wise. In my day job we also use Unity with C#. And we use a lot of OOP (object oriented programming). And that works fine for the most part, but it gets complicated to handle very big projects with lots and lots of inheritance and method overriding.

That’s because in OOP we tend to use inheritance excessively and that’s no good. No good for performance, for maintainability, for clarity. For nothing. Or at least that’s what i heard the important people saying.

I had never actually thought about inheritance and OOP in that way. I had never actually noticed all these problems – because i knew no different.

With this game, since it’s just me building it – programming, designing and all – i realized that i could do whatever i wanted to do. So i decided that i would go with a more procedural approach. I would also try to be as data-oriented as possible, but that’s not so easy when you’re using a garbage collected language like C# (because you don’t have total control over the memory – yes, i know you can use pointers in C#, but if i were to use pointers in C# i would go to C++).

So for every system in the game (the terminal, windows, file system, programs, devices, etc), i have the entity class (Terminal.cs, File.cs, Folder.cs, Program.cs, etc) and a utility class (FileSystemUtil.cs, TerminalUtil.cs, etc).

The entity class have no inheritance whatsoever – except for very few MonoBehavious (the Unity class that we need to inhert from in order to attach code to GameObjects). The entity classes have almost no behavious as well. It’s all centralized on the utility classes.

So, if i want to find the a file path, insted of doing file.GetPath(), i will go FileSystemUtil.GetFilePath(file). This may seem more complicated than the OOP approach, but it’s acctually a lot simpler to maintain and to change. Because if i want a certain type of file (like image files, for example) to have its path handled differently, i would just call FileSystemUtil.GetImageFilePath(file). If i were on the OOP approach, i would have to put an if inside the GetPath method to make this work – or even worse: override the method on the ImageFile class. When you have overrides, you just make debugging and bug tracking much more difficult than already is.

This is a completelly different approach than the previous prototype of the game – if you don’t know what i am talking about, see __init__ . In the first prototype i did all OOP. And it was just a mess. Maybe i am just too dumb and can’t write good code, but nevertheless, this new approach is working much better.

If you have worked with Unity before you may be wondering: if you don’t have inheritance, how do you talk with Unity, handles specific properties and stuff like that.

Let me use the Program class to aswer that question. Every program has a very different set of funcionallity and properties. In order to maintain the Program entity without inheritance, what i do is create additional classes that have these specific properties. So, for example, the Open program (the program that opens files on the game) needs to know two prefabs. But the OpenRunner (the class that actually runs the behavious of the Open program) has no base class, nor is a MonoBehaviour, so how did i manage to get the reference for these two prefabs?

I created an OpenAdicionalData class that is a ScriptableObject (the class that we inhert from in order to create assets in Unity) and put the prefab references in there. So when the OpenRunner needs those prefabs, it goes to the GameplayReferenceHolder – the class that has references to these aditional classes – and find the references. Simple as that. Much cleaner and simpler than inheriting from a Program class and adding additional properties to it. That’s simpler because it’s very modular, i can add or remove properties from the OpenAditionalData without affecting the whole game. Without messing my ProgramList serialization. Without having to write a custom inspector for the Open program and, best of all, avoiding inheritance.

You now maybe asking yourself why do i want to avoid inheritance so much. That’s because when you have inheritance, your objects have multiple sizes, have different properties, different virtual tables, may or may not override base methods, etc. So the compiler has to do a lot more work figuring out casting, dynamic dispatch, and a lot of other issues.

And this is not even considering the mess of debugging derived methods, problems with stack traces with no useful data and so on.

And, specifically for working with Unity: Unity do NOT serialize inheritance for non-UnityEngine.Object classes. So you either inherts from ScriptableObject/MonoBehaviours or you don’t serialize child classes.

Another point that i want to explain is how do i call the programs behavious if they do NOT inhert from Program.

If the player types in “open file.txt” what i do is i first interpret this command, take out the “open” (the name of the program) and “file.txt” (the parameter). After i have that, i will iterate though my list of available programs matching the name of the program with the name in the element of the array.

Once i have the program entity that represents which program the player wants to run, i just do a switch-case using the ProgramType enum (that has all possible program types – Open, Cd, Cypher, Clear, etc) and call the respective runner (the actual behaviour of the program):

Hello. My name is Matheus, i am a brazillian game developper by day and a indie game developper by night and weekends. Games is all i do.

I am currently the only person working on the HASH17. But i’ll probably find someone to do artwork for the game.

The first idea for the game came to me on setember of 2016. On november i built a prototype. I left alone for a few weeks and this past month i rebuilt the game from scratch.

And now i am setting this dev log to register and share the development of this game with whoever wants to know about. Thank you for being here. Here’s the my first entry on here:

This is the first of, hopefully, many logs about the development of the HASH17.

Today i uploaded the first decent build of the game to GameJolt and Itch.

so that i can collect feedback and criticism and try to build a better game.

I have no idea how am i gonna pull this off, since this would be my first comercial release from A to Z. I have been making games for about 2-3 years now but never something like what i want HASH17 to be.

I will be working on the game on weekends and evenings. I am setting up milestones for every first wednesday of every month – which is when Spin (a game dev gattering in São Paulo) happens – but hopefully i’ll be able to update this dev log – and the game – every two weeks.

About the game:

HASH17 is a text-based puzzle game with a rich story. At least that’s what i am aiming at.

I love the hacking/cyberpunk culture and want to create something about it. Since i am a very good programmer, create a hacking game was the easyest – and most fun – path to take.

I first built a very bad prototype of what i wanted to do and didn’t thought it was any good, so i left it alone for a few weeks. That’s when Allan, a friend and coworker at FireHorse Studios, won a grant to build his game. Knowing that he had won and considering we always talked about making games on our free time (on top of being full time game developpers), i was inspired to start a new game.

That’s when i remembered i already had a idea that i liked with a prototype that i didn’t like, so i decided i would show the prototype to Allan and see what he thought about the game.He actually liked it. So i sent to a few more friends and they all seemed to like it. They had a lot of criticism of course, but the important thing was that they thought the game had potencial.That was probably around november/dezember of 2016.

I kept the idea of actually making this game for a few weeks untill i decided that i would give it a try.So i rebuilt the prototype from scratch. This new prototype – which is now actually the first mission of the game – is what i uploaded to itch and gamejolt today. I hope people play it and give me feedback and criticism so that i can improve the game and myself.

I really want people to be honest about their thoughts on the game, even if they hate it.It’s only when other people play your game that you know if it’s any good. Because we’re just too involved in our projects to see the true potencial – or lack of.

So, that’s it for the first entry. My hope is to make the best game possible for me and for the people who will played it.