my case for object keyword expressions

Started by Lotion, February 18, 2021, 10:56:24 PM

February 18, 2021, 10:56:24 PM Last Edit: February 18, 2021, 11:02:33 PM by Lotion
I believe that the current keyword system is not properly robust and provides bad user experience.

First, some definitions:
object keyword expression: A series of terms that are all connected by dots which would be interpreted by the parser to determine what thing is meant to be targeted.

Object keyword expressions lack two important features which force users to either use multiple cumbersome commands to perform basic inventory management tasks or outright abandon a task that a zalanthan would be able to accomplish.

The two features needed are "antikeywords" and the ability to combing multiple object keyword expressions into one using some sort of logical or operator.

(disclaimer, I don't actually know what user story means in terms of textbook UX dictionary wossname)
To demonstrate the use of these features I will create two user stories which show the current problems.

You are a herbalist
Herbs have different tastes and it makes sense to sort each taste in a different bag. You use a bunch of different bags but there aren't enough mutually exclusive keywords so you have a "bright orange bag" and an "orange bag" in the same chest that contains all of your herb bags. You want to get the orange bag from the chest and there are two possibilities:
1) The orange bag is before the bright orange bag in the chest
2) The bright orange bag is before the orange bag in the chest
You type "get orange.bag" chest because dammit you want the orange one and not the bright one but sometimes you get the bright orange bag.
You should be able to specify "bright" as an antikeyword. In a hypothetical universe where this exists you could perhaps type "get orange.bag.-bright" to specify you want an object that has both orange and bag but not bright from the chest.
There are workarounds such as using "key orange chest" to see which one is first but doing such a thing is cumbersome, inconvenient, and bad user experience design.

You are grebbing for arrowheads:
It is possible to specify a keyword object expression when foraging. You can type "forage rock for sharp" to try and match the sharp flint and obsidian items that are usable as arrowheads but there are also pieces of agate that do not share the keyword sharp which are useful as arrowheads. When you roll an item on the forage table that does not match the specified object expression the item is discarded.
You should be able to join keyword object expressions with a logical or operator. In a hypothetical universe where this exists you could perhaps type "forage rock for sharp+agate" to match more potential arrowhead items when foraging.
A zalanthan should also be able to actually sort the small rocks they greb in this way which the current system does not support.


It would also be possible to use these features together.

What you should not do in a reply:
Call my syntax bad. These are examples in a hypothetical universe and using '!' or something else for an antikeyword might make more sense
Provide nonconstructive criticism.

Quote from: Lotion on February 18, 2021, 10:56:24 PM

(disclaimer, I don't actually know what user story means in terms of textbook UX dictionary wossname)
To demonstrate the use of these features I will create two user stories which show the current problems.



You could basically get a job in UX now.  :D
Quoteemote pees into your eyes deeply

Quote from: Delirium on November 28, 2012, 02:26:33 AM
I don't always act superior... but when I do it's on the forums of a text-based game

Use case for trying to get both:
You are foraging for water in the wilderness and want to type
forage food for white.bulb.woody+sac.-smelly

Also if for some reason someone wants to complain about how these more powerful expressions risk making the game turing complete or something consider the fact that someone could execute a brainfuck program in armageddon by picking up and placing obsidian coins on the ground to execute + and - instructions and moving between rooms in a predefined order to execute > and < instructions. The [ and ] instructions are just logical operators and don't need a fancy implementation. The , instruction is easily done via picking up all the coins in the room and then dropping whatever the input is. The . instruction is easily done via "count coins here".

I like the idea, but I'd rather move farther away from old school logic operators and closer to modern plain text logic rather than doubling down on oldschool keyword search styles.

forage rocks for sharp agate
get red arrow from neon green chest
get red arrow 20 from neon green chest 2
forage wood for branch but not knobby fuckwood
Former player as of 2/27/23, sending love.

Quote from: valeria on March 02, 2021, 10:49:47 AM
I like the idea, but I'd rather move farther away from old school logic operators and closer to modern plain text logic rather than doubling down on oldschool keyword search styles.

forage rocks for sharp agate
get red arrow from neon green chest
get red arrow 20 from neon green chest 2
forage wood for branch but not knobby fuckwood
That looks better. Can I dm you on disco to collab on a more technical description of that syntax?

Sure, I'm not sure how much help I'll be, but I'll send you my handle.
Former player as of 2/27/23, sending love.