SUBSIM: The Web's #1 resource for all submarine & naval simulations since 1997 |
03-25-14, 10:38 AM | #3046 | |
Black Magic
|
Quote:
|
|
03-25-14, 11:03 AM | #3047 | |
Navy Seal
Join Date: Jan 2011
Location: CJ8937
Posts: 8,215
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: |
|
03-25-14, 01:13 PM | #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 I rewrote those two functions to take into account 0 based numbers and also to clean it up (original code was fugly!) and to add some error checking into it also (to account for user errors - entering wrong values for variables)
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 |
03-25-14, 01:22 PM | #3049 |
Admiral
Join Date: Mar 2007
Posts: 2,200
Downloads: 172
Uploads: 0
|
__________________
What we do in life echoes in Eternity |
03-25-14, 02:07 PM | #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! |
03-25-14, 02:32 PM | #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 |
03-25-14, 02:45 PM | #3052 |
Ace of the deep .
|
|
03-25-14, 03:30 PM | #3053 | |
Navy Seal
Join Date: Jan 2011
Location: CJ8937
Posts: 8,215
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 |
|
03-25-14, 04:18 PM | #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 |
|
03-25-14, 04:21 PM | #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 |
03-25-14, 04:34 PM | #3056 | |
Navy Seal
Join Date: Jan 2011
Location: CJ8937
Posts: 8,215
Downloads: 793
Uploads: 10
|
Quote:
This is exactly what I didn't get before: what is this 'nighttime multiplier addition' that you are talking about? |
|
03-25-14, 04:36 PM | #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.
|
03-25-14, 06:05 PM | #3058 | ||
Navy Seal
Join Date: Jan 2011
Location: CJ8937
Posts: 8,215
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 |
||
03-25-14, 06:28 PM | #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 The game has a default radius of 40000m (sometimes 35000m) from the player's unit for when other units are rendered. I added some new code and a new variable in the patch file that will allow you to define an additional radius amount I added an additional 40000m to the existing 40000m (80000m total) and sure enough it worked. Any units within a 80000m radius of my unit were being rendered |
|
03-25-14, 06:55 PM | #3060 | |||
Navy Seal
Join Date: Jan 2011
Location: CJ8937
Posts: 8,215
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? |
|||
|
|