From 15d762deb05cd1bf7a5e2351172f65ee04252dcf Mon Sep 17 00:00:00 2001 From: NovaRain Date: Sun, 3 Mar 2019 11:00:30 +0800 Subject: [PATCH] Fixed the lighting of controlled critters in NPC combat control mod. --- artifacts/mods/gl_partycontrol.int | Bin 3166 -> 3584 bytes artifacts/mods/gl_partycontrol.ssl | 25 +++++++++++++++++++++++-- sfall/Modules/Criticals.cpp | 2 +- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/artifacts/mods/gl_partycontrol.int b/artifacts/mods/gl_partycontrol.int index 44e20bda877d7ea74a599ecbf2591316ab0569e7..4deb0bee5c21ee3cfa7e84e80856add915a491fa 100644 GIT binary patch delta 1635 zcmca7(I6wxz;u9-fq_A&ffqzGUzjLhP|qUA009yZ3Pys(nHd-uRA3?ynq>|H0|OHS z1A_^K4mz(o;*~^OLetlS|@L5=#;%zh=5Wc^@;+>exRkwV@)0%zCXTwv4eTQIVCfqmk^$sg*9QFwph!K^R0bA>`eWJ{a`kVUIvI`Ss}VOHNYx3Kw;jnzhQsFm4^KdZyL5iLIf(y28%w9 zABfOmU~Dh~d2ezLJ8%6nuqkZNSYT{0YFGjmVQ&y>s)U%uz}6ttcn2iPc?057PDp@) z?FNfSfk==#NO}OV8t;O{pen&}hn(yK&;@LH(7zhL=L~NC(q%O(Jl;vI@+G1R*rwx#ms2!=WStmcS9x zlmBq&*m2u|l_1Q212z8%Se&`R7~*YiyN3Osq|3;_un?BNxK$>naVGHazGzH=Bv0;^ z$(J~d1h`K%@PZA50w_-ilIj_iV5z>r5NxXvSe~K5sKK%^1jObAWi?d>cwS>@FokLj zYJ>zbBP37qoS6KNOQoLY0VF|yk`zck151M?n1(9jg(Ol~@?vc;hXewz1SI+)u@6cv yP+dkazd{o`%qI>|d%y{afq?-c?#RHKff6JT4?`juHAvW@K{5$NeaqxW+%*7iuvumR delta 1063 zcmZpWxhEmez;u9-fq_A&ffqzG&zLA+P|tjY0Rki-6pRFmGczzSsK7)ZG)oWz0|OHS z1A_^K4ZcQG(9fNVVk;loHa2QbT22YxPq~4vJ2Ds$*RnEIU1NjKIPmpS%$@#(PDA}OAQmtgUR<; z#F$u)O#a4_$!In?fmN4r!Q?*HNJf{*FIbfYH9$HT7#oBdq(Lm!Ka*wH3>ifx`>|zA z7Gf7tV?PBFW?*PA0@I8Q#t?;UcN!!b^c$o=qHKF6d$G$gvE7-R#csgF?lyT2yCk~> zNQQxJvKxo4IctM3h{t{iL^7~82sP+8>~GlLaHU~?!<&X}5L2MC%rK|0Pn!IILq72e zSPyf95SV6cFltx=X0bE~HB~}%GB7s?HQoVKgQ6tj4<_ z7DveB1Wqvl4u=Mb23MGeI4mZ&ahgoF=l^&HF+Di0uxu*7OgwIr|8a}e zb4^25!U)L*3=k{9Bx3_Bm}Z9fhx;6qC)A)1GL%uEsSGT_&|nDWD?oWh4VH}|AU1a& zh=ivKh6YopPKU-d2Y5lQV{9-4DdAR|ynsiAiQ8`SF&;S$?lzDZC>p>tYlAt&YushX rq0hiPnTJ<09_F}tkSK*)1`|Jq;>kF$iP${J0`=qv6!k@uTX<^#piJ03 diff --git a/artifacts/mods/gl_partycontrol.ssl b/artifacts/mods/gl_partycontrol.ssl index b570da8d..8585f91f 100644 --- a/artifacts/mods/gl_partycontrol.ssl +++ b/artifacts/mods/gl_partycontrol.ssl @@ -15,12 +15,15 @@ #include "..\headers\command.h" #include "main.h" +#define OBJ_DATA_LIGHT_DISTANCE (0x6C) +#define OBJ_DATA_LIGHT_INTENSITY (0x70) + variable controlMode, noCheckArray, pidList, - displayName, - displayNameColor, + lightInt, lightDist, npcControl, + displayName, displayNameColor, inControl := false, hasGeckoSkinning := false; @@ -38,12 +41,26 @@ procedure combatturn_handler begin pid; //display_msg("Combat Turn: " + status + ", by " + obj_name(critter) + ", arg3: " + arg3); + if npcControl then begin + if lightInt then lightInt := round((lightInt / 65536.0) * 100); // calc percent of intensity + obj_set_light_level(npcControl, lightInt, lightDist); // restore/off light for NPC + end + pid := obj_pid(critter); if (status == 1 and (AllowControl(pid) or controlMode == 1)) then begin set_dude_obj(critter); if (critter != real_dude_obj) then begin + if not(npcControl) then obj_set_light_level(real_dude_obj, 0, 0); // dude off light + npcControl := critter; + lightDist := get_object_data(critter, OBJ_DATA_LIGHT_DISTANCE); + lightInt := get_object_data(critter, OBJ_DATA_LIGHT_INTENSITY); + obj_set_light_level(critter, 100, 4); + if hasGeckoSkinning then critter_add_trait(critter, TRAIT_PERK, PERK_gecko_skinning_perk, 1); inControl := true; + end else if npcControl then begin + obj_set_light_level(dude_obj, 100, 4); // set default light + npcControl := 0; end if inControl then begin // center the screen on the controlled critter and remove roof tiles @@ -57,6 +74,8 @@ procedure combatturn_handler begin if displayName then hide_iface_tag(displayName); if (status == -1 or AllowControl(pid) == false) then begin set_dude_obj(real_dude_obj); + obj_set_light_level(dude_obj, 100, 4); + npcControl := 0; end end end @@ -67,6 +86,8 @@ procedure gamemodechange_handler begin inControl := false; if (dude_obj != real_dude_obj) then begin set_dude_obj(real_dude_obj); + obj_set_light_level(dude_obj, 100, 4); + npcControl := 0; end move_to(dude_obj, dude_tile, dude_elevation); end diff --git a/sfall/Modules/Criticals.cpp b/sfall/Modules/Criticals.cpp index 7d7846b4..630df8f4 100644 --- a/sfall/Modules/Criticals.cpp +++ b/sfall/Modules/Criticals.cpp @@ -247,7 +247,7 @@ static void CriticalTableOverride() { static void RemoveCriticalTimeLimitsPatch() { if (GetConfigInt("Misc", "RemoveCriticalTimelimits", 0)) { dlog("Removing critical time limits.", DL_INIT); - SafeWrite8(0x424118, 0xEB); // jmps 0x424131 + SafeWrite8(0x424118, 0xEB); // jump to 0x424131 SafeWrite8(0x4A3053, 0x0); SafeWrite8(0x4A3094, 0x0); dlogr(" Done", DL_INIT);