For our second project of the second year we got to make a Diablo clone and decided to just copy Diablo 3 as much as possible for easy reference material.
For this project I handled everything with the AI and some of the player mechanics. I also handled everything with the audio. Other than that I helped where I could on different systems like implementing support for flipbook particles. On my spare time I also did the scoring for the game.
Player Leap Ability
We wanted to have the Leap ability from the Barbarian in Diablo 3 so I had to figure out how to make the character jump to a valid point on the level and in a fixed arc that matched the height differences from the 2 points. First the jump would fail if the mouse position wasnt on a valid navmeshpoint but if so I created a spline between the start and land point and changed the arc of the spline based of the height differences of the 2 points, then I let the player travel along the spline with a fixed speed. It worked quite well, but I wasn't able to make the leap feel like a jump and not zooming through the air. I played around with acceleration and deceleration along the spline but decided to leave it since we had other features that needed more attention.
I was a bit pressed on time getting audio into the game so I implemented a system to make it easier to add the audio events for all the objects. I tried to abstract the audio events so every object had a list of events like "Spawn", "Idle", "GotHit" etc. So for Instance in the collision component I called the audio event "GotHit" and the only thing I had to add for every new object was to attach "GotHit" to a sound and it would play at the right time. And if no sound was attached to that event it would just ignore the event when it was called. It was quite handy also because we treated abilities as objects. So a fireball would have "Spawn" = "fireball throw" sound and "GotHit" = "Fire blast" sound. I dont think this system would work very well for a more complex game because you cant abstract everything to something like Spawn, Idle, hit etc but for this game it worked quite nice.