Wednesday, August 19, 2015

August 2015

A tiny little update.

We are continuing to work on the server.

Liam's doing Quest translation / quest stuff.
Ane's doing magic everywhere.

Still looking for more developers.


Friday, June 5, 2015

May 2015

Hi everyone,

Ane2 and myself have been working on splitting the server up into having zones and world in their own Child processes.

It should make the server run faster and with less lag for each zone :).

We are now back in world on this new code and hope to finish migrating all of the previous features we have before implementing the monster spawns, AI and then anything else new.

We have a need for some people to help with the translations.
Previously the Korean text on our sheets has been gibberish (the encoding was wrong duh!)
So I have created CSV files with the text encoded properly.

What we need people to help us with is updating all of the bad text with the new text that makes sense.
And if possible translating it. Either with the help of google translate or just personal experience with the item/monster/npc.

It requires familiarity with spreadsheet software (google sheets in this case and the ability to look at things see the corrupted text and copy paste the clean text over it.)


Anyone keen? Contact us on gitter. https://gitter.im/LiamKarlMitchell/InfiniteSky


We did get some donations recently, thanks for that :) it helped to cover the cost of a mesh simplification program that we managed to run the dumps of the game maps through. So that means our AI can navigate on the maps a lot more efficiently and faster than would be possible otherwise. (Without coding a solution to do the same simplifications with the polygons we reduced them without introducing errors in the map topology and retained the edges.)

Ane2 has coded the navigation and we hope to implement it in the game world soon.


Thank you for your support.

Saturday, April 25, 2015

April 2015 Update


We are looking at improving the core of the server to have child processes for each zone.

This will involve a lot of different parts of the server.

I am thinking of making a diagram showing how all of this will work together before development is started.
  • winston for logging
  • child processes 1 for each zone, 1 for login 1 for world (basically to decide which zone to chuck you in)
  • mongoose_rpc for rpc between child processes. (Backup option is https://github.com/c9/smith via stdio and stdout pipes if possible since child and master processes already have those)
  • vmscript needs to be modified to decouple file watching from the vm script enviroments.
  • file watching for config or script changes, needs to be done on the parent of the server ( Example world watches for changes in scripts / packets that zones use ) (Login manages its self as theres only 1 login server)
  • handle login/zone change must be improved for this new design, character would have to be saved/loaded from db accordingly.
  • world server should maintain a list of which character is in what zone and the accounts that are online
  • login server should know the accounts that are online and if they are on world or not?
  • world should keep track of party and guild members, if they are online and what zone they are in.
  • gm commands that go across server need to be improved to message via RPC to world.
  • 0x54 announcement packet should have a way to construct it as necessary per map/announcement.
  • map scripts should have an init and way to start/stop and set timers.
  • scheduling should enable events to be emitted at a certain date/time (repeating etc) to manage things such as Nangi track every hour etc. https://github.com/LiamKarlMitchell/InfiniteSky/issues/134
  • jsdoc3 should be used for comments/documentation maybe we can get this to work like npm run doc or something?
  • should we invest in a testing framework? anyone want to write tests?

Anything else I am forgetting?
Come chat with us here: https://gitter.im/LiamKarlMitchell/InfiniteSky


These improvements will take a while but well worth it, we don't want the AI for monsters to lag the entire server, or when the server is heavily populated to have it lag up for everyone when we can avoid that by a better design.


Out of this we also hope for code documentation, cleaner easier to read code and a better installation guide.
And possibly plans for the launcher to actually be use-able it still needs to be coded to get updates from github releases.


We have also started a Wiki for the project here: https://github.com/LiamKarlMitchell/InfiniteSky/wiki
@hobomchobo has found out more about the header prepended to the dds textures in the games .IMG files so we may have a more reliable way to improve game translations/gui/visual things. Maybe even HD textures in the future.

@ane2 has been working on the path finding which monsters will use to walk / chase players around the map.

@liamkarlmitchell has been investigating this stuff^, capturing more packets and looking into how nangi track works :P. Oh and improving the dll to have its dev keys only work on the focused window.

@Retain94 has been figuring out packets for some things. Trader item shop (where players enter items to sell), 0x54 an announcement packet which is responsible for many things. And he is now looking at the Nangi race track packet for having the cats run around the track.


We did get some item use packets for various things and have a list of ones that need to be implemented thanks to @Retain94, @Zodrag @credmann15 and a few others.
https://github.com/LiamKarlMitchell/InfiniteSky/issues/157

Some issues we currently have to consider/fix are:
  • Translation not loading correctly for some things. Need to figure out why and fix it.
    https://github.com/LiamKarlMitchell/InfiniteSky/issues/3
  • Translation reported not working on windows 8 for the dll.
    https://github.com/LiamKarlMitchell/InfiniteSky/issues/151
  • Ensure that enchant.js has the enchanting formular implemented correctly.
    https://github.com/LiamKarlMitchell/InfiniteSky/issues/158 we recently made a spreadsheet containing the formular.
  • Fix zonechange back to town map eg walking through portal on Nangi track
    It loads the town map visually but server side your still on the 119/previous map.
  • Code in use able items/effects.
    https://github.com/LiamKarlMitchell/InfiniteSky/issues/149
    https://github.com/LiamKarlMitchell/InfiniteSky/issues/157
  • Fix dice roll game when loosing its not taking money away if you lose.
    https://github.com/LiamKarlMitchell/InfiniteSky/issues/148
  • Nangi Race Track
    https://github.com/LiamKarlMitchell/InfiniteSky/issues/119
  • Ensuring guild functionality works as expected, trade shop etc. (Emblems are more tricky it will require us setting up an FTP server or rewriting how emblems are uploaded/downloaded)
    https://github.com/LiamKarlMitchell/InfiniteSky/issues/139
  • Implement the Pin System (No big deal really)
  • Anyone good with maths/formulars? Need to figure out a damage formula for suitable monsters and npc. (So we can have attacking doing propper damages)
    https://github.com/LiamKarlMitchell/InfiniteSky/issues/93
  • Find a way to automatically get the WAN ip when starting the server, could be scheduled to work/enabled in a config. (Ideally it would ask a server on the internet for its ip)
  • Get attack animations working better so you cant just click rapidly to attack someone every time.
    There should be a delay.
    https://github.com/LiamKarlMitchell/InfiniteSky/issues/63
  • Make a better guide for setting up server/simplify setting up server.
  • Fix some problems with duel.

More can be found here: https://github.com/LiamKarlMitchell/InfiniteSky/issues

Help on these things it would be appreciated.

If you are interested in helping the project but you cant do any of the following: Programming, Sharing information, improving translations, graphics editing, launcher development (web app dev etc), logging spawn details or capturing and figuring out packets.

Then please consider donating to help the project, who knows maybe we can buy a big bag of Coffee for all our developers eh?




Or we could get some cash points in game and figure out how the XP pots and protection charms work maybe even character transfer scrolls etc.


Cheers,

Friday, March 20, 2015

Skills working visually and new Launcher Design.


Ane2 has skills visually working.
That is we can now run and jump etc.

And we have a new Launcher design by Epicws.



It is currently being made into some use able software that could patch the files to keep up to date.

I made a video that shows of Skills and Launcher quickly. https://www.youtube.com/watch?v=d04nynhhc6k


Thursday, March 5, 2015

A chat room for Developers and people interested in helping.

Hi Everyone,

So with the feedback from the last few posts I have noticed the comments section is not a very nice place to chat about things.

So I have opened up a gitter chat room which can be found here: https://gitter.im/LiamKarlMitchell/InfiniteSky

This room should be used for people interested in developing & designing the server, tools, launcher etc.

It is not for asking for news updates or when the server will be finished. (As you know I cant very well estimate when we will be done)


I would also like to say we have another developer joining us (makes 3)
Going to be going over the project with him on the weekend to get him some knowledge of its workings.


So anyone wanting to discuss features, bugs, launcher graphics, website design etc.
Please head on over to the chat.

If I am not in the chat, I shouldn't be far off.

However please keep it free of spam.


Cheers,

Friday, February 27, 2015

Coding in monster ai & quad tree updates.

Well it's the weekend :)



Time to attempt to put in this ai and quad tree code I have been working on woot woot!


In other news my cousin and I started on the launcher. (Hes learning css html js jquery nodejs node webkit) *hes beginner*

The basic design goes something like this:



The launcher will download multiple patches in a go with a configurable amount at once.
For example if you have to patch your game from version 4 to 10 it would start downloads 5 6 7 8 all at the same time. When one of them finishes if it is the next number eg 5 then it is installed and the next number to download if any stats downloading. When a patch is installed it checks if the next number up finished downloading if so it installs that to. So patching the game should be quite fast compared to the old games launcher.

Since we have not figured out how to add more servers in game, we would like to add a server selection option in the Options dialog. (Which pops up when you click on the options button)

It would show servers, if they are online how many players etc the ping.

It looks crappy because I made it in windows 7 mspaint. And also I suck at user interface design, if anyone wants to design something better go ahead!.


Anyway here is a screenshot of what the launcher looks like so far:


We are just using bright colors to debug the areas they are in so we could position them as we wanted.
Pretty good for a few hours for someone who has never coded this sort of stuff before eh?


If you want to learn jQuery I recommend http://try.jquery.com
If you want to learn about Node Webkit there is a nice short video series here: http://nodehead.com/node-webkit-introduction-16/


Also Im going to try to eat these, looked interesting.

Monday, February 23, 2015

Server Setup Guide and Spawn System Logger coming soon.

Hey Everyone,


Thanks for your continued patience we know this project takes forever but it is what it is.

We really need more developers. Sigh,

Blog Post in short "New server setup guide and way to log spawn information coming soon", "My HDD Died :(", "Monster AI will be added to the server this weekend."


New Setup Guide coming soon

It has been brought to our attention that it is near impossible for anyone who is just starting out with server development to setup the server and game without Liams' help.

So we plan to bring out a better guide for setting up the server soon.

We have csv files to translate monster,npc skill quest, item names/descriptions so the translation files that are on the blog are no longer required for the text.

However some of the game GUI would still be in Korean so we will have to identify these.

A new project repository will be created to house all of the client side parts of the project, which could be downloaded as a zip and put into the Game Directory.

The Launcher and DLL will also be in this repository.


I may also write an auto configure command which will help greatly in getting new users up and running. (It would get the WAN IP as well as your local IP for the config file)


----

Spawn System Logger coming soon

Well I attempted a logger way back to grab monster and npc spawns, whilst it did the job we did end up with some corrupted / bad information possibly due to the code that got the current ZoneID being erroneous/not thread safe.

I am going to migrate the spawn information from files in the data directory to the mongodb database for easier management in the future.

Import and Export commands will be provided also.

The new logger would be an option set in the dll and a plugin to the current server. (Maybe it could be ran stand alone also)

The server part would listen on UDP for incoming packets.

The packets would contain the following information and would be sent whenever a packet for monster or npc info is received from the server.

Username, ZoneID, UniqueID1, UniqueID2, ID, X, Y, Z, Direction

This will allow us to build up a collection of  possible spawn points in our mongodb which can then be graphed by the server side app and possibly grouped into spawn regions.

The collection will be broken up into two parts.

LoggedInformation and InUseInformation

InUse would be monsters/npc that are spawned on the server.
LoggedInformation would just be used for the logging and would still have to be verified to be put into the server.

We will release instructions for how people could help us out in collecting this information, and would probably only allow those we can trust to help us.

Those interested in helping to log spawns (again) please email me at liamkarlmitchell+spawns@gmail.com with your contact details and character level and clan on the real server.


----

In Other News!
I am happy with my tests on the AI implementation so I will possibly put them into the server code this weekend. Hopefully this implementation won't lag like the last one or have random bugs where all the monsters seemingly wander off into the distance.

You can see example of the monsters moving here: http://codepen.io/LiamKarlMitchell/pen/raxRKq

Try adding a small or ranged using the drop down and button.
Middle mouse button down changes the query and spawn circle to the mouse position.
Try different combinations, to see the results of combat press F12 and look  in the console.

My 3TB hard drive died, so I have to format my new hard drive and set things up again bleh!. (Don't worry I didn't lose the project as its on github ^_^)

Use able skills have had a little more work done on it.


Please let me know if your able to help out with collecting spawn information.

Sunday, January 18, 2015

How to make the AI walk around seemingly random but with nice constraints.

The monsters in our server are kinda stupid.
(Yeah we had an AI in the past but not a lot of thought was put into it, it turned out buggy/laggy and had weird problems).
Most notable all monsters walking towards a point on the map that is way off in the distance.

I aim to fix that sort of problem.

Needed a way to get random numbers within a range but preferring certain ranges over others
Such as walk a distance of between 70 and 120 preferable to a distance of 30-50.
(But still allowing to walk a short distance randomly.)

If anyone is coder/math person what are your thoughts on this, ignoring how bad Math.random is,
( It does not go all the way to 1 so you could never get 100 by doing Math.random() * 100 )

I have not tested if this is correct yet just written it up might do some charts/graphs later to verify.

http://codepen.io/LiamKarlMitchell/pen/QwvyJy


The idea for using this is that monsters that roam around will prefer to wander in the existing direction or turn slightly.

That they will prefer to walk medium to short distances over long.

And then a constraint later to keep them walking around the center of their spawn area/roaming within bounds.


We could configure this to be closer towards where they exited the region, tweaking will be needed.


Areas we spawn monsters in can be considered either points or rectangles.
They are spawned at a point we define (things like guardian stones some boss etc) or within a rectangular region.

If spawned at a defined point we would expect the monster to not roam.

If spawned within a rectangle we would expect the monster to roam within that rectangle, possibly allowed to go slightly outside up to 50 units (could be configurable in config).


The idea is that this kind of movement would let monsters roam around close to their spawned area (you will notice this in real server as a grouped area they spawn in I think this is most noticeable in underground/caves where spawn count is high and re spawn time is low)



When a monster is attacking a target or chasing it will be allowed to roam outside of its area.
If it looses sight of target for more than 10 seconds (should be configurable) it should de spawn and re spawn within its area or chosen point.


You can see example of the monsters moving like this here: http://codepen.io/LiamKarlMitchell/pen/raxRKq

Try adding a small or ranged using the drop down and button.
Middle mouse button down changes the query and spawn circle to the mouse position.
Try different combinations, to see the results of combat press F12 and look  in the console.


Thursday, January 15, 2015

QuadTree improvements.

If you are not a developer this might not make sense to you, just think of it as something important for a good gaming experience and it will keep track of objects in game (monsters, npc, player).

I have been working on improving the QuadTree implementation the server uses so that we can have monsters with AI to fight with.

Quad Tree can be viewed here: http://codepen.io/LiamKarlMitchell/pen/raxRKq

The query region shown in blue now picks up nodes (Game objects) that are just on the edge of the circle as well as outside it but intersecting.

Empty leafs that are no longer fill and have children leafs with nothing in them and so on are removed.

An option enables us to have nodes outside of the created quad tree regions. We were having problems not knowing the full sizes/positions of the maps just yet where players/monsters/npc/item could go outside the area and be removed from the world which caused problems. So that will be fixed soon.

A getByNodeID method allows us to find 1 or more nodes by id.

Improvements that could be made:
A function could be made to query back up the tree from a node, to find Nodes by ID assuming its close first this would speed up trade, duel, attacking etc any interaction that is in close proximity between two game objects.

Adding AI manager, I hope to work on having the monsters attack, walk, agro, die next.

Adding events for on enter/onleave + sensors. (Basically querys that are checked after each node update and could be nodes themselves) although this could be unneeded and would slow down.

Migrate the rest of the functions in the server for object/location lookups to use the quadtree.
For instance we have functions that send an event to all connected clients, that will benefit speed wise from using the tree. Such as updating player action/location, sending a chat message in normal chat, dropping item, monster action/state, npc action/state, duel packets.


Happy New Year btw,