I don't have DBC, so I'll just post the basic guidelines about making a game engine. :P
There are several parts to a game engine:
1) Initialization
2) Loading the required media
3) Setting global variables and declarations
4) The game loop
5) The functions, which play as external parts of the game loop
Initialization
Set up the refresh rate, screen resolution, etc.
Loading the required media
Load the character model, world, enemies, sounds, music, etc.
Setting global variables and declarations
Define variables like floats, bools, etc. to hold information about where things are and what they are doing. Also define custom datatypes*.
The game loop
This is where the game actually becomes a game. The system goes through this loop and repeats everything within it, until the user exits the game or goes into a different loop (like a menu loop). The game loop will take input from the user, perform the required operations, and control enemy movements, item stuff, move the player, etc. etc.. At the end of the loop the screen is refreshed to apply the changes made to the game world by what happened in the game loop.
Functions
These are little pockets of code which can be referenced by the game loop. Functions can be used to calculate collision, control enemies, control projectiles, and basically everything, in seemingly one line of code: the function call. When a function is called upon, the program jumps to the start of the function and executes the code within. When a function has reached its end, the program jumps back to where the function was called and continues on. The functions belong at the bottom of the program and after the game loop.
*
Custom datatypes can be defined by the programmer to create your own type of variable. You could create a variable that contains the whereabouts and current actions of the player, for instance. Custom datatypes (often referred to as "UDT"s for "User Defined Types") come in extraordinarily handy when controlling many objects of the same type; enemies or projectiles, for instance. A user defines a type like so:
type Enemy
posX# as float
posY# as float
posZ# as float
angY# as float
objID as integer
mode$ as string
endtype
A variable may now be created to be of type Enemy:
You may now store information about the enemy in the Guy variable:
Guy.posX# = object position x(3)
Guy.posY# = object position y(3)
Guy.posZ# = object position z(3)
Guy.angY# = object angle y(3)
Guy.objID = 3
Guy.mode = "walking"
This type of variable becomes exceedingly useful when handling multiple enemy objects, stored in an array of type Enemy:
global dim AllEnemies(10) as Enemy
You may now access up to 10 different enemy's information by referring to only one array:
position object 7, AllEnemies(7).posX#, AllEnemies(7).posY#, AllEnemies(7).posZ#