-
Subversion Tips
Here’s a few tips that I’ve discovered to ease working with Subversion.
Long URLs
Tired of those long URLs, like
svn+ssh://foo@bar.com/long/directory/hierarchy/to/svn/repo/trunk? Use a shell alias, function or shell script which simply prints the URL. e.g.#!/bin/sh echo "svn+ssh://foo@bar.com/long/directory/hierarchy/to/svn/repo/$@"Save the shell script as, say,
FooSVN. Now, instead of typing those long URLs on the commandline, you can just writesvn co `FooSVN trunk`instead. -
Subversion for Mac OS X
Note: I don’t support this package anymore: Martin Ott of TheCodingMonkeys provides his own statically-linked Subversion binaries, and Darwinports also supplies their own subversion package. The main reason I made this package was because I wanted an easy way to install Subversion without going through Fink, which wants to install Apache 2 at the same time. Both the above two places enable you to do that. I’m only keeping this around for posterity’s sake :).
Subversion Package
Detailed Dependency Build Information
Subversion has quite a number of dependencies, which make building it not a lot of fun. My binary distribution puts all of Subversion’s dependencies into the
/usr/local/libexec/subversiondirectory, so if you have any of its required libraries installed yourself or via Fink, none of these versions will conflict. The downside is that you use a bit more disk space, but hey, who’s complaning about a few megabytes these days?The APR (the Apache Portable Runtime) 0.9 branch was used, checked out on 15 March 2003 3:20pm (UTC +10), with the following
./configureline:./configure --prefix=/usr/local/libexec/subversion/aprapr-util
./configureline:./configure --prefix=/usr/local/libexec/subversion/apr-util --with-dbm=db42 --with-berkeley-db=/usr/local/libexec/subversion/berkeley-db --with-apr=/usr/local/libexec/subversion/aprBerkeley DB 4.2.52 with the 4.2.52.1 and 4.2.52 patches applied. The following
./configureline was used to compile it:../dist/configure --prefix=/usr/local/libexec/subversion/berkeley-dbThe version of OpenSSL that is distributed with Mac OS X Panther 10.3.2 (0.9.7, I believe) was used.
Neon. Note:
./autogen.shwas run for Neon, so that a newer version of libtool and the auto{conf,make} utilities would be installed which understands how to build shared libraries on Mac OS X../configure --prefix=/usr/local/libexec/subversion/neon --with-ssl --enable-sharedSWIG:
./configure --prefix=/usr/local/libexec/subversion/swigSubversion itself was ./
configured with (note also ./autogen.sh was run):./configure --with-ssl --with-apr=/usr/local/libexec/subversion/apr --with-apr-util=/usr/local/libexec/subversion/apr-util --with-neon=/usr/local/libexec/subversion/neon --with-apxs=/Library/Apache2/bin/apxs --prefix=/usr/local/libexec/subversion -
Mail.app Pictures
You know those cute little pictures which pop up if you receive an email from somebody with a Mac.com account? It turns out that you can set that picture with an email header: no Mac.com account needed.
Simply add a
X-Image-Urlheader to your email, with the contents being a URL that contains the picture, e.g.X-Image-Url: http://www.algorithm.com.au/albums/ozone/Me.jpg.Credit where credit is due: I found out about this tip from the following two links:
-
USB Numeric Keypad
If you didn’t know, you can use the numeric keypad to select options that appear on the radial menu (that appears when you, for example, right-click on your character). Of course, the numeric keypad is in an inconvenient spot: most gamers have their left hand resting on the left-hand side of the keyboard on the Quake-inspired
W/A/S/Dkeys, not on the right-hand side where the numeric keypad is. On laptops, it’s in an even more inconvenient spot—like, it doesn’t exist and stuff. D’oh.If you’re willing to fork out a bit of dough for a game, drop $50 on a USB numeric keypad, and put that to the left of your keyboard. Your enjoyment of Neverwinter will go up dramatically. It’s also useful for Alpha Centauri if you’re a laptop person :-).
-
VideoLAN Annodex patches
Here are some patches for the VideoLAN cross-platform multimedia player, to enable support for Annodex bitstreams.
- Annodex support for the Ogg demuxer (
modules/demux/ogg.c): vlc_modules_demux_ogg.c.diff (MERGED) - A modification to the
vout_ShowTextAbsolutefunction insrc/video_output/video_text.c, so that it returns thesubpicture_tcreated. This is required for the upcoming CMML support: vout_STA_returns_subpicture_t.diff (MERGED)
VLC now supports playback of Annodex files and CMML tracks as of version 0.7.2. Woo!
- Annodex support for the Ogg demuxer (
-
Disable the Splash Screens (Introduction Movies)
Add the line:
Disable Intro Movie=1to the
[Display Options]section of thenwn.inifile in your Neverwinter Nights directory. (This tip’s fairly widely known: it’s described in the NWVault FAQ, and it’s also a topic in the BioWare NWN forums. I mostly have it here for my own reference.) -
Suggested Neverwinter Nights Additions
Hakpacks
Note that all hakpacks can be used in any modules—including the standard BioWare campaigns—by extracting the data in them and putting their data files into NWN’s
override\directory. In fact, that’s what I do with all the hakpacks listed below. -
Interfacing Haskell to Object-Oriented Languages
AndrÈ T. H. Pang and Manuel M. T. Chakravarty
In Greg Michaelson and Phil Trinder, editors, IFL 2003 - 15th International Workshop on the Implementation of Functional Languages, LNCS, Springer-Verlag, 2004.
Abstract
The interfacing of object-oriented languages with functional languages, in general, and with Haskell, in particular, has received a considerable amount of attention. Previous work, including Lambada, a Haskell to Java bridge, showed how an object-oriented class hierarchy can be modeled using Haskell type classes, such that Java libraries can be used conveniently from Haskell.
The present paper extends this previous work in two major directions. Firstly, we describe a new implementation of object-oriented style method calls and overloading in Haskell, using multi-parameter type classes and functional dependencies. This enables calling of a foreign object’s methods in a syntactically convenient, type-safe manner. Secondly, we sketch an approach to automating the generation of library bindings using compile-time meta-programming for object-oriented frameworks featuring reflection. We have evaluated the practicality of our approach by implementing a Haskell binding to the Objective-C language on the Mac OS X platform.
Download
16 pages: Postscript (.ps.gz), Adobe Acrobat PDF. The copyright for the papers is held by the authors or by the publisher. The papers are provided for personal use only; other use requires the explicit permission of the copyright holder.
Related Webpages
-
Use HakPaks in the Standard Campaigns
If you extract the files from a
.hakpack and place those extracted files in Neverwinter Night’soverridedirectory, you can use that hakpack in any of the standard BioWare campaigns (with the usual disclaimer that hakpacks may break stuff, you will actually need to put in new merchants to use any of the new items, etc.) This is very useful for non-intrusive hak-pack changes, like thejigglyhi-poly human torsos models.You can use tools like NWN Explorer or NWN Viewer to extract the files from a
.hakpack. -
NWScript Dissassembly
After Neverwinter Nights just came out, I started dissembling the NWScript bytecode that it uses internally for its game engine, with the intention of writing a command-line script compiler some day. I since stopped work on it since I had a few other things to do. It seems that the great Torlack (who now works at BioWare) beat me to it, but I thought I’d put up my results for download anyway. For budding dissasemblers (like myself :-), I’ve also put up all the scripts I used to try to figure out the bytecode, which may be more important than the bytecode itself for some people.
Note that BioWare provides their own command-line compiler now anyway, if you have a version more recent than 1.40 or something like that—see
utils\clcompile.exe.I find it interesting that BioWare chose their own scripting format for NWN considering that they used the very flexible and extensible Lua for Baldur’s Gate I/II (which is also used in a number of other games; in fact, one of the Monkey Island games had a bar named Lua as a dedication to the Lua community for their great efforts). While NWScript is OK as a language, I certainly wonder why they didn’t stick with Lua …
Anyhoo, feel free to download the results of my peeking and poking.
-
Auto-Save Every 5 Minutes!
Play in multiplayer all the time, even if you’re just playing single-player mode—and turn on the auto-save option and set it to save every 5 minutes or so. That’s saved my arse a few times now!
-
Amusement on #haskell
14:48 < Pseudonym> Riastradh: With a mind like that… ever considered a career as a C++ luminary?
14:48 * Riastradh throws a pointy template at Pseudonym.
14:49 * Pseudonym carefully places it in a smart pointer container
14:49 * SyntaxLaptop frees it
14:49 * Riastradh dereferences Pseudonym.
14:50 < SyntaxLaptop> sorry, delete
14:50 < Pseudonym> Why do I feel like I’ve suddenly accessed some of my uninitialised memory?
14:50 * Riastradh unsafePerformIOs Pseudonym.
14:51 < DeezNuts> just trying to run the prebuilt version of ghc 5.04.3 it bitches that it can’t find “libgmp.so.3:”
14:51 * Pseudonym FFIs Riastradh
14:51 < DeezNuts> err thats “libgmp.so.3”
14:51 < Pseudonym> Do you have GMP installed?
14:51 * Riastradh DEFINE-FOREIGNs Pseudonym.
14:52 * Pseudonym reinterpret_cast<>()s Riastradh
14:52 * Riastradh Obj.magics Pseudonym.
14:52 * Pseudonym GOTOs Riastradh
14:52 < Pseudonym> Riastradh considered harmful.
14:52 * Riastradh reflects Pseudonym.
14:53 * Pseudonym reifies Riastradh
14:53 * Riastradh shifts Pseudonym with no reset in place to delimit the shift.
14:53 < Pseudonym> Careful with all my bits.
14:53 * Riastradh converts Pseudonym to base three!
14:54 * Pseudonym pushbacks Riastradh
14:54 < DeezNuts> blah
14:54 < DeezNuts> could u explain?
14:54 < Pseudonym> Careful with my trits!s
14:54 * Riastradh throws Pseudonym.
14:54 * Pseudonym raises Riastradh
14:54 * Riastradh signals Pseudonym.
14:54 < DeezNuts> fine! linux-ppc won’t be getting a build
14:55 * Pseudonym kills Riastradh
14:55 < jameson> This is getting just a bit surreal… at least no one has used pointer arithmetics or ‘memfrob()’ yet…
14:55 < jameson> DeezNuts: Well, you have to install libgmp.
14:55!monotonom [trebla@130.63.90.200] has quit [“Do not join the channels joined by all who join all channels you join.”]
14:55 < jameson> It should be a dependency for the ghc package.
14:55 < Pseudonym> jameson: How dare you suggest such a thing.
14:55 * Riastradh throws himself and unsafely kills Pseudonym’s thread.
14:55 < Pseudonym> memfrob() is banned by the Geneva Convention
14:56 * Pseudonym cancels Riastradh’s thread and reaps his zombie children
14:56 * Riastradh throws across a process boundary and terminates Pseudonym’s process with a SIGSEGV.
14:56 * jameson makes sure that his lambda lifter and CPS converter are fully charged, just in case
14:57 * Pseudonym marshals Riastradh down a pipe and maps him to anonymous memory
14:57 * Riastradh incrementally lambda-lifts jameson before he gets to put his inferiour lambda-lifter into action.
14:57 * Riastradh comes out the other end of the pipe in yet another process and ANF-transforms Pseudonym.
14:57 < jameson> Keep playing guys, but keep in mind: No side effects on my memory!
14:57 * Pseudonym unsafeCasts jameson
14:58 * Riastradh throws into the kernel and twiddles jameson’s memory carefully.
14:58 * Pseudonym transfers Riastradh’s control over a superblock boundary
14:58 * Riastradh traps Pseudonym into one process, having full access to the kernel, and patches the scheduler so it doesn’t transfer control to that process ever.
14:59 < Etaoin> pwned
14:59 * Riastradh jumps down into the firmware, off into a firewire cable, emerges from a nearby hard drive, and unplugs the firewire cable, causing a kernel panic.
14:59 < Riastradh> HAH!
14:59 * Pseudonym loads a modular scheduler from flash and disables all interrupt threads
15:00 < Pseudonym> You forgot I was running Solaris, didn’t you?
15:00 * Riastradh picks up a sledgehammer and blowtorch and turns the computer upon which Pseudonym is barely staying alive into a pile of beaten slag.
15:01 * Pseudonym transfers himself to a different NUMA node to recover before disabling Riastradh’s processor set
15:01 * Pseudonym severs the backplane connection just in case
15:01 * Riastradh was reified, so he is no longer constrained to the internals of a computer.
15:02 * Pseudonym insert a nonassociative morphism into Riastradh’s category
15:02 < Riastradh> AAAAAGH!
15:02 < Riastradh> NOT THE NONASSOCIATIVE MORPHISM!
15:02 < Pseudonym> Now you’re inconsistent!
15:02 * Riastradh helplessly slumps to the floor…
15:02 < Pseudonym> Haha!
15:02 * Riastradh paws about for any weapon with which to retaliate…
15:02 < Pseudonym> You thought being abstract would save you.
15:02 * Riastradh picks up a monad and a comonad…hmmm…I wonder what happens when I cross the, er, duals.
15:03 < Pseudonym> No! DON’T CROSS THE DUALS!
15:03 * SyntaxLaptop tosses Riastradh an arrow
15:03 < Pseudonym> That comonad is unsafe!
15:03 < SyntaxLaptop> s/tosses/throws
15:04 * Riastradh straps the comonad onto one side of the arrow and the monad onto the other, and throws it at Pseudonym.
15:04 * Riastradh homomorphisizes Pseudonym!
15:04 * Riastradh uhohs as he realizes that that attack wasn’t sufficient.
15:04 * Pseudonym left-cancels the arrow
15:05 * Riastradh hides under a catamorphic syntamorphism.
15:05 * Pseudonym retracts the monad, but realises too late that it’s idempotent
15:05 * Riastradh plots coalgebraically while Pseudonym cannot find him.
15:06 * Pseudonym searches for Riastradh on an endomap
15:07 * Pseudonym flips off the safety on a terminal object
15:07 * Riastradh whets an eslupherum as he monofunctorializes his handy exomorph.
15:08 * SyntaxLaptop eats some syntactic sugar
15:08 * Riastradh watches with revulsion as SyntaxLaptop gets semicolon cancer.
15:11 * Riastradh qopas Pseudonym and stuffs him into a monadic canister, sealed tightly with a polyfunctorialism disguised as a monofunctorialized exomorph!
15:11 * Pseudonym claims this channel in the name of Free Constructions
15:12 * Riastradh forces coalgebra upon Pseudonym so that his constructor fails.
15:12 * Pseudonym gets out through a safe destructor
15:12 * Riastradh duals Pseudonym so both his constructor and destructor fail.
15:13 * Pseudonym hops on a natural transformation into a free functor
15:14 * Riastradh impales that free functor with an extrintolphoric arrow.
15:15 * Pseudonym stops the arrow with a terminal object
15:15 * Riastradh terminates Pseudonym’s terminal object and lets the arrow continue.
15:16 * Pseudonym turns it around with a contravariant functor
15:16 * Riastradh cocontravaries Pseudonym’s functor, negating the effect completely.
15:16 < sam-> oh god make it stop
15:16 * Pseudonym adjuncts it into the Herbrand universe
15:17 * Riastradh discojuncts Pseudonym hyperbolically.
15:17 < Pseudonym> Ooh, kinky.
15:18 < Riastradh> An irrelevant statement! I win!
15:18 * Pseudonym traps Riastradh under a cocone
15:18 * Riastradh treaps Pseudonym in a cacao bean.
15:18 < Pseudonym> Never! Irrelevancy is always part of the game.
15:19 * Riastradh catamorphs Pseudonym into a simple seed!
15:21 * Pseudonym notes the seed is isomorphic to a human, so what’s the big deal?
15:21 * Riastradh squishes it and ends the big deal, having triumphed.
15:22 * Pseudonym notes the gooey mess is isomorphic to a large cauldron of boiling oil
15:23 * Riastradh takes it off of the burner and then dips chips in it to enhance their flavour. -
Porting UNIX Programs to Mac OS X
This is a short list of problems that I frequently encountered when porting applications to Mac OS X. As any veteran Linux hacker will predict, most of them involve libtool :-)
libtool problems
- Can’t dlopen/dlsym a file properly? Make sure that you have
-moduleparameter in the plugin’splugin_LDFLAGSentry in itsMakefile.am. - libtool doesn’t write the proper information to its
.lafiles if you compile a library as--enable-static --disable-shared. You’ll have to edit the .la file and change thelibrary_namesparameter there to belibname.a.
C++ problems
- g++’s support for templates is pretty good now, but if you’re having problems, have a look at GCC’s documentation on templates. In particular, note the
-frepoflag: using that solved a few template problems for me.
- Can’t dlopen/dlsym a file properly? Make sure that you have
-
ABC CMWeb Installation Overview
S. Pfeiffer, C. Parker, A. Pang, “ABC CMWeb Installation Overview”, Technical Report, CSIRO Mathematical and Information Sciences No. 03/177, September 2003.
-
Playing iTunes's M4A files in XMMS on Debian GNU/Linux
This took way too much futzing around to get working (or perhaps I’m just too used to Mac OS X now), so here’s a no-frills guide to get it working:
- Add the lines
deb http://marillat.free.fr/ unstable main
and
deb http://pessoal.onda.com.br/rjamorim/debian/ ./
to your/etc/apt/sources.listfile. apt-get update; apt-get install libfaad2-devapt-get -t unstable install libstdc++5- If you’re on x86, download the i386 .deb of my patched version of Frederic Fondriest’s xmms-mp4plugin XMMS input plugin.
- If you’re exotic enough to not have an x86, download the debian source, and run
fakeroot debian/rules binary
to build the .deb for you. You need the g++-3.3 and automake1.7 packages installed to compile this thing. - Execute
sudo dpkg -i xmms-mp4plugin_0.2-1.andrep_*.debto install the package. - Run XMMS and enjoy.
Useful links:
- http://rarewares.hydrogenaudio.org/debian.html: RareWares Debian repository for faad2, faac, aac/mp4, lame, lame-ha, lamip, cue2toc, shntool
- http://www.xmms.org/comments.php?show=P211: Original sources for Frederic Fondriest’s MP4 XMMS input plugin
(Random keywords to be more search-engine friendly: Debian, Linux, XMMS, iTunes, MPEG-4, MP4, AAC, M4A.)
- Add the lines
-
Emacs for Mac OS X
Emacsen
There are a few ‘native’ versions of Emacs for Mac OS X: by ‘native’, I mean they have an Aqua interface, and don’t require an X11 server. Here are the full names of the ones that I know of, so you know what to google for if you’re ever that interested :).
- Emacs on Aqua. Works with Panther, but seems quite unstable.
- Carbon Emacs. Sources and binaries are available on that page, although I don’t know if the binaries available there work with Panther. However, recent binaries (built from the CVS repository) which do work with Panther can also be obtained from Mindlube’s Emacs page. This is the Emacs version I currently use with Panther.
- Enhanced Carbon Emacs. Same as the above, but has a couple more packages, in particular ones which support LaTeX/AucTeX/etc. Binaries only, and the author has now updated Enhanced Carbon Emacs to work with Panther. Recommended.
- Emacs 21 for Mac OS X — Source only. Ovidiu Predescu has put together a binary package of it. Ovidiu’s page also has some nice key bindings you can add to your
~/.emacsfile to get Cmd-X/C/V, Cmd-S, Cmd-L etc. working, if you’re a veteran classic MacOS user. - XEmacs 19.14 for Macintosh (and also XEmacs 21.5.9 for Macintosh, which is considered alpha right now). I haven’t tested to see whether this works with Panther.
I’m fairly sure that all of them are based on GNU Emacs (except the XEmacs port, obviously).
The version I used in Jaguar is Enhanced Carbon Emacs: it’s been very stable and comes with lots of useful packages. Mind you, I haven’t used it that much—I use vim for most of my Unix editing—but Emacs works when I need it. Now Enhanced Carbon Emacs is available for Panther, but I haven’t tried it yet since I don’t use Emacs too often.
When you install any of those Emacs packages, it’ll stick an Emacs application in the
/Applicationsdirectory like any other Mac app. If you’re using it from the terminal a lot, here’s a shell script I wrote which will open the GUI version of Emacs (and leave the console window “frozen” while the GUI is running, just like a normal X11 app):#!/bin/sh if [ -x '/Applications/Emacs.app/Contents/MacOS/Emacs' ]; then exec /Applications/Emacs.app/Contents/MacOS/Emacs "$@" else exec /usr/bin/emacs "$@" fi
Emacs in text fields?
If you haven’t found out by accident yet, you can actually press C-a and C-e inside a text field in Cocoa application to go to the beginning and end of the line. It turns out that key bindings for Cocoa applications are completely customisable, which is just way cool. The default key bindings are in a property list file at
/System/Library/Frameworks/AppKit.framework/Resources/StandardKeyBinding.dict, and you can override those key bindings with a file in~/Library/KeyBindings/DefaultKeyBinding.dict. You’ll never look at the humble TextEdit application in the same way again.If you’re an Emacs guy, I highly recommend getting TextExtras , which allows you to do things like pipe the contents of the text field through filters (run your word processing document through
sed -e s/foo/bar/, sweet), and also adds the can’t-live-without dynamic abbreviation and abbreviations features.See gnufoo’s Mac OS X page for a slightly more in-depth look at how to bind keys to Emacs commands. After that, you can grab my DefaultKeyBinding.dict file, which has things like
M-/bound to dynamic abbreviation already. -
Moch&Lambda;: A Haskell to Objective-C Binding
MochΛ is a Haskell to Objective-C language binding for Mac OS X. Using Mocha, Haskell code can send messages to Objective-C objects, and Objective-C class declarations can be written in Haskell. Haskell API definitions are provided for the entire Mac OS X Cocoa framework, and automated interface generation can be performed for any user-supplied frameworks.
Update: Mocha has been officially discontinued—but never fear, Wolfgang Thaller and I have been working on HOC, which fulfils much of the same goals that Mocha strived for, and furthermore, it’s actually released and working! See the HOC release announcement for more details.
-
Look out mutants!

You are Professor X!
You are a very effective teacher, and you are very
committed to those who learn from you. You put your all into everything you do, to some extent because you fear failure more than anything else. You are always seeking self-improvement, even in areas where there is nothing you can do to improve.Which X-Men character are you most like?
brought to you by Quizilla -
Geek Code
-----BEGIN GEEK CODE BLOCK----- Version: 3.12 GCS/SS d?>! s+: a-->---@ C++(++++) UB++++ UL++++ P+++ L++++ E(-) W++(--) N o-- K w(---) O+++ M++ V PS PE(+) Y+>++ PGP>++ t+ 5 X+ R++(*) tv-- b+>++++ DI++ D+++>$ G(-) e*>++++ h r++ y**>+++++ ------END GEEK CODE BLOCK------
If you’re not e-1337 e-nuff to know what this means, run it through the Geek Code Decoder by Bradley Kuhn. Enjoy!
-
Session 2 Summary
Babylon Campaign Summary for Session 2 (18/3/2003)
by André Pang
The last session ended with our five
valiant heroesmercenaries fighting to earn a place in the Thel’s Warriors, and they greatly impressed Thel and XXX by ripping their opponents to shreds whilst also smelling like minty freshness.Thel Achila congratulated Amber and the party after the fight, and told them more about the Thel’s Warriors. She informed them that wounds suffered by any of the stable’s fighters are tended to by their healer named Papparasmus, a man not particularly known for his social skills, but was nevertheless good at what he does. Thel also mentioned that she was now in retirement because of the “Ankheg incident” —- several of her fighters were gored to death in an unpleasant manner in an ankheg pit during one of the fights. In fact, apart from the Ankheg incident, many of her warriors were dying during the middle of a fight in the veins; they would mysteriously keel over with no signs of warning. In particular, her greatest gladiator, a shambling mound who went by the name “The Golden Shambler”, died in this fashion. Thel wants the party to find out who or what is responsible for killing all her gladiators, and is offering a 1000 gp bounty to solve this puzzle. Thel suspects that a rival stable, the Sandnets, may have something to do with the deaths. Led by Vulpone Sandnet, a hulking minotaur who savagely cuts down almost all opposition, the Sandnets have never been on the best of terms with Thel’s Warriors. However, our heroes’ first intuition was to follow up on the strange minty smell that Torr picked up in the battle to prove themselves to Thel. Thel mentioned that Flug, the arena janitor, uses some cleaning fluid which may have been a bit minty.
After their conversation with Thel, the crew of five descended beneath the gladiatorial arena: the Underveins. The Underveins, featured on a very cool Dragon® map, was home to Papparasmus the healer. Papparasmus was about as pleasant to deal with as everybody suggested: that is, not very. He did do his job though, and healed everybody back up to their optimal health. One thing that our heroes managed to get out of Papparasmus was a name: Tiberius, apparently a master healer and cleric who was responsible for raising the dead.
The heroes then went to visit Thel again; upon asking Thel about Tiberius, Thel became defensive and refused to talk to the heroes about “her father”. Instead, she laid down the rules of gladiatorial combat in the Veins:
- No magical “buffs” before a match; e.g. no Mage Armour, no Protection From Normal Missiles and Other Pointy Things. It’s perfectly okay to cast those spells once you’ve started combat, though.
- There’s a 50gp entrance fee for each fight, and the 1st such fee is paid for by Thel. This fee can also be waived if you’re particularly (in)famous.
- One can take “raise dead insurance”, which costs (50gp + 10 * your fame score). Once you’ve taken the insurance, if you fall in combat, you will be raised for the mere price paid for the insurance.
- If you have no “raise dead insurance”, it costs 200gp to raise you lest you be decapitated, arrowed, sworded, or otherwise burninated (to the countryside).
- Winning a gladiatorial battle nets (50gp + 2 * your fame score). XXX: This doesn’t seem like much, given that the entrance fee takes 50gp out of that. Andrew?
- Good performance in battle and/or good crowd entertainment nets a gladiator more fame.
- A gladiator may appeal to the crowd with either a Charisma check or a skill check (DM determines difficulty), at their choice.
- Inflicting massive damage, such as one would expect from a critical hit from a scythe, increases a gladiator’s fame.
- Performing a Fatality to kill your foe(s) increases your fame.
- Having “spice” in a battle (and presumably winning that battle) increases your fame. “Spice” can be a number of things, such as having an ankheg pit present, a random basilisk peacefully wandering around the arena, or random landmines.
- Doing “cool things” in combat increases your fame, where “cool things” is subject to interpretation by Mr. Dungeon Master.
- To perform a Fatality, a gladiator must kill an opponent with a critical hit, or must kill an opponent with a -6 penalty to their attack roll.
- Once you hit 0 hitpoints in the arena, you’re gone. Dead. Burninated.
Armed with this valuable information, our astute heroes then took a one week break, with 45gp spending money courtesy of Thel, to prepare themselves before their first battle. The group separated for the week, and each mercenary had their own story to tell.
Kane and Arjanne were visited by the PsiCore: darkly-dressed people with scary-looking hoods. Fascinatingly, neither of the two could tell whether the PsiCore members were actually male or female. In fact, the PsiCore look quite … inhuman. They were taken to some sort of temple where they met the PsiCore leader, another average-looking PsiCore members who told the two psions to “side with them when the time comes”. After agreeing because they didn’t see much choice (being surrounded by about 50 PsiCore members at the time), they were escorted out of the temple and were immediately met in by other mysterious men, dressed in white, claiming to be part of a group called the “Freeminders”. The Freeminders, like the PsiCore tempted the two champions to join their side when the time came, and also said that the PsiCore were “corrupters”. Of course, since they were wearing white, Arjanne and Kane dismissed them as being pansies.
Mind flayersThe PsiCore are obviously much more fun to be allies with.Amber couldn’t sleep for the week. Her sleep was being haunted with nightmares of ghosts, who kept telling her to “open the door”. When confused little Amber asked what-the-hell-door they were talking about, the “Earthbound” ghosts simply stated “There is only one door. Don’t you understand?” Obviously, Amber didn’t —- at least, not for now …
Our favourite drunken monk, Grasshopper, decided to talk to Rifius, the little boy with the large golden belt. Rifius ran an errand for Grasshopper and managed to get a jar of the cleaning fluid that Flug used to clean the arena; unfortunately, Grasshopper’s keen sense of vapours didn’t detect any minty freshness in the fluid. Grasshopper also met another girl in Thel’s Warriors named Stiletto, who at the moment seemed to be
what meta-gamers call a “standard NPC”, but will no doubt turn out to be significant later on in the campaigna nice young lass. Grasshopper gained a fame point from saying Hi to the ladies, and also learnt that the commons hold a “Blood Bowl League” —- this week’s game was between Super Nashwan (of Xenon II fame) and Brutal Deluxe (of Speedball II fame), and it was looking like a good one. Bets are welcome!Torr met a fellow named Mountain Musso who had some kind of “angry potion”, fought him in a wrestling match for it, and promptly lost. Stupid Torr.
After the one-week break taken by the heroes, they were approached by none other than Tiberius Achila. He looked like a very streetwise old man, and claimed that Thel was a criminal, and “stolen from Nathaniel” (whatever that means). Tiberius also warned the heroes that he’d be coming to take half of their arena winnings, and if the heroes refused, they’d be in for all sorts of trouble.
The leaderless heroes now needed a leader for their combat group, named “The Jackson Bitches” (with a 3-2 majority vote, thank you, drive through). In order to determine who would be their fearless leader, they diplomatically beat each other senseless until one was left standing. Of course, the Cleric won that fight (thanks in no small part to a small glowing celestial doggy); Amber now leads Torr, Grasshopper, Kane and Arjanne in their search for monsters to kill and stuff to take. Each of the heroes earned 200 XP in the gladiatorial challenge.
At this stage, the heroes relaxed for one more day before their first fight. In the day, they could visit the markets to buy some new equipment, or speak to Thel, Papparasmus or Flug about their investigation. At the end of the day, the heroes could then go to the Bloodbowl match to watch lots of humies beat the living crap out of each other. Hooray!
Most of the heroes decided to go to the markets, except for The Monk (XXX: is this correct?) Grasshopper talked to Thel and told her that the cleaning fluid wasn’t minty. Thel basically said “ahuh” in response to this. Upon asking Thel about her father Tiberius, Thel claimed that Tiberius and her were no longer blood relatives.
At the Bloodbowl stadium, our heroes learnt that the Orcland Raiders won last year, and in this match, the odds were 3 to 1 for Super Nashwan vs Brutal Deluxe. Brutal Deluxe ended up winning (XXX: is this right?); as a result, Kane lost 7gp, Arjanne lost 10gp, Amber won 12gp, Torr lost 10gp (stupid Torr), and Grasshopper lost 66.6666 silver pieces.
At this stage, life was suspended in the Babylon universe, and mundane daily life returned.