Cool; I'll trim down the code and make sure it's reproducible.
You might be able to allocate a CTakeDamageInfo on the SourcePawn stack as an int[], or you could try passing in a pointer from Source Scramble's MemoryBlock handle. Haven't taken an in-depth look at either approach. I'd say both are absolutely filthy hacks.
You can get info with DHook OnTakeDamage with an objectptr passed in byref, then get the information with DHookGetParamObjectPtrVar. SM-TFOnTakeDamage implements that.
Oh lord, I'm working with that stuff for the first time. I'm a bit lost.