Version converter fix
This commit is contained in:
+23
-6
@@ -299,8 +299,8 @@ proc fixed2float {fpint} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
proc float2fixed {flt} {
|
proc float2fixed {flt} {
|
||||||
set whole [expr {int(float($flt))}]
|
set whole [expr {int(double($flt))}]
|
||||||
set frac [expr {float($flt) - $whole}]
|
set frac [expr {double($flt) - $whole}]
|
||||||
return [expr {($whole << 16) | int($frac * 65536)}]
|
return [expr {($whole << 16) | int($frac * 65536)}]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -333,12 +333,16 @@ proc fullscanscheme {version} {
|
|||||||
foreach weap $wa_weapons {
|
foreach weap $wa_weapons {
|
||||||
set offs [dict get $weap offset]
|
set offs [dict get $weap offset]
|
||||||
set offs [expr {int($offs)}]
|
set offs [expr {int($offs)}]
|
||||||
# limit weapons for v1 schemes
|
|
||||||
if {($offs >= 0xDD) && ($version < 2)} {break}
|
|
||||||
set poweroffs [expr {$offs + 1}]
|
set poweroffs [expr {$offs + 1}]
|
||||||
set delayoffs [expr {$offs + 2}]
|
set delayoffs [expr {$offs + 2}]
|
||||||
set proboffs [expr {$offs + 3}]
|
set proboffs [expr {$offs + 3}]
|
||||||
binary scan [string range $rawschemedata $offs [expr {$offs + 4}]] cucucucu ammo power delay prob
|
set ammo 0
|
||||||
|
set power 0
|
||||||
|
set delay 0
|
||||||
|
set prob 0
|
||||||
|
catch {
|
||||||
|
binary scan [string range $rawschemedata $offs [expr {$offs + 4}]] cucucucu ammo power delay prob
|
||||||
|
}
|
||||||
set wsc_data($offs) $ammo
|
set wsc_data($offs) $ammo
|
||||||
set wsc_data($poweroffs) $power
|
set wsc_data($poweroffs) $power
|
||||||
set wsc_data($delayoffs) $delay
|
set wsc_data($delayoffs) $delay
|
||||||
@@ -393,6 +397,20 @@ proc savescheme {fname} {
|
|||||||
# guard the version
|
# guard the version
|
||||||
if {int($wsc_data(version)) < 1} {set wsc_data(version) 1}
|
if {int($wsc_data(version)) < 1} {set wsc_data(version) 1}
|
||||||
if {int($wsc_data(version)) > 3} {set wsc_data(version) 3}
|
if {int($wsc_data(version)) > 3} {set wsc_data(version) 3}
|
||||||
|
# detect the target size
|
||||||
|
set datasize 221
|
||||||
|
if {int($wsc_data(version)) eq 2} {set datasize 297}
|
||||||
|
if {int($wsc_data(version)) eq 3} {set datasize 407}
|
||||||
|
# expand/truncate rawschemedata according to the detected size
|
||||||
|
set diffbytes [expr {$datasize - [string length $rawschemedata]}]
|
||||||
|
if {$diffbytes > 0} { # expand with nulls
|
||||||
|
set rawschemedata [string cat $rawschemedata [binary format x$diffbytes]]
|
||||||
|
} else { # truncate
|
||||||
|
set rawschemedata [string range 0 [expr {$datasize - 1}]
|
||||||
|
}
|
||||||
|
# write the version itself
|
||||||
|
set binval [binary format cu $wsc_data(version)]
|
||||||
|
set rawschemedata [string replace $rawschemedata 4 4 $binval]
|
||||||
# write normal options
|
# write normal options
|
||||||
foreach opt $wa_opts {
|
foreach opt $wa_opts {
|
||||||
set offs [dict get $opt offset]
|
set offs [dict get $opt offset]
|
||||||
@@ -441,7 +459,6 @@ proc savescheme {fname} {
|
|||||||
set val [float2fixed $val]
|
set val [float2fixed $val]
|
||||||
}
|
}
|
||||||
set binval [binary format $fmt $val]
|
set binval [binary format $fmt $val]
|
||||||
set wsc_data($offs) $wscval
|
|
||||||
set rawschemedata [string replace $rawschemedata $offs [expr {$offs + $size - 1}] $binval]
|
set rawschemedata [string replace $rawschemedata $offs [expr {$offs + $size - 1}] $binval]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user