Up to Main Index Up to Journal for July, 2022 JOURNAL FOR MONDAY 18TH JULY, 2022 ______________________________________________________________________________ SUBJECT: Combat message magic DATE: Mon 18 Jul 22:42:41 BST 2022 I’m slowly melting in the lab today, ambient temperature is 33°C due to a UK heatwave. For the UK the highest temperature recorded was 38.1°C and it’s only going to get hotter tomorrow… Let’s get the really boring stuff out of the way first. Compiling Go 1.18.4 on a Pi ZeroW I was bitten by issue #53814. Applying https://go.dev/cl/417655 manually fixed the issue. Then testing runtime/pprof failed due to it being killed for taking too long to complete. I managed to get around that issue by setting the default stacks to 1Mb instead of 8Mb using “ulimit -s 1024” and reducing a lot of swapping to SDCard which sped thing up. Now for the exciting boring stuff :) At the moment combat is very boring: >HIT SLUG You attack the giant fungus slug! The giant fungus slug hits you doing 4 damage. You hit the giant fungus slug doing 9 damage. The giant fungus slug hits you doing 2 damage. The giant fungus slug hits you doing 2 damage. You hit the giant fungus slug doing 9 damage. You hit the giant fungus slug doing 14 damage. You kill a giant fungus slug! Combat messages add variety to combat. Wouldn’t it be nicer to see: >HIT SLUG You attack the giant fungus slug! A giant fungus slug spits at you covering you with a stinging slime. You swing a sword at a giant fungus slug wounding it. A giant fungus slug turns toward you knocking you back. A giant fungus slug rears up over you and drops its body on you. You lunge at a giant fungus slug with your sword wounding it. You slash at a giant fungus slug with your sword. You kill a giant fungus slug! A little more dramatic if nothing else ;) Any observers watching the same fight would see: Diddymus attacks the giant fungus slug! A giant fungus slug spits at Diddymus covering him with a stinging slime. Diddymus swings his sword at a giant fungus slug wounding it. A giant fungus slug turns toward Diddymus knocking him back. A giant fungus slug rears up over Diddymus and drops its body on him. Diddymus lunges at a giant fungus slug with his sword wounding it. Diddymus slashes at a giant fungus slug with his sword. Diddymus killed a giant fungus slug! Defining and generating these messages can be a little problematic. Especially for items, like the sword, that can be wielded by a male or female depending on who picks it up. Yes, I need to work on my gender pronouns and sticking to using ‘they’ and ‘their’ would solve some issues… Take this simple message, from three different view points. The message is spaced out to make it easier to see where they differ: Attacker: You swing your sword at a giant fungus slug wounding it. Defender: Diddymus swings his sword at you wounding you. Observer: Diddymus swings his sword at a giant fungus slug wounding it. The definition for the message is: [%A] swing[/s] [your/%A] sword at [%D] wounding [%D]. The Java version was horrendous. The message still looked simple enough: {0} lunge[/s] at {3} with a sword wounding {1}. But then there was the ancillary lookup table you had to keep handy :( Substitution Replaced By Attacker's Viewpoint Defender's Viewpoint Viewer's Viewpoint {0} YOU Defender's Name Defender's Name {1} HIM, HER or IT DB YOU HIM, HER or IT DB {2} Defender's Name + 'S YOUR Defender's Name + 'S {3} Defender's Name YOU Defender's Name {4} YOUR HIS, HER or ITS AB HIS, HER or ITS AB {5} YOU HIM, HER or IT AB HIM, HER or IT AB {6} HIS, HER or ITS DB YOUR HIS, HER or ITS DB {7} YOU HE, SHE or IT AB HE, SHE or IT AB DB = Defender Based, AB = Attacker Based The combat messages will be derived from a new OnCombat field. For the slug: OnCombat: [%A] spit[/s] at [%D] covering [%D] with a stinging slime. : [%D] pound[s/] at [%A] to little effect. : [%A] turn[/s] toward [%D] knocking [%D] back. : [%A] rear[/s] up over [%D] and drop[/s] [%A][r/s] body on [%D]. For the sword Diddymus is using: OnCombat: [%A] swing[/s] [your/%A] sword at [%D] wounding [%D]. : [%A] lunge[/s] at [%D] with [%A][r//] sword wounding [%D]. : [%A] slash[/es] at [%D] with [%A][r//] sword. But what do all the funny bits mean? The square brackets contain up to three substitution texts, separated by forward slashes ‘/’, in the order: Attacker, Defender, Observer. For example, with this text: You are [an attacker/a defender/an observer]. An attacker would see "You are an attacker.", a defender would see "You are a defender" and observers would see "You are an observer". If only one or two replacement texts are specified the last text is repeated. For example, with this text: You are [an attacker/not an attacker]. The "not an attacker" would be repeated as the third string. There are two special substitutions ‘%A’ and ‘%D’. These are replacements for the attacker ‘%A’ and defender ‘%D’. The first time either ‘%A’ or ‘%D’ are seen the appropriate name is used. Subsequent uses use ‘you’ or ‘his/her/its’ depending on who the attacker and defender are and who the message is targeted at. This is why you are asked for a gender when creating a character. At the moment I haven’t actually implemented ‘OnCombat’ messages yet. I just have a simple mock-up with some hard coded samples while I play around with the code. The mock-up was used to generate all of the messages above. So far I’ve managed to banish Java’s horrendous table and simplify the message syntax which is a good start. What do you think? Comments and suggestions welcome: diddymus@wolfmud.org -- Diddymus Up to Main Index Up to Journal for July, 2022