I got close, I think, given what I've found online. I did actually start it up once, and it looked to be running fine, but I was never able to start it up again.
So, here's the plan. In a new winxp bottle install .NET 3.5 SP 1, and XNA 3.1. Install Steam (which should install DirectX) and Magicka. Before running Magicka, run regedit on your bottle and set the following under HKEY_LOCAL_MACHINE/Software/Valve/Steam/Apps/42910
Name Type Data
DirectX REG_DWORD 0x00000001
DotNet REG_DWORD 0x00000001
XNA REG_DWORD 0x00000001
This just avoids Magicka from trying to reinstall these every time you run.
Various folks recommend various things, adding -windowed to the command line, toying with various wine cfg settings or registry values. But I think all of these things are simply trying to change the start up time/order. There is a bug in initializing the audio. If you get lucky you'll avoid seeing this error pop up in Program Files/Steam/SteamApps/common/Magicka/errorReportyyyy.mm.dd-hh.mm.ss(n).txt:
Version: 1.4.16.0 Thread: Init Audio
System.IO.IOException: No access to memory location.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.ReadCore(Byte[] buffer, Int32 offset, Int32 count)
at System.IO.FileStream.Read(Byte[] array, Int32 offset, Int32 count)
at Microsoft.Xna.Framework.Audio.UnsafeNativeMethods.AllocateArrayAndReadFile(String filename, Void* ppData, UInt32 pdwBufferSize)
at Microsoft.Xna.Framework.Audio.UnsafeNativeMethods.WaveBank.CreateHandle(UInt32 hEngine, String string, Int32 length, IntPtr& pCleanup)
at Microsoft.Xna.Framework.Audio.WaveBank..ctor(AudioEngine audioEngine, String nonStreamingWaveBankFilename)
at Magicka.Audio.AudioManager.Init()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
0x026d CommonLanguageRuntimeLibrary->System.IO.__Error.WinIOError
0x006e CommonLanguageRuntimeLibrary->System.IO.FileStream.ReadCore
0x00b8 CommonLanguageRuntimeLibrary->System.IO.FileStream.Read
0x0032 Microsoft.Xna.Framework.dll->Microsoft.Xna.Framework.Audio.UnsafeNativeMethods.AllocateArrayAndReadFile
0x0047 Microsoft.Xna.Framework.dll->Microsoft.Xna.Framework.Audio.UnsafeNativeMethods+WaveBank.CreateHandle
0x0045 Microsoft.Xna.Framework.dll->Microsoft.Xna.Framework.Audio.WaveBank..ctor
0x0115 Magicka.exe->Magicka.Audio.AudioManager.Init
0x0024 CommonLanguageRuntimeLibrary->System.Threading.ThreadHelper.ThreadStart_Context
0x005f CommonLanguageRuntimeLibrary->System.Threading.ExecutionContext.Run
0x0019 CommonLanguageRuntimeLibrary->System.Threading.ThreadHelper.ThreadStart
I got lucky once in the dozen or so times I tried to start up. Maybe someone else will have better luck.