JEJoll

Members
  • Content count

    27
  • Joined

  • Last visited

Community Reputation

694 Good

1 Follower

About JEJoll

  • Rank
    Member

Personal Information

  • Interests
    Art
    Audio
    Design
    Production
    Programming

Recent Profile Visitors

4693 profile views
  1. NEW MUSIC (OBSCURITY) Originally posted on FidelumGames.WordPress.com on October 1st, 2017 Here comes Obscurity! This was the first song I made for The Wayfarer. I actually did intend to do something a bit (a lot) brighter, but at times you really can’t really control what comes out. And since I liked how it sounded and felt, I kept doing it until it was ready. And I’m glad I did. If all goes as planned, during the next week I should be getting a new pair of stands for my Behringer Truth B2030A monitors. After that I can direct these studio monitors correcly, which should have a positive impact to mix quality. For now they have been positioned strongly asymmentrically, so they are next to useless during mixing, and 99% of the work has been done with headphones. That 1% is the last rouch check if there are any frequencies that come through in piercingly strong way. Can’t wait to have them. BR Mika Pilke HURRAH! MILESTONE #1 REACHED Originally posted on FidelumGames.WordPress.com on October 13th, 2017 First off: YAY! I’ve reached my first major milestone in the development of The Wayfarer. My enemies (as far as behavior goes) are complete! They still need to be replaced with proper models and given the ability to die (along with dropping loot, etc.), but all of the AI and related systems are complete and, as far as I can tell, mostly bug free. I think that, in order to stay motivated, it’s important to celebrate these small successes, so last night I had a few drinks, and today I’m writing this post and giving myself a pat on the back (good job, me). So why did I decide that this was my first major milestone? In my development experience thus far, one of the hardest and most frustrating things I’ve found is the difficult and delicate act of creating and maintaining complex interconnected systems. All of the individual items I’ve completed so far for my enemies (attacking, spellcasting, navigation, stats, decision making, editor tools, etc.) have not been overly difficult to implement individually. Sure, there were some challenges, but nothing too major. The real challenge is making all of these things fit together in a way that they all still work, and doing so in a way that makes sense and doesn’t cause terror when thinking about having to change something. The reason I’m considering this to be my first major milestone is because all of the features mentioned above, even though they’re all individual systems, are now combined into a larger closed system. This means that I know each individual system works, and I know they all work together, and the stress of having to make that a reality is gone! Moving forward, I can start working on smaller systems again (like player actions, looting, inventory management, levelling, etc.), which is a quicker, simpler and more carefree process than integrating said systems. Of course, once those individual systems are done, I’ll have to integrate them into another closed system, thus reaching another milestone. But, to keep myself realistic, and to prepare myself for the difficulties to come, I do realize that once ‘closed’ system number two is complete, I’ll have to connect it to closed system number one. I have no experience working with systems on this scale, so this is a huge learning experience for me, and I don’t know what to expect. Part of me is expecting the worst, another part is optimistic and hopeful that I’ve paid my dues in terms of keeping the code clean and sensible, and should reap the benefits when the time to integrate comes. Anyhow, I’m super pleased and happy at the moment, and can’t wait to start working on new features again. Hopefully things go smoothly for the next little while and these posts will start getting a little more frequent. This was a huge hill to climb, and I’m glad to be at the top of it (even though I can see the top of the much larger hill in the distance). SQUISHING MAGICAL BUGS During most of my last five or so development sessions, I felt I was making very little progress. I had my spell system pretty much complete, but the process for creating new spells had become too in depth and complicated, so I had to redesign some things and make some pretty major changes. Originally, I had been using ScriptableObjects for my spells, and while it was cool, and made me feel like a ‘real game developer’ to be able to create a spell by clicking Asset>Create>New Spell in the Unity editor, it just wasn’t practical for my purposes. I wound up sticking with trusty ol’ prefabs in the end. While the new system isn’t as generic as the old one (visual effects are now part of the actual spell prefab), it’s much more friendly and maintainable, and I’m able to create new spells in a matter of just a minute or two (not counting VFX creating time). Reworking this system was fairly straightforward. What really sapped my motivation and frustrated me was a bug that I just couldn’t squash. Many of the spells in the game will apply buffs to the caster, or to the caster’s enemy. These buffs have the ability to fortify or weaken any stat that exists in the game, and, when being used by an enemy, who the buff is being cast on (self or enemy), is important. I’ve designed my AI in such a way that, after it has decided to cast a spell, it chooses one at random, filtering out any spells that aren’t available to be cast. I’ve defined a spell that’s unavailable as one which: Has a range less than the distance between the caster and the target Costs more mana than the caster has available Added a buff to the caster which is still active The most important item on this list, in terms of the bug I’m about to describe, is number 3. I don’t want my enemies ‘wasting’ a turn by casting a buff on themselves which they’re already benefitting from. However, enemies are fully ably to cast the same buff on the player multiple times. The caveat with this, however, is that I don’t want multiple buff casts on the player from the enemy to stack. Instead, I want a re-casted buff to reset the remaining turn duration of the buff on the player. The exact opposite was happening–the buff was stacking leading to a spell which should cause a -2 to strength to be able to cause a -10 (or whatever other number) instead. Additionally, this was causing the player’s stat to increase when the buff wore off. This was a relatively small bug, but it drove me absolutely bonkers. Like I said, I spent somewhere around five sessions trying to fix it, getting little else done. Here’s the original method which caused the problem: public void AddActiveBuff(Spell spell) { foreach (StatusEffect buff in spell.StatusEffects) { if (!IsBuffActive(buff)) { activeBuffs.Add(buff, spell.Duration); stats.AddStatModifier(buff.stat, buff.amount); } else { activeBuffs[buff] = spell.Duration; } } } Can you spot the error? I’ll give you a hint: I use a Dictionary to store my activeBuffs, where they key is a StatusEffect object (the contents are unimportant), and the value is an integer representing the number of turns remaining for the buff. I fiddled with this friggin’ thing forever. I changed how I stored my activeBuffs, considered adding some polymorphism to my Spell class, creating multiple arrays to store the data–all kinds of things. In the end, I commented out a single line on a whim, and found the problem: public void AddActiveBuff(Spell spell) { foreach (StatusEffect buff in spell.StatusEffects) { if (!IsBuffActive(buff)) { activeBuffs.Add(buff, spell.Duration); stats.AddStatModifier(buff.stat, buff.amount); } else { //activeBuffs[buff] = spell.Duration; } } } Yep. One line of code. Seems to always be the cause of these tricky bugs. Because my spells are prefabs, the StatusEffect objects attached to them are instances belonging to the instance of the Spell when cast. Therefore, because the key in my activeBuffs Dictionary is an instance of a StatusEffect (something I overlooked, foolishly thinking that two separate but identical StatusEffect instances would be equal), I was adding a new entry to the activeBuffs Dictionary with the above commented line, rather than just resetting the duration of the existing entry. Of course, when I discovered this, I shook my head, and solved the problem in about thirty seconds by comparing buff names rather than objects: public void AddActiveBuff(Spell spell) { foreach (StatusEffect buff in spell.StatusEffects) { if (!IsBuffActive(buff)) { activeBuffs.Add(buff, spell.Duration); stats.AddStatModifier(buff.stat, buff.amount); } else { foreach (StatusEffect activeBuff in activeBuffs.Keys) { if (activeBuff.name == buff.name) { activeBuffs[activeBuff] = spell.Duration; } } } } } Once that was done, I was able to move on to fixing another small bug with my custom Stat inspectors, decide not to make another change regarding how buffs decay (a concern caused by the bug) and add a small piece of code that ignores the turn system when the player is not in combat (allowing for quicker exploration). Once those items were done, I suddenly realized that I had actually reached my first milestone and the frustration and lack of motivation I had been experiencing transformed into excitement and vigor. One more time: YAY! WHAT’S NEXT With that cumbersome set of tasks out of the way, what’s next? Well here’s what my task list has to say: 1.3. Milestone 1 Wrap Up – Complete Basic Turn Based System In Progress 1.3.1. Refactor and clean-up existing code 1.3.2. Document all existing features – UML, GDD, Code Comments 1.3.3. Celebrate! In progress 1.3.3.1. Have a few drinks (YAY!) Complete 1.3.3.2. Celebratory blog post In Progress Yes, this is actually on my task list. These things are important! But, more technically, here’s what the rest of my task list looks like at the moment. 1.4. Player Combat Actions 1.4.1. Attacking 1.4.1.1. Melee 1.4.1.1.1. Create Placeholder Weapon 1.4.1.1.1.1. Attack Animations 1.4.1.1.1.2. Damage Enemy 1.4.1.1.1.3. Ranged (Spear, etc.) 1.4.1.2. Ranged 1.1.1.2.1. Create Placeholder Weapon 1.4.1.2.1.1. Define how moving projectiles affect turns On Hold/Tentative 1.4.1.2.1.2. Projectile Animation 1.4.1.2.1.3. Magic 1.4.1.2.2. Casting Animation 1.4.1.2.2.1. Implement 1.4.1.2.2.2. Dual Wield? On Hold/Tentative 1.4.1.2.3. Define how the player will use dual wield (Attack both at once, choose which hand, etc.) On Hold/Tentative 1.5. Define item types (Consumable, Weapon, Armor, Quest, etc.) 1.5.1.Define item script heirarchy 1.5.2.Determine item commonalities and differences 1.5.2.1. Create item hierarchy 1.5.2.2. Weapons 1.5.2.3. Create Weapon Scriptable Object 1.5.2.3.1. Make Weapons equippable (through editor) 1.5.2.3.2. Share common animation based on type 1.5.2.3.2.1. Practice with Infinity Weapons 1.5.2.3.3. Practice with Mesh Effects 1.5.2.3.4. Integrate Infinity Weapons and Mesh Effects 1.5.2.3.5. Procedural Weapons 1.5.2.3.5.1. Experiment with Infinity Weapons texture generation and Blend Shapes at Runtime I made these items quite a while ago now, so the list will change before I actually start working, but this will give you a general idea of what I’ll be working on. The On Hold/Tentative items are ones that might not be needed, or that I have yet to fully decide to include in the game. POSSIBLE NAME CHANGE The last thing I’ll mention is that I’m considering changing the name of the game. I really like the title The Wayfarer; I think it sums up what the experience is essentially about. However, performing a search for the title, it seems too common a name. The first page of Google alone is filled with restaurant pages, and there are even a couple of games already existing with names similar to The Wayfarer. On the other hand, performing a search for my last game Pixel Zombie Shooter brings it back as the top result, and The Wayfarer has a much larger online presence than Pixel Zombie Shooter as far as all of the blog posts, Youtube videos, etc. So, I think that if I’m going to change it, I should do it sooner rather than later. What are your thoughts? Anyone with marketing experience want to chime in?
  2. TASK LIST, UPCOMING MILESTONE Originally posted by Jake Jollimore on FidelumGames.WordPress.com on September 11, 2017 I’ve been pretty busy over the last week with life stuff, so not a whole lot to report on at the moment. However, I watched an Extra Credits video last night that talked about some tips for making your first game. This isn’t my first, but there were still some good tips in there. The biggest takeaway from this video for me was to make sure that, even if you don’t have the time to work on your game, spend at least 30 minutes a week looking at and reviewing it. The point of this is to keep it all fresh in your mind, and not to let the mental model you’ve created of it to atrophy too far. If you’re a game developer, or even just an avid gamer, I really recommend you check out Extra Credits on YouTube. The videos are always entertaining and educational. Anyway–this video got me thinking about the task list I mentioned in an earlier post, and I thought it might be kind of cool for some of you to see it. Note that this list is not static by any means. Items get added, removed and shuffled around all the time. I’ll start with a high-level task (like Spells), and then break that down into smaller tasks. Often time, I’ll get part way through and realize that, in order to finish the current task, I have to add another to the list and shift my focus to that (eg. I needed a base Stats implementation to implement spells), and then resume with the original task. I’m really glad I have this list. Juggling all of the interconnected systems and moving back forth between them would be a major headache without it. This lets me keep my mental RAM free for more important tasks. It’s not formatted as nicely as the Word version, but you should still be able to get an idea of what I’ve finished, what I’m doing, and what I’ll be doing next. Task Status 1. Define and Implement Core Gameplay Mechanics (Alpha) In Progress 1.1. Movement (Base Mechanics Only—Polish to come later) Complete 1.1.1.Define Movement Scheme Complete 1.1.1.1. Moving (Translation) Complete 1.1.1.1.1. Define Restrictions Complete 1.1.1.1.1.1. Non-Walkable Areas Complete 1.1.1.1.1.1.1. Walls Complete 1.1.1.1.1.1.2. Holes Complete 1.1.1.1.1.1.3. Non-Passable Terrain (Water, Marsh, etc.) Complete 1.1.1.1.1.1.4. Max Climbing Angle Complete 1.1.1.1.1.1.5. Max Drop Amount Complete 1.1.1.2. Turning and Looking (Rotation) Complete 1.1.1.2.1. Fixed rotation (Key presses) Complete 1.1.1.2.2. Free Look (mouse) Complete 1.1.2.Implement Movement Scheme Complete 1.1.2.1. Player Movement Complete 1.1.2.1.1. Develop test level with walls, holes, stairs, drops Complete 1.1.2.1.2. Develop test level with terrain Complete 1.1.2.1.3. Turning and Looking (Rotation) Complete 1.1.2.1.4. Moving (Translation) Complete 1.2. Turn-based Play In Progress 1.2.1.Wait for player action (Mode 1) Complete 1.2.1.1. Define how the Speed stat affects turns Complete 1.2.1.2. Define TurnManager (Passive vs. Active Mode) Complete 1.2.1.3. Define Enemy AI Complete 1.2.1.3.1. Determining Actions Complete 1.2.1.3.1.1. Movement Complete 1.2.1.3.1.2. Attacking Complete 1.2.1.3.1.2.1. Melee Complete 1.2.1.3.1.2.2. Ranged Complete 1.2.1.3.1.2.3. Magic Complete 1.2.1.3.1.3. Retreating Complete 1.2.1.3.1.4. Pursuit Complete 1.2.1.3.1.5. Patrolling Complete 1.2.1.4. Implement Enemy AI Complete 1.2.1.4.1.1. Movement Complete 1.2.1.4.1.1.1. Avoiding Other NPCs Complete 1.2.1.4.1.1.2. Pursuit Complete 1.2.1.4.1.1.3. Patrolling Complete 1.2.1.4.1.2. Attacking Complete 1.2.1.4.1.2.1. Melee Complete 1.2.1.4.1.2.2. Ranged Complete 1.2.1.4.1.2.2.1. Ranged Melee (Spears, etc.) Complete 1.2.1.4.1.2.2.2. Projectiles Complete 1.2.1.4.1.2.3. Magic In Progress 1.2.1.4.1.2.3.1. Define Spell System Complete 1.2.1.4.1.2.3.1.1. Define Stats and Prepare for implementation (equations, helper functions) Complete 1.2.1.4.1.2.3.1.2. Implement Stats Complete 1.2.1.4.1.2.3.1.3. Custom Stats Inspectors Complete 1.2.1.4.1.2.3.2. Implement Spell System (Enemy) In Progress 1.2.1.4.1.2.3.2.1. Linked Spells In Progress 1.2.1.4.1.2.3.2.2. Document Spellcasting In progress 1.2.1.4.1.2.3.2.3. Revamp Spell System In Progress 1.2.1.4.1.2.3.2.4. A couple of finished sample spells In Progress 1.2.1.4.1.2.3.2.5. Define potential status effects. Not Started 1.2.1.4.1.2.3.2.6. Implement base status effects Not Started 1.2.1.4.1.3. Retreating Complete 1.3. Combat (Base) Not Started 1.3.1. Attacking (Player) Not Started 1.3.2.Melee Not Started 1.3.2.1. Create Placeholder Weapon Not Started 1.3.2.1.1. Attack Animations Not Started 1.3.2.1.2. Damage Enemy Not Started 1.3.2.1.3. Ranged Not Started 1.3.3.Ranged Not Started 1.3.3.1. Create Placeholder Weapon Not Started 1.3.3.1.1. Define how moving projectiles affect turns Not Started 1.3.3.1.2. Projectile Animation Not Started 1.3.3.1.3. Magic Not Started 1.3.3.2. Casting Animation Not Started 1.3.3.2.1. Implement Not Started 1.3.3.2.2. Dual Wield? On Hold 1.3.3.3. Define how the player will use dual wield (Attack both at once, choose which hand, etc.) On Hold 1.3.3.3.1. Items Not Started 1.4. Define item types (Consumable, Weapon, Armor, Quest, etc.) Not Started 1.4.1.Define item script heirarchy Not Started 1.4.2.Determine item commonalites and differences Not Started 1.4.2.1. Create item heirarchy Not Started 1.4.2.2. Weapons Not Started 1.4.2.3. Create Weapon Scriptable Object Not Started 1.4.2.3.1. Make Weapons equippable (through editor) Not Started 1.4.2.3.2. Share common animation based on type Not Started 1.4.2.3.2.1. Practice with Infinity Weapons Not Started 1.4.2.3.3. Practice with Mesh Effects Not Started 1.4.2.3.4. Integrate Infinity Weapons and Mesh Effects Not Started 1.4.2.3.5. Procedural Weapons Not Started 1.4.2.3.5.1. Experiment with Infinity Weapons texture generation and Blend Shapes at Runtime Not Started Side note: looking at this list now, it’s starting to get pretty long. I might need to make some separate sublists. As you can see, I’m currently working on implementing the spell system for the enemies. I’ve been at this task for a while. It was nearly done, but I realized it was needlessly convoluted when I had to keep re-learning how to use it to create new spells. So now I’m reworking it a bit, and so far so good. Once the spell system task is complete, I’ll be able to move on to what I consider to be a major milestone: making the player do stuff. Currently, all he can do is move and take damage. After the spells, I’ll work on making him be able to attack back. Speaking of milestones: I really need to define some formally. Anyhow, I’m excited to get over this spell-casting hump and to start turning all of this functionality I’ve created into an actual game. As soon as the player is able to start attacking back, the need for new systems is going to skyrocket. We’re talking weapons, armor, items, inventory and all of the little pieces that make them all up. I’m realizing now that this next task is going to be a huge one, but I’m suddenly super excited to get to that point. As soon as I finish spellcasting, and before I start working on the player, I’m going to make sure all of my code is painstakingly commented. This will be a turning point in the project, and I have to execute it well. Cheers! -Jake NEW MUSIC AND A TEMPORARY SETBACK Originally posted by Mika Pilke on FidelumGames.WordPress.com on September 19, 2017 Here is another piece that was done for The Wayfarer! Last week was a chaotic one. My PC crashed so badly there was really no other option but to reinstall operating system and everything else again. That was a small disaster. Basicly I spent all of my spare time for 8 days to revive my setup. “Luckily” I did this same operation about an year ago, so I got most of the bigger installing files already there. Still there was quite a lot to do. Not only that you install all the programs, but then you update everything, upload the registeration managers, look for the serials, registerate, find out (again) that you have multiple accounts (at the same site) which cannot be merged (and that there are email addresses that don’t even exist anymore) ect. It takes time to relocate all the passwords for those over 10 different accounts. There was probably over 60-70 different products. Luckily only that much. It could be a lot worse. After you’ve installed and updated everything, you still need to find folders of all the dll-files so VST instruments and effects start showing and working in you DAW. Then open up the DAW, open up the instruments one at the time and look for the libraries so that instrument have something to play ect. ect. It’s quite a mess. To be honest I really, really would not care to do this again. It’s really time and nerve consuming. But now it’s done and I’m back in business and nothing crucial is missing. That’s life. Things happen. Then you clean up the mess and move forward. PS. The cause of this was actually drivers of my audio interface (it could be concluded from the file name showing at the blue screen). Fast Track Pro does not support Windows 10, but since it did work after the update from Win7->Win10, I did not quit using it. Now that interface does and will not touch my PC. It is a good interface and I have been using it for years, but I really don’t recommend using it if you use Windows 10. BR Mika Pilke
  3. GREETINGS FROM THE COMPOSER! Originally posted on FidelumGames.wordpress.com A few months back I was looking for projects that would be in need of a composer. Jake did contact me via GameDev.net and asked if I’d be interested doing musics to his game and since I’ve always been a huge fan of fantasy RPGs decision wasn’t really that hard to make, even though there was quite a lot going on at that time (I was offered six game music projects at that time, I had quite recently started in a new job ect.). Style of the game and the musics just seemed right for my style. Okay. Then who actually I am? My name is Mika Pilke. A Finnish hobbyist musician who has been playing around with music for about 20 years now. I’ve been writing music for years, but just lately I’ve felt that my material and quality of the mix have archieved the level where it is possible to actually consider accepting composing projects. I don’t really know how many songs I’ve written totally, but total number is probably somewhere between 150-200. I have also played in several bands too (mostly as a lead guitarist and/or as a singer), but I guess I never truly found comfort in playing live which is a chaotic moment where your senses are dampened and you can barely hear anything, let alone the small details (which I do find important). I’ve always felt that making music all alone, at night, in a dark room is what I actually love the most. It’s intensity, 100% focus and the flow. Tools Nowadays (and at this level) the magic happens mostly by using virtual instruments. I use Reaper as a DAW, a midi-keyboard (Axiom61) and various VST/VSTi/VST3/VST3i instruments from various companies (like Native Instruments, Steinberg and Spitfire Audio). But sometimes it also might add some extra punch to actually record something from the real world too, so I also have Shure Beta 58A, Rode NT1-A and Zoom H1 for recording sound. M-Audio Fast Track Pro serves mostly as an audio interface (and Behringer U-Phoria UM2 as for backup, or for recording sessions that are located elsewhere and you’re too lazy to unconnect M-Audio from the computer). In the end it’s quite a simple, but somewhat capable setup. And still somewhat cost effective too, even though software is not cheap. What is the meaning of music? Music and soundscapes are easily undervalued and even forgotten elements, yet they have (mostly passively) a strong impact to viewers/gamers emotions. I believe music is actually one of the key elements that will define the game’s identity and it has a strong purpose in creating memorable moments and atmospheres. I would even go as far to say that all the visual content is the body but music makes the very soul of the game. When these two elements are combined, sometimes there is a change to create something truly unforgettable. And of course sometimes a good storyline helps too ect. 🙂 But after all, how many games that have become a legend, has a bad soundtrack (if there are any, that is)? So there are quite a lot reasons to take music writing seriously. It’s a job that comes with a great responsibility and it’s a matter I wish to handle with a proper care and passion. One of my creations for The Wayfarer: BR Mika Pilke PS. Check out Mika's YouTube channel!
  4. Originally posted on fidelumgames.wordpress.com Strap yourselves in. This is going to be a big one. And hang in there. There’s some good media part way through. A CLEAN SLATE Since my last post, I let myself get a bit out of hand as far as staying disciplined goes. I had made some decent progress, and had some cool things to show off, but most of what I was showing was only superficial progress. The things I’m talking about are environments, enemies (actual animated models, not just cubes) and some UI stuff. The problem with these things is that they were all parts of incomplete systems. In one of my earlier posts, I wrote: This was a mistake, and led to me falling back into my old habits of sitting down to a development session and asking myself, “what do I want to work on today? What would be cool?” The result of this workflow was getting a given feature ‘good enough’, making it look cool, and then moving on to something else with the intention of returning to the feature I had just ‘completed’ in order to finalize and polish it. The problem with this was that I would often go too long before returning to that feature (if I did at all), and forget the mental model required to finish the system properly. I basically wound up with a bunch of fragments that didn’t fit together. This quickly became overwhelming and really sucked my motivation away. What I really owe myself is to not add any polish until the game is ready for it. Luckily, things have been slow at work lately (until today), and so I’ve been left mostly to my own devices. Without any project work to complete, they let me work on pretty much whatever (as long as it’s somewhat related to what we do there), and since Unity is part of the skill set I use on a regular basis at work, I was able to justify working on my own game in order to increase my proficiency with Unity. God how I wish that was the norm. Working all day long on something I love really makes the time fly. Some day. Anyhow, with all of this time to work on The Wayfarer, I decided it was the perfect time to throw away everything I’d done so far and start over, with a new mentality. This might seem like a bit of a waste, but I’ll be able to reuse some of what I’ve done, and consider the original work as a prototype. The most important thing I’ve been doing is forcing myself to plan everything (except for the smallest tasks) before I even open Unity. This prevents me from sitting down and asking that awful question “what do I want to work on today? What would be cool?”. Instead, I ask myself, “where did I leave off? What needs to be done today?” My new workflow goes something like this: Look at my task list (something I never had before, but to which I adhere strictly to now) and see where I left off. If a task is in progress, pick up where I left of. If not, move on to the next item, adding to the task list as required. These tasks break down essentially into two categories: planning/design and implementation/development, and both groups take up about the same amount of time. Before I write a single line of code, I establish my algorithms in my GDD in plain English (which feels strangely similar to coding). Then, I draw an activity diagram based on the algorithm, identifying any logic flaws along the way and revising the algorithm as required. Finally, after all of that is done, I move on to actual coding–simply translating the algorithm and diagram to code. All of this might seem like overkill (and it does feel like a pain in the ass sometimes), but it’s all worth it in the end, and makes writing the code so much easier. Not only that, but my code is cleaner, more robust and more easily expanded upon. Way fewer headaches now. For those of you interested, here’s one of the plain English pseudo-code examples taken right from my GDD, and the corresponding activity diagram (these are for enemy AI): I have to say that with all of the practice I’ve gotten in lately, and my new workflows, I feel like I’ve just come out of a learning plateau, and am reaching a new skill level with programming and game development. I’VE CREATED A MONSTER I’ve been spending nearly all of my recent development time working on my enemies. This and the following two sections will deal with the details of that. The first thing I did was rework my enemy AI, again with my cubes. I feel like my new system is much more robust, as I’m able to get a wide variety of behaviors just by modifying a few values in Unity’s inspector. I’m able to make my enemies favor ranged combat or close quarters (or any combination of the two), physical or magical attacks, determine how often they’ll heal themselves, and how likely they are to cast buffs on themselves during or in preparation for battle. I’m also able to dictate how aggressive they are by setting the chance that they’ll become injured and retreat during battle, and for how long they’ll pursue the player. I’m also able to dictate how well they can see. All of this without ever (hopefully) having to touch the AI code again (except for bug fixes). This system relies on a simple state machine in which the enemy can be Alerted, Unalerted or Injured. In each of these states, the AI will choose how to behave based on their preference for a particular behavior. You can see more about this system in the pseudo-code and UML shown in the above section. I’ll show a short video of the AI in action in the next section, but for now, have a look at the variables exposed to the inspector which determine an AI’s behavior: WORKING MY MAGIC My goal with my magic system is to allow myself to make everything as generic as possible so that I can easily create new spells without writing additional code, by easily adding status effects to spells, being able to reuse the same visual effects for different spells, setting whether the spell is a projectile or has an immediate effect, or combining/linking any number of spells or visual effects. The system itself is pretty difficult to explain. Suffice to say I use ScriptableObjects, prefabs and Animation Events, and can just work within the Unity Editor to make new spells. Also, I can just drag spells into an enemy’s spell list to give them the ability to cast them. The system itself is pretty much done (with the exception of making status effects actually dosomething), but I’ve yet to put any legitimate visual effects in. Just differently colored spheres for now. Here’s a short video showing how customizable I’ve made spells (I have hopes of letting the player create spells while playing as well): One thing I would like to point out that I think is kind of cool is the ‘Blood’ Magick type. This type of spell costs health instead of (or in addition to) mana to be able to cast. I see these spells being used heavily by warrior type players who have a lot of health to spare, but maybe don’t have enough mana to be proficient spellcasters And, here’s a video of my enemy displaying how it behaves, and how changes in its values modify its behavior. Note that the different balls are placeholder for different spells, and the green thing is a placeholder for a physical projectile, like an arrow. Don’t mind the bugs. PREPARING FOR THE FUTURE Along with all of this planning and trying to ‘do things right’ (if there is such a thing), I’ve been working on getting all of my stats set up, and having them actually be meaningful. The need for this came out of creating the status effect portion of my spell system, which needed stats to be defined (or at least a shell of them) in order to work. I’ve broken my stats down into three categories: Primary/Governing stats: These determine all secondary base stats, and base proficiencies with tertiary stats. Very D&D-ish. Secondary stats: Anything directly tied to primary stats. Health, Mana, Carrying Capacity, etc. Tertiary/Skill Stats Weapons & Armor (Dual wield, Ranged Weapons, Heavy Armor, etc.) Magick (Proficiency in different types of Magick) Other (Things like lockpicking, etc. If I decide to put them in the game) The Player, enemies and NPCs all have a common set of stats, and then, of course, some that only apply to a certain character type exist only where necessary. Nothing overly exciting here, except that I created my first custom inspector in order to make modifying stats easier. Here’s a before and after: This inspector lets me modify governing stats and see how it affects everything else. It also allows me to easily modify all stats and quickly restore a character’s health or mana at run time. Hopefully this saves me some time in the future. That’s it for me. Stay tuned for more! PS: We’ve got a new team member, but I’ll wait for him to introduce himself!
  5. Medieval Story

    Not a whole lot of footage to go by here, but what you've shown looks beautiful. It looks like you've paid a lot of attention to the combat animations and the environment--I love the parrying and the trees swaying. Looks like something I'd love to play. When can we look forward to a longer gameplay video?
  6. Doors, Dungeons, MakeHuman, Bug Fixing

    Not sure if you're aware, but there's a decent library of clothes, etc. for MakeHuman HERE. You might be able to find something better than a shirt and jeans.
  7. Waaaay too long since my last update. Since then, I've been working (not nearly as much as I should be) on outdoor environments and a skill tree. I want this game to follow the classic RPG class formula of Mage, Fighter and Thief, but I didn't want to constrain my players to a single class. Instead, I decided to go with a classless/multiclass concept where players are able to traverse a large skilltree which is implicitly divided into the three aforementioned classes. Take a look at the prototype: So this is still an early proof of concept, and all of the visual elements will probably change, but it's going to function in pretty much the same way as shown here. You'll also get a (very) small taste of the kind of skills you might see in the game. One more note: the three skill branches never merge in this example, but I think they will in the final version. Also, all parent nodes of a skill must currently be unlocked before unlocking a given child node. I'm not sure if this will persists, or if I'll remove that constraint to give me freedom of traversal. Other than that, I've been spending a bit of time building some outdoor environments to try to nail down what my worlds will look like. This first screenshot is, quite honestly, pretty bland and generic, but it will at least give a sense of how villages will be laid out in the world: After I made this scene, I procured a license for Gaia--a really powerful and full featured terrain generation tool for Unity. Here's what 15 minutes of work with Gaia looks like: Pretty amazing huh? So in the end, I think I'll be using Gaia to build my world, and then I'll refine the terrain manually and tweak the positioning of settlements and other points of interest to best suit the game's story and gameplay. That's it for me. Stay tuned for an update on NPCs and monsters!
  8. LD38 - World In Progress

    This is going to be a super short post (and a bit late coming, too), because I simply don't have a lot of time, but I completed my first Ludum Dare entry last weekend. Here's a link to THE GAME'S LUDUM DARE PAGE, where you can read further about the game, and find links to play it. I strongly recommend downloading the exe to play as the WebGL build is rather clunky. I also recommend using the mouse for control. In a nutshell, you play a small planet who must collide with smaller planets to grow bigger, and avoid larger planets or break them apart with your guns. The game isn't as full featured as I would've liked, but I plan on adding more functionality and bug fixes in the future. I'll make a proper post in the days to come.
  9. Cascapadia Closed Alpha

    Looks cool. I'd be willing to test it.
  10. New Flicker Spell Animation & Tweaks - #2

    I like what you've done with the flicker spell, it looks good! Take this with a grain of salt if you wish, but to be completely honest, I think it could still benefit from a transition from point to point, rather than an instant move.  Keep up the great work!
  11. Development Catch-up and Intro #1

      I was thinking some kind of trail would work. This way you could even keep the instant-move type effect and just show the trail from the origin to the new position.  On the other hand, the effect might also benefit from having the player transition to the new position, rather than just instantly being there. Even if it only took a tenth or a twentieth of a second, I think it would help remedy the disorienting effect. Then again, I suspect it's less disorienting than it seems in the video, as the player will be expecting to flicker. Keep up the great work. I'm definitely going to be keeping an eye on this project. I always wanted to make something similar :p
  12. Development Catch-up and Intro #1

    This looks great. Definitely something I want to play.  Have you thought about having some kind of effect play when teleporting? It's a little disorienting, at least watching the video it is.
  13. Congrats! The game looks like it will be a lot of fun. I'm really interested to see the story as well.
  14. Menacing Cubes Metamorphosize

    In my LAST POST, I talked mostly about some of the pathfinding options that I came up with. One of these solutions involved relying on raycasting to determine a path to my player, which was a fun exercise and yielded some really entertaining gifs. However, I decided to scrap that system in favor of using Unity's built-in pathfinding system via the NavMesh and NavMeshAgent components. However, because my game uses grid-based movement, I wasn't going to be able to use said system out of the box. My first solution to making Unity's pathfinding play nicely with my game was to have the NavMeshAgent generate a path, and then overwrite that path by normalizing each of its points to align with my grid (whose cells are 3x3x4). This would have been fine, but I soon realized that would have had to account for inserting points along lengthy straight paths, as the NavMeshAgent only calculates the corners, or turning points, along the path. I could have done this, but after a bit more thought, I realized this would require unnecessarily complex logic, and that I could accomplish the exact same end result with a simpler, but similar solution. Basically, I just decided that, each time my enemies move, I would have the NavMeshAgent generate a new path. Then, instead of normalizing the entire path, I would just look at the first point in the path and normalize that. Why bother normalizing the whole path if I'm only ever going to be moving to the first point in the path anyway? After I did this and added a bit of extra logic to account for the locations and movements of other enemies, I was able to successfully have relatively large mobs moving in ways that (more or less) seem to make sense. Check out this video of some menacing cubes following my player around: After I got all of that mostly working, I decided that, although the game is still in a super early state, I owed it to myself to add a bit of polish and replace my cubes with one of the assets I acquired. Check out the difference a couple of textures, 2 models and some animation configuration can make: So there's a lot going on in this video, so let me explain. Firstly, here's a list of the key features that you can see in the video: Grid based player movement and turning (thanks to the awesome iTween library for all of my grid movement and rotation animations) Mouse Look with rotational snapping (this was actually kind of fun to do) Dissolving enemies (I'm still experimenting with different effects as you can see. Let me know which one you like). Secondly, here's an explanation of what you're seeing in the video: The game view is on the left. This is what the player sees. On the right we have a bird's eye view courtesy of Unity's Scene View. Note that the game uses a true turn-based system. Enemies won't perform an action until the player does. In the video it appears that the enemies sometimes take multiple turns, but I'm actually skipping my turn via keypresses in those cases. I guess I should also mention that if an enemy turns to face a new direction, it ends their turn, but the player can turn as many times as they want for free. I might change this in the future, depending on whether or not this becomes an 'unfair' thing to be able to do and tilts the odds too much in the player's favor. The blue overlay you see is the walkable area of Unity's NavMesh. You'll notice that when an enemy enters an attack state, it will carve out the square that it occupies, making it non-walkable so that other enemies avoid that cell appropriately. I had to do it this way because, although Unity's NavMeshAgents will avoid one another if they're in control of movement, they don't actually take into account other NavMeshAgents when they calculate the path, and since I'm manually moving my enemies, I needed a bit more customization. You'll also probably notice that some of the skeleton's animations are a bit off--the attack in particular. Unfortunately, I couldn't allow the animations to apply root motion as it interfered with my grid based movement, and as a result, some of the animations are a bit wonky. This was a purchased asset, which I'm still happy with, but if everything goes according to plan, hopefully I'll be able to spend some money to have the animations updated to align with my grid. Anyhow--that's pretty much it for now. I think my next focus will be on starting my inventory system. Looting, buying and selling are going to be a core gameplay component, so I'm going to have to get it right.
  15. Weekly update #7

      We are also using Unity's Canvas system. The GUI system we have written is based on the legacy version of Unitys GUI system (the one you had to program). We are using this system only for things like showing off items names in the nature, creating helpful overlay features for e.g. interactable stuff - doors, vehicles, etc.   We have written our own just to expand it with things such as draw distance (when the player is near an object the GUI element gets drew), and it doesn't take so much performance like the legacy GUI system - it uses one OnGUI call for each GUI element.   Just a thought, but what about attaching a canvas to the items you want to display text for in the world and setting them to World Space instead of Screen Space?