Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

Games The Kingdom of Galanor, Playtest Available

Discussion in 'Projects In Progress' started by Munchy2007, May 22, 2018.

  1. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    ------------------------------------------------------------------------------
    [Update: 30-03-2021]
    I'm excited to announce that the the first phase of public play testing for Kingdom Of Galanor has commenced.

    You can request access to the play test by visiting the Steam store page and clicking on the 'Request Access' button here https://store.steampowered.com/.../The_Kingdom_of_Galanor/
    -----------------------------------------------------------------------------

    Earlier this year we started work on a multiplayer RPG game, The Kingdom of Galanor and have recently reached the point that we can start doing some testing of network code.

    We think we will probably use PUN, partly because of our familiarity with it already and partly because of the automatic host migration, because we are opting for player hosted rooms rather than dedicated servers.

    In this test (video below, showing two of the clients) we conduct a 20 player test of our latest player (and pets) transform and animation synchronisation code and interest management; With 20CCU split roughly evenly between 2 maps it resulted in a maximum of only 116 msg/s and about 12mb data per hour. (The data will be optimised further).

    The test itself was quite busy in terms of constant player movement, and in practise I think the network traffic would probably be lower than the test indicated. Our aim is to be able to support 32 players per game (room) and at the moment it looks like we are on course to be able to fit that into the room limit of 500 msg/s limit imposed by PUN.

    We are also well into the development of the quests, combat and work skills/production systems and I'll post updates on those once we've got something to show.

    The intention is that this will be a PC only game and will be released on Steam.

    Facebook Page
    Update 24-05-2021 New captial city, Elendor
    Elendor 1.png

    Update 08-02-2021 Equippable items


    Update: 11-01-2021 Latest Alpha game play footage


    Update: 17-08-2020 Alpha game video


    Update: 15-04-2019 Early look at the starting zone for new characters


    Update: 21-10-2018 Alpha test UI demonstration, draggable windows etc.


    Update: 06-09-2018 Alpha test of the turn-based combat system.
    https://youtu.be/vIy4RsInptI

    Update: 07-07-2018 More recent video of the game progress
    https://youtu.be/2hQ3oYw2V-k

    First video - early alpha test of networking code
    https://youtu.be/LsiqIJm6NHU
     
    Last edited: May 24, 2021
  2. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    Continuing to develop and improve the networking code, we've now implemented the basics of a party system, basic network synchronised mob wandering and aggro behaviour, and scene switching for the what will be a turn based combat system.

    One of the early problems faced was with how to approach handling the mobs for each map; we needed them to be network aware because we wanted to use RPCs to control their behaviour and be synchronized between clients, which meant that we couldn't just place prefabs in the scene. So Initially we put placeholder gameobjects in the map scene which contained a script that used InstantiateSceneObject() to create the actual mob when the map loaded.

    This approach presented a number of problems, the following being the most annoying:-
    1. Firstly the mobs were spawned on all clients, irrespective of whether the client was on the map that the mobs belong to; Which meant that we had to add logic to hide the mobs on clients that were on a different map.
    2. It also meant that we were sending unnecessary instantiation messages to some clients, therefore wasting bandwidth.
    3. On top of this because of the way RPCs work as standard, the control RPCs for the mobs were also sent to every client, meaning we were wasting more bandwidth and also had to filter them out for clients on other maps.
    4. Furthermore, when a map was entered for the first time in any session there was a noticeable hitch on all clients as all the mobs were created.
    5. Finally, we had to have some way to remove all the mobs once there were no more players in the map.
    After playing around with this for a while it became clear that it was going to be unwieldy and inefficient, so we decided to rethink our approach from the ground up.

    After a bit more experimentation, we decided to that we wouldn't instantiate the mobs as scene objects, and we wouldn't give them a PhotonView component. Then rather than having a mob spawner placeholder in the map we would just place the actual mob gameobject itself.

    This neatly dealt with problems 1,2,3 and 4 from the above list, however we now need a way for the mobs to synchronize over the network. Which is where PhotonNetwork.RaiseEvent comes into its own. Using RaiseEvent we can specify exactly which clients get sent messages, so we can send messages only to those clients on the same map.

    We also added a script to the mobs which listens for RaiseEvent messages and filters the messages by the EventCode, so they can take the appropriate action based on the message received. We also needed a way to give each mob a unique identifier (think PhotonView.viewID) that will always be the same for the corresponding mob on all clients, but this turned out to be quite straightforward, by using the build index of the map they are on (multiplied by 100,000) added to the child index of the mob. This gives us more than enough mob unique IDs for any given map and means that if we send the ID in the network message, the receiving mob can tell if the message is targeted at it or not.

    So problem 5 is also now dealt with, as the mobs are created and destroyed along with the map as players leave and enter it, which has no effect on other clients.

    We also created a couple of helper classes to give us handy functions to send messages to players (all players, other players, only players in the same map, etc.).

    Now there was another part of the puzzle to be solved. We needed a way to decide which client should be responsible for controlling the mobs in the map. It can't just be the current MasterClient, because the MasterClient won't have any knowledge of mobs in maps that it isn't itself on. So we devised a method to have each map maintain its own 'MapMasterClient' which is automatically updated as players enter and leave maps, and it is this client that will control the mobs for that map.

    With the addition of a couple of network messages to invoke functions to synchronize the state of all the mobs when players first enter a map the puzzle was complete. We now have a system that makes it easy to control different sets of mobs for different clients, depending on which map they are on, and which also minimizes the amount of network traffic required to handle this.

    As a direct result of this, we've take the decision to avoid using RPCs for anything in the game, and instead implement all network communication using RaiseEvent. Also the only thing we will use PhotonNetwork.Instantiate for is the player gameobject.

    With 20 clients connected, all the players on the same map and moving around constantly along with the mob wandering logic, we are still only at around 250 messages per second per room, which is within our target. In practice most players aren't moving constantly and the party system will reduce movement data even further for clients in a party, but we need to allow for worst case scenarios.

    We're still a way off having a playable version, but things are progressing well and as soon as we have something available for testing I'll post an update here.
     
    Last edited: Jun 28, 2018
  3. Liminal-Ridges

    Liminal-Ridges

    Joined:
    Oct 21, 2015
    Posts:
    255
    Hey, hope the best for your project. How do you calculate the msg/s and setup the pun accordinatly?
     
  4. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    Thanks VavylonaEntertainment :)

    The msg/s is taken from data shown on the analytics page of the PUN dashboard for the game. I'm not sure what you mean with the second part of your question.
     
  5. Liminal-Ridges

    Liminal-Ridges

    Joined:
    Oct 21, 2015
    Posts:
    255
    My mistake, confused it with Unity Networking. I meant what things do you take in mind when optimizing the network traffic?
     
  6. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    The main things are :-
    • How often data is sent - make it as infrequent as possible without compromising synchronization.
    • Send unreliable messages wherever suitable.
    • Restrict how many clients messages are sent to (for example in our game we don't send updates to players in other maps. Later on down the line we may further restrict this based on proximity.)
    • Be aware of the size of any data that we transmit, so for example we might send a byte instead of an int, and mostly avoid using strings as identifiers. Where it makes sense and doesn't compromise performance we would also consider compressing the data before sending it.
    • When deciding what data to transmit, check first if it can be reasonably easily calculated on the clients instead, because if it can, you don't need to send it in the RPC/Event.
     
    Liminal-Ridges likes this.
  7. Liminal-Ridges

    Liminal-Ridges

    Joined:
    Oct 21, 2015
    Posts:
    255
    My next question is about your last dot. Would you throw an projectile and let it be with its rigidbody on both ends, or control it on the client that spawned it and sync it at all ends?
     
  8. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    It depends on the circumstances, if it's something like a missile that has a straight trajectory, I would probably just spawn it on all the clients and provide the aim and force needed to move it and then let the physics on each PC deal with moving it. However, where the movement is more erratic, say like a bouncy grenade I would probably track it's transform and update it periodically with some kind of smoothing on the remote clients.

    In fairness this sort of thing doesn't really come up much in the type of network games we've made, as we haven't made any fast paced FPS.
     
    Liminal-Ridges likes this.
  9. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    A few screenshots from a very early build, not what the final product graphics will be obviously, but gives a very rough idea of the style of game we are aiming for.

    Image 1.png
    Image 2.png
    Image 3.png

    Image 4.png
    Image 5.png
     
    Sluggy likes this.
  10. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    A couple more screenshots of the early implementation of the work skills system.

    Image 6.png

    Image 7.png
     
  11. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    Have been tidying up the network code that handles parties and combat, particularly to make sure that unexpected disconnects are handled gracefully and don't result in errors and null reference exceptions for the remaining clients.

    The party system is substantially complete and is working exactly as planned. The combat system is partially implemented, with passive and aggressive mob behaviour.

    When we originally started developing this we had player stats network synchronised, so any time any player had a stat update (HP,MP, DEX etc.) it was broadcast to every connected client, which created unnecessary network traffic. But it became clear that most of the time access to remote client stats wasn't required, and it would be more efficient to have stats on the local client only and just send the stats to any interested clients on the occasion they are required.

    We currently have a placeholder scene in place for combat, and in that we can see that the party leader correctly receives data from all players in the party, which it will use to calculate the result of the combat, and then transmit that to the other party members as and when needed.

    Hopefully the next update should have a working implementation of the turn based combat system.

    Players are currently only sending about 1 update a second to synchronise position and rotation (packed into one vector3), which although doesn't result in absolutely perfect synchronisation is easily good enough for this type of game.

    Edit: Forgot to mention have also been experimenting with a shader based random screen transition system.

     
    Last edited: Jul 7, 2018
  12. InstinctDevs

    InstinctDevs

    Joined:
    Jul 6, 2018
    Posts:
    105
    I am liking the look of your project. Can you give us some detail about pricing. My personal suggestion for an rpg like this :- Make it free and add microtransactions. The free aspect will attract a lot of players because they will be able to try it. And this is a kimd of game where lot of people buy in game items.P.s any beta program available?? Thanks.
     
  13. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    Hi @InstinctDevs, thanks for the feedback, much appreciated :)

    Regarding pricing, we are thinking much along the same lines as you, either free or very cheap with vanity item micro transactions. We're undecided at present on how we feel about having progression items available for purchase, but we'll be open to feedback on that aspect.

    We are definitely on the lookout for anyone that's interested in helping with testing and we'll be sure to announce it on here once we are nearing the point we have a playable version and have some closed beta keys to hand out. It's highly likely that this won't be until close to the end of the year though.

    Once again, thanks for you're interest :)
     
  14. InstinctDevs

    InstinctDevs

    Joined:
    Jul 6, 2018
    Posts:
    105
    @ Munchy2007 :) Looking forward to futher development!
     
    Munchy2007 likes this.
  15. InstinctDevs

    InstinctDevs

    Joined:
    Jul 6, 2018
    Posts:
    105
    Can you give us an idea when to expect a beta and global release. Thanks!
     
  16. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    `Hi @InstinctDevs, sorry, at this stage of the development we're not in a position to set those dates yet. I'll post dates once we are comfortable that they can be met. :)
     
  17. InstinctDevs

    InstinctDevs

    Joined:
    Jul 6, 2018
    Posts:
    105
    Sure @Munchy2007 it's your game take your time. Actually its better this way so the game can get more development time and be better.
     
    Munchy2007 likes this.
  18. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    I thought it was about time I posted an update :)

    We've been working on a lot of 'under the hood' stuff, making sure the core systems are as stable and maintainable as possible. The worst thing is finding out sometime down the line that some bad early design decisions have come back to haunt you.

    One of the first obvious hurdles we had to overcome was how to deal with teleports. Initially, we had a simple design, whereby the teleport gameobject contained a component that had a reference to a destination gameobject and when activated it just moved the player to the destination location.

    All well and good, except that as we use a different scene for each map we ran into the issue that as cross scene references aren't allowed we couldn't store the reference to the destination in the teleport if the destination wasn't in the same map.

    So a slight design change meant we stored the name of the destination gameobject in the teleport along with the scene path as strings and then when activated, the teleport loads the new scene (if necessary) and once the scene is loaded it searches for the destination gameobject by name and then moves the player to its location.

    Job done, or was it? With the number of teleports that will eventually be in the game, this would soon become a nightmare to maintain. Anything that relies on manual entry of strings to make references for anything other than a few objects isn't going to cut it.

    In addition to that, we found that although this worked acceptably in a single player environment once we tried it networked we saw 'warping' of the player character because it was at its old location from the previous map for a few frames whilst the teleport located the destination and sent the new location over the network. So we fixed this by adding the location and rotation of the destination as properties of the teleport and sending them along with the scene change message, so all clients could update to the new position instantly.

    This, however, meant that it was even more difficult to maintain the link between teleports and destinations and was quite frankly turning into a nightmare. So it was pretty obvious that a rethink was required.

    After a bit of discussion, it was decided to move all teleport logic and data to a singleton manager which would store the information for all the teleports and destinations. Which just left the issue of how to easily get that information into the manager in the first place.

    Custom Editor Window to the rescue!

    We designed a custom editor that enables us to create/edit and delete teleports directly in scenes and it automatically saves the info for each teleport/destination into an asset which is loaded into the teleport manager at runtime. This has changed the task of maintenance from a manual task to visual design. We can quickly locate and update teleports and destination maps/positions and the new information is automatically saved. We can also automatically check for orphaned teleport and destination objects.

    Now when a teleport gameobject is activated at runtime, it just queries the manager for its destination information and voila!

    Quick snap of the editor in action, and that's it for this update. See you again soon :)

    Portal Editor.png
     
    Last edited: Aug 22, 2018
  19. fantome

    fantome

    Joined:
    Nov 28, 2012
    Posts:
    6
    very cool looking :) if you need some voice over or some basic sound effects let me know would love to record a few for you to help out.
     
  20. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    Hi fantome, thanks very much that would be very much appreciated, I'll send you a PM to discuss things when we're ready to start looking at the sound in more detail :)
     
  21. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    As mentioned in an earlier post, we've been working on the turn based combat system. Here's a video of it in action in its current state.



    Currently only basic melee attacks have been implemented, and the attack priority is only sorted by attacker type (i.e. mob, player, pet). Eventually the attack order will also be governed by dexterity and spell/skill type.

    We had a few headaches synchronising the attack animations between clients; programming multiplayer is such a PITA compared with single player, but it's a nice feeling when it comes together :)

    There's still bugs to be ironed out, mainly relating to situations where players unexpectedly disconnect during combat, but they are few and far between now as we've dealt with the majority and in general it's pretty stable.

    We've also decided on a title for the game, The Kingdom of Galanor.

    As always, any comments, suggestions, criticisms are always welcome.
     
  22. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    Implemented single and multi-target caster attacks, here's a quick video demonstration.

     
  23. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    It's been just over a month since my last update and there's been a fair bit of progress during that time.

    The combat system feature list is pretty much complete now.
    • It supports melee and cast spells to single and multiple targets, which can cause damage or healing. Healing can be targeted at the caster and other targets.
    • In combat and out of combat skills are supported.
    • Skills can be set to allow particular target types e.g. Friendly targets, enemy targets or self only.
    • The attack system is generic and the same code is reused for player, pet and mob attacks.
    • As well as attacks, buffs can be cast, which can increase any the available stats for a configurable number of rounds.
    • Buffs can also apply heal over time and mana recovery over time during combat.
    • Skills can be set to be available in combat only, out of combat only, and both.
    • Cooldown system, mainly for out of combat casting. Cooldown persists between sessions in real time.
    Out of combat heal
    Image 2.png

    Skills can be dragged onto the skill bar and arranged in the ways that best suits you.

    Image 5.png

    We've also done a fair bit of work on the underlying system for handling in game items and we've got a flexible system in place to control all the various item attributes that things can have (name, icon, weight, description, usage effects etc. etc.)

    We've handled this using mainly composition and interfaces, as we felt it gives us greater flexibility and cleaner code when compared to using inheritance.

    The inventory system is 90% finished too and although it was designed primarily to handle the player's collection of items, the same core code will be used to handle anything that needs to work with game items e.g. the player loadout.
    Weapons and armour can have stat bonuses in multiple stats and consumable items can be used to heal/recover mana or apply stat buffs that have a limited duration.

    Inventory and player loadout (WIP)
    Image 3.png

    We've also implemented exp. gain and levelling for both characters and pets and unlocking of skills based on level. Some skills will be unlocked in different ways.

    Levelup!
    Image 4.png
     
  24. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    On level up some stat gains will be allocated by the system and some will be awarded to the player to distribute in whichever way they like.

    Image 6.png

    We've also done a lot of work on the drop system, which allows us to set loot tables for entire areas and also for the mobs themselves. On completion of a successful fight the area and mob loot tables are combined and the drop probabilities are calculated. Specific drops can be limited in quantity and/or made guaranteed drop. Armour and weapon area drops will be generally low quality, whereas boss mob drops will be higher quality with proportionately higher stats.

    Combat result dialog (WIP)
    Image 7.png

    Hopefully we should have a working implementation of the workskills/production system for the next update.

    As always any comments/suggestions are very welcome.
     
    Last edited: Oct 13, 2018
  25. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    The majority of the framework for the professions and manufacturing system is now in place.

    To work, you go the area in which the item you want to gather can be found for basic items, or for advanced items (armour, weapons, potions etc.) you go to the associated building for that profession and then you select the item from the list of products you can currently make/gather and your character starts working.

    You can't perform any other actions on a character whilst it is working, however, you can switch to another character or exit the game and when you come back your work session will have continued while you were away (courtesy of our proprietary, ahem! Temporal Phase Adjustment Technology) and you'll be presented with a report of what you made during that time. However, it can be quite relaxing actually just sitting there and watching it tick away :)

    Typically, low level items can be gathered quite quickly, but higher level items will take considerably longer to produce and may require rare drops as one or more of the ingredients. Whilst lower level items will be available to buy from NPCs higher level items will only be available from mob drops or professions.

    The benefit of making things like armour and weapons yourself is that as your skill in the profession increases you will have a chance to make better quality versions of the items than those that you can gain from mob drops, with better stats and higher durability.

    Image 4.png

    Image 1.png

    Image 3.png
     
    Last edited: Oct 17, 2018
  26. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    Implemented dropping items from your inventory onto the ground. Other players or yourself can pick them up again, and they disappear after 2 minutes. Not yet implemented is a popup window that shows the content when you mouse over the package on the ground.

     
  27. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    Been working on the UI and just finished implementing draggable windows. Here's a quick video demonstrating that, plus some of the other features we've been working on such as the bank and vendor windows.

     
    Last edited: Oct 21, 2018
  28. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    Recursive functions! Arrrrrrrrrrrrrgh! I mean really! Aaaaaaarrrrrrrrrrrrrrggggghhhhhhhhhhh!!

    It's gone now! :)
     
  29. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    KoG is progressing nicely, we added a lot of content over the past month or so. It's now got various types of NPCs, including vendors, quest NPCs and professions trainers.

    We've implemented the quest system, which is story driven and supports multiple types of quest objective, including but not limited to talk to/take item to another NPC, kill a number of mobs, kill mobs to collect drops, search for and find collectable items, explore an area, etc. etc. Each quest can have multiple objectives made up of a combination of any of the available objective types.

    Quests can be part of a longer chain, and some are repeatable daily.

    We've implemented a lot more professions, there's currently 17 different professions with more to come. All of the useful items in the game (potions, food, armour weapons) can be made, and as the profession skill increases, things like armour and weapons will have a chance to be better quality, with better stats.

    Some more screenshots...

    Exploring the local caverns
    Image 1.png

    I wonder what's on the other side of this portal...
    Image 2.png

    Playing with my new combat skill
    Image 3.png

    NPCs with quests
    Image 4.png

    Quest dialogue example
    Image 6.png
     
  30. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    3 more screenshots...

    Professions UI Image 7.png

    Making myself some mana pots Image 8.png

    WIP Room interior Image 5.png
     
  31. tasadar

    tasadar

    Joined:
    Nov 23, 2010
    Posts:
    290
    looking nice and slick, keep it up ;)
     
    Munchy2007 likes this.
  32. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    Thanks @tasadar :)
     
  33. impheris

    impheris

    Joined:
    Dec 30, 2009
    Posts:
    1,622
    looks cool, but i think it needs more brigthness a little bit and if you add some bloom, i think it could look more fanciful... try it
     
    Munchy2007 likes this.
  34. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    Hi @impheris thanks for the feedback, much appreciated :)

    The current screenshots are of test maps only, which we've quickly put together just to have somewhere to test the various game mechanics and as such we haven't spent time making them look as good as we would eventually want.

    The cave maps are intentionally dark however, but I agree that bloom would improve the appearance so I'll add some for the next update.
     
  35. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    Finished the major functionality of the quest editing system, it can add and remove quests and quest chains, rename them, assign starter and turn-in NPCs, add/remove/configure objectives and NPC set dialogue text. References to linked quests are automatically updated when quests are renamed or deleted.

    The entire quest structure is saved as a binary asset which is loaded at run time by the QuestManager.

    Still to be added are functions for filtering and searching quests by name, zone, starter/turn-in NPC, objective type etc. etc. This will become increasingly necessary as the amount of quests in the game increases.

    Image 1.png
     
  36. II_Spoon_II

    II_Spoon_II

    Joined:
    Jun 16, 2018
    Posts:
    180
    Loving your game, looks really promissing!

    I have a couple of questions if you don't mind answering:

    1-Will it offer a unique gameplay from other RPGs? I know it's hard to figure out new things cause there is always the probability they won't work, but I am just curious x)

    2-How many members did you guys need to achieve that? I am asking just to know/rate the complexity of making such a large scale game. (I am not intending to do any RPG or game that size since I am a solo and I don't have enough experience for such games, especially networking part)

    I would suggest also suggest as a player to try to minimize the complexity of the game, by that I mean not having too many types of ressources, items and stuff so that the player enjoys the game and won't feel like he has to do boring stuff to get those items (ofc a little bit of that may work to encourage in-game purchases but just not regurarly)

    Good look, wil keep an eye on the project x)
     
  37. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    Thanks @II_Spoon_II , pleased to hear you like the look of our game.

    In truth, these days it's difficult to come up with something truly original whilst staying true to the genre, as RPGs have been around in one form or another since the appearance of some of the earliest computers (who here remembers Colossal Cave Adventure?) . However, we do believe that our game offers a combination of features that will make it feel different from other currently available RPGs.

    There's currently only two of us working on this, I've been responsible for 99% of the coding up until now, but a lot can be achieved working 16 hours a day 7 days a week :) Later on though we'll be bringing in a sound artist and 2D/3D artists to help.

    We have a clear idea of all the features we want to implement, however it's highly likely that they won't all be made available for the initial release. An important aspect of the game is the production system and consequently is quite varied, whether this is 'boring' is subjective, but we have mechanics in place which will mean that it can be avoided to a certain extent if preferred, but with incentives that make it worthwhile if you do spend some time on the professions. (Plus the AFK working feature helps.)

    Thanks again for your comments and questions :)
     
    Last edited: Dec 12, 2018
    II_Spoon_II likes this.
  38. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    Had a bit of a wind down for a couple of weeks over Christmas, but since the last post we've tracked down and squished a number of minor bugs, added weapon model switching linked to currently equipped weapon and added a mini-map.
    Image 1.png
     
  39. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    Wow! Didn't realise it had been do long since my last post! Still, there's been a lot of work going on, mainly in relation to custom editors and tools that will help with content creation.

    I've beefed up the NPC Editor so adding NPCs to maps is all done via a custom editor window and their appearance and roles (vendor, trainer, etc. etc) is completely configurable via the editor window and custom inspectors. I've also made it better synchronised with the Quest system, so now any changes to NPCs in scenes will automatically update the quests data to keep everything properly linked and it even prevents accidental deletion of NPCs that are linked to quests.

    I've also given NPCs the ability to patrol and made a waypoint designer for the editor. This presented a bit of a challenge early on, because I used the Handles.PositionHandle method to make it so that I can drag the path nodes in the editor and I wanted to be able to know which handle was currently selected so that I could use that information to do inserts and deletions.

    The problem was that there wasn't an obvious way to know which handle had been clicked on. I trawled through numerous posts and the seemingly best option was to make a note of the waypoint node index when the handle was actually moved, but this wouldn't allow me to click select them (without having to move them), which is what I really wanted.

    However, just as I was about to settle for that I stumbled across this polyline editor on the community wiki http://wiki.unity3d.com/index.php/PolyLineEditor which seemed to be using handles exactly how I wanted, with insert and delete. So a quick root around in the code and I found the answer.

    I do a for next loop of all the nodes in the waypoint array and include this code in the loop.

    Code (CSharp):
    1.            // Get the needed data before the handle
    2.             int controlIDBeforeHandle = GUIUtility.GetControlID(someHashCode, FocusType.Passive);
    3.             bool isEventUsedBeforeHandle = (Event.current.type == EventType.used);
    4.  
    5.  
    6.              // Draw the handle at the position of each node in the waypoint array
    7.  
    8.  
    9.  
    10.             // Get the needed data after the handle
    11.             int controlIDAfterHandle = GUIUtility.GetControlID(someHashCode, FocusType.Passive);
    12.             bool isEventUsedByHandle = !isEventUsedBeforeHandle && (Event.current.type == EventType.used);
    13.             if
    14.              ((controlIDBeforeHandle < GUIUtility.hotControl &&
    15.                GUIUtility.hotControl < controlIDAfterHandle) ||
    16.                isEventUsedByHandle)
    17.             {
    18.                selectedNodeIndex = n; // This gives me the index of the node that is selected
    19.             }
    Which works exactly how I wanted it to. However it would have been nice to have a more obvious way to accomplish this, or at least and example in the Unity docs for the Handles class, as I'm guessing it's probably quite a common requirement when using handles.

    I've also made it so that nodes automatically snap to the terrain surface when created and moved, and it also gives visual feedback at design time if any node is placed in a position that can't be navigated to.

    Here's a couple of images showing the path editor in action.

    Image 4.png

    Valid path, all segments are yellow.
    Image 1.png

    Path with unreachable node, segments become red from the invalid node.
    Image 2.png

    To finish, here's a short video of the village of Fernville which will be the starting area for new characters. Still work in progress, but it should give an idea of how it's going to look eventually.

     
    Last edited: Apr 15, 2019
  40. k1mset

    k1mset

    Joined:
    Dec 4, 2012
    Posts:
    64
    Careful with the name as Galanor is the name of the world that Runescape takes place within.
     
  41. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    Before choosing it I Googled the word Galanor extensively and nothing obvious showed up, and US/EU trademark searches didn't find anything, so I'm not sure why it would be an issue.

    I've never played Runescape, but Google seems to tell me their world is called Gielinor, please correct me if I'm wrong.
     
  42. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    In my last update I forgot to mention the headache I faced trying to save the waypoint data in the NPC custom inspector. As I was working with an array I couldn't use the SerialisedObject system for that part, so I was using Undo.RecordObject, but during testing I found that Undos were causing the array element order to get mixed up.

    It took me a while to discover that I needed to use Undo.RegisterCompleteObjectUndo instead to avoid this happening. Which was great, but then the exact same code that was now working perfectly in my test scene completely failed to save the data in my actual game scenes!

    I spent nearly a day trying to figure this out, until I stumbled across the nugget of information that scene instances of prefabs also need to have PrefabUtility.RecordPrefabInstancePropertyModifications used on them to make sure the changes are saved to the underlying scene object. (My test scene wasn't using an instance of a prefab for the NPC object, unlike my game scenes.)

    There again, the Unity documentation regarding this is either missing completely or not that easy to find. Such a pain!

    Anyway, that aside, I've added extra functionality to the NPC pathing system that now makes it possible to simulate them entering and leaving buildings (or anything in the map for that matter). Waypoints can now be configured to pause the NPC for a given amount of time when reached and optionally hide the NPC when paused, and also optionally warp to the next waypoint.

    Demo video of this (speeded up 6x)


    I haven't made it so that NPCs can actually travel to other maps, because even though it's possible the amount of work involved would far out way the usefulness of it.

    Two update posts in 3 days, I'm on a roll :)
     
    Last edited: Apr 18, 2019
  43. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    Not strictly speaking purely KoG related, but this had been bugging me for a long time now, and it took me a lot of trial and error to figure out why it was happening and how to fix it.

    Basically, the problem I was finding was that sometimes when editing a third party .png or .jpg image and then saving it, the resultant new image suffered from fringing because of the antialiasing of the original image.

    This video, in which I create a composite image from two separate images, demonstrates the issue and one way to overcome it.


    I'm posting this in the hope that it may prove useful to someone else, because, despite quite literally hours of searching on Google I never managed to find an explanation of how to fix this problem.
     
    Last edited: May 5, 2019
  44. AkiraWong89

    AkiraWong89

    Joined:
    Oct 30, 2015
    Posts:
    662
    @Munchy2007
    Except the environment art is very dark, otherwise great job.
    The combat system reminds me Super Mario RPG series.
    The GUI art can still be improve into better, more fantasy.

    The most perfect solution for masking is using Ctrl+Alt+G function.
    Ctrl+Clicking the thumbnail for masking is not 100% perfect.
    Especially when the edge pixel is semi-transparent. (Most of the time it is unless pixel art)
    I also not recommend directly putting PSD inside the project despite Unity supports.
    Save as the format you need so more accurate on graphic control.
     
  45. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    Hi @AkiraWong89, thanks for the feedback :). The environments are still very much work in progress as we are still in the early stages of development, so the final look of the maps should be much better, especially once I get an artist working on them. The same goes for the GUI art, I doubt much if any of this will make it to the final game completely unchanged, but we will keep the overall look and feel as it is now.

    Thanks for the tip re: masking, I'll try that out.

    I agree with this, but I encountered the problem working with assets imported from the store which only came as .png format, and wanted to save the edited versions as .psd so I had more flexibility if I needed to work on them further at a later date.
     
  46. AkiraWong89

    AkiraWong89

    Joined:
    Oct 30, 2015
    Posts:
    662
    No problem. Just learn together...:) Around 7 years ago...
    I initially realize this masking method on PaintTool SAI which is famous for anime drawing.
    All Japanese pro manga artists (Not me!:D) also use that feature, so I wonder if Photoshop...
    Then only realize Photoshop also got this same features, awesome!

    I see. My art packs on the asset store also only provide TGA format.:p
    Did you tried to contact the publisher for source files?

    You can store all your PSD in a folder outside of asset folder so Unity won't sync.
    Then you save as and put the correct format / replace to your project asset folder.
    I have set action shortcut key for that, for example if I wanna save as PNG / TGA etc...
    I just press F2 / F3 and it will automatically save to the desire folder directory. Quite fast too.
     
  47. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    Thanks for the workflow tips again, I'll definitely give that a go.

    I've been considering moving away from Photoshop, a 3D artist friend of mine has been pushing me to start using Fusion, which looks quite good. I like the node based workflow. But I'm not sure I want to spend the time learning how to use a new tool at the moment, when I've got so much work to do with the game.
     
  48. AkiraWong89

    AkiraWong89

    Joined:
    Oct 30, 2015
    Posts:
    662
    Hmm... I never use that before but by watching some YouTube, it looks like SketchUp.
    If that is the case, then Fusion is for fast modeling design purpose about conceptual.
    Not good for game because the model might has lots of problems needed to be fixed.
    Blender is consider very good already for indie developers.

    I suggest focus on the job on your hand first according to you ability and knowledge.
    Plan a release date, no matter how you must publish on that day. Time management.
    Then while fixing problems players mentioned, you can start learning new tools at this moment.
    That way you also got a product finished and might slowly starts generating incomes.
     
  49. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    Regarding Fusion, I'd only be using it for 2d graphics (at least to begin with), I'm not really a 3D modeller myself (nor much of a 2D artist for that matter :p), but on the odd occasion that I do some 3D stuff I do use Blender already.

    I'm not convinced that Fusion is only for conceptual stuff, my friend is a professional 3D artist and uses Fusion (the paid version) for his work projects. I'll double check with him though, in case I misunderstood how he intended it to be used.

    I totally agree with your 2nd point, which is why I'm still using Photoshop :)
     
  50. Munchy2007

    Munchy2007

    Joined:
    Jun 16, 2013
    Posts:
    1,732
    Since my last post I've been working on adding more content to the starting map, most of the buildings are now enterable and have NPCs and some furniture. Still a lot of work to be done to these, at the moment they are still very much WIP like the rest of the game. The buildings which contain profession trainers now all have an NPC that gives a starter quest for that profession once you learn it.

    On the subject of quests, I've done a lot of work on the quest editor to make it easier for me to create, edit and keep track of quests and their different objectives. I've also added more quest objective variations and made it so that mobs and scene objects can be hidden or unhidden based on the status of a quest or quests.

    I've also improved the editor for placing mobs in the scene, so I can now create a polygon area, and in the inspector for it, set the amount of mobs to spawn, which mob, their patrol radius and a few other variables, then hit the 'spawn' button and it will randomly place them within the area drawn. I can manually tweak the positions afterwards if I want, or hit a button to randomly reposition them all again until I get the spread I want. If I decide I want to change mobs, I just drag a different mob definition scriptable object onto the spawner and it automatically updates them all to the new mob. Saves a lot of time when making changes to maps with lots of mobs.

    I've also added a system for defining areas in the map where the different profession resources can be gathered, using a similar editing system as the mobs, by drawing a polygon and then in the inspector setting which items (or profession) can be gathered or performed within it.

    Initially, when designing how the UI would work, I had a design in mind that meant skill bar buttons weren't compatible with inventory items, and I was going to have a special action bar in combat for inventory items (potions, health pots etc.). But I decided that was a bit rubbish, so this week I've been working on making it so that inventory items can be dragged onto the skill bar and used from there (as well as from the inventory).

    This means that as well as being more convenient, they can be used (where allowed) in combat. Luckily this didn't entail as much work as it might have, because even though the skill bar buttons and inventory buttons were different, they both implemented a common UI interface and have generic handling of their contents. So it didn't require too much tinkering to get them to work with each other. Also the combat system, which is used in an out of combat to handle casting skills was also easily adaptable to work with game items. The benefit of this also is that item use can automatically make use of the existing systems for updating stats and displaying cast effects.

    There's also been a lot of tidying up and refactoring of some of the existing code, as I've revisited it to make some of the above changes and realised it could have been better. Found and fixed a few bugs (and probably introduced a few more!), but all in all things are progressing well.

    That's it for now, as always any comments and suggestions are welcome. Also if anyone is interested in being a tester let me know on here or drop me a pm with your contact email and when it's ready I'll send out some Steam keys.

    image3.png

    image4.png

    image5.png

    image2.png

    image6.png
     
    ExDeaDguY and tylerguitar75 like this.