PyMS and ProTRG developer
The display looks really nice =)
Thanks!
if the unit has no weapon, the force is 1, as long as the other force is also 1 or lower, either from the formula giving a very small value or unit having no weapons at all. Otherwise the weaponless value is 0.
I didn't really understand this part so I didn't update it.
The calculation seems to be pretty much correct, but comparing the values to bw's memory I found some differences:
- The last unit-specific adjustment doesn't round down to an integer (e.g. drone should have 16 flat)
- That specification for unit-specific adjustments had actually a mistake: Inf. terrans and *scourges*, not defilers have 1/16 multiplier. (Defiler's and scourge's unit ids were right next to each other D:)
- Apparently larvae, eggs, cocoons, and lurker eggs are also hardcoded to have 0 value, but this is set before the "no weapon -> 1 force" check. It's a really minor and pointless detail but scarab has 1 air force since it has no air weapon, but those zerg units have 0 force no matter what.
- Carriers and reavers (and hero variants) use interceptor's / scarab's weapon for their strength (but not the child unit's other stats and obviously not their x0 multiplier). Carrier should have 1133 force with default stats and reaver should have 300.
- If the unit has a subunit, its weapon is used for the calculations.
These should be fixed now, thanks!
No, they break the script and comment out extra stuff. edit: actually they don't seem to do anything anymore, they just get removed.
I think you mean the "Extra information comments" feature. That was removed because it would break too often, and most of the AI scripters I got feedback from did not use the feature anyway.
That's not going to happen. What I can do is add similar copy+paste support for group settings as well as minitile flags.
That works, presumably just ctrl+c with a group selected in the main window and ctrl+v when selecting a different group? Mostly just to paste unbuildable data but obviously useful for other things.
I added all the copy paste stuff. It copies to the same format as the export/import settings feature, so you can easily modify/save/reuse settings.
I was not able to reproduce this with a simple test. Can you provide files and steps to reproduce the issue?
Looks fixed in the latest build after adding the default icons and modified ones. I'll report it again if it comes up.
K, thanks
PyTILE bug - scrolling in the main window after selecting an item from the minitile painter's dropdown menu also scrolls that menu. Has no effect but is visually distracting and occasionally makes me panic after doing an hour's worth of pathing work and noticing it says 'ramp'.
Should be fixed now, thanks!
PyTILE:
Just got a crash after scrolling up a lot.
Collapse Box
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1537, in __call__
return self.func(*args)
File "C:\Users\prono\Desktop\Libraries\Tools\SCBW\PyMS-aise\PyTILE.pyw", line 997, in <lambda>
binding_widget.bind('<MouseWheel>', lambda e: self.canvas.yview('scroll', -(e.delta / abs(e.delta)),'units'))
ZeroDivisionError: integer division or modulo by zero
Should be fixed, thanks!
PyDAT:
Bug - pasting one entry over another doesn't flag the file as modified (save icon on bottom doesn't light up/program doesn't ask for confirmation on exit)
Bug - Ctrl+R to reload an entry does nothing
I have created a github issues for these
PyAI:
Crash when saving bwscript.bin after loading
this script.
I have created a github issue
EDIT: Neiv has discovered that PyAI will not accept nonstandard script IDs. An by 'will not accept', I of course mean 'crash'.
Collapsable Box
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1537, in __call__
return self.func(*args)
File "C:\Users\prono\Desktop\Libraries\Tools\SCBW\PyMS-aise\PyAI.pyw", line 2833, in save
self.ai.compile(ai, bw)
File "C:\Users\prono\Desktop\Libraries\Tools\SCBW\PyMS-aise\Libs\AIBIN.py", line 2331, in compile
table += struct.pack('<4s3L', id, 0, string+1, flags)
error: argument for 's' must be a string
What is a "nonstandard" script ID? Should allow any 4 ASCII characters
Hard lockup requiring a reboot of the PC if I open bwscript.bin twice instead of aiscript.bin first. Very punishing misclick.
Odd. I've created an issue for it
Request - Stop the program from resetting your main window view after saving a script. (have to scroll all the way back down to the BW section to edit another script)
I already have an issue for this, just need to get around to it.
Request - Don't erase custom block names or reformat scripts after saving the entry.
This is probably not coming back any time soon. You'll have to keep your scripts saved in a separate file.
Collapsable Box
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1537, in __call__
return self.func(*args)
File "C:\Users\prono\Desktop\Libraries\Tools\SCBW\PyMS-aise\PyMPQ.pyw", line 897, in openfile
r = SFileReadFile(fh)
File "C:\Users\prono\Desktop\Libraries\Tools\SCBW\PyMS-aise\Libs\SFmpq.py", line 379, in SFileReadFile
if _SFmpq.SFileReadFile(file, byref(data, total_read), read-total_read, byref(r), None):
WindowsError: exception: access violation reading 0xFFFFFFFFF806949F
PyMPQ - This happens when I try to play a wav file from an mpq. The mpq in question wasn't open in SCMDraft or any program other than that instance of PyMPQ.
Speaking of which, any ETA on the fix for PyMPQ crashing if you try to modify the contents while it's open in SCMD?
All these MPQ crashes are the same thing, I'm getting a seemingly valid MPQ handle back from SFmpq, but it is not valid. I have no idea why, and no way to fix it at the moment.
Newest PyMS gives:
Collapsable Box
> python pydat.pyw
Traceback (most recent call last):
File "pydat.pyw", line 10, in <module>
from Libs.analytics import *
File "C:\Pelei\scbw_yms\Ohjelmia\PyMS\Libs\analytics.py", line 2, in <module>
from gapy.ga import *
File "C:\Pelei\scbw_yms\Ohjelmia\PyMS\Libs\gapy\ga.py", line 130, in <module>
ga = GoogleAnalytics()
File "C:\Pelei\scbw_yms\Ohjelmia\PyMS\Libs\gapy\ga.py", line 86, in __init__
self.set_target(GATarget.GAAPITarget())
File "C:\Pelei\scbw_yms\Ohjelmia\PyMS\Libs\gapy\GATarget.py", line 65, in __init__
self._useragent = useragent or build_user_agent()
File "C:\Pelei\scbw_yms\Ohjelmia\PyMS\Libs\gapy\GATarget.py", line 38, in build_user_agent
user_agent += ' (Windows NT %s%s)' % (version, '; WOW64' if is64bit else '')
NameError: global name 'is64bit' is not defined
Thanks, should be fixed.