# Ioquake3: Where do I get started? (dev)

**URL:** <https://discourse.ioquake.org/t/ioquake3-where-do-i-get-started-dev/1369>\
**Category:** dev\
**Created:** [September 19, 2019, 3:23am UTC](https://discourse.ioquake.org/t/ioquake3-where-do-i-get-started-dev/1369 "2019-09-19T03:23:35Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Quen\_Jankosky](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.ioquake.org/quen_jankosky/32/466_2.png) [@Quen\_Jankosky](https://discourse.ioquake.org/u/Quen_Jankosky)\
**Post date:** [September 19, 2019, 3:23am UTC](https://discourse.ioquake.org/t/ioquake3-where-do-i-get-started-dev/1369/1 "2019-09-19T03:23:35Z")

</div>

So, I have been wanting to make a game using open source game engines and such, but I have also really needed extra features.

I have consistently always used quakespasm for all my experiments so far, which is obviously not a very powerful or flexible choice. The only reason I use it is because I have quake 1 and quakeworld modding experience, which has let me make games from scratch using those engines.

I really need some more options regarding world objects, mapping flexibility, rotating level objects, graphics, and all sorts of things.

Essentially, where can I get started making a game from scratch in ioquake3?

---

<div class="post-metadata">

**Author:** ![MrNuclearMonster](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.ioquake.org/mrnuclearmonster/32/820_2.png) [@MrNuclearMonster](https://discourse.ioquake.org/u/MrNuclearMonster)\
**Post date:** [September 19, 2019, 7:19pm UTC](https://discourse.ioquake.org/t/ioquake3-where-do-i-get-started-dev/1369/2 "2019-09-19T19:19:02Z")

</div>

I would start by looking at the source for Tremulous, and then replacing everything you don’t want with something you do.

> **[darklegion/tremulous](https://github.com/darklegion/tremulous?files=1)**
>
> Contribute to darklegion/tremulous development by creating an account on GitHub.

---

<div class="post-metadata">

**Author:** ![zturtleman](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.ioquake.org/zturtleman/32/718_2.png) [@zturtleman](https://discourse.ioquake.org/u/zturtleman)\
**Post date:** [November 18, 2019, 2:11am UTC](https://discourse.ioquake.org/t/ioquake3-where-do-i-get-started-dev/1369/3 "2019-11-18T02:11:14Z")

</div>

Suggestions based on my experience with creating a standalone game.

## Code

First figure out how to compile ioquake3. In the `code` directory game, cgame, and q3\_ui contain the (C 1989 standard) game logic which are compiled to cross-platform QVM (Quake Virtual Machine) bytecode and DLLs for debugging. This is likely what you would be interested in changing for creating a new game. There are some tutorials (Code 3 Arena) that give you an idea of how the game logic works. Looking at what other standalone games have done can be helpful too.

I would suggest forking the ioq3 repo and editing the Makefile to change BASEGAME=baseq3 to BASEGAME=yourmod and set BUILD\_STANDALONE=1 (and additional settings like the client/server executable name). Compile ioquake3 (`make`) and run with your data files using (bat script containing) `build\release-mingw32-x86_64\ioquake3.x86_64.exe +set sv_pure 0 +set fs_steampath "C:\Users\Sarge\dev"` (sv\_pure 0 allows unzipped files and where C:\Users\Sarge\dev\ contains `yourmod` directory with the data files). (fs\_steampath -originally fs\_cdpath- is used so that fs\_basepath is still the engine directory and QVMs/DLLs will be loaded.) With this setup you can repeatedly run make and a bat script to run the game.

If you crash the game or want to check for issues hidden by QVMs (e.g., not crashing when NULL pointer is dereferenced), make a debug build (`make debug`) and run ioquake3 using a debugger such as gdb and use DLLs `+set sv_pure 0 +set vm_game 0 +set vm_cgame 0 +set vm_ui 0`. +set vm\_game 2 etc will change back to using QVMs.

## Data

For bootstraping your own data I would suggest downloading the Quake 3 demo data so you can tell the layout and what files you need to create for a standalone game (important ones being default.cfg (errors without it), `gfx/2d/bigchars.tga` which is the console / in-game font, and `models/players/sarge/*` the default player model). You can unzipped demoq3 pak0.pk3 into `youmod\aa-q3demo.pk3dir\` to keep the files separate from other own and still easy to access and remove unneeded or replaced files. You could also get (GPLv2 licensed) fonts and `botfiles` (for bot AI) from OpenArena if you want to have a complete data set to release sooner rather than later.

You can reload models, textures, and shaders by running `vid_restart` command in the console. This also allows reloading the cgame and q3\_ui code. game code is reloaded by map command.

## Release

For making a release you would zip the data files and `build\release-mingw32-x86_64\yourmod\vm\*.qvm` (with `vm\*.qvm` in the zip) and change the `.zip` extension to `.pk3`. (Quake 3 uses uncompressed ‘store’ zip file so it’s just a file index but standard ‘deflate’ compression is also supported.)

## Tools / resources

Map editor: [https://gitlab.com/xonotic/netradiant](https://gitlab.com/xonotic/netradiant)  
Shader manual: [http://q3map2.everyonelookbusy.net/shader\_manual/](http://q3map2.everyonelookbusy.net/shader_manual/)  
Obj to md3 / md3 viewer: [https://clover.moe/mm3d/](https://clover.moe/mm3d/)
