From 96447ca1d3df33be214df170f8c0e5728fe5c01c Mon Sep 17 00:00:00 2001 From: NovaRain Date: Thu, 10 Sep 2020 14:43:46 +0800 Subject: [PATCH] Updated Ammo INI Loader example script mod * now the INI will be read only once on script initialization, not always being re-read on each map load. --- artifacts/example_mods/AmmoMod/gl_ammomod.int | Bin 1238 -> 1690 bytes artifacts/example_mods/AmmoMod/gl_ammomod.ssl | 64 ++++++++++-------- 2 files changed, 35 insertions(+), 29 deletions(-) diff --git a/artifacts/example_mods/AmmoMod/gl_ammomod.int b/artifacts/example_mods/AmmoMod/gl_ammomod.int index 2730de62ef6f5f92be294fc900a7fe77f1d59eaf..f16f6d9959837156adac14aaa1fd7577cc48fafc 100644 GIT binary patch literal 1690 zcmZo*I>5-lz#!DX3!)j%G_W)XG)OflG)OflHb^xnHApomH>fnIHmET$FfcPPFt9P8 z0LBkct^|~ZQgCqvr~s5=b%HYd7zFfC0Lbj(lEk7C1_q(r#De(Lypq(S_=5O?qWokA z1_qAA+}wQ6yi5iLE)dHlu_O^BnwpoGl#`mm@c;k+{|pQaKN#dvQi>AG^)mA^YkV_{ zlWSZOa}(23-SUfaOLIUv_#AU{^WAgu%c?+X7#P6(NJmFs2$z8eB=4J_0^xGh7}gYI zrZ9kPO^#1Y$to=_VPIgYVPN2?Nkj-RaHSN%WqE3lI1F4hDT%r9xurQJ3=CWdCR98n zvkc@5kT{sh2DMELO~ERLiaY`Yt> zC<8--5Lh&%!4l0?Pr&M6u3%^|ZO{jcFf{NsNH%CSXg2UP$bdx{8=z)3=|cHnf5BbE z)L;k_XSoL=8JHT3z%)aHMS}sDg{dE`o`JE!2<)~vuqv2Kvl=X+e4_?SuzViK?M-@M zQJ9_@Fb}t$4kSIeRZRn_0-MAP@dMmVi$J0*Y#@?>8OcYGFoKG(@IYdSff4FD+%~Pl zY11x{9V`VP5|2$~Xf`oIQxhz-85@k?Zh(Y8BRm`-p^e*ZN8oOQ#w4>4#5R^Mkg^S$ zFPIuw8>GN7at7>Lh6W*M3_XF{1+&`9N5ao)RH>kh#IADGY2113ca#G7JqyO^`Tdgvu~L zV;@pNz|vn_lYSE`)C7p1VQC$brfV?dO~9&Q`WIoyTcF7Ag3H7F0gF$lzgcHN;)nqy Ize2(l0FZHN=Kufz literal 1238 zcmZo*I>5-lz#!DX3!)i28dw?x8l)N&8l)N&8>AYP8l)PO8&n!p8`KyW7+4q>7}yw4 z0OK+!R{}~yDY&=>Q~*jbPl7TGpfr?X>47qW7zFfC00RR9UvX+ld}3~Hetd3z3djw` zC5c5P3=BfKi3Rbgc_pbu@dfb(Mfu4L3=A9~b)I>d3=ABpd5K9msVNNq|NsBbz`!tr zfvJXpfvu(>6J!QYO=5Ct*I;*7#-?C)ck3&?#9I-u}pU_d4tm_a<|NewIw+8`E+EF(ySxe7!wFf|x~X@&-i z1_LNdXaXo+*%~ate5MAY21~FASA%8a8n75cgCU4!k^_+p3{W!|8_XN@K_bjm4J;rU zE(3L811^(=Kqfb_qUa&y8U++RxJ=dqsREnJ2zB!fC=cRqxSJWkp~3)F1$Vg#Of}qf zxNNdQw~5&arWZ;>LkEXV7Eo12P@7;e!w8QDaF{b5fQKz_gJgqNgJuIygAACKfy6aS zNn=WbJ~+nQ;PE94GM)Jyh-6@B5CYST4aQ&^#%F3UZm@^yOoPgR^|5F{>|~LFibC|W zHW))ymqEqhs=>CmA&Y`+1&dBW3MYvA60kZ(sH;FJ5uA!xiXbHmH0?4rur^46RWdZ- P^7%fnJf=x|h&KrUBv}Lq diff --git a/artifacts/example_mods/AmmoMod/gl_ammomod.ssl b/artifacts/example_mods/AmmoMod/gl_ammomod.ssl index b5742868..67df2d9e 100644 --- a/artifacts/example_mods/AmmoMod/gl_ammomod.ssl +++ b/artifacts/example_mods/AmmoMod/gl_ammomod.ssl @@ -12,52 +12,58 @@ Requires sfall 3.5 or higher */ -#include "..\headers\define_extra.h" +#include "..\headers\sfall\sfall.h" +#include "..\headers\sfall\define_extra.h" -procedure set_ammo_mod; procedure start; procedure map_enter_p_proc; variable ammoIni; +variable ammoData; variable enabled; -procedure set_ammo_mod begin - variable pid, dmg_mod, i := 1; - - while (i > 0) do begin - pid := get_ini_setting(ammoIni + "|" + i + "|pid"); - if (pid < 1) then break; - set_proto_data(pid, PROTO_AM_AC_MOD, get_ini_setting(ammoIni + "|" + i + "|ac_adjust")); - set_proto_data(pid, PROTO_AM_DR_MOD, get_ini_setting(ammoIni + "|" + i + "|dr_adjust")); - - // dam_mult and dam_div must be positive integers - dmg_mod := get_ini_setting(ammoIni + "|" + i + "|dam_mult"); - if (dmg_mod < 1) then dmg_mod := 1; - set_proto_data(pid, PROTO_AM_DMG_MULT, dmg_mod); - dmg_mod := get_ini_setting(ammoIni + "|" + i + "|dam_div"); - if (dmg_mod < 1) then dmg_mod := 1; - set_proto_data(pid, PROTO_AM_DMG_DIV, dmg_mod); - - i++; - end - //debug_msg("AmmoMod: " + ammoIni + " - set " + (i - 1) + " ammo protos."); -end - procedure start begin + variable i := 1, ammo, ammoPid, dmgMod; if game_loaded then begin - ammoIni := get_ini_setting("ddraw.ini|Misc|DamageFormula"); - if (ammoIni == 1 or ammoIni == 2) then + enabled := get_ini_setting("ddraw.ini|Misc|DamageFormula"); + if (enabled == 1 or enabled == 2) then ammoIni := "AmmoGlovz.ini"; - else if (ammoIni == 5) then + else if (enabled == 5) then ammoIni := "AmmoYAAM.ini"; else ammoIni := "AmmoMod.ini"; enabled := get_ini_setting(ammoIni + "|1|pid"); - if (enabled > 0) then call set_ammo_mod; + if (enabled <= 0) then return; + + ammoData := create_array_map; + ammoPid := enabled; // pid from the first section + while (ammoPid > 0) do begin + ammo := create_array_map; // create permanent arrays + ammo.ac_adjust := get_ini_setting(ammoIni + "|" + i + "|ac_adjust"); + ammo.dr_adjust := get_ini_setting(ammoIni + "|" + i + "|dr_adjust"); + // dam_mult and dam_div must be positive integers + dmgMod := get_ini_setting(ammoIni + "|" + i + "|dam_mult"); + ammo.dam_mult := dmgMod if (dmgMod > 0) else 1; + dmgMod := get_ini_setting(ammoIni + "|" + i + "|dam_div"); + ammo.dam_div := dmgMod if (dmgMod > 0) else 1; + ammoData[ammoPid] := ammo; + i++; + ammoPid := get_ini_setting(ammoIni + "|" + i + "|pid"); + end + call map_enter_p_proc; + debug_msg("Ammo INI Loader mod: " + ammoIni + " - set " + (i - 1) + " ammo protos."); end end procedure map_enter_p_proc begin - if (enabled > 0) then call set_ammo_mod; + variable pid, values; + if (enabled > 0) then begin + foreach (pid: values in ammoData) begin + set_proto_data(pid, PROTO_AM_AC_MOD, values.ac_adjust); + set_proto_data(pid, PROTO_AM_DR_MOD, values.dr_adjust); + set_proto_data(pid, PROTO_AM_DMG_MULT, values.dam_mult); + set_proto_data(pid, PROTO_AM_DMG_DIV, values.dam_div); + end + end end