DOOM Port for the Openmoko Freerunner
- Networking, Gameplay, Accelerometer and Finger-Tipping Videos
Contents
Release Roadmap
Milestone 1 Alpha Release (Release Date: Halloween Weekend)
- Implement Touch Screen interface
- Design/Implement Accelerometer handling / (auto tare)
- Expose New IO to CFG
- Create IPKG
Milestone 2 Beta Release (Release Date: To be determined)
* DOOM DBus Interfacing to assure perfect cohabitation with phone device
- This includes seemless switching between doom and other applications
- Such as a phone call
- Or user activated switch to focus on other background apps.
- Design X Interface, touch friendly gui.
- Game Configuration, Front End
- Networking/Multi-player Front-End
- Run Community Multi-player Server
- Implement, Matchmaking Interface
- Time-Date Stamped Saved Games (Since typcial use with no keyboard)
- Expose Cheat Codes to CFG
- Implement Configurable Touchscreen Buttons (Size, Position)
- Vibration Feedback
Milestone 3 Version 1.0 (To be determined)
- Optimize for CPU Usage (Its currently a hog)
- Interface/Scale GPS position to physical map coordinates (may find a need for a digital compass.. although we have the accelerometers to help interpret events)
- this could potentially be demanding cpu wise?
How to Install
opkg install libsdl-1.2-0 libsdl-mixer-1.2-0 libsdl-net-1.2-0 opendoom_0.1.1_armv4t.ipk
- Bug #1244 Has apparently been fixed. Just in case, Here is patched version of
- I'll remove this as soon as I've varified that the patch has made it into the stable feeds with scaling correct as well.
- copy XGlamo to /usr/bin on your freerunner
- Remember to check out your ~/.opendoom/opendoom.cfg There is a massive amount of control exposed to you. (Thanks PRBOOM)
Source Code
Subversion Repo
svn checkout http://opendoom.googlecode.com/svn/trunk/ opendoom-read-only
scottrcarlson@gmail.com for write access to the repo!
How to Compile.
Current State
- Works Great.
- Moves fast 320x240 and choppy 640x480 (Need to implement video acceleration, when its availible on the freerunner)
- Sound Effects and Midi Music
- Full Touch Screen Interface
- Full Accelerometer Interface
- Network has been tested, and its unstable. (Waiting for more feedback)
- DOOM itself uses about 40-60% CPU with Xglamo taking another 33% (ouch)
User Interface
Choosing what interface to use
- The user can change whether to use Accelerometer control or Full Touchscreen (only) control.
- See opendoom.cfg and change accelerometer0_touchscreen1_toggle to an appropriate value (0 or 1)
- Ideally All Freerunner users will want to use Accelerometer control.
- All Neo 1973 owners can only user touchscreen interface
User Interface Touchscreen Usage
- Navigating Menus
- Enter/Exit the menu with the top right corner of the screen.
- Up/Down/Left/Right are where you would expect them on their corresponding border.
- Enter is tied to the center of the screen.
- Finger Tipping
- The basic idea behind finger tipping involves placing your finger tip anywhere on the touchscreen. The x,y coordinates are logged as the origin until you remove your finger from the touchscreen. Now, slightly tip your finger and your new x,y coordinates will be calculated with the origin to come up with a vector. The circular region around your finger tip will be called the tipping boundary. With our vector value we can now handle our event in several different ways. There will be definable tipping boundary radius and deadzone (also a radius). We can now define our angle boundaries and sub divide our tipping region into different events. To add sensitivity we only need to look at the magnitude of the calculated vector and apply at will.
- Drawing Vectors
- Using similar concepts as described above, one can also touch the screen to create an "origin" and then slide the finger away from that point to control motion.
- Strafing
- The strafe can be accomplished by sliding the finger from left to right (I've also found the thumb to work well)
User Interface Accelerometer Usage
- Auto Tare
- Happens whenever you leave the main menu and return back to the game.
- This feature takes the current position of the device and calls it "home". Think of it as a neutral position.
- It is helpful to goto the main menu and back as often as necessary, this allows you to "readjust yourself" for comfortable play.
- Motion Control
- Tipping the Phone Forward and Backward to move.
- Tipping from side to side. (and also a steering wheel motion) will turn you appropriately.
- Holding the AUX button will allow you to strafe by tipping/steering.
- Scaling Factors
- Acceleration factors are tunable through opendoom.cfg.
- In opendoom.cfg you will find under the accelerometer settings, xscale, yscale and zscale. The axis labels can be confusing. Currently the Z-Axis of accelerometer is tied to Y-Axis motion in the game (i.e forward/backward)
- Acceleration factors are tunable through opendoom.cfg.
and the Y-Axis on the accelerometer is tied to the X-Axis of the game (i.e. left and right).
- Deadzone can also be tuned in the opendoom.cfg file. Think of the deadzone as the size of the "Home" or "Neutral" position.
- These are called accelerometer_xwindow, ywindow, zwindow.
Networking
- Works well.
- check out prboom-game-server included. (Want to make a nice front end, if any one is interested in chipping in on this, I'd appreciate it!
- I'd like to setup a community server, and possibly test fr to fr long distance..
Future Work
- Picture a bunch of people in a park, running around with Freerunner like devices in their hand.
- Now imagine that a combination of GPS/AGPS and Accelerometers to track coordinates in the game level maps.
- WIFI Multiplayer Holodeck style Deathmatch!!!!!!!!!!!!!!!!!!!!
- Now imagine that a combination of GPS/AGPS and Accelerometers to track coordinates in the game level maps.
Original Source Code
Resources
http://www.koders.com/noncode/fid820731B6598E38A96A89C3892020017549B47F85.aspx
http://www.sirgalahad.org/paul/doom/ This guy took all of the MIDI music and converted to MP3.
http://pwet.fr/man/linux/formats/prboom_cfg This is the fully documented CFG format for PRBOOM which was the original linux doom port.
http://www.koders.com/noncode/fid820731B6598E38A96A89C3892020017549B47F85.aspx This is an example CFG file for PRBOOM
http://www.opentom.org/LibSDL This guy tied together libsdl and tslib for his tomtom
