changeset 1674:fddc49a03f9e

Refactor the target shape mangling. Unfortunately this breaks backwards compatibility with previous "fmt_shape" setting. You will need to update yours with the new tokens or remove it from configuration file to use the new default.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 25 Mar 2024 19:15:08 +0200
parents 54a9a23d8df0
children 27281a74c507
files ggrtf.tf
diffstat 1 files changed, 30 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/ggrtf.tf	Mon Mar 25 19:12:17 2024 +0200
+++ b/ggrtf.tf	Mon Mar 25 19:15:08 2024 +0200
@@ -2068,7 +2068,7 @@
 ;; Report shape
 ;@command /shape
 ;@desc Reports the last catched shape of a opponent (monster) in battle.
-;@desc This does not work too well if you were fighting more than one opponents.
+;@desc This does not work too well if you are fighting more than one opponents.
 /def -i shape =\
 	/if (battle_target!~"")\
 		/msr %{battle_shape} (%{battle_target})%;\
@@ -2078,16 +2078,8 @@
 
 ;; Define shape formatting string
 /prdefvar -n"fmt_shape" \
-	-v"@{Cgreen}%%{4} %%{5}@{n} [@{%%{1}}%%{2}@{n}] (@{%%{1}}%%{3}%%%@{n})" \
-	-c"Format string for shape reporting. %{1}=shape colour, %{2}=shape short name, %{3}=percentage, %{4}=target name, %{5}=shape long name"
-
-;; Update/set new shape
-/eval /def -i gbattle_ss =\
-	/substitute -p %{fmt_shape}%%;\
-	/if (battle_st)\
-		/set battle_pshape=%%{battle_shape}%%;\
-		/set battle_shape=%%{2}%%;\
-	/endif
+	-v"@{Cgreen}$$[pad({bs_name},-40)}@{n} [@{%%{bc_color}}%%{bs_short}@{n}] (@{%%{bs_color}}%%{bs_range}%%%@{n})@{BCred}%%{bs_extra}@{n}" \
+	-c"Format string for shape reporting. %{bs_name}=target name, %{bs_color}=shape color, %{bs_short}=shape short name, %{bs_long}=shape long name, %{bs_range}=percentage/range, %{bs_extra}=stunned etc"
 
 ;; (Re)initialize battle
 /def -i gbattle_init =\
@@ -2126,29 +2118,33 @@
 	/msk @{BCyellow}Targetting@{n} -> @{BCred}%{P1}@{n}%;\
 	/set battle_target=%{1}
 
-;; Get shape
-/def -i -F -p9999 -mregexp -t"^([A-Za-z ,.'-]+) is (in (a )?)?(excellent shape|good shape|slightly hurt|noticeably hurt|not in a good shape|bad shape|very bad shape|near death)\.$" gbattle_shape1 =\
-	/if ({P4}=~"excellent shape") /test gbattle_ss("BCgreen","es","90-100",{P1},{P4})%;\
-	/elseif ({P4}=~"good shape") /test gbattle_ss("Cgreen","gs","80-90",{P1},{P4})%;\
-	/elseif ({P4}=~"slightly hurt") /test gbattle_ss("BCcyan","sh","65-80",{P1},{P4})%;\
-	/elseif ({P4}=~"noticeably hurt") /test gbattle_ss("Ccyan","nh","50-65",{P1},{P4})%;\
-	/elseif ({P4}=~"not in a good shape") /test gbattle_ss("BCyellow","nigs","35-50",{P1},{P4})%;\
-	/elseif ({P4}=~"bad shape") /test gbattle_ss("Cyellow","bs","20-35",{P1},{P4})%;\
-	/elseif ({P4}=~"very bad shape") /test gbattle_ss("BCred","vbs","10-20",{P1},{P4})%;\
-	/elseif ({P4}=~"near death") /test gbattle_ss("Cred","nd","0-10",{P1},{P4})%;/endif
-
-/def -i -F -p9999 -mregexp -t"^([A-Za-z ,.'-]+) is (in (a )?)?(excellent shape|good shape|slightly hurt|noticeably hurt|not in a good shape|bad shape|very bad shape|near death) \(([0-9]+).\)\.$" gbattle_shape2 =\
-	/if ({P4}=~"excellent shape") /test gbattle_ss("BCgreen","es",{P5},{P1},{P4})%;\
-	/elseif ({P4}=~"good shape") /test gbattle_ss("Cgreen","gs",{P5},{P1},{P4})%;\
-	/elseif ({P4}=~"slightly hurt") /test gbattle_ss("BCcyan","sh",{P5},{P1},{P4})%;\
-	/elseif ({P4}=~"noticeably hurt") /test gbattle_ss("Ccyan","nh",{P5},{P1},{P4})%;\
-	/elseif ({P4}=~"not in a good shape") /test gbattle_ss("BCyellow","nigs",{P5},{P1},{P4})%;\
-	/elseif ({P4}=~"bad shape") /test gbattle_ss("Cyellow","bs",{P5},{P1},{P4})%;\
-	/elseif ({P4}=~"very bad shape") /test gbattle_ss("BCred","vbs",{P5},{P1},{P4})%;\
-	/elseif ({P4}=~"near death") /test gbattle_ss("Cred","nd",{P5},{P1},{P4})%;/endif
-
-;; Monster RIP does not necessarily end battle, but let's reset
-;; the target at least.
+
+;; Get and mangle target(s) shape
+/def -i gbattle_shape_mangle =\
+	/let bs_name=%{1}%;\
+	/let bs_long=%{2}%;\
+	/let bs_perc=%{3}%;\
+	/let bs_extra=%{4}%;\
+	/if (battle_st)\
+		/set battle_pshape=%{battle_shape}%;\
+		/set battle_shape=%{bs_long}%;\
+	/endif%;\
+	/if (bs_long=~"excellent shape")         /let bs_color=BCgreen%; /let bs_short=es%;  /let bs_range=90-100%;\
+	/elseif (bs_long=~"good shape")          /let bs_color=Cgreen%;  /let bs_short=gs%;  /let bs_range=80-90%;\
+	/elseif (bs_long=~"slightly hurt")       /let bs_color=BCcyan%;  /let bs_short=sh%;  /let bs_range=65-80%;\
+	/elseif (bs_long=~"noticeably hurt")     /let bs_color=Ccyan%;   /let bs_short=nh%;  /let bs_range=50-65%;\
+	/elseif (bs_long=~"not in a good shape") /let bs_color=BCyellow%;/let bs_short=nigs%;/let bs_range=35-50%;\
+	/elseif (bs_long=~"bad shape")           /let bs_color=Cyellow%; /let bs_short=bs%;  /let bs_range=20-35%;\
+	/elseif (bs_long=~"very bad shape")      /let bs_color=BCred%;   /let bs_short=vbs%; /let bs_range=10-20%;\
+	/elseif (bs_long=~"near death")          /let bs_color=Cred%;    /let bs_short=nd%;  /let bs_range=0-10%;/endif%;\
+	/if (bs_perc!~"") /let bs_range=%{bs_perc}%;/endif%;\
+	/eval /substitute -p %{fmt_shape}
+
+/def -i -F -p9999 -mregexp -t"^([A-Za-z ,.'-]+) is (in (a )?)?(excellent shape|good shape|slightly hurt|noticeably hurt|not in a good shape|bad shape|very bad shape|near death)( \(([0-9]+)%\))?(.*?)?\.$" gbattle_shape_match =\
+	/test gbattle_shape_mangle({P1},{P4},{P6},{P7})
+
+
+;; Monster RIP does not necessarily end battle, but let's reset the target at least.
 /gdef -i -p9999 -aCgreen -mregexp -t"^[A-Za-z ,.'-]+ is DEAD, R.I.P.$" gbattle_rip =\
 	/set battle_target=%;\
 	/prexecfuncs %{event_battle_rip}