![]() |
SUBSIM: The Web's #1 resource for all submarine & naval simulations since 1997 |
![]() |
#3046 | |
Black Magic
![]() |
![]() Quote:
|
|
![]() |
![]() |
![]() |
#3047 | |
Navy Seal
![]() Join Date: Jan 2011
Location: CJ8937
Posts: 8,214
Downloads: 793
Uploads: 10
|
![]() Quote:
![]() you forget something: our extremes are minimum signal strength and minimum signal strength * 3. Divide both terms by minimum signal strength and you get 1 and 3. The midpoint between 1 and 3 is not 1.5; it is 2 ![]() Maybe (yet another) graphical comparison between my function (in blue) and your one (in red), can help: ![]() ![]() |
|
![]() |
![]() |
![]() |
#3048 |
Black Magic
![]() |
![]()
Looked back over the code for the minimum signal strength adjustment and noticed that I wasn't accounting for 0 based numbers
![]() Now it's linear ![]() Code:
TEST AL,AL ; (Check_Adjust_Nightime_Minimum_Signal_Strength_For_Other_Units_Visual_Sensor) tests whether is daytime (0) JNE SHSim_act.089431A4 ; if already nighttime then jump PUSH EAX ; saves EAX to stack PUSH ECX ; saves ECX to stack PUSH ESI ; saves ESI to stack PUSH 48 ; saves offset needed in TDWData to stack (start of nighttime value for other units) CALL SHSim_act.Load_TDWData_Address_Into_EAX ; calls Load_TDWData_Address_Into_EAX FLD DWORD PTR DS:[EAX] ; loads start of nighttime value for other units onto top of floating point stack MOV ECX,DWORD PTR DS:[EBX+48] ; loads pointer to table of offsets into ECX MOV ECX,DWORD PTR DS:[ECX+4] ; loads an offset into ECX FLD DWORD PTR DS:[EBX+ECX+28] ; loads current available light onto top of floating point stack FCOMIP ST,ST(1) ; compares current available light to start of nighttime value for player's unit JNB SHORT SHSim_act.0894319A ; if current available light is greater than or equal to start of nighttime value for PUSH 0 ; saves 0 to stack (need start of rdata section) CALL SHSim_act.Load_rdata_Address_Into_EAX ; calls Load_rdata_Address_Into_EAX MOV ESI,EAX ; saves start of rdata section to ESI ADD EAX,0FB1C ; adds offset needed to EAX (sunlight value - used to determine if nighttime) FLD DWORD PTR DS:[EAX] ; loads sunlight value - used to determine if nighttime onto top of floating point stack FSUBP ST(1),ST ; subtracts ST0 (sunlight value - used to determine if nighttime) from ST1 (start of nighttime value) and stores result in ST1 and pops top of floating point stack (gets range) FLDZ ; loads 0.0 onto top of floating point stack FCOMIP ST,ST(1) ; compares ST0 (0.0) to ST1 (range) and pops top of floating point stack JNB SHORT SHSim_act.0894319A ; if negative value for range then jump FLD1 ; loads 1.0 onto top of floating point stack FXCH ST(1) ; swaps ST0 (1.0) and ST1 (range) FLD DWORD PTR DS:[EBX+ECX+28] ; loads current available light onto top of floating point stack FSUB DWORD PTR DS:[EAX] ; subtracts sunlight value - used to determine if nighttime from ST0 (current available sunlight) FLDZ ; loads 0.0 onto top of floating point stack FCOMI ST,ST(1) ; compares ST0 (0.0) to ST1 (result) - have to account for possible floating point error JBE SHORT SHSim_act.0894315C ; if before or equal then jump FST ST(1) ; saves 0.0 to ST1 (result) - sets new result to 0.0 FSTP ST ; pops top of floating point stack - removes 0.0 FDIVRP ST(1),ST ; divides ST0 (result) by ST1 (range) and stores result in ST1 and pops top of floating point stack FSUBR ST,ST(1) ; subtracts ST0 (result) from ST1 (1.0) and stores result in ST0 - gets % of range ADD ESI,0FAB4 ; add offset needed to ESI (Constant 3.0 - nighttime multiplier) FLD DWORD PTR DS:[ESI] ; loads constant 3.0 onto top of floating point stack (nighttime multiplier) PUSH 4C ; saves offset needed in TDWData to stack (nightime multiplier addition for other units) CALL SHSim_act.Load_TDWData_Address_Into_EAX ; calls calls Load_TDWData_Address_Into_EAX FADD DWORD PTR DS:[EAX] ; adds nighttime multiplier addition for other units to nighttime multiplier FSUB ST,ST(2) ; subtracts ST2 (1.0) from ST0 (total nighttime multiplier) and stores result in ST0 - this converts to 0 based FLDZ ; loads 0.0 onto top of floating point stack - is possible that user set multiplier addition to negative value thus adjusted nighttime multiplier could be negative! FCOMI ST,ST(1) ; compares ST0 (0.0) to ST1 (adjusted nighttime multiplier 0 based) JBE SHORT SHSim_act.0894317D ; if before or equal then jump FST ST(1) ; saves 0.0 to ST1 (adjusted nighttime multiplier) FSTP ST ; pops top of floating point stack - removes 0.0 FMULP ST(1),ST ; mutiplies % of range by nighttime multiplier for other units 0 based and stores result in ST1 and pops top of floating point stack FADDP ST(1),ST ; adds ST0 (result) to ST1 (1.0) and stores result in ST1 and pops top of floating point stack - this converts back to 1 based FLD DWORD PTR SS:[ESP+20] ; loads minimum signal strength onto top of floating point stack FMULP ST(1),ST ; multiplies ST1 (adjusted nighttime multiplier) by ST0 (minimum signal strength) and stores result in ST1 and pops top of floating point stack PUSH ECX ; creates temp variable FST DWORD PTR SS:[ESP] ; saves new adjusted minimum signal strength to stack MOVSS XMM0,DWORD PTR SS:[ESP] ; loads new adjusted minimum signal strength into XMM0 ADD ESP,4 ; deletes temp variables ADD DWORD PTR SS:[ESP+0C],10 ; sets new return value 0894319A: FSTP ST ; pops top of floating point stack POP ESI ; restores ESI POP ECX ; restores ECX POP EAX ; restores EAX XORPS XMM2,XMM2 ; zeroes out XMM2 TEST AL,AL ; tests whether it's daytime (0) 089431A4: RETN ; returns to caller |
![]() |
![]() |
![]() |
#3049 |
Admiral
![]() Join Date: Mar 2007
Posts: 2,200
Downloads: 172
Uploads: 0
|
![]() ![]() ![]()
__________________
What we do in life echoes in Eternity |
![]() |
![]() |
![]() |
#3050 |
Black Magic
![]() |
![]()
v1.0.159.0 released. See post #1
Starting with v1.0.159.0 rewrote the Player's unit visual sensor affected by available light and Units visual sensor affected by available light (does not affect player's unit) patches due to non-linearity found (not accounting for 0 based numbers) and to add some error checking (in case user enters incorrect values for variables in patch file) and because the code was FUGLY! |
![]() |
![]() |
![]() |
#3051 |
Ocean Warrior
![]() |
![]()
Thank you TDW
![]() There are three patches for the SHSim.act.. correct?
__________________
. Where does human stupidity end? . ![]() ![]() El sueño de la razón produce monstruos © - and for some people awakening will be cruel |
![]() |
![]() |
![]() |
#3052 |
Ace of the deep .
|
![]() |
![]() |
![]() |
![]() |
#3053 | |
Navy Seal
![]() Join Date: Jan 2011
Location: CJ8937
Posts: 8,214
Downloads: 793
Uploads: 10
|
![]() Quote:
![]() Can you please express it in a numerical format (or just as pseudo-code)? If you don't mind, I would like to check your new function in excel, just to make sure that everything is in order now. You are an excellent programmer, but I have the feeling that our math skills are more or less at the same level ![]() that's it ![]() |
|
![]() |
![]() |
![]() |
#3054 | |
Black Magic
![]() |
![]() Quote:
![]() - checks to see if daytime - if already nighttime then jump to end - compare current available light (0.35) to start of nighttime value for player's unit (0.5) - if current available light is greater than or equal to start of nighttime value for player's unit then jump to end - subtract sunlight value - used to determine if nighttime (0.238) from start of nighttime value (0.5 - gets range) - result is 0.262 - if the result above is negative then jump to end - subtract sunlight value - used to determine if nighttime (0.238) from current available sunlight (0.35) - result is 0.112 - if the result above is negative then clamp to 0.0 - divides 0.112 by 0.262 - result is 0.4275 - subtract 0.4275 from 1.0 thus getting % of range - result is 0.5725 - get nighttime multiplier (3.0) and add nighttime multiplier addition to it (1.0) - result is 4.0 - subtract 1.0 from 4.0 - this converts to 0 based - result is 3.0 - if the result above is negative then clamp to 0.0 - multiply 0.5725 by 3.0 - result is 1.7175 - add 1.0 to result above thus converting back to 1 based - result is 2.7175 - multiply minimum signal strength (0.1) by 2.7175 - result is 0.27175 0.27175 is new minimum signal strength |
|
![]() |
![]() |
![]() |
#3055 |
Ocean Warrior
![]() |
![]()
__________________
. Where does human stupidity end? . ![]() ![]() El sueño de la razón produce monstruos © - and for some people awakening will be cruel |
![]() |
![]() |
![]() |
#3056 | ||
Navy Seal
![]() Join Date: Jan 2011
Location: CJ8937
Posts: 8,214
Downloads: 793
Uploads: 10
|
![]() Quote:
![]() Quote:
![]() |
||
![]() |
![]() |
![]() |
#3057 |
Black Magic
![]() |
![]()
This is a variable in the patch file where the user can define an amount to add to the nighttime multiplier. I have this set to 1.0 for units other than player's unit. Player's unit has a value of 2.5.
|
![]() |
![]() |
![]() |
#3058 | ||
Navy Seal
![]() Join Date: Jan 2011
Location: CJ8937
Posts: 8,214
Downloads: 793
Uploads: 10
|
![]() Quote:
Is the same constant (night time multiplier addition) applied at night (i.e. when the daytime test fails)? It should ![]() Quote:
P.S: well done with your new function ![]() ![]() |
||
![]() |
![]() |
![]() |
#3059 | |
Black Magic
![]() |
![]() Quote:
![]() ![]() Yes the game's nighttime value was 0.283. Typo on my part. I could make this value changeable ![]() Good news! I figured out how to increase the spawn distance from the player's unit ![]() ![]() ![]() |
|
![]() |
![]() |
![]() |
#3060 | |||
Navy Seal
![]() Join Date: Jan 2011
Location: CJ8937
Posts: 8,214
Downloads: 793
Uploads: 10
|
![]() Quote:
![]() Quote:
![]() Quote:
![]() Could far away ships be heard through the hydrophone (both for players and for the sonarman)? Have you noticed any decrease in performance on you high spec system? |
|||
![]() |
![]() |
![]() |
|
|