One Minute Game Review by The Happy Friar:
Also on Rumble:

idTech 4 (aka Doom 3 tech) Discord Server!

Main Menu

American McGee's Alice modding

Started by VulpesVulpes, April 30, 2021, 11:11:43 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.


Hey everyone! I want to make a mod for Alice and I'm hoping someone here can point me in the right direction. For those unfamiliar, it uses the idTech3 engine. Although I'm not sure how modified it is, but it shouldn't be too different.

I want to do a few things, but the biggest thing I want to do is introduce a weapon upgrade system. You can find duplicate weapons throughout the levels, but all they do is refill your (universal) ammo if you already have them. There's one weapon in particular that you're forced to pick up, yet there's several of them in the game. It bothers me enough that I have to give meaning to it! Lol  Also it would be nice to have some kind of collectable in the game, as there's no point system or anything of the sort.

To start, there is already an upgrade system for one particular weapon, so I'm hoping that will simplify things. It's not what I want, but at the very least the game does keep track of how many you've gotten of something. It's called demon dice, and when you throw them there's a chance of summoning a demon, with each additional die giving you a chance of summoning a better demon, up to three dice (although there are four in the game). What I want to do is have a multiplier applied to weapon damage based on how many you've collected of that particular weapon, and an additional universal multiplier based on how many weapons of any kind of been picked up in total, to keep the weapons balanced throughout the game.

From what I can tell, the scripts that contain the values for for each weapon's attack power are tied to whatever model is colliding with the enemy (for example projectile weapons have a unique projectile model), and can be found in the pk compressed folders as .tik files. However, I believe the methods for saving and actually dealing damage are in the executable. Which leads me to my question...How can I see these methods, and how can I make a patch that alters them? Can I make an executable that launches the game and can override the appropriate methods (applying appropriate multipliers when dealing damage, adding to the number of pickups when a weapon is picked up, saving those numbers with the rest of the game data, etc)? I'm a beginner at reverse engineering so I have no idea if this is even feasible.. Anyway any help, advice, or guidance would be greatly appreciated!  :))


I haven't seen support for it with any Radiants, that I recall, although QuArK claims to support modding for it:-

It's not as straight-forward as just adapting Quake 3 Arena support, mainly you're going to need the .def files to get all of the entities to show up correctly so that you can actually use them, and something tells me Alice would have some tricky ones in there.  You might be better off adapting your own 'gamepack' based on RtCW, since that's another SP game released around the same time.


Alice is very similar to Fakk2 technically, so you'll have to use the FAKKTools.
relevant links for Alice modding: esp.

changing behavior is not gonna be easy as no modding SDK had been released for Alice (fucking EA...), so you'd indeed have to use reverse-engineering.
probably the fakk2 game SDK source code (which I think is part of fakktools) helps a bit, as alice uses the same base


Thank you for the responses! I'll look into the Fakk2 source code and see what it looks like. Do you know what the best route would be for reverse engineering Alice? I know there are programs like Ghidra and IDA that decompile games. Could I do that and use the Fakk2 source code as a guide?


I don't have experience with reverse engineering either, but that sounds like the right way to do it.
Apart from decompiling and  trying to understand from the disassembly (or however IDA represents it), it could also help to (additionally) run the game in a debugger to see what happens at runtime (maybe IDA/Ghidra support that as well, no idea)