-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathChangeLog
More file actions
1027 lines (835 loc) · 63.6 KB
/
ChangeLog
File metadata and controls
1027 lines (835 loc) · 63.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
=====================================
Changes from BWAPI 3.6 to BWAPI 3.6.1
=====================================
Changes:
* The command optimizer now groups some Use_Tech commands correctly.
* Command optimizer level 4 will now group Archon Warp and Dark Archon Meld.
Additions:
* Added Orders::NukePaint.
* Added TechType::getOrder.
* Position and TilePosition can now be treated as a boolean value and will automatically call isValid(). This is an effort to make cleaner-looking code.
Bug Fixes:
* Fixed an issue where every module using the BWAPILIB library would take some loading time when initializing color information. Instead it will only initialize the information on the first call to the Color(r, g, b) constructor.
* Fixed various minor potential buffer overflows/underflows.
* Correctly initialize some Player values.
* Fixed a bug where non-existent players' Start Locations were excluded from the Start Location group in a Use Map Settings (revealing only opponent Start Locations).
* Fixed a regression where Archon Warp and Dark Archon Meld always returned an error.
=====================================
Changes from BWAPI 3.5.4 to BWAPI 3.6
=====================================
Changes:
* Starcraft now always uses the saved speed setting in Single Player instead of using Normal speed. This means that Single Player games will always start on fastest if that was your last setting in multi-player.
* Some tileset-reserved palette entries were removed.
* The constructor for Color(r,g,b) has been optimized for speed.
* Players that are observing, as well as Start Locations for possible Observer players are excluded from the list of enemies and start locations.
* The Unload Unit command now uses less actions by performing the command with no matching select unit.
* Several [TechType#targetsUnit TechType::targetsUnit] and [TechType#targetsPosition TechType::targetsPosition] flags have been altered to be consistent with the tech's capabilities.
* Logging and the logging_str config option in BWAPI have been removed. Attach the debugger instead.
Additions:
* Added [Game#hasPath Game::hasPath].
* Added [Misc#Position Position::hasPath].
* Added configuration option "pause_dbg" which pauses the auto-menu until you attach a debugger (only in DEBUG mode).
* Added [Misc#TilePosition TilePosition::hasPath].
* Added [Game#setAlliance Game::setAlliance].
* Added [Game#setVision Game::setVision].
* Added more options and variants to [Game#hasPower Game::hasPower].
* Added a new function [Game#hasPowerPrecise Game::hasPowerPrecise] which takes a pixel coordinate instead of a tile position.
* Added some Use Map Settings [UnitTypes] that were missing, such as [UnitTypes#Special_Map_Revealer Map Revealer], [UnitTypes#Special_Start_Location Start Location], [UnitTypes#Doors Doors], and [UnitTypes#Traps Traps].
* Added a new config entry called {{{mapiteration}}} which allows you to specify if wildcard maps will be chosen randomly or in a sequence.
* Added [Unit#getOrderTarget Unit::getOrderTarget].
* Added [Game#observers Game::observers] which returns the list of observing players in a Use Map Settings.
* Added [Player#isObserver Player::isObserver].
* Added the auto_menu config options {{{wait_for_min_players}}}, {{{wait_for_max_players}}}, and {{{wait_for_time}}} which change the way BWAPI behaves when hosting a network game.
* BWAPI now supports a tournament module to control the flow of tournaments.
* Added [Game#elapsedTime Game::elapsedTime].
* Added [Game#setCommandOptimizationLevel Game::setCommandOptimizationLevel] which allows BWAPI to automatically optimize commands to lower APM.
Bug Fixes:
* Fixed a bug in [Unit#isInWeaponRange Unit::isInWeaponRange] where the minimum range of 0 would be included in the computation.
* Fixed an issue where BWAPI and its loaders did not attempt to first find the Starcraft install path in HKEY_CURRENT_USER and instead only looked in HKEY_LOCAL_MACHINE.
* Fixed a bug where the bot's APM counter did not reset between matches.
* Fixed an issue where BWAPI's Windowed Mode (set in config) would initially start the application in Fullscreen before switching back.
* Increased compatibility with other hacks, depending on their behaviour.
* Fixed an issue where [Game#hasPower Game::hasPower] could return incorrect results.
* Fixed some cases where bad calls could cause a buffer overflow.
* Fixed an issue where users without administrative privileges were unable to use BWAPI. Limited users will now be able to use BWAPI and an AI DLL, but will not be able to use the Client/Server setup.
* Fixed an issue where [TechTypes#Healing Healing](for HealMove) and [TechTypes#Maelstrom Maelstrom] could not be used in [Unit#useTechPosition Unit::useTechPosition].
* Fixed a bug/regression where [Game#mapFileName Game::mapFileName] would return with the full path after using auto-menu.
* Fixed a bug/regression where Battle.net Recent Maps would save a map with its path attached after using auto-menu.
* Fixed an issue where auto_menu did not start multi-player games on its own.
* Fixed a bug where a unit position returned an incorrect value when it was intended to be Unknown.
* Fixed a bug where a unit's clientInfo was not reset to NULL in a new game.
=======================================
Changes from BWAPI 3.5.3 to BWAPI 3.5.4
=======================================
Bug Fixes:
* Fixed a crash on game end involving extended ascii characters in the map name.
* Fixed an auto-menu issue/regression where the map's registered path was assumed to be in the maps\BroodWar folder
* Fixed an issue where restartGame switched to a different map in auto-menu mode.
* Fixed a crash involving a rare occurance that causes a unit's hit box to be partially outside of the playable map area.
* Fixed an issue where text sent by the player near the end of the match (specifically when BWAPI was defeated) would be carried over to the next game.
=======================================
Changes from BWAPI 3.5.2 to BWAPI 3.5.3
=======================================
Bug Fixes:
* Fixed an issue/regression where auto-menu would spawn or hide units in replays depending on the selected auto-menu game type.
=======================================
Changes from BWAPI 3.5.1 to BWAPI 3.5.2
=======================================
Bug Fixes:
* Fixed an issue/regression where auto-menu failed to work for replays.
==========================================
Changes from BWAPI Beta 3.5 to BWAPI 3.5.1
==========================================
Bug Fixes:
* Fixed an issue where screenshots were disabled while in Windowed mode.
* Fixed a bug/regression that caused replays to crash.
========================================
Changes from BWAPI Beta 3.4 to BWAPI 3.5
========================================
Changes:
* The return values for Game::getGroundHeight have been altered. This allows the inclusion of doodads in terrain height computation (For example: Units behind a tree).
* The DEBUG version now checks for memory leaks.
* Game::isBuildable now includes a boolean to specify whether to check if a visible building is blocking the way. It is false by default.
* Game::canBuildHere has slightly increased performance.
* Game::drawLine has greatly increased performance.
* The config values "ai_dll" and "ai_dll_dbg" have been replaced with "ai" and "ai_dbg", the revision and multi-instance entries ("ai_dll_rev", "ai_dll_#", etc.) have been removed. More information in the updated bwapi.ini config file.
* Some distance functions now use integers instead of doubles.
* The config option "save_replay" under "auto_menu" now accepts environment variables as well as our user defined variables. It also creates the directory if it does not exist, and creates the file directly instead of copying LastReplay.rep (LastReplay.rep will not be created).
* Most BWAPILIB objects now have an "operator int() const" as a replacement for all other comparison operators. This allows more flexibility, specifically for the developers of BWAPI, so that a call to ".getID()" does not need to be made.
* Resizing the window in Windowed Mode will now stretch the game screen.
* Holding ALT in Windowed Mode will now prevent the cursor from leaving the window (same as W-Mode functionality).
* The auto-menu map selection no longer loops back and forth with the previous menu in order to select the correct map.
* The map entry under auto_menu in the config now accepts wildcards, and chooses a random map from the pool when starting the game.
* BWAPI's custom network module has been marked deprecated and replaced by BWDI's module. (SNP file)
* Unit::attackMove and Unit::attackUnit have been renamed to Unit::attack to conform with the other functions. Current users can perform a Find&Replace in all files(a function provided by Visual Studio and Notepad++), or use a #define.
* Ordering an Infested Terran to Attack a location (Attack Move) will now cause it to explode at that location. (Also known as "Sap Location")
* Renamed UpgradeType::mineralPriceBase to UpgradeType::mineralPriceBase, UpgradeType::gasPriceBase to UpgradeType::gasPrice, and UpgradeType::upgradeTimeBase to UpgradeType::upgradeTime, as well as added the parameter that specifies the level. These functions now include the cost factors in calculations. To obtain the base value, use 1 as the parameter.
* There is a new menu hack that causes menus to load immediately instead of the old one which quickly played the swish-in and swish-out animations.
* BWAPI's windowed mode can now be resized smaller than the game's resolution. The window will snap to the original dimensions when they are close enough.
* Holding the CTRL key while resizing the windowed mode window will now maintain a 4:3 aspect ratio.
Additions:
* Added Game::getAPM which retrieves the bot's running actions per minute and ignores user actions.
* Added the errors Errors::File_Not_Found and Errors::Invalid_Parameter.
* Added Game::setMap which changes the map for when you next restart the game.
* Added Unit::isUnderAttack which identifies units that have been recently attacked.
* Added Unit::getLastAttackingPlayer which identifies the player that last attacked this unit.
* Added Game::getUnitsInRectangle.
* Added Game::getUnitsInRadius.
* Added Unit::getUnitsInRadius.
* Added Unit::getUnitsInWeaponRange.
* Added the configuration option "holiday" which allows disabling the once-secret holiday modifications that were activated at the appropriate time.
* Added Game::setFrameSkip which alters Starcraft's built-in frame skipping value.
* Added some more UnitTypes that are specific to Use Map Settings games, as well as the WeaponTypes to go with them.
* Added a new configuration option "screenshots" under "Starcraft" which allows you to specify the format Starcraft saves screenshots in. Defaults to "GIF".
* Added UnitType::isMineralField which just returns true if the unit is Mineral Field Type 1, 2, and 3. BWAPI currently converts all Mineral Fields to Type 1 for its own purpose, so you don't need to worry too much about it.
* Added Unit::isUnderDarkSwarm.
* Added Unit::isUnderDisruptionWeb.
* Added UpgradeType::whatsRequired, which returns the building required to accompany the upgrade at a certain level.
* Added Player::weaponMaxRange which takes a WeaponType instead of a UnitType.
* Added several configuration options for BWAPI's windowed mode.
* Added the ability to queue commands like you can in Starcraft. Many command constructors have this addition built-in. Re-read the documentation on them for more information.
* Added UnitCommand::isQueued.
Bug Fixes:
* Corrected the return values for Game::getLatencyFrames, Game::getLatencyTime, Game::getRemainingLatencyFrames, and Game::getRemainingLatencyTime.
* Fixed a crash involving the use of the extended ASCII character set in the drawText functions.
* Fixed a memory leak that was unique to Starcraft: Broodwar.
* Corrected WeaponTypes::normalWeaponTypes and WeaponTypes::specialWeaponTypes which were returning the wrong sets.
* Fixed a bug where Game::canBuildHere would fail in some cases where buildings can overlap. See issue 302 for more information.
* Fixed a bug that would cause the game to freeze for several seconds when invalid positions were passed to Game::drawLineMap.
* Fixed a bug that prevented the usage of known /commands on a Battle.net server.
* Fixed an issue where Overmind With Shell, Overmind, Cerebrate, Cerebrate Daggoth, and Overmind Cocoon would return false for isDetector(). They now correctly return true.
* Fixed a bug in Windowed Mode where the System Cursor was displayed instead of the game cursor.
* Game::restartGame no longer freezes/crashes the game when called during multi-player. Instead it silently returns an error.
* Fixed an infinite loop involving auto-menu attempting to find the correct map.
* The new network mode now displays lobby slots correctly.
* Fixed a bug where Player::getKillScore returned the unit score instead of the kill score.
* Fixed an issue where ordering a Protoss Photon Cannon, Terran Missile Turret, Zerg Sunken Colony, or Zerg Spore Colony to attack would perform no action.
* Fixed a bug where Game::canUpgrade returned false positives when a required building was not present.
* Fixed an issue where some bullet types such as the Subterranean Spines were inaccessible with CompleteMapInformation disabled.
* Fixed an issue where area abilities such as EMP Shockwave could not be used on a unit target (Use_Tech_Unit).
* Fixed a bug where two or more instances could conflict and crash when saving LastReplay.
=============================================
Changes from BWAPI Beta 3.3 to BWAPI Beta 3.4
=============================================
Changes:
* Position::getApproxDistance now returns an integer and more accurately resembles the internal Starcraft function.
* Player::allUnitCount now returns the number of accessible units of the given type for the given player. If complete map information is disabled, this will be equivalent to Player::visibleUnitCount.
* Player::getUpgradeLevel now also returns information for enemy players when the Complete Map Information flag is disabled if at least one completed unit owned by that player that uses that upgrade type is accessible.
* There has been a regression involving the optimization of issuing commands to multiple units at the same time (Stop, Hold, Cloak/Decloak, Burrow/Unburrow, Siege/Unsiege). This will not impact the behaviour of the game or the AI. It will however increase the APM of the AI.
* Renamed Unit::getLastOrderFrame to Unit::getLastCommandFrame to make it consistent with Unit::getLastCommand, Unit::issueCommand, and Unit::canIssueCommand.
Additions:
* Added Unit::isInWeaponRange which returns true if the specified target unit is in the immediate weapon range of the callee.
* Added Player::visibleUnitCount which returns the number of visible units of the given type owned by the player.
* Added Game::neutral - returns a pointer to the neutral player.
* Added Game::allies - returns a reference to the set of ally players that have not left or been defeated.
* Added Game::enemies - returns a reference to the set of enemy players that have not left or been defeated.
* BWAPI will attempt to compare its revision/build with the AI revision/build and load the correct BWAPI module for the AI. Note: For the moment this only applies when attaching BWAPI to Starcraft and not when the module is loaded.
* Added the following Player functions to retrieve player score: Player::getUnitScore, Player::getKillScore, Player::getBuildingScore, Player::getRazingScore, Player::getCustomScore.
* Added the following UnitTypes which can be used as a macro: UnitTypes::AllUnits, UnitTypes::Men, UnitTypes::Buildings, UnitTypes::Factories.
* Added UnitTypes::allMacroTypes for the introduced macros.
* Added Unit::placeCOP which allows you to relocate Flag Beacons in Use Map Settings or Capture the Flag game types.
* Added Unit::isAttackFrame - returns true if the unit is performing an attack animation or starting an attack.
* Added the LPIP network mode known as "Local PC (Pipes)". This mode is compatible with Windows XP and previous revisions of BWAPI. However it has the same issue as the other custom network mode. Instructions are the same, copy the SNP file to the Starcraft directory.
* Added Unit::getAcidSporeCount.
* Added Unit::isInvincible.
* Added Unit::getLastCommand - returns the last successful command that BWAPI issued to the unit.
* Added UnitCommand::getUnit - returns the unit the command is for.
* Added UnitCommand::getTarget - returns the target unit of the command, or null if there is no target unit.
* Added UnitCommand::getTargetPosition - returns the target position of the command, or Positions::None if there is no target position.
* Added UnitCommand::getTargetTilePosition - returns the target tile position of the command, or Positions::None if there is no target tile position.
* Added UnitCommand::getUnitType - returns the unit type of the command, or UnitTypes::None if the command is not of type Build, Build_Addon?, Train, or Morph.
* Added UnitCommand::getTechType - returns the tech type of the command, or TechTypes::None if the command is not of type Research, Use_Tech?, Use_Tech_Position?, or Use_Tech_Unit?.
* Added UnitCommand::getUpgradeType - returns the upgrade type of the command, or UpgradeTypes::None if the command is not of type Upgrade.
* Added UnitCommand::getSlot - returns the slot of the command, or -1 if the command is not of type Cancel_Train_Slot?.
* Applied a hack that now looks for files relative to the Starcraft directory first before checking the MPQ. Modifications to Starcraft can now be done without the need for MPQ management.
Bug Fixes:
* Fixed a bug where Game::canBuildHere would do collision checks with flying and lifted units.
* Fixed a bug where Game::enemy would return NULL if the enemy player left the game.
* Fixed a bug where Unit::getUpgradeLevel would always return 0 in client programs when complete map information was disabled.
* Fixed a bug where Game::printf and Game::sendText could cause a crash when called from the BWAPI Client using a formatting character "%" as part of the desired message.
* Fixed a regression that prevented the use of Nuclear Missiles.
* Corrected a mistake where Colors::Purple would appear Orange.
* Fixed a crash involving a buffer overflow with text formatting for Game::printf, Game::sendText, and Game::drawText.
* Fixed a bug where Unit::getLastOrderFrame would not reset to 0 at the start of a new match.
* Fixed a bug where Starcraft would hang when attempting to connect a BWAPI Client to the BWAPI Server during a match.
* Fixed a bug where some units were mistakenly considered selected.
* Fixed a bug that prevented the placement of Infested Command Centers and Zerg Flag Beacons off the creep.
* Fixed an issue where loaded units could be given orders.
* Fixed an issue where Overlords would accept orders to load units when the Ventral Sacs upgrade was not researched.
* Fixed an issue where completed transports would accept orders to load incomplete units and vice-versa.
* Fixed an issue where heroes could not use abilities until the technology was researched.
* Fixed an issue where Infested Kerrigan could not use all of her abilities.
* Fixed an issue where our custom network modes would bring users back to the main menu instead of the game select menu.
* Fixed a BWAPI Client crash that involved passing a NULL parameter to Player::isAlly and Player::isEnemy.
=============================================
Changes from BWAPI Beta 3.2 to BWAPI Beta 3.3
=============================================
Changes:
* Game::canBuildHere now has an additional boolean value that allows the user to specify if the function should consider checking if they have first explored the area.
* Tile position variables in Game functions have been clarified.
* Game::getMouseX and Game::getMouseY have been removed due to deprecation. Use Game::getMousePosition instead.
* Game::getScreenX and Game::getScreenY have been removed due to deprecation. Use Game::getScreenPosition instead.
* Renamed Unit::setRallyPosition and Unit::setRallyUnit to Unit::setRallyPoint so that it conforms with the other commands.
* [Config] Auto-menu options in the configuration file have been moved to the [auto_menu] group.
* [Config] Renamed the auto_menu option LAN_UDP to LAN.
* Removed UnitType::getSublabel, as it didn't appear to be significant.
New Functions:
* Added UnitType::cloakingTech - returns the tech used to cloak the unit, or TechTypes::None if the unit cannot cloak or is permanently cloaked
* Added Unit::getPowerUp - returns the power up the unit is holding, or NULL if the unit is not holding a power up
* Added Unit::isInterruptible - returns true if the unit can be interrupted without issuing a stop or one of the cancel commands.
* Added Unit::isStuck - Returns true if the unit is "stuck" on other units.
* Made Game::setLastError available.
* Added several UnitType functions: UnitType::isHero, UnitType::isPowerup, UnitType::isBeacon, UnitType::isFlagBeacon, UnitType::isSpecialBuilding, and UnitType::isSpell.
* Added Game::getInstanceNumber to identify which instance an AI module belongs to.
* Added several Player functions for obtaining upgraded unit type stats, including Player::topSpeed, Player::groundWeaponMaxRange, Player::airWeaponMaxRange, Player::sightRange, Player::groundWeaponDamageCooldown, and Player::armor.
* Added TechType::targetsUnit - returns true if the tech type requires a unit to target.
* Added TechType::targetsPosition - returns true if the tech type requires a position to target.
* Added Game::getNukeDots - returns the set of accessible nuke dots on the map.
* Added Unit::canIssueCommand - use to see if you can issue a command to the given unit, without actually executing it.
* Added Game::issueCommand - issues a command to a set of units.
New Config Features:
* [Config] Added the ability to load different revisions of BWAPI for different modules using the config options ai_dll_rev and ai_dll_#_rev.
* [Config] Added auto-menu race options RandomTP, RandomTZ, and RandomPZ which allows you to randomly choose one of two races.
* [Config] Added the auto-menu option lan_mode which allows you to choose between the different multiplayer network modes.
* [Config] For auto-menu, added the ability to choose a race for specific enemy players using enemy_race_#.
Other New Features:
* [W-Mode] The position of the window in the config now changes when a new multiple-instance compatible client is launched.
* BWAPI can now play networked games between multiple instances using the BWAPI network module (BWAPI_SNPModule.snp) which currently supports winsock UDP on localhost. Bad news: Windows XP users may experience failure. Good news: It can be used with older BWAPI revisions.
* Added Heroes, Beacons, and Standard Powerups to UnitTypes. This gives you more flexibility for Capture The Flag and Use Map Settings (including Campaigns).
* Added hero weapons to WeaponTypes.
* BWAPI now supports a native Windowed mode. Pressing ALT+Enter or typing /wmode will toggle between fullscreen and windowed mode. (Note that this windowed mode is not compatible with Battle.net)
* Added Errors::Invalid_Tile_Position - returned when you try to build something at an invalid tile position.
Bug Fixes:
* Fixed a bug where Unit::hasPath would not work correctly in BWAPI Client programs.
* Fixed a bug where Unit::getResourceGroup would not work correctly in BWAPI Client programs.
* Fix several issues for commands that were being sent repetitively and for actions that couldn't actually be performed.
* Several functions in the BWAPI Client have been updated to match behaviours and fix issues that were once in the BWAPI server.
* Fixed some unlikely crashes, possibly related to the compatibility with other hacks.
* Fixed a bug where unit command error codes wouldn't be generated correctly in BWAPI Client.
* Fixed a bug where networked games involving auto_menu would desynchronize.
* Fixed a bug where calling Game::restartGame would not work correctly during AIModule::onEnd.
* Fixed a bug where restarting the game wouldn't work correctly for BWAPI client programs.
===============================================
Changes from BWAPI Beta 3.1.1 to BWAPI Beta 3.2
===============================================
Changes:
* A Debug build now loads the AI specified by ai_dll_dbg (ai_dll_#_dbg for multiple instances) in bwapi.ini.
* When the user selects a unit, the command is not processed unless it is given an order. (Decrease action count)
* Position and TilePosition conversions are now explicit.
* Issuing Stop, Hold Position, Siege, Unsiege, Cloak, Decloak, Burrow, or Unburrow for multiple units in the same frame will perform the commands in groups instead of individually. (Decrease APM).
* canUpgrade and canResearch with a Unit* specified will now fail if the unit is busy.
New Features:
* Added auto_restart option to bwapi.ini.
* Added Game::getReplayFrameCount - Retrieves the maximum number of frames in a replay.
* Added a save_replay option to bwapi.ini which copies LastReplay?.rep to the destination specified.
* Added a "sound" option to bwapi.ini which allows you to disable all Starcraft sound functionality to increase performance.
* Added Game::setGUI which allows you to disable all rendering within the game for a huge performance increase.
Bug Fixes:
* Fix a bug where canMake would fail to work correctly when units of a different race are owned.
* Fix an issue where ChaosLauncherInjector? and MPQDraftInjector were using a non-standard registry call.
* Fix an issue where an MPQDraft executable failed to find the bwapi-folder when launched from a different directory.
* Fix an issue that prevented Player::getUpgradeLevel() from working correctly.
* Fix an issue that performed auto-menu key presses outside of Starcraft.
* Fix an issue where the neutral player was not being processed correctly.
===============================================
Changes from BWAPI Beta 3.1 to BWAPI Beta 3.1.1
===============================================
Changes:
* bwapi-errors are now written to the logs folder with a time and date stamp.
* Using train or morph(unit) on a hatchery, lair, or hive will automatically issue the order to a larva.
* Ordering a Nydus Canal to build a Nydus Canal will allow you to place the Nydus exit.
* Changed the palette index for some Colors and updated the colors for sendText in Single Player.
* The Config button in ChaosLauncherInjector? and MPQDraftInjector will now load the BWAPI config file from the Starcraft path obtained by the registry.
New features:
* Added Unit::getResourceGroup - Returns a group index for a resource to identify which base it belongs to.
* Implemented the Nydus Canal. You can now tell a Nydus Canal to build an exit.
* Added Unit::hasPath(Unit *target), a macro function that calls hasPath for the target unit.
* Added the following Color constants: Colors::Brown and Colors::Teal.
* Added Player::getColor and Player::getTextColor to retrieve a player's color for drawing and control character for text messages.
Bug fixes:
* Fixed a desynch caused by a large number of commands being processed.
* Fixed restartGame which was broken in a previous release.
* Fixed a crash when passing a NULL target to Unit::getDistance().
* Fixed an issue where Map::getMapHash() failed on campaign maps.
* Fixed a bug that prevented sending text when no module is loaded.
* Fixed a bug involving duplicate cheat codes.
* Fixed a bug where onMorph would sometimes be called when a building finished morphing, rather than when it began morphing.
* Fixed a canBuildHere issue involving the message "Couldn't reach building site".
* Fix an issue where hasPath failed at cliff edges.
===============================================
Changes from BWAPI Beta 3.0.3 to BWAPI Beta 3.1
===============================================
The following features have been altered:
* Player::isAlly, Player::isEnemy, and Game::enemy no longer include players that don't start with any supply (used or available).
* Using a hacked executable, ChaosLauncher? can now run multiple instances of Starcraft. Each instance of BWAPI can load a different AI module specified in the configuration(bwapi.ini) file. There are plans for inter-process communication as a network module.
The following functions have been added:
* Game::getLatencyFrames - returns the maximum number of frames for a command to be processed.
* Game::getLatencyTime - returns the maximum time for a command to be processed (milliseconds).
* Game::getRemainingLatencyFrames - returns the remaining number of frames for a command to be processed, according to the current frame.
* Game::getRemainingLatencyTime - returns the remaining time for a command to be processed (milliseconds), according to the current tick count.
* Game::getRevision - returns the current BWAPI revision number
* Game::isDebug - returns whether the current build is debug mode or not
* Game::sendTextEx - allows the AI to send a text message to allies only
* Unit::hasPath - checks if the unit and target specified are on the same island
* Game::isLatComEnabled - returns true if latency compensation is enabled
* Game::setLatCom - use to enable or disable latency compensation; Default: Enabled
* Unit::getLastOrderFrame - Returns the frame of the last successful order issued.
* Unit::setClientInfo - Sets the unit's custom client info. The client is responsible for deallocation. In other words, this allows the user to associate data with the unit.
* Unit::getClientInfo - Returns the unit's custom client info. The client is responsible for deallocation.
Bug fixes:
* Fixed a bug where multiple onEnd events would be produced.
* Fixed a bug where onFrame was called after onEnd.
* Fixed a bug where neutral buildings were not included in getStaticNeutralUnits when called from the client process.
* Fixed a bug that caused Starcraft to randomly pause for 100ms every couple of seconds.
* Fixed a bug that caused Starcraft to crash while retrieving force names.
* Fixed an off-by-one issue when retrieving force names.
* Fixed a compatibility issue with auto-menu and a non-english locale.
* Fixed a user bug when attempting to recall(hotkey) a group of units.
* Fixed a bug involving the inability to retrieve enemy upgrades via Unit::getUpgradeLevel(UpgradeType).
* Fixed an issue with canBuildHere failing when units are at a valid position on the same tile.
* Fixed an issue with hasPower failing for 4x3 buildings at the top-most position of the power range.
* Fixed a bug where canMake will fail for Mutalisks when a Greater Spire is owned.
* Fixed an issue with an unhandled canBuildHere requirements that produces the message "You must explore there first.".
* Fixed an auto-menu bug that would pause at the end of a Replay in Single Player.
* Fixed an issue that would reselect the user's unit every time BWAPI performed an action. Reduces APM by 1/3.
=================================================
Changes from BWAPI Beta 3.0.2 to BWAPI Beta 3.0.3
=================================================
Fixed a bug with BWAPI's frame 0 accessibility where BWTA would not identify base locations when run on the client.
=================================================
Changes from BWAPI Beta 3.0.1 to BWAPI Beta 3.0.2
=================================================
Fixed order of UnitDiscover/UnitEvade events.
===============================================
Changes from BWAPI Beta 3.0 to BWAPI Beta 3.0.1
===============================================
Fixed order of events/callbacks.
=============================================
Changes from BWAPI Beta 2.8 to BWAPI Beta 3.0
=============================================
The internal implementation of the Unit class has been refactored to optimize performance for the client-server architecture.
Unit IDs now increment from 0, rather than just casting the unit address as an int.
Menu automation has increased speed and several more dialogs are automated.
The following callbacks have been added:
* AIModule::onUnitDiscover - called when a unit becomes accessible
* AIModule::onUnitEvade - called right before a unit becomes inaccessible
The following Events have been added:
* Event::UnitDiscover - corresponds with AIModule::onUnitDiscover
* Event::UnitEvade - corresponds with AIModule::onUnitEvade
The following functions have been added:
* Game::getGroundHeight(TilePosition position) - works same way as Game::getGroundHeight(int x, int y)
* Game::getFPS - returns the frames per second the game is running at.
* Game::getAverageFPS - returns the exponential moving average frames per second.
* Game::setTextSize - sets the text size for drawText commands.
* Game::mapPathName - returns the path and file name of the map.
* Game::getForce - returns the Force object with the given force ID, or NULL if no force has the given ID.
* Game::getPlayer - returns the Player object with the given player ID, or NULL if no player has the given ID.
* Game::getUnit - returns the Unit object with the given unit ID, or NULL if no unit has the given ID.
* Unit::getCarrier - returns the carrier that this unit belongs to, or NULL if this unit is not an Interceptor or if its carrier has recently been destroyed.
* Unit::getInterceptors - Returns the set of interceptors owned by this carrier. The interceptors inside the carrier can be obtained via getLoadedUnits, while the interceptors outside of the carrier is the difference of these two sets.
* Unit::getNydusExit - Returns the Nydus Canal unit that is connected to this Nydus Canal, or NULL if the unit doesn't have a connecting Nydus Canal.
* Unit::hasNuke - returns true for nuclear missile silos that have a nuke ready.
* Unit::isDetected - returns true if the unit is visible and detected/targetable. If this is false and Unit::isVisible is true, then the unit is only partially visible, and won't be targetable until a science vessel, overlord, or some other detection unit comes in range and detects the unit.
* Unit::isHoldingPosition - returns true if the unit is holding position.
* Unit::gather - orders the unit to gather the specified mineral patch or refinery/extractor/assimilator
* Unit::move - orders the unit to move to the specified position
* TechType::researchTime - returns the number of frames needed to research the given tech type.
* Position::isValid - returns true if the position is on the map.
* Position::makeValid - modifies the position so that it becomes valid (on the map), moving it at little as possible
* TilePosition::makeValid - modifies the tile position so that it becomes valid (on the map), moving it at little as possible
The following functions have been renamed:
* Game::mapFilename has been renamed to Game::mapFileName.
* Game::getMapHash has been renamed to Game::mapHash and it now returns the sda1 hash of the map file as a std::string.
The following error codes have been added:
* Error::Currently_Researching - generated when you try to tell a unit to research a TechType that is already being researched (at that unit or another unit).
* Error::Currently_Upgrading - generated when you try to tell a unit to upgrade an UpgradeType that is already being upgraded (at that unit or another unit).
The following UpgradeTypes have been renamed:
* Protoss_Armor -> Protoss_Ground_Armor
* Protoss_Plating -> Protoss_Air_Armor
* Charon_Booster -> Charon_Boosters
Renamed UnitCommandType::Attack_Position to UnitCommandType::Attack_Move.
The following Orders have been renamed/merged:
* SiegeMode -> Sieging
* TankMode -> Unsieging
* Burrow -> Burrowing
* Unburrow -> Unburrowing
* StrafeUnit1 -> InterceptorAttack
* StrafeUnit2 -> ScarabAttack
* Return -> InterceptorReturn
* Rightclickaction -> RightClickAction
* ReaverStop -> Stop
* CarrierStop -> Stop
* Attack1 -> AttackUnit
* Attack2 -> AttackUnit
* CarrierAttack1 -> AttackUnit
* CarrierAttack2 -> AttackUnit
* CarrierFight -> AttackUnit
* ReaverAttack1 -> AttackUnit
* ReaverAttack2 -> AttackUnit
* ReaverFight -> AttackUnit
* StayinRange -> AttackUnit
* SapUnit -> AttackUnit
* WatchTarget -> AttackUnit
* TowerAttack -> AttackUnit
* TurretAttack -> AttackUnit
* AttackFixedRange -> AttackUnit
* CarrierHoldPosition -> HoldPosition
* QueenHoldPosition -> HoldPosition
* SuicideHoldPosition -> HoldPosition
* MedicHoldPosition -> HoldPosition
* ReaverHoldPosition -> HoldPosition
* BuildTerran -> PlaceBuilding
* BuildProtoss1 -> PlaceBuilding
* DroneStartBuild -> PlaceBuilding
* DroneLand -> PlaceBuilding
* SapLocation -> AttackMove
* Repair1 -> Repair
* Repair2 -> Repair
* FireYamatoGun1 -> FireYamatoGun
* FireYamatoGun2 -> FireYamatoGun
* InfestMine1 -> InfestedCommandCenter
* InfestMine2 -> CastInfestation
* InfestMine3 -> CastInfestation
* InfestMine4 -> InfestingCommandCenter
* TerranBuildSelf -> IncompleteBuilding
* ProtossBuildSelf -> IncompleteBuilding
* DroneBuild -> IncompleteBuilding
* ZergBuildSelf -> IncompleteBuilding
* WarpingArchon -> ArchonWarp
* WarpingDarkArchon -> DarkArchonMeld
* MagnaPulse -> CastLockdown
* DarkSwarm -> CastDarkSwarm
* SummonBroodlings -> CastSpawnBroodlings
* EmpShockwave -> CastEMPShockwave
* NukePaint -> CastNuclearStrike
* NukeGround -> CastNuclearStrike
* PlaceScanner -> CastScannerSweep
* DefensiveMatrix -> CastDefensiveMatrix
* PsiStorm -> CastPsionicStorm
* Irradiate -> CastIrradiate
* Plague -> CastPlague
* Consume -> CastConsume
* Ensnare -> CastEnsnare
* StasisField -> CastStasisField
* Hallucination1 -> CastHallucination
* Restoration -> CastRestoration
* ResetCollision1 -> ResetCollision
* ResetCollision2 -> ResetCollision
* InitPsiProvider -> Nothing
* InitArbiter -> PlayerGuard
* Teleport -> CastRecall
The following functions have changed in functionality:
* Game::getGroundHeight now accepts build tile coordinates rather than walk tile coordinates.
* Unit::getLoadedUnits now returns a set rather than a list.
* AIModule::onSendText now has a void return type, rather than bool. Instead of returning true you can use Game::printf or Game::sendText to send the message.
Bug fixes:
* Fixed a bug where Game::getGroundHeight would always return 0 for tiles until Zerg Creep.
* Fixed a bug where Unit::isConstructing would not return true for Terran buildings that are constructing add-ons
* Fixed a bug where Unit::isIdle would sometimes return true when the unit is Constructing
* Fixed a bug where Unit::getBuildType would not work for Terran buildings that are constructing add-ons
* Fixed a bug where Unit::isConstructing would not return true for incomplete Terran add-ons that are being constructed.
* Fixed a bug where Unit::getBuildUnit would return NULL for incomplete Terran add-ons that are being constructed.
* Fixed a bug where Unit::isTraining would not return true for Reavers or Carriers.
* Fixed a bug where Unit::getRemainingTrainTime would incorrectly return 0 on some frames due to latency.
* Fixed a bug where Unit::getType would not immediately switch to Egg/Lurker Egg/Cocoon after issuing a morph command to a unit
* Fixed a bug where Unit::isBeingConstructed would return false for morphing Zerg units
* Fixed a bug where Unit::isConstructing would return false morphing Zerg units
* Fixed a bug where Unit::isIdle would return true morphing Zerg units
* Fixed a bug where Unit::getBuildType would sometimes return UnitTypes::None for morphing Zerg units
* Fixed a bug where Unit::getRemainingBuildTime would sometimes return incorrect values for morphing Zerg units
* Fixed a bug where Unit::getRemainingResearchTime would sometimes return 0 due to latency.
* Fixed a bug where Unit::getRemainingUpgradeTime would sometimes return 0 due to latency.
* Fixed a bug where Game::canResearch would return true while another unit was researching the same TechType.
* Fixed a bug where Game::canUpgrade would return true while another unit was upgrading the same UpgradeType.
* Fixed a bug with UpgradeType::Apial_Sensors.whatResearches() so that it now correctly returns UnitTypes::Protoss_Fleet_Beacon.
* Fixed a bug with Unit::getTransport so that it works for Protoss Interceptors
* Fixed a bug with Unit::isLoaded so that it returns true if and only if Unit::getTransport!=NULL.
* Fixed a bug with Unit::getLoadedUnits so that it also returns the Interceptors currently loaded inside a Protoss Carrier.
* Fixed a bug where Unit::getPosition and Unit::getTilePosition would return incorrect positions for loaded units.
* Fixed a bug where Unit::useTech would not cast Maelstroms.
* Fixed a bug where Unit::useTech would not work for Nuclear Missiles.
* Fixed a bug where Siege Tanks, Goliaths, Reavers, and Carriers would not attack when given an attackUnit command.
* Fixed a bug where Starcraft would crash when an AI issued a stop command to a Reaver or Carrier.
* Fixed a bug where Game::unitsOnTile would incorrectly include Terran Add-ons for tiles that did not contain a Terran Add-on.
* Fixed a bug where Unit::isBeingHealed wouldn't work. Now returns true for Terran units that are being healed or repaired.
===============================================
Changes from BWAPI Beta 2.7.2 to BWAPI Beta 2.8
===============================================
Added menu automation - you can now automatically start replays and games with no manual user interaction.
New classes:
* Added class GameType.
* Added class Bullet.
The following functions have been added:
* Added AIModule::onReceiveText - called when messages are received from other players.
* Added Game::isBattleNet - returns true during games being played on BattleNet.
* Added Game::getBullets - returns the set of accessible bullets.
* Added Game::getGameType - returns the game type of the current match.
* Added Player::maxEnergy - returns the max energy for the unit type, taking into account the player's upgrades.
The following functions have changed in functionality:
* Unit::getHitPoints now rounds up to nearest integer rather than down.
* Unit::getShields now rounds up to nearest integer rather than down.
* Unit::getEnergy now rounds up to nearest integer rather than down.
* Game::enableFlag can now also be called in AIModule::onFrame() during frame 0.
All neutral units are accessible in AIModule::onFrame() during frame 0.
The AttackType class has been renamed to BulletType.
The following functions are now case-insensitive for the strings they accept:
* BulletTypes::getBulletType
* DamageTypes::getDamageType
* Errors::getError
* ExplosionTypes::getExplosionType
* GameTypes::getGameType
* Orders::getOrder
* PlayerTypes::getPlayerType
* Races::getRace
* TechTypes::getTechType
* UnitCommandTypes::getUnitCommandType
* UnitSizeTypes::getUnitSizeType
* UnitTypes::getUnitType
* UpgradeTypes::getUpgradeType
* WeaponTypes::getWeaponType
Player::playerType has been renamed to Player::getType.
The following PlayerTypes have been renamed:
* NotUsed -> None
* Human -> Player
* Rescuable -> RescuePassive
* Unknown0 -> Unknown4
* ComputerSlot -> EitherPreferComputer
* OpenSlot -> EitherPreferHuman
* ClosedSlot -> Closed
* Unknown1 -> Observer
* HumanDefeated -> PlayerLeft
* ComputerDefeated -> ComputerLeft
Bug Fixes:
* Fixed a bug where Game::getLatency would return incorrect values for games played on BattleNet.
* Fixed a bug where Unit::getGroundWeaponCooldown would always return 0 and Unit::isStartingAttack would always return false and for Protoss Reavers.
* Fixed a bug with AIModule::onSendText.
* Fixed a bug where AIModule::onUnitDestroy was being called for invisible units with complete map info disabled.
* Fixed a bug where both cheat flags would automatically be enabled when running the AI as a client process.
* Fixed a bug where Game::enableFlag would not work when called from a client process.
=================================================
Changes from BWAPI Beta 2.7.1 to BWAPI Beta 2.7.2
=================================================
Fixed a bug in GameImpl::spriteToUnit which caused the game to crash every once in a while.
=================================================
Changes from BWAPI Beta 2.6.1 to BWAPI Beta 2.7.1
=================================================
AIs can now connect from another process using BWAPIClient.lib.
New enums:
* Added enum EventType
New classes:
* Added class Event
* Added class UnitCommand
* Added class UnitCommandType
The following functions have been added:
* Added AIModule::onSaveGame - called when the user saves the single player match. Currently is triggered twice.
* Added Game::getEvents - returns the set of events for the frame
* Added Game::indexToUnit - returns the Unit currently at the given index in Starcraft's internal Unit table. Only available when the Complete Map Information flag is enabled.
* Added Game::isInGame - returns true if Broodwar is currently in a match
* Added Unit::isAttacking - returns true if the unit is attacking. Does not yet work for siege tanks or goliaths.
* Added Unit::isVisible(Player* player) - returns true if the given player can see the given unit. Only available in replays or if the complete map information flag has been enabled.
* Added Unit::issueCommand - general purpose function to issue any valid unit command.
All member functions of Race, TechType, UnitType, UpgradeType, WeaponType now return other objects by value instead of by pointer. For example TechType::whatResearches returns a UnitType object rather than a const pointer to a UnitType object.
The following Orders have been renamed:
* Nothing1 -> UnusedNothing
* Powerup1 -> UnusedPowerup
* Nothing2 -> Nothing
* RallyPoint1 -> RallyPointUnit
* RallyPoint2 -> RallyPointTile
* Morph1 -> ZergUnitMorph
* Morph2 -> ZergBuildingMorph
* BuildSelf1 -> TerranBuildSelf
* Build5 -> BuildNydusExit
* Enternyduscanal -> EnterNydusCanal
* BuildSelf2 -> ProtossBuildSelf
* CarrierIgnore1 -> ReaverCarrierMove
* HoldPosition1 -> CarrierHoldPosition
* ReaverHold -> ReaverHoldPosition
* RechargeShields1 -> RechargeShieldsUnit
* Rechargeshields2 -> RechargeShieldsBattery
* BuildingLiftoff -> BuildingLiftOff
* DroneLiftoff -> DroneLiftOff
* Liftoff -> LiftingOff
* Harvest5 -> Interrupted
* Pickup1 -> PickupIdle
* Pickup2 -> PickupTransport
* Pickup3 -> PickupBunker
* Powerup2 -> PowerupIdle
* HoldPosition2 -> HoldPosition
* HoldPosition3 -> QueenHoldPosition
* HoldPosition4 -> SuicideHoldPosition
Bug Fixes:
* Fixed a bug where Unit::getGroundWeaponCooldown would always return 0 for Siege Tanks and Goliaths.
* Fixed a bug where Unit::getAirWeaponCooldown would always return 0 for Goliaths.
* Fixed a bug with Unit::isConstructing - now also returns true when the unit's order is TerranBuildSelf, ProtossBuildSelf, ZergBuildSelf, BuildNydusExit, and BuildAddon.
* Fixed a bug with Unit::isIdle - now also returns true when the unit's order is Reaver, Neutral, TowerGuard, and Burrowed.
* Fixed a bug with Unit::isMorphing - now also returns true when the unit's order is ZergBirth.
* Fixed a bug where Unit::isTraining - would return true for morphing hatcheries, lairs, and hives.
* Fixed a bug where Unit::useTech would not work for Archon_Warp or Dark_Archon_Meld.
* Fixed a bug where Game::canBuildHere would return true for refineries over geysers that already have refineries on them.
* Fixed a bug where Game::setScreenPosition would crash the game if given a position with negative coordinate values.
* Fixed a bug where Game::isBuildable would return true for the inaccessible row of tiles at the bottom of the map.
* Fixed a bug where Game::isWalkable would return true for the four inaccessible rows of tiles at the bottom of the map.
* Fixed a bug where UnitType::maxGroundHits would return 0 for Terran Siege Tank Siege Mode, Terran Siege Tank Tank Mode, and Terran Goliath.
* Fixed a bug where UnitType::maxAirHits would return 0 for Terran Goliath.
===============================================
Changes from BWAPI Beta 2.6 to BWAPI Beta 2.6.1
===============================================
* Added Unit::getID - returns a unique ID for the unit.
* Fixed a crash inadvertently introduced in BWAPI Beta 2.6 related to the new mouse and key state functionality.
=============================================
Changes from BWAPI Beta 2.5 to BWAPI Beta 2.6
=============================================
* Added Unit::getLarva - returns a set of 0, 1, 2, or 3 larva units that have spawned from the given Hatchery, Lair, or Hive.
* Added Unit::getHatchery - returns the Hatchery, Lair, or Hive that spawned the given larva. Returns NULL if the unit is not a Zerg Larva.
* Added Unit::returnCargo - returns the worker's cargo (minerals/gas) to a nearby resource depot. Works the same way as the "Return Cargo" button in the Starcraft GUI.
* Added Position::getApproxDistance - an approximate distance function similar to the one starcraft uses.
* Added Player::isDefeated - returns true if the player has been defeated
* Added Player::isVictorious - returns true if the player has achieved victory.
* Added Game::getMousePosition - returns the position of the mouse on the screen.
* Added Game::getScreenPosition - returns the position of the screen on the map.
* Added Game::setScreenPosition - moves the screen to the given position on the map.
* Added Game::pingMinimap - pings the given position on the minimap.
* Added Game::getMouseState - returns true if the specified MouseButton is pressed
* Added Game::getKeyState - returns true if the specified Key is pressed
The following functions have changed in functionality:
* AIModule::onEnd is now called before any user interaction at the end of games and replays.
* Game::getFrameCount no longer increases while the game is paused, however AIModule::onFrame is still called.
* Unit::getRemainingTrainTime now returns the number of frames until the next larva spawns at the given Hatchery, Lair, or Hive. Works as before on other unit types.
* Unit::getDistance(Unit* target) now computes the distance between units more similar to the way starcraft computes distance between units when determining if a unit is in attack range.
* Unit::getDefenseMatrixPoints now returns actual defense matrix hit points (not multiplied by 256).
Bug fixes:
* Fixed a bug where scourge that suicide into other units would not produce an AIModule::onUnitDestroy message.
* Fixed a bug where Game::canUpgrade would sometimes return true even though the player did not have enough resources.
* Fixed a bug where Unit::cancelTrain would not cancel Terran Nuclear Missiles when called on a Terran Nuclear Missile Silo.
* Fixed a bug where Unit::isTraining would return false when called on a Terran Nuclear Missile Silo training a Terran Nuclear Missile.
* Fixed a bug where Unit::getTrainingQueue would return and empty list when called on a Terran Nuclear Missile Silo training a Terran Nuclear Missile.
=============================================
Changes from BWAPI Beta 2.4 to BWAPI Beta 2.5
=============================================
* Added a logging option to bwapi.ini - by default it is set to off.
* Added TechType::getRace (the function was declared before but not actually implemented).
* Added Unit::getBuildType - returns the building type a worker is about to construct. If the unit is a morphing Zerg unit or an incomplete building, this returns the UnitType the unit is about to become upon completion.
* Fixed TechTypes::Restoration.whatResearches() so that it now returns UnitTypes::Terran_Academy.
* Fixed a bug where Game::canBuildHere would return true even when a nexus/command center/hatchery was too close to invisible minerals/geysers. The function now uses static mineral and geyser data and assumes mineral fields exist unless it can see the build tile where the mineral is supposed to be, and cannot see the mineral unit.
* Fixed a bug where Unit::isIdle would return false after a worker failed to start construction of a building.
* Fixed a bug where using Siege Tanks would cause the game to crash.
* Fixed a bug where BWAPI would crash on game end if a player left during the game.
* Fixed a bug where Unit::isGatheringGas would sometimes return false for drones harvesting gas into a morphing Hatchery.
* Fixed a bug where chat messages in multiplayer games would either appear garbled or not show at all.
=============================================
Changes from BWAPI Beta 2.3 to BWAPI Beta 2.4
=============================================
* Added AttackType class, however this won't be of much use until the Attack class is implemented (which will let AI Modules "see" projectiles, bullets, psi storms, lurker attacks, etc).
* Added Game::isExplored - returns true for tiles that are visible or were visible at some point earlier in the match.
* Added Unit::isBeingGathered - returns true for mineral patches and the three types of refineries when a unit is gathering from it.
* Renamed Game::buildable to Game::isBuildable
* Renamed Game::walkable to Game::isWalkable
* Renamed Game::visible to Game::isVisible
* Renamed Game::groundHeight to Game::getGroundHeight
* Added TilePosition versions of Game::isBuildable, Game::isVisible, Game::hasCreep, and Game::hasPower.
The following functions have changed in functionality:
* UnitType::seekRange now returns the seek range in pixels.
* UnitType::sightRange now returns the sight range in pixels.
* UnitType::maxHitPoints now returns actual max hit points (not multiplied by 256).
* Unit::getHitPoints now returns actual current hit points (not multiplied by 256).
* Unit::getShields now returns actual current shields (not multiplied by 256).
* Unit::getEnergy now returns actual current energy (not multiplied by 256).
* UnitType::canAttack now returns false for overlords, dropships, and other types of units that cannot attack.
* Player::hasResearched now returns true for abilities that the player has researched by default, such as Scanner Sweep.
* Game::getFrameCount now counts from 0. So the first frame is frame 0.
* Game::sendText now processes most cheat codes in single player games. For example, typing Broodwar->sendText("black sheep wall") will reveal the entire map.
Bug fixes:
* Fixed a bug where Game::isVisible would crash the program when called during a replay.
* Fixed a bug where Unit::setRallyPosition and Unit::setRallyUnit would not execute properly.
* Fixed a bug where Unit::patrol would appear to change the position of the unit to the target position.
* Fixed a bug where Unit::isStartingAttack would always be false for certain types of units, even when they were attacking.
* Fixed a bug where scanner sweep (and possibly other tech types that don't need to be researched) would not work.
* Fixed a bug where AIModule::onFrame would be called twice on the first frame.
* Fixed a bug where Unit::train would not allow more than one unit to be added to the training queue.
* Fixed a bug where AIModule::onUnitDestroy would not be called for units loaded into dropships/shuttles/overlords when the transport unit was destroyed.
* Fixed UnitType::topSpeed, Unit::getVelocityX, and Unit::getVelocityY. Everything should now be in pixels per frame.
=============================================
Changes from BWAPI Beta 2.2 to BWAPI Beta 2.3
=============================================
* bwapi.ini file no longer accepts curly brace definitions.
The following functions have been added:
* AIModule::onUnitRenegade - called when a unit changes ownership.
* AIModule::onPlayerLeft - called when a player leaves the game.
* AIModule::onNukeDetect - called when a nuclear launch has been detected. If the target position is visible at the time of launch (or complete map information is enabled), the target position is provided.
* Game::restartGame - restarts the single player match.
* Unit::getUpgradeLevel - returns the upgrade level of the unit.
* Unit::getVelocityX - returns the x component of velocity in pixels per frame.
* Unit::getVelocityY - returns the y component of velocity in pixels per frame.
* Player::leftGame - returns true if the player has left the game.
* UnitType::upgrades - returns the set of upgrades that can affect this UnitType.
* UpgradeType::whatUses - returns the set of unit types that are affected by this UpgradeType.
The following functions have been renamed:
* Unit::getCurrentDirection has been renamed to Unit::getAngle
* Player::researching has been renamed to Player::isResearching
* Player::researched has been renamed to Player::hasResearched
* Player::upgrading has been renamed to Player::isUpgrading
* Player::upgradeLevel has been renamed to Player::getUpgradeLevel
* Game::drawMapBox has been renamed to Game::drawBoxMap
* Game::drawMouseBox has been renamed to Game::drawBoxMouse
* Game::drawScreenBox has been renamed to Game::drawBoxScreen
* Game::drawMapTriangle has been renamed to Game::drawTriangleMap
* Game::drawMouseTriangle has been renamed to Game::drawTriangleMouse
* Game::drawScreenTriangle has been renamed to Game::drawTriangleScreen
* Game::drawMapCircle has been renamed to Game::drawCircleMap
* Game::drawMouseCircle has been renamed to Game::drawCircleMouse
* Game::drawScreenCircle has been renamed to Game::drawCircleScreen
* Game::drawMapEllipse has been renamed to Game::drawEllipseMap
* Game::drawMouseEllipse has been renamed to Game::drawEllipseMouse
* Game::drawScreenEllipse has been renamed to Game::drawEllipseScreen
* Game::drawMapDot has been renamed to Game::drawDotMap
* Game::drawMouseDot has been renamed to Game::drawDotMouse
* Game::drawScreenDot has been renamed to Game::drawDotScreen
* Game::drawMapLine has been renamed to Game::drawLineMap
* Game::drawMouseLine has been renamed to Game::drawLineMouse
* Game::drawScreenLine has been renamed to Game::drawLineScreen
When complete map information is disabled, the following function no longer provide information about enemy units, regardless of visibility:
* Unit::isHallucination
* Unit::isLoaded
* Unit::getTrainingQueue
* Unit::getTransport
* Unit::getLoadedUnits
* Unit::getScarabCount
* Unit::getSpiderMineCount
* Unit::getTech
* Unit::getUpgrade
* Unit::getRemainingResearchTime
* Unit::getRemainingUpgradeTime
* Unit::isResearching
* Unit::isUpgrading
* Unit::getRallyPosition
* Unit::getRallyUnit
To determine if a visible enemy unit is busy researching or upgrading, use Unit::isIdle.
The following functions have changed in functionality:
* Unit::getAngle (renamed from Unit::getCurrentDirection) now returns the angle of the unit in radians.
* UnitType::topSpeed now returns the correct top speed of the UnitType in pixels per frame.
* Game::leaveGame now goes to the after-match stats screen, rather than going to the main menu.
* AIModule::onEnd is now called with an argument isWinner, which is true if the ai module has won the game.
Bug fixes:
* Fixed a bug where Game::drawTextMap would use screen coordinates. It now uses map coordinates as expected.
* Fixed a bug where attackUnit, rightClick, and other orders which take a target unit would not target the right unit in the game.
* Fixed a bug where Unit::isGatheringGas and Unit::isGatheringMinerals would sometimes return false, even though the unit was gathering gas/minerals.
* Fixed a bug where getUnits() functions would return an incomplete list of units when called from onUnitMorph, onUnitShow, or onUnitHide.
Other changes:
* Added documentation of how to draw text in different colors.
* Increased speed of multiplayer menus.
=============================================
Changes from BWAPI Beta 2.1 to BWAPI Beta 2.2
=============================================
The following functions have been added:
* AIModule::onUnitShow
* AIModule::onUnitHide
* AIModule::onUnitMorph
* Unit::getInitialType
* Unit::getInitialPosition
* Unit::getInitialTilePosition
* Unit::getInitialResources
* Unit::getInitialHitPoints
* Game::isMultiplayer
* Game::isPaused
* Game::getStaticMinerals
* Game::getStaticGeysers
* Game::getStaticNeutralUnits
* Game::drawTextMap
* Game::drawTextMouse
* Game::drawTextScreen
* Game::drawMapBox
* Game::drawMouseBox
* Game::drawScreenBox
* Game::drawMapTriangle
* Game::drawMouseTriangle
* Game::drawScreenTriangle
* Game::drawMapCircle
* Game::drawMouseCircle
* Game::drawScreenCircle
* Game::drawMapEllipse
* Game::drawMouseEllipse
* Game::drawScreenEllipse
* Game::drawMapDot
* Game::drawMouseDot
* Game::drawScreenDot
* Game::drawMapLine
* Game::drawMouseLine
* Game::drawScreenLine
The following functions have changed in functionality:
* Unit::exists - now returns false for inaccessible units, even if they exist.
* AIModule::onUnitCreate is no longer called for invisible units when complete map information is disabled.
The following functions have been renamed:
* Game::text has been renamed to Game::drawText
* Game::inReplay has been renamed to Game::isReplay
* AIModule::onAddUnit has been renamed to AIModule::onUnitCreate
* AIModule::onRemoveUnit has been renamed to AIModule::onUnitDestroy
Other changes:
* BWAPI no longer crashes on replays.
=============================================
Changes from BWAPI Beta 2 to BWAPI Beta 2.1
=============================================
* Fixed a bug that produced phantom marines. An internal unit set in BWAPI
was not being reset between matches, so units that existed in a previous
match appeared to exist in the next game as phantom marines. Retrieving
information from these non existant marines and/or issuing orders to them