[MS:R] Lark's Journal

Lark

Active Adventurer
MSC Developer
MSR Developer
Lead MSR Developer
Dec 30, 2009
45
31
Oregon
I figured I might as well track MS:R (or any other) progress here too, seems like a quiet-enough spot, but it'll mostly be to post/update milestones and take notes (and stay motivated?)

_ Rewrite Base Functionality [29 March]:
- Base Character/Monster classes written [8 March] [17 March] (+9)
√ - Player Controller (camera/input) [8 March] [17 March] (+9)
* Function-check all animation states
√ - Added an Ability System for in-game Actions [17 March]
√ - BaseItem (Weapon/Armor/misc parent class) [6 April] (+15)
√ - Added an Asset Manager [12 April]
_ - Inventory redesign [22 March]
* Update HUD components as needed
* Items can be used/stacked/dropped
_ - Create (non-MS:S) test map [29 March]
_ - Main Menu & Cleanup [29 March]
* Add Title Screen level
* Add Map Select and Video Settings tab
_ Once all the above works as intended, put on VCS (GitHub?)
X Vacation! Cancelled (thanks COVID!)
 
Last edited:

Lark

Active Adventurer
MSC Developer
MSR Developer
Lead MSR Developer
Dec 30, 2009
45
31
Oregon
Updated the status. Finished rewriting a crude Base Pawn (shared commonalities for all Characters and Creatures, like Health, TakeDamage, Death, etc.) and Base Character (Players/NPCs, implements Collision and Movement by default), with networking. Animations work, but the implementation is the same as before anyway.

I'm also claiming "success" on the Player Controller class for now, since I set up simple inputs (signals to the Character when to move, jump, crouch, etc). While I'm still working on the Camera component for 3rd-Person view, all anyone cares about is 1st-Person, right? Right??

Besides, I already know the Item/Inventory system is going to be a pain, which is why I'm giving it two weeks and getting started tomorrow. But for now, progress!
 

Lark

Active Adventurer
MSC Developer
MSR Developer
Lead MSR Developer
Dec 30, 2009
45
31
Oregon
Another status update:

The bad news is I had to go back and rewrite the Character and Controller classes to be more Engine-friendly. It was either that, or make it so debugging is difficult, and future UE4 Engine Updates wouldn't affect those particular classes. So I did the smart thing, went back, and rewrote them to play nice with the Engine. However, it did delay work on the Item/Inventory system.

The good news: I added an Ability System that's also Engine-friendly (and natively incorporates great network behavior)! It can be attached to any character/creature and defines Stats like Health, Mana, Stamina, and Attributes that drive the Stats like Strength and Vitality. Additionally, it defines Abilities for just about any in-game actions (active or passive, except for basic functions like Look/Movement), that use Stat/Attribute calculations and/or consume resources like Items, Mana, or Stamina. This includes things like Sprint, Jump, Cast Spell, Use Item, etc.

The better news is the Item/Inventory System didn't take as long as I was expecting, and I just finished testing a basic, working item that is spawned in the world, can be picked up/added to a working inventory, and tossed back out. I haven't finished defining "OnUse" or "Equip" functions yet, but I might do those next. Not sure how much farther I want to go, though, since at this point it starts to get artistic (drawing a pretty UI for the Inventory, etc.)

The best news is that all these updates (theoretically) make game dev work much easier, since they require little/no C++ updates - they can all be done in the UE4 Editor quite easily, and if they need some special scripting, that can be done quickly via Blueprints as well. Once everything's at a good stopping point for all this early functionality, I'll make some demo vids showing how easy it is to create/import stuff.

The terrible news is COVID-19 cancelled my family vacation in April, so I guess I'll be around working on this some more?

Next steps:
- Add "OnUse" and "Equip" features to Items
- Make a quick Equipment panel
- Finish Main Menu features like level selection, Audio, and Video settings.
- Add a Title Screen/Map
- Add a playable Test Map or two
 
Last edited:

Lark

Active Adventurer
MSC Developer
MSR Developer
Lead MSR Developer
Dec 30, 2009
45
31
Oregon
A quick update: Not much to report. Sadly, over the last two weeks, work took up quite a bit of time, even though I'm on work-from-home status. I've also gone back and redone Items and Inventory a few times now, to make things more modular for all future content creators. I've busted my own timeline, but I just wanted to let you all know I'm alive and well, and I hope you are too.
 

Lark

Active Adventurer
MSC Developer
MSR Developer
Lead MSR Developer
Dec 30, 2009
45
31
Oregon
So this week was productive: I've successfully implemented an Asset Management system that loads base assets when the game starts up, and can load/unload other assets dynamically at runtime. Right now it just uses the engine's default Asset Manager, but it's not too hard to create a custom class if need be (and very little code would need to be changed since it just fetches whatever Asset Manager happens to be assigned). But this has significant memory management implications, and makes things so much easier for content creators.

But what exactly does this mean? Well, I took the Models and Meshes of two assets so far: A Sword and an Axe (thanks @Age ) and I turned them into Data Blueprints. Example of the Sword Blueprint (yes, I should probably add a Damage value):
Sword_2.png
The Icon is just a screenshot of the Sword mesh rotated on a black background, and it will be what you see in the Inventory until the item is equipped or dropped. So if someone wanted to make items for MS:R, they just need to make a Mesh (in Blender, Maya, or whatever), copy a Blueprint like the one shown above, fill in the values, and you're done. You could even drag-and-drop the Blueprint directly into a Map and make it lootable!

And the best part? It doesn't need to be coded, or added to a Database, or Spreadsheet, or .ini file or anything - the Asset Manager scans the Items folder (in the Editor) and when the game loads, it automatically loads the new item! I'll probably also make a field that allows you to set a loot pool, like "Rare Loot Pool," so it would automatically be added as random in-game loot, too.

As for memory management: The game loads details about every item when it first loads, but doesn't load the icons or meshes until they're actually used, on a per-client basis. So if I open my inventory, my client will load and cache the icons for my inventory, but doesn't force every other connected player to do the same. And for meshes, which are the most cost-intensive, they're only loaded when seen/equipped, and unloaded otherwise. For instance, see the screenshot below:
Axe_2.png
All I did was drag-and-drop the Axe blueprint into the map, and the game didn't load the Axe mesh until the map was loading. I also checked to see if the Sword mesh and icon were also loaded, but they were not - proving assets are only loaded when needed.

The next step is to add another Axe to the map and see if my Pointers work for identical assets. Scenario: If 4 players are all wearing a Leather Cap, does it load one Mesh into memory and point to it 4 times, or load 4 Meshes? If it's the former, that's wonderful!

Yes, an Asset Manager wasn't on my to-do, but when I learned about it, I wanted to tackle it early and fast. Sometimes development feels very much like "one step backward, two steps forward" each week, as I discover something I want to rewrite or something new I want to implement, but it will be worth it in the end. Right?
 
Last edited:

Lark

Active Adventurer
MSC Developer
MSR Developer
Lead MSR Developer
Dec 30, 2009
45
31
Oregon
Another update. I keep looking at my original proposed timeline and cry, but c'est la vie. I've found a thousand ways how not to make a lightbulb; a few thousand more and I'll be on par with Edison.

Progress:
- Commented the shit outta the code
- Properly abstracted/encapsulated variables, using accessors and mutators only as needed
- Load item icons for YOUR inventory (and no one else's) into memory for quick access.
- Made it difficult to spawn/duplicate items outside the editor, even as the host
- Interactive objects in the world (except hostile creatures) are outlined when looking at them (at certain ranges) and provide limited information about them
- Most text that appears in-game is stored in a String Table that can be easily localized for any language
- Nativized some slow HUD/widget functions
- Created simple Character save/load functionality

Next Steps:
- Finish up basic HUD functionality
- Add four Abilities: Run, Jump, Drink Potion, and Normal Attack
- Create a test/demo map
 
Last edited:

Lark

Active Adventurer
MSC Developer
MSR Developer
Lead MSR Developer
Dec 30, 2009
45
31
Oregon
Wow, it's been almost a month since the last update, but I'm still alive.

Work's been busy, but I'm still getting about an hour in a day on MS:R. I'll post some progress screenshots in the MS:R forum soon, still plugging away at various and sundry.
 
Top