Jump to content
  • Advertisement


  • Content Count

  • Joined

  • Last visited

Everything posted by ricvalerio

  1. ricvalerio

    Online RPG

    Follow me on the journey of creating an MMORPG. Along the way, I will share my experiences, implementation choices, techniques, decisions, tips and tricks, until the release.
  2. ricvalerio

    Human Male loading with armor

    On the previous post, I showed a screenshot of the human male model in the game, but without armor. But before diving into the update, you can also check my video devlog at: https://www.youtube.com/channel/UCyOt8sPTqNxRseUzpzUEQQg Lately I have been working on loading them with armor. Whenever a player logs in nearby, or comes within range, or even getting close to an NPC, we need to generate the appropriate model. This means getting the right meshes in place, along with textures for the body and those armor pieces. For this, there are two passes. One pass for the body and one pass for the armor. While on the human model asset I got had some code to combine armor and textures and generate prefabs, it had no logic to generate models based on a specific configuration, that is, if I give a set of ids for the armor to create a model accordingly. So I created a generator for it, and so far it's looking OK. I am not yet satisfied, since it is creating them one by one and there is no cache, or pregenerated textures. On my next iteration on this, first thing I want to do is to have the possibility to have textures pre-generated on the standalone clients, so when we get close to an NPC it loads very fast and puts minimal weight on the client. Next is creating cache for players' textures too, and finally improve the generation speed. They wont necessarily be done one after the one, due to priorities. Up next, most likely I will make a script for a boss, to expand the engine capabilities and add do some early testing of more complex fights. This will also serve as a demo for the gameplay trailer, that I want to do soon. Enjoy and let me know your thoughts.
  3. ricvalerio

    Human male model in the game

    Here's a very short update. The human models are in the game. Here is the male model, with no gear on and all the same predefined features, like skin color, face and hair. The server is sending the same definitions for every model as it is, and the next step is to allow to change these values in the NPC definition editor and eventually a character creation screen. On the next update I will show the female model in the game too. You can also follow the video devlog at https://www.youtube.com/channel/UCyOt8sPTqNxRseUzpzUEQQg See you next time!
  4. ricvalerio

    Animations and equipment

    It's been some time since the last update, and there are great news. For new people, this refers to devlog of my MMORPG, which you can see here https://www.youtube.com/channel/UCyOt8sPTqNxRseUzpzUEQQg I have been working on adding human male and female models, along with animations and equipping items. After I got the human models, I had to setup animations. An important aspect of animating the characters is blending different animations together. For example, attack with a sword while running, or casting a spell while jumping. So I implemented a way to seamlessly transition the animations, so if I am attacking and I start running, or stop running, it will respectively start the running animation on the legs, or return the full attack animation to the full body. It does has it's drawbacks, but it looks a bit better than the other options I explored. Then another major milestone that I have been moving towards is equipment. There are a few challenges to solve with equipment. To start, I need to be able to tell what a character looks like and what is it wearing when it loads on a client, so the client can reproduce it. Recreating a character requires to merge different textures and attach different meshes to character, so it's not a very lightweight event. Because of that, I am having NPCs textures "baked" for the clients, so in runtime it is cheaper to load a given NPCs texture and armor. For the players I can keep a cache perhaps, and that might help to reduce the amount of processing required to recreate a character, but I have yet to implement this. A few screenshots of the latest work:
  5. ricvalerio

    Capture the Flag tests

    Here's the CTF mechanic in the works. The logic behind will be redone, because I want to reuse what already exists and leverage other mechanisms in the engine. I will be talking about this in a video devlog, to explain how it will work, and show the final implementation. Let me know your thoughts. Youtube channel: https://www.youtube.com/channel/UCyOt8sPTqNxRseUzpzUEQQg Capturing_the_flag.mp4
  6. ricvalerio

    WIP on human characters

    Hi everyone! Here is a work in progress in loading human characters on the fly with the different armor sets and weapons. If you have not been following my devlog, here it is: https://www.youtube.com/channel/UCyOt8sPTqNxRseUzpzUEQQg What you see in the screenshots is the engine generating random human characters with different armor sets on the fly. This is important, as opposed to prefabs, because each player can have it's own customised and equipped character, so it needs to have a mechanism to load these characters as they appear. The human will be available soon, and it will come rich with armor, which the premade Dwarf just does not have. The human will be the first model to be functional (that is, equipping gear, character creation and customisation, etc). Enjoy and let me know your thoughts. Cheers and have a nice weekend!
  7. ricvalerio

    MMORPG devlog - AddOns part 2

    Yesterday I published the second part of the AddOn integration with Lua scripting. Let me know if you have any questions or feedback.
  8. ricvalerio

    Buffs + AOE spells preview - MMORPG devlog

    The next video of the devlog is taking some time to come out, so here's a preview of what I have been working on. On this video, you can see the buffs addon working, and on the second half there is a bit of a preview of AOE spells, with I have been working on. You can see the video below, and if you want to see more, check out my youtube channel. https://www.youtube.com/channel/UCyOt8sPTqNxRseUzpzUEQQg Preview Buffs + AOE.mp4
  9. ricvalerio

    How I am making an MMORPG

    Hi fellow devs. I am doing a video devlog of my journey doing an MMORPG, and along the way, I am sharing my progress, tips, tricks and techniques. I will also be posting tutorials on some aspects of the development, like from example client-server networking, leveraging scripting, creating tools, and a lot more. If you like these topics, make sure to take a look at my channel and subscribe, and I will see you in the next video. https://www.youtube.com/channel/UCyOt8sPTqNxRseUzpzUEQQg
  10. ricvalerio

    Buffs now displayed

    Just a short update before I publish the video on AddOns, part 2. While the client and server were aware of buffs and debuffs, there was no visual representation of them, and so, it was not possible to see what buffs and debuffs the player character had. But by exposing only a few functions to the Lua scripts, in fact only one to get the buffs while others are for UI, it was possible to very quickly create UI elements to display buffs. It's already a win from having added AddOns support. Most likely some of these internal AddOns will be open source, to both be updated by the community and also to serve as example for AddOn creators or anyone wanting to have a go at creating an AddOn. Make sure to subscribe my channel if you want to follow the updates, where I share the journey of developing my MMORPG, along with tips, tricks and tutorials. https://www.youtube.com/channel/UCyOt8sPTqNxRseUzpzUEQQg
  11. ricvalerio

    Addon support + video devlog

    One more video published, this one on adding support for AddOns. I also demonstrate by creating two simple AddOns. While these are very simple, and the support is a bare bones one, it serves as a starting point for supporting complex AddOns. Take a look at the video, and let me know your comments and questions.
  12. ricvalerio

    Still working on addon support

    I am still working on addon support, by adding more UI elements and event registration. You can take a look at the screenshot below to see how an addon could now replace the default UI. Moving forward, the default interface might also be converted into an addon. The great part is that part of this effort is common to the NPC scripting, which will come after the addons video. You can subscribe to the devlog channel at https://www.youtube.com/channel/UCyOt8sPTqNxRseUzpzUEQQg Let me know if you have any questions or comments. Cheers!
  13. ricvalerio

    My MMORPG devlog

    The most recent video, Networking part 1, is out. You can check it out at Let me know if you have any questions. Cheers!
  14. ricvalerio

    My MMORPG devlog

    Hi everyone, I am publishing a video devlog on the creation of my MMORPG, where I cover aspects of the game and it's tools. So far there are two videos exploring the quest editor and the spell editor, and two short demos showcasing an early look at quests and charge ability. Later on, I will be going through networking, creating playable areas, tradeskills, and more. For networking I have been using LiteNetLib, and did a small test with 40 clients in the same area and so far so good. I am also using some tricks to reduce the amount of data that is necessary to send to the clients, which I might cover in the videos. The Spell system is quite decent, I can create abilities and spells with or without projectiles, buffs and some more custom abilities like charge. I can combine effects into spells, so there is a lot of room for creativity. The Quest system is basic, and it allows for the most common things, such as prequests, min and recommended level, objectives like collect and slay, rewards. Down the road I want to add more functionality like repeatable quests, select item from list of items as reward, automatically proposed quests, and more. Here is the link for the Spell Editor: And here is the link for the Quest Editor:
  15. ricvalerio

    Supporting Addons + video soon

    I have been working on supporting addons in the game. By allowing players to create addons, it opens up a lot of possibilities and can in fact improve the game experience. Because players might enjoy the information laid out differently, like a minimalist UI, or a more complex one, it is important to give them the space to change the interface. The devlog video on this topic will be published soon at https://www.youtube.com/channel/UCyOt8sPTqNxRseUzpzUEQQg so stay tuned and hit subscribe + bell icon if you want to follow the devlog. Lua was a natural choice, because it's a very popular scripting language for this purpose, it has a big community around it, and therefore it is easier to get help. It also makes it easier for existing addon creators to contribute in a familiar, established ground. So I set forth, and added support for basic addons, and currently this is what is supported: get player status (id, name, hp, max hp, energy, max energy) get target status register for experience gain event register for player status update register for target status update (including changing and clearing target) create basic UI elements, like containers, rectangle and labels Now obviously, this does not allow for spectacular addons, so things for the near future: register for chat message events register for combat activity events register for quest activity events (accept, cancel, collect X, etc) allow use of textures in the UI elements clickable UI elements draggable UI elements drag spells into UI elements (for example, I want to revamp the action bars) And there is a lot more to it. Here is a short piece of code for an example addon that will appear in the video: And the resulting addon in the game: Looking forward to have the support for addons more complete and see what comes out from addon creators.
  16. ricvalerio

    Networking part 1

    Hi everyone! I published another devlog video, and this one goes through a few of the networking implementations I did for skills like a fireball, charge, and also NPC patrolling. It dramatically reduces the bandwidth needed by changing a bit how things work. I hope you enjoy it, and if you want to follow, hit subscribe and the bell icon. Let me know if you have any questions or feedback.
  17. ricvalerio

    Arriving at the lake

    A video recorded for the start of the networking video. As usual, you can follow the video devlog on Youtube at https://www.youtube.com/channel/UCyOt8sPTqNxRseUzpzUEQQg
  18. ricvalerio

    Networking implementation video coming up

    Working on the new video for my Youtube devlog channel. On this video I will talk about some decisions I did regarding networking, and how I dramatically reduced the bandwidth used for spells and NPCs actions and movement. You can follow my video devlog on Youtube at https://www.youtube.com/channel/UCyOt8sPTqNxRseUzpzUEQQg and if you want to follow, hit subscribe and don't forget to set to alert on the bell icon. A few screenshots of what I will show in the video:
  19. I have a video devlog, which you can follow on Youtube at https://www.youtube.com/channel/UCyOt8sPTqNxRseUzpzUEQQg and I am posting every now and then. Working in the direction of loading characters depending on their armor, skin color, hair, etc. This presents a lot of challenges, but it's moving forward. The goal for now is to create models given a set of parameters. This allows me to define an NPC and player look, and also will further allow me to create items that can be looted and equipped. This is just a test on random generation of characters, which still shows a few issues. I am hoping to have this done within the next couple of weeks. Having that one, will add the female character too.
  20. ricvalerio

    New lake village WIP

    Started working on a small village for a side story and quests. It's in a very early stage and a lot of details still haven't been added, but it's getting shape. It also shows the weather system in place, along with water. What do you imagine is the story for this place? 🙂 If you want to follow my video devlog: https://www.youtube.com/channel/UCyOt8sPTqNxRseUzpzUEQQg
  21. ricvalerio

    The Quest Editor

    I made a video about the Quest Editor, which simplifies the process of adding quests to the game. As an example, I add 3 quests with different objectives, from scratch, and test each of the quests. You can see the video below. Follow me on: Twitter: https://twitter.com/ricvalerio7 Youtube: https://www.youtube.com/channel/UCyOt8sPTqNxRseUzpzUEQQg
  22. ricvalerio

    Quest editor wreapping up and video soon

    Wrapped up most of what I wanted to clean up before recording. So here is what the quest editor looks like now, and it's soon time to record! 🙂 It's a lot better than what once was working directly in the inspector with much less functionality, and it's much more fun to add quests and let myself be creative. You can follow up on the videos on my youtube channel at https://www.youtube.com/channel/UCyOt8sPTqNxRseUzpzUEQQg
  23. ricvalerio

    Quest editor video on the way

    Here is a sneak peek of the quest editor, of which I will post a video soon. The principle is the same as the spell editor: minimize coding intervention and allow quest designers to enrich the world with little effort. Follow the development of my online RPG here and on my youtube channel, at https://www.youtube.com/channel/UCyOt8sPTqNxRseUzpzUEQQg
  24. ricvalerio

    The Spell Editor

    I have published a video of my online RPG, where I go through the Spell Editor, create a few spells and test them in game. I created the spell editor to make it easier to manage the spell creation and balancing process, and minimize coding intervention. I hope you enjoy the video, and if you want to follow up on the video devlog, then please subscribe and set to notify.
  25. This article was first published on https://medium.com/@ricardo.valerio/make-it-difficult-not-punishing-7198334573b8 Difficulty plays a big role in keeping players motivated, engaged and, unintuitively, in marketing. Some games have it better designed than others. Some design it even to make it satisfyingly hard, like Dark Souls. But others have it poorly designed, with a very high difficult bar set from the very start, or none to little difficulty altogether, combined with too steep or too shallow difficulty increase. So how do we go about designing good difficulty? The first thing that we need to do is to define difficulty. What is difficulty? Difficulty is the amount of skill required by the player to accomplish a goal or progress through the game experience. It can be as simple as jumping from one platform to another, killing a character, defeat a boss fight — which could be designed respectively to be easy, medium or hard to accomplish. Difficulty goes hand in hand with the challenge presented and the skill of the player related to that challenge and the game. Present a too high challenge for a less skilled player, and it becomes a hard barrier from which players can turn away from; present too little challenge for high skilled players, and it won't be interesting for them. The optimal difficulty is one in which the challenge presented is always slightly greater than the skill of the player when he first encounters it, so defeating the challenge provides a climax, small or big, and satisfaction. This provides for an optimal flow state, where the player knows accomplishing the goal is possible, and investing energy will provide for a satisfying resolution. Mihaly Csikszentmihalyi, a Hungarian psychologist, proposed the following graph that defines flow as the channel where there is an optimal level of skill vs. challenge. Difficulty is the amount of skill required by the player to accomplish a goal or progress through the game. Later on, he proposes a more detailed mental map, matching certain areas of skill and challenge to specific mental states. Image from https://en.wikipedia.org/wiki/Flow_(psychology) As we can see here, a difficult challenge for an average skilled player will at first provoke arousal — the player knows it’s hard right now, but it is within his grasp, and he only needs to become a little more skilled, or perhaps acquire an ability that is key for the challenge, and become skilled at it. But eventually, a player will be in full control of the challenge, as riding a bike. And over time, it will become a somewhat relaxing, or boring, activity. So it’s important that to keep players engaged, more difficult challenges must be presented, or alternatively, different ways of accomplishing goals and avoiding having a single solution for resolving them. So if the player does defeat a challenge, it is always possible to increase their mastery by going back and trying to make it better. And this leads us to motivation. Motivation So what drives someone to perform an activity? We can separate motivations into two categories: intrinsic and extrinsic. When someone is intrinsically motivated, he performs the activity because he likes it, it is satisfying, regardless. An extrinsically motivated person, however, will perform for an external reward — praise, fame, an item, an achievement. Because of this, an extrinsically motivated player needs external factors, but on the other hand, an intrinsically motivated player has his own flame of desire to perform a task. This is important to understand because whenever possible, the primary motivations that should be focused on are the intrinsic ones. This leads us to Self-Determination Theory. The theory states that humans have three fundamental needs, as described in its Wikipedia page: Autonomy, or “to be causal agents of one’s own life and act in harmony with one’s integrated self” Competence, or “seek to control the outcome and experience mastery” Relatedness, or “ the universal want to interact, be connected to, and experience caring for others” Directly connected to skill is competence. It is important for the player to feel he can use his mastery and feel he can control the outcome. Designing good difficulty We know that difficulty will derive from the challenge presented and the player’s skill. Skill is a combination of mental and physical effort and capabilities, which culminate in mastery. And players can vary heavily in skill, depending on their previous experiences, motor skills, cognitive capabilities in the game context, etc. But on the other hand, challenge is easier to define and can be designed to require an increasing amount of mastery. What is a good challenge? The problem mostly lays in defining good challenges. Consider these two boss fights: The boss will randomly kill a player every 5 to 10 seconds without any kind of warning The boss will every 10 seconds place a deadly void zone on the player’s feet, that will explode after 3 seconds and kill anyone on top of it The first one is very punishing, and there is nothing the player can do about it, no matter how much skill he has and earns. But if we look at the second boss, we have many elements that provide a great challenge and promote learning: There are cues The player can react to it There is feedback The player can, therefore, increase his skill in dealing with it Consider riding a bicycle. First times, we are clumsy, lose balance, go slowly. Over time, we focus rather more on the environment than the process of riding the bike itself, because we already are familiar with it, we learned the required techniques for each activity, such as pedalling, balancing, braking, turning, and our skill is high. Same with video games. A good activity should be learnable, to such an extent that it can become mostly automatic, so we can focus on reacting to the environment. A good challenge should present cues, allow a reaction and provide feedback, so when the player fails, he will feel that he could have done better. This will foster learning and increase of skill. If we look at any boss fight in World of Warcraft, we can see they are carefully designed to always provide cues, feedback and allow the player to react. All the mechanics are carefully set in the fight to make it possible to accomplish without it being overly frustrating. The goal is always within reach, and practice takes the player closer to defeating it. Difficult raid bosses have a set of abilities, and sometimes phases in the fight, that as they are defeated get the raiding team steps closer to defeating the challenge. This has a potent effect because as players get closer to their goal, tension rises and builds towards a climax. And after hitting the climax, it provides a great deal of satisfaction — even euphoria and shouting, I have witnessed it first hand with my own guild. A challenge doesn’t need to be solved in the first attempts. But there should be a sense of progress. Even in games as difficult as Super Meat Boy, where a player dies multiple times before clearing a level, players remain engaged. There are clear visual cues of the threats, there is a great deal of feedback, and after death, the player character respawns quickly. With each attempt, the player learns what works better. Perhaps timing, or jumping closer or farther from an edge, etc. When Flappy Bird went viral in 2014, players were raging with the difficulty of the game. A quick search reveals a plethora of videos with raging players. And yet, it went viral, and people were relentlessly trying to get better at it. The fact that cues were presented and the player could react means that there is a chance to become skilled. And it is in fact so hard, that just passing a few pipes can be a reason for bragging and a great sense of one’s growing mastery. Artificial vs Designed difficulty We can add difficulty in two ways: artificial or designed. Designed difficulty is when you design a boss with a certain set of abilities, perhaps adding or removing depending if you are doing a raid with 10 or 25 players, or a hard mode. It is difficulty which requires learning new skills or using them in a certain way, as opposed to just performing better with existing ones. Generally speaking, artificial difficulty is about changing stats. Designed difficulty is about introducing or combining different mechanics, which force the player to learn and master specific skills. Examples of artificial difficulty are increasing health, defences, attacks, number of enemy characters or reduce the time limit if it exists. Examples of designed difficulty are the boss getting a new ability, different kinds of enemies joining the fight or requiring coordination with other players. Artificial difficulty is cheap. It’s easier to tweak than designed difficulty. But at the same time, it might feel cheap for the player. If by going hard mode only changes stats, then the player won't get anything new out of it — unless it challenges his assumptions and forces him to be creative or rethink his strategy. For example, a boss that beats much harder and for longer periods might force the players to rotate their survival abilities carefully; and in team efforts, it might even lead them to coordinate survival abilities. To make a point, imagine a game where you have only one single enemy character that appears with increasing amounts of health and attack. Now imagine one where the enemy characters vary in abilities. The first would become boring faster, and the second one has more chances for using skills differently. As with everything, moderation is key. Use both and combine them to present the best challenge for the player. But it’s not just boss fights While boss fights are in many games a point of climax, and therefore usually are taken more seriously when it comes to difficulty, it doesn’t stop there — in fact, it doesn’t even start there. Setting the difficulty starts right from the beginning of the game. As simple as learning movements, learning to jump, use a skill. The initial game experience of the player is crucial to sparking the desire to play and keep playing. In Super Mario Bros, the player starts with an empty scenario and is left with the only option which is to move. Then he is presented with a cube with an interrogation mark, which will likely trigger curiosity and try to interact with it. Soon after, the first NPC appears, he looks angry and moves towards the player — there are signs he is a threat, and the player needs to react to it. If he touches it, Mario will die — feedback — and the player learned he can’t touch them by walking to them — he has to try something else. The most likely step afterwards will be to try to avoid or jump on top of it, as to smash it, and there will be feedback that the player successfully defeated the challenge presented — his skill level now allows him to deal with these type of NPCs successfully. From the start, the player feels he is learning. Wrapping it up When designing good challenges, it is important that the player is able to learn from it and increase his mastery. In order to do that, we should present cues, visual, audio, vibration, etc, that signal the player something is about to happen. This creates an opportunity to react, and eventually prove one’s mastery. And finally, there should be feedback. With each attempt, the player will become more skilled, defeat the challenge and become satisfied. If the player fails, you want to have him feel there was something better he could have done, and not leave him frustrated and helpless. Avoid having single solutions to defeating a challenge and let play sessions vary — this allows the player to get better, as opposed to a static solution. Make it a difficult challenge but within reach. And avoid making it punishing. Conclusion We went through a definition of difficulty, what drives players, and what is an optimal difficulty level that promotes flow. Allowing the player to learn is fundamental, which ultimately drives progress, and gives a sense of competence and autonomy. And in the end, players will want to seek more challenges. So when it comes to difficulty, make it hard, but not punishing. Stay tuned Stay tuned for follow-ups on this series on game design, where I will explore other aspects that help to deliver a great experience to players and create great games. Follow me on Medium If you liked this article, please upvote or leave review or comment to let me and others know you found this useful, I would be very happy and greatly appreciate it. Thanks!
  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!