Multiple Viewports Code you cannot change: view.cpp V_Init(): DO NOT delete: CreateNewViewport(MainViewport, 0, 0, 0, 0, false, true, VP_MainViewport); or: pCurrent = pHead; Add any new viewports you want to always show up on the screen between CreateNewViewport and pCurrent = pHead. Adding a new viewport: Open z_viewport.h Add: #define YourViewportsName [next_id] next_id is the next number available for an index. void VP_YourViewport (struct ref_params_s *pparams, vp_s *vp); Open z_viewport.cpp Add: void VP_YourViewport (struct ref_params_s *pparams, vp_s *vp) { // this block is the only required data pparams->viewport[0] = XRES(vp->x); pparams->viewport[1] = YRES(vp->y); pparams->viewport[2] = XRES(vp->wide); pparams->viewport[3] = YRES(vp->tall); pparams->onlyClientDraw = vp->clientOnly; // add viewport specific code after this } You can now create a viewport, anywhere you need it by using (make sure you have z_viewport.h included) CreateNewViewport( YourViewportsName, x, y, wide, tall, clientOnly, visible, VP_YourViewport ); Do not use XRES or YRES here. It is done in your viewports function. If you decide to change that, you cannot use XRES or YRES in V_Init. The screen res is not available then. Getting a pointer to your viewport: Again, make sure z_viewport.h is included. vp_s *pYourViewport = GetVP( YourViewportsName ); if (pYourViewport) { // do stuff to your viewport } It is best, if youre going to have a viewport off most of the time to delete it. You can do this by getting a pointer to your viewport and calling RemoveVP on it. Once you need it again, call CreateNewViewport with the same index as the viewport you deleted.