it partly made sense.
When I write programs I tend spend a good bit of time thinking about how everything will fit together -- what data structures I need to create to represent everything. And whether those data structures are going to be compatible and fit nicely together. I don't worry too much about specific details.
eg, I might have one data structure for all active projectiles. I might have another as a set of predefined templates for creating projectiles from. The same with characters.
I might have one data structure for all the different weapons, which in one field I might refer to the projectile template to use with that weapon.
Build the data structures up abstractly. Until you have enough to manage all the game data you're going to use.
Then I start with functions. I would write functions that create and destroy projectiles and characters, adding/removing stuff from the active lists.
While doing this, direct3d can be setup. It's independent from the above initially. You get it drawing your 3d world. Make it able to have mobile lights. Create functions for moving the camera.
Start linking the two together.
Open the game loop {
Move the camera to the coordinates of the first person character.
Check the floor below that coordinate to see if your falling or not. Update the height of the character.
If the fire button is pressed, and the active weapon (property of the unit) is cooled down (property of the weapon), then create a projectile at the position of the unit moving wherever. Create a light at the point of the projectile.
Move the projectiles. Move the lights with the projectiles.
Detect collisions. Destroy projectiles and update stats accordingly. Destroy characters accordingly.
}