[Windows Mobile Apps and Games] tomsyty:
I've written a script called "RandomRingtone". This script allows to automatically change the ringtone after each incoming call. It needs MortScript to run (I'm using 4.3b15) and .NET Compact Framework 3.5. Tested on Benq E72, Windows Mobile 6.5 Standard.

Features:

Various work modes:

Regular - it doesn't change ringtone, little useless, but good if we want to "lock" current ringtone for a while,

Random - allows to select random ringtone,

List - user can specify the order of use.

Exlcusion lists: user can specify which ringtones shouldn't be used by script or which calling numbers shouldn't cause to change the ringtone.

Various notification types: after each incoming call name of actually selected ringtone can be shown as a message, displayed on the homescreen or omitted.

Ignore missed calls: when enabled, only answered call will cause to change the ringtone.

Don't change when meeting profile is active: in this profile no ringtone is used so there is no need to change the ringtone.

Detailed informations:

When work mode is set to "Regular", you still can change ringtones. Just click "Next ringtone", then new random ringtone will be chosen. When work mode is set to "Random", each incoming call will cause to select random ringtone. You can also force the change like previously, clicking "Next ringtone". In this mode, when "Loop" option is enabled, each ringtone will be used only once as long as there are ringtones which have been not used yet. When all ringtones will be used, the cycle starts from the beginning. Even if this option is disabled, next ringtone always is different than actually used. When work mode is set to "List", user can create the list with specified usage order. Clicking on ringtone's name will show context menu with options ("Remove", "Move up", "Move down"). When the list ends, it can be repeated or mode can be changed to random or regular (with given default ringtone). Regardless of chosen work mode, user may select to ignore missed calls - ringtone's change will be done only when call was answered.

User can specify excluded ringtones list. These ringtones will not be used by script, so e.g. these ringtones can be assigned individually to some contacts. Clicking on ringtone's name will display additional context menu. There is also one option which may be useful for that purposes - excluding some contacts. Contacts added to the list will not cause change ringtone when they are calling to us. These options are not connected, but when we assign static ringtone to specified contacts, it would be good if their calls will not cause to change the ringtone .. These options give us ability to do that.

Main script ("RandomRingtone.mscr") is automatically executed after each incoming call through other script, "RandomRingtone_loader.mscr", which is executed by "RandomRingtone_preloader0.mscr" or "RandomRingtone_preloader1.mscr". Those scripts are executed by a small program, "RandomRingtone.exe", which is running in the background and checking for incoming call. User should always run main script, not preloader's application or loader's script. When we want to turn on/off preloader, there is an option in main menu - "Active". To automatically start preloader when system starts, enable "Autorun" option in Settings.

After incoming call script can inform us which ringtone is actually choosen. This can be done in two ways: displaying automatically hiding message with countdown (5 sec.) or through plugin on homescreen. I used "CTestUIPlugin" which is the part of "SlidingPanel" (Bronze plugin), unfortunately I don't know how it looks in other phones. In the attachements I've added modified .xml and .cpr files. User may also supress this notifications selecting proper option.

Strings are stored in file "Language.ini". I've created two files (polish and english, sorry for poor translation, there are probably many linguistic errors, so it will be nice if someone would correct this file...). Error / warning / information messages are part of scripts and are only in english. While normal work you shouldn't even see these messages, but when something going wrong, see if in directory where script is stored exists file "ErrorLog.txt".

Ringtones need to be stored in "\Windows" or directly on "\Storage Card".

Installation:

Unpack archive and run "RandomRingtone.mscr". You need to have MortScript installed (tested on 4.3b15).

If you are using "AppToDate", place "RandomRingtone.xml" into your AppToDate folder (usually "\Application Data\AppToDate").

If you are using "SlidingPanel" (Bronze plugin), you can put "SlidingPanel.home.xml" into "\Application Data\Home" and "SlidingPanel_240x320.cpr" into "\Windows" directory. Standard plugin's icon was changed to "2401;2401" (you can do this manually, key "HKLM\Software\Microsoft\CHome\CTestUIPlugin", value "ICONPATHS").

I've attached polish language file, if you want to use them, change name to "Language.ini" and replace with existing one.

Known bugs:

Please report in this topic any bugs, even small or related with poor english translation...

1. Actual MortScript beta version (4.3b15) seems to has a problem with ExitSub or If...EndIf section, what causes unexpected behaviour even when ExitSub command is in condition which is not true, so shouldn't be processed. By this reason, there is no "Exit" option when we enter into "Ringtones list" submenu, instead of this we need to use "Cancel" softkey.
2. Probably from this same reason MortScript doesn't serve correctly some strings (in "Choice" window), so some ringtones name or options can be displayed incorrectly.
3. Very short incoming calls can cause to not recognize incoming caller number, so when we are using "Excluded contacts" list, script may change ringtone although user is on the list.
4. Few times when system was very low on memory and caller with unknown ID was calling while "Ignore missed calls" was disabled, my phone changed ringtone to default stored in rom.
5. When system is very busy, message which informs about used ringtone may stay in background and not shown.

Changelog:

Version number describes release date (YYMMDD) and version number released in that day.

100927.01
- Now small .exe application is responsible for incoming call detection, not script like previously. This application is less power consuming than continously running script, which was draining battery too fast.
100503.01
- User can enter script for meeting profile. When meeting profile is active, script will not change the ringtone.
- Minor bugs fixed.
100502.01
- Initial version.