Version converter fix
This commit is contained in:
+22
-5
@@ -299,8 +299,8 @@ proc fixed2float {fpint} {
|
||||
}
|
||||
|
||||
proc float2fixed {flt} {
|
||||
set whole [expr {int(float($flt))}]
|
||||
set frac [expr {float($flt) - $whole}]
|
||||
set whole [expr {int(double($flt))}]
|
||||
set frac [expr {double($flt) - $whole}]
|
||||
return [expr {($whole << 16) | int($frac * 65536)}]
|
||||
}
|
||||
|
||||
@@ -333,12 +333,16 @@ proc fullscanscheme {version} {
|
||||
foreach weap $wa_weapons {
|
||||
set offs [dict get $weap offset]
|
||||
set offs [expr {int($offs)}]
|
||||
# limit weapons for v1 schemes
|
||||
if {($offs >= 0xDD) && ($version < 2)} {break}
|
||||
set poweroffs [expr {$offs + 1}]
|
||||
set delayoffs [expr {$offs + 2}]
|
||||
set proboffs [expr {$offs + 3}]
|
||||
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($poweroffs) $power
|
||||
set wsc_data($delayoffs) $delay
|
||||
@@ -393,6 +397,20 @@ proc savescheme {fname} {
|
||||
# guard the version
|
||||
if {int($wsc_data(version)) < 1} {set wsc_data(version) 1}
|
||||
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
|
||||
foreach opt $wa_opts {
|
||||
set offs [dict get $opt offset]
|
||||
@@ -441,7 +459,6 @@ proc savescheme {fname} {
|
||||
set val [float2fixed $val]
|
||||
}
|
||||
set binval [binary format $fmt $val]
|
||||
set wsc_data($offs) $wscval
|
||||
set rawschemedata [string replace $rawschemedata $offs [expr {$offs + $size - 1}] $binval]
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user