ASL: Release of 1.2 and planning of 2.0

First entry in ASL’s ChangeLog was made on 2008-08-24. As you can see the ASL became 2 years old on 24th August this year.
Last release of the ASL was on 2009-12-20 (version 1.1) and first on 2009-11-07 (version 1.0). Since this has been a really long time ago I thought it would be necessary to create another release on its birthday.
Unfortunately I missed the 24th August because I had to solve some troubles with my hard disk but finally I’ve prepared and uploaded everything. Simply follow this link to download the current release version.

Maybe I will add an API documentation later if “vjassdoc” still works correctly with the current vJass and code revision.
Many things were changed since version 1.1 and I want to thank those people from and other websites who still contribute some vJass code.
While the core becomes more and more stable and usable the systems got some really big reworks. Although there are some completely new structures this release will be version 1.2.
That’s because many changes were required to complete release 1.0 by fixing bugs and renaming identifiers for instance.
Sadly much documentation still lacks and the tutorials are written in German only yet and are often obsolete. The best way to get help is reading the Doxygen comments in code files or simply writing me an e-mail. I hadn’t left much time to revise and improve the documentation but I’ve added some to the system and core structures and also to the new functions. Another big problem of the ASL development progress is that the JassHelper is not maintained by user Vexorian anymore. As there are some problems with vJass (e. g. extending size-limited structures by interfaces or running text macros in text macro definitions) I could not create everything I wanted, so there’s still no abstract interface for container and iterator structures. Just watch the JassHelper thread on to see how many problems people do still have with JassHelper.
Maintaining JassHelper wouldn’t be a (good) choice for me since it’s written in ugly Pascal code and honestly I hate vJass’s syntax. Therefore I hope I will have left enough time to realize my own language JASS++ someday.
Anyway, here’s a list of new features in ASL 1.2:

  • new debugging print functions
  • added more debugging cheats
  • added many new global functions
  • added custom trigger and trigger editor UI data that some functions and types can be used in World Editor’s trigger editor now
  • added many stub methods (identifiers starting with “on”) which makes structures better extendible
  • structure ARoutine supports the same routine type for the same unit several times at one day now
  • structure ALayer supports multiple regions with different heights now
  • item charges of rucksack created by structure AInventory do always start at one now
  • new structure AFormat and old formatting functions support many more arguments now
  • added many new container methods for all three container implementations (A_VECTOR, A_LIST and A_MAP)
  • improved page implementation and added current page display support to structure ADialog
  • quest messages of structures AAbstractQuest, AQuest and AQuestItem are like in Warcraft 3 now and user can call some more methods to show whole updates to the players
  • structure AAbstractQuest supports dynamic widgets now (for pings)
  • added global damage detection system based on structure ADamageRecorder
  • structure AVote uses forces now not all playing players
  • added text macro A_MAP
  • added GUI system structures AStyle, AFrameBar, AFrame, AWindow and AArrowButton (usable in 2.0, see below)
  • added structure AItemSpawnPoint
  • added interface ASpawnPointInterface
  • added text macro A_NUMERIC_VECTOR
  • added RtC 1.0 support
  • added interfaces AIteratorInterface and AContainerInterface (not usable because of JassHelper bug)
  • added structure AFormat
  • added default container instance struct APlayerVector
  • added structure AForce
  • added structures AUnitCopy and AHeroIcon
  • added interface ABarInterface which is extended by AMultiboardBar
  • added text macro A_DESTROY
  • improved structure APoint
  • added many camera related functions

This is a list of all new global functions:

  • PlaySoundFileOnUnit
  • PrintIf, PrintFunctionErrorIf and methods of text macro A_STRUCT_DEBUG printIf, printMethodErrorIf and staticPrintMethodErrorIf
  • speech2
  • ShowShadowStrikeTextTagForPlayer
  • CreateCorpseAtRect and CreateCorpsesAtPoint
  • EndCinematicSceneForPlayer
  • CreateUnitsAtRect
  • SetUserUIForPlayer and SetUserControlForPlayer
  • GetUnitLevelXP, GetUnitXP and GetUnitHeroXP
  • GetHeroLevelMaxXP and GetHeroMaxXP
  • GetTimeOfDayElapsedHours, GetTimeOfDayElapsedMinutesInHour, GetTimeOfDayRemainingHours, GetTimeOfDayElapsedMinutes, GetTimeOfDayElapsedSecondsInMinute, GetTimeOfDayRemainingMinutes, GetTimeOfDayElapsedSeconds, GetTimeOfDayRemainingSeconds and GetTimeOfDayString
  • String and Format
  • FlushUnitCollisionSizes, FlushUnitTypeCollisionSize, GetUnitCollisionSizeEx and GetUnitCollisionSize
  • GetPlayingUsers and GetPlayingPlayers
  • GetRectX and GetRectY
  • StringSplit
  • GetTimeOfDayMinutesPercentage and GetTimeOfDaySecondsPercentage

And finally here’s a list of all new debugging cheats:

  • xp
  • enable
  • disable
  • pathing
  • nopathing
  • lumber
  • gold
  • timeofday
  • foodcap
  • order
  • timer

If you want to contribute something please test systems and functions and report your bugs at the project’s bug tracker.
At the moment I’m trying to fix some bugs of structures AInventory and ALayer and to add some more and better documentation. Help is primarily required for testing RtC and jAPI support but also for general testing.
Consider that structures AMissile, AJump, AFocus and AFight are still unusable since I do not require them for “Die Macht des Feuers”.
Furthermore global options A_DEBUG_HANDLES, A_FPS_MOVEMENT and A_NET should not be used yet.
Structures AUnitCopy and AHeroIcon were added because of requirement in “Die Macht des Feuers” like most new features (including ADialog improvements, AItemSpawnPoint etc.).
Since there are more stub methods now (keyword stub isn’t implemented that long in vJass) extending structures is much easier. Unfortunately keyword “protected” hasn’t been added to vJass yet and probably never will. Therefore many methods are public which should only be used by derived structures. I’ve added todo comments which indicate that those methods should be protected if possible.
By meantime, most stub method identifiers start with “on” and call function pointers in their original implementation of their structure if there are any. Actually they should also be protected because nobody has to call them from outside of their structure.
Please read file “README” before using the new version! File “TODO” contains many current issues which are not all reported on online bug tracker.
If you’re interested in more detailed changes descriptions please take a look into file “ChangeLog” because I try to log most of my changes very exactly.

As you can read in my recent web log article I’ve already changed some project names. The main project (formerly called “vjasssdk”) is called “wc3sdk” now and the original “wc3sdk” which contains ASL and the MPQ archives has been split up into projects “ASL” and “archives”.
Unfortunately I hadn’t have enough time to move SVN sub folders. Anyway, this project is completely separated now although there are some functions which allow you do preload data from the archives.

For those of you who’re interested in the whole development progress and history of the ASL I’ve uploaded several images:

This is some really old JASS-only stuff I had created when did not know vJass yet (long time before I started to work on ASL). As you can see I created custom data types by using global variables for properties and I had to write custom constructors and destructors which I would never recommend anyone.
Anyway, at that time I released a promotion video for “Die Macht des Feuers”. Maybe I will upload it here again someday.

When ASL had been launched it was called “Warcraft 3 Script Engine” and I used TESH and ugly vJass. It was launched after discarding current work on “Die Macht des Feuers” in 2007.

This was the initial custom GUI system which used very ugly code since I didn’t really used object oriented programming.

I’m still using this modified syntax highlighting of Flame_Phoenix’s version. I’ve never created some auto completion stuff. Real nerds have to know all JASS natives :-D.

And this is the RPG modification code. As there had been some mysterious wizards you won’t recognize any quest file name.

Later I got serious problems with pjass since it was limited (Flex/Bison) so I had to move to Zoxc’s JASS parser. Fortunately JassHelper got parser configuration support around that time.

That’s the custom script code of the current “Die Macht des Feuers” map called “Talras”. Again you won’t recognize the mini map – those mysterious wizards must be really powerful.

And finally I would like to recommend you to test all your maps on Linux systems with deprecated versions of wine. Just minimize your game and open it again and you’ll see such beauty textures.

Finally I want to write which systems probably will get more attention next time since they’re used in my project “Die Macht des Feuers”.
First of all I need to improve the interface of structure AInventory since it doesn’t easily allow developer to remove or count items. Besides video, class selection and talk systems may be improved a little bit.
Since custom GUIs won’t be provided by first “Die Macht des Feuers” release ASL’s GUI system will be revised in version 2.0 only!
As there are many different spells which may need some “extra functionality” which isn’t given by the current systems there can be some new ones in version 1.*. All in all version 1.* should support the whole current planning state of “Die Macht des Feuers” so I can get a really stable version.
Therefore I won’t stop supporting and fixing version 1.* until I’ve created a new, stable release of version 2.* which supports my RPG modification, too.
Consider that structures like AMissile, the AI module and RtC/jAPI support will probably suffer from those decisions but I won’t really care about.

Version 2.0:
Of course I’ve already made some planning for version 2.0. I will create a new SVN branch for release 2.0 and continue development of version 1.2 as I wrote above. So there will probably be another release like 1.3 with many bug fixes and other important improvements.
I think version 2.0 will be the last version of the ASL and I will stop development since my other projects need some more attention and vJass has never been my favorite scripting language though I’m very happy I don’t have to use JASS anymore.
The main purpose of the ASL project has always been my modification “Die Macht des Feuers”. For this reason I will primarily add new features to 2.0 which are heavily required by “Die Macht des Feuers” but also some new and better core functionality.
Additionally I want to add some more documentation stuff than the current German tutorials and all those Doxygen comments. Since vjassdoc development had also been stopped it’s hard to create a really nice, automatically generated documentation.
In my opinion there should be a step-by-step tutorial about “How to use ASL?” because it’s hard to see the huge amount of functions, libraries and structures for new users although they mostly won’t need many parts of it.
Here’s a list of main changes and features which should be realized with 2.0:

  • release test map for 2.0
  • add much more detailed Doxygen comments to code (include examples etc.)
  • add step-by-step tutorial “How to use ASL?” which is related to example map
  • decrease number of structure initializers which has to be called manually (identified as “init”) and increase number of dynamic members
  • decrease number of global options
  • add new core functions for interface (sound, camera, cinematic filters) and strings (such as Trim…)
  • add new core structures like AImageBar, ATextTagBar, AReverseIterator and some more container types
  • add interface ASerializable for all serializable structures (such as character system’s ones)
  • add structure APlayerUIData which stores and restores player’s user interface data (required for in-game videos)
  • function interfaces should become static members of structures if possible
  • many ACharacter related structures (such as AInventory, AFight and ARevival) should be implemented unit-based and extended by those character system related structures
  • add new implementation of structure AInventory which is extended by AEquipment and ARucksack
  • improve GUI system by adding/improving structures AWindow, AStyle, ALayout etc. and using graphics from project “archives”
  • add more trigger and trigger editor UI data (primarily for global functions and core types) to provide easier access
  • add JassHelper option [forcemethodevaluate] support
  • add structure AUnitStats based on ADamageRecorder which could be usable in strategy games and for various spells
  • structure ATokenizer should get backwards functionality and extends AContainerInterface

If you have some more cool ideas just write an e-mail. All contributions are appreciated.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: