<- Home
C/C++
  • fixes 2: Topic

    This is a plugin for SA-MP servers, designed to fix a few common problems. Most notably the inaccuracy of timers.

  • PEGGY: GitHub, Paper

    This project has both Haskell and C++ components as the paper was comparing the performances of several algorithms, this part implemented them in C++ and CUDA. See the paper and below for more details.

  • SA-MP: Forums, Homepage

    SA-MP (San Andreas MultiPlayer) is a third party modification for San Andreas, adding in multiplayer capabilities for online play. I am a former developer of SA-MP (and am still involved in the project), but I was not the lead on this.

  • sscanf: Topic

    One of the all time most popular SA-MP plugins, installed on almost every server ever. This plugin provides the "sscanf" (aka "unformat") function for string decomposition to PAWN, based on the C function but written from scratch. The functionality of this plugin has evolved from very humble beginnings to now include advanced specifiers for extracting numbers, names, arrays, complex structures, and even completely custom data from a string of characters.

    This is also the only released plugin that supports NPCs as well as gamemodes and filterscripts.

  • Whirlpool: Topic

    A SA-MP plugin providing access to the Whirlpool cryptographic hash for passwords etc. I recently found a problem with the PHP implementation of Whirlpool in that it differs from the reference version by returning lower case instead of upper case hexits, so if you hash something twice you will get different results without using "strtoupper" - I tried reporting this as a user note but a PHP moderator refused to accept this fact.

Haskell
  • PEGGY: GitHub, Paper

    PEGGY (Parallel Execution, Generally on GPUs, by Y_Less). This was the library underlying several of the tests from my paper "Beauty And The Beast: Exploiting GPUs In Haskell". It proveds an array operations language with multiple execution backends, notably CUDA for data-parallel processing, to Haskell. This public version is exactly as used when published.

    The main Haskell source code is in "Bin/x86/Release" directory - this is because it needed to be run along side the C++ binaries and placing it there was the simplest way of doing so.

  • Rosalind: Download

    I briefly participated in the Rosalind project to implement a variety of bioinformatics algorithms in the language of your choosing - pitching the solutions against timed challenges. That website is an excellent starting point for people getting in to bioinformatics coding, it's just a shame it didn't exist when I started my research in that field!

JS
  • YavaScript: Homepage, GitHub, Writeup

    YavaScript is an extension to Javascript to add a C-style pre-processor to the language; including macros (#define), files (#include), and conditional compilation (#if, #endif etc). A JavaScript component makes any code using these extensions run natively in all modern browsers, and the C++ component allows you to combine and minify files for production. This was submitted as my final individual project in my undergraduate degree.

PAWN
  • ALS Topic

    Not a release per-se, but a method of writing includes that use public functions transparently, while still allowing a main script to have a copy of that public function. I.e. how to "hook" function calls such that your function is called at the same time as another one.

  • Botsync Topic

    An early method of sending commands between a SA-MP server and NPCs running in a separate process. Uses two methods - one slower but supporting larger data over files, the other faster for short messages by hijacking already open communication channels in the form of chat messages.

  • fixes.inc Topic

    A community driven include addressing 60+ scripting and client bugs in SA-MP; crashes, desyncs, removed features, hacks, and more.

  • foreach Topic

    Adds the "foreach" keyword to PAWN, providing efficient looping over sparse arrays (most commonly connected players in a SA-MP server) and custom iterator functions. Replaced by "y_iterate" (YSI).

  • QWERTYUIOP Documentation, Download

    QWERTYUIOP stands for: Quaint Wrappers Enabling Relatively Tearse YSI Usage, Instead Of Perplexity. It is also known as AZERTYUIOP for people more familiar with that keyboard layout (A Zebra Enabling... - and yes, the Zebra is real). As people may have noticed from "PEGGY" I like acronyms, this one is my second best ever after the backronym "Covert Home Intelligence Network Creating Honeypot Insurgency Legions for Less Attacks" - CHINCHILLA*.

    This library builds on top of YSI and provides macros to simplify the most common use cases of the library. These macros are each just one letter - I realise this is very bad practice, but if the name didn't give it away this was a joke in the first place. Ironically, despite its joke status, it has actually proved quite useful when writing game modes.

    * I call this word game "WORD GAME - Working Out Relevant Descriptions, Given Acronyms and Meanings, Excellently".

  • YUP Topic

    Y_Less' Update Peripherals. When "OnPlayerUpdate" was added to SA-MP it introduced the opportunity to accurately detect exactly when things such as health and ammo changes occured. This include therefore adds the following callbacks: "OnPlayerWeaponChange", "OnPlayerAmmoChange", "OnPlayerHealthChange", "OnPlayerArmourChange", "OnPlayerMoneyChange", "OnPlayerWeaponSlotChange", "OnPlayerUnpause", "OnPlayerPause".

  • YSI Homepage, GitHub, Topic, Wiki

    YSI (the Y Server Includes) is the umbrella term for a large number of includes (currently around 45), touching on all aspects of SA-MP server scripting. This is a huge collection of includes, documented on its own website and in a number of other topics linked to from the main topic.

    Click HERE for a brief list of components, visit YSI.tl for the homepage, or any of the links above for more information.

YSI
  • Libraries: Main List

    This library deserved its own category, even though it isn't actually a separate language. However, the list is extensive so I've separated it out to another page.

Other