changeset 42:8bf52a7380ef

New /defhook macro added for making direct hook-settings. New keyboard movement (moves binded to /prmove) handling code using hooks.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 13 Sep 2005 15:07:43 +0000
parents 2e3df881382a
children 224a5962ca1a
files ggrtf.tf
diffstat 1 files changed, 96 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/ggrtf.tf	Tue Sep 13 11:15:27 2005 +0000
+++ b/ggrtf.tf	Tue Sep 13 15:07:43 2005 +0000
@@ -48,6 +48,18 @@
 /set status_pad=_
 /load map.tf
 
+;; General settings
+/set set_plrname=
+
+;; Misc
+/set battle_target=off
+/set battle_st=off
+/set spell_st=off
+/set skill_st=off
+/set battle_ripfuncs=
+/set battle_roundfuncs=
+/set cast_info=
+
 ;; Counters
 /set cnt_casts=0
 /set cnt_scasts=0
@@ -71,12 +83,6 @@
 /set cnt_fskills=0
 /set cnt_fuskills=0
 
-/set battle_target=off
-/set battle_st=off
-/set spell_st=off
-/set battle_ripfuncs=
-/set battle_roundfuncs=
-/set cast_info=
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Helper functions, etc.
@@ -137,6 +143,11 @@
 	/endif
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Return a color definition based on [n, nmax] (useful for hp/sp/ep lites)
+/def -i prgetcolor =\
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; List available options
 /def -i opts_dolist =\
 /while ({#})\
@@ -156,12 +167,14 @@
 	/shift%;\
 /done
 
+
 /def -i opts =\
 /msq ,----------------.%;\
 /msq | @{BCgreen}ggrTF@{n} @{Cyellow}Settings@{n} |%;\
 /msq +----------------+----------------------------------------------------.%;\
 /opts_dolist %{lst_options}%;\
 /settings_dolist %{lst_settings}%;\
+/settings_dolist %{lst_hooks}%;\
 /msq `---------------------------------------------------------------------'
 
 
@@ -172,7 +185,15 @@
 	/if (!getopts("n:d:", "")) /msq ERROR! Invalid toggle creation command!%;/break%;/endif%;\
 	/set lst_options=%{opt_n} %{lst_options}%;\
 	/set opt_%{opt_n}_d=%{opt_d}%;\
-	/eval /def -i %{opt_n} = /if ({opt_%{opt_n}}=~"on") /set opt_%{opt_n}=off%%%;/let qstr=@{Cred}OFF@{n}%%%;/else /set opt_%{opt_n}=on%%%;/let qstr=@{BCgreen}ON@{n}%%%;/endif%%%;/msq @{Cyellow}%{opt_d}@{n} [%%%{qstr}]
+	/eval /def -i %{opt_n} =\
+		/if ({opt_%{opt_n}}=~"on")\
+			/set opt_%{opt_n}=off%%%;\
+			/let qstr=@{Cred}OFF@{n}%%%;\
+		/else \
+			/set opt_%{opt_n}=on%%%;\
+			/let qstr=@{BCgreen}ON@{n}%%%;\
+		/endif%%%;\
+		/msq @{Cyellow}%{opt_d}@{n} [%%%{qstr}]
 
 ;; Settings
 /set lst_settings=
@@ -197,22 +218,41 @@
 			/if ({qrvals}>0)\
 				/set set_%{opt_n}=%%%{1}%%%;\
 				/msq @{Cyellow}%{opt_n}@{n} : Set to [@{BCgreen}%%%{set_%{opt_n}}@{n}]%%%;\
-				/else \
-				/msq @{Cyellow}%{opt_n}@{n} : @{BCred}Invalid setting@{n} [@{BCgreen}%%%{1}@{n}]!%%%;\
-				/endif%%%;\
 			/else \
+				/msq @{Cyellow}%{opt_n}@{n} : @{BCred}Invalid setting@{n} [@{BCgreen}%%%{1}@{n}]!%%%;\
+			/endif%%%;\
+		/else \
 			/msq @{BCred}/%{opt_n}@{n} - @{Cyellow}%{opt_d}@{n} [@{BCgreen}%%%{set_%{opt_n}_s}@{n}]%%%;\
-			/endif
-	
+		/endif
+
+;; Function hook setting
+/set lst_hooks=
+/def -i defhook =\
+	/if (!getopts("n:d:s:h:", "")) /msq ERROR! Invalid function hook setting creation command!%;/break%;/endif%;\
+	/set lst_hooks=%{opt_n} %{lst_hooks}%;\
+	/set set_%{opt_n}_d=%{opt_d}%;\
+	/set set_%{opt_n}_s=%{opt_s}%;\
+	/eval /def %{opt_n} =\
+		/if ({#})\
+			/chksetting %%%{1} %%%{set_%{opt_n}_s}%%%;\
+			/if ({qrvals}>0)\
+				/set set_%{opt_n}=%%%{1}%%%;\
+				/msq @{Cyellow}%{opt_n}@{n} : Set to [@{BCgreen}%%%{set_%{opt_n}}@{n}]%%%;\
+				/eval /def -i %{opt_h}=/%{opt_h}_%%%{1} %%%%%*%%%;\
+			/else \
+				/msq @{Cyellow}%{opt_n}@{n} : @{BCred}Invalid setting@{n} [@{BCgreen}%%%{1}@{n}]!%%%;\
+			/endif%%%;\
+		/else \
+			/msq @{BCred}/%{opt_n}@{n} - @{Cyellow}%{opt_d}@{n} [@{BCgreen}%%%{set_%{opt_n}_s}@{n}]%%%;\
+		/endif
+
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Define some generic option toggles and settings
 /set opt_verbose=on
-/set opt_pss=on
 /deftoggle -n"verbose"	-d"Verbose (off = echo to client only)"
 /deftoggle -n"rshape"	-d"Report enemy shape when it changes"
 /deftoggle -n"rrounds"	-d"Report spell/skill rounds"
-/deftoggle -n"peer"	-d"Automatic peer on move"
 /deftoggle -n"rstat"	-d"Report your hp/sp/ep every round"
 /deftoggle -n"pss"	-d"Auto party short status"
 /deftoggle -n"info"	-d"Cast/skill information in prompt"
@@ -220,6 +260,7 @@
 /set set_ripaction=off
 /defsetting -n"ripaction" -d"Set the action performed at RIP" -s"off dig eat get"
 
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Redefinable macros for user
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -231,40 +272,63 @@
 /defripfunc eat treat_corpse /eat_corpse
 /defripfunc get trget_corpse /get_corpse
 
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Movement
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-/def -i -mglob -h'send {n|s|e|w|ne|sw|nw|se|u|d}' prmove_send = /set prmove_last=%*%;/status_update%;/send %*
+;; Catch movement commands to update the status bar
+/def -i -mglob -h'send {n|s|e|w|ne|sw|nw|se|u|d}' prmove_send =\
+	/set prmove_last=%*%;\
+	/status_update%;\
+	/send %*
 
+;; Normal movement
+/def -i prmove_walk = /set prmove_last=%{1}%;/status_update%;@%{1}
+
+;; Autopeering
 /set set_prexpr=embedded
-/def -i prmove = /set prmove_last=%{1}%;/status_update%;@%{1}%;\
-/if ({opt_peer}=~"on")\
+/def -i prmove_peer = /set prmove_last=%{1}%;/status_update%;@%{1}%;\
 	/if ({1}=~"n" | {1}=~"s") /let pd1=w%;/let pd2=e%;/endif%;\
 	/if ({1}=~"w" | {1}=~"e") /let pd1=n%;/let pd2=s%;/endif%;\
 	@@grep '(%{set_prexpr})' peer %{pd1}%;\
-	@@grep '(%{set_prexpr})' peer %{pd2}%;\
-	/endif
+	@@grep '(%{set_prexpr})' peer %{pd2}
+
+;; Ship movement
+/deftoggle -n"cruise" -d"Cruise speed on ship (off = sail)"
+/def -i prmove_ship = /set prmove_last=%{1}%;/status_update%;\
+/if ({opt_cruise}=~"on") @cruise %{1}%;/else @sail %{1}%;/endif
 
+
+;; Main handling macro for binding movemement keys, etc.
+/defhook -n"move" -d"Keyboard movement hooks" -h"prmove" -s"walk ship peer"
+/move walk
+
+;; 'view' on every ship move
 /def -i -F -mregexp -t"^The ship (sails|cruises) " ship_move = @view
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Status line
+;; Status bar
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; These macros handle the statusbar functionality. Unfortunately
+; some things (like channeller energy aura), etc. are hardcoded here,
+; due to some complexities in modularizing them. This might get changed
+; in future, though...
+
 ;; Add value item (hp/sp/ep/etc) to status string
 /def -i status_add_val =\
-/eval /set qtval1v=$$[status_%{1}]%;\
-/eval /set qtval2v=$$[status_%{1}max]%;\
-/let qtval1=status_%{1}%;\
-/let qtval2=status_%{1}max%;\
-/let qtcolor=Cwhite%;\
-/if ({qtval1v} >= (qtval2v * 6 / 7)) /let qtcolor=BCgreen%;/endif%;\
-/if ({qtval1v} < (qtval2v * 6 / 7)) /let qtcolor=Cgreen%;/endif%;\
-/if ({qtval1v} < (qtval2v * 5 / 7)) /let qtcolor=BCyellow%;/endif%;\
-/if ({qtval1v} < (qtval2v * 4 / 7)) /let qtcolor=Cyellow%;/endif%;\
-/if ({qtval1v} < (qtval2v * 3 / 7)) /let qtcolor=Cred%;/endif%;\
-/if ({qtval1v} < (qtval2v * 2 / 7)) /let qtcolor=BCred%;/endif%;\
-/set status_pstr=%{status_pstr} :1 "[%{2}:" %{qtval1}:4:%{qtcolor} "/" %{qtval2}:4:BCgreen "]"
+	/eval /set qtval1v=$$[status_%{1}]%;\
+	/eval /set qtval2v=$$[status_%{1}max]%;\
+	/let qtval1=status_%{1}%;\
+	/let qtval2=status_%{1}max%;\
+	/let qtcolor=Cwhite%;\
+	/if ({qtval1v} >= (qtval2v * 6 / 7)) /let qtcolor=BCgreen%;/endif%;\
+	/if ({qtval1v} < (qtval2v * 6 / 7)) /let qtcolor=Cgreen%;/endif%;\
+	/if ({qtval1v} < (qtval2v * 5 / 7)) /let qtcolor=BCyellow%;/endif%;\
+	/if ({qtval1v} < (qtval2v * 4 / 7)) /let qtcolor=Cyellow%;/endif%;\
+	/if ({qtval1v} < (qtval2v * 3 / 7)) /let qtcolor=Cred%;/endif%;\
+	/if ({qtval1v} < (qtval2v * 2 / 7)) /let qtcolor=BCred%;/endif%;\
+	/set status_pstr=%{status_pstr} :1 "[%{2}:" %{qtval1}:4:%{qtcolor} "/" %{qtval2}:4:BCgreen "]"
 
 ;; Add aura item
 /def -i status_add_aura =\