Osinia

    Osinia Devlog #4: Tileset Editor

    Spent today working on the tileset editor and some QOL to keep me sane. At the end of the day, the ugly Tileset Editor is complete enough for general usage.

    For those wondering why the pace is so slow. There is… so many hours in a day, and this is only a one-man dev “team” at the moment. With the under-the-covers backend stuff out of the way, I am working on the developer and content creation tools. Once those are far enough along, I can create content that you, the players, will see in-game. It all takes time.

    Osinia Devlog #3 : Tools for everyone!

    Well, another coding session completed.

    Soooooooo.. Project Management. It can be very useful, especially at work. It can be useful for your personal projects as well. There is something called a dependency chart. It is an upside down tree where you split out the project into components and split those out into dependencies, and so on and so forth. Once everything is broken down, then a very nice MS Project file can be created and timelines for each piece gets created. Once you add times to the smallest components, the software literally accumulates all of the times into the final timeline for the project. It’s really a nice piece of software.

    Too bad I didnt use it for this project.

    -sigh-

    So… While starting to map out the map editor.. I realized I need tile sets … … .. so I created a tile set editor as this game is based on the 4 elements and each tile should align with one element.. … so that is what I was working on. Once that is done, I will be working on the animated tile editor. Up to 1000 frames per animate tile.

    Since each map can be of “unlimited” size, and consists of 4 layers under the player/object layers and 4 layers above. Not including any background or weather layers. I want to make sure that each tile on each layer in each location could be animated. I am thinking of 4 layers below and 4 layers above though that number may change by the time I get serious with the editor.

    That is it for now!

    Osinia Devlog #2: The Tool Shed

    Well, the last few days was working on tools and creating a resource manager. You know how useful a resource manager can be? Loading textures, fonts, music, etc on demand, keeping track of references, all that fun stuff. Very useful when the manager is shared among different projects like the client and tools.

    Speaking of tools..

    I had to build a fricken converter to convert all the graphics into a slightly custom file format in order to store the width and height of sprites and tiles with-in that file. I couldn’t use an image’s property to add custom properties… would have saved a lot of headaches.

    The good part is that it’s an easy 3 line change in the resource manager to load such a change and the rest of the projects don’t need any changes.. yay?

    I am currently working on the map editor. I could have easily used Tiled, and was seriously evaluating it. However, just like my evaluation of existing game engines, it is way more than what I need, then I would have to create a translator between it’s tmx/json file format to one that is more friendly and much quicker to load for my engine.

    It did give me a few ideas, however…

    Eventually, I will need to post screenshots.

    Osinia Devlog #1

    Be warned, a lot of rambling technobabble, and… yuk. Bring coffee.

    You see, I tend to do things the hard way, make mountains out of mole hills, then go back and redo everything from the ground up the right way… or the less wrong way… then redo it again and again until I get it how I like it.

    Much like my approach to everything in life..

    My ultimate goal is an old school 2D MMORPG with grid based movement, old school graphics, with “new” school features. Makes sense, right? This is to be my ultimate, 100% free game that should last well into my retirement and.. hopefully, my death bed. How is that for depressing?

    I have worked for the Gov for decades now. Hoping between COBOL, Natural, Java, Visual Basic 5/6/.Net, and C#. Not to mention some light Database Administration (MSSQL & Oracle), Server Administration (Windows, Solaris), and some server and workstation hardware administration under my belt. So, I have dabbled around a bit over the decades.

    Throughout all of the above, I have settled for a little bit of everything above and a whole lot of Java/C# development. The majority of the programming tasks were backend applications and processes until the last 2 decades where some of my work took me to the front end (help!), web development.

    Home, is a different story, purely C#, Windows/Linux Server Administration, MSSQL, and mySQL administration. My front end experience was from roughly decades ago using DirectDraw7 with Visual Basic 6 and Purebasic (PB). I haven’t touched those languages in years, due to focusing mostly on work and family. Now that the little ones have mostly grown up, I have a little bit more time to devote on this ultimate project.

    With this project, I wanted to work with what I was comfortable with. However, when looking at the gamedev landscape. Things have changed. And not in my direction (2D).

    So… I dug up my old Visual Basic 6 license and installed that puppy on my Windows 11 Pro box. And was extremely lucky to find some old burned CDs that had some directx dlls and got to cracking… just kidding, installing and running was a bit of a pain and… directdraw isn’t supported any longer. It was replaced by… Direct2D.

    And.. Direct2D doesn’t work with Visual Basic 6 (VB6). Hmm. And VB6 isn’t supported.. hmm. And I was spoiled by C# and no need for separated runtime installs (it just distributes or comes with windows updates, etc, etc.). So.. VB6 was out of the picture.

    One of my requirements was to be able to run the client on Windows, OSX (yes, I have a mac mini for development 😀), Steam Deck (so Linux), iPhone/iPad, and last but not least, Android. And must be 64bit. None of that old 32bit cruft. So with all of that, VB6 was way out of the picture. Okay, lets see how PureBasic has progressed. Well… not much in the direction I had hoped.

    So… while looking for a VB6 alternative, I came across Twin Basic (TB). I mean, just look at it. It is beautiful. Definitely a flood of emotions working with it. The developer is wonderful, the community is wonderful. What more could you want? Well… it is subscription required for the features I require. That is okay as I don’t mind supporting that way. It works with old DirectDraw DLLs, which is good. However, those DLLs are not cross platform compatible. So that was one strike.

    It does work nicely with Winsock. However, absolutely did NOT want the server side to be in Basic, no matter the dialect (too spoiled writing server side C# fun stuff!). So I looked around for a network library that is compatible with both TW and C#. I found my old license (and) subscription of Socket Tools. Tested a few things out and TB is compatible with it, and, of course, C# has no problems on it’s end. Success?

    Well, technically yes! Got a POC (proof of concept) going with a TB client and C# server. Got some stuff rendered on the screen via DirectDraw. Everything seemed fine. Also, TB doesn’t have an issue with dpi differences, which is kind of a big deal now days. However, being stuck on Windows for the client bothered me. The code couldn’t be reused across OSes at this time. While Linux/Mac/Android are due this year, there is no mention of iOS… hmm..

    I would also have to figure out a way to use a cross platform graphics library other than DirectX. I.. really do not like reinventing the wheel. And I am not willing to sit on my thumbs waiting around. Life is too short. So I kept looking…

    Here is where I went a little off into the weeds. There are some gamedev engines I started looking into. Unreal and Unity both have assets for making 2D games… but 2D mmorpgs? There are a very few, but overly complicated setup and development. Basically, those are 3D engines first, and 2D features somewhere lower on the list. Plus, both engines are bulky for something that should run lean and mean.

    Around this time, I wanted to make sure I did -not- have to worry about authentication and account verification. So I wanted to use a pre-existing service that has all of that built in and has integration points with whatever tools I will be working on. itch.io did not have anything at that time. GoG was both not reliable and didn’t have any system at the time. And Epic had no such system. That left Steam. Fine.. Forked over $100, and got my steamworks kit. For iOS, Apple has the Game Center and Google has Google Play. Server side, this is a little easy as you can grab the person’s unique Id per platform and merge back-end accounts if wanted.

    Along came Godot. Server side, client side, 2D first. Server can run on Linux (A must for future retiree budget constraints). Has C# integration for client and server so anything with .Net integration will work fine with Godot. Perfect? So I thought… The tools leaves a bit to be desired and the games made with it might as well be 100% open source.. there were no attempt at optimizing things. Too slow, too clunky.

    ~sigh~

    I had to roll my own 😭. C# on both client and server side. The goal was to use Winforms for the client side. Got a week or so into that before I realized that WinForms for .Net still has major bugs from the early 2000s that makes it … worthless to put it nicely for anywhere but a controlled environment. The dreaded DPI. You can design forms in one DPI, and it renders wrong on another. In other words, things don’t look the same on different computers… something that was solved by everyone else decades ago… Microsoft hasn’t gotten around to solve it for WinForms. This is a known bug and issue was raised (I bet, yet again), with no solution in sight. So….

    Second client rewrite (thankfully, wasn’t far into the first client), is 100% graphics (no WinForms), SFML with TGUI for the UI. Unlike most developer communities, these two are awesome and actually love what they do! A breath of fresh air 😃! My job this weekend is to get this new client up to speed of the old client… List, Creation and Deletion of characters and the ability to “choose” a character to play. All in the confines of a graphical interface instead of … WinForms. Yuk.

    Onto the server side, this is the 2nd rewrite. Was able to reduce a -lot- of code and it is -almost- caught up to the previous version. At my job, I have done some database migrations in the past. Data migrations isn’t a big deal as the big 3 databases have standard data types. Application/processes migration isn’t a big deal as long as they were designed correctly. During my time, I have noticed that most are not designed properly in that aspect.

    Thankfully, my servers are. Out of all of the database software, I am absolutely in love with Microsoft’s SQL Server. Especially when working with it in C#. It’s like a breath of fresh air compared to IBM’s DB2 and Oracle’s… Oracle. But I digress. Keeping in mind the need for a budget database and that I absolutely do not want to be bogged down on DBA duties when I retire. I migrated the server from using SQL Server to mySQL. The choice was mySql or Postgresql. Errr. I had -some- experience with mySQL… so that was my decision. Paying roughly $15/month to let someone else manage it, host it, and I get to dev against it. Win-win. But I do miss SQL Server….

    Lets talk about Steam and their buggy SDK. Both the Windows client and the Linux/Windows server uses the Steam SDK for Account authentication. This allows me to store the unique Steam Id in the database as a reference and still be compliant with EU’s GDPR. It also allows me to integrate achievements, cards, and Steam does have a nice game landing page… Anyhow, I came across a “well known” dirty secret Steam won’t tell you about. The SDK will break if you run it on Linux for a game that isn’t listed as “Released” on Steam. I spent like a week trying to find out why my server runs fine on a Windows server but not on a Linux server. There is an appId you can use “480” to test a very small amount of features (not usable in my case). But that worked… my appId did not.. had to find out the hard way then find some references online but not in the SDK docs. Still pisses me off that such a crippling bug is not in the SDK docs. So for now, my server runs on a windows server… but periodically, I deploy it to a linux machine under a different appid to make sure I didn’t break anything on my level.. ugh!

    Let’s talk finance so far. I have to be aware that my retirement income will be 1/8th of my current income. Yeah yeah, Gov does -not- pay anywhere close to my field’s standard rate when not retired. You can forget it when retired. So… keeping that in mind…

    Domain: $12/yr. Website Hosting: $20/yr. Windows Server Hosting: $35/mo. Managed Database Hosting: $15/mo. QA Linux Server Hosting: $5/mo. Gateway Hosting: $5/mo. (soon Prod) Linux Server Hosting: $5/mo.

    So… combining all of that per year is something like.. $812/yr. ($68/mo.). Roughly 1/2 of that is the Windows hosting. However, that goes away once the game releases which reduces the costs to $420/yr ($35/mo.). That is still a hefty chunk out of a retirement check.

    Of course, that is without a proper setup. There should be one gateway per server, one database install per server, etc. Plus the network diagram is literally…. Client -> Gateway -> Game Server -> Database Server.

    All traffic between the gateway/game server/database server are internal traffic (the LAN, if you will). That leaves as fat as a pipe as possible for the gateway server <-> Clients without any bandwidth penalties.

    There really should be a cluster of every step of the way (at least 2 servers per step). But… then you get much more expensive. And there is no reason to do that when my expectation is < 10 people playing 😁

    There are “one off” costs such as any licensing that is needed for libraries (if any). I still need to do some kind of music and sound FX. I looked at SFML.Audio but I hear it has issues on OSX (I’ll have to verify). If it does, then my second choice is BASS and third choice is FMOD. Both can cost money, even for free games, depending… Then there are the assets themselves. Music, sound FX, graphics. Some I have purchased already, but I would like to commission everything and have them in game before I retire.

    The fun part about knowing you will retire, is that you better get your (big) expenses paid for before you retire.

    With all of the above said, even though I absolutely hate reinventing the wheel, sometimes you got to do it (mostly) from scratch to get things done the way you want them.

    The next post should be screenshots (or video?) of character creation, deletion, selection. Nothing fancy as I concentrated on both the hardware and software infrastructure first. Just now getting into the viewable stuff.

    See ya next time!