Interview with Josh Adams, Co-Founder of Secret Level

When talking about the best first-person shooters on the Dreamcast, one that’s guaranteed to come up is Unreal Tournament. While more well-known for the PC version, the Dreamcast port was very well received, scoring a 9.4/10 from both GameSpot and IGN, with IGN even giving it the Editor’s Choice award. The company responsible for porting the game to the Dreamcast was small studio named Secret Level which was founded in 1999 by Jeremy Gordon, Otavio Good, and Josh Adams. I’ve been fortunate enough to score an interview with co-founder and lead developer, Josh Adams, and pick his brain a bit about the game he worked on over a decade ago.

Q: First off, I’d like to thank you for taking the time to answer questions about a game you developed 15 years ago. I’m sure it’s not something you do very often. I’d like to start off with your history in the industry. Prior to Secret Level, what experience did you have in the game development industry?

“I was at a game company started by some friends of mine in Maryland. The company was originally called HyperImage and they worked on a game for the Atari Jaguar which never was released. When I graduated from college, I joined them, we moved to San Francisco, and renamed the company MagicArts.

My first project there was porting Iron and Blood from the Playstation to the Sega Saturn. It was a fantasy fighting game in the Ravenloft universe. That, as well, was never released. Next up, we did two 3D action games for the Playstation – Alien Earth and Yoyo’s Adventure. And guess what? Neither of those were released. At that point, the owners decided to call it quits.”

Q: Moving on to Secret Level, can you give me a bit of a background on how the company got its start?

“There were four programmers at MagicArts. Three of us (Jeremy Gordon, Otavio Good, and myself) started Secret Level, the other one traveled the world (although he later joined the company). We moved to a better office in downtown San Francisco, and slowly grew the company to over a hundred people. But first, we had to pay some bills, and my first project was an old Windows Wizard style application for a heating company that would generate billing documents from a FoxPro database.”

Q: How did you get the contract to port Unreal Tournament to the Dreamcast?

“Luckily, soon after that heating application was done, we were contacted by Infogrames (soon to be Atari) about porting UT to the Dreamcast. Some folks we knew from the Jaguar days was working with Infogrames, and recommended us to them. Given our company was so small, we didn’t charge much for the job. It was originally scheduled to take less than a year to complete. At some point, we were given some extra time, but I had to add some features to get that time – which is why we have 4 player split screen and decals (bullet holes and explosion burn marks).

It was mostly me doing the programming on it, but for about half of the project I was joined by David Pridie. He, very sadly, passed away during the development of the game. You can see him in the credits.”

Q: Were there any particular challenges you ran into when porting the game? Obviously the Dreamcast had its limitation in comparison to UT’s main platform, the PC.

“Oh there were some challenges! The biggest issue was certainly the memory. The Dreamcast has 16 megs of main memory (with another 8 for video memory and 2 for audio). The min spec PC for UT was 64 megs is I recall, so I had to make some changes! 

My solutions included:
– No female or Skaarj playable characters, as the animation data was a significant user of memory. You could fight some special boss characters in the last 2 levels of the story mode, however (because those levels were limited enough, and one on one, so we could afford the memory).

– Made sure all audio data for a given level fit into 2 megs, and loaded it right into the audio memory. There was no option to swap audio in and out.
– And the same for textures. We had around 5 megs of the 8 megs of video memory available for textures. It all had to fit, no matter what.
– Removed some weapons from some maps (especially the memory-intensive Redeemer)
– To deal with memory fragmentation over time, I reset the entire console between levels (I didn’t reboot it, I wiped the heap and started over from the start of the game).

The other big problem was the optical drive, which the PC version didn’t have to worry about. Unreal’s loading system in the first 2 versions of the engine were very seek heavy, which is terrible on an optical drive. So, my solution was to load each map and write out every byte that was read in. The development kit was unable to write files out, so I had to use a serial cable to write the data out and I captured it all in a PC terminal program, and turned the data into per-map data files. When loading after that, I could use these ordered byte data file to load from. It sounds pretty crazy, but since I reset the memory between each level, we always started from a known state.

Epic was working on the PS2 version of UT at the same time, and Tim Sweeney decided to use this same solution on the PS2. That was high praise for an indie game developer like me!”

Q: In general, how did you like working on the Dreamcast?

“It was better than some platforms, not as good as others :)”

Q: Other than the fact that the game is on the best console the world has ever seen, is there anything special that makes the Dreamcast version stand out from its PC counterpart?

“The biggest thing is that shear number of maps that we shipped on disk. I believe there were 70 maps (plus 3 tutorial maps). A lot of them came from the rocket arena community! We also supported a whole bunch of controllers and peripherals.”

Q: Being that this site is focused on the Dreamcast’s online games, I should probably ask about the online mode. Was it easy to implement on the Dreamcast?

“I don’t remember there being too much difficulty in the SegaNet implementation, actually. Given the way I had to preload everything into memory, it wasn’t hard having people join in the middle of a match.”

Q: I noticed some maps were restricted to maybe two or three players in spit-screen but supported a full 8 players online. Why was this? I’m guessing this was due to framerate issues?

“I don’t remember exactly, but I would agree it’s likely the framerate. In those days, we measured the number of draws in a frame in 2 or low 3 digits, split screen was definitely a concern for framerate.”

Q: What about the SegaNet exclusive maps? Were they designed at Secret Level or Epic and whose idea was it to add them?

“I believe those were the rocket arena community maps. Infogrames paid the creators to put them in the game, as I recall.

The “Outskirts” map which was exclusive to SegaNet subscribers.

Q: Alright, so I know we’ve already discussed this in a previous conversation but I’m sure many of my readers will want to know: “CAN YOU PLEEEASE BRING THE GAME BACK ONLINE?!”.

“Trust me, I’d love to! But we have looked and looked for the source code, and just can’t find it anywhere (at Epic). Secret Level is gone the way of the dodo, so I’m out of ideas on being able to find it.”

Q: Were there any other games that Secret Level had in development for the Dreamcast or had planned before Sega pulled the plug?

“Nope. When I finished up UTDC, I started working on PS2 and Gamecube support for Unreal Engine 2 (Epic was happy to let someone else take over PS2 work).”

Q: Lastly, how did you land your current job at Epic Games? Were you approached by Epic due to your work porting UT to the Dreamcast?

“I was working very closely with Epic at Secret Level, so it was only natural I join them when I wanted to move east. I like to say that UTDC was my resume for my job at Epic!”

I want to once again thank Josh for being awesome enough to answer a few questions and for being very helpful in the effort to get this game back online. Hopefully one day it will happen!


  1. “Trust me, I’d love to! But we have looked and looked for the source code, and just can’t find it anywhere……”


Leave a Reply

Your email address will not be published. Required fields are marked *