Saturday, November 28, 2015

Quick Update, with Pictures!

Hey all,

Been hard at work on Chang-e, so I'm gonna keep this update short.

The battle system is almost complete, the first level is about halfway done!
I will be continuing to polish the game and make it the best RPG that I can make! Channelling my inner "shonen spirit", as my friend would say.

Anyway, I promised pictures, so here goes!

These are pictures taken from the third puzzle in the tutorial, it's not meant to be difficult. This tutorial will teach the player how to sprint into things to shake objects loose from trees and other objects.

The items found in this way have a special effect in the game and will encourage the player to fully explore the environment they're in, it's game critical, like, the game will be REALLY hard if you don't find these.

I wanted to promote exploration of the game world, and for that I wanted kind of large areas. The game doesn't have the concept of potions and other items, so I needed a way to promote exploration and incorporate that into the larger scheme of the game design. I can go in depth about it later, but I'll leave it at that for now.

Yes, I know the character looks like Ness. Yes, that will change. Yes, it's placeholder. Yes, I was testing my art skills. No, they're not any good.

Anyway, if you have anything to say about these images, let me know!


Saturday, November 14, 2015

Game Engine Design 101: Component Based Systems

Hey all,

I often find myself answering questions about how to design a game engine, what a game engine is like, what to start with, etc. etc.

So, as of today, I'm starting a 101 series on designing a game engine.

The good news: You can make a game engine by yourself!
The bad news: It's hard work!

From here I will assume a few things:
  1. You have Visual Studio, Code::Blocks, XCode, Eclipse, or some other IDE (Integrated Development Environment)
  2. You know how to use said IDE.
  3. You have a grasp on C / C++.
If your grasp of C / C++ is kinda okay, or meh, or whatever, then you're okay. If you want a primer on that let me know, I may write a 101 on that.

Before I get started, all of this code (from here on out) will be referenced from my game engine here (and it's open source!): JFramework

So, without further delay, let's start the tutorial.

Two GameObjects: Character and Egg.

Every object in a game is known as a GameObject, which are built up of Components.

"What are components?", I hear you ask. Why, they are the building blocks of GameObjects!

"You said that earlier..." you may say. I will follow up with this: What would a GameObject contain?
  • A position? A rotation? A scale? An alignment on an axis? (All of these can be combined into what's known as a Transform)
  • A hitbox? A hurtbox? Mass? (Known as a PhysicsObject)
  • Textures? Draw mode? (Known as a Surface)
How do you get all of these things to have such unique features, yet keep the code easy to read in the future?

Easy, we use Component based design to solve this.

The main paradigms of Component based design are:
  1. All things that a GameObject can contain will derive from the Component base class
  2. Inheritance will be kept to an absolute minimum. (Ideally no deeper than 1 level)
Without further ado, some code:

This is what our base class will look like. Every component will derive from this class and implement the methods that are marked as "virtual".

Each "virtual" method is set "= 0" so that when anything derives from our base class, those methods MUST be implemented. This is known as creating an abstract class, by the way.

Each Component will be aware of its owner, which is a GameObject, and its unique identifier, for searching purposes.

What will our Transform class look like? Simple, like so:

Notice the those methods at the bottom? How they're not set to "= 0" like our component class? We are implementing them, as we should / have to. Some of which in a .cpp file, which you can see in Source/Components/Transform.cpp in the project I already linked.

"What's the point of this?", you may ask. Let me show you the GameObject class and how it utilizes Components:

Notice how our GameObject class has a vector of Components? Almost like it's built up from them... right? Imagine building a GameObject if it had a specific Surface object, a Transform object, a PhysicsObject object, it would look messy and would be hard-coded, not ideal.

In this example, an object can be missing components and still work. What if a GameObject doesn't need a hitbox? Easy, just don't give the GameObject one!

What we now have is an interface in which Components with many different features can be responsible for updating and managing themselves when need be.

How do I update our Components? Also easy! Remember that "virtual" method named "Update" in our Component class? We're gonna use it, yep.

Now, no matter how many Components our GameObject has, this method will always scale to update every Component.

I'll end the lesson here, next time, I'll discuss how to utilize these Components in order to draw, move, and collide GameObjects. If you didn't quite understand, it'll all come together then, I'm sure.


Sunday, November 8, 2015

Some New Songs!

Hey all,

Real quick, I wrote three little musical quips that I plan to edit later, but I thought I'd let you into the music writing process.

Dooder's Song
Simple Sad Thing
More Town Music

That's it, if you have any comments leave them below.
Yes, they are very WIP, so yeah.
Also, don't steal it. You still know what that means.


Monday, November 2, 2015

Hard at Work

Hey all,

I'm on a week and a half long vacation from work so I've been working on Chang'e to have something neat to present at the end of my sprint.

By the way, I'm using Jira to manage progress on Chang'e, thanks to it, I've been more productive than I have been in a long time! I'm not being paid by them, but it's a great product for when you're starting to lose track of what you need to do or lose vision of your project.

For a while there I was feeling a bit lost and had a million things I wanted to do, so much so that I was just working on "cool things" (i.e. extra features) because it seemed like something I could do in the immediate time frame. Don't be like me, manage yourself properly.

Anyway, here's an art thing I did, concept this time:

No stealing, foo.

I have been drawing other things recently, but I'm tired and don't wanna watermark them all.

Chang'e is looking good overall and I hope to get a playable demo out sometime in the next half year or so. Crossed fingers...?

The above is not a demo release date, it is PURELY hopeful wishing.


A very late Witcher 3 review

Hey all,

As with any product, software or otherwise, just because it looks pretty on the outside doesn't necessarily mean that the product was well designed or built. The Witcher 3 is an excellent example of how (once again) great graphics do not make a great game.

To sum this whole review up: The Witcher 3 is a buggy experience in which the player does not spend a lot of time playing the game, has sluggish controls, with certain aspects of the design being backwards, and is socially regressive. To the game's credit, the story is fairly solid with a few elements being from left field. There are a lot of things to do in the world of The Witcher 3 as well, taking me roughly 60+ hours of total playtime before sitting down to write this. If you enjoy long games that are mostly story, you chose the correct game.

To clear up any confusion: I have not played the Witcher 1 or 2, so I had no expectations going into this game.

To clear up any more confusion, I have also not played the expansion, Hearts of Stone, which I hear addressed some of the issues I had. Since I'm not going to confirm those by paying more money, I'll pretend that it doesn't exist, and review the core game.

I feel like this goes without saying, but from here on:


The Witcher 3 is the conclusion to the Witcher trilogy which is based upon the prose of Andrzej Sapkowski, the story follows Geralt of Rivia and his many adventures across the world as he tries to recover Ciri, a girl whom he raised who has the ability to teleport between worlds. Many things happen during his journey, taking him to various plains, islands, castles and the like. Geralt's quest sometimes will require him to kill monsters (as a Witcher should.), fetch items, explore ruins, etc.

The story is overall fairly solid with a few things that really don't make sense. For example: before one of the key decisions that determine which ending you get for the game, Ciri is insulted by a girl who has been living in a lab, for who knows how long, but who is this girl? Why is this girl even here? Why does Ciri let what the girl says even get to her? On top of that, you never see the girl again, so it's like she's just there to say an insult and leave, that's plot convenience for you I guess..?

Not to say that the writing is TERRIBLE, it's just okay, that's all. I found myself not caring much for the characters or the ending I got. I chose Triss, by the way, it changed virtually nothing, it was stupid.

The controls for The Witcher 3 are easy to understand, just...

----------------------------- RANT INCOMING -------------------------------------
The controls for this game are incredibly sluggish, where hitting a button requires a wait time of roughly half a second before any real action happens. This makes combat difficult for virtually no reason and makes navigating indoors hilarious. I swear, I kept running into shelves and destroying valuables, and the NPC's didn't care at all, it was great.

I'm not kidding, CD Projekt Red had to patch the controls to make navigating indoors easier.

Geralt moves with such a weight that you can really feel how much gear he's carrying, and that's great, but with that comes the cost of a terrible delay. His combat motions take so long to commit to (even his "quick attack") and his motions, even for a quick attack, are incredibly impractical, involving spins and ducks, which eat up even more time.

Contrast this with Dark Souls in which there is a certain delay to the combat, but the movement controls are incredibly smooth and responsive, it's directly incorporated into the design. The combat in that game is sluggish to reinforce player thinking, lest they be punished for doing something stupid. The Witcher 3 doesn't do this, at all, since combat is so easy (more on that later). The Witcher 3 is sluggish in all respects, and CD Projekt Red acknowledged this.

The graphics are great, if you're wondering, with an incredible draw distance and lots of detail. The Witcher 3's dev team clearly worked hard on the visual fidelity of this game, it shows.

From here on I'll compare this game against my 5 game design rules (from an earlier post). This is by no means authoritative and is purely an opinion. If you disagree with me, that's fine, really!

Coherence / Following the rules: "The game must be coherent and consistent, game objects / characters must obey the rules that the game designer sets early on in the experience, no exceptions."

Besides the obvious in game bugs, overall The Witcher 3 is solid with the rules it sets early on the experience. There are no sudden changes to the combat, there are no sudden changes to exploration, the game doesn't try to hit you with any random events, which is a great thing!

The one problem that I experienced with the game that's worth mentioning is in regards to hitboxes, namely, the enemy hitboxes for their attacks are huge and don't match the model. This may seem like a minor point, but it feels like all of the enemies (especially the larger ones) have mismatched hitboxes, with attacks that you swear didn't hit you, yet they did, it's jarring.

Enemies also don't necessarily respond to being hit the same way that Geralt does. It makes sense that a large creature wouldn't flinch when struck, but even creatures of similar stature to Geralt can just swing at you THROUGH your attack, yet you cannot do this, it's kind of silly. Combat is stilted in the enemies favor because the combat really is that easy (more on that later).

This part is pretty short, as there isn't really much to mention here, just the hitboxes issue. To be completely fair, I feel like it says a lot that the enemy hitboxes are larger than the player's by such a huge margin.

Score: 16/20

Do or Show, Don't Tell: "The game must show the player or make the player use mechanics of the game in order for the player to understand them. Allow the player to learn mechanics in a safe environment with minimal punishment so that the game can introduce challenges while feeling "fair"."

The Witcher 3 does a good job of showing the player what is expected of them in terms of combat and navigating the world, by having a "do this by hitting this button" tutorial in the form of a training session at Kaer Morhen (the game's starting area). The combat at this point comes off as complex and deep with many options in terms of approach and playstyle (more on this later...).

Unfortunately, due to the game's various other elements, including leveling up, skill trees, item usage and the like, the game only explains these mechanics in *very* small text, with little detail, and the text is easy to accidentally dismiss (tapping the X button out of sheer boredom, for example.). This creates moments where the player feels a certain disconnect from the mechanics that the game is trying to explain.

Honestly, I'm not sure *why* The Witcher 3 has as many mechanics as it does. Let's go over the (not at all fully inclusive) list of mechanics:
  • Alchemy
  • Blacksmithing
  • Exploration
  • Combat (Geralt)
  • Combat (Ciri)
  • Fist fights
  • Witcher vision
  • Bombs
  • Oils
  • Alcoholest
  • Conversations (Some of which affect later choices etc. etc.)
  • Equipment Statuses
  • Quests (Side and otherwise)
  • Skill Trees
  • Augmenting Weapons and Armor
  • Economy
  • Equipment Weight
  • Bounties
  • Horse riding
  • Experience points
I'm sure I'm forgetting something here, but the sheer number of things that the player has to maintain and be aware of can be boggling, to say the least. Imagine coming back to this game after 6 months of not playing it, there will be too much to remember. With all of these mechanics in which the tutorial isn't much more than a few glorified textboxes, the player doesn't receive any reinforcement upon being introduced to the mechanics of the game. A lot of the mechanics in this game don't have very much of an effect on the overall experience... Except when they do and change the ending of the game, see what I'm alluding to here?

Upon hitting my second tutorial that involved textboxes, I knew this game was going to be difficult for me to cope with.

As an example of how the mechanics aren't reinforced well: I didn't realize how leveling up in the game worked until I hunted down a monster, killed it, and checked how many experience points the enemy was worth. (Here's a hint: not much.) Levelling up in this game comes from doing quests and seeing events in the world.

----------------------------- RANT INCOMING -------------------------------------
This leads into my next point about how this game is mostly narrative, not gameplay: even levelling is based upon watching cut scenes and not by exploring and experiencing the world. The Witcher 3 has a huge and vast world to explore with many potential secrets to be unearthed, but going out into the world without a quest in tow is a mostly fruitless task, as the player isn't hunting for treasure nor are they gaining levels. One of the many fine balances of an RPG is that if the player isn't gaining treasure, at least progress is being made in the form of levels, but in The Witcher 3, that's not the case, it's counter-intuitive! How could they get this concept so backwards?

Overall, this game is complex, very complex. Maybe not daunting at first, but the sheer number of mechanics could be daunting to casual players or to players returning after being away from a few months. With the way the game introduces the player to the various mechanics, with mostly textboxes, the player doesn't learn by doing, nor are they shown how to utilize a mechanic, instead, the player is TOLD how the mechanics work.

Score: 12/20
Exercise the Brain: "Learning is fun, variety is learning. Multiplayer games are great at this."

During my time playing the Witcher 3, I only remember one puzzle, which was at the end of a side quest (Keira Metz), almost all other puzzles are solved for you via the in game mini-map. I'm not stretching on this point: I had to actually TURN OFF the mini-map guidance (default on) so that the game would STOP telling me exactly where to go and allow me to absorb the universe and let my sense of adventure take over. The Witcher 3 takes away the user agency to solve puzzles and find out where to go next. Most "puzzles" in the game only require the player to run around the room and mash the X button, which I feel like shouldn't be said, is not a puzzle.

Combat is not challenging either (yes, I played it on a higher difficulty), mashing weak attacks with the occasional strong attack will win you most battles. It felt as if staying aggressive rather than thinking and reacting was more beneficial. If the game wanted the player to fear monsters and combat with people, it should have punished me for mashing and not thinking. The combat has mechanics in place that SUGGEST thoughtful play, but they don't matter much. The player can dodge (short or long), parry, block, attack (weak or strong), and use items in order to achieve victory. Honestly, I only used items about once or twice willingly, all other times were required for a quest.

Don't even get me started about the fist fights, those are even easier, the pattern goes as such: Wait, parry the incoming attack, strong punch, strong punch, strong punch, win.

Finding treasure on the overworld isn't difficult either: a gold circle on the minimap shows pretty much exactly where the treasure lies, that's not a puzzle, it's not even a brainteaser. Upon finding treasure, the player may find additional side quests (which is awesome!), better weapons and armor (also awesome!), or items (which I hardly used...).

Overall, The Witcher 3 doesn't enforce player thought, it's not interested in quizzing you, and letting you win because of your own wit. This game would rather you run from story bit to story bit with your hand being held, and that, to me at least, is not exercising the brain, it's quite the opposite.

Score: 10/20

Content is king: "Neat particle effects does not make a great game. "Keep the great, trash the okay". A game with 10 hours of great content that the player will remember with 20 hours of padding is a 10 hour game, let's face it."

The Witcher 3 absolutely NAILS the content section! There's so much to do in the world, with a ton of side quests, and lots of treasure!

Side quests in The Witcher 3 have substance, there are cutscenes (comparable to the main story in terms of quality and development), have good storytelling, and are not just fetch quests. Each side quest is like a miniature mystery that needs unravelling, with little clues and hints telling the player what may have happened. In all honesty, The Witcher 3 may very well be one of the best detective games ever made. (I'm looking at you, LA Noire) The sheer number of side quests will keep any player busy for a long time, it's clear that when CD Projekt Red decided to make this game, they wanted to try and create a more real (in terms of living and breathing) game universe. They succeeded, pretty well in fact, I enjoyed the side quests more than I did the main story.

Some of the quests cover heavy, real subjects. For example, there is a quest where a dwarf is harassed because some racists don't like how he is into human women, saying things like "Hands off human women, dwarf!". In this quest, Geralt must make things right by "correcting" the racists. Quests like these (with real world issues) make the world that Geralt lives in seem that much more believable.

But did they make anything not worthwhile? From their design, no. Since experience points are gained from watching scenes, side quests are the best way to experience the world of The Witcher 3.

There's also treasure sprinkled throughout the world. As mentioned before, it's not difficult to find said treasure, but there's a lot to find. I can only remember 3 instances where the equipment I got was at all useful. Of course, the treasure being there is more than enough to spur a player along to figure out the contents. It's something to be appreciated that there's so many things to find within the world of The Witcher 3, I really can't say much more about this.

Overall, there's a lot of content to this game, a lot of it is quality stuff as well. My only gripe is that the overworld may be a little too big and sparse, despite the amount of treasure in the world, to justify its sheer size.

----------------------------- RANT INCOMING -------------------------------------
Speaking of content, the mature content for this game is VERY socially regressive. It feels like every woman is a sex object. I hate to be THAT guy, but I REALLY noticed it with this game. Almost every female protagonist that can be interacted with, can also be romanced, and Geralt can have sex whenever he wants, should he visit a brothel.

I mean, one could argue that since this is a medieval fantasy-esque theme it would probably be more accurate to the universe, but to that I argue that leaving this part of the game out would not have changed the overall experience. It's complete fluff, it does nothing, it's just kinda... wrong.

Either way, women throw themselves at Geralt, it doesn't make sense, blah blah, you got it.
Score: 19/20

Player Choice Matters: "Let decisions have weight, don't leave decisions up to the player that ultimately mean nothing, that's not fun."

The Witcher 3 handles player choice very well, with various skill tree options and dialogue options for the player to choose from.

The Witcher 3 skill tree leaves little material to discuss, it has various options for Geralt to grow by spending skill points that are acquired by leveling up. Geralt can grow his physical traits, gaining new abilities, or upgrading his spells, or various other stats, creating many ways for the player to craft their own unique experience.

In conversations, each dialogue option can have repercussions for the quest or subject in question, it's very interesting, as there are no "right" or "wrong" answers. The Witcher 3 likes to make choices "morally grey", in that the game tries to not punish you for whatever choices you make.

This would be a perfect score, EXCEPT there are cases where the "moral grey" case no longer applies, and the game doesn't really tell you when. The choices I'm talking about revolve around the end of the game, as there are multiple endings to this game. The choices revolve around how Geralt talks to Ciri during "key" points in the story, one of which involves getting in a snow fight with Ciri instead of trying to comfort Ciri in her time of need. In the case mentioned previously, the snowball fight is the "correct" answer (if you hope for a good ending), doesn't make sense, right? Basically, all of your choices don't really matter except when it does, and the game (and story) don't really notify you when you're about to change the course of the events of the game.

Overall, besides the one gripe mentioned, The Witcher 3 tries hard to let the player choose how to have their experience in its world, from upgrading stats and abilities to dialogue options, it's massive, and well done. Kudos, CD Projekt Red!

Score: 18/20

And there you have it, a very late, very bad review of The Witcher 3. As mentioned before, this is just an opinion, and not at all authoritative.

I'm sure you're asking me to make suggestions as to how to fix some of the problems in the game, to which I say...

1. Give more variety in terms of combat encounters. Give me a reason to fear the monsters in the world.
2. Have a way to encourage exploring the world without a side quest in mind. Maybe rank the treasure chests by level and difficulty to acquire on the overworld map?
3. For tutorials, let the player learn by doing, don't just tell them what to do. Maybe explain the levelling system, too.
4. I can't fix the story, or the balance between gameplay and story, sorry.
5. Puzzles should be real puzzles.
6. Dumb down the minimap.
7. Let the player know when their decision drastically affected the story.
8. Maybe shrink down the overworld size in an effort to make it more dense.
9. Walking around is sluggish, that should have been addressed during testing.

I may revisit this review and touch it up a bit, consider this a "rough draft" I guess?

Final Score: 75/100