Giter Site home page Giter Site logo

conversetek's Introduction

๐Ÿ‘‹ Hey there ๐Ÿ‘‹

I'm Richard. I design and develop 'cool things'.

I've been developing for over 16 years so I've worked as a backend, frontend, fullstack and games developer. You'll often see me making new business ideas, open source tooling or game mods. I'm a problem solver.

๐ŸŒ Portfolio ๐ŸŒ

Check out my portfolio to see some pictures and write ups of some of the freelance contract work and projects I've done.

๐Ÿ‘‰ More About Me ๐Ÿ‘ˆ

๐Ÿ”ญ Iโ€™m currently working on various business ideas, open source tools and BattleTech game mods

๐Ÿ“ซ Find me: Email | Website | Youtube | Twitter | Mastodon | LinkedIn

โšก Interesting Things โšก

See my portfolio for many more interesting projects but here are some that are hosted on GitHub.

  • ConverseTek - Reverse engineered binary conversation files for BattleTech and created a nice-to-use tool for creating/editing them. The only way for modders to be able to create any conversation of this type.

  • Mission Control - A large BattleTech mod that expands on many aspects of the game. A core mod in the community. Used by all the major modpacks (RogueTech, BattleTech: Advanced, BEX and others).

  • Mission Control Designer - Built a mission editor for BattleTech as an in-game mod. This involved years of work to slowly piece together the mission format and inject extensive user interface into the game to allow for an editor flow with validation.

  • React-Native-Keychain Contributions - Contributed to React-Native-Keychain to add support for a new form of RSA padding (OAEP) & fix Android KeyStore unlock timeout issues related to biometrics

๐Ÿ’ป Languages ๐Ÿ’ป

I don't limit myself to specific languages or frameworks so I tend to pick up a lot as I go. Below are some of the languages and frameworks I've used for at least one sizable project within a recent timeframe.

Languages: Typescript, Javascript, C#, C++, Lua, C++

Frameworks: React, React Native, NextJS, Node, Laravel

Visit my portfolio and CV for a full breakdown. Enjoy looking through my projects! ๐Ÿ‘‹

conversetek's People

Contributors

cwolfs avatar dependabot[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

dwtcourses mindw

conversetek's Issues

Copied nodes use original text instead of updated values

I've created a convo with Sumire that have 4 nodes, one for heavy, light, medium and no aerospace wings. The medium and no wing nodes were created as copies of the heavy node. When they display in game, they display the heavy node text instead of their actual text.

I've attached the conversation so you can see the structure contains the right nodes, but that's not what the game displays:

simGameConversations.zip

Conversations: Maintain the unsaved conversation data when swapping between conversations

At the moment when you change conversations, any unsaved data on the conversation you were viewing is reset.

For this change:

  • Keep the unsaved data of the conversations
  • Restore the data if re-opening a conversation that has unsaved data
  • Provide a visual indicator in the conversation tree of which conversations have unsaved data
  • Warn the user when they try to close ConverseTek that unsaved data will be lost

Add functionality to update flashpoint milestones

When writing a conversation for a Flashpoint, it would be very helpful if ConverseTek was able to update the Flashpoint milestones that it is related to.

This would (hopefully) eliminate the need to cut-n-paste the conversation guid into the flashpoint json as well as ensuring that Flashpoint decision tags are properly set in the various branches that require them.

Re-index conversation nodes/branches/roots on save/export

It's been discovered that even though ConverseTek correctly creates conversations with valid links between nodes, branches and other nodes, it can leave gaps in the index numbers. This usually happens when deleting and creating nodes. This would be fine as the link integrity is maintained.

However, it's not fine as BattleTech runs an implicit lookup on the nodes in a List instead of a Dictionary with the key being the index.

Due to this, when the conversations encounter an index gap, the conversation will desync and a different node than is intended will be selected by the game. This results in a broken conversation flow.

The probable fix for this is to re-index everything on a save or export of the conversation.

Thanks Amechwarrior for informing me of something weird going on.

Best Practices/Troubleshooting Guide

A suggestion from someone trying to pin down a possible problem with a conversation - it'd be great to have a wiki page collating best practices for the use of actions and various tips on what to look at when troubleshooting a conversation.

It'd also be way more convenient for mod makers than having to have two instances of ConverseTek open to compare and contrast in an attempt to reverse engineer what's going on.

I don't expect you to fully populate such a thing yourself, but if there was a way to submit information for inclusion, I would gladly help.

Collapse Folder Frame

The Folders Tree frame on the left hand side could be hidden or collapsed to give the Node Tree, Text and Actions more screen space. When putting two windows side by side at 1080, the Actions box isn't visible at all.

Add templates that autopopulate nodes

Add a template system to the context menu where it adds X nodes with autopopulated conditions / actions.

E.g. 'Add template...' --> 'Flashpoint decision'

Update dependencies

ConverseTek is very old in terms of software development (5 years or so). Lots of the dependencies are very old and need updating.

Support adding new property to condition / action definitions

If adding a new property to a condition / action definition and these definitions are already used for existing conversations - CT will crash when trying to load the conversation. Upgrade it so it supports adding extra properties to the definitions on preloaded and loads a designated default value for the new properties.

Copy/paste/delete/move node id desync

Node ids desync from what BT expects with some kind of combo of move/delete/copy etc.

BT sadly doesn't use ID as a lookup but uses it as the index position in the loaded array of nodes. This a very brittle approach and causes trouble for ConverseTek.

I initially introduced a workaround to pad the nodes with empty 0 id nodes on save to fix this but it doesn't seem to work properly. A proper fix is required.

Dialogue Editor: Collapse Other Branches

When using the dialogue editor very rapidly lots of dialogue prompt and response nodes are created. This can make the dialogue area very busy. This is a natural thing as there is a lot of information being recorded for branching dialogue, however, it can make it difficult to work with.

To improve the user experience a feature called 'Collapse Other Branches' should be added. This will allow you to right-click on any node (root, prompt, response) and select from the context menu 'Collapse Other Branches'. This will keep the branch you're working within untouched (all children of the node you selected and back up to the root) but collapse all other branches.

This would give a quick way to reduce the 'noise' from all other branches when you're working within only one branch.

Fix and reenable move Response between other Nodes

Previously in older versions of ConverseTek you could drag and drop move a Response (yellow nodes to any other Node (blue node). This was later found out to cause some serious bugs and was disabled in favour of just allowing the Response to be moved within the original Node (just reordering the responses).

Fix this issue.

Node Deletion: Warn user on prompt node deletion if linked to

Response nodes can link to Prompt nodes. When deleting a prompt node that has links - those links are automatically cleaned up.

Upgrade the user experience by providing a warning popup when trying to delete a prompt node that has links. This should inform the user that the node has links pointing to it and those will get deleted - as this is a destructive operation.

Conversation Tree: Useless 'simGameConversations' root node

When you load a directory the root node in the conversation tree says 'simGameConversations'. The original intent of this was to reinforce that the conversations are 'simGameConversations' format and not the 'conversations' format from BattleTech.

In review I think this is a bit pointless. This should reflect the active directory name instead as that provides some contextually useful information. It might lend itself to future work with changing the conversation tree to more a file structure to navigate instead of a workspace style.

Action Upgrade: Support Unlocking Camera

Upgrade the 'Set BattleTech Camera Lock' to unlock the camera.

The basic behaviour of this action is to lock onto a specific character/location and the camera will stay looking at that person or thing - no matter who is talking.

Upgrade this so you can 'reset' it back to the default behaviour where it auto-looks at the person talking.

Tags and Resource List

Provide as comprehensive list of tags and resources as possible that can be usef in the dialogue.

Zoom In/Out of Node Window

It would be nice to be able to zoom in and out of the node tree either with a hotkey or key(SHIFT or CTRL) + mouse scroll wheel.

Avoid hidden nodes on selection

When selecting a node, if it's lower down in the view and under the node details section that can appear - it will be hidden by the node details section when it appears. This forces the user to have to scroll down and find what they had selected. This is a bad user experience.

Ensure the node the user has selected is visible in this situation.

Dependency Check: Check if a conversation uses non-vanilla Definitions and warn the user

If a user is using non-vanilla definitions in a conversation that is being loaded, like from Extended Conversations, right now CT won't load the conversation.

In the future, warn the user that the specific conversation is using non-vanilla Definitions that aren't loaded into ConverseTek - and mention the name of the definition attempted to be loaded in.

Suggest to the suggest they might have forgotten to put in the Extended Lances definitions.

Quicklinks - Phase 2

Phase 1 allowed for this feature to work. Phase 2 should allow the user to right-click a directory, add as quick link and give it a user friendly name.

Conversation Tree: Item context-menu - Rename conversation

Add a 'Rename Conversation' option to a context menu when right-clicking a conversation in the conversation tree.

This would rename the file itself but not change the conversation ID (unless it matches the UUID then maybe it'll auto update it).

Dialogue Editor: Autoscroll to link is jittery

When autoscrolling to the bottom of the dialogue editor tree (e.g. following a link to a node at the bottom) - the calculations for the scroll are wrong and it causes a jittery to occur until the user scrolls up a little.

Quicklinks - Phase 1

Implement the quick link functionality.

Phase 1 - Basic form

A ConverseTek/config/quicklinks.json file in with the format:

{
  "_UserFriendlyName_": "_Absolute filepath_",
  "TestConversationModDarius": "D:/Program Files (x86)/Steam/steamapps/common/BATTLETECH/Mods/TestConversationMod/StreamingAssets/data"
}

CT will read and construct the quicklinks in the file explorer.

Phase 2 - More user friendly form

Expand on this solution with context menus for Add to quicklinks and Remove from quicklinks.

Just some QoL suggestions

Just a couple minor QoL enhancements that may or may not be easily doable.

  1. Have ConverseTek remember working directory used in the previous session, or integrate the "Open Folder" dialogue with Explorer (e.g. show Quick Access, etc).

  2. Keep changes to loaded conversations when switching from conversation to another, but don't save externally until "save" button is clocked. So if I edit conversation A, then click over to glance at Conversation B, I shouldn't lose my changes to A unless I exit ConverseTek without saving.

Main Area: Optimise space for the user

Over the past updates I've attempted to optimise space for the user where possible. This involved hiding the node details when not selecting a node, for example.

One problem that caused users issue was the relatively small area for actions and conditions vs. the amount of content that is often displayed in actions and conditions.

Implement a split drag-resize system to allow the user to drag up the node details so it can fill most of the viewable space. This would effectively hides the dialogue editor but this is fine as when you're editing actions / conditions you have no use for that view at the time.

Add one-click 'Show holotable' function

When writing a new conversation, especially for flashpoints, it's often desirable to have the hologram table show up immediately.

Please add functionality to make that a one click operation as the necessary action (Set BattleTech Fade from black) isn't completely intuitive to the new conversation creator.

Port to Typescript

Since ConverseTek was written Typescript has become the de facto standard of frontend development.

It'll bring lots of advantages to a complex project including, but not limited it:

  • Strict null checks
  • Extensive intellisense (far more than vanilla JS could ever do)
  • Compile time checks on types

Port the project over to Typescript.

Add functionality to load conversation from JSON.

I love the functionality you have to export a conversation as JSON, because sometimes it's easier to read it that way. Would it be possible to add functionality to do the reverse so that conversations can be written out in JSON and then loaded by ConverseTek and saved as a bytes file?

Nodes: Guiding arrows on nodes with no text

Nodes with no text are used to condition gate, run actions or just move onto the next node.

It'll be better UX to show a guiding arrow if no text exists to show this point.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.