Daily Post Image from Upsplash

July: 12

2024

Dice

The yellow material over the dice shows up on the initial load but after the roll animation, it seems to revert. I am wondering if there is an issue with the object itself or the animation is resetting the material on the dice. The max amount of dice that we can roll would be about 4, which gives us a low range of 4 and a max of 48. Having this be our scope of rolls would be the best move, then having the additional rigged dice to help over some of the issues. So a crit fail will be a 4 and a perfect crit will be a 48. However we could work out a better formula to determine the critical chance, maybe roll an additional d100 style dice to handle the critial chance. There are still a decent amount of options, but I will try to look through each one.

Sprites

Thanks to the recent purchase of finalbossblue’s complete asset collection, we have a decent chunk of characters, animations and tilesets to work with. This means that the only thing left is to slowly focus on the different core mechanics of the game engine, we can tackle the map builder and the dialogue system next.

The animation engine for different characters will be an interesting test case, I am not yet ready to handle this, I might have to visit the forest of 420 and embark on a hazy trip. For the animation system we will have a couple options but I think we could find a way to use either the threejs or a direct function to control the movement of the assets. I am trying my best to think through the best course of action but it seems that we do not want to create a situation where every new item would require a vast shift in animation.

Replacing Fudster’s in-game character from a monk set to the jesus set would be fine.

Dialogue

I am thinking that the dialogue system should be something along the lines of a semi-complex data structure that would link other structures together creating a nested web of nodes. We could use the ULIDs to help us keep track of the different dialogue options and then work around that, but try to include ways to skip, actions and effects based upon how the dialogue is setup.

This would be the general IDialogueObject that we would use to store the different talks that the player would have with the NPCS.


export interface IDialogueObject {
  id: string;
  title: string;
  message: string;
  actions: string[];
  options: string[];
}

export interface IAction {
  id: string;
  description: string;
  nextDialogueId: string;
}

// Interface for Option Object
export interface IOption {
  id: string;
  description: string;
  nextDialogueId: string | null;
}

Actually, just to be safe, we should rename the two other interfaces with a better name, like IDialogueAction and IDialogueOption. After thinking it through, maybe we step a bit back and do something like this:


// Interface for Dialogue Object
export interface IDialogueObject {
  id: string;
  title: string;
  message: string;
  actions: IDialogueAction[];
  options: IDialogueOption[];
}

// Interface for Dialogue Action
export interface IDialogueAction {
  id: string;
  description: string;
  nextDialogueId: string;
  actionType?: 'giveItem' | 'startQuest' | 'updateQuest' | 'completeQuest';
  itemType?: string; // Type of item to be given (if actionType is 'giveItem')
  quantity?: number; // Quantity of the item (if actionType is 'giveItem')
  questId?: string; // ID of the quest (if actionType is related to quests)
  questStatus?: 'start' | 'update' | 'complete'; // Status of the quest (if actionType is related to quests)
}

// Interface for Dialogue Option
export interface IDialogueOption {
  id: string;
  description: string;
  nextDialogueId: string | null;
}

This would let us keep the initial object of the conversation the same without having too many different objects. This is what I am thinking would be the core dialogue object now, as of the end of the day:


// Interface for Dialogue Object
export interface IDialogueObject {
  id: string;
  title: string;
  message: string;
  actions: IDialogueAction[];
  options: IDialogueOption[];
  style?: string;
  backgroundImage?: string;
}

// Interface for Dialogue Action
export interface IDialogueAction {
  id: string;
  title: string;
  message: string;
  nextDialogueId: string;
  actionType?: 'giveItem' | 'startQuest' | 'updateQuest' | 'completeQuest';
  itemType?: string; // Type of item to be given (if actionType is 'giveItem')
  quantity?: number; // Quantity of the item (if actionType is 'giveItem')
  questId?: string; // ID of the quest (if actionType is related to quests)
  questStatus?: 'start' | 'update' | 'complete'; // Status of the quest (if actionType is related to quests)
  style?: string;
  backgroundImage?: string;
}

// Interface for Dialogue Option
export interface IDialogueOption {
  id: string;
  title: string;
  message: string;
  nextDialogueId?: string;
  style?: string;
  backgroundImage?: string;
}


Okay for the future of this system, I am thinking that it would make sense to include a style and a backgroundImage for all three of the interfaces. This will help us with rendering out the dialogue on the client-side.

Next step would be to setup the DialogueDatabase, we will follow the same structure as our NPCDatabse. My goal would be try and keep some of the logic on the client-side as similar as possible, so that it would be easier to maintain in the future.

House of Dragons

Season 2 is shaping up to be a great season so far! I am enjoying episode 3 and 4, its getting solid and the dragon fights were top notch this season.

Sprites

Thanks to the recent purchase of finalbossblue’s complete asset collection, we have a decent chunk of characters, animations and tilesets to work with. This means that the only thing left is to slowly focus on the different core mechanics of the game engine, we can tackle the map builder and the dialogue system next.

2023

  • 6:00pm - H to V to the A-C. HVAC was not yet done, I am still a bit afraid of getting electrocuted to death.
  • 6:35pm - I am thinking of converting the whole TypeWriter concept into a MangaTextHandler which will act as the component for all the unique text styles and logos.
  • 8:30pm - Adding a couple more mock examples to the stream tools. Got to top-up the Namecheap.com account as well. Furthermore, I have to prepare another couple thousand for my insurance bill that is coming up too.
  • 11:30pm - As for the 100 assets, I should at least prepare the list and get from the 5 current assets that we are tracking to around 25 before the end of this week. If I can add around 5 assets daily, we should get to the 100 we need to close out the asset expansion issue ticket. After we hit the 100 mark, we can start to organize the data sets for them a bit better, as well as improve the flow of information for each one. Adding a couple of ETFs would make this faster, hmm.
  • EOD - Time to get some sleep. I need to get back to being a bit more active on my journal entries, they have been lackluster these few months.

Quote

A monarchy conducted with infinite wisdom and infinite benevolence is the most perfect of all possible governments. — Ezra Stiles


Tasks

  • [ ]