Jump to content


PureMourning's Content

There have been 9 items by PureMourning (Search limited from 02-August 23)


By content type

See this member's

Sort by                Order  

#264166 Whispering Winds: 4 Months To The Day . . .

Posted by PureMourning on 26 January 2024 - 05:16 AM in Off-Topic Discussion

Wow, I can't believe it's been 4 months since I first posted about my Nightmist-inspired project, Whispering Winds.  What started out as a passion project centered on learning how a game like this is made, has progressed to a fun community with a handful of players who have been playing the game since we launched Open Alpha last month.

I've said this before, but:  I can't think folks like Pandilex and Xlithan enough for all of their support, wisdom and guidance.  Pandilex helped me clean up a lot of code . . . he logged on during early alpha and started using abilities from other classes, attacking monsters across the map, and found a way to auto-level to 15!  For you coding nerds out there:  I was trusting the client too much and not doing enough defensive programming - wow I've learned a lot!

Anyhow - I am back with another update:

 

  • Open Alpha was launched a month ago:  50 accounts were registered and over 100 characters created
  • Multiple folks reached the highest level, which is currently 15
  • A whole bunch of bonding, laughs, and antics were shared, especially over early-day bugs/crashes

 

What's next?

The next big Alpha content release is happening January 31st, which is going to:
 

  • Extend the level cap to 20
  • Introduce new areas, quests, items, etc.
  • New gameplay mechanics and usability features (like a mini map)
  • 8 new abilities across the 4 classes

 

A reset is happening but I've introduced a special account-wide currency called Ethereal Coins that reward people for their time commitment in these early stages. The coins are currently earned for each character leveled to 15 and will survive in future character resets as we go from alpha -> beta -> etc.

The ethereal coins can be spent on cosmetic items like a special Magic the Gathering-inspired flavor text that appears in character profiles and custom player portraits.

The game is up 99% of the time and is hosted in production infrastructure (https://whispering-winds.io/) - come check it out if you want, fellow Nightmistians! We have an active Discord community and I post constant development updates and screenshots there.

Here's an example of the type of content that is posted on a constant basis (I've been teasing new abilities that are launching next week):

 

https%3A%2F%2Fprod-files-secure.s3.us-we


Thanks for all the support for those who have been playing and providing thoughtful feedback.

Maybe I'll see ya around... the next content phase should be fun:  Open Alpha - Veil of Shadows!


https%3A%2F%2Fprod-files-secure.s3.us-we

 

 




#264134 Whispering Winds: Open Alpha Launching In 2 Weeks (W/ Prizes!)

Posted by PureMourning on 19 December 2023 - 08:35 PM in Off-Topic Discussion

Update as we approach Open Alpha in a few days . . .  :D 

General game information and a FAQ (including information about Open Alpha prizes) can be found here:
https://whispering-w...35c30ff9a3d4a13

Thanks for all of those who signed up so far -- things are still pretty early stages but am looking for to you playing and your feedback!




#264127 Whispering Winds: Open Alpha Launching In 2 Weeks (W/ Prizes!)

Posted by PureMourning on 16 December 2023 - 05:57 PM in Off-Topic Discussion

That's so awesome, Gaddy!

I'm excited to see Wayfarer, Stadius and the likes venturing in the world.  ^_^

 

By the way- I invited you to the Discord server. Would love to have you in there -- it's a great place to see much more real-time updates on development notes, progress, etc. Cheers!




#264125 Whispering Winds: Open Alpha Launching In 2 Weeks (W/ Prizes!)

Posted by PureMourning on 11 December 2023 - 04:19 AM in Off-Topic Discussion

Hi all,

 

We're coming up on the 3-month mark since I started this project, and I am happy to report that I've been chipping away every week.  There's been a handful of folks who have been part of very early playtesting, and I think we're ready to transition into Open Alpha!

 

. . . Also, a huge shout out to Pandilex, Maven and Xlithan for their continued support and encouragement.

 

The game is still in its early stages but if you want to be part of a budding community, kill some stuff, level up, and generally mess around then this is for you!

 

  • I am targeting Open Alpha to launch of Saturday, December 23rd
  • There will be special in-achievements that can be earned by participating and for also completing all the early game content (hitting the alpha level cap, killing the bosses, etc.)
  • You may also be eligible to win a prize/real life gift card/Venmo for participating and providing meaningful feedback

 

The game is fully hosted in a production environment and you can learn more here: https://whispering-winds.io/

There's also an active Discord community, where I post consistent development updates: https://discord.gg/qZ9mPrxtpJ

Note:  You can create an account and character now, but you won't be able to log in until Open Alpha launches -- but feel free to reach out to me on the Discord server if you're interested in being in the final phase of invite-only testing (Robicus on the Discord server).

 

Here's a look at the initial races:

  • Humans
  • Elves
  • Dwarves
  • Orcs

And the game currently features 4 classes:

  • Bladesworn
  • Ethermancer
  • Rogue
  • Divinist

 

Here are some recent screenshots:

 

https%3A%2F%2Fprod-files-secure.s3.us-we

 

https%3A%2F%2Fprod-files-secure.s3.us-we

 

https%3A%2F%2Fprod-files-secure.s3.us-we

 

https%3A%2F%2Fprod-files-secure.s3.us-we

 

Thanks!




#264113 Whispering Winds: Project Update (Halloween 2023)

Posted by PureMourning on 31 October 2023 - 09:52 PM in Off-Topic Discussion

Hi friends!

 

I created a thread last month entitled Passion Project: Whispering Winds: Chronicles of Ethereal, that showcased the very early constructs of a Nightmist-inspired game I am creating in a modern web stack (Python/Flask, HTML/CSS/JavaScript).

 

It's been over a month since kicking off the project and I wanted to share a few things:

First, a huge thank you to Pandilex, Stig and Muse for being wonderfully collaborative and supportive while I've asked questions/gotten design feedback.  We've been chatting in the Nightmist Discord server and I really appreciate the feedback!

 

Second, I've successfully migrated the game to production infrastructure in preparation for an invite-only pre-alpha testing phase.  If anyone is interested, please contact me via Discord (username: robicus18) or page/memo me in Nightmist (1alt - Yavimaya).  I'll set some expectations and provide some tips / tricks and then invite you into the Whispering Winds' Discord server, where other pre-alpha testers are gearing up.

 

I'm really big on community involvement so if you're particularly interested in play testing, feedback, providing ideas and then I think you'll really enjoy it.  Also, being written for the web, there is no client to download/install -- and the game works well on Windows, macOS, Linux -- across multiple browsers and tablets!

 

Here are some recent screenshots:

 

https%3A%2F%2Fprod-files-secure.s3.us-we

 

https%3A%2F%2Fprod-files-secure.s3.us-we

 

https%3A%2F%2Fprod-files-secure.s3.us-we

 

https%3A%2F%2Fprod-files-secure.s3.us-we

 

https%3A%2F%2Fprod-files-secure.s3.us-we




#264109 Passion Project: Whispering Winds: Chronicles Of The Ethereal

Posted by PureMourning on 11 October 2023 - 06:37 AM in Off-Topic Discussion

Hi all,

 

I've been working on the project virtually every day the past ~2 weeks since the last update and wanted to share what I've been up to:

 

In keeping with "KISS" (Keep It Simple Stupid), I've decided to start with races and 4 classes:

 

  • Humans, Elves, Dwarves and Orcs
  • Warriors, Mages, Clerics and Rogues
     

Want constant behind-the-scenes-updates?: There's almost daily dialog in the Nightmist Discord server's off-topic channel if you want to see more frequent updates and behind-the-scenes conversations (even the mighty Pandilex has been giving me tips on design decisions, etc.)

 

 

You can view recent progress pics here:  https://fallacious-s...623a6a6dc67472d

 

 

Key items you'll see in the link above:
 

  • I've been working on adding the basic constructs of monsters, their attacking behavior (which is varied based on "aggressiveness" levels) and how they appear in the UX.  You can hover-over and get real time-data on mobs, like their health
     
  • I've also been adding the inventory and equipment system, to include right-click context menus that allow you to inspect item

 

Screenshots for those who don't want to click links :P

https%3A%2F%2Fprod-files-secure.s3.us-we

 

 

https%3A%2F%2Fprod-files-secure.s3.us-we

 

https%3A%2F%2Fprod-files-secure.s3.us-we

 

https%3A%2F%2Fprod-files-secure.s3.us-we

 

Take care!




#264106 Passion Project: Whispering Winds: Chronicles Of The Ethereal

Posted by PureMourning on 28 September 2023 - 05:39 AM in Off-Topic Discussion

apologies for some of the screenshots being jacked in the OP -- stupid expiry on the images I exposed within my note-taking app -- but missing/new screenshots below!  :)  }
 
But first . . . a quick insight into the last 2 days:
 
I've been in session management hell the past ~48 hours.  I noticed a fatal security flaw that allowed Player A to access Player B's character despite having authentication methods in place during login.
 
It only made sense early on to add a login screen that was equipped with the usuals:  allowing players to enter a username, password, and ensuring that those two things checked out.  At the time of my original post, I had already built the backend logic/respective database schema to facilitate this:  I even made sure to store user passwords as hashes in the database, and in turn, check the user's inputted hashed password against what is stored in database, etc.
 
Upon successful login, a player enters the main game after selecting a character.  In the original code, the initial bi-directional socket connection was established after running the login checks, which meant, that another player could connect to another player's character if that knew a.) the correct route / URL for hitting the main game and b.) another player's character ID -- which would be easy to brute-force if they didn't explicitly know it.
 
I made the realization that I wasn't doing any sort of session management!  In other words, I was not keeping track of session information on a per user basis as it pertains to active connections to the server.
 
I changed the database's users schema to start tracking session IDs at the point in which a player establishes a new connection.  I also wanted to do all of this in a way that aligned to two key requirements:
 

  • Ensure only one character can be played at a time
  • Mitigate Player A from accessing Player B's character

I believe I've solved for both of these (well at least in the context of realistic expectations considering I am running the game on a local server without SSL/TLS) and think I have made it out of session hell.  It was fascinating trying to understand how to create and track session data across the entire app, both backend and frontend.  The way the login sequence works entails the client technically making two distinct connection requests to the server so I had to come up with a creative/hacky way to make sure both requests were tied to a singular session ID.
 
I ended up using Flask's built-in server-side session storage capability to save/load the initial connection data and then re-construct it at the time the game loads, ensuring that the session ID is consistent despite there being two distinct connection events:

Some code examples for you fellow nerds:
 

const serializedSocket = serializeSocket(window.socket);sessionStorage.setItem('socket', JSON.stringify(serializedSocket));

The really interesting part is that I also ran into issues trying to retrieve the stored socket information into JSON format due to "circular" behavior with its member attributes.  So I created a helper function to serialize/de-serialize it:
 

const serializedSocket = JSON.parse(sessionStorage.getItem('socket')); 

// Check if the socket data exists and is connected
if (serializedSocket && serializedSocket.connected) {
    // If a connected socket exists, use it
    console.log("Connected socket exists.")
    socket = deserializeSocket(serializedSocket);
} else {
    // If no connected socket exists, create a new one
    console.log("Connected socket DOES NOT exist.")
    socket = io.connect('http://localhost:5000');
}

//Helper function:
// Deserialize the socket object
function deserializeSocket(serializedSocket) {
     // Create a new socket object and set its properties
     const socket = io.connect('http://localhost:5000');
     socket.on('connect', function(data) {
         socket.emit('send_sid', socket.id)     
     });
     if (serializedSocket) {
         socket.id = serializedSocket.id;
         socket.connected = serializedSocket.connected;
     }
     return socket; 
}

Missing screenshots from OP:
 

 After that basic client-server connection was handled, I started thinking about a simple grid system to handle the various areas that may exist.  I built a simple x,y grid system and the foundation of movement:

 
https%3A%2F%2Fprod-files-secure.s3.us-we
 

 
Then I wanted to cleanup the UX and make it more clean and starting building placeholders for things like character info, inventory, etc.

 
https%3A%2F%2Fprod-files-secure.s3.us-we
 

 
 In this final screenshot, you'll notice that the movement system is starting to evolve and its process has been the most profound for me so far.  For example, after building the basics of movement I realized, "Oh, crap. How do I handle telling Player A that Player B left the grid?"  This got me into a rabbit hole of understanding how webs sockets work, and in particular, how functionality within Flask's SocketIO library operates.  It took me a few hours to understand the concept of connected clients (players) being in a various "rooms", which represent how a player can receive communication.  I learned that each grid/room in the game needs to have its own socket "room" for sending messages to specific areas.

 
https%3A%2F%2Fprod-files-secure.s3.us-we
 
NEW Screenshots:
 
Spruced up login:
https%3A%2F%2Fprod-files-secure.s3.us-we
 
Cleaned up movement behavior and started adding basics of an inventory system:
https%3A%2F%2Fprod-files-secure.s3.us-we
 
 
Created an image for the initial "Town Square" and put it in the main game's background.  I also had a cool idea to change the game's background every time you go to a new area.  Something for the future, perhaps . . . 
 
https%3A%2F%2Fprod-files-secure.s3.us-we
 
So much to do!




#264105 Passion Project: Whispering Winds: Chronicles Of The Ethereal

Posted by PureMourning on 25 September 2023 - 10:48 PM in Off-Topic Discussion

The image links say "Access Denied" when I try to open them.

 

Ah, apologies, Stig!

I realized there was a permissions issue with how I was hosting/sharing the pics.  I've updated the original thread and the pics should be there!




#264102 Passion Project: Whispering Winds: Chronicles Of The Ethereal

Posted by PureMourning on 25 September 2023 - 07:07 PM in Off-Topic Discussion

Hi fellow Nightmistians!
 
It's been a hot minute since I've played but I've always been a forum-lurker.  It's pretty quiet around here, but I thought I'd share information about a project I'm working on.
 
A little background . . . 
 
I'm sure most of us are in our 30s at this point, decades removed from the heyday of falling in love with and playing this game at its peak.  I've been working professionally in the cybersecurity field for several years, and a big chunk of of that time has been in engineering roles.  To be clear, I am by no means a professional software engineer, but I know enough to be dangerous (in my field I equate "engineering" to scripting, automating tasks, performing log analysis, etc.)  
 
Python is very popular in security and I've recently been working on building up my chops.  I got the crazy idea that it may be fun to practice Python by attempting to build a text-based RPG game, like of course, our beloved Nightmist.  I started to think things like, "How is a game light Nightmist built?"  "How does the client-server architecture work?"  "What modern technologies would I use to build the basics of a game?"
 
I recently started building the foundations of a project that I thought would be fun to share with you -- especially if any of you are like me -- and have been even remotely curious as to what goes into building a game like this.
 
A little bit of housekeeping . . .
 
to staffers (whoever you are now-a-days):  I don't recall the rules re: advertising other games, but rest assured, my passion project is extremely non-playable and there's a good chance it will never be playable, so I hope you don't take this as advertising another game.  I simply want to share my adventures in learning how to build a full-stack app/game that exhibits fun mechanics that are inspired by Nightmist.  It may be fun to engage in a bit of conversation around design choice, tech stack, game mechanics, etc.
 
Introducing Whispering Winds: Chronicles of the Ethereal:
 
I just started the project last week and wanted to see if I could even get to the point of building out the simple mechanic of allowing players to log in and move around a basic world.  Before jumping into the code, I contemplated which language/tooling would best suit my needs.  Inspired by Python, I decided that writing the core game logic in Python was a no-brainer.  Shortly thereafter, I thought it would make sense build the web app in Flask, a micro web framework written in Python.
 
Here is diagram that represents the full current tech stack that I am using:
https%3A%2F%2Fprod-files-secure.s3.us-we
 
 
As you can imagine, I've quickly learned that there's so many details that go into building even the most basic systems:  understanding web sockets, how to handle constant bi-directional communication between the client and server, and how to persist game data using a database.

I've probably put in ~10-15 hours within the last 5 days building the very basics.  I've been keeping a progress log/screenshots and thought it'd be fun to chronicle them here:

https%3A%2F%2Fprod-files-secure.s3.us-we

 

After that basic client-server connection was handled, I started thinking about a simple grid system to handle the various areas that may exist.  I built a simple x,y grid system and the foundation of movement:

Untitled.png?id=2e1b5e75-2184-4af3-bb74-
 

Then I wanted to cleanup the UX and make it more clean and starting building placeholders for things like character info, inventory, etc.

Untitled.png?id=2c3eb588-8d10-419a-b0b4-

 

 

In this final screenshot, you'll notice that the movement system is starting to evolve and its process has been the most profound for me so far.  For example, after building the basics of movement I realized, "Oh, crap. How do I handle telling Player A that Player B left the grid?"  This got me into a rabbit hole of understanding how webs sockets work, and in particular, how functionality within Flask's SocketIO library operates.  It took me a few hours to understand the concept of connected clients (players) being in a various "rooms", which represent how a player can receive communication.  I learned that each grid/room in the game needs to have its own socket "room" for sending messages to specific areas.

Untitled.png?id=b6738d4b-7c41-43e6-805e-

 

 

 

As of today, a player can create an account, create various characters, log in, chat, and move around a basic area called "Town Square".  There's a ton I want to add and I'm certain I'll make a million more mistakes.  I am working on adding items/inventory system and finessing the movement.

If I happen to make further progress - and if anyone is interested in more of behind-the-scenes game building a logic - I may post again!