diff --git a/__MACOSX/wolf3d/._README.txt b/__MACOSX/wolf3d/._README.txt new file mode 100644 index 0000000..c8ef17d Binary files /dev/null and b/__MACOSX/wolf3d/._README.txt differ diff --git a/__MACOSX/wolf3d/._readme_iWolf_v1x.txt b/__MACOSX/wolf3d/._readme_iWolf_v1x.txt new file mode 100644 index 0000000..5a667fa Binary files /dev/null and b/__MACOSX/wolf3d/._readme_iWolf_v1x.txt differ diff --git a/__MACOSX/wolf3d/code/._wolfiphone.h b/__MACOSX/wolf3d/code/._wolfiphone.h new file mode 100644 index 0000000..ddd0b08 Binary files /dev/null and b/__MACOSX/wolf3d/code/._wolfiphone.h differ diff --git a/__MACOSX/wolf3d/code/env/._fileio.c b/__MACOSX/wolf3d/code/env/._fileio.c new file mode 100644 index 0000000..a382427 Binary files /dev/null and b/__MACOSX/wolf3d/code/env/._fileio.c differ diff --git a/__MACOSX/wolf3d/code/env/._files.c b/__MACOSX/wolf3d/code/env/._files.c new file mode 100644 index 0000000..19d0b71 Binary files /dev/null and b/__MACOSX/wolf3d/code/env/._files.c differ diff --git a/__MACOSX/wolf3d/code/env/._filesystem.h b/__MACOSX/wolf3d/code/env/._filesystem.h new file mode 100644 index 0000000..198fffe Binary files /dev/null and b/__MACOSX/wolf3d/code/env/._filesystem.h differ diff --git a/__MACOSX/wolf3d/code/env/._openal_main.c b/__MACOSX/wolf3d/code/env/._openal_main.c new file mode 100644 index 0000000..414337f Binary files /dev/null and b/__MACOSX/wolf3d/code/env/._openal_main.c differ diff --git a/__MACOSX/wolf3d/code/env/._opengl_draw.c b/__MACOSX/wolf3d/code/env/._opengl_draw.c new file mode 100644 index 0000000..5c7cc80 Binary files /dev/null and b/__MACOSX/wolf3d/code/env/._opengl_draw.c differ diff --git a/__MACOSX/wolf3d/code/env/._opengl_local.h b/__MACOSX/wolf3d/code/env/._opengl_local.h new file mode 100644 index 0000000..42e7078 Binary files /dev/null and b/__MACOSX/wolf3d/code/env/._opengl_local.h differ diff --git a/__MACOSX/wolf3d/code/env/._opengl_main.c b/__MACOSX/wolf3d/code/env/._opengl_main.c new file mode 100644 index 0000000..fd7dc6d Binary files /dev/null and b/__MACOSX/wolf3d/code/env/._opengl_main.c differ diff --git a/__MACOSX/wolf3d/code/env/._sound.c b/__MACOSX/wolf3d/code/env/._sound.c new file mode 100644 index 0000000..94bc34f Binary files /dev/null and b/__MACOSX/wolf3d/code/env/._sound.c differ diff --git a/__MACOSX/wolf3d/code/env/._sound_local.h b/__MACOSX/wolf3d/code/env/._sound_local.h new file mode 100644 index 0000000..074c145 Binary files /dev/null and b/__MACOSX/wolf3d/code/env/._sound_local.h differ diff --git a/__MACOSX/wolf3d/code/env/._sound_sfx_id.c b/__MACOSX/wolf3d/code/env/._sound_sfx_id.c new file mode 100644 index 0000000..e362eb2 Binary files /dev/null and b/__MACOSX/wolf3d/code/env/._sound_sfx_id.c differ diff --git a/__MACOSX/wolf3d/code/env/._sound_stream.c b/__MACOSX/wolf3d/code/env/._sound_stream.c new file mode 100644 index 0000000..7b07437 Binary files /dev/null and b/__MACOSX/wolf3d/code/env/._sound_stream.c differ diff --git a/__MACOSX/wolf3d/code/env/._texture_manager.c b/__MACOSX/wolf3d/code/env/._texture_manager.c new file mode 100644 index 0000000..b3a1345 Binary files /dev/null and b/__MACOSX/wolf3d/code/env/._texture_manager.c differ diff --git a/__MACOSX/wolf3d/code/env/._texture_manager.h b/__MACOSX/wolf3d/code/env/._texture_manager.h new file mode 100644 index 0000000..27b01ad Binary files /dev/null and b/__MACOSX/wolf3d/code/env/._texture_manager.h differ diff --git a/__MACOSX/wolf3d/code/env/._unix_file.c b/__MACOSX/wolf3d/code/env/._unix_file.c new file mode 100644 index 0000000..2e07b96 Binary files /dev/null and b/__MACOSX/wolf3d/code/env/._unix_file.c differ diff --git a/__MACOSX/wolf3d/code/env/._video.h b/__MACOSX/wolf3d/code/env/._video.h new file mode 100644 index 0000000..77618cd Binary files /dev/null and b/__MACOSX/wolf3d/code/env/._video.h differ diff --git a/__MACOSX/wolf3d/code/iphone/._.DS_Store b/__MACOSX/wolf3d/code/iphone/._.DS_Store new file mode 100644 index 0000000..460d887 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._.DS_Store differ diff --git a/__MACOSX/wolf3d/code/iphone/._CreditsViewController.h b/__MACOSX/wolf3d/code/iphone/._CreditsViewController.h new file mode 100644 index 0000000..aa11515 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._CreditsViewController.h differ diff --git a/__MACOSX/wolf3d/code/iphone/._CreditsViewController.m b/__MACOSX/wolf3d/code/iphone/._CreditsViewController.m new file mode 100644 index 0000000..fcb90ed Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._CreditsViewController.m differ diff --git a/__MACOSX/wolf3d/code/iphone/._EAGLView.h b/__MACOSX/wolf3d/code/iphone/._EAGLView.h new file mode 100644 index 0000000..0ce1695 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._EAGLView.h differ diff --git a/__MACOSX/wolf3d/code/iphone/._EAGLView.m b/__MACOSX/wolf3d/code/iphone/._EAGLView.m new file mode 100644 index 0000000..daea694 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._EAGLView.m differ diff --git a/__MACOSX/wolf3d/code/iphone/._EpisodeViewController.h b/__MACOSX/wolf3d/code/iphone/._EpisodeViewController.h new file mode 100644 index 0000000..280f1d0 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._EpisodeViewController.h differ diff --git a/__MACOSX/wolf3d/code/iphone/._EpisodeViewController.m b/__MACOSX/wolf3d/code/iphone/._EpisodeViewController.m new file mode 100644 index 0000000..2a43dad Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._EpisodeViewController.m differ diff --git a/__MACOSX/wolf3d/code/iphone/._Info.plist b/__MACOSX/wolf3d/code/iphone/._Info.plist new file mode 100644 index 0000000..2c437f7 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._Info.plist differ diff --git a/__MACOSX/wolf3d/code/iphone/._LegalViewController.h b/__MACOSX/wolf3d/code/iphone/._LegalViewController.h new file mode 100644 index 0000000..56caabf Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._LegalViewController.h differ diff --git a/__MACOSX/wolf3d/code/iphone/._LegalViewController.m b/__MACOSX/wolf3d/code/iphone/._LegalViewController.m new file mode 100644 index 0000000..0f6dc16 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._LegalViewController.m differ diff --git a/__MACOSX/wolf3d/code/iphone/._LevelSelectViewController.h b/__MACOSX/wolf3d/code/iphone/._LevelSelectViewController.h new file mode 100644 index 0000000..47ae26b Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._LevelSelectViewController.h differ diff --git a/__MACOSX/wolf3d/code/iphone/._LevelSelectViewController.m b/__MACOSX/wolf3d/code/iphone/._LevelSelectViewController.m new file mode 100644 index 0000000..4b1fa12 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._LevelSelectViewController.m differ diff --git a/__MACOSX/wolf3d/code/iphone/._MainMenuViewController.h b/__MACOSX/wolf3d/code/iphone/._MainMenuViewController.h new file mode 100644 index 0000000..f9592cc Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._MainMenuViewController.h differ diff --git a/__MACOSX/wolf3d/code/iphone/._MainMenuViewController.m b/__MACOSX/wolf3d/code/iphone/._MainMenuViewController.m new file mode 100644 index 0000000..2ad1180 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._MainMenuViewController.m differ diff --git a/__MACOSX/wolf3d/code/iphone/._MissionTableViewCell.h b/__MACOSX/wolf3d/code/iphone/._MissionTableViewCell.h new file mode 100644 index 0000000..b35249d Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._MissionTableViewCell.h differ diff --git a/__MACOSX/wolf3d/code/iphone/._MissionTableViewCell.m b/__MACOSX/wolf3d/code/iphone/._MissionTableViewCell.m new file mode 100644 index 0000000..1999946 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._MissionTableViewCell.m differ diff --git a/__MACOSX/wolf3d/code/iphone/._SettingsViewController.h b/__MACOSX/wolf3d/code/iphone/._SettingsViewController.h new file mode 100644 index 0000000..251f4fc Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._SettingsViewController.h differ diff --git a/__MACOSX/wolf3d/code/iphone/._SettingsViewController.m b/__MACOSX/wolf3d/code/iphone/._SettingsViewController.m new file mode 100644 index 0000000..284c8ff Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._SettingsViewController.m differ diff --git a/__MACOSX/wolf3d/code/iphone/._SkillViewController.h b/__MACOSX/wolf3d/code/iphone/._SkillViewController.h new file mode 100644 index 0000000..a4c9529 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._SkillViewController.h differ diff --git a/__MACOSX/wolf3d/code/iphone/._SkillViewController.m b/__MACOSX/wolf3d/code/iphone/._SkillViewController.m new file mode 100644 index 0000000..e8215df Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._SkillViewController.m differ diff --git a/__MACOSX/wolf3d/code/iphone/._TriviaViewController.h b/__MACOSX/wolf3d/code/iphone/._TriviaViewController.h new file mode 100644 index 0000000..4b49e4e Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._TriviaViewController.h differ diff --git a/__MACOSX/wolf3d/code/iphone/._TriviaViewController.m b/__MACOSX/wolf3d/code/iphone/._TriviaViewController.m new file mode 100644 index 0000000..543339f Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._TriviaViewController.m differ diff --git a/__MACOSX/wolf3d/code/iphone/._UIFontButton.h b/__MACOSX/wolf3d/code/iphone/._UIFontButton.h new file mode 100644 index 0000000..ace6274 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._UIFontButton.h differ diff --git a/__MACOSX/wolf3d/code/iphone/._UIFontButton.m b/__MACOSX/wolf3d/code/iphone/._UIFontButton.m new file mode 100644 index 0000000..b18b658 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._UIFontButton.m differ diff --git a/__MACOSX/wolf3d/code/iphone/._UIFontLabel.h b/__MACOSX/wolf3d/code/iphone/._UIFontLabel.h new file mode 100644 index 0000000..29e2a0e Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._UIFontLabel.h differ diff --git a/__MACOSX/wolf3d/code/iphone/._UIFontLabel.m b/__MACOSX/wolf3d/code/iphone/._UIFontLabel.m new file mode 100644 index 0000000..0a251c5 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._UIFontLabel.m differ diff --git a/__MACOSX/wolf3d/code/iphone/._UITableViewScrolling.h b/__MACOSX/wolf3d/code/iphone/._UITableViewScrolling.h new file mode 100644 index 0000000..b0f3b58 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._UITableViewScrolling.h differ diff --git a/__MACOSX/wolf3d/code/iphone/._UITableViewScrolling.m b/__MACOSX/wolf3d/code/iphone/._UITableViewScrolling.m new file mode 100644 index 0000000..c53a419 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._UITableViewScrolling.m differ diff --git a/__MACOSX/wolf3d/code/iphone/._WolfSlider.h b/__MACOSX/wolf3d/code/iphone/._WolfSlider.h new file mode 100644 index 0000000..368a74b Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._WolfSlider.h differ diff --git a/__MACOSX/wolf3d/code/iphone/._WolfSlider.m b/__MACOSX/wolf3d/code/iphone/._WolfSlider.m new file mode 100644 index 0000000..63d5478 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._WolfSlider.m differ diff --git a/__MACOSX/wolf3d/code/iphone/._gles_glue.c b/__MACOSX/wolf3d/code/iphone/._gles_glue.c new file mode 100644 index 0000000..4e2c4ec Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._gles_glue.c differ diff --git a/__MACOSX/wolf3d/code/iphone/._gles_glue.h b/__MACOSX/wolf3d/code/iphone/._gles_glue.h new file mode 100644 index 0000000..6b8b61f Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._gles_glue.h differ diff --git a/__MACOSX/wolf3d/code/iphone/._hud.c b/__MACOSX/wolf3d/code/iphone/._hud.c new file mode 100644 index 0000000..0d38daa Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._hud.c differ diff --git a/__MACOSX/wolf3d/code/iphone/._iphone_alerts.h b/__MACOSX/wolf3d/code/iphone/._iphone_alerts.h new file mode 100644 index 0000000..a364c34 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._iphone_alerts.h differ diff --git a/__MACOSX/wolf3d/code/iphone/._iphone_alerts.m b/__MACOSX/wolf3d/code/iphone/._iphone_alerts.m new file mode 100644 index 0000000..cdeb0b3 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._iphone_alerts.m differ diff --git a/__MACOSX/wolf3d/code/iphone/._iphone_downloadSOD.m b/__MACOSX/wolf3d/code/iphone/._iphone_downloadSOD.m new file mode 100644 index 0000000..7bedaa7 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._iphone_downloadSOD.m differ diff --git a/__MACOSX/wolf3d/code/iphone/._iphone_downloadUserMap.m b/__MACOSX/wolf3d/code/iphone/._iphone_downloadUserMap.m new file mode 100644 index 0000000..422c8bb Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._iphone_downloadUserMap.m differ diff --git a/__MACOSX/wolf3d/code/iphone/._iphone_loop.c b/__MACOSX/wolf3d/code/iphone/._iphone_loop.c new file mode 100644 index 0000000..570dc66 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._iphone_loop.c differ diff --git a/__MACOSX/wolf3d/code/iphone/._iphone_main.c b/__MACOSX/wolf3d/code/iphone/._iphone_main.c new file mode 100644 index 0000000..b502cd8 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._iphone_main.c differ diff --git a/__MACOSX/wolf3d/code/iphone/._iphone_mapselector.c b/__MACOSX/wolf3d/code/iphone/._iphone_mapselector.c new file mode 100644 index 0000000..c022898 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._iphone_mapselector.c differ diff --git a/__MACOSX/wolf3d/code/iphone/._iphone_menus.c b/__MACOSX/wolf3d/code/iphone/._iphone_menus.c new file mode 100644 index 0000000..038c0f3 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._iphone_menus.c differ diff --git a/__MACOSX/wolf3d/code/iphone/._iphone_qgl.h b/__MACOSX/wolf3d/code/iphone/._iphone_qgl.h new file mode 100644 index 0000000..3f25766 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._iphone_qgl.h differ diff --git a/__MACOSX/wolf3d/code/iphone/._iphone_store.h b/__MACOSX/wolf3d/code/iphone/._iphone_store.h new file mode 100644 index 0000000..b53f114 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._iphone_store.h differ diff --git a/__MACOSX/wolf3d/code/iphone/._iphone_store.m b/__MACOSX/wolf3d/code/iphone/._iphone_store.m new file mode 100644 index 0000000..92cdb0f Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._iphone_store.m differ diff --git a/__MACOSX/wolf3d/code/iphone/._iphone_sys.m b/__MACOSX/wolf3d/code/iphone/._iphone_sys.m new file mode 100644 index 0000000..6d38f6f Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._iphone_sys.m differ diff --git a/__MACOSX/wolf3d/code/iphone/._iphone_wolf.h b/__MACOSX/wolf3d/code/iphone/._iphone_wolf.h new file mode 100644 index 0000000..938decc Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._iphone_wolf.h differ diff --git a/__MACOSX/wolf3d/code/iphone/._main.m b/__MACOSX/wolf3d/code/iphone/._main.m new file mode 100644 index 0000000..2dc0ff3 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._main.m differ diff --git a/__MACOSX/wolf3d/code/iphone/._wolf3dAppDelegate.h b/__MACOSX/wolf3d/code/iphone/._wolf3dAppDelegate.h new file mode 100644 index 0000000..9b290c3 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._wolf3dAppDelegate.h differ diff --git a/__MACOSX/wolf3d/code/iphone/._wolf3dAppDelegate.m b/__MACOSX/wolf3d/code/iphone/._wolf3dAppDelegate.m new file mode 100644 index 0000000..9863f24 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._wolf3dAppDelegate.m differ diff --git a/__MACOSX/wolf3d/code/iphone/._wolf3dViewController.h b/__MACOSX/wolf3d/code/iphone/._wolf3dViewController.h new file mode 100644 index 0000000..536bd85 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._wolf3dViewController.h differ diff --git a/__MACOSX/wolf3d/code/iphone/._wolf3dViewController.m b/__MACOSX/wolf3d/code/iphone/._wolf3dViewController.m new file mode 100644 index 0000000..25ca8a2 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._wolf3dViewController.m differ diff --git a/__MACOSX/wolf3d/code/iphone/._wolf3d_Prefix.pch b/__MACOSX/wolf3d/code/iphone/._wolf3d_Prefix.pch new file mode 100644 index 0000000..8fd8429 Binary files /dev/null and b/__MACOSX/wolf3d/code/iphone/._wolf3d_Prefix.pch differ diff --git a/__MACOSX/wolf3d/code/wolf/._wolf_ai_com.c b/__MACOSX/wolf3d/code/wolf/._wolf_ai_com.c new file mode 100644 index 0000000..4e333a6 Binary files /dev/null and b/__MACOSX/wolf3d/code/wolf/._wolf_ai_com.c differ diff --git a/__MACOSX/wolf3d/code/wolf/._wolf_client_main.c b/__MACOSX/wolf3d/code/wolf/._wolf_client_main.c new file mode 100644 index 0000000..457e084 Binary files /dev/null and b/__MACOSX/wolf3d/code/wolf/._wolf_client_main.c differ diff --git a/__MACOSX/wolf3d/code/wolf/._wolf_local.h b/__MACOSX/wolf3d/code/wolf/._wolf_local.h new file mode 100644 index 0000000..ac19892 Binary files /dev/null and b/__MACOSX/wolf3d/code/wolf/._wolf_local.h differ diff --git a/__MACOSX/wolf3d/code/wolf/._wolf_math.c b/__MACOSX/wolf3d/code/wolf/._wolf_math.c new file mode 100644 index 0000000..241e2c9 Binary files /dev/null and b/__MACOSX/wolf3d/code/wolf/._wolf_math.c differ diff --git a/__MACOSX/wolf3d/code/wolf/._wolf_opengl.c b/__MACOSX/wolf3d/code/wolf/._wolf_opengl.c new file mode 100644 index 0000000..7c5e425 Binary files /dev/null and b/__MACOSX/wolf3d/code/wolf/._wolf_opengl.c differ diff --git a/__MACOSX/wolf3d/code/wolf/._wolf_player.c b/__MACOSX/wolf3d/code/wolf/._wolf_player.c new file mode 100644 index 0000000..6467aae Binary files /dev/null and b/__MACOSX/wolf3d/code/wolf/._wolf_player.c differ diff --git a/__MACOSX/wolf3d/code/wolf/._wolf_renderer.h b/__MACOSX/wolf3d/code/wolf/._wolf_renderer.h new file mode 100644 index 0000000..227b307 Binary files /dev/null and b/__MACOSX/wolf3d/code/wolf/._wolf_renderer.h differ diff --git a/__MACOSX/wolf3d/scripts/._scrubBase.pl b/__MACOSX/wolf3d/scripts/._scrubBase.pl new file mode 100644 index 0000000..d64c7c5 Binary files /dev/null and b/__MACOSX/wolf3d/scripts/._scrubBase.pl differ diff --git a/wolf3d/COPYING.txt b/wolf3d/COPYING.txt new file mode 100644 index 0000000..b3f64f0 --- /dev/null +++ b/wolf3d/COPYING.txt @@ -0,0 +1,345 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. \ No newline at end of file diff --git a/wolf3d/README.txt b/wolf3d/README.txt new file mode 100644 index 0000000..d4b2232 --- /dev/null +++ b/wolf3d/README.txt @@ -0,0 +1,22 @@ +WOLF3D iOS v2.1 GPL source release +=============================================== + +This file contains the following sections: + +GENERAL NOTES +LICENSE + +GENERAL NOTES +============= + +WOLF3D iOS v2.1 is a free release, and can be downloaded from +http://idsoftware.com/idstuff/wolf3d/wolf3d_ios_v21_src.zip + +This source release does not contain any game data, the game data remains subject to the original EULA and applicable law. + + +LICENSE +======= + +See COPYING.txt for the GNU GENERAL PUBLIC LICENSE. If COPYING.txt does not accompany, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + diff --git a/wolf3d/code/env/fileio.c b/wolf3d/code/env/fileio.c index de8917b..e5c9e2c 100644 --- a/wolf3d/code/env/fileio.c +++ b/wolf3d/code/env/fileio.c @@ -109,12 +109,17 @@ PUBLIC W32 FS_FileSeek( filehandle_t *fhandle, SW32 offset, W32 origin ) return 1; } + /* Commenting this out to avoid a warning - note that this is probably not what was + intended! + // offset is negative if( (fhandle->filesize + offset) < 0 ) { return 1; } + */ + // offset is negative fhandle->ptrCurrent = fhandle->ptrEnd + offset; break; @@ -223,7 +228,6 @@ PUBLIC filehandle_t *FS_OpenFile( const char *filename, W32 FlagsAndAttributes ) // high performance file mapping path, avoiding stdio fd = open( netpath, O_RDONLY ); if ( fd == -1 ) { -// return NULL; //if it couldn't be found in that path then check again in the document directory //gsh //pathBase = FS_ForceGamedir(); @@ -231,7 +235,7 @@ PUBLIC filehandle_t *FS_OpenFile( const char *filename, W32 FlagsAndAttributes ) pathBase = iphoneDocDirectory; my_snprintf( netpath, sizeof( netpath ), "%s/%s", pathBase, filename ); fd = open( netpath, O_RDONLY ); - if ( fd == -1 ) { //okay, couldn't find it there either... return null + if ( fd == -1 ) { return NULL; } } diff --git a/wolf3d/code/env/files.c b/wolf3d/code/env/files.c index cb9fba4..7c552fd 100644 --- a/wolf3d/code/env/files.c +++ b/wolf3d/code/env/files.c @@ -172,7 +172,16 @@ PRIVATE char **FS_ListFiles( char *findname, int *numfiles, unsigned musthave, u */ PUBLIC void FS_InitFilesystem( void ) { - char *p; - p = getenv("CWD"); - sprintf( fs_gamedir, "%s/base", p ); +#define BASE_DIRECTORY "/base" + + int length = SysIPhoneGetPathToMainBundleLength(); + + // Make sure the path will fit. + int fullPathLength = length + strlen( BASE_DIRECTORY ) + 1; + + assert( fullPathLength < MAX_OSPATH ); + + SysIPhoneGetPathToMainBundle( fs_gamedir, length + 1 ); + + strcpy( fs_gamedir + length, BASE_DIRECTORY ); } diff --git a/wolf3d/code/env/filesystem.h b/wolf3d/code/env/filesystem.h index b158fec..10a1cf8 100644 --- a/wolf3d/code/env/filesystem.h +++ b/wolf3d/code/env/filesystem.h @@ -39,6 +39,8 @@ #ifndef __FILESYSTEM_H__ #define __FILESYSTEM_H__ +#include "arch.h" + #define MAX_GAMEPATH 256 // max length of a game pathname #define MAX_OSPATH 256 // max length of a filesystem pathname diff --git a/wolf3d/code/env/openal_main.c b/wolf3d/code/env/openal_main.c index ff3d2d0..328a49c 100644 --- a/wolf3d/code/env/openal_main.c +++ b/wolf3d/code/env/openal_main.c @@ -76,12 +76,16 @@ W16 numSoundDevices, numDefaultSoundDevice; PRIVATE void Sound_Device_getDeviceList( void ) { char deviceName[ 256 ]; - + ALboolean isExtensionPresent = AL_FALSE; + my_strlcpy( deviceName, s_device->string, sizeof( deviceName ) ); - if( pfalcIsExtensionPresent( NULL, (ALubyte*)"ALC_ENUMERATION_EXT") == AL_TRUE ) + isExtensionPresent = pfalcIsExtensionPresent( NULL, (ALubyte*)"ALC_ENUMERATION_EXT"); + ALC_CheckErrors(); + if( isExtensionPresent == AL_TRUE ) { // try out enumeration extension deviceList = (char *)pfalcGetString( NULL, ALC_DEVICE_SPECIFIER ); + ALC_CheckErrors(); for( numSoundDevices = 0 ; numSoundDevices < 12 ; ++numSoundDevices ) { sound_devices[ numSoundDevices ] = NULL; @@ -200,12 +204,14 @@ failed: if( Context ) { pfalcDestroyContext( Context ); + ALC_CheckErrors(); Context = NULL; } if( Device ) { pfalcCloseDevice( Device ); + ALC_CheckErrors(); Device = NULL; } @@ -230,7 +236,9 @@ PUBLIC void Sound_Device_Shutdown( void ) if( Context ) { pfalcMakeContextCurrent( NULL ); + ALC_CheckErrors(); pfalcDestroyContext( Context ); + ALC_CheckErrors(); Context = NULL; } @@ -238,6 +246,7 @@ PUBLIC void Sound_Device_Shutdown( void ) if( Device ) { pfalcCloseDevice( Device ); + ALC_CheckErrors(); Device = NULL; } diff --git a/wolf3d/code/env/opengl_draw.c b/wolf3d/code/env/opengl_draw.c index 8ee9aa8..62ec23e 100644 --- a/wolf3d/code/env/opengl_draw.c +++ b/wolf3d/code/env/opengl_draw.c @@ -93,20 +93,20 @@ PUBLIC void R_Draw_Character( int x, int y, int num, font_t *myfont ) R_Bind( myfont->texfont->texnum ); - pfglBegin( GL_QUADS ); + pfglBegin( GL_TRIANGLE_STRIP ); pfglTexCoord2f( fcol, frow ); pfglVertex2i( x, y ); + pfglTexCoord2f( fcol, frow+myfont->hFrac ); + pfglVertex2i( x, (y+sh*scale) ); + pfglTexCoord2f( fcol+myfont->wFrac, frow ); pfglVertex2i( x+myfont->nMaxWidth*scale, y ); pfglTexCoord2f( fcol+myfont->wFrac, frow+myfont->hFrac ); pfglVertex2i( x+myfont->nMaxWidth*scale, (y+sh*scale) ); - - pfglTexCoord2f( fcol, frow+myfont->hFrac ); - pfglVertex2i( x, (y+sh*scale) ); @@ -146,12 +146,12 @@ PUBLIC void R_Draw_StretchPic( int x, int y, int w, int h, const char *pic ) R_Bind( gl->texnum ); - pfglBegin( GL_QUADS ); + pfglBegin( GL_TRIANGLE_STRIP ); pfglTexCoord2f( 0.0f, 0.0f ); pfglVertex2i( x, y ); + pfglTexCoord2f( 0.0f, 1.0f ); pfglVertex2i( x, y+h ); pfglTexCoord2f( 1.0f, 0.0f ); pfglVertex2i( x+w, y ); pfglTexCoord2f( 1.0f, 1.0f ); pfglVertex2i( x+w, y+h ); - pfglTexCoord2f( 0.0f, 1.0f ); pfglVertex2i( x, y+h ); pfglEnd(); } @@ -186,7 +186,7 @@ PUBLIC void R_Draw_Fill( int x, int y, int w, int h, colour3_t c ) c4[3] = 255; R_Draw_Blend( x, y, w, h, c4 ); #else - if ( revLand->value ) { + if ( deviceOrientation == ORIENTATION_LANDSCAPE_RIGHT ) { qglScissor( x, y, w, h ); } else { qglScissor( x, 320-(y+h), w, h ); @@ -203,12 +203,12 @@ PUBLIC void R_Draw_Blend( int x, int y, int w, int h, colour4_t c ) pfglDisable( GL_TEXTURE_2D ); pfglColor4ubv( c ); - pfglBegin( GL_QUADS ); + pfglBegin( GL_TRIANGLE_STRIP ); pfglVertex2i( x, y ); + pfglVertex2i( x, y+h ); pfglVertex2i( x+w, y ); pfglVertex2i( x+w, y+h ); - pfglVertex2i( x, y+h ); pfglEnd(); diff --git a/wolf3d/code/env/opengl_local.h b/wolf3d/code/env/opengl_local.h index 5d2e650..a4f738a 100644 --- a/wolf3d/code/env/opengl_local.h +++ b/wolf3d/code/env/opengl_local.h @@ -131,6 +131,7 @@ typedef struct const char *version_string; const char *extensions_string; _boolean Version_1_2; + bool framebuffer_discard; } glconfig_t; diff --git a/wolf3d/code/env/opengl_main.c b/wolf3d/code/env/opengl_main.c index 729d0ab..a5dbf9d 100644 --- a/wolf3d/code/env/opengl_main.c +++ b/wolf3d/code/env/opengl_main.c @@ -284,7 +284,6 @@ PUBLIC void R_Init() int err; int a, b; - Com_Printf( "\n------ Display Initialization ------\n" ); Com_Printf( "Initializing OpenGL Subsystem\n" ); @@ -294,9 +293,6 @@ PUBLIC void R_Init() // set our "safe" modes gl_state.prev_mode = 0; - viddef.width = 480; - viddef.height = 320; - // get various GL strings gl_config.vendor_string = (char *)pfglGetString( GL_VENDOR ); Com_Printf( "GL_VENDOR: %s\n", gl_config.vendor_string ); @@ -316,7 +312,6 @@ PUBLIC void R_Init() my_strlcpy( vendor_buffer, gl_config.vendor_string, sizeof( vendor_buffer ) ); (void)my_strlwr( vendor_buffer ); - sscanf( gl_config.version_string, "%d.%d", &a, &b ); if( a >= 1 && b >= 2 ) { @@ -326,6 +321,14 @@ PUBLIC void R_Init() pfglGetIntegerv( GL_MAX_TEXTURE_SIZE, &glMaxTexSize ); Com_Printf( "GL_MAX_TEXTURE_SIZE: %d\n", glMaxTexSize); + if ( strstr( gl_config.extensions_string, "GL_EXT_discard_framebuffer" ) != 0 ) { + gl_config.framebuffer_discard = true; + } else { + gl_config.framebuffer_discard = false; + } + + InitImmediateModeGL(); + GL_SetDefaultState(); TM_Init(); @@ -359,7 +362,7 @@ PUBLIC void PrintGLError( W32 err, const char *from ) return; } - if( from != "" ) + if( strlen(from) != 0 ) { Com_Printf( "\n\n\nGL Error: %s\n", from ); } diff --git a/wolf3d/code/env/sound.c b/wolf3d/code/env/sound.c index bd7ecc2..5282838 100644 --- a/wolf3d/code/env/sound.c +++ b/wolf3d/code/env/sound.c @@ -95,6 +95,7 @@ PRIVATE void Sound_AllocChannels( void ) for( i = 0, ch = s_channels ; i < MAX_CHANNELS ; ++i, ++ch ) { pfalGenSources( 1, &ch->sourceName ); + AL_CheckErrors(); if( pfalGetError() != AL_NO_ERROR ) { @@ -123,6 +124,7 @@ PRIVATE int Sound_ChannelState( channel_t *ch ) int state; pfalGetSourcei( ch->sourceName, AL_SOURCE_STATE, &state ); + AL_CheckErrors(); return state; } @@ -133,9 +135,16 @@ PRIVATE void Sound_PlayChannel( channel_t *ch, sfx_t *sfx ) ch->sfx = sfx; pfalSourcei( ch->sourceName, AL_BUFFER, sfx->bufferNum ); + AL_CheckErrors(); + pfalSourcei( ch->sourceName, AL_LOOPING, ch->loopSound ); + AL_CheckErrors(); + pfalSourcei( ch->sourceName, AL_SOURCE_RELATIVE, AL_FALSE ); + AL_CheckErrors(); + pfalSourcePlay( ch->sourceName ); + AL_CheckErrors(); } @@ -147,12 +156,15 @@ PRIVATE void Sound_StopChannel( channel_t *ch ) // Only deleting the entire source seems to work. pfalSourceStop( ch->sourceName ); + AL_CheckErrors(); // pfalSourceStopv( 1, &ch->sourceName ); // pfalSourcei( ch->sourceName, AL_BUFFER, 0 ); // pfalSourceRewind( ch->sourceName ); #if 1 pfalDeleteSources( 1, &ch->sourceName ); + AL_CheckErrors(); pfalGenSources( 1, &ch->sourceName ); + AL_CheckErrors(); #endif } @@ -165,14 +177,18 @@ PRIVATE void Sound_SpatializeChannel( channel_t *ch ) if( ch->entNum == 0 || ! ch->distanceMult ) { pfalSourcefv( ch->sourceName, AL_POSITION, s_listener.position ); + AL_CheckErrors(); pfalSourcefv( ch->sourceName, AL_VELOCITY, s_listener.velocity ); + AL_CheckErrors(); } else { if( ch->fixedPosition ) { pfalSource3f( ch->sourceName, AL_POSITION, ch->position[1], ch->position[2], -ch->position[0] ); + AL_CheckErrors(); pfalSource3f( ch->sourceName, AL_VELOCITY, 0, 0, 0 ); + AL_CheckErrors(); } /* else { @@ -195,17 +211,23 @@ PRIVATE void Sound_SpatializeChannel( channel_t *ch ) if( ch->distanceMult ) { pfalSourcef( ch->sourceName, AL_REFERENCE_DISTANCE, s_minDistance->value * ch->distanceMult ); + AL_CheckErrors(); } else { pfalSourcef( ch->sourceName, AL_REFERENCE_DISTANCE, s_maxDistance->value ); + AL_CheckErrors(); } pfalSourcef( ch->sourceName, AL_MAX_DISTANCE, s_maxDistance->value ); + AL_CheckErrors(); // Update volume and rolloff factor pfalSourcef( ch->sourceName, AL_GAIN, s_sfxVolume->value * ch->volume ); + AL_CheckErrors(); + pfalSourcef( ch->sourceName, AL_ROLLOFF_FACTOR, s_rolloffFactor->value ); + AL_CheckErrors(); } @@ -572,15 +594,26 @@ PUBLIC void Sound_Update( const vec3_t position, const vec3_t velocity, const ve vectorSet( &s_listener.orientation[3], up[1], -up[2], -up[0] ); pfalListenerfv( AL_POSITION, s_listener.position ); + AL_CheckErrors(); + pfalListenerfv( AL_VELOCITY, s_listener.velocity ); + AL_CheckErrors(); + pfalListenerfv( AL_ORIENTATION, s_listener.orientation ); + AL_CheckErrors(); + pfalListenerf( AL_GAIN, (s_activeApp) ? s_masterVolume->value : 0.0); + AL_CheckErrors(); // Set state pfalDistanceModel( AL_INVERSE_DISTANCE_CLAMPED ); + AL_CheckErrors(); pfalDopplerFactor( s_dopplerFactor->value ); + AL_CheckErrors(); + pfalDopplerVelocity( s_dopplerVelocity->value ); + AL_CheckErrors(); // Stream background track Sound_StreamBGTrack(); @@ -639,9 +672,26 @@ PUBLIC void Sound_Activate( _boolean active ) } pfalListenerf( AL_GAIN, ( active ) ? s_masterVolume->value : 0.0 ); - + AL_CheckErrors(); } +void AL_CheckErrors() { +#if 0 +#ifdef DEBUG + ALenum error = alGetError(); + if ( error != AL_NO_ERROR ) { + printf( "OpenAL error (al)! %d\n", error); + } +#endif +#endif +} + +void ALC_CheckErrors() { + //ALenum error = alcGetError(); + //if ( error != AL_NO_ERROR ) { + // printf( "OpenAL error (alc)! %d\n", error); + //} +} ///////////////////////////////////////////////////////////////////// // @@ -690,14 +740,14 @@ PRIVATE void Sound_Register( void ) { s_initSound = Cvar_Get( "s_initSound", "1", CVAR_INIT ); - s_masterVolume = Cvar_Get( "s_masterVolume", "0.3", CVAR_ARCHIVE ); //gsh changed this from "1.0" to "0.3" for the volume hack... otherwise it's too loud + s_masterVolume = Cvar_Get( "s_masterVolume", "0.6", CVAR_ARCHIVE ); //gsh changed this from "1.0" to "0.3" for the volume hack... otherwise it's too loud s_sfxVolume = Cvar_Get( "s_sfxVolume", "1.0", CVAR_ARCHIVE ); s_musicVolume = Cvar_Get( "s_musicVolume", "1.0", CVAR_ARCHIVE ); s_minDistance = Cvar_Get( "s_minDistance", "0.0", CVAR_ARCHIVE ); s_maxDistance = Cvar_Get( "s_maxDistance", "1.0", CVAR_ARCHIVE ); s_rolloffFactor = Cvar_Get( "s_rolloffFactor", "1.0", CVAR_ARCHIVE ); s_dopplerFactor = Cvar_Get( "s_dopplerFactor", "1.0", CVAR_ARCHIVE ); - s_dopplerVelocity = Cvar_Get( "s_dopplerVelocity", "0.0", CVAR_ARCHIVE ); + s_dopplerVelocity = Cvar_Get( "s_dopplerVelocity", "1.0", CVAR_ARCHIVE ); Cmd_AddCommand( "play", Sound_Play_f ); Cmd_AddCommand( "stopsound", Sound_StopSound_f ); diff --git a/wolf3d/code/env/sound_local.h b/wolf3d/code/env/sound_local.h index ad798b2..ec19e2c 100644 --- a/wolf3d/code/env/sound_local.h +++ b/wolf3d/code/env/sound_local.h @@ -106,6 +106,8 @@ extern sfx_t *Sound_FindSound( const char *name ); extern _boolean Sound_Device_Setup( void ); extern void Sound_Device_Shutdown( void ); +void AL_CheckErrors(); +void ALC_CheckErrors(); #endif /* __SOUND_LOCAL_H__ */ diff --git a/wolf3d/code/env/sound_sfx_id.c b/wolf3d/code/env/sound_sfx_id.c index 6175529..7e757f4 100644 --- a/wolf3d/code/env/sound_sfx_id.c +++ b/wolf3d/code/env/sound_sfx_id.c @@ -96,7 +96,10 @@ PRIVATE void Sound_UploadSound( W8 *data, int sample_size, int channels, sfx_t * // Upload the sound pfalGenBuffers( 1, &sfx->bufferNum ); + AL_CheckErrors(); + pfalBufferData( sfx->bufferNum, sfx->format, data, size, sfx->rate ); + AL_CheckErrors(); } else { @@ -121,7 +124,10 @@ PRIVATE void Sound_UploadSound( W8 *data, int sample_size, int channels, sfx_t * // Upload the sound pfalGenBuffers( 1, &sfx->bufferNum ); + AL_CheckErrors(); + pfalBufferData( sfx->bufferNum, sfx->format, d, size * 2, sfx->rate ); + AL_CheckErrors(); free( d ); } } @@ -163,7 +169,7 @@ PUBLIC _boolean Sound_LoadSound( sfx_t *sfx ) if ( ! LoadOggInfo( name, &data, &info ) ) { sfx->defaulted = true; - Com_Printf( "Could not find sound (%s)\n", name ); + //Com_Printf( "Could not find sound (%s)\n", name ); return false; } diff --git a/wolf3d/code/env/sound_stream.c b/wolf3d/code/env/sound_stream.c index 0a8a845..b101730 100644 --- a/wolf3d/code/env/sound_stream.c +++ b/wolf3d/code/env/sound_stream.c @@ -284,17 +284,23 @@ PUBLIC void Sound_StreamBGTrack( void ) // Unqueue and delete any processed buffers pfalGetSourcei( s_streamingChannel->sourceName, AL_BUFFERS_PROCESSED, &processed ); + AL_CheckErrors(); + if( processed > 0 ) { while (processed--) { pfalSourceUnqueueBuffers( s_streamingChannel->sourceName, 1, &buffer ); + AL_CheckErrors(); + //printf( "OpenAL unqueued %d, about to delete it!\n", buffer); pfalDeleteBuffers( 1, &buffer ); + AL_CheckErrors(); } } // Make sure we always have at least 4 buffers in the queue pfalGetSourcei( s_streamingChannel->sourceName, AL_BUFFERS_QUEUED, &queued ); + AL_CheckErrors(); while( queued < 4 ) { size = 0; @@ -340,20 +346,29 @@ PUBLIC void Sound_StreamBGTrack( void ) // Upload and queue the new buffer pfalGenBuffers( 1, &buffer ); + AL_CheckErrors(); + pfalBufferData( buffer, bgTrack.format, data, size, bgTrack.rate ); + AL_CheckErrors(); + pfalSourceQueueBuffers( s_streamingChannel->sourceName, 1, &buffer ); + AL_CheckErrors(); queued++; } // Update volume pfalSourcef( s_streamingChannel->sourceName, AL_GAIN, s_musicVolume->value ); + AL_CheckErrors(); // If not playing, then do so pfalGetSourcei( s_streamingChannel->sourceName, AL_SOURCE_STATE, &state ); + AL_CheckErrors(); + if( state != AL_PLAYING ) { pfalSourcePlay(s_streamingChannel->sourceName); + AL_CheckErrors(); } } @@ -390,17 +405,28 @@ PUBLIC void Sound_StartStreaming( void ) // hmmm... pfalDeleteSources( 1, &s_streamingChannel->sourceName ); + AL_CheckErrors(); + pfalGenSources( 1, &s_streamingChannel->sourceName ); + AL_CheckErrors(); // Set up the source pfalSourcei( s_streamingChannel->sourceName, AL_BUFFER, 0 ); + AL_CheckErrors(); pfalSourcei( s_streamingChannel->sourceName, AL_LOOPING, AL_FALSE ); + AL_CheckErrors(); pfalSourcei( s_streamingChannel->sourceName, AL_SOURCE_RELATIVE, AL_TRUE ); + AL_CheckErrors(); pfalSourcefv( s_streamingChannel->sourceName, AL_POSITION, vec3_origin ); + AL_CheckErrors(); pfalSourcefv( s_streamingChannel->sourceName, AL_VELOCITY, vec3_origin ); + AL_CheckErrors(); pfalSourcef( s_streamingChannel->sourceName, AL_REFERENCE_DISTANCE, 1.0 ); + AL_CheckErrors(); pfalSourcef( s_streamingChannel->sourceName, AL_MAX_DISTANCE, 1.0 ); + AL_CheckErrors(); pfalSourcef( s_streamingChannel->sourceName, AL_ROLLOFF_FACTOR, 0.0 ); + AL_CheckErrors(); } /* @@ -433,22 +459,30 @@ PUBLIC void Sound_StopStreaming( void ) pfalSourceStop( s_streamingChannel->sourceName ); + AL_CheckErrors(); pfalGetSourcei( s_streamingChannel->sourceName, AL_BUFFERS_PROCESSED, &processed ); + AL_CheckErrors(); if( processed > 0 ) { while( processed-- ) { pfalSourceUnqueueBuffers( s_streamingChannel->sourceName, 1, &buffer ); + AL_CheckErrors(); pfalDeleteBuffers( 1, &buffer ); + AL_CheckErrors(); } } pfalSourcei( s_streamingChannel->sourceName, AL_BUFFER, 0 ); - + AL_CheckErrors(); + // hmmm... pfalDeleteSources( 1, &s_streamingChannel->sourceName ); + AL_CheckErrors(); + pfalGenSources( 1, &s_streamingChannel->sourceName ); + AL_CheckErrors(); s_streamingChannel = NULL; } diff --git a/wolf3d/code/env/texture_manager.c b/wolf3d/code/env/texture_manager.c index d960d1d..5886557 100644 --- a/wolf3d/code/env/texture_manager.c +++ b/wolf3d/code/env/texture_manager.c @@ -349,6 +349,19 @@ PUBLIC texture_t *TM_LoadTexture( const char *name, W8 *data, int width, int hei TM_ResampleTexture( data, tex->width, tex->height, scaled, scaled_width, scaled_height, tex->bytes, INTERPOLATION_NONE ); } + pfglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, WrapToGL( tex->WrapS ) ); + pfglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, WrapToGL( tex->WrapT ) ); + pfglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, MinFilterToGL( tex->MipMap, tex->MinFilter ) ); + pfglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, MagFilterToGL( tex->MagFilter ) ); + +#ifdef IPHONE + if ( type == TT_Wall ) { + pfglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 2.0f ); + } else { + pfglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1.0f ); + } +#endif + { // upload base image GLenum internalFormat[] = { GL_LUMINANCE, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA }; @@ -379,20 +392,6 @@ PUBLIC texture_t *TM_LoadTexture( const char *name, W8 *data, int width, int hei if ( scaled != data ) { Z_Free( scaled ); } - - pfglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, WrapToGL( tex->WrapS ) ); - pfglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, WrapToGL( tex->WrapT ) ); - pfglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, MinFilterToGL( tex->MipMap, tex->MinFilter ) ); - pfglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, MagFilterToGL( tex->MagFilter ) ); - -#ifdef IPHONE - if ( type == TT_Wall ) { - pfglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 2.0f ); - } else { - pfglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 0 ); - } -#endif - return tex; } @@ -486,7 +485,8 @@ PUBLIC texture_t *TM_FindTexture( const char *name, texturetype_t type ) // load the texture from disk // data = NULL; - if( strcmp( name + len - 4, ".tga" ) ) { + const char* const extension = name + len - 4; + if( strcmp( extension, ".tga" ) && strcmp( extension, ".png" ) ) { return r_notexture; } @@ -537,6 +537,23 @@ PUBLIC texture_t *TM_FindTexture( const char *name, texturetype_t type ) tx->maxS = (float)ph->srcWidth / ph->uploadWidth; tx->maxT = (float)ph->srcHeight / ph->uploadHeight; unsigned char *s = (unsigned char *)(ph+1); + + if ( noMips ) { + pfglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); + } else { + pfglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST ); + } + pfglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); + + if ( type == TT_Wall ) { + pfglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 2.0f ); + pfglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); + } else { + pfglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1.0f ); + pfglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); + } + pfglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); + while( 1 ) { int size = (w*h*fi->bpp)/8; if ( fi->bpp < 16 ) { @@ -568,26 +585,27 @@ PUBLIC texture_t *TM_FindTexture( const char *name, texturetype_t type ) } } FS_CloseFile( fh ); - if ( noMips ) { - pfglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); - } else { - pfglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR ); - } - pfglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); - if ( type == TT_Wall ) { - pfglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 2.0f ); - pfglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); - } else { - pfglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 0 ); - pfglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); - } - pfglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); return tx; } - // load a normal TGA - LoadTGA( name, &data, &width, &height, &bytes ); + // load a normal PNG or TGA. Prioritize PNGs, if not found, fall back to TGA. + size_t filenameLength = strlen( name ); + char * pngName = MM_MALLOC( filenameLength ); + strcpy( pngName, name ); + strcpy( pngName + filenameLength - 3, "png" ); + + // Try to load a PNG version. + LoadPNG( pngName, &data, &width, &height, &bytes ); + + MM_FREE( pngName ); + pngName = NULL; + + // Try finding a TGA if the PNG load failed. + if ( ( data == NULL ) && strcmp( extension, ".tga" ) == 0 ) { + LoadTGA( name, &data, &width, &height, &bytes ); + } + if ( data ) { tex = TM_LoadTexture( name, data, width, height, type, bytes ); MM_FREE( data ); diff --git a/wolf3d/code/env/texture_manager.h b/wolf3d/code/env/texture_manager.h index 576f02b..4c4ec45 100644 --- a/wolf3d/code/env/texture_manager.h +++ b/wolf3d/code/env/texture_manager.h @@ -39,6 +39,9 @@ #ifndef __TEXTURE_MANAGER_H__ #define __TEXTURE_MANAGER_H__ +#include "arch.h" +#include "filesystem.h" + #define MAX_TEXTURES 1024 diff --git a/wolf3d/code/env/unix_file.c b/wolf3d/code/env/unix_file.c index adc34ba..475fb5d 100644 --- a/wolf3d/code/env/unix_file.c +++ b/wolf3d/code/env/unix_file.c @@ -133,7 +133,7 @@ PUBLIC char *FS_FindFirst( const char *path, W32 musthave, W32 canthave ) { struct dirent *d; char *p; - p; + (void)p; if( fdir ) { diff --git a/wolf3d/code/env/video.h b/wolf3d/code/env/video.h index 8d12592..6141e38 100644 --- a/wolf3d/code/env/video.h +++ b/wolf3d/code/env/video.h @@ -42,6 +42,8 @@ #ifndef __VIDEO_H__ #define __VIDEO_H__ +#include "arch.h" + typedef struct vrect_s { int x, y, width, height; diff --git a/wolf3d/code/iphone/.DS_Store b/wolf3d/code/iphone/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/wolf3d/code/iphone/.DS_Store differ diff --git a/wolf3d/code/iphone/CreditsView.xib b/wolf3d/code/iphone/CreditsView.xib new file mode 100644 index 0000000..5789a36 --- /dev/null +++ b/wolf3d/code/iphone/CreditsView.xib @@ -0,0 +1,1483 @@ + + + + 1056 + 10K549 + 851 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 141 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + YES + + + 256 + {480, 320} + + NO + YES + 1 + YES + IBCocoaTouchFramework + + NSImage + credits_bg.png + + + + + 292 + {{21, 265}, {32, 32}} + + 1 + NO + IBCocoaTouchFramework + + NSImage + back_arrow.png + + + + + 292 + {{20, 242}, {66, 29}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + BACK + + POSITYPE-idSettler_v10.2 + 18 + 16 + + + 3 + MQA + + + 1 + 10 + 5 + + + + 301 + {{3, 237}, {69, 69}} + + NO + NO + 1 + IBCocoaTouchFramework + 0 + 0 + + Helvetica-Bold + 15 + 16 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + 3 + MC41AA + + + NSImage + button_highlight.png + + + + + 292 + + YES + + + 292 + {{94, 733}, {271, 116}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Wolfenstein 3D and Spear of Destiny originally created by id Software + + Helvetica-Bold + 20 + 16 + + + + + 1 + MCAwIDAAA + + {1, 1} + 1 + 10 + 4 + 1 + 0 + + + + 292 + {{99, 20}, {275, 59}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Wolfenstein 3D Classic Platinum + + Helvetica-Bold + 22 + 16 + + + + + {1, 1} + 1 + 10 + 2 + 1 + 0 + + + + 292 + {{86, 87}, {307, 36}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Programming + + + + + {1, 1} + 1 + 10 + 2 + 1 + 0 + + + + 292 + {{86, 294}, {307, 36}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Art + + + + + {1, 1} + 1 + 10 + 2 + 1 + 0 + + + + 292 + {{86, 421}, {307, 36}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Audio + + + + + {1, 1} + 1 + 10 + 2 + 1 + 0 + + + + 292 + {{85, 910}, {307, 36}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Programming + + + + + {1, 1} + 1 + 10 + 2 + 1 + 0 + + + + 292 + {{85, 1024}, {307, 36}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Design + + + + + {1, 1} + 1 + 10 + 2 + 1 + 0 + + + + 292 + {{85, 1174}, {307, 36}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Art + + + + + {1, 1} + 1 + 10 + 2 + 1 + 0 + + + + 292 + {{85, 1303}, {307, 36}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Audio + + + + + {1, 1} + 1 + 10 + 2 + 1 + 0 + + + + 292 + {{86, 532}, {307, 36}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Production + + + + + {1, 1} + 1 + 10 + 2 + 1 + 0 + + + + 292 + {{87, 639}, {307, 36}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + QA Testing + + + + + {1, 1} + 1 + 10 + 2 + 1 + 0 + + + + 292 + {{184, 140}, {111, 21}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + John Carmack + + Helvetica + 17 + 16 + + + + + {1, 1} + 1 + 10 + 1 + + + + 292 + {{183, 954}, {111, 21}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + John Carmack + + + + + {1, 1} + 1 + 10 + 1 + + + + 292 + {{183, 1068}, {111, 21}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + John Ramero + + + + + {1, 1} + 1 + 10 + 1 + + + + 292 + {{183, 1094}, {111, 21}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Tom Hall + + + + + {1, 1} + 1 + 10 + 1 + + + + 292 + {{178, 1218}, {121, 23}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Adrian Carmack + + + + + {1, 1} + 1 + 10 + 1 + + + + 292 + {{183, 1246}, {111, 21}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Kevin Cloud + + + + + {1, 1} + 1 + 10 + 1 + + + + 292 + {{183, 1351}, {111, 21}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Bobby Prince + + + + + {1, 1} + 1 + 10 + 1 + + + + 292 + {{185, 338}, {111, 21}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + John Burnett + + + + + {1, 1} + 1 + 10 + 1 + + + + 292 + {{185, 367}, {111, 21}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Mike Horton + + + + + {1, 1} + 1 + 10 + 1 + + + + 292 + {{171, 465}, {137, 26}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Christian Antkow + + + + + {1, 1} + 1 + NO + 10 + 1 + + + + 292 + {{171, 576}, {137, 26}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Rafael Brown + + + + + {1, 1} + 1 + NO + 10 + 1 + + + + 292 + {{172, 683}, {137, 26}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Sean Palomino + + + + + {1, 1} + 1 + NO + 10 + 1 + + + + 292 + {{184, 169}, {111, 21}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Jeff Farrand + + + + + {1, 1} + 1 + 10 + 1 + + + + 292 + {{184, 198}, {111, 21}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Ryan Gerleve + + + + + {1, 1} + 1 + 10 + 1 + + + + 292 + {{184, 234}, {111, 21}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Greg Hodges + + + + + {1, 1} + 1 + 10 + 1 + + + {{83, 320}, {460, 1400}} + + + 3 + MCAwAA + + NO + + 3 + + IBCocoaTouchFramework + + + {480, 320} + + + 3 + MAA + + + 3 + + IBCocoaTouchFramework + + + + + YES + + + view + + + + 6 + + + + creditsRoll + + + + 20 + + + + back: + + + 7 + + 21 + + + + + YES + + 0 + + + + + + 1 + + + YES + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 9 + + + + + 10 + + + + + 11 + + + + + 8 + + + + + 12 + + + YES + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Credtis text roll + + + 40 + + + + + 13 + + + + + 39 + + + + + 38 + + + + + 37 + + + + + 36 + + + + + 35 + + + + + 34 + + + + + 33 + + + + + 32 + + + + + 31 + + + + + 30 + + + + + 29 + + + + + 28 + + + + + 27 + + + + + 26 + + + + + 25 + + + + + 24 + + + + + 23 + + + + + 22 + + + + + 19 + + + + + 18 + + + + + 17 + + + + + 16 + + + + + 15 + + + + + 14 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 10.CustomClassName + 10.IBPluginDependency + 10.IBViewBoundsToFrameTransform + 11.IBPluginDependency + 11.IBViewBoundsToFrameTransform + 12.IBEditorWindowLastContentRect + 12.IBPluginDependency + 12.IBViewBoundsToFrameTransform + 13.IBPluginDependency + 13.IBViewBoundsToFrameTransform + 14.IBPluginDependency + 14.IBViewBoundsToFrameTransform + 15.IBPluginDependency + 15.IBViewBoundsToFrameTransform + 16.IBPluginDependency + 16.IBViewBoundsToFrameTransform + 17.IBPluginDependency + 17.IBViewBoundsToFrameTransform + 18.IBPluginDependency + 18.IBViewBoundsToFrameTransform + 19.IBPluginDependency + 19.IBViewBoundsToFrameTransform + 22.IBPluginDependency + 22.IBViewBoundsToFrameTransform + 23.IBPluginDependency + 23.IBViewBoundsToFrameTransform + 24.IBPluginDependency + 24.IBViewBoundsToFrameTransform + 25.IBPluginDependency + 25.IBViewBoundsToFrameTransform + 26.IBPluginDependency + 26.IBViewBoundsToFrameTransform + 27.IBPluginDependency + 27.IBViewBoundsToFrameTransform + 28.IBPluginDependency + 28.IBViewBoundsToFrameTransform + 29.IBPluginDependency + 29.IBViewBoundsToFrameTransform + 30.IBPluginDependency + 30.IBViewBoundsToFrameTransform + 31.IBPluginDependency + 31.IBViewBoundsToFrameTransform + 32.IBPluginDependency + 32.IBViewBoundsToFrameTransform + 33.IBPluginDependency + 33.IBViewBoundsToFrameTransform + 34.IBPluginDependency + 34.IBViewBoundsToFrameTransform + 35.IBPluginDependency + 35.IBViewBoundsToFrameTransform + 36.IBPluginDependency + 36.IBViewBoundsToFrameTransform + 37.IBPluginDependency + 37.IBViewBoundsToFrameTransform + 38.IBPluginDependency + 38.IBViewBoundsToFrameTransform + 39.IBPluginDependency + 39.IBViewBoundsToFrameTransform + 40.IBPluginDependency + 40.IBViewBoundsToFrameTransform + 8.IBViewBoundsToFrameTransform + 9.IBPluginDependency + 9.IBViewBoundsToFrameTransform + + + YES + CreditsViewController + UIResponder + {{522, 817}, {480, 320}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBoAAAw4aAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUIUAABDg4AAA + + {{387, 0}, {475, 1156}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAAAAAAAAxK7AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCkgAAxFPAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCqgAAwuwAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUKsAABCrgAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUM4AABDDAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDQAAAw2QAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDQAAAw4CAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDQAAAw48AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUKsAABDkwAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUM5AABDyQAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUM5AABD14AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUKsAABD0oAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUMrAABEBEAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUKsAABEFQAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUMrAABEIAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCrgAAwz4AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUM7AABDTAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCrgAAw0UAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUKqAABEgAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCrgAAxATAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUM3AABEboAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCrgAAw8oAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUM3AABEhYAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUM3AABEiMAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUM3AABEmEAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDOQAAwyQAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUM3AABEmEAAA + + + P4AAAL+AAAAAAAAAw58AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUBAAABDbQAAA + + + + + YES + + + YES + + + + + YES + + + YES + + + + 40 + + + + YES + + CreditsViewController + UIViewController + + back: + id + + + back: + + back: + id + + + + creditsRoll + UIView + + + creditsRoll + + creditsRoll + UIView + + + + IBProjectSource + CreditsViewController.h + + + + UIFontLabel + UILabel + + IBProjectSource + UIFontLabel.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIButton + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UIButton.h + + + + UIControl + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIControl.h + + + + UIImageView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIImageView.h + + + + UILabel + UIView + + IBFrameworkSource + UIKit.framework/Headers/UILabel.h + + + + UIResponder + NSObject + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIPrintFormatter.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + wolf3d.xcodeproj + 3 + + YES + + YES + back_arrow.png + button_highlight.png + credits_bg.png + + + YES + {65, 63} + {4, 4} + {960, 640} + + + 141 + + diff --git a/wolf3d/code/iphone/CreditsViewController.h b/wolf3d/code/iphone/CreditsViewController.h new file mode 100644 index 0000000..16bf0b9 --- /dev/null +++ b/wolf3d/code/iphone/CreditsViewController.h @@ -0,0 +1,34 @@ +/* + + Copyright (C) 2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import + + +@interface CreditsViewController : UIViewController { + @private + IBOutlet UIView* creditsRoll; +} + +- (IBAction)back:(id)sender; + +@end diff --git a/wolf3d/code/iphone/CreditsViewController.m b/wolf3d/code/iphone/CreditsViewController.m new file mode 100644 index 0000000..bf90572 --- /dev/null +++ b/wolf3d/code/iphone/CreditsViewController.m @@ -0,0 +1,116 @@ +/* + + Copyright (C) 2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import "CreditsViewController.h" +#import + +#define CREDITS_ANIMATION_POINTS_PER_SECOND ( 320.0f / 6.0f ) // Six seconds to scroll up + // an iPhone screen. + +@interface CreditsViewController () + + @property (nonatomic, retain) UIView* creditsRoll; + +@end + +@implementation CreditsViewController + +@synthesize creditsRoll; + +// The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. +/* +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization. + } + return self; +} +*/ + +/* +// Implement loadView to create a view hierarchy programmatically, without using a nib. +- (void)loadView { +} +*/ + + +// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. +- (void)viewDidLoad { + [super viewDidLoad]; + + // This is the starting position of the credits text. + CGPoint startPoint = self.creditsRoll.center; + + // Set up the end point. We can stop the animation as soon as the bottom of the credits + // get to the top of the screen. + CGPoint endPoint = startPoint; + + endPoint.y = -self.creditsRoll.bounds.size.height; + + // Start credits animation + CABasicAnimation *theAnimation; + + theAnimation=[CABasicAnimation animationWithKeyPath:@"position"]; + + CGFloat pointDistance = endPoint.y - startPoint.y; + + theAnimation.duration= fabs( pointDistance ) * ( 1.0f / CREDITS_ANIMATION_POINTS_PER_SECOND ); + + theAnimation.fromValue=[NSValue valueWithCGPoint:startPoint]; + theAnimation.toValue=[NSValue valueWithCGPoint:endPoint]; + + [self.creditsRoll.layer addAnimation:theAnimation forKey:@"animatePosition"]; +} + + +// Override to allow orientations other than the default portrait orientation. +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { + // Return YES for supported orientations. + return UIInterfaceOrientationIsLandscape(interfaceOrientation); +} + +- (void)didReceiveMemoryWarning { + // Releases the view if it doesn't have a superview. + [super didReceiveMemoryWarning]; + + // Release any cached data, images, etc. that aren't in use. +} + +- (void)viewDidUnload { + [super viewDidUnload]; + // Release any retained subviews of the main view. + // e.g. self.myOutlet = nil; + self.creditsRoll = nil; +} + + +- (void)dealloc { + [super dealloc]; +} + +- (IBAction)back:(id)sender { + [self.navigationController popViewControllerAnimated:YES]; +} + +@end diff --git a/wolf3d/code/iphone/EAGLView.h b/wolf3d/code/iphone/EAGLView.h index dd2c39a..57734a0 100644 --- a/wolf3d/code/iphone/EAGLView.h +++ b/wolf3d/code/iphone/EAGLView.h @@ -1,6 +1,9 @@ /* - Copyright (C) 2009 Id Software, Inc. + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -41,20 +44,17 @@ Note that setting the view non-opaque will only work if the EAGL surface has an UITextField *textField; @private + EAGLContext *context; + /* The pixel dimensions of the backbuffer */ - GLint backingWidth; - GLint backingHeight; - - EAGLContext *context; + GLint framebufferWidth; + GLint framebufferHeight; /* OpenGL names for the renderbuffer and framebuffers used to render to this view */ - GLuint viewRenderbuffer, viewFramebuffer; + GLuint defaultFramebuffer, colorRenderbuffer; /* OpenGL name for the depth buffer that is attached to viewFramebuffer, if it exists (0 if it does not exist) */ GLuint depthRenderbuffer; - - NSTimer *animationTimer; - NSTimeInterval animationInterval; //gsh... an attempt at hacking the volume button #ifdef VOLUMEHACK @@ -66,8 +66,9 @@ Note that setting the view non-opaque will only work if the EAGL surface has an } -@property NSTimeInterval animationInterval; +@property (nonatomic, retain) EAGLContext *context; -- (void)drawView; +- (void)setFramebuffer; +- (BOOL)presentFramebuffer; @end diff --git a/wolf3d/code/iphone/EAGLView.m b/wolf3d/code/iphone/EAGLView.m index 7fde3ec..cd3f59f 100644 --- a/wolf3d/code/iphone/EAGLView.m +++ b/wolf3d/code/iphone/EAGLView.m @@ -1,11 +1,25 @@ -// -// EAGLView.m -// wolf3d -// -// Created by Cass Everitt on 2/20/09. -// Copyright Id Software 2009. All rights reserved. -// +/* + + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ #import @@ -16,8 +30,6 @@ #include "wolfiphone.h" - - //gsh //#define NOTIFYLISTEN //uncomment to receive notifications @@ -60,218 +72,235 @@ struct AVSystemControllerPrivate; @end AVSystemController *SharedAVSystemController; -EAGLView *eaglview; +EAGLView *eaglview = nil; // A class extension to declare private methods -@interface EAGLView () - -@property (nonatomic, retain) EAGLContext *context; -@property (nonatomic, assign) NSTimer *animationTimer; - -- (void) destroyFramebuffer; -- (void) swapBuffers; - +@interface EAGLView (PrivateMethods) +- (void)createFramebuffer; +- (void)deleteFramebuffer; @end - @implementation EAGLView -@synthesize context; -@synthesize animationTimer; -@synthesize animationInterval; - +@dynamic context; // You must implement this method + (Class)layerClass { return [CAEAGLLayer class]; } - //The GL view is stored in the nib file. When it's unarchived it's sent -initWithCoder: -- (id)initWithCoder:(NSCoder*)coder { - self = [super initWithCoder:coder]; +- (id)initWithFrame:(CGRect)aRect { + self = [super initWithFrame:aRect]; eaglview = self; + + if ( self ) { + [self setMultipleTouchEnabled:YES]; - // Get the layer - CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer; + // Support rendering at native resolution on devices with Retina displays. + if( [self respondsToSelector:@selector(contentScaleFactor)] ) { + self.contentScaleFactor = deviceScale; + } - eaglLayer.opaque = YES; - eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys: - - [NSNumber numberWithBool:NO], - kEAGLDrawablePropertyRetainedBacking, - - kEAGLColorFormatRGB565, - /* kEAGLColorFormatRGBA8, */ - kEAGLDrawablePropertyColorFormat, - - nil]; - - context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1]; - assert( context ); - - if ( ![EAGLContext setCurrentContext:context]) { - [self release]; - return nil; - } - self.multipleTouchEnabled = true; - - [EAGLContext setCurrentContext:context]; - - glGenFramebuffersOES(1, &viewFramebuffer); - glGenRenderbuffersOES(1, &viewRenderbuffer); - - glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer); - glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer); - [context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer]; - glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer); - - glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth); - glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight); - - glGenRenderbuffersOES(1, &depthRenderbuffer); - glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer); - glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, backingWidth, backingHeight); - glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer); - - if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES) { - NSLog(@"failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES)); - } - - glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer); - -#if 0 - // set swapinterval if possible - void *eglSwapInterval; - eglSwapInterval = dlsym( RTLD_DEFAULT, "eglSwapInterval" ); - if ( eglSwapInterval ) { - ((void(*)(int))eglSwapInterval)( 2 ); - } -#endif + // Get the layer + CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer; + + eaglLayer.opaque = TRUE; + eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys: + + [NSNumber numberWithBool:NO], + kEAGLDrawablePropertyRetainedBacking, + kEAGLColorFormatRGB565, + kEAGLDrawablePropertyColorFormat, + nil]; + + + + //self.multipleTouchEnabled = true; #ifdef VOLUMEHACK - //------------------- - // Volume Button Hack - //gsh - // Note: MediaPlayer framework required for this trick - //create a MPVolumeView to hack the volume button - CGRect frame = CGRectMake(0, -30, 180, 10); //put this thing offscreen - volumeView = [[[MPVolumeView alloc] initWithFrame:frame] autorelease]; - [volumeView sizeToFit]; - [self addSubview:volumeView]; - - // Find the volume view slider - for (UIView *view in [volumeView subviews]){ - if ([[[view class] description] isEqualToString:@"MPVolumeSlider"]) { - volumeViewSlider = (UISlider *)view; + //------------------- + // Volume Button Hack + //gsh + // Note: MediaPlayer framework required for this trick + //create a MPVolumeView to hack the volume button + CGRect frame = CGRectMake(0, -30, 180, 10); //put this thing offscreen + volumeView = [[[MPVolumeView alloc] initWithFrame:frame] autorelease]; + [volumeView sizeToFit]; + [self addSubview:volumeView]; + + // Find the volume view slider + for (UIView *view in [volumeView subviews]){ + if ([[[view class] description] isEqualToString:@"MPVolumeSlider"]) { + volumeViewSlider = (UISlider *)view; + } } - } - - //listen for volume changes - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(volumeListener:) - name:@"AVSystemController_SystemVolumeDidChangeNotification" - object:nil]; + + //listen for volume changes + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(volumeListener:) + name:@"AVSystemController_SystemVolumeDidChangeNotification" + object:nil]; //--------------------- #endif #ifdef NOTIFYLISTEN //gsh - //this is a general purpose listener - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationListener:) - name:nil - object:nil]; + //this is a general purpose listener + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationListener:) + name:nil + object:nil]; #endif - - // with swapinterval, we want to update as fast as possible - float interval = 1.0 / 30.0f; - self.animationTimer = [NSTimer scheduledTimerWithTimeInterval:interval - target:self - selector:@selector(drawView) - userInfo:nil repeats:YES]; - + } + return self; } -//gsh -- (void)viewDidLoad { - - Com_Printf("\n---------------\nviewDidLoad() called\n---------------\n\n"); -} - -- (void)drawView { - - [ (wolf3dAppDelegate *)[UIApplication sharedApplication].delegate restartAccelerometerIfNeeded]; - -#if 0 - //------------------ - // Volume button hack - { - if ( SharedAVSystemController ) { - float newVolume; - NSString *categoryName; - static float activeVolume = 0.9; - if ([SharedAVSystemController getActiveCategoryVolume:&newVolume andName:&categoryName]) { - if (activeVolume < newVolume) { - [SharedAVSystemController setActiveCategoryVolumeTo:activeVolume]; - Com_Printf( "Volume up: %i\n", Sys_Milliseconds() ); - } - } - } - } -#endif - -#ifdef VOLUMEHACK - //------------------ - // volume hack - - - //check for volume adjustments gsh - if ( menuState == IPM_CONTROLS) - { - if (lastFramesVolume != s_masterVolume->value) - { - lastFramesVolume = s_masterVolume->value; - [volumeViewSlider setValue:lastFramesVolume animated:NO]; - [volumeViewSlider _commitVolumeChange]; - } - } -#endif - - iphoneFrame(); // swapBuffers() will be called from here -} - - -- (void)swapBuffers { -// glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer); - loggedTimes[iphoneFrameNum&(MAX_LOGGED_TIMES-1)].beforeSwap = Sys_Milliseconds(); - [context presentRenderbuffer:GL_RENDERBUFFER_OES]; - loggedTimes[iphoneFrameNum&(MAX_LOGGED_TIMES-1)].afterSwap = Sys_Milliseconds(); -} - -- (void)layoutSubviews { - [self drawView]; -} - - - -- (void)destroyFramebuffer { - glDeleteFramebuffersOES(1, &viewFramebuffer); - viewFramebuffer = 0; - glDeleteRenderbuffersOES(1, &viewRenderbuffer); - viewRenderbuffer = 0; - glDeleteRenderbuffersOES(1, &depthRenderbuffer); - depthRenderbuffer = 0; -} - - -- (void)dealloc { - if ([EAGLContext currentContext] == context) { +- (void)setContext:(EAGLContext *)newContext +{ + if (context != newContext) + { + [self deleteFramebuffer]; + + [context release]; + context = [newContext retain]; + [EAGLContext setCurrentContext:nil]; } +} + +- (void)createFramebuffer +{ + if (context && !defaultFramebuffer) + { + [EAGLContext setCurrentContext:context]; + + // Create default framebuffer object. + glGenFramebuffersOES(1, &defaultFramebuffer); + glBindFramebufferOES(GL_FRAMEBUFFER_OES, defaultFramebuffer); + + // Create color render buffer and allocate backing store. + glGenRenderbuffersOES(1, &colorRenderbuffer); + glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer); + + [context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer *)self.layer]; + glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &framebufferWidth); + glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &framebufferHeight); + + glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, colorRenderbuffer); + + // Create the depth render buffer and allocate backing store. + glGenRenderbuffersOES(1, &depthRenderbuffer); + glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer); + glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, framebufferWidth, framebufferHeight); + + glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer); + + if (glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES) { + NSLog(@"Failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES)); + } + + // We can bind the color buffer here to avoid doing it every frame. + glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer); + } +} + +- (void)deleteFramebuffer +{ + if (context) + { + [EAGLContext setCurrentContext:context]; + + if (defaultFramebuffer) + { + glDeleteFramebuffersOES(1, &defaultFramebuffer); + defaultFramebuffer = 0; + } + + if (colorRenderbuffer) + { + glDeleteRenderbuffersOES(1, &colorRenderbuffer); + colorRenderbuffer = 0; + } + + if (depthRenderbuffer) + { + glDeleteFramebuffersOES(1, &depthRenderbuffer); + depthRenderbuffer = 0; + } + } +} + +- (void)setFramebuffer +{ + if (context) + { + [EAGLContext setCurrentContext:context]; + + if (!defaultFramebuffer) + [self createFramebuffer]; + + //glBindFramebufferOES(GL_FRAMEBUFFER_OES, defaultFramebuffer); + + //glViewport(0, 0, framebufferWidth, framebufferHeight); + } +} + +- (BOOL)presentFramebuffer +{ + BOOL success = FALSE; - [context release]; + if (context) + { + [EAGLContext setCurrentContext:context]; + + //glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer); + + if ( gl_config.framebuffer_discard ) { + const GLenum discards[] = {GL_DEPTH_ATTACHMENT_OES}; + glDiscardFramebufferEXT(GL_FRAMEBUFFER_OES,1,discards); + } + + + loggedTimes[iphoneFrameNum&(MAX_LOGGED_TIMES-1)].beforeSwap = Sys_Milliseconds(); + success = [context presentRenderbuffer:GL_RENDERBUFFER_OES]; + loggedTimes[iphoneFrameNum&(MAX_LOGGED_TIMES-1)].afterSwap = Sys_Milliseconds(); + } + + return success; +} + + +- (void)layoutSubviews { + //float widthRatio = ( self.bounds.size.width * deviceScale ) / REFERENCE_WIDTH; + //float heightRatio = ( self.bounds.size.height * deviceScale ) / REFERENCE_HEIGHT; + + [self deleteFramebuffer]; + + /* + if ( widthRatio < heightRatio ) { + screenScale = widthRatio; + } else { + screenScale = heightRatio; + } + + // Set the global width and height so the game code can access it. + // since the game runs in landscape, we must switch width and height. + viddef.width = self.bounds.size.width * deviceScale; + viddef.height = self.bounds.size.height * deviceScale; + */ + // Need to re-arrange the HUD now that the screen changed. + if ( controlScheme ) { + HudSetForScheme( controlScheme->value ); + } +} + + +- (void)dealloc { + [self deleteFramebuffer]; + [context release]; + [super dealloc]; } @@ -287,7 +316,7 @@ EAGLView *eaglview; NSSet *t = [event allTouches]; for (UITouch *myTouch in t) { - CGPoint touchLocation = [myTouch locationInView:nil]; + CGPoint touchLocation = [myTouch locationInView:self]; points[ 2 * touchCount + 0 ] = touchLocation.x; points[ 2 * touchCount + 1 ] = touchLocation.y; // ( h - 1 ) - touchLocation.y; @@ -434,10 +463,6 @@ void SysIPhoneSetConsoleTextField( const char * str) { eaglview->textField.text = [ NSString stringWithUTF8String: str ]; } -void SysIPhoneSwapBuffers() { - [eaglview swapBuffers]; -} - void SysIPhoneOpenURL( const char *url ) { Com_Printf( "OpenURL char *: %s\n", url ); @@ -445,14 +470,6 @@ void SysIPhoneOpenURL( const char *url ) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString: nss]]; } -void SysIPhoneSetUIKitOrientation( int isLandscapeRight ) { - if ( isLandscapeRight ) { - [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeRight; - } else { - [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeLeft; - } -} - void SysIPhoneLoadJPG( W8* jpegData, int jpegBytes, W8 **pic, W16 *width, W16 *height, W16 *bytes ) { CFDataRef data; int dataBytes = 0; diff --git a/wolf3d/code/iphone/EpisodeCell.xib b/wolf3d/code/iphone/EpisodeCell.xib new file mode 100644 index 0000000..cedbbab --- /dev/null +++ b/wolf3d/code/iphone/EpisodeCell.xib @@ -0,0 +1,698 @@ + + + + 1056 + 10K540 + 851 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 141 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 1298 + + YES + + + 1280 + + YES + + + -2147482332 + {{0, 2}, {328, 100}} + + 3 + NO + 2 + IBCocoaTouchFramework + + NSImage + highlight_bracket.png + + + + + 1316 + {{4, 6}, {319, 92}} + + NO + 2 + IBCocoaTouchFramework + + NSImage + episode_bracket.png + + + + + 1316 + {{13, 32}, {260, 3}} + + NO + 2 + IBCocoaTouchFramework + + NSImage + episode_divider.png + + + + + 1316 + {{12, 10}, {314, 34}} + + NO + YES + 7 + 1 + NO + 2 + IBCocoaTouchFramework + Episode Number + + POSITYPE-idSettler_v10.2 + 20 + 16 + + + 3 + MC42NjY2NjY2NjY3AA + + + 3 + MC4zMzMzMzMzMzMzAA + + 1 + 10 + + + + 1316 + {{12, 37}, {323, 41}} + + NO + YES + 9 + 2 + NO + 2 + IBCocoaTouchFramework + Episode Name + + POSITYPE-idSettler_v10.2 + 32 + 16 + + + 3 + MQA + + + 1 + NO + 10 + + + + 1316 + {{12, 64}, {323, 41}} + + NO + YES + 9 + 2 + NO + 2 + IBCocoaTouchFramework + + + + + 1 + NO + 10 + + + {336, 103} + + + 3 + MCAwAA + + NO + YES + 4 + YES + IBCocoaTouchFramework + + + {336, 103} + + + 1 + MSAxIDEAA + + 2 + IBCocoaTouchFramework + 1 + + 0 + MyIdentifier + + + + + YES + + + episodeCell + + + + 7 + + + + + YES + + 0 + + + + + + -1 + + + File's Owner + + + -2 + + + + + 2 + + + YES + + + + + + + + + + + 3 + + + + + 4 + + + + + 8 + + + + + 9 + + + + + 10 + + + + + 11 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 10.CustomClassName + 10.IBPluginDependency + 10.IBViewBoundsToFrameTransform + 11.IBPluginDependency + 11.IBViewBoundsToFrameTransform + 2.IBEditorWindowLastContentRect + 2.IBPluginDependency + 3.CustomClassName + 3.IBPluginDependency + 3.IBViewBoundsToFrameTransform + 4.CustomClassName + 4.IBPluginDependency + 4.IBViewBoundsToFrameTransform + 8.IBPluginDependency + 8.IBViewBoundsToFrameTransform + 9.IBPluginDependency + 9.IBViewBoundsToFrameTransform + + + YES + EpisodeViewController + UIResponder + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBoAAAwtgAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AQAAAABAAAAAA + + {{614, 707}, {672, 206}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCsAAAwjQAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUDgAABCHAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUJgAABCMAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AQAAAABAoAAAA + + + + + YES + + + YES + + + + + YES + + + YES + + + + 11 + + + + YES + + EpisodeViewController + UIViewController + + YES + + YES + back: + next: + setEpisode: + + + YES + id + id + id + + + + YES + + YES + back: + next: + setEpisode: + + + YES + + back: + id + + + next: + id + + + setEpisode: + id + + + + + YES + + YES + episodeCell + episodeList + + + YES + UITableViewCell + UITableView + + + + YES + + YES + episodeCell + episodeList + + + YES + + episodeCell + UITableViewCell + + + episodeList + UITableView + + + + + IBProjectSource + EpisodeViewController.h + + + + UIFontLabel + UILabel + + IBProjectSource + UIFontLabel.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIImageView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIImageView.h + + + + UILabel + UIView + + IBFrameworkSource + UIKit.framework/Headers/UILabel.h + + + + UIResponder + NSObject + + + + UIScrollView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIScrollView.h + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UITableView + UIScrollView + + IBFrameworkSource + UIKit.framework/Headers/UITableView.h + + + + UITableViewCell + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITableViewCell.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIPrintFormatter.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + wolf3d.xcodeproj + 3 + + YES + + YES + episode_bracket.png + episode_divider.png + highlight_bracket.png + + + YES + {606, 168} + {387, 3} + {623, 189} + + + 141 + + diff --git a/wolf3d/code/iphone/EpisodeView.xib b/wolf3d/code/iphone/EpisodeView.xib new file mode 100644 index 0000000..a1b52fa --- /dev/null +++ b/wolf3d/code/iphone/EpisodeView.xib @@ -0,0 +1,935 @@ + + + + 1056 + 10K549 + 851 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 141 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + YES + + + 274 + {480, 320} + + NO + YES + 1 + YES + IBCocoaTouchFramework + + NSImage + wolf_bg.png + + + + + 274 + {{25, 259}, {32, 32}} + + 1 + NO + IBCocoaTouchFramework + + NSImage + back_arrow.png + + + + + 274 + {{422, 259}, {32, 32}} + + 1 + NO + IBCocoaTouchFramework + + NSImage + next_arrow.png + + + + + 274 + {{24, 240}, {66, 29}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + BACK + + POSITYPE-idSettler_v10.2 + 18 + 16 + + + 3 + MQA + + + 1 + 10 + 5 + + + + 274 + {{421, 240}, {66, 29}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + NEXT + + + + 1 + 10 + 5 + + + + 274 + {{81, 8}, {128, 31}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Episode Select + + POSITYPE-idSettler_v10.2 + 24 + 16 + + + + 1 + 10 + 5 + + + + 274 + {{20, 231}, {52, 62}} + + NO + NO + 1 + IBCocoaTouchFramework + 0 + 0 + + Helvetica-Bold + 15 + 16 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + 3 + MC41AA + + + NSImage + button_highlight.png + + + + + 274 + {{416, 231}, {50, 62}} + + NO + NO + 1 + IBCocoaTouchFramework + 0 + 0 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + + + + 274 + {{220, 299}, {46, 24}} + + NO + NO + 1 + IBCocoaTouchFramework + 0 + 0 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + + NSImage + down_arrow.png + + + + + 274 + {{220, 11}, {46, 24}} + + NO + NO + 1 + IBCocoaTouchFramework + 0 + 0 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + + NSImage + up_arrow.png + + + + + 274 + {{79.5, 35}, {336, 260}} + + + 3 + MCAwAA + + YES + IBCocoaTouchFramework + YES + NO + 2 + 0 + YES + 103 + + + {480, 320} + + + 1 + MCAwIDAAA + + + 3 + + IBCocoaTouchFramework + + + + + YES + + + view + + + + 13 + + + + back: + + + 7 + + 36 + + + + episodeList + + + + 62 + + + + dataSource + + + + 63 + + + + delegate + + + + 64 + + + + next: + + + 7 + + 65 + + + + pageDown: + + + 7 + + 66 + + + + pageUp: + + + 7 + + 67 + + + + + YES + + 0 + + + + + + 1 + + + YES + + + + + + + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 31 + + + + + 32 + + + + + 33 + + + + + 35 + + + + + 28 + + + + + 49 + + + + + 51 + + + + + 53 + + + + + 54 + + + + + 55 + + + + + 61 + + + Episode List + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 28.IBViewBoundsToFrameTransform + 31.CustomClassName + 31.IBPluginDependency + 31.IBViewBoundsToFrameTransform + 32.CustomClassName + 32.IBPluginDependency + 32.IBViewBoundsToFrameTransform + 33.IBPluginDependency + 33.IBViewBoundsToFrameTransform + 35.IBPluginDependency + 35.IBViewBoundsToFrameTransform + 49.IBPluginDependency + 49.IBViewBoundsToFrameTransform + 51.IBPluginDependency + 51.IBViewBoundsToFrameTransform + 53.IBPluginDependency + 53.IBViewBoundsToFrameTransform + 54.CustomClassName + 54.IBPluginDependency + 54.IBViewBoundsToFrameTransform + 55.IBPluginDependency + 55.IBViewBoundsToFrameTransform + 61.IBPluginDependency + + + YES + EpisodeViewController + UIResponder + {{647, 827}, {480, 320}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAAAAAAAAw58AAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUIEAABDbQAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUK4AABBUAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBoAAAw2cAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCFAAAw5KAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUNcAABDlYAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDNgAAw5SAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUIUAABDg4AAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUIEAABDbQAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABD0oAAw2cAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + YES + + + YES + + + + + YES + + + YES + + + + 67 + + + + YES + + EpisodeViewController + UIViewController + + YES + + YES + back: + next: + pageDown: + pageUp: + setEpisode: + + + YES + id + id + id + id + id + + + + YES + + YES + back: + next: + pageDown: + pageUp: + setEpisode: + + + YES + + back: + id + + + next: + id + + + pageDown: + id + + + pageUp: + id + + + setEpisode: + id + + + + + YES + + YES + episodeCell + episodeList + + + YES + UITableViewCell + UITableView + + + + YES + + YES + episodeCell + episodeList + + + YES + + episodeCell + UITableViewCell + + + episodeList + UITableView + + + + + IBProjectSource + EpisodeViewController.h + + + + UIFontLabel + UILabel + + IBProjectSource + UIFontLabel.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIButton + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UIButton.h + + + + UIControl + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIControl.h + + + + UIImageView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIImageView.h + + + + UILabel + UIView + + IBFrameworkSource + UIKit.framework/Headers/UILabel.h + + + + UIResponder + NSObject + + + + UIScrollView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIScrollView.h + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UITableView + UIScrollView + + IBFrameworkSource + UIKit.framework/Headers/UITableView.h + + + + UITableViewCell + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITableViewCell.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIPrintFormatter.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + wolf3d.xcodeproj + 3 + + YES + + YES + back_arrow.png + button_highlight.png + down_arrow.png + next_arrow.png + up_arrow.png + wolf_bg.png + + + YES + {65, 63} + {4, 4} + {80, 36} + {65, 63} + {80, 36} + {480, 320} + + + 141 + + diff --git a/wolf3d/code/iphone/EpisodeViewController.h b/wolf3d/code/iphone/EpisodeViewController.h new file mode 100644 index 0000000..6b081b6 --- /dev/null +++ b/wolf3d/code/iphone/EpisodeViewController.h @@ -0,0 +1,42 @@ +/* + + Copyright (C) 2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import + + +@interface EpisodeViewController : UIViewController { + IBOutlet UITableView *episodeList; + + UITableViewCell* episodeCell; +} + +@property (nonatomic, assign) IBOutlet UITableViewCell *episodeCell; + +- (IBAction)setEpisode:(id)sender; +- (IBAction)back:(id)sender; +- (IBAction)next:(id)sender; + +- (IBAction)pageDown:(id)sender; +- (IBAction)pageUp:(id)sender; + +@end diff --git a/wolf3d/code/iphone/EpisodeViewController.m b/wolf3d/code/iphone/EpisodeViewController.m new file mode 100644 index 0000000..149ba66 --- /dev/null +++ b/wolf3d/code/iphone/EpisodeViewController.m @@ -0,0 +1,355 @@ +/* + + Copyright (C) 2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import "EpisodeViewController.h" +#import "LevelSelectViewController.h" + +#import "wolfiphone.h" + +#define TOTAL_EPISODES 10 + +static const char * const EpisodeNames[TOTAL_EPISODES][2] = { + { "Episode 1", "Escape from Wolfenstein" }, + { "Episode 2", "Operation: Eisenfaust" }, + { "Episode 3", "Die, Fuhrer, Die!" }, + { "Episode 4", "A Dark Secret" }, + { "Episode 5", "Trail of the Madman" }, + { "Episode 6", "Confrontation" }, + { "Spear of Destiny", "Tunnels" }, + { "Spear of Destiny", "Dungeons" }, + { "Spear of Destiny", "Castle" }, + { "Spear of Destiny", "Ramparts" } +}; + + +// A class extension to declare private methods +@interface EpisodeViewController (PrivateMethods) +- (void)startLevelSelect; +- (void)setCellSelected:(BOOL)selected atIndexPath:(NSIndexPath*)indexPath; +- (void)setCellSelected:(BOOL)selected cell:(UITableViewCell*)cell; +- (void)handleSelectionAtIndexPath:(NSIndexPath*)indexPath; +- (void)scrollToRow:(int)row; +@end + +@interface EpisodeViewController () + +@property (nonatomic, retain) UITableView *episodeList; + +@end + +@implementation EpisodeViewController + +@synthesize episodeList; +@synthesize episodeCell; + +// The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. +/* +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization. + } + return self; +} +*/ + +/* +// Implement loadView to create a view hierarchy programmatically, without using a nib. +- (void)loadView { +} +*/ + + +// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. +- (void)viewDidLoad { + [super viewDidLoad]; + + // TODO: Select the current episode. Haven't yet figured out a good way to get the table + // view to load with a default row selected, so for now always select episode 1. + int initialEpisode = 0; + + NSIndexPath *initialPath = [NSIndexPath indexPathForRow:initialEpisode inSection:0]; + + [self.episodeList selectRowAtIndexPath:initialPath animated:YES scrollPosition:UITableViewScrollPositionNone]; + [self handleSelectionAtIndexPath:initialPath]; +} + + + +// Override to allow orientations other than the default portrait orientation. +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { + // Return YES for supported orientations. + return UIInterfaceOrientationIsLandscape(interfaceOrientation); +} + + +- (void)didReceiveMemoryWarning { + // Releases the view if it doesn't have a superview. + [super didReceiveMemoryWarning]; + + // Release any cached data, images, etc. that aren't in use. +} + +- (void)viewDidUnload { + [super viewDidUnload]; + // Release any retained subviews of the main view. + // e.g. self.myOutlet = nil; + + [self.episodeList release]; + self.episodeList = nil; +} + + +- (void)dealloc { + [super dealloc]; +} + +// Sets the current episode with the sender's tag. IF the user selects a platinum episode but +// only has the lite version of the app, prompt him to buy the platinum version. +- (IBAction)setEpisode:(id)sender { + NSInteger requestedEpisode = [sender tag]; + + if ( SysIPhoneGetContentVersion() == CONTENT_PLATINUM || requestedEpisode == 0 ) { + Cvar_SetValue( episode->name, [sender tag] ); + [self startLevelSelect]; + } else { + // Prompt user to buy platinum version + iphonePromptToBuyPlatinum(); + } +} + +- (IBAction)back:(id)sender { + [self.navigationController popViewControllerAnimated:YES]; +} + +- (IBAction)next:(id)sender { + LevelSelectViewController *lsc = [[LevelSelectViewController alloc] initWithNibName:@"LevelSelectView" bundle:nil]; + [self.navigationController pushViewController:lsc animated:YES]; + [lsc release]; +} + + +- (IBAction)pageDown:(id)sender { + // If the user taps the page down button, we want to scroll the table view so that the first + // non-visible row becomes visible. To do this, we can get the array of visible index paths, + // find the maximum row within the array, and scroll to the row just after that. + + NSArray* visibleIndexPaths = [self.episodeList indexPathsForVisibleRows]; + + int maxRow = 0; + + for ( NSIndexPath* path in visibleIndexPaths ) { + maxRow = maxRow < path.row ? path.row: maxRow; + } + + const int rowToMakeVisible = maxRow + 1; + + [self scrollToRow:rowToMakeVisible]; + +} + + +- (IBAction)pageUp:(id)sender { + + // If the user taps the page up button, we want to scroll the table view so that the first + // non-visible row becomes visible. To do this, we can get the array of visible index paths, + // find the minimum row within the array, and scroll to the row just before that. + + NSArray* visibleIndexPaths = [self.episodeList indexPathsForVisibleRows]; + + int minRow = TOTAL_EPISODES - 1; + + for ( NSIndexPath* path in visibleIndexPaths ) { + minRow = minRow < path.row ? minRow: path.row; + } + + const int rowToMakeVisible = minRow - 1; + + [self scrollToRow:rowToMakeVisible]; + +} + +- (void)scrollToRow:(int)row { + const int clampedRowMax = row < TOTAL_EPISODES? row: TOTAL_EPISODES-1; + const int clampedRow = clampedRowMax < 0? 0: clampedRowMax; + + NSIndexPath* pathToMakeVisible = [NSIndexPath indexPathForRow:clampedRow inSection:0]; + + [self.episodeList scrollToRowAtIndexPath:pathToMakeVisible atScrollPosition:UITableViewScrollPositionNone animated:YES]; +} + +- (void)startLevelSelect { + +} + + + + + + +/* +======================== + +UITableView interface + +======================== +*/ + +- (void)handleSelectionAtIndexPath:(NSIndexPath*)indexPath { + + // Prompt for In-App Purchase when the user selects a level that is not currently available. + if ( SysIPhoneGetContentVersion() == CONTENT_LITE ) { + if ( indexPath.row > 0 ) { + iphonePromptToBuyPlatinum(); + return; + } + } + + Cvar_SetValue( episode->name, indexPath.row ); + + [self setCellSelected:YES atIndexPath:indexPath]; + + /* + int episodeIndex = episode->value; + int levelIndex = indexPath.row; + + + + + realEpisode = episodeIndex; + realMap = levelIndex; + + if ( episodeIndex >= NUM_ORIGINAL_EPISODES ) { + switch (episodeIndex) + { + case 6: + if (levelIndex == 5) { + realEpisode = 7; + realMap = 8; + } + break; + case 7: + realEpisode = 6; + realMap += 5; + break; + case 8: + realEpisode = 7; + if (levelIndex == 6) + realMap = 9; + break; + case 9: + if ( levelIndex == 0) { realEpisode = 7; realMap = 6; } + if ( levelIndex == 1) { realEpisode = 7; realMap = 7; } + if ( levelIndex == 2) { realEpisode = 8; realMap = 0; } + break; + default: + break; + } + } + */ +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return TOTAL_EPISODES; +} + +static CGRect maximumNameLabelFrame = { { 0.0, 0.0 }, { 0.0, 0.0 } }; + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString *MyIdentifier = @"MyIdentifier"; + UITableViewCell *cell = (UITableViewCell*)[self.episodeList dequeueReusableCellWithIdentifier:MyIdentifier]; + + if (cell == nil) { + //cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease]; + [[NSBundle mainBundle] loadNibNamed:@"EpisodeCell" owner:self options:nil]; + + if ( episodeCell == nil ) { + // Couldn't create from nib file, load a default cell. + cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease]; + } else { + cell = episodeCell; + self.episodeCell = nil; + + // Save the good label size here before it gets modified by the code below. + UILabel *episodeNameLabel; + episodeNameLabel = (UILabel *)[cell viewWithTag:2]; + + maximumNameLabelFrame = episodeNameLabel.frame; + } + } + + cell.selectionStyle = UITableViewCellSelectionStyleNone; + + BOOL isCellSelected = ( episode->value == indexPath.row)? YES: NO; + + [self setCellSelected:isCellSelected cell:cell]; + + UILabel *episodeNumberLabel; + episodeNumberLabel = (UILabel *)[cell viewWithTag:1]; + episodeNumberLabel.text = [NSString stringWithCString:EpisodeNames[indexPath.row][0] encoding:NSASCIIStringEncoding]; + + UILabel *episodeNameLabel; + episodeNameLabel = (UILabel *)[cell viewWithTag:2]; + NSString* episodeNameText = [NSString stringWithCString:EpisodeNames[indexPath.row][1] encoding:NSASCIIStringEncoding]; + + CGSize expectedLabelSize = [episodeNameText sizeWithFont:episodeNameLabel.font + constrainedToSize:maximumNameLabelFrame.size + lineBreakMode:episodeNameLabel.lineBreakMode]; + + //adjust the label the the new height. + CGRect newFrame = maximumNameLabelFrame; + newFrame.size.height = expectedLabelSize.height; + episodeNameLabel.frame = newFrame; + + episodeNameLabel.text = episodeNameText; + + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + + [self handleSelectionAtIndexPath:indexPath]; +} + +- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { + [self setCellSelected:NO atIndexPath:indexPath]; +} + +- (void)setCellSelected:(BOOL)selected atIndexPath:(NSIndexPath*)indexPath { + // Get the cell that was selected. + UITableViewCell * cell = [episodeList cellForRowAtIndexPath:indexPath]; + + [self setCellSelected:selected cell:cell]; +} + +- (void)setCellSelected:(BOOL)selected cell:(UITableViewCell*)cell { + // Get the "selected" image + UIView * selectionFrame = [cell viewWithTag:3]; + + // Show the selected image + selectionFrame.hidden = !selected; + + +} + +@end diff --git a/wolf3d/code/iphone/Info.plist b/wolf3d/code/iphone/Info.plist index 1835ef8..87d0c63 100644 --- a/wolf3d/code/iphone/Info.plist +++ b/wolf3d/code/iphone/Info.plist @@ -2,16 +2,18 @@ - - CFBundleDevelopmentRegion English CFBundleDisplayName - ${PRODUCT_NAME}+ + Wolf 3D CFBundleExecutable ${EXECUTABLE_NAME} - CFBundleIconFile - ${PRODUCT_NAME}_icon.png + CFBundleIconFiles + + WOLF_57 + WOLF_114 + WOLF_72 + CFBundleIdentifier com.idsoftware.${PRODUCT_NAME:identifier} CFBundleInfoDictionaryVersion @@ -20,30 +22,33 @@ ${PRODUCT_NAME} CFBundlePackageType APPL + CFBundleShortVersionString + CFBundleSignature ???? - CFBundleURLTypes - - - CFBundleURLName - com.idsoftware.wolf3dp - CFBundleURLSchemes - - wolf3dp - - - CFBundleVersion - 1.2 + 2.1 LSRequiresIPhoneOS - NSMainNibFile - MainWindow + UIAppFonts + + POSITYPE-idSettler10v2.otf + UIInterfaceOrientation UIInterfaceOrientationLandscapeLeft UIPrerenderedIcon UIStatusBarHidden + UISupportedInterfaceOrientations + + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationPortrait + diff --git a/wolf3d/code/iphone/LegalView.xib b/wolf3d/code/iphone/LegalView.xib new file mode 100644 index 0000000..b9545d6 --- /dev/null +++ b/wolf3d/code/iphone/LegalView.xib @@ -0,0 +1,657 @@ + + + + 1056 + 10K549 + 851 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 141 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + YES + + + 292 + {480, 320} + + NO + IBCocoaTouchFramework + + NSImage + credits_bg.png + + + + + 292 + {{245, 14}, {134, 52}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Legal + + POSITYPE-idSettler_v10.2 + 36 + 16 + + + 3 + MQA + + + + 1 + MCAwIDAAA + + {2, 2} + 1 + 10 + 1 + + + + 292 + {{20, 265}, {32, 32}} + + 1 + NO + IBCocoaTouchFramework + + NSImage + back_arrow.png + + + + + 292 + {{20, 243}, {66, 29}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + BACK + + POSITYPE-idSettler_v10.2 + 18 + 16 + + + + 1 + 10 + 5 + + + + 301 + {{6, 239}, {69, 69}} + + NO + NO + 1 + IBCocoaTouchFramework + 0 + 0 + + Helvetica-Bold + 15 + 16 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + 3 + MC41AA + + + NSImage + button_highlight.png + + + + + 292 + {{185, 59}, {255, 242}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Wolfenstein® 3D Classic Platinum© 2009-2011 id Software LLC, a ZeniMax Media company. Wolfenstein, id, id Software, id Tech and related logos are registered trademarks or trademarks of id Software LLC in the U.S. and/or other countries. Bethesda, Bethesda Softworks, ZeniMax and related logos are registered trademarks or trademarks of ZeniMax Media Inc. in the U.S. and/or other countries. All Rights Reserved. + + POSITYPE-idSettler_v10.2 + 14 + 16 + + + 1 + MSAxIDEAA + + 1 + + + + + 1 + 10 + 12 + 1 + 0 + + + + 292 + {{163, 69}, {298, 7}} + + NO + IBCocoaTouchFramework + + NSImage + settings_divider.png + + + + {480, 320} + + + 3 + MAA + + + 3 + + IBCocoaTouchFramework + + + + + YES + + + view + + + + 3 + + + + back: + + + 7 + + 12 + + + + + YES + + 0 + + + + + + 1 + + + YES + + + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 4 + + + + + 7 + + + + + 10 + + + + + 11 + + + + + 9 + + + + + 18 + + + + + 19 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 10.IBPluginDependency + 10.IBViewBoundsToFrameTransform + 11.CustomClassName + 11.IBPluginDependency + 11.IBViewBoundsToFrameTransform + 18.IBPluginDependency + 19.IBPluginDependency + 4.CustomClassName + 4.IBPluginDependency + 4.IBViewBoundsToFrameTransform + 7.IBPluginDependency + 7.IBViewBoundsToFrameTransform + 9.IBPluginDependency + 9.IBViewBoundsToFrameTransform + + + YES + LegalViewController + UIResponder + {{369, 805}, {480, 320}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABChgAAw5EAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABChgAAw4SAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDLQAAwpQAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAAAAAAAAw58AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUDAAABDbwAAA + + + + + YES + + + YES + + + + + YES + + + YES + + + + 19 + + + + YES + + LegalViewController + UIViewController + + back: + id + + + back: + + back: + id + + + + IBProjectSource + LegalViewController.h + + + + UIFontLabel + UILabel + + IBProjectSource + UIFontLabel.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIButton + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UIButton.h + + + + UIControl + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIControl.h + + + + UIImageView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIImageView.h + + + + UILabel + UIView + + IBFrameworkSource + UIKit.framework/Headers/UILabel.h + + + + UIResponder + NSObject + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIPrintFormatter.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + wolf3d.xcodeproj + 3 + + YES + + YES + back_arrow.png + button_highlight.png + credits_bg.png + settings_divider.png + + + YES + {65, 63} + {4, 4} + {960, 640} + {597, 13} + + + 141 + + diff --git a/wolf3d/code/iphone/LegalViewController.h b/wolf3d/code/iphone/LegalViewController.h new file mode 100644 index 0000000..89e11d3 --- /dev/null +++ b/wolf3d/code/iphone/LegalViewController.h @@ -0,0 +1,32 @@ +/* + + Copyright (C) 2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ +#import + + +@interface LegalViewController : UIViewController { + +} + +- (IBAction)back:(id)sender; + +@end diff --git a/wolf3d/code/iphone/LegalViewController.m b/wolf3d/code/iphone/LegalViewController.m new file mode 100644 index 0000000..4d27604 --- /dev/null +++ b/wolf3d/code/iphone/LegalViewController.m @@ -0,0 +1,82 @@ +/* + + Copyright (C) 2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import "LegalViewController.h" + + +@implementation LegalViewController + +// The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. +/* +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization. + } + return self; +} +*/ + +/* +// Implement loadView to create a view hierarchy programmatically, without using a nib. +- (void)loadView { +} +*/ + +/* +// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. +- (void)viewDidLoad { + [super viewDidLoad]; +} +*/ + +// Override to allow orientations other than the default portrait orientation. +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { + // Return YES for supported orientations. + return UIInterfaceOrientationIsLandscape(interfaceOrientation); +} + + +- (void)didReceiveMemoryWarning { + // Releases the view if it doesn't have a superview. + [super didReceiveMemoryWarning]; + + // Release any cached data, images, etc. that aren't in use. +} + +- (void)viewDidUnload { + [super viewDidUnload]; + // Release any retained subviews of the main view. + // e.g. self.myOutlet = nil; +} + + +- (void)dealloc { + [super dealloc]; +} + +- (IBAction)back:(id)sender { + [self.navigationController popViewControllerAnimated:YES]; +} + +@end diff --git a/wolf3d/code/iphone/LevelSelectView.xib b/wolf3d/code/iphone/LevelSelectView.xib new file mode 100644 index 0000000..01cfd72 --- /dev/null +++ b/wolf3d/code/iphone/LevelSelectView.xib @@ -0,0 +1,976 @@ + + + + 1056 + 10K549 + 851 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 141 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + YES + + + 256 + {480, 320} + + NO + YES + 1 + YES + IBCocoaTouchFramework + + NSImage + episode_bg.png + + + + + 292 + {{32, 260}, {32, 32}} + + 1 + NO + IBCocoaTouchFramework + + NSImage + back_arrow.png + + + + + 292 + {{421, 260}, {32, 32}} + + 1 + NO + IBCocoaTouchFramework + + NSImage + next_arrow.png + + + + + 292 + {{31, 237}, {66, 29}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + BACK + + POSITYPE-idSettler_v10.2 + 18 + 16 + + + 3 + MQA + + + 1 + 10 + 5 + + + + 292 + {{420, 237}, {66, 29}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + PLAY + + + + 1 + 10 + 5 + + + + 292 + {{92, 13}, {102, 29}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + MISSION + + POSITYPE-idSettler_v10.2 + 24 + 16 + + + + 1 + 10 + + + + 301 + {{23, 238}, {52, 56}} + + + 3 + MC42NjY2NjY2NjY3IDAAA + + NO + NO + 1 + IBCocoaTouchFramework + 0 + 0 + + Helvetica-Bold + 15 + 16 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + 3 + MC41AA + + + NSImage + button_highlight.png + + + + + 301 + {{412, 238}, {52, 56}} + + NO + NO + 1 + IBCocoaTouchFramework + 0 + 0 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + + + + 274 + {{92, 42}, {297, 246}} + + + 3 + MCAwAA + + YES + IBCocoaTouchFramework + YES + NO + 2 + 0 + YES + 38 + + + + 274 + {{217, 296}, {46, 24}} + + NO + NO + 1 + IBCocoaTouchFramework + 0 + 0 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + + NSImage + down_arrow.png + + + + + 274 + {{217, 8}, {46, 24}} + + NO + NO + 1 + IBCocoaTouchFramework + 0 + 0 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + + NSImage + up_arrow.png + + + + {480, 320} + + + + 3 + + IBCocoaTouchFramework + + + + + YES + + + view + + + + 4 + + + + next: + + + 7 + + 24 + + + + back: + + + 7 + + 25 + + + + dataSource + + + + 35 + + + + delegate + + + + 36 + + + + missionList + + + + 37 + + + + pageDown: + + + 7 + + 56 + + + + pageUp: + + + 7 + + 57 + + + + + YES + + 0 + + + + + + 1 + + + YES + + + + + + + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 13 + + + + + 14 + + + + + 15 + + + + + 16 + + + + + 20 + + + + + 21 + + + + + 22 + + + + + 23 + + + + + 34 + + + Mission List + + + 54 + + + + + 55 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 1.IBUserGuides + 14.CustomClassName + 14.IBPluginDependency + 14.IBViewBoundsToFrameTransform + 15.CustomClassName + 15.IBPluginDependency + 15.IBViewBoundsToFrameTransform + 16.CustomClassName + 16.IBPluginDependency + 16.IBViewBoundsToFrameTransform + 20.IBPluginDependency + 20.IBViewBoundsToFrameTransform + 21.IBPluginDependency + 21.IBViewBoundsToFrameTransform + 22.IBPluginDependency + 22.IBViewBoundsToFrameTransform + 23.IBPluginDependency + 23.IBViewBoundsToFrameTransform + 34.IBPluginDependency + 54.IBPluginDependency + 54.IBViewBoundsToFrameTransform + 55.IBPluginDependency + 55.IBViewBoundsToFrameTransform + + + YES + LevelSelectViewController + UIResponder + {{299, 832}, {480, 320}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + YES + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUIEAABDbQAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUK4AABBUAAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCuAAAw4QAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBuAAAw5GAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUIUAABDg4AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDzgAAw5GAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUPSgABDg4AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUNhAABDmAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUNhAABBgAAAA + + + + + YES + + + YES + + + + + YES + + + YES + + + + 57 + + + + YES + + LevelSelectViewController + UIViewController + + YES + + YES + back: + next: + pageDown: + pageUp: + selectDifficulty1: + selectDifficulty2: + selectDifficulty3: + selectDifficulty4: + + + YES + id + id + id + id + id + id + id + id + + + + YES + + YES + back: + next: + pageDown: + pageUp: + selectDifficulty1: + selectDifficulty2: + selectDifficulty3: + selectDifficulty4: + + + YES + + back: + id + + + next: + id + + + pageDown: + id + + + pageUp: + id + + + selectDifficulty1: + id + + + selectDifficulty2: + id + + + selectDifficulty3: + id + + + selectDifficulty4: + id + + + + + YES + + YES + difficultyBox + difficultyText1 + difficultyText2 + difficultyText3 + difficultyText4 + missionList + + + YES + UIView + UIView + UIView + UIView + UIView + UITableView + + + + YES + + YES + difficultyBox + difficultyText1 + difficultyText2 + difficultyText3 + difficultyText4 + missionList + + + YES + + difficultyBox + UIView + + + difficultyText1 + UIView + + + difficultyText2 + UIView + + + difficultyText3 + UIView + + + difficultyText4 + UIView + + + missionList + UITableView + + + + + IBProjectSource + LevelSelectViewController.h + + + + UIFontLabel + UILabel + + IBProjectSource + UIFontLabel.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIButton + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UIButton.h + + + + UIControl + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIControl.h + + + + UIImageView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIImageView.h + + + + UILabel + UIView + + IBFrameworkSource + UIKit.framework/Headers/UILabel.h + + + + UIResponder + NSObject + + + + UIScrollView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIScrollView.h + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UITableView + UIScrollView + + IBFrameworkSource + UIKit.framework/Headers/UITableView.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIPrintFormatter.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + wolf3d.xcodeproj + 3 + + YES + + YES + back_arrow.png + button_highlight.png + down_arrow.png + episode_bg.png + next_arrow.png + up_arrow.png + + + YES + {65, 63} + {4, 4} + {80, 36} + {480, 320} + {65, 63} + {80, 36} + + + 141 + + diff --git a/wolf3d/code/iphone/LevelSelectViewController.h b/wolf3d/code/iphone/LevelSelectViewController.h new file mode 100644 index 0000000..c9ee4e4 --- /dev/null +++ b/wolf3d/code/iphone/LevelSelectViewController.h @@ -0,0 +1,49 @@ +/* + + Copyright (C) 2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import + +// This object manages the level selection screen. The actual level objects are presented in +// a UITableView, so this controller adopts the protocols for being the delegate and data source +// for the table. +@interface LevelSelectViewController : + UIViewController { + +@private + IBOutlet UITableView *missionList; + + int realEpisode; + int realMap; + +} + +- (IBAction)back:(id)sender; +- (IBAction)next:(id)sender; + +- (void)handleSelectionAtIndexPath:(NSIndexPath*)indexPath; + +- (IBAction)pageUp:(id)sender; +- (IBAction)pageDown:(id)sender; + + +@end diff --git a/wolf3d/code/iphone/LevelSelectViewController.m b/wolf3d/code/iphone/LevelSelectViewController.m new file mode 100644 index 0000000..8f8b07a --- /dev/null +++ b/wolf3d/code/iphone/LevelSelectViewController.m @@ -0,0 +1,314 @@ +/* + + Copyright (C) 2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import "LevelSelectViewController.h" +#import "wolf3dAppDelegate.h" +#import "wolfiphone.h" +#import "MissionTableViewCell.h" +#import "UITableViewScrolling.h" + +#define NUM_ORIGINAL_EPISODES 6 +#define NUM_SPEAR_EPISODES 4 + +#define MAX_SPEAR_MAPS_PER_EPISODE 7 + +extern int returnButtonFrameNum; + + +static int numLevelsTable[] = { + 10, 10, 10, 10, 10, 10, // All six classic episodes have 10 levels + // Spear of Destiny episodes + 6, // Tunnels + 5, // Dungeon + 7, // Castle + 3 }; // Ramparts + + +// Private properties and methods +@interface LevelSelectViewController () + +@property (nonatomic, retain) UITableView *missionList; + +@end + +@implementation LevelSelectViewController + +@synthesize missionList; + +// The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. +/* +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization. + } + return self; +} +*/ + +/* +// Implement loadView to create a view hierarchy programmatically, without using a nib. +- (void)loadView { +} +*/ + + +// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. +- (void)viewDidLoad { + [super viewDidLoad]; + + [self.missionList reloadData]; + + // Select the first row by default + int levelToSelect = 0; + + if ( (int)episode->value == currentMap.episode ) { + levelToSelect = currentMap.map; + } + + NSIndexPath *ip=[NSIndexPath indexPathForRow:levelToSelect inSection:0]; + [self.missionList selectRowAtIndexPath:ip animated:YES scrollPosition:UITableViewScrollPositionNone]; + [self handleSelectionAtIndexPath:ip]; +} + + +/* +======================== + +UITableView interface + +======================== +*/ + +- (void)handleSelectionAtIndexPath:(NSIndexPath*)indexPath { + int episodeIndex = episode->value; + int levelIndex = indexPath.row; + + // Prompt for In-App Purchase when the user selects a level that is not currently available. + if ( SysIPhoneGetContentVersion() == CONTENT_LITE ) { + if ( levelIndex >= 3 ) { + iphonePromptToBuyPlatinum(); + return; + } + } + + + realEpisode = episodeIndex; + realMap = levelIndex; + + if ( episodeIndex >= NUM_ORIGINAL_EPISODES ) { + switch (episodeIndex) + { + case 6: + if (levelIndex == 5) { + realEpisode = 7; + realMap = 8; + } + break; + case 7: + realEpisode = 6; + realMap += 5; + break; + case 8: + realEpisode = 7; + if (levelIndex == 6) + realMap = 9; + break; + case 9: + if ( levelIndex == 0) { realEpisode = 7; realMap = 6; } + if ( levelIndex == 1) { realEpisode = 7; realMap = 7; } + if ( levelIndex == 2) { realEpisode = 8; realMap = 0; } + break; + default: + break; + } + } +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + // Return the number of levels based on the episode + int episodeIndex = episode->value; + + + + return numLevelsTable[ episodeIndex ]; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString *MyIdentifier = @"MyIdentifier"; + MissionTableViewCell *cell = (MissionTableViewCell*)[self.missionList dequeueReusableCellWithIdentifier:MyIdentifier]; + if (cell == nil) { + cell = [[[MissionTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease]; + } + + // Cell configuration + cell.selectionStyle = UITableViewCellSelectionStyleNone; + + // Cell text configuration + NSString* levelName = [NSString stringWithFormat:@"Level %d", indexPath.row + 1 ]; + + int episodeIndex = episode->value; + int levelIndex = indexPath.row; + + if ( episodeIndex < NUM_ORIGINAL_EPISODES ) { + // Wolfenstein episodes are the first six, and they all follow the pattern of 8 levels, + // one boss level, and one secret level. + if ( levelIndex == 8 ) { + levelName = @"Boss"; + } else if ( levelIndex == 9 ) { + levelName = @"Secret"; + } + } else { + // These are the Spear of Destiny levels. + + // Level name lookup + static const char* const spearLevelNameTable[ NUM_SPEAR_EPISODES ][ MAX_SPEAR_MAPS_PER_EPISODE ] = { + { "Level 1", "Level 2", "Level 3", "Level 4", "Boss", "Secret", NULL }, + { "Level 1", "Level 2", "Level 3", "Level 4", "Boss", NULL, NULL }, + { "Level 1", "Level 2", "Level 3", "Level 4", "Level 5", "Boss", "Secret" }, + { "Ramparts", "Death Knight", "Dungeon Dimension", NULL, NULL, NULL, NULL } }; + + const char * spearLevelName = ""; + + int spearEpisode = episodeIndex - NUM_ORIGINAL_EPISODES; + + if ( 0 <= spearEpisode && spearEpisode < NUM_SPEAR_EPISODES ) { + spearLevelName = spearLevelNameTable[ spearEpisode ][ levelIndex ]; + } + + levelName = [NSString stringWithCString:spearLevelName encoding:NSASCIIStringEncoding ]; + } + + cell.textLabel.text = levelName; + + cell.textLabel.textColor = [UIColor lightGrayColor]; + cell.textLabel.highlightedTextColor = [UIColor colorWithRed:98.0/255.0 green:149.0/255.0 blue:212.0/255.0 alpha:1.0]; + + return cell; +} + +- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell + forRowAtIndexPath:(NSIndexPath *)indexPath { + + int fontSize = 32; + + if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ) { + fontSize = 48; + } + + cell.textLabel.font = [UIFont fontWithName:@"POSITYPE idSettler v10.2" + size:fontSize]; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + + [self handleSelectionAtIndexPath:indexPath]; +} + +// Override to allow orientations other than the default portrait orientation. +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { + // Return YES for supported orientations. + return UIInterfaceOrientationIsLandscape(interfaceOrientation); +} + + +- (void)didReceiveMemoryWarning { + // Releases the view if it doesn't have a superview. + [super didReceiveMemoryWarning]; + + // Release any cached data, images, etc. that aren't in use. +} + +- (void)viewDidUnload { + [super viewDidUnload]; + // Release any retained subviews of the main view. + // e.g. self.myOutlet = nil; + + self.missionList = nil; + +} + + +- (void)dealloc { + [super dealloc]; +} + + +- (IBAction)next:(id)sender { + + int levelNum = realEpisode*10+realMap; + int ch = currentMap.mapFlags[ (int)skill->value ][levelNum]; + + // don't let them go to the secret level unless they earned it + if ( (int)episode->value >= NUM_ORIGINAL_EPISODES ) { + if ( (levelNum == 78 || levelNum == 79) && !( ch & MF_TRIED ) ) { + return; + } + } else { + if ( realMap == 9 && !( ch & MF_TRIED ) ) { + return; + } + } + + wolf3dAppDelegate* app = (wolf3dAppDelegate*)[[UIApplication sharedApplication] delegate]; + + [app stopMenuMusic]; + + [app showOpenGL]; + + + PL_NewGame( &Player ); + iphonePreloadBeforePlay(); + + int clampedSkill = skill->value; + if ( clampedSkill < 0 ) { + clampedSkill = 0; + } + if ( clampedSkill > 3 ) { + clampedSkill = 3; + } + + iphoneStartMap( realEpisode, realMap, clampedSkill ); + iphoneFrameNum = 0; + returnButtonFrameNum = 100; + + Sound_StartBGTrack( levelData.musicName, levelData.musicName); +} + +- (IBAction)back:(id)sender { + [self.navigationController popViewControllerAnimated:YES]; +} + +- (IBAction)pageDown:(id)sender { + UITableViewScrollingPageDown( self.missionList, numLevelsTable[(int)episode->value] ); +} + + +- (IBAction)pageUp:(id)sender { + UITableViewScrollingPageUp( self.missionList, numLevelsTable[(int)episode->value] ); +} + + +@end + + diff --git a/wolf3d/code/iphone/MainMenuView.xib b/wolf3d/code/iphone/MainMenuView.xib new file mode 100644 index 0000000..c90d0ca --- /dev/null +++ b/wolf3d/code/iphone/MainMenuView.xib @@ -0,0 +1,1034 @@ + + + + 800 + 10K540 + 851 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 141 + + + + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 1298 + + + + 1298 + {480, 320} + + + YES + 1 + YES + 2 + IBCocoaTouchFramework + + NSImage + main_bg.png + + + + + 1343 + {{291, 243}, {157, 50}} + + NO + 2 + IBCocoaTouchFramework + 0 + 0 + + POSITYPE-idSettler_v10.2 + 42 + 16 + + {2, 2} + Resume + + 3 + MC4zMzMzMzMzMzMzAA + + + 3 + MQA + + + 1 + MCAwIDAAA + + + + + 1343 + {{40, 98}, {187, 50}} + + + NO + 2 + IBCocoaTouchFramework + 0 + + {2, 2} + New Game + + + + + + + 1343 + {{48, 147}, {152, 50}} + + + NO + 2 + IBCocoaTouchFramework + 0 + + {2, 2} + Settings + + + + + + + 1343 + {{63, 194}, {110, 50}} + + + NO + 2 + IBCocoaTouchFramework + 0 + + {2, 2} + About + + + + + + + -2147482305 + {{48, 147}, {134, 50}} + + NO + 2 + IBCocoaTouchFramework + 0 + + {2, 2} + Legal + + + + + + + -2147482305 + {{40, 98}, {134, 50}} + + NO + 2 + IBCocoaTouchFramework + 0 + + {2, 2} + Credits + + + + + + + -2147482305 + {{40, 98}, {181, 50}} + + NO + 2 + IBCocoaTouchFramework + 0 + + {2, 2} + id Games + + + + + + + -2147482305 + {{48, 147}, {211, 50}} + + NO + 2 + IBCocoaTouchFramework + 0 + + {2, 2} + id Software + + + + + + + -2147482305 + {{63, 194}, {134, 50}} + + NO + 2 + IBCocoaTouchFramework + 0 + + {2, 2} + Trivia + + + + + + + -2147482305 + {{74, 243}, {134, 50}} + + NO + 2 + IBCocoaTouchFramework + 0 + + {2, 2} + Back + + + + + + + 1343 + {{74, 243}, {120, 50}} + + + NO + 2 + IBCocoaTouchFramework + 0 + + {2, 2} + Extras + + + + + + + 1316 + {{425, 245}, {30, 30}} + + NO + 2 + IBCocoaTouchFramework + + NSImage + star_icon.png + + + + {480, 320} + + + + 3 + MAA + + + 3 + + 2 + IBCocoaTouchFramework + + + + + + + view + + + + 3 + + + + resume: + + + 7 + + 9 + + + + newGame: + + + 7 + + 10 + + + + settings: + + + 7 + + 11 + + + + about: + + + 7 + + 12 + + + + extras: + + + 7 + + 13 + + + + legal: + + + 7 + + 34 + + + + aboutButton + + + + 35 + + + + extrasButton + + + + 37 + + + + legalButton + + + + 38 + + + + newGameButton + + + + 39 + + + + resumeButton + + + + 40 + + + + settingsButton + + + + 41 + + + + backButton + + + + 44 + + + + back: + + + 7 + + 45 + + + + creditsButton + + + + 50 + + + + credits: + + + 7 + + 51 + + + + idGamesButton + + + + 58 + + + + idSoftwareButton + + + + 59 + + + + triviaButton + + + + 60 + + + + idGames: + + + 7 + + 61 + + + + idSoftware: + + + 7 + + 62 + + + + trivia: + + + 7 + + 63 + + + + resumeStar + + + + 65 + + + + + + 0 + + + + + + 1 + + + + + + + + + + + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 8 + + + + + 16 + + + + + 32 + + + + + 42 + + + + + 47 + + + + + 52 + + + + + 54 + + + + + 56 + + + + + 64 + + + + + + + MainMenuViewController + UIResponder + {{440, 404}, {960, 640}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAADDcAAAwx4AAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUJAAABDEwAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDkYAAw5GAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDgYAAwxkAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUIgAABCxAAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCIAAAwwkAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDagAAwrYAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDawAAwsIAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCVAAAw0gAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUI8AABDEwAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDHAAAwq4AAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUJYAABDQgAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUKSAABDbwAAA + + + + + + + 65 + + + + + MainMenuViewController + UIViewController + + id + id + id + id + id + id + id + id + id + id + id + id + + + + about: + id + + + back: + id + + + credits: + id + + + extras: + id + + + idGames: + id + + + idSoftware: + id + + + legal: + id + + + newGame: + id + + + oldNewGame: + id + + + resume: + id + + + settings: + id + + + trivia: + id + + + + UIButton + UIButton + UIButton + UIButton + UIButton + UIButton + UIButton + UIButton + UIButton + UIView + UIButton + UIButton + + + + aboutButton + UIButton + + + backButton + UIButton + + + creditsButton + UIButton + + + extrasButton + UIButton + + + idGamesButton + UIButton + + + idSoftwareButton + UIButton + + + legalButton + UIButton + + + newGameButton + UIButton + + + resumeButton + UIButton + + + resumeStar + UIView + + + settingsButton + UIButton + + + triviaButton + UIButton + + + + IBProjectSource + MainMenuViewController.h + + + + UIFontButton + UIButton + + IBProjectSource + UIFontButton.h + + + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIButton + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UIButton.h + + + + UIControl + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIControl.h + + + + UIImageView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIImageView.h + + + + UIResponder + NSObject + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIPrintFormatter.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + YES + wolf3d.xcodeproj + 3 + + {960, 640} + {41, 39} + + 141 + + diff --git a/wolf3d/code/iphone/MainMenuViewController.h b/wolf3d/code/iphone/MainMenuViewController.h new file mode 100644 index 0000000..fc430d4 --- /dev/null +++ b/wolf3d/code/iphone/MainMenuViewController.h @@ -0,0 +1,67 @@ +/* + + Copyright (C) 2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import + +@interface MainMenuViewController : UIViewController { + +@private + // Main menu + IBOutlet UIButton *resumeButton; + IBOutlet UIButton *newGameButton; + IBOutlet UIButton *settingsButton; + IBOutlet UIButton *aboutButton; + IBOutlet UIButton *extrasButton; + IBOutlet UIView* resumeStar; + + + // About menu + IBOutlet UIButton *creditsButton; + IBOutlet UIButton *legalButton; + + // Extras menu + IBOutlet UIButton *idGamesButton; + IBOutlet UIButton *idSoftwareButton; + IBOutlet UIButton *triviaButton; + + // Shared + IBOutlet UIButton *backButton; +} + +- (IBAction)resume:(id)sender; +- (IBAction)newGame:(id)sender; +- (IBAction)settings:(id)sender; +- (IBAction)about:(id)sender; +- (IBAction)extras:(id)sender; + +- (IBAction)credits:(id)sender; +- (IBAction)legal:(id)sender; +- (IBAction)back:(id)sender; + +- (IBAction)idGames:(id)sender; +- (IBAction)idSoftware:(id)sender; +- (IBAction)trivia:(id)sender; + +- (IBAction)oldNewGame:(id)sender; + +@end diff --git a/wolf3d/code/iphone/MainMenuViewController.m b/wolf3d/code/iphone/MainMenuViewController.m new file mode 100644 index 0000000..7251192 --- /dev/null +++ b/wolf3d/code/iphone/MainMenuViewController.m @@ -0,0 +1,192 @@ +/* + + Copyright (C) 2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import "MainMenuViewController.h" +#import "wolf3dAppDelegate.h" +#import "wolfiphone.h" + +#import "SkillViewController.h" +#import "CreditsViewController.h" +#import "LegalViewController.h" +#import "TriviaViewController.h" +#import "SettingsViewController.h" + +@interface MainMenuViewController () + + @property (nonatomic, retain) IBOutlet UIButton *resumeButton; + @property (nonatomic, retain) IBOutlet UIButton *newGameButton; + @property (nonatomic, retain) IBOutlet UIButton *settingsButton; + @property (nonatomic, retain) IBOutlet UIButton *aboutButton; + @property (nonatomic, retain) IBOutlet UIButton *extrasButton; + @property (nonatomic, retain) IBOutlet UIView *resumeStar; + + @property (nonatomic, retain) IBOutlet UIButton *creditsButton; + @property (nonatomic, retain) IBOutlet UIButton *legalButton; + + @property (nonatomic, retain) IBOutlet UIButton *idGamesButton; + @property (nonatomic, retain) IBOutlet UIButton *idSoftwareButton; + @property (nonatomic, retain) IBOutlet UIButton *triviaButton; + + @property (nonatomic, retain) IBOutlet UIButton *backButton; + + - (void) setMainHidden:(BOOL)hide; + - (void) setAboutHidden:(BOOL)hide; + - (void) setExtrasHidden:(BOOL)hide; + +@end + +@implementation MainMenuViewController + +@synthesize resumeButton, newGameButton, settingsButton, aboutButton, extrasButton, resumeStar; +@synthesize creditsButton, legalButton; +@synthesize idGamesButton, idSoftwareButton, triviaButton; +@synthesize backButton; + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { + return UIInterfaceOrientationIsLandscape(interfaceOrientation); +} + +- (void)viewDidUnload { + [super viewDidUnload]; + // Release any retained subviews of the main view. + // e.g. self.myOutlet = nil; + + self.resumeButton = nil; + self.newGameButton = nil; + self.settingsButton = nil; + self.aboutButton = nil; + self.extrasButton = nil; + self.resumeStar = nil; + + self.idGamesButton = nil; + self.idSoftwareButton = nil; + self.triviaButton = nil; + + self.creditsButton = nil; + self.legalButton = nil; + + self.backButton = nil; +} + +- (IBAction)resume:(id)sender { + wolf3dAppDelegate* app = (wolf3dAppDelegate*)[[UIApplication sharedApplication] delegate]; + [app showOpenGL]; + iphoneResume(); +} + + +- (IBAction)newGame:(id)sender { + SkillViewController *svc = [[SkillViewController alloc] initWithNibName:@"SkillView" bundle:nil]; + [self.navigationController pushViewController:svc animated:YES]; + [svc release]; +} + +- (IBAction)settings:(id)sender { + SettingsViewController *evc = [[SettingsViewController alloc] initWithNibName:@"SettingsView" bundle:nil]; + [self.navigationController pushViewController:evc animated:YES]; + [evc release]; +} + +- (IBAction)about:(id)sender { + [self setMainHidden:YES]; + [self setAboutHidden:NO]; +} + +- (IBAction)extras:(id)sender { + [self setMainHidden:YES]; + [self setExtrasHidden:NO]; +} + +- (IBAction)credits:(id)sender { + CreditsViewController *cvc = [[CreditsViewController alloc] initWithNibName:@"CreditsView" bundle:nil]; + [self.navigationController pushViewController:cvc animated:YES]; + [cvc release]; +} + +- (IBAction)legal:(id)sender { + LegalViewController *lvc = [[LegalViewController alloc] initWithNibName:@"LegalView" bundle:nil]; + [self.navigationController pushViewController:lvc animated:YES]; + [lvc release]; +} + +- (IBAction)idGames:(id)sender { + [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms-apps://itunes.com/apps/idsoftware"]]; +} + +- (IBAction)idSoftware:(id)sender { + currentYesNoBox = YESNO_GO_TO_WEBSITE; + iphoneYesNoBox("Website", "This will navigate you to idsoftware.com. Continue?"); +} + +- (IBAction)trivia:(id)sender { + TriviaViewController *tvc = [[TriviaViewController alloc] initWithNibName:@"TriviaView" bundle:nil]; + [self.navigationController pushViewController:tvc animated:YES]; + [tvc release]; + + //menuState = IPM_TRIVIA; + //wolf3dAppDelegate* app = (wolf3dAppDelegate*)[[UIApplication sharedApplication] delegate]; + //[app showOpenGL]; +} + +- (IBAction)back:(id)sender { + [self setAboutHidden:YES]; + [self setExtrasHidden:YES]; + [self setMainHidden:NO]; +} + +- (void)setMainHidden:(BOOL)hide { + // Set the main menu visibility + [self.resumeButton setHidden:hide]; + [self.newGameButton setHidden:hide]; + [self.settingsButton setHidden:hide]; + [self.aboutButton setHidden:hide]; + [self.extrasButton setHidden:hide]; + [self.resumeStar setHidden:hide]; + +} + +- (void)setAboutHidden:(BOOL)hide { + // Set the about menu visibility + [self.creditsButton setHidden:hide]; + [self.legalButton setHidden:hide]; + [self.backButton setHidden:hide]; +} + +- (void)setExtrasHidden:(BOOL)hide { + // Set the extras menu visibility + [self.idGamesButton setHidden:hide]; + [self.idSoftwareButton setHidden:hide]; + [self.triviaButton setHidden:hide]; + [self.backButton setHidden:hide]; +} + + +// REMOVE WHEN NEW MENU IS READY +- (IBAction)oldNewGame:(id)sender { + menuState = IPM_SKILL; + wolf3dAppDelegate* app = (wolf3dAppDelegate*)[[UIApplication sharedApplication] delegate]; + [app showOpenGL]; +} + + +@end \ No newline at end of file diff --git a/wolf3d/code/iphone/MissionTableViewCell.h b/wolf3d/code/iphone/MissionTableViewCell.h new file mode 100644 index 0000000..ae0c041 --- /dev/null +++ b/wolf3d/code/iphone/MissionTableViewCell.h @@ -0,0 +1,31 @@ +/* + + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import + + +@interface MissionTableViewCell : UITableViewCell { + +} + +@end diff --git a/wolf3d/code/iphone/MissionTableViewCell.m b/wolf3d/code/iphone/MissionTableViewCell.m new file mode 100644 index 0000000..ca6c6b3 --- /dev/null +++ b/wolf3d/code/iphone/MissionTableViewCell.m @@ -0,0 +1,59 @@ +/* + + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import "MissionTableViewCell.h" + + +@implementation MissionTableViewCell + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + // Initialization code. + } + return self; +} + + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state. + if ( selected ) { + self.textLabel.highlighted = YES; + } else { + self.textLabel.highlighted = NO; + } + + [self setNeedsDisplay]; + +} + +- (void)dealloc { + [super dealloc]; +} + + +@end diff --git a/wolf3d/code/iphone/Resources-iPad/CreditsView~ipad.xib b/wolf3d/code/iphone/Resources-iPad/CreditsView~ipad.xib new file mode 100644 index 0000000..eca309b --- /dev/null +++ b/wolf3d/code/iphone/Resources-iPad/CreditsView~ipad.xib @@ -0,0 +1,1482 @@ + + + + 1056 + 10K549 + 851 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 141 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBIPadFramework + + + IBFirstResponder + IBIPadFramework + + + + 274 + + YES + + + 274 + {1024, 768} + + NO + YES + YES + IBIPadFramework + + NSImage + credits_bg.png + + + + + 292 + {{26, 45}, {63, 65}} + + 1 + NO + IBIPadFramework + + NSImage + back_arrow.png + + + + + 292 + {{23, 16}, {99, 43}} + + NO + YES + 7 + NO + IBIPadFramework + BACK + + POSITYPE-idSettler_v10.2 + 36 + 16 + + + 3 + MQA + + + 1 + 10 + 5 + + + + 301 + {{22, 11}, {70, 100}} + + NO + NO + 1 + IBIPadFramework + 0 + 0 + + Helvetica-Bold + 15 + 16 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + 3 + MC41AA + + + NSImage + button_highlight.png + + + + + 292 + + YES + + + 292 + {{55, 794}, {379, 55}} + + NO + YES + 7 + NO + IBIPadFramework + Wolfenstein 3D and Spear of Destiny originally created by id Software + + Helvetica-Bold + 20 + 16 + + + + + 1 + MCAwIDAAA + + {1, 1} + 1 + 10 + 2 + 1 + 0 + + + + 292 + {{73, 20}, {344, 36}} + + NO + YES + 7 + NO + IBIPadFramework + Wolfenstein 3D Classic Platinum + + Helvetica-Bold + 22 + 16 + + + + + {1, 1} + 1 + 10 + 2 + 1 + 0 + + + + 292 + {{86, 87}, {307, 36}} + + NO + YES + 7 + NO + IBIPadFramework + Programming + + + + + {1, 1} + 1 + 10 + 2 + 1 + 0 + + + + 292 + {{86, 294}, {307, 36}} + + NO + YES + 7 + NO + IBIPadFramework + Art + + + + + {1, 1} + 1 + 10 + 2 + 1 + 0 + + + + 292 + {{86, 421}, {307, 36}} + + NO + YES + 7 + NO + IBIPadFramework + Audio + + + + + {1, 1} + 1 + 10 + 2 + 1 + 0 + + + + 292 + {{85, 910}, {307, 36}} + + NO + YES + 7 + NO + IBIPadFramework + Programming + + + + + {1, 1} + 1 + 10 + 2 + 1 + 0 + + + + 292 + {{85, 1024}, {307, 36}} + + NO + YES + 7 + NO + IBIPadFramework + Design + + + + + {1, 1} + 1 + 10 + 2 + 1 + 0 + + + + 292 + {{85, 1174}, {307, 36}} + + NO + YES + 7 + NO + IBIPadFramework + Art + + + + + {1, 1} + 1 + 10 + 2 + 1 + 0 + + + + 292 + {{85, 1303}, {307, 36}} + + NO + YES + 7 + NO + IBIPadFramework + Audio + + + + + {1, 1} + 1 + 10 + 2 + 1 + 0 + + + + 292 + {{86, 532}, {307, 36}} + + NO + YES + 7 + NO + IBIPadFramework + Production + + + + + {1, 1} + 1 + 10 + 2 + 1 + 0 + + + + 292 + {{87, 639}, {307, 36}} + + NO + YES + 7 + NO + IBIPadFramework + QA Testing + + + + + {1, 1} + 1 + 10 + 2 + 1 + 0 + + + + 292 + {{184, 140}, {111, 21}} + + NO + YES + 7 + NO + IBIPadFramework + John Carmack + + Helvetica + 17 + 16 + + + + + {1, 1} + 1 + 10 + 1 + + + + 292 + {{183, 954}, {111, 21}} + + NO + YES + 7 + NO + IBIPadFramework + John Carmack + + + + + {1, 1} + 1 + 10 + 1 + + + + 292 + {{183, 1068}, {111, 21}} + + NO + YES + 7 + NO + IBIPadFramework + John Ramero + + + + + {1, 1} + 1 + 10 + 1 + + + + 292 + {{183, 1094}, {111, 21}} + + NO + YES + 7 + NO + IBIPadFramework + Tom Hall + + + + + {1, 1} + 1 + 10 + 1 + + + + 292 + {{178, 1218}, {121, 23}} + + NO + YES + 7 + NO + IBIPadFramework + Adrian Carmack + + + + + {1, 1} + 1 + 10 + 1 + + + + 292 + {{183, 1246}, {111, 21}} + + NO + YES + 7 + NO + IBIPadFramework + Kevin Cloud + + + + + {1, 1} + 1 + 10 + 1 + + + + 292 + {{183, 1351}, {111, 21}} + + NO + YES + 7 + NO + IBIPadFramework + Bobby Prince + + + + + {1, 1} + 1 + 10 + 1 + + + + 292 + {{185, 338}, {111, 21}} + + NO + YES + 7 + NO + IBIPadFramework + John Burnett + + + + + {1, 1} + 1 + 10 + 1 + + + + 292 + {{185, 367}, {111, 21}} + + NO + YES + 7 + NO + IBIPadFramework + Mike Horton + + + + + {1, 1} + 1 + 10 + 1 + + + + 292 + {{171, 465}, {137, 26}} + + NO + YES + 7 + NO + IBIPadFramework + Christian Antkow + + + + + {1, 1} + 1 + NO + 10 + 1 + + + + 292 + {{171, 576}, {137, 26}} + + NO + YES + 7 + NO + IBIPadFramework + Rafael Brown + + + + + {1, 1} + 1 + NO + 10 + 1 + + + + 292 + {{172, 683}, {137, 26}} + + NO + YES + 7 + NO + IBIPadFramework + Sean Palomino + + + + + {1, 1} + 1 + NO + 10 + 1 + + + + 292 + {{184, 169}, {111, 21}} + + NO + YES + 7 + NO + IBIPadFramework + Jeff Farrand + + + + + {1, 1} + 1 + 10 + 1 + + + + 292 + {{184, 198}, {111, 21}} + + NO + YES + 7 + NO + IBIPadFramework + Ryan Gerleve + + + + + {1, 1} + 1 + 10 + 1 + + + + 292 + {{184, 234}, {111, 21}} + + NO + YES + 7 + NO + IBIPadFramework + Greg Hodges + + + + + {1, 1} + 1 + 10 + 1 + + + {{442, 768}, {460, 1400}} + + + 3 + MCAwAA + + NO + + 3 + + IBIPadFramework + + + {1024, 768} + + + 3 + MAA + + + 3 + + IBIPadFramework + + + + + YES + + + view + + + + 6 + + + + creditsRoll + + + + 20 + + + + back: + + + 7 + + 21 + + + + + YES + + 0 + + + + + + 1 + + + YES + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 9 + + + + + 10 + + + + + 11 + + + + + 8 + + + + + 12 + + + YES + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Credtis text roll + + + 40 + + + + + 13 + + + + + 39 + + + + + 38 + + + + + 37 + + + + + 36 + + + + + 35 + + + + + 34 + + + + + 33 + + + + + 32 + + + + + 31 + + + + + 30 + + + + + 29 + + + + + 28 + + + + + 27 + + + + + 26 + + + + + 25 + + + + + 24 + + + + + 23 + + + + + 22 + + + + + 19 + + + + + 18 + + + + + 17 + + + + + 16 + + + + + 15 + + + + + 14 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 10.CustomClassName + 10.IBPluginDependency + 10.IBViewBoundsToFrameTransform + 11.IBPluginDependency + 11.IBViewBoundsToFrameTransform + 12.IBEditorWindowLastContentRect + 12.IBPluginDependency + 12.IBViewBoundsToFrameTransform + 13.IBPluginDependency + 13.IBViewBoundsToFrameTransform + 14.IBPluginDependency + 14.IBViewBoundsToFrameTransform + 15.IBPluginDependency + 15.IBViewBoundsToFrameTransform + 16.IBPluginDependency + 16.IBViewBoundsToFrameTransform + 17.IBPluginDependency + 17.IBViewBoundsToFrameTransform + 18.IBPluginDependency + 18.IBViewBoundsToFrameTransform + 19.IBPluginDependency + 19.IBViewBoundsToFrameTransform + 22.IBPluginDependency + 22.IBViewBoundsToFrameTransform + 23.IBPluginDependency + 23.IBViewBoundsToFrameTransform + 24.IBPluginDependency + 24.IBViewBoundsToFrameTransform + 25.IBPluginDependency + 25.IBViewBoundsToFrameTransform + 26.IBPluginDependency + 26.IBViewBoundsToFrameTransform + 27.IBPluginDependency + 27.IBViewBoundsToFrameTransform + 28.IBPluginDependency + 28.IBViewBoundsToFrameTransform + 29.IBPluginDependency + 29.IBViewBoundsToFrameTransform + 30.IBPluginDependency + 30.IBViewBoundsToFrameTransform + 31.IBPluginDependency + 31.IBViewBoundsToFrameTransform + 32.IBPluginDependency + 32.IBViewBoundsToFrameTransform + 33.IBPluginDependency + 33.IBViewBoundsToFrameTransform + 34.IBPluginDependency + 34.IBViewBoundsToFrameTransform + 35.IBPluginDependency + 35.IBViewBoundsToFrameTransform + 36.IBPluginDependency + 36.IBViewBoundsToFrameTransform + 37.IBPluginDependency + 37.IBViewBoundsToFrameTransform + 38.IBPluginDependency + 38.IBViewBoundsToFrameTransform + 39.IBPluginDependency + 39.IBViewBoundsToFrameTransform + 40.IBPluginDependency + 40.IBViewBoundsToFrameTransform + 8.IBViewBoundsToFrameTransform + 9.IBPluginDependency + 9.IBViewBoundsToFrameTransform + + + YES + CreditsViewController + UIResponder + {{174, 377}, {1024, 768}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDkgAAw/aAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDkoAAxAHAAA + + {{387, 0}, {475, 1156}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAAAAAAAAxK7AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCkgAAxFPAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCqgAAwuwAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUKsAABCrgAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUM4AABDDAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDQAAAw2QAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDQAAAw4CAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDQAAAw48AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUKsAABDkwAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUM5AABDyQAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUM5AABD14AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUKsAABD0oAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUMrAABEBEAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUKsAABEFQAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUMrAABEIAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCrgAAwz4AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUM7AABDTAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCrgAAw0UAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUKqAABEgAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCrgAAxATAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUM3AABEboAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCrgAAw8oAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUM3AABEhYAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUM3AABEiMAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUM3AABEmEAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDOQAAwyQAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUM3AABEmEAAA + + + P4AAAL+AAAAAAAAAw58AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUGwAABBoAAAA + + + + + YES + + + YES + + + + + YES + + + YES + + + + 40 + + + + YES + + CreditsViewController + UIViewController + + back: + id + + + back: + + back: + id + + + + creditsRoll + UIView + + + creditsRoll + + creditsRoll + UIView + + + + IBProjectSource + CreditsViewController.h + + + + UIFontLabel + UILabel + + IBProjectSource + UIFontLabel.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIButton + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UIButton.h + + + + UIControl + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIControl.h + + + + UIImageView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIImageView.h + + + + UILabel + UIView + + IBFrameworkSource + UIKit.framework/Headers/UILabel.h + + + + UIResponder + NSObject + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIPrintFormatter.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBIPadFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + ../wolf3d.xcodeproj + 3 + + YES + + YES + back_arrow.png + button_highlight.png + credits_bg.png + + + YES + {65, 63} + {4, 4} + {960, 640} + + + 141 + + diff --git a/wolf3d/code/iphone/Resources-iPad/EpisodeCell~ipad.xib b/wolf3d/code/iphone/Resources-iPad/EpisodeCell~ipad.xib new file mode 100644 index 0000000..5ed5a76 --- /dev/null +++ b/wolf3d/code/iphone/Resources-iPad/EpisodeCell~ipad.xib @@ -0,0 +1,678 @@ + + + + 1056 + 10K549 + 851 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 141 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBIPadFramework + + + IBFirstResponder + IBIPadFramework + + + + 1298 + + YES + + + 1280 + + YES + + + -2147482332 + {{1, 5}, {610, 180}} + + 3 + NO + 1 + IBIPadFramework + + NSImage + highlight_bracket.png + + + + + 1316 + {{6, 13}, {598, 163}} + + NO + 1 + IBIPadFramework + + NSImage + episode_bracket.png + + + + + 1316 + {{13, 61}, {387, 3}} + + NO + 1 + IBIPadFramework + + NSImage + episode_divider.png + + + + + 1316 + {{18, 24}, {586, 52}} + + NO + YES + 7 + 1 + NO + 1 + IBIPadFramework + Episode Number + + POSITYPE-idSettler_v10.2 + 44 + 16 + + + 3 + MC42NjY2NjY2NjY3AA + + + 3 + MC4zMzMzMzMzMzMzAA + + 1 + 10 + + + + 1316 + {{17, 67}, {586, 75}} + + NO + YES + 9 + 2 + NO + 1 + IBIPadFramework + Episode Name + + POSITYPE-idSettler_v10.2 + 64 + 16 + + + 3 + MQA + + + 1 + NO + 10 + + + {618, 189} + + + 3 + MCAwAA + + NO + YES + 4 + YES + IBCocoaTouchFramework + + + {618, 189} + + + 1 + MSAxIDEAA + + 1 + IBIPadFramework + 1 + + 0 + MyIdentifier + + + + + YES + + + episodeCell + + + + 7 + + + + + YES + + 0 + + + + + + -1 + + + File's Owner + + + -2 + + + + + 2 + + + YES + + + + + + + + + + 3 + + + + + 4 + + + + + 8 + + + + + 9 + + + + + 11 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 11.IBPluginDependency + 11.IBViewBoundsToFrameTransform + 2.IBEditorWindowLastContentRect + 2.IBPluginDependency + 3.CustomClassName + 3.IBPluginDependency + 3.IBViewBoundsToFrameTransform + 4.CustomClassName + 4.IBPluginDependency + 4.IBViewBoundsToFrameTransform + 8.IBPluginDependency + 8.IBViewBoundsToFrameTransform + 9.IBPluginDependency + 9.IBViewBoundsToFrameTransform + + + YES + EpisodeViewController + UIResponder + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AQAAAABAAAAAA + + {{415, 957}, {618, 189}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCsAAAwjQAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUDgAABCHAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUJgAABCMAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AQAAAABAoAAAA + + + + + YES + + + YES + + + + + YES + + + YES + + + + 11 + + + + YES + + EpisodeViewController + UIViewController + + YES + + YES + back: + next: + pageDown: + pageUp: + setEpisode: + + + YES + id + id + id + id + id + + + + YES + + YES + back: + next: + pageDown: + pageUp: + setEpisode: + + + YES + + back: + id + + + next: + id + + + pageDown: + id + + + pageUp: + id + + + setEpisode: + id + + + + + YES + + YES + episodeCell + episodeList + + + YES + UITableViewCell + UITableView + + + + YES + + YES + episodeCell + episodeList + + + YES + + episodeCell + UITableViewCell + + + episodeList + UITableView + + + + + IBProjectSource + EpisodeViewController.h + + + + UIFontLabel + UILabel + + IBProjectSource + UIFontLabel.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIImageView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIImageView.h + + + + UILabel + UIView + + IBFrameworkSource + UIKit.framework/Headers/UILabel.h + + + + UIResponder + NSObject + + + + UIScrollView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIScrollView.h + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UITableView + UIScrollView + + IBFrameworkSource + UIKit.framework/Headers/UITableView.h + + + + UITableViewCell + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITableViewCell.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIPrintFormatter.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBIPadFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + ../wolf3d.xcodeproj + 3 + + YES + + YES + episode_bracket.png + episode_divider.png + highlight_bracket.png + + + YES + {606, 168} + {387, 3} + {623, 189} + + + 141 + + diff --git a/wolf3d/code/iphone/Resources-iPad/EpisodeView~ipad.xib b/wolf3d/code/iphone/Resources-iPad/EpisodeView~ipad.xib new file mode 100644 index 0000000..f192f9a --- /dev/null +++ b/wolf3d/code/iphone/Resources-iPad/EpisodeView~ipad.xib @@ -0,0 +1,938 @@ + + + + 1056 + 10K549 + 851 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 141 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBIPadFramework + + + IBFirstResponder + IBIPadFramework + + + + 274 + + YES + + + 274 + {1024, 768} + + NO + YES + YES + IBIPadFramework + + NSImage + episode_bg.png + + + + + 274 + {{68, 87}, {63, 65}} + + 1 + NO + IBIPadFramework + + NSImage + back_arrow.png + + + + + 274 + {{66, 58}, {99, 43}} + + NO + YES + 7 + NO + IBIPadFramework + BACK + + POSITYPE-idSettler_v10.2 + 36 + 16 + + + 3 + MQA + + + 1 + 10 + 5 + + + + 274 + {{899, 87}, {63, 65}} + + 1 + NO + IBIPadFramework + + NSImage + next_arrow.png + + + + + 274 + {{897, 58}, {99, 43}} + + NO + YES + 7 + NO + IBIPadFramework + NEXT + + + + 1 + 10 + 5 + + + + 274 + {{191, 47}, {214, 57}} + + NO + YES + 7 + NO + IBIPadFramework + EPISODE + + POSITYPE-idSettler_v10.2 + 48 + 16 + + + + 1 + 10 + 5 + + + + 274 + {{205, 104}, {625, 577}} + + + 3 + MCAwAA + + YES + IBIPadFramework + YES + NO + 2 + 0 + YES + 189 + + + + 274 + {{63, 49}, {73, 105}} + + NO + NO + 1 + IBIPadFramework + 0 + 0 + + Helvetica-Bold + 15 + 16 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + 3 + MC41AA + + + NSImage + button_highlight.png + + + + + 274 + {{893, 50}, {73, 105}} + + NO + NO + 1 + IBIPadFramework + 0 + 0 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + + + + 274 + {{478, 715}, {80, 36}} + + NO + NO + 1 + IBIPadFramework + 0 + 0 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + + NSImage + down_arrow.png + + + + + 274 + {{478, 37}, {80, 36}} + + NO + NO + 1 + IBIPadFramework + 0 + 0 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + + NSImage + up_arrow.png + + + + {1024, 768} + + + 1 + MCAwIDAAA + + + 3 + + IBIPadFramework + + + + + YES + + + view + + + + 13 + + + + back: + + + 7 + + 36 + + + + dataSource + + + + 51 + + + + delegate + + + + 52 + + + + episodeList + + + + 53 + + + + pageUp: + + + 7 + + 54 + + + + pageDown: + + + 7 + + 55 + + + + next: + + + 7 + + 58 + + + + + YES + + 0 + + + + + + 1 + + + YES + + + + + + + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 28 + + + + + 31 + + + + + 32 + + + + + 33 + + + + + 35 + + + + + 48 + + + + + 49 + + + + + 50 + + + Episode List + + + 56 + + + + + 59 + + + + + 60 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 28.IBViewBoundsToFrameTransform + 31.CustomClassName + 31.IBPluginDependency + 31.IBViewBoundsToFrameTransform + 32.CustomClassName + 32.IBPluginDependency + 32.IBViewBoundsToFrameTransform + 33.IBPluginDependency + 33.IBViewBoundsToFrameTransform + 35.IBPluginDependency + 35.IBViewBoundsToFrameTransform + 48.IBPluginDependency + 48.IBViewBoundsToFrameTransform + 49.IBPluginDependency + 49.IBViewBoundsToFrameTransform + 50.IBPluginDependency + 50.IBViewBoundsToFrameTransform + 56.IBPluginDependency + 56.IBViewBoundsToFrameTransform + 59.IBPluginDependency + 59.IBViewBoundsToFrameTransform + 60.CustomClassName + 60.IBPluginDependency + 60.IBViewBoundsToFrameTransform + + + YES + EpisodeViewController + UIResponder + {{179, 382}, {1024, 768}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAAAAAAAAxD+AAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUKEAABCaAAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDtgAAw4QAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCaAAAw56AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUKIAABCrgAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABD+wAAw7GAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABD+wAAw7GAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUNNAABC4AAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEX0AAw8eAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCkgAAwxYAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCjgAAwsYAAA + + + + + YES + + + YES + + + + + YES + + + YES + + + + 60 + + + + YES + + EpisodeViewController + UIViewController + + YES + + YES + back: + next: + pageDown: + pageUp: + setEpisode: + + + YES + id + id + id + id + id + + + + YES + + YES + back: + next: + pageDown: + pageUp: + setEpisode: + + + YES + + back: + id + + + next: + id + + + pageDown: + id + + + pageUp: + id + + + setEpisode: + id + + + + + YES + + YES + episodeCell + episodeList + + + YES + UITableViewCell + UITableView + + + + YES + + YES + episodeCell + episodeList + + + YES + + episodeCell + UITableViewCell + + + episodeList + UITableView + + + + + IBProjectSource + EpisodeViewController.h + + + + UIFontLabel + UILabel + + IBProjectSource + UIFontLabel.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIButton + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UIButton.h + + + + UIControl + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIControl.h + + + + UIImageView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIImageView.h + + + + UILabel + UIView + + IBFrameworkSource + UIKit.framework/Headers/UILabel.h + + + + UIResponder + NSObject + + + + UIScrollView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIScrollView.h + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UITableView + UIScrollView + + IBFrameworkSource + UIKit.framework/Headers/UITableView.h + + + + UITableViewCell + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITableViewCell.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIPrintFormatter.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBIPadFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + ../wolf3d.xcodeproj + 3 + + YES + + YES + back_arrow.png + button_highlight.png + down_arrow.png + episode_bg.png + next_arrow.png + up_arrow.png + + + YES + {65, 63} + {4, 4} + {80, 36} + {480, 320} + {65, 63} + {80, 36} + + + 141 + + diff --git a/wolf3d/code/iphone/Resources-iPad/LegalView~ipad.xib b/wolf3d/code/iphone/Resources-iPad/LegalView~ipad.xib new file mode 100644 index 0000000..6ffcd43 --- /dev/null +++ b/wolf3d/code/iphone/Resources-iPad/LegalView~ipad.xib @@ -0,0 +1,639 @@ + + + + 1056 + 10K549 + 851 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 141 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBIPadFramework + + + IBFirstResponder + IBIPadFramework + + + + 274 + + YES + + + 292 + {1024, 768} + + NO + IBIPadFramework + + NSImage + credits_bg.png + + + + + 292 + {{26, 45}, {63, 65}} + + 1 + NO + IBIPadFramework + + NSImage + back_arrow.png + + + + + 292 + {{22.5, 15.5}, {99, 43}} + + NO + YES + 7 + NO + IBIPadFramework + BACK + + POSITYPE-idSettler_v10.2 + 36 + 16 + + + 3 + MQA + + + 1 + 10 + 5 + + + + 301 + {{21, 10}, {75, 102}} + + NO + NO + 1 + IBIPadFramework + 0 + 0 + + Helvetica-Bold + 15 + 16 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + 3 + MC41AA + + + NSImage + button_highlight.png + + + + + 292 + {{396, -27}, {556, 510}} + + NO + YES + 7 + NO + IBIPadFramework + Wolfenstein® 3D Classic Platinum© 2009-2011 id Software LLC, a ZeniMax Media company. Wolfenstein, id, id Software, id Tech and related logos are registered trademarks or trademarks of id Software LLC in the U.S. and/or other countries. Bethesda, Bethesda Softworks, ZeniMax and related logos are registered trademarks or trademarks of ZeniMax Media Inc. in the U.S. and/or other countries. All Rights Reserved. + + POSITYPE-idSettler_v10.2 + 22 + 16 + + + 1 + MSAxIDEAA + + 1 + + + + + 1 + MCAwIDAAA + + 1 + 10 + 10 + 1 + 0 + + + + 292 + {{607, 44}, {134, 54}} + + NO + YES + 7 + NO + IBIPadFramework + Legal + + POSITYPE-idSettler_v10.2 + 44 + 16 + + + + + {2, 2} + 1 + 10 + 1 + + + {1024, 768} + + + 3 + MAA + + + 3 + + IBIPadFramework + + + + + YES + + + view + + + + 3 + + + + back: + + + 7 + + 12 + + + + + YES + + 0 + + + + + + 1 + + + YES + + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 7 + + + + + 10 + + + + + 11 + + + + + 9 + + + + + 17 + + + + + 4 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 10.IBPluginDependency + 10.IBViewBoundsToFrameTransform + 11.CustomClassName + 11.IBPluginDependency + 11.IBViewBoundsToFrameTransform + 17.IBPluginDependency + 17.IBViewBoundsToFrameTransform + 4.CustomClassName + 4.IBPluginDependency + 4.IBViewBoundsToFrameTransform + 7.IBPluginDependency + 7.IBViewBoundsToFrameTransform + 9.IBPluginDependency + 9.IBViewBoundsToFrameTransform + + + YES + LegalViewController + UIResponder + {{140, 350}, {1024, 768}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBoAAAw5OAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBoAAAw4cAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUPGAADBAAAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABD3oAAw8wAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAAAAAAAAxD+AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCGAAAxCBAAA + + + + + YES + + + YES + + + + + YES + + + YES + + + + 17 + + + + YES + + LegalViewController + UIViewController + + back: + id + + + back: + + back: + id + + + + IBProjectSource + LegalViewController.h + + + + UIFontLabel + UILabel + + IBProjectSource + UIFontLabel.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIButton + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UIButton.h + + + + UIControl + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIControl.h + + + + UIImageView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIImageView.h + + + + UILabel + UIView + + IBFrameworkSource + UIKit.framework/Headers/UILabel.h + + + + UIResponder + NSObject + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIPrintFormatter.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBIPadFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + ../wolf3d.xcodeproj + 3 + + YES + + YES + back_arrow.png + button_highlight.png + credits_bg.png + + + YES + {65, 63} + {4, 4} + {960, 640} + + + 141 + + diff --git a/wolf3d/code/iphone/Resources-iPad/LevelSelectView~ipad.xib b/wolf3d/code/iphone/Resources-iPad/LevelSelectView~ipad.xib new file mode 100644 index 0000000..0d28b71 --- /dev/null +++ b/wolf3d/code/iphone/Resources-iPad/LevelSelectView~ipad.xib @@ -0,0 +1,898 @@ + + + + 1056 + 10K540 + 851 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 141 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBIPadFramework + + + IBFirstResponder + IBIPadFramework + + + + 274 + + YES + + + 256 + {1024, 768} + + NO + YES + YES + IBIPadFramework + + NSImage + episode_bg.png + + + + + 292 + {{61, 87}, {65, 63}} + + 1 + NO + IBIPadFramework + + NSImage + back_arrow.png + + + + + 292 + {{900, 87}, {65, 63}} + + 1 + NO + IBIPadFramework + + NSImage + next_arrow.png + + + + + 292 + {{60, 56}, {99, 43}} + + NO + YES + 7 + NO + IBIPadFramework + BACK + + POSITYPE-idSettler_v10.2 + 36 + 16 + + + 3 + MQA + + + 1 + 10 + 5 + + + + 292 + {{899, 56}, {93, 43}} + + NO + YES + 7 + NO + IBIPadFramework + PLAY + + + + 1 + 10 + 5 + + + + 292 + {{190, 48}, {186, 52}} + + NO + YES + 7 + NO + IBIPadFramework + MISSION + + POSITYPE-idSettler_v10.2 + 44 + 16 + + + + 1 + 10 + + + + 274 + {{204, 104}, {625, 593}} + + + 3 + MCAwAA + + YES + IBIPadFramework + YES + NO + 2 + 0 + YES + 50 + + + + 274 + {{472, 712}, {80, 36}} + + NO + NO + 1 + IBIPadFramework + 0 + 0 + + Helvetica-Bold + 15 + 16 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + 3 + MC41AA + + + NSImage + button_highlight.png + + + NSImage + down_arrow.png + + + + + 274 + {{472, 37}, {80, 36}} + + NO + NO + 1 + IBIPadFramework + 0 + 0 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + + NSImage + up_arrow.png + + + + + 301 + {{896, 45}, {73, 105}} + + NO + NO + 1 + IBIPadFramework + 0 + 0 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + + + + 301 + {{58, 46}, {75, 108}} + + + 3 + MC42NjY2NjY2NjY3IDAAA + + NO + NO + 1 + IBIPadFramework + 0 + 0 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + + + {1024, 768} + + + + 3 + + IBIPadFramework + + + + + YES + + + view + + + + 4 + + + + next: + + + 7 + + 24 + + + + back: + + + 7 + + 25 + + + + dataSource + + + + 35 + + + + delegate + + + + 36 + + + + missionList + + + + 37 + + + + pageDown: + + + 7 + + 56 + + + + pageUp: + + + 7 + + 57 + + + + + YES + + 0 + + + + + + 1 + + + YES + + + + + + + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 13 + + + + + 14 + + + + + 15 + + + + + 16 + + + + + 21 + + + + + 23 + + + + + 34 + + + Mission List + + + 54 + + + + + 55 + + + + + 22 + + + + + 20 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 1.IBUserGuides + 14.CustomClassName + 14.IBPluginDependency + 14.IBViewBoundsToFrameTransform + 15.CustomClassName + 15.IBPluginDependency + 15.IBViewBoundsToFrameTransform + 16.CustomClassName + 16.IBPluginDependency + 16.IBViewBoundsToFrameTransform + 20.IBPluginDependency + 20.IBViewBoundsToFrameTransform + 21.IBPluginDependency + 21.IBViewBoundsToFrameTransform + 22.IBPluginDependency + 22.IBViewBoundsToFrameTransform + 23.IBPluginDependency + 23.IBViewBoundsToFrameTransform + 34.IBPluginDependency + 54.IBPluginDependency + 54.IBViewBoundsToFrameTransform + 55.IBPluginDependency + 55.IBViewBoundsToFrameTransform + + + YES + LevelSelectViewController + UIResponder + {{218, 349}, {1024, 768}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + YES + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABChgAAxCoAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDtgAAw4QAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEY4AAxCoAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEXMAAww0AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCiAAAxDbAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEYAAAw6AAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEY8AAxDbAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABD7AAAxAkAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABD7AAAw4IAAA + + + + + YES + + + YES + + + + + YES + + + YES + + + + 57 + + + + YES + + LevelSelectViewController + UIViewController + + YES + + YES + back: + next: + pageDown: + pageUp: + + + YES + id + id + id + id + + + + YES + + YES + back: + next: + pageDown: + pageUp: + + + YES + + back: + id + + + next: + id + + + pageDown: + id + + + pageUp: + id + + + + + missionList + UITableView + + + missionList + + missionList + UITableView + + + + IBProjectSource + LevelSelectViewController.h + + + + UIFontLabel + UILabel + + IBProjectSource + UIFontLabel.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIButton + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UIButton.h + + + + UIControl + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIControl.h + + + + UIImageView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIImageView.h + + + + UILabel + UIView + + IBFrameworkSource + UIKit.framework/Headers/UILabel.h + + + + UIResponder + NSObject + + + + UIScrollView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIScrollView.h + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UITableView + UIScrollView + + IBFrameworkSource + UIKit.framework/Headers/UITableView.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIPrintFormatter.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBIPadFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + ../wolf3d.xcodeproj + 3 + + YES + + YES + back_arrow.png + button_highlight.png + down_arrow.png + episode_bg.png + next_arrow.png + up_arrow.png + + + YES + {65, 63} + {4, 4} + {80, 36} + {480, 320} + {65, 63} + {80, 36} + + + 141 + + diff --git a/wolf3d/code/iphone/Resources-iPad/MainMenuView~ipad.xib b/wolf3d/code/iphone/Resources-iPad/MainMenuView~ipad.xib new file mode 100644 index 0000000..7954dad --- /dev/null +++ b/wolf3d/code/iphone/Resources-iPad/MainMenuView~ipad.xib @@ -0,0 +1,1017 @@ + + + + 800 + 10K540 + 851 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 141 + + + + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + IBFilesOwner + IBIPadFramework + + + IBFirstResponder + IBIPadFramework + + + + 274 + + + + 274 + {1024, 768} + + + YES + YES + IBIPadFramework + + NSImage + main_bg.png + + + + + 319 + {{660, 610.5}, {239, 75}} + + NO + IBIPadFramework + 0 + 0 + + POSITYPE-idSettler_v10.2 + 64 + 16 + + {2, 2} + Resume + + 3 + MC4zMzMzMzMzMzMzAA + + + 3 + MQA + + + 1 + MCAwIDAAA + + + + + 319 + {{88, 269}, {322, 75}} + + + NO + IBIPadFramework + 0 + + {2, 2} + New Game + + + + + + + 319 + {{105, 383}, {232, 75}} + + + NO + IBIPadFramework + 0 + + {2, 2} + Settings + + + + + + + 319 + {{137, 499}, {168, 75}} + + + NO + IBIPadFramework + 0 + + {2, 2} + About + + + + + + + -2147483329 + {{105, 383}, {157, 75}} + + NO + IBIPadFramework + 0 + + {2, 2} + Legal + + + + + + + -2147483329 + {{88, 269}, {203, 75}} + + NO + IBIPadFramework + 0 + + {2, 2} + Credits + + + + + + + -2147483329 + {{168, 611}, {143, 75}} + + NO + IBIPadFramework + 0 + + {2, 2} + Back + + + + + + + 319 + {{168, 611}, {182, 75}} + + + NO + IBIPadFramework + 0 + + {2, 2} + Extras + + + + + + + -2147483329 + {{90, 269}, {275, 75}} + + NO + IBIPadFramework + 0 + + {2, 2} + id Games + + + + + + + -2147483329 + {{105, 383}, {321, 75}} + + NO + IBIPadFramework + 0 + + {2, 2} + id Software + + + + + + + -2147483329 + {{131, 499}, {157, 75}} + + NO + IBIPadFramework + 0 + + {2, 2} + Trivia + + + + + + + 274 + {{864, 619}, {41, 39}} + + YES + YES + IBIPadFramework + + NSImage + star_icon.png + + + + {1024, 768} + + + + 3 + MAA + + + 3 + + IBIPadFramework + + + + + + + view + + + + 3 + + + + resume: + + + 7 + + 9 + + + + newGame: + + + 7 + + 10 + + + + settings: + + + 7 + + 11 + + + + about: + + + 7 + + 12 + + + + extras: + + + 7 + + 13 + + + + legal: + + + 7 + + 34 + + + + aboutButton + + + + 35 + + + + extrasButton + + + + 37 + + + + legalButton + + + + 38 + + + + newGameButton + + + + 39 + + + + resumeButton + + + + 40 + + + + settingsButton + + + + 41 + + + + backButton + + + + 44 + + + + back: + + + 7 + + 45 + + + + creditsButton + + + + 50 + + + + idGamesButton + + + + 57 + + + + idSoftwareButton + + + + 58 + + + + triviaButton + + + + 59 + + + + idGames: + + + 7 + + 60 + + + + idSoftware: + + + 7 + + 61 + + + + trivia: + + + 7 + + 62 + + + + credits: + + + 7 + + 63 + + + + resumeStar + + + + 65 + + + + + + 0 + + + + + + 1 + + + + + + + + + + + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 8 + + + + + 16 + + + + + 32 + + + + + 42 + + + + + 47 + + + + + 54 + + + + + 55 + + + + + 56 + + + + + 64 + + + + + + + MainMenuViewController + UIResponder + {{138, 377}, {1024, 768}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUJAAABDEwAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUOTAABDYgAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDgYAAwxkAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCVAAAw0gAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCIAAAwwkAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABELEAAw8aAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEKIAAw8aAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEMkAAw8aAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUI8AABDEwAAA + + + AURWgABEGsAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUJYAABDQgAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUKSAABDbwAAA + + + + + + + 65 + + + + + MainMenuViewController + UIViewController + + id + id + id + id + id + id + id + id + id + id + id + id + + + + about: + id + + + back: + id + + + credits: + id + + + extras: + id + + + idGames: + id + + + idSoftware: + id + + + legal: + id + + + newGame: + id + + + oldNewGame: + id + + + resume: + id + + + settings: + id + + + trivia: + id + + + + UIButton + UIButton + UIButton + UIButton + UIButton + UIButton + UIButton + UIButton + UIButton + UIView + UIButton + UIButton + + + + aboutButton + UIButton + + + backButton + UIButton + + + creditsButton + UIButton + + + extrasButton + UIButton + + + idGamesButton + UIButton + + + idSoftwareButton + UIButton + + + legalButton + UIButton + + + newGameButton + UIButton + + + resumeButton + UIButton + + + resumeStar + UIView + + + settingsButton + UIButton + + + triviaButton + UIButton + + + + IBProjectSource + MainMenuViewController.h + + + + UIFontButton + UIButton + + IBProjectSource + UIFontButton.h + + + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIButton + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UIButton.h + + + + UIControl + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIControl.h + + + + UIImageView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIImageView.h + + + + UIResponder + NSObject + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIPrintFormatter.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBIPadFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + YES + ../wolf3d.xcodeproj + 3 + + {480, 320} + {41, 39} + + 141 + + diff --git a/wolf3d/code/iphone/Resources-iPad/SettingsView~ipad.xib b/wolf3d/code/iphone/Resources-iPad/SettingsView~ipad.xib new file mode 100644 index 0000000..3c21dbb --- /dev/null +++ b/wolf3d/code/iphone/Resources-iPad/SettingsView~ipad.xib @@ -0,0 +1,1675 @@ + + + + 1056 + 10K549 + 851 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 141 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBIPadFramework + + + IBFirstResponder + IBIPadFramework + + + + 1298 + + YES + + + 1316 + {1024, 768} + + + NO + 1 + IBIPadFramework + + NSImage + credits_bg.png + + + + + 1316 + {{413, 29}, {562, 192}} + + NO + 1 + IBIPadFramework + + NSImage + settings_line_art.png + + + + + 1316 + {{929, 692}, {65, 63}} + + 1 + NO + 1 + IBIPadFramework + + NSImage + next_arrow.png + + + + + 1316 + {{415.5, 692}, {65, 63}} + + NO + 1 + IBIPadFramework + + NSImage + adv_btn.png + + + + + 1316 + {{397, 668}, {597, 13}} + + NO + 1 + IBIPadFramework + + NSImage + settings_divider.png + + + + + 1316 + {{397, 311}, {597, 13}} + + NO + 1 + IBIPadFramework + + + + + 1316 + {{543, 375}, {307, 46}} + + + NO + YES + 7 + NO + 1 + IBIPadFramework + SENSITIVITY: + + POSITYPE-idSettler_v10.2 + 38 + 16 + + + 3 + MC42NjY2NjY2NjY3AA + + + 3 + MQA + + 1 + 10 + 2 + + + + 1316 + {{621, 264}, {160, 56}} + + + NO + YES + 7 + NO + 1 + IBIPadFramework + Preset + + POSITYPE-idSettler_v10.2 + 44 + 16 + + + + 1 + NO + 10 + + + + 1316 + {{406, 458}, {444, 46}} + + + NO + YES + 7 + NO + 1 + IBIPadFramework + TILT MOVE SPEED: + + + + 1 + 10 + 2 + + + + 1316 + {{409, 545}, {436, 47}} + + + NO + YES + 4 + NO + 1 + IBIPadFramework + TILT TURN SPEED: + + + + 1 + 10 + 2 + + + + 1316 + {{557, 632}, {288, 41}} + + + NO + YES + 7 + NO + 1 + IBIPadFramework + HUD ALPHA: + + + + 1 + 10 + 2 + + + + 1316 + {{422, 596}, {535, 23}} + + + NO + 1 + IBIPadFramework + 0 + 0 + 0.5 + + + + 1316 + {{422, 512}, {535, 23}} + + + NO + 1 + IBIPadFramework + 0 + 0 + 0.5 + 500 + 3000 + + + + 1316 + {{422, 422}, {535, 23}} + + + NO + 1 + IBIPadFramework + 0 + 0 + 0.5 + 5000 + 30000 + + + + 1316 + {{422, 332}, {535, 23}} + + + NO + 1 + IBIPadFramework + 0 + 0 + 0.5 + + + + 1316 + {{828, 727}, {93, 41}} + + + NO + YES + 7 + NO + 1 + IBIPadFramework + BACK + + POSITYPE-idSettler_v10.2 + 34 + 16 + + + + 1 + 10 + 2 + 5 + + + + 1316 + {{486, 727}, {152, 41}} + + NO + YES + 7 + NO + 1 + IBIPadFramework + Advanced + + + + 1 + 10 + 5 + + + + 1325 + {{828, 691}, {166, 66}} + + + NO + NO + 1 + 1 + IBIPadFramework + 0 + 0 + + Helvetica-Bold + 15 + 16 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + 3 + MC41AA + + + NSImage + button_highlight.png + + + + + 1325 + {{415, 689}, {223, 66}} + + NO + NO + 1 + 1 + IBIPadFramework + 0 + 0 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + + + + 1316 + {{898, 97}, {66, 80}} + + NO + 1 + IBIPadFramework + 0 + 0 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + NSImage + right_chevron.png + + + + + 1316 + {{421, 97}, {66, 80}} + + NO + 1 + IBIPadFramework + 0 + 0 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + NSImage + left_chevron.png + + + + + 1316 + {{860, 371}, {123, 37}} + + NO + YES + 7 + NO + 1 + IBIPadFramework + 100% + + + + 1 + 10 + + + + 1316 + {{860, 456}, {123, 37}} + + NO + YES + 7 + NO + 1 + IBIPadFramework + 100% + + + + 1 + 10 + + + + 1316 + {{860, 542}, {123, 37}} + + NO + YES + 7 + NO + 1 + IBIPadFramework + 100% + + + + 1 + 10 + + + + 1316 + {{860, 628}, {123, 35}} + + NO + YES + 7 + NO + 1 + IBIPadFramework + 100% + + + + 1 + 10 + + + + 1316 + {{519, 19}, {348, 236}} + + 1 + NO + 1 + IBIPadFramework + + NSImage + iphone_preset_1.png + + + + + -2147482332 + {{519, 19}, {348, 236}} + + 2 + NO + 1 + IBIPadFramework + + NSImage + iphone_preset_2.png + + + + + -2147482332 + {{519, 19}, {348, 236}} + + 3 + NO + 1 + IBIPadFramework + + NSImage + iphone_preset_3.png + + + + + -2147482332 + {{519, 19}, {348, 236}} + + 4 + NO + 1 + IBIPadFramework + + NSImage + iphone_preset_4.png + + + + {1024, 768} + + + 1 + MCAwIDAAA + + + 3 + + 1 + IBIPadFramework + + + + + YES + + + view + + + + 22 + + + + SensitivityValChanged + + + 13 + + 23 + + + + TiltMoveSpeedValChanged + + + 13 + + 24 + + + + TiltTurnSpeedValChanged + + + 13 + + 25 + + + + HudAlphaValChanged + + + 13 + + 26 + + + + hudAlphaSlider + + + + 27 + + + + sensitivitySlider + + + + 28 + + + + tiltTurnSpeedSlider + + + + 30 + + + + tiltMoveSpeedSlider + + + + 31 + + + + back: + + + 7 + + 32 + + + + AdvancedPressed + + + 7 + + 64 + + + + hudAlphaLabel + + + + 72 + + + + sensitivityLabel + + + + 73 + + + + tiltMoveSpeedLabel + + + + 74 + + + + tiltTurnSpeedLabel + + + + 75 + + + + nextPreset + + + 7 + + 80 + + + + previousPreset + + + 7 + + 81 + + + + presetLabel + + + + 82 + + + + + YES + + 0 + + + + + + 1 + + + YES + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 8 + + + + + 9 + + + + + 10 + + + + + 11 + + + + + 12 + + + + + 13 + + + + + 14 + + + + + 15 + + + + + 46 + + + + + 57 + + + + + 58 + + + + + 60 + + + + + 62 + + + + + 65 + + + + + 66 + + + + + 67 + + + + + 68 + + + + + 69 + + + + + 70 + + + + + 71 + + + + + 76 + + + + + 77 + + + + + 78 + + + + + 79 + + + + + 83 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 10.CustomClassName + 10.IBPluginDependency + 10.IBViewBoundsToFrameTransform + 11.CustomClassName + 11.IBPluginDependency + 11.IBViewBoundsToFrameTransform + 12.IBPluginDependency + 12.IBViewBoundsToFrameTransform + 13.CustomClassName + 13.IBPluginDependency + 13.IBViewBoundsToFrameTransform + 14.IBPluginDependency + 14.IBViewBoundsToFrameTransform + 15.IBPluginDependency + 15.IBViewBoundsToFrameTransform + 4.IBPluginDependency + 4.IBViewBoundsToFrameTransform + 46.CustomClassName + 46.IBPluginDependency + 46.IBViewBoundsToFrameTransform + 5.IBPluginDependency + 5.IBViewBoundsToFrameTransform + 57.IBPluginDependency + 57.IBViewBoundsToFrameTransform + 58.IBPluginDependency + 58.IBViewBoundsToFrameTransform + 6.IBPluginDependency + 6.IBViewBoundsToFrameTransform + 60.IBPluginDependency + 60.IBViewBoundsToFrameTransform + 62.IBPluginDependency + 62.IBViewBoundsToFrameTransform + 65.IBPluginDependency + 65.IBViewBoundsToFrameTransform + 66.IBPluginDependency + 66.IBViewBoundsToFrameTransform + 67.IBPluginDependency + 67.IBViewBoundsToFrameTransform + 68.IBPluginDependency + 68.IBViewBoundsToFrameTransform + 69.IBPluginDependency + 69.IBViewBoundsToFrameTransform + 7.CustomClassName + 7.IBPluginDependency + 7.IBViewBoundsToFrameTransform + 70.IBPluginDependency + 70.IBViewBoundsToFrameTransform + 71.IBPluginDependency + 71.IBViewBoundsToFrameTransform + 76.IBPluginDependency + 76.IBViewBoundsToFrameTransform + 77.IBPluginDependency + 77.IBViewBoundsToFrameTransform + 78.IBPluginDependency + 78.IBViewBoundsToFrameTransform + 79.IBPluginDependency + 79.IBViewBoundsToFrameTransform + 8.CustomClassName + 8.IBPluginDependency + 8.IBViewBoundsToFrameTransform + 83.CustomClassName + 83.IBPluginDependency + 83.IBViewBoundsToFrameTransform + 9.CustomClassName + 9.IBPluginDependency + 9.IBViewBoundsToFrameTransform + + + YES + SettingsViewController + UIResponder + {{265, 386}, {1024, 768}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDzIAAxAzAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEC0AAxCNAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABENEAAxDxAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEWQAAxEEAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEDAAAxDrAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAAAAAAAAxD+AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEDIAAw+KAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEJ8AAw5YAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEDIAAw88AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDj4AAxDjAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEWwAAwzYAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEDIAAw7wAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDugAAw46AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDsIAAxDXAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDwAAAw/oAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDbwAAw6CAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDLAAAw0MAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEYsAAw9MAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEYsAAxAAAAA + + WolfSlider + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEDIAAw6qAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEYsAAxBEAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEVwAAxCHAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABA4AAAxBlAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBmAAAxBSAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBmAAAxBcAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDfAAAw1EAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEK0AAw9MAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEWkAAxD9AAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEE0AAxAAAAA + + + + + YES + + + YES + + + + + YES + + + YES + + + + 83 + + + + YES + + SettingsViewController + UIViewController + + YES + + YES + AdvancedPressed + ControlScheme1Pressed + ControlScheme2Pressed + ControlScheme3Pressed + ControlScheme4Pressed + HudAlphaValChanged + SensitivityValChanged + TiltMoveSpeedValChanged + TiltTurnSpeedValChanged + back: + nextPreset + previousPreset + + + YES + id + id + id + id + id + id + id + id + id + id + id + id + + + + YES + + YES + AdvancedPressed + ControlScheme1Pressed + ControlScheme2Pressed + ControlScheme3Pressed + ControlScheme4Pressed + HudAlphaValChanged + SensitivityValChanged + TiltMoveSpeedValChanged + TiltTurnSpeedValChanged + back: + nextPreset + previousPreset + + + YES + + AdvancedPressed + id + + + ControlScheme1Pressed + id + + + ControlScheme2Pressed + id + + + ControlScheme3Pressed + id + + + ControlScheme4Pressed + id + + + HudAlphaValChanged + id + + + SensitivityValChanged + id + + + TiltMoveSpeedValChanged + id + + + TiltTurnSpeedValChanged + id + + + back: + id + + + nextPreset + id + + + previousPreset + id + + + + + YES + + YES + controlScheme1Button + controlScheme2Button + controlScheme3Button + controlScheme4Button + hudAlphaLabel + hudAlphaSlider + presetLabel + sensitivityLabel + sensitivitySlider + tiltMoveSpeedLabel + tiltMoveSpeedSlider + tiltTurnSpeedLabel + tiltTurnSpeedSlider + + + YES + UIButton + UIButton + UIButton + UIButton + UILabel + UISlider + UILabel + UILabel + UISlider + UILabel + UISlider + UILabel + UISlider + + + + YES + + YES + controlScheme1Button + controlScheme2Button + controlScheme3Button + controlScheme4Button + hudAlphaLabel + hudAlphaSlider + presetLabel + sensitivityLabel + sensitivitySlider + tiltMoveSpeedLabel + tiltMoveSpeedSlider + tiltTurnSpeedLabel + tiltTurnSpeedSlider + + + YES + + controlScheme1Button + UIButton + + + controlScheme2Button + UIButton + + + controlScheme3Button + UIButton + + + controlScheme4Button + UIButton + + + hudAlphaLabel + UILabel + + + hudAlphaSlider + UISlider + + + presetLabel + UILabel + + + sensitivityLabel + UILabel + + + sensitivitySlider + UISlider + + + tiltMoveSpeedLabel + UILabel + + + tiltMoveSpeedSlider + UISlider + + + tiltTurnSpeedLabel + UILabel + + + tiltTurnSpeedSlider + UISlider + + + + + IBProjectSource + SettingsViewController.h + + + + UIFontLabel + UILabel + + IBProjectSource + UIFontLabel.h + + + + WolfSlider + UISlider + + IBProjectSource + WolfSlider.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIButton + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UIButton.h + + + + UIControl + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIControl.h + + + + UIImageView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIImageView.h + + + + UILabel + UIView + + IBFrameworkSource + UIKit.framework/Headers/UILabel.h + + + + UIResponder + NSObject + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UISlider + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UISlider.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIPrintFormatter.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBIPadFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + ../wolf3d.xcodeproj + 3 + + YES + + YES + adv_btn.png + button_highlight.png + credits_bg.png + iphone_preset_1.png + iphone_preset_2.png + iphone_preset_3.png + iphone_preset_4.png + left_chevron.png + next_arrow.png + right_chevron.png + settings_divider.png + settings_line_art.png + + + YES + {56, 55} + {4, 4} + {960, 640} + {306, 208} + {306, 208} + {306, 208} + {306, 208} + {66, 80} + {65, 63} + {66, 80} + {597, 13} + {562, 192} + + + 141 + + diff --git a/wolf3d/code/iphone/Resources-iPad/SkillView~ipad.xib b/wolf3d/code/iphone/Resources-iPad/SkillView~ipad.xib new file mode 100644 index 0000000..be18a19 --- /dev/null +++ b/wolf3d/code/iphone/Resources-iPad/SkillView~ipad.xib @@ -0,0 +1,1250 @@ + + + + 1056 + 10K549 + 851 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 141 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBIPadFramework + + + IBFirstResponder + IBIPadFramework + + + + 1298 + + YES + + + 1298 + {1024, 768} + + NO + YES + 2 + YES + 1 + IBIPadFramework + + NSImage + wolf_bg.png + + + + + 1316 + {{200, 70}, {623, 174}} + + NO + 1 + IBIPadFramework + + NSImage + highlight_bracket.png + + + + + 1316 + {{209, 80}, {606, 151}} + + 1 + NO + 1 + IBIPadFramework + + NSImage + episode_bracket.png + + + + + 1316 + {{209, 252.5}, {606, 151}} + + 2 + NO + 1 + IBIPadFramework + + + + + 1316 + {{208, 423.5}, {606, 151}} + + 3 + NO + 1 + IBIPadFramework + + + + + 1316 + {{208, 595.5}, {606, 151}} + + 4 + NO + 1 + IBIPadFramework + + + + + 1316 + {{207, 29}, {302, 52}} + + NO + YES + 7 + NO + 1 + IBIPadFramework + Difficulty Select + + POSITYPE-idSettler_v10.2 + 44 + 16 + + + 3 + MQA + + + 1 + 10 + + + + 1298 + {{68, 78}, {65, 63}} + + 1 + NO + 1 + IBIPadFramework + + NSImage + back_arrow.png + + + + + 1298 + {{67, 48}, {99, 43}} + + NO + YES + 7 + NO + 1 + IBIPadFramework + BACK + + POSITYPE-idSettler_v10.2 + 36 + 16 + + + + 1 + 10 + 5 + + + + 1316 + {{891, 78}, {65, 63}} + + 1 + NO + 1 + IBIPadFramework + + NSImage + next_arrow.png + + + + + 1316 + {{890, 47}, {97, 43}} + + NO + YES + 7 + NO + 1 + IBIPadFramework + NEXT + + + + 1 + 10 + 5 + + + + 1325 + {{882, 42}, {78, 101}} + + NO + NO + 1 + 1 + IBIPadFramework + 0 + 0 + + Helvetica-Bold + 15 + 16 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + 3 + MC41AA + + + NSImage + button_highlight.png + + + + + 1298 + {{62, 42}, {81, 99}} + + NO + NO + 1 + 1 + IBIPadFramework + 0 + 0 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + + + + 1298 + {{316, 80}, {488, 151}} + + NO + NO + 1 + 1 + IBIPadFramework + 0 + + Helvetica-Bold + 48 + 16 + + Can I Play, Daddy? + + + + + + + 1298 + {{316, 253}, {498, 150}} + + NO + NO + 1 + 1 + IBIPadFramework + 0 + + Don't Hurt Me + + + + + + + 1298 + {{310, 424}, {504, 150}} + + NO + NO + 1 + 1 + IBIPadFramework + 0 + + Bring 'Em On! + + + + + + + 1298 + {{310, 596}, {504, 150}} + + NO + NO + 1 + 1 + IBIPadFramework + 3 + + 0 + I am Death Incarnate! + + + + + + + 1298 + {{229, 102}, {79, 107}} + + NO + NO + 1 + 1 + IBIPadFramework + 2 + + Helvetica-Bold + 24 + 16 + + NO + + + + + NSImage + difficulty_head1.png + + + + + 1298 + {{224.5, 274.5}, {79, 107}} + + NO + NO + 1 + 1 + IBIPadFramework + 2 + + NO + + + + + NSImage + difficulty_head2.png + + + + + 1298 + {{224.5, 446.5}, {79, 107}} + + NO + NO + 1 + 1 + IBIPadFramework + 2 + + NO + + + + + NSImage + difficulty_head3.png + + + + + 1298 + {{224, 618}, {79, 107}} + + NO + NO + 1 + 1 + IBIPadFramework + 2 + + NO + + + + + NSImage + difficulty_head4.png + + + + {1024, 768} + + + 3 + MQA + + 2 + + + + 3 + + 1 + IBIPadFramework + + + + + YES + + + view + + + + 3 + + + + back: + + + 7 + + 29 + + + + BringEmOn: + + + 7 + + 30 + + + + canIPlayDaddy: + + + 7 + + 31 + + + + dontHurtMe: + + + 7 + + 32 + + + + IAmDeathIncarnate: + + + 7 + + 33 + + + + next: + + + 7 + + 34 + + + + selectionFrame + + + + 37 + + + + canIPlayDaddy: + + + 7 + + 41 + + + + dontHurtMe: + + + 7 + + 44 + + + + BringEmOn: + + + 7 + + 47 + + + + IAmDeathIncarnate: + + + 7 + + 50 + + + + + YES + + 0 + + + + + + 1 + + + YES + + + + + + + + + + + + + + + + + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 9 + + + + + 10 + + + + + 8 + + + + + 7 + + + + + 11 + + + + + 12 + + + + + 13 + + + + + 14 + + + + + 15 + + + + + 21 + + + + + 22 + + + + + 23 + + + + + 24 + + + + + 35 + + + + + 40 + + + + + 42 + + + + + 45 + + + + + 48 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 10.CustomClassName + 10.IBPluginDependency + 10.IBViewBoundsToFrameTransform + 11.CustomClassName + 11.IBPluginDependency + 11.IBViewBoundsToFrameTransform + 12.IBPluginDependency + 12.IBViewBoundsToFrameTransform + 13.IBPluginDependency + 13.IBViewBoundsToFrameTransform + 14.IBPluginDependency + 14.IBViewBoundsToFrameTransform + 15.IBPluginDependency + 15.IBViewBoundsToFrameTransform + 21.CustomClassName + 21.IBPluginDependency + 21.IBViewBoundsToFrameTransform + 22.CustomClassName + 22.IBPluginDependency + 22.IBViewBoundsToFrameTransform + 23.CustomClassName + 23.IBPluginDependency + 23.IBViewBoundsToFrameTransform + 24.CustomClassName + 24.IBPluginDependency + 24.IBViewBoundsToFrameTransform + 35.IBPluginDependency + 35.IBViewBoundsToFrameTransform + 4.IBViewBoundsToFrameTransform + 40.IBPluginDependency + 40.IBViewBoundsToFrameTransform + 42.IBPluginDependency + 42.IBViewBoundsToFrameTransform + 45.IBPluginDependency + 45.IBViewBoundsToFrameTransform + 48.IBPluginDependency + 48.IBViewBoundsToFrameTransform + 5.CustomClassName + 5.IBPluginDependency + 5.IBViewBoundsToFrameTransform + 6.IBPluginDependency + 6.IBViewBoundsToFrameTransform + 7.IBPluginDependency + 7.IBViewBoundsToFrameTransform + 8.IBEditorWindowLastContentRect + 8.IBPluginDependency + 8.IBViewBoundsToFrameTransform + 9.IBPluginDependency + 9.IBViewBoundsToFrameTransform + + + YES + SkillViewController + UIResponder + {{141, 378}, {1024, 768}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABELEAAw/9AAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDdgAAwngAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDUQAAw9EAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDtQAAw/UAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDq4AAxDKAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDq4AAxFAAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDzQAAw56AAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUOeAABDfQAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUObAABD1AAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUObAABEFQAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDswAAw/2AAA + + + P4AAAL+AAAAAAAAAxD+AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDagAAwzUAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDKAAAw88AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDOAAAw/mAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDGAAAxBjAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDk4AAw/+AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDlAAAxAVAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBoAAAxAVAAA + + {{323, 1045}, {52, 56}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEaYAAw/8AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABELIAAxAVAAA + + + + + YES + + + YES + + + + + YES + + + YES + + + + 50 + + + + YES + + SkillViewController + UIViewController + + YES + + YES + BringEmOn: + IAmDeathIncarnate: + back: + canIPlayDaddy: + dontHurtMe: + next: + + + YES + id + id + id + id + id + id + + + + YES + + YES + BringEmOn: + IAmDeathIncarnate: + back: + canIPlayDaddy: + dontHurtMe: + next: + + + YES + + BringEmOn: + id + + + IAmDeathIncarnate: + id + + + back: + id + + + canIPlayDaddy: + id + + + dontHurtMe: + id + + + next: + id + + + + + selectionFrame + UIView + + + selectionFrame + + selectionFrame + UIView + + + + IBProjectSource + SkillViewController.h + + + + UIFontButton + UIButton + + IBProjectSource + UIFontButton.h + + + + UIFontLabel + UILabel + + IBProjectSource + UIFontLabel.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIButton + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UIButton.h + + + + UIControl + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIControl.h + + + + UIImageView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIImageView.h + + + + UILabel + UIView + + IBFrameworkSource + UIKit.framework/Headers/UILabel.h + + + + UIResponder + NSObject + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIPrintFormatter.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBIPadFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + ../wolf3d.xcodeproj + 3 + + YES + + YES + back_arrow.png + button_highlight.png + difficulty_head1.png + difficulty_head2.png + difficulty_head3.png + difficulty_head4.png + episode_bracket.png + highlight_bracket.png + next_arrow.png + wolf_bg.png + + + YES + {65, 63} + {4, 4} + {64, 87} + {60, 82} + {60, 78} + {59, 79} + {606, 168} + {623, 189} + {65, 63} + {480, 320} + + + 141 + + diff --git a/wolf3d/code/iphone/Resources-iPad/TriviaView~ipad.xib b/wolf3d/code/iphone/Resources-iPad/TriviaView~ipad.xib new file mode 100644 index 0000000..2d8bfed --- /dev/null +++ b/wolf3d/code/iphone/Resources-iPad/TriviaView~ipad.xib @@ -0,0 +1,1323 @@ + + + + 1056 + 10K549 + 851 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 141 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBIPadFramework + + + IBFirstResponder + IBIPadFramework + + + + 274 + + YES + + + 274 + {1024, 768} + + NO + IBIPadFramework + + NSImage + wolf_bg.png + + + + + 292 + {{435, 20}, {159, 77}} + + NO + YES + 7 + NO + IBIPadFramework + Trivia + + POSITYPE-idSettler_v10.2 + 48 + 16 + + + 3 + MQA + + + + 1 + MCAwIDAAA + + {2, 2} + 1 + 10 + 1 + + + + 274 + {{155, 140}, {713, 400}} + + NO + YES + 7 + 1 + NO + IBIPadFramework + ORIGINAL WOLF: The original release of Wolfenstein 3D only contained 3 Episodes. Episodes 4, 5, and 6 were sold separately as "The Nocturnal Missions", and were intended to act as a prequel to the original trilogy of Episodes. Subsequent releases of the game included all 6 Episodes together. + + Helvetica + 30 + 16 + + + + + {2, 2} + 0 + 10 + 11 + 1 + 0 + + + + -2147483374 + {{162, 140}, {700, 400}} + + NO + YES + 7 + 2 + NO + IBIPadFramework + BJ, THE MAN: William Joseph Blazkowicz was born August 15, 1911, to Polish immigrants. Blazkowicz was a top spy for the Allied Forces, eventually receiving the Congressional Medal of Honor. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483374 + {{162, 140}, {700, 400}} + + NO + YES + 7 + 3 + NO + IBIPadFramework + BOX ART: Ken Rieger was the talented illustrator who created the cover art for Spear of Destiny, Wolfenstein3D and Commander Keen. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483374 + {{162, 140}, {700, 400}} + + NO + YES + 7 + 4 + NO + IBIPadFramework + THE REAL SPEAR: The Spear of Destiny, also known as The Spear or The Holy Lance, is believed to have been the weapon used to pierce the side of Jesus Christ at the Crucifixion. The Spear soon became a symbol of God's favor and those who possessed it were believed to be invincible. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483374 + {{162, 140}, {700, 400}} + + NO + YES + 7 + 5 + NO + IBIPadFramework + THE SPEAR AND HITLER: Hitler is believed to have acquired the Spear at the beginning of WWII. Near the end of that war, it is rumored that General Patton discovered the Spear and that the downfall of Germany began that day. It is fabled that the U.S. was destined to succeed Germany as the New World Power once ownership of the Spear changed hands. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483374 + {{162, 140}, {700, 400}} + + NO + YES + 7 + 6 + NO + IBIPadFramework + DEATH DIMENSION: It is said that Hitler made a pact with the Angel of Death, promising the souls of his Nazi soldiers, to protect the Spear of Destiny. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483374 + {{162, 140}, {700, 400}} + + NO + YES + 7 + 7 + NO + IBIPadFramework + GOD MODE: In the game, if you can access god mode, BJ's eyes will glow with eerie golden light. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483374 + {{162, 140}, {700, 400}} + + NO + YES + 7 + 8 + NO + IBIPadFramework + A PRINCE: Robert Prince, wrote the music for Commander Keen, Wolfenstein 3-D, and Doom. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483374 + {{142, 140}, {740, 400}} + + NO + YES + 7 + 9 + NO + IBIPadFramework + DELAYED DEVELOPMENT: It is rumored that work on Spear of Destiny was hindered by the development team's time spent playing Fatal Fury (which Jay Wilbur called 'Fatal Productivity'), and Street Fighter II. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483374 + {{142, 140}, {740, 400}} + + NO + YES + 7 + 10 + NO + IBIPadFramework + A MATTER OF DEGREES: John Carmack is known for his innovations in 3D graphics and rocketry but what is less known is that this self-taught engineer has no degrees - he dropped out of school after one semester. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483374 + {{162, 140}, {700, 400}} + + NO + YES + 7 + 11 + NO + IBIPadFramework + THE CARMACK: John Carmack, one of the founders of id Software, preferred to work at a pizza joint and make games rather than go to college. His favorite programming food is pizza and diet coke. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483374 + {{142, 140}, {740, 400}} + + NO + YES + 7 + 12 + NO + IBIPadFramework + DREAMING IN DIGITAL: Doom was reported to cause gamers to dream in pixels and lower productivity. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483374 + {{212, 140}, {600, 400}} + + NO + YES + 7 + 13 + NO + IBIPadFramework + KEEPING IT IN THE FAMILY: BJ is Commander Keen's grandfather. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483374 + {{242, 140}, {540, 400}} + + NO + YES + 7 + 14 + NO + IBIPadFramework + WHAT'S IN A NAME: The original name for Doom was "It's Green and Pissed" + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483374 + {{192, 140}, {640, 400}} + + NO + YES + 9 + 15 + NO + IBIPadFramework + GIBS: Gibs, pronounced with a hard 'g', is sometimes confused as 'jibs' due to its pronunciation. The term came from the imagery of flying chicken giblets, or gibs for short. + + + + + {2, 2} + 1 + NO + 10 + 7 + 1 + 0 + + + + -2147483374 + {{155, 140}, {713, 400}} + + NO + YES + 7 + 16 + NO + IBIPadFramework + WOLFENSTEIN 3D: The game was originally designed to have more complex gameplay. Though dragging bodies, stealth kills and uniforms were already programmed, it was decided that they slowed down the pace of the game and were removed. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + 292 + {{34, 66}, {63, 65}} + + NO + IBIPadFramework + + NSImage + back_arrow.png + + + + + 292 + {{31.5, 33.5}, {99, 43}} + + NO + YES + 7 + NO + IBIPadFramework + BACK + + POSITYPE-idSettler_v10.2 + 36 + 16 + + + + 1 + 10 + 5 + + + + 319 + {{693, 510}, {99, 57}} + + NO + IBIPadFramework + 0 + 0 + + {2, 2} + Next + + 3 + MC4zMzMzMzMzMzMzAA + + + + + + + 319 + {{440, 510}, {187, 57}} + + NO + IBIPadFramework + 0 + 0 + + {2, 2} + Previous + + + + + + + 301 + {{31, 27}, {72, 107}} + + NO + NO + 1 + IBIPadFramework + 0 + 0 + + Helvetica-Bold + 15 + 16 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + 3 + MC41AA + + + NSImage + button_highlight.png + + + + {1024, 768} + + + 3 + MAA + + + 3 + + IBIPadFramework + + + + + YES + + + view + + + + 3 + + + + nextTrivia: + + + 7 + + 18 + + + + previousTrivia: + + + 7 + + 19 + + + + firstTrivia + + + + 24 + + + + lastTrivia + + + + 43 + + + + back: + + + 7 + + 47 + + + + + YES + + 0 + + + + + + 1 + + + YES + + + + + + + + + + + + + + + + + + + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 5 + + + + + 16 + + + + + 17 + + + + + 20 + + + + + 26 + + + + + 27 + + + + + 28 + + + + + 29 + + + + + 30 + + + + + 31 + + + + + 32 + + + + + 33 + + + + + 34 + + + + + 35 + + + + + 36 + + + + + 37 + + + + + 38 + + + + + 39 + + + + + 40 + + + + + 44 + + + + + 45 + + + + + 46 + + + + + 48 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 16.CustomClassName + 16.IBPluginDependency + 16.IBViewBoundsToFrameTransform + 17.CustomClassName + 17.IBPluginDependency + 17.IBViewBoundsToFrameTransform + 20.IBPluginDependency + 20.IBViewBoundsToFrameTransform + 26.IBPluginDependency + 26.IBViewBoundsToFrameTransform + 27.IBPluginDependency + 27.IBViewBoundsToFrameTransform + 28.IBPluginDependency + 28.IBViewBoundsToFrameTransform + 29.IBPluginDependency + 29.IBViewBoundsToFrameTransform + 30.IBPluginDependency + 30.IBViewBoundsToFrameTransform + 31.IBPluginDependency + 31.IBViewBoundsToFrameTransform + 32.IBPluginDependency + 32.IBViewBoundsToFrameTransform + 33.IBPluginDependency + 33.IBViewBoundsToFrameTransform + 34.IBPluginDependency + 34.IBViewBoundsToFrameTransform + 35.IBPluginDependency + 35.IBViewBoundsToFrameTransform + 36.IBPluginDependency + 36.IBViewBoundsToFrameTransform + 37.IBPluginDependency + 37.IBViewBoundsToFrameTransform + 38.IBPluginDependency + 38.IBViewBoundsToFrameTransform + 39.IBPluginDependency + 39.IBViewBoundsToFrameTransform + 40.IBPluginDependency + 40.IBViewBoundsToFrameTransform + 44.CustomClassName + 44.IBPluginDependency + 44.IBViewBoundsToFrameTransform + 45.IBPluginDependency + 45.IBViewBoundsToFrameTransform + 46.IBPluginDependency + 46.IBViewBoundsToFrameTransform + 48.IBPluginDependency + 48.IBViewBoundsToFrameTransform + 5.CustomClassName + 5.IBPluginDependency + 5.IBViewBoundsToFrameTransform + + + YES + TriviaViewController + UIResponder + {{196, 385}, {1024, 768}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABEZMAAxDXAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABELYAAxDXAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUGgAABCaAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUHIAABCfAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUHwAABCiAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUHIAABCfAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUIMAABCkgAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUIgAABCnAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUI0AABCpgAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBoAAAw2MAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUJIAABCsAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUI0AABCpgAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUI0AABCpgAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUI0AABCpgAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUI0AABCpgAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUI0AABCpgAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUI0AABCpgAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUI0AABCpgAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDkIAAw/cAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABB0AAAw9mAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUHQAABCNAAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUMtAABBoAAAA + + + + + YES + + + YES + + + + + YES + + + YES + + + + 48 + + + + YES + + TriviaViewController + UIViewController + + YES + + YES + back: + nextTrivia: + previousTrivia: + + + YES + id + id + id + + + + YES + + YES + back: + nextTrivia: + previousTrivia: + + + YES + + back: + id + + + nextTrivia: + id + + + previousTrivia: + id + + + + + YES + + YES + firstTrivia + lastTrivia + + + YES + UIView + UIView + + + + YES + + YES + firstTrivia + lastTrivia + + + YES + + firstTrivia + UIView + + + lastTrivia + UIView + + + + + IBProjectSource + TriviaViewController.h + + + + UIFontButton + UIButton + + IBProjectSource + UIFontButton.h + + + + UIFontLabel + UILabel + + IBProjectSource + UIFontLabel.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIButton + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UIButton.h + + + + UIControl + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIControl.h + + + + UIImageView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIImageView.h + + + + UILabel + UIView + + IBFrameworkSource + UIKit.framework/Headers/UILabel.h + + + + UIResponder + NSObject + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIPrintFormatter.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBIPadFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + ../wolf3d.xcodeproj + 3 + + YES + + YES + back_arrow.png + button_highlight.png + wolf_bg.png + + + YES + {65, 63} + {4, 4} + {480, 320} + + + 141 + + diff --git a/wolf3d/code/iphone/SettingsView.xib b/wolf3d/code/iphone/SettingsView.xib new file mode 100644 index 0000000..f3579d9 --- /dev/null +++ b/wolf3d/code/iphone/SettingsView.xib @@ -0,0 +1,1684 @@ + + + + 1056 + 10K549 + 851 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 141 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 1298 + + YES + + + 1316 + {480, 320} + + + NO + 2 + IBCocoaTouchFramework + + NSImage + credits_bg.png + + + + + 1316 + {{172.5, 5}, {281, 96}} + + NO + 2 + IBCocoaTouchFramework + + NSImage + settings_line_art.png + + + + + 1316 + {{431.5, 281}, {31, 32}} + + + 1 + NO + 2 + IBCocoaTouchFramework + + NSImage + next_arrow.png + + + + + 1316 + {{158.5, 281}, {31, 32}} + + NO + 2 + IBCocoaTouchFramework + + NSImage + adv_btn.png + + + + + 1316 + {{165, 270}, {298, 6}} + + NO + 2 + IBCocoaTouchFramework + + NSImage + settings_divider.png + + + + + 1316 + {{166.5, 107.5}, {298, 6}} + + NO + 2 + IBCocoaTouchFramework + + + + + 1316 + {{213, 134}, {192, 30}} + + + NO + YES + 7 + NO + 2 + IBCocoaTouchFramework + SENSITIVITY: + + POSITYPE-idSettler_v10.2 + 17 + 16 + + + 3 + MC42NjY2NjY2NjY3AA + + + 3 + MQA + + 1 + 10 + 2 + + + + 1316 + {{274, 83}, {79, 33}} + + + NO + YES + 7 + NO + 2 + IBCocoaTouchFramework + Preset + + POSITYPE-idSettler_v10.2 + 22 + 16 + + + + 1 + 10 + + + + 1316 + {{213, 171}, {192, 30}} + + + NO + YES + 7 + NO + 2 + IBCocoaTouchFramework + TILT MOVE SPEED: + + + + 1 + 10 + 2 + + + + 1316 + {{210, 210}, {195, 30}} + + + NO + YES + 4 + NO + 2 + IBCocoaTouchFramework + TILT TURN SPEED: + + + + 1 + 10 + 2 + + + + 1316 + {{210, 248}, {195, 30}} + + + NO + YES + 7 + NO + 2 + IBCocoaTouchFramework + HUD ALPHA: + + + + 1 + 10 + 2 + + + + 1316 + {{177, 229}, {274, 23}} + + + NO + 2 + IBCocoaTouchFramework + 0 + 0 + 0.5 + + + + 1316 + {{177, 190}, {274, 23}} + + + NO + 2 + IBCocoaTouchFramework + 0 + 0 + 0.5 + 500 + 3000 + + + + 1316 + {{177, 152}, {274, 23}} + + + NO + 2 + IBCocoaTouchFramework + 0 + 0 + 0.5 + 5000 + 30000 + + + + 1316 + {{177, 117}, {274, 23}} + + + NO + 2 + IBCocoaTouchFramework + 0 + 0 + 0.5 + + + + 1316 + {{375, 295}, {53, 29}} + + + NO + YES + 7 + NO + 2 + IBCocoaTouchFramework + BACK + + POSITYPE-idSettler_v10.2 + 18 + 16 + + + + 1 + 10 + 2 + 5 + + + + 1316 + {{194, 302}, {84, 19}} + + NO + 2 + IBCocoaTouchFramework + 2 + + Advanced + + + + 3 + MC41AA + + + + + 1325 + {{375, 278}, {91, 40}} + + + NO + NO + 1 + 2 + IBCocoaTouchFramework + 0 + 0 + + Helvetica-Bold + 15 + 16 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + NSImage + button_highlight.png + + + + + 1325 + {{157, 279}, {117, 40}} + + NO + NO + 1 + 2 + IBCocoaTouchFramework + 0 + 0 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + + + + 1316 + {{385, 21}, {40, 49}} + + NO + 2 + IBCocoaTouchFramework + 0 + 0 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + NSImage + right_chevron.png + + + + + 1316 + {{196, 21}, {40, 49}} + + NO + 2 + IBCocoaTouchFramework + 0 + 0 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + NSImage + left_chevron.png + + + + + 1316 + {{406, 135}, {42, 21}} + + NO + YES + 7 + NO + 2 + IBCocoaTouchFramework + 100% + + + + 1 + 10 + + + + 1316 + {{406.5, 171.5}, {42, 21}} + + NO + YES + 7 + NO + 2 + IBCocoaTouchFramework + 100% + + + + 1 + 10 + + + + 1316 + {{406, 211}, {42, 21}} + + NO + YES + 7 + NO + 2 + IBCocoaTouchFramework + 100% + + + + 1 + 10 + + + + 1316 + {{406.5, 248.5}, {42, 21}} + + NO + YES + 7 + NO + 2 + IBCocoaTouchFramework + 100% + + + + 1 + 10 + + + + 1316 + {{252, 3.5}, {118, 79}} + + 1 + NO + 2 + IBCocoaTouchFramework + + NSImage + iphone_preset_1.png + + + + + -2147482332 + {{252, 3.5}, {118, 79}} + + 2 + NO + 2 + IBCocoaTouchFramework + + NSImage + iphone_preset_2.png + + + + + -2147482332 + {{252, 3.5}, {118, 79}} + + 3 + NO + 2 + IBCocoaTouchFramework + + NSImage + iphone_preset_3.png + + + + + -2147482332 + {{252, 3.5}, {118, 79}} + + 4 + NO + 2 + IBCocoaTouchFramework + + NSImage + iphone_preset_4.png + + + + {480, 320} + + + 1 + MCAwIDAAA + + + 3 + + 2 + IBCocoaTouchFramework + + + + + YES + + + view + + + + 22 + + + + SensitivityValChanged + + + 13 + + 23 + + + + TiltMoveSpeedValChanged + + + 13 + + 24 + + + + TiltTurnSpeedValChanged + + + 13 + + 25 + + + + HudAlphaValChanged + + + 13 + + 26 + + + + hudAlphaSlider + + + + 27 + + + + sensitivitySlider + + + + 28 + + + + tiltTurnSpeedSlider + + + + 30 + + + + tiltMoveSpeedSlider + + + + 31 + + + + back: + + + 7 + + 32 + + + + AdvancedPressed + + + 7 + + 47 + + + + AdvancedPressed + + + 7 + + 64 + + + + hudAlphaLabel + + + + 72 + + + + sensitivityLabel + + + + 73 + + + + tiltMoveSpeedLabel + + + + 74 + + + + tiltTurnSpeedLabel + + + + 75 + + + + nextPreset + + + 7 + + 80 + + + + previousPreset + + + 7 + + 81 + + + + presetLabel + + + + 82 + + + + + YES + + 0 + + + + + + 1 + + + YES + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 8 + + + + + 9 + + + + + 10 + + + + + 11 + + + + + 12 + + + + + 13 + + + + + 14 + + + + + 15 + + + + + 45 + + + + + 46 + + + + + 57 + + + + + 58 + + + + + 60 + + + + + 62 + + + + + 65 + + + + + 66 + + + + + 67 + + + + + 68 + + + + + 69 + + + + + 70 + + + + + 71 + + + + + 76 + + + + + 77 + + + + + 78 + + + + + 79 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 10.CustomClassName + 10.IBPluginDependency + 10.IBViewBoundsToFrameTransform + 11.CustomClassName + 11.IBPluginDependency + 11.IBViewBoundsToFrameTransform + 12.IBPluginDependency + 12.IBViewBoundsToFrameTransform + 13.CustomClassName + 13.IBPluginDependency + 13.IBViewBoundsToFrameTransform + 14.IBPluginDependency + 14.IBViewBoundsToFrameTransform + 15.IBPluginDependency + 15.IBViewBoundsToFrameTransform + 4.IBPluginDependency + 4.IBViewBoundsToFrameTransform + 45.CustomClassName + 45.IBPluginDependency + 45.IBViewBoundsToFrameTransform + 46.CustomClassName + 46.IBPluginDependency + 46.IBViewBoundsToFrameTransform + 5.IBPluginDependency + 5.IBViewBoundsToFrameTransform + 57.IBPluginDependency + 57.IBViewBoundsToFrameTransform + 58.IBPluginDependency + 58.IBViewBoundsToFrameTransform + 6.IBPluginDependency + 6.IBViewBoundsToFrameTransform + 60.IBPluginDependency + 60.IBViewBoundsToFrameTransform + 62.IBPluginDependency + 62.IBViewBoundsToFrameTransform + 65.IBPluginDependency + 65.IBViewBoundsToFrameTransform + 66.IBPluginDependency + 66.IBViewBoundsToFrameTransform + 67.IBPluginDependency + 67.IBViewBoundsToFrameTransform + 68.IBPluginDependency + 68.IBViewBoundsToFrameTransform + 69.IBPluginDependency + 69.IBViewBoundsToFrameTransform + 7.CustomClassName + 7.IBPluginDependency + 7.IBViewBoundsToFrameTransform + 70.IBPluginDependency + 70.IBViewBoundsToFrameTransform + 71.IBPluginDependency + 76.IBPluginDependency + 76.IBViewBoundsToFrameTransform + 77.IBPluginDependency + 77.IBViewBoundsToFrameTransform + 78.IBPluginDependency + 78.IBViewBoundsToFrameTransform + 79.IBPluginDependency + 79.IBViewBoundsToFrameTransform + 8.CustomClassName + 8.IBPluginDependency + 8.IBViewBoundsToFrameTransform + 9.CustomClassName + 9.IBPluginDependency + 9.IBViewBoundsToFrameTransform + + + YES + SettingsViewController + UIResponder + {{313, 508}, {960, 640}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDRwAAw2uAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDRwAAw4nAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDvQAAw56AAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABD1wAAw40AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBYAAAw5gAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAAAAAAAAw58AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDZwAAw3oAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUNCAABDlgAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDegAAwtIAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDZwAAw1cAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCQAAAw5gAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDtoAAwnwAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDLwAAw1sAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDQoAAwn4AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABAoAAAw56AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUMlAABDhwAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABC+QAAwnIAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBoAAAw2EAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUPSgABDDAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUPSwABDMIAAA + + WolfSlider + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDZwAAwxQAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUPSgABDWAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUN8AABAYAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUGgAABBUAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUGgAABC1gAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBoAAAw4qAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDSgAAwxcAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDSgAAwz+AAA + + + + + YES + + + YES + + + + + YES + + + YES + + + + 82 + + + + YES + + SettingsViewController + UIViewController + + YES + + YES + AdvancedPressed + ControlScheme1Pressed + ControlScheme2Pressed + ControlScheme3Pressed + ControlScheme4Pressed + HudAlphaValChanged + SensitivityValChanged + TiltMoveSpeedValChanged + TiltTurnSpeedValChanged + back: + nextPreset + previousPreset + + + YES + id + id + id + id + id + id + id + id + id + id + id + id + + + + YES + + YES + AdvancedPressed + ControlScheme1Pressed + ControlScheme2Pressed + ControlScheme3Pressed + ControlScheme4Pressed + HudAlphaValChanged + SensitivityValChanged + TiltMoveSpeedValChanged + TiltTurnSpeedValChanged + back: + nextPreset + previousPreset + + + YES + + AdvancedPressed + id + + + ControlScheme1Pressed + id + + + ControlScheme2Pressed + id + + + ControlScheme3Pressed + id + + + ControlScheme4Pressed + id + + + HudAlphaValChanged + id + + + SensitivityValChanged + id + + + TiltMoveSpeedValChanged + id + + + TiltTurnSpeedValChanged + id + + + back: + id + + + nextPreset + id + + + previousPreset + id + + + + + YES + + YES + controlScheme1Button + controlScheme2Button + controlScheme3Button + controlScheme4Button + hudAlphaLabel + hudAlphaSlider + presetLabel + sensitivityLabel + sensitivitySlider + tiltMoveSpeedLabel + tiltMoveSpeedSlider + tiltTurnSpeedLabel + tiltTurnSpeedSlider + + + YES + UIButton + UIButton + UIButton + UIButton + UILabel + UISlider + UILabel + UILabel + UISlider + UILabel + UISlider + UILabel + UISlider + + + + YES + + YES + controlScheme1Button + controlScheme2Button + controlScheme3Button + controlScheme4Button + hudAlphaLabel + hudAlphaSlider + presetLabel + sensitivityLabel + sensitivitySlider + tiltMoveSpeedLabel + tiltMoveSpeedSlider + tiltTurnSpeedLabel + tiltTurnSpeedSlider + + + YES + + controlScheme1Button + UIButton + + + controlScheme2Button + UIButton + + + controlScheme3Button + UIButton + + + controlScheme4Button + UIButton + + + hudAlphaLabel + UILabel + + + hudAlphaSlider + UISlider + + + presetLabel + UILabel + + + sensitivityLabel + UILabel + + + sensitivitySlider + UISlider + + + tiltMoveSpeedLabel + UILabel + + + tiltMoveSpeedSlider + UISlider + + + tiltTurnSpeedLabel + UILabel + + + tiltTurnSpeedSlider + UISlider + + + + + IBProjectSource + SettingsViewController.h + + + + UIFontButton + UIButton + + IBProjectSource + UIFontButton.h + + + + UIFontLabel + UILabel + + IBProjectSource + UIFontLabel.h + + + + WolfSlider + UISlider + + IBProjectSource + WolfSlider.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIButton + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UIButton.h + + + + UIControl + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIControl.h + + + + UIImageView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIImageView.h + + + + UILabel + UIView + + IBFrameworkSource + UIKit.framework/Headers/UILabel.h + + + + UIResponder + NSObject + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UISlider + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UISlider.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIPrintFormatter.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + wolf3d.xcodeproj + 3 + + YES + + YES + adv_btn.png + button_highlight.png + credits_bg.png + iphone_preset_1.png + iphone_preset_2.png + iphone_preset_3.png + iphone_preset_4.png + left_chevron.png + next_arrow.png + right_chevron.png + settings_divider.png + settings_line_art.png + + + YES + {56, 55} + {4, 4} + {960, 640} + {306, 208} + {306, 208} + {306, 208} + {306, 208} + {66, 80} + {65, 63} + {66, 80} + {597, 13} + {562, 192} + + + 141 + + diff --git a/wolf3d/code/iphone/SettingsViewController.h b/wolf3d/code/iphone/SettingsViewController.h new file mode 100644 index 0000000..be9f6fa --- /dev/null +++ b/wolf3d/code/iphone/SettingsViewController.h @@ -0,0 +1,56 @@ +/* + + Copyright (C) 2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import + + +@interface SettingsViewController : UIViewController { + + IBOutlet UISlider * sensitivitySlider; + IBOutlet UISlider * tiltMoveSpeedSlider; + IBOutlet UISlider * tiltTurnSpeedSlider; + IBOutlet UISlider * hudAlphaSlider; + + IBOutlet UILabel * sensitivityLabel; + IBOutlet UILabel * tiltMoveSpeedLabel; + IBOutlet UILabel * tiltTurnSpeedLabel; + IBOutlet UILabel * hudAlphaLabel; + + IBOutlet UILabel * presetLabel; +} + +- (void) LoadSettings; + +- (IBAction)back:(id)sender; + +- (IBAction) AdvancedPressed; + +- (IBAction) SensitivityValChanged; +- (IBAction) TiltMoveSpeedValChanged; +- (IBAction) TiltTurnSpeedValChanged; +- (IBAction) HudAlphaValChanged; + +- (IBAction) nextPreset; +- (IBAction) previousPreset; + +@end diff --git a/wolf3d/code/iphone/SettingsViewController.m b/wolf3d/code/iphone/SettingsViewController.m new file mode 100644 index 0000000..945ae00 --- /dev/null +++ b/wolf3d/code/iphone/SettingsViewController.m @@ -0,0 +1,282 @@ +/* + + Copyright (C) 2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import "SettingsViewController.h" +#import "wolfiphone.h" +#import "wolf3dAppDelegate.h" + +#define NUM_CONTROL_SCHEMES 4 + +void setSliderLabel( UISlider * slider, UILabel * label ); +void setSliderValue( UISlider * slider, UILabel * label, float value ); +float convertSliderValue( UISlider * slider ); + +@interface SettingsViewController () + +@property (nonatomic, retain) UISlider * sensitivitySlider; +@property (nonatomic, retain) UISlider * tiltMoveSpeedSlider; +@property (nonatomic, retain) UISlider * tiltTurnSpeedSlider; +@property (nonatomic, retain) UISlider * hudAlphaSlider; + +@property (nonatomic, retain) UIView * sensitivityLabel; +@property (nonatomic, retain) UIView * tiltMoveSpeedLabel; +@property (nonatomic, retain) UIView * tiltTurnSpeedLabel; +@property (nonatomic, retain) UIView * hudAlphaLabel; + +@property (nonatomic, retain) UILabel * presetLabel; + + +- (void)setPresetVisibility; + +@end + +@implementation SettingsViewController + +@synthesize sensitivitySlider, tiltMoveSpeedSlider, tiltTurnSpeedSlider, hudAlphaSlider; +@synthesize sensitivityLabel, tiltMoveSpeedLabel, tiltTurnSpeedLabel, hudAlphaLabel; +@synthesize presetLabel; + +// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. +- (void)viewDidLoad { + [super viewDidLoad]; + + [self LoadSettings]; +} + +- (void) SetupSlider:(UISlider*)slider minimumTrack:(UIImage*)minImage + maximumTrack:(UIImage*)maxImage + thumb:(UIImage*)thumbImage { + + [slider setMinimumTrackImage:minImage forState:UIControlStateNormal]; + [slider setMaximumTrackImage:maxImage forState:UIControlStateNormal]; + + [slider setThumbImage:thumbImage forState:UIControlStateNormal]; + [slider setThumbImage:thumbImage forState:UIControlStateHighlighted]; +} + +- (void) LoadSettings { + // Minimum track image setup. + UIImage* minimumTrackImage = [UIImage imageNamed:@"settings_slider_grey.png"]; + CGFloat minimumTrackImageCap = minimumTrackImage.size.width * 0.5f; + + UIImage* minimumTrackImageCapped = [minimumTrackImage stretchableImageWithLeftCapWidth:minimumTrackImageCap topCapHeight:0.0]; + + + // Maximum track image setup. + UIImage* maximumTrackImage = [UIImage imageNamed:@"settings_slider_white.png"]; + CGFloat maximumTrackImageCap = maximumTrackImage.size.width * 0.5f; + + UIImage* maximumTrackImageCapped = [maximumTrackImage stretchableImageWithLeftCapWidth:maximumTrackImageCap topCapHeight:0.0]; + + // Thumb image. + UIImage* thumbImage = [UIImage imageNamed:@"settings_slider_blue.png"]; + + // Set up slider instances. + [self SetupSlider:sensitivitySlider minimumTrack:minimumTrackImageCapped + maximumTrack:maximumTrackImageCapped + thumb:thumbImage]; + + + [self SetupSlider:tiltMoveSpeedSlider minimumTrack:minimumTrackImageCapped + maximumTrack:maximumTrackImageCapped + thumb:thumbImage]; + + + + [self SetupSlider:tiltTurnSpeedSlider minimumTrack:minimumTrackImageCapped + maximumTrack:maximumTrackImageCapped + thumb:thumbImage]; + + + + + [self SetupSlider:hudAlphaSlider minimumTrack:minimumTrackImageCapped + maximumTrack:maximumTrackImageCapped + thumb:thumbImage]; + + + + // Load Settings from CVars. + setSliderValue( sensitivitySlider, sensitivityLabel, sensitivity->value ); + setSliderValue( tiltMoveSpeedSlider, tiltMoveSpeedLabel, tiltMove->value ); + setSliderValue( tiltTurnSpeedSlider, tiltTurnSpeedLabel, tiltTurn->value ); + setSliderValue( hudAlphaSlider, hudAlphaLabel, hudAlpha->value ); + + [self setPresetVisibility]; +} + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { + return UIInterfaceOrientationIsLandscape(interfaceOrientation); +} + +- (void)didReceiveMemoryWarning { + // Releases the view if it doesn't have a superview. + [super didReceiveMemoryWarning]; + + // Release any cached data, images, etc. that aren't in use. +} + +- (void)viewDidUnload { + [super viewDidUnload]; + // Release any retained subviews of the main view. + // e.g. self.myOutlet = nil; + + self.sensitivitySlider = nil; + self.tiltTurnSpeedSlider = nil; + self.tiltMoveSpeedSlider = nil; + self.hudAlphaSlider = nil; + + self.sensitivityLabel = nil; + self.tiltTurnSpeedLabel = nil; + self.tiltMoveSpeedLabel = nil; + self.hudAlphaSlider = nil; + + self.presetLabel = nil; +} + + +- (void)dealloc { + [super dealloc]; +} + + +- (IBAction)back:(id)sender { + [self.navigationController popViewControllerAnimated:YES]; +} + +- (IBAction) SensitivityValChanged { + Cvar_SetValue( sensitivity->name, convertSliderValue( sensitivitySlider ) ); + setSliderLabel( sensitivitySlider, sensitivityLabel); +} + + +- (IBAction) TiltMoveSpeedValChanged { + Cvar_SetValue( tiltMove->name, convertSliderValue( tiltMoveSpeedSlider ) ); + setSliderLabel( tiltMoveSpeedSlider, tiltMoveSpeedLabel); + + if ( tiltMove->value == 5000 ) { + Cvar_SetValue( tiltMove->name, 0 ); + } + if ( tiltMove->value ) { + Cvar_SetValue( tiltTurn->name, 0 ); + setSliderValue( tiltTurnSpeedSlider, tiltTurnSpeedLabel, tiltTurnSpeedSlider.minimumValue ); + } +} + +- (IBAction) TiltTurnSpeedValChanged { + Cvar_SetValue( tiltTurn->name, convertSliderValue( tiltTurnSpeedSlider ) ); + setSliderLabel( tiltTurnSpeedSlider, tiltTurnSpeedLabel); + + if ( tiltTurn->value == 500 ) { + Cvar_SetValue( tiltTurn->name, 0 ); + } + if ( tiltTurn->value ) { + Cvar_SetValue( tiltMove->name, 0 ); + setSliderValue( tiltMoveSpeedSlider, tiltMoveSpeedLabel, tiltMoveSpeedSlider.minimumValue ); + } +} + +- (IBAction) HudAlphaValChanged { + Cvar_SetValue( hudAlpha->name, convertSliderValue( hudAlphaSlider ) ); + setSliderLabel( hudAlphaSlider, hudAlphaLabel ); +} + +- (IBAction) AdvancedPressed { + + iphonePreloadBeforePlay(); // make sure all the hud textures are loaded + menuState = IPM_HUDEDIT; + wolf3dAppDelegate* app = (wolf3dAppDelegate*)[[UIApplication sharedApplication] delegate]; + [app showOpenGL]; + +} + +- (void)setPresetVisibility { + + for ( int i = 0; i < NUM_CONTROL_SCHEMES; ++i ) { + BOOL hide = true; + + if ( i == (int)controlScheme->value ) { + hide = false; + } + + [[self.view viewWithTag:(i + 1)] setHidden:hide]; + } + + self.presetLabel.text = [NSString stringWithFormat:@"Preset %d", (int)(controlScheme->value + 1) ]; +} + +- (IBAction)nextPreset { + int newScheme = controlScheme->value + 1; + + if ( newScheme >= NUM_CONTROL_SCHEMES ) { + newScheme = 0; + } + + Cvar_SetValue( controlScheme->name, newScheme ); + HudSetForScheme( (int)controlScheme->value ); + + [self setPresetVisibility]; +} + +- (IBAction)previousPreset { + int newScheme = controlScheme->value - 1; + + if ( newScheme < 0 ) { + newScheme = NUM_CONTROL_SCHEMES - 1; + } + + Cvar_SetValue( controlScheme->name, newScheme ); + HudSetForScheme( (int)controlScheme->value ); + + [self setPresetVisibility]; +} + +@end + +float convertSliderValue( UISlider * slider ) { + const float difference = slider.value - slider.minimumValue; + const float adjustedValue = slider.maximumValue - difference; + + return adjustedValue; +} + +void setSliderValue( UISlider * slider, UILabel * label, float value ) { + const float difference = value - slider.minimumValue; + const float reversedValue = slider.maximumValue - difference; + + slider.value = reversedValue; + + setSliderLabel( slider, label ); +} + +void setSliderLabel( UISlider * slider, UILabel * label ) { + const float range = slider.maximumValue - slider.minimumValue; + const float adjustedValue = convertSliderValue( slider ); + + const float adjustedDiff = adjustedValue - slider.minimumValue; + + const float percent = adjustedDiff / range * 100.0f; + + label.text = [NSString stringWithFormat:@"%.0f%%", percent]; +} + diff --git a/wolf3d/code/iphone/SkillView.xib b/wolf3d/code/iphone/SkillView.xib new file mode 100644 index 0000000..933bc45 --- /dev/null +++ b/wolf3d/code/iphone/SkillView.xib @@ -0,0 +1,1250 @@ + + + + 1056 + 10K549 + 851 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 141 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 1298 + + YES + + + 1298 + {480, 320} + + NO + YES + 1 + YES + 2 + IBCocoaTouchFramework + + NSImage + wolf_bg.png + + + + + 1316 + {{86, 96}, {308, 73}} + + NO + 2 + IBCocoaTouchFramework + + NSImage + highlight_bracket.png + + + + + 1316 + {{90, 28}, {300, 65}} + + 1 + NO + 2 + IBCocoaTouchFramework + + NSImage + episode_bracket.png + + + + + 1316 + {{90, 100}, {300, 65}} + + 2 + NO + 2 + IBCocoaTouchFramework + + + + + 1316 + {{90, 173}, {300, 65}} + + 3 + NO + 2 + IBCocoaTouchFramework + + + + + 1316 + {{90, 246}, {300, 65}} + + 4 + NO + 2 + IBCocoaTouchFramework + + + + + 1316 + {{90, 1}, {169, 29}} + + NO + YES + 7 + NO + 2 + IBCocoaTouchFramework + Difficulty Select + + POSITYPE-idSettler_v10.2 + 24 + 16 + + + 3 + MQA + + + 1 + 10 + + + + 1298 + {{24, 279}, {32, 32}} + + 1 + NO + 2 + IBCocoaTouchFramework + + NSImage + back_arrow.png + + + + + 1298 + {{23, 260}, {66, 29}} + + NO + YES + 7 + NO + 2 + IBCocoaTouchFramework + BACK + + POSITYPE-idSettler_v10.2 + 18 + 16 + + + + 1 + 10 + 5 + + + + 1316 + {{418, 279}, {32, 32}} + + 1 + NO + 2 + IBCocoaTouchFramework + + NSImage + next_arrow.png + + + + + 1316 + {{417, 259.5}, {66, 29}} + + NO + YES + 7 + NO + 2 + IBCocoaTouchFramework + NEXT + + + + 1 + 10 + 5 + + + + 1325 + {{409, 257}, {52, 56}} + + NO + NO + 1 + 2 + IBCocoaTouchFramework + 0 + 0 + + Helvetica-Bold + 15 + 16 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + 3 + MC41AA + + + NSImage + button_highlight.png + + + + + 1298 + {{17, 259}, {53, 54}} + + NO + NO + 1 + 2 + IBCocoaTouchFramework + 0 + 0 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + + + + 1298 + {{138, 31}, {249, 64}} + + NO + NO + 1 + 2 + IBCocoaTouchFramework + 2 + + Helvetica-Bold + 32 + 16 + + Can I Play, Daddy? + + + + + + + 1298 + {{100, 38}, {32, 45}} + + NO + NO + 1 + 2 + IBCocoaTouchFramework + 2 + + Helvetica-Bold + 24 + 16 + + NO + + + + + NSImage + difficulty_head1.png + + + + + 1298 + {{100, 109.5}, {32, 45}} + + NO + NO + 1 + 2 + IBCocoaTouchFramework + 2 + + NO + + + + + NSImage + difficulty_head2.png + + + + + 1298 + {{100, 182}, {32, 45}} + + NO + NO + 1 + 2 + IBCocoaTouchFramework + 2 + + NO + + + + + NSImage + difficulty_head3.png + + + + + 1298 + {{100, 255.5}, {32, 45}} + + NO + NO + 1 + 2 + IBCocoaTouchFramework + 2 + + NO + + + + + NSImage + difficulty_head4.png + + + + + 1298 + {{138, 103}, {249, 64}} + + NO + NO + 1 + 2 + IBCocoaTouchFramework + 2 + + Don't Hurt Me + + + + + + + 1298 + {{138, 175}, {249, 63}} + + NO + NO + 1 + 2 + IBCocoaTouchFramework + 2 + + Bring 'Em On! + + + + + + + 1298 + {{138, 248}, {249, 63}} + + NO + NO + 1 + 2 + IBCocoaTouchFramework + 2 + + 0 + I am Death Incarnate! + + + + + + {480, 320} + + + 3 + MQA + + 2 + + + + 3 + + 2 + IBCocoaTouchFramework + + + + + YES + + + view + + + + 3 + + + + back: + + + 7 + + 29 + + + + BringEmOn: + + + 7 + + 30 + + + + canIPlayDaddy: + + + 7 + + 31 + + + + dontHurtMe: + + + 7 + + 32 + + + + IAmDeathIncarnate: + + + 7 + + 33 + + + + next: + + + 7 + + 34 + + + + selectionFrame + + + + 37 + + + + canIPlayDaddy: + + + 7 + + 41 + + + + dontHurtMe: + + + 7 + + 44 + + + + BringEmOn: + + + 7 + + 47 + + + + IAmDeathIncarnate: + + + 7 + + 50 + + + + + YES + + 0 + + + + + + 1 + + + YES + + + + + + + + + + + + + + + + + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 4 + + + + + 5 + + + + + 6 + + + + + 9 + + + + + 10 + + + + + 8 + + + + + 7 + + + + + 11 + + + + + 12 + + + + + 13 + + + + + 14 + + + + + 15 + + + + + 21 + + + + + 22 + + + + + 23 + + + + + 24 + + + + + 35 + + + + + 40 + + + + + 42 + + + + + 45 + + + + + 48 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 10.CustomClassName + 10.IBPluginDependency + 10.IBViewBoundsToFrameTransform + 11.CustomClassName + 11.IBPluginDependency + 11.IBViewBoundsToFrameTransform + 12.IBPluginDependency + 12.IBViewBoundsToFrameTransform + 13.IBPluginDependency + 13.IBViewBoundsToFrameTransform + 14.IBPluginDependency + 14.IBViewBoundsToFrameTransform + 15.IBPluginDependency + 15.IBViewBoundsToFrameTransform + 21.CustomClassName + 21.IBPluginDependency + 21.IBViewBoundsToFrameTransform + 22.CustomClassName + 22.IBPluginDependency + 22.IBViewBoundsToFrameTransform + 23.CustomClassName + 23.IBPluginDependency + 23.IBViewBoundsToFrameTransform + 24.CustomClassName + 24.IBPluginDependency + 24.IBViewBoundsToFrameTransform + 35.IBPluginDependency + 35.IBViewBoundsToFrameTransform + 4.IBViewBoundsToFrameTransform + 40.IBPluginDependency + 40.IBViewBoundsToFrameTransform + 42.IBPluginDependency + 42.IBViewBoundsToFrameTransform + 45.IBPluginDependency + 45.IBViewBoundsToFrameTransform + 48.IBPluginDependency + 48.IBViewBoundsToFrameTransform + 5.CustomClassName + 5.IBPluginDependency + 5.IBViewBoundsToFrameTransform + 6.IBPluginDependency + 6.IBViewBoundsToFrameTransform + 7.IBPluginDependency + 7.IBViewBoundsToFrameTransform + 8.IBEditorWindowLastContentRect + 8.IBPluginDependency + 8.IBViewBoundsToFrameTransform + 9.IBPluginDependency + 9.IBViewBoundsToFrameTransform + + + YES + SkillViewController + UIResponder + {{303, 509}, {960, 640}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUPUgABDdQAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUK0AAA/gAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUK0AABBvAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUK0AABCwAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUK0AABDKQAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUK0AABDcgAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUMWAABCCAAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUMWAABC1AAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUMWAABDMwAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDGAAAwtoAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCrAAAwyMAAA + + + P4AAAL+AAAAAAAAAw58AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AULOAABCCAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUIeAABC0wAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUIcAABDMgAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCEAAAwrAAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUIEAABDbQAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUIUAABDg4AAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBgAAAw3QAAA + + {{323, 1045}, {52, 56}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDzAAAw3QAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUPOgABDg4AAA + + + + + YES + + + YES + + + + + YES + + + YES + + + + 50 + + + + YES + + SkillViewController + UIViewController + + YES + + YES + BringEmOn: + IAmDeathIncarnate: + back: + canIPlayDaddy: + dontHurtMe: + next: + + + YES + id + id + id + id + id + id + + + + YES + + YES + BringEmOn: + IAmDeathIncarnate: + back: + canIPlayDaddy: + dontHurtMe: + next: + + + YES + + BringEmOn: + id + + + IAmDeathIncarnate: + id + + + back: + id + + + canIPlayDaddy: + id + + + dontHurtMe: + id + + + next: + id + + + + + selectionFrame + UIView + + + selectionFrame + + selectionFrame + UIView + + + + IBProjectSource + SkillViewController.h + + + + UIFontButton + UIButton + + IBProjectSource + UIFontButton.h + + + + UIFontLabel + UILabel + + IBProjectSource + UIFontLabel.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIButton + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UIButton.h + + + + UIControl + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIControl.h + + + + UIImageView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIImageView.h + + + + UILabel + UIView + + IBFrameworkSource + UIKit.framework/Headers/UILabel.h + + + + UIResponder + NSObject + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIPrintFormatter.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + wolf3d.xcodeproj + 3 + + YES + + YES + back_arrow.png + button_highlight.png + difficulty_head1.png + difficulty_head2.png + difficulty_head3.png + difficulty_head4.png + episode_bracket.png + highlight_bracket.png + next_arrow.png + wolf_bg.png + + + YES + {65, 63} + {4, 4} + {64, 87} + {60, 82} + {60, 78} + {59, 79} + {606, 168} + {623, 189} + {65, 63} + {480, 320} + + + 141 + + diff --git a/wolf3d/code/iphone/SkillViewController.h b/wolf3d/code/iphone/SkillViewController.h new file mode 100644 index 0000000..3b62232 --- /dev/null +++ b/wolf3d/code/iphone/SkillViewController.h @@ -0,0 +1,41 @@ +/* + + Copyright (C) 2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import + + +@interface SkillViewController : UIViewController { +@private + IBOutlet UIView* selectionFrame; +} + +-(IBAction)back:(id)sender; +-(IBAction)next:(id)sender; + +-(IBAction)canIPlayDaddy:(id)sender; +-(IBAction)dontHurtMe:(id)sender; +-(IBAction)BringEmOn:(id)sender; +-(IBAction)IAmDeathIncarnate:(id)sender; + + +@end diff --git a/wolf3d/code/iphone/SkillViewController.m b/wolf3d/code/iphone/SkillViewController.m new file mode 100644 index 0000000..4dfac40 --- /dev/null +++ b/wolf3d/code/iphone/SkillViewController.m @@ -0,0 +1,134 @@ +/* + + Copyright (C) 2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import "SkillViewController.h" +#import "EpisodeViewController.h" +#import "wolf_local.h" + +@interface SkillViewController () + +- (void)setSelectionFrame; + +@property (nonatomic, retain) UIView* selectionFrame; + +@end + +@implementation SkillViewController + +@synthesize selectionFrame; + +// The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. +/* +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization. + } + return self; +} +*/ + +/* +// Implement loadView to create a view hierarchy programmatically, without using a nib. +- (void)loadView { +} +*/ + +- (void)setSelectionFrame { + + int skillTag = skill->value + 1; + + UIView *currentDifficulty = [self.view viewWithTag:skillTag]; + self.selectionFrame.center = currentDifficulty.center; +} + +// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. +- (void)viewDidLoad { + [super viewDidLoad]; + + [self setSelectionFrame]; +} + + + +// Override to allow orientations other than the default portrait orientation. +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { + // Return YES for supported orientations. + return UIInterfaceOrientationIsLandscape(interfaceOrientation); +} + + +- (void)didReceiveMemoryWarning { + // Releases the view if it doesn't have a superview. + [super didReceiveMemoryWarning]; + + // Release any cached data, images, etc. that aren't in use. +} + +- (void)viewDidUnload { + [super viewDidUnload]; + // Release any retained subviews of the main view. + // e.g. self.myOutlet = nil; + + self.selectionFrame = nil; +} + + +- (void)dealloc { + [super dealloc]; +} + + + +- (IBAction)back:(id)sender { + [self.navigationController popViewControllerAnimated:YES]; +} + +- (IBAction)next:(id)sender { + EpisodeViewController *evc = [[EpisodeViewController alloc] initWithNibName:@"EpisodeView" bundle:nil]; + [self.navigationController pushViewController:evc animated:YES]; + [evc release]; +} + + +-(IBAction)canIPlayDaddy:(id)sender { + Cvar_SetValue( skill->name, 0 ); + [self setSelectionFrame]; +} + +-(IBAction)dontHurtMe:(id)sender { + Cvar_SetValue( skill->name, 1 ); + [self setSelectionFrame]; +} + +-(IBAction)BringEmOn:(id)sender { + Cvar_SetValue( skill->name, 2 ); + [self setSelectionFrame]; +} + +-(IBAction)IAmDeathIncarnate:(id)sender { + Cvar_SetValue( skill->name, 3 ); + [self setSelectionFrame]; +} + +@end diff --git a/wolf3d/code/iphone/TriviaView.xib b/wolf3d/code/iphone/TriviaView.xib new file mode 100644 index 0000000..6e78c8a --- /dev/null +++ b/wolf3d/code/iphone/TriviaView.xib @@ -0,0 +1,1327 @@ + + + + 1056 + 10K540 + 851 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 141 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + YES + + + 292 + {480, 320} + + NO + IBCocoaTouchFramework + + NSImage + wolf_bg.png + + + + + 292 + {{163, 16}, {134, 52}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Trivia + + POSITYPE-idSettler_v10.2 + 42 + 16 + + + 3 + MQA + + + + 1 + MCAwIDAAA + + {2, 2} + 1 + 10 + 1 + + + + 288 + {{20, 50}, {440, 171}} + + NO + YES + 7 + 1 + NO + IBCocoaTouchFramework + ORIGINAL WOLF: The original release of Wolfenstein 3D only contained 3 Episodes. Episodes 4, 5, and 6 were sold separately as "The Nocturnal Missions", and were intended to act as a prequel to the original trilogy of Episodes. Subsequent releases of the game included all 6 Episodes together. + + Helvetica + 18 + 16 + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483360 + {{20, 27}, {440, 171}} + + NO + YES + 7 + 2 + NO + IBCocoaTouchFramework + BJ, THE MAN: William Joseph Blazkowicz was born August 15, 1911, to Polish immigrants. Blazkowicz was a top spy for the Allied Forces, eventually receiving the Congressional Medal of Honor. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483360 + {{20, 16}, {440, 171}} + + NO + YES + 7 + 3 + NO + IBCocoaTouchFramework + BOX ART: Ken Rieger was the talented illustrator who created the cover art for Spear of Destiny, Wolfenstein3D and Commander Keen. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483360 + {{20, 50}, {440, 171}} + + NO + YES + 7 + 4 + NO + IBCocoaTouchFramework + THE REAL SPEAR: The Spear of Destiny, also known as The Spear or The Holy Lance, is believed to have been the weapon used to pierce the side of Jesus Christ at the Crucifixion. The Spear soon became a symbol of God's favor and those who possessed it were believed to be invincible. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483360 + {{20, 60}, {440, 171}} + + NO + YES + 7 + 5 + NO + IBCocoaTouchFramework + THE SPEAR AND HITLER: Hitler is believed to have acquired the Spear at the beginning of WWII. Near the end of that war, it is rumored that General Patton discovered the Spear and that the downfall of Germany began that day. It is fabled that the U.S. was destined to succeed Germany as the New World Power once ownership of the Spear changed hands. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483360 + {{20, 16}, {440, 171}} + + NO + YES + 7 + 6 + NO + IBCocoaTouchFramework + DEATH DIMENSION: It is said that Hitler made a pact with the Angel of Death, promising the souls of his Nazi soldiers, to protect the Spear of Destiny. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483360 + {{20, 5}, {440, 171}} + + NO + YES + 7 + 7 + NO + IBCocoaTouchFramework + GOD MODE: In the game, if you can access god mode, BJ's eyes will glow with eerie golden light. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483360 + {{20, 5}, {440, 171}} + + NO + YES + 7 + 8 + NO + IBCocoaTouchFramework + A PRINCE: Robert Prince, wrote the music for Commander Keen, Wolfenstein 3-D, and Doom. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483360 + {{20, 37}, {440, 171}} + + NO + YES + 7 + 9 + NO + IBCocoaTouchFramework + DELAYED DEVELOPMENT: It is rumored that work on Spear of Destiny was hindered by the development team's time spent playing Fatal Fury (which Jay Wilbur called 'Fatal Productivity'), and Street Fighter II. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483360 + {{20, 38}, {440, 171}} + + NO + YES + 7 + 10 + NO + IBCocoaTouchFramework + A MATTER OF DEGREES: John Carmack is known for his innovations in 3D graphics and rocketry but what is less known is that this self-taught engineer has no degrees - he dropped out of school after one semester. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483360 + {{20, 28}, {440, 171}} + + NO + YES + 7 + 11 + NO + IBCocoaTouchFramework + THE CARMACK: John Carmack, one of the founders of id Software, preferred to work at a pizza joint and make games rather than go to college. His favorite programming food is pizza and diet coke. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483360 + {{20, 17}, {440, 171}} + + NO + YES + 7 + 12 + NO + IBCocoaTouchFramework + DREAMING IN DIGITAL: Doom was reported to cause gamers to dream in pixels and lower productivity. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483360 + {{20, 8}, {440, 171}} + + NO + YES + 7 + 13 + NO + IBCocoaTouchFramework + KEEPING IT IN THE FAMILY: BJ is Commander Keen's grandfather. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483360 + {{20, -6}, {440, 195}} + + NO + YES + 7 + 14 + NO + IBCocoaTouchFramework + WHAT'S IN A NAME: The original name for Doom was "It's Green and Pissed" + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + -2147483360 + {{20, 69}, {440, 92}} + + NO + YES + 9 + 15 + NO + IBCocoaTouchFramework + GIBS: Gibs, pronounced with a hard 'g', is sometimes confused as 'jibs' due to its pronunciation. The term came from the imagery of flying chicken giblets, or gibs for short. + + + + + {2, 2} + 1 + NO + 10 + 7 + 1 + 0 + + + + -2147483360 + {{20, 38}, {440, 171}} + + NO + YES + 7 + 16 + NO + IBCocoaTouchFramework + WOLFENSTEIN 3D: The game was originally designed to have more complex gameplay. Though dragging bodies, stealth kills and uniforms were already programmed, it was decided that they slowed down the pace of the game and were removed. + + + + + {2, 2} + 1 + 10 + 7 + 1 + 0 + + + + 292 + {{18, 268}, {32, 32}} + + NO + IBCocoaTouchFramework + + NSImage + back_arrow.png + + + + + 292 + {{17, 243}, {66, 29}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + BACK + + POSITYPE-idSettler_v10.2 + 18 + 16 + + + + 1 + 10 + 5 + + + + 319 + {{394, 256}, {66, 38}} + + NO + IBCocoaTouchFramework + 0 + 0 + + POSITYPE-idSettler_v10.2 + 32 + 16 + + {2, 2} + Next + + 3 + MC4zMzMzMzMzMzMzAA + + + + + + + 319 + {{173, 256}, {125, 38}} + + NO + IBCocoaTouchFramework + 0 + 0 + + {2, 2} + Previous + + + + + + + 301 + {{9, 244}, {60, 60}} + + NO + NO + 1 + IBCocoaTouchFramework + 0 + 0 + + Helvetica-Bold + 15 + 16 + + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + 3 + MC41AA + + + NSImage + button_highlight.png + + + + {480, 320} + + + 3 + MAA + + + 3 + + IBCocoaTouchFramework + + + + + YES + + + view + + + + 3 + + + + nextTrivia: + + + 7 + + 18 + + + + previousTrivia: + + + 7 + + 19 + + + + firstTrivia + + + + 24 + + + + lastTrivia + + + + 43 + + + + back: + + + 7 + + 48 + + + + + YES + + 0 + + + + + + 1 + + + YES + + + + + + + + + + + + + + + + + + + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 5 + + + + + 16 + + + + + 17 + + + + + 20 + + + + + 26 + + + + + 27 + + + + + 28 + + + + + 29 + + + + + 30 + + + + + 31 + + + + + 32 + + + + + 33 + + + + + 34 + + + + + 35 + + + + + 36 + + + + + 37 + + + + + 38 + + + + + 39 + + + + + 40 + + + + + 44 + + + + + 45 + + + + + 46 + + + + + 47 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 16.CustomClassName + 16.IBPluginDependency + 16.IBViewBoundsToFrameTransform + 17.CustomClassName + 17.IBPluginDependency + 17.IBViewBoundsToFrameTransform + 20.IBPluginDependency + 20.IBViewBoundsToFrameTransform + 26.IBPluginDependency + 26.IBViewBoundsToFrameTransform + 27.IBPluginDependency + 27.IBViewBoundsToFrameTransform + 28.IBPluginDependency + 28.IBViewBoundsToFrameTransform + 29.IBPluginDependency + 29.IBViewBoundsToFrameTransform + 30.IBPluginDependency + 30.IBViewBoundsToFrameTransform + 31.IBPluginDependency + 31.IBViewBoundsToFrameTransform + 32.IBPluginDependency + 32.IBViewBoundsToFrameTransform + 33.IBPluginDependency + 33.IBViewBoundsToFrameTransform + 34.IBPluginDependency + 34.IBViewBoundsToFrameTransform + 35.IBPluginDependency + 35.IBViewBoundsToFrameTransform + 36.IBPluginDependency + 36.IBViewBoundsToFrameTransform + 37.IBPluginDependency + 37.IBViewBoundsToFrameTransform + 38.IBPluginDependency + 38.IBViewBoundsToFrameTransform + 39.IBPluginDependency + 39.IBViewBoundsToFrameTransform + 40.IBPluginDependency + 40.IBViewBoundsToFrameTransform + 44.CustomClassName + 44.IBPluginDependency + 44.IBViewBoundsToFrameTransform + 45.IBPluginDependency + 45.IBViewBoundsToFrameTransform + 46.IBPluginDependency + 46.IBViewBoundsToFrameTransform + 47.IBPluginDependency + 47.IBViewBoundsToFrameTransform + 5.CustomClassName + 5.IBPluginDependency + 5.IBViewBoundsToFrameTransform + + + YES + TriviaViewController + UIResponder + {{376, 816}, {480, 320}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABDroAAw5IAAA + + UIFontButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABC8gAAw5IAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUGgAABCaAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUHIAABCfAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUHwAABCiAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUHIAABCfAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUIMAABCkgAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUIgAABCnAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUI0AABCpgAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBoAAAw2MAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUJIAABCsAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUI0AABCpgAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUI0AABCpgAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUI0AABCpgAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUI0AABCpgAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUI0AABCpgAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUI0AABCpgAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUI0AABCpgAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUIEAABDbQAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUK2AABDgYAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUFgAABDcwAAA + + UIFontLabel + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + AUMtAABBoAAAA + + + + + YES + + + YES + + + + + YES + + + YES + + + + 48 + + + + YES + + TriviaViewController + UIViewController + + YES + + YES + back: + nextTrivia: + previousTrivia: + + + YES + id + id + id + + + + YES + + YES + back: + nextTrivia: + previousTrivia: + + + YES + + back: + id + + + nextTrivia: + id + + + previousTrivia: + id + + + + + YES + + YES + firstTrivia + lastTrivia + + + YES + UIView + UIView + + + + YES + + YES + firstTrivia + lastTrivia + + + YES + + firstTrivia + UIView + + + lastTrivia + UIView + + + + + IBProjectSource + TriviaViewController.h + + + + UIFontButton + UIButton + + IBProjectSource + UIFontButton.h + + + + UIFontLabel + UILabel + + IBProjectSource + UIFontLabel.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIButton + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UIButton.h + + + + UIControl + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIControl.h + + + + UIImageView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIImageView.h + + + + UILabel + UIView + + IBFrameworkSource + UIKit.framework/Headers/UILabel.h + + + + UIResponder + NSObject + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIPrintFormatter.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + wolf3d.xcodeproj + 3 + + YES + + YES + back_arrow.png + button_highlight.png + wolf_bg.png + + + YES + {65, 63} + {4, 4} + {960, 640} + + + 141 + + diff --git a/wolf3d/code/iphone/TriviaViewController.h b/wolf3d/code/iphone/TriviaViewController.h new file mode 100644 index 0000000..2667ab9 --- /dev/null +++ b/wolf3d/code/iphone/TriviaViewController.h @@ -0,0 +1,43 @@ +/* + + Copyright (C) 2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import + +// This class handles the trivia menu. It is based on tags - to make it work, each trivia view +// needs a unique, incrementing tag number, and the default trivia item but be set up as an +// IBOutlet. +@interface TriviaViewController : UIViewController { + +@private + IBOutlet UIView* firstTrivia; + IBOutlet UIView* lastTrivia; + + UIView* currentTrivia; +} + +- (IBAction)nextTrivia:(id)sender; +- (IBAction)previousTrivia:(id)sender; + +- (IBAction)back:(id)sender; + +@end diff --git a/wolf3d/code/iphone/TriviaViewController.m b/wolf3d/code/iphone/TriviaViewController.m new file mode 100644 index 0000000..509ab38 --- /dev/null +++ b/wolf3d/code/iphone/TriviaViewController.m @@ -0,0 +1,139 @@ +/* + + Copyright (C) 2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import "TriviaViewController.h" + +#define TRIVIA_COUNT 4 + +@interface TriviaViewController () + + @property (nonatomic, retain) IBOutlet UIView *firstTrivia; + @property (nonatomic, retain) IBOutlet UIView *lastTrivia; + + @property (nonatomic, retain) UIView *currentTrivia; + +@end + +@implementation TriviaViewController + +@synthesize firstTrivia, lastTrivia, currentTrivia; + +// The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. +/* +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization. + } + return self; +} +*/ + +/* +// Implement loadView to create a view hierarchy programmatically, without using a nib. +- (void)loadView { +} +*/ + + +// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. +- (void)viewDidLoad { + [super viewDidLoad]; + + self.currentTrivia = self.firstTrivia; +} + + +// Override to allow orientations other than the default portrait orientation. +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { + // Return YES for supported orientations. + return UIInterfaceOrientationIsLandscape(interfaceOrientation); +} + + +- (void)didReceiveMemoryWarning { + // Releases the view if it doesn't have a superview. + [super didReceiveMemoryWarning]; + + // Release any cached data, images, etc. that aren't in use. +} + +- (void)viewDidUnload { + [super viewDidUnload]; + // Release any retained subviews of the main view. + // e.g. self.myOutlet = nil; + + self.firstTrivia = nil; + self.lastTrivia = nil; + + self.currentTrivia = nil; +} + + +- (void)dealloc { + [super dealloc]; +} + +- (IBAction)nextTrivia:(id)sender { + // Hide the current trivia + self.currentTrivia.hidden = YES; + + if ( self.currentTrivia == self.lastTrivia ) { + // If we are on the last trivia, we need to loop back to the first one. + self.currentTrivia = self.firstTrivia; + } else { + // Otherwise, just go to the trivia with the next tag. + NSInteger currentTriviaTag = self.currentTrivia.tag; + NSInteger nextTriviaTag = currentTriviaTag + 1; + + self.currentTrivia = [self.view viewWithTag:nextTriviaTag]; + } + + // Now that the currentTrivia has been reassigned, we can show the new one. + self.currentTrivia.hidden = NO; +} + +- (IBAction)previousTrivia:(id)sender { + // Hide the current trivia + self.currentTrivia.hidden = YES; + + if ( self.currentTrivia == self.firstTrivia ) { + // If we are on the first trivia, we need to loop back to the last one. + self.currentTrivia = self.lastTrivia; + } else { + // Otherwise, just go to the trivia with the previous tag. + NSInteger currentTriviaTag = self.currentTrivia.tag; + NSInteger nextTriviaTag = currentTriviaTag - 1; + + self.currentTrivia = [self.view viewWithTag:nextTriviaTag]; + } + + // Now that the currentTrivia has been reassigned, we can show the new one. + self.currentTrivia.hidden = NO; +} + +- (IBAction)back:(id)sender { + [self.navigationController popViewControllerAnimated:YES]; +} + +@end diff --git a/wolf3d/code/iphone/UIFontButton.h b/wolf3d/code/iphone/UIFontButton.h new file mode 100644 index 0000000..520384e --- /dev/null +++ b/wolf3d/code/iphone/UIFontButton.h @@ -0,0 +1,30 @@ +/* + + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + + +#import + +@interface UIFontButton : UIButton + + +@end diff --git a/wolf3d/code/iphone/UIFontButton.m b/wolf3d/code/iphone/UIFontButton.m new file mode 100644 index 0000000..4243fc2 --- /dev/null +++ b/wolf3d/code/iphone/UIFontButton.m @@ -0,0 +1,34 @@ +/* + + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import "UIFontButton.h" + +@implementation UIFontButton + +- (void)awakeFromNib { + CGFloat points = self.titleLabel.font.pointSize; + + self.titleLabel.font = [UIFont fontWithName:@"POSITYPE idSettler v10.2" size:points]; +} + +@end diff --git a/wolf3d/code/iphone/UIFontLabel.h b/wolf3d/code/iphone/UIFontLabel.h new file mode 100644 index 0000000..016ca7a --- /dev/null +++ b/wolf3d/code/iphone/UIFontLabel.h @@ -0,0 +1,30 @@ +/* + + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + + +#import + +@interface UIFontLabel : UILabel + + +@end diff --git a/wolf3d/code/iphone/UIFontLabel.m b/wolf3d/code/iphone/UIFontLabel.m new file mode 100644 index 0000000..f6f2096 --- /dev/null +++ b/wolf3d/code/iphone/UIFontLabel.m @@ -0,0 +1,34 @@ +/* + + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import "UIFontLabel.h" + +@implementation UIFontLabel + +- (void)awakeFromNib { + CGFloat points = self.font.pointSize; + + self.font = [UIFont fontWithName:@"POSITYPE idSettler v10.2" size:points]; +} + +@end diff --git a/wolf3d/code/iphone/UITableViewScrolling.h b/wolf3d/code/iphone/UITableViewScrolling.h new file mode 100644 index 0000000..2df185b --- /dev/null +++ b/wolf3d/code/iphone/UITableViewScrolling.h @@ -0,0 +1,35 @@ +/* + + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#ifndef UITABLEVIEWSCROLLING_H +#define UITABLEVIEWSCROLLING_H + + +@class UITableView; + +void UITableViewScrollingPageUp( UITableView * table, int totalRows ); +void UITableViewScrollingPageDown( UITableView * table, int totalRows ); +void UITableViewScrollingScrollToRow( UITableView * table, int row, int maxRow ); + + +#endif diff --git a/wolf3d/code/iphone/UITableViewScrolling.m b/wolf3d/code/iphone/UITableViewScrolling.m new file mode 100644 index 0000000..0b7d88c --- /dev/null +++ b/wolf3d/code/iphone/UITableViewScrolling.m @@ -0,0 +1,74 @@ +/* + + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import "UITableViewScrolling.h" +#import + +void UITableViewScrollingPageDown( UITableView * table, int totalRows ) { + // If the user taps the page down button, we want to scroll the table view so that the first + // non-visible row becomes visible. To do this, we can get the array of visible index paths, + // find the maximum row within the array, and scroll to the row just after that. + + NSArray* visibleIndexPaths = [table indexPathsForVisibleRows]; + + int maxRow = 0; + + for ( NSIndexPath* path in visibleIndexPaths ) { + maxRow = maxRow < path.row ? path.row: maxRow; + } + + const int rowToMakeVisible = maxRow + 1; + + UITableViewScrollingScrollToRow( table,rowToMakeVisible, totalRows ); +} + + +void UITableViewScrollingPageUp( UITableView * table, int totalRows ) { + + // If the user taps the page up button, we want to scroll the table view so that the first + // non-visible row becomes visible. To do this, we can get the array of visible index paths, + // find the minimum row within the array, and scroll to the row just before that. + + NSArray* visibleIndexPaths = [table indexPathsForVisibleRows]; + + int minRow = totalRows - 1; + + for ( NSIndexPath* path in visibleIndexPaths ) { + minRow = minRow < path.row ? minRow: path.row; + } + + const int rowToMakeVisible = minRow - 1; + + UITableViewScrollingScrollToRow( table,rowToMakeVisible, totalRows ); +} + + +void UITableViewScrollingScrollToRow( UITableView * table, int row, int maxRow ) { + + const int clampedRowMax = row < maxRow? row: maxRow-1; + const int clampedRow = clampedRowMax < 0? 0: clampedRowMax; + + NSIndexPath* pathToMakeVisible = [NSIndexPath indexPathForRow:clampedRow inSection:0]; + + [table scrollToRowAtIndexPath:pathToMakeVisible atScrollPosition:UITableViewScrollPositionNone animated:YES]; +} diff --git a/wolf3d/code/iphone/WolfSlider.h b/wolf3d/code/iphone/WolfSlider.h new file mode 100644 index 0000000..576200a --- /dev/null +++ b/wolf3d/code/iphone/WolfSlider.h @@ -0,0 +1,31 @@ +/* + + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import + + +@interface WolfSlider : UISlider { + +} + +@end diff --git a/wolf3d/code/iphone/WolfSlider.m b/wolf3d/code/iphone/WolfSlider.m new file mode 100644 index 0000000..68f3c11 --- /dev/null +++ b/wolf3d/code/iphone/WolfSlider.m @@ -0,0 +1,40 @@ +/* + + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import "WolfSlider.h" + + +@implementation WolfSlider + + +- (CGRect)trackRectForBounds:(CGRect)bounds { + + UIImage* trackImage = [self minimumTrackImageForState:UIControlStateNormal]; + + CGFloat trackImageHeight = trackImage.size.height; + + return CGRectMake(bounds.origin.x, bounds.origin.y, self.bounds.size.width, trackImageHeight); +} + + +@end diff --git a/wolf3d/code/iphone/gles_glue.c b/wolf3d/code/iphone/gles_glue.c index d4d53f9..f291b8a 100644 --- a/wolf3d/code/iphone/gles_glue.c +++ b/wolf3d/code/iphone/gles_glue.c @@ -1,6 +1,9 @@ /* - Copyright (C) 2009 Id Software, Inc. + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -46,8 +49,8 @@ unsigned int QGLBeginStarted = 0; struct Vertex { - float xyz[3]; - float st[2]; + GLfloat xyz[3]; + GLfloat st[2]; GLubyte c[4]; }; @@ -56,10 +59,12 @@ struct Vertex { typedef struct Vertex Vertex; Vertex immediate[ MAX_VERTS ]; Vertex vab; -short quad_indexes[MAX_VERTS * 3 / 2 ]; +GLushort quad_indexes[MAX_VERTS * 3 / 2 ]; int curr_vertex; GLenum curr_prim; +GLuint quad_index_buffer_name; + void InitImmediateModeGL() { for ( int i = 0; i < MAX_VERTS * 3 / 2; i+=6 ) { int q = i / 6 * 4; @@ -71,6 +76,11 @@ void InitImmediateModeGL() { quad_indexes[ i + 4 ] = q + 2; quad_indexes[ i + 5 ] = q + 3; } + + // Use a VBO for the quad indices, since they never change. + glGenBuffers( 1, &quad_index_buffer_name ); + glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, quad_index_buffer_name ); + glBufferData( GL_ELEMENT_ARRAY_BUFFER, sizeof( quad_indexes), quad_indexes, GL_STATIC_DRAW ); qglVertexPointer( 3, GL_FLOAT, sizeof( Vertex ), immediate[ 0 ].xyz ); qglTexCoordPointer( 2, GL_FLOAT, sizeof( Vertex ), immediate[ 0 ].st ); @@ -132,7 +142,7 @@ void pfglTexCoord2f( GLfloat s, GLfloat t ) { void pfglEnd() { if ( curr_prim == GL_QUADS ) { - qglDrawElements( GL_TRIANGLES, curr_vertex / 4 * 6, GL_UNSIGNED_SHORT, quad_indexes ); + qglDrawElements( GL_TRIANGLES, curr_vertex / 4 * 6, GL_UNSIGNED_SHORT, (void*)0 ); } else { qglDrawArrays( curr_prim, 0, curr_vertex ); } diff --git a/wolf3d/code/iphone/gles_glue.h b/wolf3d/code/iphone/gles_glue.h index 7942186..0f9e4e8 100644 --- a/wolf3d/code/iphone/gles_glue.h +++ b/wolf3d/code/iphone/gles_glue.h @@ -55,6 +55,7 @@ extern "C" { void pfglBegin( GLenum prim ); void pfglVertex3f( float x, float y, float z ); void pfglVertex2i( GLint x, GLint y ); +void pfglVertex2f(GLfloat x, GLfloat y ); void pfglColor4ub( GLubyte r, GLubyte g, GLubyte b, GLubyte a ); void pfglColor4f( GLfloat r, GLfloat g, GLfloat b, GLfloat a ); void pfglTexCoord2i( GLint s, GLint t ); diff --git a/wolf3d/code/iphone/hud.c b/wolf3d/code/iphone/hud.c index 056a76e..9472bc0 100644 --- a/wolf3d/code/iphone/hud.c +++ b/wolf3d/code/iphone/hud.c @@ -1,6 +1,9 @@ /* - Copyright (C) 2009 Id Software, Inc. + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -20,6 +23,9 @@ #include "../wolfiphone.h" +extern int BackButton(); +extern int MenuButton(); + hud_t huds; void HudDraw(); @@ -76,44 +82,102 @@ void HudSetTexnums() { #endif } +// HUD element sizes +#define HUD_FORWARD_STICK_WIDTH 100 +#define HUD_FORWARD_STICK_HEIGHT 100 + +#define HUD_SIDE_STICK_WIDTH 100 +#define HUD_SIDE_STICK_HEIGHT 100 + +#define HUD_TURN_STICK_WIDTH 100 +#define HUD_TURN_STICK_HEIGHT 100 + +#define HUD_FIRE_BUTTON_WIDTH 80 +#define HUD_FIRE_BUTTON_HEIGHT 80 + +#define HUD_MENU_BUTTON_WIDTH 64 +#define HUD_MENU_BUTTON_HEIGHT 64 + +#define HUD_MAP_BUTTON_WIDTH 64 +#define HUD_MAP_BUTTON_HEIGHT 64 + +#define HUD_AMMO_WIDTH 80 +#define HUD_AMMO_HEIGHT 44 + + +#define TABLET_STICK_SCALE 0.9f + void HudSetForScheme( int schemeNum ) { + + int forwardWidth = HUD_FORWARD_STICK_WIDTH * screenScale; + int forwardHeight = HUD_FORWARD_STICK_HEIGHT * screenScale; + + int sideWidth = HUD_SIDE_STICK_WIDTH * screenScale; + int sideHeight = HUD_SIDE_STICK_HEIGHT * screenScale; + + int turnWidth = HUD_TURN_STICK_WIDTH * screenScale; + int turnHeight = HUD_TURN_STICK_HEIGHT * screenScale; + + int fireWidth = HUD_FIRE_BUTTON_WIDTH * screenScale; + int fireHeight = HUD_FIRE_BUTTON_HEIGHT * screenScale; + + int menuWidth = HUD_MENU_BUTTON_WIDTH * screenScale; + int menuHeight = HUD_MENU_BUTTON_HEIGHT * screenScale; + + int mapWidth = HUD_MAP_BUTTON_WIDTH * screenScale; + int mapHeight = HUD_MAP_BUTTON_HEIGHT * screenScale; + + int ammoWidth = HUD_AMMO_WIDTH * screenScale; + int ammoHeight = HUD_AMMO_HEIGHT * screenScale; + + // Scale the size of the sticks down a bit on the iPad. This helps normalize the + // sensitivity and helps with any potential controller attachments :) + if ( iphoneGetDeviceType() == DEVICE_TABLET ) { + forwardWidth *= TABLET_STICK_SCALE; + forwardHeight *= TABLET_STICK_SCALE; + sideWidth *= TABLET_STICK_SCALE; + sideHeight *= TABLET_STICK_SCALE; + turnWidth *= TABLET_STICK_SCALE; + turnHeight *= TABLET_STICK_SCALE; + } + switch ( schemeNum ) { default: case 0: - SetHudSpot( &huds.forwardStick, 0, 320-100, 100, 100, 0 ); - SetHudSpot( &huds.sideStick, 0, 320-100, 100, 100, HF_DISABLED ); - SetHudSpot( &huds.turnStick, 0, 320-100, 100, 100, 0 ); - SetHudSpot( &huds.fire, 480-80, 320-80, 80, 80, 0 ); - SetHudSpot( &huds.menu, 480-64, 0, 64, 32, 0 ); - SetHudSpot( &huds.map, 0, 0, 64, 32, 0 ); - SetHudSpot( &huds.ammo, 480-80, 320-100-44, 80, 44, 0 ); + SetHudSpot( &huds.forwardStick, 0, viddef.height-forwardHeight, forwardWidth, forwardHeight, 0 ); + SetHudSpot( &huds.sideStick, 0, viddef.height-sideHeight, sideWidth, sideHeight, HF_DISABLED ); + SetHudSpot( &huds.turnStick, 0, viddef.height-turnHeight, turnWidth, turnHeight, 0 ); + SetHudSpot( &huds.fire, viddef.width-fireWidth, viddef.height-fireHeight, fireWidth, fireHeight, 0 ); + SetHudSpot( &huds.menu, viddef.width-menuWidth, 0, menuWidth, menuHeight, 0 ); + SetHudSpot( &huds.map, 0, 0, mapWidth, mapHeight, 0 ); + SetHudSpot( &huds.ammo, viddef.width-ammoWidth, viddef.height-fireHeight-ammoHeight, ammoWidth, ammoHeight, 0 ); break; case 1: - SetHudSpot( &huds.forwardStick, 480-100, 320-100, 100, 100, 0 ); - SetHudSpot( &huds.sideStick, 0, 320-100, 100, 100, HF_DISABLED ); - SetHudSpot( &huds.turnStick, 480-100, 320-100, 100, 100, 0 ); - SetHudSpot( &huds.fire, 0, 320-80, 80, 80, 0 ); - SetHudSpot( &huds.menu, 480-64, 0, 64, 32, 0 ); - SetHudSpot( &huds.map, 0, 0, 64, 32, 0 ); - SetHudSpot( &huds.ammo, 480-80, 320-100-44, 80, 44, 0 ); + SetHudSpot( &huds.forwardStick, viddef.width-forwardWidth, viddef.height-forwardHeight, forwardWidth, forwardHeight, 0 ); + SetHudSpot( &huds.sideStick, 0, viddef.height-sideHeight, sideWidth, sideHeight, HF_DISABLED ); + SetHudSpot( &huds.turnStick, viddef.width-turnWidth, viddef.height-turnHeight, turnWidth, turnHeight, 0 ); + SetHudSpot( &huds.fire, 0, viddef.height-fireHeight, fireWidth, fireHeight, 0 ); + SetHudSpot( &huds.menu, viddef.width-menuWidth, 0, menuWidth, menuHeight, 0 ); + SetHudSpot( &huds.map, 0, 0, mapWidth, mapHeight, 0 ); + SetHudSpot( &huds.ammo, 0, viddef.height-fireHeight-ammoHeight, ammoWidth, ammoHeight, 0 ); break; case 2: - SetHudSpot( &huds.forwardStick, 0, 320-100, 100, 100, 0 ); - SetHudSpot( &huds.sideStick, 0, 320-100, 100, 100, 0 ); - SetHudSpot( &huds.turnStick, 480-100, 320-100, 100, 100, 0 ); - SetHudSpot( &huds.fire, 480-80, 0, 80, 80, 0 ); - SetHudSpot( &huds.menu, 0, 32, 64, 32, 0 ); - SetHudSpot( &huds.map, 0, 0, 64, 32, 0 ); - SetHudSpot( &huds.ammo, 480-80, 80, 80, 44, 0 ); + SetHudSpot( &huds.forwardStick, 0, viddef.height-forwardHeight, forwardWidth, forwardHeight, 0 ); + SetHudSpot( &huds.sideStick, 0, viddef.height-sideHeight, sideWidth, sideHeight, 0 ); + SetHudSpot( &huds.turnStick, viddef.width-turnWidth, viddef.height-turnHeight, turnWidth, turnHeight, 0 ); + SetHudSpot( &huds.fire, viddef.width-fireWidth, 0, fireWidth, fireHeight, 0 ); + SetHudSpot( &huds.menu, 0, mapHeight, menuWidth, menuHeight, 0 ); + SetHudSpot( &huds.map, 0, 0, mapWidth, mapHeight, 0 ); + SetHudSpot( &huds.ammo, viddef.width-ammoWidth, fireHeight, ammoWidth, ammoHeight, 0 ); break; case 3: - SetHudSpot( &huds.forwardStick, 480-100, 320-100, 100, 100, 0 ); - SetHudSpot( &huds.sideStick, 480-100, 320-100, 100, 100, 0 ); - SetHudSpot( &huds.turnStick, 0, 320-100, 100, 100, 0 ); - SetHudSpot( &huds.fire, 480-80, 0, 80, 80, 0 ); - SetHudSpot( &huds.menu, 0, 32, 64, 32, 0 ); - SetHudSpot( &huds.map, 0, 0, 64, 32, 0 ); - SetHudSpot( &huds.ammo, 480-80, 80, 80, 44, 0 ); + SetHudSpot( &huds.forwardStick, viddef.width-forwardWidth, viddef.height-forwardHeight, forwardWidth, forwardHeight, 0 ); + SetHudSpot( &huds.sideStick, viddef.width-sideWidth, viddef.height-sideHeight, sideWidth, sideHeight, 0 ); + SetHudSpot( &huds.turnStick, 0, viddef.height-turnHeight, turnWidth, turnHeight, 0 ); + SetHudSpot( &huds.fire, viddef.width-fireWidth, 0, fireWidth, fireHeight, 0 ); + SetHudSpot( &huds.menu, 0, mapHeight, menuWidth, menuHeight, 0 ); + SetHudSpot( &huds.map, 0, 0, mapWidth, mapHeight, 0 ); + SetHudSpot( &huds.ammo, viddef.width-ammoWidth, fireHeight, ammoWidth, ammoHeight, 0 ); break; } @@ -192,14 +256,14 @@ void HudEditFrame() { if ( dragHud->x < 0 ) { dragHud->x = 0; } - if ( dragHud->x > 480 - dragHud->width ) { - dragHud->x = 480 - dragHud->width; + if ( dragHud->x > viddef.width - dragHud->width ) { + dragHud->x = viddef.width - dragHud->width; } if ( dragHud->y < 0 ) { dragHud->y = 0; } - if ( dragHud->y > 320 - dragHud->height ) { - dragHud->y = 320 - dragHud->height; + if ( dragHud->y > viddef.height - dragHud->height ) { + dragHud->y = viddef.height - dragHud->height; } } @@ -210,7 +274,7 @@ void HudEditFrame() { w += hud->width; } } - x = 240 - w / 2; + x = (480 / 2) - w / 2; for ( hudPic_t *hud = (hudPic_t *)&huds ; hud != (hudPic_t *)(&huds+1) ; hud++ ) { if ( hud->hudFlags & HF_DISABLED ) { @@ -242,7 +306,7 @@ void HudEditFrame() { } // draw the done button - if ( iphoneDrawPicWithTouch( 240-32, 320-80-32, 64, 32, "iphone/button_back.tga" ) ) { + if ( iphoneDrawPicWithTouch( (480 / 2)-32, 320-80-32, 64, 32, "iphone/button_back.tga" ) ) { menuState = IPM_CONTROLS; iphoneSetNotifyText( "" ); } @@ -279,11 +343,16 @@ void ConvertFromImageToScreen(int *x, int *y, rect_t boundsRect) //int boundsUnder = 320-10; int height = boundsUnder - boundsAbove; + float windowWidth = 480.0f; + float windowHeight = 320.0f; + + ScalePositionAndSize( NULL, NULL, &windowWidth, &windowHeight ); + valX -= boundsLeft; - valX = 480*valX/width; + valX = windowWidth*valX/width; valY -= boundsAbove; - valY = 320*valY/height; + valY = windowHeight*valY/height; *x = valX; *y = valY; @@ -295,7 +364,7 @@ void ConvertFromImageToScreen(int *x, int *y, rect_t boundsRect) // to the coordinates of the screen of the iphone image // gsh //------------------- -void ConvertFromScreenToImage(int *x, int *y, rect_t boundsRect) +void ConvertFromScreenToImage(int *x, int *y, rect_t boundsRect, float screenWidth, float screenHeight ) { int boundsLeft = boundsRect.x; int boundsRight = boundsRect.x + boundsRect.width; @@ -312,11 +381,11 @@ void ConvertFromScreenToImage(int *x, int *y, rect_t boundsRect) //int boundsAbove = 100; //int boundsUnder = 320-10; int height = boundsUnder - boundsAbove; - - valX = width*valX/480; + + valX = width*valX/screenWidth; valX += boundsLeft; - valY = height*valY/320; + valY = height*valY/screenHeight; valY += boundsAbove; *x = valX; @@ -346,8 +415,13 @@ void ScaleFromScreenToImage(int *width, int *height, rect_t boundsRect) //int boundsUnder = 320-10; int iH = boundsUnder - boundsAbove; - w = w*iW/480; - h = h*iH/320; + float screenWidth = 480.0f; + float screenHeight = 320.0f; + + ScalePositionAndSize( NULL, NULL, &screenWidth, &screenHeight ); + + w = w*iW/screenWidth; + h = h*iH/screenHeight; *width = w; *height = h; @@ -369,8 +443,18 @@ void iphoneHudEditFrame() { int adjustY = 10; rect_t boundsRect = RectMake(86, 80-adjustY, 300, 205); + rect_t scaledBoundsRect; + scaledBoundsRect.x = boundsRect.x; + scaledBoundsRect.y = boundsRect.y; + scaledBoundsRect.width = boundsRect.width; + scaledBoundsRect.height = boundsRect.height; + ScaleRect( &scaledBoundsRect ); + + float scaledScreenWidth = 480.0f; + float scaledScreenHeight = 320.0f; + ScalePositionAndSize( NULL, NULL, &scaledScreenWidth, &scaledScreenHeight ); //iphoneSetNotifyText( "Drag the controls" ); @@ -380,10 +464,22 @@ void iphoneHudEditFrame() { int y = prevTouches[0][1]; //convert x, y coordinates from iphone_image to screen coordinates - ConvertFromImageToScreen( &x, &y, boundsRect); + ConvertFromImageToScreen( &x, &y, scaledBoundsRect); //ConvertFromScreenToImage( &x, &y); - if ( x > 120 && x < 360 && y > 80 && y < 240 ) { + float disableRegionLeft = 120; + float disableRegionRight = REFERENCE_WIDTH - 120; + + float disableRegionTop = 80; + float disableRegionBottom = REFERENCE_HEIGHT - 80; + + disableRegionTop *= screenScale; + disableRegionBottom *= screenScale; + disableRegionLeft *= screenScale; + disableRegionRight *= screenScale; + + if ( x > disableRegionLeft && x < disableRegionRight && + y > disableRegionTop && y < disableRegionBottom ) { dragHud->hudFlags |= HF_DISABLED; } else { // magnet pull a matchable axis if it is close enough @@ -408,7 +504,7 @@ void iphoneHudEditFrame() { int y = touches[0][1]; //convert x, y coordinates from iphone_image to screen coordinates - ConvertFromImageToScreen( &x, &y, boundsRect); + ConvertFromImageToScreen( &x, &y, scaledBoundsRect); // ConvertFromScreenToImage( &x, &y); dragHud = NULL; @@ -416,9 +512,6 @@ void iphoneHudEditFrame() { if ( x >= hud->x && x - hud->x < hud->width && y >= hud->y && y - hud->y < hud->height ) { dragHud = hud; - //int tempDragX = dragHud->x; - //int tempDragY = dragHud->y; - //ConvertFromImageToScreen(&, <#int * y#>) dragX = dragHud->x - x; dragY = dragHud->y - y; Sound_StartLocalSound( "iphone/bdown_01.wav" ); @@ -432,21 +525,21 @@ void iphoneHudEditFrame() { // adjust the position of the dragHud int x = touches[0][0]; int y = touches[0][1]; - ConvertFromImageToScreen(&x, &y, boundsRect); + ConvertFromImageToScreen(&x, &y, scaledBoundsRect); dragHud->x = x + dragX; dragHud->y = y + dragY; if ( dragHud->x < 0 ) { dragHud->x = 0; } - if ( dragHud->x > 480 - dragHud->width ) { - dragHud->x = 480 - dragHud->width; + if ( dragHud->x > scaledScreenWidth - dragHud->width ) { + dragHud->x = scaledScreenWidth - dragHud->width; } if ( dragHud->y < 0 ) { dragHud->y = 0; } - if ( dragHud->y > 320 - dragHud->height ) { - dragHud->y = 320 - dragHud->height; + if ( dragHud->y > scaledScreenHeight - dragHud->height ) { + dragHud->y = scaledScreenHeight - dragHud->height; } } @@ -457,12 +550,12 @@ void iphoneHudEditFrame() { w += hud->width; } } - x = 240 - w / 2; + x = ( viddef.width / 2 ) - ( w / 2 ); for ( hudPic_t *hud = (hudPic_t *)&huds ; hud != (hudPic_t *)(&huds+1) ; hud++ ) { if ( hud->hudFlags & HF_DISABLED ) { hud->x = x; - hud->y = 160-hud->height/2; + hud->y = ( viddef.height / 2 ) - ( hud->height/2 ); x += hud->width; } } @@ -470,21 +563,21 @@ void iphoneHudEditFrame() { // decide where the menu button, map button, and ammo will draw // solid background color and some UI elements for context - R_Draw_Fill( 0, 0, 480, 320, gray ); + rectFloat_t backgroundFill = MakeScaledRectFloat( 0.0f, 0.0f, 480.0f, 320.0f ); + R_Draw_Fill( backgroundFill.x, backgroundFill.y, backgroundFill.width, backgroundFill.height, gray ); - iphoneDrawPic(0, 0, 480, 320, "iphone/submenus_background_image.tga"); + iphoneDrawPicRect( MakeScaledRectFloat( 0.0f, 0.0f, 480.0f, 320.0f ), "iphone/submenus_background_image.tga"); //iphoneDrawPic(240-108, 0, 217, 50, "iphone/header_advanced.tga"); - iphoneDrawPic(240-108*9/10, 0, 217*9/10, 50*9/10, "iphone/header_advanced.tga"); + iphoneDrawPicRect( MakeScaledRectFloat( 240.0f-108.0f*9/10.0f, 0.0f, 217.0f*9/10.0f, 50.0f*9/10.0f ), "iphone/header_advanced.tga"); //gsh - iphoneDrawPic(10, 60-adjustY, 462, 250, "iphone/iphone_image.tga"); + iphoneDrawPicRect( MakeScaledRectFloat( 10.0f, 60.0f-adjustY, 462.0f, 250.0f ), "iphone/iphone_image.tga"); // iphoneDrawPic(0, 320-240, 480, 240, "iphone/iphone_image.tga"); // iphoneDrawFace(); // iphoneDrawNotifyText(); - // draw the active items at their current locations for ( hudPic_t *hud = (hudPic_t *)&huds ; hud != (hudPic_t *)(&huds+1) ; hud++ ) { //nice foreach loop! if ( hud->hudFlags & HF_DISABLED ) { @@ -496,8 +589,10 @@ void iphoneHudEditFrame() { int w = 48; int h = 48; - ConvertFromScreenToImage(&x, &y, boundsRect); - ScaleFromScreenToImage(&w, &h, boundsRect); + ConvertFromScreenToImage(&x, &y, scaledBoundsRect, scaledScreenWidth, scaledScreenHeight ); + ScaleFromScreenToImage(&w, &h, scaledBoundsRect); + + //ScalePositionAndSizeInt( &x, &y, &w, &h ); iphoneDrawNumber( x, y, 99, w, h ); } else { @@ -506,8 +601,10 @@ void iphoneHudEditFrame() { int w = hud->width; int h = hud->height; - ConvertFromScreenToImage(&x, &y, boundsRect); - ScaleFromScreenToImage(&w, &h, boundsRect); + ConvertFromScreenToImage(&x, &y, scaledBoundsRect, scaledScreenWidth, scaledScreenHeight ); + ScaleFromScreenToImage(&w, &h, scaledBoundsRect); + + //ScalePositionAndSizeInt( &x, &y, &w, &h ); iphoneDrawPicNum( x, y, w, h, hud->glTexNum ); } @@ -519,16 +616,14 @@ void iphoneHudEditFrame() { // draw the back button - if ( iphoneDrawPicWithTouch( 0, 0, 64, 36, "iphone/button_back.tga" ) ) { - menuState = IPM_CONTROLS; + if ( BackButton() ) { + iphoneStartPreviousMenu(); iphoneSetNotifyText( "" ); } - //x = 64; - //if (revLand->value) - x = 480-64; + x = 480-64; // draw the menu button - if ( iphoneDrawPicWithTouch( x, 0, 64, 36, "iphone/menu.tga" ) ) { + if ( MenuButton() ) { //if ( iphoneDrawPicWithTouch( 64, 0, 64, 36, "iphone/button_menu_yellow.tga" ) ) { menuState = IPM_MAIN; iphoneSetNotifyText( "" ); @@ -543,10 +638,6 @@ void iphoneHudEditFrame() { int y = 0; y = 0; x = 480-width; - if (revLand->value){ - y = 320-height; - x = 0; - } //gsh if ((int)volumeFireUpSetting->value) { @@ -560,8 +651,6 @@ void iphoneHudEditFrame() { x = 480-width-width-5; - if (revLand->value) - x = width+5; if ((int)volumeFireDownSetting->value) { if (iphoneDrawPicWithTouch( x, y, width, height, "iphone/button_pistol.tga" )) @@ -574,10 +663,6 @@ void iphoneHudEditFrame() { //----------------------------------- */ //draw the instructions - //if (revLand->value) - // iphoneDrawText(x+width+20, 300, 16, 16, "Drag the controls to customize"); - //else -// iphoneCenterText(240, 300, "Drag each element of the controls to customize"); iphoneCenterArialText(245, 315, 0.8f, "Drag each element of the controls to customize"); } diff --git a/wolf3d/code/iphone/iphone_alerts.h b/wolf3d/code/iphone/iphone_alerts.h index 45227d0..f7ffd5f 100644 --- a/wolf3d/code/iphone/iphone_alerts.h +++ b/wolf3d/code/iphone/iphone_alerts.h @@ -1,16 +1,9 @@ -/* - * iphone_alerts.h - * wolf3d - * - * Created by Greg Hodges on 7/14/09. - * Copyright 2009 id software. All rights reserved. - * - * C wrappers for the UIAlertView. - * - */ /* - Copyright (C) 2009 Id Software, Inc. + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -28,12 +21,12 @@ */ - #ifndef __IPHONE_ALERTS__ #define __IPHONE_ALERTS__ void iphoneMessageBox(char *title, char *message); void iphoneKillMessageBox(); +void iphoneNewMessageBox(char *title, char *message); void iphoneYesNoBox(char *title, char *message); #endif \ No newline at end of file diff --git a/wolf3d/code/iphone/iphone_alerts.m b/wolf3d/code/iphone/iphone_alerts.m index e1a4464..7ec2f3c 100644 --- a/wolf3d/code/iphone/iphone_alerts.m +++ b/wolf3d/code/iphone/iphone_alerts.m @@ -1,14 +1,9 @@ -/* - * iphone_alerts.c - * wolf3d - * - * Created by Greg Hodges on 7/14/09. - * Copyright 2009 id software. All rights reserved. - * - */ /* - Copyright (C) 2009 Id Software, Inc. + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -26,7 +21,6 @@ */ - #import "iphone_alerts.h" #import "wolf3dAppDelegate.h" @@ -71,6 +65,34 @@ void iphoneKillMessageBox() [alert dismissWithClickedButtonIndex:alert.cancelButtonIndex animated:NO]; } +/* + ======================== + iphoneNewMessageBox() + creates a new message box without + drestroying the old one + ======================== + */ +void iphoneNewMessageBox(char *title, char *message) +{ + UIAlertView *newAlert; + newAlert = [[UIAlertView alloc] initWithTitle:@"Title" + message:@"Message" + delegate:nil + cancelButtonTitle:@"OK" + otherButtonTitles: nil]; + + + NSString *nsTitle = [[NSString alloc] initWithCString:title]; + NSString *nsMessage = [[NSString alloc] initWithCString:message]; + + newAlert.title = nsTitle; + newAlert.message = nsMessage; + + [newAlert show]; + [newAlert release]; +} + + #if 1 /* ================================== diff --git a/wolf3d/code/iphone/iphone_downloadSOD.m b/wolf3d/code/iphone/iphone_downloadSOD.m index 0cf94a3..74efe5c 100644 --- a/wolf3d/code/iphone/iphone_downloadSOD.m +++ b/wolf3d/code/iphone/iphone_downloadSOD.m @@ -1,13 +1,9 @@ -// -// iphone_downloadSOD.m -// wolf3d -// -// Created by Greg Hodges on 6/8/09. -// Copyright 2009 id software. All rights reserved. -// /* - Copyright (C) 2009 Id Software, Inc. + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -25,15 +21,15 @@ */ - - #import "../wolfiphone.h" #import "wolf3dAppDelegate.h" +//#import "zlib.h" #import "iphone_alerts.h" #include #include +//gsh #import //this is for testing network availability //Note: in order to link the zlib library into the build from usr/lib/libz.ylib @@ -46,6 +42,7 @@ extern void Com_Printf(const char* fmt, ... ); extern void my_snprintf( char *dest, size_t size, const char *format, ... ); #ifdef SPEARSTOREKIT +//extern int StartUntgz(char *TGZfile); extern void PurchaseSOD(); extern bool isStorekitAvailable; #endif @@ -178,6 +175,11 @@ void DownloadSOD() { menuState = IPM_DOWNLOADPROGRESS; //change the menu to the download screen + /* + //TODO: alert user that the download is beginning and will take a while + */ + //iphoneMessageBox("Download in Progress", "You have not been charged. Purchasing comes at the end of this process. Download may take several minutes."); + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; @@ -199,6 +201,20 @@ void DownloadSOD() //after this the control automatically goes back to the appDelegate where it receives the packets of downloaded information } +/* +//============================ +// AppendData +// adds a packet of data to our buffer +//============================ +void AppendData(NSData* data) +{ + Com_Printf("appending data\n"); + + NSUInteger length = [data length]; + NSLog(@"Received %d bytes of data", length); + +// [receivedData appendData:data]; +}*/ unsigned int dataAmount = 0; unsigned int dataTotalAmount = 0; @@ -216,7 +232,13 @@ void AppendDataToFile(NSData* data) dataAmount = (unsigned int)length; dataTotalAmount += dataAmount; totalDownloaded = dataTotalAmount; //update the download screen with the total downloaded - +/* + if (dataTotalAmount > DownloadFileSize * 7/10 && !hasBeenMessaged) + { + iphoneMessageBox("Extraction in Progress", "SOD is installing. This may take several minutes."); + hasBeenMessaged = 1; + } +*/ //get documents directory NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; @@ -253,7 +275,162 @@ void DecompressData() char path[1024]; my_snprintf(path, sizeof(path), "%s/downloadedfile.tgz", iphoneDocDirectory); + +// StartUntgz(path); //this is where we would normally start decompression. + //but we no longer need to decompress anything + //so we might as well get rid of our zlib dependencies } +/* +//================================ +// CopyFolders +// Copies the contents of the base folder to the SODbase folder +// One folder at a time... hopefully to allow renderings +// This allows us to provide a smaller download +//================================ +void CopyFolders() +{ + int numberOfFolders = 7; + char sourcePath[1024]; + char destPath[1024]; + char folderNames[7][8] = {"iphone","lsfx","maps","music","sfx","sprites","walls"}; + + char *appDir; + appDir = getenv("CWD"); + + NSString *source; + NSString *toPath; + + //Draw a black colored bar + colour4_t backgroundColor = { 10, 10, 10, 255 }; + R_Draw_Blend( 40, 150, 4*100, 20, backgroundColor ); + + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSError *error; + + //try creating the base directory + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/", iphoneDocDirectory); + toPath = [[NSString alloc] initWithUTF8String:destPath]; + NSLog(@"creating Directory: %@", toPath); + if([fileManager createDirectoryAtPath:toPath attributes:nil]) + Com_Printf("creating SODbase success!\n"); + else + Com_Printf("creating SODbase failed :(\n"); + + for (int i = 0; i < numberOfFolders; ++i) + { + + my_snprintf(sourcePath, sizeof(sourcePath), "%s/base/%s", appDir, folderNames[i]); + // my_snprintf(destPath, sizeof(destPath), "%s/base/", iphoneDocDirectory); + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/%s", iphoneDocDirectory, folderNames[i]); + + source = [[NSString alloc] initWithUTF8String:sourcePath]; + toPath = [[NSString alloc] initWithUTF8String:destPath]; + + NSLog(source); + NSLog(toPath); + + //attempt the copy + if ([fileManager copyItemAtPath:source toPath:toPath error:&error])//; + Com_Printf("copy base %s success!\n", folderNames[i]); + else + Com_Printf("copy %s folder failed :(\n", folderNames[i]); + + //draw the next iteration + colour4_t color = { 255, 0, 0, 255 }; + R_Draw_Blend( 40, 150, 400*i/numberOfFolders, 20, color ); + + SysIPhoneSwapBuffers(); + + [source release]; + [toPath release]; + } + + //TODO: delete some of the copied files + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/sprites/012.5551", iphoneDocDirectory); + remove(destPath); + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/sprites/017.5551", iphoneDocDirectory); + remove(destPath); + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/sprites/024.5551", iphoneDocDirectory); + remove(destPath); + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/sprites/042.5551", iphoneDocDirectory); + remove(destPath); + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/sprites/046.5551", iphoneDocDirectory); + remove(destPath); + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/sprites/047.5551", iphoneDocDirectory); + remove(destPath); + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/sprites/048.5551", iphoneDocDirectory); + remove(destPath); + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/sprites/050.5551", iphoneDocDirectory); + remove(destPath); + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/sprites/051.5551", iphoneDocDirectory); + remove(destPath); + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/sprites/052.5551", iphoneDocDirectory); + remove(destPath); + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/sprites/053.5551", iphoneDocDirectory); + remove(destPath); + +} + + +//================================ +// CopyFolder +// Copies the contents of the base folder to the SODbase folder +// This allows us to provide a smaller download +// This is all very slow. The POSIX library might've been faster. +//================================ +void CopyFolder() +{ + + char sourcePath[1024]; + char destPath[1024]; + + char *appDir; + appDir = getenv("CWD"); + + my_snprintf(sourcePath, sizeof(sourcePath), "%s/base/", appDir); + // my_snprintf(destPath, sizeof(destPath), "%s/base/", iphoneDocDirectory); + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/", iphoneDocDirectory); + + NSString *source = [[NSString alloc] initWithUTF8String:sourcePath]; + NSString *toPath = [[NSString alloc] initWithUTF8String:destPath]; + + NSLog(source); + NSLog(toPath); + + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSError *error; + + //attempt the copy + if ([fileManager copyItemAtPath:source toPath:toPath error:&error])//; + Com_Printf("copy base folder success!\n"); + else + Com_Printf("copy base folder failed :(\n"); + + + //TODO: delete some of the copied files + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/sprites/012.5551", iphoneDocDirectory); + remove(destPath); + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/sprites/017.5551", iphoneDocDirectory); + remove(destPath); + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/sprites/024.5551", iphoneDocDirectory); + remove(destPath); + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/sprites/042.5551", iphoneDocDirectory); + remove(destPath); + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/sprites/046.5551", iphoneDocDirectory); + remove(destPath); + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/sprites/047.5551", iphoneDocDirectory); + remove(destPath); + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/sprites/048.5551", iphoneDocDirectory); + remove(destPath); + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/sprites/050.5551", iphoneDocDirectory); + remove(destPath); + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/sprites/051.5551", iphoneDocDirectory); + remove(destPath); + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/sprites/052.5551", iphoneDocDirectory); + remove(destPath); + my_snprintf(destPath, sizeof(destPath), "%s/SODbase/sprites/053.5551", iphoneDocDirectory); + remove(destPath); +}*/ //================================ // IsSpearPurchased @@ -337,6 +514,10 @@ void FinalizeDownload() NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *fileName = [documentsDirectory stringByAppendingString:@"/downloadedfile.tgz"]; + + //TODO: after save check that the file is of the correct size... if it isn't then something was corrupted + // and we should try again + //inflate the data and store in its appropriate directory DecompressData(); diff --git a/wolf3d/code/iphone/iphone_downloadUserMap.m b/wolf3d/code/iphone/iphone_downloadUserMap.m index 1b1172b..d66140a 100644 --- a/wolf3d/code/iphone/iphone_downloadUserMap.m +++ b/wolf3d/code/iphone/iphone_downloadUserMap.m @@ -1,14 +1,9 @@ -/* - * iphone_downloadUserMap.c - * wolf3d - * - * Created by Greg Hodges on 7/20/09. - * Copyright 2009 id software. All rights reserved. - * - */ /* - Copyright (C) 2009 Id Software, Inc. + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -26,7 +21,6 @@ */ - #import "../wolfiphone.h" #import "wolf3dAppDelegate.h" #import "iphone_alerts.h" @@ -91,7 +85,7 @@ void DownloadURLConnection( char *url ) if (dp != NULL) { struct dirent *ep; - while (ep = readdir (dp)) + while ( ( ep = readdir (dp) ) ) { //if you find a .DS_Store file... ignore it! if ( strcmp(ep->d_name, ".DS_Store") == 0 ) diff --git a/wolf3d/code/iphone/iphone_loop.c b/wolf3d/code/iphone/iphone_loop.c index 2667547..6d4a00c 100644 --- a/wolf3d/code/iphone/iphone_loop.c +++ b/wolf3d/code/iphone/iphone_loop.c @@ -1,6 +1,9 @@ /* - Copyright (C) 2009 Id Software, Inc. + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -138,10 +141,24 @@ int returnButtonFrameNum = 0; // console mode int consoleActive; +// The size of UI elements will be scaled by this value in order to support different +// resolutions, such as Retina displays and the iPad. +float screenScale = 1.0f; + // the native iPhone code should set the following each frame: int numTouches; int touches[5][2]; // [0] = x, [1] = y in landscape mode, raster order with y = 0 at top int isTouchMoving = 0; //gsh + +// On Retina displays, touch coordinates are still reported at "low resolution". Since the game +// compares touch coordinates directly to the on-screen positions of buttons, we will need to +// scale the touches on Retina displays. +int touchCoordinateScale = 1; + +float deviceScale = 1.0f; + +deviceOrientation_t deviceOrientation = ORIENTATION_LANDSCAPE_LEFT; + float tilt; // -1.0 to 1.0 float tiltPitch; @@ -158,6 +175,10 @@ texture_t *numberPics[10]; //gsh texture_t *arialFontTexture; +// Profiling information +CFAbsoluteTime soundTime = 0.0; +CFAbsoluteTime menuTime = 0.0; + char *mugshotnames[ NUM_MUGSHOTS ] = { "iphone/FACE1APIC.tga", @@ -202,6 +223,20 @@ int attackDirTime[2]; logTime_t loggedTimes[MAX_LOGGED_TIMES]; // indexed by iphoneFrameNum + +// Some HUD element constants +#define HUD_FACE_WIDTH 64.0f +#define HUD_FACE_HEIGHT 80.0f + +#define HUD_WEAPON_WIDTH 128.0f +#define HUD_WEAPON_HEIGHT 128.0f + +float faceWidth = HUD_FACE_WIDTH; +float faceHeight = HUD_FACE_HEIGHT; + +float weaponWidth = HUD_WEAPON_WIDTH; +float weaponHeight = HUD_WEAPON_HEIGHT; + /* ================== iphoneActivateConsole @@ -305,14 +340,14 @@ int iphoneCenterText( int x, int y, const char *str ) { pfglTexCoord2f( fcol, frow ); pfglVertex2i( x, y ); - pfglTexCoord2f( fcol+myfont->wFrac, frow ); - pfglVertex2i( x+scale, y ); + pfglTexCoord2f( fcol, frow+myfont->hFrac ); + pfglVertex2i( x, y+scale ); pfglTexCoord2f( fcol+myfont->wFrac, frow+myfont->hFrac ); pfglVertex2i( x+scale, y+scale ); - pfglTexCoord2f( fcol, frow+myfont->hFrac ); - pfglVertex2i( x, y+scale ); + pfglTexCoord2f( fcol+myfont->wFrac, frow ); + pfglVertex2i( x+scale, y ); } pfglEnd(); @@ -338,6 +373,8 @@ void iphoneCenterTextWithColor(int x, int y, const char *str, colour4_t color ) ================== */ int iphoneDrawArialText( int x, int y, float scale, const char *str ) { + scale *= screenScale; + /* int l = strlen( str ); int i; @@ -392,17 +429,17 @@ int iphoneDrawArialText( int x, int y, float scale, const char *str ) { // pfglVertex2f( fx + xoff, fy + yoff ); pfglVertex2i( x, y + yoff); - pfglTexCoord2f( x1, y0 ); -// pfglVertex2f( fx + xoff + width, fy + yoff ); - pfglVertex2i( x+width, y + yoff); - + pfglTexCoord2f( x0, y1); +// pfglVertex2f( fx + xoff, fy + yoff + height ); + pfglVertex2i( x, y+height + yoff); + pfglTexCoord2f( x1, y1); // pfglVertex2f( fx + xoff + width, fy + yoff + height ); pfglVertex2i( x+width, y+height + yoff ); - pfglTexCoord2f( x0, y1); -// pfglVertex2f( fx + xoff, fy + yoff + height ); - pfglVertex2i( x, y+height + yoff); + pfglTexCoord2f( x1, y0 ); +// pfglVertex2f( fx + xoff + width, fy + yoff ); + pfglVertex2i( x+width, y + yoff); // with our default texture, the difference is negligable // fx += glyph->xadvance * scale; @@ -439,7 +476,11 @@ int iphoneCenterArialText( int x, int y, float scale, const char *str ) ++str; } - return iphoneDrawArialText( x - width/2, y, scale, strcopy ); + float scaledX = x - width / 2; + float scaledY = y; + ScalePosition( &scaledX, &scaledY ); + + return iphoneDrawArialText( scaledX, scaledY, scale, strcopy ); } /* ================== @@ -450,6 +491,7 @@ int iphoneCenterArialText( int x, int y, float scale, const char *str ) ================== */ int iphoneDrawArialTextInBox( rect_t paragraph, int lineLength, const char *str, rect_t boxRect ) { + int l = strlen( str ); int i; @@ -552,14 +594,14 @@ int iphoneDrawArialTextInBox( rect_t paragraph, int lineLength, const char *str, pfglTexCoord2f( x0, y0 ); pfglVertex2i( x, y + yoff); - pfglTexCoord2f( x1, y0 ); - pfglVertex2i( x+width, y + yoff); + pfglTexCoord2f( x0, y1); + pfglVertex2i( x, y+height + yoff); pfglTexCoord2f( x1, y1); pfglVertex2i( x+width, y+height + yoff ); - pfglTexCoord2f( x0, y1); - pfglVertex2i( x, y+height + yoff); + pfglTexCoord2f( x1, y0 ); + pfglVertex2i( x+width, y + yoff); x += glyph->xadvance * scale + 1; @@ -608,14 +650,15 @@ int iphoneDrawText( int x, int y, int width, int height, const char *str ) { pfglTexCoord2f( fcol, frow ); pfglVertex2i( x, y ); - pfglTexCoord2f( fcol+myfont->wFrac, frow ); - pfglVertex2i( x+width, y ); + pfglTexCoord2f( fcol, frow+myfont->hFrac ); + pfglVertex2i( x, y+height ); pfglTexCoord2f( fcol+myfont->wFrac, frow+myfont->hFrac ); pfglVertex2i( x+width, y+height ); - pfglTexCoord2f( fcol, frow+myfont->hFrac ); - pfglVertex2i( x, y+height ); + pfglTexCoord2f( fcol+myfont->wFrac, frow ); + pfglVertex2i( x+width, y ); + } pfglEnd(); @@ -644,8 +687,11 @@ void iphoneDrawTextWithColor( rect_t rect, const char *str, float colors[4] ) { */ void iphoneDrawMapName( rect_t rect, const char *str ) { + rect.y += 25; rect.x += 110;//80; + + rectFloat_t rectFloat = MakeScaledRectFloat( rect.x, rect.y, rect.width, rect.height ); /* float colors[4] = { 0, 0, 0, 1 }; iphoneDrawTextWithColor(RectMake(rect.x+1, rect.y+1, rect.width, rect.height), str, colors); @@ -657,11 +703,11 @@ void iphoneDrawMapName( rect_t rect, const char *str ) { */ pfglColor4f(0, 0, 0, 1); - iphoneDrawArialText(rect.x + 1, rect.y + 1, 0.9f, str); - iphoneDrawArialText(rect.x + 2, rect.y + 2, 0.9f, str); + iphoneDrawArialText(rectFloat.x + 1, rectFloat.y + 1, 0.9f, str); + iphoneDrawArialText(rectFloat.x + 2, rectFloat.y + 2, 0.9f, str); pfglColor4f(225.0f/255, 166.0f/255, 0, 1); pfglColor4f(225.0f/255, 242.0f/255, 0, 1); - iphoneDrawArialText(rect.x, rect.y, 0.9f, str); + iphoneDrawArialText(rectFloat.x, rectFloat.y, 0.9f, str); pfglColor4f(1, 1, 1, 1); } @@ -737,14 +783,14 @@ int iphoneDrawTextInBox( rect_t paragraph, int lineLength, const char *str, rect pfglTexCoord2f( fcol, frow ); pfglVertex2i( x, y ); - pfglTexCoord2f( fcol+myfont->wFrac, frow ); - pfglVertex2i( x+width, y ); + pfglTexCoord2f( fcol, frow+myfont->hFrac ); + pfglVertex2i( x, y+height ); pfglTexCoord2f( fcol+myfont->wFrac, frow+myfont->hFrac ); pfglVertex2i( x+width, y+height ); - pfglTexCoord2f( fcol, frow+myfont->hFrac ); - pfglVertex2i( x, y+height ); + pfglTexCoord2f( fcol+myfont->wFrac, frow ); + pfglVertex2i( x+width, y ); } pfglEnd(); @@ -752,7 +798,136 @@ int iphoneDrawTextInBox( rect_t paragraph, int lineLength, const char *str, rect return l * step; } +/* + ================== + ScaleToScreen + + Scales a value for the current resolution. + ================== + */ +void ScaleToScreen( int * value ) { + if ( value ) { + *value *= screenScale; + } +} +/* + ================== + ScalePosition + + Scales an x, y position for the current resolution. + ================== + */ +void ScalePosition( float * x, float * y ) { + if ( x ) { + *x *= screenScale; + *x += ( viddef.width - ( REFERENCE_WIDTH * screenScale ) ) / 2.0f; + } + + if ( y ) { + *y *= screenScale; + *y += ( viddef.height - ( REFERENCE_HEIGHT * screenScale ) ) / 2.0f; + } +} + +/* + ================== + ScalePositionInt + + Scales an x, y position for the current resolution. + ================== + */ +void ScalePositionInt( int * x, int * y ) { + if ( x ) { + *x *= screenScale; + *x += ( viddef.width - ( REFERENCE_WIDTH * screenScale ) ) / 2.0f; + } + + if ( y ) { + *y *= screenScale; + *y += ( viddef.height - ( REFERENCE_HEIGHT * screenScale ) ) / 2.0f; + } +} + +/* + ================== + ScalePositionAndSize + + Scales an x, y, width, and height set for the current resolution. + ================== + */ +void ScalePositionAndSize( float * x, float * y, float * w, float * h ) { + ScalePosition( x, y ); + + if ( w ) { + *w *= screenScale; + } + + if ( h ) { + *h *= screenScale; + } +} + +/* + ================== + ScalePositionAndSizeInt + + Scales an x, y, width, and height set for the current resolution. + ================== + */ +void ScalePositionAndSizeInt( int * x, int * y, int * w, int * h ) { + ScalePositionInt( x, y ); + + if ( w ) { + *w *= screenScale; + } + + if ( h ) { + *h *= screenScale; + } +} + +/* + ================== + ScaleRect + + Scales a rect for the current resolution. + ================== + */ +void ScaleRect( rect_t * rect ) { + if ( rect ) { + ScalePositionInt( &(rect->x), &(rect->y) ); + rect->width *= screenScale; + rect->height *= screenScale; + } +} + + +/* + ================== + ScaleRectFloat + + Scales a rect for the current resolution. + ================== + */ +void ScaleRectFloat( rectFloat_t * rect ) { + if ( rect ) { + ScalePositionAndSize( &rect->x, &rect->y, &rect->width, &rect->height ); + } +} + +/* + ================== + MakeScaledRectFloat + + Produces a scaled rect for the current resolution. + ================== + */ +rectFloat_t MakeScaledRectFloat( float x, float y, float width, float height ) { + rectFloat_t rect = { x, y, width, height }; + ScaleRectFloat( &rect ); + return rect; +} /* ================== @@ -762,6 +937,8 @@ int iphoneDrawTextInBox( rect_t paragraph, int lineLength, const char *str, rect ================== */ int TouchDown( int x, int y, int w, int h ) { + //ScalePositionAndSize( &x, &y, &w, &h ); + int i; for ( i = 0 ; i < numTouches ; i++ ) { if ( touches[i][0] >= x && touches[i][1] >= y @@ -781,6 +958,8 @@ int TouchDown( int x, int y, int w, int h ) { ================== */ int TouchReleased( int x, int y, int w, int h ) { + //ScalePositionAndSize( &x, &y, &w, &h ); + int i; int downPrev = 0; int downNow = 0; @@ -828,21 +1007,6 @@ int TouchReleased( int x, int y, int w, int h ) { return 1; } -/* - ================== - iphoneRotateForLandscape - - ================== - */ -void iphoneRotateForLandscape() { - if ( revLand->value ) { - // reverse landscape mode - pfglRotatef( -90, 0, 0, 1 ); - } else { - pfglRotatef( 90, 0, 0, 1 ); - } -} - /* ================== iphoneSet2D @@ -850,20 +1014,23 @@ void iphoneRotateForLandscape() { ================== */ void iphoneSet2D( void ) { - pfglViewport( 0,0, 480, 320 ); pfglMatrixMode( GL_MODELVIEW ); pfglLoadIdentity(); pfglDisable( GL_DEPTH_TEST ); - pfglDisable( GL_CULL_FACE ); - pfglEnable( GL_BLEND ); - pfglBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); - pfglDisable( GL_ALPHA_TEST ); + + static bool doBlending = true; + if ( doBlending ) { + pfglEnable( GL_BLEND ); + } else { + pfglDisable( GL_BLEND ); + } + pfglColor4f( 1,1,1,1 ); pfglMatrixMode( GL_PROJECTION ); pfglLoadIdentity(); iphoneRotateForLandscape(); - pfglOrtho( 0, 480, 320, 0, -99999, 99999 ); + pfglOrtho( 0, viddef.width, viddef.height, 0, -99999, 99999 ); } @@ -902,6 +1069,9 @@ float AxisHit( hudPic_t *hud ) { int y = hud->y; int width = hud->width; int height = hud->width; + + //ScalePositionAndSize( &x, &y, &width, &height ); + float activeFraction = 0.8f; int i; int isXaxis = ( hud != &huds.forwardStick ); @@ -955,33 +1125,6 @@ float AxisHit( hudPic_t *hud ) { return 0; } -void iphoneTouchEvent( int _numTouches, int _touches[16] ) { - numTouches = _numTouches; - for ( int i = 0 ; i < numTouches ; i++ ) { - if ( revLand->value ) { - touches[i][0] = _touches[i*2+1]; - touches[i][1] = 319 - _touches[i*2+0]; - } else { - touches[i][0] = 479 - _touches[i*2+1]; - touches[i][1] = _touches[i*2+0]; - } - } -} - -void iphoneCheckForLandscapeReverse() { - static int reverseCount; - - // if we stay significantly negative for half a second, flip orientation - if ( tiltPitch < -0.35 ) { - if ( ++reverseCount > 10 ) { - Cvar_SetValue( revLand->name, !revLand->value ); - SysIPhoneSetUIKitOrientation( revLand->value ); - } - } else { - reverseCount = 0; - } -} - void iphoneTiltEvent( float *tilts ) { int i; int j; @@ -989,7 +1132,7 @@ void iphoneTiltEvent( float *tilts ) { float sum[3]; static float prevTime; - if ( revLand->value ) { + if ( deviceOrientation == ORIENTATION_LANDSCAPE_RIGHT ) { tilts[1] = -tilts[1]; tilts[0] = -tilts[0]; } @@ -1087,7 +1230,7 @@ PRIVATE void CreateIphoneUserCmd() float stickTurnValue; float stickMoveValue; - stickTurnValue = stickTurnBase->value + stickTurnScale->value * sensitivity->value; + stickTurnValue = ( stickTurnBase->value + stickTurnScale->value * sensitivity->value ); stickMoveValue = stickMoveBase->value + stickMoveScale->value * sensitivity->value; usercmd_t *cmd = &Player.cmd; @@ -1122,18 +1265,38 @@ PRIVATE void CreateIphoneUserCmd() } #endif + int weaponSwitchWidth = weaponWidth * 0.625f; + // tapping the weapon issues the nextWeapon impulse - if ( TouchReleased( 240 - 40, 320 - 80 - 64, 80, 64 ) ) { + if ( TouchReleased( (viddef.width / 2) - ( weaponSwitchWidth / 2 ), + viddef.height - faceHeight - ( weaponHeight / 2 ), + weaponSwitchWidth, + weaponHeight / 2 ) ) { cmd->buttons |= BUTTON_CHANGE_WEAPON; } - cmd->forwardmove = -stickMoveValue * AxisHit( &huds.forwardStick ); - cmd->sidemove = stickMoveValue * AxisHit( &huds.sideStick ); - Player.position.angle += -stickTurnValue * AxisHit( &huds.turnStick ); + float forwardAxisHit = AxisHit( &huds.forwardStick ); + float sideAxisHit = AxisHit( &huds.sideStick ); + float turnAxisHit = AxisHit( &huds.turnStick ); + + static bool printSticks = false; + + if ( printSticks ) { + printf( "Forward: %.4f \nSide: %.4f\nTurn: %.4f\n", forwardAxisHit, sideAxisHit, turnAxisHit ); + } + + cmd->forwardmove = -stickMoveValue * forwardAxisHit; + cmd->sidemove = stickMoveValue * sideAxisHit; + Player.position.angle += -stickTurnValue * turnAxisHit * tics; // accelerometer tilting cmd->sidemove += tiltMove->value * DeadBandAdjust( tilt, tiltDeadBand->value ); - Player.position.angle -= tiltTurn->value * DeadBandAdjust( tilt, tiltDeadBand->value ); + + + // Multiply by 0.5 and tics because the original calculation was for 30Hz. + // The multiplication allows this calculation to scale with different framerates while + // maintaining the same behavior at 30Hz. + Player.position.angle -= tiltTurn->value * DeadBandAdjust( tilt, tiltDeadBand->value ) * 0.5f * tics; // always use if ( iphoneFrameNum & 1 ) { @@ -1171,12 +1334,15 @@ void iphoneHighlightPicNumWhenTouched( int x, int y, int w, int h, int glTexNum void iphoneDrawWeapon( void ) { char name[ 32 ]; texture_t *tex; - static int w = 128; - static int h = 128; - int x = (viddef.width - w ) >> 1; - int y = viddef.height - 80 - h; + float w = 128 * screenScale; + float h = 128 * screenScale; + float x = (viddef.width - w ) / 2.0f; + float y = viddef.height - ( HUD_FACE_HEIGHT * screenScale ) - h; int frame; + weaponWidth = w; + weaponHeight = h; + if ( gunFrame->value ) { // screenshots look better with the muzzle flash frame = Player.weapon * 4 + gunFrame->value + SPR_KNIFEREADY; @@ -1189,12 +1355,12 @@ void iphoneDrawWeapon( void ) { R_Bind( tex->texnum ); - pfglBegin( GL_QUADS ); + pfglBegin( GL_TRIANGLE_STRIP ); - pfglTexCoord2f( 0.01f, 0.01f ); pfglVertex2i( x, y ); - pfglTexCoord2f( 0.99f, 0.01f ); pfglVertex2i( x + w, y ); - pfglTexCoord2f( 0.99f, 0.99f ); pfglVertex2i( x + w, y + h ); - pfglTexCoord2f( 0.01f, 0.99f ); pfglVertex2i( x, y + h ); + pfglTexCoord2f( 0.01f, 0.01f ); pfglVertex2f( x, y ); + pfglTexCoord2f( 0.01f, 0.99f ); pfglVertex2f( x, y + h ); + pfglTexCoord2f( 0.99f, 0.01f ); pfglVertex2f( x + w, y ); + pfglTexCoord2f( 0.99f, 0.99f ); pfglVertex2f( x + w, y + h ); pfglEnd(); } @@ -1207,6 +1373,8 @@ void iphoneDrawWeapon( void ) { ================== */ void iphoneDrawNumber( int x, int y, int number, int charWidth, int charHeight ) { + //ScalePositionAndSize( &x, &y, &charWidth, &charHeight ); + texture_t *tex; int i; char string[ 20 ]; @@ -1226,12 +1394,12 @@ void iphoneDrawNumber( int x, int y, int number, int charWidth, int charHeight ) tex = numberPics[digit]; R_Bind( tex->texnum ); - pfglBegin( GL_QUADS ); + pfglBegin( GL_TRIANGLE_STRIP ); pfglTexCoord2f( 0, 0 ); pfglVertex2i( x, y ); + pfglTexCoord2f( 0, 1 ); pfglVertex2i( x, y+charHeight ); pfglTexCoord2f( 1, 0 ); pfglVertex2i( x+charWidth, y ); pfglTexCoord2f( 1, 1 ); pfglVertex2i( x+charWidth, y+charHeight ); - pfglTexCoord2f( 0, 1 ); pfglVertex2i( x, y+charHeight ); pfglEnd(); x += charStep; @@ -1247,22 +1415,31 @@ void iphoneDrawNumber( int x, int y, int number, int charWidth, int charHeight ) */ void iphoneDrawFace() { int i; - int w = 64; - int h = 80; - int x = (viddef.width - w ) >> 1; - int y = viddef.height - h; + float w = HUD_FACE_WIDTH * screenScale; + float h = HUD_FACE_HEIGHT * screenScale; const char *pic; + const int halfScreenWidth = viddef.width / 2.0f; + faceWidth = 128.0f * screenScale; + float halfFaceWidth = faceWidth / 2.0f; + faceHeight = 80.0f * screenScale; + + float keyY = 72.0f * screenScale; + float keyWidth = 32.0f * screenScale; + float keyHeight = 64.0f * screenScale; + + float damageWidth = 40.0f * screenScale; + // solid background - iphoneDrawPic( 240 - 64, 320 - 80, 128, 80, "iphone/status_hud.tga" ); + iphoneDrawPicFloat( halfScreenWidth - halfFaceWidth, viddef.height - faceHeight, faceWidth, faceHeight, "iphone/status_hud.tga" ); // keys on the side if( Player.items & ITEM_KEY_1 ) { - iphoneDrawPic( 240-64, 320-72, 32, 64, "iphone/gold_key.tga" ); + iphoneDrawPicFloat( halfScreenWidth - halfFaceWidth, viddef.height - keyY, keyWidth, keyHeight, "iphone/gold_key.tga" ); } if( Player.items & ITEM_KEY_2 ) { - iphoneDrawPic( 240+32, 320-72, 32, 64, "iphone/silver_key.tga" ); + iphoneDrawPicFloat( halfScreenWidth + halfFaceWidth - keyWidth, viddef.height - keyY, keyWidth, keyHeight, "iphone/silver_key.tga" ); } @@ -1312,7 +1489,7 @@ void iphoneDrawFace() { pic = mugshotnames[ 21 ]; } - iphoneDrawPic( x, y, w, h, pic ); + iphoneDrawPicFloat( halfScreenWidth - w / 2.0f, (float)(viddef.height) - faceHeight, w, h, pic ); // blend the right / left damage indicators on the side for ( i = 0 ; i < 2 ; i++ ) { @@ -1332,15 +1509,22 @@ void iphoneDrawFace() { } pfglColor4f( 1, 1, 1, f ); if ( i == 0 ) { - iphoneDrawPic( 240 - 64, 320 - 80, 40, 80, "iphone/L_damage.tga" ); + iphoneDrawPicFloat( halfScreenWidth - halfFaceWidth, + (float)(viddef.height) - faceHeight, + damageWidth, faceHeight, "iphone/L_damage.tga" ); } else { - iphoneDrawPic( 240 + 64 - 40, 320 - 80, 40, 80, "iphone/R_damage.tga" ); + iphoneDrawPicFloat( halfScreenWidth + halfFaceWidth - damageWidth, + (float)viddef.height - faceHeight, + damageWidth, faceHeight, "iphone/R_damage.tga" ); } pfglColor4f( 1, 1, 1, 1 ); } + float healthWidth = 16 * screenScale; + float healthHeight = 16 * screenScale; + // draw the tiny health numbers on top of the face - iphoneDrawNumber( 240, 304, Player.health, 16, 16 ); + iphoneDrawNumber( halfScreenWidth, viddef.height - healthHeight, Player.health, healthWidth, healthHeight ); } /* @@ -1422,7 +1606,8 @@ void iphoneDrawReturnButton() { f = 0.5f; pfglColor4f( 1, 1, 1, f ); - if (iphoneDrawPicWithTouch( 240-32, 32, 64, 48, "iphone/button_back.tga")) {//int x, int y, int w, int h, const char *pic )) { + if (iphoneDrawPicRectWithTouch( MakeScaledRectFloat( 240.0f-32.0f, 32.0f, BACK_BUTTON_WIDTH, BACK_BUTTON_HEIGHT ), + "iphone/button_back.tga")) {//int x, int y, int w, int h, const char *pic )) { menuState = IPM_MAPS; returnButtonFrameNum = 0; @@ -1445,6 +1630,8 @@ void iphoneDrawReturnButton() { episode->value = 9; } } + + iphoneStartPreviousMenu(); } pfglColor4f( 1, 1, 1, 1 ); @@ -1552,6 +1739,10 @@ iphoneFrame ================== */ void iphoneFrame() { + // clear depth buffer + qglDepthMask( GL_TRUE ); + pfglClear( GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT ); + unsigned char blendColor[4] = { 0, 0, 0, 0 }; iphoneFrameNum++; @@ -1566,14 +1757,16 @@ void iphoneFrame() { // toggle / scroll down the console Client_Screen_RunConsole(); - - // check for flipping the phone orientation - iphoneCheckForLandscapeReverse(); - // fixed frame timing, assume we go 30hz - tics = 2; // wolf's global rate counter + // fixed frame timing, assume we go 60Hz + tics = DEFAULT_FRAME_INTERVAL; // wolf's global rate counter + CFAbsoluteTime soundStartTime = CFAbsoluteTimeGetCurrent(); Sound_Update( vnull, vnull, vnull, vnull ); + CFAbsoluteTime soundEndTime = CFAbsoluteTimeGetCurrent(); + soundTime = soundEndTime - soundStartTime; + + //printf( "Sound_Update took %0.8f seconds.\n", soundTime ); if ( consoleActive ) { iphoneSet2D(); @@ -1581,16 +1774,20 @@ void iphoneFrame() { Client_Screen_DrawConsole(); iphoneSavePrevTouches(); - SysIPhoneSwapBuffers(); + //SysIPhoneSwapBuffers(); return; } if ( menuState != IPM_GAME ) { iphoneSet2D(); - iphoneDrawMenus(); + CFAbsoluteTime menuStartTime = CFAbsoluteTimeGetCurrent(); + iphoneDrawMenus( vnull, vnull, vnull, vnull ); + CFAbsoluteTime menuEndTime = CFAbsoluteTimeGetCurrent(); + menuTime = menuEndTime - menuStartTime; + + //printf( "iphoneDrawMenus took %0.8f seconds.\n", menuTime ); iphoneSavePrevTouches(); - SysIPhoneSwapBuffers(); return; } @@ -1620,10 +1817,6 @@ void iphoneFrame() { levelstate.time += tics; } - - // clear depth buffer - qglDepthMask( GL_TRUE ); - pfglClear( GL_DEPTH_BUFFER_BIT ); // fill the floor and ceiling pfglDisable( GL_BLEND ); @@ -1633,7 +1826,7 @@ void iphoneFrame() { pfglMatrixMode( GL_PROJECTION ); pfglLoadIdentity(); iphoneRotateForLandscape(); - pfglOrtho( 0, 480, 320, 0, -99999, 99999 ); + pfglOrtho( 0, viddef.width, viddef.height, 0, -99999, 99999 ); R_Draw_Fill( 0, 0, viddef.width, viddef.height >> 1, r_world->ceilingColour ); R_Draw_Fill( 0, viddef.height >> 1, viddef.width, viddef.height, r_world->floorColour ); @@ -1644,7 +1837,6 @@ void iphoneFrame() { cur_x_fov = 75; cur_y_fov = CalcFov( cur_x_fov, (float)viddef.width, (float)viddef.height ); - pfglMatrixMode( GL_PROJECTION ); pfglLoadIdentity(); iphoneRotateForLandscape(); MYgluPerspective( cur_y_fov - 2.0f, ratio, 0.2f, 64.0f ); // tweak fov in to avoid edge tile clips @@ -1653,13 +1845,8 @@ void iphoneFrame() { pfglRotatef( (float)(90 - FINE2DEG( Player.position.angle )), 0, 1, 0 ); pfglTranslatef( -Player.position.origin[ 0 ] / FLOATTILE, 0, Player.position.origin[ 1 ] / FLOATTILE ); - - pfglCullFace( GL_BACK ); pfglEnable( GL_DEPTH_TEST ); - pfglEnable( GL_CULL_FACE ); - pfglDisable( GL_BLEND ); - pfglDisable( GL_ALPHA_TEST ); // find and draw all the walls R_RayCast( Player.position, r_world ); @@ -1668,7 +1855,7 @@ void iphoneFrame() { R_DrawSprites(); // draw 2D overlays - iphoneSet2D(); + iphoneSet2D(); // do a full screen blend for damage, death, and bonus pickup if( Player.playstate == ex_dead ) { @@ -1733,6 +1920,7 @@ void iphoneFrame() { if ( iphoneDrawHudButton( &huds.menu ) ) { menuState = IPM_MAIN; + iphoneStartMainMenu(); } if ( iphoneDrawHudButton( &huds.map ) ) { iphoneOpenAutomap(); @@ -1745,7 +1933,7 @@ void iphoneFrame() { iphoneSavePrevTouches(); - SysIPhoneSwapBuffers(); // do the swapbuffers + //SysIPhoneSwapBuffers(); // do the swapbuffers } @@ -1759,7 +1947,7 @@ void iphoneDrawLoading() //draw stuff here iphoneDrawText(100, 100, 16, 16, "Drawing Loading!");//, <#int y#>, <#int width#>, <#int height#>, <#const char * str#>) - SysIPhoneSwapBuffers(); // do the swapbuffers + //SysIPhoneSwapBuffers(); // do the swapbuffers } diff --git a/wolf3d/code/iphone/iphone_main.c b/wolf3d/code/iphone/iphone_main.c index b9c6991..bdd4914 100644 --- a/wolf3d/code/iphone/iphone_main.c +++ b/wolf3d/code/iphone/iphone_main.c @@ -1,8 +1,13 @@ /* + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. Copyright (C) 2004-2005 Michael Liebscher Copyright (C) 1997-2001 Id Software, Inc. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 @@ -28,6 +33,7 @@ */ #include "../wolfiphone.h" +#include "iphone_store.h" cvar_t *controlScheme; cvar_t *sensitivity; @@ -55,7 +61,6 @@ cvar_t *cropSprites; cvar_t *blends; cvar_t *gunFrame; cvar_t *slowAI; -cvar_t *revLand; cvar_t *mapScale; cvar_t *hideControls; cvar_t *autoFire; @@ -111,20 +116,27 @@ void Reset_f() { void iphoneStartup() { char *s; int start = Sys_Milliseconds(); + static bool firstInit = true; + + if ( !firstInit ) { + return; + } + + firstInit = false; #ifdef STOREKIT //check for storekit framework and set appropriate flags... gsh CheckForStorekitExistence(); #endif + InAppPurchaseInit(); + // temporary const char *systemVersion = SysIPhoneGetOSVersion(); printf( "systemVersion = %s\n", systemVersion ); z_chain.next = z_chain.prev = &z_chain; - InitImmediateModeGL(); - // Prepare enough of the subsystems to handle // cvar and command buffer management. COM_InitArgv( 0, NULL ); // FIXME: get args... @@ -170,11 +182,11 @@ void iphoneStartup() { consoleActive = 0; controlScheme = Cvar_Get( "controlScheme", "0", CVAR_ARCHIVE ); - sensitivity = Cvar_Get( "sensitivity", "0.3", CVAR_ARCHIVE ); - stickTurnBase = Cvar_Get( "stickTurnBase", "300", CVAR_ARCHIVE ); - stickTurnScale = Cvar_Get( "stickTurnScale", "500", CVAR_ARCHIVE ); - stickMoveBase = Cvar_Get( "stickMoveBase", "3000", CVAR_ARCHIVE ); - stickMoveScale = Cvar_Get( "stickMoveScale", "5000", CVAR_ARCHIVE ); + sensitivity = Cvar_Get( "sensitivity", "0.5", CVAR_ARCHIVE ); + stickTurnBase = Cvar_Get( "stickTurnBase", "200", CVAR_ARCHIVE ); + stickTurnScale = Cvar_Get( "stickTurnScale", "400", CVAR_ARCHIVE ); + stickMoveBase = Cvar_Get( "stickMoveBase", "2000", CVAR_ARCHIVE ); + stickMoveScale = Cvar_Get( "stickMoveScale", "4000", CVAR_ARCHIVE ); stickDeadBand = Cvar_Get( "stickDeadBand", "0.2", CVAR_ARCHIVE ); tiltTurn = Cvar_Get( "tiltTurn", "0", CVAR_ARCHIVE ); tiltMove = Cvar_Get( "tiltMove", "0", CVAR_ARCHIVE ); @@ -195,13 +207,13 @@ void iphoneStartup() { blends = Cvar_Get( "blends", "1", 0 ); gunFrame = Cvar_Get( "gunFrame", "0", 0 ); slowAI = Cvar_Get( "slowAI", "0", 0 ); - revLand = Cvar_Get( "revLand", "0", CVAR_ARCHIVE ); mapScale = Cvar_Get( "mapScale", "10", CVAR_ARCHIVE ); hideControls = Cvar_Get( "hideControls", "0", CVAR_ARCHIVE ); autoFire = Cvar_Get( "autoFire", "0", 0 ); - - // make sure volume changes and incoming calls draw the right orientation - SysIPhoneSetUIKitOrientation( revLand->value ); + g_version = Cvar_Get( "g_version", "1", CVAR_ARCHIVE ); + //this call fixes the bug of crashed apps during sod map loads + //( it only occured on devices updated from ( 1.1 || 1.0 )->1.2 ) + Cvar_Set( "g_version", "1" ); /* //if we don't preload the ogg files then we have faster start ups... gsh // preload all the ogg FM synth sounds @@ -246,15 +258,30 @@ void iphoneStartup() { if ( !LoadTheGame() ) { PL_NewGame( &Player ); iphoneStartMap( currentMap.episode, currentMap.map, currentMap.skill ); + HudSetForScheme( 0 ); } - // always start at main menu menuState = IPM_MAIN; + // Start menu music + iphoneInitMenuMusic(); + iphoneStartMenuMusic(); + Com_Printf( "startup time: %i msec\n", Sys_Milliseconds() - start ); } +/* + =================== + iphoneStartGameplay + + Loads the saved game if there is one, otherwise starts a new game. + =================== +*/ +void iphoneStartGameplay() { + +} + /* =================== iphonePreloadBeforePlay @@ -354,9 +381,9 @@ void iphoneWriteConfig( void ) { */ void iphoneShutdown() { Sound_StopAllSounds(); - Sound_StopBGTrack(); + //Sound_StopBGTrack(); iphoneWriteConfig(); SaveTheGame(); - exit( 0 ); + //exit( 0 ); } diff --git a/wolf3d/code/iphone/iphone_mapselector.c b/wolf3d/code/iphone/iphone_mapselector.c index 17bd86d..8f83384 100644 --- a/wolf3d/code/iphone/iphone_mapselector.c +++ b/wolf3d/code/iphone/iphone_mapselector.c @@ -1,11 +1,27 @@ /* - * iphone_mapselector.c - * wolf3d - * - * Created by Greg Hodges on 7/2/09. - * Copyright 2009 id software. All rights reserved. - * + + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + + #include "../wolfiphone.h" #include @@ -13,7 +29,6 @@ const char levelNames[][29] = { "E1 level 1", "E1 level 2", "E1 level 3", -#ifndef LITE "E1 level 4", "E1 level 5", "E1 level 6", @@ -92,7 +107,6 @@ const char levelNames[][29] = { "Floor 19: Secret 1 ", "Floor 20: Secret 2 ", "Floor 21: Angel of Death", -#endif }; int dragVelocity = 0; //velocity for the scrolling maps @@ -106,9 +120,7 @@ extern int iphoneDrawPicWithTouchAndColor( int x, int y, int w, int h, const cha extern void iphoneStartUserMap( int episodeNum, int mapNum, int skillLevel, char *mapName ); -#ifdef LITE extern void GetMoreLevels( int x, int y ); -#endif //========================================== // iphoneUpdateDrags() @@ -132,13 +144,13 @@ void iphoneUpdateDrags(int numMaps, int skillSides, int height, int spacing, int //boundary check the drags int num = numMaps+1+6; - if (g_version-> value == SPEAROFDESTINY) + if (g_version->value == SPEAROFDESTINY) num = numMaps + 7; num += numUserMaps + 1; if (dragPosition < 320 - (height+spacing)*(num) - 20) - dragPosition < 320 - (height+spacing)*(num) - 20; + dragPosition = 320 - (height+spacing)*(num) - 20; else if (dragPosition > 40) dragPosition = 40; @@ -150,6 +162,8 @@ void iphoneUpdateDrags(int numMaps, int skillSides, int height, int spacing, int //update the drags dragPosition -= dragVelocity; + dragVelocity /= screenScale; + //retard the velocity if (dragVelocity > 0) --dragVelocity; @@ -184,28 +198,28 @@ void iphoneDrawRewards(int m, int s, int x, int y) int height = 40;//22; int spacing = -12; // draw award shadows - iphoneDrawPic( x,y+23, width, height, "iphone/kills_shadow.tga" ); x += width + spacing; - iphoneDrawPic( x,y+23, width, height, "iphone/secrets_shadow.tga" ); x += width + spacing; - iphoneDrawPic( x,y+23, width, height, "iphone/treasure_shadow.tga" ); x += width + spacing; - iphoneDrawPic( x,y+23, width, height, "iphone/partime_shadow.tga" ); //x += width + 5; + iphoneDrawPicRect( MakeScaledRectFloat( x,y+23, width, height ), "iphone/kills_shadow.tga" ); x += width + spacing; + iphoneDrawPicRect( MakeScaledRectFloat( x,y+23, width, height ), "iphone/secrets_shadow.tga" ); x += width + spacing; + iphoneDrawPicRect( MakeScaledRectFloat( x,y+23, width, height ), "iphone/treasure_shadow.tga" ); x += width + spacing; + iphoneDrawPicRect( MakeScaledRectFloat( x,y+23, width, height ), "iphone/partime_shadow.tga" ); //x += width + 5; x = startX; // draw awards if ( (ch & MF_KILLS) || forceDrawRewards) { - iphoneDrawPic( x,y+23, width, height, "iphone/kills.tga" ); + iphoneDrawPicRect( MakeScaledRectFloat( x,y+23, width, height ), "iphone/kills.tga" ); } x += width + spacing; if ( (ch & MF_SECRETS) || forceDrawRewards) { - iphoneDrawPic( x,y+23, width, height, "iphone/secrets.tga" ); + iphoneDrawPicRect( MakeScaledRectFloat( x,y+23, width, height ), "iphone/secrets.tga" ); } x += width + spacing; if ( (ch & MF_TREASURE) || forceDrawRewards) { - iphoneDrawPic( x,y+23, width, height, "iphone/treasure.tga" ); + iphoneDrawPicRect( MakeScaledRectFloat( x,y+23, width, height ), "iphone/treasure.tga" ); } x += width + spacing; if ( (ch & MF_TIME) || forceDrawRewards) { - iphoneDrawPic( x,y+23, width, height, "iphone/partime.tga" ); + iphoneDrawPicRect( MakeScaledRectFloat( x,y+23, width, height ), "iphone/partime.tga" ); } } @@ -239,7 +253,7 @@ int iphoneDrawUserMaps(int Yoffset, int height, int spacing, int skillValue) iphoneDrawPic( 0, y, 480-80, height, "iphone/button_epSOD.tga"); - while (ep = readdir (dp)) + while ( ( ep = readdir (dp) ) ) { ++numMaps; if (numMaps < 3) //skip the '.' and '..' @@ -315,13 +329,9 @@ void iphoneSelectMapMenu() char strMission[80]; strMission[79] = '\0'; -#ifdef LITE - int numMaps = 3;//5; -#else int numMaps = 60; if (g_version->value == SPEAROFDESTINY) numMaps = 60 + 21; -#endif iphoneDrawPic(0, 0, 480, 320, "iphone/submenus_background_image.tga"); @@ -429,18 +439,13 @@ void iphoneSelectMapMenu() int numUserMaps = 0; -#ifdef LITE - //buy more episodes button - GetMoreLevels( 0, dragPosition + (height + spacing) * (m+1) ); -#else #if 0 //buy more episodes button if (g_version->value != SPEAROFDESTINY) GetSpearOfDestiny( 0, dragPosition + (height + spacing) * (m+6) ); #endif //TODO: Draw user maps - numUserMaps = iphoneDrawUserMaps(y, height, spacing, skillValue); -#endif + numUserMaps = iphoneDrawUserMaps(y, height, spacing, skillValue); //Update the scrolling drags iphoneUpdateDrags(numMaps, skillSides, height, spacing, numUserMaps); diff --git a/wolf3d/code/iphone/iphone_menus.c b/wolf3d/code/iphone/iphone_menus.c index b47f789..8e7de9a 100644 --- a/wolf3d/code/iphone/iphone_menus.c +++ b/wolf3d/code/iphone/iphone_menus.c @@ -1,6 +1,9 @@ /* - Copyright (C) 2009 Id Software, Inc. + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -17,10 +20,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + + + //gsh //#define NUM_TOUCHFRAME 10 #include "../wolfiphone.h" +#include "iphone_store.h" int intermissionStartFrameNum; int hasReleased; @@ -39,7 +46,6 @@ extern const unsigned int DownloadUserFileSize; //-------------- //gsh int wasDLInstructionsCalledFromEpisodeMenu = 0; -int wasCalledFromDownloadInstructionsMenu = 0; /* ========================= iphoneSetLevelNotifyText @@ -113,17 +119,85 @@ rect_t RectMake(int x, int y, int width, int height) ================== */ void iphoneDrawPicNum( int x, int y, int w, int h, int glTexNum ) { + //ScalePositionAndSize( &x, &y, &w, &h ); + R_Bind( glTexNum ); - pfglBegin( GL_QUADS ); + pfglBegin( GL_TRIANGLE_STRIP ); pfglTexCoord2f( 0.0f, 0.0f ); pfglVertex2i( x, y ); + pfglTexCoord2f( 0.0f, 1.0f ); pfglVertex2i( x, y+h ); pfglTexCoord2f( 1.0f, 0.0f ); pfglVertex2i( x+w, y ); pfglTexCoord2f( 1.0f, 1.0f ); pfglVertex2i( x+w, y+h ); - pfglTexCoord2f( 0.0f, 1.0f ); pfglVertex2i( x, y+h ); pfglEnd(); } +typedef struct drawPicTiming_tag { + CFAbsoluteTime totalTime; + CFAbsoluteTime bindTime; + CFAbsoluteTime endTime; + CFAbsoluteTime findTexTime; + const char * pic; +} drawPicTiming; + +#define NUM_PIC_TIMINGS 16 + +static drawPicTiming picTimings[NUM_PIC_TIMINGS]; +int curPic = 0; + +void picTimingPrint() { + for ( int i = 0; i < NUM_PIC_TIMINGS; ++i) { + if ( picTimings[i].pic != NULL ) { + printf( " iphoneDrawPic took %0.6f seconds. %s\n", picTimings[i].totalTime, picTimings[i].pic ); + if ( picTimings[i].totalTime > 0.01 ) { + printf( " R_Bind took %0.6f seconds.\n", picTimings[i].bindTime ); + printf( " pfglEnd took %0.6f seconds.\n", picTimings[i].endTime ); + printf( " TM_FindTexture took %0.6f seconds.\n", picTimings[i].findTexTime ); + } + } + } +} + +void picTimingClear() { + for ( int i = 0; i < NUM_PIC_TIMINGS; ++i) { + picTimings[i].pic = NULL; + } + + curPic = 0; +} + +/* + ================== + iphoneDrawPicFloat + + ================== + */ +void iphoneDrawPicFloat( float x, float y, float w, float h, const char *pic ) { + texture_t *gl; + + gl = TM_FindTexture( pic, TT_Pic ); + + if( ! gl ) { + Com_Printf( "Can't find pic: %s\n", pic ); + return; + } + + R_Bind( gl->texnum ); + + pfglBegin( GL_TRIANGLE_STRIP ); + + pfglTexCoord2f( 0.0f, 0.0f ); pfglVertex2f( x, y ); + pfglTexCoord2f( 0.0f, gl->maxT ); pfglVertex2f( x, y+h ); + pfglTexCoord2f( gl->maxS, 0.0f ); pfglVertex2f( x+w, y ); + pfglTexCoord2f( gl->maxS, gl->maxT ); pfglVertex2f( x+w, y+h ); + + pfglEnd(); +} + +#define DRAWPIC_PROFILING 0 +//#define DRAWPIC_PROFILING 1 + + /* ================== iphoneDrawPic @@ -131,23 +205,77 @@ void iphoneDrawPicNum( int x, int y, int w, int h, int glTexNum ) { ================== */ void iphoneDrawPic( int x, int y, int w, int h, const char *pic ) { + texture_t *gl; - + +#if DRAWPIC_PROFILING + CFAbsoluteTime picStartTime = CFAbsoluteTimeGetCurrent(); + CFAbsoluteTime texStartTime = CFAbsoluteTimeGetCurrent(); +#endif + gl = TM_FindTexture( pic, TT_Pic ); + +#if DRAWPIC_PROFILING + CFAbsoluteTime texEndTime = CFAbsoluteTimeGetCurrent(); + CFAbsoluteTime texTime = texEndTime - texStartTime; +#endif + if( ! gl ) { Com_Printf( "Can't find pic: %s\n", pic ); return; } +#if DRAWPIC_PROFILING + CFAbsoluteTime bindStartTime = CFAbsoluteTimeGetCurrent(); +#endif + R_Bind( gl->texnum ); - pfglBegin( GL_QUADS ); + +#if DRAWPIC_PROFILING + CFAbsoluteTime bindEndTime = CFAbsoluteTimeGetCurrent(); + CFAbsoluteTime bindTime = bindEndTime - bindStartTime; +#endif + + pfglBegin( GL_TRIANGLE_STRIP ); pfglTexCoord2f( 0.0f, 0.0f ); pfglVertex2i( x, y ); + pfglTexCoord2f( 0.0f, gl->maxT ); pfglVertex2i( x, y+h ); pfglTexCoord2f( gl->maxS, 0.0f ); pfglVertex2i( x+w, y ); pfglTexCoord2f( gl->maxS, gl->maxT ); pfglVertex2i( x+w, y+h ); - pfglTexCoord2f( 0.0f, gl->maxT ); pfglVertex2i( x, y+h ); + +#if DRAWPIC_PROFILING + CFAbsoluteTime endStartTime = CFAbsoluteTimeGetCurrent(); +#endif + pfglEnd(); + +#if DRAWPIC_PROFILING + CFAbsoluteTime endEndTime = CFAbsoluteTimeGetCurrent(); + CFAbsoluteTime endTime = endEndTime - endStartTime; + + CFAbsoluteTime picEndTime = CFAbsoluteTimeGetCurrent(); + CFAbsoluteTime picTime = picEndTime - picStartTime; + + if ( curPic < NUM_PIC_TIMINGS ) { + picTimings[curPic].totalTime = picTime; + picTimings[curPic].bindTime = bindTime; + picTimings[curPic].endTime = endTime; + picTimings[curPic].findTexTime = texTime; + picTimings[curPic].pic = pic; + curPic++; + } +#endif +} + +/* + ================== + iphoneDrawPicRect + + ================== + */ +void iphoneDrawPicRect( rectFloat_t rect, const char *pic ) { + iphoneDrawPic( rect.x, rect.y, rect.width, rect.height, pic ); } //gsh @@ -203,15 +331,15 @@ void iphoneDrawPicInBox( rect_t drawRect, const char *pic, rect_t boxRect ) R_Bind( gl->texnum ); - pfglBegin( GL_QUADS ); + pfglBegin( GL_TRIANGLE_STRIP ); //float u, v; //u = ((float)newX)/((float)x); //v = ((float)newY)/((float)y); pfglTexCoord2f( u0, v0 ); pfglVertex2i( newX, newY ); + pfglTexCoord2f( u0, v1 ); pfglVertex2i( newX, newY+newH ); pfglTexCoord2f( u1, v0 ); pfglVertex2i( newX+newW, newY ); pfglTexCoord2f( u1, v1 ); pfglVertex2i( newX+newW, newY+newH ); - pfglTexCoord2f( u0, v1 ); pfglVertex2i( newX, newY+newH ); pfglEnd(); } @@ -238,6 +366,16 @@ int iphoneDrawPicWithTouch( int x, int y, int w, int h, const char *pic ) { return r; } +/* + ================== + iphoneDrawPicRectWithTouch + + ================== + */ +int iphoneDrawPicRectWithTouch( rectFloat_t rect, const char *pic ) { + return iphoneDrawPicWithTouch( rect.x, rect.y, rect.width, rect.height, pic ); +} + //gsh int iphoneDrawPicWithTouchSpecified( rect_t drawRect, rect_t touchRect, const char *pic) {//int x, int y, int w, int h, int touchX, int touchY, int touchW, int touchH, const char *pic ) { int r = TouchReleased( touchRect.x, touchRect.y, touchRect.width, touchRect.height ); @@ -256,6 +394,9 @@ int iphoneDrawPicWithTouchSpecified( rect_t drawRect, rect_t touchRect, const c } //gsh int iphoneDrawPicInBoxWithTouchSpecified( rect_t drawRect, rect_t touchRect, const char *pic, rect_t boundingRect ) { + ScaleRect( &drawRect ); + ScaleRect( &touchRect ); + ScaleRect( &boundingRect ); //make sure touches are in drawing bounds if (touchRect.x < boundingRect.x) { @@ -290,7 +431,7 @@ int iphoneDrawPicInBoxWithTouchSpecified( rect_t drawRect, rect_t touchRect, con } //gsh -int iphoneDrawPicInBoxWithTouchAndVelocity( rect_t drawRect, rect_t touchRect, const char *pic, rect_t boundingRect, int dragVelocity ) { +int iphoneDrawPicInBoxWithTouchAndVelocity( rectFloat_t drawRect, rectFloat_t touchRect, const char *pic, rectFloat_t boundingRect, int dragVelocity ) { //make sure touches are in drawing bounds if (touchRect.x < boundingRect.x) { @@ -319,7 +460,9 @@ int iphoneDrawPicInBoxWithTouchAndVelocity( rect_t drawRect, rect_t touchRect, c } // iphoneDrawPic( x, y, w, h, pic ); // iphoneDrawPicInBox( x, y, w, h, pic, boxX, boxY, boxW, boxH ); - iphoneDrawPicInBox( drawRect, pic, boundingRect ); + rect_t drawRectInt = RectMake( drawRect.x, drawRect.y, drawRect.width, drawRect.height ); + rect_t boundingRectInt = RectMake( boundingRect.x, boundingRect.y, boundingRect.width, boundingRect.height ); + iphoneDrawPicInBox( drawRectInt, pic, boundingRectInt ); // iphoneDrawPicInBox( int x, int y, int w, int h, const char *pic, int boxX, int boxY, int boxW, int boxH ) if ( TouchDown( touchRect.x, touchRect.y, touchRect.width, touchRect.height ) && !dragVelocity) { colour4_t color = { 255, 255, 255, 64 }; @@ -366,7 +509,7 @@ int iphoneDrawPicInBoxWithTouchSpecifiedAndColor( rect_t drawRect, rect_t touchR } //gsh -int iphoneDrawPicInBoxWithTouchColorAndVelocity( rect_t drawRect, rect_t touchRect, const char *pic, rect_t boundingRect, colour4_t color, int dragVelocity ) { +int iphoneDrawPicInBoxWithTouchColorAndVelocity( rectFloat_t drawRect, rectFloat_t touchRect, const char *pic, rectFloat_t boundingRect, colour4_t color, int dragVelocity ) { //make sure touches are in drawing bounds if (touchRect.x < boundingRect.x) { @@ -394,7 +537,10 @@ int iphoneDrawPicInBoxWithTouchColorAndVelocity( rect_t drawRect, rect_t touchRe } // iphoneDrawPic( x, y, w, h, pic ); // iphoneDrawPicInBox( x, y, w, h, pic, boxX, boxY, boxW, boxH ); - iphoneDrawPicInBox( drawRect, pic, boundingRect ); + rect_t drawRectInt = RectMake( drawRect.x, drawRect.y, drawRect.width, drawRect.height ); + rect_t boundingRectInt = RectMake( boundingRect.x, boundingRect.y, boundingRect.width, boundingRect.height ); + + iphoneDrawPicInBox( drawRectInt, pic, boundingRectInt ); R_Draw_Blend( touchRect.x, touchRect.y, touchRect.width, touchRect.height, color ); // iphoneDrawPicInBox( int x, int y, int w, int h, const char *pic, int boxX, int boxY, int boxW, int boxH ) if ( TouchDown( touchRect.x, touchRect.y, touchRect.width, touchRect.height ) && !dragVelocity ) { @@ -505,12 +651,13 @@ void iphoneSlider( int x, int y, int w, int h, const char *title, cvar_t *cvar, gl = TM_FindTexture( "iphone/slider_bar.tga", TT_Pic );//stat_bar_1.tga", TT_Pic ); assert( gl ); R_Bind( gl->texnum ); - pfglBegin( GL_QUADS ); + pfglBegin( GL_TRIANGLE_STRIP ); pfglTexCoord2f( 0.0f, 0.0f ); pfglVertex2i( x, y ); + pfglTexCoord2f( 0.0f, 1.0f ); pfglVertex2i( x, y+h ); pfglTexCoord2f( f, 0.0f ); pfglVertex2i( x+w*f, y ); pfglTexCoord2f( f, 1.0f ); pfglVertex2i( x+w*f, y+h ); - pfglTexCoord2f( 0.0f, 1.0f ); pfglVertex2i( x, y+h ); + pfglEnd(); @@ -568,7 +715,7 @@ void iphoneSlider( int x, int y, int w, int h, const char *title, cvar_t *cvar, ================== */ int BackButton() { - if ( iphoneDrawPicWithTouch( 0, 0, 64, 36, "iphone/button_back.tga" ) ) { + if ( iphoneDrawPicRectWithTouch( MakeScaledRectFloat( 0.0f, 0.0f, BACK_BUTTON_WIDTH, BACK_BUTTON_HEIGHT ), "iphone/button_back.tga" ) ) { return 1; } return 0; @@ -576,7 +723,7 @@ int BackButton() { //gsh... a back button on the other side of the screen int BackButton2() { - if ( iphoneDrawPicWithTouch( 480-64, 0, 64, 36, "iphone/button_back.tga" ) ) { + if ( iphoneDrawPicRectWithTouch( MakeScaledRectFloat( 480.0f-64.0f, 0.0f, 64.0f, 36.0f ), "iphone/button_back.tga" ) ) { return 1; } return 0; @@ -584,11 +731,11 @@ int BackButton2() { //gsh int BackButton3( int x, int y ) { - if ( iphoneDrawPicWithTouch( x, y, 64, 36, "iphone/button_back.tga" ) ) { + if ( iphoneDrawPicRectWithTouch( MakeScaledRectFloat( x, y, 64.0f, 36.0f ), "iphone/button_back.tga" ) ) { return 1; } return 0; -} +} /* ================== @@ -597,9 +744,10 @@ int BackButton3( int x, int y ) { ================== */ int MenuButton() { - if ( iphoneDrawPicWithTouch( 480-64, 0, 64, 36, "iphone/menu.tga" ) ) { + if ( iphoneDrawPicRectWithTouch( MakeScaledRectFloat( 480.0f-64.0f, 0.0f, 64.0f, 64.0f ), "iphone/menu.tga" ) ) { // if ( iphoneDrawPicWithTouch( 64, 0, 64, 36, "iphone/menu.tga" ) ) { // if ( iphoneDrawPicWithTouch( 64, 0, 64, 36, "iphone/button_menu_yellow.tga" ) ) { + iphoneStartMainMenu(); return 1; } return 0; @@ -607,7 +755,7 @@ int MenuButton() { void GetMoreLevels( int x, int y ) { - if ( iphoneDrawPicWithTouch( x, y, 128, 64, "iphone/button_levels.tga" ) ) { + if ( iphoneDrawPicRectWithTouch( MakeScaledRectFloat( x, y, 128.0f, 64.0f ), "iphone/button_levels.tga" ) ) { // directly to the app store for more levels SysIPhoneOpenURL( "http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=309470478" ); } @@ -688,11 +836,17 @@ void SaveTheGame() { } // turn the r_world->Doors.doors from pointers to indexes - // ok to be destructive, because we are quiting - for ( i = 0 ; i < r_world->Doors.doornum ; i++ ) { + // Can't be destructive anymore, because the app can be suspended in the background now. + + // Quick fix for non-destructiveness: Just make a copy of the levelData, convert the + // pointers to indices in the copy, and write the copy to the save data. Leave the actual + // current levelData alone. + LevelData_t copiedLevelData = levelData; + + for ( i = 0 ; i < copiedLevelData.Doors.doornum ; i++ ) { int index = r_world->Doors.Doors[i] - &r_world->Doors.DoorMap[0][0]; assert( index >= 0 && index < 4096 ); - r_world->Doors.Doors[i] = (void *)index; + copiedLevelData.Doors.Doors[i] = (void *)index; } // this is only used for the mutant death face, so just @@ -704,7 +858,7 @@ void SaveTheGame() { fwrite( &huds, 1,sizeof(huds), f); - fwrite( &levelData, 1,sizeof(levelData), f ); + fwrite( &copiedLevelData, 1,sizeof(levelData), f ); fwrite( &LevelRatios, 1,sizeof(LevelRatios), f ); fwrite( &levelstate, 1,sizeof(levelstate), f ); fwrite( Guards, 1,sizeof(Guards), f ); @@ -817,7 +971,7 @@ int iphoneGetUserMapName(int mapNumber, char *mapName) if (dp != NULL) { - while (ep = readdir (dp)) + while ( ( ep = readdir (dp) ) ) {/* //if you find a .DS_Store file... ignore it! if ( strcmp(ep->d_name, ".DS_Store") == 0 ) @@ -877,7 +1031,7 @@ int iphoneGetUserMapLevelByName(const char *mapName) if (dp != NULL) { - while (ep = readdir (dp)) + while ( ( ep = readdir (dp) ) ) { if (strcmp(ep->d_name, mapName) == 0) { @@ -988,7 +1142,11 @@ void iphoneStartUserMap( int episodeNum, int mapNum, int skillLevel, char *mapNa Com_Printf("command: %s\n", command); Client_PrepRefresh( command ); - menuState = IPM_GAME; + if ( r_world != NULL ) { + menuState = IPM_GAME; + } else { + menuState = IPM_MAIN; + } } /* @@ -1038,7 +1196,44 @@ void iphoneStartMap( int episodeNum, int mapNum, int skillLevel ) { Com_Printf("command: %s\n", command); Client_PrepRefresh( command ); - menuState = IPM_GAME; + if ( r_world != NULL ) { + menuState = IPM_GAME; + } else { + menuState = IPM_MAIN; + } +} + +extern int notifyFrameNum; //gsh + +/* + ================== + iphoneResume + + ================== + */ +void iphoneResume() { + iphoneStopMenuMusic(); + + //iphoneStartGameplay(); + iphonePreloadBeforePlay(); + + Sound_StartBGTrack( levelData.musicName, levelData.musicName ); + + // if the game was saved at the intermission screen, immediately + // bring it back up when it is loaded + if ( currentMap.levelCompleted ) { + iphoneStartIntermission( 0 ); + } else { + //reset the notification so that we can see which level we've loaded.. gsh + iphoneSetLevelNotifyText(); + iphoneFrameNum = 0; + notifyFrameNum = 60; + if ( r_world != NULL ) { + menuState = IPM_GAME; + } else { + menuState = IPM_MAIN; + } + } } /* @@ -1047,14 +1242,15 @@ void iphoneStartMap( int episodeNum, int mapNum, int skillLevel ) { ================== */ -extern int notifyFrameNum; //gsh void iphoneMainMenu() { char str[80]; float scale = 40 / 32.0; //iphoneDrawPic( 480-256, 0, 256, 128, "iphone/wolf_logo.tga" ); //iphoneDrawPic( 0, 0, 480, 320, "iphone/background_main.tga" ); //gsh - iphoneDrawPic(0, 0, 264, 250, "iphone/wolfplatinum_logo.tga"); + + //iphoneDrawPicRect( MakeScaledRectFloat( 0.0f, 0.0f, 264.0f, 250.0f ), "iphone/wolfplatinum_logo.tga"); + /*gsh #ifdef LITE iphoneDrawPic( -20, 0, 256, 64, "iphone/ep_1.tga" ); @@ -1071,20 +1267,9 @@ void iphoneMainMenu() { // iphoneDrawPic( 0, 320 - 128, 128, 128, "iphone/id_logo.tga" ); // if ( iphoneDrawPicWithTouch( 300 - 64*scale, 80, 128*scale, 64*scale, "iphone/button_resume.tga" ) ) { - if ( iphoneDrawPicWithTouch( 360 - 64*scale, 20, 128*scale, 32*scale, "iphone/button_resume.tga" ) ) { //gsh - iphonePreloadBeforePlay(); - - // if the game was saved at the intermission screen, immediately - // bring it back up when it is loaded - if ( currentMap.levelCompleted ) { - iphoneStartIntermission( 0 ); - } else { - //reset the notification so that we can see which level we've loaded.. gsh - iphoneSetLevelNotifyText(); - iphoneFrameNum = 0; - notifyFrameNum = 60; - menuState = IPM_GAME; - } + if ( iphoneDrawPicRectWithTouch( MakeScaledRectFloat( 360 - 64*scale, 20, 128*scale, 32*scale ), + "iphone/button_resume.tga" ) ) { //gsh + iphoneResume(); } //gsh @@ -1097,22 +1282,22 @@ void iphoneMainMenu() { // iphoneCenterText( 360, 34*scale, str ); //gsh // if ( iphoneDrawPicWithTouch( 300 - 64*scale, 170, 128*scale, 32*scale, "iphone/button_control.tga" ) ) { - if ( iphoneDrawPicWithTouch( 360 - 64*scale, 120, 128*scale, 32*scale, "iphone/button_settings.tga" ) ) { //gsh + if ( iphoneDrawPicRectWithTouch( MakeScaledRectFloat( 360 - 64*scale, 120, 128*scale, 32*scale ), "iphone/button_settings.tga" ) ) { //gsh menuState = IPM_CONTROLS; } // if ( iphoneDrawPicWithTouch( 300 - 64*scale, 220, 128*scale, 32*scale, "iphone/button_new.tga" ) ) { - if ( iphoneDrawPicWithTouch( 360 - 64*scale, 70, 128*scale, 32*scale, "iphone/button_new.tga" ) ) { //gsh + if ( iphoneDrawPicRectWithTouch( MakeScaledRectFloat( 360 - 64*scale, 70, 128*scale, 32*scale ), "iphone/button_new.tga" ) ) { //gsh menuState = IPM_SKILL;//IPM_MAPSELECTOR;//IPM_SKILL; //gsh } // if ( iphoneDrawPicWithTouch( 300 - 64*scale, 270, 128*scale, 32*scale, "iphone/button_web.tga" ) ) { - if ( iphoneDrawPicWithTouch( 100 - 64*scale, 250, 64, 64, "iphone/id_logo.tga" ) ) { //gsh - wasCalledFromDownloadInstructionsMenu = 0; - iphoneYesNoBox("Website", "This will navigate you to idsoftware.com. Continue?"); + //if ( iphoneDrawPicRectWithTouch( MakeScaledRectFloat( 100 - 64*scale, 250, 64, 64 ), "iphone/id_logo.tga" ) ) { //gsh + // currentYesNoBox = YESNO_GO_TO_WEBSITE; + // iphoneYesNoBox("Website", "This will navigate you to idsoftware.com. Continue?"); // SysIPhoneOpenURL( "http://www.idsoftware.com/wolfenstein3dclassic/" ); - } + //} //gsh // if (iphoneDrawPicWithTouch(100 - 64*scale, 270, 128*scale, 32*scale, "iphone/button_control.tga" ) ) { - if (iphoneDrawPicWithTouch(360 - 64*scale, 220, 128*scale, 32*scale, "iphone/button_more.tga" ) ) { //gsh + if (iphoneDrawPicRectWithTouch( MakeScaledRectFloat( 360 - 64*scale, 220, 128*scale, 32*scale ), "iphone/button_more.tga" ) ) { //gsh menuState = IPM_MORE;//IPM_TRIVIA; } @@ -1120,17 +1305,17 @@ void iphoneMainMenu() { int y = 170; if ( SysIPhoneOtherAudioIsPlaying() ) { // iphoneDrawPic( 480 - 64, 220, 64, 64, "iphone/music_off.tga" ); - iphoneDrawPic( x - 64*scale, y, 128*scale, 32*scale, "iphone/music_off.tga" ); //gsh + iphoneDrawPicRect( MakeScaledRectFloat( x - 64*scale, y, 128*scale, 32*scale ), "iphone/music_off.tga" ); //gsh } else { if ( music->value ) { //if ( iphoneDrawPicWithTouch( 480 - 64, 220, 64, 64, "iphone/music_on.tga" ) ) { - if ( iphoneDrawPicWithTouch( x - 64*scale, y, 128*scale, 32*scale, "iphone/music_on.tga" ) ) { //gsh + if ( iphoneDrawPicRectWithTouch( MakeScaledRectFloat( x - 64*scale, y, 128*scale, 32*scale ), "iphone/music_on.tga" ) ) { //gsh Cvar_SetValue( music->name, 0 ); Sound_StopBGTrack(); } } else { //if ( iphoneDrawPicWithTouch( 480 - 64, 220, 64, 64, "iphone/music_off.tga" ) ) { - if ( iphoneDrawPicWithTouch( x - 64*scale, y, 128*scale, 32*scale, "iphone/music_off.tga" ) ) { //gsh + if ( iphoneDrawPicRectWithTouch( MakeScaledRectFloat( x - 64*scale, y, 128*scale, 32*scale ), "iphone/music_off.tga" ) ) { //gsh Cvar_SetValue( music->name, 1 ); Sound_StartBGTrack( levelData.musicName, levelData.musicName ); } @@ -1138,7 +1323,10 @@ void iphoneMainMenu() { } sprintf( str, "v%3.1f", WOLF_IPHONE_VERSION ); - iphoneCenterText( 460, 300, str ); + float versionX = 460.0f; + float versionY = 300.0f; + ScalePosition( &versionX, &versionY ); + iphoneCenterText( versionX, versionY, str ); } //========================================== @@ -1362,6 +1550,10 @@ void iphoneControlMenu() { iphoneSlider( sliderX, sliderY, sliderWidth, sliderHeight, "hud alpha", hudAlpha, 0, 1 ); sliderY += sliderHeight + sliderSpacing; + +#ifdef VOLUMEHACK + //Draw volume up/down settings... gsh + y = 0; x = 480-74; if (revLand->value) @@ -1370,9 +1562,6 @@ void iphoneControlMenu() { x = 74-64; } -#ifdef VOLUMEHACK - //Draw volume up/down settings... gsh - if ( iphoneDrawPicWithTouch( x, y, 64, 32, "iphone/button_pistol.tga" ) ) { if ((int)volumeFireUpSetting->value) Cvar_Set("volumeFireUpSetting", "0"); @@ -1403,6 +1592,8 @@ void iphoneControlMenu() { #endif } #endif + +#if 0 /* ================== iphoneControlMenu @@ -1415,21 +1606,25 @@ void iphoneControlMenu() { int x = 0; int y = 0; - iphoneDrawPic(x, y, 480, 320, "iphone/submenus_background_image.tga"); + iphoneDrawPicRect( MakeScaledRectFloat( x, y, 480.0f, 320.0f ), "iphone/submenus_background_image.tga"); if ( BackButton() ) { menuState = IPM_MAIN; + iphoneStartMainMenu(); } x = 480-128*9/10; - if ( iphoneDrawPicWithTouch( x, y, 128*9/10, 36, "iphone/advanced_button.tga" ) ) { + + /* Advanced controls are now accessed by the new menu system + if ( iphoneDrawPicRectWithTouch( MakeScaledRectFloat( x, y, 128.0f*9/10.0f, 36.0f ), "iphone/advanced_button.tga" ) ) { Cvar_SetValue( controlScheme->name, -1 ); iphonePreloadBeforePlay(); // make sure all the hud textures are loaded menuState = IPM_HUDEDIT; } + */ x = 240-108*9/10; - iphoneDrawPic(x, y, 217*9/10, 50*9/10, "iphone/header_settings.tga"); + iphoneDrawPicRect( MakeScaledRectFloat( x, y, 217.0f*9/10.0f, 50*9/10.0f ), "iphone/header_settings.tga"); //update the position of the control settings const int startPosition = 70; @@ -1445,7 +1640,7 @@ void iphoneControlMenu() { static int moveRight = 0; //move right or left, depending on button pushed - if (iphoneDrawPicWithTouch(9, y+60, 64, 64, "iphone/button_left.tga") ) { + if (iphoneDrawPicRectWithTouch( MakeScaledRectFloat( 9.0f, y+60.0f, 64.0f, 64.0f ), "iphone/button_left.tga") ) { moveRight = 0; ++currentPreset; if (currentPreset > numPresets-1) { @@ -1453,7 +1648,7 @@ void iphoneControlMenu() { } } - if (iphoneDrawPicWithTouch(411, y+60, 64, 64, "iphone/button_right.tga") ) { + if (iphoneDrawPicRectWithTouch( MakeScaledRectFloat( 411.0f, y+60.0f, 64.0f, 64.0f ), "iphone/button_right.tga") ) { moveRight = 1; --currentPreset; if (currentPreset < 0) { @@ -1532,22 +1727,40 @@ void iphoneControlMenu() { char buffer[32]; sprintf(buffer, "Preset %i", i+1); + rect_t textBoxRect = RectMake( 70, 0, 480-140+10, 320 ); + ScaleRect( &textBoxRect ); + + rect_t paragraphBox1 = RectMake(thisX+35+1, y+125+1, 16, 16); + ScaleRect( ¶graphBox1 ); + + rect_t paragraphBox2 = RectMake(thisX+35+2, y+125+2, 16, 16); + ScaleRect( ¶graphBox2 ); + + rect_t paragraphBox3 = RectMake(thisX+35+3, y+125+3, 16, 16); + ScaleRect( ¶graphBox3 ); + + rect_t paragraphBox4 = RectMake(thisX+35, y+125, 16, 16); + ScaleRect( ¶graphBox4 ); + + pfglColor3f( 0, 0, 0 ); - iphoneDrawTextInBox( RectMake(thisX+35+1, y+125+1, 16, 16), 480, buffer, RectMake(70, 0, 480-140+10, 320) ); - iphoneDrawTextInBox( RectMake(thisX+35+2, y+125+2, 16, 16), 480, buffer, RectMake(70, 0, 480-140+10, 320) ); - iphoneDrawTextInBox( RectMake(thisX+35+3, y+125+3, 16, 16), 480, buffer, RectMake(70, 0, 480-140+10, 320) ); + + iphoneDrawTextInBox( paragraphBox1, 480*screenScale, buffer, textBoxRect ); + iphoneDrawTextInBox( paragraphBox2, 480*screenScale, buffer, textBoxRect ); + iphoneDrawTextInBox( paragraphBox3, 480*screenScale, buffer, textBoxRect ); pfglColor3f( 1, 1, 1 ); - iphoneDrawTextInBox( RectMake(thisX+35, y+125, 16, 16), 480, buffer, RectMake(70, 0, 480-140+10, 320) ); + iphoneDrawTextInBox( paragraphBox4, 480*screenScale, buffer, textBoxRect ); } - int sliderHeight = 25;//35; + float sliderHeight = 25;//35; int sliderSpacing = 10; - int sliderY = y + size;// - 13;//190;//170; - int sliderX = 80;//20; - int sliderWidth = 320;//440; + float sliderY = y + size;// - 13;//190;//170; + float sliderX = 80;//20; + float sliderWidth = 320;//440; //sensitivity slider + ScalePositionAndSize( &sliderX, &sliderY, &sliderWidth, &sliderHeight ); iphoneSlider( sliderX, sliderY, sliderWidth, sliderHeight, "sensitivity", sensitivity, 0, 1 ); sliderY += sliderHeight + sliderSpacing; @@ -1575,6 +1788,9 @@ void iphoneControlMenu() { iphoneSlider( sliderX, sliderY, sliderWidth, sliderHeight, "hud alpha", hudAlpha, 0, 1 ); sliderY += sliderHeight + sliderSpacing; +#ifdef VOLUMEHACK + //Draw volume up/down settings... gsh + y = 0; x = 480-74; if (revLand->value) @@ -1583,9 +1799,6 @@ void iphoneControlMenu() { x = 74-64; } -#ifdef VOLUMEHACK - //Draw volume up/down settings... gsh - if ( iphoneDrawPicWithTouch( x, y, 64, 32, "iphone/button_pistol.tga" ) ) { if ((int)volumeFireUpSetting->value) Cvar_Set("volumeFireUpSetting", "0"); @@ -1629,13 +1842,14 @@ void iphoneSkillMenu() { char str[64]; //gsh - iphoneDrawPic(0, 0, 480, 320, "iphone/submenus_background_image.tga"); + iphoneDrawPicRect( MakeScaledRectFloat( 0.0f, 0.0f, 480.0f, 320.0f ), "iphone/submenus_background_image.tga"); //gsh - iphoneDrawPic(0, 0, 480, 48, "iphone/header_how_tough_are_you.tga"); + iphoneDrawPicRect( MakeScaledRectFloat( 0.0f, 0.0f, 480.0f, 48.0f ), "iphone/header_how_tough_are_you.tga"); if ( BackButton() ) { menuState = IPM_MAIN; + iphoneStartMainMenu(); } // highlight the current skill selection @@ -1649,7 +1863,7 @@ void iphoneSkillMenu() { pfglColor3f( 0.5, 0.5, 0.5 ); } //if ( iphoneDrawPicWithTouch( 112, 40+64*s, 256, 64, str ) ) { - if ( iphoneDrawPicWithTouch( 112, 60+64*s, 256, 64, str ) ) { + if ( iphoneDrawPicRectWithTouch( MakeScaledRectFloat( 112.0f, 60.0f+64.0f*s, 256.0f, 64.0f ), str ) ) { Cvar_SetValue( skill->name, s ); menuState = IPM_EPISODE; } @@ -1667,14 +1881,11 @@ void iphoneSkillMenu() { void iphoneEpisodeMenu() { int e; char str[64]; -#ifdef LITE - int numE = 1; -#else int numE = 6; //gsh if (g_version->value == SPEAROFDESTINY) numE = 9; -#endif + if ( BackButton() ) { menuState = IPM_SKILL; @@ -1692,8 +1903,8 @@ void iphoneEpisodeMenu() { if ( e != (int)episode->value ) { pfglColor3f( 0.5, 0.5, 0.5 ); } - int height = 32;//48;//gsh... 96x32 - if ( iphoneDrawPicWithTouch( 48, 32+height*e, 384, height, str ) ) { + float height = 32.0f;//48;//gsh... 96x32 + if ( iphoneDrawPicRectWithTouch( MakeScaledRectFloat( 48.0f, 32.0f+height*e, 384.0f, height), str ) ) { Cvar_SetValue( episode->name, e ); menuState = IPM_MAPS; }/*gsh @@ -1703,16 +1914,6 @@ void iphoneEpisodeMenu() { }*/ pfglColor3f( 1, 1, 1 ); } - -#ifdef LITE - // buy more episodes button - GetMoreLevels( 240 - 64, 200 ); -#else - #if 0 - if (g_version->value != SPEAROFDESTINY) //gsh - GetSpearOfDestiny( 240 - 64, 232 ); - #endif -#endif } /* @@ -1722,19 +1923,19 @@ void iphoneEpisodeMenu() { ================== */ //int scrollingFlags = 0; -void iphoneUpdateScrollingDrags(int *dragPosition, int *dragVelocity, int upperLimit, int lowerLimit, int padding, rect_t touchRect) +void iphoneUpdateScrollingDrags(int *dragPosition, int *dragVelocity, int upperLimit, int lowerLimit, int padding ) { static int oldVelocity = 0; //if Touch is in touchable area // if (TouchDown(touchRect.x, touchRect.y, touchRect.width, touchRect.height)) - if (TouchDown( 0, 0, 480, 320) )//|| isTouchMoving) + if (TouchDown( 0, 0, viddef.width, viddef.height ) )//|| isTouchMoving) { if (!numPrevTouches) prevTouches[0][1] = touches[0][1]; else if (numTouches == 1) - *dragVelocity = touches[0][1] - prevTouches[0][1]; + *dragVelocity = ((float)(touches[0][1]) - prevTouches[0][1]) * ( 1.0f / screenScale ); //if (*dragVelocity < 3) // isTouchMoving = 0; @@ -1750,8 +1951,8 @@ void iphoneUpdateScrollingDrags(int *dragPosition, int *dragVelocity, int upperL else if (abs(*dragVelocity) < 5) //this returns the position to a node position { int startPosition = 70 - 10; - int height = 48; - int spacing = 20; + int height = 48 * screenScale; + int spacing = 20 * screenScale; int nodePosition = upperLimit + padding; @@ -1759,7 +1960,7 @@ void iphoneUpdateScrollingDrags(int *dragPosition, int *dragVelocity, int upperL nodePosition = n*(height+spacing) + startPosition;// - 5; /* if (nodePosition != *dragPosition) - {/* + { int nodePositionPlus = nodePosition + (height+spacing); int nodePositionMinus = nodePosition - (height+spacing); int distMinus = abs(nodePositionMinus - *dragPosition); @@ -1871,6 +2072,56 @@ void iphoneUpdateScrollingDrags(int *dragPosition, int *dragVelocity, int upperL } +#endif + +/* + ================== + iphoneDrawLoadingIndicator + ================== + */ +void iphoneDrawLoadingIndicator() { + //int loadingWidth = 128; + //int loadingHeight = 128; + + //int halfWidth = loadingWidth / 2; + //int halfHeight = loadingWidth / 2; + + // Keep track of ticks so we can rotate the indicator periodically. + static int ticks = 0; + + // The graphic is designed on 45-degree angles, so that's how we want to rotate. + float rotateInterval = 45.0f; + + // Rotate by rotateInterval degrees every tickInterval. + int tickInterval = 10; + + static float rotateDegrees = 0.0f; + + if ( ticks >= tickInterval ) { + rotateDegrees += rotateInterval; + + if ( rotateDegrees > 360.0f ) { + rotateDegrees -= 360.0f; + } + + ticks = 0; + } + + pfglTranslatef( (viddef.width / 2.0f), + (viddef.height / 2.0f), + 0.0f ); + pfglRotatef( rotateDegrees, 0.0f, 0.0f, 1.0f ); + + + //iphoneDrawPic( -halfWidth, -halfHeight, loadingWidth, loadingHeight, "iphone/loading.tga" ); + + ++ticks; + + return; +} + +#if 0 + /* ================== iphoneScrollingEpisodeMenu @@ -1887,9 +2138,6 @@ void iphoneScrollingEpisodeMenu() { static int touchedFrameNum = 0; static int lastTouchFrame = 0; -#ifdef LITE - int numE = 1; -#else int numE = 11;//10; //check for user maps @@ -1913,13 +2161,20 @@ void iphoneScrollingEpisodeMenu() { //gsh //if (g_version->value == SPEAROFDESTINY) // numE = 9; -#endif - iphoneDrawPic(0, 0, 480, 320, "iphone/submenus_background_image.tga"); + iphoneDrawPicRect( MakeScaledRectFloat( 0.0f, 0.0f, 480.0f, 320.0f ), "iphone/submenus_background_image.tga"); + + iphoneDrawPicRect( MakeScaledRectFloat( 0.0f, 0.0f, 480.0f, 48.0f ), "iphone/header_episodes.tga"); + + // If waiting for an in-app purchase, show the user an activity indicator. + if ( InAppPurchaseIsInProgress() ) { + iphoneDrawLoadingIndicator(); + + return; + } - iphoneDrawPic( 0, 0, 480, 48, "iphone/header_episodes.tga"); if ( BackButton() ) { menuState = IPM_SKILL; @@ -1940,7 +2195,7 @@ void iphoneScrollingEpisodeMenu() { */ int lowerLimit = -320; lowerLimit = 70-(11-4)*(48+20); - iphoneUpdateScrollingDrags(&dragPosition, &dragVelocity, 55, lowerLimit, 0, RectMake(0, 48, 480-48, 320-64)); + iphoneUpdateScrollingDrags(&dragPosition, &dragVelocity, 55, lowerLimit, 0 ); // 96 x 48 images for ( e = 0 ; e < numE ; e++ ) { @@ -1993,10 +2248,10 @@ void iphoneScrollingEpisodeMenu() { && !dragVelocity && !isTouchMoving )//touchedFrameNum >= NUM_TOUCHFRAME ) //must hold finger down for 10 frames */// iphoneDrawPicInBoxWithTouchAndVelocity - if (iphoneDrawPicInBoxWithTouchAndVelocity(RectMake(0, dragPosition+(height+spacing)*e, 480, height), - RectMake(0, dragPosition+(height+spacing)*e, 480, height), - str, - RectMake(0, 48, 480, 320-48), dragVelocity | isTouchMoving ) )//RectMake(0, 42, 480, 238) ) + if (iphoneDrawPicInBoxWithTouchAndVelocity(MakeScaledRectFloat(0.0f, dragPosition+(height+spacing)*e, 480.0f, height), + MakeScaledRectFloat(0.0f, dragPosition+(height+spacing)*e, 480.0f, height), + str, + MakeScaledRectFloat(0.0f, 48.0f, 480.0f, 320.0f-48.0f), dragVelocity | isTouchMoving ) )//RectMake(0, 42, 480, 238) ) //&& !dragVelocity //&& !isTouchMoving ) { @@ -2008,8 +2263,18 @@ void iphoneScrollingEpisodeMenu() { pfglColor3f( 1, 1, 1 ); break; } - Cvar_SetValue( episode->name, e ); - menuState = IPM_MAPS; + + // If they have the Lite version, only allow episode 1. + if ( SysIPhoneGetContentVersion() == CONTENT_PLATINUM || e == 0 ) { + Cvar_SetValue( episode->name, e ); + menuState = IPM_MAPS; + } else { + // Lite version, but user chose an episode that was not episode 1. + // Prompt in-app purchase for platinum. + // TODO: this. + InAppPurchaseStartPurchase( PLATINUM_UPGRADE_STRING ); + } + } pfglColor3f( 1, 1, 1 ); } @@ -2024,20 +2289,19 @@ void iphoneScrollingEpisodeMenu() { } lastTouchFrame = iphoneFrameNum; -#ifdef LITE - // buy more episodes button - GetMoreLevels( 240 - 64, 200 ); -#else + #ifdef SPEARSTOREKIT if (g_version->value != SPEAROFDESTINY) //gsh GetSpearOfDestiny( 240 - 64, 232 ); #endif -#endif if ( MenuButton() ) { menuState = IPM_MAIN; } } + +#endif + //gsh extern void iphoneDrawRewards(int m, int s, int x, int y); //gsh @@ -2056,6 +2320,8 @@ colour4_t colorNoTry = { 0, 0, 0, 150 }; colour4_t colorTried = { 80, 80, 80, 40 }; colour4_t colorCompleted = { 0, 120, 0, 80 }; +#if 0 + /* ======================== iphoneDrawWolf3dMaps @@ -2072,8 +2338,6 @@ void iphoneDrawWolf3dMaps(int dragPosition, int dragVelocity, int e, int s, int colour4_t colorCompleted = { 0, 80, 0, 100 }; */ - - // draw the individual maps for ( int m = 0 ; m < 10; m++ ) { int y; @@ -2119,7 +2383,7 @@ void iphoneDrawWolf3dMaps(int dragPosition, int dragVelocity, int e, int s, int case 3: color = colorNoTry; break; }*/ - rect_t box = RectMake(0, 48, 480, 320-48); + rectFloat_t box = MakeScaledRectFloat(0.0f, 48.0f, 480.0f, 320.0f-48.0f); int borderWidth = 40; /* if (iphoneDrawPicInBoxWithTouchSpecifiedAndColor(RectMake(borderWidth, y - 9, 480-2*borderWidth, height), RectMake(borderWidth, y - 9, 480-2*borderWidth, height), @@ -2127,22 +2391,31 @@ void iphoneDrawWolf3dMaps(int dragPosition, int dragVelocity, int e, int s, int box, color) && !dragVelocity && !isTouchMoving)//touchedFrameNum >= 10) -*/ if (iphoneDrawPicInBoxWithTouchColorAndVelocity(RectMake(borderWidth, y - 9, 480-2*borderWidth, height), - RectMake(borderWidth, y - 9, 480-2*borderWidth, height), +*/ if (iphoneDrawPicInBoxWithTouchColorAndVelocity( MakeScaledRectFloat(borderWidth, y - 9.0f, 480.0f-2*borderWidth, height), + MakeScaledRectFloat(borderWidth, y - 9.0f, 480.0f-2*borderWidth, height), "iphone/menu_bar.tga", box, color, dragVelocity | isTouchMoving) )// && !dragVelocity //&& !isTouchMoving) { - // don't let them go to the secret level unless they earned it - if ( m == 9 && !( ch & MF_TRIED ) ) - continue; - - PL_NewGame( &Player ); - iphoneStartMap( e, m, s ); - iphoneFrameNum = 0; - returnButtonFrameNum = 100; - iphonePreloadBeforePlay(); + // Only allow access to the first three levels if they have the Lite version. + if ( SysIPhoneGetContentVersion() == CONTENT_PLATINUM || m < 3 ) { + // don't let them go to the secret level unless they earned it + if ( m == 9 && !( ch & MF_TRIED ) ) + continue; + + PL_NewGame( &Player ); + iphoneStartMap( e, m, s ); + iphoneFrameNum = 0; + returnButtonFrameNum = 100; + iphonePreloadBeforePlay(); + } else { + // User has chosen a level he does not have acces to in the Lite version. + // Prompt the user to buy Platinum with an in-app purchase. + // TODO: This. + InAppPurchaseStartPurchase( PLATINUM_UPGRADE_STRING ); + } + } //draw the rewards @@ -2280,7 +2553,7 @@ void iphoneDrawSpearMaps(int dragPosition, int dragVelocity, int fakeEpisode, in color = colorNoTry; } - rect_t box = RectMake(0, 48, 480, 320-48); + rectFloat_t box = MakeScaledRectFloat(0, 48, 480, 320-48); int borderWidth = 40; /* if (iphoneDrawPicInBoxWithTouchSpecifiedAndColor(RectMake(borderWidth, y - 9, 480-2*borderWidth, height), RectMake(borderWidth, y - 9, 480-2*borderWidth, height), @@ -2288,27 +2561,33 @@ void iphoneDrawSpearMaps(int dragPosition, int dragVelocity, int fakeEpisode, in box, color) && !dragVelocity && !isTouchMoving)//touchedFrameNum >= NUM_TOUCHFRAME) -*/ if (iphoneDrawPicInBoxWithTouchColorAndVelocity(RectMake(borderWidth, y - 9, 480-2*borderWidth, height), - RectMake(borderWidth, y - 9, 480-2*borderWidth, height), +*/ if (iphoneDrawPicInBoxWithTouchColorAndVelocity(MakeScaledRectFloat(borderWidth, y - 9, 480-2*borderWidth, height), + MakeScaledRectFloat(borderWidth, y - 9, 480-2*borderWidth, height), "iphone/menu_bar.tga", box, color, dragVelocity | isTouchMoving ) ) //&& !isTouchMoving) { - //diagnostic info - Com_Printf("fakeEpisode: %i fakeMap: %i\n", fakeEpisode, fakeMap); - Com_Printf("e: %i m: %i\n", e, m); - - // don't let them go to the secret level unless they earned it - if ( (levelNum == 78 || levelNum == 79) && !( ch & MF_TRIED ) ) - continue; + if ( SysIPhoneGetContentVersion() == CONTENT_PLATINUM ) { + //diagnostic info + Com_Printf("fakeEpisode: %i fakeMap: %i\n", fakeEpisode, fakeMap); + Com_Printf("e: %i m: %i\n", e, m); + + // don't let them go to the secret level unless they earned it + if ( (levelNum == 78 || levelNum == 79) && !( ch & MF_TRIED ) ) + continue; + + PL_NewGame( &Player ); + iphonePreloadBeforePlay(); + iphoneStartMap(e, m, s); + iphoneFrameNum = 0; + returnButtonFrameNum = 100; + break; //break the loop... no need to keep looping + } else { + // User hasn't purchased platinum, prompt them to buy. + InAppPurchaseStartPurchase( PLATINUM_UPGRADE_STRING ); + } - PL_NewGame( &Player ); - iphonePreloadBeforePlay(); - iphoneStartMap(e, m, s); - iphoneFrameNum = 0; - returnButtonFrameNum = 100; - break; //break the loop... no need to keep looping } //draw the rewards @@ -2357,7 +2636,7 @@ int iphoneDrawUserCreatedMaps(int dragPosition, int dragVelocity, /*int fakeEpis Com_Printf("y: %i\n", y); - while (ep = readdir (dp)) + while ( ( ep = readdir (dp) ) ) { //if you find a .DS_Store file... ignore it! if ( strcmp(ep->d_name, ".DS_Store") == 0 ) @@ -2399,12 +2678,12 @@ int iphoneDrawUserCreatedMaps(int dragPosition, int dragVelocity, /*int fakeEpis } int borderWidth = 40; - rect_t box = RectMake(0, 48, 480, 320-48); - if (iphoneDrawPicInBoxWithTouchColorAndVelocity(RectMake(borderWidth, y - 9, 480-2*borderWidth, height), - RectMake(borderWidth, y - 9, 480-2*borderWidth, height), - "iphone/menu_bar.tga", - box, - color, dragVelocity | isTouchMoving) ) + rectFloat_t box = MakeScaledRectFloat(0.0f, 48.0f, 480.0f, 320.0f-48.0f); + if (iphoneDrawPicInBoxWithTouchColorAndVelocity( MakeScaledRectFloat(borderWidth, y - 9.0f, 480.0f-2.0f*borderWidth, height), + MakeScaledRectFloat(borderWidth, y - 9.0f, 480.0f-2.0f*borderWidth, height), + "iphone/menu_bar.tga", + box, + color, dragVelocity | isTouchMoving) ) { //reset the player to new PL_NewGame( &Player ); @@ -2444,6 +2723,10 @@ int iphoneDrawUserCreatedMaps(int dragPosition, int dragVelocity, /*int fakeEpis return numMaps; } +#endif + +#if 0 + /* ================== iphoneScrollingMapMenu @@ -2453,13 +2736,9 @@ int iphoneDrawUserCreatedMaps(int dragPosition, int dragVelocity, /*int fakeEpis extern int forceDrawRewards; void iphoneScrollingMapMenu() { -#ifdef LITE -# define NUM_MAPS 3 -#else + # define NUM_MAPS 10 -#endif - - + //used for preventing accidental touches //user must hold touch down for 10 frames in order to load map static int touchedFrameNum = 0; @@ -2474,7 +2753,15 @@ void iphoneScrollingMapMenu() static int dragPosition = 70; static int dragVelocity = 0; - iphoneDrawPic(0, 0, 480, 320, "iphone/submenus_background_image.tga"); + iphoneDrawPicRect( MakeScaledRectFloat( 0.0f, 0.0f, 480.0f, 320.0f ), "iphone/submenus_background_image.tga"); + + // If waiting for an in-app purchase, show the user an activity indicator. + if ( InAppPurchaseIsInProgress() ) { + iphoneDrawLoadingIndicator(); + + return; + } + /* //static int forceDrawRewards = 0; //This is only for debugging/testing out the look of the medals @@ -2560,7 +2847,7 @@ void iphoneScrollingMapMenu() if ( e == 8 ) lowerLimit = -85; */ - iphoneUpdateScrollingDrags(&dragPosition, &dragVelocity, 65, lowerLimit, 0, RectMake(0, 48, 480-48, 320-64)); + iphoneUpdateScrollingDrags( &dragPosition, &dragVelocity, 65, lowerLimit, 0 ); //---------------------------- if ( e < 6 ) @@ -2592,7 +2879,7 @@ void iphoneScrollingMapMenu() // draw the header for the episode my_snprintf( str, sizeof( str ), "iphone/header_ep%i.tga", e+1 ); - iphoneDrawPic( 0, 0, 480, 48, str ); + iphoneDrawPicRect( MakeScaledRectFloat( 0.0f, 0.0f, 480.0f, 48.0f ), str ); if ( BackButton() ) { menuState = IPM_EPISODE; @@ -2608,11 +2895,8 @@ void iphoneScrollingMapMenu() ================== */ void iphoneMapMenu() { -#ifdef LITE -# define NUM_MAPS 3 -#else + # define NUM_MAPS 10 -#endif int e, m, s; char str[64]; @@ -2736,6 +3020,8 @@ void iphoneMapMenu() { } } +#endif + /* ================== iphoneStartIntermission @@ -2787,13 +3073,22 @@ void iphoneStartIntermission( int framesFromNow ) { ================== */ void DrawDigit( int x, int y, int digit ) { - R_Bind( numberPics[digit]->texnum ); - pfglBegin( GL_QUADS ); + float width = 32.0f; + float height = 32.0f; + + float xFloat = (float)x; + float yFloat = (float)y; + + ScalePositionAndSize( &xFloat, &yFloat, &width, &height ); + + R_Bind( numberPics[digit]->texnum ); + pfglBegin( GL_TRIANGLE_STRIP ); + + pfglTexCoord2f( 0, 0 ); pfglVertex2f( xFloat, yFloat ); + pfglTexCoord2f( 0, 1 ); pfglVertex2f( xFloat, yFloat+height ); + pfglTexCoord2f( 1, 0 ); pfglVertex2f( xFloat+width, yFloat ); + pfglTexCoord2f( 1, 1 ); pfglVertex2f( xFloat+width, yFloat+height ); - pfglTexCoord2f( 0, 0 ); pfglVertex2i( x, y ); - pfglTexCoord2f( 1, 0 ); pfglVertex2i( x+32, y ); - pfglTexCoord2f( 1, 1 ); pfglVertex2i( x+32, y+32 ); - pfglTexCoord2f( 0, 1 ); pfglVertex2i( x, y+32 ); pfglEnd(); } @@ -2831,7 +3126,7 @@ void DrawRatio( int y, int got, int total, const char *bonusPic ) { // draw the award icon if ( got == total ) { - iphoneDrawPic( 480 - 40, y, 32, 32, bonusPic ); + iphoneDrawPicRect( MakeScaledRectFloat( 480.0f - 40.0f, y, 32.0f, 32.0f ), bonusPic ); } } @@ -2847,7 +3142,7 @@ void DrawIntermissionStats() { //gsh // iphoneDrawPic( 0, 0, 480, 320, "iphone/intermission_256.tga" ); - iphoneDrawPic( 0, 0, 480, 320, "iphone/intermission.tga" ); + iphoneDrawPicRect( MakeScaledRectFloat( 0.0f, 0.0f, 480.0f, 320.0f ), "iphone/intermission.tga" ); // episode //if (currentMap.episode < 10)//6) //gsh added the check for SOD @@ -2889,41 +3184,49 @@ void DrawIntermissionStats() { // iphoneDrawPic( 0, 0, 384, 48, str ); // iphoneDrawPic( -104, 0, 480, 48, str ); //gsh - iphoneDrawPic( 0, 0, 480, 48, str ); //gsh + iphoneDrawPicRect( MakeScaledRectFloat( 0.0f, 0.0f, 480.0f, 48.0f), str ); //gsh // level // iphoneDrawNumber( 430, 0, currentMap.map + 1, 48, 48 ); // iphoneDrawNumber( 430-48, 50, currentMap.map + 1, 48, 48 ); //gsh //display the appropriate mission number + float missionWidth = 48.0f; + float missionHeight = 48.0f; + + float missionX = 430.0f - missionWidth; + float missionY = 50.0f; + + ScalePositionAndSize( &missionX, &missionY, &missionWidth, &missionHeight ); + if (currentMap.episode < 6) - iphoneDrawNumber( 430-48, 50, currentMap.map + 1, 48, 48 ); + iphoneDrawNumber( missionX, missionY, currentMap.map + 1, missionWidth, missionHeight ); else if (currentMap.episode < 10) { int currentLevel = currentMap.episode * 10 + currentMap.map; switch (currentLevel) { case 60: case 61: case 62: case 63: case 64: - iphoneDrawNumber( 430-48, 50, currentLevel - 60 + 1, 48, 48 ); + iphoneDrawNumber( missionX, missionY, currentLevel - 60 + 1, missionWidth, missionHeight ); break; case 78: - iphoneDrawNumber( 430-48, 50, 6, 48, 48 ); + iphoneDrawNumber( missionX, missionY, 6, 48, 48 ); break; case 65: case 66: case 67: case 68: case 69: - iphoneDrawNumber( 430-48, 50, currentLevel - 65 + 1, 48, 48 ); + iphoneDrawNumber( missionX, missionY, currentLevel - 65 + 1, missionWidth, missionHeight ); break; case 79: - iphoneDrawNumber( 430-48, 50, 6, 48, 48 ); + iphoneDrawNumber( missionX, missionY, 6, 48, 48 ); break; case 70: case 71: case 72: case 73: case 74: case 75: - iphoneDrawNumber( 430-48, 50, currentLevel - 70 + 1, 48, 48 ); + iphoneDrawNumber( missionX, missionY, currentLevel - 70 + 1, missionWidth, missionHeight ); break; case 76: - iphoneDrawNumber( 430-48, 50, 1, 48, 48 ); + iphoneDrawNumber( missionX, missionY, 1, missionWidth, missionHeight ); break; case 77: - iphoneDrawNumber( 430-48, 50, 2, 48, 48 ); + iphoneDrawNumber( missionX, missionY, 2, missionWidth, missionHeight ); break; case 80: - iphoneDrawNumber( 430-48, 50, 3, 48, 48 ); + iphoneDrawNumber( missionX, missionY, 3, missionWidth, missionHeight ); break; default: sprintf( str, " "); @@ -2931,15 +3234,16 @@ void DrawIntermissionStats() { } } else - iphoneDrawNumber( 430-48, 50, currentMap.map + 1, 48, 48 ); + iphoneDrawNumber( missionX, missionY, currentMap.map + 1, missionWidth, missionHeight ); // par / time - int offset = 50; + float offset = 50.0f; DrawTime( 51, 63+offset, levelstate.fpartime * 60 ); // fpartime is in minutes DrawTime( 285, 63+offset, levelstate.time / 60 ); // levelstate.time is in tics if ( levelstate.time/60 <= levelstate.fpartime * 60 ) { - iphoneDrawPic( 480 - 40, 63+offset, 32, 32, "iphone/partime.tga" ); + iphoneDrawPicRect( MakeScaledRectFloat( 480.0f - 40.0f, 63.0f+offset, 32.0f, 32.0f ), + "iphone/partime.tga" ); } // ratios @@ -2972,7 +3276,7 @@ void iphoneIntermission() { //---------------------- // tap for next level //---------------------- - if ( !TouchReleased( 0, 0, 480, 320 ) ) { + if ( !TouchReleased( 0, 0, viddef.width, viddef.height ) ) { return; } @@ -3011,47 +3315,47 @@ void iphoneIntermission() { { int currentLevel = currentMap.episode * 10 + currentMap.map; -#ifdef LITE - switch ( currentLevel ) { - case 2: - // go back to the episode select screen - menuState = IPM_VICTORY; - Sound_StartBGTrack( "music/URAHERO.ogg", "music/URAHERO.ogg" ); - return; - default: nextLevel = currentLevel + 1; break; - } -#else - if( Player.playstate == ex_secretlevel ) { - switch( currentLevel ) { - case 0: nextLevel = 9; break; - case 10: nextLevel = 19; break; - case 26: nextLevel = 29; break; - case 32: nextLevel = 39; break; - case 44: nextLevel = 49; break; - case 52: nextLevel = 59; break; - } - } else { + if ( SysIPhoneGetContentVersion() == CONTENT_LITE ) { switch ( currentLevel ) { - case 8: - case 18: - case 28: - case 38: - case 48: - case 58: + case 2: // go back to the episode select screen menuState = IPM_VICTORY; Sound_StartBGTrack( "music/URAHERO.ogg", "music/URAHERO.ogg" ); return; - case 9: nextLevel = 1; break; - case 19: nextLevel = 11; break; - case 29: nextLevel = 27; break; - case 39: nextLevel = 33; break; - case 49: nextLevel = 44; break; - case 59: nextLevel = 53; break; default: nextLevel = currentLevel + 1; break; + } + } else { // Content is Platinum + if( Player.playstate == ex_secretlevel ) { + switch( currentLevel ) { + case 0: nextLevel = 9; break; + case 10: nextLevel = 19; break; + case 26: nextLevel = 29; break; + case 32: nextLevel = 39; break; + case 44: nextLevel = 49; break; + case 52: nextLevel = 59; break; + } + } else { + switch ( currentLevel ) { + case 8: + case 18: + case 28: + case 38: + case 48: + case 58: + // go back to the episode select screen + menuState = IPM_VICTORY; + Sound_StartBGTrack( "music/URAHERO.ogg", "music/URAHERO.ogg" ); + return; + case 9: nextLevel = 1; break; + case 19: nextLevel = 11; break; + case 29: nextLevel = 27; break; + case 39: nextLevel = 33; break; + case 49: nextLevel = 44; break; + case 59: nextLevel = 53; break; + default: nextLevel = currentLevel + 1; break; + } } } -#endif } else //they just defeated a custom map... gsh { @@ -3072,11 +3376,13 @@ void iphoneIntermission() { ================== */ void iphoneVictory() { - iphoneDrawPic( 0, 0, 480, 320, "iphone/victory_256.tga" ); - if ( !TouchReleased( 0, 0, 480, 320 ) ) { + iphoneDrawPicRect( MakeScaledRectFloat( 0.0f, 0.0f, 480.0f, 320.0f ), + "iphone/victory_256.tga" ); + if ( !TouchReleased( 0, 0, viddef.width, viddef.height ) ) { return; } menuState = IPM_EPISODE; + iphoneStartMainMenu(); //gsh menuState = IPM_MAPSELECTOR; } @@ -3225,9 +3531,11 @@ void iphoneOpenAutomap() { } void iphoneAutomap() { + int halfWidth = viddef.width / 2; + int halfHeight = viddef.height / 2; //draw the new background... gsh - iphoneDrawPic(0, 0, 480, 320, "iphone/map_background.tga"); + iphoneDrawPicRect( MakeScaledRectFloat( 0, 0, 480, 320 ), "iphone/map_background.tga"); mapTile_t *mt; @@ -3333,8 +3641,8 @@ void iphoneAutomap() { zoom = 1; //need to translate tap/screen coordinate to map coordinate - int Xrelative2screenorigin = tapX - 240; - int Yrelative2screenorigin = 160 - tapY; + int Xrelative2screenorigin = tapX - halfWidth; + int Yrelative2screenorigin = halfHeight - tapY; float scaledX = Xrelative2screenorigin / scale; float scaledY = Yrelative2screenorigin / scale; float camSpaceX = scaledX + mapOrigin[0]; @@ -3391,14 +3699,13 @@ void iphoneAutomap() { Cvar_SetValue( mapScale->name, scale ); } - - + // set up matrix for drawing in tile units pfglMatrixMode( GL_PROJECTION ); pfglLoadIdentity(); iphoneRotateForLandscape(); - pfglOrtho( mapOrigin[0]-240.0 / scale, mapOrigin[0]+240.0 / scale, - mapOrigin[1]-160.0 / scale, mapOrigin[1]+160.0 / scale, -99999, 99999 ); + pfglOrtho( mapOrigin[0]-halfWidth / scale, mapOrigin[0]+halfWidth / scale, + mapOrigin[1]-halfHeight / scale, mapOrigin[1]+halfHeight / scale, -99999, 99999 ); mt = mapTiles; texnum = 99999; @@ -3458,14 +3765,14 @@ void iphoneAutomap() { pfglMatrixMode( GL_PROJECTION ); pfglLoadIdentity(); iphoneRotateForLandscape(); - pfglOrtho( 0, 480, 320, 0, -99999, 99999 ); + pfglOrtho( 0, viddef.width, viddef.height, 0, -99999, 99999 ); if ( BackButton() ) { menuState = IPM_GAME; } // stats button for stats display //if ( iphoneDrawPicWithTouch( 64, 0, 64, 36, "iphone/stats.tga" ) ) { - if ( iphoneDrawPicWithTouch( 64, 0, 120, 36, "iphone/stats_large.tga" ) ) { + if ( iphoneDrawPicRectWithTouch( MakeScaledRectFloat( 64.0f, 0.0f, 120.0f, 36.0f ), "iphone/stats_large.tga" ) ) { menuState = IPM_STATS; } //gsh @@ -3518,7 +3825,7 @@ void iphoneDownloadSpearProgressBar() y += 17*scale; //draw "Spear of Destiny" at the top - iphoneDrawPic(90, 20, 256, 128, "iphone/spear_logo.tga"); + //iphoneDrawPic(90, 20, 256, 128, "iphone/spear_logo.tga"); //draw the progress bar iphoneDrawPic( 40, 150, 400, barHeight, "iphone/menu_bar.tga" ); @@ -3529,11 +3836,14 @@ void iphoneDownloadSpearProgressBar() } #endif +char urlbuffer[1024]; + +#if 0 + //========================== // iphoneDownloadMenu //gsh //========================== -char urlbuffer[1024]; void iphoneDownloadMenu() { char str[80]; @@ -3541,7 +3851,7 @@ void iphoneDownloadMenu() int barHeight = 30; //draw the background - iphoneDrawPic(0, 0, 480, 320, "iphone/download_background.tga"); + //iphoneDrawPic(0, 0, 480, 320, "iphone/download_background.tga"); //draw the url iphoneCenterText(240, 120, urlbuffer); @@ -3572,6 +3882,8 @@ void iphoneDownloadMenu() iphoneDrawPic(pos, 150+34/2-22/2, 60, 22, "iphone/download_bullet.tga"); } +#endif + /* //========================================== // iphoneUpdateTriviaDrags() @@ -3584,21 +3896,21 @@ void iphoneUpdateTriviaAndInstructionsDrags(int numEnteries, int x, int y, int w //Update drag/touch info // int x = 0; // int w = 480;// - skillSides - 64; - /* + if (TouchDown(x, y, w, h)) { if (!numPrevTouches) prevTouches[0][0] = touches[0][0]; else if (numTouches == 1) *dragVelocity = touches[0][0] - prevTouches[0][0]; - }* + } //update the drags *dragPosition += *dragVelocity; - /* + //int rightBoundary = 240 - 2*width;//480/2 - (numPresets*width/2 + spacing); if (*dragPosition < -(numTrivia-1)*480-10)//270-10)//(numPresets*(width+spacing))/2 ) *dragPosition = -(numTrivia-1)*480-10;//270-10;//(numPresets*(width+spacing))/2; @@ -3609,7 +3921,7 @@ void iphoneUpdateTriviaAndInstructionsDrags(int numEnteries, int x, int y, int w *dragVelocity = 2; else if (*dragPosition > x) *dragVelocity = -2; - * + //retard the velocity if (*dragVelocity > 0) @@ -3673,8 +3985,8 @@ void iphoneTriviaMenu() //get number of trivia int numTrivia = sizeof(triviaText)/(sizeof(char) * 1024); - iphoneDrawPic(0, 0, 480, 320, "iphone/submenus_background_image.tga"); - iphoneDrawPic(240-108*9/10, 0, 217*9/10, 50*9/10, "iphone/header_trivia.tga"); + iphoneDrawPicRect( MakeScaledRectFloat( 0.0f, 0.0f, 480.0f, 320.0f ), "iphone/submenus_background_image.tga"); + iphoneDrawPicRect( MakeScaledRectFloat( 240.0f-108*9/10.0f, 0.0f, 217.0f*9/10.0f, 50.0f*9/10.0f ), "iphone/header_trivia.tga"); if (BackButton()) { menuState = IPM_MORE; @@ -3699,7 +4011,7 @@ void iphoneTriviaMenu() //if (revLand->value) // y = -20; - if (iphoneDrawPicWithTouch(9, y+60+16, 64, 64, "iphone/button_left.tga") ){//&& !dragVelocity) { + if (iphoneDrawPicRectWithTouch( MakeScaledRectFloat( 9.0f, y+60.0f+16, 64.0f, 64.0f ), "iphone/button_left.tga") ){//&& !dragVelocity) { dragVelocity += -25;//-18; if (dragVelocity < -50) @@ -3708,7 +4020,7 @@ void iphoneTriviaMenu() if (currentLocation >= numTrivia) currentLocation = 0;//numTrivia-1; */ } - if (iphoneDrawPicWithTouch(411, y+60+16, 64, 64, "iphone/button_right.tga") ){//&& !dragVelocity) { + if (iphoneDrawPicRectWithTouch( MakeScaledRectFloaT( 411.0f, y+60.0f+16, 64.0f, 64.0f ), "iphone/button_right.tga") ){//&& !dragVelocity) { dragVelocity += 25;//18; if (dragVelocity > 50) dragVelocity = 50; @@ -3807,6 +4119,7 @@ void iphoneTriviaMenu() } #endif +#if 0 //This is a different implementation of the one above //gsh void iphoneTriviaMenu() @@ -3835,11 +4148,12 @@ void iphoneTriviaMenu() //get number of trivia int numTrivia = sizeof(triviaText)/(sizeof(char) * 1024); - iphoneDrawPic(0, 0, 480, 320, "iphone/submenus_background_image.tga"); - iphoneDrawPic(240-108*9/10, 0, 217*9/10, 50*9/10, "iphone/header_trivia.tga"); + iphoneDrawPicRect( MakeScaledRectFloat( 0.0f, 0.0f, 480.0f, 320.0f ), "iphone/submenus_background_image.tga"); + iphoneDrawPicRect( MakeScaledRectFloat( 240.0f-108.0f*9/10.0f, 0.0f, 217.0f*9/10.0f, 50.0f*9/10.0f ), "iphone/header_trivia.tga"); if (BackButton()) { menuState = IPM_MORE; + iphoneStartMainMenu(); return; } @@ -3862,7 +4176,7 @@ void iphoneTriviaMenu() static int moveRight = 0; //move right or left, depending on button pushed - if (iphoneDrawPicWithTouch(9, y+60+16, 64, 64, "iphone/button_left.tga") ) { + if (iphoneDrawPicRectWithTouch( MakeScaledRectFloat( 9.0f, y+60.0f+16.0f, 64.0f, 64.0f ), "iphone/button_left.tga") ) { moveRight = 0; ++currentTrivia; if (currentTrivia > numTrivia-1) { @@ -3870,7 +4184,7 @@ void iphoneTriviaMenu() } } - if (iphoneDrawPicWithTouch(411, y+60+16, 64, 64, "iphone/button_right.tga") ) { + if (iphoneDrawPicRectWithTouch( MakeScaledRectFloat( 411.0f, y+60.0f+16.0f, 64.0f, 64.0f ), "iphone/button_right.tga") ) { moveRight = 1; --currentTrivia; if (currentTrivia < 0) { @@ -3949,8 +4263,8 @@ void iphoneTriviaMenu() // int x = 0; - y = 50; - int w = 305; + // y = 50; + int w = 305 * screenScale; int h = 250; colour4_t color = { 0, 0, 0, 255 }; colour4_t colorWhite = { 255, 255, 255, 255 }; @@ -3963,16 +4277,27 @@ void iphoneTriviaMenu() if (Position < lowerLimit )//startPosition - numTrivia*480) Position = startPosition;// - (width+spacing); - x = Position + (width+spacing)*i; + float xFloat = Position + (width+spacing)*i; + float yFloat = 50; - if (x > 480 || x + width < 0) + if (xFloat > 480 || xFloat + width < 0) continue; - DrawBlendInBox( x-2, y-2, w+4, h+4, colorWhite, 71, 410-70); - DrawBlendInBox( x-1, y-1, w+2, h+2, colorGrey, 71, 410-70); - DrawBlendInBox( x, y, w, h, color, 71, 410-70); + ScalePosition( &xFloat, &yFloat ); + + x = (int)xFloat; + y = (int)yFloat; + + int boxWidth = (410-70) * screenScale; + + DrawBlendInBox( x-2, y-2, w+4, h+4, colorWhite, 71 * screenScale, boxWidth); + DrawBlendInBox( x-1, y-1, w+2, h+2, colorGrey, 71 * screenScale, boxWidth); + DrawBlendInBox( x, y, w, h, color, 71 * screenScale, boxWidth); //iphoneDrawTextInBox(RectMake(x, y+16, 16, 16), 410-70-32-16, triviaText[i], RectMake(71, 0, 320, 410-70)); - iphoneDrawArialTextInBox(RectMake(x, y+16, 16, 16), 410-70-32-16, triviaText[i], RectMake(71, 0, 320, 410-70)); + rect_t boxRect = RectMake(71, 0, 320, 410-70); + ScaleRect( &boxRect ); + + iphoneDrawArialTextInBox(RectMake(x, y+16, 16, 16), (410-70-32-16) * screenScale, triviaText[i], boxRect ); } } @@ -3984,20 +4309,21 @@ void iphoneMoreMenu() { wasDLInstructionsCalledFromEpisodeMenu = 0; - iphoneDrawPic(0, 0, 480, 320, "iphone/submenus_background_image.tga"); - iphoneDrawPic(240-108*9/10, 0, 217*9/10, 50*9/10, "iphone/header_more.tga"); + iphoneDrawPicRect( MakeScaledRectFloat( 0.0f, 0.0f, 480.0f, 320.0f ), "iphone/submenus_background_image.tga"); + iphoneDrawPicRect( MakeScaledRectFloat( 240.0f-108*9/10.0f, 0.0f, 217.0f*9/10.0f, 50.0f*9/10.0f ), "iphone/header_more.tga"); float scale = 40 / 32.0; if (BackButton()) { menuState = IPM_MAIN; + iphoneStartMainMenu(); } - if (iphoneDrawPicWithTouch(240-64*scale, 120, 128*scale, 32*scale, "iphone/button_trivia.tga")) { + if (iphoneDrawPicRectWithTouch( MakeScaledRectFloat( 240-64*scale, 120, 128*scale, 32*scale ), "iphone/button_trivia.tga")) { menuState = IPM_TRIVIA; } - if (iphoneDrawPicWithTouch(240-64*scale, 170, 128*scale, 32*scale, "iphone/button_downloads.tga")) { + if (iphoneDrawPicRectWithTouch( MakeScaledRectFloat( 240-64*scale, 170, 128*scale, 32*scale ), "iphone/button_downloads.tga")) { menuState = IPM_DOWNLOADINSTRUCTIONS; } } @@ -4008,8 +4334,8 @@ void iphoneMoreMenu() //----------------------------------- void iphoneDownloadInstructionsMenu() { - iphoneDrawPic(0, 0, 480, 320, "iphone/submenus_background_image.tga"); - iphoneDrawPic(240-108*9/10, 0, 217*9/10, 50*9/10, "iphone/header_downloads.tga"); + iphoneDrawPicRect( MakeScaledRectFloat( 0.0f, 0.0f, 480.0f, 320.0f ), "iphone/submenus_background_image.tga"); + iphoneDrawPicRect( MakeScaledRectFloat( 240.0f-108*9/10.0f, 0.0f, 217.0f*9/10.0f, 50.0f*9/10.0f ), "iphone/header_downloads.tga"); if (BackButton()) { @@ -4026,7 +4352,7 @@ void iphoneDownloadInstructionsMenu() } /* if ( iphoneDrawPicWithTouch( 64, 0, 64, 36, "iphone/button_web.tga" ) ) { - wasCalledFromDownloadInstructionsMenu = 1; + currentYesNoBox = ESNO_DOWNLOAD_INSTRUCTIONS; iphoneYesNoBox("Website", "This will navigate you to idsoftware.com/iphone/wolf3dInstructions.html. Continue?"); }*/ @@ -4035,14 +4361,19 @@ void iphoneDownloadInstructionsMenu() " For details, go to:\n\nhttp://www.idsoftware.com/wolfenstein\n" "-3d-classic-platinum/mapinstructions/"; - int x = 20; - int y = 100; - int w = 480-40; - int h = 150; + float x = 20; + float y = 100; + float w = 480-40; + float h = 150; colour4_t color = { 0, 0, 0, 255 }; colour4_t colorGrey = { 100, 100, 100, 255 }; colour4_t colorWhite = { 255, 255, 255, 255 }; + x = ( viddef.width * 0.5f ) - ( w / 2.0f ); + float contentHeight = REFERENCE_HEIGHT - 45.0f; + y = ( contentHeight * 0.5f ) - ( h / 2.0f ); + + ScalePosition( NULL, &y ); //draw a background, behind the text, with a white border R_Draw_Blend( x-2, y-2, w+4, h+4, colorWhite); @@ -4050,12 +4381,15 @@ void iphoneDownloadInstructionsMenu() R_Draw_Blend( x, y, w, h, color); //draw arial text - iphoneDrawArialTextInBox(RectMake(x, y+16, 16, 16), 400, instructions, RectMake(10, 0, 480-40, 320)); + rect_t boxRect = RectMake(10, 0, 480-40, 320); + ScaleRect( &boxRect ); + + iphoneDrawArialTextInBox(RectMake(x, y+16, 16, 16), 400, instructions, boxRect ); //check for touch events on the text itself int r = TouchReleased( x, y, w, h ); if ( r ) { - wasCalledFromDownloadInstructionsMenu = 1; + currentYesNoBox = YESNO_DOWNLOAD_INSTRUCTIONS; iphoneYesNoBox("Website", "This will navigate you to idsoftware.com/wolfenstein-3d-classic-platinum/mapinstructions/ Continue?"); } if ( TouchDown( x, y, w, h ) ) { @@ -4064,7 +4398,7 @@ void iphoneDownloadInstructionsMenu() } } - +#endif //gsh extern void iphoneSelectMapMenu(); @@ -4074,29 +4408,39 @@ extern void iphoneStoreKit(); void iphoneDrawMenus() { // iphoneDrawPic( 0, 0, 480, 320, "iphone/background_main_sepia.tga" ); - iphoneDrawPic( 0, 0, 480, 320, "iphone/background_main_hued.tga" ); //gsh + //iphoneDrawPicRect( MakeScaledRectFloat( 0, 0, 480, 320 ), "iphone/background_main_hued.tga" ); //gsh switch ( menuState ) { case IPM_MAIN: iphoneMainMenu(); break; - case IPM_SKILL: iphoneSkillMenu(); break; - case IPM_EPISODE: iphoneScrollingEpisodeMenu(); break;//gsh //iphoneEpisodeMenu(); break; - case IPM_MAPS: iphoneScrollingMapMenu(); break; //gsh iphoneMapMenu(); break; + case IPM_SKILL: /* iphoneSkillMenu(); */ break; + case IPM_EPISODE: /* iphoneScrollingEpisodeMenu(); */ break;//gsh //iphoneEpisodeMenu(); break; + case IPM_MAPS: /* iphoneScrollingMapMenu(); */ break; //gsh iphoneMapMenu(); break; // case IPM_MAPSELECTOR: iphoneSelectMapMenu(); break; //gsh - case IPM_CONTROLS: iphoneControlMenu(); break; + case IPM_CONTROLS: /* iphoneControlMenu(); */ break; case IPM_INTERMISSION: iphoneIntermission(); break; case IPM_VICTORY: iphoneVictory(); break; case IPM_AUTOMAP: iphoneAutomap(); break; case IPM_STATS: iphoneStats(); break; case IPM_HUDEDIT: iphoneHudEditFrame(); break;//gsh HudEditFrame(); break; - case IPM_DOWNLOADPROGRESS: iphoneDownloadMenu(); break; //gsh + case IPM_DOWNLOADPROGRESS: /* iphoneDownloadMenu(); */ break; //gsh #if SPEARSTOREKIT case IPM_STOREKIT: iphoneStoreKit(); break; //gsh #endif // case IPM_LOADING: iphoneLoadingMenu(); //gsh - case IPM_TRIVIA: iphoneTriviaMenu(); break;//gsh - case IPM_MORE: iphoneMoreMenu(); break;//gsh - case IPM_DOWNLOADINSTRUCTIONS: iphoneDownloadInstructionsMenu(); break; //gsh + case IPM_TRIVIA: /* iphoneTriviaMenu(); */ break;//gsh + case IPM_MORE: /* iphoneMoreMenu(); */ break;//gsh + case IPM_DOWNLOADINSTRUCTIONS: /* iphoneDownloadInstructionsMenu(); */ break; //gsh + default: break; } + + // Draw letterbox bars. Some of the items in the level select menu spill beyond the scaled + // viewport, this is a quick way to hide them. + float contentHeight = REFERENCE_HEIGHT * screenScale; + float boxWidth = viddef.width; + float boxHeight = ( viddef.height - contentHeight ) / 2.0f; + R_DrawBox( 0, 0, boxWidth, boxHeight, 0xFF000000 ); + // The lower box is adjusted to cover rows of pixels lost to floating-point truncation. + R_DrawBox( 0, boxHeight + contentHeight - 1, boxWidth, boxHeight + 2, 0xFF000000 ); } diff --git a/wolf3d/code/iphone/iphone_qgl.h b/wolf3d/code/iphone/iphone_qgl.h index 793ec74..cb15d85 100644 --- a/wolf3d/code/iphone/iphone_qgl.h +++ b/wolf3d/code/iphone/iphone_qgl.h @@ -3,6 +3,8 @@ #ifndef _IPHONE_QGL_H_ #define _IPHONE_QGL_H_ +//#define QGL_CHECK_GL_ERRORS + #ifdef QGL_LOG_GL_CALLS extern unsigned int QGLLogGLCalls; #ifdef __cplusplus @@ -1177,8 +1179,8 @@ static inline GLenum qglGetError(void) #endif returnValue = glGetError(); #if !defined(NDEBUG) && defined(QGL_CHECK_GL_ERRORS) - if (!QGLBeginStarted) - QGLCheckError("glGetError"); + //if (!QGLBeginStarted) + // QGLCheckError("glGetError"); #endif return returnValue; } @@ -2041,8 +2043,7 @@ static inline void qglViewport(GLint x, GLint y, GLsizei width, GLsizei height) fprintf(QGLDebugFile(), "glViewport(x=%ld, y=%ld, width=%ld, height=%ld)\n", x, y, width, height); #endif //extern glconfig_t glConfig; - int vidHeight = 320; - glViewport(vidHeight - y - height, x, height, width); + glViewport(x, y, width, height); #if !defined(NDEBUG) && defined(QGL_CHECK_GL_ERRORS) if (!QGLBeginStarted) QGLCheckError("glViewport"); @@ -2231,6 +2232,8 @@ static inline void qglDrawTexfvOES(const GLfloat *coords) #endif } +/* + // Prevent calls to the 'normal' GL functions #define glAlphaFunc CALL_THE_QGL_VERSION_OF_glAlphaFunc #define glClearColor CALL_THE_QGL_VERSION_OF_glClearColor @@ -2388,5 +2391,5 @@ static inline void qglDrawTexfvOES(const GLfloat *coords) #define glDrawTexxvOES CALL_THE_QGL_VERSION_OF_glDrawTexxvOES #define glDrawTexfOES CALL_THE_QGL_VERSION_OF_glDrawTexfOES #define glDrawTexfvOES CALL_THE_QGL_VERSION_OF_glDrawTexfvOES - +*/ #endif // _IPHONE_QGL_H_ diff --git a/wolf3d/code/iphone/iphone_store.h b/wolf3d/code/iphone/iphone_store.h new file mode 100644 index 0000000..d848ef0 --- /dev/null +++ b/wolf3d/code/iphone/iphone_store.h @@ -0,0 +1,69 @@ +/* + + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#include + +/* +=============================================== +Expose a C interface to the In App Purchase functionality. + +This interface only supports non-consumable products, such as one-time purchases of extra levels +or expansion packs. It uses NSUserDefaults internally to keep track of purchases the user has +made. This is Apple's recommended method, and it means that purchases will automatically be +backed up with the app in iTunes, should the user choose to do so. Each product is a boolean +value stored in NSUserDefaults, with a key equal to the product ID string specified in iTunes +connect. This is the same string that needs to passed to InAppPurchaseStartPurchase and similar +functions. + +Usage: + +InAppPurchaseInit needs to be called during app launch to complete any transactions that +were not finished last time. + +Call InAppPurchaseStartPurchase with the product ID string from iTunes connect to begin the +purchase process. This will launch Apple's interface for logging in with an Apple ID and +comfirming the purchase. + +Call InAppPurchaseHasPurchased to see if the user has purchased a specific product. The string +parameter is the same product ID used in iTunes Connect and InAppPurchaseStartPurchase. + +=============================================== +*/ + +void InAppPurchaseInit( void ); +void InAppPurchaseShutdown( void ); +void InAppPurchaseStartPurchase( const char * productIdentifier ); + +typedef enum { + IAP_SUCCESS, + IAP_FAILURE +} InAppPurchaseResult; + +typedef void (*InAppPurchaseCallbackPtr)( InAppPurchaseResult result ); + +void InAppPurchaseSetCallback( InAppPurchaseCallbackPtr function ); + +bool InAppPurchaseIsInProgress( void ); + +bool InAppPurchaseHasPurchased( const char * productIdentifier ); + diff --git a/wolf3d/code/iphone/iphone_store.m b/wolf3d/code/iphone/iphone_store.m new file mode 100644 index 0000000..b771539 --- /dev/null +++ b/wolf3d/code/iphone/iphone_store.m @@ -0,0 +1,350 @@ +/* + + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import + +#import +#import +#import + +#import + +#import "iphone_store.h" + + +@interface MyStoreObserver : NSObject { + +} + +// SKProductsRequestDelegate methods +- (void)productsRequest: (SKProductsRequest *)request didReceiveResponse: (SKProductsResponse *)response; + +// SKPaymentTransactionObserver methods +- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions; +- (void)paymentQueue:(SKPaymentQueue *)queue removedTransactions:(NSArray *)transactions; + +- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error; +- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue; + +// MyStoreObserver methods +- (void)completeTransaction:(SKPaymentTransaction *)transaction; +- (void)failedTransaction:(SKPaymentTransaction *)transaction; +- (void)restoreTransaction:(SKPaymentTransaction *)transaction; +- (void)finalizeTransaction:(SKPaymentTransaction *)transaction; + +@end + +// The single instance of the store observer. This is created in InAppPurchaseInit and released +// in InAppPurchaseShutdown. +static MyStoreObserver *storeObserver; + +// Flag to indicate whether a purchase is in progress or not. This is set to true in +// InAppPurchaseStartPurchase and false when the request either succeeds or fails. +static bool isInProgress = false; + +static InAppPurchaseCallbackPtr clientCallback; + +@implementation MyStoreObserver + +/* +======================== +productsRequest:didReceiveResponse + +Called by the system when the application gets product information about an In-App Purchase. +======================== +*/ +- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response +{ + NSArray *myProduct = response.products; + + // For now, immediately request payment for any items the user has requested. + for (SKProduct *product in myProduct) + { + SKPayment *payment = [SKPayment paymentWithProductIdentifier:[product productIdentifier]]; + [[SKPaymentQueue defaultQueue] addPayment:payment]; + } + + // We should handle the case of an empty array, this seems to occur if we send a request + // with a nonexistant product ID, but there may be other cases. + // TODO: Need a timeout to be even more robust. + if ( [myProduct count] == 0 ) { + if ( clientCallback ) { + clientCallback( IAP_FAILURE ); + } + } + + [request autorelease]; +} + +/* +======================== +paymentQueue:updatedTransactions + +Called by the system when purchase requests are updated. +======================== +*/ +- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions +{ + for (SKPaymentTransaction *transaction in transactions) + { + switch (transaction.transactionState) + { + case SKPaymentTransactionStatePurchased: + [self completeTransaction:transaction]; + break; + case SKPaymentTransactionStateFailed: + [self failedTransaction:transaction]; + break; + case SKPaymentTransactionStateRestored: + [self restoreTransaction:transaction]; + default: + break; + } + } +} + +- (void)paymentQueue:(SKPaymentQueue *)queue removedTransactions:(NSArray *)transactions +{ + +} + +- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error +{ + +} + + +- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue +{ + +} + +/* +======================== +completeTransaction + +Called by updatedTransactions when a request is completed. +======================== +*/ +- (void)completeTransaction:(SKPaymentTransaction *)transaction +{ + [self finalizeTransaction:transaction]; +} + +/* +======================== +failedTransaction + +Called by updatedTransactions when a request fails. +======================== +*/ +- (void)failedTransaction:(SKPaymentTransaction *)transaction +{ + if (transaction.error.code != SKErrorPaymentCancelled) + { + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"In-App Purchase error" + message:[transaction.error localizedDescription] + delegate:nil + cancelButtonTitle:@"OK" + otherButtonTitles:nil]; + + [alert show]; + [alert release]; + } + [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; + + isInProgress = false; + + if ( clientCallback ) { + clientCallback( IAP_FAILURE ); + } +} + +/* +======================== +restoreTransaction + +Called by updatedTransactions when a request is restored. This can behave identically to +completeTransaction. +======================== +*/ +- (void)restoreTransaction:(SKPaymentTransaction *)transaction +{ + [self finalizeTransaction:transaction.originalTransaction]; +} + +/* +======================== +finalizeTransaction + +This method actually delivers the purchased item to the user. Currently, this means setting +a key in NSUserDefaults equal to the product ID to TRUE. +======================== +*/ +- (void)finalizeTransaction:(SKPaymentTransaction *)transaction +{ + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + + NSString *productID = transaction.payment.productIdentifier; + + [defaults setBool:TRUE forKey:productID]; + + [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; + + isInProgress = false; + + if ( clientCallback ) { + clientCallback( IAP_SUCCESS ); + } +} + +@end + + + + + +/* +======================== +InAppPurchaseInit + +Creates the instance of the payment observer and adds it to the payment queue. This should be +called at application launch. +======================== +*/ +void InAppPurchaseInit(void) { + if ( !storeObserver ) { + storeObserver = [[MyStoreObserver alloc] init]; + + // Add the observer here in case purchase requests were interrupted last time. + [[SKPaymentQueue defaultQueue] addTransactionObserver:storeObserver]; + } + +} + +void InAppPurchaseShutdown(void) { + [storeObserver release]; + storeObserver = nil; +} + +/* +======================== +InAppPurchaseStartPurchase + +If payments are enabled, starts an In-App Purchase transaction for the given product identifier. +If payments are not enabled, reminds the user that they can be enabled. +If a request is currently in progress, nothing happens, as only one request at a time is +allowed. +======================== +*/ +void InAppPurchaseStartPurchase( const char * productIdentifier ) { + // Only allow one request at a time. + if ( isInProgress ) { + return; + } + + if ( [SKPaymentQueue canMakePayments] ) { + // Start transaction. + if ( storeObserver == nil ) { + printf( "In-App Purchase system not initialized. Can't purchase anything!\n" ); + return; + } + + isInProgress = true; + + // convert the C string to an NSString. + NSString *productKey = [[NSString alloc] initWithCString:productIdentifier + encoding:NSASCIIStringEncoding]; + + SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject: productKey]]; + + // The set retains the string, so we can release it now. + [productKey release]; + + request.delegate = storeObserver; + [request start]; + } else { + // User has disabled In-App purchases in settings. Kindly remind him that he can + // enable purchases again. + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"In-App Purchases are disabled" + message:@"You can enable In-App purchases in your device's settings." + delegate:nil + cancelButtonTitle:@"OK" + otherButtonTitles:nil]; + + [alert show]; + [alert release]; + } + +} + +/* +======================== +InAppPurchaseHasPurchased + +Queries the standard NSUserDefaults object for a boolean key equal to the product identifier. +If this key is true, the user has purchased the product. If the key is false, the user has +not purchased the product. +======================== +*/ +bool InAppPurchaseHasPurchased( const char * productIdentifier ) { + // Convert the C string to an NSString for use with NSUserDefaults. + NSString *productKey = [[NSString alloc] initWithCString:productIdentifier + encoding:NSASCIIStringEncoding]; + + // Purchase records are stored in the standardUserDefaults, with a key equal to the product + // identifier. + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + BOOL hasProduct = [defaults boolForKey:productKey]; + + // This string was alloced above, but since it isn't needed anymore, it must be released. + [productKey release]; + + // Convert Objective-C BOOL type to standard C99 _Bool type. + return ( hasProduct )? true: false; +} + +/* +======================== +InAppPurchaseIsInProgress + +Returns true if an In-App Purchase request is currently pending. Only one request can be active +at a time. +======================== +*/ +bool InAppPurchaseIsInProgress( void ) { + return isInProgress; +} + +/* +======================== +InAppPurchaseSetCallback + +Sets a functino pointer to be called when the in-app purchase transaction in complete, either +successfully or unsuccessfully. +======================== +*/ +void InAppPurchaseSetCallback( InAppPurchaseCallbackPtr function ) { + clientCallback = function; +} + diff --git a/wolf3d/code/iphone/iphone_sys.m b/wolf3d/code/iphone/iphone_sys.m index 68d5186..22948c0 100644 --- a/wolf3d/code/iphone/iphone_sys.m +++ b/wolf3d/code/iphone/iphone_sys.m @@ -1,6 +1,9 @@ /* - Copyright (C) 2009 Id Software, Inc. + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -19,9 +22,13 @@ */ #include "../wolfiphone.h" +#include "iphone_store.h" + +#import "wolf3dAppDelegate.h" #import -//#import +#import +#import void interruptionListener( void *inUserData, UInt32 inInterruption) { @@ -45,7 +52,7 @@ void SysIPhoneInitAudioSession() { UInt32 audioCategory = kAudioSessionCategory_AmbientSound; status = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(audioCategory), &audioCategory); - UInt32 propOtherAudioIsPlaying = 'othr'; // kAudioSessionProperty_OtherAudioIsPlaying + AudioSessionPropertyID propOtherAudioIsPlaying = kAudioSessionProperty_OtherAudioIsPlaying; UInt32 size = sizeof( otherAudioIsPlaying ); AudioSessionGetProperty( propOtherAudioIsPlaying, &size, &otherAudioIsPlaying ); @@ -72,3 +79,276 @@ const char *SysIPhoneGetOSVersion() { return osVersion; } + +/* + ================== + SysIPhoneGetContentVersion + + Checks the NSUserDefaults and returns true if the user has purchased the Platinum edition. + ================== + */ +contentVersion_t SysIPhoneGetContentVersion(void) { +#ifndef LITE + return CONTENT_PLATINUM; +#else + + // For the "Lite" app, we must check the user defaults to see if the user has purchased + // the platinum edition. + + bool platinum = InAppPurchaseHasPurchased( PLATINUM_UPGRADE_STRING ); + + if ( platinum ) { + return CONTENT_PLATINUM; + } + + return CONTENT_LITE; + +#endif +} + +/* + ================== + SysIPhoneGetPathToMainBundleLength + + Fills in the string + ================== + */ +int SysIPhoneGetPathToMainBundleLength( void ) { + NSBundle *mainBundle = [NSBundle mainBundle]; + + NSString *path = [mainBundle bundlePath]; + + return [path length]; + +} + +/* + ================== + SysIPhoneGetPathToMainBundle + + Fills in the string outPath with the path to the main bundle. If the path is longer than + maxLength, it will be truncated. Call SysIPhoneGetPathToMainBundleLength to get the string + size needed without truncation. + ================== + */ +void SysIPhoneGetPathToMainBundle( char * outPath, int maxLength ) { + NSBundle *mainBundle = [NSBundle mainBundle]; + + NSString *path = [mainBundle bundlePath]; + + [path getCString:outPath maxLength:maxLength encoding:NSASCIIStringEncoding]; + +} + +/* + ================== + iphoneRotateForLandscape + + ================== + */ +void iphoneRotateForLandscape() { + switch ( deviceOrientation ) { + case ORIENTATION_LANDSCAPE_LEFT: + pfglRotatef( 90.0f, 0.0f, 0.0f, 1.0f ); + break; + default: + pfglRotatef( -90.0f, 0.0f, 0.0f, 1.0f ); + break; + } +} + +/* + ================== + iphoneTouchEvent + + ================== + */ +void iphoneTouchEvent( int _numTouches, int _touches[16] ) { + numTouches = _numTouches; + for ( int i = 0 ; i < numTouches ; i++ ) { + switch( deviceOrientation ) { + case ORIENTATION_LANDSCAPE_RIGHT: + touches[i][0] = _touches[i*2+1] * touchCoordinateScale; + touches[i][1] = ( (viddef.height / touchCoordinateScale ) - 1 - _touches[i*2+0]) * touchCoordinateScale; + break; + + default: + touches[i][0] = ( ( viddef.width / touchCoordinateScale ) - 1 - _touches[i*2+1]) * touchCoordinateScale; + touches[i][1] = _touches[i*2+0] * touchCoordinateScale; + break; + } + } +} + +/* + ================== + iphonePromptToBuyPlatinum + + ================== + */ +void iphonePromptToBuyPlatinum() { + currentYesNoBox = YESNO_BUY_PLATINUM; + iphoneYesNoBox( "Purchase Platinum", "This level is not available in " + "Wolfenstein 3D Lite. Would you like to upgrade to " + "Platinum?" ); +} + + + +/* + ================== + LoadPNG + + Uses the iPhone's Core Graphics library to easily load PNG files. + ================== + */ +void LoadPNG( const char *filename, W8 **pic, W16 *outWidth, W16 *outHeight, W16 *bytes ) { + CGImageRef spriteImage; + CGContextRef spriteContext; + + GLubyte *spriteData = NULL; + size_t width = 0; + size_t height = 0; + size_t bytesPerPixel = 0; + + // Get just the filename from the path passed in. + const char * lastSeparator = strrchr( filename, '/' ); + + const char * filenameOnly = filename; + + if ( lastSeparator ) { + filenameOnly = lastSeparator + 1; + } + + // Creates a Core Graphics image from an image file + spriteImage = [UIImage imageNamed:[NSString stringWithCString:filenameOnly encoding:NSASCIIStringEncoding]].CGImage; + // Get the width and height of the image + width = CGImageGetWidth(spriteImage); + height = CGImageGetHeight(spriteImage); + bytesPerPixel = CGImageGetBitsPerPixel(spriteImage) / 8; + + // Texture dimensions must be a power of 2. If you write an application that allows users to supply an image, + // you'll want to add code that checks the dimensions and takes appropriate action if they are not a power of 2. + + // HACK to fix alpha/non-alpha images. + // If an image has alpha, it will be 4 bytes per pixel. + // If an image doesn't have alpha, it will be 3 bytes per pixel. + CGImageAlphaInfo alpha = kCGImageAlphaPremultipliedLast; + size_t byteWidth = width * 4; + if ( bytesPerPixel == 4 ) { + alpha = kCGImageAlphaPremultipliedLast; + byteWidth = width * 4; + } + + if(spriteImage) { + // Allocated memory needed for the bitmap context + spriteData = (GLubyte *) MM_CALLOC(width * height * 4, sizeof(GLubyte)); + // Uses the bitmap creation function provided by the Core Graphics framework. + spriteContext = CGBitmapContextCreate(spriteData, width, height, + 8, + byteWidth, + CGImageGetColorSpace(spriteImage), + alpha); + + if ( spriteContext ) { + // After you create the context, you can draw the sprite image to the context. + CGContextDrawImage(spriteContext, CGRectMake(0.0, 0.0, (CGFloat)width, (CGFloat)height), spriteImage); + // You don't need the context at this point, so you need to release it to avoid memory leaks. + CGContextRelease(spriteContext); + + if ( outWidth ) { + *outWidth = width; + } + if ( outHeight ) { + *outHeight = height; + } + if ( pic ) { + *pic = spriteData; + } + if ( bytes ) { + *bytes = bytesPerPixel; + } + return; + } + } + + if ( outWidth ) { + *outWidth = 0; + } + if ( outHeight ) { + *outHeight = 0; + } + if ( pic ) { + *pic = NULL; + } + if ( bytes ) { + *bytes = 0; + } + return; +} + +/* + ================== + iphoneGetDeviceType + + Uses the iPhone's Core Graphics library to easily load PNG files. + ================== + */ +deviceType_t iphoneGetDeviceType(void) { + deviceType_t result = DEVICE_UNKNOWN; + + switch ( UI_USER_INTERFACE_IDIOM() ) { + case UIUserInterfaceIdiomPhone: + result = DEVICE_PHONE; + break; + + case UIUserInterfaceIdiomPad: + result = DEVICE_TABLET; + break; + + default: + break; + } + + return result; +} + +/* + ================== + iphoneInitMenuMusic + ================== + */ +void iphoneInitMenuMusic() { + + wolf3dAppDelegate * app = (wolf3dAppDelegate*)[[UIApplication sharedApplication] delegate]; + + [app initMenuMusicPlayer]; + +} + +/* + ================== + iphoneStartMenuMusic + ================== + */ +void iphoneStartMenuMusic() { + wolf3dAppDelegate * app = (wolf3dAppDelegate*)[[UIApplication sharedApplication] delegate]; + + [app startMenuMusic]; +} + + +/* + ================== + iphoneStopMenuMusic + ================== + */ + +void iphoneStopMenuMusic() { + wolf3dAppDelegate * app = (wolf3dAppDelegate*)[[UIApplication sharedApplication] delegate]; + + [app stopMenuMusic]; +} + + + diff --git a/wolf3d/code/iphone/iphone_wolf.h b/wolf3d/code/iphone/iphone_wolf.h index 06f0290..e54335d 100644 --- a/wolf3d/code/iphone/iphone_wolf.h +++ b/wolf3d/code/iphone/iphone_wolf.h @@ -1,6 +1,9 @@ /* - Copyright (C) 2009 Id Software, Inc. + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -18,12 +21,18 @@ */ +#include "video.h" +#include "texture_manager.h" +#include "vector.h" +#include "cvar.h" +#include "arch.h" + // define this to get only the first episode on selections, and the // automatic sell screen at the end of episode 1 //#define EPISODE_ONE_ONLY // this is the version number displayed on the menu screen -#define WOLF_IPHONE_VERSION 1.2//1.1 +#define WOLF_IPHONE_VERSION 2.1 extern viddef_t viddef; @@ -84,6 +93,13 @@ typedef struct { } rect_t; rect_t RectMake(int x, int y, int width, int height); +typedef struct { + float x; + float y; + float width; + float height; +} rectFloat_t; + extern currentMap_t currentMap; void iphoneStartMap( int episodeNum, int mapNum, int skillLevel ); @@ -130,15 +146,39 @@ extern cvar_t *cropSprites; extern cvar_t *blends; extern cvar_t *gunFrame; extern cvar_t *slowAI; -extern cvar_t *revLand; extern cvar_t *mapScale; extern cvar_t *hideControls; extern cvar_t *autoFire; +// The size of UI elements will be scaled by this value in order to support different +// resolutions, such as Retina displays and the iPad. +extern float screenScale; + // the native iPhone code should set the following each frame: extern int numTouches; extern int touches[5][2]; // [0] = x, [1] = y in landscape mode, raster order with y = 0 at top extern int isTouchMoving; //gsh + +// On Retina displays, touch coordinates are still reported at "low resolution". Since the game +// compares touch coordinates directly to the on-screen positions of buttons, we will need to +// scale the touches on Retina displays. +extern int touchCoordinateScale; + +// Store the device's contentScaleFactor ourselves. This is needed to support iOS +// versions < 4.0, as the UIView contentScaleFactor property did not exist before then. +// This should be 1 for all non-Retina displays, and 2 for Retina displays. +extern float deviceScale; + +// The orientation of the device. Currently, we only support both landscape modes. +// LEFT and RIGHT correspond to the position of the home button as you look at the +// device from the front. +typedef enum { + ORIENTATION_LANDSCAPE_LEFT, + ORIENTATION_LANDSCAPE_RIGHT +} deviceOrientation_t; + +extern deviceOrientation_t deviceOrientation; + extern float tilt; // -1.0 to 1.0 extern float tiltPitch; @@ -169,7 +209,10 @@ void iphoneDrawMapName( rect_t rect, const char *str ); //gsh int iphoneDrawTextInBox( rect_t paragraph, int lineLength, const char *str, rect_t boxRect ); //gsh void iphoneDrawNumber( int x, int y, int number, int charWidth, int charHeight ); void iphoneDrawPic( int x, int y, int w, int h, const char *pic ); +void iphoneDrawPicFloat( float x, float y, float w, float h, const char *pic ); +void iphoneDrawPicRect( rectFloat_t rect, const char * pic ); int iphoneDrawPicWithTouch( int x, int y, int w, int h, const char *pic ); +int iphoneDrawPicRectWithTouch( rectFloat_t rect, const char *pic ); void iphoneDrawPicNum( int x, int y, int w, int h, int glTexNum ); void R_Draw_Blend( int x, int y, int w, int h, colour4_t c ); void SaveTheGame(); @@ -182,7 +225,15 @@ void iphonePreloadBeforePlay(); void InitImmediateModeGL(); void iphoneRotateForLandscape(); -void iphoneCheckForLandscapeReverse(); + +void ScaleToScreen( int * value); +void ScalePosition( float * x, float * y ); +void ScalePositionInt( int * x, int * y ); +void ScalePositionAndSize( float * x, float * y, float * w, float * h ); +void ScalePositionAndSizeInt( int * x, int * y, int * w, int * h ); +void ScaleRect( rect_t * rect ); +void ScaleRectFloat( rectFloat_t * rect ); +rectFloat_t MakeScaledRectFloat( float x, float y, float width, float height ); extern colour4_t colorPressed; @@ -229,6 +280,13 @@ void HudEditFrame(); void iphoneHudEditFrame(); +//--------------------------------------- +// Content version management for Lite and Platinum +//--------------------------------------- +typedef enum { + CONTENT_LITE, + CONTENT_PLATINUM +} contentVersion_t; //--------------------------------------- // interfaces from the original game code @@ -246,13 +304,23 @@ void iphoneSetLevelNotifyText(); //gsh void SysIPhoneSwapBuffers(); void SysIPhoneVibrate(); void SysIPhoneOpenURL( const char *url ); -void SysIPhoneSetUIKitOrientation( int isLandscapeRight ); void SysIPhoneLoadJPG( W8* jpegData, int jpegBytes, W8 **pic, W16 *width, W16 *height, W16 *bytes ); const char * SysIPhoneGetConsoleTextField(); void SysIPhoneSetConsoleTextField(const char *); void SysIPhoneInitAudioSession(); int SysIPhoneOtherAudioIsPlaying(); const char *SysIPhoneGetOSVersion(); +contentVersion_t SysIPhoneGetContentVersion(); +int SysIPhoneGetPathToMainBundleLength( void ); +void SysIPhoneGetPathToMainBundle( char * outPath, int maxLength ); + +void iphoneStartPreviousMenu(); +void iphoneStartMainMenu(); +void iphonePromptToBuyPlatinum(); + +void iphoneInitMenuMusic(); +void iphoneStartMenuMusic(); +void iphoneStopMenuMusic(); //--------------------------------------- // interfaces from Objective-C land @@ -265,4 +333,53 @@ void iphoneTouchEvent( int numTouches, int touches[16] ); void iphoneActivateConsole(); void iphoneDeactivateConsole(); void iphoneExecuteCommandLine(); +void iphoneStartGameplay(); +void iphoneResume(); + +void LoadPNG( const char *filename, W8 **pic, W16 *width, W16 *height, W16 *bytes ); + +// The width and height the assets were originally designed for. Used in scaling to different +// resolutions for preserving aspect ratio. +#define REFERENCE_WIDTH 480.0f +#define REFERENCE_HEIGHT 320.0f + +// Constants for HUD buttons. +#define BACK_BUTTON_WIDTH 64.0f +#define BACK_BUTTON_HEIGHT 64.0f + +// These variables store the scaled dimensions of certain HUD elements that are needed +// in various parts of the code. +extern float faceWidth; +extern float faceHeight; + +extern float weaponWidth; +extern float weaponHeight; + + +// The following items support in-app purchases. +#define PLATINUM_UPGRADE_STRING "com.idsoftware.wolf3dlite.platupgrade" + + +// An enum to help keep track of YesNo boxes. +typedef enum { + YESNO_NONE, + YESNO_BUY_PLATINUM, + YESNO_GO_TO_WEBSITE, + YESNO_DOWNLOAD_INSTRUCTIONS +} yesNoBoxType_t; + +extern yesNoBoxType_t currentYesNoBox; + +// This determines the default framerate of the game. +// 1 = 60Hz, 2 = 30Hz, etc. +#define DEFAULT_FRAME_INTERVAL 1 + +// Determine phone or tablet device at runtime. +typedef enum { + DEVICE_UNKNOWN, + DEVICE_PHONE, + DEVICE_TABLET +} deviceType_t; + +deviceType_t iphoneGetDeviceType(void); diff --git a/wolf3d/code/iphone/main.m b/wolf3d/code/iphone/main.m index bb5f5df..eb2e7b9 100644 --- a/wolf3d/code/iphone/main.m +++ b/wolf3d/code/iphone/main.m @@ -1,6 +1,9 @@ /* - Copyright (C) 2009 Id Software, Inc. + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -19,28 +22,11 @@ */ #import -#include -#include int main(int argc, char *argv[]) { - - { - char cwd[256]; - strcpy( cwd, argv[0] ); - int len = strlen( cwd ); - for( int i = len-1; i >= 0; i-- ) { - if ( cwd[i] == '/' ) { - cwd[i] = 0; - break; - } - cwd[i] = 0; - } - setenv( "CWD", cwd, 1 ); - } - NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; - int retVal = UIApplicationMain(argc, argv, nil, nil); + int retVal = UIApplicationMain(argc, argv, nil, @"wolf3dAppDelegate"); [pool release]; return retVal; } diff --git a/wolf3d/code/iphone/untgz.c b/wolf3d/code/iphone/untgz.c new file mode 100644 index 0000000..e8ddd27 --- /dev/null +++ b/wolf3d/code/iphone/untgz.c @@ -0,0 +1,703 @@ +/* + * untgz.c -- Display contents and extract files from a gzip'd TAR file + * + * written by Pedro A. Aranda Gutierrez + * adaptation to Unix by Jean-loup Gailly + * various fixes by Cosmin Truta + */ + +// This file was originally authored by the people above. +// It has been modified for this program. + +#include +#include +#include +#include +#include + +#include "../wolfiphone.h" + +extern int chmod(const char *, mode_t) __DARWIN_ALIAS(chmod); +extern int mkdir(const char *, mode_t); +extern void Com_Printf( const char *fmt, ... ); + +#include "zlib.h" + +//Note: in order to link the zlib library into the build from usr/lib/libz.ylib +// the flag -lz was added to the OTHER_LDFLAGS under the build options. +// To get there: right click on the wolf3d project. choose get info. +// Click on build and scroll to "Other Link Flags" under "Linking" + + +#define unix + +#ifdef unix +# include +#else +# include +# include +#endif + +#ifdef WIN32 +#include +# ifndef F_OK +# define F_OK 0 +# endif +# define mkdir(dirname,mode) _mkdir(dirname) +# ifdef _MSC_VER +# define access(path,mode) _access(path,mode) +# define chmod(path,mode) _chmod(path,mode) +# define strdup(str) _strdup(str) +# endif +#else +# include +#endif + + +//extern int iphoneCenterText( int x, int y, const char *str ); + +/* values used in typeflag field */ + +#define REGTYPE '0' /* regular file */ +#define AREGTYPE '\0' /* regular file */ +#define LNKTYPE '1' /* link */ +#define SYMTYPE '2' /* reserved */ +#define CHRTYPE '3' /* character special */ +#define BLKTYPE '4' /* block special */ +#define DIRTYPE '5' /* directory */ +#define FIFOTYPE '6' /* FIFO special */ +#define CONTTYPE '7' /* reserved */ + +/* GNU tar extensions */ + +#define GNUTYPE_DUMPDIR 'D' /* file names from dumped directory */ +#define GNUTYPE_LONGLINK 'K' /* long link name */ +#define GNUTYPE_LONGNAME 'L' /* long file name */ +#define GNUTYPE_MULTIVOL 'M' /* continuation of file from another volume */ +#define GNUTYPE_NAMES 'N' /* file name that does not fit into main hdr */ +#define GNUTYPE_SPARSE 'S' /* sparse file */ +#define GNUTYPE_VOLHDR 'V' /* tape/volume header */ + + +/* tar header */ + +#define BLOCKSIZE 512 +#define SHORTNAMESIZE 100 + +struct tar_header +{ /* byte offset */ + char name[100]; /* 0 */ + char mode[8]; /* 100 */ + char uid[8]; /* 108 */ + char gid[8]; /* 116 */ + char size[12]; /* 124 */ + char mtime[12]; /* 136 */ + char chksum[8]; /* 148 */ + char typeflag; /* 156 */ + char linkname[100]; /* 157 */ + char magic[6]; /* 257 */ + char version[2]; /* 263 */ + char uname[32]; /* 265 */ + char gname[32]; /* 297 */ + char devmajor[8]; /* 329 */ + char devminor[8]; /* 337 */ + char prefix[155]; /* 345 */ + /* 500 */ +}; + +union tar_buffer +{ + char buffer[BLOCKSIZE]; + struct tar_header header; +}; + +struct attr_item +{ + struct attr_item *next; + char *fname; + int mode; + time_t time; +}; + +enum { TGZ_EXTRACT, TGZ_LIST, TGZ_INVALID }; + +char *TGZfname OF((const char *)); +void TGZnotfound OF((const char *)); + +int getoct OF((char *, int)); +char *strtime OF((time_t *)); +int setfiletime OF((char *, time_t)); +void push_attr OF((struct attr_item **, char *, int, time_t)); +void restore_attr OF((struct attr_item **)); + +int ExprMatch OF((char *, char *)); + +int makedir OF((char *)); +int matchname OF((int, int, char **, char *)); + +void error OF((const char *)); +int tar OF((gzFile, int, int, int, char **)); + +void help OF((int)); +int main OF((int, char **)); + +char *prog; + +const char *TGZsuffix[] = { "\0", ".tar", ".tar.gz", ".taz", ".tgz", NULL }; + +extern char iphoneDocDirectory[1024]; + +//returns the fname along with the appdocdirectory tagged onto the front +char *DirFName (const char* fname) +{ + static char buffer[1024]; + int origlen;//, i; + +// Com_Printf("iphone Doc Direct: %s\n", iphoneDocDirectory); + + //copy the directory into the buffer + strcpy(buffer, iphoneDocDirectory); + origlen = strlen(buffer); + + //add the '/' to the end of the iphoneDocDirectory + buffer[origlen] = '/'; + ++origlen; + buffer[origlen] = '\0'; + + //copy the file name into the buffer + strcpy(buffer+origlen, fname); + + Com_Printf("extracting file: %s\n", buffer); + +// colour4_t backgroundColor = { 10, 10, 10, 255 }; +// R_Draw_Blend( 40, 150, 4*100, 20, backgroundColor ); //this is not actually drawing. The draw thread is somehow pausing + + return buffer; +} + + +/* return the file name of the TGZ archive */ +/* or NULL if it does not exist */ + +char *TGZfname (const char *arcname) +{ + static char buffer[1024]; + int origlen,i; + + strcpy(buffer,arcname); + origlen = strlen(buffer); + + for (i=0; TGZsuffix[i]; i++) + { + strcpy(buffer+origlen,TGZsuffix[i]); + if (access(buffer,F_OK) == 0) + return buffer; + } + return NULL; +} + + +/* error message for the filename */ + +void TGZnotfound (const char *arcname) +{ + int i; + + fprintf(stderr,"%s: Couldn't find ",prog); + for (i=0;TGZsuffix[i];i++) + fprintf(stderr,(TGZsuffix[i+1]) ? "%s%s, " : "or %s%s\n", + arcname, + TGZsuffix[i]); + exit(1); +} + + +/* convert octal digits to int */ +/* on error return -1 */ + +int getoct (char *p,int width) +{ + int result = 0; + char c; + + while (width--) + { + c = *p++; + if (c == 0) + break; + if (c == ' ') + continue; + if (c < '0' || c > '7') + return -1; + result = result * 8 + (c - '0'); + } + return result; +} + + +/* convert time_t to string */ +/* use the "YYYY/MM/DD hh:mm:ss" format */ + +char *strtime (time_t *t) +{ + struct tm *local; + static char result[32]; + + local = localtime(t); + sprintf(result,"%4d/%02d/%02d %02d:%02d:%02d", + local->tm_year+1900, local->tm_mon+1, local->tm_mday, + local->tm_hour, local->tm_min, local->tm_sec); + return result; +} + + +/* set file time */ + +int setfiletime (char *fname,time_t ftime) +{ +#ifdef WIN32 + static int isWinNT = -1; + SYSTEMTIME st; + FILETIME locft, modft; + struct tm *loctm; + HANDLE hFile; + int result; + + loctm = localtime(&ftime); + if (loctm == NULL) + return -1; + + st.wYear = (WORD)loctm->tm_year + 1900; + st.wMonth = (WORD)loctm->tm_mon + 1; + st.wDayOfWeek = (WORD)loctm->tm_wday; + st.wDay = (WORD)loctm->tm_mday; + st.wHour = (WORD)loctm->tm_hour; + st.wMinute = (WORD)loctm->tm_min; + st.wSecond = (WORD)loctm->tm_sec; + st.wMilliseconds = 0; + if (!SystemTimeToFileTime(&st, &locft) || + !LocalFileTimeToFileTime(&locft, &modft)) + return -1; + + if (isWinNT < 0) + isWinNT = (GetVersion() < 0x80000000) ? 1 : 0; + hFile = CreateFile(fname, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, + (isWinNT ? FILE_FLAG_BACKUP_SEMANTICS : 0), + NULL); + if (hFile == INVALID_HANDLE_VALUE) + return -1; + result = SetFileTime(hFile, NULL, NULL, &modft) ? 0 : -1; + CloseHandle(hFile); + return result; +#else + struct utimbuf settime; + + settime.actime = settime.modtime = ftime; + return utime(fname,&settime); +#endif +} + + +/* push file attributes */ + +void push_attr(struct attr_item **list,char *fname,int mode,time_t time) +{ + struct attr_item *item; + + item = (struct attr_item *)malloc(sizeof(struct attr_item)); + if (item == NULL) + error("Out of memory"); + item->fname = strdup(fname); + item->mode = mode; + item->time = time; + item->next = *list; + *list = item; +} + + +/* restore file attributes */ + +void restore_attr(struct attr_item **list) +{ + struct attr_item *item, *prev; + + for (item = *list; item != NULL; ) + { + setfiletime(item->fname,item->time); + chmod(item->fname,item->mode); + prev = item; + item = item->next; + free(prev); + } + *list = NULL; +} + + +/* match regular expression */ + +#define ISSPECIAL(c) (((c) == '*') || ((c) == '/')) + +int ExprMatch (char *string,char *expr) +{ + while (1) + { + if (ISSPECIAL(*expr)) + { + if (*expr == '/') + { + if (*string != '\\' && *string != '/') + return 0; + string ++; expr++; + } + else if (*expr == '*') + { + if (*expr ++ == 0) + return 1; + while (*++string != *expr) + if (*string == 0) + return 0; + } + } + else + { + if (*string != *expr) + return 0; + if (*expr++ == 0) + return 1; + string++; + } + } +} + + +/* recursive mkdir */ +/* abort on ENOENT; ignore other errors like "directory already exists" */ +/* return 1 if OK */ +/* 0 on error */ + +int makedir (char *newdir) +{ + char *buffer = strdup(newdir); + char *p; + int len = strlen(buffer); + + if (len <= 0) { + free(buffer); + return 0; + } + if (buffer[len-1] == '/') { + buffer[len-1] = '\0'; + } + if (mkdir(buffer, 0755) == 0) + { + free(buffer); + return 1; + } + + p = buffer+1; + while (1) + { + char hold; + + while(*p && *p != '\\' && *p != '/') + p++; + hold = *p; + *p = 0; + if ((mkdir(buffer, 0755) == -1) && (errno == ENOENT)) + { + fprintf(stderr,"%s: Couldn't create directory %s\n",prog,buffer); + free(buffer); + return 0; + } + if (hold == 0) + break; + *p++ = hold; + } + free(buffer); + return 1; +} + + +int matchname (int arg,int argc,char **argv,char *fname) +{ + if (arg == argc) /* no arguments given (untgz tgzarchive) */ + return 1; + + while (arg < argc) + if (ExprMatch(fname,argv[arg++])) + return 1; + + return 0; /* ignore this for the moment being */ +} + + +/* tar file list or extract */ + + +int tar2 (gzFile in,int action) +{ + union tar_buffer buffer; + int len; + int err; + int getheader = 1; + int remaining = 0; + FILE *outfile = NULL; + char fname[BLOCKSIZE]; + //char dirfname; + int tarmode; + time_t tartime; + struct attr_item *attributes = NULL; + + if (action == TGZ_LIST) + printf(" date time size file\n" + " ---------- -------- --------- -------------------------------------\n"); + while (1) + { + len = gzread(in, &buffer, BLOCKSIZE); + if (len < 0) + error(gzerror(in, &err)); + /* + * Always expect complete blocks to process + * the tar information. + */ + if (len != BLOCKSIZE) + { + action = TGZ_INVALID; /* force error exit */ + remaining = 0; /* force I/O cleanup */ + } + + /* + * If we have to get a tar header + */ + if (getheader >= 1) + { + /* + * if we met the end of the tar + * or the end-of-tar block, + * we are done + */ + if (len == 0 || buffer.header.name[0] == 0) + break; + + tarmode = getoct(buffer.header.mode,8); + tartime = (time_t)getoct(buffer.header.mtime,12); + if (tarmode == -1 || tartime == (time_t)-1) + { + buffer.header.name[0] = 0; + action = TGZ_INVALID; + } + + if (getheader == 1) + { + strncpy(fname,buffer.header.name,SHORTNAMESIZE); + if (fname[SHORTNAMESIZE-1] != 0) + fname[SHORTNAMESIZE] = 0; + } + else + { + /* + * The file name is longer than SHORTNAMESIZE + */ + if (strncmp(fname,buffer.header.name,SHORTNAMESIZE-1) != 0) + error("bad long name"); + getheader = 1; + } + + /* + * Act according to the type flag + */ + switch (buffer.header.typeflag) + { + + case DIRTYPE: + if (action == TGZ_LIST) + { + printf(" %s %s\n",strtime(&tartime),fname); + Com_Printf("case DIRTYPE: %s\n", DirFName(fname)); + } + if (action == TGZ_EXTRACT) + { + Com_Printf("blah blah DIRTYPE:action == TGZ_EXTRACT, make directory\n"); + makedir(fname); + //makedir(DirFName(fname)); + push_attr(&attributes,fname,tarmode,tartime); + } + break; + case REGTYPE: + case AREGTYPE: + remaining = getoct(buffer.header.size,12); + if (remaining == -1) + { + action = TGZ_INVALID; + break; + } + if (action == TGZ_LIST) + printf(" %s %9d %s\n",strtime(&tartime),remaining,fname); + else if (action == TGZ_EXTRACT) + { + if (1)//gsh matchname(arg,argc,argv,fname)) + { + //Com_Printf("call just before iphonedocdirectory\n"); + //Com_Printf("iphonedocdirect: %s\n", iphoneDocDirectory); + char* outname = DirFName(fname); + //Com_Printf("outname is: %s\n", outname); + outfile = fopen(outname,"wb"); + if (outfile == NULL) { + // try creating directory + char *p = strrchr(outname, '/'); + if (p != NULL) { + *p = '\0'; + makedir(outname); + *p = '/'; + outfile = fopen(outname,"wb"); + } + }/* + if (outfile != NULL) + Com_Printf("Extracting %s\n",fname); + else + Com_Printf("%s: Couldn't create %s",prog,fname);*/ + /* + outfile = fopen(fname,"wb"); + if (outfile == NULL) { + /* try creating directory * + char *p = strrchr(fname, '/'); + if (p != NULL) { + *p = '\0'; + makedir(fname); + *p = '/'; + outfile = fopen(fname,"wb"); + } + } + if (outfile != NULL) + printf("Extracting %s\n",fname); + else + fprintf(stderr, "%s: Couldn't create %s",prog,fname);*/ + } + else + outfile = NULL; + } + getheader = 0; + break; + case GNUTYPE_LONGLINK: + case GNUTYPE_LONGNAME: + remaining = getoct(buffer.header.size,12); + if (remaining < 0 || remaining >= BLOCKSIZE) + { + action = TGZ_INVALID; + break; + } + len = gzread(in, fname, BLOCKSIZE); + if (len < 0) + error(gzerror(in, &err)); + if (fname[BLOCKSIZE-1] != 0 || (int)strlen(fname) > remaining) + { + action = TGZ_INVALID; + break; + } + getheader = 2; + break; + default: + if (action == TGZ_LIST) + printf(" %s <---> %s\n",strtime(&tartime),fname); + break; + } + } + else + { + //Com_Printf("else called\n"); + unsigned int bytes = (remaining > BLOCKSIZE) ? BLOCKSIZE : remaining; + + if (outfile != NULL) + { + if (fwrite(&buffer,sizeof(char),bytes,outfile) != bytes) + { + fprintf(stderr, + "%s: Error writing %s -- skipping\n",prog,fname); + fclose(outfile); + outfile = NULL; + remove(fname); + } + } + remaining -= bytes; + } + + if (remaining == 0) + { + getheader = 1; + if (outfile != NULL) + { + fclose(outfile); + outfile = NULL; + if (action != TGZ_INVALID) + push_attr(&attributes,fname,tarmode,tartime); + } + } + + /* + * Abandon if errors are found + */ + if (action == TGZ_INVALID) + { + error("broken archive"); + break; + } + } + + /* + * Restore file modes and time stamps + */ + restore_attr(&attributes); + + if (gzclose(in) != Z_OK) + error("failed gzclose"); + + return 0; +} + + + +/* ============================================================ */ + +void help(int exitval) +{ + printf("untgz version 0.2.1\n" + " using zlib version %s\n\n", + zlibVersion()); + printf("Usage: untgz file.tgz extract all files\n" + " untgz file.tgz fname ... extract selected files\n" + " untgz -l file.tgz list archive contents\n" + " untgz -h display this help\n"); + exit(exitval); +} + +void error(const char *msg) +{ + fprintf(stderr, "%s: %s\n", prog, msg); + exit(1); +} + + +/* ============================================================ */ + +#if defined(WIN32) && defined(__GNUC__) +int _CRT_glob = 0; /* disable argument globbing in MinGW */ +#endif + + +int StartUntgz(char *TGZfile) +{ + int action = TGZ_EXTRACT; + gzFile *f; + f = gzopen(TGZfile,"rb"); + if (f == NULL) + { + Com_Printf("%s: Couldn't gzopen %s\n",prog,TGZfile); + return 1; + } + + return tar2(f, action); +} + + + + diff --git a/wolf3d/code/iphone/wolf3d.xcodeproj/greghodges.mode1v3 b/wolf3d/code/iphone/wolf3d.xcodeproj/greghodges.mode1v3 index 6f7c124..b5f51ae 100644 --- a/wolf3d/code/iphone/wolf3d.xcodeproj/greghodges.mode1v3 +++ b/wolf3d/code/iphone/wolf3d.xcodeproj/greghodges.mode1v3 @@ -211,6 +211,7 @@ active-combo-popup action NSToolbarFlexibleSpaceItem + debugger-enable-breakpoints build-and-go com.apple.ide.PBXToolbarStopButton get-info @@ -234,7 +235,6 @@ 1C37FBAC04509CD000000102 1C37FAAC04509CD000000102 - 1C08E77C0454961000C914BD 1C37FABC05509CD000000102 1C37FABC05539CD112110102 E2644B35053B69B200211256 @@ -265,6 +265,7 @@ 29B97314FDCFA39411CA2CEA 29B97315FDCFA39411CA2CEA + 72935B190F6B2D720085DD28 29B97317FDCFA39411CA2CEA 29B97323FDCFA39411CA2CEA 19C28FACFE9D520D11CA2CBB @@ -274,13 +275,13 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey - 32 - 27 + 4 + 1 0 PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {186, 720}} + {{0, 742}, {186, 720}} PBXTopSmartGroupGIDs @@ -299,7 +300,7 @@ 186 RubberWindowFrame - 391 174 1010 779 0 0 1680 1028 + 337 313 1010 779 0 0 1920 1178 Module PBXSmartGroupTreeModule @@ -310,12 +311,14 @@ Dock + BecomeActive + ContentConfiguration PBXProjectModuleGUID 1CE0B20306471E060097A5F4 PBXProjectModuleLabel - Info.plist + iphone_main.c PBXSplitModuleInNavigatorKey Split0 @@ -323,44 +326,41 @@ PBXProjectModuleGUID 1CE0B20406471E060097A5F4 PBXProjectModuleLabel - Info.plist + iphone_main.c _historyCapacity 0 bookmark - ED45402710B21F0900DCFA32 + EDFA70BF119469CD0098FFFC history - ED2E5C05106C886700F57B9D - ED2E5C06106C886700F57B9D - ED4AC98010742365000706D8 - EDDA5A7E107BA97F003F55D3 - EDDA5A80107BA97F003F55D3 ED2754531085141B009C891E - ED0653B61087719F00E5450B - EDAFC5A2109A14EE002C3487 - ED845AB1109F5B3500F673AC ED45402110B21F0900DCFA32 ED45402210B21F0900DCFA32 ED45402310B21F0900DCFA32 - ED845AB2109F5B3500F673AC - - prevStack - - ED3703CD106C20620059C5F8 - ED2E5C0A106C886700F57B9D - ED2E5C0B106C886700F57B9D - ED4AC98210742365000706D8 - ED4AC9AB10743318000706D8 - ED4AC9AC10743318000706D8 - EDDA5A82107BA97F003F55D3 - EDDA5A83107BA97F003F55D3 - EDDA5A84107BA97F003F55D3 - ED2754551085141B009C891E - ED2754561085141B009C891E - ED0653B81087719F00E5450B - ED45402410B21F0900DCFA32 - ED45402510B21F0900DCFA32 - ED45402610B21F0900DCFA32 + ED89CF4410D0693D006A2D2E + ED89CF4710D0693D006A2D2E + ED89CF4810D0693D006A2D2E + ED89CF4910D0693D006A2D2E + EDC7BE4810D95AF900DA2765 + EDC7BE4910D95AF900DA2765 + EDB41E9910DADFF000487A3B + EDB41E9A10DADFF000487A3B + EDB41EAF10DAE14F00487A3B + EDB41EB110DAE14F00487A3B + EDB41ECB10DAE24C00487A3B + EDB41EFD10DAEE4800487A3B + EDB41EFE10DAEE4800487A3B + EDB41F0110DAEE4800487A3B + EDB41F1110DAF0FC00487A3B + EDB41F3610DAF95B00487A3B + ED89F57010DC207800C8A107 + ED89F58710DC257400C8A107 + ED89F58F10DC27DD00C8A107 + ED89F5B010DC406A00C8A107 + ED89F5B110DC406A00C8A107 + ED89F5B210DC406A00C8A107 + EDFA70BE119469CD0098FFFC + EDFA7084119384150098FFFC SplitCount @@ -372,14 +372,14 @@ GeometryConfiguration Frame - {{0, 0}, {802, 686}} + {{0, 0}, {802, 683}} RubberWindowFrame - 391 174 1010 779 0 0 1680 1028 + 337 313 1010 779 0 0 1920 1178 Module PBXNavigatorGroup Proportion - 686pt + 683pt ContentConfiguration @@ -392,14 +392,14 @@ GeometryConfiguration Frame - {{0, 691}, {802, 47}} + {{0, 688}, {802, 50}} RubberWindowFrame - 391 174 1010 779 0 0 1680 1028 + 337 313 1010 779 0 0 1920 1178 Module XCDetailModule Proportion - 47pt + 50pt Proportion @@ -418,12 +418,14 @@ TableOfContents - ED45402810B21F0900DCFA32 + EDFA70C0119469CD0098FFFC 1CE0B1FE06471DED0097A5F4 - ED45402910B21F0900DCFA32 + EDFA70C1119469CD0098FFFC 1CE0B20306471E060097A5F4 1CE0B20506471E060097A5F4 + ToolbarConfigUserDefaultsMinorVersion + 2 ToolbarConfiguration xcode.toolbar.config.defaultV3 @@ -554,10 +556,11 @@ 5 WindowOrderList - /Users/greghodges/wolf3dplatinum/wolf3d/code/iphone/wolf3d.xcodeproj + ED0A8CF61069A9E0001E0547 + /Volumes/Work/idMobileDepot/Wolfenstein3DPlatinumDepot/wolf3d/code/iphone/wolf3d.xcodeproj WindowString - 391 174 1010 779 0 0 1680 1028 + 337 313 1010 779 0 0 1920 1178 WindowToolsV3 @@ -587,7 +590,7 @@ Frame {{0, 0}, {500, 218}} RubberWindowFrame - 56 488 500 500 0 0 1680 1028 + 67 625 500 500 0 0 1920 1178 Module PBXNavigatorGroup @@ -600,7 +603,7 @@ PBXProjectModuleGUID XCMainBuildResultsModuleGUID PBXProjectModuleLabel - Build + Build Results XCBuildResultsTrigger_Collapse 1021 XCBuildResultsTrigger_Open @@ -611,7 +614,7 @@ Frame {{0, 223}, {500, 236}} RubberWindowFrame - 56 488 500 500 0 0 1680 1028 + 67 625 500 500 0 0 1920 1178 Module PBXBuildResultsModule @@ -634,14 +637,14 @@ TableOfContents ED0A8CF61069A9E0001E0547 - EDAFC5AA109A14EE002C3487 + EDFA70C2119469CD0098FFFC 1CD0528F0623707200166675 XCMainBuildResultsModuleGUID ToolbarConfiguration xcode.toolbar.config.buildV3 WindowString - 56 488 500 500 0 0 1680 1028 + 67 625 500 500 0 0 1920 1178 WindowToolGUID ED0A8CF61069A9E0001E0547 WindowToolIsVisible @@ -676,8 +679,8 @@ yes sizes - {{0, 0}, {316, 203}} - {{316, 0}, {378, 203}} + {{0, 0}, {542, 426}} + {{542, 0}, {646, 426}} VerticalSplitView @@ -692,8 +695,8 @@ yes sizes - {{0, 0}, {694, 203}} - {{0, 203}, {694, 178}} + {{0, 0}, {1188, 426}} + {{0, 426}, {1188, 373}} @@ -713,7 +716,7 @@ DebugSTDIOWindowFrame {{200, 200}, {500, 300}} Frame - {{0, 0}, {694, 381}} + {{0, 0}, {1188, 799}} PBXDebugSessionStackFrameViewKey DebugVariablesTableConfiguration @@ -723,24 +726,24 @@ Value 85 Summary - 148 + 416 Frame - {{316, 0}, {378, 203}} + {{542, 0}, {646, 426}} RubberWindowFrame - 150 519 694 422 0 0 1680 1028 + 430 265 1188 840 0 0 1920 1178 RubberWindowFrame - 150 519 694 422 0 0 1680 1028 + 430 265 1188 840 0 0 1920 1178 Module PBXDebugSessionModule Proportion - 381pt + 799pt Proportion - 381pt + 799pt Name @@ -754,18 +757,18 @@ TableOfContents 1CD10A99069EF8BA00B06720 - EDAFC5AB109A14EE002C3487 + ED89F55610DC024400C8A107 1C162984064C10D400B95A72 - EDAFC5AC109A14EE002C3487 - EDAFC5AD109A14EE002C3487 - EDAFC5AE109A14EE002C3487 - EDAFC5AF109A14EE002C3487 - EDAFC5B0109A14EE002C3487 + ED89F55710DC024400C8A107 + ED89F55810DC024400C8A107 + ED89F55910DC024400C8A107 + ED89F55A10DC024400C8A107 + ED89F55B10DC024400C8A107 ToolbarConfiguration xcode.toolbar.config.debugV3 WindowString - 150 519 694 422 0 0 1680 1028 + 430 265 1188 840 0 0 1920 1178 WindowToolGUID 1CD10A99069EF8BA00B06720 WindowToolIsVisible @@ -787,23 +790,21 @@ Dock - BecomeActive - ContentConfiguration PBXProjectModuleGUID 1CDD528C0622207200134675 PBXProjectModuleLabel - iphone_menus.c + StatusBarVisibility GeometryConfiguration Frame - {{0, 0}, {1122, 588}} + {{0, 0}, {1122, 464}} RubberWindowFrame - 450 88 1122 866 0 0 1680 1028 + 1948 265 1122 866 1920 150 1680 1050 Module PBXNavigatorGroup @@ -812,9 +813,11 @@ Proportion - 588pt + 464pt + BecomeActive + ContentConfiguration PBXProjectModuleGUID @@ -825,14 +828,14 @@ GeometryConfiguration Frame - {{0, 593}, {1122, 232}} + {{0, 469}, {1122, 356}} RubberWindowFrame - 450 88 1122 866 0 0 1680 1028 + 1948 265 1122 866 1920 150 1680 1050 Module PBXProjectFindModule Proportion - 232pt + 356pt Proportion @@ -850,17 +853,17 @@ TableOfContents 1C530D57069F1CE1000CFCEE - EDAFC5B1109A14EE002C3487 - EDAFC5B2109A14EE002C3487 + EDFA70821193840B0098FFFC + EDFA70831193840B0098FFFC 1CDD528C0622207200134675 1CD0528E0623707200166675 WindowString - 450 88 1122 866 0 0 1680 1028 + 1948 265 1122 866 1920 150 1680 1050 WindowToolGUID 1C530D57069F1CE1000CFCEE WindowToolIsVisible - + Identifier @@ -891,7 +894,7 @@ Frame {{0, 0}, {650, 209}} RubberWindowFrame - 450 704 650 250 0 0 1680 1028 + 555 839 650 250 0 0 1920 1178 Module PBXDebugCLIModule @@ -914,13 +917,13 @@ TableOfContents 1C78EAAD065D492600B07095 - EDAFC5B3109A14EE002C3487 + EDB41EC610DAE14F00487A3B 1C78EAAC065D492600B07095 ToolbarConfiguration xcode.toolbar.config.consoleV3 WindowString - 450 704 650 250 0 0 1680 1028 + 555 839 650 250 0 0 1920 1178 WindowToolGUID 1C78EAAD065D492600B07095 WindowToolIsVisible diff --git a/wolf3d/code/iphone/wolf3d.xcodeproj/greghodges.pbxuser b/wolf3d/code/iphone/wolf3d.xcodeproj/greghodges.pbxuser index 839a542..76359eb 100644 --- a/wolf3d/code/iphone/wolf3d.xcodeproj/greghodges.pbxuser +++ b/wolf3d/code/iphone/wolf3d.xcodeproj/greghodges.pbxuser @@ -7,13 +7,15 @@ ); }; 29B97313FDCFA39411CA2CEA /* Project object */ = { - activeBuildConfigurationName = Release; + activeBuildConfigurationName = Distribution; activeExecutable = ED0A8CE41069A9CF001E0547 /* wolf3d */; - activeSDKPreference = iphonesimulator2.0; + activeSDKPreference = iphoneos2.0; activeTarget = 1D6058900D05DD3D006BFB54 /* wolf3d */; addToTargets = ( 1D6058900D05DD3D006BFB54 /* wolf3d */, ); + breakpoints = ( + ); codeSenseManager = ED0A8CFA1069A9F5001E0547 /* Code sense */; executables = ( ED0A8CE41069A9CF001E0547 /* wolf3d */, @@ -41,12 +43,24 @@ PBXFileDataSource_Target_ColumnID, ); }; + PBXConfiguration.PBXFileTableDataSource3.PBXFindDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFindDataSource_LocationID; + PBXFileTableDataSourceColumnWidthsKey = ( + 200, + 577, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFindDataSource_MessageID, + PBXFindDataSource_LocationID, + ); + }; PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; PBXFileTableDataSourceColumnWidthsKey = ( 20, - 523, + 1433, 60, 20, 48, @@ -63,39 +77,39 @@ PBXFileDataSource_Warnings_ColumnID, ); }; - PBXPerProjectTemplateStateSaveDate = 280108689; - PBXWorkspaceStateSaveDate = 280108689; + PBXPerProjectTemplateStateSaveDate = 294880202; + PBXWorkspaceStateSaveDate = 294880202; }; perUserProjectItems = { - ED0653B61087719F00E5450B /* PBXTextBookmark */ = ED0653B61087719F00E5450B /* PBXTextBookmark */; - ED0653B81087719F00E5450B /* PBXTextBookmark */ = ED0653B81087719F00E5450B /* PBXTextBookmark */; ED2754531085141B009C891E /* PBXTextBookmark */ = ED2754531085141B009C891E /* PBXTextBookmark */; - ED2754551085141B009C891E /* PlistBookmark */ = ED2754551085141B009C891E /* PlistBookmark */; - ED2754561085141B009C891E /* PBXTextBookmark */ = ED2754561085141B009C891E /* PBXTextBookmark */; - ED2E5C05106C886700F57B9D /* PBXTextBookmark */ = ED2E5C05106C886700F57B9D /* PBXTextBookmark */; - ED2E5C06106C886700F57B9D /* PBXTextBookmark */ = ED2E5C06106C886700F57B9D /* PBXTextBookmark */; - ED2E5C0A106C886700F57B9D /* PBXTextBookmark */ = ED2E5C0A106C886700F57B9D /* PBXTextBookmark */; - ED2E5C0B106C886700F57B9D /* PBXTextBookmark */ = ED2E5C0B106C886700F57B9D /* PBXTextBookmark */; - ED3703CD106C20620059C5F8 /* PlistBookmark */ = ED3703CD106C20620059C5F8 /* PlistBookmark */; ED45402110B21F0900DCFA32 /* PBXTextBookmark */ = ED45402110B21F0900DCFA32 /* PBXTextBookmark */; ED45402210B21F0900DCFA32 /* PBXTextBookmark */ = ED45402210B21F0900DCFA32 /* PBXTextBookmark */; ED45402310B21F0900DCFA32 /* PBXTextBookmark */ = ED45402310B21F0900DCFA32 /* PBXTextBookmark */; - ED45402410B21F0900DCFA32 /* PBXTextBookmark */ = ED45402410B21F0900DCFA32 /* PBXTextBookmark */; - ED45402510B21F0900DCFA32 /* PBXTextBookmark */ = ED45402510B21F0900DCFA32 /* PBXTextBookmark */; - ED45402610B21F0900DCFA32 /* PBXTextBookmark */ = ED45402610B21F0900DCFA32 /* PBXTextBookmark */; - ED45402710B21F0900DCFA32 /* PlistBookmark */ = ED45402710B21F0900DCFA32 /* PlistBookmark */; - ED4AC98010742365000706D8 /* PBXTextBookmark */ = ED4AC98010742365000706D8 /* PBXTextBookmark */; - ED4AC98210742365000706D8 /* PBXTextBookmark */ = ED4AC98210742365000706D8 /* PBXTextBookmark */; - ED4AC9AB10743318000706D8 /* PBXTextBookmark */ = ED4AC9AB10743318000706D8 /* PBXTextBookmark */; - ED4AC9AC10743318000706D8 /* PBXTextBookmark */ = ED4AC9AC10743318000706D8 /* PBXTextBookmark */; - ED845AB1109F5B3500F673AC /* PBXTextBookmark */ = ED845AB1109F5B3500F673AC /* PBXTextBookmark */; - ED845AB2109F5B3500F673AC /* PlistBookmark */ = ED845AB2109F5B3500F673AC /* PlistBookmark */; - EDAFC5A2109A14EE002C3487 /* PBXTextBookmark */ = EDAFC5A2109A14EE002C3487 /* PBXTextBookmark */; - EDDA5A7E107BA97F003F55D3 /* PBXTextBookmark */ = EDDA5A7E107BA97F003F55D3 /* PBXTextBookmark */; - EDDA5A80107BA97F003F55D3 /* PBXTextBookmark */ = EDDA5A80107BA97F003F55D3 /* PBXTextBookmark */; - EDDA5A82107BA97F003F55D3 /* PBXTextBookmark */ = EDDA5A82107BA97F003F55D3 /* PBXTextBookmark */; - EDDA5A83107BA97F003F55D3 /* PBXTextBookmark */ = EDDA5A83107BA97F003F55D3 /* PBXTextBookmark */; - EDDA5A84107BA97F003F55D3 /* PBXTextBookmark */ = EDDA5A84107BA97F003F55D3 /* PBXTextBookmark */; + ED89CF4410D0693D006A2D2E /* PBXTextBookmark */ = ED89CF4410D0693D006A2D2E /* PBXTextBookmark */; + ED89CF4610D0693D006A2D2E /* PBXTextBookmark */ = ED89CF4610D0693D006A2D2E /* PBXTextBookmark */; + ED89CF4710D0693D006A2D2E /* PBXTextBookmark */ = ED89CF4710D0693D006A2D2E /* PBXTextBookmark */; + ED89CF4810D0693D006A2D2E /* PBXTextBookmark */ = ED89CF4810D0693D006A2D2E /* PBXTextBookmark */; + ED89CF4910D0693D006A2D2E /* PBXTextBookmark */ = ED89CF4910D0693D006A2D2E /* PBXTextBookmark */; + ED89F57010DC207800C8A107 /* PlistBookmark */ = ED89F57010DC207800C8A107 /* PlistBookmark */; + ED89F58710DC257400C8A107 /* PBXTextBookmark */ = ED89F58710DC257400C8A107 /* PBXTextBookmark */; + ED89F58F10DC27DD00C8A107 /* PBXTextBookmark */ = ED89F58F10DC27DD00C8A107 /* PBXTextBookmark */; + ED89F5B010DC406A00C8A107 /* PBXTextBookmark */ = ED89F5B010DC406A00C8A107 /* PBXTextBookmark */; + ED89F5B110DC406A00C8A107 /* PBXTextBookmark */ = ED89F5B110DC406A00C8A107 /* PBXTextBookmark */; + ED89F5B210DC406A00C8A107 /* PBXTextBookmark */ = ED89F5B210DC406A00C8A107 /* PBXTextBookmark */; + EDB41E9910DADFF000487A3B /* PlistBookmark */ = EDB41E9910DADFF000487A3B /* PlistBookmark */; + EDB41E9A10DADFF000487A3B /* PBXTextBookmark */ = EDB41E9A10DADFF000487A3B /* PBXTextBookmark */; + EDB41EAF10DAE14F00487A3B /* PBXTextBookmark */ = EDB41EAF10DAE14F00487A3B /* PBXTextBookmark */; + EDB41EB110DAE14F00487A3B /* PBXTextBookmark */ = EDB41EB110DAE14F00487A3B /* PBXTextBookmark */; + EDB41ECB10DAE24C00487A3B /* PBXTextBookmark */ = EDB41ECB10DAE24C00487A3B /* PBXTextBookmark */; + EDB41EFD10DAEE4800487A3B /* PBXTextBookmark */ = EDB41EFD10DAEE4800487A3B /* PBXTextBookmark */; + EDB41EFE10DAEE4800487A3B /* PBXTextBookmark */ = EDB41EFE10DAEE4800487A3B /* PBXTextBookmark */; + EDB41F0110DAEE4800487A3B /* PBXTextBookmark */ = EDB41F0110DAEE4800487A3B /* PBXTextBookmark */; + EDB41F1110DAF0FC00487A3B /* PBXTextBookmark */ = EDB41F1110DAF0FC00487A3B /* PBXTextBookmark */; + EDB41F3610DAF95B00487A3B /* PBXTextBookmark */ = EDB41F3610DAF95B00487A3B /* PBXTextBookmark */; + EDC7BE4810D95AF900DA2765 /* PBXTextBookmark */ = EDC7BE4810D95AF900DA2765 /* PBXTextBookmark */; + EDC7BE4910D95AF900DA2765 /* PBXTextBookmark */ = EDC7BE4910D95AF900DA2765 /* PBXTextBookmark */; + EDFA7075119383080098FFFC /* PBXTextBookmark */ = EDFA7075119383080098FFFC /* PBXTextBookmark */; + EDFA7084119384150098FFFC /* PBXTextBookmark */ = EDFA7084119384150098FFFC /* PBXTextBookmark */; }; sourceControlManager = ED0A8CF91069A9F5001E0547 /* Source Control */; userBuildSettings = { @@ -103,24 +117,31 @@ }; 43AF6B940F996DA200777569 /* iphone_sys.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {852, 1050}}"; + sepNavIntBoundsRect = "{{0, 0}, {1651, 1050}}"; sepNavSelRange = "{1419, 24}"; - sepNavVisRange = "{771, 1684}"; + sepNavVisRange = "{289, 2254}"; }; }; 43CF03090F56D5C200E4A23D /* iphone_loop.c */ = { uiCtxt = { sepNavFolds = "{\n c = (\n {\n l = \"int y\";\n r = \"{41674, 9}\";\n s = 1;\n },\n {\n l = \"int width\";\n r = \"{41685, 13}\";\n s = 1;\n },\n {\n l = \"int height\";\n r = \"{41700, 14}\";\n s = 1;\n },\n {\n l = \"const char * str\";\n r = \"{41716, 20}\";\n s = 1;\n }\n );\n r = \"{0, 41792}\";\n s = 0;\n}"; - sepNavIntBoundsRect = "{{0, 0}, {1061, 24388}}"; - sepNavSelRange = "{27221, 8}"; - sepNavVisRange = "{26941, 622}"; + sepNavIntBoundsRect = "{{0, 0}, {1061, 24066}}"; + sepNavSelRange = "{34481, 0}"; + sepNavVisRange = "{34065, 813}"; }; }; 43E8D2DF0F4FC61E003F09B2 /* iphone_main.c */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {741, 5418}}"; - sepNavSelRange = "{1413, 4}"; - sepNavVisRange = "{970, 956}"; + sepNavIntBoundsRect = "{{0, 0}, {741, 4760}}"; + sepNavSelRange = "{5816, 0}"; + sepNavVisRange = "{5166, 2013}"; + }; + }; + 7229CC250F6B3222004123C5 /* wolf_actor_ai.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1061, 13384}}"; + sepNavSelRange = "{1895, 9}"; + sepNavVisRange = "{1545, 981}"; }; }; 7229CC270F6B3222004123C5 /* wolf_actors.c */ = { @@ -130,6 +151,90 @@ sepNavVisRange = "{0, 1418}"; }; }; + 7229CC290F6B3222004123C5 /* wolf_ai_com.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1061, 18186}}"; + sepNavSelRange = "{24018, 9}"; + sepNavVisRange = "{23772, 594}"; + }; + }; + 7229CC2E0F6B3222004123C5 /* wolf_client_main.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1061, 2142}}"; + sepNavSelRange = "{1430, 9}"; + sepNavVisRange = "{1285, 710}"; + }; + }; + 7229CC310F6B3222004123C5 /* wolf_level.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1061, 20342}}"; + sepNavSelRange = "{19282, 0}"; + sepNavVisRange = "{19052, 690}"; + }; + }; + 7229CC320F6B3222004123C5 /* wolf_level.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1061, 3976}}"; + sepNavSelRange = "{5009, 7}"; + sepNavVisRange = "{4411, 607}"; + }; + }; + 7229CC330F6B3222004123C5 /* wolf_local.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1061, 1932}}"; + sepNavSelRange = "{1187, 0}"; + sepNavVisRange = "{867, 423}"; + }; + }; + 7229CC340F6B3222004123C5 /* wolf_main.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1061, 1260}}"; + sepNavSelRange = "{1698, 9}"; + sepNavVisRange = "{1375, 596}"; + }; + }; + 7229CC380F6B3222004123C5 /* wolf_player.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1127, 14616}}"; + sepNavSelRange = "{2849, 0}"; + sepNavVisRange = "{2450, 554}"; + }; + }; + 7229CC3A0F6B3222004123C5 /* wolf_powerups.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1061, 5376}}"; + sepNavSelRange = "{7666, 0}"; + sepNavVisRange = "{7116, 1214}"; + }; + }; + 7229CC3C0F6B3222004123C5 /* wolf_pushwalls.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1061, 2310}}"; + sepNavSelRange = "{2623, 9}"; + sepNavVisRange = "{2617, 967}"; + }; + }; + 7229CC3D0F6B3222004123C5 /* wolf_raycast.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1127, 5348}}"; + sepNavSelRange = "{2319, 0}"; + sepNavVisRange = "{2010, 511}"; + }; + }; + 7229CC3F0F6B3222004123C5 /* wolf_renderer.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1061, 1456}}"; + sepNavSelRange = "{2450, 9}"; + sepNavVisRange = "{2238, 497}"; + }; + }; + 7229CC430F6B3222004123C5 /* wolf_sv_ccmds.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1061, 1344}}"; + sepNavSelRange = "{2007, 5}"; + sepNavVisRange = "{1624, 525}"; + }; + }; 7229CC8E0F6B3363004123C5 /* wolfiphone.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {741, 1260}}"; @@ -139,9 +244,9 @@ }; 7229CE460F6C89F8004123C5 /* EAGLView.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {786, 6650}}"; - sepNavSelRange = "{0, 0}"; - sepNavVisRange = "{10594, 1878}"; + sepNavIntBoundsRect = "{{0, 0}, {1061, 6706}}"; + sepNavSelRange = "{10810, 13}"; + sepNavVisRange = "{10594, 1180}"; }; }; 7229CE480F6C89F8004123C5 /* wolf3dAppDelegate.h */ = { @@ -153,9 +258,9 @@ }; 7229CE490F6C89F8004123C5 /* wolf3dAppDelegate.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1074, 5012}}"; - sepNavSelRange = "{3930, 0}"; - sepNavVisRange = "{5119, 1271}"; + sepNavIntBoundsRect = "{{0, 0}, {1074, 4872}}"; + sepNavSelRange = "{9060, 13}"; + sepNavVisRange = "{8605, 1087}"; }; }; 72935B1E0F6B2D9D0085DD28 /* arch.h */ = { @@ -165,6 +270,34 @@ sepNavVisRange = "{2465, 1040}"; }; }; + 72935B2D0F6B2D9D0085DD28 /* cvar.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {741, 10542}}"; + sepNavSelRange = "{5889, 0}"; + sepNavVisRange = "{5250, 937}"; + }; + }; + 72935B2E0F6B2D9D0085DD28 /* cvar.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {741, 2310}}"; + sepNavSelRange = "{3022, 0}"; + sepNavVisRange = "{2654, 1407}"; + }; + }; + 72935B2F0F6B2D9D0085DD28 /* fileio.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1061, 4060}}"; + sepNavSelRange = "{5506, 0}"; + sepNavVisRange = "{4925, 708}"; + }; + }; + 72935B5D0F6B2D9D0085DD28 /* sound_sfx_id.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1061, 4354}}"; + sepNavSelRange = "{5333, 9}"; + sepNavVisRange = "{5277, 575}"; + }; + }; 72935B630F6B2D9D0085DD28 /* tga.c */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {741, 10822}}"; @@ -174,37 +307,25 @@ }; 72A7E8F30F5F2001005B83C0 /* iphone_wolf.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {741, 3850}}"; - sepNavSelRange = "{1009, 0}"; - sepNavVisRange = "{0, 1316}"; + sepNavIntBoundsRect = "{{0, 0}, {741, 3682}}"; + sepNavSelRange = "{742, 0}"; + sepNavVisRange = "{0, 1321}"; }; }; 72A7E8F60F5F2063005B83C0 /* iphone_menus.c */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {900, 56714}}"; - sepNavSelRange = "{66944, 0}"; - sepNavVisRange = "{62588, 1640}"; + sepNavIntBoundsRect = "{{0, 0}, {2202, 55510}}"; + sepNavSelRange = "{76416, 0}"; + sepNavVisRange = "{75965, 1083}"; }; }; - ED0653B61087719F00E5450B /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 43AF6B940F996DA200777569 /* iphone_sys.m */; - name = "iphone_sys.m: 40"; - rLen = 24; - rLoc = 1419; - rType = 0; - vrLen = 1684; - vrLoc = 771; - }; - ED0653B81087719F00E5450B /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 43AF6B940F996DA200777569 /* iphone_sys.m */; - name = "iphone_sys.m: 40"; - rLen = 24; - rLoc = 1419; - rType = 0; - vrLen = 1684; - vrLoc = 771; + 72B5FF380F7E5C3D00C8A372 /* hud.c */ = { + uiCtxt = { + sepNavFolds = "{\n c = (\n {\n l = \"int * y\";\n r = \"{11911, 11}\";\n s = 1;\n }\n );\n r = \"{0, 16141}\";\n s = 0;\n}"; + sepNavIntBoundsRect = "{{0, 0}, {1061, 7784}}"; + sepNavSelRange = "{2416, 0}"; + sepNavVisRange = "{2009, 1134}"; + }; }; ED0A8CE41069A9CF001E0547 /* wolf3d */ = { isa = PBXExecutable; @@ -217,6 +338,9 @@ configStateDict = { }; customDataFormattersEnabled = 1; + dataTipCustomDataFormattersEnabled = 1; + dataTipShowTypeColumn = 1; + dataTipSortType = 0; debuggerPlugin = GDBDebugging; disassemblyDisplayState = 0; dylibVariantSuffix = ""; @@ -229,6 +353,7 @@ name = wolf3d; savedGlobals = { }; + showTypeColumn = 0; sourceDirectories = ( ); variableFormatDictionary = { @@ -239,24 +364,55 @@ fallbackIsa = XCSourceControlManager; isSCMEnabled = 0; scmConfiguration = { + repositoryNamesForRoots = { + "" = ""; + }; }; }; ED0A8CFA1069A9F5001E0547 /* Code sense */ = { isa = PBXCodeSenseManager; indexTemplatePath = ""; }; + ED0A8D0A1069ACA8001E0547 /* arialGlyphRects.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {741, 1512}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 2920}"; + }; + }; + ED0A8D0B1069ACA8001E0547 /* iphone_alerts.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1651, 884}}"; + sepNavSelRange = "{362, 0}"; + sepNavVisRange = "{0, 419}"; + }; + }; + ED0A8D0C1069ACA8001E0547 /* iphone_alerts.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1061, 1638}}"; + sepNavSelRange = "{1027, 19}"; + sepNavVisRange = "{684, 647}"; + }; + }; ED0A8D0D1069ACA8001E0547 /* iphone_downloadSOD.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {741, 7434}}"; - sepNavSelRange = "{1756, 0}"; - sepNavVisRange = "{1108, 1549}"; + sepNavIntBoundsRect = "{{0, 0}, {966, 7378}}"; + sepNavSelRange = "{5826, 0}"; + sepNavVisRange = "{15863, 1355}"; + }; + }; + ED0A8D0E1069ACA8001E0547 /* iphone_downloadUserMap.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {858, 2856}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{4517, 1352}"; }; }; ED0A8D0F1069ACA8001E0547 /* iphone_mapselector.c */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {948, 6706}}"; - sepNavSelRange = "{7865, 0}"; - sepNavVisRange = "{1577, 1229}"; + sepNavIntBoundsRect = "{{0, 0}, {1061, 6664}}"; + sepNavSelRange = "{10729, 9}"; + sepNavVisRange = "{10370, 764}"; }; }; ED0A8D101069ACA8001E0547 /* iphone_store.h */ = { @@ -268,9 +424,9 @@ }; ED0A8D111069ACA8001E0547 /* iphone_store.m */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {741, 5964}}"; - sepNavSelRange = "{673, 17}"; - sepNavVisRange = "{0, 1394}"; + sepNavIntBoundsRect = "{{0, 0}, {1061, 6118}}"; + sepNavSelRange = "{2402, 13}"; + sepNavVisRange = "{1952, 677}"; }; }; ED2754531085141B009C891E /* PBXTextBookmark */ = { @@ -283,97 +439,6 @@ vrLen = 1878; vrLoc = 10594; }; - ED2754551085141B009C891E /* PlistBookmark */ = { - isa = PlistBookmark; - fRef = 8D1107310486CEB800E47090 /* Info.plist */; - fallbackIsa = PBXBookmark; - isK = 0; - kPath = ( - UIPrerenderedIcon, - ); - name = /Users/greghodges/wolf3dplatinum/wolf3d/code/iphone/Info.plist; - rLen = 0; - rLoc = 2147483647; - }; - ED2754561085141B009C891E /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 7229CE460F6C89F8004123C5 /* EAGLView.m */; - name = "EAGLView.m: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 1878; - vrLoc = 10594; - }; - ED2E5C05106C886700F57B9D /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ED0A8D0D1069ACA8001E0547 /* iphone_downloadSOD.m */; - name = "iphone_downloadSOD.m: 61"; - rLen = 0; - rLoc = 1756; - rType = 0; - vrLen = 1549; - vrLoc = 1108; - }; - ED2E5C06106C886700F57B9D /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ED2E5C07106C886700F57B9D /* OpenTGA.c */; - name = "OpenTGA.c: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 722; - vrLoc = 12240; - }; - ED2E5C07106C886700F57B9D /* OpenTGA.c */ = { - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = OpenTGA.c; - path = /Users/greghodges/Desktop/MyTGAConverter/OpenTGA.c; - sourceTree = ""; - }; - ED2E5C0A106C886700F57B9D /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ED0A8D0D1069ACA8001E0547 /* iphone_downloadSOD.m */; - name = "iphone_downloadSOD.m: 61"; - rLen = 0; - rLoc = 1756; - rType = 0; - vrLen = 1549; - vrLoc = 1108; - }; - ED2E5C0B106C886700F57B9D /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = ED2E5C0C106C886700F57B9D /* OpenTGA.c */; - name = "OpenTGA.c: 1"; - rLen = 0; - rLoc = 0; - rType = 0; - vrLen = 722; - vrLoc = 12240; - }; - ED2E5C0C106C886700F57B9D /* OpenTGA.c */ = { - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = OpenTGA.c; - path = /Users/greghodges/Desktop/MyTGAConverter/OpenTGA.c; - sourceTree = ""; - }; - ED3703CD106C20620059C5F8 /* PlistBookmark */ = { - isa = PlistBookmark; - fRef = ED3703CE106C20620059C5F8; - fallbackIsa = PBXBookmark; - isK = 0; - kPath = ( - ); - rLen = 0; - rLoc = 2147483647; - }; - ED3703CE106C20620059C5F8 = { - isa = PBXFileReference; - lastKnownFileType = folder; - sourceTree = ""; - }; ED45402110B21F0900DCFA32 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 7229CC270F6B3222004123C5 /* wolf_actors.c */; @@ -404,175 +469,256 @@ vrLen = 1205; vrLoc = 0; }; - ED45402410B21F0900DCFA32 /* PBXTextBookmark */ = { + ED89CF4410D0693D006A2D2E /* PBXTextBookmark */ = { isa = PBXTextBookmark; - fRef = 7229CC270F6B3222004123C5 /* wolf_actors.c */; - name = "wolf_actors.c: 5"; - rLen = 0; - rLoc = 84; - rType = 0; - vrLen = 1418; - vrLoc = 0; - }; - ED45402510B21F0900DCFA32 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 7229CE490F6C89F8004123C5 /* wolf3dAppDelegate.m */; - name = "wolf3dAppDelegate.m: 124"; - rLen = 0; - rLoc = 3930; - rType = 0; - vrLen = 1271; - vrLoc = 5119; - }; - ED45402610B21F0900DCFA32 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 7229CE480F6C89F8004123C5 /* wolf3dAppDelegate.h */; - name = "wolf3dAppDelegate.h: 1"; + fRef = ED0A8D0A1069ACA8001E0547 /* arialGlyphRects.h */; + name = "arialGlyphRects.h: 1"; rLen = 0; rLoc = 0; rType = 0; - vrLen = 1205; + vrLen = 2920; vrLoc = 0; }; - ED45402710B21F0900DCFA32 /* PlistBookmark */ = { + ED89CF4610D0693D006A2D2E /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ED0A8D0C1069ACA8001E0547 /* iphone_alerts.m */; + name = "iphone_alerts.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 965; + vrLoc = 868; + }; + ED89CF4710D0693D006A2D2E /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ED0A8D0D1069ACA8001E0547 /* iphone_downloadSOD.m */; + name = "iphone_downloadSOD.m: 185"; + rLen = 0; + rLoc = 5826; + rType = 0; + vrLen = 1355; + vrLoc = 15863; + }; + ED89CF4810D0693D006A2D2E /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ED0A8D0E1069ACA8001E0547 /* iphone_downloadUserMap.m */; + name = "iphone_downloadUserMap.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1352; + vrLoc = 4517; + }; + ED89CF4910D0693D006A2D2E /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ED0A8D0F1069ACA8001E0547 /* iphone_mapselector.c */; + name = "iphone_mapselector.c: 341"; + rLen = 0; + rLoc = 7864; + rType = 0; + vrLen = 1282; + vrLoc = 1549; + }; + ED89F57010DC207800C8A107 /* PlistBookmark */ = { isa = PlistBookmark; fRef = 8D1107310486CEB800E47090 /* Info.plist */; fallbackIsa = PBXBookmark; isK = 0; kPath = ( - UIPrerenderedIcon, ); name = /Users/greghodges/wolf3dplatinum/wolf3d/code/iphone/Info.plist; rLen = 0; rLoc = 2147483647; }; - ED4AC98010742365000706D8 /* PBXTextBookmark */ = { + ED89F58710DC257400C8A107 /* PBXTextBookmark */ = { isa = PBXTextBookmark; - fRef = EDD56B7E10740B7A007C0E16 /* ConvertTGA.c */; - name = "ConvertTGA.c: 1"; + fRef = 72935B2D0F6B2D9D0085DD28 /* cvar.c */; + name = "cvar.c: 286"; rLen = 0; - rLoc = 0; + rLoc = 5889; rType = 0; - vrLen = 1082; - vrLoc = 18055; + vrLen = 937; + vrLoc = 5250; }; - ED4AC98210742365000706D8 /* PBXTextBookmark */ = { + ED89F58F10DC27DD00C8A107 /* PBXTextBookmark */ = { isa = PBXTextBookmark; - fRef = EDD56B7E10740B7A007C0E16 /* ConvertTGA.c */; - name = "ConvertTGA.c: 1"; + fRef = 7229CC340F6B3222004123C5 /* wolf_main.c */; + name = "wolf_main.c: 73"; rLen = 0; - rLoc = 0; + rLoc = 1674; rType = 0; - vrLen = 1082; - vrLoc = 18055; + vrLen = 938; + vrLoc = 1084; }; - ED4AC9AB10743318000706D8 /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 7229CE490F6C89F8004123C5 /* wolf3dAppDelegate.m */; - name = "wolf3dAppDelegate.m: 124"; - rLen = 0; - rLoc = 3930; - rType = 0; - vrLen = 1417; - vrLoc = 3274; - }; - ED4AC9AC10743318000706D8 /* PBXTextBookmark */ = { + ED89F5B010DC406A00C8A107 /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 72A7E8F60F5F2063005B83C0 /* iphone_menus.c */; - name = "iphone_menus.c: 1111"; - rLen = 13; - rLoc = 31543; - rType = 0; - vrLen = 2083; - vrLoc = 30775; - }; - ED845AB1109F5B3500F673AC /* PBXTextBookmark */ = { - isa = PBXTextBookmark; - fRef = 72A7E8F60F5F2063005B83C0 /* iphone_menus.c */; - name = "iphone_menus.c: 2407"; + name = "iphone_menus.c: 2810"; rLen = 0; - rLoc = 66944; + rLoc = 76416; rType = 0; - vrLen = 1640; - vrLoc = 62588; + vrLen = 1083; + vrLoc = 75965; }; - ED845AB2109F5B3500F673AC /* PlistBookmark */ = { + ED89F5B110DC406A00C8A107 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B2E0F6B2D9D0085DD28 /* cvar.h */; + name = "cvar.h: 101"; + rLen = 0; + rLoc = 3022; + rType = 0; + vrLen = 1407; + vrLoc = 2654; + }; + ED89F5B210DC406A00C8A107 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72A7E8F30F5F2001005B83C0 /* iphone_wolf.h */; + name = "iphone_wolf.h: 20"; + rLen = 0; + rLoc = 742; + rType = 0; + vrLen = 1321; + vrLoc = 0; + }; + EDB41E9910DADFF000487A3B /* PlistBookmark */ = { isa = PlistBookmark; - fRef = 8D1107310486CEB800E47090 /* Info.plist */; + fRef = 4364BF3E0F5CB25900F29317 /* dist.plist */; fallbackIsa = PBXBookmark; isK = 0; kPath = ( - UIPrerenderedIcon, ); - name = /Users/greghodges/wolf3dplatinum/wolf3d/code/iphone/Info.plist; + name = /Users/greghodges/wolf3dplatinum/wolf3d/code/iphone/dist.plist; rLen = 0; rLoc = 2147483647; }; - EDAFC5A2109A14EE002C3487 /* PBXTextBookmark */ = { + EDB41E9A10DADFF000487A3B /* PBXTextBookmark */ = { isa = PBXTextBookmark; - fRef = 43E8D2DF0F4FC61E003F09B2 /* iphone_main.c */; - name = "iphone_main.c: 50"; - rLen = 4; - rLoc = 1413; + fRef = 72935B2F0F6B2D9D0085DD28 /* fileio.c */; + name = "fileio.c: 1"; + rLen = 0; + rLoc = 0; rType = 0; - vrLen = 956; - vrLoc = 970; + vrLen = 1148; + vrLoc = 2350; }; - EDD56B7E10740B7A007C0E16 /* ConvertTGA.c */ = { - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = ConvertTGA.c; - path = /Users/greghodges/Desktop/MyTGAConverter/ConvertTGA.c; - sourceTree = ""; + EDB41EAF10DAE14F00487A3B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 43AF6B940F996DA200777569 /* iphone_sys.m */; + name = "iphone_sys.m: 40"; + rLen = 24; + rLoc = 1419; + rType = 0; + vrLen = 2254; + vrLoc = 289; }; - EDDA5A7E107BA97F003F55D3 /* PBXTextBookmark */ = { + EDB41EB110DAE14F00487A3B /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 43CF03090F56D5C200E4A23D /* iphone_loop.c */; name = "iphone_loop.c: 1226"; rLen = 0; rLoc = 28766; rType = 0; - vrLen = 942; - vrLoc = 28216; + vrLen = 1255; + vrLoc = 30135; }; - EDDA5A80107BA97F003F55D3 /* PBXTextBookmark */ = { + EDB41ECB10DAE24C00487A3B /* PBXTextBookmark */ = { isa = PBXTextBookmark; - fRef = ED0A8D0F1069ACA8001E0547 /* iphone_mapselector.c */; - name = "iphone_mapselector.c: 341"; + fRef = 7229CC320F6B3222004123C5 /* wolf_level.h */; + name = "wolf_level.h: 232"; rLen = 0; - rLoc = 7865; + rLoc = 5017; rType = 0; - vrLen = 1229; - vrLoc = 1577; + vrLen = 1538; + vrLoc = 4647; }; - EDDA5A82107BA97F003F55D3 /* PBXTextBookmark */ = { + EDB41EFD10DAEE4800487A3B /* PBXTextBookmark */ = { isa = PBXTextBookmark; - fRef = 43CF03090F56D5C200E4A23D /* iphone_loop.c */; - name = "iphone_loop.c: 1226"; - rLen = 0; - rLoc = 28766; + fRef = 7229CC2E0F6B3222004123C5 /* wolf_client_main.c */; + name = "wolf_client_main.c: 76"; + rLen = 19; + rLoc = 1963; rType = 0; - vrLen = 942; - vrLoc = 28216; + vrLen = 1735; + vrLoc = 1148; }; - EDDA5A83107BA97F003F55D3 /* PBXTextBookmark */ = { + EDB41EFE10DAEE4800487A3B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CC3F0F6B3222004123C5 /* wolf_renderer.c */; + name = "wolf_renderer.c: 72"; + rLen = 0; + rLoc = 2093; + rType = 0; + vrLen = 1527; + vrLoc = 1208; + }; + EDB41F0110DAEE4800487A3B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CC3D0F6B3222004123C5 /* wolf_raycast.c */; + name = "wolf_raycast.c: 92"; + rLen = 0; + rLoc = 2319; + rType = 0; + vrLen = 1398; + vrLoc = 1520; + }; + EDB41F1110DAF0FC00487A3B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CC310F6B3222004123C5 /* wolf_level.c */; + name = "wolf_level.c: 922"; + rLen = 0; + rLoc = 19218; + rType = 0; + vrLen = 1355; + vrLoc = 18618; + }; + EDB41F3610DAF95B00487A3B /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ED0A8D0B1069ACA8001E0547 /* iphone_alerts.h */; + name = "iphone_alerts.h: 17"; + rLen = 0; + rLoc = 362; + rType = 0; + vrLen = 419; + vrLoc = 0; + }; + EDC7BE4810D95AF900DA2765 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ED0A8D101069ACA8001E0547 /* iphone_store.h */; + name = "iphone_store.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1253; + vrLoc = 0; + }; + EDC7BE4910D95AF900DA2765 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ED0A8D111069ACA8001E0547 /* iphone_store.m */; + name = "iphone_store.m: 399"; + rLen = 9; + rLoc = 11914; + rType = 0; + vrLen = 1577; + vrLoc = 11199; + }; + EDFA7075119383080098FFFC /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 43E8D2DF0F4FC61E003F09B2 /* iphone_main.c */; - name = "iphone_main.c: 272"; + name = "iphone_main.c: 207"; rLen = 0; - rLoc = 7878; + rLoc = 5816; rType = 0; - vrLen = 1550; - vrLoc = 7519; + vrLen = 2013; + vrLoc = 5166; }; - EDDA5A84107BA97F003F55D3 /* PBXTextBookmark */ = { + EDFA7084119384150098FFFC /* PBXTextBookmark */ = { isa = PBXTextBookmark; - fRef = ED0A8D0F1069ACA8001E0547 /* iphone_mapselector.c */; - name = "iphone_mapselector.c: 341"; + fRef = 43E8D2DF0F4FC61E003F09B2 /* iphone_main.c */; + name = "iphone_main.c: 207"; rLen = 0; - rLoc = 7865; + rLoc = 5816; rType = 0; - vrLen = 1229; - vrLoc = 1577; + vrLen = 2013; + vrLoc = 5166; }; } diff --git a/wolf3d/code/iphone/wolf3d.xcodeproj/project.pbxproj b/wolf3d/code/iphone/wolf3d.xcodeproj/project.pbxproj index 2192ff2..b9f1ec0 100644 --- a/wolf3d/code/iphone/wolf3d.xcodeproj/project.pbxproj +++ b/wolf3d/code/iphone/wolf3d.xcodeproj/project.pbxproj @@ -10,9 +10,146 @@ 1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; - 28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 28AD733E0D9D9553002E5188 /* MainWindow.xib */; }; 28FD15000DC6FC520079059D /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 28FD14FF0DC6FC520079059D /* OpenGLES.framework */; }; - 4333CCE80F5CC23E00AE2B6F /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4333CCE70F5CC23E00AE2B6F /* AudioToolbox.framework */; }; + 35048AAA13E07E7800516B10 /* next_arrow.png in Resources */ = {isa = PBXBuildFile; fileRef = 35048AA913E07E7800516B10 /* next_arrow.png */; }; + 35048AAD13E0A03A00516B10 /* credits_bg.png in Resources */ = {isa = PBXBuildFile; fileRef = 35048AAC13E0A03A00516B10 /* credits_bg.png */; }; + 35048ABC13E0D2EA00516B10 /* wolf_bg.png in Resources */ = {isa = PBXBuildFile; fileRef = 35048ABB13E0D2EA00516B10 /* wolf_bg.png */; }; + 35048AC113E0D51600516B10 /* iphone_preset_1.png in Resources */ = {isa = PBXBuildFile; fileRef = 35048ABD13E0D51600516B10 /* iphone_preset_1.png */; }; + 35048ADA13E0E98800516B10 /* difficulty_star1.png in Resources */ = {isa = PBXBuildFile; fileRef = 35048AD613E0E98800516B10 /* difficulty_star1.png */; }; + 35048ADB13E0E98800516B10 /* difficulty_star2.png in Resources */ = {isa = PBXBuildFile; fileRef = 35048AD713E0E98800516B10 /* difficulty_star2.png */; }; + 35048ADC13E0E98800516B10 /* difficulty_star3.png in Resources */ = {isa = PBXBuildFile; fileRef = 35048AD813E0E98800516B10 /* difficulty_star3.png */; }; + 35048ADD13E0E98800516B10 /* difficulty_star4.png in Resources */ = {isa = PBXBuildFile; fileRef = 35048AD913E0E98800516B10 /* difficulty_star4.png */; }; + 350BA59813F34F7900FAE7E4 /* difficulty_head1.png in Resources */ = {isa = PBXBuildFile; fileRef = 350BA59413F34F7900FAE7E4 /* difficulty_head1.png */; }; + 350BA59913F34F7900FAE7E4 /* difficulty_head2.png in Resources */ = {isa = PBXBuildFile; fileRef = 350BA59513F34F7900FAE7E4 /* difficulty_head2.png */; }; + 350BA59A13F34F7900FAE7E4 /* difficulty_head3.png in Resources */ = {isa = PBXBuildFile; fileRef = 350BA59613F34F7900FAE7E4 /* difficulty_head3.png */; }; + 350BA59B13F34F7900FAE7E4 /* difficulty_head4.png in Resources */ = {isa = PBXBuildFile; fileRef = 350BA59713F34F7900FAE7E4 /* difficulty_head4.png */; }; + 350CCF9B13DF8B0E003303AB /* episode_bg.png in Resources */ = {isa = PBXBuildFile; fileRef = 350CCF9A13DF8B0E003303AB /* episode_bg.png */; }; + 350CCF9F13DF8C47003303AB /* back_arrow.png in Resources */ = {isa = PBXBuildFile; fileRef = 350CCF9D13DF8C47003303AB /* back_arrow.png */; }; + 350CCFA013DF8C47003303AB /* difficulty_selection_box.png in Resources */ = {isa = PBXBuildFile; fileRef = 350CCF9E13DF8C47003303AB /* difficulty_selection_box.png */; }; + 350CCFCE13DF8DED003303AB /* mission_bg.png in Resources */ = {isa = PBXBuildFile; fileRef = 350CCFCD13DF8DED003303AB /* mission_bg.png */; }; + 3534C87513E208F400740F63 /* CreditsView~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3534C87313E208F400740F63 /* CreditsView~ipad.xib */; }; + 3534C87613E208F400740F63 /* TriviaView~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3534C87413E208F400740F63 /* TriviaView~ipad.xib */; }; + 3534C88F13E220CE00740F63 /* LegalView~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3534C88E13E220CE00740F63 /* LegalView~ipad.xib */; }; + 3534C95C13E241AB00740F63 /* LevelSelectView~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3534C95B13E241AB00740F63 /* LevelSelectView~ipad.xib */; }; + 3534C95E13E241B100740F63 /* EpisodeView~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3534C95D13E241B100740F63 /* EpisodeView~ipad.xib */; }; + 3534C96A13E2485F00740F63 /* adv_button_frame.png in Resources */ = {isa = PBXBuildFile; fileRef = 3534C96913E2485F00740F63 /* adv_button_frame.png */; }; + 3534C96C13E2486700740F63 /* preset_frame.png in Resources */ = {isa = PBXBuildFile; fileRef = 3534C96B13E2486700740F63 /* preset_frame.png */; }; + 3534C97F13E24E0E00740F63 /* SettingsView~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3534C97E13E24E0E00740F63 /* SettingsView~ipad.xib */; }; + 3555CC4013E2001A006E7D2F /* button_highlight.png in Resources */ = {isa = PBXBuildFile; fileRef = 3555CC3F13E2001A006E7D2F /* button_highlight.png */; }; + 356D306D13F9820400EDDACE /* EpisodeCell~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 356D306C13F9820400EDDACE /* EpisodeCell~ipad.xib */; }; + 356D306F13F9820900EDDACE /* SkillView~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 356D306E13F9820900EDDACE /* SkillView~ipad.xib */; }; + 3589EBA813F5E3DC005FBE56 /* settings_slider_blue~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 3589EBA513F5E3DC005FBE56 /* settings_slider_blue~ipad.png */; }; + 3589EBA913F5E3DC005FBE56 /* settings_slider_grey~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 3589EBA613F5E3DC005FBE56 /* settings_slider_grey~ipad.png */; }; + 3589EBAA13F5E3DC005FBE56 /* settings_slider_white~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 3589EBA713F5E3DC005FBE56 /* settings_slider_white~ipad.png */; }; + 35E6E15513F3172F0010F530 /* adv_btn.png in Resources */ = {isa = PBXBuildFile; fileRef = 35E6E15413F3172F0010F530 /* adv_btn.png */; }; + 35E6E15B13F3182C0010F530 /* settings_divider.png in Resources */ = {isa = PBXBuildFile; fileRef = 35E6E15913F3182C0010F530 /* settings_divider.png */; }; + 35E6E15C13F3182C0010F530 /* up_arrow.png in Resources */ = {isa = PBXBuildFile; fileRef = 35E6E15A13F3182C0010F530 /* up_arrow.png */; }; + 35E6E16013F318420010F530 /* left_chevron.png in Resources */ = {isa = PBXBuildFile; fileRef = 35E6E15E13F318420010F530 /* left_chevron.png */; }; + 35E6E16113F318420010F530 /* right_chevron.png in Resources */ = {isa = PBXBuildFile; fileRef = 35E6E15F13F318420010F530 /* right_chevron.png */; }; + 35E6E16413F318600010F530 /* highlight_bracket.png in Resources */ = {isa = PBXBuildFile; fileRef = 35E6E16313F318600010F530 /* highlight_bracket.png */; }; + 35E6E16913F318A50010F530 /* down_arrow.png in Resources */ = {isa = PBXBuildFile; fileRef = 35E6E16813F318A50010F530 /* down_arrow.png */; }; + 35E6E17513F3196A0010F530 /* star_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 35E6E17413F3196A0010F530 /* star_icon.png */; }; + 35E6E1A213F321A50010F530 /* settings_slider_blue.png in Resources */ = {isa = PBXBuildFile; fileRef = 35E6E19F13F321A50010F530 /* settings_slider_blue.png */; }; + 35E6E1A313F321A50010F530 /* settings_slider_grey.png in Resources */ = {isa = PBXBuildFile; fileRef = 35E6E1A013F321A50010F530 /* settings_slider_grey.png */; }; + 35E6E1A413F321A50010F530 /* settings_slider_white.png in Resources */ = {isa = PBXBuildFile; fileRef = 35E6E1A113F321A50010F530 /* settings_slider_white.png */; }; + 3D10C37B13F310F700DF5856 /* EpisodeCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D10C37A13F310F700DF5856 /* EpisodeCell.xib */; }; + 3D10C39F13F3212A00DF5856 /* WolfSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D10C39E13F3212A00DF5856 /* WolfSlider.m */; }; + 3D10C3E413F33AB700DF5856 /* SkillViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D10C3E313F33AB700DF5856 /* SkillViewController.m */; }; + 3D10C3F213F33D3700DF5856 /* SkillView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D10C3F113F33D3700DF5856 /* SkillView.xib */; }; + 3D24009E13D89BF4009FC7A7 /* iphone_store.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D24009D13D89BF4009FC7A7 /* iphone_store.m */; }; + 3D24FF3913D77577009FC7A7 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D24FF3813D77577009FC7A7 /* StoreKit.framework */; }; + 3D3ED73F13BF554400C5B1DF /* wolf3dViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D3ED73E13BF554400C5B1DF /* wolf3dViewController.m */; }; + 3D3ED8D113BF775B00C5B1DF /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D3ED8D013BF775B00C5B1DF /* OpenAL.framework */; }; + 3D3ED8EB13BF77A800C5B1DF /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D3ED8EA13BF77A800C5B1DF /* QuartzCore.framework */; }; + 3D3ED95B13BF77FA00C5B1DF /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D3ED95A13BF77FA00C5B1DF /* AudioToolbox.framework */; }; + 3D5C0C2713DF6701008ECBD1 /* EpisodeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D5C0C2613DF6701008ECBD1 /* EpisodeView.xib */; }; + 3D5C0C2B13DF6836008ECBD1 /* EpisodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D5C0C2A13DF6836008ECBD1 /* EpisodeViewController.m */; }; + 3D5C0C4B13DF800E008ECBD1 /* LevelSelectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D5C0C4A13DF800E008ECBD1 /* LevelSelectViewController.m */; }; + 3D5C0C4D13DF8084008ECBD1 /* LevelSelectView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D5C0C4C13DF8084008ECBD1 /* LevelSelectView.xib */; }; + 3D5C0C7013DF8920008ECBD1 /* UIFontLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D5C0C6F13DF8920008ECBD1 /* UIFontLabel.m */; }; + 3D5C0CF713DF9A5D008ECBD1 /* CreditsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D5C0CF613DF9A5D008ECBD1 /* CreditsViewController.m */; }; + 3D5C0CFA13DF9A8E008ECBD1 /* LegalViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D5C0CF913DF9A8E008ECBD1 /* LegalViewController.m */; }; + 3D5C0D0A13DF9B41008ECBD1 /* main_bg.png in Resources */ = {isa = PBXBuildFile; fileRef = 3D5C0D0913DF9B41008ECBD1 /* main_bg.png */; }; + 3D5C0D2C13DF9D9B008ECBD1 /* MainMenuView~ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D5C0D2B13DF9D9B008ECBD1 /* MainMenuView~ipad.xib */; }; + 3D5C0D3113DFA0DF008ECBD1 /* CreditsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D5C0D3013DFA0DF008ECBD1 /* CreditsView.xib */; }; + 3D5C0D3313DFA0EA008ECBD1 /* LegalView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D5C0D3213DFA0EA008ECBD1 /* LegalView.xib */; }; + 3D5C0DE213E05D4D008ECBD1 /* TriviaViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D5C0DE113E05D4D008ECBD1 /* TriviaViewController.m */; }; + 3D5C0DF513E063F5008ECBD1 /* TriviaView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D5C0DF413E063F5008ECBD1 /* TriviaView.xib */; }; + 3D5C0F8213E0FC46008ECBD1 /* iphone_preset_2.png in Resources */ = {isa = PBXBuildFile; fileRef = 3D5C0F7F13E0FC46008ECBD1 /* iphone_preset_2.png */; }; + 3D5C0F8313E0FC46008ECBD1 /* iphone_preset_3.png in Resources */ = {isa = PBXBuildFile; fileRef = 3D5C0F8013E0FC46008ECBD1 /* iphone_preset_3.png */; }; + 3D5C0F8413E0FC46008ECBD1 /* iphone_preset_4.png in Resources */ = {isa = PBXBuildFile; fileRef = 3D5C0F8113E0FC46008ECBD1 /* iphone_preset_4.png */; }; + 3D5C0FD813E10204008ECBD1 /* MissionTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D5C0FD713E10204008ECBD1 /* MissionTableViewCell.m */; }; + 3D86CF8D13DDE51800186487 /* MainMenuView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D86CF8A13DDE51800186487 /* MainMenuView.xib */; }; + 3D86CF8E13DDE51800186487 /* MainMenuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D86CF8C13DDE51800186487 /* MainMenuViewController.m */; }; + 3D86D68B13DF172B00186487 /* POSITYPE-idSettler10v2.otf in Resources */ = {isa = PBXBuildFile; fileRef = 3D86D68A13DF172B00186487 /* POSITYPE-idSettler10v2.otf */; }; + 3DB8734113FACAD20050FB2A /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DB8734013FACAD20050FB2A /* AVFoundation.framework */; }; + 3DB873FF13FB3C0E0050FB2A /* wondering.caf in Resources */ = {isa = PBXBuildFile; fileRef = 3DB873FE13FB3C0E0050FB2A /* wondering.caf */; }; + 3DBC68B313F58BCC002A8253 /* UITableViewScrolling.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DBC68B213F58BCC002A8253 /* UITableViewScrolling.m */; }; + 3DBC68E713F599B4002A8253 /* settings_line_art.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DBC68E613F599B4002A8253 /* settings_line_art.png */; }; + 3DDD3A2113DF228500967735 /* SettingsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3DDD3A2013DF228500967735 /* SettingsView.xib */; }; + 3DDD3A2413DF231100967735 /* UIFontButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DDD3A2313DF231100967735 /* UIFontButton.m */; }; + 3DE8828613E35E5000C95AE8 /* arialImageLAL_white-alpha.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8824713E35E5000C95AE8 /* arialImageLAL_white-alpha.png */; }; + 3DE8828713E35E5000C95AE8 /* arialImageLAL.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8824813E35E5000C95AE8 /* arialImageLAL.png */; }; + 3DE8828813E35E5000C95AE8 /* button_back.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8824913E35E5000C95AE8 /* button_back.png */; }; + 3DE8828913E35E5000C95AE8 /* button_downloads.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8824A13E35E5000C95AE8 /* button_downloads.png */; }; + 3DE8828A13E35E5000C95AE8 /* button_knife.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8824B13E35E5000C95AE8 /* button_knife.png */; }; + 3DE8828B13E35E5000C95AE8 /* button_left.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8824C13E35E5000C95AE8 /* button_left.png */; }; + 3DE8828C13E35E5000C95AE8 /* button_more.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8824D13E35E5000C95AE8 /* button_more.png */; }; + 3DE8828D13E35E5000C95AE8 /* button_new.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8824E13E35E5000C95AE8 /* button_new.png */; }; + 3DE8828E13E35E5000C95AE8 /* button_pistol.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8824F13E35E5000C95AE8 /* button_pistol.png */; }; + 3DE8828F13E35E5000C95AE8 /* button_resume.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8825013E35E5000C95AE8 /* button_resume.png */; }; + 3DE8829013E35E5000C95AE8 /* button_right.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8825113E35E5000C95AE8 /* button_right.png */; }; + 3DE8829113E35E5000C95AE8 /* button_settings.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8825213E35E5000C95AE8 /* button_settings.png */; }; + 3DE8829213E35E5000C95AE8 /* button_trivia.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8825313E35E5000C95AE8 /* button_trivia.png */; }; + 3DE8829313E35E5000C95AE8 /* button_web.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8825413E35E5000C95AE8 /* button_web.png */; }; + 3DE8829413E35E5000C95AE8 /* diractional_01.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8825513E35E5000C95AE8 /* diractional_01.png */; }; + 3DE8829513E35E5000C95AE8 /* diractional_02.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8825613E35E5000C95AE8 /* diractional_02.png */; }; + 3DE8829613E35E5000C95AE8 /* diractional_03.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8825713E35E5000C95AE8 /* diractional_03.png */; }; + 3DE8829A13E35E5000C95AE8 /* GODMODEFACE0PIC.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8825B13E35E5000C95AE8 /* GODMODEFACE0PIC.png */; }; + 3DE8829B13E35E5000C95AE8 /* GODMODEFACE1PIC.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8825C13E35E5000C95AE8 /* GODMODEFACE1PIC.png */; }; + 3DE8829C13E35E5000C95AE8 /* GODMODEFACE2PIC.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8825D13E35E5000C95AE8 /* GODMODEFACE2PIC.png */; }; + 3DE8829D13E35E5000C95AE8 /* header_advanced.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8825E13E35E5000C95AE8 /* header_advanced.png */; }; + 3DE8829E13E35E5000C95AE8 /* header_ep1.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8825F13E35E5000C95AE8 /* header_ep1.png */; }; + 3DE8829F13E35E5000C95AE8 /* header_ep2.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8826013E35E5000C95AE8 /* header_ep2.png */; }; + 3DE882A013E35E5000C95AE8 /* header_ep3.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8826113E35E5000C95AE8 /* header_ep3.png */; }; + 3DE882A113E35E5000C95AE8 /* header_ep4.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8826213E35E5000C95AE8 /* header_ep4.png */; }; + 3DE882A213E35E5000C95AE8 /* header_ep5.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8826313E35E5000C95AE8 /* header_ep5.png */; }; + 3DE882A313E35E5000C95AE8 /* header_ep6.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8826413E35E5000C95AE8 /* header_ep6.png */; }; + 3DE882A413E35E5000C95AE8 /* header_ep7.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8826513E35E5000C95AE8 /* header_ep7.png */; }; + 3DE882A513E35E5000C95AE8 /* header_ep8.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8826613E35E5000C95AE8 /* header_ep8.png */; }; + 3DE882A613E35E5000C95AE8 /* header_ep9.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8826713E35E5000C95AE8 /* header_ep9.png */; }; + 3DE882A713E35E5000C95AE8 /* header_ep10.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8826813E35E5000C95AE8 /* header_ep10.png */; }; + 3DE882A813E35E5000C95AE8 /* header_ep11.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8826913E35E5000C95AE8 /* header_ep11.png */; }; + 3DE882A913E35E5000C95AE8 /* intermission.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8826A13E35E5000C95AE8 /* intermission.png */; }; + 3DE882AA13E35E5000C95AE8 /* iphone_image.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8826B13E35E5000C95AE8 /* iphone_image.png */; }; + 3DE882AB13E35E5000C95AE8 /* kills_shadow.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8826C13E35E5000C95AE8 /* kills_shadow.png */; }; + 3DE882AC13E35E5000C95AE8 /* kills.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8826D13E35E5000C95AE8 /* kills.png */; }; + 3DE882AD13E35E5000C95AE8 /* map_background.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8826E13E35E5000C95AE8 /* map_background.png */; }; + 3DE882AE13E35E5000C95AE8 /* map.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8826F13E35E5000C95AE8 /* map.png */; }; + 3DE882AF13E35E5000C95AE8 /* menu_bar.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8827013E35E5000C95AE8 /* menu_bar.png */; }; + 3DE882B013E35E5000C95AE8 /* menu.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8827113E35E5000C95AE8 /* menu.png */; }; + 3DE882B113E35E5000C95AE8 /* music_off.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8827213E35E5000C95AE8 /* music_off.png */; }; + 3DE882B213E35E5000C95AE8 /* music_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8827313E35E5000C95AE8 /* music_on.png */; }; + 3DE882B313E35E5000C95AE8 /* partime_shadow.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8827413E35E5000C95AE8 /* partime_shadow.png */; }; + 3DE882B413E35E5000C95AE8 /* partime.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8827513E35E5000C95AE8 /* partime.png */; }; + 3DE882B513E35E5000C95AE8 /* secrets_shadow.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8827613E35E5000C95AE8 /* secrets_shadow.png */; }; + 3DE882B613E35E5000C95AE8 /* secrets.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8827713E35E5000C95AE8 /* secrets.png */; }; + 3DE882B713E35E5000C95AE8 /* shoot.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8827813E35E5000C95AE8 /* shoot.png */; }; + 3DE882B813E35E5000C95AE8 /* side_2_side.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8827913E35E5000C95AE8 /* side_2_side.png */; }; + 3DE882B913E35E5000C95AE8 /* slider_bar_rainbow.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8827A13E35E5000C95AE8 /* slider_bar_rainbow.png */; }; + 3DE882BA13E35E5000C95AE8 /* slider_bar_underlay.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8827B13E35E5000C95AE8 /* slider_bar_underlay.png */; }; + 3DE882BB13E35E5000C95AE8 /* slider_bar.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8827C13E35E5000C95AE8 /* slider_bar.png */; }; + 3DE882BC13E35E5000C95AE8 /* slider_knob.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8827D13E35E5000C95AE8 /* slider_knob.png */; }; + 3DE882BD13E35E5000C95AE8 /* stats_large.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8827E13E35E5000C95AE8 /* stats_large.png */; }; + 3DE882BE13E35E5000C95AE8 /* stats.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8827F13E35E5000C95AE8 /* stats.png */; }; + 3DE882BF13E35E5000C95AE8 /* status_hud.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8828013E35E5000C95AE8 /* status_hud.png */; }; + 3DE882C013E35E5000C95AE8 /* submenus_background_image.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8828113E35E5000C95AE8 /* submenus_background_image.png */; }; + 3DE882C113E35E5000C95AE8 /* treasure_shadow.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8828213E35E5000C95AE8 /* treasure_shadow.png */; }; + 3DE882C213E35E5000C95AE8 /* treasure.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8828313E35E5000C95AE8 /* treasure.png */; }; + 3DE882C313E35E5000C95AE8 /* up_down.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8828413E35E5000C95AE8 /* up_down.png */; }; + 3DE882C413E35E5000C95AE8 /* victory_256.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE8828513E35E5000C95AE8 /* victory_256.png */; }; + 3DF1804413F44D6700ED668A /* episode_bracket.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DF1804213F44D6700ED668A /* episode_bracket.png */; }; + 3DF1804513F44D6700ED668A /* episode_divider.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DF1804313F44D6700ED668A /* episode_divider.png */; }; 4364BF3F0F5CB25900F29317 /* dist.plist in Resources */ = {isa = PBXBuildFile; fileRef = 4364BF3E0F5CB25900F29317 /* dist.plist */; }; 43AE7E9F0F67387500B2F562 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43AE7E9E0F67387500B2F562 /* CoreGraphics.framework */; }; 43AF6B950F996DA200777569 /* iphone_sys.m in Sources */ = {isa = PBXBuildFile; fileRef = 43AF6B940F996DA200777569 /* iphone_sys.m */; }; @@ -21,8 +158,6 @@ 43CF030A0F56D5C200E4A23D /* iphone_loop.c in Sources */ = {isa = PBXBuildFile; fileRef = 43CF03090F56D5C200E4A23D /* iphone_loop.c */; }; 43E341290F9BB4B6003C5D00 /* wolf3dlite_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 43E341280F9BB4B6003C5D00 /* wolf3dlite_icon.png */; }; 43E8D2E10F4FC61E003F09B2 /* iphone_main.c in Sources */ = {isa = PBXBuildFile; fileRef = 43E8D2DF0F4FC61E003F09B2 /* iphone_main.c */; }; - 43E8D4E00F51B48B003F09B2 /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43E8D4DF0F51B48B003F09B2 /* OpenAL.framework */; }; - 720EBBAE0F82E0BB003F989A /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 720EBBAD0F82E0BB003F989A /* QuartzCore.framework */; }; 7229CC460F6B3222004123C5 /* wolf_actor_ai.c in Sources */ = {isa = PBXBuildFile; fileRef = 7229CC250F6B3222004123C5 /* wolf_actor_ai.c */; }; 7229CC470F6B3222004123C5 /* wolf_actors.c in Sources */ = {isa = PBXBuildFile; fileRef = 7229CC270F6B3222004123C5 /* wolf_actors.c */; }; 7229CC480F6B3222004123C5 /* wolf_ai_com.c in Sources */ = {isa = PBXBuildFile; fileRef = 7229CC290F6B3222004123C5 /* wolf_ai_com.c */; }; @@ -95,11 +230,16 @@ 72935BA20F6B2D9D0085DD28 /* zmem.c in Sources */ = {isa = PBXBuildFile; fileRef = 72935B720F6B2D9D0085DD28 /* zmem.c */; }; 72A7E8F70F5F2063005B83C0 /* iphone_menus.c in Sources */ = {isa = PBXBuildFile; fileRef = 72A7E8F60F5F2063005B83C0 /* iphone_menus.c */; }; 72B5FF390F7E5C3D00C8A372 /* hud.c in Sources */ = {isa = PBXBuildFile; fileRef = 72B5FF380F7E5C3D00C8A372 /* hud.c */; }; + C81E11A913E2112100B1049A /* SettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C81E11A813E2112100B1049A /* SettingsViewController.m */; }; + C81E121C13E225FB00B1049A /* slider.png in Resources */ = {isa = PBXBuildFile; fileRef = C81E121B13E225FB00B1049A /* slider.png */; }; + C8D1CFE013E22A6700F0EAC6 /* Default-Portrait~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = C8D1CFDF13E22A6700F0EAC6 /* Default-Portrait~ipad.png */; }; + C8D1CFE413E22B5200F0EAC6 /* WOLF_57.png in Resources */ = {isa = PBXBuildFile; fileRef = C8D1CFE313E22B5200F0EAC6 /* WOLF_57.png */; }; + C8D1CFE613E22B5B00F0EAC6 /* WOLF_114.png in Resources */ = {isa = PBXBuildFile; fileRef = C8D1CFE513E22B5B00F0EAC6 /* WOLF_114.png */; }; + C8D1CFE813E22B6800F0EAC6 /* WOLF_72.png in Resources */ = {isa = PBXBuildFile; fileRef = C8D1CFE713E22B6800F0EAC6 /* WOLF_72.png */; }; ED0A8D121069ACA8001E0547 /* iphone_alerts.m in Sources */ = {isa = PBXBuildFile; fileRef = ED0A8D0C1069ACA8001E0547 /* iphone_alerts.m */; }; ED0A8D131069ACA8001E0547 /* iphone_downloadSOD.m in Sources */ = {isa = PBXBuildFile; fileRef = ED0A8D0D1069ACA8001E0547 /* iphone_downloadSOD.m */; }; ED0A8D141069ACA8001E0547 /* iphone_downloadUserMap.m in Sources */ = {isa = PBXBuildFile; fileRef = ED0A8D0E1069ACA8001E0547 /* iphone_downloadUserMap.m */; }; ED0A8D151069ACA8001E0547 /* iphone_mapselector.c in Sources */ = {isa = PBXBuildFile; fileRef = ED0A8D0F1069ACA8001E0547 /* iphone_mapselector.c */; }; - ED0A8D161069ACA8001E0547 /* iphone_store.m in Sources */ = {isa = PBXBuildFile; fileRef = ED0A8D111069ACA8001E0547 /* iphone_store.m */; }; ED3703B4106C1CD40059C5F8 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED3703B3106C1CD40059C5F8 /* SystemConfiguration.framework */; }; /* End PBXBuildFile section */ @@ -107,11 +247,161 @@ 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 1D6058910D05DD3D006BFB54 /* wolf3d.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = wolf3d.app; sourceTree = BUILT_PRODUCTS_DIR; }; 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - 28AD733E0D9D9553002E5188 /* MainWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainWindow.xib; sourceTree = ""; }; 28FD14FF0DC6FC520079059D /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 32CA4F630368D1EE00C91783 /* wolf3d_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wolf3d_Prefix.pch; sourceTree = ""; }; - 4333CCE70F5CC23E00AE2B6F /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; + 35048AA913E07E7800516B10 /* next_arrow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = next_arrow.png; path = ../../menu_art/next_arrow.png; sourceTree = SOURCE_ROOT; }; + 35048AAC13E0A03A00516B10 /* credits_bg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = credits_bg.png; path = ../../menu_art/credits_bg.png; sourceTree = SOURCE_ROOT; }; + 35048ABB13E0D2EA00516B10 /* wolf_bg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = wolf_bg.png; path = ../../menu_art/wolf_bg.png; sourceTree = SOURCE_ROOT; }; + 35048ABD13E0D51600516B10 /* iphone_preset_1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = iphone_preset_1.png; path = ../../menu_art/iphone_preset_1.png; sourceTree = SOURCE_ROOT; }; + 35048AD613E0E98800516B10 /* difficulty_star1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = difficulty_star1.png; path = ../../menu_art/difficulty_star1.png; sourceTree = SOURCE_ROOT; }; + 35048AD713E0E98800516B10 /* difficulty_star2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = difficulty_star2.png; path = ../../menu_art/difficulty_star2.png; sourceTree = SOURCE_ROOT; }; + 35048AD813E0E98800516B10 /* difficulty_star3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = difficulty_star3.png; path = ../../menu_art/difficulty_star3.png; sourceTree = SOURCE_ROOT; }; + 35048AD913E0E98800516B10 /* difficulty_star4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = difficulty_star4.png; path = ../../menu_art/difficulty_star4.png; sourceTree = SOURCE_ROOT; }; + 350BA59413F34F7900FAE7E4 /* difficulty_head1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = difficulty_head1.png; path = ../../menu_art/difficulty_head1.png; sourceTree = SOURCE_ROOT; }; + 350BA59513F34F7900FAE7E4 /* difficulty_head2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = difficulty_head2.png; path = ../../menu_art/difficulty_head2.png; sourceTree = SOURCE_ROOT; }; + 350BA59613F34F7900FAE7E4 /* difficulty_head3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = difficulty_head3.png; path = ../../menu_art/difficulty_head3.png; sourceTree = SOURCE_ROOT; }; + 350BA59713F34F7900FAE7E4 /* difficulty_head4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = difficulty_head4.png; path = ../../menu_art/difficulty_head4.png; sourceTree = SOURCE_ROOT; }; + 350CCF9A13DF8B0E003303AB /* episode_bg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = episode_bg.png; path = ../../menu_art/episode_bg.png; sourceTree = SOURCE_ROOT; }; + 350CCF9D13DF8C47003303AB /* back_arrow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = back_arrow.png; path = ../../menu_art/back_arrow.png; sourceTree = SOURCE_ROOT; }; + 350CCF9E13DF8C47003303AB /* difficulty_selection_box.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = difficulty_selection_box.png; path = ../../menu_art/difficulty_selection_box.png; sourceTree = SOURCE_ROOT; }; + 350CCFCD13DF8DED003303AB /* mission_bg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mission_bg.png; path = ../../menu_art/mission_bg.png; sourceTree = SOURCE_ROOT; }; + 3534C87313E208F400740F63 /* CreditsView~ipad.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = "CreditsView~ipad.xib"; path = "Resources-iPad/CreditsView~ipad.xib"; sourceTree = ""; }; + 3534C87413E208F400740F63 /* TriviaView~ipad.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = "TriviaView~ipad.xib"; path = "Resources-iPad/TriviaView~ipad.xib"; sourceTree = ""; }; + 3534C88E13E220CE00740F63 /* LegalView~ipad.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = "LegalView~ipad.xib"; path = "Resources-iPad/LegalView~ipad.xib"; sourceTree = ""; }; + 3534C95B13E241AB00740F63 /* LevelSelectView~ipad.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = "LevelSelectView~ipad.xib"; path = "Resources-iPad/LevelSelectView~ipad.xib"; sourceTree = ""; }; + 3534C95D13E241B100740F63 /* EpisodeView~ipad.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = "EpisodeView~ipad.xib"; path = "Resources-iPad/EpisodeView~ipad.xib"; sourceTree = ""; }; + 3534C96913E2485F00740F63 /* adv_button_frame.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = adv_button_frame.png; path = ../../menu_art/adv_button_frame.png; sourceTree = SOURCE_ROOT; }; + 3534C96B13E2486700740F63 /* preset_frame.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = preset_frame.png; path = ../../menu_art/preset_frame.png; sourceTree = SOURCE_ROOT; }; + 3534C97E13E24E0E00740F63 /* SettingsView~ipad.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = "SettingsView~ipad.xib"; path = "Resources-iPad/SettingsView~ipad.xib"; sourceTree = ""; }; + 3555CC3F13E2001A006E7D2F /* button_highlight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = button_highlight.png; path = ../../menu_art/button_highlight.png; sourceTree = SOURCE_ROOT; }; + 356D306C13F9820400EDDACE /* EpisodeCell~ipad.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = "EpisodeCell~ipad.xib"; path = "Resources-iPad/EpisodeCell~ipad.xib"; sourceTree = ""; }; + 356D306E13F9820900EDDACE /* SkillView~ipad.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = "SkillView~ipad.xib"; path = "Resources-iPad/SkillView~ipad.xib"; sourceTree = ""; }; + 3589EBA513F5E3DC005FBE56 /* settings_slider_blue~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "settings_slider_blue~ipad.png"; path = "../../menu_art/settings_slider_blue~ipad.png"; sourceTree = SOURCE_ROOT; }; + 3589EBA613F5E3DC005FBE56 /* settings_slider_grey~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "settings_slider_grey~ipad.png"; path = "../../menu_art/settings_slider_grey~ipad.png"; sourceTree = SOURCE_ROOT; }; + 3589EBA713F5E3DC005FBE56 /* settings_slider_white~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "settings_slider_white~ipad.png"; path = "../../menu_art/settings_slider_white~ipad.png"; sourceTree = SOURCE_ROOT; }; + 35E6E15413F3172F0010F530 /* adv_btn.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = adv_btn.png; path = ../../menu_art/adv_btn.png; sourceTree = SOURCE_ROOT; }; + 35E6E15913F3182C0010F530 /* settings_divider.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = settings_divider.png; path = ../../menu_art/settings_divider.png; sourceTree = SOURCE_ROOT; }; + 35E6E15A13F3182C0010F530 /* up_arrow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = up_arrow.png; path = ../../menu_art/up_arrow.png; sourceTree = SOURCE_ROOT; }; + 35E6E15E13F318420010F530 /* left_chevron.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = left_chevron.png; path = ../../menu_art/left_chevron.png; sourceTree = SOURCE_ROOT; }; + 35E6E15F13F318420010F530 /* right_chevron.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = right_chevron.png; path = ../../menu_art/right_chevron.png; sourceTree = SOURCE_ROOT; }; + 35E6E16313F318600010F530 /* highlight_bracket.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = highlight_bracket.png; path = ../../menu_art/highlight_bracket.png; sourceTree = SOURCE_ROOT; }; + 35E6E16813F318A50010F530 /* down_arrow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = down_arrow.png; path = ../../menu_art/down_arrow.png; sourceTree = SOURCE_ROOT; }; + 35E6E17413F3196A0010F530 /* star_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = star_icon.png; path = ../../menu_art/star_icon.png; sourceTree = SOURCE_ROOT; }; + 35E6E19F13F321A50010F530 /* settings_slider_blue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = settings_slider_blue.png; path = ../../menu_art/settings_slider_blue.png; sourceTree = SOURCE_ROOT; }; + 35E6E1A013F321A50010F530 /* settings_slider_grey.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = settings_slider_grey.png; path = ../../menu_art/settings_slider_grey.png; sourceTree = SOURCE_ROOT; }; + 35E6E1A113F321A50010F530 /* settings_slider_white.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = settings_slider_white.png; path = ../../menu_art/settings_slider_white.png; sourceTree = SOURCE_ROOT; }; + 3D10C37A13F310F700DF5856 /* EpisodeCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = EpisodeCell.xib; sourceTree = ""; }; + 3D10C39D13F3212A00DF5856 /* WolfSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WolfSlider.h; sourceTree = ""; }; + 3D10C39E13F3212A00DF5856 /* WolfSlider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WolfSlider.m; sourceTree = ""; }; + 3D10C3E213F33AB700DF5856 /* SkillViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkillViewController.h; sourceTree = ""; }; + 3D10C3E313F33AB700DF5856 /* SkillViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SkillViewController.m; sourceTree = ""; }; + 3D10C3F113F33D3700DF5856 /* SkillView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SkillView.xib; sourceTree = ""; }; + 3D24009D13D89BF4009FC7A7 /* iphone_store.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iphone_store.m; sourceTree = ""; }; + 3D24FF3813D77577009FC7A7 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; }; + 3D3ED73D13BF554400C5B1DF /* wolf3dViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wolf3dViewController.h; sourceTree = ""; }; + 3D3ED73E13BF554400C5B1DF /* wolf3dViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = wolf3dViewController.m; sourceTree = ""; }; + 3D3ED8D013BF775B00C5B1DF /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = System/Library/Frameworks/OpenAL.framework; sourceTree = SDKROOT; }; + 3D3ED8EA13BF77A800C5B1DF /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; + 3D3ED95A13BF77FA00C5B1DF /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; + 3D5C0C2613DF6701008ECBD1 /* EpisodeView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = EpisodeView.xib; sourceTree = ""; }; + 3D5C0C2913DF6836008ECBD1 /* EpisodeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EpisodeViewController.h; sourceTree = ""; }; + 3D5C0C2A13DF6836008ECBD1 /* EpisodeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EpisodeViewController.m; sourceTree = ""; }; + 3D5C0C4913DF800E008ECBD1 /* LevelSelectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LevelSelectViewController.h; sourceTree = ""; }; + 3D5C0C4A13DF800E008ECBD1 /* LevelSelectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LevelSelectViewController.m; sourceTree = ""; }; + 3D5C0C4C13DF8084008ECBD1 /* LevelSelectView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = LevelSelectView.xib; sourceTree = ""; }; + 3D5C0C6E13DF88F8008ECBD1 /* UIFontLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIFontLabel.h; sourceTree = ""; }; + 3D5C0C6F13DF8920008ECBD1 /* UIFontLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIFontLabel.m; sourceTree = ""; }; + 3D5C0CF513DF9A5D008ECBD1 /* CreditsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CreditsViewController.h; sourceTree = ""; }; + 3D5C0CF613DF9A5D008ECBD1 /* CreditsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CreditsViewController.m; sourceTree = ""; }; + 3D5C0CF813DF9A8E008ECBD1 /* LegalViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LegalViewController.h; sourceTree = ""; }; + 3D5C0CF913DF9A8E008ECBD1 /* LegalViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LegalViewController.m; sourceTree = ""; }; + 3D5C0D0913DF9B41008ECBD1 /* main_bg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = main_bg.png; path = ../../menu_art/main_bg.png; sourceTree = SOURCE_ROOT; }; + 3D5C0D2B13DF9D9B008ECBD1 /* MainMenuView~ipad.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = "MainMenuView~ipad.xib"; path = "Resources-iPad/MainMenuView~ipad.xib"; sourceTree = ""; }; + 3D5C0D3013DFA0DF008ECBD1 /* CreditsView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CreditsView.xib; sourceTree = ""; }; + 3D5C0D3213DFA0EA008ECBD1 /* LegalView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = LegalView.xib; sourceTree = ""; }; + 3D5C0DE013E05D4D008ECBD1 /* TriviaViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TriviaViewController.h; sourceTree = ""; }; + 3D5C0DE113E05D4D008ECBD1 /* TriviaViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TriviaViewController.m; sourceTree = ""; }; + 3D5C0DF413E063F5008ECBD1 /* TriviaView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TriviaView.xib; sourceTree = ""; }; + 3D5C0F7F13E0FC46008ECBD1 /* iphone_preset_2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = iphone_preset_2.png; path = ../../menu_art/iphone_preset_2.png; sourceTree = SOURCE_ROOT; }; + 3D5C0F8013E0FC46008ECBD1 /* iphone_preset_3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = iphone_preset_3.png; path = ../../menu_art/iphone_preset_3.png; sourceTree = SOURCE_ROOT; }; + 3D5C0F8113E0FC46008ECBD1 /* iphone_preset_4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = iphone_preset_4.png; path = ../../menu_art/iphone_preset_4.png; sourceTree = SOURCE_ROOT; }; + 3D5C0FD613E10204008ECBD1 /* MissionTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MissionTableViewCell.h; sourceTree = ""; }; + 3D5C0FD713E10204008ECBD1 /* MissionTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MissionTableViewCell.m; sourceTree = ""; }; + 3D86CF8A13DDE51800186487 /* MainMenuView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainMenuView.xib; sourceTree = ""; }; + 3D86CF8B13DDE51800186487 /* MainMenuViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainMenuViewController.h; sourceTree = ""; }; + 3D86CF8C13DDE51800186487 /* MainMenuViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainMenuViewController.m; sourceTree = ""; }; + 3D86D68A13DF172B00186487 /* POSITYPE-idSettler10v2.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "POSITYPE-idSettler10v2.otf"; sourceTree = ""; }; + 3DB8734013FACAD20050FB2A /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; + 3DB873FE13FB3C0E0050FB2A /* wondering.caf */ = {isa = PBXFileReference; lastKnownFileType = file; path = wondering.caf; sourceTree = ""; }; + 3DBC68B113F58BCC002A8253 /* UITableViewScrolling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UITableViewScrolling.h; sourceTree = ""; }; + 3DBC68B213F58BCC002A8253 /* UITableViewScrolling.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UITableViewScrolling.m; sourceTree = ""; }; + 3DBC68E613F599B4002A8253 /* settings_line_art.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = settings_line_art.png; path = ../../menu_art/settings_line_art.png; sourceTree = SOURCE_ROOT; }; + 3DDD3A2013DF228500967735 /* SettingsView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SettingsView.xib; sourceTree = ""; }; + 3DDD3A2313DF231100967735 /* UIFontButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIFontButton.m; sourceTree = ""; }; + 3DDD3A2513DF232900967735 /* UIFontButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIFontButton.h; sourceTree = ""; }; + 3DE8824713E35E5000C95AE8 /* arialImageLAL_white-alpha.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "arialImageLAL_white-alpha.png"; path = "../../menu_art/arialImageLAL_white-alpha.png"; sourceTree = SOURCE_ROOT; }; + 3DE8824813E35E5000C95AE8 /* arialImageLAL.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = arialImageLAL.png; path = ../../menu_art/arialImageLAL.png; sourceTree = SOURCE_ROOT; }; + 3DE8824913E35E5000C95AE8 /* button_back.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = button_back.png; path = ../../menu_art/button_back.png; sourceTree = SOURCE_ROOT; }; + 3DE8824A13E35E5000C95AE8 /* button_downloads.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = button_downloads.png; path = ../../menu_art/button_downloads.png; sourceTree = SOURCE_ROOT; }; + 3DE8824B13E35E5000C95AE8 /* button_knife.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = button_knife.png; path = ../../menu_art/button_knife.png; sourceTree = SOURCE_ROOT; }; + 3DE8824C13E35E5000C95AE8 /* button_left.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = button_left.png; path = ../../menu_art/button_left.png; sourceTree = SOURCE_ROOT; }; + 3DE8824D13E35E5000C95AE8 /* button_more.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = button_more.png; path = ../../menu_art/button_more.png; sourceTree = SOURCE_ROOT; }; + 3DE8824E13E35E5000C95AE8 /* button_new.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = button_new.png; path = ../../menu_art/button_new.png; sourceTree = SOURCE_ROOT; }; + 3DE8824F13E35E5000C95AE8 /* button_pistol.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = button_pistol.png; path = ../../menu_art/button_pistol.png; sourceTree = SOURCE_ROOT; }; + 3DE8825013E35E5000C95AE8 /* button_resume.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = button_resume.png; path = ../../menu_art/button_resume.png; sourceTree = SOURCE_ROOT; }; + 3DE8825113E35E5000C95AE8 /* button_right.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = button_right.png; path = ../../menu_art/button_right.png; sourceTree = SOURCE_ROOT; }; + 3DE8825213E35E5000C95AE8 /* button_settings.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = button_settings.png; path = ../../menu_art/button_settings.png; sourceTree = SOURCE_ROOT; }; + 3DE8825313E35E5000C95AE8 /* button_trivia.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = button_trivia.png; path = ../../menu_art/button_trivia.png; sourceTree = SOURCE_ROOT; }; + 3DE8825413E35E5000C95AE8 /* button_web.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = button_web.png; path = ../../menu_art/button_web.png; sourceTree = SOURCE_ROOT; }; + 3DE8825513E35E5000C95AE8 /* diractional_01.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = diractional_01.png; path = ../../menu_art/diractional_01.png; sourceTree = SOURCE_ROOT; }; + 3DE8825613E35E5000C95AE8 /* diractional_02.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = diractional_02.png; path = ../../menu_art/diractional_02.png; sourceTree = SOURCE_ROOT; }; + 3DE8825713E35E5000C95AE8 /* diractional_03.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = diractional_03.png; path = ../../menu_art/diractional_03.png; sourceTree = SOURCE_ROOT; }; + 3DE8825B13E35E5000C95AE8 /* GODMODEFACE0PIC.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = GODMODEFACE0PIC.png; path = ../../menu_art/GODMODEFACE0PIC.png; sourceTree = SOURCE_ROOT; }; + 3DE8825C13E35E5000C95AE8 /* GODMODEFACE1PIC.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = GODMODEFACE1PIC.png; path = ../../menu_art/GODMODEFACE1PIC.png; sourceTree = SOURCE_ROOT; }; + 3DE8825D13E35E5000C95AE8 /* GODMODEFACE2PIC.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = GODMODEFACE2PIC.png; path = ../../menu_art/GODMODEFACE2PIC.png; sourceTree = SOURCE_ROOT; }; + 3DE8825E13E35E5000C95AE8 /* header_advanced.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = header_advanced.png; path = ../../menu_art/header_advanced.png; sourceTree = SOURCE_ROOT; }; + 3DE8825F13E35E5000C95AE8 /* header_ep1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = header_ep1.png; path = ../../menu_art/header_ep1.png; sourceTree = SOURCE_ROOT; }; + 3DE8826013E35E5000C95AE8 /* header_ep2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = header_ep2.png; path = ../../menu_art/header_ep2.png; sourceTree = SOURCE_ROOT; }; + 3DE8826113E35E5000C95AE8 /* header_ep3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = header_ep3.png; path = ../../menu_art/header_ep3.png; sourceTree = SOURCE_ROOT; }; + 3DE8826213E35E5000C95AE8 /* header_ep4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = header_ep4.png; path = ../../menu_art/header_ep4.png; sourceTree = SOURCE_ROOT; }; + 3DE8826313E35E5000C95AE8 /* header_ep5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = header_ep5.png; path = ../../menu_art/header_ep5.png; sourceTree = SOURCE_ROOT; }; + 3DE8826413E35E5000C95AE8 /* header_ep6.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = header_ep6.png; path = ../../menu_art/header_ep6.png; sourceTree = SOURCE_ROOT; }; + 3DE8826513E35E5000C95AE8 /* header_ep7.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = header_ep7.png; path = ../../menu_art/header_ep7.png; sourceTree = SOURCE_ROOT; }; + 3DE8826613E35E5000C95AE8 /* header_ep8.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = header_ep8.png; path = ../../menu_art/header_ep8.png; sourceTree = SOURCE_ROOT; }; + 3DE8826713E35E5000C95AE8 /* header_ep9.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = header_ep9.png; path = ../../menu_art/header_ep9.png; sourceTree = SOURCE_ROOT; }; + 3DE8826813E35E5000C95AE8 /* header_ep10.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = header_ep10.png; path = ../../menu_art/header_ep10.png; sourceTree = SOURCE_ROOT; }; + 3DE8826913E35E5000C95AE8 /* header_ep11.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = header_ep11.png; path = ../../menu_art/header_ep11.png; sourceTree = SOURCE_ROOT; }; + 3DE8826A13E35E5000C95AE8 /* intermission.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = intermission.png; path = ../../menu_art/intermission.png; sourceTree = SOURCE_ROOT; }; + 3DE8826B13E35E5000C95AE8 /* iphone_image.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = iphone_image.png; path = ../../menu_art/iphone_image.png; sourceTree = SOURCE_ROOT; }; + 3DE8826C13E35E5000C95AE8 /* kills_shadow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = kills_shadow.png; path = ../../menu_art/kills_shadow.png; sourceTree = SOURCE_ROOT; }; + 3DE8826D13E35E5000C95AE8 /* kills.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = kills.png; path = ../../menu_art/kills.png; sourceTree = SOURCE_ROOT; }; + 3DE8826E13E35E5000C95AE8 /* map_background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = map_background.png; path = ../../menu_art/map_background.png; sourceTree = SOURCE_ROOT; }; + 3DE8826F13E35E5000C95AE8 /* map.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = map.png; path = ../../menu_art/map.png; sourceTree = SOURCE_ROOT; }; + 3DE8827013E35E5000C95AE8 /* menu_bar.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = menu_bar.png; path = ../../menu_art/menu_bar.png; sourceTree = SOURCE_ROOT; }; + 3DE8827113E35E5000C95AE8 /* menu.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = menu.png; path = ../../menu_art/menu.png; sourceTree = SOURCE_ROOT; }; + 3DE8827213E35E5000C95AE8 /* music_off.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = music_off.png; path = ../../menu_art/music_off.png; sourceTree = SOURCE_ROOT; }; + 3DE8827313E35E5000C95AE8 /* music_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = music_on.png; path = ../../menu_art/music_on.png; sourceTree = SOURCE_ROOT; }; + 3DE8827413E35E5000C95AE8 /* partime_shadow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = partime_shadow.png; path = ../../menu_art/partime_shadow.png; sourceTree = SOURCE_ROOT; }; + 3DE8827513E35E5000C95AE8 /* partime.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = partime.png; path = ../../menu_art/partime.png; sourceTree = SOURCE_ROOT; }; + 3DE8827613E35E5000C95AE8 /* secrets_shadow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = secrets_shadow.png; path = ../../menu_art/secrets_shadow.png; sourceTree = SOURCE_ROOT; }; + 3DE8827713E35E5000C95AE8 /* secrets.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = secrets.png; path = ../../menu_art/secrets.png; sourceTree = SOURCE_ROOT; }; + 3DE8827813E35E5000C95AE8 /* shoot.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = shoot.png; path = ../../menu_art/shoot.png; sourceTree = SOURCE_ROOT; }; + 3DE8827913E35E5000C95AE8 /* side_2_side.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = side_2_side.png; path = ../../menu_art/side_2_side.png; sourceTree = SOURCE_ROOT; }; + 3DE8827A13E35E5000C95AE8 /* slider_bar_rainbow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = slider_bar_rainbow.png; path = ../../menu_art/slider_bar_rainbow.png; sourceTree = SOURCE_ROOT; }; + 3DE8827B13E35E5000C95AE8 /* slider_bar_underlay.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = slider_bar_underlay.png; path = ../../menu_art/slider_bar_underlay.png; sourceTree = SOURCE_ROOT; }; + 3DE8827C13E35E5000C95AE8 /* slider_bar.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = slider_bar.png; path = ../../menu_art/slider_bar.png; sourceTree = SOURCE_ROOT; }; + 3DE8827D13E35E5000C95AE8 /* slider_knob.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = slider_knob.png; path = ../../menu_art/slider_knob.png; sourceTree = SOURCE_ROOT; }; + 3DE8827E13E35E5000C95AE8 /* stats_large.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = stats_large.png; path = ../../menu_art/stats_large.png; sourceTree = SOURCE_ROOT; }; + 3DE8827F13E35E5000C95AE8 /* stats.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = stats.png; path = ../../menu_art/stats.png; sourceTree = SOURCE_ROOT; }; + 3DE8828013E35E5000C95AE8 /* status_hud.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = status_hud.png; path = ../../menu_art/status_hud.png; sourceTree = SOURCE_ROOT; }; + 3DE8828113E35E5000C95AE8 /* submenus_background_image.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = submenus_background_image.png; path = ../../menu_art/submenus_background_image.png; sourceTree = SOURCE_ROOT; }; + 3DE8828213E35E5000C95AE8 /* treasure_shadow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = treasure_shadow.png; path = ../../menu_art/treasure_shadow.png; sourceTree = SOURCE_ROOT; }; + 3DE8828313E35E5000C95AE8 /* treasure.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = treasure.png; path = ../../menu_art/treasure.png; sourceTree = SOURCE_ROOT; }; + 3DE8828413E35E5000C95AE8 /* up_down.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = up_down.png; path = ../../menu_art/up_down.png; sourceTree = SOURCE_ROOT; }; + 3DE8828513E35E5000C95AE8 /* victory_256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = victory_256.png; path = ../../menu_art/victory_256.png; sourceTree = SOURCE_ROOT; }; + 3DF1804213F44D6700ED668A /* episode_bracket.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = episode_bracket.png; path = ../../menu_art/episode_bracket.png; sourceTree = SOURCE_ROOT; }; + 3DF1804313F44D6700ED668A /* episode_divider.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = episode_divider.png; path = ../../menu_art/episode_divider.png; sourceTree = SOURCE_ROOT; }; 4364BF3E0F5CB25900F29317 /* dist.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = dist.plist; sourceTree = ""; }; 43AE7E9E0F67387500B2F562 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 43AF6B940F996DA200777569 /* iphone_sys.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iphone_sys.m; sourceTree = ""; }; @@ -120,8 +410,6 @@ 43CF03090F56D5C200E4A23D /* iphone_loop.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = iphone_loop.c; sourceTree = ""; }; 43E341280F9BB4B6003C5D00 /* wolf3dlite_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = wolf3dlite_icon.png; sourceTree = ""; }; 43E8D2DF0F4FC61E003F09B2 /* iphone_main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = iphone_main.c; sourceTree = ""; }; - 43E8D4DF0F51B48B003F09B2 /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = /System/Library/Frameworks/OpenAL.framework; sourceTree = ""; }; - 720EBBAD0F82E0BB003F989A /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = /System/Library/Frameworks/QuartzCore.framework; sourceTree = ""; }; 7229CC240F6B3222004123C5 /* wolf_act_stat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = wolf_act_stat.h; path = ../wolf/wolf_act_stat.h; sourceTree = SOURCE_ROOT; }; 7229CC250F6B3222004123C5 /* wolf_actor_ai.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wolf_actor_ai.c; path = ../wolf/wolf_actor_ai.c; sourceTree = SOURCE_ROOT; }; 7229CC260F6B3222004123C5 /* wolf_actor_ai.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = wolf_actor_ai.h; path = ../wolf/wolf_actor_ai.h; sourceTree = SOURCE_ROOT; }; @@ -262,7 +550,14 @@ 72A7E8F30F5F2001005B83C0 /* iphone_wolf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iphone_wolf.h; sourceTree = ""; }; 72A7E8F60F5F2063005B83C0 /* iphone_menus.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = iphone_menus.c; sourceTree = ""; }; 72B5FF380F7E5C3D00C8A372 /* hud.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hud.c; sourceTree = ""; }; - 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = ""; }; + C81E11A713E2112100B1049A /* SettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsViewController.h; sourceTree = ""; }; + C81E11A813E2112100B1049A /* SettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SettingsViewController.m; sourceTree = ""; }; + C81E121B13E225FB00B1049A /* slider.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = slider.png; path = ../../menu_art/slider.png; sourceTree = SOURCE_ROOT; }; + C8D1CFDF13E22A6700F0EAC6 /* Default-Portrait~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait~ipad.png"; sourceTree = ""; }; + C8D1CFE313E22B5200F0EAC6 /* WOLF_57.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = WOLF_57.png; sourceTree = ""; }; + C8D1CFE513E22B5B00F0EAC6 /* WOLF_114.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = WOLF_114.png; sourceTree = ""; }; + C8D1CFE713E22B6800F0EAC6 /* WOLF_72.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = WOLF_72.png; sourceTree = ""; }; ED0A8D0A1069ACA8001E0547 /* arialGlyphRects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = arialGlyphRects.h; sourceTree = ""; }; ED0A8D0B1069ACA8001E0547 /* iphone_alerts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iphone_alerts.h; sourceTree = ""; }; ED0A8D0C1069ACA8001E0547 /* iphone_alerts.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iphone_alerts.m; sourceTree = ""; }; @@ -270,7 +565,6 @@ ED0A8D0E1069ACA8001E0547 /* iphone_downloadUserMap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iphone_downloadUserMap.m; sourceTree = ""; }; ED0A8D0F1069ACA8001E0547 /* iphone_mapselector.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = iphone_mapselector.c; sourceTree = ""; }; ED0A8D101069ACA8001E0547 /* iphone_store.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iphone_store.h; sourceTree = ""; }; - ED0A8D111069ACA8001E0547 /* iphone_store.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iphone_store.m; sourceTree = ""; }; ED3703B3106C1CD40059C5F8 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; /* End PBXFileReference section */ @@ -279,14 +573,16 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */, - 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */, - 28FD15000DC6FC520079059D /* OpenGLES.framework in Frameworks */, - 43E8D4E00F51B48B003F09B2 /* OpenAL.framework in Frameworks */, - 4333CCE80F5CC23E00AE2B6F /* AudioToolbox.framework in Frameworks */, 43AE7E9F0F67387500B2F562 /* CoreGraphics.framework in Frameworks */, - 720EBBAE0F82E0BB003F989A /* QuartzCore.framework in Frameworks */, + 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */, + 3D3ED8D113BF775B00C5B1DF /* OpenAL.framework in Frameworks */, + 28FD15000DC6FC520079059D /* OpenGLES.framework in Frameworks */, + 3D3ED8EB13BF77A800C5B1DF /* QuartzCore.framework in Frameworks */, ED3703B4106C1CD40059C5F8 /* SystemConfiguration.framework in Frameworks */, + 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */, + 3D3ED95B13BF77FA00C5B1DF /* AudioToolbox.framework in Frameworks */, + 3D24FF3913D77577009FC7A7 /* StoreKit.framework in Frameworks */, + 3DB8734113FACAD20050FB2A /* AVFoundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -305,11 +601,16 @@ 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { isa = PBXGroup; children = ( + C8D1CFE713E22B6800F0EAC6 /* WOLF_72.png */, + C8D1CFE513E22B5B00F0EAC6 /* WOLF_114.png */, + C8D1CFE313E22B5200F0EAC6 /* WOLF_57.png */, + C8D1CFDF13E22A6700F0EAC6 /* Default-Portrait~ipad.png */, + 3D86D68A13DF172B00186487 /* POSITYPE-idSettler10v2.otf */, 29B97315FDCFA39411CA2CEA /* Other Sources */, 29B97317FDCFA39411CA2CEA /* Resources */, + 3D15A41A13C6BA0B00FBFAA2 /* Resources-iPad */, 29B97323FDCFA39411CA2CEA /* Frameworks */, 19C28FACFE9D520D11CA2CBB /* Products */, - 43AE7E9E0F67387500B2F562 /* CoreGraphics.framework */, ); name = CustomTemplate; sourceTree = ""; @@ -318,30 +619,34 @@ isa = PBXGroup; children = ( ED0A8D0A1069ACA8001E0547 /* arialGlyphRects.h */, + 3D5C0C7513DF8F78008ECBD1 /* controllers */, + 7229CE450F6C89F8004123C5 /* EAGLView.h */, + 7229CE460F6C89F8004123C5 /* EAGLView.m */, + 72935B180F6B2D630085DD28 /* env */, + 7229CE540F6C8CDE004123C5 /* gles_glue.c */, + 72B5FF380F7E5C3D00C8A372 /* hud.c */, ED0A8D0B1069ACA8001E0547 /* iphone_alerts.h */, ED0A8D0C1069ACA8001E0547 /* iphone_alerts.m */, ED0A8D0D1069ACA8001E0547 /* iphone_downloadSOD.m */, ED0A8D0E1069ACA8001E0547 /* iphone_downloadUserMap.m */, + 43CF03090F56D5C200E4A23D /* iphone_loop.c */, + 43E8D2DF0F4FC61E003F09B2 /* iphone_main.c */, ED0A8D0F1069ACA8001E0547 /* iphone_mapselector.c */, + 72A7E8F60F5F2063005B83C0 /* iphone_menus.c */, ED0A8D101069ACA8001E0547 /* iphone_store.h */, - ED0A8D111069ACA8001E0547 /* iphone_store.m */, - 72935B180F6B2D630085DD28 /* env */, + 3D24009D13D89BF4009FC7A7 /* iphone_store.m */, + 43AF6B940F996DA200777569 /* iphone_sys.m */, + 72A7E8F30F5F2001005B83C0 /* iphone_wolf.h */, + 29B97316FDCFA39411CA2CEA /* main.m */, + 3D5C0FD613E10204008ECBD1 /* MissionTableViewCell.h */, + 3D5C0FD713E10204008ECBD1 /* MissionTableViewCell.m */, 7229CC5A0F6B324A004123C5 /* tremor */, + 3D5C0C7613DF8FAF008ECBD1 /* utilities */, 72935B190F6B2D720085DD28 /* wolf */, 32CA4F630368D1EE00C91783 /* wolf3d_Prefix.pch */, - 29B97316FDCFA39411CA2CEA /* main.m */, - 7229CE540F6C8CDE004123C5 /* gles_glue.c */, - 7229CE450F6C89F8004123C5 /* EAGLView.h */, - 7229CE460F6C89F8004123C5 /* EAGLView.m */, - 72B5FF380F7E5C3D00C8A372 /* hud.c */, 7229CE480F6C89F8004123C5 /* wolf3dAppDelegate.h */, 7229CE490F6C89F8004123C5 /* wolf3dAppDelegate.m */, 7229CC8E0F6B3363004123C5 /* wolfiphone.h */, - 72A7E8F30F5F2001005B83C0 /* iphone_wolf.h */, - 72A7E8F60F5F2063005B83C0 /* iphone_menus.c */, - 43CF03090F56D5C200E4A23D /* iphone_loop.c */, - 43E8D2DF0F4FC61E003F09B2 /* iphone_main.c */, - 43AF6B940F996DA200777569 /* iphone_sys.m */, ); name = "Other Sources"; sourceTree = ""; @@ -349,11 +654,13 @@ 29B97317FDCFA39411CA2CEA /* Resources */ = { isa = PBXGroup; children = ( - 43E341280F9BB4B6003C5D00 /* wolf3dlite_icon.png */, + 3D5C0CFE13DF9AD5008ECBD1 /* views */, + 3D5C0CFD13DF9ABF008ECBD1 /* menu_art */, 43CF02FE0F56974E00E4A23D /* Default.png */, - 43CF02EC0F56955F00E4A23D /* wolf3d_icon.png */, - 28AD733E0D9D9553002E5188 /* MainWindow.xib */, + 3DB873FE13FB3C0E0050FB2A /* wondering.caf */, 8D1107310486CEB800E47090 /* Info.plist */, + 43CF02EC0F56955F00E4A23D /* wolf3d_icon.png */, + 43E341280F9BB4B6003C5D00 /* wolf3dlite_icon.png */, ); name = Resources; sourceTree = ""; @@ -361,17 +668,208 @@ 29B97323FDCFA39411CA2CEA /* Frameworks */ = { isa = PBXGroup; children = ( - ED3703B3106C1CD40059C5F8 /* SystemConfiguration.framework */, - 720EBBAD0F82E0BB003F989A /* QuartzCore.framework */, - 4333CCE70F5CC23E00AE2B6F /* AudioToolbox.framework */, - 43E8D4DF0F51B48B003F09B2 /* OpenAL.framework */, - 28FD14FF0DC6FC520079059D /* OpenGLES.framework */, - 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */, + 3D3ED95A13BF77FA00C5B1DF /* AudioToolbox.framework */, + 43AE7E9E0F67387500B2F562 /* CoreGraphics.framework */, 1D30AB110D05D00D00671497 /* Foundation.framework */, + 3D3ED8D013BF775B00C5B1DF /* OpenAL.framework */, + 28FD14FF0DC6FC520079059D /* OpenGLES.framework */, + 3D3ED8EA13BF77A800C5B1DF /* QuartzCore.framework */, + ED3703B3106C1CD40059C5F8 /* SystemConfiguration.framework */, + 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */, + 3D24FF3813D77577009FC7A7 /* StoreKit.framework */, + 3DB8734013FACAD20050FB2A /* AVFoundation.framework */, ); name = Frameworks; sourceTree = ""; }; + 3D15A41A13C6BA0B00FBFAA2 /* Resources-iPad */ = { + isa = PBXGroup; + children = ( + 3D5C0D0F13DF9B82008ECBD1 /* views */, + ); + name = "Resources-iPad"; + sourceTree = ""; + }; + 3D5C0C7513DF8F78008ECBD1 /* controllers */ = { + isa = PBXGroup; + children = ( + C81E11A713E2112100B1049A /* SettingsViewController.h */, + C81E11A813E2112100B1049A /* SettingsViewController.m */, + 3D5C0CF513DF9A5D008ECBD1 /* CreditsViewController.h */, + 3D5C0CF613DF9A5D008ECBD1 /* CreditsViewController.m */, + 3D5C0C2913DF6836008ECBD1 /* EpisodeViewController.h */, + 3D5C0C2A13DF6836008ECBD1 /* EpisodeViewController.m */, + 3D5C0CF813DF9A8E008ECBD1 /* LegalViewController.h */, + 3D5C0CF913DF9A8E008ECBD1 /* LegalViewController.m */, + 3D5C0C4913DF800E008ECBD1 /* LevelSelectViewController.h */, + 3D5C0C4A13DF800E008ECBD1 /* LevelSelectViewController.m */, + 3D86CF8B13DDE51800186487 /* MainMenuViewController.h */, + 3D86CF8C13DDE51800186487 /* MainMenuViewController.m */, + 3D3ED73D13BF554400C5B1DF /* wolf3dViewController.h */, + 3D3ED73E13BF554400C5B1DF /* wolf3dViewController.m */, + 3D5C0DE013E05D4D008ECBD1 /* TriviaViewController.h */, + 3D5C0DE113E05D4D008ECBD1 /* TriviaViewController.m */, + 3D10C3E213F33AB700DF5856 /* SkillViewController.h */, + 3D10C3E313F33AB700DF5856 /* SkillViewController.m */, + ); + name = controllers; + sourceTree = ""; + }; + 3D5C0C7613DF8FAF008ECBD1 /* utilities */ = { + isa = PBXGroup; + children = ( + 3DDD3A2313DF231100967735 /* UIFontButton.m */, + 3DDD3A2513DF232900967735 /* UIFontButton.h */, + 3D5C0C6E13DF88F8008ECBD1 /* UIFontLabel.h */, + 3D5C0C6F13DF8920008ECBD1 /* UIFontLabel.m */, + 3D10C39D13F3212A00DF5856 /* WolfSlider.h */, + 3D10C39E13F3212A00DF5856 /* WolfSlider.m */, + 3DBC68B113F58BCC002A8253 /* UITableViewScrolling.h */, + 3DBC68B213F58BCC002A8253 /* UITableViewScrolling.m */, + ); + name = utilities; + sourceTree = ""; + }; + 3D5C0CFD13DF9ABF008ECBD1 /* menu_art */ = { + isa = PBXGroup; + children = ( + 35E6E15413F3172F0010F530 /* adv_btn.png */, + 3534C96913E2485F00740F63 /* adv_button_frame.png */, + 3DE8824813E35E5000C95AE8 /* arialImageLAL.png */, + 3DE8824713E35E5000C95AE8 /* arialImageLAL_white-alpha.png */, + 350CCF9D13DF8C47003303AB /* back_arrow.png */, + 3DE8824913E35E5000C95AE8 /* button_back.png */, + 3DE8824A13E35E5000C95AE8 /* button_downloads.png */, + 3555CC3F13E2001A006E7D2F /* button_highlight.png */, + 3DE8824B13E35E5000C95AE8 /* button_knife.png */, + 3DE8824C13E35E5000C95AE8 /* button_left.png */, + 3DE8824D13E35E5000C95AE8 /* button_more.png */, + 3DE8824E13E35E5000C95AE8 /* button_new.png */, + 3DE8824F13E35E5000C95AE8 /* button_pistol.png */, + 3DE8825013E35E5000C95AE8 /* button_resume.png */, + 3DE8825113E35E5000C95AE8 /* button_right.png */, + 3DE8825213E35E5000C95AE8 /* button_settings.png */, + 3DE8825313E35E5000C95AE8 /* button_trivia.png */, + 3DE8825413E35E5000C95AE8 /* button_web.png */, + 35048AAC13E0A03A00516B10 /* credits_bg.png */, + 350BA59413F34F7900FAE7E4 /* difficulty_head1.png */, + 350BA59513F34F7900FAE7E4 /* difficulty_head2.png */, + 350BA59613F34F7900FAE7E4 /* difficulty_head3.png */, + 350BA59713F34F7900FAE7E4 /* difficulty_head4.png */, + 350CCF9E13DF8C47003303AB /* difficulty_selection_box.png */, + 35048AD613E0E98800516B10 /* difficulty_star1.png */, + 35048AD713E0E98800516B10 /* difficulty_star2.png */, + 35048AD813E0E98800516B10 /* difficulty_star3.png */, + 35048AD913E0E98800516B10 /* difficulty_star4.png */, + 3DE8825513E35E5000C95AE8 /* diractional_01.png */, + 3DE8825613E35E5000C95AE8 /* diractional_02.png */, + 3DE8825713E35E5000C95AE8 /* diractional_03.png */, + 35E6E16813F318A50010F530 /* down_arrow.png */, + 350CCF9A13DF8B0E003303AB /* episode_bg.png */, + 3DF1804213F44D6700ED668A /* episode_bracket.png */, + 3DF1804313F44D6700ED668A /* episode_divider.png */, + 3DE8825B13E35E5000C95AE8 /* GODMODEFACE0PIC.png */, + 3DE8825C13E35E5000C95AE8 /* GODMODEFACE1PIC.png */, + 3DE8825D13E35E5000C95AE8 /* GODMODEFACE2PIC.png */, + 3DE8825E13E35E5000C95AE8 /* header_advanced.png */, + 3DE8825F13E35E5000C95AE8 /* header_ep1.png */, + 3DE8826813E35E5000C95AE8 /* header_ep10.png */, + 3DE8826913E35E5000C95AE8 /* header_ep11.png */, + 3DE8826013E35E5000C95AE8 /* header_ep2.png */, + 3DE8826113E35E5000C95AE8 /* header_ep3.png */, + 3DE8826213E35E5000C95AE8 /* header_ep4.png */, + 3DE8826313E35E5000C95AE8 /* header_ep5.png */, + 3DE8826413E35E5000C95AE8 /* header_ep6.png */, + 3DE8826513E35E5000C95AE8 /* header_ep7.png */, + 3DE8826613E35E5000C95AE8 /* header_ep8.png */, + 3DE8826713E35E5000C95AE8 /* header_ep9.png */, + 35E6E16313F318600010F530 /* highlight_bracket.png */, + 3DE8826A13E35E5000C95AE8 /* intermission.png */, + 3DE8826B13E35E5000C95AE8 /* iphone_image.png */, + 35048ABD13E0D51600516B10 /* iphone_preset_1.png */, + 3D5C0F7F13E0FC46008ECBD1 /* iphone_preset_2.png */, + 3D5C0F8013E0FC46008ECBD1 /* iphone_preset_3.png */, + 3D5C0F8113E0FC46008ECBD1 /* iphone_preset_4.png */, + 3DE8826D13E35E5000C95AE8 /* kills.png */, + 3DE8826C13E35E5000C95AE8 /* kills_shadow.png */, + 35E6E15E13F318420010F530 /* left_chevron.png */, + 3D5C0D0913DF9B41008ECBD1 /* main_bg.png */, + 3DE8826F13E35E5000C95AE8 /* map.png */, + 3DE8826E13E35E5000C95AE8 /* map_background.png */, + 3DE8827113E35E5000C95AE8 /* menu.png */, + 3DE8827013E35E5000C95AE8 /* menu_bar.png */, + 350CCFCD13DF8DED003303AB /* mission_bg.png */, + 3DE8827213E35E5000C95AE8 /* music_off.png */, + 3DE8827313E35E5000C95AE8 /* music_on.png */, + 35048AA913E07E7800516B10 /* next_arrow.png */, + 3DE8827513E35E5000C95AE8 /* partime.png */, + 3DE8827413E35E5000C95AE8 /* partime_shadow.png */, + 3534C96B13E2486700740F63 /* preset_frame.png */, + 35E6E15F13F318420010F530 /* right_chevron.png */, + 3DE8827713E35E5000C95AE8 /* secrets.png */, + 3DE8827613E35E5000C95AE8 /* secrets_shadow.png */, + 35E6E15913F3182C0010F530 /* settings_divider.png */, + 3DBC68E613F599B4002A8253 /* settings_line_art.png */, + 35E6E19F13F321A50010F530 /* settings_slider_blue.png */, + 3589EBA513F5E3DC005FBE56 /* settings_slider_blue~ipad.png */, + 35E6E1A013F321A50010F530 /* settings_slider_grey.png */, + 3589EBA613F5E3DC005FBE56 /* settings_slider_grey~ipad.png */, + 35E6E1A113F321A50010F530 /* settings_slider_white.png */, + 3589EBA713F5E3DC005FBE56 /* settings_slider_white~ipad.png */, + 3DE8827813E35E5000C95AE8 /* shoot.png */, + 3DE8827913E35E5000C95AE8 /* side_2_side.png */, + C81E121B13E225FB00B1049A /* slider.png */, + 3DE8827C13E35E5000C95AE8 /* slider_bar.png */, + 3DE8827A13E35E5000C95AE8 /* slider_bar_rainbow.png */, + 3DE8827B13E35E5000C95AE8 /* slider_bar_underlay.png */, + 3DE8827D13E35E5000C95AE8 /* slider_knob.png */, + 35E6E17413F3196A0010F530 /* star_icon.png */, + 3DE8827F13E35E5000C95AE8 /* stats.png */, + 3DE8827E13E35E5000C95AE8 /* stats_large.png */, + 3DE8828013E35E5000C95AE8 /* status_hud.png */, + 3DE8828113E35E5000C95AE8 /* submenus_background_image.png */, + 3DE8828313E35E5000C95AE8 /* treasure.png */, + 3DE8828213E35E5000C95AE8 /* treasure_shadow.png */, + 35E6E15A13F3182C0010F530 /* up_arrow.png */, + 3DE8828413E35E5000C95AE8 /* up_down.png */, + 3DE8828513E35E5000C95AE8 /* victory_256.png */, + 35048ABB13E0D2EA00516B10 /* wolf_bg.png */, + ); + name = menu_art; + sourceTree = ""; + }; + 3D5C0CFE13DF9AD5008ECBD1 /* views */ = { + isa = PBXGroup; + children = ( + 3D5C0C2613DF6701008ECBD1 /* EpisodeView.xib */, + 3D86CF8A13DDE51800186487 /* MainMenuView.xib */, + 3DDD3A2013DF228500967735 /* SettingsView.xib */, + 3D5C0C4C13DF8084008ECBD1 /* LevelSelectView.xib */, + 3D5C0D3013DFA0DF008ECBD1 /* CreditsView.xib */, + 3D5C0D3213DFA0EA008ECBD1 /* LegalView.xib */, + 3D5C0DF413E063F5008ECBD1 /* TriviaView.xib */, + 3D10C3F113F33D3700DF5856 /* SkillView.xib */, + 3D10C37A13F310F700DF5856 /* EpisodeCell.xib */, + ); + name = views; + sourceTree = ""; + }; + 3D5C0D0F13DF9B82008ECBD1 /* views */ = { + isa = PBXGroup; + children = ( + 3534C97E13E24E0E00740F63 /* SettingsView~ipad.xib */, + 3534C95B13E241AB00740F63 /* LevelSelectView~ipad.xib */, + 3534C95D13E241B100740F63 /* EpisodeView~ipad.xib */, + 356D306C13F9820400EDDACE /* EpisodeCell~ipad.xib */, + 356D306E13F9820900EDDACE /* SkillView~ipad.xib */, + 3534C88E13E220CE00740F63 /* LegalView~ipad.xib */, + 3534C87313E208F400740F63 /* CreditsView~ipad.xib */, + 3534C87413E208F400740F63 /* TriviaView~ipad.xib */, + 3D5C0D2B13DF9D9B008ECBD1 /* MainMenuView~ipad.xib */, + ); + name = views; + sourceTree = ""; + }; 7229CC5A0F6B324A004123C5 /* tremor */ = { isa = PBXGroup; children = ( @@ -552,10 +1050,17 @@ isa = PBXProject; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "wolf3d" */; compatibilityVersion = "Xcode 3.1"; + developmentRegion = English; hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + ); mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; projectDirPath = ""; - projectRoot = ""; + projectRoot = ../../../; targets = ( 1D6058900D05DD3D006BFB54 /* wolf3d */, ); @@ -567,11 +1072,135 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */, 43CF02ED0F56955F00E4A23D /* wolf3d_icon.png in Resources */, 43CF02FF0F56974E00E4A23D /* Default.png in Resources */, 4364BF3F0F5CB25900F29317 /* dist.plist in Resources */, 43E341290F9BB4B6003C5D00 /* wolf3dlite_icon.png in Resources */, + 3D86CF8D13DDE51800186487 /* MainMenuView.xib in Resources */, + 3D86D68B13DF172B00186487 /* POSITYPE-idSettler10v2.otf in Resources */, + 3DDD3A2113DF228500967735 /* SettingsView.xib in Resources */, + 3D5C0C2713DF6701008ECBD1 /* EpisodeView.xib in Resources */, + 3D5C0C4D13DF8084008ECBD1 /* LevelSelectView.xib in Resources */, + 350CCF9B13DF8B0E003303AB /* episode_bg.png in Resources */, + 350CCF9F13DF8C47003303AB /* back_arrow.png in Resources */, + 350CCFA013DF8C47003303AB /* difficulty_selection_box.png in Resources */, + 350CCFCE13DF8DED003303AB /* mission_bg.png in Resources */, + 3D5C0D0A13DF9B41008ECBD1 /* main_bg.png in Resources */, + 3D5C0D2C13DF9D9B008ECBD1 /* MainMenuView~ipad.xib in Resources */, + 3D5C0D3113DFA0DF008ECBD1 /* CreditsView.xib in Resources */, + 3D5C0D3313DFA0EA008ECBD1 /* LegalView.xib in Resources */, + 3D5C0DF513E063F5008ECBD1 /* TriviaView.xib in Resources */, + 35048AAA13E07E7800516B10 /* next_arrow.png in Resources */, + 35048AAD13E0A03A00516B10 /* credits_bg.png in Resources */, + 35048ABC13E0D2EA00516B10 /* wolf_bg.png in Resources */, + 35048AC113E0D51600516B10 /* iphone_preset_1.png in Resources */, + 35048ADA13E0E98800516B10 /* difficulty_star1.png in Resources */, + 35048ADB13E0E98800516B10 /* difficulty_star2.png in Resources */, + 35048ADC13E0E98800516B10 /* difficulty_star3.png in Resources */, + 35048ADD13E0E98800516B10 /* difficulty_star4.png in Resources */, + 3D5C0F8213E0FC46008ECBD1 /* iphone_preset_2.png in Resources */, + 3D5C0F8313E0FC46008ECBD1 /* iphone_preset_3.png in Resources */, + 3D5C0F8413E0FC46008ECBD1 /* iphone_preset_4.png in Resources */, + 3555CC4013E2001A006E7D2F /* button_highlight.png in Resources */, + 3534C87513E208F400740F63 /* CreditsView~ipad.xib in Resources */, + 3534C87613E208F400740F63 /* TriviaView~ipad.xib in Resources */, + 3534C88F13E220CE00740F63 /* LegalView~ipad.xib in Resources */, + C81E121C13E225FB00B1049A /* slider.png in Resources */, + C8D1CFE013E22A6700F0EAC6 /* Default-Portrait~ipad.png in Resources */, + C8D1CFE413E22B5200F0EAC6 /* WOLF_57.png in Resources */, + C8D1CFE613E22B5B00F0EAC6 /* WOLF_114.png in Resources */, + C8D1CFE813E22B6800F0EAC6 /* WOLF_72.png in Resources */, + 3534C95C13E241AB00740F63 /* LevelSelectView~ipad.xib in Resources */, + 3534C95E13E241B100740F63 /* EpisodeView~ipad.xib in Resources */, + 3534C96A13E2485F00740F63 /* adv_button_frame.png in Resources */, + 3534C96C13E2486700740F63 /* preset_frame.png in Resources */, + 3534C97F13E24E0E00740F63 /* SettingsView~ipad.xib in Resources */, + 3DE8828613E35E5000C95AE8 /* arialImageLAL_white-alpha.png in Resources */, + 3DE8828713E35E5000C95AE8 /* arialImageLAL.png in Resources */, + 3DE8828813E35E5000C95AE8 /* button_back.png in Resources */, + 3DE8828913E35E5000C95AE8 /* button_downloads.png in Resources */, + 3DE8828A13E35E5000C95AE8 /* button_knife.png in Resources */, + 3DE8828B13E35E5000C95AE8 /* button_left.png in Resources */, + 3DE8828C13E35E5000C95AE8 /* button_more.png in Resources */, + 3DE8828D13E35E5000C95AE8 /* button_new.png in Resources */, + 3DE8828E13E35E5000C95AE8 /* button_pistol.png in Resources */, + 3DE8828F13E35E5000C95AE8 /* button_resume.png in Resources */, + 3DE8829013E35E5000C95AE8 /* button_right.png in Resources */, + 3DE8829113E35E5000C95AE8 /* button_settings.png in Resources */, + 3DE8829213E35E5000C95AE8 /* button_trivia.png in Resources */, + 3DE8829313E35E5000C95AE8 /* button_web.png in Resources */, + 3DE8829413E35E5000C95AE8 /* diractional_01.png in Resources */, + 3DE8829513E35E5000C95AE8 /* diractional_02.png in Resources */, + 3DE8829613E35E5000C95AE8 /* diractional_03.png in Resources */, + 3DE8829A13E35E5000C95AE8 /* GODMODEFACE0PIC.png in Resources */, + 3DE8829B13E35E5000C95AE8 /* GODMODEFACE1PIC.png in Resources */, + 3DE8829C13E35E5000C95AE8 /* GODMODEFACE2PIC.png in Resources */, + 3DE8829D13E35E5000C95AE8 /* header_advanced.png in Resources */, + 3DE8829E13E35E5000C95AE8 /* header_ep1.png in Resources */, + 3DE8829F13E35E5000C95AE8 /* header_ep2.png in Resources */, + 3DE882A013E35E5000C95AE8 /* header_ep3.png in Resources */, + 3DE882A113E35E5000C95AE8 /* header_ep4.png in Resources */, + 3DE882A213E35E5000C95AE8 /* header_ep5.png in Resources */, + 3DE882A313E35E5000C95AE8 /* header_ep6.png in Resources */, + 3DE882A413E35E5000C95AE8 /* header_ep7.png in Resources */, + 3DE882A513E35E5000C95AE8 /* header_ep8.png in Resources */, + 3DE882A613E35E5000C95AE8 /* header_ep9.png in Resources */, + 3DE882A713E35E5000C95AE8 /* header_ep10.png in Resources */, + 3DE882A813E35E5000C95AE8 /* header_ep11.png in Resources */, + 3DE882A913E35E5000C95AE8 /* intermission.png in Resources */, + 3DE882AA13E35E5000C95AE8 /* iphone_image.png in Resources */, + 3DE882AB13E35E5000C95AE8 /* kills_shadow.png in Resources */, + 3DE882AC13E35E5000C95AE8 /* kills.png in Resources */, + 3DE882AD13E35E5000C95AE8 /* map_background.png in Resources */, + 3DE882AE13E35E5000C95AE8 /* map.png in Resources */, + 3DE882AF13E35E5000C95AE8 /* menu_bar.png in Resources */, + 3DE882B013E35E5000C95AE8 /* menu.png in Resources */, + 3DE882B113E35E5000C95AE8 /* music_off.png in Resources */, + 3DE882B213E35E5000C95AE8 /* music_on.png in Resources */, + 3DE882B313E35E5000C95AE8 /* partime_shadow.png in Resources */, + 3DE882B413E35E5000C95AE8 /* partime.png in Resources */, + 3DE882B513E35E5000C95AE8 /* secrets_shadow.png in Resources */, + 3DE882B613E35E5000C95AE8 /* secrets.png in Resources */, + 3DE882B713E35E5000C95AE8 /* shoot.png in Resources */, + 3DE882B813E35E5000C95AE8 /* side_2_side.png in Resources */, + 3DE882B913E35E5000C95AE8 /* slider_bar_rainbow.png in Resources */, + 3DE882BA13E35E5000C95AE8 /* slider_bar_underlay.png in Resources */, + 3DE882BB13E35E5000C95AE8 /* slider_bar.png in Resources */, + 3DE882BC13E35E5000C95AE8 /* slider_knob.png in Resources */, + 3DE882BD13E35E5000C95AE8 /* stats_large.png in Resources */, + 3DE882BE13E35E5000C95AE8 /* stats.png in Resources */, + 3DE882BF13E35E5000C95AE8 /* status_hud.png in Resources */, + 3DE882C013E35E5000C95AE8 /* submenus_background_image.png in Resources */, + 3DE882C113E35E5000C95AE8 /* treasure_shadow.png in Resources */, + 3DE882C213E35E5000C95AE8 /* treasure.png in Resources */, + 3DE882C313E35E5000C95AE8 /* up_down.png in Resources */, + 3DE882C413E35E5000C95AE8 /* victory_256.png in Resources */, + 35E6E15513F3172F0010F530 /* adv_btn.png in Resources */, + 35E6E15B13F3182C0010F530 /* settings_divider.png in Resources */, + 35E6E15C13F3182C0010F530 /* up_arrow.png in Resources */, + 35E6E16013F318420010F530 /* left_chevron.png in Resources */, + 35E6E16113F318420010F530 /* right_chevron.png in Resources */, + 35E6E16413F318600010F530 /* highlight_bracket.png in Resources */, + 35E6E16913F318A50010F530 /* down_arrow.png in Resources */, + 35E6E17513F3196A0010F530 /* star_icon.png in Resources */, + 35E6E1A213F321A50010F530 /* settings_slider_blue.png in Resources */, + 35E6E1A313F321A50010F530 /* settings_slider_grey.png in Resources */, + 35E6E1A413F321A50010F530 /* settings_slider_white.png in Resources */, + 3D10C37B13F310F700DF5856 /* EpisodeCell.xib in Resources */, + 3D10C3F213F33D3700DF5856 /* SkillView.xib in Resources */, + 350BA59813F34F7900FAE7E4 /* difficulty_head1.png in Resources */, + 350BA59913F34F7900FAE7E4 /* difficulty_head2.png in Resources */, + 350BA59A13F34F7900FAE7E4 /* difficulty_head3.png in Resources */, + 350BA59B13F34F7900FAE7E4 /* difficulty_head4.png in Resources */, + 3DF1804413F44D6700ED668A /* episode_bracket.png in Resources */, + 3DF1804513F44D6700ED668A /* episode_divider.png in Resources */, + 3DBC68E713F599B4002A8253 /* settings_line_art.png in Resources */, + 3589EBA813F5E3DC005FBE56 /* settings_slider_blue~ipad.png in Resources */, + 3589EBA913F5E3DC005FBE56 /* settings_slider_grey~ipad.png in Resources */, + 3589EBAA13F5E3DC005FBE56 /* settings_slider_white~ipad.png in Resources */, + 356D306D13F9820400EDDACE /* EpisodeCell~ipad.xib in Resources */, + 356D306F13F9820900EDDACE /* SkillView~ipad.xib in Resources */, + 3DB873FF13FB3C0E0050FB2A /* wondering.caf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -678,7 +1307,21 @@ ED0A8D131069ACA8001E0547 /* iphone_downloadSOD.m in Sources */, ED0A8D141069ACA8001E0547 /* iphone_downloadUserMap.m in Sources */, ED0A8D151069ACA8001E0547 /* iphone_mapselector.c in Sources */, - ED0A8D161069ACA8001E0547 /* iphone_store.m in Sources */, + 3D3ED73F13BF554400C5B1DF /* wolf3dViewController.m in Sources */, + 3D24009E13D89BF4009FC7A7 /* iphone_store.m in Sources */, + 3D86CF8E13DDE51800186487 /* MainMenuViewController.m in Sources */, + 3DDD3A2413DF231100967735 /* UIFontButton.m in Sources */, + 3D5C0C2B13DF6836008ECBD1 /* EpisodeViewController.m in Sources */, + 3D5C0C4B13DF800E008ECBD1 /* LevelSelectViewController.m in Sources */, + 3D5C0C7013DF8920008ECBD1 /* UIFontLabel.m in Sources */, + 3D5C0CF713DF9A5D008ECBD1 /* CreditsViewController.m in Sources */, + 3D5C0CFA13DF9A8E008ECBD1 /* LegalViewController.m in Sources */, + 3D5C0DE213E05D4D008ECBD1 /* TriviaViewController.m in Sources */, + 3D5C0FD813E10204008ECBD1 /* MissionTableViewCell.m in Sources */, + C81E11A913E2112100B1049A /* SettingsViewController.m in Sources */, + 3D10C39F13F3212A00DF5856 /* WolfSlider.m in Sources */, + 3D10C3E413F33AB700DF5856 /* SkillViewController.m in Sources */, + 3DBC68B313F58BCC002A8253 /* UITableViewScrolling.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -689,10 +1332,9 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Cass Everitt"; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = wolf3d_Prefix.pch; GCC_PREPROCESSOR_DEFINITIONS = IPHONE; @@ -700,7 +1342,8 @@ INFOPLIST_FILE = Info.plist; PRODUCT_NAME = wolf3d; PROFILE_PREFIX = nu.r3; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = "94041F5C-2EDC-4F49-AF97-95ECE6BB398D"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; @@ -708,7 +1351,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: John Carmack"; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; COPY_PHASE_STRIP = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = wolf3d_Prefix.pch; @@ -717,7 +1360,8 @@ INFOPLIST_FILE = Info.plist; PRODUCT_NAME = wolf3d; PROFILE_PREFIX = nu.r3; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = "156B7F53-1BDC-4116-B0CC-F8CB2252E722"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; @@ -729,11 +1373,13 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Cass Everitt"; GCC_C_LANGUAGE_STANDARD = c99; GCC_THUMB_SUPPORT = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 3.2; PREBINDING = NO; "PROVISIONING_PROFILE[sdk=iphoneos*]" = "E2E91433-8CD1-46DB-9DC5-B7E4C84FD1C2"; - SDKROOT = iphoneos2.0; + SDKROOT = iphoneos; SYMROOT = ../../build; }; name = AdHocDistLite; @@ -742,7 +1388,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Cass Everitt"; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; COPY_PHASE_STRIP = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = wolf3d_Prefix.pch; @@ -754,7 +1400,8 @@ INFOPLIST_FILE = Info.plist; PRODUCT_NAME = wolf3dlite; PROFILE_PREFIX = nu.r3; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = "42086F40-083A-4573-8902-E1E628A229ED"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = AdHocDistLite; }; @@ -763,14 +1410,16 @@ buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_BIT)"; CODE_SIGN_ENTITLEMENTS = dist.plist; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Cass Everitt"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: id Software"; GCC_C_LANGUAGE_STANDARD = c99; GCC_THUMB_SUPPORT = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 3.2; PREBINDING = NO; "PROVISIONING_PROFILE[sdk=iphoneos*]" = "E2E91433-8CD1-46DB-9DC5-B7E4C84FD1C2"; - SDKROOT = iphoneos2.0; + SDKROOT = iphoneos; SYMROOT = ../../build; }; name = AdHocDist; @@ -779,7 +1428,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Cass Everitt"; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; COPY_PHASE_STRIP = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = wolf3d_Prefix.pch; @@ -788,7 +1437,8 @@ INFOPLIST_FILE = Info.plist; PRODUCT_NAME = wolf3d; PROFILE_PREFIX = nu.r3; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = "42086F40-083A-4573-8902-E1E628A229ED"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = AdHocDist; }; @@ -796,14 +1446,16 @@ isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: John Carmack"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; GCC_C_LANGUAGE_STANDARD = c99; GCC_THUMB_SUPPORT = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 3.2; PREBINDING = NO; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = "156B7F53-1BDC-4116-B0CC-F8CB2252E722"; - SDKROOT = iphoneos2.0; + "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; + SDKROOT = iphoneos; SYMROOT = ../../build; }; name = ReleaseLite; @@ -812,7 +1464,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: John Carmack"; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; COPY_PHASE_STRIP = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = wolf3d_Prefix.pch; @@ -824,7 +1476,8 @@ INFOPLIST_FILE = Info.plist; PRODUCT_NAME = wolf3dlite; PROFILE_PREFIX = nu.r3; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = "156B7F53-1BDC-4116-B0CC-F8CB2252E722"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = ReleaseLite; }; @@ -834,11 +1487,14 @@ ARCHS = "$(ARCHS_STANDARD_32_BIT)"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; GCC_C_LANGUAGE_STANDARD = c99; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = "-DDEBUG"; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; - ONLY_ACTIVE_ARCH = YES; + IPHONEOS_DEPLOYMENT_TARGET = 3.2; PREBINDING = NO; - SDKROOT = iphoneos2.0; + SDKROOT = iphoneos; SYMROOT = ../../build; }; name = DebugLite; @@ -847,7 +1503,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Cass Everitt"; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; @@ -861,7 +1517,8 @@ INFOPLIST_FILE = Info.plist; PRODUCT_NAME = wolf3dlite; PROFILE_PREFIX = nu.r3; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = "94041F5C-2EDC-4F49-AF97-95ECE6BB398D"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = DebugLite; }; @@ -871,11 +1528,15 @@ ARCHS = "$(ARCHS_STANDARD_32_BIT)"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; GCC_C_LANGUAGE_STANDARD = c99; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = "-DDEBUG"; + GCC_TREAT_WARNINGS_AS_ERRORS = YES; + GCC_VERSION = com.apple.compilers.llvmgcc42; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; - ONLY_ACTIVE_ARCH = YES; + IPHONEOS_DEPLOYMENT_TARGET = 3.2; PREBINDING = NO; - SDKROOT = iphoneos2.0; + SDKROOT = iphoneos; SYMROOT = ../../build; }; name = Debug; @@ -884,18 +1545,63 @@ isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: John Carmack"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; GCC_C_LANGUAGE_STANDARD = c99; + GCC_DYNAMIC_NO_PIC = YES; + GCC_ENABLE_OBJC_EXCEPTIONS = NO; + GCC_OPTIMIZATION_LEVEL = 3; GCC_THUMB_SUPPORT = NO; + GCC_UNROLL_LOOPS = YES; + GCC_VERSION = 4.2; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 3.2; PREBINDING = NO; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = "156B7F53-1BDC-4116-B0CC-F8CB2252E722"; - SDKROOT = iphoneos2.0; + "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; + SDKROOT = iphoneos; SYMROOT = ../../build; }; name = Release; }; + C8139B6B13FC40750094C2C0 /* DistributionLite */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: id Software"; + GCC_C_LANGUAGE_STANDARD = c99; + GCC_THUMB_SUPPORT = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 3.2; + PREBINDING = NO; + "PROVISIONING_PROFILE[sdk=iphoneos*]" = "31C73095-0DD9-4ABA-BB25-8D23F661F10F"; + SDKROOT = iphoneos; + SYMROOT = ../../build; + }; + name = DistributionLite; + }; + C8139B6C13FC40750094C2C0 /* DistributionLite */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + COPY_PHASE_STRIP = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = wolf3d_Prefix.pch; + GCC_PREPROCESSOR_DEFINITIONS = ( + LITE, + IPHONE, + ); + HEADER_SEARCH_PATHS = ""; + INFOPLIST_FILE = Info.plist; + PRODUCT_NAME = wolf3dlite; + PROFILE_PREFIX = nu.r3; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DistributionLite; + }; ED2751531083BE8C009C891E /* Distribution */ = { isa = XCBuildConfiguration; buildSettings = { @@ -903,11 +1609,13 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: id Software"; GCC_C_LANGUAGE_STANDARD = c99; GCC_THUMB_SUPPORT = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 3.2; PREBINDING = NO; "PROVISIONING_PROFILE[sdk=iphoneos*]" = "31C73095-0DD9-4ABA-BB25-8D23F661F10F"; - SDKROOT = iphoneos2.0; + SDKROOT = iphoneos; SYMROOT = ../../build; }; name = Distribution; @@ -916,7 +1624,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: id Software"; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; COPY_PHASE_STRIP = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = wolf3d_Prefix.pch; @@ -925,7 +1633,8 @@ INFOPLIST_FILE = Info.plist; PRODUCT_NAME = wolf3d; PROFILE_PREFIX = nu.r3; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = "31C73095-0DD9-4ABA-BB25-8D23F661F10F"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Distribution; }; @@ -942,6 +1651,7 @@ 4364BF490F5CB27300F29317 /* AdHocDist */, 431181710F994C5400FF9351 /* AdHocDistLite */, ED2751541083BE8C009C891E /* Distribution */, + C8139B6C13FC40750094C2C0 /* DistributionLite */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -956,6 +1666,7 @@ 4364BF480F5CB27300F29317 /* AdHocDist */, 431181700F994C5400FF9351 /* AdHocDistLite */, ED2751531083BE8C009C891E /* Distribution */, + C8139B6B13FC40750094C2C0 /* DistributionLite */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/wolf3d/code/iphone/wolf3d.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/wolf3d/code/iphone/wolf3d.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..ccc050f --- /dev/null +++ b/wolf3d/code/iphone/wolf3d.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/wolf3d/code/iphone/wolf3d.xcodeproj/project.xcworkspace/xcuserdata/ryan.gerleve.xcuserdatad/UserInterfaceState.xcuserstate b/wolf3d/code/iphone/wolf3d.xcodeproj/project.xcworkspace/xcuserdata/ryan.gerleve.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..d358fa0 --- /dev/null +++ b/wolf3d/code/iphone/wolf3d.xcodeproj/project.xcworkspace/xcuserdata/ryan.gerleve.xcuserdatad/UserInterfaceState.xcuserstate @@ -0,0 +1,13352 @@ + + + + + $archiver + NSKeyedArchiver + $objects + + $null + + $class + + CF$UID + 87 + + NS.keys + + + CF$UID + 2 + + + CF$UID + 3 + + + NS.objects + + + CF$UID + 4 + + + CF$UID + 618 + + + + 04A960C0-F0FB-4FFE-8B33-9A3E3166F3A7 + IDEWorkspaceDocument + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 5 + + + CF$UID + 6 + + + CF$UID + 7 + + + CF$UID + 8 + + + CF$UID + 9 + + + CF$UID + 10 + + + NS.objects + + + CF$UID + 7 + + + CF$UID + 11 + + + CF$UID + 13 + + + CF$UID + 617 + + + CF$UID + 497 + + + CF$UID + 2 + + + + IDEActiveWorkspaceTabController + IDEOrderedWorkspaceTabControllers + IDEWorkspaceTabController_C6037F83-CE47-4CA3-8F0B-75B835318606 + IDEWindowFrame + IDEWindowToolbarIsVisible + IDEWorkspaceWindowControllerUniqueIdentifier + + $class + + CF$UID + 12 + + NS.objects + + + CF$UID + 7 + + + + + $classes + + NSArray + NSObject + + $classname + NSArray + + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 14 + + + CF$UID + 15 + + + CF$UID + 16 + + + CF$UID + 17 + + + CF$UID + 18 + + + CF$UID + 19 + + + CF$UID + 20 + + + CF$UID + 21 + + + NS.objects + + + CF$UID + 22 + + + CF$UID + 497 + + + CF$UID + 460 + + + CF$UID + 507 + + + CF$UID + 513 + + + CF$UID + 607 + + + CF$UID + 497 + + + CF$UID + 616 + + + + IDEEditorArea + IDEShowNavigator + AssistantEditorsLayout + IDEWorkspaceTabControllerUtilityAreaSplitView + IDENavigatorArea + IDEWorkspaceTabControllerDesignAreaSplitView + IDEShowUtilities + IDETabLabel + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 23 + + + CF$UID + 24 + + + CF$UID + 25 + + + CF$UID + 26 + + + CF$UID + 27 + + + CF$UID + 28 + + + CF$UID + 29 + + + CF$UID + 30 + + + NS.objects + + + CF$UID + 31 + + + CF$UID + 49 + + + CF$UID + 471 + + + CF$UID + 497 + + + CF$UID + 460 + + + CF$UID + 498 + + + CF$UID + 506 + + + CF$UID + 497 + + + + layoutTree + IDEEditorMode_Standard + IDEEDitorArea_DebugArea + IDEShowEditor + EditorMode + DebuggerSplitView + DefaultPersistentRepresentations + ShowDebuggerArea + + $class + + CF$UID + 48 + + geniusEditorContextNode + + CF$UID + 0 + + primaryEditorContextNode + + CF$UID + 32 + + rootLayoutTreeNode + + CF$UID + 45 + + + + $class + + CF$UID + 47 + + children + + CF$UID + 0 + + contentType + 1 + documentArchivableRepresentation + + CF$UID + 33 + + orientation + 0 + parent + + CF$UID + 45 + + + + $class + + CF$UID + 44 + + DocumentLocation + + CF$UID + 40 + + DomainIdentifier + + CF$UID + 34 + + IdentifierPath + + CF$UID + 35 + + IndexOfDocumentIdentifier + + CF$UID + 39 + + + Xcode.IDENavigableItemDomain.WorkspaceStructure + + $class + + CF$UID + 12 + + NS.objects + + + CF$UID + 36 + + + + + $class + + CF$UID + 38 + + Identifier + + CF$UID + 37 + + + wolf3d + + $classes + + IDEArchivableStringIndexPair + NSObject + + $classname + IDEArchivableStringIndexPair + + 9223372036854775807 + + $class + + CF$UID + 43 + + documentURL + + CF$UID + 41 + + timestamp + + CF$UID + 0 + + + + $class + + CF$UID + 42 + + NS.string + file://localhost/Work/ryan.gerleve/idMobileDepot/Wolfenstein3DPlatinumDepot/wolf3d/code/iphone/wolf3d.xcodeproj/ + + + $classes + + NSMutableString + NSString + NSObject + + $classname + NSMutableString + + + $classes + + DVTDocumentLocation + NSObject + + $classname + DVTDocumentLocation + + + $classes + + IDENavigableItemArchivableRepresentation + NSObject + + $classname + IDENavigableItemArchivableRepresentation + + + $class + + CF$UID + 47 + + children + + CF$UID + 46 + + contentType + 0 + documentArchivableRepresentation + + CF$UID + 0 + + orientation + 0 + parent + + CF$UID + 0 + + + + $class + + CF$UID + 12 + + NS.objects + + + CF$UID + 32 + + + + + $classes + + IDEWorkspaceTabControllerLayoutTreeNode + NSObject + + $classname + IDEWorkspaceTabControllerLayoutTreeNode + + + $classes + + IDEWorkspaceTabControllerLayoutTree + NSObject + + $classname + IDEWorkspaceTabControllerLayoutTree + + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 50 + + + NS.objects + + + CF$UID + 51 + + + + EditorLayout_PersistentRepresentation + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 52 + + + NS.objects + + + CF$UID + 53 + + + + Main + + $class + + CF$UID + 87 + + NS.keys + + + CF$UID + 54 + + + CF$UID + 55 + + + CF$UID + 56 + + + NS.objects + + + CF$UID + 57 + + + CF$UID + 460 + + + CF$UID + 469 + + + + EditorLayout_StateSavingStateDictionaries + EditorLayout_Selected + EditorLayout_Geometry + + $class + + CF$UID + 12 + + NS.objects + + + CF$UID + 58 + + + + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 59 + + + CF$UID + 60 + + + CF$UID + 61 + + + CF$UID + 62 + + + CF$UID + 63 + + + CF$UID + 64 + + + CF$UID + 65 + + + NS.objects + + + CF$UID + 66 + + + CF$UID + 67 + + + CF$UID + 72 + + + CF$UID + 464 + + + CF$UID + 464 + + + CF$UID + 465 + + + CF$UID + 466 + + + + FileDataType + ArchivableRepresentation + EditorState + NavigableItemName + DocumentNavigableItemName + DocumentExtensionIdentifier + DocumentURL + com.apple.xcode.project + + $class + + CF$UID + 44 + + DocumentLocation + + CF$UID + 40 + + DomainIdentifier + + CF$UID + 34 + + IdentifierPath + + CF$UID + 68 + + IndexOfDocumentIdentifier + + CF$UID + 71 + + + + $class + + CF$UID + 12 + + NS.objects + + + CF$UID + 69 + + + + + $class + + CF$UID + 38 + + Identifier + + CF$UID + 70 + + + wolf3d + 9223372036854775807 + + $class + + CF$UID + 87 + + NS.keys + + + CF$UID + 73 + + + CF$UID + 74 + + + CF$UID + 75 + + + CF$UID + 76 + + + CF$UID + 77 + + + NS.objects + + + CF$UID + 78 + + + CF$UID + 79 + + + CF$UID + 92 + + + CF$UID + 93 + + + CF$UID + 463 + + + + Xcode3ProjectEditorPreviousProjectEditorClass + Xcode3ProjectEditor.sourceList.splitview + Xcode3ProjectEditorPreviousTargetEditorClass + Xcode3ProjectEditorSelectedDocumentLocations + Xcode3ProjectEditor_Xcode3BuildSettingsEditor + Xcode3ProjectInfoEditor + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 80 + + + NS.objects + + + CF$UID + 81 + + + + DVTSplitViewItems + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 82 + + + CF$UID + 88 + + + + + $class + + CF$UID + 87 + + NS.keys + + + CF$UID + 83 + + + CF$UID + 84 + + + NS.objects + + + CF$UID + 85 + + + CF$UID + 86 + + + + DVTIdentifier + DVTViewMagnitude + + 170 + + $classes + + NSDictionary + NSObject + + $classname + NSDictionary + + + $class + + CF$UID + 87 + + NS.keys + + + CF$UID + 83 + + + CF$UID + 84 + + + NS.objects + + + CF$UID + 85 + + + CF$UID + 89 + + + + 931 + + $classes + + NSMutableArray + NSArray + NSObject + + $classname + NSMutableArray + + + $classes + + NSMutableDictionary + NSDictionary + NSObject + + $classname + NSMutableDictionary + + Xcode3BuildSettingsEditor + + $class + + CF$UID + 12 + + NS.objects + + + CF$UID + 94 + + + + + $class + + CF$UID + 462 + + documentURL + + CF$UID + 95 + + selection + + CF$UID + 97 + + timestamp + + CF$UID + 96 + + + file://localhost/Work/ryan.gerleve/idMobileDepot/Wolfenstein3DPlatinumDepot/wolf3d/code/iphone/wolf3d.xcodeproj/ + 334881995.84964103 + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 98 + + + CF$UID + 99 + + + CF$UID + 100 + + + NS.objects + + + CF$UID + 101 + + + CF$UID + 102 + + + CF$UID + 103 + + + + Editor + Target + Xcode3BuildSettingsEditorLocations + Xcode3BuildSettingsEditor + wolf3d + + $class + + CF$UID + 12 + + NS.objects + + + CF$UID + 104 + + + + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 105 + + + CF$UID + 106 + + + CF$UID + 107 + + + CF$UID + 108 + + + CF$UID + 109 + + + CF$UID + 110 + + + NS.objects + + + CF$UID + 111 + + + CF$UID + 458 + + + CF$UID + 460 + + + CF$UID + 460 + + + CF$UID + 460 + + + CF$UID + 461 + + + + Collapsed Build Property Categories + Selected Build Properties + Xcode3BuildSettingsEditorDisplayMode + Xcode3BuildPropertyValueDisplayMode + Xcode3BuildSettingsEditorMode + Xcode3BuildPropertyNameDisplayMode + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 112 + + + CF$UID + 113 + + + CF$UID + 114 + + + CF$UID + 115 + + + CF$UID + 116 + + + CF$UID + 117 + + + CF$UID + 118 + + + CF$UID + 119 + + + CF$UID + 120 + + + CF$UID + 121 + + + CF$UID + 122 + + + CF$UID + 123 + + + CF$UID + 124 + + + CF$UID + 125 + + + CF$UID + 126 + + + CF$UID + 127 + + + CF$UID + 128 + + + CF$UID + 129 + + + CF$UID + 130 + + + CF$UID + 131 + + + CF$UID + 132 + + + CF$UID + 133 + + + CF$UID + 134 + + + CF$UID + 135 + + + CF$UID + 136 + + + CF$UID + 137 + + + CF$UID + 138 + + + CF$UID + 139 + + + CF$UID + 140 + + + CF$UID + 141 + + + CF$UID + 142 + + + CF$UID + 143 + + + CF$UID + 144 + + + CF$UID + 145 + + + CF$UID + 146 + + + CF$UID + 147 + + + CF$UID + 148 + + + CF$UID + 149 + + + CF$UID + 150 + + + CF$UID + 151 + + + CF$UID + 152 + + + CF$UID + 153 + + + CF$UID + 154 + + + CF$UID + 155 + + + CF$UID + 156 + + + CF$UID + 157 + + + CF$UID + 158 + + + CF$UID + 159 + + + CF$UID + 160 + + + CF$UID + 161 + + + CF$UID + 162 + + + CF$UID + 163 + + + CF$UID + 164 + + + CF$UID + 165 + + + CF$UID + 166 + + + CF$UID + 167 + + + CF$UID + 168 + + + CF$UID + 169 + + + CF$UID + 170 + + + CF$UID + 171 + + + CF$UID + 172 + + + CF$UID + 173 + + + CF$UID + 174 + + + CF$UID + 175 + + + CF$UID + 176 + + + CF$UID + 177 + + + CF$UID + 178 + + + CF$UID + 179 + + + CF$UID + 180 + + + CF$UID + 181 + + + CF$UID + 182 + + + CF$UID + 183 + + + CF$UID + 184 + + + CF$UID + 185 + + + CF$UID + 186 + + + CF$UID + 187 + + + CF$UID + 188 + + + CF$UID + 189 + + + CF$UID + 190 + + + CF$UID + 191 + + + CF$UID + 192 + + + CF$UID + 193 + + + CF$UID + 194 + + + CF$UID + 195 + + + CF$UID + 196 + + + CF$UID + 197 + + + CF$UID + 198 + + + CF$UID + 199 + + + CF$UID + 200 + + + CF$UID + 201 + + + CF$UID + 202 + + + CF$UID + 203 + + + CF$UID + 204 + + + CF$UID + 205 + + + CF$UID + 206 + + + CF$UID + 207 + + + CF$UID + 208 + + + CF$UID + 209 + + + CF$UID + 210 + + + CF$UID + 211 + + + CF$UID + 212 + + + CF$UID + 213 + + + CF$UID + 214 + + + CF$UID + 215 + + + CF$UID + 216 + + + CF$UID + 217 + + + CF$UID + 218 + + + CF$UID + 219 + + + CF$UID + 220 + + + CF$UID + 221 + + + CF$UID + 222 + + + CF$UID + 223 + + + CF$UID + 224 + + + CF$UID + 225 + + + CF$UID + 226 + + + CF$UID + 227 + + + CF$UID + 228 + + + CF$UID + 229 + + + CF$UID + 230 + + + CF$UID + 231 + + + CF$UID + 232 + + + CF$UID + 233 + + + CF$UID + 234 + + + CF$UID + 235 + + + CF$UID + 236 + + + CF$UID + 237 + + + CF$UID + 238 + + + CF$UID + 239 + + + CF$UID + 240 + + + CF$UID + 241 + + + CF$UID + 242 + + + CF$UID + 243 + + + CF$UID + 244 + + + CF$UID + 245 + + + CF$UID + 246 + + + CF$UID + 247 + + + CF$UID + 248 + + + CF$UID + 249 + + + CF$UID + 250 + + + CF$UID + 251 + + + CF$UID + 252 + + + CF$UID + 253 + + + CF$UID + 254 + + + CF$UID + 255 + + + CF$UID + 256 + + + CF$UID + 257 + + + CF$UID + 258 + + + CF$UID + 259 + + + CF$UID + 260 + + + CF$UID + 261 + + + CF$UID + 262 + + + CF$UID + 263 + + + CF$UID + 264 + + + CF$UID + 265 + + + CF$UID + 266 + + + CF$UID + 267 + + + CF$UID + 268 + + + CF$UID + 269 + + + CF$UID + 270 + + + CF$UID + 271 + + + CF$UID + 272 + + + CF$UID + 273 + + + CF$UID + 274 + + + CF$UID + 275 + + + CF$UID + 276 + + + CF$UID + 277 + + + CF$UID + 278 + + + CF$UID + 279 + + + CF$UID + 280 + + + CF$UID + 281 + + + CF$UID + 282 + + + CF$UID + 283 + + + CF$UID + 284 + + + CF$UID + 285 + + + CF$UID + 286 + + + CF$UID + 287 + + + CF$UID + 288 + + + CF$UID + 289 + + + CF$UID + 290 + + + CF$UID + 291 + + + CF$UID + 292 + + + CF$UID + 293 + + + CF$UID + 294 + + + CF$UID + 295 + + + CF$UID + 296 + + + CF$UID + 297 + + + CF$UID + 298 + + + CF$UID + 299 + + + CF$UID + 300 + + + CF$UID + 301 + + + CF$UID + 302 + + + CF$UID + 303 + + + CF$UID + 304 + + + CF$UID + 305 + + + CF$UID + 306 + + + CF$UID + 307 + + + CF$UID + 308 + + + CF$UID + 309 + + + CF$UID + 310 + + + CF$UID + 311 + + + CF$UID + 312 + + + CF$UID + 313 + + + CF$UID + 314 + + + CF$UID + 315 + + + CF$UID + 316 + + + CF$UID + 317 + + + CF$UID + 318 + + + CF$UID + 319 + + + CF$UID + 320 + + + CF$UID + 321 + + + CF$UID + 322 + + + CF$UID + 323 + + + CF$UID + 324 + + + CF$UID + 325 + + + CF$UID + 326 + + + CF$UID + 327 + + + CF$UID + 328 + + + CF$UID + 329 + + + CF$UID + 330 + + + CF$UID + 331 + + + CF$UID + 332 + + + CF$UID + 333 + + + CF$UID + 334 + + + CF$UID + 335 + + + CF$UID + 336 + + + CF$UID + 337 + + + CF$UID + 338 + + + CF$UID + 339 + + + CF$UID + 340 + + + CF$UID + 341 + + + CF$UID + 342 + + + CF$UID + 343 + + + CF$UID + 344 + + + CF$UID + 345 + + + CF$UID + 346 + + + CF$UID + 347 + + + CF$UID + 348 + + + CF$UID + 349 + + + CF$UID + 350 + + + CF$UID + 351 + + + CF$UID + 352 + + + CF$UID + 353 + + + CF$UID + 354 + + + CF$UID + 355 + + + CF$UID + 356 + + + CF$UID + 357 + + + CF$UID + 358 + + + CF$UID + 359 + + + CF$UID + 360 + + + CF$UID + 361 + + + CF$UID + 362 + + + CF$UID + 363 + + + CF$UID + 364 + + + CF$UID + 365 + + + CF$UID + 366 + + + CF$UID + 367 + + + CF$UID + 368 + + + CF$UID + 369 + + + CF$UID + 370 + + + CF$UID + 371 + + + CF$UID + 372 + + + CF$UID + 373 + + + CF$UID + 374 + + + CF$UID + 375 + + + CF$UID + 376 + + + CF$UID + 377 + + + CF$UID + 378 + + + CF$UID + 379 + + + CF$UID + 380 + + + CF$UID + 381 + + + CF$UID + 382 + + + CF$UID + 383 + + + CF$UID + 384 + + + CF$UID + 385 + + + CF$UID + 386 + + + CF$UID + 387 + + + CF$UID + 388 + + + CF$UID + 389 + + + CF$UID + 390 + + + CF$UID + 391 + + + CF$UID + 392 + + + CF$UID + 393 + + + CF$UID + 394 + + + CF$UID + 395 + + + CF$UID + 396 + + + CF$UID + 397 + + + CF$UID + 398 + + + CF$UID + 399 + + + CF$UID + 400 + + + CF$UID + 401 + + + CF$UID + 402 + + + CF$UID + 403 + + + CF$UID + 404 + + + CF$UID + 405 + + + CF$UID + 406 + + + CF$UID + 407 + + + CF$UID + 408 + + + CF$UID + 409 + + + CF$UID + 410 + + + CF$UID + 411 + + + CF$UID + 412 + + + CF$UID + 413 + + + CF$UID + 414 + + + CF$UID + 415 + + + CF$UID + 416 + + + CF$UID + 417 + + + CF$UID + 418 + + + CF$UID + 419 + + + CF$UID + 420 + + + CF$UID + 421 + + + CF$UID + 422 + + + CF$UID + 423 + + + CF$UID + 424 + + + CF$UID + 425 + + + CF$UID + 426 + + + CF$UID + 427 + + + CF$UID + 428 + + + CF$UID + 429 + + + CF$UID + 430 + + + CF$UID + 431 + + + CF$UID + 432 + + + CF$UID + 433 + + + CF$UID + 434 + + + CF$UID + 435 + + + CF$UID + 436 + + + CF$UID + 437 + + + CF$UID + 438 + + + CF$UID + 439 + + + CF$UID + 440 + + + CF$UID + 441 + + + CF$UID + 442 + + + CF$UID + 443 + + + CF$UID + 444 + + + CF$UID + 445 + + + CF$UID + 446 + + + CF$UID + 447 + + + CF$UID + 448 + + + CF$UID + 449 + + + CF$UID + 450 + + + CF$UID + 451 + + + CF$UID + 452 + + + CF$UID + 453 + + + CF$UID + 454 + + + CF$UID + 455 + + + CF$UID + 456 + + + CF$UID + 457 + + + + + $class + + CF$UID + 42 + + NS.string + Architectures||ADDITIONAL_SDKS + + + $class + + CF$UID + 42 + + NS.string + Architectures||ARCHS + + + $class + + CF$UID + 42 + + NS.string + Architectures||SDKROOT + + + $class + + CF$UID + 42 + + NS.string + Architectures||ONLY_ACTIVE_ARCH + + + $class + + CF$UID + 42 + + NS.string + Architectures||SUPPORTED_PLATFORMS + + + $class + + CF$UID + 42 + + NS.string + Architectures||VALID_ARCHS + + + $class + + CF$UID + 42 + + NS.string + Build Locations||SYMROOT + + + $class + + CF$UID + 42 + + NS.string + Build Locations||OBJROOT + + + $class + + CF$UID + 42 + + NS.string + Build Locations||SHARED_PRECOMPS_DIR + + + $class + + CF$UID + 42 + + NS.string + Build Options||BUILD_VARIANTS + + + $class + + CF$UID + 42 + + NS.string + Build Options||DEBUG_INFORMATION_FORMAT + + + $class + + CF$UID + 42 + + NS.string + Build Options||ENABLE_OPENMP_SUPPORT + + + $class + + CF$UID + 42 + + NS.string + Build Options||GENERATE_PROFILING_CODE + + + $class + + CF$UID + 42 + + NS.string + Build Options||PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR + + + $class + + CF$UID + 42 + + NS.string + Build Options||RUN_CLANG_STATIC_ANALYZER + + + $class + + CF$UID + 42 + + NS.string + Build Options||SCAN_ALL_SOURCE_FILES_FOR_INCLUDES + + + $class + + CF$UID + 42 + + NS.string + Build Options||VALIDATE_PRODUCT + + + $class + + CF$UID + 42 + + NS.string + Code Signing||CODE_SIGN_RESOURCE_RULES_PATH + + + $class + + CF$UID + 42 + + NS.string + Code Signing||OTHER_CODE_SIGN_FLAGS + + + $class + + CF$UID + 42 + + NS.string + Deployment||STRIPFLAGS + + + $class + + CF$UID + 42 + + NS.string + Deployment||ALTERNATE_GROUP + + + $class + + CF$UID + 42 + + NS.string + Deployment||ALTERNATE_OWNER + + + $class + + CF$UID + 42 + + NS.string + Deployment||ALTERNATE_MODE + + + $class + + CF$UID + 42 + + NS.string + Deployment||ALTERNATE_PERMISSIONS_FILES + + + $class + + CF$UID + 42 + + NS.string + Deployment||COMBINE_HIDPI_IMAGES + + + $class + + CF$UID + 42 + + NS.string + Deployment||DEPLOYMENT_LOCATION + + + $class + + CF$UID + 42 + + NS.string + Deployment||DEPLOYMENT_POSTPROCESSING + + + $class + + CF$UID + 42 + + NS.string + Deployment||INSTALL_GROUP + + + $class + + CF$UID + 42 + + NS.string + Deployment||INSTALL_OWNER + + + $class + + CF$UID + 42 + + NS.string + Deployment||INSTALL_MODE_FLAG + + + $class + + CF$UID + 42 + + NS.string + Deployment||DSTROOT + + + $class + + CF$UID + 42 + + NS.string + Deployment||INSTALL_PATH + + + $class + + CF$UID + 42 + + NS.string + Deployment||MACOSX_DEPLOYMENT_TARGET + + + $class + + CF$UID + 42 + + NS.string + Deployment||SKIP_INSTALL + + + $class + + CF$UID + 42 + + NS.string + Deployment||STRIP_INSTALLED_PRODUCT + + + $class + + CF$UID + 42 + + NS.string + Deployment||STRIP_STYLE + + + $class + + CF$UID + 42 + + NS.string + Deployment||TARGETED_DEVICE_FAMILY + + + $class + + CF$UID + 42 + + NS.string + Deployment||SEPARATE_STRIP + + + $class + + CF$UID + 42 + + NS.string + Deployment||IPHONEOS_DEPLOYMENT_TARGET + + + $class + + CF$UID + 42 + + NS.string + Kernel Module||MODULE_NAME + + + $class + + CF$UID + 42 + + NS.string + Kernel Module||MODULE_START + + + $class + + CF$UID + 42 + + NS.string + Kernel Module||MODULE_STOP + + + $class + + CF$UID + 42 + + NS.string + Kernel Module||MODULE_VERSION + + + $class + + CF$UID + 42 + + NS.string + Linking||BUNDLE_LOADER + + + $class + + CF$UID + 42 + + NS.string + Linking||STANDARD_C_PLUS_PLUS_LIBRARY_TYPE + + + $class + + CF$UID + 42 + + NS.string + Linking||DYLIB_COMPATIBILITY_VERSION + + + $class + + CF$UID + 42 + + NS.string + Linking||DYLIB_CURRENT_VERSION + + + $class + + CF$UID + 42 + + NS.string + Linking||DEAD_CODE_STRIPPING + + + $class + + CF$UID + 42 + + NS.string + Linking||LINKER_DISPLAYS_MANGLED_NAMES + + + $class + + CF$UID + 42 + + NS.string + Linking||LD_NO_PIE + + + $class + + CF$UID + 42 + + NS.string + Linking||PRESERVE_DEAD_CODE_INITS_AND_TERMS + + + $class + + CF$UID + 42 + + NS.string + Linking||LD_DYLIB_INSTALL_NAME + + + $class + + CF$UID + 42 + + NS.string + Linking||EXPORTED_SYMBOLS_FILE + + + $class + + CF$UID + 42 + + NS.string + Linking||INIT_ROUTINE + + + $class + + CF$UID + 42 + + NS.string + Linking||LINK_WITH_STANDARD_LIBRARIES + + + $class + + CF$UID + 42 + + NS.string + Linking||MACH_O_TYPE + + + $class + + CF$UID + 42 + + NS.string + Linking||LD_OPENMP_FLAGS + + + $class + + CF$UID + 42 + + NS.string + Linking||ORDER_FILE + + + $class + + CF$UID + 42 + + NS.string + Linking||OTHER_LDFLAGS + + + $class + + CF$UID + 42 + + NS.string + Linking||GENERATE_MASTER_OBJECT_FILE + + + $class + + CF$UID + 42 + + NS.string + Linking||PRELINK_LIBS + + + $class + + CF$UID + 42 + + NS.string + Linking||KEEP_PRIVATE_EXTERNS + + + $class + + CF$UID + 42 + + NS.string + Linking||LD_RUNPATH_SEARCH_PATHS + + + $class + + CF$UID + 42 + + NS.string + Linking||SEPARATE_SYMBOL_EDIT + + + $class + + CF$UID + 42 + + NS.string + Linking||PRELINK_FLAGS + + + $class + + CF$UID + 42 + + NS.string + Linking||SECTORDER_FLAGS + + + $class + + CF$UID + 42 + + NS.string + Linking||UNEXPORTED_SYMBOLS_FILE + + + $class + + CF$UID + 42 + + NS.string + Linking||WARNING_LDFLAGS + + + $class + + CF$UID + 42 + + NS.string + Linking||LD_GENERATE_MAP_FILE + + + $class + + CF$UID + 42 + + NS.string + Packaging||COMPRESS_PNG_FILES + + + $class + + CF$UID + 42 + + NS.string + Packaging||APPLY_RULES_IN_COPY_FILES + + + $class + + CF$UID + 42 + + NS.string + Packaging||EXECUTABLE_EXTENSION + + + $class + + CF$UID + 42 + + NS.string + Packaging||EXECUTABLE_PREFIX + + + $class + + CF$UID + 42 + + NS.string + Packaging||INFOPLIST_EXPAND_BUILD_SETTINGS + + + $class + + CF$UID + 42 + + NS.string + Packaging||GENERATE_PKGINFO_FILE + + + $class + + CF$UID + 42 + + NS.string + Packaging||FRAMEWORK_VERSION + + + $class + + CF$UID + 42 + + NS.string + Packaging||INFOPLIST_FILE + + + $class + + CF$UID + 42 + + NS.string + Packaging||INFOPLIST_OTHER_PREPROCESSOR_FLAGS + + + $class + + CF$UID + 42 + + NS.string + Packaging||INFOPLIST_OUTPUT_FORMAT + + + $class + + CF$UID + 42 + + NS.string + Packaging||INFOPLIST_PREPROCESSOR_DEFINITIONS + + + $class + + CF$UID + 42 + + NS.string + Packaging||INFOPLIST_PREFIX_HEADER + + + $class + + CF$UID + 42 + + NS.string + Packaging||INFOPLIST_PREPROCESS + + + $class + + CF$UID + 42 + + NS.string + Packaging||COPYING_PRESERVES_HFS_DATA + + + $class + + CF$UID + 42 + + NS.string + Packaging||PLIST_FILE_OUTPUT_FORMAT + + + $class + + CF$UID + 42 + + NS.string + Packaging||STRINGS_FILE_OUTPUT_ENCODING + + + $class + + CF$UID + 42 + + NS.string + Packaging||WRAPPER_EXTENSION + + + $class + + CF$UID + 42 + + NS.string + Search Paths||ALWAYS_SEARCH_USER_PATHS + + + $class + + CF$UID + 42 + + NS.string + Search Paths||FRAMEWORK_SEARCH_PATHS + + + $class + + CF$UID + 42 + + NS.string + Search Paths||HEADER_SEARCH_PATHS + + + $class + + CF$UID + 42 + + NS.string + Search Paths||LIBRARY_SEARCH_PATHS + + + $class + + CF$UID + 42 + + NS.string + Search Paths||REZ_SEARCH_PATHS + + + $class + + CF$UID + 42 + + NS.string + Search Paths||EXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES + + + $class + + CF$UID + 42 + + NS.string + Search Paths||INCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES + + + $class + + CF$UID + 42 + + NS.string + Search Paths||USER_HEADER_SEARCH_PATHS + + + $class + + CF$UID + 42 + + NS.string + Unit Testing||OTHER_TEST_FLAGS + + + $class + + CF$UID + 42 + + NS.string + Unit Testing||TEST_AFTER_BUILD + + + $class + + CF$UID + 42 + + NS.string + Unit Testing||TEST_HOST + + + $class + + CF$UID + 42 + + NS.string + Unit Testing||TEST_RIG + + + $class + + CF$UID + 42 + + NS.string + Versioning||CURRENT_PROJECT_VERSION + + + $class + + CF$UID + 42 + + NS.string + Versioning||VERSION_INFO_EXPORT_DECL + + + $class + + CF$UID + 42 + + NS.string + Versioning||VERSION_INFO_PREFIX + + + $class + + CF$UID + 42 + + NS.string + Versioning||VERSION_INFO_SUFFIX + + + $class + + CF$UID + 42 + + NS.string + Versioning||VERSIONING_SYSTEM + + + $class + + CF$UID + 42 + + NS.string + Versioning||VERSION_INFO_BUILDER + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_FAST_OBJC_DISPATCH + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_OBJC_CALL_CXX_CDTORS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_ENABLE_SSE3_EXTENSIONS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_ENABLE_SSE41_EXTENSIONS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_ENABLE_SSE42_EXTENSIONS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_STRICT_ALIASING + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_FEEDBACK_DIRECTED_OPTIMIZATION + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_GENERATE_DEBUGGING_SYMBOLS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_GENERATE_TEST_COVERAGE_FILES + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_INLINES_ARE_PRIVATE_EXTERN + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_INSTRUMENT_PROGRAM_FLOW_ARCS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_ENABLE_KERNEL_DEVELOPMENT + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_DEBUGGING_SYMBOLS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_REUSE_STRINGS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_NO_COMMON_BLOCKS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_ENABLE_OBJC_GC + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_FAST_MATH + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_ENABLE_SYMBOL_SEPARATION + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_THREADSAFE_STATICS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_SYMBOLS_PRIVATE_EXTERN + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_CHAR_IS_UNSIGNED_CHAR + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_ENABLE_ASM_KEYWORD + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_C_LANGUAGE_STANDARD + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_CHECK_RETURN_VALUE_OF_OPERATOR_NEW + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_CW_ASM_SYNTAX + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_INPUT_FILETYPE + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_ENABLE_CPP_EXCEPTIONS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_ENABLE_CPP_RTTI + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_LINK_WITH_DYNAMIC_LIBRARIES + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_ENABLE_TRIGRAPHS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_ENABLE_FLOATING_POINT_LIBRARY_CALLS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_USE_INDIRECT_FUNCTION_CALLS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_USE_REGISTER_FUNCTION_CALLS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_INCREASE_PRECOMPILED_HEADER_SHARING + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||OTHER_CFLAGS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||OTHER_CPLUSPLUSFLAGS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_PRECOMPILE_PREFIX_HEADER + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_PREFIX_HEADER + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_ENABLE_BUILTIN_FUNCTIONS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_ENABLE_PASCAL_STRINGS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_FORCE_CPU_SUBTYPE_ALL + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_SHORT_ENUMS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_USE_STANDARD_INCLUDE_SEARCHING + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Preprocessing||GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_CHECK_SWITCH_STATEMENTS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_FOUR_CHARACTER_CONSTANTS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_SHADOW + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_64_TO_32_BIT_CONVERSION + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_INHIBIT_ALL_WARNINGS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_ABOUT_RETURN_TYPE + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_MISSING_PARENTHESES + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_ABOUT_MISSING_PROTOTYPES + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_ABOUT_MISSING_NEWLINE + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_NON_VIRTUAL_DESTRUCTOR + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||WARNING_CFLAGS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_PEDANTIC + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_ABOUT_POINTER_SIGNEDNESS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_PROTOTYPE_CONVERSION + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_SIGN_COMPARE + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_STRICT_SELECTOR_MATCH + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_TREAT_NONCONFORMANT_CODE_ERRORS_AS_WARNINGS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_TYPECHECK_CALLS_TO_PRINTF + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_UNDECLARED_SELECTOR + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_UNINITIALIZED_AUTOS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_UNKNOWN_PRAGMAS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_UNUSED_FUNCTION + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_UNUSED_LABEL + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_UNUSED_PARAMETER + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_UNUSED_VALUE + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_UNUSED_VARIABLE + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO + + + $class + + CF$UID + 42 + + NS.string + Interface Builder XIB Compiler - Options||IBC_FLATTEN_NIBS + + + $class + + CF$UID + 42 + + NS.string + Interface Builder XIB Compiler - Options||IBC_OTHER_FLAGS + + + $class + + CF$UID + 42 + + NS.string + Interface Builder XIB Compiler - Options||IBC_OVERRIDING_PLUGINS_AND_FRAMEWORKS_DIR + + + $class + + CF$UID + 42 + + NS.string + Interface Builder XIB Compiler - Options||IBC_PLUGIN_SEARCH_PATHS + + + $class + + CF$UID + 42 + + NS.string + Interface Builder XIB Compiler - Options||IBC_PLUGINS + + + $class + + CF$UID + 42 + + NS.string + Interface Builder XIB Compiler - Options||IBC_ERRORS + + + $class + + CF$UID + 42 + + NS.string + Interface Builder XIB Compiler - Options||IBC_NOTICES + + + $class + + CF$UID + 42 + + NS.string + Interface Builder XIB Compiler - Options||IBC_WARNINGS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_FAST_OBJC_DISPATCH + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_OBJC_CALL_CXX_CDTORS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_ENABLE_SSE3_EXTENSIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_ENABLE_SSE41_EXTENSIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_ENABLE_SSE42_EXTENSIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_STRICT_ALIASING + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_FEEDBACK_DIRECTED_OPTIMIZATION + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_GENERATE_DEBUGGING_SYMBOLS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_GENERATE_TEST_COVERAGE_FILES + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_INLINES_ARE_PRIVATE_EXTERN + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_INSTRUMENT_PROGRAM_FLOW_ARCS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_ENABLE_KERNEL_DEVELOPMENT + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_DEBUGGING_SYMBOLS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||LLVM_LTO + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_REUSE_STRINGS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_NO_COMMON_BLOCKS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_ENABLE_OBJC_GC + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_FAST_MATH + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_ENABLE_SYMBOL_SEPARATION + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_THREADSAFE_STATICS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_SYMBOLS_PRIVATE_EXTERN + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_CHAR_IS_UNSIGNED_CHAR + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_ENABLE_ASM_KEYWORD + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_C_LANGUAGE_STANDARD + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_CHECK_RETURN_VALUE_OF_OPERATOR_NEW + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_CW_ASM_SYNTAX + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_INPUT_FILETYPE + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_ENABLE_CPP_EXCEPTIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_ENABLE_CPP_RTTI + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_LINK_WITH_DYNAMIC_LIBRARIES + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_ENABLE_TRIGRAPHS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_ENABLE_FLOATING_POINT_LIBRARY_CALLS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_USE_INDIRECT_FUNCTION_CALLS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_USE_REGISTER_FUNCTION_CALLS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_INCREASE_PRECOMPILED_HEADER_SHARING + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||OTHER_CFLAGS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||OTHER_CPLUSPLUSFLAGS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_PRECOMPILE_PREFIX_HEADER + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_PREFIX_HEADER + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_ENABLE_BUILTIN_FUNCTIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_ENABLE_PASCAL_STRINGS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_FORCE_CPU_SUBTYPE_ALL + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_SHORT_ENUMS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_USE_STANDARD_INCLUDE_SEARCHING + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Preprocessing||GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_CHECK_SWITCH_STATEMENTS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_FOUR_CHARACTER_CONSTANTS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_SHADOW + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_64_TO_32_BIT_CONVERSION + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_INHIBIT_ALL_WARNINGS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_ABOUT_RETURN_TYPE + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_MISSING_PARENTHESES + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_ABOUT_MISSING_PROTOTYPES + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_ABOUT_MISSING_NEWLINE + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_NON_VIRTUAL_DESTRUCTOR + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||WARNING_CFLAGS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_PEDANTIC + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_ABOUT_POINTER_SIGNEDNESS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_PROTOTYPE_CONVERSION + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_SIGN_COMPARE + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_STRICT_SELECTOR_MATCH + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_TREAT_NONCONFORMANT_CODE_ERRORS_AS_WARNINGS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_TYPECHECK_CALLS_TO_PRINTF + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_UNDECLARED_SELECTOR + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_UNINITIALIZED_AUTOS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_UNKNOWN_PRAGMAS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_UNUSED_FUNCTION + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_UNUSED_LABEL + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_UNUSED_PARAMETER + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_UNUSED_VALUE + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_UNUSED_VARIABLE + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_FAST_OBJC_DISPATCH + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_ENABLE_SSE3_EXTENSIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_ENABLE_SSE41_EXTENSIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_ENABLE_SSE42_EXTENSIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_STRICT_ALIASING + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_GENERATE_DEBUGGING_SYMBOLS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_INLINES_ARE_PRIVATE_EXTERN + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_ENABLE_KERNEL_DEVELOPMENT + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||LLVM_LTO + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_REUSE_STRINGS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_NO_COMMON_BLOCKS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_ENABLE_OBJC_GC + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_FAST_MATH + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_THREADSAFE_STATICS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_SYMBOLS_PRIVATE_EXTERN + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_CHAR_IS_UNSIGNED_CHAR + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_ENABLE_ASM_KEYWORD + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_C_LANGUAGE_STANDARD + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_CW_ASM_SYNTAX + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_INPUT_FILETYPE + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_ENABLE_CPP_EXCEPTIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_ENABLE_CPP_RTTI + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_LINK_WITH_DYNAMIC_LIBRARIES + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_ENABLE_TRIGRAPHS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_ENABLE_FLOATING_POINT_LIBRARY_CALLS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_USE_INDIRECT_FUNCTION_CALLS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_USE_REGISTER_FUNCTION_CALLS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_INCREASE_PRECOMPILED_HEADER_SHARING + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||OTHER_CFLAGS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||OTHER_CPLUSPLUSFLAGS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_PRECOMPILE_PREFIX_HEADER + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_PREFIX_HEADER + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_ENABLE_BUILTIN_FUNCTIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_ENABLE_PASCAL_STRINGS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_FORCE_CPU_SUBTYPE_ALL + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_SHORT_ENUMS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_USE_STANDARD_INCLUDE_SEARCHING + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Preprocessing||GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_CHECK_SWITCH_STATEMENTS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_FOUR_CHARACTER_CONSTANTS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_SHADOW + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_64_TO_32_BIT_CONVERSION + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_INHIBIT_ALL_WARNINGS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_ABOUT_RETURN_TYPE + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_MISSING_PARENTHESES + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_ABOUT_MISSING_PROTOTYPES + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_ABOUT_MISSING_NEWLINE + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_NON_VIRTUAL_DESTRUCTOR + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||WARNING_CFLAGS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_PEDANTIC + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_ABOUT_POINTER_SIGNEDNESS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_SIGN_COMPARE + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_STRICT_SELECTOR_MATCH + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_TYPECHECK_CALLS_TO_PRINTF + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_UNDECLARED_SELECTOR + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_UNINITIALIZED_AUTOS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_UNKNOWN_PRAGMAS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_UNUSED_FUNCTION + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_UNUSED_LABEL + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_UNUSED_PARAMETER + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_UNUSED_VALUE + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_UNUSED_VARIABLE + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO + + + $class + + CF$UID + 42 + + NS.string + User-Defined||PREBINDING + + + $class + + CF$UID + 42 + + NS.string + User-Defined||PROFILE_PREFIX + + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 459 + + + + + $class + + CF$UID + 42 + + NS.string + Deployment||ALTERNATE_GROUP + + 0 + 1 + + $classes + + Xcode3ProjectDocumentLocation + DVTDocumentLocation + NSObject + + $classname + Xcode3ProjectDocumentLocation + + + $class + + CF$UID + 91 + + NS.keys + + NS.objects + + + wolf3d + Xcode.Xcode3ProjectSupport.EditorDocument.Xcode3Project + + $class + + CF$UID + 468 + + NS.base + + CF$UID + 0 + + NS.relative + + CF$UID + 467 + + + file://localhost/Work/ryan.gerleve/idMobileDepot/Wolfenstein3DPlatinumDepot/wolf3d/code/iphone/wolf3d.xcodeproj/ + + $classes + + NSURL + NSObject + + $classname + NSURL + + + $class + + CF$UID + 12 + + NS.objects + + + CF$UID + 470 + + + + {{0, 0}, {1101, 716}} + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 472 + + + CF$UID + 473 + + + CF$UID + 474 + + + CF$UID + 475 + + + CF$UID + 476 + + + CF$UID + 477 + + + NS.objects + + + CF$UID + 461 + + + CF$UID + 478 + + + CF$UID + 480 + + + CF$UID + 461 + + + CF$UID + 483 + + + CF$UID + 491 + + + + LayoutFocusMode + console + variables + LayoutMode + IDEDebuggerAreaSplitView + IDEDebugArea_SplitView + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 479 + + + NS.objects + + + CF$UID + 460 + + + + ConsoleFilterMode + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 481 + + + NS.objects + + + CF$UID + 482 + + + + DBGVariablesViewFilterMode + 2 + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 80 + + + NS.objects + + + CF$UID + 484 + + + + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 485 + + + CF$UID + 488 + + + + + $class + + CF$UID + 87 + + NS.keys + + + CF$UID + 83 + + + CF$UID + 84 + + + NS.objects + + + CF$UID + 486 + + + CF$UID + 487 + + + + VariablesView + 373 + + $class + + CF$UID + 87 + + NS.keys + + + CF$UID + 83 + + + CF$UID + 84 + + + NS.objects + + + CF$UID + 489 + + + CF$UID + 490 + + + + ConsoleArea + 727 + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 80 + + + NS.objects + + + CF$UID + 492 + + + + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 493 + + + CF$UID + 495 + + + + + $class + + CF$UID + 87 + + NS.keys + + + CF$UID + 83 + + + CF$UID + 84 + + + NS.objects + + + CF$UID + 486 + + + CF$UID + 494 + + + + 373 + + $class + + CF$UID + 87 + + NS.keys + + + CF$UID + 83 + + + CF$UID + 84 + + + NS.objects + + + CF$UID + 489 + + + CF$UID + 496 + + + + 727 + + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 80 + + + NS.objects + + + CF$UID + 499 + + + + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 500 + + + CF$UID + 503 + + + + + $class + + CF$UID + 87 + + NS.keys + + + CF$UID + 83 + + + CF$UID + 84 + + + NS.objects + + + CF$UID + 501 + + + CF$UID + 502 + + + + IDEEditor + 738 + + $class + + CF$UID + 87 + + NS.keys + + + CF$UID + 83 + + + CF$UID + 84 + + + NS.objects + + + CF$UID + 504 + + + CF$UID + 505 + + + + IDEDebuggerArea + 214 + + $class + + CF$UID + 91 + + NS.keys + + NS.objects + + + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 80 + + + NS.objects + + + CF$UID + 508 + + + + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 509 + + + CF$UID + 511 + + + + + $class + + CF$UID + 87 + + NS.keys + + + CF$UID + 83 + + + CF$UID + 84 + + + NS.objects + + + CF$UID + 85 + + + CF$UID + 510 + + + + 728 + + $class + + CF$UID + 87 + + NS.keys + + + CF$UID + 83 + + + CF$UID + 84 + + + NS.objects + + + CF$UID + 85 + + + CF$UID + 512 + + + + 224 + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 514 + + + CF$UID + 515 + + + CF$UID + 516 + + + CF$UID + 517 + + + CF$UID + 518 + + + CF$UID + 519 + + + CF$UID + 520 + + + CF$UID + 521 + + + NS.objects + + + CF$UID + 522 + + + CF$UID + 534 + + + CF$UID + 538 + + + CF$UID + 520 + + + CF$UID + 551 + + + CF$UID + 571 + + + CF$UID + 580 + + + CF$UID + 598 + + + + Xcode.IDEKit.Navigator.Symbol + Xcode.DebuggerKit.ThreadsStacksNavigator + Xcode.IDEKit.Navigator.BatchFind + SelectedNavigator + Xcode.IDEKit.Navigator.Issues + Xcode.IDEKit.Navigator.Breakpoints + Xcode.IDEKit.Navigator.Structure + Xcode.IDEKit.Navigator.Logs + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 523 + + + CF$UID + 524 + + + CF$UID + 525 + + + CF$UID + 526 + + + CF$UID + 527 + + + CF$UID + 528 + + + CF$UID + 529 + + + NS.objects + + + CF$UID + 530 + + + CF$UID + 497 + + + CF$UID + 497 + + + CF$UID + 497 + + + CF$UID + 531 + + + CF$UID + 532 + + + CF$UID + 533 + + + + IDEExpandedItems + IDESymbolNavigatorShowHierarchy + IDESymbolNavigatorShowWorkspaceOnly + IDESymbolNavigatorShowClassesOnly + IDESymbolNamePatternString + IDESymbolNavigatorSelectedSymbols + IDESymbolNavigatorShowContainersOnly + + $class + + CF$UID + 90 + + NS.objects + + + + + $class + + CF$UID + 90 + + NS.objects + + + + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 535 + + + CF$UID + 536 + + + CF$UID + 537 + + + NS.objects + + + CF$UID + 482 + + + CF$UID + 460 + + + CF$UID + 533 + + + + IDEStackCompressionValue + IDEThreadsOrQueuesMode + IDEHideAncestorForNonInterestingFrames + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 539 + + + CF$UID + 540 + + + CF$UID + 541 + + + CF$UID + 542 + + + CF$UID + 543 + + + CF$UID + 544 + + + CF$UID + 545 + + + NS.objects + + + CF$UID + 460 + + + CF$UID + 533 + + + CF$UID + 531 + + + CF$UID + 546 + + + CF$UID + 547 + + + CF$UID + 460 + + + CF$UID + 549 + + + + IDEBatchFindNavigatorScrollPosition + IDEBatchFindNavigatorShowsOptions + IDEBatchFindNavigatorReplaceString + IDEBatchFindNavigatorFindString + IDEBatchFindNavigatorSelectedRowIndexes + IDEBatchFindNavigatorFindMode + IDEBatchFindNavigatorCollapsedGroups + enabled + + $class + + CF$UID + 548 + + NSRangeCount + 0 + + + $classes + + NSIndexSet + NSObject + + $classname + NSIndexSet + + + $class + + CF$UID + 550 + + NSRangeCount + 0 + + + $classes + + NSMutableIndexSet + NSIndexSet + NSObject + + $classname + NSMutableIndexSet + + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 552 + + + CF$UID + 553 + + + CF$UID + 554 + + + CF$UID + 555 + + + CF$UID + 556 + + + CF$UID + 557 + + + CF$UID + 558 + + + CF$UID + 559 + + + CF$UID + 560 + + + CF$UID + 561 + + + NS.objects + + + CF$UID + 533 + + + CF$UID + 562 + + + CF$UID + 563 + + + CF$UID + 567 + + + CF$UID + 568 + + + CF$UID + 533 + + + CF$UID + 533 + + + CF$UID + 569 + + + CF$UID + 533 + + + CF$UID + 570 + + + + IDEErrorFilteringEnabled + IDEVisibleRect + IDECollapsedFiles + IDEExpandedIssues + IDESelectedNavigables + IDEShowsByType + IDESchemeFilteringEnabled + IDECollapsedTypes + IDERecentFilteringEnabled + IDECollapsedGroups + {{0, 0}, {467, 886}} + + $class + + CF$UID + 566 + + NS.objects + + + CF$UID + 564 + + + CF$UID + 565 + + + + wolf3d/Work/ryan.gerleve/idMobileDepot/Wolfenstein3DPlatinumDepot/wolf3d/code/iphone/iphone_downloadUserMap.m + wolf3d/Work/ryan.gerleve/idMobileDepot/Wolfenstein3DPlatinumDepot/wolf3d/code/iphone/iphone_downloadSOD.m + + $classes + + NSMutableSet + NSSet + NSObject + + $classname + NSMutableSet + + + $class + + CF$UID + 566 + + NS.objects + + + + $class + + CF$UID + 90 + + NS.objects + + + + $class + + CF$UID + 566 + + NS.objects + + + + $class + + CF$UID + 566 + + NS.objects + + + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 572 + + + CF$UID + 573 + + + CF$UID + 574 + + + CF$UID + 575 + + + NS.objects + + + CF$UID + 576 + + + CF$UID + 533 + + + CF$UID + 578 + + + CF$UID + 579 + + + + IDECollapsedtemsSet + IDEBreakpointNavigatorFilterOnEnabled + IDESelectedObjects + IDEVisibleRect + + $class + + CF$UID + 577 + + NS.objects + + + + $classes + + NSSet + NSObject + + $classname + NSSet + + + $class + + CF$UID + 12 + + NS.objects + + + {{0, 0}, {259, 832}} + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 581 + + + CF$UID + 582 + + + CF$UID + 583 + + + CF$UID + 584 + + + CF$UID + 585 + + + CF$UID + 586 + + + CF$UID + 587 + + + NS.objects + + + CF$UID + 588 + + + CF$UID + 533 + + + CF$UID + 576 + + + CF$UID + 533 + + + CF$UID + 533 + + + CF$UID + 589 + + + CF$UID + 592 + + + + IDEVisibleRect + IDEUnsavedDocumentFilteringEnabled + IDENavigatorExpandedItemsBeforeFilteringSet + IDERecentDocumentFilteringEnabled + IDESCMStatusFilteringEnabled + IDESelectedObjects + IDEExpandedItemsSet + {{0, 0}, {467, 908}} + + $class + + CF$UID + 12 + + NS.objects + + + CF$UID + 590 + + + + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 591 + + + + wolf3d + + $class + + CF$UID + 577 + + NS.objects + + + CF$UID + 593 + + + CF$UID + 595 + + + CF$UID + 596 + + + + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 591 + + + CF$UID + 594 + + + + Resources + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 591 + + + + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 591 + + + CF$UID + 597 + + + + Other Sources + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 599 + + + CF$UID + 600 + + + CF$UID + 601 + + + CF$UID + 602 + + + NS.objects + + + CF$UID + 603 + + + CF$UID + 604 + + + CF$UID + 533 + + + CF$UID + 579 + + + + IDELogNavigatorExpandedItemsStateKey + IDELogNavigatorSelectedObjectsStateKey + IDELogNavigatorRecentFilterStateKey + IDELogNavigatorVisibleRectStateKey + + $class + + CF$UID + 90 + + NS.objects + + + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 605 + + + + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 606 + + + + Debug wolf3dlite : Recording + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 80 + + + NS.objects + + + CF$UID + 608 + + + + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 609 + + + CF$UID + 611 + + + CF$UID + 613 + + + + + $class + + CF$UID + 87 + + NS.keys + + + CF$UID + 83 + + + CF$UID + 84 + + + NS.objects + + + CF$UID + 18 + + + CF$UID + 610 + + + + 468 + + $class + + CF$UID + 87 + + NS.keys + + + CF$UID + 83 + + + CF$UID + 84 + + + NS.objects + + + CF$UID + 14 + + + CF$UID + 612 + + + + 1101 + + $class + + CF$UID + 87 + + NS.keys + + + CF$UID + 83 + + + CF$UID + 84 + + + NS.objects + + + CF$UID + 614 + + + CF$UID + 615 + + + + IDEUtilitiesArea + 260 + wolf3d.xcodeproj + {{193, 224}, {1829, 1028}} + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 619 + + + CF$UID + 620 + + + CF$UID + 621 + + + CF$UID + 622 + + + CF$UID + 623 + + + CF$UID + 624 + + + CF$UID + 625 + + + CF$UID + 626 + + + CF$UID + 627 + + + CF$UID + 628 + + + NS.objects + + + CF$UID + 497 + + + CF$UID + 629 + + + CF$UID + 460 + + + CF$UID + 1057 + + + CF$UID + 1062 + + + CF$UID + 1065 + + + CF$UID + 1096 + + + CF$UID + 1097 + + + CF$UID + 533 + + + CF$UID + 533 + + + + BreakpointsActivated + DefaultEditorStatesForURLs + DebuggingWindowBehavior + ActiveRunDestination + ActiveScheme + LastCompletedPersistentSchemeBasedActivityReport + DocumentWindows + RecentEditorDocumentURLs + AppFocusInMiniDebugging + MiniDebuggingConsole + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 630 + + + CF$UID + 631 + + + CF$UID + 632 + + + CF$UID + 633 + + + NS.objects + + + CF$UID + 634 + + + CF$UID + 646 + + + CF$UID + 1015 + + + CF$UID + 1026 + + + + Xcode.IDEKit.EditorDocument.DebuggerLogDocument + Xcode.Xcode3ProjectSupport.EditorDocument.Xcode3Project + Xcode.IDEKit.EditorDocument.SourceCode + Xcode.IDEKit.CocoaTouchIntegration.EditorDocument.CocoaTouch + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 635 + + + CF$UID + 637 + + + CF$UID + 639 + + + NS.objects + + + CF$UID + 641 + + + CF$UID + 644 + + + CF$UID + 645 + + + + + $class + + CF$UID + 468 + + NS.base + + CF$UID + 0 + + NS.relative + + CF$UID + 636 + + + x-xcode-log://4BF82FB6-F0D7-4DDF-B6AE-4585D10E874A + + $class + + CF$UID + 468 + + NS.base + + CF$UID + 0 + + NS.relative + + CF$UID + 638 + + + x-xcode-log://DEBBC139-B188-4803-B26F-26EA15213A40 + + $class + + CF$UID + 468 + + NS.base + + CF$UID + 0 + + NS.relative + + CF$UID + 640 + + + x-xcode-log://28B63DA2-5E7A-4CF4-B710-F42908E00231 + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 642 + + + NS.objects + + + CF$UID + 643 + + + + DBGConsoleLogEditorScrollRange + {0, 0} + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 642 + + + NS.objects + + + CF$UID + 643 + + + + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 642 + + + NS.objects + + + CF$UID + 643 + + + + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 647 + + + NS.objects + + + CF$UID + 648 + + + + + $class + + CF$UID + 468 + + NS.base + + CF$UID + 0 + + NS.relative + + CF$UID + 41 + + + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 73 + + + CF$UID + 74 + + + CF$UID + 75 + + + CF$UID + 76 + + + CF$UID + 77 + + + NS.objects + + + CF$UID + 649 + + + CF$UID + 650 + + + CF$UID + 656 + + + CF$UID + 657 + + + CF$UID + 1014 + + + + Xcode3ProjectInfoEditor + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 80 + + + NS.objects + + + CF$UID + 651 + + + + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 652 + + + CF$UID + 654 + + + + + $class + + CF$UID + 87 + + NS.keys + + + CF$UID + 83 + + + CF$UID + 84 + + + NS.objects + + + CF$UID + 85 + + + CF$UID + 653 + + + + 170 + + $class + + CF$UID + 87 + + NS.keys + + + CF$UID + 83 + + + CF$UID + 84 + + + NS.objects + + + CF$UID + 85 + + + CF$UID + 655 + + + + 931 + Xcode3BuildSettingsEditor + + $class + + CF$UID + 12 + + NS.objects + + + CF$UID + 658 + + + + + $class + + CF$UID + 462 + + documentURL + + CF$UID + 95 + + selection + + CF$UID + 660 + + timestamp + + CF$UID + 659 + + + 334881995.84233099 + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 98 + + + CF$UID + 99 + + + CF$UID + 661 + + + NS.objects + + + CF$UID + 662 + + + CF$UID + 102 + + + CF$UID + 663 + + + + Xcode3BuildSettingsEditorLocations + Xcode3BuildSettingsEditor + + $class + + CF$UID + 12 + + NS.objects + + + CF$UID + 664 + + + + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 105 + + + CF$UID + 106 + + + CF$UID + 107 + + + CF$UID + 108 + + + CF$UID + 109 + + + CF$UID + 110 + + + NS.objects + + + CF$UID + 665 + + + CF$UID + 1012 + + + CF$UID + 460 + + + CF$UID + 460 + + + CF$UID + 460 + + + CF$UID + 461 + + + + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 666 + + + CF$UID + 667 + + + CF$UID + 668 + + + CF$UID + 669 + + + CF$UID + 670 + + + CF$UID + 671 + + + CF$UID + 672 + + + CF$UID + 673 + + + CF$UID + 674 + + + CF$UID + 675 + + + CF$UID + 676 + + + CF$UID + 677 + + + CF$UID + 678 + + + CF$UID + 679 + + + CF$UID + 680 + + + CF$UID + 681 + + + CF$UID + 682 + + + CF$UID + 683 + + + CF$UID + 684 + + + CF$UID + 685 + + + CF$UID + 686 + + + CF$UID + 687 + + + CF$UID + 688 + + + CF$UID + 689 + + + CF$UID + 690 + + + CF$UID + 691 + + + CF$UID + 692 + + + CF$UID + 693 + + + CF$UID + 694 + + + CF$UID + 695 + + + CF$UID + 696 + + + CF$UID + 697 + + + CF$UID + 698 + + + CF$UID + 699 + + + CF$UID + 700 + + + CF$UID + 701 + + + CF$UID + 702 + + + CF$UID + 703 + + + CF$UID + 704 + + + CF$UID + 705 + + + CF$UID + 706 + + + CF$UID + 707 + + + CF$UID + 708 + + + CF$UID + 709 + + + CF$UID + 710 + + + CF$UID + 711 + + + CF$UID + 712 + + + CF$UID + 713 + + + CF$UID + 714 + + + CF$UID + 715 + + + CF$UID + 716 + + + CF$UID + 717 + + + CF$UID + 718 + + + CF$UID + 719 + + + CF$UID + 720 + + + CF$UID + 721 + + + CF$UID + 722 + + + CF$UID + 723 + + + CF$UID + 724 + + + CF$UID + 725 + + + CF$UID + 726 + + + CF$UID + 727 + + + CF$UID + 728 + + + CF$UID + 729 + + + CF$UID + 730 + + + CF$UID + 731 + + + CF$UID + 732 + + + CF$UID + 733 + + + CF$UID + 734 + + + CF$UID + 735 + + + CF$UID + 736 + + + CF$UID + 737 + + + CF$UID + 738 + + + CF$UID + 739 + + + CF$UID + 740 + + + CF$UID + 741 + + + CF$UID + 742 + + + CF$UID + 743 + + + CF$UID + 744 + + + CF$UID + 745 + + + CF$UID + 746 + + + CF$UID + 747 + + + CF$UID + 748 + + + CF$UID + 749 + + + CF$UID + 750 + + + CF$UID + 751 + + + CF$UID + 752 + + + CF$UID + 753 + + + CF$UID + 754 + + + CF$UID + 755 + + + CF$UID + 756 + + + CF$UID + 757 + + + CF$UID + 758 + + + CF$UID + 759 + + + CF$UID + 760 + + + CF$UID + 761 + + + CF$UID + 762 + + + CF$UID + 763 + + + CF$UID + 764 + + + CF$UID + 765 + + + CF$UID + 766 + + + CF$UID + 767 + + + CF$UID + 768 + + + CF$UID + 769 + + + CF$UID + 770 + + + CF$UID + 771 + + + CF$UID + 772 + + + CF$UID + 773 + + + CF$UID + 774 + + + CF$UID + 775 + + + CF$UID + 776 + + + CF$UID + 777 + + + CF$UID + 778 + + + CF$UID + 779 + + + CF$UID + 780 + + + CF$UID + 781 + + + CF$UID + 782 + + + CF$UID + 783 + + + CF$UID + 784 + + + CF$UID + 785 + + + CF$UID + 786 + + + CF$UID + 787 + + + CF$UID + 788 + + + CF$UID + 789 + + + CF$UID + 790 + + + CF$UID + 791 + + + CF$UID + 792 + + + CF$UID + 793 + + + CF$UID + 794 + + + CF$UID + 795 + + + CF$UID + 796 + + + CF$UID + 797 + + + CF$UID + 798 + + + CF$UID + 799 + + + CF$UID + 800 + + + CF$UID + 801 + + + CF$UID + 802 + + + CF$UID + 803 + + + CF$UID + 804 + + + CF$UID + 805 + + + CF$UID + 806 + + + CF$UID + 807 + + + CF$UID + 808 + + + CF$UID + 809 + + + CF$UID + 810 + + + CF$UID + 811 + + + CF$UID + 812 + + + CF$UID + 813 + + + CF$UID + 814 + + + CF$UID + 815 + + + CF$UID + 816 + + + CF$UID + 817 + + + CF$UID + 818 + + + CF$UID + 819 + + + CF$UID + 820 + + + CF$UID + 821 + + + CF$UID + 822 + + + CF$UID + 823 + + + CF$UID + 824 + + + CF$UID + 825 + + + CF$UID + 826 + + + CF$UID + 827 + + + CF$UID + 828 + + + CF$UID + 829 + + + CF$UID + 830 + + + CF$UID + 831 + + + CF$UID + 832 + + + CF$UID + 833 + + + CF$UID + 834 + + + CF$UID + 835 + + + CF$UID + 836 + + + CF$UID + 837 + + + CF$UID + 838 + + + CF$UID + 839 + + + CF$UID + 840 + + + CF$UID + 841 + + + CF$UID + 842 + + + CF$UID + 843 + + + CF$UID + 844 + + + CF$UID + 845 + + + CF$UID + 846 + + + CF$UID + 847 + + + CF$UID + 848 + + + CF$UID + 849 + + + CF$UID + 850 + + + CF$UID + 851 + + + CF$UID + 852 + + + CF$UID + 853 + + + CF$UID + 854 + + + CF$UID + 855 + + + CF$UID + 856 + + + CF$UID + 857 + + + CF$UID + 858 + + + CF$UID + 859 + + + CF$UID + 860 + + + CF$UID + 861 + + + CF$UID + 862 + + + CF$UID + 863 + + + CF$UID + 864 + + + CF$UID + 865 + + + CF$UID + 866 + + + CF$UID + 867 + + + CF$UID + 868 + + + CF$UID + 869 + + + CF$UID + 870 + + + CF$UID + 871 + + + CF$UID + 872 + + + CF$UID + 873 + + + CF$UID + 874 + + + CF$UID + 875 + + + CF$UID + 876 + + + CF$UID + 877 + + + CF$UID + 878 + + + CF$UID + 879 + + + CF$UID + 880 + + + CF$UID + 881 + + + CF$UID + 882 + + + CF$UID + 883 + + + CF$UID + 884 + + + CF$UID + 885 + + + CF$UID + 886 + + + CF$UID + 887 + + + CF$UID + 888 + + + CF$UID + 889 + + + CF$UID + 890 + + + CF$UID + 891 + + + CF$UID + 892 + + + CF$UID + 893 + + + CF$UID + 894 + + + CF$UID + 895 + + + CF$UID + 896 + + + CF$UID + 897 + + + CF$UID + 898 + + + CF$UID + 899 + + + CF$UID + 900 + + + CF$UID + 901 + + + CF$UID + 902 + + + CF$UID + 903 + + + CF$UID + 904 + + + CF$UID + 905 + + + CF$UID + 906 + + + CF$UID + 907 + + + CF$UID + 908 + + + CF$UID + 909 + + + CF$UID + 910 + + + CF$UID + 911 + + + CF$UID + 912 + + + CF$UID + 913 + + + CF$UID + 914 + + + CF$UID + 915 + + + CF$UID + 916 + + + CF$UID + 917 + + + CF$UID + 918 + + + CF$UID + 919 + + + CF$UID + 920 + + + CF$UID + 921 + + + CF$UID + 922 + + + CF$UID + 923 + + + CF$UID + 924 + + + CF$UID + 925 + + + CF$UID + 926 + + + CF$UID + 927 + + + CF$UID + 928 + + + CF$UID + 929 + + + CF$UID + 930 + + + CF$UID + 931 + + + CF$UID + 932 + + + CF$UID + 933 + + + CF$UID + 934 + + + CF$UID + 935 + + + CF$UID + 936 + + + CF$UID + 937 + + + CF$UID + 938 + + + CF$UID + 939 + + + CF$UID + 940 + + + CF$UID + 941 + + + CF$UID + 942 + + + CF$UID + 943 + + + CF$UID + 944 + + + CF$UID + 945 + + + CF$UID + 946 + + + CF$UID + 947 + + + CF$UID + 948 + + + CF$UID + 949 + + + CF$UID + 950 + + + CF$UID + 951 + + + CF$UID + 952 + + + CF$UID + 953 + + + CF$UID + 954 + + + CF$UID + 955 + + + CF$UID + 956 + + + CF$UID + 957 + + + CF$UID + 958 + + + CF$UID + 959 + + + CF$UID + 960 + + + CF$UID + 961 + + + CF$UID + 962 + + + CF$UID + 963 + + + CF$UID + 964 + + + CF$UID + 965 + + + CF$UID + 966 + + + CF$UID + 967 + + + CF$UID + 968 + + + CF$UID + 969 + + + CF$UID + 970 + + + CF$UID + 971 + + + CF$UID + 972 + + + CF$UID + 973 + + + CF$UID + 974 + + + CF$UID + 975 + + + CF$UID + 976 + + + CF$UID + 977 + + + CF$UID + 978 + + + CF$UID + 979 + + + CF$UID + 980 + + + CF$UID + 981 + + + CF$UID + 982 + + + CF$UID + 983 + + + CF$UID + 984 + + + CF$UID + 985 + + + CF$UID + 986 + + + CF$UID + 987 + + + CF$UID + 988 + + + CF$UID + 989 + + + CF$UID + 990 + + + CF$UID + 991 + + + CF$UID + 992 + + + CF$UID + 993 + + + CF$UID + 994 + + + CF$UID + 995 + + + CF$UID + 996 + + + CF$UID + 997 + + + CF$UID + 998 + + + CF$UID + 999 + + + CF$UID + 1000 + + + CF$UID + 1001 + + + CF$UID + 1002 + + + CF$UID + 1003 + + + CF$UID + 1004 + + + CF$UID + 1005 + + + CF$UID + 1006 + + + CF$UID + 1007 + + + CF$UID + 1008 + + + CF$UID + 1009 + + + CF$UID + 1010 + + + CF$UID + 1011 + + + + + $class + + CF$UID + 42 + + NS.string + Architectures||ADDITIONAL_SDKS + + + $class + + CF$UID + 42 + + NS.string + Architectures||ARCHS + + + $class + + CF$UID + 42 + + NS.string + Architectures||SDKROOT + + + $class + + CF$UID + 42 + + NS.string + Architectures||ONLY_ACTIVE_ARCH + + + $class + + CF$UID + 42 + + NS.string + Architectures||SUPPORTED_PLATFORMS + + + $class + + CF$UID + 42 + + NS.string + Architectures||VALID_ARCHS + + + $class + + CF$UID + 42 + + NS.string + Build Locations||SYMROOT + + + $class + + CF$UID + 42 + + NS.string + Build Locations||OBJROOT + + + $class + + CF$UID + 42 + + NS.string + Build Locations||SHARED_PRECOMPS_DIR + + + $class + + CF$UID + 42 + + NS.string + Build Options||BUILD_VARIANTS + + + $class + + CF$UID + 42 + + NS.string + Build Options||DEBUG_INFORMATION_FORMAT + + + $class + + CF$UID + 42 + + NS.string + Build Options||ENABLE_OPENMP_SUPPORT + + + $class + + CF$UID + 42 + + NS.string + Build Options||GENERATE_PROFILING_CODE + + + $class + + CF$UID + 42 + + NS.string + Build Options||PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR + + + $class + + CF$UID + 42 + + NS.string + Build Options||RUN_CLANG_STATIC_ANALYZER + + + $class + + CF$UID + 42 + + NS.string + Build Options||SCAN_ALL_SOURCE_FILES_FOR_INCLUDES + + + $class + + CF$UID + 42 + + NS.string + Build Options||VALIDATE_PRODUCT + + + $class + + CF$UID + 42 + + NS.string + Code Signing||CODE_SIGN_RESOURCE_RULES_PATH + + + $class + + CF$UID + 42 + + NS.string + Code Signing||OTHER_CODE_SIGN_FLAGS + + + $class + + CF$UID + 42 + + NS.string + Deployment||STRIPFLAGS + + + $class + + CF$UID + 42 + + NS.string + Deployment||ALTERNATE_GROUP + + + $class + + CF$UID + 42 + + NS.string + Deployment||ALTERNATE_OWNER + + + $class + + CF$UID + 42 + + NS.string + Deployment||ALTERNATE_MODE + + + $class + + CF$UID + 42 + + NS.string + Deployment||ALTERNATE_PERMISSIONS_FILES + + + $class + + CF$UID + 42 + + NS.string + Deployment||COMBINE_HIDPI_IMAGES + + + $class + + CF$UID + 42 + + NS.string + Deployment||DEPLOYMENT_LOCATION + + + $class + + CF$UID + 42 + + NS.string + Deployment||DEPLOYMENT_POSTPROCESSING + + + $class + + CF$UID + 42 + + NS.string + Deployment||INSTALL_GROUP + + + $class + + CF$UID + 42 + + NS.string + Deployment||INSTALL_OWNER + + + $class + + CF$UID + 42 + + NS.string + Deployment||INSTALL_MODE_FLAG + + + $class + + CF$UID + 42 + + NS.string + Deployment||DSTROOT + + + $class + + CF$UID + 42 + + NS.string + Deployment||INSTALL_PATH + + + $class + + CF$UID + 42 + + NS.string + Deployment||MACOSX_DEPLOYMENT_TARGET + + + $class + + CF$UID + 42 + + NS.string + Deployment||SKIP_INSTALL + + + $class + + CF$UID + 42 + + NS.string + Deployment||STRIP_INSTALLED_PRODUCT + + + $class + + CF$UID + 42 + + NS.string + Deployment||STRIP_STYLE + + + $class + + CF$UID + 42 + + NS.string + Deployment||TARGETED_DEVICE_FAMILY + + + $class + + CF$UID + 42 + + NS.string + Deployment||SEPARATE_STRIP + + + $class + + CF$UID + 42 + + NS.string + Deployment||IPHONEOS_DEPLOYMENT_TARGET + + + $class + + CF$UID + 42 + + NS.string + Kernel Module||MODULE_NAME + + + $class + + CF$UID + 42 + + NS.string + Kernel Module||MODULE_START + + + $class + + CF$UID + 42 + + NS.string + Kernel Module||MODULE_STOP + + + $class + + CF$UID + 42 + + NS.string + Kernel Module||MODULE_VERSION + + + $class + + CF$UID + 42 + + NS.string + Linking||BUNDLE_LOADER + + + $class + + CF$UID + 42 + + NS.string + Linking||STANDARD_C_PLUS_PLUS_LIBRARY_TYPE + + + $class + + CF$UID + 42 + + NS.string + Linking||DYLIB_COMPATIBILITY_VERSION + + + $class + + CF$UID + 42 + + NS.string + Linking||DYLIB_CURRENT_VERSION + + + $class + + CF$UID + 42 + + NS.string + Linking||DEAD_CODE_STRIPPING + + + $class + + CF$UID + 42 + + NS.string + Linking||LINKER_DISPLAYS_MANGLED_NAMES + + + $class + + CF$UID + 42 + + NS.string + Linking||LD_NO_PIE + + + $class + + CF$UID + 42 + + NS.string + Linking||PRESERVE_DEAD_CODE_INITS_AND_TERMS + + + $class + + CF$UID + 42 + + NS.string + Linking||LD_DYLIB_INSTALL_NAME + + + $class + + CF$UID + 42 + + NS.string + Linking||EXPORTED_SYMBOLS_FILE + + + $class + + CF$UID + 42 + + NS.string + Linking||INIT_ROUTINE + + + $class + + CF$UID + 42 + + NS.string + Linking||LINK_WITH_STANDARD_LIBRARIES + + + $class + + CF$UID + 42 + + NS.string + Linking||MACH_O_TYPE + + + $class + + CF$UID + 42 + + NS.string + Linking||LD_OPENMP_FLAGS + + + $class + + CF$UID + 42 + + NS.string + Linking||ORDER_FILE + + + $class + + CF$UID + 42 + + NS.string + Linking||OTHER_LDFLAGS + + + $class + + CF$UID + 42 + + NS.string + Linking||GENERATE_MASTER_OBJECT_FILE + + + $class + + CF$UID + 42 + + NS.string + Linking||PRELINK_LIBS + + + $class + + CF$UID + 42 + + NS.string + Linking||KEEP_PRIVATE_EXTERNS + + + $class + + CF$UID + 42 + + NS.string + Linking||LD_RUNPATH_SEARCH_PATHS + + + $class + + CF$UID + 42 + + NS.string + Linking||SEPARATE_SYMBOL_EDIT + + + $class + + CF$UID + 42 + + NS.string + Linking||PRELINK_FLAGS + + + $class + + CF$UID + 42 + + NS.string + Linking||SECTORDER_FLAGS + + + $class + + CF$UID + 42 + + NS.string + Linking||UNEXPORTED_SYMBOLS_FILE + + + $class + + CF$UID + 42 + + NS.string + Linking||WARNING_LDFLAGS + + + $class + + CF$UID + 42 + + NS.string + Linking||LD_GENERATE_MAP_FILE + + + $class + + CF$UID + 42 + + NS.string + Packaging||COMPRESS_PNG_FILES + + + $class + + CF$UID + 42 + + NS.string + Packaging||APPLY_RULES_IN_COPY_FILES + + + $class + + CF$UID + 42 + + NS.string + Packaging||EXECUTABLE_EXTENSION + + + $class + + CF$UID + 42 + + NS.string + Packaging||EXECUTABLE_PREFIX + + + $class + + CF$UID + 42 + + NS.string + Packaging||INFOPLIST_EXPAND_BUILD_SETTINGS + + + $class + + CF$UID + 42 + + NS.string + Packaging||GENERATE_PKGINFO_FILE + + + $class + + CF$UID + 42 + + NS.string + Packaging||FRAMEWORK_VERSION + + + $class + + CF$UID + 42 + + NS.string + Packaging||INFOPLIST_FILE + + + $class + + CF$UID + 42 + + NS.string + Packaging||INFOPLIST_OTHER_PREPROCESSOR_FLAGS + + + $class + + CF$UID + 42 + + NS.string + Packaging||INFOPLIST_OUTPUT_FORMAT + + + $class + + CF$UID + 42 + + NS.string + Packaging||INFOPLIST_PREPROCESSOR_DEFINITIONS + + + $class + + CF$UID + 42 + + NS.string + Packaging||INFOPLIST_PREFIX_HEADER + + + $class + + CF$UID + 42 + + NS.string + Packaging||INFOPLIST_PREPROCESS + + + $class + + CF$UID + 42 + + NS.string + Packaging||COPYING_PRESERVES_HFS_DATA + + + $class + + CF$UID + 42 + + NS.string + Packaging||PLIST_FILE_OUTPUT_FORMAT + + + $class + + CF$UID + 42 + + NS.string + Packaging||STRINGS_FILE_OUTPUT_ENCODING + + + $class + + CF$UID + 42 + + NS.string + Packaging||WRAPPER_EXTENSION + + + $class + + CF$UID + 42 + + NS.string + Search Paths||ALWAYS_SEARCH_USER_PATHS + + + $class + + CF$UID + 42 + + NS.string + Search Paths||FRAMEWORK_SEARCH_PATHS + + + $class + + CF$UID + 42 + + NS.string + Search Paths||HEADER_SEARCH_PATHS + + + $class + + CF$UID + 42 + + NS.string + Search Paths||LIBRARY_SEARCH_PATHS + + + $class + + CF$UID + 42 + + NS.string + Search Paths||REZ_SEARCH_PATHS + + + $class + + CF$UID + 42 + + NS.string + Search Paths||EXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES + + + $class + + CF$UID + 42 + + NS.string + Search Paths||INCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES + + + $class + + CF$UID + 42 + + NS.string + Search Paths||USER_HEADER_SEARCH_PATHS + + + $class + + CF$UID + 42 + + NS.string + Unit Testing||OTHER_TEST_FLAGS + + + $class + + CF$UID + 42 + + NS.string + Unit Testing||TEST_AFTER_BUILD + + + $class + + CF$UID + 42 + + NS.string + Unit Testing||TEST_HOST + + + $class + + CF$UID + 42 + + NS.string + Unit Testing||TEST_RIG + + + $class + + CF$UID + 42 + + NS.string + Versioning||CURRENT_PROJECT_VERSION + + + $class + + CF$UID + 42 + + NS.string + Versioning||VERSION_INFO_EXPORT_DECL + + + $class + + CF$UID + 42 + + NS.string + Versioning||VERSION_INFO_PREFIX + + + $class + + CF$UID + 42 + + NS.string + Versioning||VERSION_INFO_SUFFIX + + + $class + + CF$UID + 42 + + NS.string + Versioning||VERSIONING_SYSTEM + + + $class + + CF$UID + 42 + + NS.string + Versioning||VERSION_INFO_BUILDER + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_FAST_OBJC_DISPATCH + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_OBJC_CALL_CXX_CDTORS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_ENABLE_SSE3_EXTENSIONS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_ENABLE_SSE41_EXTENSIONS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_ENABLE_SSE42_EXTENSIONS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_STRICT_ALIASING + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_FEEDBACK_DIRECTED_OPTIMIZATION + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_GENERATE_DEBUGGING_SYMBOLS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_GENERATE_TEST_COVERAGE_FILES + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_INLINES_ARE_PRIVATE_EXTERN + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_INSTRUMENT_PROGRAM_FLOW_ARCS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_ENABLE_KERNEL_DEVELOPMENT + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_DEBUGGING_SYMBOLS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_REUSE_STRINGS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_NO_COMMON_BLOCKS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_ENABLE_OBJC_GC + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_FAST_MATH + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_ENABLE_SYMBOL_SEPARATION + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_THREADSAFE_STATICS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Code Generation||GCC_SYMBOLS_PRIVATE_EXTERN + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_CHAR_IS_UNSIGNED_CHAR + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_ENABLE_ASM_KEYWORD + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_C_LANGUAGE_STANDARD + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_CHECK_RETURN_VALUE_OF_OPERATOR_NEW + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_CW_ASM_SYNTAX + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_INPUT_FILETYPE + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_ENABLE_CPP_EXCEPTIONS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_ENABLE_CPP_RTTI + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_LINK_WITH_DYNAMIC_LIBRARIES + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_ENABLE_TRIGRAPHS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_ENABLE_FLOATING_POINT_LIBRARY_CALLS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_USE_INDIRECT_FUNCTION_CALLS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_USE_REGISTER_FUNCTION_CALLS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_INCREASE_PRECOMPILED_HEADER_SHARING + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||OTHER_CFLAGS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||OTHER_CPLUSPLUSFLAGS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_PRECOMPILE_PREFIX_HEADER + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_PREFIX_HEADER + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_ENABLE_BUILTIN_FUNCTIONS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_ENABLE_PASCAL_STRINGS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_FORCE_CPU_SUBTYPE_ALL + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_SHORT_ENUMS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Language||GCC_USE_STANDARD_INCLUDE_SEARCHING + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Preprocessing||GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_CHECK_SWITCH_STATEMENTS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_FOUR_CHARACTER_CONSTANTS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_SHADOW + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_64_TO_32_BIT_CONVERSION + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_INHIBIT_ALL_WARNINGS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_ABOUT_RETURN_TYPE + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_MISSING_PARENTHESES + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_ABOUT_MISSING_PROTOTYPES + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_ABOUT_MISSING_NEWLINE + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_NON_VIRTUAL_DESTRUCTOR + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||WARNING_CFLAGS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_PEDANTIC + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_ABOUT_POINTER_SIGNEDNESS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_PROTOTYPE_CONVERSION + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_SIGN_COMPARE + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_STRICT_SELECTOR_MATCH + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_TREAT_NONCONFORMANT_CODE_ERRORS_AS_WARNINGS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_TYPECHECK_CALLS_TO_PRINTF + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_UNDECLARED_SELECTOR + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_UNINITIALIZED_AUTOS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_UNKNOWN_PRAGMAS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_UNUSED_FUNCTION + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_UNUSED_LABEL + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_UNUSED_PARAMETER + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_UNUSED_VALUE + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_UNUSED_VARIABLE + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS + + + $class + + CF$UID + 42 + + NS.string + GCC 4.2 - Warnings||GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO + + + $class + + CF$UID + 42 + + NS.string + Interface Builder XIB Compiler - Options||IBC_FLATTEN_NIBS + + + $class + + CF$UID + 42 + + NS.string + Interface Builder XIB Compiler - Options||IBC_OTHER_FLAGS + + + $class + + CF$UID + 42 + + NS.string + Interface Builder XIB Compiler - Options||IBC_OVERRIDING_PLUGINS_AND_FRAMEWORKS_DIR + + + $class + + CF$UID + 42 + + NS.string + Interface Builder XIB Compiler - Options||IBC_PLUGIN_SEARCH_PATHS + + + $class + + CF$UID + 42 + + NS.string + Interface Builder XIB Compiler - Options||IBC_PLUGINS + + + $class + + CF$UID + 42 + + NS.string + Interface Builder XIB Compiler - Options||IBC_ERRORS + + + $class + + CF$UID + 42 + + NS.string + Interface Builder XIB Compiler - Options||IBC_NOTICES + + + $class + + CF$UID + 42 + + NS.string + Interface Builder XIB Compiler - Options||IBC_WARNINGS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_FAST_OBJC_DISPATCH + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_OBJC_CALL_CXX_CDTORS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_ENABLE_SSE3_EXTENSIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_ENABLE_SSE41_EXTENSIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_ENABLE_SSE42_EXTENSIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_STRICT_ALIASING + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_FEEDBACK_DIRECTED_OPTIMIZATION + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_GENERATE_DEBUGGING_SYMBOLS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_GENERATE_TEST_COVERAGE_FILES + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_INLINES_ARE_PRIVATE_EXTERN + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_INSTRUMENT_PROGRAM_FLOW_ARCS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_ENABLE_KERNEL_DEVELOPMENT + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_DEBUGGING_SYMBOLS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||LLVM_LTO + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_REUSE_STRINGS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_NO_COMMON_BLOCKS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_ENABLE_OBJC_GC + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_FAST_MATH + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_ENABLE_SYMBOL_SEPARATION + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_THREADSAFE_STATICS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Code Generation||GCC_SYMBOLS_PRIVATE_EXTERN + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_CHAR_IS_UNSIGNED_CHAR + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_ENABLE_ASM_KEYWORD + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_C_LANGUAGE_STANDARD + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_CHECK_RETURN_VALUE_OF_OPERATOR_NEW + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_CW_ASM_SYNTAX + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_INPUT_FILETYPE + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_ENABLE_CPP_EXCEPTIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_ENABLE_CPP_RTTI + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_LINK_WITH_DYNAMIC_LIBRARIES + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_ENABLE_TRIGRAPHS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_ENABLE_FLOATING_POINT_LIBRARY_CALLS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_USE_INDIRECT_FUNCTION_CALLS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_USE_REGISTER_FUNCTION_CALLS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_INCREASE_PRECOMPILED_HEADER_SHARING + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||OTHER_CFLAGS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||OTHER_CPLUSPLUSFLAGS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_PRECOMPILE_PREFIX_HEADER + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_PREFIX_HEADER + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_ENABLE_BUILTIN_FUNCTIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_ENABLE_PASCAL_STRINGS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_FORCE_CPU_SUBTYPE_ALL + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_SHORT_ENUMS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Language||GCC_USE_STANDARD_INCLUDE_SEARCHING + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Preprocessing||GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_CHECK_SWITCH_STATEMENTS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_FOUR_CHARACTER_CONSTANTS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_SHADOW + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_64_TO_32_BIT_CONVERSION + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_INHIBIT_ALL_WARNINGS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_ABOUT_RETURN_TYPE + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_MISSING_PARENTHESES + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_ABOUT_MISSING_PROTOTYPES + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_ABOUT_MISSING_NEWLINE + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_NON_VIRTUAL_DESTRUCTOR + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||WARNING_CFLAGS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_PEDANTIC + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_ABOUT_POINTER_SIGNEDNESS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_PROTOTYPE_CONVERSION + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_SIGN_COMPARE + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_STRICT_SELECTOR_MATCH + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_TREAT_NONCONFORMANT_CODE_ERRORS_AS_WARNINGS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_TYPECHECK_CALLS_TO_PRINTF + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_UNDECLARED_SELECTOR + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_UNINITIALIZED_AUTOS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_UNKNOWN_PRAGMAS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_UNUSED_FUNCTION + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_UNUSED_LABEL + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_UNUSED_PARAMETER + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_UNUSED_VALUE + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_UNUSED_VARIABLE + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM GCC 4.2 - Warnings||GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_FAST_OBJC_DISPATCH + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_ENABLE_SSE3_EXTENSIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_ENABLE_SSE41_EXTENSIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_ENABLE_SSE42_EXTENSIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_STRICT_ALIASING + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_GENERATE_DEBUGGING_SYMBOLS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_INLINES_ARE_PRIVATE_EXTERN + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_ENABLE_KERNEL_DEVELOPMENT + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||LLVM_LTO + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_REUSE_STRINGS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_NO_COMMON_BLOCKS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_ENABLE_OBJC_GC + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_FAST_MATH + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_THREADSAFE_STATICS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Code Generation||GCC_SYMBOLS_PRIVATE_EXTERN + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_CHAR_IS_UNSIGNED_CHAR + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_ENABLE_ASM_KEYWORD + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_C_LANGUAGE_STANDARD + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_CW_ASM_SYNTAX + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_INPUT_FILETYPE + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_ENABLE_CPP_EXCEPTIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_ENABLE_CPP_RTTI + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_LINK_WITH_DYNAMIC_LIBRARIES + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_ENABLE_TRIGRAPHS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_ENABLE_FLOATING_POINT_LIBRARY_CALLS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_USE_INDIRECT_FUNCTION_CALLS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_USE_REGISTER_FUNCTION_CALLS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_INCREASE_PRECOMPILED_HEADER_SHARING + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||OTHER_CFLAGS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||OTHER_CPLUSPLUSFLAGS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_PRECOMPILE_PREFIX_HEADER + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_PREFIX_HEADER + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_ENABLE_BUILTIN_FUNCTIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_ENABLE_PASCAL_STRINGS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_FORCE_CPU_SUBTYPE_ALL + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_SHORT_ENUMS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Language||GCC_USE_STANDARD_INCLUDE_SEARCHING + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Preprocessing||GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_CHECK_SWITCH_STATEMENTS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_FOUR_CHARACTER_CONSTANTS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_SHADOW + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_64_TO_32_BIT_CONVERSION + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_INHIBIT_ALL_WARNINGS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_ABOUT_RETURN_TYPE + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_MISSING_PARENTHESES + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_ABOUT_MISSING_PROTOTYPES + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_ABOUT_MISSING_NEWLINE + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_NON_VIRTUAL_DESTRUCTOR + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||WARNING_CFLAGS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_PEDANTIC + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_ABOUT_POINTER_SIGNEDNESS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_SIGN_COMPARE + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_STRICT_SELECTOR_MATCH + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_TYPECHECK_CALLS_TO_PRINTF + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_UNDECLARED_SELECTOR + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_UNINITIALIZED_AUTOS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_UNKNOWN_PRAGMAS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_UNUSED_FUNCTION + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_UNUSED_LABEL + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_UNUSED_PARAMETER + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_UNUSED_VALUE + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_UNUSED_VARIABLE + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS + + + $class + + CF$UID + 42 + + NS.string + LLVM compiler 2.0 - Warnings||GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO + + + $class + + CF$UID + 42 + + NS.string + User-Defined||PREBINDING + + + $class + + CF$UID + 42 + + NS.string + User-Defined||PROFILE_PREFIX + + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 1013 + + + + + $class + + CF$UID + 42 + + NS.string + Deployment||ALTERNATE_GROUP + + + $class + + CF$UID + 91 + + NS.keys + + NS.objects + + + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 1016 + + + NS.objects + + + CF$UID + 1018 + + + + + $class + + CF$UID + 468 + + NS.base + + CF$UID + 0 + + NS.relative + + CF$UID + 1017 + + + + $class + + CF$UID + 42 + + NS.string + file://localhost/Work/ryan.gerleve/idMobileDepot/Wolfenstein3DPlatinumDepot/wolf3d/code/env/fileio.c + + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 1019 + + + CF$UID + 1020 + + + CF$UID + 1021 + + + CF$UID + 1022 + + + NS.objects + + + CF$UID + 1023 + + + CF$UID + 1024 + + + CF$UID + 533 + + + CF$UID + 1025 + + + + PrimaryDocumentTimestamp + PrimaryDocumentVisibleCharacterRange + HideAllIssues + PrimaryDocumentSelectedCharacterRange + 333054686.18863302 + {2273, 1211} + {3007, 0} + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 1027 + + + CF$UID + 1029 + + + NS.objects + + + CF$UID + 1031 + + + CF$UID + 1044 + + + + + $class + + CF$UID + 468 + + NS.base + + CF$UID + 0 + + NS.relative + + CF$UID + 1028 + + + + $class + + CF$UID + 42 + + NS.string + file://localhost/Work/ryan.gerleve/idMobileDepot/Wolfenstein3DPlatinumDepot/wolf3d/code/iphone/MainMenuView.xib + + + $class + + CF$UID + 468 + + NS.base + + CF$UID + 0 + + NS.relative + + CF$UID + 1030 + + + + $class + + CF$UID + 42 + + NS.string + file://localhost/Work/ryan.gerleve/idMobileDepot/Wolfenstein3DPlatinumDepot/wolf3d/code/iphone/SettingsView.xib + + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 1032 + + + CF$UID + 1033 + + + CF$UID + 1034 + + + CF$UID + 1035 + + + NS.objects + + + CF$UID + 1036 + + + CF$UID + 1037 + + + CF$UID + 1035 + + + CF$UID + 1039 + + + + IBDockViewController + SelectedObjectIDs + SelectionProvider + IBCanvasViewController + + $class + + CF$UID + 91 + + NS.keys + + NS.objects + + + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 1038 + + + + 7 + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 1040 + + + CF$UID + 1041 + + + NS.objects + + + CF$UID + 1042 + + + CF$UID + 1043 + + + + ObjectIDToLastKnownCanvasPositionMap + EditedTopLevelObjectIDs + + $class + + CF$UID + 91 + + NS.keys + + NS.objects + + + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 461 + + + + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 1045 + + + CF$UID + 1046 + + + CF$UID + 1047 + + + CF$UID + 1048 + + + NS.objects + + + CF$UID + 1049 + + + CF$UID + 1050 + + + CF$UID + 1048 + + + CF$UID + 1052 + + + + IBDockViewController + SelectedObjectIDs + SelectionProvider + IBCanvasViewController + + $class + + CF$UID + 91 + + NS.keys + + NS.objects + + + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 1051 + + + + 3 + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 1053 + + + CF$UID + 1054 + + + NS.objects + + + CF$UID + 1055 + + + CF$UID + 1056 + + + + ObjectIDToLastKnownCanvasPositionMap + EditedTopLevelObjectIDs + + $class + + CF$UID + 91 + + NS.keys + + NS.objects + + + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 461 + + + + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 1058 + + + CF$UID + 1059 + + + NS.objects + + + CF$UID + 1060 + + + CF$UID + 1061 + + + + IDEDeviceLocation + IDEDeviceArchitecture + dvtdevice-iphone:8011cc922b0e4dddd04ece07505f9785549cd9a0 + armv7 + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 1063 + + + NS.objects + + + CF$UID + 1064 + + + + IDENameString + wolf3d + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 1066 + + + CF$UID + 1067 + + + CF$UID + 1068 + + + NS.objects + + + CF$UID + 1069 + + + CF$UID + 1095 + + + CF$UID + 102 + + + + IDEActivityReportCompletionSummaryStringSegments + IDEActivityReportOptions + IDEActivityReportTitle + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 1070 + + + CF$UID + 1077 + + + CF$UID + 1081 + + + CF$UID + 1086 + + + + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 1071 + + + CF$UID + 1072 + + + CF$UID + 1073 + + + NS.objects + + + CF$UID + 1074 + + + CF$UID + 1075 + + + CF$UID + 1076 + + + + IDEActivityReportStringSegmentPriority + IDEActivityReportStringSegmentBackSeparator + IDEActivityReportStringSegmentStringValue + 2 + + Build + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 1071 + + + CF$UID + 1072 + + + CF$UID + 1073 + + + NS.objects + + + CF$UID + 1078 + + + CF$UID + 1079 + + + CF$UID + 1080 + + + + 4 + : + wolf3d + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 1071 + + + CF$UID + 1072 + + + CF$UID + 1073 + + + NS.objects + + + CF$UID + 1082 + + + CF$UID + 1083 + + + CF$UID + 1084 + + + + 1 + + + $class + + CF$UID + 1085 + + NS.data + + YnBsaXN0MDDUAQIDBAUGOzxYJHZlcnNpb25YJG9iamVjdHNZJGFy + Y2hpdmVyVCR0b3ASAAGGoK0HCA8QGhscJCUrMTQ3VSRudWxs0wkK + CwwNDlxOU0F0dHJpYnV0ZXNWJGNsYXNzWE5TU3RyaW5ngAOADIAC + WVN1Y2NlZWRlZNMKERITFBdXTlMua2V5c1pOUy5vYmplY3RzgAui + FRaABIAFohgZgAaACVZOU0ZvbnRXTlNDb2xvctQKHR4fICEiI1ZO + U05hbWVWTlNTaXplWE5TZkZsYWdzgAiAByNAJgAAAAAAABENEF8Q + EUx1Y2lkYUdyYW5kZS1Cb2xk0iYnKClaJGNsYXNzbmFtZVgkY2xh + c3Nlc1ZOU0ZvbnSiKCpYTlNPYmplY3TTCiwtLi8wXE5TQ29sb3JT + cGFjZVdOU1doaXRlgAoQA0IwANImJzIzV05TQ29sb3KiMirSJic1 + NlxOU0RpY3Rpb25hcnmiNSrSJic4OV8QEk5TQXR0cmlidXRlZFN0 + cmluZ6I6Kl8QEk5TQXR0cmlidXRlZFN0cmluZ18QD05TS2V5ZWRB + cmNoaXZlctE9PlRyb290gAEACAARABoAIwAtADIANwBFAEsAUgBf + AGYAbwBxAHMAdQB/AIYAjgCZAJsAngCgAKIApQCnAKkAsAC4AMEA + yADPANgA2gDcAOUA6AD8AQEBDAEVARwBHwEoAS8BPAFEAUYBSAFL + AVABWAFbAWABbQFwAXUBigGNAaIBtAG3AbwAAAAAAAACAQAAAAAA + AAA/AAAAAAAAAAAAAAAAAAABvg== + + + + $classes + + NSMutableData + NSData + NSObject + + $classname + NSMutableData + + + $class + + CF$UID + 91 + + NS.keys + + + CF$UID + 1071 + + + CF$UID + 1087 + + + CF$UID + 1088 + + + CF$UID + 1073 + + + CF$UID + 1089 + + + CF$UID + 1090 + + + NS.objects + + + CF$UID + 1091 + + + CF$UID + 461 + + + CF$UID + 1092 + + + CF$UID + 1094 + + + CF$UID + 461 + + + CF$UID + 461 + + + + IDEActivityReportStringSegmentType + IDEActivityReportStringSegmentDate + IDEActivityReportStringSegmentDateStyle + IDEActivityReportStringSegmentTimeStyle + 3 + + $class + + CF$UID + 1093 + + NS.time + 334881914.23707002 + + + $classes + + NSDate + NSObject + + $classname + NSDate + + Today at 5:45 PM + 106 + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 2 + + + + + $class + + CF$UID + 90 + + NS.objects + + + CF$UID + 1098 + + + CF$UID + 1099 + + + CF$UID + 1101 + + + CF$UID + 635 + + + CF$UID + 637 + + + CF$UID + 639 + + + CF$UID + 1103 + + + + + $class + + CF$UID + 468 + + NS.base + + CF$UID + 0 + + NS.relative + + CF$UID + 95 + + + + $class + + CF$UID + 468 + + NS.base + + CF$UID + 0 + + NS.relative + + CF$UID + 1100 + + + file://localhost/Work/ryan.gerleve/idMobileDepot/Wolfenstein3DPlatinumDepot/wolf3d/code/iphone/MainMenuView.xib + + $class + + CF$UID + 468 + + NS.base + + CF$UID + 0 + + NS.relative + + CF$UID + 1102 + + + file://localhost/Work/ryan.gerleve/idMobileDepot/Wolfenstein3DPlatinumDepot/wolf3d/code/iphone/SettingsView.xib + + $class + + CF$UID + 468 + + NS.base + + CF$UID + 0 + + NS.relative + + CF$UID + 1104 + + + file://localhost/Work/ryan.gerleve/idMobileDepot/Wolfenstein3DPlatinumDepot/wolf3d/code/env/fileio.c + + $top + + State + + CF$UID + 1 + + + $version + 100000 + + diff --git a/wolf3d/code/iphone/wolf3d.xcodeproj/project.xcworkspace/xcuserdata/ryan.gerleve.xcuserdatad/WorkspaceSettings.xcsettings b/wolf3d/code/iphone/wolf3d.xcodeproj/project.xcworkspace/xcuserdata/ryan.gerleve.xcuserdatad/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f7f6518 --- /dev/null +++ b/wolf3d/code/iphone/wolf3d.xcodeproj/project.xcworkspace/xcuserdata/ryan.gerleve.xcuserdatad/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + IDEWorkspaceUserSettings_BuildLocationStyle + 2 + + diff --git a/wolf3d/code/iphone/wolf3d.xcodeproj/ryan.gerleve.mode1v3 b/wolf3d/code/iphone/wolf3d.xcodeproj/ryan.gerleve.mode1v3 new file mode 100644 index 0000000..df38eff --- /dev/null +++ b/wolf3d/code/iphone/wolf3d.xcodeproj/ryan.gerleve.mode1v3 @@ -0,0 +1,1621 @@ + + + + + ActivePerspectiveName + Project + AllowedModules + + + BundleLoadPath + + MaxInstances + n + Module + PBXSmartGroupTreeModule + Name + Groups and Files Outline View + + + BundleLoadPath + + MaxInstances + n + Module + PBXNavigatorGroup + Name + Editor + + + BundleLoadPath + + MaxInstances + n + Module + XCTaskListModule + Name + Task List + + + BundleLoadPath + + MaxInstances + n + Module + XCDetailModule + Name + File and Smart Group Detail Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXBuildResultsModule + Name + Detailed Build Results Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXProjectFindModule + Name + Project Batch Find Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCProjectFormatConflictsModule + Name + Project Format Conflicts List + + + BundleLoadPath + + MaxInstances + n + Module + PBXBookmarksModule + Name + Bookmarks Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXClassBrowserModule + Name + Class Browser + + + BundleLoadPath + + MaxInstances + n + Module + PBXCVSModule + Name + Source Code Control Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXDebugBreakpointsModule + Name + Debug Breakpoints Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCDockableInspector + Name + Inspector + + + BundleLoadPath + + MaxInstances + n + Module + PBXOpenQuicklyModule + Name + Open Quickly Tool + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugSessionModule + Name + Debugger + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugCLIModule + Name + Debug Console + + + BundleLoadPath + + MaxInstances + n + Module + XCSnapshotModule + Name + Snapshots Tool + + + BundlePath + /Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources + Description + DefaultDescriptionKey + DockingSystemVisible + + Extension + mode1v3 + FavBarConfig + + PBXProjectModuleGUID + 3D2F13BC13B9527200A88583 + XCBarModuleItemNames + + XCBarModuleItems + + + FirstTimeWindowDisplayed + + Identifier + com.apple.perspectives.project.mode1v3 + MajorVersion + 33 + MinorVersion + 0 + Name + Default + Notifications + + + XCObserverAutoDisconnectKey + + XCObserverDefintionKey + + PBXStatusErrorsKey + 0 + + XCObserverFactoryKey + XCPerspectivesSpecificationIdentifier + XCObserverGUIDKey + XCObserverProjectIdentifier + XCObserverNotificationKey + PBXStatusBuildStateMessageNotification + XCObserverTargetKey + XCMainBuildResultsModuleGUID + XCObserverTriggerKey + awakenModuleWithObserver: + XCObserverValidationKey + + PBXStatusErrorsKey + 2 + + + + XCObserverAutoDisconnectKey + + XCObserverDefintionKey + + PBXStatusWarningsKey + 0 + + XCObserverFactoryKey + XCPerspectivesSpecificationIdentifier + XCObserverGUIDKey + XCObserverProjectIdentifier + XCObserverNotificationKey + PBXStatusBuildStateMessageNotification + XCObserverTargetKey + XCMainBuildResultsModuleGUID + XCObserverTriggerKey + awakenModuleWithObserver: + XCObserverValidationKey + + PBXStatusWarningsKey + 2 + + + + XCObserverAutoDisconnectKey + + XCObserverDefintionKey + + PBXStatusAnalyzerResultsKey + 0 + + XCObserverFactoryKey + XCPerspectivesSpecificationIdentifier + XCObserverGUIDKey + XCObserverProjectIdentifier + XCObserverNotificationKey + PBXStatusBuildStateMessageNotification + XCObserverTargetKey + XCMainBuildResultsModuleGUID + XCObserverTriggerKey + awakenModuleWithObserver: + XCObserverValidationKey + + PBXStatusAnalyzerResultsKey + 2 + + + + OpenEditors + + PerspectiveWidths + + -1 + -1 + + Perspectives + + + ChosenToolbarItems + + active-combo-popup + action + NSToolbarFlexibleSpaceItem + debugger-enable-breakpoints + build-and-go + com.apple.ide.PBXToolbarStopButton + get-info + NSToolbarFlexibleSpaceItem + com.apple.pbx.toolbar.searchfield + + ControllerClassBaseName + + IconName + WindowOfProjectWithEditor + Identifier + perspective.project + IsVertical + + Layout + + + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 297 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 29B97314FDCFA39411CA2CEA + 29B97315FDCFA39411CA2CEA + 3D5C0C7513DF8F78008ECBD1 + 3D5C0C7613DF8FAF008ECBD1 + 29B97317FDCFA39411CA2CEA + 3D5C0CFE13DF9AD5008ECBD1 + 3D5C0CFD13DF9ABF008ECBD1 + 3D15A41A13C6BA0B00FBFAA2 + 3D5C0D0F13DF9B82008ECBD1 + 19C28FACFE9D520D11CA2CBB + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 57 + 6 + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {297, 1111}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {314, 1129}} + GroupTreeTableConfiguration + + MainColumn + 297 + + RubberWindowFrame + 332 335 1402 1170 0 0 2560 1578 + + Module + PBXSmartGroupTreeModule + Proportion + 314pt + + + Dock + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20306471E060097A5F4 + PBXProjectModuleLabel + wolf_weapon.c + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CE0B20406471E060097A5F4 + PBXProjectModuleLabel + wolf_weapon.c + _historyCapacity + 0 + bookmark + 3D1397DB140702710059F453 + history + + 3D61672F13BAC44B005AC9FF + 3D61673013BAC44B005AC9FF + 3D61673113BAC44B005AC9FF + 3D61673213BAC44B005AC9FF + 3D61673313BAC44B005AC9FF + 3DF1A97013BD534400C34057 + 3D3ED7B413BF6D6100C5B1DF + 3DB0C67E13BF8761001A2A76 + 3DB0C6B013BF8BCE001A2A76 + 3DB0C6E413BF9017001A2A76 + 3D746DB813BFB4A70018B535 + 3D27CB1213D4F0B700D4DACC + 3D27CB6613D50A3100D4DACC + 3D24004F13D88BF8009FC7A7 + 3D24005013D88BF8009FC7A7 + 3D24005113D88BF8009FC7A7 + 3D24005213D88BF8009FC7A7 + 3D24005313D88BF8009FC7A7 + 3D24005413D88BF8009FC7A7 + 3D24006813D89342009FC7A7 + 3D24007013D89553009FC7A7 + 3D2401D113D8FCB1009FC7A7 + 3D421AC513D9FF2000F4E5F3 + 3D421ACC13DA003600F4E5F3 + 3DCD716E13DA280B007FCBAD + 3DB48A4513DA3FC50086EB98 + 3DB48A5313DA41B70086EB98 + 3DB48AAF13DA4D4A0086EB98 + 3D86CD9213DCFAB700186487 + 3D86CDD613DD05D500186487 + 3D86CE0613DD098600186487 + 3D86D2BE13DE2CEE00186487 + 3D86D3E113DE3EE900186487 + 3D86D3F613DE40AD00186487 + 3D86D44713DE480000186487 + 3D86D46113DE4A9100186487 + 3D86D58C13DE644B00186487 + 3D86D5A413DE653600186487 + 3D715D8913DF458400E69D06 + 3D5C0C0113DF60BB008ECBD1 + 3D5C0D0413DF9AF4008ECBD1 + 3D5C0F3E13E0E89C008ECBD1 + 3D5C0F5813E0EC8E008ECBD1 + 3D5C0F9C13E0FE33008ECBD1 + 3D5C10AF13E1D311008ECBD1 + 3D5C10B013E1D311008ECBD1 + 3D5C129F13E22E13008ECBD1 + 3D5C12A813E22F6C008ECBD1 + 3D5C12AB13E22F6C008ECBD1 + 3D5C12AC13E22F6C008ECBD1 + 3D5C12AD13E22F6C008ECBD1 + 3D5C12AE13E22F6C008ECBD1 + 3D5C12B013E22F6C008ECBD1 + 3D5C12B113E22F6C008ECBD1 + 3D5C12B313E22F6C008ECBD1 + 3D5C12B513E22F6C008ECBD1 + 3D5C12E613E236D0008ECBD1 + 3D5C12E713E236D0008ECBD1 + 3D5C12E813E236D0008ECBD1 + 3D5C12E913E236D0008ECBD1 + 3D64A89713E260850017C7E8 + 3D64A89913E260850017C7E8 + 3D64A8BA13E263AC0017C7E8 + 3D64A90413E266680017C7E8 + 3D39A5BF13E32BDA001EC0D3 + 3D39A60613E353FE001EC0D3 + 3D39A62E13E35BB1001EC0D3 + 3D39A63013E35BB1001EC0D3 + 3D39A63113E35BB1001EC0D3 + 3D39A6E913E35C82001EC0D3 + 3D821FEC13E35DBE007A570A + 3D821FED13E35DBE007A570A + 3D821FEE13E35DBE007A570A + 3D821FEF13E35DBE007A570A + 3D821FF013E35DBE007A570A + 3D821FF113E35DBE007A570A + 3D821FF213E35DBE007A570A + 3D821FF313E35DBE007A570A + 3D821FF413E35DBE007A570A + 3DE882E013E360AF00C95AE8 + 3DE882E113E360AF00C95AE8 + 3DE8839B13E3879700C95AE8 + 3D4FE44913F0ADE2005988AF + 3D520A0913F1D33E007F7546 + 3D10C34C13F2E71200DF5856 + 3D10C34E13F2E71200DF5856 + 3D10C34F13F2E71200DF5856 + 3D10C38013F318D200DF5856 + 3D10C3F913F3406100DF5856 + 3D10C3FA13F3406100DF5856 + 3D10C3FB13F3406100DF5856 + 3D10C3FC13F3406100DF5856 + 3D10C3FD13F3406100DF5856 + 3D10C3FE13F3406100DF5856 + 3D10C3FF13F3406100DF5856 + 3D10C40013F3406100DF5856 + 3D10C46813F34B5100DF5856 + 3D10C49F13F3555000DF5856 + 3D10C4B213F359DC00DF5856 + 3D1397901406FE310059F453 + 3D13979D1406FFE00059F453 + 3D13979E1406FFE00059F453 + 3D13979F1406FFE00059F453 + 3D1397A01406FFE00059F453 + 3D1397A11406FFE00059F453 + 3D1397A21406FFE00059F453 + 3D1397A31406FFE00059F453 + 3D1397A41406FFE00059F453 + 3D1397A51406FFE00059F453 + 3D1397A61406FFE00059F453 + 3D1397A71406FFE00059F453 + 3D1397A81406FFE00059F453 + 3D1397A91406FFE00059F453 + 3D1397AA1406FFE00059F453 + 3D1397AB1406FFE00059F453 + 3D1397AC1406FFE00059F453 + 3D1397AD1406FFE00059F453 + 3D1397AE1406FFE00059F453 + 3D1397AF1406FFE00059F453 + 3D1397B01406FFE00059F453 + 3D1397B11406FFE00059F453 + 3D1397B21406FFE00059F453 + 3D1397B31406FFE00059F453 + 3D1397B41406FFE00059F453 + 3D1397B51406FFE00059F453 + 3D1397B61406FFE00059F453 + 3D1397BE140700E30059F453 + 3D1397BF140700E30059F453 + 3D1397C0140700E30059F453 + 3D1397C1140700E30059F453 + 3D1397C2140700E30059F453 + 3D1397C3140700E30059F453 + 3D1397C4140700E30059F453 + 3D1397C5140700E30059F453 + 3D1397C6140700E30059F453 + 3D1397C7140700E30059F453 + 3D1397C8140700E30059F453 + 3D1397C9140700E30059F453 + 3D1397CA140700E30059F453 + 3D1397CB140700E30059F453 + 3D1397CC140700E30059F453 + 3D1397CD140700E30059F453 + 3D1397CE140700E30059F453 + 3D1397CF140700E30059F453 + 3D1397D0140700E30059F453 + 3D1397D31407012A0059F453 + 3D1397D41407012A0059F453 + 3D1397D51407012A0059F453 + 3D1397D61407012A0059F453 + 3D1397D71407012A0059F453 + 3D1397D81407012A0059F453 + 3D1397D91407012A0059F453 + + + SplitCount + 1 + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {1083, 1019}} + RubberWindowFrame + 332 335 1402 1170 0 0 2560 1578 + + Module + PBXNavigatorGroup + Proportion + 1019pt + + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20506471E060097A5F4 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{0, 1024}, {1083, 105}} + RubberWindowFrame + 332 335 1402 1170 0 0 2560 1578 + + Module + XCDetailModule + Proportion + 105pt + + + Proportion + 1083pt + + + Name + Project + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + XCModuleDock + PBXNavigatorGroup + XCDetailModule + + TableOfContents + + 3D13977A1406FB0E0059F453 + 1CE0B1FE06471DED0097A5F4 + 3D13977B1406FB0E0059F453 + 1CE0B20306471E060097A5F4 + 1CE0B20506471E060097A5F4 + + ToolbarConfigUserDefaultsMinorVersion + 2 + ToolbarConfiguration + xcode.toolbar.config.defaultV3 + + + ControllerClassBaseName + + IconName + WindowOfProject + Identifier + perspective.morph + IsVertical + 0 + Layout + + + BecomeActive + 1 + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 11E0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 186 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 29B97314FDCFA39411CA2CEA + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {186, 337}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + 1 + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {203, 355}} + GroupTreeTableConfiguration + + MainColumn + 186 + + RubberWindowFrame + 373 269 690 397 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 100% + + + Name + Morph + PreferredWidth + 300 + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + + TableOfContents + + 11E0B1FE06471DED0097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.default.shortV3 + + + PerspectivesBarVisible + + ShelfIsVisible + + SourceDescription + file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec' + StatusbarIsVisible + + TimeStamp + 336003697.48083001 + ToolbarConfigUserDefaultsMinorVersion + 2 + ToolbarDisplayMode + 1 + ToolbarIsVisible + + ToolbarSizeMode + 1 + Type + Perspectives + UpdateMessage + The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? + WindowJustification + 5 + WindowOrderList + + 3D2F13BD13B9527200A88583 + /Work/ryan.gerleve/idMobileDepot/Wolfenstein3DPlatinumDepot/wolf3d/code/iphone/wolf3d.xcodeproj + + WindowString + 332 335 1402 1170 0 0 2560 1578 + WindowToolsV3 + + + FirstTimeWindowDisplayed + + Identifier + windowTool.build + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528F0623707200166675 + PBXProjectModuleLabel + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {1300, 723}} + RubberWindowFrame + 1119 187 1300 1005 0 0 2560 1578 + + Module + PBXNavigatorGroup + Proportion + 723pt + + + ContentConfiguration + + PBXProjectModuleGUID + XCMainBuildResultsModuleGUID + PBXProjectModuleLabel + Build Results + XCBuildResultsTrigger_Collapse + 1021 + XCBuildResultsTrigger_Open + 1013 + + GeometryConfiguration + + Frame + {{0, 728}, {1300, 236}} + RubberWindowFrame + 1119 187 1300 1005 0 0 2560 1578 + + Module + PBXBuildResultsModule + Proportion + 236pt + + + Proportion + 964pt + + + Name + Build Results + ServiceClasses + + PBXBuildResultsModule + + StatusbarIsVisible + + TableOfContents + + 3D2F13BD13B9527200A88583 + 3D13977C1406FB0E0059F453 + 1CD0528F0623707200166675 + XCMainBuildResultsModuleGUID + + ToolbarConfiguration + xcode.toolbar.config.buildV3 + WindowContentMinSize + 486 300 + WindowString + 1119 187 1300 1005 0 0 2560 1578 + WindowToolGUID + 3D2F13BD13B9527200A88583 + WindowToolIsVisible + + + + FirstTimeWindowDisplayed + + Identifier + windowTool.debugger + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + Debugger + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {694, 608}} + {{694, 0}, {828, 608}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {1522, 608}} + {{0, 608}, {1522, 532}} + + + + LauncherConfigVersion + 8 + PBXProjectModuleGUID + 1C162984064C10D400B95A72 + PBXProjectModuleLabel + Debug - GLUTExamples (Underwater) + + GeometryConfiguration + + DebugConsoleVisible + None + DebugConsoleWindowFrame + {{200, 200}, {500, 300}} + DebugSTDIOWindowFrame + {{200, 200}, {500, 300}} + Frame + {{0, 0}, {1522, 1140}} + PBXDebugSessionStackFrameViewKey + + DebugVariablesTableConfiguration + + Name + 241 + Value + 213 + Summary + 349 + + Frame + {{694, 0}, {828, 608}} + RubberWindowFrame + 917 251 1522 1181 0 0 2560 1578 + + RubberWindowFrame + 917 251 1522 1181 0 0 2560 1578 + + Module + PBXDebugSessionModule + Proportion + 1140pt + + + Proportion + 1140pt + + + Name + Debugger + ServiceClasses + + PBXDebugSessionModule + + StatusbarIsVisible + + TableOfContents + + 1CD10A99069EF8BA00B06720 + 3DF17F6113F438E300ED668A + 1C162984064C10D400B95A72 + 3DF17F6213F438E300ED668A + 3DF17F6313F438E300ED668A + 3DF17F6413F438E300ED668A + 3DF17F6513F438E300ED668A + 3DF17F6613F438E300ED668A + + ToolbarConfiguration + xcode.toolbar.config.debugV3 + WindowString + 917 251 1522 1181 0 0 2560 1578 + WindowToolGUID + 1CD10A99069EF8BA00B06720 + WindowToolIsVisible + + + + FirstTimeWindowDisplayed + + Identifier + windowTool.find + IsVertical + + Layout + + + Dock + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CDD528C0622207200134675 + PBXProjectModuleLabel + SkillViewController.m + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {1493, 738}} + RubberWindowFrame + 537 242 1493 1069 0 0 2560 1578 + + Module + PBXNavigatorGroup + Proportion + 1493pt + + + Proportion + 738pt + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528E0623707200166675 + PBXProjectModuleLabel + Project Find + + GeometryConfiguration + + Frame + {{0, 743}, {1493, 285}} + RubberWindowFrame + 537 242 1493 1069 0 0 2560 1578 + + Module + PBXProjectFindModule + Proportion + 285pt + + + Proportion + 1028pt + + + Name + Project Find + ServiceClasses + + PBXProjectFindModule + + StatusbarIsVisible + + TableOfContents + + 1C530D57069F1CE1000CFCEE + 3DF17F8C13F4414600ED668A + 3DF17F8D13F4414600ED668A + 1CDD528C0622207200134675 + 1CD0528E0623707200166675 + + WindowString + 537 242 1493 1069 0 0 2560 1578 + WindowToolGUID + 1C530D57069F1CE1000CFCEE + WindowToolIsVisible + + + + Identifier + MENUSEPARATOR + + + FirstTimeWindowDisplayed + + Identifier + windowTool.debuggerConsole + IsVertical + + Layout + + + Dock + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAAC065D492600B07095 + PBXProjectModuleLabel + Debugger Console + + GeometryConfiguration + + Frame + {{0, 0}, {817, 731}} + RubberWindowFrame + 1670 635 817 772 0 0 2560 1578 + + Module + PBXDebugCLIModule + Proportion + 731pt + + + Proportion + 731pt + + + Name + Debugger Console + ServiceClasses + + PBXDebugCLIModule + + StatusbarIsVisible + + TableOfContents + + 1C78EAAD065D492600B07095 + 3DF17F6713F438E300ED668A + 1C78EAAC065D492600B07095 + + ToolbarConfiguration + xcode.toolbar.config.consoleV3 + WindowString + 1670 635 817 772 0 0 2560 1578 + WindowToolGUID + 1C78EAAD065D492600B07095 + WindowToolIsVisible + + + + Identifier + windowTool.snapshots + Layout + + + Dock + + + Module + XCSnapshotModule + Proportion + 100% + + + Proportion + 100% + + + Name + Snapshots + ServiceClasses + + XCSnapshotModule + + StatusbarIsVisible + Yes + ToolbarConfiguration + xcode.toolbar.config.snapshots + WindowString + 315 824 300 550 0 0 1440 878 + WindowToolIsVisible + Yes + + + Identifier + windowTool.scm + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAB2065D492600B07095 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1C78EAB3065D492600B07095 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {452, 0}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD052920623707200166675 + PBXProjectModuleLabel + SCM + + GeometryConfiguration + + ConsoleFrame + {{0, 259}, {452, 0}} + Frame + {{0, 7}, {452, 259}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + TableConfiguration + + Status + 30 + FileName + 199 + Path + 197.0950012207031 + + TableFrame + {{0, 0}, {452, 250}} + + Module + PBXCVSModule + Proportion + 262pt + + + Proportion + 266pt + + + Name + SCM + ServiceClasses + + PBXCVSModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C78EAB4065D492600B07095 + 1C78EAB5065D492600B07095 + 1C78EAB2065D492600B07095 + 1CD052920623707200166675 + + ToolbarConfiguration + xcode.toolbar.config.scm + WindowString + 743 379 452 308 0 0 1280 1002 + + + FirstTimeWindowDisplayed + + Identifier + windowTool.breakpoints + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C77FABC04509CD000000102 + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + no + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 168 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 1C77FABC04509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {168, 350}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + + + GeometryConfiguration + + Frame + {{0, 0}, {185, 368}} + GroupTreeTableConfiguration + + MainColumn + 168 + + RubberWindowFrame + 25 1065 744 409 0 0 2560 1578 + + Module + PBXSmartGroupTreeModule + Proportion + 185pt + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1CA1AED706398EBD00589147 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{190, 0}, {554, 368}} + RubberWindowFrame + 25 1065 744 409 0 0 2560 1578 + + Module + XCDetailModule + Proportion + 554pt + + + Proportion + 368pt + + + MajorVersion + 3 + MinorVersion + 0 + Name + Breakpoints + ServiceClasses + + PBXSmartGroupTreeModule + XCDetailModule + + StatusbarIsVisible + + TableOfContents + + 3D64A8FE13E2664F0017C7E8 + 3D64A8FF13E2664F0017C7E8 + 1CE0B1FE06471DED0097A5F4 + 1CA1AED706398EBD00589147 + + ToolbarConfiguration + xcode.toolbar.config.breakpointsV3 + WindowString + 25 1065 744 409 0 0 2560 1578 + WindowToolGUID + 3D64A8FE13E2664F0017C7E8 + WindowToolIsVisible + + + + Identifier + windowTool.debugAnimator + Layout + + + Dock + + + Module + PBXNavigatorGroup + Proportion + 100% + + + Proportion + 100% + + + Name + Debug Visualizer + ServiceClasses + + PBXNavigatorGroup + + StatusbarIsVisible + 1 + ToolbarConfiguration + xcode.toolbar.config.debugAnimatorV3 + WindowString + 100 100 700 500 0 0 1280 1002 + + + Identifier + windowTool.bookmarks + Layout + + + Dock + + + Module + PBXBookmarksModule + Proportion + 100% + + + Proportion + 100% + + + Name + Bookmarks + ServiceClasses + + PBXBookmarksModule + + StatusbarIsVisible + 0 + WindowString + 538 42 401 187 0 0 1280 1002 + + + Identifier + windowTool.projectFormatConflicts + Layout + + + Dock + + + Module + XCProjectFormatConflictsModule + Proportion + 100% + + + Proportion + 100% + + + Name + Project Format Conflicts + ServiceClasses + + XCProjectFormatConflictsModule + + StatusbarIsVisible + 0 + WindowContentMinSize + 450 300 + WindowString + 50 850 472 307 0 0 1440 877 + + + Identifier + windowTool.classBrowser + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + OptionsSetName + Hierarchy, all classes + PBXProjectModuleGUID + 1CA6456E063B45B4001379D8 + PBXProjectModuleLabel + Class Browser - NSObject + + GeometryConfiguration + + ClassesFrame + {{0, 0}, {374, 96}} + ClassesTreeTableConfiguration + + PBXClassNameColumnIdentifier + 208 + PBXClassBookColumnIdentifier + 22 + + Frame + {{0, 0}, {630, 331}} + MembersFrame + {{0, 105}, {374, 395}} + MembersTreeTableConfiguration + + PBXMemberTypeIconColumnIdentifier + 22 + PBXMemberNameColumnIdentifier + 216 + PBXMemberTypeColumnIdentifier + 97 + PBXMemberBookColumnIdentifier + 22 + + PBXModuleWindowStatusBarHidden2 + 1 + RubberWindowFrame + 385 179 630 352 0 0 1440 878 + + Module + PBXClassBrowserModule + Proportion + 332pt + + + Proportion + 332pt + + + Name + Class Browser + ServiceClasses + + PBXClassBrowserModule + + StatusbarIsVisible + 0 + TableOfContents + + 1C0AD2AF069F1E9B00FABCE6 + 1C0AD2B0069F1E9B00FABCE6 + 1CA6456E063B45B4001379D8 + + ToolbarConfiguration + xcode.toolbar.config.classbrowser + WindowString + 385 179 630 352 0 0 1440 878 + WindowToolGUID + 1C0AD2AF069F1E9B00FABCE6 + WindowToolIsVisible + 0 + + + Identifier + windowTool.refactoring + IncludeInToolsMenu + 0 + Layout + + + Dock + + + BecomeActive + 1 + GeometryConfiguration + + Frame + {0, 0}, {500, 335} + RubberWindowFrame + {0, 0}, {500, 335} + + Module + XCRefactoringModule + Proportion + 100% + + + Proportion + 100% + + + Name + Refactoring + ServiceClasses + + XCRefactoringModule + + WindowString + 200 200 500 356 0 0 1920 1200 + + + + diff --git a/wolf3d/code/iphone/wolf3d.xcodeproj/ryan.gerleve.pbxuser b/wolf3d/code/iphone/wolf3d.xcodeproj/ryan.gerleve.pbxuser new file mode 100644 index 0000000..cc67d76 --- /dev/null +++ b/wolf3d/code/iphone/wolf3d.xcodeproj/ryan.gerleve.pbxuser @@ -0,0 +1,3284 @@ +// !$*UTF8*$! +{ + 1D6058900D05DD3D006BFB54 /* wolf3d */ = { + activeExec = 0; + executables = ( + 3D2F13A713B9524F00A88583 /* wolf3d */, + ); + }; + 29B97313FDCFA39411CA2CEA /* Project object */ = { + activeArchitecturePreference = armv6; + activeBuildConfigurationName = Debug; + activeExecutable = 3D2F13A713B9524F00A88583 /* wolf3d */; + activeSDKPreference = iphonesimulator4.3; + activeTarget = 1D6058900D05DD3D006BFB54 /* wolf3d */; + addToTargets = ( + 1D6058900D05DD3D006BFB54 /* wolf3d */, + ); + breakpoints = ( + ); + codeSenseManager = 3D2F13B913B9526E00A88583 /* Code sense */; + executables = ( + 3D2F13A713B9524F00A88583 /* wolf3d */, + ); + perUserDictionary = { + "PBXConfiguration.PBXBreakpointsDataSource.v1:1CA1AED706398EBD00589147" = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXBreakpointsDataSource_BreakpointID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 20, + 198, + 20, + 99, + 99, + 29, + 20, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXBreakpointsDataSource_ActionID, + PBXBreakpointsDataSource_TypeID, + PBXBreakpointsDataSource_BreakpointID, + PBXBreakpointsDataSource_UseID, + PBXBreakpointsDataSource_LocationID, + PBXBreakpointsDataSource_ConditionID, + PBXBreakpointsDataSource_IgnoreCountID, + PBXBreakpointsDataSource_ContinueID, + ); + }; + PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID; + PBXFileTableDataSourceColumnWidthsKey = ( + 22, + 300, + 731.58349609375, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXExecutablesDataSource_ActiveFlagID, + PBXExecutablesDataSource_NameID, + PBXExecutablesDataSource_CommentsID, + ); + }; + PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = 1; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 844, + 20, + 48, + 43, + 43, + 20, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + PBXFileDataSource_Target_ColumnID, + ); + }; + PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 804, + 60, + 20, + 48, + 43, + 43, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXTargetDataSource_PrimaryAttribute, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + ); + }; + PBXPerProjectTemplateStateSaveDate = 334771396; + PBXWorkspaceStateSaveDate = 334771396; + }; + perUserProjectItems = { + 3D10C31413F2D7E700DF5856 = 3D10C31413F2D7E700DF5856 /* PBXTextBookmark */; + 3D10C34C13F2E71200DF5856 = 3D10C34C13F2E71200DF5856 /* PBXBookmark */; + 3D10C34E13F2E71200DF5856 = 3D10C34E13F2E71200DF5856 /* PBXBookmark */; + 3D10C34F13F2E71200DF5856 = 3D10C34F13F2E71200DF5856 /* PBXTextBookmark */; + 3D10C35013F2E71200DF5856 = 3D10C35013F2E71200DF5856 /* PBXTextBookmark */; + 3D10C35113F2E71200DF5856 = 3D10C35113F2E71200DF5856 /* PBXTextBookmark */; + 3D10C35213F2E71200DF5856 = 3D10C35213F2E71200DF5856 /* PBXTextBookmark */; + 3D10C35313F2E71200DF5856 = 3D10C35313F2E71200DF5856 /* PBXTextBookmark */; + 3D10C35413F2E71200DF5856 = 3D10C35413F2E71200DF5856 /* PBXTextBookmark */; + 3D10C35513F2E71200DF5856 = 3D10C35513F2E71200DF5856 /* PBXTextBookmark */; + 3D10C35613F2E71200DF5856 = 3D10C35613F2E71200DF5856 /* PBXTextBookmark */; + 3D10C38013F318D200DF5856 = 3D10C38013F318D200DF5856 /* PlistBookmark */; + 3D10C39013F31B5800DF5856 = 3D10C39013F31B5800DF5856 /* PBXTextBookmark */; + 3D10C3F913F3406100DF5856 = 3D10C3F913F3406100DF5856 /* PBXBookmark */; + 3D10C3FA13F3406100DF5856 = 3D10C3FA13F3406100DF5856 /* PBXBookmark */; + 3D10C3FB13F3406100DF5856 = 3D10C3FB13F3406100DF5856 /* PBXBookmark */; + 3D10C3FC13F3406100DF5856 = 3D10C3FC13F3406100DF5856 /* PBXBookmark */; + 3D10C3FD13F3406100DF5856 = 3D10C3FD13F3406100DF5856 /* PBXBookmark */; + 3D10C3FE13F3406100DF5856 = 3D10C3FE13F3406100DF5856 /* PBXBookmark */; + 3D10C3FF13F3406100DF5856 = 3D10C3FF13F3406100DF5856 /* PBXBookmark */; + 3D10C40013F3406100DF5856 = 3D10C40013F3406100DF5856 /* PBXBookmark */; + 3D10C40113F3406100DF5856 = 3D10C40113F3406100DF5856 /* PBXTextBookmark */; + 3D10C40213F3406100DF5856 = 3D10C40213F3406100DF5856 /* PBXTextBookmark */; + 3D10C40313F3406100DF5856 = 3D10C40313F3406100DF5856 /* PBXTextBookmark */; + 3D10C40413F3406100DF5856 = 3D10C40413F3406100DF5856 /* PBXTextBookmark */; + 3D10C40513F3406100DF5856 = 3D10C40513F3406100DF5856 /* PBXTextBookmark */; + 3D10C40713F3406100DF5856 = 3D10C40713F3406100DF5856 /* PBXTextBookmark */; + 3D10C40A13F3406100DF5856 = 3D10C40A13F3406100DF5856 /* PBXTextBookmark */; + 3D10C41C13F3426C00DF5856 = 3D10C41C13F3426C00DF5856 /* PBXTextBookmark */; + 3D10C46613F34B5100DF5856 = 3D10C46613F34B5100DF5856 /* PBXTextBookmark */; + 3D10C46713F34B5100DF5856 = 3D10C46713F34B5100DF5856 /* PBXTextBookmark */; + 3D10C46813F34B5100DF5856 = 3D10C46813F34B5100DF5856 /* PBXBookmark */; + 3D10C46913F34B5100DF5856 = 3D10C46913F34B5100DF5856 /* PBXTextBookmark */; + 3D10C46A13F34B5100DF5856 = 3D10C46A13F34B5100DF5856 /* PBXTextBookmark */; + 3D10C46B13F34B5100DF5856 = 3D10C46B13F34B5100DF5856 /* PBXTextBookmark */; + 3D10C49F13F3555000DF5856 = 3D10C49F13F3555000DF5856 /* PBXTextBookmark */; + 3D10C4A813F3574F00DF5856 = 3D10C4A813F3574F00DF5856 /* PBXTextBookmark */; + 3D10C4B213F359DC00DF5856 = 3D10C4B213F359DC00DF5856 /* PBXTextBookmark */; + 3D10C4B313F359DC00DF5856 = 3D10C4B313F359DC00DF5856 /* PBXTextBookmark */; + 3D10C4D013F3600B00DF5856 = 3D10C4D013F3600B00DF5856 /* PBXTextBookmark */; + 3D10C4D113F3600B00DF5856 = 3D10C4D113F3600B00DF5856 /* PBXTextBookmark */; + 3D24004F13D88BF8009FC7A7 = 3D24004F13D88BF8009FC7A7 /* PBXTextBookmark */; + 3D24005013D88BF8009FC7A7 = 3D24005013D88BF8009FC7A7 /* PBXTextBookmark */; + 3D24005113D88BF8009FC7A7 = 3D24005113D88BF8009FC7A7 /* PBXTextBookmark */; + 3D24005213D88BF8009FC7A7 = 3D24005213D88BF8009FC7A7 /* PBXTextBookmark */; + 3D24005313D88BF8009FC7A7 = 3D24005313D88BF8009FC7A7 /* PBXTextBookmark */; + 3D24005413D88BF8009FC7A7 = 3D24005413D88BF8009FC7A7 /* PBXTextBookmark */; + 3D24006813D89342009FC7A7 = 3D24006813D89342009FC7A7 /* PBXTextBookmark */; + 3D24007013D89553009FC7A7 = 3D24007013D89553009FC7A7 /* PBXTextBookmark */; + 3D24016113D8DB12009FC7A7 = 3D24016113D8DB12009FC7A7 /* PBXTextBookmark */; + 3D2401D113D8FCB1009FC7A7 = 3D2401D113D8FCB1009FC7A7 /* PBXTextBookmark */; + 3D27CB1213D4F0B700D4DACC = 3D27CB1213D4F0B700D4DACC /* PBXTextBookmark */; + 3D27CB6613D50A3100D4DACC = 3D27CB6613D50A3100D4DACC /* PBXTextBookmark */; + 3D39A53413E31686001EC0D3 = 3D39A53413E31686001EC0D3 /* PBXTextBookmark */; + 3D39A5BF13E32BDA001EC0D3 = 3D39A5BF13E32BDA001EC0D3 /* PBXBookmark */; + 3D39A60613E353FE001EC0D3 = 3D39A60613E353FE001EC0D3 /* PBXTextBookmark */; + 3D39A62E13E35BB1001EC0D3 = 3D39A62E13E35BB1001EC0D3 /* PBXBookmark */; + 3D39A63013E35BB1001EC0D3 = 3D39A63013E35BB1001EC0D3 /* PBXBookmark */; + 3D39A63113E35BB1001EC0D3 = 3D39A63113E35BB1001EC0D3 /* PBXBookmark */; + 3D39A6E913E35C82001EC0D3 = 3D39A6E913E35C82001EC0D3 /* PBXBookmark */; + 3D3ED7B413BF6D6100C5B1DF = 3D3ED7B413BF6D6100C5B1DF /* PBXTextBookmark */; + 3D421AC513D9FF2000F4E5F3 = 3D421AC513D9FF2000F4E5F3 /* PBXTextBookmark */; + 3D421ACC13DA003600F4E5F3 = 3D421ACC13DA003600F4E5F3 /* PBXTextBookmark */; + 3D4FE44913F0ADE2005988AF = 3D4FE44913F0ADE2005988AF /* PBXTextBookmark */; + 3D4FE46013F0B0D1005988AF = 3D4FE46013F0B0D1005988AF /* PBXTextBookmark */; + 3D52098013F1A0FE007F7546 = 3D52098013F1A0FE007F7546 /* PBXTextBookmark */; + 3D52098113F1A0FE007F7546 = 3D52098113F1A0FE007F7546 /* PBXTextBookmark */; + 3D52099913F1A3BF007F7546 = 3D52099913F1A3BF007F7546 /* PBXTextBookmark */; + 3D5209D613F1C7A7007F7546 = 3D5209D613F1C7A7007F7546 /* PBXTextBookmark */; + 3D520A0913F1D33E007F7546 = 3D520A0913F1D33E007F7546 /* PBXTextBookmark */; + 3D5C0C0113DF60BB008ECBD1 = 3D5C0C0113DF60BB008ECBD1 /* PBXTextBookmark */; + 3D5C0C3F13DF73BD008ECBD1 = 3D5C0C3F13DF73BD008ECBD1 /* PBXTextBookmark */; + 3D5C0C7A13DF8FCF008ECBD1 = 3D5C0C7A13DF8FCF008ECBD1 /* PBXTextBookmark */; + 3D5C0D0413DF9AF4008ECBD1 = 3D5C0D0413DF9AF4008ECBD1 /* PBXBookmark */; + 3D5C0F3E13E0E89C008ECBD1 = 3D5C0F3E13E0E89C008ECBD1 /* PBXTextBookmark */; + 3D5C0F4013E0E89C008ECBD1 = 3D5C0F4013E0E89C008ECBD1 /* PBXTextBookmark */; + 3D5C0F4813E0E89C008ECBD1 = 3D5C0F4813E0E89C008ECBD1 /* PBXTextBookmark */; + 3D5C0F4A13E0E89C008ECBD1 = 3D5C0F4A13E0E89C008ECBD1 /* PBXTextBookmark */; + 3D5C0F5813E0EC8E008ECBD1 = 3D5C0F5813E0EC8E008ECBD1 /* PBXTextBookmark */; + 3D5C0F9C13E0FE33008ECBD1 = 3D5C0F9C13E0FE33008ECBD1 /* PBXTextBookmark */; + 3D5C106C13E1B45C008ECBD1 = 3D5C106C13E1B45C008ECBD1 /* PBXTextBookmark */; + 3D5C10AF13E1D311008ECBD1 = 3D5C10AF13E1D311008ECBD1 /* PBXTextBookmark */; + 3D5C10B013E1D311008ECBD1 = 3D5C10B013E1D311008ECBD1 /* PBXTextBookmark */; + 3D5C129F13E22E13008ECBD1 = 3D5C129F13E22E13008ECBD1 /* PBXBookmark */; + 3D5C12A813E22F6C008ECBD1 = 3D5C12A813E22F6C008ECBD1 /* PBXBookmark */; + 3D5C12AB13E22F6C008ECBD1 = 3D5C12AB13E22F6C008ECBD1 /* PBXBookmark */; + 3D5C12AC13E22F6C008ECBD1 = 3D5C12AC13E22F6C008ECBD1 /* PBXBookmark */; + 3D5C12AD13E22F6C008ECBD1 = 3D5C12AD13E22F6C008ECBD1 /* PBXBookmark */; + 3D5C12AE13E22F6C008ECBD1 = 3D5C12AE13E22F6C008ECBD1 /* PBXBookmark */; + 3D5C12B013E22F6C008ECBD1 = 3D5C12B013E22F6C008ECBD1 /* PBXBookmark */; + 3D5C12B113E22F6C008ECBD1 = 3D5C12B113E22F6C008ECBD1 /* PBXBookmark */; + 3D5C12B313E22F6C008ECBD1 = 3D5C12B313E22F6C008ECBD1 /* PBXBookmark */; + 3D5C12B513E22F6C008ECBD1 = 3D5C12B513E22F6C008ECBD1 /* PlistBookmark */; + 3D5C12E613E236D0008ECBD1 = 3D5C12E613E236D0008ECBD1 /* PBXBookmark */; + 3D5C12E713E236D0008ECBD1 = 3D5C12E713E236D0008ECBD1 /* PBXBookmark */; + 3D5C12E813E236D0008ECBD1 = 3D5C12E813E236D0008ECBD1 /* PBXBookmark */; + 3D5C12E913E236D0008ECBD1 = 3D5C12E913E236D0008ECBD1 /* PBXBookmark */; + 3D61672F13BAC44B005AC9FF = 3D61672F13BAC44B005AC9FF /* PBXTextBookmark */; + 3D61673013BAC44B005AC9FF = 3D61673013BAC44B005AC9FF /* PBXTextBookmark */; + 3D61673113BAC44B005AC9FF = 3D61673113BAC44B005AC9FF /* PBXTextBookmark */; + 3D61673213BAC44B005AC9FF = 3D61673213BAC44B005AC9FF /* PBXTextBookmark */; + 3D61673313BAC44B005AC9FF = 3D61673313BAC44B005AC9FF /* PBXTextBookmark */; + 3D64A89713E260850017C7E8 = 3D64A89713E260850017C7E8 /* PBXTextBookmark */; + 3D64A89913E260850017C7E8 = 3D64A89913E260850017C7E8 /* PBXTextBookmark */; + 3D64A8BA13E263AC0017C7E8 = 3D64A8BA13E263AC0017C7E8 /* PBXTextBookmark */; + 3D64A90213E266680017C7E8 = 3D64A90213E266680017C7E8 /* PBXTextBookmark */; + 3D64A90413E266680017C7E8 = 3D64A90413E266680017C7E8 /* PBXTextBookmark */; + 3D715D8913DF458400E69D06 = 3D715D8913DF458400E69D06 /* PBXTextBookmark */; + 3D746DB813BFB4A70018B535 = 3D746DB813BFB4A70018B535 /* PBXTextBookmark */; + 3D821FEC13E35DBE007A570A = 3D821FEC13E35DBE007A570A /* PBXBookmark */; + 3D821FED13E35DBE007A570A = 3D821FED13E35DBE007A570A /* PBXBookmark */; + 3D821FEE13E35DBE007A570A = 3D821FEE13E35DBE007A570A /* PBXBookmark */; + 3D821FEF13E35DBE007A570A = 3D821FEF13E35DBE007A570A /* PBXBookmark */; + 3D821FF013E35DBE007A570A = 3D821FF013E35DBE007A570A /* PBXBookmark */; + 3D821FF113E35DBE007A570A = 3D821FF113E35DBE007A570A /* PBXBookmark */; + 3D821FF213E35DBE007A570A = 3D821FF213E35DBE007A570A /* PBXBookmark */; + 3D821FF313E35DBE007A570A = 3D821FF313E35DBE007A570A /* PBXBookmark */; + 3D821FF413E35DBE007A570A = 3D821FF413E35DBE007A570A /* PBXBookmark */; + 3D86CD9213DCFAB700186487 = 3D86CD9213DCFAB700186487 /* PBXTextBookmark */; + 3D86CDD613DD05D500186487 = 3D86CDD613DD05D500186487 /* PBXTextBookmark */; + 3D86CE0613DD098600186487 = 3D86CE0613DD098600186487 /* PBXTextBookmark */; + 3D86D2BE13DE2CEE00186487 = 3D86D2BE13DE2CEE00186487 /* PBXTextBookmark */; + 3D86D32913DE311900186487 = 3D86D32913DE311900186487 /* PBXTextBookmark */; + 3D86D3E113DE3EE900186487 = 3D86D3E113DE3EE900186487 /* PBXTextBookmark */; + 3D86D3F613DE40AD00186487 = 3D86D3F613DE40AD00186487 /* PBXTextBookmark */; + 3D86D44713DE480000186487 = 3D86D44713DE480000186487 /* PBXTextBookmark */; + 3D86D46113DE4A9100186487 = 3D86D46113DE4A9100186487 /* PBXTextBookmark */; + 3D86D58C13DE644B00186487 = 3D86D58C13DE644B00186487 /* PBXTextBookmark */; + 3D86D5A413DE653600186487 = 3D86D5A413DE653600186487 /* PBXTextBookmark */; + 3D86D5A713DE653600186487 = 3D86D5A713DE653600186487 /* PBXTextBookmark */; + 3D86D5D313DE6C3E00186487 = 3D86D5D313DE6C3E00186487 /* PBXTextBookmark */; + 3DB0C67E13BF8761001A2A76 = 3DB0C67E13BF8761001A2A76 /* PBXTextBookmark */; + 3DB0C69413BF89D2001A2A76 = 3DB0C69413BF89D2001A2A76 /* PBXTextBookmark */; + 3DB0C6B013BF8BCE001A2A76 = 3DB0C6B013BF8BCE001A2A76 /* PBXTextBookmark */; + 3DB0C6E413BF9017001A2A76 = 3DB0C6E413BF9017001A2A76 /* PBXTextBookmark */; + 3DB48A4513DA3FC50086EB98 = 3DB48A4513DA3FC50086EB98 /* PBXTextBookmark */; + 3DB48A5313DA41B70086EB98 = 3DB48A5313DA41B70086EB98 /* PBXTextBookmark */; + 3DB48AAF13DA4D4A0086EB98 = 3DB48AAF13DA4D4A0086EB98 /* PBXTextBookmark */; + 3DCD716E13DA280B007FCBAD = 3DCD716E13DA280B007FCBAD /* PBXTextBookmark */; + 3DE882E013E360AF00C95AE8 = 3DE882E013E360AF00C95AE8 /* PBXBookmark */; + 3DE882E113E360AF00C95AE8 = 3DE882E113E360AF00C95AE8 /* PBXTextBookmark */; + 3DE8839B13E3879700C95AE8 = 3DE8839B13E3879700C95AE8 /* PBXTextBookmark */; + 3DE883B013E39C1800C95AE8 = 3DE883B013E39C1800C95AE8 /* PBXTextBookmark */; + 3DE883DC13E3A95300C95AE8 = 3DE883DC13E3A95300C95AE8 /* PBXTextBookmark */; + 3DF17F5D13F438E300ED668A /* PBXTextBookmark */ = 3DF17F5D13F438E300ED668A /* PBXTextBookmark */; + 3DF17F5E13F438E300ED668A /* XCBuildMessageTextBookmark */ = 3DF17F5E13F438E300ED668A /* XCBuildMessageTextBookmark */; + 3DF17F5F13F438E300ED668A /* PBXTextBookmark */ = 3DF17F5F13F438E300ED668A /* PBXTextBookmark */; + 3DF17F6813F438E400ED668A /* PBXTextBookmark */ = 3DF17F6813F438E400ED668A /* PBXTextBookmark */; + 3DF17F6913F438E400ED668A /* PBXTextBookmark */ = 3DF17F6913F438E400ED668A /* PBXTextBookmark */; + 3DF17F6A13F438E400ED668A /* PBXTextBookmark */ = 3DF17F6A13F438E400ED668A /* PBXTextBookmark */; + 3DF17F6B13F438E400ED668A /* PBXTextBookmark */ = 3DF17F6B13F438E400ED668A /* PBXTextBookmark */; + 3DF17F6C13F438E400ED668A /* PBXTextBookmark */ = 3DF17F6C13F438E400ED668A /* PBXTextBookmark */; + 3DF17F6D13F438E400ED668A /* PBXTextBookmark */ = 3DF17F6D13F438E400ED668A /* PBXTextBookmark */; + 3DF17F7213F4390300ED668A /* PBXTextBookmark */ = 3DF17F7213F4390300ED668A /* PBXTextBookmark */; + 3DF17F7313F4390300ED668A /* PBXTextBookmark */ = 3DF17F7313F4390300ED668A /* PBXTextBookmark */; + 3DF17F7413F4390300ED668A /* PBXTextBookmark */ = 3DF17F7413F4390300ED668A /* PBXTextBookmark */; + 3DF17F7513F4390300ED668A /* PBXTextBookmark */ = 3DF17F7513F4390300ED668A /* PBXTextBookmark */; + 3DF17F7813F43BB300ED668A /* PBXTextBookmark */ = 3DF17F7813F43BB300ED668A /* PBXTextBookmark */; + 3DF17F7913F43E2B00ED668A /* PBXTextBookmark */ = 3DF17F7913F43E2B00ED668A /* PBXTextBookmark */; + 3DF17F7A13F43E2B00ED668A /* PBXTextBookmark */ = 3DF17F7A13F43E2B00ED668A /* PBXTextBookmark */; + 3DF17F7B13F43E2B00ED668A /* PBXTextBookmark */ = 3DF17F7B13F43E2B00ED668A /* PBXTextBookmark */; + 3DF17F7C13F43E2B00ED668A /* PBXTextBookmark */ = 3DF17F7C13F43E2B00ED668A /* PBXTextBookmark */; + 3DF17F8313F4414600ED668A /* PBXTextBookmark */ = 3DF17F8313F4414600ED668A /* PBXTextBookmark */; + 3DF17F8413F4414600ED668A /* PBXTextBookmark */ = 3DF17F8413F4414600ED668A /* PBXTextBookmark */; + 3DF17F8513F4414600ED668A /* PBXTextBookmark */ = 3DF17F8513F4414600ED668A /* PBXTextBookmark */; + 3DF17F8613F4414600ED668A /* PBXTextBookmark */ = 3DF17F8613F4414600ED668A /* PBXTextBookmark */; + 3DF17F8713F4414600ED668A /* PBXTextBookmark */ = 3DF17F8713F4414600ED668A /* PBXTextBookmark */; + 3DF17F8813F4414600ED668A /* PBXTextBookmark */ = 3DF17F8813F4414600ED668A /* PBXTextBookmark */; + 3DF17F8913F4414600ED668A /* XCBuildMessageTextBookmark */ = 3DF17F8913F4414600ED668A /* XCBuildMessageTextBookmark */; + 3DF17F8A13F4414600ED668A /* PBXTextBookmark */ = 3DF17F8A13F4414600ED668A /* PBXTextBookmark */; + 3DF17FBC13F4465100ED668A /* PBXTextBookmark */ = 3DF17FBC13F4465100ED668A /* PBXTextBookmark */; + 3DF17FBD13F4465100ED668A /* PBXTextBookmark */ = 3DF17FBD13F4465100ED668A /* PBXTextBookmark */; + 3DF17FBE13F4465100ED668A /* PBXTextBookmark */ = 3DF17FBE13F4465100ED668A /* PBXTextBookmark */; + 3DF17FBF13F4465100ED668A /* PBXTextBookmark */ = 3DF17FBF13F4465100ED668A /* PBXTextBookmark */; + 3DF17FC013F4465100ED668A /* PBXTextBookmark */ = 3DF17FC013F4465100ED668A /* PBXTextBookmark */; + 3DF1800913F447EC00ED668A /* PBXTextBookmark */ = 3DF1800913F447EC00ED668A /* PBXTextBookmark */; + 3DF1800A13F447EC00ED668A /* PBXTextBookmark */ = 3DF1800A13F447EC00ED668A /* PBXTextBookmark */; + 3DF1800B13F447EC00ED668A /* PBXTextBookmark */ = 3DF1800B13F447EC00ED668A /* PBXTextBookmark */; + 3DF1800C13F447EC00ED668A /* PBXTextBookmark */ = 3DF1800C13F447EC00ED668A /* PBXTextBookmark */; + 3DF1800D13F447EC00ED668A /* PBXTextBookmark */ = 3DF1800D13F447EC00ED668A /* PBXTextBookmark */; + 3DF1800E13F447EC00ED668A /* PBXTextBookmark */ = 3DF1800E13F447EC00ED668A /* PBXTextBookmark */; + 3DF1800F13F447EC00ED668A /* PBXTextBookmark */ = 3DF1800F13F447EC00ED668A /* PBXTextBookmark */; + 3DF1801013F447EC00ED668A /* PBXTextBookmark */ = 3DF1801013F447EC00ED668A /* PBXTextBookmark */; + 3DF1801113F447EC00ED668A /* PBXTextBookmark */ = 3DF1801113F447EC00ED668A /* PBXTextBookmark */; + 3DF1801213F447EC00ED668A /* PBXTextBookmark */ = 3DF1801213F447EC00ED668A /* PBXTextBookmark */; + 3DF1801313F447EC00ED668A /* PBXTextBookmark */ = 3DF1801313F447EC00ED668A /* PBXTextBookmark */; + 3DF1801413F447EC00ED668A /* PBXTextBookmark */ = 3DF1801413F447EC00ED668A /* PBXTextBookmark */; + 3DF1801513F447EC00ED668A /* PBXTextBookmark */ = 3DF1801513F447EC00ED668A /* PBXTextBookmark */; + 3DF1801613F447EC00ED668A /* PBXTextBookmark */ = 3DF1801613F447EC00ED668A /* PBXTextBookmark */; + 3DF1801713F447EC00ED668A /* PBXTextBookmark */ = 3DF1801713F447EC00ED668A /* PBXTextBookmark */; + 3DF1801813F447EC00ED668A /* XCBuildMessageTextBookmark */ = 3DF1801813F447EC00ED668A /* XCBuildMessageTextBookmark */; + 3DF1801913F447EC00ED668A /* PBXTextBookmark */ = 3DF1801913F447EC00ED668A /* PBXTextBookmark */; + 3DF1801A13F447EC00ED668A /* PBXTextBookmark */ = 3DF1801A13F447EC00ED668A /* PBXTextBookmark */; + 3DF1801B13F447EC00ED668A /* PBXTextBookmark */ = 3DF1801B13F447EC00ED668A /* PBXTextBookmark */; + 3DF1801C13F447EC00ED668A /* PBXTextBookmark */ = 3DF1801C13F447EC00ED668A /* PBXTextBookmark */; + 3DF1801D13F447EC00ED668A /* PBXTextBookmark */ = 3DF1801D13F447EC00ED668A /* PBXTextBookmark */; + 3DF1801E13F447EC00ED668A /* PBXTextBookmark */ = 3DF1801E13F447EC00ED668A /* PBXTextBookmark */; + 3DF1801F13F447EC00ED668A /* PBXTextBookmark */ = 3DF1801F13F447EC00ED668A /* PBXTextBookmark */; + 3DF1802013F447EC00ED668A /* PBXTextBookmark */ = 3DF1802013F447EC00ED668A /* PBXTextBookmark */; + 3DF1802113F447EC00ED668A /* PBXTextBookmark */ = 3DF1802113F447EC00ED668A /* PBXTextBookmark */; + 3DF1802213F447EC00ED668A /* PBXTextBookmark */ = 3DF1802213F447EC00ED668A /* PBXTextBookmark */; + 3DF1802313F447EC00ED668A /* PBXTextBookmark */ = 3DF1802313F447EC00ED668A /* PBXTextBookmark */; + 3DF1802413F447EE00ED668A /* PBXTextBookmark */ = 3DF1802413F447EE00ED668A /* PBXTextBookmark */; + 3DF1802513F447EE00ED668A /* PBXTextBookmark */ = 3DF1802513F447EE00ED668A /* PBXTextBookmark */; + 3DF1802C13F4481100ED668A /* PBXTextBookmark */ = 3DF1802C13F4481100ED668A /* PBXTextBookmark */; + 3DF1802D13F4481100ED668A /* PBXTextBookmark */ = 3DF1802D13F4481100ED668A /* PBXTextBookmark */; + 3DF1802E13F4481100ED668A /* PBXTextBookmark */ = 3DF1802E13F4481100ED668A /* PBXTextBookmark */; + 3DF1803113F448D100ED668A /* PBXTextBookmark */ = 3DF1803113F448D100ED668A /* PBXTextBookmark */; + 3DF1803213F448D100ED668A /* PBXTextBookmark */ = 3DF1803213F448D100ED668A /* PBXTextBookmark */; + 3DF1803513F449CC00ED668A /* PBXTextBookmark */ = 3DF1803513F449CC00ED668A /* PBXTextBookmark */; + 3DF1803613F449CC00ED668A /* PBXTextBookmark */ = 3DF1803613F449CC00ED668A /* PBXTextBookmark */; + 3DF1803713F449D000ED668A /* PBXTextBookmark */ = 3DF1803713F449D000ED668A /* PBXTextBookmark */; + 3DF1803813F449D000ED668A /* PBXTextBookmark */ = 3DF1803813F449D000ED668A /* PBXTextBookmark */; + 3DF1803913F449D000ED668A /* PBXTextBookmark */ = 3DF1803913F449D000ED668A /* PBXTextBookmark */; + 3DF1803D13F44B6100ED668A /* PBXTextBookmark */ = 3DF1803D13F44B6100ED668A /* PBXTextBookmark */; + 3DF1A97013BD534400C34057 = 3DF1A97013BD534400C34057 /* PBXTextBookmark */; + }; + sourceControlManager = 3D2F13B813B9526E00A88583 /* Source Control */; + userBuildSettings = { + }; + }; + 29B97316FDCFA39411CA2CEA /* main.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {878, 1019}}"; + sepNavSelRange = "{985, 0}"; + sepNavVisRange = "{0, 985}"; + }; + }; + 32CA4F630368D1EE00C91783 /* wolf3d_Prefix.pch */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {944, 500}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 173}"; + }; + }; + 3D10C31413F2D7E700DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72A7E8F60F5F2063005B83C0 /* iphone_menus.c */; + name = "iphone_menus.c: 840"; + rLen = 0; + rLoc = 24772; + rType = 0; + vrLen = 2116; + vrLoc = 23518; + }; + 3D10C34C13F2E71200DF5856 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 3DE8827813E35E5000C95AE8 /* shoot.png */; + }; + 3D10C34E13F2E71200DF5856 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = C8D1CFE513E22B5B00F0EAC6 /* WOLF_114.png */; + }; + 3D10C34F13F2E71200DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CC320F6B3222004123C5 /* wolf_level.h */; + name = "wolf_level.h: 210"; + rLen = 0; + rLoc = 4665; + rType = 0; + vrLen = 1577; + vrLoc = 2964; + }; + 3D10C35013F2E71200DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0CF813DF9A8E008ECBD1 /* LegalViewController.h */; + name = "LegalViewController.h: 16"; + rLen = 0; + rLoc = 256; + rType = 0; + vrLen = 263; + vrLoc = 0; + }; + 3D10C35113F2E71200DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0CF913DF9A8E008ECBD1 /* LegalViewController.m */; + name = "LegalViewController.m: 12"; + rLen = 0; + rLoc = 218; + rType = 0; + vrLen = 1660; + vrLoc = 0; + }; + 3D10C35213F2E71200DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ED0A8D0C1069ACA8001E0547 /* iphone_alerts.m */; + name = "iphone_alerts.m: 88"; + rLen = 13; + rLoc = 1762; + rType = 0; + vrLen = 1706; + vrLoc = 474; + }; + 3D10C35313F2E71200DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ED0A8D0B1069ACA8001E0547 /* iphone_alerts.h */; + name = "iphone_alerts.h: 18"; + rLen = 8; + rLoc = 374; + rType = 0; + vrLen = 419; + vrLoc = 0; + }; + 3D10C35413F2E71200DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 43E8D2DF0F4FC61E003F09B2 /* iphone_main.c */; + name = "iphone_main.c: 362"; + rLen = 0; + rLoc = 10337; + rType = 0; + vrLen = 1958; + vrLoc = 0; + }; + 3D10C35513F2E71200DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ED0A8D101069ACA8001E0547 /* iphone_store.h */; + name = "iphone_store.h: 46"; + rLen = 0; + rLoc = 1635; + rType = 0; + vrLen = 1910; + vrLoc = 0; + }; + 3D10C35613F2E71200DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D24009D13D89BF4009FC7A7 /* iphone_store.m */; + name = "iphone_store.m: 67"; + rLen = 0; + rLoc = 2180; + rType = 0; + vrLen = 2601; + vrLoc = 0; + }; + 3D10C38013F318D200DF5856 /* PlistBookmark */ = { + isa = PlistBookmark; + fRef = 8D1107310486CEB800E47090 /* Info.plist */; + fallbackIsa = PBXBookmark; + isK = 0; + kPath = ( + ); + name = /Work/ryan.gerleve/idMobileDepot/Wolfenstein3DPlatinumDepot/wolf3d/code/iphone/Info.plist; + rLen = 0; + rLoc = 9223372036854775808; + }; + 3D10C39013F31B5800DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0CF513DF9A5D008ECBD1 /* CreditsViewController.h */; + name = "CreditsViewController.h: 14"; + rLen = 0; + rLoc = 253; + rType = 0; + vrLen = 308; + vrLoc = 0; + }; + 3D10C39D13F3212A00DF5856 /* WolfSlider.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 993}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 207}"; + }; + }; + 3D10C39E13F3212A00DF5856 /* WolfSlider.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 993}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 477}"; + }; + }; + 3D10C3E213F33AB700DF5856 /* SkillViewController.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 966}}"; + sepNavSelRange = "{232, 0}"; + sepNavVisRange = "{0, 482}"; + }; + }; + 3D10C3E313F33AB700DF5856 /* SkillViewController.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1139, 1547}}"; + sepNavSelRange = "{942, 0}"; + sepNavVisRange = "{1007, 1714}"; + }; + }; + 3D10C3F913F3406100DF5856 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 3DE8827A13E35E5000C95AE8 /* slider_bar_rainbow.png */; + }; + 3D10C3FA13F3406100DF5856 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 3DE8827B13E35E5000C95AE8 /* slider_bar_underlay.png */; + }; + 3D10C3FB13F3406100DF5856 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 3DE8827C13E35E5000C95AE8 /* slider_bar.png */; + }; + 3D10C3FC13F3406100DF5856 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = C81E121B13E225FB00B1049A /* slider.png */; + }; + 3D10C3FD13F3406100DF5856 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 3DE8825113E35E5000C95AE8 /* button_right.png */; + }; + 3D10C3FE13F3406100DF5856 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 35E6E1A113F321A50010F530 /* settings_slider_white.png */; + }; + 3D10C3FF13F3406100DF5856 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 35E6E1A013F321A50010F530 /* settings_slider_grey.png */; + }; + 3D10C40013F3406100DF5856 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 35E6E19F13F321A50010F530 /* settings_slider_blue.png */; + }; + 3D10C40113F3406100DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C39E13F3212A00DF5856 /* WolfSlider.m */; + name = "WolfSlider.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 477; + vrLoc = 0; + }; + 3D10C40213F3406100DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = C81E11A813E2112100B1049A /* SettingsViewController.m */; + name = "SettingsViewController.m: 35"; + rLen = 0; + rLoc = 980; + rType = 0; + vrLen = 2425; + vrLoc = 0; + }; + 3D10C40313F3406100DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0CF613DF9A5D008ECBD1 /* CreditsViewController.m */; + name = "CreditsViewController.m: 15"; + rLen = 0; + rLoc = 382; + rType = 0; + vrLen = 2268; + vrLoc = 0; + }; + 3D10C40413F3406100DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0C4913DF800E008ECBD1 /* LevelSelectViewController.h */; + name = "LevelSelectViewController.h: 18"; + rLen = 0; + rLoc = 522; + rType = 0; + vrLen = 1044; + vrLoc = 0; + }; + 3D10C40513F3406100DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D86CF8B13DDE51800186487 /* MainMenuViewController.h */; + name = "MainMenuViewController.h: 39"; + rLen = 0; + rLoc = 1171; + rType = 0; + vrLen = 1667; + vrLoc = 0; + }; + 3D10C40713F3406100DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D86CF8C13DDE51800186487 /* MainMenuViewController.m */; + name = "MainMenuViewController.m: 72"; + rLen = 0; + rLoc = 2516; + rType = 0; + vrLen = 2629; + vrLoc = 0; + }; + 3D10C40A13F3406100DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E313F33AB700DF5856 /* SkillViewController.m */; + name = "SkillViewController.m: 74"; + rLen = 0; + rLoc = 2309; + rType = 0; + vrLen = 1987; + vrLoc = 0; + }; + 3D10C41C13F3426C00DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E213F33AB700DF5856 /* SkillViewController.h */; + name = "SkillViewController.h: 19"; + rLen = 0; + rLoc = 264; + rType = 0; + vrLen = 640; + vrLoc = 0; + }; + 3D10C46613F34B5100DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0FD613E10204008ECBD1 /* MissionTableViewCell.h */; + name = "MissionTableViewCell.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 234; + vrLoc = 0; + }; + 3D10C46713F34B5100DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0FD713E10204008ECBD1 /* MissionTableViewCell.m */; + name = "MissionTableViewCell.m: 37"; + rLen = 0; + rLoc = 771; + rType = 0; + vrLen = 821; + vrLoc = 0; + }; + 3D10C46813F34B5100DF5856 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 3D5C0F8113E0FC46008ECBD1 /* iphone_preset_4.png */; + }; + 3D10C46913F34B5100DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3DDD3A2513DF232900967735 /* UIFontButton.h */; + name = "UIFontButton.h: 8"; + rLen = 0; + rLoc = 71; + rType = 0; + vrLen = 71; + vrLoc = 0; + }; + 3D10C46A13F34B5100DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C39D13F3212A00DF5856 /* WolfSlider.h */; + name = "WolfSlider.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 207; + vrLoc = 0; + }; + 3D10C46B13F34B5100DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0C6E13DF88F8008ECBD1 /* UIFontLabel.h */; + name = "UIFontLabel.h: 4"; + rLen = 0; + rLoc = 60; + rType = 0; + vrLen = 68; + vrLoc = 0; + }; + 3D10C49F13F3555000DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0EB713E0B22A008ECBD1 /* CGGeometry.h */; + name = "CGGeometry.h: 29"; + rLen = 16; + rLoc = 429; + rType = 0; + vrLen = 1734; + vrLoc = 0; + }; + 3D10C4A813F3574F00DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0C4A13DF800E008ECBD1 /* LevelSelectViewController.m */; + name = "LevelSelectViewController.m: 216"; + rLen = 142; + rLoc = 6260; + rType = 0; + vrLen = 2458; + vrLoc = 4784; + }; + 3D10C4B213F359DC00DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B2D0F6B2D9D0085DD28 /* cvar.c */; + name = "cvar.c: 448"; + rLen = 0; + rLoc = 8762; + rType = 0; + vrLen = 1392; + vrLoc = 8089; + }; + 3D10C4B313F359DC00DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0C2A13DF6836008ECBD1 /* EpisodeViewController.m */; + rLen = 0; + rLoc = 241; + rType = 1; + }; + 3D10C4D013F3600B00DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0C2913DF6836008ECBD1 /* EpisodeViewController.h */; + name = "EpisodeViewController.h: 23"; + rLen = 0; + rLoc = 509; + rType = 0; + vrLen = 515; + vrLoc = 0; + }; + 3D10C4D113F3600B00DF5856 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0C2A13DF6836008ECBD1 /* EpisodeViewController.m */; + name = "EpisodeViewController.m: 17"; + rLen = 0; + rLoc = 362; + rType = 0; + vrLen = 1998; + vrLoc = 0; + }; + 3D24004F13D88BF8009FC7A7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CC260F6B3222004123C5 /* wolf_actor_ai.h */; + name = "wolf_actor_ai.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 2095; + vrLoc = 0; + }; + 3D24005013D88BF8009FC7A7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CC280F6B3222004123C5 /* wolf_actors.h */; + name = "wolf_actors.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1888; + vrLoc = 0; + }; + 3D24005113D88BF8009FC7A7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CC340F6B3222004123C5 /* wolf_main.c */; + name = "wolf_main.c: 77"; + rLen = 4; + rLoc = 1842; + rType = 0; + vrLen = 1834; + vrLoc = 0; + }; + 3D24005213D88BF8009FC7A7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CC360F6B3222004123C5 /* wolf_math.h */; + name = "wolf_math.h: 57"; + rLen = 6; + rLoc = 1858; + rType = 0; + vrLen = 2523; + vrLoc = 950; + }; + 3D24005313D88BF8009FC7A7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CC350F6B3222004123C5 /* wolf_math.c */; + name = "wolf_math.c: 175"; + rLen = 44; + rLoc = 5644; + rType = 0; + vrLen = 1377; + vrLoc = 5936; + }; + 3D24005413D88BF8009FC7A7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CC3E0F6B3222004123C5 /* wolf_raycast.h */; + name = "wolf_raycast.h: 62"; + rLen = 14; + rLoc = 1777; + rType = 0; + vrLen = 2085; + vrLoc = 0; + }; + 3D24006813D89342009FC7A7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D24006913D89342009FC7A7 /* NSString.h */; + name = "NSString.h: 62"; + rLen = 37; + rLoc = 3289; + rType = 0; + vrLen = 4166; + vrLoc = 0; + }; + 3D24006913D89342009FC7A7 /* NSString.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = NSString.h; + path = /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSString.h; + sourceTree = ""; + }; + 3D24006F13D89553009FC7A7 /* objc.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = objc.h; + path = /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/include/objc/objc.h; + sourceTree = ""; + }; + 3D24007013D89553009FC7A7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D24007113D89553009FC7A7 /* stdbool.h */; + name = "stdbool.h: 36"; + rLen = 5; + rLoc = 1587; + rType = 0; + vrLen = 1752; + vrLoc = 0; + }; + 3D24007113D89553009FC7A7 /* stdbool.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = stdbool.h; + path = /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/include/stdbool.h; + sourceTree = ""; + }; + 3D24009D13D89BF4009FC7A7 /* iphone_store.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 4381}}"; + sepNavSelRange = "{2180, 0}"; + sepNavVisRange = "{0, 2601}"; + }; + }; + 3D24016113D8DB12009FC7A7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ED0A8D0F1069ACA8001E0547 /* iphone_mapselector.c */; + name = "iphone_mapselector.c: 99"; + rLen = 10; + rLoc = 1781; + rType = 0; + vrLen = 1942; + vrLoc = 906; + }; + 3D2401D113D8FCB1009FC7A7 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D24006F13D89553009FC7A7 /* objc.h */; + name = "objc.h: 50"; + rLen = 32; + rLoc = 1513; + rType = 0; + vrLen = 2389; + vrLoc = 0; + }; + 3D27CA8E13D4D68200D4DACC /* gles_glue.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = gles_glue.h; + path = /Work/ryan.gerleve/idMobileDepot/Wolfenstein3DPlatinumDepot/wolf3d/code/iphone/gles_glue.h; + sourceTree = ""; + }; + 3D27CB1213D4F0B700D4DACC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B6D0F6B2D9D0085DD28 /* video.h */; + name = "video.h: 56"; + rLen = 48; + rLoc = 1357; + rType = 0; + vrLen = 1692; + vrLoc = 0; + }; + 3D27CB6613D50A3100D4DACC /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CC400F6B3222004123C5 /* wolf_renderer.h */; + name = "wolf_renderer.h: 43"; + rLen = 64; + rLoc = 1186; + rType = 0; + vrLen = 1796; + vrLoc = 0; + }; + 3D2F13A713B9524F00A88583 /* wolf3d */ = { + isa = PBXExecutable; + activeArgIndices = ( + ); + argumentStrings = ( + ); + autoAttachOnCrash = 1; + breakpointsEnabled = 1; + configStateDict = { + }; + customDataFormattersEnabled = 1; + dataTipCustomDataFormattersEnabled = 1; + dataTipShowTypeColumn = 1; + dataTipSortType = 0; + debuggerPlugin = GDBDebugging; + disassemblyDisplayState = 0; + dylibVariantSuffix = ""; + enableDebugStr = 1; + environmentEntries = ( + ); + executableSystemSymbolLevel = 0; + executableUserSymbolLevel = 0; + libgmallocEnabled = 0; + name = wolf3d; + savedGlobals = { + }; + showTypeColumn = 0; + sourceDirectories = ( + ); + variableFormatDictionary = { + "error-ALenum-AL_CheckErrors" = 1; + "internalFormat-int-TM_FindTexture" = 1; + }; + }; + 3D2F13B813B9526E00A88583 /* Source Control */ = { + isa = PBXSourceControlManager; + fallbackIsa = XCSourceControlManager; + isSCMEnabled = 0; + scmConfiguration = { + repositoryNamesForRoots = { + ../../../ = Rage; + }; + }; + }; + 3D2F13B913B9526E00A88583 /* Code sense */ = { + isa = PBXCodeSenseManager; + indexTemplatePath = ""; + }; + 3D39A53413E31686001EC0D3 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D3ED73D13BF554400C5B1DF /* wolf3dViewController.h */; + name = "wolf3dViewController.h: 42"; + rLen = 37; + rLoc = 1266; + rType = 0; + vrLen = 1310; + vrLoc = 0; + }; + 3D39A5B513E32943001EC0D3 /* header_advanced.png */ = { + isa = PBXFileReference; + lastKnownFileType = image.png; + name = header_advanced.png; + path = /Work/ryan.gerleve/idMobileDepot/Wolfenstein3DPlatinumDepot/wolf3d/menu_art/header_advanced.png; + sourceTree = ""; + }; + 3D39A5B813E32943001EC0D3 /* map_background.png */ = { + isa = PBXFileReference; + lastKnownFileType = image.png; + name = map_background.png; + path = /Work/ryan.gerleve/idMobileDepot/Wolfenstein3DPlatinumDepot/wolf3d/menu_art/map_background.png; + sourceTree = ""; + }; + 3D39A5B913E32943001EC0D3 /* submenus_background_image.png */ = { + isa = PBXFileReference; + lastKnownFileType = image.png; + name = submenus_background_image.png; + path = /Work/ryan.gerleve/idMobileDepot/Wolfenstein3DPlatinumDepot/wolf3d/menu_art/submenus_background_image.png; + sourceTree = ""; + }; + 3D39A5BF13E32BDA001EC0D3 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 3D39A5B813E32943001EC0D3 /* map_background.png */; + }; + 3D39A5E613E34E01001EC0D3 /* string.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = string.h; + path = /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/usr/include/string.h; + sourceTree = ""; + }; + 3D39A60613E353FE001EC0D3 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D39A5E613E34E01001EC0D3 /* string.h */; + name = "string.h: 89"; + rLen = 36; + rLoc = 3492; + rType = 0; + vrLen = 1984; + vrLoc = 2561; + }; + 3D39A62113E35B11001EC0D3 /* menu.png */ = { + isa = PBXFileReference; + lastKnownFileType = image.png; + name = menu.png; + path = /Work/ryan.gerleve/idMobileDepot/Wolfenstein3DPlatinumDepot/wolf3d/menu_art/menu.png; + sourceTree = ""; + }; + 3D39A62E13E35BB1001EC0D3 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 3D39A5B513E32943001EC0D3 /* header_advanced.png */; + }; + 3D39A63013E35BB1001EC0D3 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 3D39A5B913E32943001EC0D3 /* submenus_background_image.png */; + }; + 3D39A63113E35BB1001EC0D3 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 3D39A62113E35B11001EC0D3 /* menu.png */; + }; + 3D39A6E913E35C82001EC0D3 /* PBXBookmark */ = { + isa = PBXBookmark; + }; + 3D3ED73D13BF554400C5B1DF /* wolf3dViewController.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1239, 691}}"; + sepNavSelRange = "{984, 22}"; + sepNavVisRange = "{0, 1310}"; + sepNavWindowFrame = "{{84, 595}, {788, 915}}"; + }; + }; + 3D3ED73E13BF554400C5B1DF /* wolf3dViewController.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1239, 2964}}"; + sepNavSelRange = "{593, 0}"; + sepNavVisRange = "{0, 1409}"; + }; + }; + 3D3ED7B413BF6D6100C5B1DF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D3ED7B513BF6D6100C5B1DF /* NSDate.h */; + name = "NSDate.h: 11"; + rLen = 31; + rLoc = 221; + rType = 0; + vrLen = 1068; + vrLoc = 0; + }; + 3D3ED7B513BF6D6100C5B1DF /* NSDate.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = NSDate.h; + path = /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSDate.h; + sourceTree = ""; + }; + 3D421AC513D9FF2000F4E5F3 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B500F6B2D9D0085DD28 /* opengl_draw.c */; + name = "opengl_draw.c: 206"; + rLen = 9; + rLoc = 4779; + rType = 0; + vrLen = 1872; + vrLoc = 3566; + }; + 3D421ACC13DA003600F4E5F3 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CC410F6B3222004123C5 /* wolf_sprites.c */; + name = "wolf_sprites.c: 235"; + rLen = 40; + rLoc = 5703; + rType = 0; + vrLen = 1729; + vrLoc = 5164; + }; + 3D4FE44913F0ADE2005988AF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CC700F6B3295004123C5 /* misc.h */; + name = "misc.h: 35"; + rLen = 0; + rLoc = 1264; + rType = 0; + vrLen = 2106; + vrLoc = 0; + }; + 3D4FE46013F0B0D1005988AF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CE490F6C89F8004123C5 /* wolf3dAppDelegate.m */; + name = "wolf3dAppDelegate.m: 279"; + rLen = 0; + rLoc = 9434; + rType = 0; + vrLen = 2006; + vrLoc = 8428; + }; + 3D52098013F1A0FE007F7546 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72A7E8F30F5F2001005B83C0 /* iphone_wolf.h */; + name = "iphone_wolf.h: 369"; + rLen = 15; + rLoc = 11050; + rType = 0; + vrLen = 2098; + vrLoc = 8919; + }; + 3D52098113F1A0FE007F7546 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 43AF6B940F996DA200777569 /* iphone_sys.m */; + name = "iphone_sys.m: 296"; + rLen = 0; + rLoc = 8198; + rType = 0; + vrLen = 2358; + vrLoc = 4419; + }; + 3D52099913F1A3BF007F7546 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 43CF03090F56D5C200E4A23D /* iphone_loop.c */; + name = "iphone_loop.c: 1191"; + rLen = 0; + rLoc = 26976; + rType = 0; + vrLen = 1843; + vrLoc = 24128; + }; + 3D5209D613F1C7A7007F7546 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72B5FF380F7E5C3D00C8A372 /* hud.c */; + name = "hud.c: 138"; + rLen = 0; + rLoc = 4152; + rType = 0; + vrLen = 3677; + vrLoc = 2723; + }; + 3D520A0913F1D33E007F7546 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CC300F6B3222004123C5 /* wolf_doors.c */; + name = "wolf_doors.c: 347"; + rLen = 0; + rLoc = 7887; + rType = 0; + vrLen = 2112; + vrLoc = 7271; + }; + 3D5C0C0113DF60BB008ECBD1 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0C0213DF60BB008ECBD1 /* EAGLDrawable.h */; + name = "EAGLDrawable.h: 52"; + rLen = 48; + rLoc = 2542; + rType = 0; + vrLen = 2657; + vrLoc = 0; + }; + 3D5C0C0213DF60BB008ECBD1 /* EAGLDrawable.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = EAGLDrawable.h; + path = /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/OpenGLES.framework/Headers/EAGLDrawable.h; + sourceTree = ""; + }; + 3D5C0C2913DF6836008ECBD1 /* EpisodeViewController.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 991}}"; + sepNavSelRange = "{509, 0}"; + sepNavVisRange = "{0, 515}"; + }; + }; + 3D5C0C2A13DF6836008ECBD1 /* EpisodeViewController.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1432, 3406}}"; + sepNavSelRange = "{3136, 11}"; + sepNavVisRange = "{2340, 1184}"; + }; + }; + 3D5C0C3F13DF73BD008ECBD1 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 29B97316FDCFA39411CA2CEA /* main.m */; + name = "main.m: 30"; + rLen = 0; + rLoc = 985; + rType = 0; + vrLen = 985; + vrLoc = 0; + }; + 3D5C0C4913DF800E008ECBD1 /* LevelSelectViewController.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 989}}"; + sepNavSelRange = "{522, 0}"; + sepNavVisRange = "{0, 1044}"; + }; + }; + 3D5C0C4A13DF800E008ECBD1 /* LevelSelectViewController.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1432, 4394}}"; + sepNavSelRange = "{1292, 11}"; + sepNavVisRange = "{490, 1720}"; + sepNavWindowFrame = "{{15, 658}, {788, 915}}"; + }; + }; + 3D5C0C6E13DF88F8008ECBD1 /* UIFontLabel.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 993}}"; + sepNavSelRange = "{60, 0}"; + sepNavVisRange = "{0, 68}"; + }; + }; + 3D5C0C6F13DF8920008ECBD1 /* UIFontLabel.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {878, 1019}}"; + sepNavSelRange = "{197, 0}"; + sepNavVisRange = "{0, 204}"; + }; + }; + 3D5C0C7A13DF8FCF008ECBD1 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0C6F13DF8920008ECBD1 /* UIFontLabel.m */; + name = "UIFontLabel.m: 11"; + rLen = 0; + rLoc = 197; + rType = 0; + vrLen = 204; + vrLoc = 0; + }; + 3D5C0CF513DF9A5D008ECBD1 /* CreditsViewController.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 995}}"; + sepNavSelRange = "{253, 0}"; + sepNavVisRange = "{0, 308}"; + }; + }; + 3D5C0CF613DF9A5D008ECBD1 /* CreditsViewController.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1432, 1261}}"; + sepNavSelRange = "{780, 11}"; + sepNavVisRange = "{0, 1487}"; + }; + }; + 3D5C0CF813DF9A8E008ECBD1 /* LegalViewController.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 997}}"; + sepNavSelRange = "{256, 0}"; + sepNavVisRange = "{0, 263}"; + }; + }; + 3D5C0CF913DF9A8E008ECBD1 /* LegalViewController.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1432, 884}}"; + sepNavSelRange = "{487, 11}"; + sepNavVisRange = "{0, 1516}"; + }; + }; + 3D5C0D0413DF9AF4008ECBD1 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 350CCF9E13DF8C47003303AB /* difficulty_selection_box.png */; + }; + 3D5C0DE013E05D4D008ECBD1 /* TriviaViewController.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {878, 1017}}"; + sepNavSelRange = "{507, 13}"; + sepNavVisRange = "{0, 635}"; + }; + }; + 3D5C0DE113E05D4D008ECBD1 /* TriviaViewController.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1432, 1599}}"; + sepNavSelRange = "{794, 11}"; + sepNavVisRange = "{0, 1517}"; + }; + }; + 3D5C0EB713E0B22A008ECBD1 /* CGGeometry.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = CGGeometry.h; + path = /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/CoreGraphics.framework/Headers/CGGeometry.h; + sourceTree = ""; + }; + 3D5C0F3E13E0E89C008ECBD1 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0F3F13E0E89C008ECBD1 /* UIScreen.h */; + name = "UIScreen.h: 38"; + rLen = 156; + rLoc = 1470; + rType = 0; + vrLen = 2617; + vrLoc = 0; + }; + 3D5C0F3F13E0E89C008ECBD1 /* UIScreen.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = UIScreen.h; + path = /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIScreen.h; + sourceTree = ""; + }; + 3D5C0F4013E0E89C008ECBD1 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D3ED73E13BF554400C5B1DF /* wolf3dViewController.m */; + name = "wolf3dViewController.m: 214"; + rLen = 0; + rLoc = 5669; + rType = 0; + vrLen = 2050; + vrLoc = 1644; + }; + 3D5C0F4813E0E89C008ECBD1 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0DE013E05D4D008ECBD1 /* TriviaViewController.h */; + name = "TriviaViewController.h: 20"; + rLen = 13; + rLoc = 507; + rType = 0; + vrLen = 635; + vrLoc = 0; + }; + 3D5C0F4A13E0E89C008ECBD1 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3DDD3A2313DF231100967735 /* UIFontButton.m */; + name = "UIFontButton.m: 14"; + rLen = 0; + rLoc = 228; + rType = 0; + vrLen = 228; + vrLoc = 0; + }; + 3D5C0F5813E0EC8E008ECBD1 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0F5913E0EC8E008ECBD1 /* UIColor.h */; + name = "UIColor.h: 14"; + rLen = 70; + rLoc = 211; + rType = 0; + vrLen = 2557; + vrLoc = 0; + }; + 3D5C0F5913E0EC8E008ECBD1 /* UIColor.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = UIColor.h; + path = /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIColor.h; + sourceTree = ""; + }; + 3D5C0F9C13E0FE33008ECBD1 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0F9D13E0FE33008ECBD1 /* UITableViewCell.h */; + name = "UITableViewCell.h: 17"; + rLen = 134; + rLoc = 347; + rType = 0; + vrLen = 3016; + vrLoc = 0; + }; + 3D5C0F9D13E0FE33008ECBD1 /* UITableViewCell.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = UITableViewCell.h; + path = /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/UIKit.framework/Headers/UITableViewCell.h; + sourceTree = ""; + }; + 3D5C0FD613E10204008ECBD1 /* MissionTableViewCell.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 993}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 234}"; + }; + }; + 3D5C0FD713E10204008ECBD1 /* MissionTableViewCell.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 993}}"; + sepNavSelRange = "{771, 0}"; + sepNavVisRange = "{0, 821}"; + sepNavWindowFrame = "{{61, 616}, {788, 915}}"; + }; + }; + 3D5C106C13E1B45C008ECBD1 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0DE113E05D4D008ECBD1 /* TriviaViewController.m */; + name = "TriviaViewController.m: 90"; + rLen = 0; + rLoc = 2302; + rType = 0; + vrLen = 2187; + vrLoc = 926; + }; + 3D5C10AF13E1D311008ECBD1 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B2E0F6B2D9D0085DD28 /* cvar.h */; + name = "cvar.h: 104"; + rLen = 11; + rLoc = 3049; + rType = 0; + vrLen = 2668; + vrLoc = 2343; + }; + 3D5C10B013E1D311008ECBD1 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CC330F6B3222004123C5 /* wolf_local.h */; + name = "wolf_local.h: 125"; + rLen = 6; + rLoc = 2346; + rType = 0; + vrLen = 1133; + vrLoc = 1295; + }; + 3D5C129F13E22E13008ECBD1 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 43CF02FE0F56974E00E4A23D /* Default.png */; + }; + 3D5C12A813E22F6C008ECBD1 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 350CCFCD13DF8DED003303AB /* mission_bg.png */; + }; + 3D5C12AB13E22F6C008ECBD1 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 35048ABD13E0D51600516B10 /* iphone_preset_1.png */; + }; + 3D5C12AC13E22F6C008ECBD1 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 35048AD613E0E98800516B10 /* difficulty_star1.png */; + }; + 3D5C12AD13E22F6C008ECBD1 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 35048AD713E0E98800516B10 /* difficulty_star2.png */; + }; + 3D5C12AE13E22F6C008ECBD1 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 35048AD813E0E98800516B10 /* difficulty_star3.png */; + }; + 3D5C12B013E22F6C008ECBD1 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 3D5C0F7F13E0FC46008ECBD1 /* iphone_preset_2.png */; + }; + 3D5C12B113E22F6C008ECBD1 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 3D5C0F8013E0FC46008ECBD1 /* iphone_preset_3.png */; + }; + 3D5C12B313E22F6C008ECBD1 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 3555CC3F13E2001A006E7D2F /* button_highlight.png */; + }; + 3D5C12B513E22F6C008ECBD1 /* PlistBookmark */ = { + isa = PlistBookmark; + fRef = 4364BF3E0F5CB25900F29317 /* dist.plist */; + fallbackIsa = PBXBookmark; + isK = 0; + kPath = ( + ); + name = /Work/ryan.gerleve/idMobileDepot/Wolfenstein3DPlatinumDepot/wolf3d/code/iphone/dist.plist; + rLen = 0; + rLoc = 9223372036854775808; + }; + 3D5C12E613E236D0008ECBD1 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 3D5C0D0913DF9B41008ECBD1 /* main_bg.png */; + }; + 3D5C12E713E236D0008ECBD1 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 350CCF9A13DF8B0E003303AB /* episode_bg.png */; + }; + 3D5C12E813E236D0008ECBD1 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 43CF02EC0F56955F00E4A23D /* wolf3d_icon.png */; + }; + 3D5C12E913E236D0008ECBD1 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 43E341280F9BB4B6003C5D00 /* wolf3dlite_icon.png */; + }; + 3D61672F13BAC44B005AC9FF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B4C0F6B2D9D0085DD28 /* openal_binding.h */; + name = "openal_binding.h: 173"; + rLen = 35; + rLoc = 8398; + rType = 0; + vrLen = 1324; + vrLoc = 7074; + }; + 3D61673013BAC44B005AC9FF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B4D0F6B2D9D0085DD28 /* openal_main.c */; + name = "openal_main.c: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1031; + vrLoc = 0; + }; + 3D61673113BAC44B005AC9FF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B5B0F6B2D9D0085DD28 /* sound.h */; + name = "sound.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1212; + vrLoc = 1712; + }; + 3D61673213BAC44B005AC9FF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B5E0F6B2D9D0085DD28 /* sound_stream.c */; + name = "sound_stream.c: 253"; + rLen = 0; + rLoc = 6205; + rType = 0; + vrLen = 740; + vrLoc = 6142; + }; + 3D61673313BAC44B005AC9FF /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B5C0F6B2D9D0085DD28 /* sound_local.h */; + name = "sound_local.h: 109"; + rLen = 0; + rLoc = 2948; + rType = 0; + vrLen = 1001; + vrLoc = 2006; + }; + 3D64A89713E260850017C7E8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B620F6B2D9D0085DD28 /* texture_manager.h */; + name = "texture_manager.h: 170"; + rLen = 7; + rLoc = 3228; + rType = 0; + vrLen = 1698; + vrLoc = 2139; + }; + 3D64A89913E260850017C7E8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B640F6B2D9D0085DD28 /* tga.h */; + name = "tga.h: 40"; + rLen = 7; + rLoc = 1338; + rType = 0; + vrLen = 1581; + vrLoc = 0; + }; + 3D64A89C13E260850017C7E8 /* CGImage.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = CGImage.h; + path = /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/CoreGraphics.framework/Headers/CGImage.h; + sourceTree = ""; + }; + 3D64A8BA13E263AC0017C7E8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B1E0F6B2D9D0085DD28 /* arch.h */; + name = "arch.h: 153"; + rLen = 43; + rLoc = 2926; + rType = 0; + vrLen = 1518; + vrLoc = 2305; + }; + 3D64A90213E266680017C7E8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CE460F6C89F8004123C5 /* EAGLView.m */; + name = "EAGLView.m: 281"; + rLen = 0; + rLoc = 8682; + rType = 0; + vrLen = 2144; + vrLoc = 7496; + }; + 3D64A90413E266680017C7E8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D64A90513E266680017C7E8 /* EAGLView.m */; + name = "EAGLView.m: 281"; + rLen = 19; + rLoc = 9089; + rType = 0; + vrLen = 3199; + vrLoc = 7851; + }; + 3D64A90513E266680017C7E8 /* EAGLView.m */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.objc; + name = EAGLView.m; + path = /Users/ryan.gerleve/Downloads/GLSprite/Classes/EAGLView.m; + sourceTree = ""; + }; + 3D715D8913DF458400E69D06 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CC370F6B3222004123C5 /* wolf_opengl.c */; + name = "wolf_opengl.c: 61"; + rLen = 0; + rLoc = 1563; + rType = 0; + vrLen = 1603; + vrLoc = 827; + }; + 3D746DB813BFB4A70018B535 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3DF1AB0913BE533100C34057 /* CFDate.h */; + name = "CFDate.h: 13"; + rLen = 39; + rLoc = 237; + rType = 0; + vrLen = 1129; + vrLoc = 0; + }; + 3D821FEC13E35DBE007A570A /* PBXBookmark */ = { + isa = PBXBookmark; + }; + 3D821FED13E35DBE007A570A /* PBXBookmark */ = { + isa = PBXBookmark; + }; + 3D821FEE13E35DBE007A570A /* PBXBookmark */ = { + isa = PBXBookmark; + }; + 3D821FEF13E35DBE007A570A /* PBXBookmark */ = { + isa = PBXBookmark; + }; + 3D821FF013E35DBE007A570A /* PBXBookmark */ = { + isa = PBXBookmark; + }; + 3D821FF113E35DBE007A570A /* PBXBookmark */ = { + isa = PBXBookmark; + }; + 3D821FF213E35DBE007A570A /* PBXBookmark */ = { + isa = PBXBookmark; + }; + 3D821FF313E35DBE007A570A /* PBXBookmark */ = { + isa = PBXBookmark; + }; + 3D821FF413E35DBE007A570A /* PBXBookmark */ = { + isa = PBXBookmark; + }; + 3D86CD9213DCFAB700186487 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B460F6B2D9D0085DD28 /* myopengl.h */; + name = "myopengl.h: 180"; + rLen = 7; + rLoc = 9611; + rType = 0; + vrLen = 5441; + vrLoc = 7555; + }; + 3D86CDD613DD05D500186487 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B540F6B2D9D0085DD28 /* opengl_texture.c */; + name = "opengl_texture.c: 154"; + rLen = 33; + rLoc = 2921; + rType = 0; + vrLen = 1013; + vrLoc = 2262; + }; + 3D86CE0613DD098600186487 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CC3D0F6B3222004123C5 /* wolf_raycast.c */; + name = "wolf_raycast.c: 53"; + rLen = 67; + rLoc = 1523; + rType = 0; + vrLen = 1619; + vrLoc = 1038; + }; + 3D86CE4613DD16D000186487 /* iphone_qgl.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = iphone_qgl.h; + path = /Work/ryan.gerleve/idMobileDepot/Wolfenstein3DPlatinumDepot/wolf3d/code/iphone/iphone_qgl.h; + sourceTree = ""; + }; + 3D86CF8B13DDE51800186487 /* MainMenuViewController.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 993}}"; + sepNavSelRange = "{1171, 0}"; + sepNavVisRange = "{0, 1667}"; + }; + }; + 3D86CF8C13DDE51800186487 /* MainMenuViewController.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1432, 2379}}"; + sepNavSelRange = "{4363, 11}"; + sepNavVisRange = "{3435, 1684}"; + }; + }; + 3D86D18713DE158A00186487 /* UIApplication.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = UIApplication.h; + path = /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIApplication.h; + sourceTree = ""; + }; + 3D86D2BE13DE2CEE00186487 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D86D18713DE158A00186487 /* UIApplication.h */; + name = "UIApplication.h: 238"; + rLen = 65; + rLoc = 11386; + rType = 0; + vrLen = 5209; + vrLoc = 9140; + }; + 3D86D32913DE311900186487 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CE450F6C89F8004123C5 /* EAGLView.h */; + name = "EAGLView.h: 41"; + rLen = 0; + rLoc = 1275; + rType = 0; + vrLen = 2018; + vrLoc = 0; + }; + 3D86D3E113DE3EE900186487 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D86CE4613DD16D000186487 /* iphone_qgl.h */; + name = "iphone_qgl.h: 1168"; + rLen = 13; + rLoc = 41721; + rType = 0; + vrLen = 2609; + vrLoc = 39874; + }; + 3D86D3F613DE40AD00186487 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3DB0C65013BF861F001A2A76 /* gl.h */; + name = "gl.h: 722"; + rLen = 80; + rLoc = 30230; + rType = 0; + vrLen = 5838; + vrLoc = 28579; + }; + 3D86D44713DE480000186487 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B250F6B2D9D0085DD28 /* com_string.c */; + name = "com_string.c: 75"; + rLen = 0; + rLoc = 2412; + rType = 0; + vrLen = 2255; + vrLoc = 1331; + }; + 3D86D46113DE4A9100186487 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D86D46213DE4A9100186487 /* stdlib.h */; + name = "stdlib.h: 233"; + rLen = 69; + rLoc = 8088; + rType = 0; + vrLen = 2859; + vrLoc = 6727; + }; + 3D86D46213DE4A9100186487 /* stdlib.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = stdlib.h; + path = /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/usr/include/stdlib.h; + sourceTree = ""; + }; + 3D86D58C13DE644B00186487 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B580F6B2D9D0085DD28 /* renderer.h */; + name = "renderer.h: 84"; + rLen = 6; + rLoc = 1712; + rType = 0; + vrLen = 1481; + vrLoc = 829; + }; + 3D86D5A413DE653600186487 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B530F6B2D9D0085DD28 /* opengl_main.c */; + name = "opengl_main.c: 334"; + rLen = 0; + rLoc = 8539; + rType = 0; + vrLen = 1860; + vrLoc = 7318; + }; + 3D86D5A713DE653600186487 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ED0A8D0E1069ACA8001E0547 /* iphone_downloadUserMap.m */; + name = "iphone_downloadUserMap.m: 74"; + rLen = 0; + rLoc = 1810; + rType = 0; + vrLen = 2204; + vrLoc = 915; + }; + 3D86D5D313DE6C3E00186487 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CE540F6C8CDE004123C5 /* gles_glue.c */; + name = "gles_glue.c: 65"; + rLen = 19; + rLoc = 1411; + rType = 0; + vrLen = 1756; + vrLoc = 738; + }; + 3DB0C65013BF861F001A2A76 /* gl.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = gl.h; + path = /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/OpenGLES.framework/Headers/ES1/gl.h; + sourceTree = ""; + }; + 3DB0C67E13BF8761001A2A76 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3DB0C67F13BF8761001A2A76 /* EAGL.h */; + name = "EAGL.h: 63"; + rLen = 34; + rLoc = 1942; + rType = 0; + vrLen = 1180; + vrLoc = 1203; + }; + 3DB0C67F13BF8761001A2A76 /* EAGL.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = EAGL.h; + path = /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/OpenGLES.framework/Headers/EAGL.h; + sourceTree = ""; + }; + 3DB0C69413BF89D2001A2A76 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 32CA4F630368D1EE00C91783 /* wolf3d_Prefix.pch */; + name = "wolf3d_Prefix.pch: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 173; + vrLoc = 0; + }; + 3DB0C6B013BF8BCE001A2A76 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3DB0C6B113BF8BCE001A2A76 /* gl.h */; + name = "gl.h: 190"; + rLen = 44; + rLoc = 6757; + rType = 0; + vrLen = 1366; + vrLoc = 5631; + }; + 3DB0C6B113BF8BCE001A2A76 /* gl.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = gl.h; + path = /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/OpenGLES.framework/Headers/ES2/gl.h; + sourceTree = ""; + }; + 3DB0C6E413BF9017001A2A76 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3DB0C6E513BF9017001A2A76 /* EAGLView.m */; + name = "EAGLView.m: 76"; + rLen = 0; + rLoc = 1607; + rType = 0; + vrLen = 1114; + vrLoc = 1051; + }; + 3DB0C6E513BF9017001A2A76 /* EAGLView.m */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.objc; + name = EAGLView.m; + path = /Users/ryan.gerleve/Testing/GLSample/Classes/EAGLView.m; + sourceTree = ""; + }; + 3DB48A4513DA3FC50086EB98 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D27CA8E13D4D68200D4DACC /* gles_glue.h */; + name = "gles_glue.h: 64"; + rLen = 7; + rLoc = 1955; + rType = 0; + vrLen = 2003; + vrLoc = 0; + }; + 3DB48A5313DA41B70086EB98 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3DCD716D13DA280B007FCBAD /* gl.h */; + name = "gl.h: 53"; + rLen = 34; + rLoc = 2255; + rType = 0; + vrLen = 2874; + vrLoc = 0; + }; + 3DB48AA513DA4CFD0086EB98 /* limits.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = limits.h; + path = /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/usr/include/i386/limits.h; + sourceTree = ""; + }; + 3DB48AAF13DA4D4A0086EB98 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3DB48AA513DA4CFD0086EB98 /* limits.h */; + name = "limits.h: 59"; + rLen = 0; + rLoc = 2925; + rType = 0; + vrLen = 3637; + vrLoc = 31; + }; + 3DCD716D13DA280B007FCBAD /* gl.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = gl.h; + path = /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/System/Library/Frameworks/OpenGLES.framework/Headers/ES1/gl.h; + sourceTree = ""; + }; + 3DCD716E13DA280B007FCBAD /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3DCD716F13DA280B007FCBAD /* glext.h */; + name = "glext.h: 260"; + rLen = 23; + rLoc = 12367; + rType = 0; + vrLen = 3843; + vrLoc = 10458; + }; + 3DCD716F13DA280B007FCBAD /* glext.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = glext.h; + path = /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/System/Library/Frameworks/OpenGLES.framework/Headers/ES1/glext.h; + sourceTree = ""; + }; + 3DDD3A2313DF231100967735 /* UIFontButton.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {878, 1017}}"; + sepNavSelRange = "{228, 0}"; + sepNavVisRange = "{0, 228}"; + }; + }; + 3DDD3A2513DF232900967735 /* UIFontButton.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 993}}"; + sepNavSelRange = "{71, 0}"; + sepNavVisRange = "{0, 71}"; + }; + }; + 3DE882E013E360AF00C95AE8 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 35048AD913E0E98800516B10 /* difficulty_star4.png */; + }; + 3DE882E113E360AF00C95AE8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D64A89C13E260850017C7E8 /* CGImage.h */; + name = "CGImage.h: 16"; + rLen = 75; + rLoc = 373; + rType = 0; + vrLen = 2886; + vrLoc = 0; + }; + 3DE8839B13E3879700C95AE8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B610F6B2D9D0085DD28 /* texture_manager.c */; + name = "texture_manager.c: 533"; + rLen = 0; + rLoc = 12505; + rType = 0; + vrLen = 2551; + vrLoc = 11118; + }; + 3DE883B013E39C1800C95AE8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ED0A8D0D1069ACA8001E0547 /* iphone_downloadSOD.m */; + name = "iphone_downloadSOD.m: 40"; + rLen = 0; + rLoc = 1105; + rType = 0; + vrLen = 2442; + vrLoc = 0; + }; + 3DE883DC13E3A95300C95AE8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CC8E0F6B3363004123C5 /* wolfiphone.h */; + name = "wolfiphone.h: 97"; + rLen = 0; + rLoc = 2082; + rType = 0; + vrLen = 1734; + vrLoc = 349; + }; + 3DF17F5D13F438E300ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D86CF8C13DDE51800186487 /* MainMenuViewController.m */; + name = "MainMenuViewController.m: 25"; + rLen = 0; + rLoc = 846; + rType = 0; + vrLen = 1518; + vrLoc = 2627; + }; + 3DF17F5E13F438E300ED668A /* XCBuildMessageTextBookmark */ = { + isa = PBXTextBookmark; + comments = "Use of undeclared identifier 'EpisodeViewController'"; + fRef = 3D10C3E313F33AB700DF5856 /* SkillViewController.m */; + fallbackIsa = XCBuildMessageTextBookmark; + rLen = 1; + rLoc = 92; + rType = 1; + }; + 3DF17F5F13F438E300ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E313F33AB700DF5856 /* SkillViewController.m */; + name = "SkillViewController.m: 16"; + rLen = 0; + rLoc = 636; + rType = 0; + vrLen = 1462; + vrLoc = 0; + }; + 3DF17F6813F438E400ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0C2A13DF6836008ECBD1 /* EpisodeViewController.m */; + name = "EpisodeViewController.m: 17"; + rLen = 0; + rLoc = 362; + rType = 0; + vrLen = 1998; + vrLoc = 0; + }; + 3DF17F6913F438E400ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D86CF8C13DDE51800186487 /* MainMenuViewController.m */; + name = "MainMenuViewController.m: 94"; + rLen = 0; + rLoc = 2975; + rType = 0; + vrLen = 2194; + vrLoc = 1768; + }; + 3DF17F6A13F438E400ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E213F33AB700DF5856 /* SkillViewController.h */; + name = "SkillViewController.h: 19"; + rLen = 0; + rLoc = 258; + rType = 0; + vrLen = 640; + vrLoc = 0; + }; + 3DF17F6B13F438E400ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E313F33AB700DF5856 /* SkillViewController.m */; + name = "SkillViewController.m: 71"; + rLen = 0; + rLoc = 2222; + rType = 0; + vrLen = 1935; + vrLoc = 0; + }; + 3DF17F6C13F438E400ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0C4913DF800E008ECBD1 /* LevelSelectViewController.h */; + name = "LevelSelectViewController.h: 18"; + rLen = 0; + rLoc = 522; + rType = 0; + vrLen = 1044; + vrLoc = 0; + }; + 3DF17F6D13F438E400ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0C4A13DF800E008ECBD1 /* LevelSelectViewController.m */; + name = "LevelSelectViewController.m: 317"; + rLen = 32; + rLoc = 8754; + rType = 0; + vrLen = 1782; + vrLoc = 7420; + }; + 3DF17F7213F4390300ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0C4A13DF800E008ECBD1 /* LevelSelectViewController.m */; + name = "LevelSelectViewController.m: 317"; + rLen = 32; + rLoc = 8754; + rType = 0; + vrLen = 1782; + vrLoc = 7420; + }; + 3DF17F7313F4390300ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0CF613DF9A5D008ECBD1 /* CreditsViewController.m */; + name = "CreditsViewController.m: 15"; + rLen = 0; + rLoc = 382; + rType = 0; + vrLen = 2268; + vrLoc = 0; + }; + 3DF17F7413F4390300ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0DE113E05D4D008ECBD1 /* TriviaViewController.m */; + name = "TriviaViewController.m: 90"; + rLen = 0; + rLoc = 2302; + rType = 0; + vrLen = 2187; + vrLoc = 926; + }; + 3DF17F7513F4390300ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E313F33AB700DF5856 /* SkillViewController.m */; + name = "SkillViewController.m: 79"; + rLen = 0; + rLoc = 2412; + rType = 0; + vrLen = 1696; + vrLoc = 502; + }; + 3DF17F7813F43BB300ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E313F33AB700DF5856 /* SkillViewController.m */; + name = "SkillViewController.m: 79"; + rLen = 0; + rLoc = 2412; + rType = 0; + vrLen = 1696; + vrLoc = 502; + }; + 3DF17F7913F43E2B00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0C4A13DF800E008ECBD1 /* LevelSelectViewController.m */; + name = "LevelSelectViewController.m: 68"; + rLen = 32; + rLoc = 1931; + rType = 0; + vrLen = 2174; + vrLoc = 854; + }; + 3DF17F7A13F43E2B00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E213F33AB700DF5856 /* SkillViewController.h */; + name = "SkillViewController.h: 19"; + rLen = 0; + rLoc = 258; + rType = 0; + vrLen = 640; + vrLoc = 0; + }; + 3DF17F7B13F43E2B00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E313F33AB700DF5856 /* SkillViewController.m */; + name = "SkillViewController.m: 39"; + rLen = 0; + rLoc = 1279; + rType = 0; + vrLen = 2036; + vrLoc = 47; + }; + 3DF17F7C13F43E2B00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E313F33AB700DF5856 /* SkillViewController.m */; + name = "SkillViewController.m: 38"; + rLen = 0; + rLoc = 1279; + rType = 0; + vrLen = 2038; + vrLoc = 47; + }; + 3DF17F8313F4414600ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E313F33AB700DF5856 /* SkillViewController.m */; + name = "SkillViewController.m: 94"; + rLen = 0; + rLoc = 2311; + rType = 0; + vrLen = 1190; + vrLoc = 1454; + }; + 3DF17F8413F4414600ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B620F6B2D9D0085DD28 /* texture_manager.h */; + name = "texture_manager.h: 152"; + rLen = 13; + rLoc = 2982; + rType = 0; + vrLen = 1270; + vrLoc = 2567; + }; + 3DF17F8513F4414600ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B6C0F6B2D9D0085DD28 /* vector.h */; + name = "vector.h: 38"; + rLen = 27; + rLoc = 1164; + rType = 0; + vrLen = 1609; + vrLoc = 0; + }; + 3DF17F8613F4414600ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B2E0F6B2D9D0085DD28 /* cvar.h */; + name = "cvar.h: 104"; + rLen = 11; + rLoc = 3049; + rType = 0; + vrLen = 1763; + vrLoc = 2253; + }; + 3DF17F8713F4414600ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72A7E8F30F5F2001005B83C0 /* iphone_wolf.h */; + name = "iphone_wolf.h: 24"; + rLen = 0; + rLoc = 828; + rType = 0; + vrLen = 1446; + vrLoc = 0; + }; + 3DF17F8813F4414600ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B1E0F6B2D9D0085DD28 /* arch.h */; + name = "arch.h: 231"; + rLen = 22; + rLoc = 4362; + rType = 0; + vrLen = 987; + vrLoc = 3839; + }; + 3DF17F8913F4414600ED668A /* XCBuildMessageTextBookmark */ = { + isa = PBXTextBookmark; + comments = "Unknown type name '_boolean'"; + fRef = 72935B6D0F6B2D9D0085DD28 /* video.h */; + fallbackIsa = XCBuildMessageTextBookmark; + rLen = 1; + rLoc = 66; + rType = 1; + }; + 3DF17F8A13F4414600ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B6D0F6B2D9D0085DD28 /* video.h */; + name = "video.h: 65"; + rLen = 0; + rLoc = 1619; + rType = 0; + vrLen = 1109; + vrLoc = 583; + }; + 3DF17FBC13F4465100ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0C4A13DF800E008ECBD1 /* LevelSelectViewController.m */; + name = "LevelSelectViewController.m: 68"; + rLen = 32; + rLoc = 1931; + rType = 0; + vrLen = 2210; + vrLoc = 0; + }; + 3DF17FBD13F4465100ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E213F33AB700DF5856 /* SkillViewController.h */; + name = "SkillViewController.h: 13"; + rLen = 0; + rLoc = 232; + rType = 0; + vrLen = 482; + vrLoc = 0; + }; + 3DF17FBE13F4465100ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72A7E8F30F5F2001005B83C0 /* iphone_wolf.h */; + name = "iphone_wolf.h: 369"; + rLen = 15; + rLoc = 11050; + rType = 0; + vrLen = 1950; + vrLoc = 0; + }; + 3DF17FBF13F4465100ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E313F33AB700DF5856 /* SkillViewController.m */; + name = "SkillViewController.m: 11"; + rLen = 0; + rLoc = 235; + rType = 0; + vrLen = 1900; + vrLoc = 0; + }; + 3DF17FC013F4465100ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E313F33AB700DF5856 /* SkillViewController.m */; + name = "SkillViewController.m: 37"; + rLen = 0; + rLoc = 890; + rType = 0; + vrLen = 1937; + vrLoc = 0; + }; + 3DF1800913F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B6D0F6B2D9D0085DD28 /* video.h */; + name = "video.h: 67"; + rLen = 8; + rLoc = 1619; + rType = 0; + vrLen = 1060; + vrLoc = 653; + }; + 3DF1800A13F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B620F6B2D9D0085DD28 /* texture_manager.h */; + name = "texture_manager.h: 43"; + rLen = 0; + rLoc = 1352; + rType = 0; + vrLen = 1359; + vrLoc = 141; + }; + 3DF1800B13F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72A7E8F30F5F2001005B83C0 /* iphone_wolf.h */; + name = "iphone_wolf.h: 78"; + rLen = 13; + rLoc = 1911; + rType = 0; + vrLen = 1019; + vrLoc = 1280; + }; + 3DF1800C13F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B2E0F6B2D9D0085DD28 /* cvar.h */; + name = "cvar.h: 104"; + rLen = 11; + rLoc = 3049; + rType = 0; + vrLen = 1763; + vrLoc = 2253; + }; + 3DF1800D13F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CC330F6B3222004123C5 /* wolf_local.h */; + name = "wolf_local.h: 45"; + rLen = 0; + rLoc = 1175; + rType = 0; + vrLen = 1094; + vrLoc = 287; + }; + 3DF1800E13F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E313F33AB700DF5856 /* SkillViewController.m */; + name = "SkillViewController.m: 17"; + rLen = 0; + rLoc = 341; + rType = 0; + vrLen = 1299; + vrLoc = 0; + }; + 3DF1800F13F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B1E0F6B2D9D0085DD28 /* arch.h */; + name = "arch.h: 157"; + rLen = 47; + rLoc = 3108; + rType = 0; + vrLen = 1127; + vrLoc = 2531; + }; + 3DF1801013F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B340F6B2D9D0085DD28 /* filesystem.h */; + name = "filesystem.h: 66"; + rLen = 3; + rLoc = 1761; + rType = 0; + vrLen = 1516; + vrLoc = 1123; + }; + 3DF1801113F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B2F0F6B2D9D0085DD28 /* fileio.c */; + name = "fileio.c: 121"; + rLen = 0; + rLoc = 3153; + rType = 0; + vrLen = 1027; + vrLoc = 2475; + }; + 3DF1801213F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B530F6B2D9D0085DD28 /* opengl_main.c */; + name = "opengl_main.c: 365"; + rLen = 0; + rLoc = 9134; + rType = 0; + vrLen = 1938; + vrLoc = 8842; + }; + 3DF1801313F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CC290F6B3222004123C5 /* wolf_ai_com.c */; + name = "wolf_ai_com.c: 545"; + rLen = 0; + rLoc = 11729; + rType = 0; + vrLen = 1038; + vrLoc = 10943; + }; + 3DF1801413F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CC380F6B3222004123C5 /* wolf_player.c */; + name = "wolf_player.c: 627"; + rLen = 0; + rLoc = 14328; + rType = 0; + vrLen = 1445; + vrLoc = 13063; + }; + 3DF1801513F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ED0A8D0E1069ACA8001E0547 /* iphone_downloadUserMap.m */; + name = "iphone_downloadUserMap.m: 74"; + rLen = 0; + rLoc = 1827; + rType = 0; + vrLen = 1742; + vrLoc = 1258; + }; + 3DF1801613F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = ED0A8D0F1069ACA8001E0547 /* iphone_mapselector.c */; + name = "iphone_mapselector.c: 240"; + rLen = 0; + rLoc = 5836; + rType = 0; + vrLen = 1568; + vrLoc = 5070; + }; + 3DF1801713F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D3ED73D13BF554400C5B1DF /* wolf3dViewController.h */; + name = "wolf3dViewController.h: 33"; + rLen = 22; + rLoc = 984; + rType = 0; + vrLen = 1310; + vrLoc = 0; + }; + 3DF1801813F447EC00ED668A /* XCBuildMessageTextBookmark */ = { + isa = PBXTextBookmark; + comments = "Incompatible Objective-C types initializing 'struct NSString *', expected 'struct NSBundle *'"; + fRef = 3D3ED73E13BF554400C5B1DF /* wolf3dViewController.m */; + fallbackIsa = XCBuildMessageTextBookmark; + rLen = 1; + rLoc = 26; + rType = 1; + }; + 3DF1801913F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D3ED73E13BF554400C5B1DF /* wolf3dViewController.m */; + name = "wolf3dViewController.m: 26"; + rLen = 0; + rLoc = 593; + rType = 0; + vrLen = 1409; + vrLoc = 0; + }; + 3DF1801A13F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CE490F6C89F8004123C5 /* wolf3dAppDelegate.m */; + name = "wolf3dAppDelegate.m: 149"; + rLen = 11; + rLoc = 5171; + rType = 0; + vrLen = 2295; + vrLoc = 4407; + }; + 3DF1801B13F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0CF913DF9A8E008ECBD1 /* LegalViewController.m */; + name = "LegalViewController.m: 17"; + rLen = 11; + rLoc = 487; + rType = 0; + vrLen = 1516; + vrLoc = 0; + }; + 3DF1801C13F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0CF613DF9A5D008ECBD1 /* CreditsViewController.m */; + name = "CreditsViewController.m: 28"; + rLen = 11; + rLoc = 780; + rType = 0; + vrLen = 1487; + vrLoc = 0; + }; + 3DF1801D13F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0C2A13DF6836008ECBD1 /* EpisodeViewController.m */; + name = "EpisodeViewController.m: 118"; + rLen = 11; + rLoc = 3136; + rType = 0; + vrLen = 1184; + vrLoc = 2340; + }; + 3DF1801E13F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0C4A13DF800E008ECBD1 /* LevelSelectViewController.m */; + name = "LevelSelectViewController.m: 45"; + rLen = 11; + rLoc = 1292; + rType = 0; + vrLen = 1720; + vrLoc = 490; + }; + 3DF1801F13F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D86CF8C13DDE51800186487 /* MainMenuViewController.m */; + name = "MainMenuViewController.m: 137"; + rLen = 11; + rLoc = 4363; + rType = 0; + vrLen = 1684; + vrLoc = 3435; + }; + 3DF1802013F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D3ED73E13BF554400C5B1DF /* wolf3dViewController.m */; + name = "wolf3dViewController.m: 26"; + rLen = 11; + rLoc = 545; + rType = 0; + vrLen = 1410; + vrLoc = 0; + }; + 3DF1802113F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D5C0DE113E05D4D008ECBD1 /* TriviaViewController.m */; + name = "TriviaViewController.m: 29"; + rLen = 11; + rLoc = 794; + rType = 0; + vrLen = 1517; + vrLoc = 0; + }; + 3DF1802213F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E313F33AB700DF5856 /* SkillViewController.m */; + rLen = 11; + rLoc = 2197; + rType = 0; + }; + 3DF1802313F447EC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E313F33AB700DF5856 /* SkillViewController.m */; + name = "SkillViewController.m: 93"; + rLen = 11; + rLoc = 2197; + rType = 0; + vrLen = 1301; + vrLoc = 0; + }; + 3DF1802413F447EE00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D3ED73E13BF554400C5B1DF /* wolf3dViewController.m */; + name = "wolf3dViewController.m: 26"; + rLen = 0; + rLoc = 593; + rType = 0; + vrLen = 1409; + vrLoc = 0; + }; + 3DF1802513F447EE00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E313F33AB700DF5856 /* SkillViewController.m */; + name = "SkillViewController.m: 93"; + rLen = 11; + rLoc = 2197; + rType = 0; + vrLen = 1301; + vrLoc = 0; + }; + 3DF1802C13F4481100ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E313F33AB700DF5856 /* SkillViewController.m */; + name = "SkillViewController.m: 48"; + rLen = 0; + rLoc = 1128; + rType = 0; + vrLen = 1937; + vrLoc = 0; + }; + 3DF1802D13F4481100ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CE490F6C89F8004123C5 /* wolf3dAppDelegate.m */; + rLen = 11; + rLoc = 4983; + rType = 0; + }; + 3DF1802E13F4481100ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CE490F6C89F8004123C5 /* wolf3dAppDelegate.m */; + name = "wolf3dAppDelegate.m: 144"; + rLen = 11; + rLoc = 4983; + rType = 0; + vrLen = 2838; + vrLoc = 4585; + }; + 3DF1803113F448D100ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D3ED73E13BF554400C5B1DF /* wolf3dViewController.m */; + name = "wolf3dViewController.m: 26"; + rLen = 0; + rLoc = 593; + rType = 0; + vrLen = 1393; + vrLoc = 0; + }; + 3DF1803213F448D100ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E313F33AB700DF5856 /* SkillViewController.m */; + name = "SkillViewController.m: 93"; + rLen = 11; + rLoc = 2197; + rType = 0; + vrLen = 1292; + vrLoc = 7; + }; + 3DF1803513F449CC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D3ED73E13BF554400C5B1DF /* wolf3dViewController.m */; + name = "wolf3dViewController.m: 26"; + rLen = 0; + rLoc = 593; + rType = 0; + vrLen = 1393; + vrLoc = 0; + }; + 3DF1803613F449CC00ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E313F33AB700DF5856 /* SkillViewController.m */; + name = "SkillViewController.m: 93"; + rLen = 11; + rLoc = 2197; + rType = 0; + vrLen = 1292; + vrLoc = 7; + }; + 3DF1803713F449D000ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 7229CE490F6C89F8004123C5 /* wolf3dAppDelegate.m */; + name = "wolf3dAppDelegate.m: 144"; + rLen = 11; + rLoc = 4983; + rType = 0; + vrLen = 2838; + vrLoc = 4585; + }; + 3DF1803813F449D000ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E213F33AB700DF5856 /* SkillViewController.h */; + name = "SkillViewController.h: 13"; + rLen = 0; + rLoc = 232; + rType = 0; + vrLen = 482; + vrLoc = 0; + }; + 3DF1803913F449D000ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E313F33AB700DF5856 /* SkillViewController.m */; + name = "SkillViewController.m: 40"; + rLen = 0; + rLoc = 942; + rType = 0; + vrLen = 1650; + vrLoc = 1071; + }; + 3DF1803D13F44B6100ED668A /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 3D10C3E313F33AB700DF5856 /* SkillViewController.m */; + name = "SkillViewController.m: 40"; + rLen = 0; + rLoc = 942; + rType = 0; + vrLen = 1714; + vrLoc = 1007; + }; + 3DF1A97013BD534400C34057 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 72935B5A0F6B2D9D0085DD28 /* sound.c */; + name = "sound.c: 679"; + rLen = 0; + rLoc = 14148; + rType = 0; + vrLen = 456; + vrLoc = 13706; + }; + 3DF1AB0913BE533100C34057 /* CFDate.h */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = CFDate.h; + path = /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDate.h; + sourceTree = ""; + }; + 43AF6B940F996DA200777569 /* iphone_sys.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 4303}}"; + sepNavSelRange = "{8198, 0}"; + sepNavVisRange = "{4419, 2358}"; + sepNavWindowFrame = "{{15, 354}, {1027, 1219}}"; + }; + }; + 43CF03090F56D5C200E4A23D /* iphone_loop.c */ = { + uiCtxt = { + sepNavFolds = "{\n c = (\n {\n l = \"int y\";\n r = \"{46626, 9}\";\n s = 1;\n },\n {\n l = \"int width\";\n r = \"{46637, 13}\";\n s = 1;\n },\n {\n l = \"int height\";\n r = \"{46652, 14}\";\n s = 1;\n },\n {\n l = \"const char * str\";\n r = \"{46668, 20}\";\n s = 1;\n }\n );\n r = \"{0, 46746}\";\n s = 0;\n}"; + sepNavIntBoundsRect = "{{0, 0}, {1432, 24141}}"; + sepNavSelRange = "{43577, 0}"; + sepNavVisRange = "{42853, 1796}"; + sepNavWindowFrame = "{{1292, 246}, {1019, 988}}"; + }; + }; + 43E8D2DF0F4FC61E003F09B2 /* iphone_main.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 4953}}"; + sepNavSelRange = "{10337, 0}"; + sepNavVisRange = "{0, 1958}"; + }; + }; + 7229CC250F6B3222004123C5 /* wolf_actor_ai.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1098, 13299}}"; + sepNavSelRange = "{19227, 12}"; + sepNavVisRange = "{18581, 1091}"; + }; + }; + 7229CC260F6B3222004123C5 /* wolf_actor_ai.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {886, 986}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 2095}"; + }; + }; + 7229CC270F6B3222004123C5 /* wolf_actors.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1098, 6097}}"; + sepNavSelRange = "{5082, 32}"; + sepNavVisRange = "{4529, 963}"; + }; + }; + 7229CC280F6B3222004123C5 /* wolf_actors.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {886, 2249}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 1888}"; + }; + }; + 7229CC290F6B3222004123C5 /* wolf_ai_com.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1239, 17316}}"; + sepNavSelRange = "{11729, 0}"; + sepNavVisRange = "{10943, 1038}"; + }; + }; + 7229CC2E0F6B3222004123C5 /* wolf_client_main.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1432, 1911}}"; + sepNavSelRange = "{3978, 7}"; + sepNavVisRange = "{2364, 1718}"; + }; + }; + 7229CC300F6B3222004123C5 /* wolf_doors.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1048, 6721}}"; + sepNavSelRange = "{7887, 0}"; + sepNavVisRange = "{7271, 2112}"; + }; + }; + 7229CC310F6B3222004123C5 /* wolf_level.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1432, 19136}}"; + sepNavSelRange = "{25921, 0}"; + sepNavVisRange = "{25351, 1267}"; + }; + }; + 7229CC320F6B3222004123C5 /* wolf_level.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1160, 3744}}"; + sepNavSelRange = "{4665, 0}"; + sepNavVisRange = "{2964, 1577}"; + }; + }; + 7229CC330F6B3222004123C5 /* wolf_local.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1239, 1807}}"; + sepNavSelRange = "{1175, 0}"; + sepNavVisRange = "{287, 1094}"; + }; + }; + 7229CC340F6B3222004123C5 /* wolf_main.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1098, 1170}}"; + sepNavSelRange = "{1493, 30}"; + sepNavVisRange = "{956, 1066}"; + }; + }; + 7229CC350F6B3222004123C5 /* wolf_math.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1098, 3965}}"; + sepNavSelRange = "{5248, 40}"; + sepNavVisRange = "{4589, 1055}"; + }; + }; + 7229CC360F6B3222004123C5 /* wolf_math.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {886, 1885}}"; + sepNavSelRange = "{1858, 6}"; + sepNavVisRange = "{950, 2523}"; + }; + }; + 7229CC370F6B3222004123C5 /* wolf_opengl.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1432, 7384}}"; + sepNavSelRange = "{12138, 14}"; + sepNavVisRange = "{11561, 899}"; + }; + }; + 7229CC380F6B3222004123C5 /* wolf_player.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {968, 13663}}"; + sepNavSelRange = "{14328, 0}"; + sepNavVisRange = "{12589, 2243}"; + sepNavWindowFrame = "{{107, 270}, {1027, 1219}}"; + }; + }; + 7229CC390F6B3222004123C5 /* wolf_player.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1098, 2366}}"; + sepNavSelRange = "{2235, 6}"; + sepNavVisRange = "{1926, 786}"; + }; + }; + 7229CC3A0F6B3222004123C5 /* wolf_powerups.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1098, 5382}}"; + sepNavSelRange = "{2761, 34}"; + sepNavVisRange = "{2121, 1079}"; + }; + }; + 7229CC3B0F6B3222004123C5 /* wolf_powerups.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1098, 1118}}"; + sepNavSelRange = "{1190, 4}"; + sepNavVisRange = "{1056, 1269}"; + }; + }; + 7229CC3C0F6B3222004123C5 /* wolf_pushwalls.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1146, 2197}}"; + sepNavSelRange = "{2623, 9}"; + sepNavVisRange = "{1812, 1663}"; + }; + }; + 7229CC3D0F6B3222004123C5 /* wolf_raycast.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {729, 5005}}"; + sepNavSelRange = "{1909, 0}"; + sepNavVisRange = "{1135, 1440}"; + sepNavWindowFrame = "{{15, 658}, {788, 915}}"; + }; + }; + 7229CC3E0F6B3222004123C5 /* wolf_raycast.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {886, 986}}"; + sepNavSelRange = "{1777, 14}"; + sepNavVisRange = "{0, 2085}"; + }; + }; + 7229CC3F0F6B3222004123C5 /* wolf_renderer.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1432, 1352}}"; + sepNavSelRange = "{2266, 13}"; + sepNavVisRange = "{1370, 1358}"; + sepNavWindowFrame = "{{61, 616}, {788, 915}}"; + }; + }; + 7229CC400F6B3222004123C5 /* wolf_renderer.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1098, 819}}"; + sepNavSelRange = "{1460, 11}"; + sepNavVisRange = "{0, 1645}"; + }; + }; + 7229CC410F6B3222004123C5 /* wolf_sprites.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1098, 3640}}"; + sepNavSelRange = "{6481, 14}"; + sepNavVisRange = "{5538, 1330}"; + }; + }; + 7229CC420F6B3222004123C5 /* wolf_sprites.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1098, 5629}}"; + sepNavSelRange = "{1315, 4}"; + sepNavVisRange = "{574, 1309}"; + }; + }; + 7229CC430F6B3222004123C5 /* wolf_sv_ccmds.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1098, 1235}}"; + sepNavSelRange = "{1288, 10}"; + sepNavVisRange = "{0, 1375}"; + }; + }; + 7229CC440F6B3222004123C5 /* wolf_weapon.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1132, 2535}}"; + sepNavSelRange = "{4285, 7}"; + sepNavVisRange = "{3537, 1267}"; + }; + }; + 7229CC5B0F6B3295004123C5 /* asm_arm.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1432, 2951}}"; + sepNavSelRange = "{1163, 0}"; + sepNavVisRange = "{0, 1875}"; + }; + }; + 7229CC700F6B3295004123C5 /* misc.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1432, 2977}}"; + sepNavSelRange = "{1546, 0}"; + sepNavVisRange = "{1173, 1253}"; + }; + }; + 7229CC7C0F6B3295004123C5 /* window_lookup.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1098, 27365}}"; + sepNavSelRange = "{39023, 3}"; + sepNavVisRange = "{38288, 1550}"; + }; + }; + 7229CC8E0F6B3363004123C5 /* wolfiphone.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 1274}}"; + sepNavSelRange = "{2082, 0}"; + sepNavVisRange = "{349, 1734}"; + sepNavWindowFrame = "{{15, 658}, {788, 915}}"; + }; + }; + 7229CE450F6C89F8004123C5 /* EAGLView.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {886, 959}}"; + sepNavSelRange = "{1275, 0}"; + sepNavVisRange = "{0, 2018}"; + }; + }; + 7229CE460F6C89F8004123C5 /* EAGLView.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1065, 6331}}"; + sepNavSelRange = "{8682, 0}"; + sepNavVisRange = "{7496, 2144}"; + sepNavWindowFrame = "{{15, 585}, {1019, 988}}"; + }; + }; + 7229CE480F6C89F8004123C5 /* wolf3dAppDelegate.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {829, 741}}"; + sepNavSelRange = "{1543, 0}"; + sepNavVisRange = "{45, 1743}"; + }; + }; + 7229CE490F6C89F8004123C5 /* wolf3dAppDelegate.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1251, 6643}}"; + sepNavSelRange = "{4983, 11}"; + sepNavVisRange = "{4585, 2838}"; + sepNavWindowFrame = "{{107, 574}, {788, 915}}"; + }; + }; + 7229CE540F6C8CDE004123C5 /* gles_glue.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {729, 1950}}"; + sepNavSelRange = "{3730, 0}"; + sepNavVisRange = "{2336, 1432}"; + sepNavWindowFrame = "{{38, 637}, {788, 915}}"; + }; + }; + 72935B1E0F6B2D9D0085DD28 /* arch.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1244, 3640}}"; + sepNavSelRange = "{3108, 47}"; + sepNavVisRange = "{2531, 1127}"; + }; + }; + 72935B250F6B2D9D0085DD28 /* com_string.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {852, 6253}}"; + sepNavSelRange = "{2412, 0}"; + sepNavVisRange = "{1331, 2255}"; + }; + }; + 72935B270F6B2D9D0085DD28 /* common.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1098, 7358}}"; + sepNavSelRange = "{3873, 10}"; + sepNavVisRange = "{3217, 973}"; + }; + }; + 72935B280F6B2D9D0085DD28 /* common.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1098, 2756}}"; + sepNavSelRange = "{5059, 13}"; + sepNavVisRange = "{4065, 1040}"; + }; + }; + 72935B290F6B2D9D0085DD28 /* common_utils.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1098, 819}}"; + sepNavSelRange = "{1331, 65}"; + sepNavVisRange = "{275, 1162}"; + }; + }; + 72935B2A0F6B2D9D0085DD28 /* console.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1098, 10400}}"; + sepNavSelRange = "{6593, 0}"; + sepNavVisRange = "{6057, 1088}"; + }; + }; + 72935B2D0F6B2D9D0085DD28 /* cvar.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 9880}}"; + sepNavSelRange = "{8762, 0}"; + sepNavVisRange = "{8089, 1392}"; + }; + }; + 72935B2E0F6B2D9D0085DD28 /* cvar.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1239, 2158}}"; + sepNavSelRange = "{3049, 11}"; + sepNavVisRange = "{2253, 1763}"; + sepNavWindowFrame = "{{84, 291}, {1027, 1219}}"; + }; + }; + 72935B2F0F6B2D9D0085DD28 /* fileio.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1239, 4186}}"; + sepNavSelRange = "{3153, 0}"; + sepNavVisRange = "{2475, 1027}"; + }; + }; + 72935B310F6B2D9D0085DD28 /* files.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {829, 2548}}"; + sepNavSelRange = "{4692, 0}"; + sepNavVisRange = "{3740, 1034}"; + }; + }; + 72935B340F6B2D9D0085DD28 /* filesystem.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1239, 1742}}"; + sepNavSelRange = "{1761, 3}"; + sepNavVisRange = "{1123, 1516}"; + }; + }; + 72935B410F6B2D9D0085DD28 /* memory.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1432, 2457}}"; + sepNavSelRange = "{2285, 55}"; + sepNavVisRange = "{1693, 1247}"; + }; + }; + 72935B420F6B2D9D0085DD28 /* memory.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1432, 754}}"; + sepNavSelRange = "{1432, 13}"; + sepNavVisRange = "{89, 1645}"; + }; + }; + 72935B460F6B2D9D0085DD28 /* myopengl.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1328, 10582}}"; + sepNavSelRange = "{9611, 7}"; + sepNavVisRange = "{7555, 5441}"; + }; + }; + 72935B4B0F6B2D9D0085DD28 /* openal_binding.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1058, 5369}}"; + sepNavSelRange = "{1900, 4}"; + sepNavVisRange = "{1757, 568}"; + }; + }; + 72935B4C0F6B2D9D0085DD28 /* openal_binding.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1093, 2431}}"; + sepNavSelRange = "{7743, 34}"; + sepNavVisRange = "{2556, 2945}"; + }; + }; + 72935B4D0F6B2D9D0085DD28 /* openal_main.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1058, 3406}}"; + sepNavSelRange = "{1937, 15}"; + sepNavVisRange = "{1572, 877}"; + }; + }; + 72935B500F6B2D9D0085DD28 /* opengl_draw.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1098, 3211}}"; + sepNavSelRange = "{4379, 9}"; + sepNavVisRange = "{3590, 1339}"; + sepNavWindowFrame = "{{38, 637}, {788, 915}}"; + }; + }; + 72935B520F6B2D9D0085DD28 /* opengl_local.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1098, 3185}}"; + sepNavSelRange = "{2102, 7}"; + sepNavVisRange = "{1479, 1324}"; + }; + }; + 72935B530F6B2D9D0085DD28 /* opengl_main.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1524, 5070}}"; + sepNavSelRange = "{9134, 0}"; + sepNavVisRange = "{8842, 1938}"; + sepNavWindowFrame = "{{61, 616}, {788, 915}}"; + }; + }; + 72935B540F6B2D9D0085DD28 /* opengl_texture.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1098, 3302}}"; + sepNavSelRange = "{4221, 13}"; + sepNavVisRange = "{3530, 743}"; + }; + }; + 72935B580F6B2D9D0085DD28 /* renderer.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {878, 1313}}"; + sepNavSelRange = "{1712, 6}"; + sepNavVisRange = "{829, 1481}"; + }; + }; + 72935B5A0F6B2D9D0085DD28 /* sound.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1098, 10283}}"; + sepNavSelRange = "{12186, 106}"; + sepNavVisRange = "{13567, 711}"; + sepNavWindowFrame = "{{107, 501}, {1019, 988}}"; + }; + }; + 72935B5B0F6B2D9D0085DD28 /* sound.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1432, 1222}}"; + sepNavSelRange = "{2327, 0}"; + sepNavVisRange = "{1148, 1776}"; + }; + }; + 72935B5C0F6B2D9D0085DD28 /* sound_local.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1058, 1599}}"; + sepNavSelRange = "{2979, 0}"; + sepNavVisRange = "{2504, 526}"; + }; + }; + 72935B5D0F6B2D9D0085DD28 /* sound_sfx_id.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1188, 4199}}"; + sepNavSelRange = "{5439, 14}"; + sepNavVisRange = "{4873, 1027}"; + }; + }; + 72935B5E0F6B2D9D0085DD28 /* sound_stream.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1432, 7215}}"; + sepNavSelRange = "{1396, 17}"; + sepNavVisRange = "{988, 1061}"; + }; + }; + 72935B610F6B2D9D0085DD28 /* texture_manager.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1300, 18746}}"; + sepNavSelRange = "{12505, 0}"; + sepNavVisRange = "{11118, 2551}"; + sepNavWindowFrame = "{{472, 365}, {788, 915}}"; + }; + }; + 72935B620F6B2D9D0085DD28 /* texture_manager.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1239, 2366}}"; + sepNavSelRange = "{1352, 0}"; + sepNavVisRange = "{141, 1359}"; + sepNavWindowFrame = "{{15, 658}, {788, 915}}"; + }; + }; + 72935B630F6B2D9D0085DD28 /* tga.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1432, 9945}}"; + sepNavSelRange = "{11418, 9}"; + sepNavVisRange = "{11046, 1134}"; + }; + }; + 72935B640F6B2D9D0085DD28 /* tga.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1065, 1015}}"; + sepNavSelRange = "{1338, 7}"; + sepNavVisRange = "{0, 1581}"; + }; + }; + 72935B680F6B2D9D0085DD28 /* unix_file.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {807, 3731}}"; + sepNavSelRange = "{3898, 0}"; + sepNavVisRange = "{3490, 866}"; + }; + }; + 72935B6C0F6B2D9D0085DD28 /* vector.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1239, 1729}}"; + sepNavSelRange = "{1164, 27}"; + sepNavVisRange = "{0, 1609}"; + }; + }; + 72935B6D0F6B2D9D0085DD28 /* video.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1239, 923}}"; + sepNavSelRange = "{1619, 8}"; + sepNavVisRange = "{653, 1060}"; + }; + }; + 72A7E8F30F5F2001005B83C0 /* iphone_wolf.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1239, 5265}}"; + sepNavSelRange = "{1911, 13}"; + sepNavVisRange = "{1280, 1019}"; + sepNavWindowFrame = "{{15, 658}, {788, 915}}"; + }; + }; + 72A7E8F60F5F2063005B83C0 /* iphone_menus.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 57863}}"; + sepNavSelRange = "{24772, 0}"; + sepNavVisRange = "{23518, 2116}"; + sepNavWindowFrame = "{{1311, 491}, {1019, 988}}"; + }; + }; + 72B5FF380F7E5C3D00C8A372 /* hud.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 8125}}"; + sepNavSelRange = "{4152, 0}"; + sepNavVisRange = "{2723, 3677}"; + sepNavWindowFrame = "{{1219, 166}, {788, 915}}"; + }; + }; + 8D1107310486CEB800E47090 /* Info.plist */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {953, 1018}}"; + sepNavSelRange = "{1319, 0}"; + sepNavVisRange = "{0, 1415}"; + sepNavVisRect = "{{0, 0}, {967, 1018}}"; + sepNavWindowFrame = "{{683, 521}, {1019, 988}}"; + }; + }; + C81E11A713E2112100B1049A /* SettingsViewController.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 995}}"; + sepNavSelRange = "{105, 17}"; + sepNavVisRange = "{0, 1009}"; + }; + }; + C81E11A813E2112100B1049A /* SettingsViewController.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1239, 2561}}"; + sepNavSelRange = "{1571, 0}"; + sepNavVisRange = "{0, 1816}"; + }; + }; + ED0A8D0B1069ACA8001E0547 /* iphone_alerts.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 997}}"; + sepNavSelRange = "{374, 8}"; + sepNavVisRange = "{0, 419}"; + }; + }; + ED0A8D0C1069ACA8001E0547 /* iphone_alerts.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 1534}}"; + sepNavSelRange = "{1762, 13}"; + sepNavVisRange = "{474, 1706}"; + }; + }; + ED0A8D0D1069ACA8001E0547 /* iphone_downloadSOD.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 6890}}"; + sepNavSelRange = "{1105, 0}"; + sepNavVisRange = "{0, 2442}"; + }; + }; + ED0A8D0E1069ACA8001E0547 /* iphone_downloadUserMap.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1239, 2769}}"; + sepNavSelRange = "{1827, 0}"; + sepNavVisRange = "{1258, 1742}"; + }; + }; + ED0A8D0F1069ACA8001E0547 /* iphone_mapselector.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1239, 5798}}"; + sepNavSelRange = "{5836, 0}"; + sepNavVisRange = "{5070, 1568}"; + }; + }; + ED0A8D101069ACA8001E0547 /* iphone_store.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1022, 997}}"; + sepNavSelRange = "{1635, 0}"; + sepNavVisRange = "{0, 1910}"; + }; + }; +} diff --git a/wolf3d/code/iphone/wolf3d.xcodeproj/xcuserdata/ryan.gerleve.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist b/wolf3d/code/iphone/wolf3d.xcodeproj/xcuserdata/ryan.gerleve.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist new file mode 100644 index 0000000..dd98170 --- /dev/null +++ b/wolf3d/code/iphone/wolf3d.xcodeproj/xcuserdata/ryan.gerleve.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist @@ -0,0 +1,19 @@ + + + + + + + diff --git a/wolf3d/code/iphone/wolf3d.xcodeproj/xcuserdata/ryan.gerleve.xcuserdatad/xcschemes/wolf3d.xcscheme b/wolf3d/code/iphone/wolf3d.xcodeproj/xcuserdata/ryan.gerleve.xcuserdatad/xcschemes/wolf3d.xcscheme new file mode 100644 index 0000000..93a0b46 --- /dev/null +++ b/wolf3d/code/iphone/wolf3d.xcodeproj/xcuserdata/ryan.gerleve.xcuserdatad/xcschemes/wolf3d.xcscheme @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wolf3d/code/iphone/wolf3d.xcodeproj/xcuserdata/ryan.gerleve.xcuserdatad/xcschemes/xcschememanagement.plist b/wolf3d/code/iphone/wolf3d.xcodeproj/xcuserdata/ryan.gerleve.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..3752ecf --- /dev/null +++ b/wolf3d/code/iphone/wolf3d.xcodeproj/xcuserdata/ryan.gerleve.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + wolf3d.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 1D6058900D05DD3D006BFB54 + + primary + + + + + diff --git a/wolf3d/code/iphone/wolf3dAppDelegate.h b/wolf3d/code/iphone/wolf3dAppDelegate.h index 3a14087..1ade451 100644 --- a/wolf3d/code/iphone/wolf3dAppDelegate.h +++ b/wolf3d/code/iphone/wolf3dAppDelegate.h @@ -1,6 +1,9 @@ /* - Copyright (C) 2009 Id Software, Inc. + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -20,22 +23,46 @@ #import #import +#import +#import "iphone_store.h" -@class EAGLView; +@class wolf3dViewController; @interface wolf3dAppDelegate : NSObject { UIWindow *window; - EAGLView *glView; + UINavigationController *navigationController; + wolf3dViewController *viewController; int lastAccelUpdateMsec; - + +@private + UIView *waitingView; // UIAlertView *alertPurchaseSpear; + AVAudioPlayer * player; } @property (nonatomic, retain) IBOutlet UIWindow *window; -@property (nonatomic, retain) IBOutlet EAGLView *glView; +@property (nonatomic, retain) IBOutlet wolf3dViewController *viewController; +@property (nonatomic, retain) UINavigationController *navigationController; +@property (nonatomic, retain) UIView *waitingView; +@property (nonatomic, retain) AVAudioPlayer *player; + +- (void)initMenuMusicPlayer; + +- (void)startMenuMusic; +- (void)stopMenuMusic; + - (void)restartAccelerometerIfNeeded; +- (void)showOpenGL; +- (void)GLtoMainMenu; +- (void)GLtoPreviousMenu; +- (void)didRotate:(NSNotification *)notification; +- (void)setScreenForOrientation:(UIDeviceOrientation)orientation; + +- (void)dismissWaitingView; @end +// Callback for in-app purchase. +void inAppPurchaseCallback( InAppPurchaseResult result ); diff --git a/wolf3d/code/iphone/wolf3dAppDelegate.m b/wolf3d/code/iphone/wolf3dAppDelegate.m index 64073aa..fe927c2 100644 --- a/wolf3d/code/iphone/wolf3dAppDelegate.m +++ b/wolf3d/code/iphone/wolf3dAppDelegate.m @@ -1,6 +1,9 @@ /* - Copyright (C) 2009 Id Software, Inc. + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -19,6 +22,8 @@ */ #import "wolf3dAppDelegate.h" +#import "MainMenuViewController.h" +#import "wolf3dViewController.h" #import "EAGLView.h" #import #include "../wolfiphone.h" @@ -34,6 +39,8 @@ extern void AppendUserDataToFile(NSData* data); //used for downloading custom made map extern void FinalizeUserDownload(); +yesNoBoxType_t currentYesNoBox = YESNO_NONE; + #if SPEARSTOREKIT //was used for storekit extern void FinalizeDownload(); @@ -45,7 +52,6 @@ extern void GetSpear(); extern void DownloadURLConnection(char *url); -extern int wasCalledFromDownloadInstructionsMenu; extern void iphoneSet2D(); @@ -72,13 +78,51 @@ void SysIPhoneVibrate() { @implementation wolf3dAppDelegate @synthesize window; -@synthesize glView; +@synthesize viewController; +@synthesize navigationController; +@synthesize waitingView; +@synthesize player; - -- (void)applicationDidFinishLaunching:(UIApplication *)application { - application.statusBarHidden = YES; - application.statusBarOrientation = UIInterfaceOrientationLandscapeLeft; +- (void)initMenuMusicPlayer { + NSString *soundFilePath = + [[NSBundle mainBundle] pathForResource: @"wondering" + ofType: @"caf"]; + + NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: soundFilePath]; + + AVAudioPlayer *newPlayer = + [[AVAudioPlayer alloc] initWithContentsOfURL: fileURL + error: nil]; + [fileURL release]; + if ( s_masterVolume != NULL ) { + newPlayer.volume = s_masterVolume->value * 0.5f; + } else { + newPlayer.volume = 0.2f; + } + + + newPlayer.numberOfLoops = -1; + + self.player = newPlayer; + [newPlayer release]; + + [player prepareToPlay]; +} + +- (void)startMenuMusic { + + [player play]; +} + +- (void)stopMenuMusic { + + [player stop]; +} + + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // get the documents directory, where we will write configs and save games NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; @@ -96,10 +140,11 @@ void SysIPhoneVibrate() { // start the flow of accelerometer events UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer]; accelerometer.delegate = self; - accelerometer.updateInterval = 0.01; + accelerometer.updateInterval = 1.0 / 30.0; // do all the game startup work - iphoneStartup(); + //iphoneStartup(); + #if SPEARSTOREKIT //check if user downloaded spear but didn't purchase @@ -115,22 +160,150 @@ void SysIPhoneVibrate() { } #endif + // Sign up for rotation notifications + [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(didRotate:) + name:UIDeviceOrientationDidChangeNotification + object:nil]; + + // Support rendering at native resolution on devices with Retina displays. + if ( [[UIScreen mainScreen] respondsToSelector:@selector(scale)] ) { + deviceScale = UIScreen.mainScreen.scale; + touchCoordinateScale = UIScreen.mainScreen.scale; + } + + // Screen is initially landscape-left. + // BEWARE! For UI*Interface*Orientation, Left/Right refers to the location of the home button. + // BUT, for UI*Device*Orientation, Left/Right refers to the location of the side OPPOSITE the home button!! + [self setScreenForOrientation:UIDeviceOrientationLandscapeRight]; + + // Create the window programmatically instead of loading from a nib file. + self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; + + // We will create the OpenGL view here so we can get a context and preload textures, but + // don't actually add the view to the window until the player enters a level. + wolf3dViewController *vc = [[wolf3dViewController alloc] initWithNibName:nil bundle:nil]; + self.viewController = vc; + [self.viewController setActive:NO]; + [vc release]; + + MainMenuViewController *rootController = [[MainMenuViewController alloc] initWithNibName:@"MainMenuView" bundle:nil]; + navigationController = [[UINavigationController alloc] initWithRootViewController:rootController]; + [navigationController setNavigationBarHidden:YES]; + [rootController release]; + + [window addSubview:navigationController.view]; + [window makeKeyAndVisible]; + + return YES; +} + +- (void)showOpenGL { + // Maybe clearing the OpenGL view before displaying will fix the old frame flashing. + // I don't mind if this blocks until a vsync, becasue it's just a menu. + [self.viewController clearAndPresentRenderbuffer]; + + [[navigationController view] removeFromSuperview]; + + [self.viewController setActive:YES]; + [window addSubview:[self.viewController view]]; + + [self.viewController startAnimation]; +} + +- (void)didRotate:(NSNotification *)notification { + UIDeviceOrientation orient = [[UIDevice currentDevice] orientation]; + + [self setScreenForOrientation:orient]; +} + +- (void)setScreenForOrientation:(UIDeviceOrientation) orientation { + // Note the the UIDeviceOrientations are REVERSED from the UIInterface orientations! + switch (orientation) { + case UIDeviceOrientationLandscapeLeft: + deviceOrientation = ORIENTATION_LANDSCAPE_RIGHT; + viddef.width = [UIScreen mainScreen].bounds.size.height * deviceScale; + viddef.height = [UIScreen mainScreen].bounds.size.width * deviceScale; + //[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeRight; + break; + + case UIDeviceOrientationLandscapeRight: + deviceOrientation = ORIENTATION_LANDSCAPE_LEFT; + viddef.width = [UIScreen mainScreen].bounds.size.height * deviceScale; + viddef.height = [UIScreen mainScreen].bounds.size.width * deviceScale; + //[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeLeft; + break; + + default: + break; + } + + float widthRatio = viddef.width / REFERENCE_WIDTH; + float heightRatio = viddef.height / REFERENCE_HEIGHT; + + if ( widthRatio < heightRatio ) { + screenScale = widthRatio; + } else { + screenScale = heightRatio; + } } //this is so that we can respond to alertView events (messageboxes) //but this should only respond to the alertPurchaseSpear - (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { - //this is if they clicked yes to going to the map instructions website - if (wasCalledFromDownloadInstructionsMenu && buttonIndex == 1) { - SysIPhoneOpenURL( "http://www.idsoftware.com/wolfenstein-3d-classic-platinum/mapinstructions/" ); - return; + if (buttonIndex == 1) { + switch ( currentYesNoBox ) { + case YESNO_BUY_PLATINUM: { + // They clicked yes to buy the platinum edition. + + // Set up a fullscreen view with the activity indicator in the middle while + // we wait for the in-app purchase to complete. + UIView* topView = [[self.navigationController topViewController] view]; + CGRect waitFrame = topView.frame; + + + [waitingView release]; + waitingView = [[UIView alloc] initWithFrame:waitFrame]; + waitingView.backgroundColor = [UIColor blackColor]; + waitingView.opaque = NO; + waitingView.alpha = 0.75; + + + UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; + [indicator startAnimating]; + + [waitingView addSubview:indicator]; + // This mask centers the view in its superview + indicator.center = indicator.superview.center; + [indicator release]; + + [topView addSubview:waitingView]; + + // Start the request to the app store + InAppPurchaseSetCallback( inAppPurchaseCallback ); + InAppPurchaseStartPurchase( PLATINUM_UPGRADE_STRING ); + + break; + } + + case YESNO_GO_TO_WEBSITE: + //if they clicked yes to going to the idsoftware website + SysIPhoneOpenURL( "http://www.idsoftware.com/wolfenstein-3d-classic-platinum/" ); + break; + + case YESNO_DOWNLOAD_INSTRUCTIONS: + //this is if they clicked yes to going to the map instructions website + SysIPhoneOpenURL( "http://www.idsoftware.com/wolfenstein-3d-classic-platinum/mapinstructions/" ); + break; + + default: + break; + } } - //if they clicked yes to going to the idsoftware website - if (buttonIndex == 1) - SysIPhoneOpenURL( "http://www.idsoftware.com/wolfenstein-3d-classic-platinum/" ); - /* if (alertPurchaseSpear && (alertPurchaseSpear == actionSheet)) { @@ -140,26 +313,47 @@ void SysIPhoneVibrate() { } - (void)applicationWillResignActive:(UIApplication *)application { + [self.viewController stopAnimation]; } - (void)applicationDidBecomeActive:(UIApplication *)application { + [self.viewController startAnimation]; } - (void)applicationWillTerminate:(UIApplication *)application { + [self.viewController stopAnimation]; + + // Save the game. iphoneShutdown(); } +- (void)applicationDidEnterBackground:(UIApplication *)application { + [self.viewController stopAnimation]; + + // Save the game. + iphoneShutdown(); +} + + +- (void)dismissWaitingView { + if ( waitingView != nil ) { + [waitingView removeFromSuperview]; + [waitingView release]; + waitingView = nil; + } +} + #if 1 extern char urlbuffer[1024]; - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { // wolf3d:foo should launch wolf3d now... next, add useful URL parameter encoding -#ifdef LITE - iphoneMessageBox("Lite version", "This is a Lite version. You must purchase Wolfenstein3D to get this feature."); - return NO; -#endif + if ( SysIPhoneGetContentVersion() == CONTENT_LITE ) { + iphoneMessageBox("Lite version", "This is a Lite version. You must purchase Wolfenstein3D to get this feature."); + return NO; + } if (!url) return NO; @@ -217,8 +411,10 @@ extern char urlbuffer[1024]; - (void)dealloc { + [viewController release]; + [navigationController release]; [window release]; - [glView release]; + [super dealloc]; } @@ -232,7 +428,7 @@ extern char urlbuffer[1024]; } UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer]; accelerometer.delegate = self; - accelerometer.updateInterval = 0.01; + accelerometer.updateInterval = 1.0 / 30.0; } } @@ -345,7 +541,38 @@ extern char urlbuffer[1024]; } } */ + +- (void)GLtoMainMenu { + [self.navigationController popToRootViewControllerAnimated:NO]; + [viewController setActive:NO]; + [[viewController view] removeFromSuperview]; + [window addSubview:navigationController.view]; +} + +- (void)GLtoPreviousMenu { + [viewController setActive:NO]; + [[viewController view] removeFromSuperview]; + [window addSubview:navigationController.view]; +} + @end +void iphoneStartMainMenu() { + Sound_StopBGTrack(); + iphoneStartMenuMusic(); + numTouches = 0; + numPrevTouches = 0; + wolf3dAppDelegate *app = (wolf3dAppDelegate*)[[UIApplication sharedApplication] delegate]; + [app GLtoMainMenu]; +} +void iphoneStartPreviousMenu() { + wolf3dAppDelegate *app = (wolf3dAppDelegate*)[[UIApplication sharedApplication] delegate]; + [app GLtoPreviousMenu ]; +} + +void inAppPurchaseCallback( InAppPurchaseResult result ) { + wolf3dAppDelegate* app = (wolf3dAppDelegate*)[[UIApplication sharedApplication] delegate]; + [app dismissWaitingView]; +} diff --git a/wolf3d/code/iphone/wolf3dViewController.h b/wolf3d/code/iphone/wolf3dViewController.h new file mode 100644 index 0000000..104adae --- /dev/null +++ b/wolf3d/code/iphone/wolf3dViewController.h @@ -0,0 +1,48 @@ +/* + + Copyright (C) 2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import + +#import + +#import +#import + +@interface wolf3dViewController : UIViewController { + EAGLContext *context; + + BOOL animating; + BOOL active; + NSInteger animationFrameInterval; + CADisplayLink *displayLink; +} + +@property (nonatomic, getter=isActive) BOOL active; +@property (readonly, nonatomic, getter=isAnimating) BOOL animating; +@property (nonatomic) NSInteger animationFrameInterval; + +- (void)startAnimation; +- (void)stopAnimation; +- (void)clearAndPresentRenderbuffer; + +@end diff --git a/wolf3d/code/iphone/wolf3dViewController.m b/wolf3d/code/iphone/wolf3dViewController.m new file mode 100644 index 0000000..1f42394 --- /dev/null +++ b/wolf3d/code/iphone/wolf3dViewController.m @@ -0,0 +1,237 @@ +/* + + Copyright (C) 2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#import + +#import "wolf3dViewController.h" +#import "EAGLView.h" +#import "wolfiphone.h" +//#import "wolf3dAppDelegate.h" + +@interface wolf3dViewController () +@property (nonatomic, retain) EAGLContext *context; +@property (nonatomic, assign) CADisplayLink *displayLink; +@end + +@implementation wolf3dViewController + +@synthesize animating, context, displayLink, active; + + +- (id)initWithNibName:(NSString*)file bundle:(NSBundle*)bundle +{ + // Get the application's window dimensions. + EAGLView *glView = [[EAGLView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame]; + self.view = glView; + [glView release]; + + EAGLContext *aContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1]; + + if (!aContext) + NSLog(@"Failed to create ES context"); + else if (![EAGLContext setCurrentContext:aContext]) + NSLog(@"Failed to set ES context current"); + + self.context = aContext; + [aContext release]; + + [(EAGLView *)self.view setContext:context]; + [(EAGLView *)self.view setFramebuffer]; + + animating = FALSE; + animationFrameInterval = DEFAULT_FRAME_INTERVAL; + self.displayLink = nil; + + // Now that we have a context, we can init the render system. + iphoneStartup(); + + return self; +} + + + +- (void)awakeFromNib +{ + EAGLView *glView = [[EAGLView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame]; + self.view = glView; + [glView release]; + + EAGLContext *aContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1]; + + if (!aContext) + NSLog(@"Failed to create ES context"); + else if (![EAGLContext setCurrentContext:aContext]) + NSLog(@"Failed to set ES context current"); + + self.context = aContext; + [aContext release]; + + [(EAGLView *)self.view setContext:context]; + [(EAGLView *)self.view setFramebuffer]; + + animating = FALSE; + animationFrameInterval = DEFAULT_FRAME_INTERVAL; + self.displayLink = nil; +} + +- (void)didReceiveMemoryWarning { + // Releases the view if it doesn't have a superview. + [super didReceiveMemoryWarning]; + + // Release any cached data, images, etc. that aren't in use. +} + +- (void)dealloc { + // Stop orientation notifications. + [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]; + + // Tear down context. + if ([EAGLContext currentContext] == context) + [EAGLContext setCurrentContext:nil]; + + [context release]; + + [super dealloc]; +} + +- (void)viewWillAppear:(BOOL)animated +{ + [self startAnimation]; + + [super viewWillAppear:animated]; +} + +- (void)viewWillDisappear:(BOOL)animated +{ + [self setActive:NO]; + + [super viewWillDisappear:animated]; +} + +- (void)viewDidUnload +{ + [super viewDidUnload]; + + [self stopAnimation]; + + // Tear down context. + if ([EAGLContext currentContext] == context) + [EAGLContext setCurrentContext:nil]; + self.context = nil; +} + +- (NSInteger)animationFrameInterval +{ + return animationFrameInterval; +} + +- (void)setAnimationFrameInterval:(NSInteger)frameInterval +{ + /* + Frame interval defines how many display frames must pass between each time the display link fires. + The display link will only fire 30 times a second when the frame internal is two on a display that refreshes 60 times a second. The default frame interval setting of one will fire 60 times a second when the display refreshes at 60 times a second. A frame interval setting of less than one results in undefined behavior. + */ + if (frameInterval >= 1) + { + animationFrameInterval = frameInterval; + + if (animating) + { + [self stopAnimation]; + [self startAnimation]; + } + } +} + +- (void)startAnimation +{ + if ( !animating ) + { + // The UIScreen method is not supported pre-4.0. + // Not worrying about supporting external displays yet, so just create a default display link. + //CADisplayLink *aDisplayLink = [[UIScreen mainScreen] displayLinkWithTarget:self selector:@selector(drawFrame)]; + CADisplayLink *aDisplayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(drawFrame)]; + [aDisplayLink setFrameInterval:animationFrameInterval]; + [aDisplayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; + self.displayLink = aDisplayLink; + + animating = TRUE; + } +} + +- (void)stopAnimation +{ + if ( animating ) + { + [self.displayLink invalidate]; + self.displayLink = nil; + animating = FALSE; + } +} + +- (void)drawFrame +{ + // Check out framerate + //CFTimeInterval frameTime = [displayLink duration]; + //CFTimeInterval stamp = [displayLink timestamp]; + + //if ( frameTime < 0.016666 ) { + // NSLog( @"Frame timestamp: %f\n", stamp ); + //} + + //[ (wolf3dAppDelegate *)[UIApplication sharedApplication].delegate restartAccelerometerIfNeeded]; + + if ( !active ) { + // We are in the menus, only need to update sound. + Sound_Update( vnull, vnull, vnull, vnull ); + return; + } + + picTimingClear(); + + [(EAGLView *)self.view setFramebuffer]; + + NSTimeInterval startTime = [NSDate timeIntervalSinceReferenceDate]; + iphoneFrame(); + + NSTimeInterval gameTime = [NSDate timeIntervalSinceReferenceDate] - startTime; + if ( gameTime > 0.0166 ) { +/* NSLog (@"Frame took %.8f seconds.", gameTime); + NSLog (@" Sound_Update took %.8f seconds.", soundTime ); + NSLog (@" iphoneDrawMenus took %.8f seconds.", menuTime ); + soundTime = 0; + menuTime = 0; + picTimingPrint(); +*/ } + + [(EAGLView *)self.view presentFramebuffer]; + +} + +// Clears the renderbuffer and immediately displays it. +- (void)clearAndPresentRenderbuffer { + qglClear( GL_COLOR_BUFFER_BIT ); + [(EAGLView *)self.view presentFramebuffer]; +} + +@end diff --git a/wolf3d/code/iphone/wolf3d_Prefix.pch b/wolf3d/code/iphone/wolf3d_Prefix.pch index 58ef796..85f830c 100644 --- a/wolf3d/code/iphone/wolf3d_Prefix.pch +++ b/wolf3d/code/iphone/wolf3d_Prefix.pch @@ -1,3 +1,26 @@ +/* + + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + // // Prefix header for all source files of the 'wolf3d' target in the 'wolf3d' project // diff --git a/wolf3d/code/wolf/wolf_ai_com.c b/wolf3d/code/wolf/wolf_ai_com.c index 59bf310..0f2bdc8 100644 --- a/wolf3d/code/wolf/wolf_ai_com.c +++ b/wolf3d/code/wolf/wolf_ai_com.c @@ -540,6 +540,9 @@ PRIVATE _boolean AI_CheckSight( entity_t *self ) if( deltax > 0 ) return false; break; + + default: + break; } // trace a line to check for blocking tiles (corners) diff --git a/wolf3d/code/wolf/wolf_client_main.c b/wolf3d/code/wolf/wolf_client_main.c index b6af805..3c6d7ec 100644 --- a/wolf3d/code/wolf/wolf_client_main.c +++ b/wolf3d/code/wolf/wolf_client_main.c @@ -133,8 +133,8 @@ PUBLIC void Client_PrepRefresh( const char *r_mapname ) levelData.musicName[6 + strlen(source)] = '\0'; }*/ - Com_Printf("Starting Music Track: %s\n", levelData.musicName); - Sound_StartBGTrack( levelData.musicName, levelData.musicName ); + //Com_Printf("Starting Music Track: %s\n", levelData.musicName); + //Sound_StartBGTrack( levelData.musicName, levelData.musicName ); Player.playstate = ex_playing; } diff --git a/wolf3d/code/wolf/wolf_level.c b/wolf3d/code/wolf/wolf_level.c index 4b29339..68bc3ee 100644 --- a/wolf3d/code/wolf/wolf_level.c +++ b/wolf3d/code/wolf/wolf_level.c @@ -925,14 +925,17 @@ PUBLIC LevelData_t *Level_LoadMap( const char *levelname ) fhandle = FS_OpenFile( levelname, 0 ); if( ! fhandle ) { + char errBuffer[1024]; + sprintf( errBuffer, "levelname: %s, could not be found", levelname); + iphoneMessageBox("map filename", errBuffer); Com_Printf( "Could not load map (%s)\n", levelname ); - return NULL; } filesize = FS_GetFileSize( fhandle ); if( filesize < MAPHEADER_SIZE ) { + iphoneMessageBox("map header size", "header size of the map is wrong"); Com_Printf("Map file size is smaller than mapheader size\n"); return NULL; } @@ -944,6 +947,7 @@ PUBLIC LevelData_t *Level_LoadMap( const char *levelname ) FS_ReadFile( &signature, 1, 4, fhandle ); if( signature != MAP_SIGNATURE ) { + iphoneMessageBox("map signature", "signature of the map file is invalid"); Com_Printf("File signature does not match MAP_SIGNATURE\n"); return NULL; } @@ -975,6 +979,7 @@ PUBLIC LevelData_t *Level_LoadMap( const char *levelname ) if( filesize < (MAPHEADER_SIZE + mapNameLength + musicNameLength + length[ 0 ] + length[ 1 ] + length[ 2 ]) ) { + iphoneMessageBox("map filesize", "filesize is less than MAPHEADER_SIZE + mapNameLength + musicNameLength + etc"); Com_Printf("filesize is less than MAPHEADER_SIZE + mapNameLength + musicNameLength + etc\n"); return NULL; } @@ -993,6 +998,7 @@ PUBLIC LevelData_t *Level_LoadMap( const char *levelname ) if( filesize < (MAPHEADER_SIZE + mapNameLength + musicNameLength) ) { + iphoneMessageBox("map filesize", "filesize is less than MAPHEADER_SIZE + mapNameLength + musicNameLength"); Com_Printf("filesize is less than MAPHEADER_SIZE + mapNameLength + musicNameLength\n"); return NULL; } diff --git a/wolf3d/code/wolf/wolf_local.h b/wolf3d/code/wolf/wolf_local.h index f0586e4..9bdc8e4 100644 --- a/wolf3d/code/wolf/wolf_local.h +++ b/wolf3d/code/wolf/wolf_local.h @@ -39,6 +39,9 @@ #ifndef __WOLF_LOCAL_H__ #define __WOLF_LOCAL_H__ +#include "filesystem.h" +#include "arch.h" +#include "cvar.h" // Game Version #define WOLFENSTEINWL6 0x00 diff --git a/wolf3d/code/wolf/wolf_main.c b/wolf3d/code/wolf/wolf_main.c index cda6e6c..e667f08 100644 --- a/wolf3d/code/wolf/wolf_main.c +++ b/wolf3d/code/wolf/wolf_main.c @@ -70,9 +70,9 @@ PUBLIC void Game_Init( void ) episode = Cvar_Get( "episode", "0", CVAR_ARCHIVE ); skill = Cvar_Get( "skill", "1", CVAR_ARCHIVE ); -// g_version = Cvar_Get( "g_version", "0", CVAR_ARCHIVE ); g_version = Cvar_Get( "g_version", "1", CVAR_ARCHIVE ); //we should make a #ifdef for "special version" //this version is to come with spear + #ifndef LITE Cmd_AddCommand( "map", Map_f ); diff --git a/wolf3d/code/wolf/wolf_opengl.c b/wolf3d/code/wolf/wolf_opengl.c index 34582d1..194602a 100644 --- a/wolf3d/code/wolf/wolf_opengl.c +++ b/wolf3d/code/wolf/wolf_opengl.c @@ -58,11 +58,12 @@ */ PUBLIC void GL_SetDefaultState( void ) { - pfglClearColor( 1,0, 0.5 , 0.5 ); - pfglCullFace( GL_FRONT ); + pfglViewport( 0,0, viddef.height, viddef.width ); + pfglClearColor( 0.0f, 0.0f, 0.0f, 1.0f ); pfglEnable( GL_TEXTURE_2D ); pfglDisable( GL_DEPTH_TEST ); - pfglDisable( GL_CULL_FACE ); + pfglDisable( GL_ALPHA_TEST ); + pfglEnable( GL_CULL_FACE ); pfglDisable( GL_BLEND ); pfglColor4f( 1, 1, 1, 1 ); pfglShadeModel( GL_FLAT ); @@ -92,12 +93,12 @@ PUBLIC void R_DrawBox( int x, int y, int w, int h, W32 color ) pfglColor4ubv( (GLubyte *) & color ); - pfglBegin( GL_QUADS ); + pfglBegin( GL_TRIANGLE_STRIP ); pfglVertex2i( x, y ); pfglVertex2i( x, y + h); - pfglVertex2i( x + w, y + h ); pfglVertex2i( x + w, y ); + pfglVertex2i( x + w, y + h ); pfglEnd(); @@ -107,6 +108,41 @@ PUBLIC void R_DrawBox( int x, int y, int w, int h, W32 color ) pfglEnable( GL_TEXTURE_2D ); } +/* +----------------------------------------------------------------------------- + Function: R_DrawBoxFloat + + Parameters: + + Returns: + + Notes: + +----------------------------------------------------------------------------- +*/ +PUBLIC void R_DrawBoxFloat( float x, float y, float w, float h, W32 color ) +{ + pfglDisable( GL_TEXTURE_2D ); + +// pfglEnable( GL_BLEND ); +// pfglBlendFunc( GL_SRC_COLOR, GL_DST_COLOR ); + + pfglColor4ubv( (GLubyte *) & color ); + + pfglBegin( GL_TRIANGLE_STRIP ); + + pfglVertex2f( x, y ); + pfglVertex2f( x, y + h); + pfglVertex2f( x + w, y + h ); + pfglVertex2f( x + w, y ); + + pfglEnd(); + + pfglColor3f( 1, 1, 1 ); +// pfglBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); +// pfglDisable( GL_BLEND ); + pfglEnable( GL_TEXTURE_2D ); +} /* ==================== @@ -211,11 +247,11 @@ PUBLIC void R_Draw_Wall( float x, float y, float z1, float z2, int type, int tex LoadWallTexture( tex ); - pfglBegin( GL_QUADS ); + pfglBegin( GL_TRIANGLE_STRIP ); - pfglTexCoord2f( 1.0, 0.0 ); pfglVertex3f( x1, z2, y1 ); pfglTexCoord2f( 0.0, 0.0 ); pfglVertex3f( x2, z2, y2 ); pfglTexCoord2f( 0.0, 1.0 ); pfglVertex3f( x2, z1, y2 ); + pfglTexCoord2f( 1.0, 0.0 ); pfglVertex3f( x1, z2, y1 ); pfglTexCoord2f( 1.0, 1.0 ); pfglVertex3f( x1, z1, y1 ); pfglEnd(); @@ -276,11 +312,11 @@ PUBLIC void R_Draw_Door( int x, int y, float z1, float z2, _boolean vertical, _b LoadWallTexture( tex ); - pfglBegin( GL_QUADS ); + pfglBegin( GL_TRIANGLE_STRIP ); - pfglTexCoord2f( backside ? 0.0f : 1.0f, 0.0 ); pfglVertex3f( x1, z2, y1 ); pfglTexCoord2f( backside ? 1.0f : 0.0f, 0.0 ); pfglVertex3f( x2, z2, y2 ); pfglTexCoord2f( backside ? 1.0f : 0.0f, 1.0 ); pfglVertex3f( x2, z1, y2 ); + pfglTexCoord2f( backside ? 0.0f : 1.0f, 0.0 ); pfglVertex3f( x1, z2, y1 ); pfglTexCoord2f( backside ? 0.0f : 1.0f, 1.0 ); pfglVertex3f( x1, z1, y1 ); pfglEnd(); @@ -340,7 +376,7 @@ PUBLIC void R_DrawSprites( void ) } R_Bind( twall->texnum ); - pfglBegin( GL_QUADS ); + pfglBegin( GL_TRIANGLE_STRIP ); if ( cropSprites->value && twall->header.numBounds > 0 ) { // draw one or two subrects to avoid blending all the empty space @@ -367,8 +403,8 @@ PUBLIC void R_DrawSprites( void ) pfglTexCoord2f( x1, y1 ); pfglVertex3f( Ex - x1 * 2*cosa, -(LOWERZCOORD + (UPPERZCOORD - LOWERZCOORD) * y1), -Ey + x1 * 2*sina ); pfglTexCoord2f( x1, y2 ); pfglVertex3f( Ex - x1 * 2*cosa, -(LOWERZCOORD + (UPPERZCOORD - LOWERZCOORD) * y2), -Ey + x1 * 2*sina ); - pfglTexCoord2f( x2, y2 ); pfglVertex3f( Ex - x2 * 2*cosa, -(LOWERZCOORD + (UPPERZCOORD - LOWERZCOORD) * y2), -Ey + x2 * 2*sina ); pfglTexCoord2f( x2, y1 ); pfglVertex3f( Ex - x2 * 2*cosa, -(LOWERZCOORD + (UPPERZCOORD - LOWERZCOORD) * y1), -Ey + x2 * 2*sina ); + pfglTexCoord2f( x2, y2 ); pfglVertex3f( Ex - x2 * 2*cosa, -(LOWERZCOORD + (UPPERZCOORD - LOWERZCOORD) * y2), -Ey + x2 * 2*sina ); } } else { Ex = Dx = vislist[ n ].x / FLOATTILE; @@ -378,8 +414,8 @@ PUBLIC void R_DrawSprites( void ) pfglTexCoord2f( 0.0, 0.0 ); pfglVertex3f( Ex, UPPERZCOORD, -Ey ); pfglTexCoord2f( 0.0, 1.0 ); pfglVertex3f( Ex, LOWERZCOORD, -Ey ); - pfglTexCoord2f( 1.0, 1.0 ); pfglVertex3f( Dx, LOWERZCOORD, -Dy ); pfglTexCoord2f( 1.0, 0.0 ); pfglVertex3f( Dx, UPPERZCOORD, -Dy ); + pfglTexCoord2f( 1.0, 1.0 ); pfglVertex3f( Dx, LOWERZCOORD, -Dy ); } pfglEnd(); @@ -429,9 +465,9 @@ PUBLIC void R_DrawNumber( int x, int y, int number ) fcol = col * w; pfglTexCoord2f( fcol, 0 ); pfglVertex2i( x, y ); - pfglTexCoord2f( fcol+w, 0 ); pfglVertex2i( x+18, y ); - pfglTexCoord2f( fcol+w, 1 ); pfglVertex2i( x+18, y+32 ); pfglTexCoord2f( fcol, 1 ); pfglVertex2i( x, y+32 ); + pfglTexCoord2f( fcol+w, 1 ); pfglVertex2i( x+18, y+32 ); + pfglTexCoord2f( fcol+w, 0 ); pfglVertex2i( x+18, y ); x -= 18; } @@ -503,9 +539,10 @@ PUBLIC void R_put_line( int x, int y, const char *string ) pfglTexCoord2f( fcol, frow ); pfglVertex2i( mx, y ); - pfglTexCoord2f( fcol+w, frow ); pfglVertex2i( mx+32, y ); - pfglTexCoord2f( fcol+w, frow+h ); pfglVertex2i( mx+32, y+32 ); pfglTexCoord2f( fcol, frow+h ); pfglVertex2i( mx, y+32 ); + pfglTexCoord2f( fcol+w, frow+h ); pfglVertex2i( mx+32, y+32 ); + pfglTexCoord2f( fcol+w, frow ); pfglVertex2i( mx+32, y ); + diff --git a/wolf3d/code/wolf/wolf_player.c b/wolf3d/code/wolf/wolf_player.c index b47617b..4237dda 100644 --- a/wolf3d/code/wolf/wolf_player.c +++ b/wolf3d/code/wolf/wolf_player.c @@ -585,7 +585,7 @@ PUBLIC void PL_Spawn( placeonplane_t location, LevelData_t *lvl ) //gsh iphoneSetLevelNotifyText(); - /* +#if 0 char str[128]; //sprintf( str, "Entering level E%iM%i", currentMap.episode + 1, currentMap.map + 1 ); //gsh @@ -624,10 +624,10 @@ PUBLIC void PL_Spawn( placeonplane_t location, LevelData_t *lvl ) } } else - sprintf( str, "Entering level custom %i", /*currentMap.episode+1,* currentMap.map+1 ); + sprintf( str, "Entering level custom %i", /*currentMap.episode+1,*/ currentMap.map+1 ); iphoneSetNotifyText( str ); - */ +#endif } /* diff --git a/wolf3d/code/wolf/wolf_powerups.c b/wolf3d/code/wolf/wolf_powerups.c index 0e6f08e..dbf023d 100644 --- a/wolf3d/code/wolf/wolf_powerups.c +++ b/wolf3d/code/wolf/wolf_powerups.c @@ -295,13 +295,13 @@ PRIVATE int Pow_Give( pow_t type ) Com_Printf("Spear of Destiny picked up!!\n"); - Sound_StartSound( NULL, 0, CHAN_ITEM, Sound_RegisterSound( "sfx/109.wav" ), 1, ATTN_NORM, 0 ); //gsh - iphoneSetNotifyText( "Spear of Destiny" ); -/* //gsh - my_snprintf( szTextMsg, sizeof( szTextMsg ), //this is supposed to load the last level... but it isn't - "loading ; map s%.2d.map\n", 20 ); - Cbuf_AddText( szTextMsg ); - */ + Sound_StartSound( NULL, 0, CHAN_ITEM, Sound_RegisterSound( "sfx/109.wav" ), 1, ATTN_NORM, 0 ); //gsh + iphoneSetNotifyText( "Spear of Destiny" ); + /* //gsh + my_snprintf( szTextMsg, sizeof( szTextMsg ), //this is supposed to load the last level... but it isn't + "loading ; map s%.2d.map\n", 20 ); + Cbuf_AddText( szTextMsg ); + */ //this might be a bit of a hack. But it works. //Load the last level... gsh diff --git a/wolf3d/code/wolf/wolf_renderer.h b/wolf3d/code/wolf/wolf_renderer.h index dd02be7..ccc8377 100644 --- a/wolf3d/code/wolf/wolf_renderer.h +++ b/wolf3d/code/wolf/wolf_renderer.h @@ -41,6 +41,7 @@ #define __WOLF_RENDERER_H__ extern void R_DrawBox( int x, int y, int w, int h, W32 color ); +extern void R_DrawBoxFloat( float x, float y, float w, float h, W32 color ); extern void R_Draw_Door( int x, int y, float z1, float z2, _boolean vertical, _boolean backside, int tex, int amount ); extern void R_Draw_Wall( float x, float y, float z1, float z2, int type, int tex ); diff --git a/wolf3d/code/wolfiphone.h b/wolf3d/code/wolfiphone.h index 84a2ab4..472828f 100644 --- a/wolf3d/code/wolfiphone.h +++ b/wolf3d/code/wolfiphone.h @@ -1,10 +1,24 @@ /* - * wolfiphone.h - * wolf3d - * - * Created by John Carmack on 3/13/09. - * Copyright 2009 idSoftware. All rights reserved. - * + + Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company. + + This file is part of the WOLF3D iOS v2.1 GPL Source Code. + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ #include @@ -29,6 +43,7 @@ #include #include "iphone/gles_glue.h" + #include #include #include @@ -87,3 +102,10 @@ #include "iphone_alerts.h" +#include + +extern CFAbsoluteTime soundTime; +extern CFAbsoluteTime menuTime; + +void picTimingPrint(); +void picTimingClear(); diff --git a/wolf3d/readme_iWolf_v1x.txt b/wolf3d/readme_iWolf_v1x.txt new file mode 100644 index 0000000..e10572c --- /dev/null +++ b/wolf3d/readme_iWolf_v1x.txt @@ -0,0 +1,22 @@ + +The original Wolfenstein 3D code was written in late 1991 / early 1992 using 16 bit Turbo C and the TASM assembler and targeted at 286 based MSDOS systems with VGA graphics and ideally a bit of extended or expanded memory. + +I released the original source for Wolfenstein 3D many years ago, originally under a not-for-commercial purposes license, then later under the GPL. The old code is still available in various places ( http://www.btinternet.com/~belowe/ ) but it isn't very useful on modern platforms. There are several open source projects that have modernized the code so that it works on 32 bit systems and can take advantage of OpenGL acceleration. I started the iphone version with the Wolf3D Redux codebase ( http://wolf3dredux.sourceforge.net/ ), which apparently incorporated a lot of code from NewWolf ( http://newwolf.sourceforge.net/ ). + +At first, I considered trying to build the iphone version as a patch, but when I decided to turn the little research project into a commercial release (and do it in a hurry), I started making more wholesale changes. The Redux codebase had basically gutted the Quake 2 codebase and grafted Wolfenstein into it, which had some nice points, but it meant that the system code was many times as large as the actual Wolfenstein game code. It wasn't really hurting anything, and I considered leaving it all in, but it was such a mess that I finally flattened everything out and cut out about half of the environment code. No attempt was made to make this project portable, although it wouldn't be very hard to clean that up. + +In the past, Id source releases did not include any data files, and you had to extract data files from a commercially obtained version of the game if you wanted to experiment with the original game data. Because it isn't possible for users to tear open an app bundle from the App Store to get at the data, I am including it with the source code to make it easy. You are on-your-honor to buy a copy at the App Store before using the data. :-) The source code is under the GPL, but the data is still strictly copyright Id Software with no license given to distribute outside this code release package or to use for any commercial purpose. You are certainly free to replace all the data and make commercial applications, as long as the code is made available under the GPL. + +/newCode/wolf The 32 bit Wolfenstein code +/newCode/env The Quake 2 derived code +/newCode/iphone The newly written iphone code and xcode project files +/newCode/Tremor Unodified ogg Tremor code for the background music +/base Game data + +I can't say there is a lot of really good code here -- the wolf code is mutated, the quake 2 code is vestigial, and the new code was written in a hurry, but it does all hang together as a pretty fun game to play, and a good testbed for various things. + +If anyone does build another quality commercial application based on this code, let us know, and we can probably do some kind of cross linking. + +John Carmack +2009/03/20 + diff --git a/wolf3d/scripts/scrubBase.pl b/wolf3d/scripts/scrubBase.pl index 00ce786..a297595 100644 --- a/wolf3d/scripts/scrubBase.pl +++ b/wolf3d/scripts/scrubBase.pl @@ -10,26 +10,10 @@ if ( $prod eq "wolf3d" ) { } if ( -d "$dst/base/maps" ) { - print "Scrubbing maps for $prod.\n"; - chdir "$dst/base/maps"; - opendir( DIR, "." ); - my @files = readdir( DIR ); - closedir( DIR ); - #print "Candidates are: " . join( " ", @files ) . "\n"; - @files = grep { /^w[1-9]\d\.map$/ || /^w0[3-9]\.map$/ } @files; - #print "Filtered are: " . join( " ", @files ) . "\n"; - unlink @files; # copy appropriate splash image if ( -f "$src/../code/iphone/default_$prod.png" ) { print "Copying default_$prod.png as default splash image.\n"; `cp $src/../code/iphone/default_$prod.png $dst/Default.png`; } - - # copy appropriate victory image - if ( -f "$src/../code/iphone/victory_$prod.tga" ) { - print "Copying victory_$prod.tga as victory image.\n"; - `rm $dst/base/iphone/victory_256.5551`; - `cp $src/../code/iphone/victory_$prod.tga $dst/base/iphone/victory_256.tga`; - } } diff --git a/wolf3d/wolfextractor/adlib/adlib.c b/wolf3d/wolfextractor/adlib/adlib.c new file mode 100644 index 0000000..a0c6cfb --- /dev/null +++ b/wolf3d/wolfextractor/adlib/adlib.c @@ -0,0 +1,359 @@ +/* + + Copyright (C) 2004-2005 Michael Liebscher + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * adlib.c: Interface to adlib hardware. + * + * Author: Michael Liebscher + * + * Acknowledgement: + * Portion of this code was derived from Wolfenstein3-D, and was originally + * written by Id Software, Inc. + * + * Portion of this code was derived from code written by DarkOne the Hacker. + * + */ + +#include +#include + + +#include "adlib.h" +#include "fmopl.h" + +#include "../../../common/arch.h" +#include "../../../common/common_utils.h" +#include "../memory/memory.h" + + +#define OPL_INTERNAL_FREQ 3600000 // The OPL operates at 3.6MHz +#define OPL_NUM_CHIPS 1 // Number of OPL chips +#define ADLIB_FREQ 22050 // in Hz + + +// Registers for the AdLib card +#define alFMStatus 0x388 // Read +#define alFMAddr 0x388 // Write +#define alFMData 0x389 // Write + +// Register addresses +// Operator stuff +#define alChar 0x20 +#define alScale 0x40 +#define alAttack 0x60 +#define alSus 0x80 +#define alWave 0xe0 +// Channel stuff +#define alFreqL 0xa0 +#define alFreqH 0xb0 +#define alFeedCon 0xc0 +// Global stuff +#define alEffects 0xbd + + +// This table maps channel numbers to carrier and modulator op cells +PRIVATE W8 carriers[ 9 ] = { 3, 4, 5,11,12,13,19,20,21 }, + modifiers[ 9 ] = { 0, 1, 2, 8, 9,10,16,17,18 }; + +PRIVATE FM_OPL *hAdLib = NULL; + + + +/* +----------------------------------------------------------------------------- + Function: ADLIB_Init() -Start adlib hardware. + + Parameters: Nothing. + + Returns: 1 on success, otherwise 0. + + Notes: + +----------------------------------------------------------------------------- +*/ +PUBLIC _boolean ADLIB_Init( W32 freq ) +{ + hAdLib = OPLCreate( OPL_TYPE_YM3812, OPL_INTERNAL_FREQ, freq ); + + if( hAdLib == NULL ) + { + printf( "Could not create AdLib OPL Emulator\n" ); + + return false; + } + + OPLWrite( hAdLib, 0x01, 0x20 ); /* Set WSE=1 */ + OPLWrite( hAdLib, 0x08, 0x00 ); /* Set CSM=0 & SEL=0 */ + + return true; +} + +/* +----------------------------------------------------------------------------- + Function: ADLIB_Init() -Shutdown adlib hardware. + + Parameters: Nothing. + + Returns: Nothing. + + Notes: + +----------------------------------------------------------------------------- +*/ +PUBLIC void ADLIB_Shutdown( void ) +{ + OPLDestroy( hAdLib ); +} + +/* +----------------------------------------------------------------------------- + Function: ADLIB_SetFXInst() -Shutdown adlib hardware. + + Parameters: inst -[in] Valid pointer to Instrument structure. + + Returns: Nothing. + + Notes: + +----------------------------------------------------------------------------- +*/ +PRIVATE void ADLIB_SetFXInst( Instrument *inst ) +{ + W8 c, m; + + m = modifiers[ 0 ]; + c = carriers[ 0 ]; + + + OPLWrite( hAdLib, m + alChar, inst->mChar ); + OPLWrite( hAdLib, m + alScale, inst->mScale ); + OPLWrite( hAdLib, m + alAttack, inst->mAttack ); + OPLWrite( hAdLib, m + alSus, inst->mSus ); + OPLWrite( hAdLib, m + alWave, inst->mWave ); + OPLWrite( hAdLib, c + alChar, inst->cChar ); + OPLWrite( hAdLib, c + alScale, inst->cScale ); + OPLWrite( hAdLib, c + alAttack, inst->cAttack ); + OPLWrite( hAdLib, c + alSus, inst->cSus ); + OPLWrite( hAdLib, c + alWave, inst->cWave ); + + OPLWrite( hAdLib, alFeedCon, 0 ); +} + +/* +----------------------------------------------------------------------------- + Function: ADLIB_DecodeSound() -Decode adlib sound. + + Parameters: sound -[in] Valid pointer to AdLibSound structure. + buffer -[in/out] Hold decoded sound data. + length -[out] Length of sound data. + + Returns: 1 on success, otherwise 0. + + Notes: + +----------------------------------------------------------------------------- +*/ +PUBLIC W8 ADLIB_DecodeSound( AdLibSound *sound, W8 *buffer, W32 *length ) +{ + Instrument inst; + W32 alLengthLeft; + W32 alBlock; + W8 *alSound, s; + W16 *ptr; + + + inst = sound->inst; + alBlock = ( (sound->block & 7) << 2 ) | 0x20; + alLengthLeft= *((PW32)sound->common.length); + alSound = sound->data; + + *length = alLengthLeft * 157 * 2; // 157[.5] = 22050 / 140 + + if( *length > MAX_WAV_SIZE ) + { + return 0; + } + + ptr = (PW16) buffer; + + OPLWrite( hAdLib, alFreqL, 0 ); + OPLWrite( hAdLib, alFreqH, 0 ); + + ADLIB_SetFXInst( &inst ); + + while( alLengthLeft ) + { + s = *alSound++; + if( ! s ) + { + OPLWrite( hAdLib, alFreqH+0, 0 ); + } + else + { + OPLWrite( hAdLib, alFreqL+0, s ); + OPLWrite( hAdLib, alFreqH+0, alBlock ); + } + if( ! ( --alLengthLeft ) ) + { + OPLWrite( hAdLib, alFreqH+0, 0 ); + } + YM3812UpdateOne( hAdLib, ptr, 157 ); + ptr += 157; + } + + + return 1; +} + + + + + + + +W16 *sqHack, *sqHackPtr; +W32 sqHackLen, sqHackSeqLen; +W32 sqHackTime; +W32 alTimeCount; + +#define ADLIB_MUSIC_SPEED 44100 +#define ADLIB_MUSIC_BYPS (ADLIB_MUSIC_SPEED*2) // bytes per second (16 bit) + +typedef struct +{ + W16 length; + W16 values[ 1 ]; + +} musicGroup_t; + +musicGroup_t *music; + +/* +----------------------------------------------------------------------------- + Function: ADLIB_LoadMusic() -Setup music decoder. + + Parameters: musbuffer -[in] musicGroup_t data structure. + + Returns: Nothing. + + Notes: + +----------------------------------------------------------------------------- +*/ +PUBLIC void ADLIB_LoadMusic( void *musbuffer ) +{ + music = (musicGroup_t *)musbuffer; + sqHackPtr = music->values; + sqHackLen = music->length; + sqHackTime = alTimeCount = 0; +} + +/* +----------------------------------------------------------------------------- + Function: ADLIB_UpdateMusic() -Decode adlib music sound. + + Parameters: size -[in] Number of bytes to write to buffer. + buffer -[in/out] Hold decoded sound data. + + Returns: 1 on success, otherwise 0. + + Notes: Data written to buffer is 44100/16/mono + +----------------------------------------------------------------------------- +*/ +PUBLIC W32 ADLIB_UpdateMusic( W32 size, void *buffer ) +{ + W8 *al; //[2] {a, v} (register, value) + W16 *ptr; + W32 n; + W32 AdLibTicks; + _boolean flag = false; + + + AdLibTicks = size; + + ptr = (PW16)buffer; + + for( n = 0 ; n < AdLibTicks; ++n ) + { + while( sqHackLen && (sqHackTime <= alTimeCount) ) + { + al = (PW8)sqHackPtr++; + sqHackTime = alTimeCount + *sqHackPtr++; + OPLWrite( hAdLib, al[ 0 ], al[ 1 ] ); + sqHackLen -= 4; + } + alTimeCount++; + + + // now we'll get AdLib Output! + YM3812UpdateOne( hAdLib, ptr, 63 ); + ptr += 63; + + if( sqHackLen <= 0 ) + { + return (long)ptr - (long)buffer; + } + } + + return AdLibTicks * ADLIB_MUSIC_BYPS / 700; +} + + +/* +----------------------------------------------------------------------------- + Function: ADLIB_getLength() -Get music length in milliseconds. + + Parameters: musbuffer -[in] musicGroup_t data structure. + + Returns: On success length in milliseconds. + + Notes: Data written to buffer is 44100/16/mono + +----------------------------------------------------------------------------- +*/ +PUBLIC W32 ADLIB_getLength( void *musbuffer ) +{ + W16 *Ptr, Len; + W32 Time; + W32 alTime; + + Ptr = ((musicGroup_t*)musbuffer)->values; + Len = ((musicGroup_t*)musbuffer)->length; + Time = alTime = 0; + + + for( ; ; ) + { + while( Len && Time <= alTime ) + { + Ptr++; + Time = alTime + *Ptr++; + Len -= 4; + } + alTime++; + if( Len <= 0 ) + { + break; + } + } + + return alTime * 1000 / 700; // in milliseconds +} \ No newline at end of file diff --git a/wolf3d/wolfextractor/adlib/adlib.h b/wolf3d/wolfextractor/adlib/adlib.h new file mode 100644 index 0000000..f95523c --- /dev/null +++ b/wolf3d/wolfextractor/adlib/adlib.h @@ -0,0 +1,90 @@ +/* + + Copyright (C) 2004 Michael Liebscher + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * adlib.h: Interface to adlib hardware. + * + * Author: Michael Liebscher + * Date: 2004 + * + * Acknowledgement: + * This code was derived from Wolfenstein 3-D, and was originally + * written by Id Software, Inc. + * + */ + + /* + Notes: + + This module is implemented by adlib.c + */ + +#ifndef __ADLIB_H__ +#define __ADLIB_H__ + + +#include "../../../common/arch.h" + + +#define MAX_WAV_SIZE 100000 + + +typedef struct +{ + W8 mChar, cChar, + mScale, cScale, + mAttack, cAttack, + mSus, cSus, + mWave, cWave, + nConn, + + // These are only for Muse - these bytes are really unused + voice, + mode, + unused[ 3 ]; + +} Instrument; + +typedef struct +{ + char length[4]; + char priority[2]; + +} SoundCommon; + +typedef struct +{ + SoundCommon common; + Instrument inst; + W8 block; + W8 data[ 1 ]; + +} AdLibSound; + + +extern W8 ADLIB_Init(); +extern void ADLIB_Shutdown(); + +extern W8 ADLIB_DecodeSound( AdLibSound *sound, W8 *buffer, W32 *length ); + + + +#endif /* __ADLIB_H__ */ + diff --git a/wolf3d/wolfextractor/adlib/fmopl.c b/wolf3d/wolfextractor/adlib/fmopl.c new file mode 100644 index 0000000..cf8101e --- /dev/null +++ b/wolf3d/wolfextractor/adlib/fmopl.c @@ -0,0 +1,1032 @@ +/* tab setting : 4 + * + * FM OPL2 synth + * + * Copyright (C) 1999,2000 Tatsuyuki Satoh , MultiArcadeMachineEmulator development + * Modified for Wolfenstein 3D by Steven Fuller + * Future Modifications by DarkOne for WolfGL! (wolfgl.narod.ru) + */ +#include +#include +#include +#include +#include + +#include "fmopl.h" + +#ifndef INLINE + + #define INLINE __inline + +#endif + +void logerror(const char *text, ...); + +#ifndef PI + + #define PI 3.14159265358979323846 + +#endif + +/* -------------------- for debug --------------------- */ +/* #define OPL_OUTPUT_LOG */ +#ifdef OPL_OUTPUT_LOG + static FILE *opl_dbg_fp = NULL; + static FM_OPL *opl_dbg_opl[16]; + static int opl_dbg_maxchip,opl_dbg_chip; +#endif + +/* -------------------- preliminary define section --------------------- */ +/* attack/decay rate */ +#define OPL_ARRATE 141280 /* RATE 4 = 2826.24ms @ 3.6MHz */ +#define OPL_DRRATE 1956000 /* RATE 4 = 39280.64ms @ 3.6MHz */ + +#define FREQ_BITS 24 /* frequency turn */ + +/* counter bits = 20, octave 7 */ +#define FREQ_RATE (1<<(FREQ_BITS-20)) +#define TL_BITS (FREQ_BITS+2) + +/* final output shift, limit minimum and maximum */ +#define OPL_OUTSB (TL_BITS+3-16) /* OPL output final shift 16bit */ +#define OPL_MAXOUT (0x7fff<=LOG_LEVEL ) logerror x + +/* --------------------- subroutines --------------------- */ + +INLINE int Limit( int val, int max, int min ) { + if ( val > max ) + val = max; + else if ( val < min ) + val = min; + + return val; +} + +/* ----- key on ----- */ +INLINE void OPL_KEYON(OPL_SLOT *SLOT) +{ + /* sine wave restart */ + SLOT->Cnt = 0; + /* set attack */ + SLOT->evm = ENV_MOD_AR; + SLOT->evs = SLOT->evsa; + SLOT->evc = EG_AST; + SLOT->eve = EG_AED; +} +/* ----- key off ----- */ +INLINE void OPL_KEYOFF(OPL_SLOT *SLOT) +{ + if( SLOT->evm > ENV_MOD_RR) + { + /* set envelope counter from envleope output */ + SLOT->evm = ENV_MOD_RR; + if( !(SLOT->evc&EG_DST) ) + SLOT->evc = (ENV_CURVE[SLOT->evc>>ENV_BITS]<eve = EG_DED; + SLOT->evs = SLOT->evsr; + } +} + +/* ---------- Envelope Generator & Phase Generator ---------- */ +/* return : envelope output */ +INLINE UINT32 OPL_CALC_SLOT( OPL_SLOT *SLOT ) +{ + /* calculate envelope generator */ + if( (SLOT->evc+=SLOT->evs) >= SLOT->eve ) + { + switch( SLOT->evm ){ + case ENV_MOD_AR: /* ATTACK -> DECAY1 */ + /* next DR */ + SLOT->evm = ENV_MOD_DR; + SLOT->evc = EG_DST; + SLOT->eve = SLOT->SL; + SLOT->evs = SLOT->evsd; + break; + case ENV_MOD_DR: /* DECAY -> SL or RR */ + SLOT->evc = SLOT->SL; + SLOT->eve = EG_DED; + if(SLOT->eg_typ) + { + SLOT->evs = 0; + } + else + { + SLOT->evm = ENV_MOD_RR; + SLOT->evs = SLOT->evsr; + } + break; + case ENV_MOD_RR: /* RR -> OFF */ + SLOT->evc = EG_OFF; + SLOT->eve = EG_OFF+1; + SLOT->evs = 0; + break; + } + } + /* calculate envelope */ + return SLOT->TLL+ENV_CURVE[SLOT->evc>>ENV_BITS]+(SLOT->ams ? ams : 0); +} + +/* set algorythm connection */ +static void set_algorythm( OPL_CH *CH) +{ + INT32 *carrier = &outd[0]; + CH->connect1 = CH->CON ? carrier : &feedback2; + CH->connect2 = carrier; +} + +/* ---------- frequency counter for operater update ---------- */ +INLINE void CALC_FCSLOT(OPL_CH *CH,OPL_SLOT *SLOT) +{ + int ksr; + + /* frequency step counter */ + SLOT->Incr = CH->fc * SLOT->mul; + ksr = CH->kcode >> SLOT->KSR; + + if( SLOT->ksr != ksr ) + { + SLOT->ksr = ksr; + /* attack , decay rate recalculation */ + SLOT->evsa = SLOT->AR[ksr]; + SLOT->evsd = SLOT->DR[ksr]; + SLOT->evsr = SLOT->RR[ksr]; + } + SLOT->TLL = SLOT->TL + (CH->ksl_base>>SLOT->ksl); +} + +/* set multi,am,vib,EG-TYP,KSR,mul */ +INLINE void set_mul(FM_OPL *OPL,int slot,int v) +{ + OPL_CH *CH = &OPL->P_CH[slot/2]; + OPL_SLOT *SLOT = &CH->SLOT[slot&1]; + + SLOT->mul = MUL_TABLE[v&0x0f]; + SLOT->KSR = (v&0x10) ? 0 : 2; + SLOT->eg_typ = (v&0x20)>>5; + SLOT->vib = (v&0x40); + SLOT->ams = (v&0x80); + CALC_FCSLOT(CH,SLOT); +} + +/* set ksl & tl */ +INLINE void set_ksl_tl(FM_OPL *OPL,int slot,int v) +{ + OPL_CH *CH = &OPL->P_CH[slot/2]; + OPL_SLOT *SLOT = &CH->SLOT[slot&1]; + int ksl = v>>6; /* 0 / 1.5 / 3 / 6 db/OCT */ + + SLOT->ksl = ksl ? 3-ksl : 31; + SLOT->TL = (int)((v&0x3f)*(0.75/EG_STEP)); /* 0.75db step */ + + if( !(OPL->mode&0x80) ) + { /* not CSM latch total level */ + SLOT->TLL = SLOT->TL + (CH->ksl_base>>SLOT->ksl); + } +} + +/* set attack rate & decay rate */ +INLINE void set_ar_dr(FM_OPL *OPL,int slot,int v) +{ + OPL_CH *CH = &OPL->P_CH[slot/2]; + OPL_SLOT *SLOT = &CH->SLOT[slot&1]; + int ar = v>>4; + int dr = v&0x0f; + + SLOT->AR = ar ? &OPL->AR_TABLE[ar<<2] : RATE_0; + SLOT->evsa = SLOT->AR[SLOT->ksr]; + if( SLOT->evm == ENV_MOD_AR ) SLOT->evs = SLOT->evsa; + + SLOT->DR = dr ? &OPL->DR_TABLE[dr<<2] : RATE_0; + SLOT->evsd = SLOT->DR[SLOT->ksr]; + if( SLOT->evm == ENV_MOD_DR ) SLOT->evs = SLOT->evsd; +} + +/* set sustain level & release rate */ +INLINE void set_sl_rr(FM_OPL *OPL,int slot,int v) +{ + OPL_CH *CH = &OPL->P_CH[slot/2]; + OPL_SLOT *SLOT = &CH->SLOT[slot&1]; + int sl = v>>4; + int rr = v & 0x0f; + + SLOT->SL = SL_TABLE[sl]; + if( SLOT->evm == ENV_MOD_DR ) SLOT->eve = SLOT->SL; + SLOT->RR = &OPL->DR_TABLE[rr<<2]; + SLOT->evsr = SLOT->RR[SLOT->ksr]; + if( SLOT->evm == ENV_MOD_RR ) SLOT->evs = SLOT->evsr; +} + +/* operator output calculator */ +#define OP_OUT(slot,env,con) slot->wavetable[((slot->Cnt+con)/(0x1000000/SIN_ENT))&(SIN_ENT-1)][env] +/* ---------- calculate channel ---------- */ +INLINE void OPL_CALC_CH( OPL_CH *CH ) +{ + UINT32 env_out; + OPL_SLOT *SLOT; + + feedback2 = 0; + /* SLOT 1 */ + SLOT = &CH->SLOT[SLOT1]; + env_out=OPL_CALC_SLOT(SLOT); + if( env_out < EG_ENT-1 ) + { + /* PG */ + if(SLOT->vib) SLOT->Cnt += (SLOT->Incr*vib/VIB_RATE); + else SLOT->Cnt += SLOT->Incr; + /* connection */ + if(CH->FB) + { + int feedback1 = (CH->op1_out[0]+CH->op1_out[1])>>CH->FB; + CH->op1_out[1] = CH->op1_out[0]; + *CH->connect1 += CH->op1_out[0] = OP_OUT(SLOT,env_out,feedback1); + } + else + { + *CH->connect1 += OP_OUT(SLOT,env_out,0); + } + }else + { + CH->op1_out[1] = CH->op1_out[0]; + CH->op1_out[0] = 0; + } + /* SLOT 2 */ + SLOT = &CH->SLOT[SLOT2]; + env_out=OPL_CALC_SLOT(SLOT); + if( env_out < EG_ENT-1 ) + { + /* PG */ + if(SLOT->vib) SLOT->Cnt += (SLOT->Incr*vib/VIB_RATE); + else SLOT->Cnt += SLOT->Incr; + /* connection */ + outd[0] += OP_OUT(SLOT,env_out, feedback2); + } +} + +/* ---------- calculate rythm block ---------- */ +#define WHITE_NOISE_db 6.0 +INLINE void OPL_CALC_RH( OPL_CH *CH ) +{ + UINT32 env_tam,env_sd,env_top,env_hh; + int whitenoise = (int)((rand()&1)*(WHITE_NOISE_db/EG_STEP)); + INT32 tone8; + + OPL_SLOT *SLOT; + int env_out; + + /* BD : same as FM serial mode and output level is large */ + feedback2 = 0; + /* SLOT 1 */ + SLOT = &CH[6].SLOT[SLOT1]; + env_out=OPL_CALC_SLOT(SLOT); + if( env_out < EG_ENT-1 ) + { + /* PG */ + if(SLOT->vib) SLOT->Cnt += (SLOT->Incr*vib/VIB_RATE); + else SLOT->Cnt += SLOT->Incr; + /* connectoion */ + if(CH[6].FB) + { + int feedback1 = (CH[6].op1_out[0]+CH[6].op1_out[1])>>CH[6].FB; + CH[6].op1_out[1] = CH[6].op1_out[0]; + feedback2 = CH[6].op1_out[0] = OP_OUT(SLOT,env_out,feedback1); + } + else + { + feedback2 = OP_OUT(SLOT,env_out,0); + } + }else + { + feedback2 = 0; + CH[6].op1_out[1] = CH[6].op1_out[0]; + CH[6].op1_out[0] = 0; + } + /* SLOT 2 */ + SLOT = &CH[6].SLOT[SLOT2]; + env_out=OPL_CALC_SLOT(SLOT); + if( env_out < EG_ENT-1 ) + { + /* PG */ + if(SLOT->vib) SLOT->Cnt += (SLOT->Incr*vib/VIB_RATE); + else SLOT->Cnt += SLOT->Incr; + /* connectoion */ + outd[0] += OP_OUT(SLOT,env_out, feedback2)*2; + } + + // SD (17) = mul14[fnum7] + white noise + // TAM (15) = mul15[fnum8] + // TOP (18) = fnum6(mul18[fnum8]+whitenoise) + // HH (14) = fnum7(mul18[fnum8]+whitenoise) + white noise + env_sd =OPL_CALC_SLOT(SLOT7_2) + whitenoise; + env_tam=OPL_CALC_SLOT(SLOT8_1); + env_top=OPL_CALC_SLOT(SLOT8_2); + env_hh =OPL_CALC_SLOT(SLOT7_1) + whitenoise; + + /* PG */ + if(SLOT7_1->vib) SLOT7_1->Cnt += (2*SLOT7_1->Incr*vib/VIB_RATE); + else SLOT7_1->Cnt += 2*SLOT7_1->Incr; + if(SLOT7_2->vib) SLOT7_2->Cnt += ((CH[7].fc*8)*vib/VIB_RATE); + else SLOT7_2->Cnt += (CH[7].fc*8); + if(SLOT8_1->vib) SLOT8_1->Cnt += (SLOT8_1->Incr*vib/VIB_RATE); + else SLOT8_1->Cnt += SLOT8_1->Incr; + if(SLOT8_2->vib) SLOT8_2->Cnt += ((CH[8].fc*48)*vib/VIB_RATE); + else SLOT8_2->Cnt += (CH[8].fc*48); + + tone8 = OP_OUT(SLOT8_2,whitenoise,0 ); + + /* SD */ + if( env_sd < EG_ENT-1 ) + outd[0] += OP_OUT(SLOT7_1,env_sd, 0)*8; + /* TAM */ + if( env_tam < EG_ENT-1 ) + outd[0] += OP_OUT(SLOT8_1,env_tam, 0)*2; + /* TOP-CY */ + if( env_top < EG_ENT-1 ) + outd[0] += OP_OUT(SLOT7_2,env_top,tone8)*2; + /* HH */ + if( env_hh < EG_ENT-1 ) + outd[0] += OP_OUT(SLOT7_2,env_hh,tone8)*2; +} + +/* ----------- initialize time tabls ----------- */ +static void init_timetables( FM_OPL *OPL , int ARRATE , int DRRATE ) +{ + int i; + double rate; + + /* make attack rate & decay rate tables */ + for (i = 0;i < 4;i++) OPL->AR_TABLE[i] = OPL->DR_TABLE[i] = 0; + for (i = 4;i <= 60;i++){ + rate = OPL->freqbase; /* frequency rate */ + if( i < 60 ) rate *= 1.0+(i&3)*0.25; /* b0-1 : x1 , x1.25 , x1.5 , x1.75 */ + rate *= 1<<((i>>2)-1); /* b2-5 : shift bit */ + rate *= (double)(EG_ENT<AR_TABLE[i] = (int)(rate/ARRATE); + OPL->DR_TABLE[i] = (int)(rate/DRRATE); + } + for (i = 60;i < 76;i++) + { + OPL->AR_TABLE[i] = EG_AED-1; + OPL->DR_TABLE[i] = OPL->DR_TABLE[60]; + } +#if 0 + for (i = 0;i < 64 ;i++){ /* make for overflow area */ + LOG(LOG_WAR,("rate %2d , ar %f ms , dr %f ms \n",i, + ((double)(EG_ENT<AR_TABLE[i]) * (1000.0 / OPL->rate), + ((double)(EG_ENT<DR_TABLE[i]) * (1000.0 / OPL->rate) )); + } +#endif +} + +/* ---------- generic table initialize ---------- */ +static int OPLOpenTable( void ) +{ + int s,t; + double rate; + int i,j; + double pom; + + /* allocate dynamic tables */ + if( (TL_TABLE = (INT32*)malloc(TL_MAX*2*sizeof(INT32))) == NULL) + return 0; + if( (SIN_TABLE = (INT32**)malloc(SIN_ENT*4 *sizeof(INT32 *))) == NULL) + { + free(TL_TABLE); + return 0; + } + if( (AMS_TABLE = (INT32*)malloc(AMS_ENT*2 *sizeof(INT32))) == NULL) + { + free(TL_TABLE); + free(SIN_TABLE); + return 0; + } + if( (VIB_TABLE = (INT32*)malloc(VIB_ENT*2 *sizeof(INT32))) == NULL) + { + free(TL_TABLE); + free(SIN_TABLE); + free(AMS_TABLE); + return 0; + } + /* make total level table */ + for (t = 0;t < EG_ENT-1 ;t++){ + rate = ((1< voltage */ + TL_TABLE[ t] = (int)rate; + TL_TABLE[TL_MAX+t] = -TL_TABLE[t]; +/* LOG(LOG_INF,("TotalLevel(%3d) = %x\n",t,TL_TABLE[t]));*/ + } + /* fill volume off area */ + for ( t = EG_ENT-1; t < TL_MAX ;t++){ + TL_TABLE[t] = TL_TABLE[TL_MAX+t] = 0; + } + + /* make sinwave table (total level offet) */ + /* degree 0 = degree 180 = off */ + SIN_TABLE[0] = SIN_TABLE[SIN_ENT/2] = &TL_TABLE[EG_ENT-1]; + for (s = 1;s <= SIN_ENT/4;s++){ + pom = sin(2*PI*s/SIN_ENT); /* sin */ + pom = 20*log10(1/pom); /* decibel */ + j =(int)(pom/EG_STEP); /* TL_TABLE steps */ + + /* degree 0 - 90 , degree 180 - 90 : plus section */ + SIN_TABLE[ s] = SIN_TABLE[SIN_ENT/2-s] = &TL_TABLE[j]; + /* degree 180 - 270 , degree 360 - 270 : minus section */ + SIN_TABLE[SIN_ENT/2+s] = SIN_TABLE[SIN_ENT -s] = &TL_TABLE[TL_MAX+j]; +/* LOG(LOG_INF,("sin(%3d) = %f:%f db\n",s,pom,(double)j * EG_STEP));*/ + } + for (s = 0;s < SIN_ENT;s++) + { + SIN_TABLE[SIN_ENT*1+s] = s<(SIN_ENT/2) ? SIN_TABLE[s] : &TL_TABLE[EG_ENT]; + SIN_TABLE[SIN_ENT*2+s] = SIN_TABLE[s % (SIN_ENT/2)]; + SIN_TABLE[SIN_ENT*3+s] = (s/(SIN_ENT/4))&1 ? &TL_TABLE[EG_ENT] : SIN_TABLE[SIN_ENT*2+s]; + } + + /* envelope counter -> envelope output table */ + for (i=0; i= EG_ENT ) pom = EG_ENT-1; */ + ENV_CURVE[i] = (int)pom; + /* DECAY ,RELEASE curve */ + ENV_CURVE[(EG_DST>>ENV_BITS)+i]= i; + } + /* off */ + ENV_CURVE[EG_OFF>>ENV_BITS]= EG_ENT-1; + /* make LFO ams table */ + for (i=0; ifreqbase = (OPL->rate) ? ((double)OPL->clock / OPL->rate) / 72 : 0; + + /* make time tables */ + init_timetables( OPL , OPL_ARRATE , OPL_DRRATE ); + /* make fnumber -> increment counter table */ + for( fn=0 ; fn < 1024 ; fn++ ) + { + OPL->FN_TABLE[fn] = (int)(OPL->freqbase * fn * FREQ_RATE * (1<<7) / 2); + } + /* LFO freq.table */ + OPL->amsIncr=(int)(OPL->rate ? (double)AMS_ENT*(1<rate * 3.7 * ((double)OPL->clock/3600000) : 0); + OPL->vibIncr=(int)(OPL->rate ? (double)VIB_ENT*(1<rate * 6.4 * ((double)OPL->clock/3600000) : 0); +} + +/* ---------- write to OPL registers ---------- */ +void OPLWrite(FM_OPL *OPL, int r, int v) +{ + OPL_CH *CH; + int slot; + int block_fnum; + + switch(r&0xe0) + { + case 0x00: /* 00-1f:controll */ + switch(r&0x1f) + { + case 0x01: + /* wave selector enable */ + OPL->wavesel = v&0x20; + if(!OPL->wavesel) + { + /* preset compatible mode */ + int c; + for(c=0;cmax_ch;c++) + { + OPL->P_CH[c].SLOT[SLOT1].wavetable = &SIN_TABLE[0]; + OPL->P_CH[c].SLOT[SLOT2].wavetable = &SIN_TABLE[0]; + } + } + return; + case 0x02: /* Timer 1 */ + break; + case 0x03: /* Timer 2 */ + return; + case 0x04: /* IRQ clear / mask and Timer enable */ + return; + case 0x08: /* MODE,DELTA-T : CSM,NOTESEL,x,x,smpl,da/ad,64k,rom */ + OPL->mode = v; + return; + } + break; + case 0x20: /* am,vib,ksr,eg type,mul */ + slot = slot_array[r&0x1f]; + if(slot == -1) return; + set_mul(OPL,slot,v); + return; + case 0x40: + slot = slot_array[r&0x1f]; + if(slot == -1) return; + set_ksl_tl(OPL,slot,v); + return; + case 0x60: + slot = slot_array[r&0x1f]; + if(slot == -1) return; + set_ar_dr(OPL,slot,v); + return; + case 0x80: + slot = slot_array[r&0x1f]; + if(slot == -1) return; + set_sl_rr(OPL,slot,v); + return; + case 0xa0: + switch(r) + { + case 0xbd: + /* amsep,vibdep,r,bd,sd,tom,tc,hh */ + { + UINT8 rkey = OPL->rythm^v; + OPL->ams_table = &AMS_TABLE[v&0x80 ? AMS_ENT : 0]; + OPL->vib_table = &VIB_TABLE[v&0x40 ? VIB_ENT : 0]; + OPL->rythm = v&0x3f; + if(OPL->rythm&0x20) + { +#if 0 + usrintf_showmessage("OPL Rythm mode select"); +#endif + /* BD key on/off */ + if(rkey&0x10) + { + if(v&0x10) + { + OPL->P_CH[6].op1_out[0] = OPL->P_CH[6].op1_out[1] = 0; + OPL_KEYON(&OPL->P_CH[6].SLOT[SLOT1]); + OPL_KEYON(&OPL->P_CH[6].SLOT[SLOT2]); + } + else + { + OPL_KEYOFF(&OPL->P_CH[6].SLOT[SLOT1]); + OPL_KEYOFF(&OPL->P_CH[6].SLOT[SLOT2]); + } + } + /* SD key on/off */ + if(rkey&0x08) + { + if(v&0x08) OPL_KEYON(&OPL->P_CH[7].SLOT[SLOT2]); + else OPL_KEYOFF(&OPL->P_CH[7].SLOT[SLOT2]); + }/* TAM key on/off */ + if(rkey&0x04) + { + if(v&0x04) OPL_KEYON(&OPL->P_CH[8].SLOT[SLOT1]); + else OPL_KEYOFF(&OPL->P_CH[8].SLOT[SLOT1]); + } + /* TOP-CY key on/off */ + if(rkey&0x02) + { + if(v&0x02) OPL_KEYON(&OPL->P_CH[8].SLOT[SLOT2]); + else OPL_KEYOFF(&OPL->P_CH[8].SLOT[SLOT2]); + } + /* HH key on/off */ + if(rkey&0x01) + { + if(v&0x01) OPL_KEYON(&OPL->P_CH[7].SLOT[SLOT1]); + else OPL_KEYOFF(&OPL->P_CH[7].SLOT[SLOT1]); + } + } + } + return; + } + /* keyon,block,fnum */ + if( (r&0x0f) > 8) return; + CH = &OPL->P_CH[r&0x0f]; + if(!(r&0x10)) + { /* a0-a8 */ + block_fnum = (CH->block_fnum&0x1f00) | v; + } + else + { /* b0-b8 */ + int keyon = (v>>5)&1; + block_fnum = ((v&0x1f)<<8) | (CH->block_fnum&0xff); + if(CH->keyon != keyon) + { + if( (CH->keyon=keyon) ) + { + CH->op1_out[0] = CH->op1_out[1] = 0; + OPL_KEYON(&CH->SLOT[SLOT1]); + OPL_KEYON(&CH->SLOT[SLOT2]); + } + else + { + OPL_KEYOFF(&CH->SLOT[SLOT1]); + OPL_KEYOFF(&CH->SLOT[SLOT2]); + } + } + } + /* update */ + if(CH->block_fnum != (unsigned int)block_fnum) + { + int blockRv = 7-(block_fnum>>10); + int fnum = block_fnum&0x3ff; + CH->block_fnum = block_fnum; + + CH->ksl_base = KSL_TABLE[block_fnum>>6]; + CH->fc = OPL->FN_TABLE[fnum]>>blockRv; + CH->kcode = CH->block_fnum>>9; + if( (OPL->mode&0x40) && CH->block_fnum&0x100) CH->kcode |=1; + CALC_FCSLOT(CH,&CH->SLOT[SLOT1]); + CALC_FCSLOT(CH,&CH->SLOT[SLOT2]); + } + return; + case 0xc0: + /* FB,C */ + if( (r&0x0f) > 8) return; + CH = &OPL->P_CH[r&0x0f]; + { + int feedback = (v>>1)&7; + CH->FB = feedback ? (8+1) - feedback : 0; + CH->CON = v&1; + set_algorythm(CH); + } + return; + case 0xe0: /* wave type */ + slot = slot_array[r&0x1f]; + if(slot == -1) return; + CH = &OPL->P_CH[slot/2]; + if(OPL->wavesel) + { + /* LOG(LOG_INF,("OPL SLOT %d wave select %d\n",slot,v&3)); */ + CH->SLOT[slot&1].wavetable = &SIN_TABLE[(v&0x03)*SIN_ENT]; + } + return; + } +} + +/* lock/unlock for common table */ +static int OPL_LockTable(void) +{ + num_lock++; + if(num_lock>1) return 0; + /* first time */ + cur_chip = NULL; + /* allocate total level table (128kb space) */ + if( !OPLOpenTable() ) + { + num_lock--; + return -1; + } + return 0; +} + +static void OPL_UnLockTable(void) +{ + if(num_lock) num_lock--; + if(num_lock) return; + /* last time */ + cur_chip = NULL; + OPLCloseTable(); +} + +/* ---------- update chip ----------- */ +void YM3812UpdateOne(FM_OPL *OPL, void *buffer, int length) +{ + int i; + int data; + OPLSAMPLE *buf = (OPLSAMPLE *)buffer; + UINT32 amsCnt = OPL->amsCnt; + UINT32 vibCnt = OPL->vibCnt; + UINT8 rythm = OPL->rythm&0x20; + OPL_CH *CH,*R_CH; + + if( (void *)OPL != cur_chip ){ + cur_chip = (void *)OPL; + /* channel pointers */ + S_CH = OPL->P_CH; + E_CH = &S_CH[9]; + /* rythm slot */ + SLOT7_1 = &S_CH[7].SLOT[SLOT1]; + SLOT7_2 = &S_CH[7].SLOT[SLOT2]; + SLOT8_1 = &S_CH[8].SLOT[SLOT1]; + SLOT8_2 = &S_CH[8].SLOT[SLOT2]; + /* LFO state */ + amsIncr = OPL->amsIncr; + vibIncr = OPL->vibIncr; + ams_table = OPL->ams_table; + vib_table = OPL->vib_table; + } + R_CH = rythm ? &S_CH[6] : E_CH; + for( i=0; i < length ; i++ ) + { + /* channel A channel B channel C */ + /* LFO */ + ams = ams_table[(amsCnt+=amsIncr)>>AMS_SHIFT]; + vib = vib_table[(vibCnt+=vibIncr)>>VIB_SHIFT]; + outd[0] = 0; + /* FM part */ + for(CH=S_CH ; CH < R_CH ; CH++) + OPL_CALC_CH(CH); + /* Rythn part */ + if(rythm) + OPL_CALC_RH(S_CH); + /* limit check */ + data = Limit( outd[0] , OPL_MAXOUT, OPL_MINOUT ); + /* store to sound buffer */ + buf[i] = data >> OPL_OUTSB; + } + + OPL->amsCnt = amsCnt; + OPL->vibCnt = vibCnt; +#ifdef OPL_OUTPUT_LOG + if(opl_dbg_fp) + { + for(opl_dbg_chip=0;opl_dbg_chipmode = 0; /* normal mode */ + /* reset with register write */ + OPLWrite(OPL,0x01,0); /* wavesel disable */ + OPLWrite(OPL,0x02,0); /* Timer1 */ + OPLWrite(OPL,0x03,0); /* Timer2 */ + OPLWrite(OPL,0x04,0); /* IRQ mask clear */ + for(i = 0xff ; i >= 0x20 ; i-- ) OPLWrite(OPL,i,0); + /* reset OPerator paramater */ + for(c=0; cmax_ch; c++) + { + OPL_CH *CH = &OPL->P_CH[c]; + /* OPL->P_CH[c].PAN = OPN_CENTER; */ + for(s = 0 ; s < 2 ; s++ ) + { + /* wave table */ + CH->SLOT[s].wavetable = &SIN_TABLE[0]; + /* CH->SLOT[s].evm = ENV_MOD_RR; */ + CH->SLOT[s].evc = EG_OFF; + CH->SLOT[s].eve = EG_OFF+1; + CH->SLOT[s].evs = 0; + } + } +} + +/* ---------- Create a virtual YM3812 ---------- */ +FM_OPL *OPLCreate(int type, int clock, int rate) +{ + char *ptr; + FM_OPL *OPL; + int state_size; + int max_ch = 9; /* normaly 9 channels */ + + if( OPL_LockTable() ==-1) return NULL; + /* allocate OPL state space */ + state_size = sizeof(FM_OPL); + state_size += sizeof(OPL_CH)*max_ch; + + /* allocate memory block */ + ptr = (char*)malloc(state_size); + if(ptr==NULL) return NULL; + /* clear */ + memset(ptr,0,state_size); + + OPL = (FM_OPL *)ptr; ptr+=sizeof(FM_OPL); + OPL->P_CH = (OPL_CH *)ptr; ptr+=sizeof(OPL_CH)*max_ch; + + /* set channel state pointer */ + OPL->type = type; + OPL->clock = clock; + OPL->rate = rate; + OPL->max_ch = max_ch; + /* init grobal tables */ + OPL_initalize(OPL); + /* reset chip */ + OPLResetChip(OPL); +#ifdef OPL_OUTPUT_LOG + if(!opl_dbg_fp) + { + opl_dbg_fp = fopen("opllog.opl","wb"); + opl_dbg_maxchip = 0; + } + if(opl_dbg_fp) + { + opl_dbg_opl[opl_dbg_maxchip] = OPL; + fprintf(opl_dbg_fp,"%c%c%c%c%c%c",0x00+opl_dbg_maxchip, + type, + clock&0xff, + (clock/0x100)&0xff, + (clock/0x10000)&0xff, + (clock/0x1000000)&0xff); + opl_dbg_maxchip++; + } +#endif + return OPL; +} + +/* ---------- Destroy a virtual YM3812 ---------- */ +void OPLDestroy(FM_OPL *OPL) +{ +#ifdef OPL_OUTPUT_LOG + if(opl_dbg_fp) + { + fclose(opl_dbg_fp); + opl_dbg_fp = NULL; + } +#endif + OPL_UnLockTable(); + free(OPL); +} diff --git a/wolf3d/wolfextractor/adlib/fmopl.h b/wolf3d/wolfextractor/adlib/fmopl.h new file mode 100644 index 0000000..b7682b7 --- /dev/null +++ b/wolf3d/wolfextractor/adlib/fmopl.h @@ -0,0 +1,134 @@ +/* tab setting : 4 + * + * FM OPL2 synth + * + * Copyright (C) 1999,2000 Tatsuyuki Satoh , MultiArcadeMachineEmulator development + * Modified for Wolfenstein 3D by Steven Fuller + * Future Modifications by DarkOne for WolfGL! (wolfgl.narod.ru) + */ +#ifndef __FMOPL_H_ +#define __FMOPL_H_ + +// Register addresses +// Operator stuff +#define alChar 0x20 +#define alScale 0x40 +#define alAttack 0x60 +#define alSus 0x80 +#define alWave 0xe0 +// Channel stuff +#define alFreqL 0xa0 +#define alFreqH 0xb0 +#define alFeedCon 0xc0 +// Global stuff +#define alEffects 0xbd + +#define OPL_OUTPUT_BIT 16 + +typedef unsigned char UINT8; /* unsigned 8bit */ +typedef unsigned short UINT16; /* unsigned 16bit */ +typedef unsigned long UINT32; /* unsigned 32bit */ +typedef signed char INT8; /* signed 8bit */ +typedef signed short INT16; /* signed 16bit */ +typedef signed long INT32; /* signed 32bit */ + +#if (OPL_OUTPUT_BIT==16) +typedef INT16 OPLSAMPLE; +#endif +#if (OPL_OUTPUT_BIT==8) +typedef unsigned char OPLSAMPLE; +#endif + +/* ---------- OPL one of slot ---------- */ +typedef struct fm_opl_slot +{ + INT32 TL; /* total level :TL << 8 */ + INT32 TLL; /* adjusted now TL */ + UINT8 KSR; /* key scale rate :(shift down bit) */ + INT32 *AR; /* attack rate :&AR_TABLE[AR<<2] */ + INT32 *DR; /* decay rate :&DR_TALBE[DR<<2] */ + INT32 SL; /* sustin level :SL_TALBE[SL] */ + INT32 *RR; /* release rate :&DR_TABLE[RR<<2] */ + UINT8 ksl; /* keyscale level :(shift down bits) */ + UINT8 ksr; /* key scale rate :kcode>>KSR */ + UINT32 mul; /* multiple :ML_TABLE[ML] */ + UINT32 Cnt; /* frequency count : */ + UINT32 Incr; /* frequency step : */ + /* envelope generator state */ + UINT8 eg_typ; /* envelope type flag */ + UINT8 evm; /* envelope phase */ + INT32 evc; /* envelope counter */ + INT32 eve; /* envelope counter end point */ + INT32 evs; /* envelope counter step */ + INT32 evsa; /* envelope step for AR :AR[ksr] */ + INT32 evsd; /* envelope step for DR :DR[ksr] */ + INT32 evsr; /* envelope step for RR :RR[ksr] */ + /* LFO */ + UINT8 ams; /* ams flag */ + UINT8 vib; /* vibrate flag */ + /* wave selector */ + INT32 **wavetable; +} OPL_SLOT; + +/* ---------- OPL one of channel ---------- */ +typedef struct fm_opl_channel +{ + OPL_SLOT SLOT[2]; + UINT8 CON; /* connection type */ + UINT8 FB; /* feed back :(shift down bit) */ + INT32 *connect1; /* slot1 output pointer */ + INT32 *connect2; /* slot2 output pointer */ + INT32 op1_out[2]; /* slot1 output for selfeedback */ + /* phase generator state */ + UINT32 block_fnum; /* block+fnum : */ + UINT8 kcode; /* key code : KeyScaleCode */ + UINT32 fc; /* Freq. Increment base */ + UINT32 ksl_base; /* KeyScaleLevel Base step */ + UINT8 keyon; /* key on/off flag */ +} OPL_CH; + +/* OPL state */ +typedef struct fm_opl_f { + UINT8 type; /* chip type */ + int clock; /* master clock (Hz) */ + int rate; /* sampling rate (Hz) */ + double freqbase; /* frequency base */ + UINT8 address; /* address register */ + UINT32 mode; /* Reg.08 : CSM , notesel,etc. */ + /* FM channel slots */ + OPL_CH *P_CH; /* pointer of CH */ + int max_ch; /* maximum channel */ + /* Rythm sention */ + UINT8 rythm; /* Rythm mode , key flag */ + + INT32 AR_TABLE[75]; /* attack rate tables */ + INT32 DR_TABLE[75]; /* decay rate tables */ + UINT32 FN_TABLE[1024]; /* fnumber -> increment counter */ + /* LFO */ + INT32 *ams_table; + INT32 *vib_table; + INT32 amsCnt; + INT32 amsIncr; + INT32 vibCnt; + INT32 vibIncr; + /* wave selector enable flag */ + UINT8 wavesel; +} FM_OPL; + +/* ---------- Generic interface section ---------- */ +#define OPL_TYPE_YM3812 0 + +FM_OPL *OPLCreate(int type, int clock, int rate); +void OPLDestroy(FM_OPL *OPL); + +void OPLResetChip(FM_OPL *OPL); +void OPLWrite(FM_OPL *OPL,int a,int v); +unsigned char OPLRead(FM_OPL *OPL,int a); + +void YM3812UpdateOne(FM_OPL *OPL, void *buffer, int length); + +#endif /* __FMPOL_H */ +/* end of file */ + + + diff --git a/wolf3d/wolfextractor/filesys/file.c b/wolf3d/wolfextractor/filesys/file.c new file mode 100644 index 0000000..319d127 --- /dev/null +++ b/wolf3d/wolfextractor/filesys/file.c @@ -0,0 +1,383 @@ +/* + + Copyright (C) 2004 Michael Liebscher + Copyright (C) 1997-2001 Id Software, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * file.c: Portable file system services. + * + * Author: Michael Liebscher + * Date: 2004 + * + * Acknowledgement: + * This code was derived from Quake II, and was originally + * written by Id Software, Inc. + * + */ + +#include +#include + +#include "file.h" +#include "../../../common/common_utils.h" +#include "../string/com_string.h" +#include "../memory/memory.h" + + + +/* +----------------------------------------------------------------------------- + Function: DOSTIME -Convert the date y/n/d and time h:m:s to a four byte + DOS date and time (date in high two bytes, time in low + two bytes). + + Parameters: + y -[in] year + c -[in] month + d -[in] day + h -[in] hour + m -[in] minute + s -[in] second + + Returns: dos time + + Notes: +----------------------------------------------------------------------------- +*/ +// dos time start date is January 1, 1980 +#define DOSTIME_STARTDATE 0x00210000L + +#define DOSTIME( y, c, d, h, m, s ) ( ((y) < 1980) ? DOSTIME_STARTDATE : (((W32)(y) - 1980) << 25) | ((W32)(c) << 21) | ((W32)(d) << 16) | ((W32)(h) << 11) | ((W32)(m) << 5) | ((W32)(s) >> 1) ) + + +/* +----------------------------------------------------------------------------- + Function: UnixTimeToDosTime -Converts Unix time_t into DOS format. + + Parameters: + t -[in] unix time to convert. + + Returns: + Unix time_t in DOS format, rounded up to the next two second + boundary. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC W32 UnixTimeToDosTime( time_t *t ) +{ + time_t t_even; + struct tm *s; + + // Round up to even seconds. + t_even = (time_t)(((W32)(*t) + 1) & (~1)); + + s = localtime( &t_even ); + if( s == (struct tm *)NULL ) + { + // time conversion error; use current time instead + t_even = (time_t)(((W32)time(NULL) + 1) & (~1)); + s = localtime( &t_even ); + } + + return DOSTIME( s->tm_year + 1900, s->tm_mon + 1, s->tm_mday, + s->tm_hour, s->tm_min, s->tm_sec ); +} + + + + +///////////////////////////////////////////////////////////////////// +// +// File path/name manipulation +// +///////////////////////////////////////////////////////////////////// + + +PUBLIC char *FS_SkipPath( char *pathname ) +{ + char *last; + + last = pathname; + while( *pathname ) + { + if( *pathname == '/' ) + { + last = pathname + 1; + } + pathname++; + } + + return last; +} + + +PUBLIC void FS_StripExtension( char *in, char *out ) +{ + while (*in && *in != '.') + *out++ = *in++; + *out = 0; +} + + +PUBLIC char *FS_FileExtension( char *in ) +{ + static char exten[ 8 ]; + int i; + + while (*in && *in != '.') + in++; + + if (!*in) + return ""; + + in++; + for (i=0 ; i<7 && *in ; i++,in++) + exten[i] = *in; + + exten[i] = 0; + return exten; +} + + +PUBLIC void FS_FileBase( char *in, char *out ) +{ + char *s, *s2; + + s = in + strlen( in ) - 1; + + while( s != in && *s != '.' ) + { + s--; + } + + for( s2 = s ; s2 != in && *s2 != '/' ; s2-- ) + { + ; + } + + if( s - s2 < 2 ) + { + out[ 0 ] = 0; + } + else + { + s--; + strncpy( out, s2 + 1, s - s2 ); + out[ s - s2 ] = 0; + } +} + + +PUBLIC void FS_FilePath( char *in, char *out ) +{ + char *s; + + s = in + strlen(in) - 1; + + while (s != in && *s != '/') + s--; + + strncpy (out,in, s-in); + out[s-in] = '\0'; +} + + + + + + +///////////////////////////////////////////////////////////////////// +// +// File I/O functions +// +///////////////////////////////////////////////////////////////////// + + +/* +----------------------------------------------------------------------------- + Function: FS_FileLength() -Calculate file position. + + Parameters: filestream -[in] Pointer to valid FILE structure. + + Returns: The position as an offset relative to the beginning of + the stream. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC SW32 FS_FileLength( FILE *filestream ) +{ + SW32 pos; + SW32 end; + + pos = ftell( filestream ); + fseek( filestream, 0, SEEK_END ); + + end = ftell( filestream ); + fseek( filestream, pos, SEEK_SET ); + + return end; +} + +/* +----------------------------------------------------------------------------- + Function: + + Parameters: + + Returns: + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC void FS_Read( void *buffer, int len, FILE *f ) +{ + int block, remaining; + int read; + W8 *buf; + int tries; + + buf = (PW8)buffer; + + // read in chunks for progress bar + remaining = len; + tries = 0; + + + #define MAX_READ 0x10000 // read in blocks of 64k + + while( remaining ) + { + block = remaining; + if( block > MAX_READ ) + { + block = MAX_READ; + } + read = fread( buf, 1, block, f ); + if( read == 0 ) + { + // we might have been trying to read from a CD + if( ! tries ) + { + tries = 1; + } + else + { + printf( "FS_Read: 0 bytes read" ); + } + } + + if( read == -1 ) + { + printf( "FS_Read: -1 bytes read" ); + } + + remaining -= read; + buf += read; + } +} + +/* +----------------------------------------------------------------------------- + Function: + + Parameters: + + Returns: + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC SW32 FS_FOpenFile( const char *filename, FILE **file ) +{ + *file = fopen( filename, "rb" ); + if( ! *file ) + { + *file = NULL; + + return -1; + } + + return FS_FileLength( *file ); + +} + +/* +----------------------------------------------------------------------------- + Function: + + Parameters: + + Returns: + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC SW32 FS_LoadFile( const char *path, void **buffer ) +{ + FILE *fhandle; + W8 *buf; + long length; + + buf = NULL; // quiet compiler warning + +// look for it in the filesystem or pack files + length = FS_FOpenFile( path, &fhandle ); + if( ! fhandle ) + { + if( buffer ) + { + *buffer = NULL; + } + + return -1; + } + + if( ! buffer ) + { + fclose( fhandle ); + return length; + } + + buf = MM_MALLOC( length ); + *buffer = buf; + + FS_Read( buf, length, fhandle ); + + fclose( fhandle ); + + return length; +} + +/* +----------------------------------------------------------------------------- + Function: + + Parameters: + + Returns: + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC void FS_FreeFile( void *buffer ) +{ + MM_FREE( buffer ); +} diff --git a/wolf3d/wolfextractor/filesys/file.h b/wolf3d/wolfextractor/filesys/file.h new file mode 100644 index 0000000..1bb6e14 --- /dev/null +++ b/wolf3d/wolfextractor/filesys/file.h @@ -0,0 +1,118 @@ +/* + + Copyright (C) 2004 Michael Liebscher + Copyright (C) 1997-2001 Id Software, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * file.h: Access methods to file system services. + * + * Author: Michael Liebscher + * Date: 2004 + * + * Acknowledgement: + * This code was derived from Quake II, and was originally + * written by Id Software, Inc. + * + */ + +/* + Notes: + This module is implemented by file.c + + Non-portable methods are implemented in: + win32/win_file.c for Windows + unix/unix_file.c for unix + +*/ + +#ifndef __FILE_H__ +#define __FILE_H__ + +#include +#include + +#include "../../../common/arch.h" + + +// filename/path manipulation +extern char *FS_SkipPath( char *pathname ); +extern void FS_StripExtension( char *in, char *out ); +extern char *FS_FileExtension( char *in ); +extern void FS_FileBase( char *in, char *out ); +extern void FS_FilePath( char *in, char *out ); + + + +extern W32 UnixTimeToDosTime( time_t *t ); + + +///////////////////////////////////////////////////////////////////// +// +// PORTABLE FILE SYSTEM SERVICES +// +///////////////////////////////////////////////////////////////////// +extern SW32 FS_FileLength( FILE *filestream ); +extern void FS_Read( void *buffer, int len, FILE *f ); +extern SW32 FS_FOpenFile( const char *filename, FILE **file ); +extern SW32 FS_LoadFile( const char *path, void **buffer ); +extern void FS_FreeFile( void *buffer ); + + + + + + + +///////////////////////////////////////////////////////////////////// +// +// NON-PORTABLE FILE SYSTEM SERVICES +// +///////////////////////////////////////////////////////////////////// +extern W8 FS_Mkdir( const char *dirname ); +extern W8 FS_ChangeCurrentDirectory( const char *path ); + +extern _boolean FS_DeleteFile( const char *filename ); +extern _boolean FS_RemoveDirectory( const char *pathname ); + + +// directory/file attributes +#define FA_ARCH 0x01 +#define FA_HIDDEN 0x02 +#define FA_RDONLY 0x04 +#define FA_DIR 0x08 +#define FA_SYSTEM 0x10 + +// pass in an attribute mask of things you wish to REJECT +extern char *FS_FindFirst( const char *path, W32 musthave, W32 canthave ); +extern char *FS_FindNext( W32 musthave, W32 canthave ); +extern void FS_FindClose( void ); + + +struct filestats +{ + W32 attributes; /* The following attributes are defined as FA_ARCH to FA_SYSTEM*/ + W32 creationtime; /* Time when file data last modified */ + W32 lastaccesstime; /* Time when file data last accessed */ + W32 lastwritetime; /* Time when file data last modified */ +}; + +extern _boolean FS_GetFileAttributes( const char *filename, struct filestats *fs ); + + +#endif /* __FILE_H__ */ diff --git a/wolf3d/wolfextractor/filesys/unix/glob.c b/wolf3d/wolfextractor/filesys/unix/glob.c new file mode 100644 index 0000000..068e300 --- /dev/null +++ b/wolf3d/wolfextractor/filesys/unix/glob.c @@ -0,0 +1,183 @@ +/* +Copyright (C) 1997-2001 Id Software, Inc. + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +#include +#include "glob.h" + +/* Like glob_match, but match PATTERN against any final segment of TEXT. */ +static int glob_match_after_star(char *pattern, char *text) +{ + register char *p = pattern, *t = text; + register char c, c1; + + while ((c = *p++) == '?' || c == '*') + if (c == '?' && *t++ == '\0') + return 0; + + if (c == '\0') + return 1; + + if (c == '\\') + c1 = *p; + else + c1 = c; + + while (1) { + if ((c == '[' || *t == c1) && glob_match(p - 1, t)) + return 1; + if (*t++ == '\0') + return 0; + } +} + +/* Return nonzero if PATTERN has any special globbing chars in it. */ +static int glob_pattern_p(char *pattern) +{ + register char *p = pattern; + register char c; + int open = 0; + + while ((c = *p++) != '\0') + switch (c) { + case '?': + case '*': + return 1; + + case '[': /* Only accept an open brace if there is a close */ + open++; /* brace to match it. Bracket expressions must be */ + continue; /* complete, according to Posix.2 */ + case ']': + if (open) + return 1; + continue; + + case '\\': + if (*p++ == '\0') + return 0; + } + + return 0; +} + +/* Match the pattern PATTERN against the string TEXT; + return 1 if it matches, 0 otherwise. + + A match means the entire string TEXT is used up in matching. + + In the pattern string, `*' matches any sequence of characters, + `?' matches any character, [SET] matches any character in the specified set, + [!SET] matches any character not in the specified set. + + A set is composed of characters or ranges; a range looks like + character hyphen character (as in 0-9 or A-Z). + [0-9a-zA-Z_] is the set of characters allowed in C identifiers. + Any other character in the pattern must be matched exactly. + + To suppress the special syntactic significance of any of `[]*?!-\', + and match the character exactly, precede it with a `\'. +*/ + +int glob_match(char *pattern, char *text) +{ + register char *p = pattern, *t = text; + register char c; + + while ((c = *p++) != '\0') + switch (c) { + case '?': + if (*t == '\0') + return 0; + else + ++t; + break; + + case '\\': + if (*p++ != *t++) + return 0; + break; + + case '*': + return glob_match_after_star(p, t); + + case '[': + { + register char c1 = *t++; + int invert; + + if (!c1) + return (0); + + invert = ((*p == '!') || (*p == '^')); + if (invert) + p++; + + c = *p++; + while (1) { + register char cstart = c, cend = c; + + if (c == '\\') { + cstart = *p++; + cend = cstart; + } + if (c == '\0') + return 0; + + c = *p++; + if (c == '-' && *p != ']') { + cend = *p++; + if (cend == '\\') + cend = *p++; + if (cend == '\0') + return 0; + c = *p++; + } + if (c1 >= cstart && c1 <= cend) + goto match; + if (c == ']') + break; + } + if (!invert) + return 0; + break; + + match: + /* Skip the rest of the [...] construct that already matched. */ + while (c != ']') { + if (c == '\0') + return 0; + c = *p++; + if (c == '\0') + return 0; + else if (c == '\\') + ++p; + } + if (invert) + return 0; + break; + } + + default: + if (c != *t++) + return 0; + } + + return *t == '\0'; +} + diff --git a/wolf3d/wolfextractor/filesys/unix/glob.h b/wolf3d/wolfextractor/filesys/unix/glob.h new file mode 100644 index 0000000..f59cb10 --- /dev/null +++ b/wolf3d/wolfextractor/filesys/unix/glob.h @@ -0,0 +1,21 @@ +/* +Copyright (C) 1997-2001 Id Software, Inc. + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +int glob_match( char *pattern, char *text ); diff --git a/wolf3d/wolfextractor/filesys/unix/unix_file.c b/wolf3d/wolfextractor/filesys/unix/unix_file.c new file mode 100644 index 0000000..5fdf2cb --- /dev/null +++ b/wolf3d/wolfextractor/filesys/unix/unix_file.c @@ -0,0 +1,337 @@ +/* + + Copyright (C) 2004 Michael Liebscher + Copyright (C) 1997-2001 Id Software, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * unix_file.c: Handles non-portable file services. + * + * Author: Michael Liebscher + * Date: 2004 + * + * Acknowledgement: + * Portion of this code was derived from Quake II, and was originally + * written by Id Software, Inc. + * + */ + +#include +#include +#include +#include +#include +#include +#include + + + +#include "../../../../common/arch.h" +#include "../../../../common/common_utils.h" +#include "../../string/com_string.h" +#include "glob.h" +#include "../file.h" + +PRIVATE char findbase[ 128 ]; +PRIVATE char findpath[ 128 ]; +PRIVATE char findpattern[ 128 ]; +PRIVATE DIR *fdir; + + +/* +----------------------------------------------------------------------------- + Function: FS_Mkdir() -Creates a new directory. + + Parameters: dirname -[in] Pointer to a NUL-terminated string that specifies + the path of the directory to be created. + + Returns: On success nonzero, otherwise zero. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC W8 FS_Mkdir( const char *dirname ) +{ + int ret_val = mkdir( dirname, S_IRUSR | S_IWUSR | S_IXUSR ); + + if( ret_val == -1 && errno == EEXIST ) + { + return 1; + } + + return (W8)(! ret_val); +} + +/* +----------------------------------------------------------------------------- + Function: FS_ChangeCurrentDirectory() -Changes the current directory + + Parameters: path -[in] Pointer to a NUL-terminated string that specifies + the path to the new directory. + + Returns: On success nonzero, otherwise zero. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC W8 FS_ChangeCurrentDirectory( const char *path ) +{ + return ! chdir( path ); +} + +/* +----------------------------------------------------------------------------- + Function: FS_GetFileAttributes() -Retrieves attributes for a specified file + or directory. + + Parameters: filename -[in] Pointer to a NUL-terminated string that + specifies a file or directory. + fs -[in] Pointer to a filestats structure that receives the + attribute information. + + + Returns: On success true, otherwise false. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC _boolean FS_GetFileAttributes( const char *filename, struct filestats *fs ) +{ + struct stat st; + + fs->attributes = 0; + + if( stat( filename, &st ) == -1 ) + { + return false; + } + + if( st.st_mode & S_IFDIR ) + { + fs->attributes |= FA_DIR; + } + + fs->creationtime = st.st_ctime; + fs->lastaccesstime = st.st_atime; + fs->lastwritetime = st.st_ctime; + + return true; +} + +/* +----------------------------------------------------------------------------- + Function: CompareAttributes() -Compare directory and file attributes. + + Parameters: path -[in] Specifies the path to compare file attributes. + musthave -[in] File or directory must have these attributes. + canthave- [in] File or directory can not have these attributes. + + Returns: On success true, otherwise false. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE _boolean CompareAttributes( const char *path, W32 musthave, W32 canthave ) +{ + struct stat st; + + if( stat( path, &st ) == -1 ) + { + return false; + } + + if( ( st.st_mode & S_IFDIR ) && ( canthave & FA_DIR ) ) + { + return false; + } + + if( ( musthave & FA_DIR ) && !( st.st_mode & S_IFDIR ) ) + { + return false; + } + + return true; +} + +/* +----------------------------------------------------------------------------- + Function: FS_FindFirstFile() -Searches a directory for a file. + + Parameters: path -[in] Pointer to a NUL-terminated string that specifies + a valid directory or path and file name. + musthave -[in] File or directory must have these attributes. + canthave- [in] File or directory can not have these attributes. + + Returns: On success string of file name or directory, otherwise NULL. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC char *FS_FindFirst( const char *path, W32 musthave, W32 canthave ) +{ + struct dirent *d; + char *p; + + if( fdir ) + { + printf( "FS_FindFirst without close\n" ); + + return NULL; + } + + FS_FilePath( path, findbase ); + cs_strlcpy( findpattern, FS_SkipPath( path ), sizeof( findpattern ) ); + + if( ! *findbase ) + { + if( (fdir = opendir( "." )) == NULL ) + { + return NULL; + } + } + else + { + if( (fdir = opendir( findbase )) == NULL ) + { + return NULL; + } + } + + while( (d = readdir( fdir )) != NULL ) + { + if( ! *findpattern || glob_match( findpattern, d->d_name ) ) + { + if( ! *findbase ) + { + cs_strlcpy( findpath, d->d_name, sizeof( findpath ) ); + } + else + { + cs_snprintf( findpath, sizeof( findpath ), "%s/%s", findbase, d->d_name ); + } + + if( CompareAttributes( findpath, musthave, canthave ) ) + { + return findpath; + } + } + } + + return NULL; + +} + +/* +----------------------------------------------------------------------------- + Function: FS_FindNext -Continues a file search from a previous call to + the FS_FindFirst function. + + Parameters: musthave -[in] File or directory must have these attributes. + canthave- [in] File or directory can not have these attributes. + + Returns: On success string of file name or directory, otherwise NULL. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC char *FS_FindNext( W32 musthave, W32 canthave ) +{ + struct dirent *d; + + if( fdir == NULL ) + { + return NULL; + } + + while( (d = readdir( fdir ) ) != NULL) + { + if( ! *findpattern || glob_match( findpattern, d->d_name ) ) + { + if( ! *findbase ) + { + cs_strlcpy( findpath, d->d_name, sizeof( findpath ) ); + } + else + { + cs_snprintf( findpath, sizeof( findpath ), "%s/%s", findbase, d->d_name ); + } + + if( CompareAttributes( findpath, musthave, canthave ) ) + { + return findpath; + } + } + } + + return NULL; +} + +/* +----------------------------------------------------------------------------- + Function: FS_FindClose() -Closes the search handle. + + Parameters: Nothing. + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC void FS_FindClose( void ) +{ + if( fdir ) + { + closedir( fdir ); + } + + fdir = NULL; +} + +/* +----------------------------------------------------------------------------- + Function: FS_DeleteFile() -Deletes an existing file. + + Parameters: filename -[in] Pointer to a NUL-terminated string that + specifies the file to be deleted. + + Returns: If successful the return value is nonzero, otherwise zero. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC _boolean FS_DeleteFile( const char *filename ) +{ + return( ! unlink( filename ) ); +} + +/* +----------------------------------------------------------------------------- + Function: FS_RemoveDirectory() -Deletes an existing empty directory. + + Parameters: pathname -[in] Pointer to a NUL-terminated string that + specifies the directory to be deleted. + + Returns: If successful the return value is nonzero, otherwise zero. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC _boolean FS_RemoveDirectory( const char *pathname ) +{ + return( ! rmdir( pathname ) ); +} diff --git a/wolf3d/wolfextractor/filesys/win32/win_file.c b/wolf3d/wolfextractor/filesys/win32/win_file.c new file mode 100644 index 0000000..abbbe83 --- /dev/null +++ b/wolf3d/wolfextractor/filesys/win32/win_file.c @@ -0,0 +1,398 @@ +/* + + Copyright (C) 2004 Michael Liebscher + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * win_file.c: Handles non-portable file services. + * + * Author: Michael Liebscher + * Date: 2004 + * + * + */ + +#include +#include + +#include "../file.h" +#include "../../string/com_string.h" +#include "../../../../common/arch.h" +#include "../../../../common/common_utils.h" + + + +PRIVATE char findbase[ MAX_PATH ]; +PRIVATE char findpath[ MAX_PATH ]; +PRIVATE HANDLE FindHandle; + + +/* +----------------------------------------------------------------------------- + Function: FS_Mkdir() -Creates a new directory. + + Parameters: dirname -[in] Pointer to a NUL-terminated string that specifies + the path of the directory to be created. + + Returns: On success nonzero, otherwise zero. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC W8 FS_Mkdir( const char *dirname ) +{ + BOOL ret_val = CreateDirectory( dirname, NULL ); + + if( ret_val == 0 && GetLastError() == ERROR_ALREADY_EXISTS ) + { + return 1; + } + + return (W8)ret_val; +} + +/* +----------------------------------------------------------------------------- + Function: FS_ChangeCurrentDirectory() -Changes the current directory + + Parameters: path -[in] Pointer to a NUL-terminated string that specifies + the path to the new directory. + + Returns: On success nonzero, otherwise zero. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC W8 FS_ChangeCurrentDirectory( const char *path ) +{ + return SetCurrentDirectory( path ); +} + + + +/* +----------------------------------------------------------------------------- + Function: FS_FileTimeToUnixTime() -Converts file time to UNIX time format. + + Parameters: FILETIME -[in] Pointer to a FILETIME structure containing the + file time to convert to UNIX date and time format. + + Returns: On success nonzero, otherwise zero. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE W32 FS_FileTimeToUnixTime( FILETIME *ft ) +{ + time_t days; + SYSTEMTIME st; + + static const W16 ydays[] = + { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }; + + + + if( ! FileTimeToSystemTime( ft, &st ) ) + { + return 0; + } + + + // Protection from overflow + if( (ft->dwHighDateTime < 0x019DB1DEUL) || + ((ft->dwHighDateTime == 0x019DB1DEUL) && + (ft->dwLowDateTime < 0xD53E8000UL)) ) + { + return 0; + } + + if( (ft->dwHighDateTime > 0x0236485EUL) || + ((ft->dwHighDateTime == 0x0236485EUL) && + (ft->dwLowDateTime > 0xD4A5E980UL)) ) + { + return 0; + } + + + #define leap(y) (((y)%4 == 0 && (y)%100 != 0) || (y)%400 == 0) + #define nleap(y) (((y)-1969)/4 - ((y)-1901)/100 + ((y)-1601)/400) + + // set 'days' to the number of days into the year + days = st.wDay - 1 + ydays[ st.wMonth-1 ] + (st.wMonth > 2 && leap( st.wYear )); + + // now set 'days' to the number of days since 1 Jan 1970 + days += 365 * (time_t)(st.wYear - 1970) + (time_t)(nleap(st.wYear)); + + + return (time_t)(86400L * days + 3600L * (time_t)st.wHour + + (time_t)(60 * st.wMinute + st.wSecond)); +} + +/* +----------------------------------------------------------------------------- + Function: FS_GetFileAttributes() -Retrieves attributes for a specified file + or directory. + + Parameters: filename -[in] Pointer to a NUL-terminated string that + specifies a file or directory. + fs -[in] Pointer to a filestats structure that receives the + attribute information. + + + Returns: On success true, otherwise false. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC _boolean FS_GetFileAttributes( const char *filename, struct filestats *fs ) +{ + WIN32_FILE_ATTRIBUTE_DATA fdata; + + fs->attributes = 0; + + if( ! GetFileAttributesEx( filename, GetFileExInfoStandard, &fdata ) ) + { + return false; + } + + + if( fdata.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE ) + fs->attributes |= FA_ARCH; + if( fdata.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN ) + fs->attributes |= FA_HIDDEN; + if( fdata.dwFileAttributes & FILE_ATTRIBUTE_READONLY ) + fs->attributes |= FA_RDONLY; + if( fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) + fs->attributes |= FA_DIR; + if( fdata.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM ) + fs->attributes |= FA_SYSTEM; + + + // Convert FILETIME to UNIX time. + fs->creationtime = FS_FileTimeToUnixTime( &fdata.ftCreationTime ); + fs->lastaccesstime = FS_FileTimeToUnixTime( &fdata.ftLastAccessTime ); + fs->lastwritetime = FS_FileTimeToUnixTime( &fdata.ftLastWriteTime ); + + return true; +} + +/* +----------------------------------------------------------------------------- + Function: CompareAttributes() -Compare directory and file attributes. + + Parameters: found -[in] Specifies the file attributes of the file found. + musthave -[in] File or directory must have these attributes. + canthave- [in] File or directory can not have these attributes. + + Returns: On success true, otherwise false. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE _boolean CompareAttributes( W32 found, W32 musthave, W32 canthave ) +{ + if( ( found & FILE_ATTRIBUTE_READONLY ) && ( canthave & FA_RDONLY ) ) + return false; + + if( ( found & FILE_ATTRIBUTE_HIDDEN ) && ( canthave & FA_HIDDEN ) ) + return false; + + if( ( found & FILE_ATTRIBUTE_SYSTEM ) && ( canthave & FA_SYSTEM ) ) + return false; + + if( ( found & FILE_ATTRIBUTE_DIRECTORY ) && ( canthave & FA_DIR ) ) + return false; + + if( ( found & FILE_ATTRIBUTE_ARCHIVE ) && ( canthave & FA_ARCH ) ) + return false; + + + + if( ( musthave & FA_RDONLY ) && !( found & FILE_ATTRIBUTE_READONLY ) ) + return false; + + if( ( musthave & FA_HIDDEN ) && !( found & FILE_ATTRIBUTE_HIDDEN ) ) + return false; + + if( ( musthave & FA_SYSTEM ) && !( found & FILE_ATTRIBUTE_SYSTEM ) ) + return false; + + if( ( musthave & FA_DIR ) && !( found & FILE_ATTRIBUTE_DIRECTORY ) ) + return false; + + if( ( musthave & FA_ARCH ) && !( found & FILE_ATTRIBUTE_ARCHIVE ) ) + return false; + + return true; +} + +/* +----------------------------------------------------------------------------- + Function: FS_FindFirstFile() -Searches a directory for a file. + + Parameters: path -[in] Pointer to a NUL-terminated string that specifies + a valid directory or path and file name. + musthave -[in] File or directory must have these attributes. + canthave- [in] File or directory can not have these attributes. + + Returns: On success string of file name or directory, otherwise NULL. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC char *FS_FindFirst( const char *path, W32 musthave, W32 canthave ) +{ + WIN32_FIND_DATA FindFileData; + + if( FindHandle ) + { + printf( "FS_FindFirst without close\n" ); + + return NULL; + } + + FS_FilePath( path, findbase ); + + FindHandle = FindFirstFile( path, &FindFileData ); + + if( FindHandle == INVALID_HANDLE_VALUE ) + { + return NULL; + } + + + + if( CompareAttributes( FindFileData.dwFileAttributes, musthave, canthave ) ) + { + if( ! *findbase ) + { + cs_strlcpy( findpath, FindFileData.cFileName, sizeof( findpath ) ); + } + else + { + cs_snprintf( findpath, sizeof( findpath ), "%s/%s", findbase, FindFileData.cFileName ); + } + + return findpath; + } + + + return FS_FindNext( musthave, canthave ); +} + +/* +----------------------------------------------------------------------------- + Function: FS_FindNext -Continues a file search from a previous call to + the FS_FindFirst function. + + Parameters: musthave -[in] File or directory must have these attributes. + canthave- [in] File or directory can not have these attributes. + + Returns: On success string of file name or directory, otherwise NULL. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC char *FS_FindNext( W32 musthave, W32 canthave ) +{ + WIN32_FIND_DATA FindFileData; + + if( FindHandle == INVALID_HANDLE_VALUE ) + { + return NULL; + } + + while( 1 ) + { + if( FindNextFile( FindHandle, &FindFileData ) == 0 ) + { + return NULL; + } + + if( CompareAttributes( FindFileData.dwFileAttributes, musthave, canthave ) ) + { + break; + } + } + + if( ! *findbase ) + { + cs_snprintf( findpath, sizeof( findpath ), "%s", FindFileData.cFileName ); + } + else + { + cs_snprintf( findpath, sizeof( findpath ), "%s/%s", findbase, FindFileData.cFileName ); + } + + return findpath; +} + +/* +----------------------------------------------------------------------------- + Function: FS_FindClose() -Closes the search handle. + + Parameters: Nothing. + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC void FS_FindClose( void ) +{ + if( FindHandle != INVALID_HANDLE_VALUE ) + { + FindClose( FindHandle ); + } + + FindHandle = 0; +} + +/* +----------------------------------------------------------------------------- + Function: FS_DeleteFile() -Deletes an existing file. + + Parameters: filename -[in] Pointer to a NUL-terminated string that + specifies the file to be deleted. + + Returns: If successful the return value is nonzero, otherwise zero. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC _boolean FS_DeleteFile( const char *filename ) +{ + return DeleteFile( filename ); +} + +/* +----------------------------------------------------------------------------- + Function: FS_RemoveDirectory() -Deletes an existing empty directory. + + Parameters: pathname -[in] Pointer to a NUL-terminated string that + specifies the directory to be deleted. + + Returns: If successful the return value is nonzero, otherwise zero. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC _boolean FS_RemoveDirectory( const char *pathname ) +{ + return RemoveDirectory( pathname ); +} diff --git a/wolf3d/wolfextractor/hq2x.c b/wolf3d/wolfextractor/hq2x.c new file mode 100644 index 0000000..f220eb6 --- /dev/null +++ b/wolf3d/wolfextractor/hq2x.c @@ -0,0 +1,2917 @@ +/* + hq2x filter + ---------------------------------------------------------- + Copyright (C) 2003 MaxSt ( maxst@hiend3d.com ) + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + + + +#include +#include + + + +#define INLINE __inline + + +static int LUT16to24[65536]; +static int RGBtoYUV[65536]; +static int YUV1, YUV2; +const int Ymask = 0x00FF0000; +const int Umask = 0x0000FF00; +const int Vmask = 0x000000FF; +const int trY = 0x00300000; +const int trU = 0x00000700; +const int trV = 0x00000006; + +INLINE void Interp1( unsigned char *pc, int c1, int c2 ) +{ + *((int*)pc) = (c1*3+c2) >> 2; +} + +INLINE void Interp2(unsigned char *pc, int c1, int c2, int c3) +{ + *((int*)pc) = (c1*2+c2+c3) >> 2; +} + +INLINE void Interp5(unsigned char *pc, int c1, int c2) +{ + *((int*)pc) = (c1+c2) >> 1; +} + +INLINE void Interp6(unsigned char *pc, int c1, int c2, int c3) +{ + //*((int*)pc) = (c1*5+c2*2+c3)/8; + + *((int*)pc) = ((((c1 & 0x00FF00)*5 + (c2 & 0x00FF00)*2 + (c3 & 0x00FF00) ) & 0x0007F800) + + (((c1 & 0xFF00FF)*5 + (c2 & 0xFF00FF)*2 + (c3 & 0xFF00FF) ) & 0x07F807F8)) >> 3; +} + +INLINE void Interp7(unsigned char *pc, int c1, int c2, int c3) +{ + //*((int*)pc) = (c1*6+c2+c3)/8; + + *((int*)pc) = ((((c1 & 0x00FF00)*6 + (c2 & 0x00FF00) + (c3 & 0x00FF00) ) & 0x0007F800) + + (((c1 & 0xFF00FF)*6 + (c2 & 0xFF00FF) + (c3 & 0xFF00FF) ) & 0x07F807F8)) >> 3; +} + +INLINE void Interp9(unsigned char *pc, int c1, int c2, int c3) +{ + //*((int*)pc) = (c1*2+(c2+c3)*3)/8; + + *((int*)pc) = ((((c1 & 0x00FF00)*2 + ((c2 & 0x00FF00) + (c3 & 0x00FF00))*3 ) & 0x0007F800) + + (((c1 & 0xFF00FF)*2 + ((c2 & 0xFF00FF) + (c3 & 0xFF00FF))*3 ) & 0x07F807F8)) >> 3; +} + +INLINE void Interp10(unsigned char *pc, int c1, int c2, int c3) +{ + //*((int*)pc) = (c1*14+c2+c3)/16; + + *((int*)pc) = ((((c1 & 0x00FF00)*14 + (c2 & 0x00FF00) + (c3 & 0x00FF00) ) & 0x000FF000) + + (((c1 & 0xFF00FF)*14 + (c2 & 0xFF00FF) + (c3 & 0xFF00FF) ) & 0x0FF00FF0)) >> 4; +} + + +#define PIXEL00_0 *((int*)(pOut)) = c[5]; +#define PIXEL00_10 Interp1(pOut, c[5], c[1]); +#define PIXEL00_11 Interp1(pOut, c[5], c[4]); +#define PIXEL00_12 Interp1(pOut, c[5], c[2]); +#define PIXEL00_20 Interp2(pOut, c[5], c[4], c[2]); +#define PIXEL00_21 Interp2(pOut, c[5], c[1], c[2]); +#define PIXEL00_22 Interp2(pOut, c[5], c[1], c[4]); +#define PIXEL00_60 Interp6(pOut, c[5], c[2], c[4]); +#define PIXEL00_61 Interp6(pOut, c[5], c[4], c[2]); +#define PIXEL00_70 Interp7(pOut, c[5], c[4], c[2]); +#define PIXEL00_90 Interp9(pOut, c[5], c[4], c[2]); +#define PIXEL00_100 Interp10(pOut, c[5], c[4], c[2]); +#define PIXEL01_0 *((int*)(pOut+4)) = c[5]; +#define PIXEL01_10 Interp1(pOut+4, c[5], c[3]); +#define PIXEL01_11 Interp1(pOut+4, c[5], c[2]); +#define PIXEL01_12 Interp1(pOut+4, c[5], c[6]); +#define PIXEL01_20 Interp2(pOut+4, c[5], c[2], c[6]); +#define PIXEL01_21 Interp2(pOut+4, c[5], c[3], c[6]); +#define PIXEL01_22 Interp2(pOut+4, c[5], c[3], c[2]); +#define PIXEL01_60 Interp6(pOut+4, c[5], c[6], c[2]); +#define PIXEL01_61 Interp6(pOut+4, c[5], c[2], c[6]); +#define PIXEL01_70 Interp7(pOut+4, c[5], c[2], c[6]); +#define PIXEL01_90 Interp9(pOut+4, c[5], c[2], c[6]); +#define PIXEL01_100 Interp10(pOut+4, c[5], c[2], c[6]); +#define PIXEL10_0 *((int*)(pOut+BpL)) = c[5]; +#define PIXEL10_10 Interp1(pOut+BpL, c[5], c[7]); +#define PIXEL10_11 Interp1(pOut+BpL, c[5], c[8]); +#define PIXEL10_12 Interp1(pOut+BpL, c[5], c[4]); +#define PIXEL10_20 Interp2(pOut+BpL, c[5], c[8], c[4]); +#define PIXEL10_21 Interp2(pOut+BpL, c[5], c[7], c[4]); +#define PIXEL10_22 Interp2(pOut+BpL, c[5], c[7], c[8]); +#define PIXEL10_60 Interp6(pOut+BpL, c[5], c[4], c[8]); +#define PIXEL10_61 Interp6(pOut+BpL, c[5], c[8], c[4]); +#define PIXEL10_70 Interp7(pOut+BpL, c[5], c[8], c[4]); +#define PIXEL10_90 Interp9(pOut+BpL, c[5], c[8], c[4]); +#define PIXEL10_100 Interp10(pOut+BpL, c[5], c[8], c[4]); +#define PIXEL11_0 *((int*)(pOut+BpL+4)) = c[5]; +#define PIXEL11_10 Interp1(pOut+BpL+4, c[5], c[9]); +#define PIXEL11_11 Interp1(pOut+BpL+4, c[5], c[6]); +#define PIXEL11_12 Interp1(pOut+BpL+4, c[5], c[8]); +#define PIXEL11_20 Interp2(pOut+BpL+4, c[5], c[6], c[8]); +#define PIXEL11_21 Interp2(pOut+BpL+4, c[5], c[9], c[8]); +#define PIXEL11_22 Interp2(pOut+BpL+4, c[5], c[9], c[6]); +#define PIXEL11_60 Interp6(pOut+BpL+4, c[5], c[8], c[6]); +#define PIXEL11_61 Interp6(pOut+BpL+4, c[5], c[6], c[8]); +#define PIXEL11_70 Interp7(pOut+BpL+4, c[5], c[6], c[8]); +#define PIXEL11_90 Interp9(pOut+BpL+4, c[5], c[6], c[8]); +#define PIXEL11_100 Interp10(pOut+BpL+4, c[5], c[6], c[8]); + + + +int Diff( unsigned int w1, unsigned int w2 ) +{ + YUV1 = RGBtoYUV[w1]; + YUV2 = RGBtoYUV[w2]; + return ( ( abs((YUV1 & Ymask) - (YUV2 & Ymask)) > trY ) || + ( abs((YUV1 & Umask) - (YUV2 & Umask)) > trU ) || + ( abs((YUV1 & Vmask) - (YUV2 & Vmask)) > trV ) ); +} + +void hq2x_32( unsigned char *pIn, unsigned char *pOut, int Xres, int Yres, int BpL ) +{ + int i, j, k; + int prevline, nextline; + int w[10]; + int c[10]; + int pattern; + int flag; + + // +----+----+----+ + // | | | | + // | w1 | w2 | w3 | + // +----+----+----+ + // | | | | + // | w4 | w5 | w6 | + // +----+----+----+ + // | | | | + // | w7 | w8 | w9 | + // +----+----+----+ + + for( j = 0; j < Yres; ++j ) + { + if( j > 0 ) + prevline = -Xres*2; + else + prevline = 0; + + if( j < Yres-1 ) + nextline = Xres*2; + else + nextline = 0; + + for( i = 0; i < Xres; ++i ) + { + w[2] = *((unsigned short*)(pIn + prevline)); + w[5] = *((unsigned short*)pIn); + w[8] = *((unsigned short*)(pIn + nextline)); + + if( i > 0 ) + { + w[1] = *((unsigned short*)(pIn + prevline - 2)); + w[4] = *((unsigned short*)(pIn - 2)); + w[7] = *((unsigned short*)(pIn + nextline - 2)); + } + else + { + w[1] = w[2]; + w[4] = w[5]; + w[7] = w[8]; + } + + if( i < Xres-1 ) + { + w[3] = *((unsigned short*)(pIn + prevline + 2)); + w[6] = *((unsigned short*)(pIn + 2)); + w[9] = *((unsigned short*)(pIn + nextline + 2)); + } + else + { + w[3] = w[2]; + w[6] = w[5]; + w[9] = w[8]; + } + + pattern = 0; + flag = 1; + + YUV1 = RGBtoYUV[ w[ 5 ] ]; + + for( k = 1; k <= 9; ++k ) + { + if( k == 5 ) + continue; + + if ( w[ k ] != w[ 5 ] ) + { + YUV2 = RGBtoYUV[ w[ k ] ]; + if( ( abs((YUV1 & Ymask) - (YUV2 & Ymask)) > trY ) || + ( abs((YUV1 & Umask) - (YUV2 & Umask)) > trU ) || + ( abs((YUV1 & Vmask) - (YUV2 & Vmask)) > trV ) ) + pattern |= flag; + } + flag <<= 1; + } + + for( k = 1; k <= 9; ++k ) + { + c[ k ] = LUT16to24[ w[ k ] ]; + } + + switch( pattern ) + { + case 0: + case 1: + case 4: + case 32: + case 128: + case 5: + case 132: + case 160: + case 33: + case 129: + case 36: + case 133: + case 164: + case 161: + case 37: + case 165: + { + PIXEL00_20 + PIXEL01_20 + PIXEL10_20 + PIXEL11_20 + break; + } + case 2: + case 34: + case 130: + case 162: + { + PIXEL00_22 + PIXEL01_21 + PIXEL10_20 + PIXEL11_20 + break; + } + case 16: + case 17: + case 48: + case 49: + { + PIXEL00_20 + PIXEL01_22 + PIXEL10_20 + PIXEL11_21 + break; + } + case 64: + case 65: + case 68: + case 69: + { + PIXEL00_20 + PIXEL01_20 + PIXEL10_21 + PIXEL11_22 + break; + } + case 8: + case 12: + case 136: + case 140: + { + PIXEL00_21 + PIXEL01_20 + PIXEL10_22 + PIXEL11_20 + break; + } + case 3: + case 35: + case 131: + case 163: + { + PIXEL00_11 + PIXEL01_21 + PIXEL10_20 + PIXEL11_20 + break; + } + case 6: + case 38: + case 134: + case 166: + { + PIXEL00_22 + PIXEL01_12 + PIXEL10_20 + PIXEL11_20 + break; + } + case 20: + case 21: + case 52: + case 53: + { + PIXEL00_20 + PIXEL01_11 + PIXEL10_20 + PIXEL11_21 + break; + } + case 144: + case 145: + case 176: + case 177: + { + PIXEL00_20 + PIXEL01_22 + PIXEL10_20 + PIXEL11_12 + break; + } + case 192: + case 193: + case 196: + case 197: + { + PIXEL00_20 + PIXEL01_20 + PIXEL10_21 + PIXEL11_11 + break; + } + case 96: + case 97: + case 100: + case 101: + { + PIXEL00_20 + PIXEL01_20 + PIXEL10_12 + PIXEL11_22 + break; + } + case 40: + case 44: + case 168: + case 172: + { + PIXEL00_21 + PIXEL01_20 + PIXEL10_11 + PIXEL11_20 + break; + } + case 9: + case 13: + case 137: + case 141: + { + PIXEL00_12 + PIXEL01_20 + PIXEL10_22 + PIXEL11_20 + break; + } + case 18: + case 50: + { + PIXEL00_22 + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_20 + } + PIXEL10_20 + PIXEL11_21 + break; + } + case 80: + case 81: + { + PIXEL00_20 + PIXEL01_22 + PIXEL10_21 + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_20 + } + break; + } + case 72: + case 76: + { + PIXEL00_21 + PIXEL01_20 + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_20 + } + PIXEL11_22 + break; + } + case 10: + case 138: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_20 + } + PIXEL01_21 + PIXEL10_22 + PIXEL11_20 + break; + } + case 66: + { + PIXEL00_22 + PIXEL01_21 + PIXEL10_21 + PIXEL11_22 + break; + } + case 24: + { + PIXEL00_21 + PIXEL01_22 + PIXEL10_22 + PIXEL11_21 + break; + } + case 7: + case 39: + case 135: + { + PIXEL00_11 + PIXEL01_12 + PIXEL10_20 + PIXEL11_20 + break; + } + case 148: + case 149: + case 180: + { + PIXEL00_20 + PIXEL01_11 + PIXEL10_20 + PIXEL11_12 + break; + } + case 224: + case 228: + case 225: + { + PIXEL00_20 + PIXEL01_20 + PIXEL10_12 + PIXEL11_11 + break; + } + case 41: + case 169: + case 45: + { + PIXEL00_12 + PIXEL01_20 + PIXEL10_11 + PIXEL11_20 + break; + } + case 22: + case 54: + { + PIXEL00_22 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_20 + PIXEL11_21 + break; + } + case 208: + case 209: + { + PIXEL00_20 + PIXEL01_22 + PIXEL10_21 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 104: + case 108: + { + PIXEL00_21 + PIXEL01_20 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + PIXEL11_22 + break; + } + case 11: + case 139: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + PIXEL01_21 + PIXEL10_22 + PIXEL11_20 + break; + } + case 19: + case 51: + { + if (Diff(w[2], w[6])) + { + PIXEL00_11 + PIXEL01_10 + } + else + { + PIXEL00_60 + PIXEL01_90 + } + PIXEL10_20 + PIXEL11_21 + break; + } + case 146: + case 178: + { + PIXEL00_22 + if (Diff(w[2], w[6])) + { + PIXEL01_10 + PIXEL11_12 + } + else + { + PIXEL01_90 + PIXEL11_61 + } + PIXEL10_20 + break; + } + case 84: + case 85: + { + PIXEL00_20 + if (Diff(w[6], w[8])) + { + PIXEL01_11 + PIXEL11_10 + } + else + { + PIXEL01_60 + PIXEL11_90 + } + PIXEL10_21 + break; + } + case 112: + case 113: + { + PIXEL00_20 + PIXEL01_22 + if (Diff(w[6], w[8])) + { + PIXEL10_12 + PIXEL11_10 + } + else + { + PIXEL10_61 + PIXEL11_90 + } + break; + } + case 200: + case 204: + { + PIXEL00_21 + PIXEL01_20 + if (Diff(w[8], w[4])) + { + PIXEL10_10 + PIXEL11_11 + } + else + { + PIXEL10_90 + PIXEL11_60 + } + break; + } + case 73: + case 77: + { + if (Diff(w[8], w[4])) + { + PIXEL00_12 + PIXEL10_10 + } + else + { + PIXEL00_61 + PIXEL10_90 + } + PIXEL01_20 + PIXEL11_22 + break; + } + case 42: + case 170: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + PIXEL10_11 + } + else + { + PIXEL00_90 + PIXEL10_60 + } + PIXEL01_21 + PIXEL11_20 + break; + } + case 14: + case 142: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + PIXEL01_12 + } + else + { + PIXEL00_90 + PIXEL01_61 + } + PIXEL10_22 + PIXEL11_20 + break; + } + case 67: + { + PIXEL00_11 + PIXEL01_21 + PIXEL10_21 + PIXEL11_22 + break; + } + case 70: + { + PIXEL00_22 + PIXEL01_12 + PIXEL10_21 + PIXEL11_22 + break; + } + case 28: + { + PIXEL00_21 + PIXEL01_11 + PIXEL10_22 + PIXEL11_21 + break; + } + case 152: + { + PIXEL00_21 + PIXEL01_22 + PIXEL10_22 + PIXEL11_12 + break; + } + case 194: + { + PIXEL00_22 + PIXEL01_21 + PIXEL10_21 + PIXEL11_11 + break; + } + case 98: + { + PIXEL00_22 + PIXEL01_21 + PIXEL10_12 + PIXEL11_22 + break; + } + case 56: + { + PIXEL00_21 + PIXEL01_22 + PIXEL10_11 + PIXEL11_21 + break; + } + case 25: + { + PIXEL00_12 + PIXEL01_22 + PIXEL10_22 + PIXEL11_21 + break; + } + case 26: + case 31: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_22 + PIXEL11_21 + break; + } + case 82: + case 214: + { + PIXEL00_22 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_21 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 88: + case 248: + { + PIXEL00_21 + PIXEL01_22 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 74: + case 107: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + PIXEL01_21 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + PIXEL11_22 + break; + } + case 27: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + PIXEL01_10 + PIXEL10_22 + PIXEL11_21 + break; + } + case 86: + { + PIXEL00_22 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_21 + PIXEL11_10 + break; + } + case 216: + { + PIXEL00_21 + PIXEL01_22 + PIXEL10_10 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 106: + { + PIXEL00_10 + PIXEL01_21 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + PIXEL11_22 + break; + } + case 30: + { + PIXEL00_10 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_22 + PIXEL11_21 + break; + } + case 210: + { + PIXEL00_22 + PIXEL01_10 + PIXEL10_21 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 120: + { + PIXEL00_21 + PIXEL01_22 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + PIXEL11_10 + break; + } + case 75: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + PIXEL01_21 + PIXEL10_10 + PIXEL11_22 + break; + } + case 29: + { + PIXEL00_12 + PIXEL01_11 + PIXEL10_22 + PIXEL11_21 + break; + } + case 198: + { + PIXEL00_22 + PIXEL01_12 + PIXEL10_21 + PIXEL11_11 + break; + } + case 184: + { + PIXEL00_21 + PIXEL01_22 + PIXEL10_11 + PIXEL11_12 + break; + } + case 99: + { + PIXEL00_11 + PIXEL01_21 + PIXEL10_12 + PIXEL11_22 + break; + } + case 57: + { + PIXEL00_12 + PIXEL01_22 + PIXEL10_11 + PIXEL11_21 + break; + } + case 71: + { + PIXEL00_11 + PIXEL01_12 + PIXEL10_21 + PIXEL11_22 + break; + } + case 156: + { + PIXEL00_21 + PIXEL01_11 + PIXEL10_22 + PIXEL11_12 + break; + } + case 226: + { + PIXEL00_22 + PIXEL01_21 + PIXEL10_12 + PIXEL11_11 + break; + } + case 60: + { + PIXEL00_21 + PIXEL01_11 + PIXEL10_11 + PIXEL11_21 + break; + } + case 195: + { + PIXEL00_11 + PIXEL01_21 + PIXEL10_21 + PIXEL11_11 + break; + } + case 102: + { + PIXEL00_22 + PIXEL01_12 + PIXEL10_12 + PIXEL11_22 + break; + } + case 153: + { + PIXEL00_12 + PIXEL01_22 + PIXEL10_22 + PIXEL11_12 + break; + } + case 58: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + PIXEL10_11 + PIXEL11_21 + break; + } + case 83: + { + PIXEL00_11 + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + PIXEL10_21 + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 92: + { + PIXEL00_21 + PIXEL01_11 + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 202: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + PIXEL01_21 + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + PIXEL11_11 + break; + } + case 78: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + PIXEL01_12 + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + PIXEL11_22 + break; + } + case 154: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + PIXEL10_22 + PIXEL11_12 + break; + } + case 114: + { + PIXEL00_22 + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + PIXEL10_12 + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 89: + { + PIXEL00_12 + PIXEL01_22 + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 90: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 55: + case 23: + { + if (Diff(w[2], w[6])) + { + PIXEL00_11 + PIXEL01_0 + } + else + { + PIXEL00_60 + PIXEL01_90 + } + PIXEL10_20 + PIXEL11_21 + break; + } + case 182: + case 150: + { + PIXEL00_22 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + PIXEL11_12 + } + else + { + PIXEL01_90 + PIXEL11_61 + } + PIXEL10_20 + break; + } + case 213: + case 212: + { + PIXEL00_20 + if (Diff(w[6], w[8])) + { + PIXEL01_11 + PIXEL11_0 + } + else + { + PIXEL01_60 + PIXEL11_90 + } + PIXEL10_21 + break; + } + case 241: + case 240: + { + PIXEL00_20 + PIXEL01_22 + if (Diff(w[6], w[8])) + { + PIXEL10_12 + PIXEL11_0 + } + else + { + PIXEL10_61 + PIXEL11_90 + } + break; + } + case 236: + case 232: + { + PIXEL00_21 + PIXEL01_20 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + PIXEL11_11 + } + else + { + PIXEL10_90 + PIXEL11_60 + } + break; + } + case 109: + case 105: + { + if (Diff(w[8], w[4])) + { + PIXEL00_12 + PIXEL10_0 + } + else + { + PIXEL00_61 + PIXEL10_90 + } + PIXEL01_20 + PIXEL11_22 + break; + } + case 171: + case 43: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + PIXEL10_11 + } + else + { + PIXEL00_90 + PIXEL10_60 + } + PIXEL01_21 + PIXEL11_20 + break; + } + case 143: + case 15: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + PIXEL01_12 + } + else + { + PIXEL00_90 + PIXEL01_61 + } + PIXEL10_22 + PIXEL11_20 + break; + } + case 124: + { + PIXEL00_21 + PIXEL01_11 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + PIXEL11_10 + break; + } + case 203: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + PIXEL01_21 + PIXEL10_10 + PIXEL11_11 + break; + } + case 62: + { + PIXEL00_10 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_11 + PIXEL11_21 + break; + } + case 211: + { + PIXEL00_11 + PIXEL01_10 + PIXEL10_21 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 118: + { + PIXEL00_22 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_12 + PIXEL11_10 + break; + } + case 217: + { + PIXEL00_12 + PIXEL01_22 + PIXEL10_10 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 110: + { + PIXEL00_10 + PIXEL01_12 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + PIXEL11_22 + break; + } + case 155: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + PIXEL01_10 + PIXEL10_22 + PIXEL11_12 + break; + } + case 188: + { + PIXEL00_21 + PIXEL01_11 + PIXEL10_11 + PIXEL11_12 + break; + } + case 185: + { + PIXEL00_12 + PIXEL01_22 + PIXEL10_11 + PIXEL11_12 + break; + } + case 61: + { + PIXEL00_12 + PIXEL01_11 + PIXEL10_11 + PIXEL11_21 + break; + } + case 157: + { + PIXEL00_12 + PIXEL01_11 + PIXEL10_22 + PIXEL11_12 + break; + } + case 103: + { + PIXEL00_11 + PIXEL01_12 + PIXEL10_12 + PIXEL11_22 + break; + } + case 227: + { + PIXEL00_11 + PIXEL01_21 + PIXEL10_12 + PIXEL11_11 + break; + } + case 230: + { + PIXEL00_22 + PIXEL01_12 + PIXEL10_12 + PIXEL11_11 + break; + } + case 199: + { + PIXEL00_11 + PIXEL01_12 + PIXEL10_21 + PIXEL11_11 + break; + } + case 220: + { + PIXEL00_21 + PIXEL01_11 + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 158: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_22 + PIXEL11_12 + break; + } + case 234: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + PIXEL01_21 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + PIXEL11_11 + break; + } + case 242: + { + PIXEL00_22 + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + PIXEL10_12 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 59: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + PIXEL10_11 + PIXEL11_21 + break; + } + case 121: + { + PIXEL00_12 + PIXEL01_22 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 87: + { + PIXEL00_11 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_21 + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 79: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + PIXEL01_12 + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + PIXEL11_22 + break; + } + case 122: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 94: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 218: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 91: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 229: + { + PIXEL00_20 + PIXEL01_20 + PIXEL10_12 + PIXEL11_11 + break; + } + case 167: + { + PIXEL00_11 + PIXEL01_12 + PIXEL10_20 + PIXEL11_20 + break; + } + case 173: + { + PIXEL00_12 + PIXEL01_20 + PIXEL10_11 + PIXEL11_20 + break; + } + case 181: + { + PIXEL00_20 + PIXEL01_11 + PIXEL10_20 + PIXEL11_12 + break; + } + case 186: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + PIXEL10_11 + PIXEL11_12 + break; + } + case 115: + { + PIXEL00_11 + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + PIXEL10_12 + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 93: + { + PIXEL00_12 + PIXEL01_11 + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 206: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + PIXEL01_12 + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + PIXEL11_11 + break; + } + case 205: + case 201: + { + PIXEL00_12 + PIXEL01_20 + if (Diff(w[8], w[4])) + { + PIXEL10_10 + } + else + { + PIXEL10_70 + } + PIXEL11_11 + break; + } + case 174: + case 46: + { + if (Diff(w[4], w[2])) + { + PIXEL00_10 + } + else + { + PIXEL00_70 + } + PIXEL01_12 + PIXEL10_11 + PIXEL11_20 + break; + } + case 179: + case 147: + { + PIXEL00_11 + if (Diff(w[2], w[6])) + { + PIXEL01_10 + } + else + { + PIXEL01_70 + } + PIXEL10_20 + PIXEL11_12 + break; + } + case 117: + case 116: + { + PIXEL00_20 + PIXEL01_11 + PIXEL10_12 + if (Diff(w[6], w[8])) + { + PIXEL11_10 + } + else + { + PIXEL11_70 + } + break; + } + case 189: + { + PIXEL00_12 + PIXEL01_11 + PIXEL10_11 + PIXEL11_12 + break; + } + case 231: + { + PIXEL00_11 + PIXEL01_12 + PIXEL10_12 + PIXEL11_11 + break; + } + case 126: + { + PIXEL00_10 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + PIXEL11_10 + break; + } + case 219: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + PIXEL01_10 + PIXEL10_10 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 125: + { + if (Diff(w[8], w[4])) + { + PIXEL00_12 + PIXEL10_0 + } + else + { + PIXEL00_61 + PIXEL10_90 + } + PIXEL01_11 + PIXEL11_10 + break; + } + case 221: + { + PIXEL00_12 + if (Diff(w[6], w[8])) + { + PIXEL01_11 + PIXEL11_0 + } + else + { + PIXEL01_60 + PIXEL11_90 + } + PIXEL10_10 + break; + } + case 207: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + PIXEL01_12 + } + else + { + PIXEL00_90 + PIXEL01_61 + } + PIXEL10_10 + PIXEL11_11 + break; + } + case 238: + { + PIXEL00_10 + PIXEL01_12 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + PIXEL11_11 + } + else + { + PIXEL10_90 + PIXEL11_60 + } + break; + } + case 190: + { + PIXEL00_10 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + PIXEL11_12 + } + else + { + PIXEL01_90 + PIXEL11_61 + } + PIXEL10_11 + break; + } + case 187: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + PIXEL10_11 + } + else + { + PIXEL00_90 + PIXEL10_60 + } + PIXEL01_10 + PIXEL11_12 + break; + } + case 243: + { + PIXEL00_11 + PIXEL01_10 + if (Diff(w[6], w[8])) + { + PIXEL10_12 + PIXEL11_0 + } + else + { + PIXEL10_61 + PIXEL11_90 + } + break; + } + case 119: + { + if (Diff(w[2], w[6])) + { + PIXEL00_11 + PIXEL01_0 + } + else + { + PIXEL00_60 + PIXEL01_90 + } + PIXEL10_12 + PIXEL11_10 + break; + } + case 237: + case 233: + { + PIXEL00_12 + PIXEL01_20 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_100 + } + PIXEL11_11 + break; + } + case 175: + case 47: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_100 + } + PIXEL01_12 + PIXEL10_11 + PIXEL11_20 + break; + } + case 183: + case 151: + { + PIXEL00_11 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_100 + } + PIXEL10_20 + PIXEL11_12 + break; + } + case 245: + case 244: + { + PIXEL00_20 + PIXEL01_11 + PIXEL10_12 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_100 + } + break; + } + case 250: + { + PIXEL00_10 + PIXEL01_10 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 123: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + PIXEL01_10 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + PIXEL11_10 + break; + } + case 95: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_10 + PIXEL11_10 + break; + } + case 222: + { + PIXEL00_10 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_10 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 252: + { + PIXEL00_21 + PIXEL01_11 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_100 + } + break; + } + case 249: + { + PIXEL00_12 + PIXEL01_22 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_100 + } + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 235: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + PIXEL01_21 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_100 + } + PIXEL11_11 + break; + } + case 111: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_100 + } + PIXEL01_12 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + PIXEL11_22 + break; + } + case 63: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_100 + } + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_11 + PIXEL11_21 + break; + } + case 159: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_100 + } + PIXEL10_22 + PIXEL11_12 + break; + } + case 215: + { + PIXEL00_11 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_100 + } + PIXEL10_21 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 246: + { + PIXEL00_22 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + PIXEL10_12 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_100 + } + break; + } + case 254: + { + PIXEL00_10 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_100 + } + break; + } + case 253: + { + PIXEL00_12 + PIXEL01_11 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_100 + } + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_100 + } + break; + } + case 251: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + PIXEL01_10 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_100 + } + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 239: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_100 + } + PIXEL01_12 + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_100 + } + PIXEL11_11 + break; + } + case 127: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_100 + } + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_20 + } + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_20 + } + PIXEL11_10 + break; + } + case 191: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_100 + } + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_100 + } + PIXEL10_11 + PIXEL11_12 + break; + } + case 223: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_20 + } + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_100 + } + PIXEL10_10 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_20 + } + break; + } + case 247: + { + PIXEL00_11 + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_100 + } + PIXEL10_12 + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_100 + } + break; + } + case 255: + { + if (Diff(w[4], w[2])) + { + PIXEL00_0 + } + else + { + PIXEL00_100 + } + if (Diff(w[2], w[6])) + { + PIXEL01_0 + } + else + { + PIXEL01_100 + } + if (Diff(w[8], w[4])) + { + PIXEL10_0 + } + else + { + PIXEL10_100 + } + if (Diff(w[6], w[8])) + { + PIXEL11_0 + } + else + { + PIXEL11_100 + } + break; + } + } + pIn += 2; + pOut += 8; + } + pOut += BpL; + } +} + +void InitLUTs( void ) +{ + int i, j, k, r, g, b, Y, U, V; + + for( i = 0; i < 65536; ++i ) + { + + LUT16to24[i] = ((i & 0xF800) << 8) | + ((i & 0x07E0) << 5) | + ((i & 0x001F) << 3); + } + + for( i = 0; i < 32; ++i ) + for( j = 0; j < 64; ++j ) + for( k = 0; k < 32; ++k ) + { + r = i << 3; + g = j << 2; + b = k << 3; + + Y = (r + g + b) >> 2; + U = 128 + ((r - b) >> 2); + V = 128 + ((-r + 2*g -b)>>3); + + RGBtoYUV[ (i << 11) | (j << 5) | k ] = (Y<<16) | (U<<8) | V; + } +} + + diff --git a/wolf3d/wolfextractor/hq2x.h b/wolf3d/wolfextractor/hq2x.h new file mode 100644 index 0000000..3b0cd7c --- /dev/null +++ b/wolf3d/wolfextractor/hq2x.h @@ -0,0 +1,32 @@ +/* + hq2x filter + ---------------------------------------------------------- + Copyright (C) 2003 MaxSt ( maxst@hiend3d.com ) + + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +#ifndef __HQ2X_H__ +#define __HQ2X_H__ + +extern void InitLUTs( void ); + +extern void hq2x_32( unsigned char *pIn, unsigned char *pOut, + int Xres, int Yres, int BpL ); + + +#endif /* __HQ2X_H__ */ + diff --git a/wolf3d/wolfextractor/loaders/tga.c b/wolf3d/wolfextractor/loaders/tga.c new file mode 100644 index 0000000..7227c60 --- /dev/null +++ b/wolf3d/wolfextractor/loaders/tga.c @@ -0,0 +1,531 @@ +/* + + Copyright (C) 2004 Michael Liebscher + Copyright (C) 1997-2001 Id Software, Inc. + Copyright (C) 1995 Spencer Kimball and Peter Mattis + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * tga.c: Handle Targa file format. + * + * Author: Michael Liebscher + * Date: 2004 + * + * Acknowledgement: + * Portion of this code was derived from Quake II, and was + * originally written by id Software, Inc. + * + * Portion of this code was derived from The GIMP -- an image manipulation + * program, and was originally written by Spencer Kimball and Peter Mattis. + */ + +#include +#include + +#include "../../../common/arch.h" +#include "../memory/memory.h" +#include "../../../common/common_utils.h" + + +/* +----------------------------------------------------------------------------- + Function: rle_write -Run length encode scanline. + + Parameters: fp -[in] Pointer to valid FILE structure. + buffer -[in] Scanline data. + width -[in] Image scanline width. + bytes -[in] Bytes per pixel. + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE void rle_write( FILE *fp, + W8 *buffer, + W32 width, + W32 bytes ) +{ + SW32 repeat = 0; + SW32 direct = 0; + W8 *from = buffer; + W32 x; + + for( x = 1 ; x < width ; ++x ) + { + if( memcmp( buffer, buffer + bytes, bytes ) ) + { + /* next pixel is different */ + if( repeat ) + { + putc( 128 + repeat, fp ); + fwrite( from, bytes, 1, fp ); + from = buffer + bytes; /* point to first different pixel */ + repeat = 0; + direct = 0; + } + else + { + direct += 1; + } + } + else + { + /* next pixel is the same */ + if( direct ) + { + putc( direct - 1, fp ); + fwrite( from, bytes, direct, fp ); + from = buffer; /* point to first identical pixel */ + direct = 0; + repeat = 1; + } + else + { + repeat += 1; + } + } + + if( repeat == 128 ) + { + putc( 255, fp ); + fwrite( from, bytes, 1, fp ); + from = buffer + bytes; + direct = 0; + repeat = 0; + } + else if( direct == 128 ) + { + putc( 127, fp ); + fwrite( from, bytes, direct, fp ); + from = buffer + bytes; + direct = 0; + repeat = 0; + } + + buffer += bytes; + } + + if( repeat > 0 ) + { + putc( 128 + repeat, fp ); + fwrite( from, bytes, 1, fp ); + } + else + { + putc( direct, fp ); + fwrite( from, bytes, direct + 1, fp ); + } +} + + +/* +----------------------------------------------------------------------------- + Function: WriteTGA -Write targa image file. + + Parameters: filename -[in] Name of TGA file to save as. + depth -[in] Bytes per pixel. (16, 24 or 32). + width -[in] Width of image. + height -[in] Height of image. + Data -[in] Raw image data. + upsideDown -[in] Is the data upside down? 1 yes, 0 no. + rle -[in] Run Length encode? 1 yes, 0 no. + + Returns: 0 on error, otherwise 1. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC W8 WriteTGA( const char *filename, W16 bpp, W16 width, W16 height, + void *Data, W8 upsideDown, W8 rle ) +{ + W16 i, x, y, BytesPerPixel; + W8 *scanline; + W8 header[ 18 ]; + FILE *filestream; + W8 *ptr = (PW8) Data; + W8 temp; + + BytesPerPixel = bpp >> 3; + + filestream = fopen( filename, "wb" ); + if( filestream == NULL ) + { + printf( "Could not open file (%s) for write!\n", filename ); + return 0; + } + + memset( header, 0, 18 ); + header[2] = rle ? 10 : 2; + + header[12] = width & 255; // width low + header[13] = width >> 8; // width high + + header[14] = height & 255; // height low + header[15] = height >> 8; // height high + + header[16] = bpp & 255; // pixel size + + if( upsideDown ) + { + header[17] |= 1 << 5; // Image Descriptor + } + + + fwrite( header, sizeof( W8 ), sizeof( header ), filestream ); + + + + scanline = (PW8) MM_MALLOC( width * BytesPerPixel ); + if( scanline == NULL ) + { + fclose( filestream ); + return 0; + } + + for( y = 0; y < height; ++y ) + { + W32 k = 0; + + for( i = 0; i < (width * BytesPerPixel); ++i ) + { + scanline[ k++ ] = ptr[ (height - y - 1) * width * BytesPerPixel + i ]; + } + + + + if( bpp == 24 || bpp == 32 ) + { + // swap rgb to bgr + for( x = 0 ; x < (width * BytesPerPixel) ; x += BytesPerPixel ) + { + temp = scanline[ x ]; + scanline[ x ] = scanline[ x + 2 ]; + scanline[ x + 2 ] = temp; + } + } + + + if( rle ) + { + rle_write( filestream, scanline, width, BytesPerPixel ); + } + else + { + fwrite( scanline, sizeof( W8 ), width * BytesPerPixel, filestream ); + } + } + + MM_FREE( scanline ); + + fclose( filestream ); + + return 1; +} + +//======================================================================= + +typedef struct TargaHeader_s { + unsigned char id_length; + unsigned char colormap_type; + unsigned char image_type; + unsigned short colormap_index; + unsigned short colormap_length; + unsigned char colormap_size; + unsigned short x_origin; + unsigned short y_origin; + unsigned short width, height; + unsigned char pixel_size; + unsigned char attributes; +} TargaHeaeder_t; + +static const int TGA_HEADER_SIZE = 18; + +/* +======================== +LoadTGAFromBuffer + +Load a TGA from a buffer containing a TGA file. +======================== +*/ +int LoadTGAFromBuffer( const char *name, const W8 *buffer, const int bufferSize, + W8 **pic, int *width, int *height ) { + int columns, rows, numPixels; + size_t numBytes; + W8 *pixbuf; + int row, column; + const W8 *buf_p; + struct TargaHeader_s targa_header; + W8 *targa_rgba; + + *pic = NULL; + + buf_p = buffer; + + targa_header.id_length = *buf_p++; + targa_header.colormap_type = *buf_p++; + targa_header.image_type = *buf_p++; + + targa_header.colormap_index = *(short *)buf_p; + buf_p += 2; + targa_header.colormap_length = *(short *)buf_p; + buf_p += 2; + targa_header.colormap_size = *buf_p++; + targa_header.x_origin = *(short *)buf_p; + buf_p += 2; + targa_header.y_origin = *(short *)buf_p; + buf_p += 2; + targa_header.width = *(short *)buf_p; + buf_p += 2; + targa_header.height = *(short *)buf_p; + buf_p += 2; + targa_header.pixel_size = *buf_p++; + targa_header.attributes = *buf_p++; + + if ( targa_header.image_type != 2 && targa_header.image_type != 10 && targa_header.image_type != 3 ) { + printf( "LoadTGA( %s ): Only type 2 (RGB), 3 (gray), and 10 (RGB) TGA images supported", name ); + return false; + } + + if ( targa_header.colormap_type != 0 ) { + printf( "LoadTGA( %s ): colormaps not supported", name ); + return false; + } + + if ( ( targa_header.pixel_size != 32 && targa_header.pixel_size != 24 ) && targa_header.image_type != 3 ) { + printf( "LoadTGA( %s ): Only 32 or 24 bit images supported (no colormaps)", name ); + return false; + } + + if ( targa_header.image_type == 2 || targa_header.image_type == 3 ) { + numBytes = targa_header.width * targa_header.height * ( targa_header.pixel_size >> 3 ); + if ( numBytes > bufferSize - TGA_HEADER_SIZE - targa_header.id_length ) { + printf( "LoadTGA( %s ): incomplete file", name ); + return false; + } + } + + columns = targa_header.width; + rows = targa_header.height; + numPixels = columns * rows; + + if ( width ) { + *width = columns; + } + if ( height ) { + *height = rows; + } + + targa_rgba = (W8 *)malloc( numPixels*4 ); + *pic = targa_rgba; + + if ( targa_header.id_length != 0 ) { + buf_p += targa_header.id_length; // skip TARGA image comment + } + + if ( targa_header.image_type == 2 || targa_header.image_type == 3 ) { + unsigned char red,green,blue,alphabyte; + switch( targa_header.pixel_size ) { + case 8: + // Uncompressed gray scale image + for( row = rows - 1; row >= 0; row-- ) { + pixbuf = targa_rgba + row*columns*4; + for( column = 0; column < columns; column++ ) { + blue = *buf_p++; + green = blue; + red = blue; + *pixbuf++ = red; + *pixbuf++ = green; + *pixbuf++ = blue; + *pixbuf++ = 255; + } + } + break; + case 24: + // Uncompressed RGB image + for( row = rows - 1; row >= 0; row-- ) { + pixbuf = targa_rgba + row*columns*4; + for( column = 0; column < columns; column++ ) { + blue = *buf_p++; + green = *buf_p++; + red = *buf_p++; + *pixbuf++ = red; + *pixbuf++ = green; + *pixbuf++ = blue; + *pixbuf++ = 255; + } + } + break; + case 32: + // Uncompressed RGBA image + for( row = rows - 1; row >= 0; row-- ) { + pixbuf = targa_rgba + row*columns*4; + for( column = 0; column < columns; column++ ) { + blue = *buf_p++; + green = *buf_p++; + red = *buf_p++; + alphabyte = *buf_p++; + *pixbuf++ = red; + *pixbuf++ = green; + *pixbuf++ = blue; + *pixbuf++ = alphabyte; + } + } + break; + default: + printf( "LoadTGA( %s ): illegal pixel_size '%d'", name, targa_header.pixel_size ); + free( *pic ); + *pic = NULL; + return false; + } + } + else if ( targa_header.image_type == 10 ) { // Runlength encoded RGB images + unsigned char red,green,blue,alphabyte,packetHeader,packetSize,j; + + red = 0; + green = 0; + blue = 0; + alphabyte = 0xff; + + for( row = rows - 1; row >= 0; row-- ) { + pixbuf = targa_rgba + row*columns*4; + for( column = 0; column < columns; ) { + packetHeader= *buf_p++; + packetSize = 1 + (packetHeader & 0x7f); + if ( packetHeader & 0x80 ) { // run-length packet + switch( targa_header.pixel_size ) { + case 24: + blue = *buf_p++; + green = *buf_p++; + red = *buf_p++; + alphabyte = 255; + break; + case 32: + blue = *buf_p++; + green = *buf_p++; + red = *buf_p++; + alphabyte = *buf_p++; + break; + default: + printf( "LoadTGA( %s ): illegal pixel_size '%d'", name, targa_header.pixel_size ); + free( *pic ); + *pic = NULL; + return false; + } + + for( j = 0; j < packetSize; j++ ) { + *pixbuf++=red; + *pixbuf++=green; + *pixbuf++=blue; + *pixbuf++=alphabyte; + column++; + if ( column == columns ) { // run spans across rows + column = 0; + if ( row > 0) { + row--; + } + else { + goto breakOut; + } + pixbuf = targa_rgba + row*columns*4; + } + } + } else { // non run-length packet + for( j = 0; j < packetSize; j++ ) { + switch( targa_header.pixel_size ) { + case 24: + blue = *buf_p++; + green = *buf_p++; + red = *buf_p++; + *pixbuf++ = red; + *pixbuf++ = green; + *pixbuf++ = blue; + *pixbuf++ = 255; + break; + case 32: + blue = *buf_p++; + green = *buf_p++; + red = *buf_p++; + alphabyte = *buf_p++; + *pixbuf++ = red; + *pixbuf++ = green; + *pixbuf++ = blue; + *pixbuf++ = alphabyte; + break; + default: + printf( "LoadTGA( %s ): illegal pixel_size '%d'", name, targa_header.pixel_size ); + free( *pic ); + *pic = NULL; + return false; + } + column++; + if ( column == columns ) { // pixel packet run spans across rows + column = 0; + if ( row > 0 ) { + row--; + } + else { + goto breakOut; + } + pixbuf = targa_rgba + row*columns*4; + } + } + } + } + breakOut: ; + } + } + + if ( (targa_header.attributes & (1<<5)) ) { // image flp bit +// R_VerticalFlip( *pic, *width, *height ); + } + + return true; +} + +/* +======================== +LoadTGA + +Load TGA directly from a file. +======================== +*/ +int LoadTGA( const char *name, W8 **pic, int *width, int *height ) { + FILE *f = fopen( name, "rb" ); + int len; + W8 *buf; + int ret; + + if ( !f ) { + return 0; + } + + fseek( f, 0, SEEK_END ); + len = ftell( f ); + fseek( f, 0, SEEK_SET ); + buf = malloc( len ); + fread( buf, 1, len, f ); + fclose( f ); + + ret = LoadTGAFromBuffer( name, buf, len, pic, width, height ); + + free( buf ); + + return ret; +} + diff --git a/wolf3d/wolfextractor/loaders/tga.h b/wolf3d/wolfextractor/loaders/tga.h new file mode 100644 index 0000000..c64bade --- /dev/null +++ b/wolf3d/wolfextractor/loaders/tga.h @@ -0,0 +1,55 @@ +/* + + Copyright (C) 2004 Michael Liebscher + Copyright (C) 1997-2001 Id Software, Inc. + Copyright (C) 1995 Spencer Kimball and Peter Mattis + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * tga.h: Handle Targa file format. + * + * Author: Michael Liebscher + * Date: 2004 + * + * Acknowledgement: + * Portion of this code was derived from Quake II, and was + * originally written by id Software, Inc. + * + * Portion of this code was derived from The GIMP -- an image manipulation + * program, and was originally written by Spencer Kimball and Peter Mattis. + */ + + /* + Notes: + + This module is implimented by tga.c + */ + +#ifndef __TGA_H__ +#define __TGA_H__ + +#include "../../../common/arch.h" + + +extern W8 WriteTGA( const char *filename, W16 depth, W16 width, W16 height, + void *Data, W8 upsideDown, W8 rle ); + +int LoadTGA( const char *name, W8 **pic, int *width, int *height ); + +#endif /* __TGA_H__ */ + diff --git a/wolf3d/wolfextractor/loaders/wav.c b/wolf3d/wolfextractor/loaders/wav.c new file mode 100644 index 0000000..23e4245 --- /dev/null +++ b/wolf3d/wolfextractor/loaders/wav.c @@ -0,0 +1,144 @@ +/* + + Copyright (C) 2004 Michael Liebscher + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * wav.c: Handles wav files. + * + * Author: Michael Liebscher + * Date: 2004 + * + */ + + +#include +#include + +#include "../../../common/arch.h" + +typedef struct +{ + W8 riff[ 4 ]; + W32 TotalLength; + W8 wave[ 8 ]; + W32 LengthFORMAT; + W16 DataType; + W16 ChannelNumbers; + W32 SampleRate; + W32 BytesPerSecond; + W16 BytesPerSample; + W16 BitsPerSample; + W8 data[ 4 ]; + W32 LengthData; + +} wavheader_t; + + +/* +----------------------------------------------------------------------------- + Function: write_wav() -Writes a wav file. + + Parameters: filename -[in] Pointer to a null-terminated string that + specifies the name of the file to save as. + data -[in] Pointer to audio data. + size -[in] Length of audio data. + channels -[in] Number of Channels (0x01 = Mono, 0x02 = Stereo). + sample_rate -[in] Sample Rate in Hz + sample_size -[in] Bytes Per Sample: + 1 = 8 bit Mono, + 2 = 8 bit Stereo or 16 bit Mono, + 4 = 16 bit Stereo + + Returns: Nothing. + + Notes: + +----------------------------------------------------------------------------- +*/ +void +write_wav( const char *filename, void *data, W32 size, + W16 channels, W32 sample_rate, + W16 sample_size ) +{ + wavheader_t header; + FILE *handle; + + handle = fopen( filename, "wb" ); + if( handle == NULL ) + { + printf( "unable to write wav file\n" ); + return; + } + +// RIFF Chunk + header.riff[ 0 ] = 'R'; + header.riff[ 1 ] = 'I'; + header.riff[ 2 ] = 'F'; + header.riff[ 3 ] = 'F'; + + // Total Length Of Package To Follow + header.TotalLength = size + 36; + +// Format Chunk + header.wave[ 0 ] = 'W'; + header.wave[ 1 ] = 'A'; + header.wave[ 2 ] = 'V'; + header.wave[ 3 ] = 'E'; + header.wave[ 4 ] = 'f'; + header.wave[ 5 ] = 'm'; + header.wave[ 6 ] = 't'; + header.wave[ 7 ] = ' '; + + header.LengthFORMAT = 0x10; // Length Of FORMAT Chunk (always 0x10) + header.DataType = 0x01; // Always 0x01 + + // Channel Numbers (always 0x01 = Mono, 0x02 = Stereo) + header.ChannelNumbers = channels; + + + header.SampleRate = sample_rate; // Sample Rate in Hz + + + header.BytesPerSecond = sample_rate * sample_size * channels; + + + header.BytesPerSample = sample_size; // Bytes Per Sample: 1 = 8 bit Mono, + // 2 = 8 bit Stereo or 16 bit Mono, + // 4 = 16 bit Stereo + + + header.BitsPerSample = sample_size * 8; + +// DATA Chunk + header.data[ 0 ] = 'd'; + header.data[ 1 ] = 'a'; + header.data[ 2 ] = 't'; + header.data[ 3 ] = 'a'; + + // Length Of Data To Follow + header.LengthData = size; + + + + fwrite( &header, sizeof( W8 ), sizeof( wavheader_t ), handle ); + + fwrite( data, sizeof( W8 ), size, handle ); + + fclose( handle ); +} diff --git a/wolf3d/wolfextractor/loaders/wav.h b/wolf3d/wolfextractor/loaders/wav.h new file mode 100644 index 0000000..97e4c37 --- /dev/null +++ b/wolf3d/wolfextractor/loaders/wav.h @@ -0,0 +1,39 @@ +/* + + Copyright (C) 2004 Michael Liebscher + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * wav.h: Handles wav files. + * + * Author: Michael Liebscher + * Date: 2004 + * + */ + +#ifndef __WAV_H__ +#define __WAV_H__ + +#include "../../../common/arch.h" + +extern void write_wav( const char *filename, void *data, W32 size, + W16 channels, W32 sample_rate, + W16 sample_size ); + + +#endif /* __WAV_H__ */ diff --git a/wolf3d/wolfextractor/mac/mac.c b/wolf3d/wolfextractor/mac/mac.c new file mode 100644 index 0000000..2baffa6 --- /dev/null +++ b/wolf3d/wolfextractor/mac/mac.c @@ -0,0 +1,1083 @@ +/* + + Copyright (C) 2004-2005 Michael Liebscher + Copyright (C) 2000 Steven Fuller + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * mac.c: This module is used to extract data from the Macintosh + * version of Wolfenstein 3-D. + * + * Author: Michael Liebscher + * + * Acknowledgement: + * Portion of this code was derived from code that was originally + * written by Steven Fuller. + * + */ + + + +#include +#include + +#include "mac.h" +#include "../wolf/wolf_def.h" +#include "../../../common/arch.h" +#include "../../../common/common_utils.h" +#include "../loaders/tga.h" +#include "../memory/memory.h" +#include "../string/com_string.h" +#include "../filesys/file.h" + + + + +/* Resource file Palette offsets */ +#define MACPAL 898370L +#define IDPAL 899142L +#define GAMEPAL 946811L +#define INTERPAL 997211L +#define YUMMYPAL 1011345L +#define TITLEPAL 2235007L + +#define PALETTE_SIZE 768 + + + +#define MACBINFILENAME "Wolfenstein 3D" +#define FILETYPECREATOR "APPLWOLF" + + +#define DATAFORKLENGTH 105754L +#define RESFORKLENGTH 2424697L + + +PRIVATE W8 *macPalette; + +PRIVATE FILE *fResHandle; + + +/* +----------------------------------------------------------------------------- + Function: getResourceBlock -Get block of resource data. + + Parameters: offset -[in] Number of bytes from start of file. + length -[in] Length of resource block. + glen -[out] next four bytes after block. + + Returns: NULL on error, otherwise pointer to block of memory. + + Notes: Caller is responsible for freeing memory block. +----------------------------------------------------------------------------- +*/ +PRIVATE W8 *getResourceBlock( W32 offset, W32 length, W32 *glen ) +{ + W8 *buf; + + fseek( fResHandle, offset, SEEK_SET ); + + buf = (PW8)MM_MALLOC( length ); + if( buf == NULL ) + { + printf( "could not malloc data\n" ); + + return NULL; + } + + if( fread( buf, 1, length, fResHandle ) != length ) + { + printf( "read error on resource file\n" ); + + return NULL; + } + + if( fread( glen, 1, 4, fResHandle ) != 4 ) + { + printf( "read error on resource file\n" ); + + return NULL; + } + + *glen = BigLong( *glen ); + + return buf; +} + +/* +----------------------------------------------------------------------------- + Function: + + Parameters: + + Returns: + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE void Decode_LZSS( W8 *dst, const W8 *src, W32 Length ) +{ + W32 bitBucket; + W32 runCount; + W32 Fun; + W8 *ptrBack; + + if( ! Length ) + { + return; + } + + bitBucket = (W32) src[ 0 ] | 0x100; + ++src; + + do + { + if( bitBucket & 1 ) + { + dst[ 0 ] = src[ 0 ]; + ++src; + ++dst; + --Length; + } + else + { + runCount = (W32) src[ 0 ] | ((W32) src[ 1 ] << 8); + Fun = 0x1000 - (runCount & 0xFFF); + ptrBack = dst - Fun; + runCount = ((runCount >> 12) & 0x0F) + 3; + if( Length >= runCount ) + { + Length -= runCount; + } + else + { + runCount = Length; + Length = 0; + } + + while( runCount-- ) + { + *dst++ = *ptrBack++; + } + src += 2; + } + + bitBucket >>= 1; + if( bitBucket == 1 ) + { + bitBucket = (W32) src[ 0 ] | 0x100; + ++src; + } + + } while( Length ); +} + +/////////////////////////////////////////////////////////////////////////////// +// +// Palette Routines +// +/////////////////////////////////////////////////////////////////////////////// + + +/* +----------------------------------------------------------------------------- + Function: ConvertPaletteToRGB -Convert 256 palette data to RGB. + + Parameters: dst -[in/out] Destination for RGB raw image data. + src -[in] 256 palette data. + length -[in] length of source data. + palette -[in] Pointer to 256*3 array. + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE void ConvertPaletteToRGB( W8 *dst, W8 *src, W32 length, W8 *palette ) +{ + W32 i; + + for( i = 0 ; i < length ; ++i ) + { + dst[ i * 3 ] = palette[ src[ i ] * 3 ]; + dst[ i * 3 + 1 ] = palette[ src[ i ] * 3 + 1 ]; + dst[ i * 3 + 2 ] = palette[ src[ i ] * 3 + 2 ]; + } +} + +/* +----------------------------------------------------------------------------- + Function: setPalette -Set global palette. + + Parameters: offset -[in] offset of palette in resource file. + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE void setPalette( W32 offset ) +{ + W32 junk; + + if( macPalette ) + { + MM_FREE( macPalette ); + } + + macPalette = getResourceBlock( offset, PALETTE_SIZE, &junk ); + +} + +/////////////////////////////////////////////////////////////////////////////// +// +// Screen Routines +// +/////////////////////////////////////////////////////////////////////////////// + +PRIVATE void DecodeBJMapImage( W32 offset, W32 length ) +{ + W8 *ptrResource; + W8 *buffer; + char filename[ 32 ]; + W32 junk; + + ptrResource = (PW8)getResourceBlock( offset, length, &junk ); + if( ! ptrResource ) + { + return; + } + + buffer = (PW8) MM_MALLOC( 16 * 16 * 3 ); + + ConvertPaletteToRGB( buffer, ptrResource, 16 * 16, macPalette ); + + cs_snprintf( filename, sizeof( filename ), "%s/bjautomap.tga", DIRPATHPICS ); + + WriteTGA( filename, 24, 16, 16, buffer, 0, 1 ); + + MM_FREE( buffer ); + +} + +PRIVATE void DecodeBJIntermImages( W32 offset, W32 length ) +{ + W32 *ptrResource; + W32 uncomprLength; + W8 *uncompr, *buffer; + W32 indexs[3]; + W16 *ptr; + int width, height, i; + W32 junk; + char filename[ 32 ]; + + ptrResource = (PW32)getResourceBlock( offset, length, &junk ); + if( ! ptrResource ) + { + return; + } + + uncomprLength = BigLong( ptrResource[ 0 ] ); + + uncompr = (PW8)MM_MALLOC( uncomprLength ); + + Decode_LZSS( uncompr, (PW8)&ptrResource[ 1 ], uncomprLength ); + + MM_FREE( ptrResource ); + + memcpy( indexs, uncompr, 12 ); + + indexs[ 0 ] = BigLong( indexs[ 0 ] ); + indexs[ 1 ] = BigLong( indexs[ 1 ] ); + indexs[ 2 ] = BigLong( indexs[ 2 ] ); + + + buffer = MM_MALLOC( 256 * 256 * 3 ); + for( i = 0 ; i < 3 ; ++i ) + { + ptr = (PW16)&uncompr[ indexs[ i ] ]; + width = BigShort( ptr[ 0 ] ); + height = BigShort( ptr[ 1 ] ); + + ConvertPaletteToRGB( buffer, (PW8)&ptr[ 2 ], width * height, macPalette ); + + cs_snprintf( filename, sizeof( filename ), "%s/bj%d.tga", DIRPATHPICS, i ); + + WriteTGA( filename, 24, width, height, buffer, 0, 1 ); + } + + MM_FREE( buffer ); + + MM_FREE( uncompr ); +} + +/* +----------------------------------------------------------------------------- + Function: DecodeScreen -Decode screen from Macintosh resource fork. + + Parameters: + offset -[in] offset in resource file. + length -[in] length of data. + filename -[in] Name of file to save as. + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE void DecodeScreen( W32 offset, W32 length, const char *filename ) +{ + W8 *ptrResource; + W32 uncomprLength; + W16 *uncompr; + W16 width, height; + W8 *buffer; + W32 junk; + + ptrResource = getResourceBlock( offset, length, &junk ); + if( ! ptrResource ) + { + return; + } + + uncomprLength = BigLong( *((PW32)ptrResource) ); + uncompr = (PW16)MM_MALLOC( uncomprLength ); + + Decode_LZSS( (PW8)uncompr, ptrResource+4, uncomprLength ); + + width = BigShort( uncompr[ 0 ] ); + height = BigShort( uncompr[ 1 ] ); + + buffer = MM_MALLOC( width * height * 3 ); + + ConvertPaletteToRGB( buffer, (PW8)&uncompr[ 2 ], width * height, macPalette ); + + WriteTGA( filename, 24, width, height, buffer, 0, 1 ); + + MM_FREE( buffer ); + MM_FREE( uncompr ); + MM_FREE( ptrResource ); +} + + +/* +----------------------------------------------------------------------------- + Function: RipScreens -Extract screens from Macintosh resource fork. + + Parameters: Nothing. + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE void RipScreens( void ) +{ + char path[ 256 ]; + + setPalette( MACPAL ); + cs_snprintf( path, sizeof( path ), "%s/macplaypic.tga", DIRPATHPICS ); + DecodeScreen( 899914, 46893, path ); + + setPalette( IDPAL ); + cs_snprintf( path, sizeof( path ), "%s/idpic.tga", DIRPATHPICS ); + DecodeScreen( 899914, 46893, path ); + + setPalette( INTERPAL ); + cs_snprintf( path, sizeof( path ), "%s/intermissionpic.tga", DIRPATHPICS ); + DecodeScreen( 947583, 49624, path ); + + + DecodeBJIntermImages( 1018931, 20766 ); + + + setPalette( GAMEPAL ); + cs_snprintf( path, sizeof( path ), "%s/getpsychedpic.tga", DIRPATHPICS ); + DecodeScreen( 997983, 3256, path ); + + + DecodeBJMapImage( 2391746, 1281 ); + + + + setPalette( YUMMYPAL ); + cs_snprintf( path, sizeof( path ), "%s/yummypic.tga", DIRPATHPICS ); + DecodeScreen( 1002299, 9042, path ); + + setPalette( TITLEPAL ); + cs_snprintf( path, sizeof( path ), "%s/titlepic.tga", DIRPATHPICS ); + DecodeScreen( 2067971, 167032, path ); + + +} + + +/////////////////////////////////////////////////////////////////////////////// +// +// Wall Routines +// +/////////////////////////////////////////////////////////////////////////////// + + +/* +----------------------------------------------------------------------------- + Function: obverseWall -Realign wall image. + + Parameters: + src -[in] source data. + width -[in] width of wall image. + height -[in] height of wall image. + + Returns: NULL on error, otherwise pointer to memory block with realigned + wall image data. + + Notes: Caller is responsible for freeing returned memory block. +----------------------------------------------------------------------------- +*/ +PRIVATE W8 *obverseWall( const W8 *src, W16 width, W16 height ) +{ + W8 *target; + W16 w, h; + + target = MM_MALLOC( width * height ); + + for( h = 0; h < height; ++h ) + for( w = 0; w < width; ++w ) + { + target[ h + width * w ] = src[ h * width + w ]; + } + + return target; +} + + +/* +----------------------------------------------------------------------------- + Function: DecodeWall -Decode then save wall data as TARGA image file. + + Parameters: + offet -[in] offset in resource file. + length -[in] length of data. + retval -[out] Length of next block. + filename -[in] Name of file to save as. + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE void DecodeWall( W32 offset, W32 length, W32 *retval, const char *filename ) +{ + W8 *ptrResource; + W8 *uncompr; + W8 *buffer; + W8 *newwall; + + ptrResource = getResourceBlock( offset, length, retval ); + if( ! ptrResource ) + { + return; + } + + uncompr = (PW8)MM_MALLOC( 128 * 128 ); + + Decode_LZSS( uncompr, ptrResource, 128 * 128 ); + + newwall = obverseWall( uncompr, 128, 128 ); + + buffer = MM_MALLOC( 128 * 128 * 3 ); + ConvertPaletteToRGB( buffer, newwall, 128 * 128, macPalette ); + + WriteTGA( filename, 24, 128, 128, buffer, 0, 1 ); + + MM_FREE( buffer ); + MM_FREE( newwall ); + MM_FREE( uncompr ); + MM_FREE( ptrResource ); +} + + +/* +----------------------------------------------------------------------------- + Function: RipWalls -Extract wall image data from resource fork. + + Parameters: Nothing. + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE void RipWalls( void ) +{ + int i; + W32 noffset = 702256; + W32 length = 6277; + W32 retval; + char name[ 256 ]; + + for( i = 0 ; i < 35 ; ++i ) + { + cs_snprintf( name, sizeof( name ), "%s/%.3d.tga", DIRPATHWALLS, i ); + DecodeWall( noffset, length, &retval, name ); + + noffset += length + 4; + length = retval; + } +} + +/////////////////////////////////////////////////////////////////////////////// +// +// Sprite Routines +// +/////////////////////////////////////////////////////////////////////////////// + +typedef struct +{ + W16 Topy; + W16 Boty; + W16 Shape; + +} spriteRun; + + + +/* +----------------------------------------------------------------------------- + Function: DecodeSprite -Decode then save sprite data as TARGA image file. + + Parameters: + offet -[in] offset in resource file. + length -[in] length of data. + retval -[out] Length of next block. + filename -[in] Name of file to save as. + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE void DecodeSprite( W32 offset, W32 length, W32 *retval, const char *filename ) +{ + W8 *ptrResource; + W32 uncomprLength; + W8 *uncompr; + W8 *buffer; + W16 *ptr; + int i, x, width, noffset; + + ptrResource = getResourceBlock( offset, length, retval ); + if( ! ptrResource ) + { + return; + } + + uncomprLength = ptrResource[ 0 ]; + uncomprLength |= ptrResource[ 1 ] << 8; + + uncompr = (PW8)MM_MALLOC( uncomprLength ); + Decode_LZSS( uncompr, ptrResource+2, uncomprLength ); + + + buffer = (W8 *)MM_MALLOC(128 * 128 * 4); + memset( buffer, 0, 128 * 128 * 4 ); + + + ptr = (PW16)uncompr; + + width = BigShort( ptr[ 0 ] ); + + noffset = 64 - width / 2; + for( x = 0 ; x < width ; ++x ) + { + spriteRun *p = (spriteRun *)&ptr[ BigShort( ptr[ x + 1 ] ) / 2 ]; + + while( p->Topy != 0xFFFF ) + { + for( i = BigShort( p->Topy ) / 2; i < BigShort( p->Boty ) / 2; ++i ) + { + *(buffer + (i * 128 + x + noffset) * 4 + 0) = macPalette[ uncompr[ BigShort( p->Shape ) + BigShort( p->Topy ) / 2 + (i - BigShort( p->Topy ) / 2) ] * 3 + 0 ]; + *(buffer + (i * 128 + x + noffset) * 4 + 1) = macPalette[ uncompr[ BigShort( p->Shape ) + BigShort( p->Topy ) / 2 + (i - BigShort( p->Topy ) / 2) ] * 3 + 1 ]; + *(buffer + (i * 128 + x + noffset) * 4 + 2) = macPalette[ uncompr[ BigShort( p->Shape ) + BigShort( p->Topy ) / 2 + (i - BigShort( p->Topy ) / 2) ] * 3 + 2 ]; + *(buffer + (i * 128 + x + noffset) * 4 + 3) = 255; + } + p++; + } + } + + + WriteTGA( filename, 32, 128, 128, buffer, 0, 1 ); + + MM_FREE( buffer ); + MM_FREE( uncompr ); + MM_FREE( ptrResource ); +} + + +/* +----------------------------------------------------------------------------- + Function: RipSprites -Extract sprites from resource fork. + + Parameters: Nothing. + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE void RipSprites( void ) +{ + int i; + W32 offset = 106345; + W32 length = 524; + W32 retval; + char name[ 256 ]; + + for( i = 0 ; i < 163 ; ++i ) + { + cs_snprintf( name, sizeof( name ), "%s/%.3d.tga", DIRPATHSPRITES, i ); + DecodeSprite( offset, length, &retval, name ); + offset += length + 4; + length = retval; + } + + + offset = 579104; + length = 868; + for( i = 163 ; i < 171 ; ++i ) + { + cs_snprintf( name, sizeof( name ), "%s/%.3d.tga", DIRPATHSPRITES, i ); + DecodeSprite( offset, length, &retval, name ); + offset += length + 4; + length = retval; + } + + offset = 2356530; + length = 7153; + for( i = 171 ; i < 175 ; ++i ) + { + cs_snprintf( name, sizeof( name ), "%s/%.3d.tga", DIRPATHSPRITES, i ); + DecodeSprite( offset, length, &retval, name ); + offset += length + 4; + length = retval; + } +} + +/////////////////////////////////////////////////////////////////////////////// +// +// Item Routines +// +/////////////////////////////////////////////////////////////////////////////// + + +/* +----------------------------------------------------------------------------- + Function: DecodeItem -Convert item data into RGB raw data. + + Parameters: data -[in] data chunk to decode. + pal -[in] palette. + + Returns: On success pointer to RGB data, otherwise NULL. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE W8 *DecodeItem( W8 *data, W8 *pal ) +{ + W8 *buffer, *mask, *ptr; + int x, y, w, h; + + buffer = (W8 *)MM_MALLOC( 128 * 128 * 4 ); + + memset( buffer, 0, 128 * 128 * 4 ); + + x = data[ 0 ] << 8 | data[ 1 ]; + y = data[ 2 ] << 8 | data[ 3 ]; + w = data[ 4 ] << 8 | data[ 5 ]; + h = data[ 6 ] << 8 | data[ 7 ]; + + data += 8; + mask = data + w * h; + ptr = buffer + 512 * y + x * 4; + + do + { + int w2 = w; + do + { + if( *mask == 0 ) + { + ptr[ 0 ] = pal[ data[ 0 ] * 3 ]; + ptr[ 1 ] = pal[ data[ 0 ] * 3 + 1 ]; + ptr[ 2 ] = pal[ data[ 0 ] * 3 + 2 ]; + ptr[ 3 ] = 255; + } + ptr += 4; + data++; + mask++; + + } while( --w2 ); + + ptr += 4 * (128 - w); + + } while( --h ); + + return buffer; +} + + +/* +----------------------------------------------------------------------------- + Function: RipItems -Extract pic images from resource file. + + Parameters: Nothing. + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE void RipItems( void ) +{ + W8 *ptrResource; + W8 *ptrDst; + W32 *ptrLong; + W8 *buffer; + W8 **gameItems; + W32 junk; + W32 uncomprLength; + int i; + char name[ 256 ]; + W16 *ptrShape1; + W8 *ptrShape2; + W16 width, height; + W32 offset = 634799L; + W32 length = 67453L; + + + ptrResource = (PW8)getResourceBlock( offset, length, &junk ); + + uncomprLength = BigLong( *((PW32)ptrResource) ); + gameItems = (W8 **)MM_MALLOC( uncomprLength ); + + Decode_LZSS( (PW8)gameItems, ptrResource+4, uncomprLength ); + + MM_FREE( ptrResource ); + + ptrLong = (PW32)gameItems; + ptrDst = (PW8)gameItems; + for( i = 0; i < 47; ++i ) + { + uncomprLength = BigLong( ptrLong[ i ] ); + gameItems[ i ] = ptrDst + uncomprLength; + } + + for( i = 0 ; i < 6 * 4 ; ++i ) + { + cs_snprintf( name, sizeof( name ), "%s/weapon%.2d.tga", DIRPATHPICS, i ); + buffer = DecodeItem( gameItems[ 12 + i ], macPalette ); + WriteTGA( name, 32, 128, 128, buffer, 0, 1 ); + + MM_FREE( buffer ); + } + + for( i = 0 ; i < 47 ; ++i ) + { + ptrShape1 = (PW16)gameItems[ i ]; + width = BigShort( ptrShape1[ 0 ] ); + height = BigShort( ptrShape1[ 1 ] ); + ptrShape2 = (PW8)&ptrShape1[ 2 ]; + + buffer = MM_MALLOC( width * height * 3 ); + + ConvertPaletteToRGB( buffer, ptrShape2, width * height, macPalette ); + + cs_snprintf( name, sizeof( name ), "%s/%.2d.tga", DIRPATHPICS, i ); + WriteTGA( name, 24, width, height, buffer, 0, 1 ); + + MM_FREE( buffer ); + + // Skip over weapon frames + if( 11 == i ) + { + i = 35; + } + } + + MM_FREE( gameItems ); +} + +/////////////////////////////////////////////////////////////////////////////// +// +// Midi Routines +// +/////////////////////////////////////////////////////////////////////////////// + + +/* +----------------------------------------------------------------------------- + Function: RipMidi -Extract midi files from resource fork. + + Parameters: Nothing. + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE void RipMidi( void ) +{ + W8 *ptrResource; + W32 retval; + FILE *fhandle; + char name[ 256 ]; + int i; + W32 offset = 1899536L; + W32 length = 8215L; + + for( i = 0 ; i < 8 ; ++i ) + { + ptrResource = getResourceBlock( offset, length, &retval ); + if( ! ptrResource ) + { + continue; + } + + cs_snprintf( name, sizeof( name ), "%s/%d.mid", DIRPATHMIDI, i ); + fhandle = fopen( name, "wb" ); + if( ! fhandle ) + { + continue; + } + + fwrite( ptrResource, 1, length, fhandle ); + + fclose( fhandle ); + MM_FREE( ptrResource ); + + offset += length + 4; + length = retval; + } +} + +/////////////////////////////////////////////////////////////////////////////// +// +// PICT image +// +/////////////////////////////////////////////////////////////////////////////// + +#if 0 + +PRIVATE void DecodePICTimage( W32 offset, W32 length ) +{ + FILE *hfOut; + W8 *ptrResource; + W32 junk; + int i; + + ptrResource = getResourceBlock( offset, length, &junk ); + if( ! ptrResource ) + { + return; + } + + hfOut = fopen( "pict.pct", "wb" ); + if( ! hfOut ) + { + return; + } + + for( i ; i < 512 ; ++i ) + { + fwrite( ptrResource, 1, 0, hfOut ); + } + + fwrite( ptrResource, 1, length, hfOut ); + + fclose( hfOut ); +} + +#endif + +/////////////////////////////////////////////////////////////////////////////// +// +// Parse MacBinary Header +// +/////////////////////////////////////////////////////////////////////////////// + + +/* +----------------------------------------------------------------------------- + Function: parseMacBinaryHead -Parse mac binary header. + + Parameters: Nothing. + + Returns: true if this is Wolfenstein Mac binary file, otherwise false. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE _boolean parseMacBinaryHead( void ) +{ + W32 temp32 = 0; + char name[ 64 ]; + +// +// Check file name +// + fseek( fResHandle, 1, SEEK_SET ); + + // get file name length (range is 1 to 31) + fread( &temp32, 1, 1, fResHandle ); + if( temp32 < 1 || temp32 > 31 ) + { + return false; + } + + fread( name, 1, temp32, fResHandle ); + name[ temp32 - 1 ] = '\0'; + if( strcmp( name, MACBINFILENAME ) != 0 ) + { + return false; + } + +// +// Check file type / creator +// + fseek( fResHandle, 65, SEEK_SET ); + + fread( &name, 1, 8, fResHandle ); + name[ 8 ] = '\0'; + if( strcmp( name, FILETYPECREATOR ) != 0 ) + { + return false; + } + +// +// Check Data Fork length +// + fseek( fResHandle, 83, SEEK_SET ); + + fread( &temp32, 1, 4, fResHandle ); + + temp32 = BigLong( temp32 ); + if( temp32 != DATAFORKLENGTH ) + { + return false; + } + +// +// Check Resource Fork length +// + fread( &temp32, 1, 4, fResHandle ); + + temp32 = BigLong( temp32 ); + if( temp32 != RESFORKLENGTH ) + { + return false; + } + + return true; +} + + +/////////////////////////////////////////////////////////////////////////////// +// +// Interface +// +/////////////////////////////////////////////////////////////////////////////// + +/* +----------------------------------------------------------------------------- + Function: ripMac -Interface to Macintosh data extractor. + + Parameters: Nothing. + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC void ripMac( void ) +{ + char *fname; + char ext[ 256 ]; + + cs_strlcpy( ext, MAC_FEXT, sizeof( ext ) ); + + + fname = FS_FindFirst( ext, 0, FA_DIR ); + FS_FindClose(); + + if( fname == NULL ) + { + // try again with lower case + fname = FS_FindFirst( cs_strlwr( ext ), 0, FA_DIR ); + FS_FindClose(); + + if( fname == NULL ) + { + printf( "Could not find any mac files for read\n" ); + + return; + } + } + + fResHandle = fopen( fname, "rb" ); + if( fResHandle == NULL ) + { + printf( "Could not open file (%s) for read\n", fname ); + + return; + } + + if( ! parseMacBinaryHead() ) + { + printf( "Unknown MacBinary file\n" ); + + fclose( fResHandle ); + + return; + } + + + + FS_Mkdir( DIRPATHPICS ); + FS_Mkdir( DIRPATHSPRITES ); + FS_Mkdir( DIRPATHWALLS ); + FS_Mkdir( DIRPATHMIDI ); + + + printf( "Extracting Midi data...\n" ); + RipMidi(); + + printf( "Decoding Screen data...\n" ); + RipScreens(); + + + setPalette( GAMEPAL ); + + printf( "Decoding Wall data...\n" ); + RipWalls(); + printf( "Decoding Sprite data...\n" ); + RipSprites(); + printf( "Decoding Item data...\n" ); + RipItems(); + + fclose( fResHandle ); +} diff --git a/wolf3d/wolfextractor/mac/mac.h b/wolf3d/wolfextractor/mac/mac.h new file mode 100644 index 0000000..23735f3 --- /dev/null +++ b/wolf3d/wolfextractor/mac/mac.h @@ -0,0 +1,53 @@ +/* + + Copyright (C) 2004 Michael Liebscher + Copyright (C) 2000 Steven Fuller + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * mac.h: This module is used to extract data from the Macintosh + * version of Wolfenstein 3-D. + * + * Author: Michael Liebscher + * Date: 2004 + * + * Acknowledgement: + * Portion of this code was derived from code that was originally + * written by Steven Fuller. + * + */ + +#ifndef __MAC_H__ +#define __MAC_H__ + + +/* Directory Paths */ +#define DIRPATHSPRITES "macsprites" +#define DIRPATHWALLS "macwalls" +#define DIRPATHPICS "macpics" +#define DIRPATHMIDI "macmidi" + + + + +extern void ripMac( void ); + + + +#endif /* __MAC_H__ */ + diff --git a/wolf3d/wolfextractor/main.c b/wolf3d/wolfextractor/main.c new file mode 100644 index 0000000..cd8d478 --- /dev/null +++ b/wolf3d/wolfextractor/main.c @@ -0,0 +1,391 @@ +/* + + Copyright (C) 2004-2005 Michael Liebscher + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * main.c: Decode Wolfenstein 3-D data files. + * + * Author: Michael Liebscher + * + */ + + +/* + +This program decodes the following Wolfenstein 3-D/Spear of Destiny files: + +AUDIOHED.xxx -Contains offsets and lengths of the audio in AUDIOT. +AUDIOT.xxx -Contains Adlib audio data. + +VGAHEAD.xxx -Contains data offsets for VGAGRAPH. +VGAGRAPH.xxx -Contains graphic data. +VGADICT.xxx -Contains Huffman dictionary data. + +VSWAP.xxx -Contains audio and graphic data. + +Wolfenstein 3D(tm).mac -Macintosh binary of Wolfenstein 3D + +*/ + +#include +#include + + +#include "../../common/arch.h" +#include "../../common/common_utils.h" +#include "string/com_string.h" +#include "wolf/wolf_def.h" +#include "filesys/file.h" +#include "hq2x.h" +#include "mac/mac.h" + + +#define APP_VERSION "0.01i" + +#define BASEDIR "base/" + + + + +extern void PAK_builder( const char *filename, W16 version ); + + + + +/* +----------------------------------------------------------------------------- + Function: deleteCacheDirectories -Delete directories created when caching. + + Parameters: Nothing. + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE void deleteCacheDirectories( W16 version ) +{ + FS_RemoveDirectory( GFXWALLDIR ); + FS_RemoveDirectory( MAPDIR ); + FS_RemoveDirectory( LGFXDIR ); + + if( version & WL1_PAK || version & WL6_PAK ) + { + FS_RemoveDirectory( SFXDIR ); + FS_RemoveDirectory( GFXSPRITEDIR ); + FS_RemoveDirectory( LSFXDIR ); + } + + if( version & SDM_PAK || version & SOD_PAK ) + { + FS_RemoveDirectory( SODSFXDIR ); + FS_RemoveDirectory( SODGFXSPRITEDIR ); + FS_RemoveDirectory( SODLSFXDIR ); + } +} + +/* +----------------------------------------------------------------------------- + Function: CheckForDataFiles -Check for data files. + + Parameters: Wolf_Ext -[out] zero nothing found. + Bit 0 high -WL1 data files found. + Bit 1 high -WL6 data files found. + Bit 2 high -SDM data files found. + Bit 3 high -SOD data files found. + Bit 4 high -MAC data files found. + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +void CheckForDataFiles( W16 *Wolf_Ext ) +{ + char ext[ 13 ]; + +// +// Wolfenstein 3-D Demo +// + cs_strlcpy( ext, WL1_FEXT, sizeof( ext ) ); + + if( FS_FindFirst( cs_strupr( ext ), 0, 0 ) ) + { + *Wolf_Ext |= WL1_PAK; + } + + FS_FindClose(); + + if( FS_FindFirst( cs_strlwr( ext ), 0, 0 ) ) + { + *Wolf_Ext |= WL1_PAK; + } + + FS_FindClose(); + + +// +// Wolfenstein 3-D +// + cs_strlcpy( ext, WL6_FEXT, sizeof( ext ) ); + + if( FS_FindFirst( cs_strupr( ext ), 0, 0 ) ) + { + *Wolf_Ext |= WL6_PAK; + } + + FS_FindClose(); + + if( FS_FindFirst( cs_strlwr( ext ), 0, 0 ) ) + { + *Wolf_Ext |= WL6_PAK; + } + + FS_FindClose(); + + +// +// Spear of Destiny Demo +// + cs_strlcpy( ext, SDM_FEXT, sizeof( ext ) ); + + if( FS_FindFirst( cs_strupr( ext ), 0, 0 ) ) + { + *Wolf_Ext |= SDM_PAK; + } + + FS_FindClose(); + + if( FS_FindFirst( cs_strlwr( ext ), 0, 0 ) ) + { + *Wolf_Ext |= SDM_PAK; + } + + FS_FindClose(); + + +// +// Spear of Destiny +// + cs_strlcpy( ext, SOD_FEXT, sizeof( ext ) ); + + if( FS_FindFirst( cs_strupr( ext ), 0, 0 ) ) + { + *Wolf_Ext |= SOD_PAK; + } + + FS_FindClose(); + + if( FS_FindFirst( cs_strlwr( ext ), 0, 0 ) ) + { + *Wolf_Ext |= SOD_PAK; + } + + FS_FindClose(); + +// +// Macintosh Wolfenstein 3-D +// + cs_strlcpy( ext, MAC_FEXT, sizeof( ext ) ); + + if( FS_FindFirst( cs_strupr( ext ), 0, 0 ) ) + { + *Wolf_Ext |= MAC_PAK; + } + + FS_FindClose(); + + if( FS_FindFirst( cs_strlwr( ext ), 0, 0 ) ) + { + *Wolf_Ext |= MAC_PAK; + } + + FS_FindClose(); +} + +/* +----------------------------------------------------------------------------- + Function: main -Interface to Wolfenstein data decoder. + + Parameters: Nothing. + + Returns: 0 on success, non-zero otherwise. + + Notes: This is the application entry point. + + 1. Search for Wolfenstein data files. + 2. Decode data accordingly. + +----------------------------------------------------------------------------- +*/ +int main( int argc, char *argv[] ) +{ + W16 Wolf_Ext = 0; // bit 0 high -WL1 extension + // bit 1 high -WL6 extension + // bit 2 high -SDM extension + // bit 3 high -SOD extension + // bit 4 high -MAC extension + + W32 retval; + + +#if 0 + + extern char gamepal[]; + + int test = 0x32 * 3; + printf( "%d, %d, %d\n", gamepal[ test ]<<2, gamepal[ test+1 ]<<2, gamepal[ test+2 ]<<2 ); + return 0; + +#endif + +#if 0 // hack to just fix the red cross health pack sprite + { + void UpdateSingleSprite( const char *srcTGA, const char *destTGA ); + + UpdateSingleSprite( "c:/027.tga", "c:/fixed_027.tga" ); + exit( 0 ); + } +#endif + + printf( "\nWolfExtractor %s %s\n", BUILDSTRING, CPUSTRING ); + printf( "Version %s built on %s at %s\n\n", APP_VERSION, __DATE__, __TIME__ ); + + + if( ! FS_ChangeCurrentDirectory( BASEDIR ) ) + { + printf( "Unable to change into directory (%s)\n", BASEDIR ); + + return 1; + } + + + CheckForDataFiles( &Wolf_Ext ); + if( ! Wolf_Ext ) + { + printf( "No Wolfenstein data files found!\n" ); + + return 1; + } + + InitLUTs(); // This is for hq2x + + if( Wolf_Ext & WL1_PAK ) + { + printf( "\nFound Wolfenstein 3-D demo data files\n" ); + + retval = 0; + + retval = LumpExtractor( WL1_FEXT+1, WL1_LATCHPICS_LUMP_END+5, WL1_PAK ); + retval += PExtractor( WL1_FEXT+1, WL1_PAK ); + retval += AudioRipper( WL1_FEXT+1, 87, 174, WL1_PAK ); + retval += MapRipper( WL1_FEXT+1, WL1_PAK ); + + if( retval != 4 ) + { + printf( "\nAn Error Has Occurred, exiting!\n" ); + + return 1; + } + +//!@# JDC PAK_builder( "wolf_demo.pak", WL1_PAK ); + } + + + if( Wolf_Ext & WL6_PAK ) + { + printf( "\nFound Wolfenstein 3-D data files\n" ); + + retval = 0; + + retval = LumpExtractor( WL6_FEXT+1, WL6_LATCHPICS_LUMP_END, WL6_PAK ); + retval += PExtractor( WL6_FEXT+1, WL6_PAK ); + retval += AudioRipper( WL6_FEXT+1, 87, 174, WL6_PAK ); + retval += MapRipper( WL6_FEXT+1, WL6_PAK ); + + if( retval != 4 ) + { + printf( "\nAn Error Has Occurred, exiting!\n" ); + + return 1; + } + +//!@# JDC PAK_builder( "wolf.pak", WL6_PAK ); + } + + if( Wolf_Ext & SDM_PAK ) + { + printf( "\nFound Spear of Destiny demo data files\n" ); + + retval = 0; + + retval = LumpExtractor( SDM_FEXT+1, 127, SDM_PAK ); + retval += PExtractor( SDM_FEXT+1, SDM_PAK ); + retval += AudioRipper( SDM_FEXT+1, 81, 162, SDM_PAK ); + retval += MapRipper( SDM_FEXT+1, SDM_PAK ); + + if( retval != 4 ) + { + printf( "\nAn Error Has Occurred, exiting!\n" ); + + return 1; + } + + return; + +//!@# JDC PAK_builder( "spear_demo.pak", SDM_PAK ); + } + + if( Wolf_Ext & SOD_PAK ) + { + printf( "\nFound Spear of Destiny data files\n" ); + + retval = 0; + + retval = LumpExtractor( SOD_FEXT+1, 149, SOD_PAK ); + retval += PExtractor( SOD_FEXT+1, SOD_PAK ); + retval += AudioRipper( SOD_FEXT+1, 81, 162, SOD_PAK ); + retval += MapRipper( SOD_FEXT+1, SOD_PAK ); + + if( retval != 4 ) + { + printf( "\nAn Error Has Occurred, exiting!\n" ); + + return 1; + } + +//!@# JDC PAK_builder( "spear.pak", SOD_PAK ); + } + + if( Wolf_Ext & MAC_PAK ) + { + printf( "\nFound Macintosh binary file\n" ); + + ripMac(); + + //PAK_builder( "mac.pak", MAC_PAK ); + } + + +//!@# JDC deleteCacheDirectories( Wolf_Ext ); + + + return 0; +} + diff --git a/wolf3d/wolfextractor/makefile b/wolf3d/wolfextractor/makefile new file mode 100644 index 0000000..e4c72c7 --- /dev/null +++ b/wolf3d/wolfextractor/makefile @@ -0,0 +1,191 @@ +# +# Project: Wolfenstein 3-D Redux +# +# Program: wolfextractor +# + +COMPILER = gcc +CFLAGS = -Wall -c -O2 +LDFLAGS = -s +ODIR = Release + +EXEBASE = wolfextractor +EXE = $(ODIR)/$(EXEBASE) + +DO_CC = $(COMPILER) $(CFLAGS) -o $@ -c $< + + +all: $(EXE) + + + + +clean: + rm -f $(ODIR)/*.o $(EXE) + + +PROGRAM_FILES = $(ODIR)/adlib.o \ + $(ODIR)/fmopl.o \ + $(ODIR)/arch.o \ + $(ODIR)/file.o \ + $(ODIR)/unix_file.o \ + $(ODIR)/glob.o \ + $(ODIR)/com_string.o \ + $(ODIR)/tga.o \ + $(ODIR)/wav.o \ + $(ODIR)/memory.o \ + $(ODIR)/mac.o \ + $(ODIR)/wl6_name.o \ + $(ODIR)/wolf_aud.o \ + $(ODIR)/wolf_gfx.o \ + $(ODIR)/wolf_map.o \ + $(ODIR)/wolf_pal.o \ + $(ODIR)/wolf_pm.o \ + $(ODIR)/zipfile.o \ + $(ODIR)/adler32.o \ + $(ODIR)/compress.o \ + $(ODIR)/crc32.o \ + $(ODIR)/deflate.o \ + $(ODIR)/trees.o \ + $(ODIR)/zutil.o \ + $(ODIR)/hq2x.o \ + $(ODIR)/pak.o \ + $(ODIR)/vorbisenc_inter.o \ + $(ODIR)/main.o + + + +$(EXE): $(PROGRAM_FILES) + ${COMPILER} -o $(EXE) $(PROGRAM_FILES) $(LDFLAGS) -lvorbis -lvorbisenc -logg -lm + + + +#=========================================================================== +# Build +#=========================================================================== + + + +# +# adlib/ +# +$(ODIR)/adlib.o : adlib/adlib.c + $(DO_CC) + +$(ODIR)/fmopl.o : adlib/fmopl.c + $(DO_CC) + +# +# common/ +# +$(ODIR)/arch.o : ../../common/arch.c + $(DO_CC) + +# +# filesys/ +# +$(ODIR)/file.o : filesys/file.c + $(DO_CC) + +# +# filesys/unix/ +# +$(ODIR)/unix_file.o : filesys/unix/unix_file.c + $(DO_CC) + +$(ODIR)/glob.o : filesys/unix/glob.c + $(DO_CC) + +# +# loaders/ +# +$(ODIR)/tga.o : loaders/tga.c + $(DO_CC) + +$(ODIR)/wav.o : loaders/wav.c + $(DO_CC) + +# +# mac/ +# +$(ODIR)/mac.o : mac/mac.c + $(DO_CC) + +# +# memory/ +# +$(ODIR)/memory.o : memory/memory.c + $(DO_CC) + +# +# string/ +# +$(ODIR)/com_string.o : string/com_string.c + $(DO_CC) + +# +# wolf/ +# +$(ODIR)/wl6_name.o : wolf/wl6_name.c + $(DO_CC) + +$(ODIR)/wolf_aud.o : wolf/wolf_aud.c + $(DO_CC) + +$(ODIR)/wolf_gfx.o : wolf/wolf_gfx.c + $(DO_CC) + +$(ODIR)/wolf_map.o : wolf/wolf_map.c + $(DO_CC) + +$(ODIR)/wolf_pal.o : wolf/wolf_pal.c + $(DO_CC) + +$(ODIR)/wolf_pm.o : wolf/wolf_pm.c + $(DO_CC) + +# +# zip/ +# +$(ODIR)/zipfile.o : zip/zipfile.c + $(DO_CC) + +# +# zlib/ +# +$(ODIR)/adler32.o : ../../zlib/adler32.c + $(DO_CC) + +$(ODIR)/compress.o : ../../zlib/compress.c + $(DO_CC) + +$(ODIR)/crc32.o : ../../zlib/crc32.c + $(DO_CC) + +$(ODIR)/deflate.o : ../../zlib/deflate.c + $(DO_CC) + +$(ODIR)/trees.o : ../../zlib/trees.c + $(DO_CC) + +$(ODIR)/zutil.o : ../../zlib/zutil.c + $(DO_CC) + +# +# +# +$(ODIR)/hq2x.o : hq2x.c + $(DO_CC) + +$(ODIR)/pak.o : pak.c + $(DO_CC) + +$(ODIR)/vorbisenc_inter.o : vorbisenc_inter.c + $(DO_CC) + +$(ODIR)/main.o : main.c + $(DO_CC) + + + + diff --git a/wolf3d/wolfextractor/makefile.freebsd b/wolf3d/wolfextractor/makefile.freebsd new file mode 100644 index 0000000..c7a8646 --- /dev/null +++ b/wolf3d/wolfextractor/makefile.freebsd @@ -0,0 +1,190 @@ +# +# Project: Wolfenstein 3-D Redux +# +# Program: wolfextractor +# + +COMPILER = gcc +CFLAGS = -Wall -c -O2 -idirafter /usr/local/include +LDFLAGS = -s +ODIR = Release + +EXEBASE = wolfextractor +EXE = $(ODIR)/$(EXEBASE) + + + +all: $(EXE) + + +VORBISFLAGS = -L/usr/local/lib -lvorbis -lvorbisenc -logg + + +clean: + rm -f $(ODIR)/*.o $(EXE) + + +PROGRAM_FILES = $(ODIR)/adlib.o $(ODIR)/fmopl.o $(ODIR)/arch.o $(ODIR)/file.o $(ODIR)/unix_file.o $(ODIR)/glob.o $(ODIR)/com_string.o $(ODIR)/tga.o $(ODIR)/wav.o $(ODIR)/mac.o $(ODIR)/memory.o $(ODIR)/wl6_name.o $(ODIR)/wolf_aud.o $(ODIR)/wolf_gfx.o $(ODIR)/wolf_map.o $(ODIR)/wolf_pal.o $(ODIR)/wolf_pm.o $(ODIR)/zipfile.o $(ODIR)/adler32.o $(ODIR)/compress.o $(ODIR)/crc32.o $(ODIR)/deflate.o $(ODIR)/trees.o $(ODIR)/zutil.o $(ODIR)/hq2x.o $(ODIR)/pak.o $(ODIR)/vorbisenc_inter.o $(ODIR)/main.o + + + +$(EXE): $(PROGRAM_FILES) + ${COMPILER} -o $(EXE) $(PROGRAM_FILES) $(LDFLAGS) $(VORBISFLAGS) -lm + + + +#=========================================================================== +# Build +#=========================================================================== + +# +# adlib/ +# +$(ODIR)/adlib.o : adlib/adlib.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +$(ODIR)/fmopl.o : adlib/fmopl.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +# +# common/ +# +$(ODIR)/arch.o : ../../common/arch.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +# +# filesys/ +# +$(ODIR)/file.o : filesys/file.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +# +# filesys/unix/ +# +$(ODIR)/unix_file.o : filesys/unix/unix_file.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +$(ODIR)/glob.o : filesys/unix/glob.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +# +# loaders/ +# +$(ODIR)/tga.o : loaders/tga.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +$(ODIR)/wav.o : loaders/wav.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +# +# mac/ +# +$(ODIR)/mac.o : mac/mac.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +# +# memory/ +# +$(ODIR)/memory.o : memory/memory.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +# +# string/ +# +$(ODIR)/com_string.o : string/com_string.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +# +# wolf/ +# +$(ODIR)/wl6_name.o : wolf/wl6_name.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +$(ODIR)/wolf_aud.o : wolf/wolf_aud.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +$(ODIR)/wolf_gfx.o : wolf/wolf_gfx.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +$(ODIR)/wolf_map.o : wolf/wolf_map.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +$(ODIR)/wolf_pal.o : wolf/wolf_pal.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +$(ODIR)/wolf_pm.o : wolf/wolf_pm.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i +# +# zip/ +# +$(ODIR)/zipfile.o : zip/zipfile.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +# +# zlib/ +# +$(ODIR)/adler32.o : ../../zlib/adler32.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +$(ODIR)/compress.o : ../../zlib/compress.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +$(ODIR)/crc32.o : ../../zlib/crc32.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +$(ODIR)/deflate.o : ../../zlib/deflate.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +$(ODIR)/trees.o : ../../zlib/trees.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +$(ODIR)/zutil.o : ../../zlib/zutil.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +# +# +# + +$(ODIR)/hq2x.o : hq2x.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +$(ODIR)/pak.o : pak.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +$(ODIR)/vorbisenc_inter.o : vorbisenc_inter.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + +$(ODIR)/main.o : main.c + ${COMPILER} $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i + ${COMPILER} $(CFLAGS) -o $@ /tmp/temp.i + + + + diff --git a/wolf3d/wolfextractor/memory/memory.c b/wolf3d/wolfextractor/memory/memory.c new file mode 100644 index 0000000..faec3d4 --- /dev/null +++ b/wolf3d/wolfextractor/memory/memory.c @@ -0,0 +1,198 @@ +/* + + Copyright (C) 2004 Michael Liebscher + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * memory.c: Memory allocation module. + * + * Author: Michael Liebscher + * Date: 2004 + * + * + */ + +#include +#include + +#include "memory.h" + + + +#ifndef PARANOID + + #define PARANOID 0 + +#endif /* PARANOID */ + + +/* +----------------------------------------------------------------------------- + Function: Memory_malloc -Allocates memory blocks. + + Parameters: size -[in] Bytes to allocate. + + Returns: + Void pointer to the allocated space on success, or NULL if + there is insufficient memory available. + + Notes: + +----------------------------------------------------------------------------- +*/ +PUBLIC void *Memory_malloc( size_t size ) +{ + void *ptr; + ptr = malloc( size ); + + if( ptr != NULL ) + { + +#if PARANOID + + printf( "Memory malloc: %p size:%ld\n", ptr, size ); + +#endif + + return ptr; + } + + + printf( "[memory.c] Could not allocate %d bytes\n", size ); + + return NULL; +} + + +/* +----------------------------------------------------------------------------- + Function: Memory_calloc -Allocates an array in memory with elements + initialized to 0. + + Parameters: + num -[in] Number of elements. + size -[in] Bytes to allocate. + + Returns: + Void pointer to the allocated space on success, or NULL if + there is insufficient memory available. + + Notes: + +----------------------------------------------------------------------------- +*/ +PUBLIC void *Memory_calloc( size_t num, size_t size ) +{ + void *ptr; + ptr = calloc( num, size ); + + if( ptr != NULL ) + { + +#if PARANOID + + printf( "Memory calloc: %p size:%ld num:%ld\n", ptr, size, num ); + +#endif + + return ptr; + } + + + printf( "[memory.c] Could not allocate %d objects of size %d\n", num, size); + + return NULL; +} + +/* +----------------------------------------------------------------------------- + Function: Memory_realloc -Reallocate memory blocks. + + Parameters: + memblock -[in] Pointer to previously allocated memory block. + size -[in] Bytes to allocate. + + Returns: + A void pointer to the reallocated (and possibly moved) memory + block. The return value is NULL if the size is zero and the + buffer argument is not NULL, or if there is not enough + available memory to expand the block to the given size. + + Notes: + +----------------------------------------------------------------------------- +*/ +PUBLIC void *Memory_realloc( void *memblock, size_t size ) +{ + void *ptr; + + ptr = realloc( memblock, size ); + + if( ptr != NULL ) + { + +#if PARANOID + + printf( "Memory realloc: %p size:%ld\n", ptr, size ); + +#endif + + return ptr; + } + + printf( "[memory.c] Could not reallocate %d bytes\n", size ); + + return NULL; +} + + +/* +----------------------------------------------------------------------------- + Function: Memory_free -Deallocates or frees a memory block. + + Parameters: + memblock -[in] Previously allocated memory block to be freed. + + Returns: Nothing. + + Notes: + +----------------------------------------------------------------------------- +*/ +PUBLIC void Memory_free( void *memblock ) +{ + if( memblock ) + { + +#if PARANOID + + printf( "Memory free: %p\n", memblock ); + +#endif + + free( memblock ); + } +} + + +PUBLIC void Memory_outofmem( const char *name, const char *file, W32 line ) +{ + + printf( "%s:%ld failed allocation for \"%s\"\n", file, line, name ); + +} diff --git a/wolf3d/wolfextractor/memory/memory.h b/wolf3d/wolfextractor/memory/memory.h new file mode 100644 index 0000000..b41af11 --- /dev/null +++ b/wolf3d/wolfextractor/memory/memory.h @@ -0,0 +1,67 @@ +/* + + Copyright (C) 2004 Michael Liebscher + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * memory.h: Memory allocation manager. + * + * Author: Michael Liebscher + * Date: 2004 + * + */ + +/* + Notes: + This module is implemented by memory.c. + +*/ + +#ifndef __MEMORY_H__ +#define __MEMORY_H__ + +#include + +#include "../../../common/arch.h" +#include "../../../common/common_utils.h" + + +// Use the macros + +extern void *Memory_malloc( size_t size ); +extern void *Memory_calloc( size_t num, size_t size ); +extern void *Memory_realloc( void *memblock, size_t size ); +extern void Memory_free( void *memblock ); + +extern void Memory_outofmem( const char *name, const char *file, W32 line ); + + +#define MM_MALLOC( size ) Memory_malloc( (size) ) +#define MM_CALLOC( num, size ) Memory_calloc( (num), (size) ) +#define MM_REALLOC( memblock, size ) Memory_realloc( (memblock), (size) ) + +#define MM_FREE( memblock ) { Memory_free( (memblock) ); ((memblock)) = NULL; } + +#define MM_OUTOFMEM( name ) Memory_outofmem( (name), __FILE__, __LINE__ ) + + + + + + +#endif /* __MEMORY_H__ */ diff --git a/wolf3d/wolfextractor/ogg_static.lib b/wolf3d/wolfextractor/ogg_static.lib new file mode 100644 index 0000000..33d39e4 Binary files /dev/null and b/wolf3d/wolfextractor/ogg_static.lib differ diff --git a/wolf3d/wolfextractor/pak.c b/wolf3d/wolfextractor/pak.c new file mode 100644 index 0000000..94abece --- /dev/null +++ b/wolf3d/wolfextractor/pak.c @@ -0,0 +1,640 @@ +/* + + Copyright (C) 2004 Michael Liebscher + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * pak.c: Creates PAK files for Wolfenstein 3-D Redux + * + * Author: Michael Liebscher + * Date: 2004 + * + */ + +#include + +#include "wolf/wolf_def.h" +#include "mac/mac.h" +#include "memory/memory.h" +#include "../../common/arch.h" +#include "../../common/common_utils.h" +#include "string/com_string.h" +#include "filesys/file.h" +#include "zip/zip.h" + +#include "../../zlib/zlib.h" + + +#define SCRIPTNAME "DEFAULT.CFG" +#define GVERSION_TEXT "set g_version " + +#define SCRIPT_DIR "script" + + +PRIVATE struct zlist *zfchain = NULL; // Zip file chain + + + +/* +----------------------------------------------------------------------------- + Function: writelocalfilechunk() -Zip file. + + Parameters: filename -[in] Pointer to a NUL-terminated string that specifies + the path of the file to zip. + fout -[in] file to zip to. + + Returns: On success pointer to zlist structure, otherwise NULL. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE struct zlist *writelocalfilechunk( const char *filename, FILE *fout ) +{ + W8 *data; + struct zlist *zentry; + struct filestats fs; + int err; + W8 *compr; + W32 retval; + z_stream c_stream; /* compression stream */ + + + zentry = MM_MALLOC( sizeof( *zentry ) ); + + memset( zentry, 0, sizeof( *zentry ) ); + zentry->next = NULL; + + zentry->versionmadeby = VMB_VFAT; + zentry->versionneeded = 20; + zentry->disknumstart = 0; + zentry->compression_method = CM_DEFLATED; + + zentry->deletefile = 1; + + zentry->uncompressed_size = FS_LoadFile( filename, &data ); + + if( zentry->uncompressed_size == -1 || data == NULL ) + { + printf( "Could not open file (%s)\n", filename ); + MM_FREE( zentry ); + + return NULL; + } + + + FS_GetFileAttributes( filename, &fs ); + + zentry->timedate = UnixTimeToDosTime( &fs.lastwritetime ); + + +// +// Compression +// + c_stream.zalloc = (alloc_func)0; + c_stream.zfree = (free_func)0; + c_stream.opaque = (voidpf)0; + + err = deflateInit( &c_stream, Z_DEFAULT_COMPRESSION ); + if( err != Z_OK ) + { + MM_FREE( data ); + MM_FREE( zentry ); + + return NULL; + } + + + zentry->compressed_size = (zentry->uncompressed_size / 10) + 12 + zentry->uncompressed_size; + + + compr = MM_MALLOC( zentry->compressed_size ); + + + + + + c_stream.next_out = compr; + c_stream.avail_out = (uInt)zentry->compressed_size; + + c_stream.next_in = data; + c_stream.avail_in = (uInt)zentry->uncompressed_size; + + + err = deflate( &c_stream, Z_FINISH ); + if( err != Z_STREAM_END ) + { + MM_FREE( compr ); + MM_FREE( data ); + MM_FREE( zentry ); + + return NULL; + } + + + err = deflateEnd( &c_stream ); + if( err != Z_OK ) + { + MM_FREE( compr ); + MM_FREE( data ); + MM_FREE( zentry ); + + return NULL; + } + + + // When using the deflate method, ZLib adds a 2 byte head + // and a 4 byte tail. The head must be removed for zip + // compatability and the tail is not necessary. + zentry->compressed_size = c_stream.total_out - 6; + +// +// End of compression +// + + + zentry->crc32 = crc32( 0, data, zentry->uncompressed_size ); + + cs_strlcpy( zentry->filename, filename, sizeof( zentry->filename ) ); + zentry->filename_length = strlen( zentry->filename ); + + zentry->offset = ftell( fout ); + + // Write header to file + if( ! zip_writelocalfileheader( zentry, fout ) ) + { + printf( "Error writing local header to zip file\n" ); + MM_FREE( compr ); + MM_FREE( data ); + MM_FREE( zentry ); + + return NULL; + } + + // Write data to file + retval = fwrite( compr+2, 1, zentry->compressed_size, fout ); + if( retval != zentry->compressed_size ) + { + printf( "Error writing data after local header to zip file\n" ); + MM_FREE( compr ); + MM_FREE( data ); + MM_FREE( zentry ); + + return NULL; + } + + MM_FREE( compr ); + MM_FREE( data ); + + + return zentry; +} + +/* +----------------------------------------------------------------------------- + Function: writecentralchunk() -Write central headers for Zip file. + + Parameters: z -[in] Chain of zlist structures. + fout -[in] file to write to. + + Returns: On success true, otherwise false. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE _boolean writecentralchunk( struct zlist *z, FILE *fout ) +{ + W32 central_offset; + W32 central_size; + W32 num = 0; + struct zlist *ztemp; + + if( z == NULL ) + { + printf( "NULL zip list passed into writecentralchunk().\n" ); + + return false; + } + + central_offset = ftell( fout ); + + ztemp = z; + do + { + ++num; + if( ! zip_writecentral( ztemp, fout ) ) + { + printf( "Error writing central header to zip file\n" ); + return false; + } + + ztemp = ztemp->next; + + } while( ztemp ); + + central_size = ftell( fout ) - central_offset; + + if( ! zip_writeend( num, central_size, central_offset, 0, NULL, fout ) ) + { + printf( "Error writing end header to zip file\n" ); + + return false; + } + + return true; +} + +/* +----------------------------------------------------------------------------- + Function: parsedirectory() -Write central headers for Zip file. + + Parameters: path -[in] path to parse. + fout -[in] zip file to write to. + + Returns: On success pointer to zlist structure, otherwise NULL. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE _boolean parsedirectory( const char *path, FILE *f ) +{ + char temp[ 256 ]; + char *ptr; + struct zlist *znewnode = NULL; + + + cs_strlcpy( temp, path, sizeof( temp ) ); + + if( strstr( temp, "*" ) == NULL ) + { + cs_strlcat( temp, "/*", sizeof( temp ) ); + } + + // run findfirst once so we can use findnext in a loop. + // This will return the current directory + (void)FS_FindFirst( temp, 0, 0 ); + + // Look for files + while( (ptr = FS_FindNext( 0, FA_DIR )) != NULL ) + { + znewnode = writelocalfilechunk( ptr, f ); + if( znewnode == NULL ) + { + continue; + } + + // add new link to chain + znewnode->next = zfchain; + zfchain = znewnode; + + } + + FS_FindClose(); + + return true; // return pointer to start of chain +} + +/* +----------------------------------------------------------------------------- + Function: addscripttozipfile() -Add script file to zip file. + + Parameters: filename -[in] File name of script file. + fout -[in] zip file to write to. + version -[in] + + Returns: On success pointer to zlist structure, otherwise NULL. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE struct zlist *addscripttozipfile( char *filename, FILE *fout, W16 version ) +{ + W8 *data; + struct zlist *zentry; + struct filestats fs; + int err; + W32 retval; + W8 *compr; + z_stream c_stream; /* compression stream */ + char commandline[ 256 ]; + int value = 0; + FILE *fin; + + fin = fopen( filename, "rb" ); + if( fin == NULL ) + { + return NULL; + } + + retval = FS_FileLength( fin ); + + if( retval == -1 ) + { + printf( "Could not open file (%s)\n", filename ); + + return NULL; + } + + // add g_version command + if( version == SDM_PAK || version == SOD_PAK ) + { + value = 1; + } + else + { + value = 0; + } + cs_snprintf( commandline, sizeof( commandline ), "\n%s%d\n", GVERSION_TEXT, value ); + + + data = MM_MALLOC( retval + strlen( commandline ) + 1 ); + + if( fread( data, 1, retval, fin ) != retval ) + { + printf( "Could not read from file (%s)\n", filename ); + + MM_FREE( data ) + + return NULL; + } + + fclose( fin ); + + memcpy( data + retval, commandline, strlen( commandline ) ); + + + zentry = MM_MALLOC( sizeof( *zentry ) ); + memset( zentry, 0, sizeof( *zentry ) ); + zentry->next = NULL; + + zentry->versionmadeby = VMB_VFAT; + zentry->versionneeded = 20; + zentry->disknumstart = 0; + zentry->compression_method = CM_DEFLATED; + + zentry->deletefile = 0; + + zentry->uncompressed_size = retval + strlen( commandline ); + + FS_GetFileAttributes( filename, &fs ); + + zentry->timedate = UnixTimeToDosTime( &fs.lastwritetime ); + +// +// Compression +// + c_stream.zalloc = (alloc_func)0; + c_stream.zfree = (free_func)0; + c_stream.opaque = (voidpf)0; + + err = deflateInit( &c_stream, Z_DEFAULT_COMPRESSION ); + if( err != Z_OK ) + { + MM_FREE( data ); + MM_FREE( zentry ); + + return NULL; + } + + + zentry->compressed_size = (zentry->uncompressed_size / 10) + 12 + zentry->uncompressed_size; + + + compr = MM_MALLOC( zentry->compressed_size ); + + + + + + c_stream.next_out = compr; + c_stream.avail_out = (uInt)zentry->compressed_size; + + c_stream.next_in = data; + c_stream.avail_in = (uInt)zentry->uncompressed_size; + + + err = deflate( &c_stream, Z_FINISH ); + if( err != Z_STREAM_END ) + { + MM_FREE( compr ); + MM_FREE( data ); + MM_FREE( zentry ); + + return NULL; + } + + + err = deflateEnd( &c_stream ); + if( err != Z_OK ) + { + MM_FREE( compr ); + MM_FREE( data ); + MM_FREE( zentry ); + + return NULL; + } + + + // When using the deflate method, ZLib adds a 2 byte head + // and a 4 byte tail. The head must be removed for zip + // compatability and the tail is not necessary. + zentry->compressed_size = c_stream.total_out - 6; + +// +// End of compression +// + + + zentry->crc32 = crc32( 0, data, zentry->uncompressed_size ); + + cs_strlcpy( zentry->filename, filename, sizeof( zentry->filename ) ); + zentry->filename_length = strlen( zentry->filename ); + + zentry->offset = ftell( fout ); + + // Write header to file + if( ! zip_writelocalfileheader( zentry, fout ) ) + { + printf( "Error writing local header to zip file\n" ); + MM_FREE( compr ); + MM_FREE( data ); + MM_FREE( zentry ); + + return NULL; + } + + // Write data to file + retval = fwrite( compr+2, 1, zentry->compressed_size, fout ); + if( retval != zentry->compressed_size ) + { + printf( "Error writing data after local header to zip file\n" ); + MM_FREE( compr ); + MM_FREE( data ); + MM_FREE( zentry ); + + return NULL; + } + + MM_FREE( compr ); + MM_FREE( data ); + + + return zentry; +} + +/* +----------------------------------------------------------------------------- + Function: deletezlist() -delete zip file chain. + + Parameters: in -[in] zlist structure chain to delete. + deletefile -[in] Delete the file? + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE void deletezlist( struct zlist *in, _boolean deletefile ) +{ + struct zlist *z1; + + if( in == NULL ) + { + printf( "NULL zip list passed into deletezlist.\n" ); + + return; + } + + if( deletefile ) + { + printf( "Removing cached files.\n" ); + } + + z1 = in->next; + do + { + if( in ) + { + // delete file + if( deletefile && in->deletefile ) + { + if( ! FS_DeleteFile( in->filename ) ) + { + printf( "Unable to delete file (%s)\n", in->filename ); + } + } + + MM_FREE( in ); + } + + if( z1 ) + { + in = z1; + z1 = in->next; + } + + } while( in ); + +} + +/* +----------------------------------------------------------------------------- + Function: PAK_builder() -Builds a PAK file for Wolfenstein 3-D Redux. + + Parameters: path -[in] game path. + packname -[in] Name of PAK file to create. + version -[in] Versions of game files create/found. + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC void PAK_builder( const char *packname, W16 version ) +{ + FILE *fout; + + printf( "\n\nGenerating pack file (%s)\nThis could take a few minutes.\n", packname ); + + + fout = fopen( packname, "wb" ); + if( fout == NULL ) + { + printf( "[PAK_builder]: Could not create file (%s)\n", packname ); + return; + } + + + // Script file should be first + zfchain = addscripttozipfile( SCRIPTNAME, fout, version ); + + + if( version & WL1_PAK || version & WL6_PAK || + version & SDM_PAK || version & SOD_PAK ) + { + parsedirectory( MAPDIR, fout ); + parsedirectory( LGFXDIR, fout ); + parsedirectory( GFXWALLDIR, fout ); + parsedirectory( MUSICDIR, fout ); + + if( version & WL1_PAK || version & WL6_PAK ) + { + parsedirectory( SCRIPT_DIR, fout ); + parsedirectory( SFXDIR, fout ); + parsedirectory( GFXSPRITEDIR, fout ); + parsedirectory( LSFXDIR, fout ); + } + + if( version & SDM_PAK || version & SOD_PAK ) + { + parsedirectory( SODSFXDIR, fout ); + parsedirectory( SODGFXSPRITEDIR, fout ); + parsedirectory( SODLSFXDIR, fout ); + } + } + + if( version & MAC_PAK ) + { + parsedirectory( DIRPATHSPRITES, fout ); + parsedirectory( DIRPATHWALLS, fout ); + parsedirectory( DIRPATHPICS, fout ); + parsedirectory( DIRPATHMIDI, fout ); + } + + + if( ! writecentralchunk( zfchain, fout ) ) + { + + deletezlist( zfchain, false ); + + // close and delete zip file. + fclose( fout ); + + FS_DeleteFile( packname ); + + return; + } + + + // close zip file. + fclose( fout ); + + deletezlist( zfchain, true ); + zfchain = NULL; + +} + diff --git a/wolf3d/wolfextractor/string/com_string.c b/wolf3d/wolfextractor/string/com_string.c new file mode 100644 index 0000000..1f44c2e --- /dev/null +++ b/wolf3d/wolfextractor/string/com_string.c @@ -0,0 +1,359 @@ +/* + + Copyright (C) 2004 Michael Liebscher + Copyright (C) 1998 Todd C. Miller + Copyright (C) 1997-2001 Id Software, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * com_string.c: Common string functions done in a portable manner. + * + * Author: Michael Liebscher + * Date: 2004 + * + * Acknowledgement: + * Portion of this code was derived from Quake II, and was originally + * written by Id Software, Inc. + * + * Portion of this code was derived from code that was originally + * written by Todd C. Miller. + * + */ + + +#include +#include + +#include +#include + +#include "com_string.h" +#include "../../../common/arch.h" +#include "../../../common/common_utils.h" + + + +/* +----------------------------------------------------------------------------- + Function: cs_strlcpy -Copies a specified number of characters from a + source string into a buffer. + + Parameters: dest -[in/out] Pointer to a buffer into which the function + copies characters + source -[in] Pointer to a NUL-terminated string from which + the function copies characters. + nMaxLength -[in] Specifies the number of bytes to be copied + from the string pointed to by source into the + buffer pointed to by dest. + + Returns: Returns strlen( source ); if retval >= nMaxLength, truncation + occurred. + + Notes: + At most nMaxLength-1 characters will be copied. Always NUL- + terminates (unless nMaxLength == 0). +----------------------------------------------------------------------------- +*/ +PUBLIC size_t cs_strlcpy( char *dest, const char *source, size_t nMaxLength ) +{ + char *d = dest; + const char *s = source; + size_t n = nMaxLength; + + /* Copy as many bytes as will fit */ + if( n != 0 && --n != 0 ) + { + do + { + if( (*d++ = *s++) == 0 ) + { + break; + } + + } while( --n != 0 ); + } + + /* Not enough room in dest, add NUL and traverse rest of source */ + if( n == 0 ) + { + if( nMaxLength != 0 ) + { + *d = '\0'; /* NUL-terminate dest */ + } + + while( *s++ ) + { + ; + } + } + + return( s - source - 1 ); /* count does not include NUL */ +} + +/* +----------------------------------------------------------------------------- + Function: cs_strlcat -Appends one string to another. + + Parameters: dest -[in/out] Pointer to a NUL-terminated string. The buffer + must be large enough to contain both strings or else + truncation will occur. + source -[in] Pointer to a NUL-terminated string from which + the function copies characters. + nMaxLength -[in] full size of dest, not space left. + + Returns: Returns strlen( source ) + MIN( nMaxLength, strlen( initial dest ) ). + If retval >= nMaxLength, truncation occurred. + + Notes: + At most nMaxLength-1 characters will be copied. Always NUL- + terminates (unless nMaxLength <= strlen( dest ) ). +----------------------------------------------------------------------------- +*/ +PUBLIC size_t cs_strlcat( char *dest, const char *source, size_t nMaxLength ) +{ + char *d = dest; + const char *s = source; + size_t n = nMaxLength; + size_t dlen; + + /* Find the end of dest and adjust bytes left but don't go past end */ + while( n-- != 0 && *d != '\0' ) + { + d++; + } + + dlen = d - dest; + n = nMaxLength - dlen; + + /* No room left to append string */ + if( n == 0 ) + { + return( dlen + strlen( s ) ); + } + + while( *s != '\0' ) + { + if( n != 1 ) + { + *d++ = *s; + n--; + } + s++; + } + *d = '\0'; /* NUL-terminate string */ + + return( dlen + (s - source) ); /* count does not include NUL */ + +} + + +/* +----------------------------------------------------------------------------- + Function: cs_strnicmp -Compare characters of two strings without regard to case. + + Parameters: string1, string2 -[in] NUL-terminated strings to compare. + count -[in] Number of characters to compare. + + Returns: 0 string1 identical to string2, -1 otherwise. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC int cs_strnicmp( const char *string1, const char *string2, size_t count ) +{ + char c1, c2; + + if( ! string1 || ! *string1 || + ! string2 || ! *string2 ) + { + return -1; + } + + do + { + c1 = *string1++; + c2 = *string2++; + + if( ! count-- ) + { + return 0; /* strings are equal until end point */ + } + + if( c1 != c2 ) + { + if( TOUPPER( c1 ) != TOUPPER( c2 ) ) /* Uppercase compare */ + { + return -1; /* strings are not equal */ + } + } + + } while( c1 ); + + return 0; /* strings are equal */ +} + +/* +----------------------------------------------------------------------------- + Function: cs_stricmp -Perform an uppercase comparison of strings. + + Parameters: string1, string2 -[in] Null-terminated strings to compare. + + Returns: 0 string1 identical to string2, -1 otherwise. + + Notes: + This is a case insensitive compare. + Calls cs_strnicmp, where count is 99999 +----------------------------------------------------------------------------- +*/ +PUBLIC int cs_stricmp( const char *string1, const char *string2 ) +{ + return cs_strnicmp( string1, string2, 99999 ); +} + +/* +----------------------------------------------------------------------------- + Function: cs_snprintf -Write formatted data to a string. + + Parameters: dest -[out] Storage location for output. + size -[in] Maximum number of characters to store. + format -[in] Format-control string. + ... -[in] Optional arguments. + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC void cs_snprintf( char *dest, size_t size, const char *format, ... ) +{ + va_list argptr; + char bigbuffer[ 0x8000 ]; + + va_start( argptr, format ); + (void)vsnprintf( bigbuffer, sizeof( bigbuffer ), format, argptr ); + va_end( argptr ); + + bigbuffer[ sizeof( bigbuffer ) - 1 ] = '\0'; + + cs_strlcpy( dest, bigbuffer, size ); +} + + +/* +----------------------------------------------------------------------------- + Function: cs_strhash -Create a hash id from string. + + Parameters: string -[in] NUL-terminated string. + + + Returns: Hash id. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC W32 cs_strhash( const char *string ) +{ + W32 hash = *string; + + if( hash ) + { + for( string += 1; *string != '\0'; ++string ) + { + hash = (hash << 5) - hash + *string; + } + } + + return hash; +} + + +/* +----------------------------------------------------------------------------- + Function: cs_strupr -Convert a string to uppercase. + + Parameters: string -[in/out] NUL-terminated string to capitalize. + + Returns: + This functions returns a pointer to the converted string. Because + the modification is done in place, the pointer returned is the same + as the pointer passed as the input argument. No return value is + reserved to indicate an error. + + Notes: + +----------------------------------------------------------------------------- +*/ +PUBLIC char *cs_strupr( char *string ) +{ + W8 *ptr; + + if( ! string || ! *string ) + { + return string; + } + + ptr = string; + + do + { + *ptr = TOUPPER( *ptr ); + ptr++; + + } while( *ptr ); + + + return string; +} + +/* +----------------------------------------------------------------------------- + Function: cs_strlwr -Convert a string to lowercase. + + Parameters: string -[in/out] NUL-terminated string to convert to lowercase. + + Returns: + This functions returns a pointer to the converted string. Because + the modification is done in place, the pointer returned is the same + as the pointer passed as the input argument. No return value is + reserved to indicate an error. + + Notes: + +----------------------------------------------------------------------------- +*/ +PUBLIC char *cs_strlwr( char *string ) +{ + W8 *ptr; + + if( ! string || ! *string ) + { + return string; + } + + ptr = string; + + do + { + *ptr = TOLOWER( *ptr ); + ptr++; + + } while( *ptr ); + + + return string; +} diff --git a/wolf3d/wolfextractor/string/com_string.h b/wolf3d/wolfextractor/string/com_string.h new file mode 100644 index 0000000..fd29649 --- /dev/null +++ b/wolf3d/wolfextractor/string/com_string.h @@ -0,0 +1,79 @@ +/* + + Copyright (C) 2004 Michael Liebscher + Copyright (c) 1998 Todd C. Miller + Copyright (C) 1997-2001 Id Software, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * com_string.h: Common string functions done in a portable manner. + * + * Author: Michael Liebscher + * Date: 2004 + * + * Acknowledgement: + * Portion of this code was derived from Quake II, and was originally + * written by Id Software, Inc. + * + * Portion of this code was derived from code that was originally + * written by Todd C. Miller. + * + */ + +/* + Notes: + This module is implemented by com_string.c. + +*/ + +#ifndef __COM_STRING_H__ +#define __COM_STRING_H__ + +#include + +#include "../../../common/arch.h" + + +#define ISSPACE( c ) ( ( c ) == ' ' || ( c ) == '\f' || ( c ) == '\n' || ( c ) == '\r' || ( c ) == '\t' || ( c ) == '\v' ) +#define ISUPPER( c ) ( ( c ) >= 'A' && ( c ) <= 'Z' ) +#define ISLOWER( c ) ( ( c ) >= 'a' && ( c ) <= 'z' ) +#define ISALPHA( c ) ( ISUPPER( c ) || ISLOWER( c ) ) +#define TOUPPER( c ) ( ISLOWER( c ) ? (c) - 'a' + 'A' : ( c ) ) +#define TOLOWER( c ) ( ISUPPER( c ) ? (c) - 'A' + 'a' : ( c ) ) + + + +extern size_t cs_strlcpy( char *dest, const char *source, size_t nMaxLength ); +extern size_t cs_strlcat( char *dest, const char *source, size_t nMaxLength ); + + +extern int cs_stricmp( const char *string1, const char *string2 ); +extern int cs_strnicmp( const char *string1, const char *string2, size_t count ); + + +extern void cs_snprintf( char *dest, size_t size, const char *format, ... ); + +extern char *cs_CopyString( const char *in ); + +extern W32 cs_strhash( const char *string ); + +extern char *cs_strupr( char *string ); +extern char *cs_strlwr( char *string ); + + +#endif /* __COM_STRING_H__ */ diff --git a/wolf3d/wolfextractor/vorbis_static.lib b/wolf3d/wolfextractor/vorbis_static.lib new file mode 100644 index 0000000..1dad214 Binary files /dev/null and b/wolf3d/wolfextractor/vorbis_static.lib differ diff --git a/wolf3d/wolfextractor/vorbisenc_inter.c b/wolf3d/wolfextractor/vorbisenc_inter.c new file mode 100644 index 0000000..466cacf --- /dev/null +++ b/wolf3d/wolfextractor/vorbisenc_inter.c @@ -0,0 +1,302 @@ +/* + + Copyright (C) 2005 Michael Liebscher + Copyright 2000-2002, Michael Smith + (c) Kenneth Arnold + (c) Monty + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * vorbisenc_inter.c: Simple Ogg Vorbis interface. + * + * Author: Michael Liebscher + * Date: 2005 + * + * Acknowledgement: + * Portions from oggenc, Copyright 2000-2002, Michael Smith + * Vorbize, (c) Kenneth Arnold + * and libvorbis examples, (c) Monty + * + */ + + +#include +#include +#include + +#include + +#include "../../common/arch.h" +#include "../../common/common_utils.h" + +#define READSIZE 1024 + + +PRIVATE W32 channels; +PRIVATE W32 samplesize; + +PRIVATE W8 *ptrCurrent; +PRIVATE W8 *ptrEnd; + +long read_samples( float **buffer, int samples ) +{ + int sampbyte = samplesize / 8; + SW8 *buf; + long bytes_read; + int i,j; + long realsamples; + + buf = ptrCurrent; + + if( (samples * sampbyte * channels) > (ptrEnd - ptrCurrent) ) + { + bytes_read = ptrEnd - ptrCurrent; + ptrCurrent = ptrEnd; + + if( bytes_read == 0 ) + { + return 0; + } + } + else + { + bytes_read = samples * sampbyte * channels; + ptrCurrent += samples * sampbyte * channels; + } + + + + realsamples = bytes_read / (sampbyte * channels); + + + for( i = 0 ; i < realsamples ; ++i ) + { + for( j = 0 ; j < channels ; ++j ) + { + buffer[j][i] = ((buf[ i * 2 * channels + 2 * j + 1 ] << 8) | + (buf[ i * 2 * channels + 2 * j ] & 0xFF)) / 32768.0f; + } + } + + + return realsamples; +} + +int vorbis_encode( const char *filename, void *data, W32 size, W32 in_channels, W32 in_samplesize, + W32 rate, W32 quality, W32 max_bitrate, W32 min_bitrate ) +{ + FILE *fp; + ogg_stream_state os; + ogg_page og; + ogg_packet op; + + vorbis_dsp_state vd; + vorbis_block vb; + vorbis_info vi; + + ogg_packet header_main; + ogg_packet header_comments; + ogg_packet header_codebooks; + int result; + unsigned int serialno = 0; + + vorbis_comment comments; + + int ret = 0; + int eos; + W32 samplesdone = 0; + W32 packetsdone = 0; + W32 bytes_written = 0; + + + + fp = fopen( filename, "wb" ); + if( fp == NULL ) + { + return 0; + } + + memset( &comments, 0, sizeof( comments ) ); + + channels = in_channels; + samplesize = in_samplesize; + ptrCurrent = (PW8)data; + ptrEnd = (PW8)data + size; + + + vorbis_info_init( &vi ); + + if( vorbis_encode_setup_vbr( &vi, channels, rate, quality ) ) + { + fprintf( stderr, "Mode initialisation failed: invalid parameters for quality\n" ); + vorbis_info_clear( &vi ); + + return 1; + } + + /* do we have optional hard quality restrictions? */ + if( max_bitrate > 0 || min_bitrate > 0 ) + { + struct ovectl_ratemanage_arg ai; + + vorbis_encode_ctl( &vi, OV_ECTL_RATEMANAGE_GET, &ai ); + + ai.bitrate_hard_min = min_bitrate; + ai.bitrate_hard_max = max_bitrate; + ai.management_active = 1; + + vorbis_encode_ctl( &vi, OV_ECTL_RATEMANAGE_SET, &ai ); + } + + /* Turn off management entirely (if it was turned on). */ + vorbis_encode_ctl( &vi, OV_ECTL_RATEMANAGE_SET, NULL ); + + + vorbis_encode_setup_init( &vi ); + + vorbis_analysis_init( &vd, &vi ); + vorbis_block_init( &vd, &vb ); + + ogg_stream_init( &os, serialno ); + + /* Now, build the three header packets and send through to the stream + output stage (but defer actual file output until the main encode loop) */ + + + /* Build the packets */ + ret = vorbis_analysis_headerout( &vd, &comments, + &header_main, &header_comments, &header_codebooks ); + + /* And stream them out */ + ogg_stream_packetin( &os, &header_main ); + ogg_stream_packetin( &os, &header_comments ); + ogg_stream_packetin( &os, &header_codebooks ); + + while( (result = ogg_stream_flush( &os, &og )) ) + { + if( ! result ) + { + break; + } + + ret = fwrite( og.header, 1, og.header_len, fp ); + ret += fwrite( og.body, 1, og.body_len, fp ); + + if(ret != og.header_len + og.body_len) + { + printf( "Failed writing header to output stream\n") ; + ret = 1; + + goto cleanup; /* Bail and try to clean up stuff */ + } + } + + + eos = 0; + + /* Main encode loop - continue until end of file */ + while( ! eos ) + { + float **buffer = vorbis_analysis_buffer( &vd, READSIZE ); + long samples_read = read_samples( buffer, READSIZE ); + + if( samples_read == 0 ) + { + /* Tell the library that we wrote 0 bytes - signalling the end */ + vorbis_analysis_wrote( &vd, 0 ); + } + else + { + samplesdone += samples_read; + + /* Call progress update every 40 pages */ + if( packetsdone >= 40 ) + { + packetsdone = 0; + + // progress bar here + } + + /* Tell the library how many samples (per channel) we wrote + into the supplied buffer */ + vorbis_analysis_wrote( &vd, samples_read ); + } + + /* While we can get enough data from the library to analyse, one + block at a time... */ + while( vorbis_analysis_blockout( &vd, &vb ) == 1 ) + { + + /* Do the main analysis, creating a packet */ + vorbis_analysis( &vb, NULL ); + vorbis_bitrate_addblock( &vb ); + + while( vorbis_bitrate_flushpacket( &vd, &op ) ) + { + /* Add packet to bitstream */ + ogg_stream_packetin( &os, &op ); + packetsdone++; + + /* If we've gone over a page boundary, we can do actual output, + so do so (for however many pages are available) */ + + while( ! eos ) + { + int result = ogg_stream_pageout( &os, &og ); + if( ! result ) + { + break; + } + + ret = fwrite( og.header, 1, og.header_len, fp ); + ret += fwrite( og.body, 1, og.body_len, fp ); + + if(ret != og.header_len + og.body_len) + { + printf( "Failed writing data to output stream\n" ); + ret = 1; + + goto cleanup; /* Bail */ + } + else + { + bytes_written += ret; + } + + if( ogg_page_eos( &og ) ) + { + eos = 1; + } + } + } + } + } + + +cleanup: + + fclose( fp ); + + ogg_stream_clear( &os ); + + vorbis_block_clear( &vb ); + vorbis_dsp_clear( &vd ); + vorbis_info_clear( &vi ); + + return 0; +} diff --git a/wolf3d/wolfextractor/vorbisenc_static.lib b/wolf3d/wolfextractor/vorbisenc_static.lib new file mode 100644 index 0000000..04b8289 Binary files /dev/null and b/wolf3d/wolfextractor/vorbisenc_static.lib differ diff --git a/wolf3d/wolfextractor/wolf/wl6_name.c b/wolf3d/wolfextractor/wolf/wl6_name.c new file mode 100644 index 0000000..3d4fdb9 --- /dev/null +++ b/wolf3d/wolfextractor/wolf/wl6_name.c @@ -0,0 +1,760 @@ +/* + + Copyright (C) 2004-2005 Michael Liebscher + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * wl6_name.c: Convert chunk number to string name. + * + * Author: Michael Liebscher + * + * Acknowledgement: + * This code was derived from Wolfenstein 3-D, and was originally + * written by Id Software, Inc. + * + */ + +#include + +#include "wolf_def.h" +#include "../../../common/arch.h" +#include "../../../common/common_utils.h" + + + +/* +----------------------------------------------------------------------------- + Function: GetLumpFileName_WL1() -Returns lump name string. + + Parameters: chunk -[in] Chunk value to get string name for. + + Returns: NULL on error, otherwise string name. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC char *GetLumpFileName_WL1( W32 chunk ) +{ + switch( chunk ) + { + case WL1_H_BJPIC: return "H_BJPIC"; + case WL1_H_CASTLEPIC: return "H_CASTLEPIC"; + case WL1_H_KEYBOARDPIC: return "H_KEYBOARDPIC"; + case WL1_H_CONTROLPIC: return "H_CONTROLPIC"; + case WL1_H_HEALPIC: return "H_HEALPIC"; + case WL1_H_BGPIC: return "H_BGPIC"; + case WL1_H_GUNPIC: return "H_GUNPIC"; + case WL1_H_KEYPIC: return "H_KEYPIC"; + case WL1_H_BLAZEPIC: return "H_BLAZEPIC"; + case WL1_H_WEAPON1234PIC: return "H_WEAPON1234PIC"; + case WL1_H_WOLFLOGOPIC: return "H_WOLFLOGOPIC"; + case WL1_H_VISAPIC: return "H_VISAPIC"; + case WL1_H_MCPIC: return "H_MCPIC"; + case WL1_H_IDLOGOPIC: return "H_IDLOGOPIC"; + case WL1_H_TOPWINDOWPIC: return "H_TOPWINDOWPI"; + case WL1_H_LEFTWINDOWPIC: return "H_LEFTWINDOWPIC"; + case WL1_H_RIGHTWINDOWPIC: return "H_RIGHTWINDOWPIC"; + case WL1_H_BOTTOMINFOPIC: return "H_BOTTOMINFOPIC"; + case WL1_H_GAMEPIC: return "H_GAMEPIC"; + + case WL1_C_OPTIONSPIC: return "C_OPTIONSPIC"; + case WL1_C_CURSOR1PIC: return "C_CURSOR0PIC"; + case WL1_C_CURSOR2PIC: return "C_CURSOR1PIC"; + case WL1_C_NOTSELECTEDPIC: return "C_NOTSELECTEDPIC"; + case WL1_C_SELECTEDPIC: return "C_SELECTEDPIC"; + case WL1_C_FXTITLEPIC: return "C_FXTITLEPIC"; + case WL1_C_DIGITITLEPIC: return "C_DIGITITLEPIC"; + case WL1_C_MUSICTITLEPIC: return "C_MUSICTITLEPIC"; + case WL1_C_MOUSELBACKPIC: return "C_MOUSELBACKPIC"; + case WL1_C_BABYMODEPIC: return "C_SKILL1PIC"; + case WL1_C_EASYPIC: return "C_SKILL2PIC"; + case WL1_C_NORMALPIC: return "C_SKILL3PIC"; + case WL1_C_HARDPIC: return "C_SKILL4PIC"; + case WL1_C_LOADSAVEDISKPIC: return "C_LOADSAVEDISKPIC"; + case WL1_C_DISKLOADING1PIC: return "C_DISKLOADING0PIC"; + case WL1_C_DISKLOADING2PIC: return "C_DISKLOADING1PIC"; + case WL1_C_CONTROLPIC: return "C_CONTROLPIC"; + case WL1_C_CUSTOMIZEPIC: return "C_CUSTOMIZEPIC"; + case WL1_C_LOADGAMEPIC: return "C_LOADGAMEPIC"; + case WL1_C_SAVEGAMEPIC: return "C_SAVEGAMEPIC"; + case WL1_C_EPISODE1PIC: return "C_EPISODE1PIC"; + case WL1_C_EPISODE2PIC: return "C_EPISODE2PIC"; + case WL1_C_EPISODE3PIC: return "C_EPISODE3PIC"; + case WL1_C_EPISODE4PIC: return "C_EPISODE4PIC"; + case WL1_C_EPISODE5PIC: return "C_EPISODE5PIC"; + case WL1_C_EPISODE6PIC: return "C_EPISODE6PIC"; + case WL1_C_CODEPIC: return "C_CODEPIC"; + case WL1_C_TIMECODEPIC: return "C_TIMECODEPIC"; + case WL1_C_LEVELPIC: return "C_LEVELPIC"; + case WL1_C_NAMEPIC: return "C_NAMEPIC"; + case WL1_C_SCOREPIC: return "C_SCOREPIC"; + case WL1_C_JOY1PIC: return "C_JOY1PIC"; + case WL1_C_JOY2PIC: return "C_JOY2PIC"; + + case WL1_L_GUYPIC: return "L_GUY0PIC"; + case WL1_L_COLONPIC: + case WL1_L_NUM0PIC: + case WL1_L_NUM1PIC: + case WL1_L_NUM2PIC: + case WL1_L_NUM3PIC: + case WL1_L_NUM4PIC: + case WL1_L_NUM5PIC: + case WL1_L_NUM6PIC: + case WL1_L_NUM7PIC: + case WL1_L_NUM8PIC: + case WL1_L_NUM9PIC: + case WL1_L_PERCENTPIC: + case WL1_L_APIC: + case WL1_L_BPIC: + case WL1_L_CPIC: + case WL1_L_DPIC: + case WL1_L_EPIC: + case WL1_L_FPIC: + case WL1_L_GPIC: + case WL1_L_HPIC: + case WL1_L_IPIC: + case WL1_L_JPIC: + case WL1_L_KPIC: + case WL1_L_LPIC: + case WL1_L_MPIC: + case WL1_L_NPIC: + case WL1_L_OPIC: + case WL1_L_PPIC: + case WL1_L_QPIC: + case WL1_L_RPIC: + case WL1_L_SPIC: + case WL1_L_TPIC: + case WL1_L_UPIC: + case WL1_L_VPIC: + case WL1_L_WPIC: + case WL1_L_XPIC: + case WL1_L_YPIC: + case WL1_L_ZPIC: + case WL1_L_EXPOINTPIC: + case WL1_L_APOSTROPHEPIC: return "L_FONTPIC"; + case WL1_L_GUY2PIC: return "L_GUY1PIC"; + case WL1_L_BJWINSPIC: return "L_BJWINSPIC"; + case WL1_STATUSBARPIC: return "STATUSBARPIC"; + case WL1_TITLEPIC: return "TITLEPIC"; + case WL1_PG13PIC: return "PC13PIC"; + case WL1_CREDITSPIC: return "CREDITSPIC"; + case WL1_HIGHSCORESPIC: return "HIGHSCORESPIC"; + + case WL1_KNIFEPIC: return "KNIFEPIC"; + case WL1_GUNPIC: return "GUNPIC"; + case WL1_MACHINEGUNPIC: return "MACHINEGUNPIC"; + case WL1_GATLINGGUNPIC: return "GATLINGGUNPIC"; + case WL1_NOKEYPIC: return "NOKEYPIC"; + case WL1_GOLDKEYPIC: return "GOLDKEYPIC"; + case WL1_SILVERKEYPIC: return "SILVERKEYPIC"; + case WL1_N_BLANKPIC: return "N_BLANKPIC"; + case WL1_N_0PIC: + case WL1_N_1PIC: + case WL1_N_2PIC: + case WL1_N_3PIC: + case WL1_N_4PIC: + case WL1_N_5PIC: + case WL1_N_6PIC: + case WL1_N_7PIC: + case WL1_N_8PIC: + case WL1_N_9PIC: return "N_NUMPIC"; + case WL1_FACE1APIC: return "FACE1APIC"; + case WL1_FACE1BPIC: return "FACE1BPIC"; + case WL1_FACE1CPIC: return "FACE1CPIC"; + case WL1_FACE2APIC: return "FACE2APIC"; + case WL1_FACE2BPIC: return "FACE2BPIC"; + case WL1_FACE2CPIC: return "FACE2CPIC"; + case WL1_FACE3APIC: return "FACE3APIC"; + case WL1_FACE3BPIC: return "FACE3BPIC"; + case WL1_FACE3CPIC: return "FACE3CPIC"; + case WL1_FACE4APIC: return "FACE4APIC"; + case WL1_FACE4BPIC: return "FACE4BPIC"; + case WL1_FACE4CPIC: return "FACE4CPIC"; + case WL1_FACE5APIC: return "FACE5APIC"; + case WL1_FACE5BPIC: return "FACE5BPIC"; + case WL1_FACE5CPIC: return "FACE5CPIC"; + case WL1_FACE6APIC: return "FACE6APIC"; + case WL1_FACE6BPIC: return "FACE6BPIC"; + case WL1_FACE6CPIC: return "FACE6CPIC"; + case WL1_FACE7APIC: return "FACE7APIC"; + case WL1_FACE7BPIC: return "FACE7BPIC"; + case WL1_FACE7CPIC: return "FACE7CPIC"; + case WL1_FACE8APIC: return "FACE8APIC"; + case WL1_GOTGATLINGPIC: return "GOTGATLINGPIC"; + case WL1_MUTANTBJPIC: return "MUTANTBJPIC"; + case WL1_PAUSEDPIC: return "PAUSEDPIC"; + case WL1_GETPSYCHEDPIC: return "GETPSYCHEDPIC"; + + default: return NULL; + } // End switch chunk +} + +/* +----------------------------------------------------------------------------- + Function: GetLumpFileName_WL6() -Returns lump name string. + + Parameters: chunk -[in] Chunk value to get string name for. + + Returns: NULL on error, otherwise string name. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC char *GetLumpFileName_WL6( W32 chunk ) +{ + switch( chunk ) + { + case H_BJPIC: return "H_BJPIC"; + case H_CASTLEPIC: return "H_CASTLEPIC"; + case H_BLAZEPIC: return "H_BLAZEPIC"; + case H_TOPWINDOWPIC: return "H_TOPWINDOWPIC"; + case H_LEFTWINDOWPIC: return "H_LEFTWINDOWPIC"; + case H_RIGHTWINDOWPIC: return "H_RIGHTWINDOWPIC"; + case H_BOTTOMINFOPIC: return "H_BOTTOMINFOPIC"; + case C_OPTIONSPIC: return "C_OPTIONSPIC"; + case C_CURSOR1PIC: return "C_CURSOR0PIC"; + case C_CURSOR2PIC: return "C_CURSOR1PIC"; + case C_NOTSELECTEDPIC: return "C_NOTSELECTEDPIC"; + case C_SELECTEDPIC: return "C_SELECTEDPIC"; + case C_FXTITLEPIC: return "C_FXTITLEPIC"; + case C_DIGITITLEPIC: return "C_DIGITITLEPIC"; + case C_MUSICTITLEPIC: return "C_MUSICTITLEPIC"; + case C_MOUSELBACKPIC: return "C_MOUSELBACKPIC"; + case C_BABYMODEPIC: return "C_SKILL1PIC"; + case C_EASYPIC: return "C_SKILL2PIC"; + case C_NORMALPIC: return "C_SKILL3PIC"; + case C_HARDPIC: return "C_SKILL4PIC"; + case C_LOADSAVEDISKPIC: return "C_LOADSAVEDISKPIC"; + case C_DISKLOADING1PIC: return "C_DISKLOADING0PIC"; + case C_DISKLOADING2PIC: return "C_DISKLOADING1PIC"; + case C_CONTROLPIC: return "C_CONTROLPIC"; + case C_CUSTOMIZEPIC: return "C_CUSTOMIZEPIC"; + case C_LOADGAMEPIC: return "C_LOADGAMEPIC"; + case C_SAVEGAMEPIC: return "C_SAVEGAMEPIC"; + case C_EPISODE1PIC: return "C_EPISODE1PIC"; + case C_EPISODE2PIC: return "C_EPISODE2PIC"; + case C_EPISODE3PIC: return "C_EPISODE3PIC"; + case C_EPISODE4PIC: return "C_EPISODE4PIC"; + case C_EPISODE5PIC: return "C_EPISODE5PIC"; + case C_EPISODE6PIC: return "C_EPISODE6PIC"; + case C_CODEPIC: return "C_CODEPIC"; + case C_TIMECODEPIC: return "C_TIMECODEPIC"; + case C_LEVELPIC: return "C_LEVELPIC"; + case C_NAMEPIC: return "C_NAMEPIC"; + case C_SCOREPIC: return "C_SCOREPIC"; + case C_JOY1PIC: return "C_JOY1PIC"; + case C_JOY2PIC: return "C_JOY2PIC"; + + case L_GUYPIC: return "L_GUY0PIC"; + case L_COLONPIC: + case L_NUM0PIC: + case L_NUM1PIC: + case L_NUM2PIC: + case L_NUM3PIC: + case L_NUM4PIC: + case L_NUM5PIC: + case L_NUM6PIC: + case L_NUM7PIC: + case L_NUM8PIC: + case L_NUM9PIC: + case L_PERCENTPIC: + case L_APIC: + case L_BPIC: + case L_CPIC: + case L_DPIC: + case L_EPIC: + case L_FPIC: + case L_GPIC: + case L_HPIC: + case L_IPIC: + case L_JPIC: + case L_KPIC: + case L_LPIC: + case L_MPIC: + case L_NPIC: + case L_OPIC: + case L_PPIC: + case L_QPIC: + case L_RPIC: + case L_SPIC: + case L_TPIC: + case L_UPIC: + case L_VPIC: + case L_WPIC: + case L_XPIC: + case L_YPIC: + case L_ZPIC: + case L_EXPOINTPIC: + case L_APOSTROPHEPIC: return "L_FONTPIC"; + case L_GUY2PIC: return "L_GUY1PIC"; + case L_BJWINSPIC: return "L_BJWINSPIC"; + case STATUSBARPIC: return "STATUSBARPIC"; + case TITLEPIC: return "TITLEPIC"; + case PG13PIC: return "PC13PIC"; + case CREDITSPIC: return "CREDITSPIC"; + case HIGHSCORESPIC: return "HIGHSCORESPIC"; + case KNIFEPIC: return "KNIFEPIC"; + case GUNPIC: return "GUNPIC"; + case MACHINEGUNPIC: return "MACHINEGUNPIC"; + case GATLINGGUNPIC: return "GATLINGGUNPIC"; + case NOKEYPIC: return "NOKEYPIC"; + case GOLDKEYPIC: return "GOLDKEYPIC"; + case SILVERKEYPIC: return "SILVERKEYPIC"; + case N_BLANKPIC: return "N_BLANKPIC"; + case N_0PIC: + case N_1PIC: + case N_2PIC: + case N_3PIC: + case N_4PIC: + case N_5PIC: + case N_6PIC: + case N_7PIC: + case N_8PIC: + case N_9PIC: return "N_NUMPIC"; + case FACE1APIC: return "FACE1APIC"; + case FACE1BPIC: return "FACE1BPIC"; + case FACE1CPIC: return "FACE1CPIC"; + case FACE2APIC: return "FACE2APIC"; + case FACE2BPIC: return "FACE2BPIC"; + case FACE2CPIC: return "FACE2CPIC"; + case FACE3APIC: return "FACE3APIC"; + case FACE3BPIC: return "FACE3BPIC"; + case FACE3CPIC: return "FACE3CPIC"; + case FACE4APIC: return "FACE4APIC"; + case FACE4BPIC: return "FACE4BPIC"; + case FACE4CPIC: return "FACE4CPIC"; + case FACE5APIC: return "FACE5APIC"; + case FACE5BPIC: return "FACE5BPIC"; + case FACE5CPIC: return "FACE5CPIC"; + case FACE6APIC: return "FACE6APIC"; + case FACE6BPIC: return "FACE6BPIC"; + case FACE6CPIC: return "FACE6CPIC"; + case FACE7APIC: return "FACE7APIC"; + case FACE7BPIC: return "FACE7BPIC"; + case FACE7CPIC: return "FACE7CPIC"; + case FACE8APIC: return "FACE8APIC"; + case GOTGATLINGPIC: return "GOTGATLINGPIC"; + case MUTANTBJPIC: return "MUTANTBJPIC"; + case PAUSEDPIC: return "PAUSEDPIC"; + case GETPSYCHEDPIC: return "GETPSYCHEDPIC"; + + default: return NULL; + } // End switch chunk +} + + +/* +----------------------------------------------------------------------------- + Function: GetLumpFileName_SDM() -Returns lump name string. + + Parameters: chunk -[in] Chunk value to get string name for. + + Returns: NULL on error, otherwise string name. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC char *GetLumpFileName_SDM( W32 chunk ) +{ + switch( chunk ) + { + case SDM_C_BACKDROPPIC: return "C_BACKDROPPIC"; + case SDM_C_MOUSELBACKPIC: return "SC_MOUSELBACKPIC"; + case SDM_C_CURSOR1PIC: return "SC_CURSOR0PIC"; + case SDM_C_CURSOR2PIC: return "SC_CURSOR1PIC"; + case SDM_C_NOTSELECTEDPIC: return "SC_NOTSELECTEDPIC"; + case SDM_C_SELECTEDPIC: return "SC_SELECTEDPIC"; + + case SDM_C_CUSTOMIZEPIC: return "SC_CUSTOMIZEPIC"; + case SDM_C_JOY1PIC: return "C_JOY1PIC"; + case SDM_C_JOY2PIC: return "C_JOY2PIC"; + case SDM_C_MOUSEPIC: return "C_MOUSEPIC"; + case SDM_C_JOYSTICKPIC: return "C_JOYSTICKPIC"; + case SDM_C_KEYBOARDPIC: return "C_KEYBOARDPIC"; + case SDM_C_CONTROLPIC: return "SC_CONTROLPIC"; + + case SDM_C_OPTIONSPIC: return "SC_OPTIONSPIC"; + + case SDM_C_FXTITLEPIC: return "SC_FXTITLEPIC"; + case SDM_C_DIGITITLEPIC: return "SC_DIGITITLEPIC"; + case SDM_C_MUSICTITLEPIC: return "SC_MUSICTITLEPIC"; + + case SDM_C_HOWTOUGHPIC: return "C_HOWTOUGHPIC"; + case SDM_C_BABYMODEPIC: return "SC_SKILL1PIC"; + case SDM_C_EASYPIC: return "SC_SKILL2PIC"; + case SDM_C_NORMALPIC: return "SC_SKILL3PIC"; + case SDM_C_HARDPIC: return "SC_SKILL4PIC"; + + case SDM_C_DISKLOADING1PIC: return "C_DISKLOADING0PIC"; + case SDM_C_DISKLOADING2PIC: return "C_DISKLOADING1PIC"; + case SDM_C_LOADGAMEPIC: return "SC_LOADGAMEPIC"; + case SDM_C_SAVEGAMEPIC: return "SC_SAVEGAMEPIC"; + + case SDM_HIGHSCORESPIC: return "SHIGHSCORESPIC"; + case SDM_C_WONSPEARPIC: return "C_WONSPEARPIC"; + + case SDM_L_GUYPIC: return "L_GUY0PIC"; + case SDM_L_COLONPIC: + case SDM_L_NUM0PIC: + case SDM_L_NUM1PIC: + case SDM_L_NUM2PIC: + case SDM_L_NUM3PIC: + case SDM_L_NUM4PIC: + case SDM_L_NUM5PIC: + case SDM_L_NUM6PIC: + case SDM_L_NUM7PIC: + case SDM_L_NUM8PIC: + case SDM_L_NUM9PIC: + case SDM_L_PERCENTPIC: + case SDM_L_APIC: + case SDM_L_BPIC: + case SDM_L_CPIC: + case SDM_L_DPIC: + case SDM_L_EPIC: + case SDM_L_FPIC: + case SDM_L_GPIC: + case SDM_L_HPIC: + case SDM_L_IPIC: + case SDM_L_JPIC: + case SDM_L_KPIC: + case SDM_L_LPIC: + case SDM_L_MPIC: + case SDM_L_NPIC: + case SDM_L_OPIC: + case SDM_L_PPIC: + case SDM_L_QPIC: + case SDM_L_RPIC: + case SDM_L_SPIC: + case SDM_L_TPIC: + case SDM_L_UPIC: + case SDM_L_VPIC: + case SDM_L_WPIC: + case SDM_L_XPIC: + case SDM_L_YPIC: + case SDM_L_ZPIC: + case SDM_L_EXPOINTPIC: + case SDM_L_APOSTROPHEPIC: return "L_FONTPIC"; + case SDM_L_GUY2PIC: return "L_GUY1PIC"; + case SDM_L_BJWINSPIC: return "L_BJWINSPIC"; + + case SDM_TITLE1PIC: + case SDM_TITLE2PIC: return "STITLEPIC"; + case SDM_STATUSBARPIC: return "STATUSBARPIC"; + case SDM_PG13PIC: return "PC13PIC"; + case SDM_CREDITSPIC: return "SCREDITSPIC"; + + case SDM_KNIFEPIC: return "KNIFEPIC"; + case SDM_GUNPIC: return "GUNPIC"; + case SDM_MACHINEGUNPIC: return "MACHINEGUNPIC"; + case SDM_GATLINGGUNPIC: return "GATLINGGUNPIC"; + case SDM_NOKEYPIC: return "NOKEYPIC"; + case SDM_GOLDKEYPIC: return "GOLDKEYPIC"; + case SDM_SILVERKEYPIC: return "SILVERKEYPIC"; + case SDM_N_BLANKPIC: return "N_BLANKPIC"; + case SDM_N_0PIC: + case SDM_N_1PIC: + case SDM_N_2PIC: + case SDM_N_3PIC: + case SDM_N_4PIC: + case SDM_N_5PIC: + case SDM_N_6PIC: + case SDM_N_7PIC: + case SDM_N_8PIC: + case SDM_N_9PIC: return "N_NUMPIC"; + case SDM_FACE1APIC: return "FACE1APIC"; + case SDM_FACE1BPIC: return "FACE1BPIC"; + case SDM_FACE1CPIC: return "FACE1CPIC"; + case SDM_FACE2APIC: return "FACE2APIC"; + case SDM_FACE2BPIC: return "FACE2BPIC"; + case SDM_FACE2CPIC: return "FACE2CPIC"; + case SDM_FACE3APIC: return "FACE3APIC"; + case SDM_FACE3BPIC: return "FACE3BPIC"; + case SDM_FACE3CPIC: return "FACE3CPIC"; + case SDM_FACE4APIC: return "FACE4APIC"; + case SDM_FACE4BPIC: return "FACE4BPIC"; + case SDM_FACE4CPIC: return "FACE4CPIC"; + case SDM_FACE5APIC: return "FACE5APIC"; + case SDM_FACE5BPIC: return "FACE5BPIC"; + case SDM_FACE5CPIC: return "FACE5CPIC"; + case SDM_FACE6APIC: return "FACE6APIC"; + case SDM_FACE6BPIC: return "FACE6BPIC"; + case SDM_FACE6CPIC: return "FACE6CPIC"; + case SDM_FACE7APIC: return "FACE7APIC"; + case SDM_FACE7BPIC: return "FACE7BPIC"; + case SDM_FACE7CPIC: return "FACE7CPIC"; + case SDM_FACE8APIC: return "FACE8APIC"; + case SDM_GOTGATLINGPIC: return "GOTGATLINGPIC"; + case SDM_GODMODEFACE1PIC: return "GODMODEFACE0PIC"; + case SDM_GODMODEFACE2PIC: return "GODMODEFACE1PIC"; + case SDM_GODMODEFACE3PIC: return "GODMODEFACE2PIC"; + case SDM_BJWAITING1PIC: return "BJWAITING0PIC"; + case SDM_BJWAITING2PIC: return "BJWAITING1PIC"; + case SDM_BJOUCHPIC: return "BJOUCHPIC"; + case SDM_PAUSEDPIC: return "PAUSEDPIC"; + case SDM_GETPSYCHEDPIC: return "GETPSYCHEDPIC"; + + default: return NULL; + + } // End switch chunk +} + +/* +----------------------------------------------------------------------------- + Function: GetLumpFileName_SOD() -Returns lump name string. + + Parameters: chunk -[in] Chunk value to get string name for. + + Returns: NULL on error, otherwise string name. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC char *GetLumpFileName_SOD( W32 chunk ) +{ + switch( chunk ) + { + case SOD_C_BACKDROPPIC: return "C_BACKDROPPIC"; + case SOD_C_MOUSELBACKPIC: return "SC_MOUSELBACKPIC"; + case SOD_C_CURSOR1PIC: return "SC_CURSOR0PIC"; + case SOD_C_CURSOR2PIC: return "SC_CURSOR1PIC"; + case SOD_C_NOTSELECTEDPIC: return "SC_NOTSELECTEDPIC"; + case SOD_C_SELECTEDPIC: return "SC_SELECTEDPIC"; + case SOD_C_CUSTOMIZEPIC: return "SC_CUSTOMIZEPIC"; + case SOD_C_JOY1PIC: return "C_JOY1PIC"; + case SOD_C_JOY2PIC: return "C_JOY2PIC"; + case SOD_C_MOUSEPIC: return "C_MOUSEPIC"; + case SOD_C_JOYSTICKPIC: return "C_JOYSTICKPIC"; + case SOD_C_KEYBOARDPIC: return "C_KEYBOARDPIC"; + case SOD_C_CONTROLPIC: return "SC_CONTROLPIC"; + case SOD_C_OPTIONSPIC: return "SC_OPTIONSPIC"; + case SOD_C_FXTITLEPIC: return "SC_FXTITLEPIC"; + case SOD_C_DIGITITLEPIC: return "SC_DIGITITLEPIC"; + case SOD_C_MUSICTITLEPIC: return "SC_MUSICTITLEPIC"; + case SOD_C_HOWTOUGHPIC: return "C_HOWTOUGHPIC"; + case SOD_C_BABYMODEPIC: return "SC_SKILL1PIC"; + case SOD_C_EASYPIC: return "SC_SKILL2PIC"; + case SOD_C_NORMALPIC: return "SC_SKILL3PIC"; + case SOD_C_HARDPIC: return "SC_SKILL4PIC"; + case SOD_C_DISKLOADING1PIC: return "C_DISKLOADING0PIC"; + case SOD_C_DISKLOADING2PIC: return "C_DISKLOADING1PIC"; + case SOD_C_LOADGAMEPIC: return "SC_LOADGAMEPIC"; + case SOD_C_SAVEGAMEPIC: return "SC_SAVEGAMEPIC"; + case SOD_HIGHSCORESPIC: return "SHIGHSCORESPIC"; + case SOD_C_WONSPEARPIC: return "C_WONSPEARPIC"; + case SOD_BJCOLLAPSE1PIC: return "BJCOLLAPSE1PIC"; + case SOD_BJCOLLAPSE2PIC: return "BJCOLLAPSE2PIC"; + case SOD_BJCOLLAPSE3PIC: return "BJCOLLAPSE3PIC"; + case SOD_BJCOLLAPSE4PIC: return "BJCOLLAPSE4PIC"; + case SOD_ENDPICPIC: return "ENDPICPIC"; + case SOD_L_GUYPIC: return "L_GUY0PIC"; + case SOD_L_COLONPIC: + case SOD_L_NUM0PIC: + case SOD_L_NUM1PIC: + case SOD_L_NUM2PIC: + case SOD_L_NUM3PIC: + case SOD_L_NUM4PIC: + case SOD_L_NUM5PIC: + case SOD_L_NUM6PIC: + case SOD_L_NUM7PIC: + case SOD_L_NUM8PIC: + case SOD_L_NUM9PIC: + case SOD_L_PERCENTPIC: + case SOD_L_APIC: + case SOD_L_BPIC: + case SOD_L_CPIC: + case SOD_L_DPIC: + case SOD_L_EPIC: + case SOD_L_FPIC: + case SOD_L_GPIC: + case SOD_L_HPIC: + case SOD_L_IPIC: + case SOD_L_JPIC: + case SOD_L_KPIC: + case SOD_L_LPIC: + case SOD_L_MPIC: + case SOD_L_NPIC: + case SOD_L_OPIC: + case SOD_L_PPIC: + case SOD_L_QPIC: + case SOD_L_RPIC: + case SOD_L_SPIC: + case SOD_L_TPIC: + case SOD_L_UPIC: + case SOD_L_VPIC: + case SOD_L_WPIC: + case SOD_L_XPIC: + case SOD_L_YPIC: + case SOD_L_ZPIC: + case SOD_L_EXPOINTPIC: + case SOD_L_APOSTROPHEPIC: return "L_FONTPIC"; + case SOD_L_GUY2PIC: return "L_GUY1PIC"; + case SOD_L_BJWINSPIC: return "L_BJWINSPIC"; + case SOD_TITLE1PIC: + case SOD_TITLE2PIC: return "STITLEPIC"; + case SOD_ENDSCREEN11PIC: return "ENDSCREEN11PIC"; + case SOD_ENDSCREEN12PIC: return "ENDSCREEN12PIC"; + case SOD_ENDSCREEN3PIC: return "ENDSCREEN3PIC"; + case SOD_ENDSCREEN4PIC: return "ENDSCREEN4PIC"; + case SOD_ENDSCREEN5PIC: return "ENDSCREEN5PIC"; + case SOD_ENDSCREEN6PIC: return "ENDSCREEN6PIC"; + case SOD_ENDSCREEN7PIC: return "ENDSCREEN7PIC"; + case SOD_ENDSCREEN8PIC: return "ENDSCREEN8PIC"; + case SOD_ENDSCREEN9PIC: return "ENDSCREEN9PIC"; + case SOD_STATUSBARPIC: return "STATUSBARPIC"; + case SOD_PG13PIC: return "PC13PIC"; + case SOD_CREDITSPIC: return "SCREDITSPIC"; + case SOD_IDGUYS1PIC: + case SOD_IDGUYS2PIC: return "IDGUYSPIC"; + case SOD_COPYPROTTOPPIC: return "COPYPROTTOPPIC"; + case SOD_COPYPROTBOXPIC: return "COPYPROTBOXPIC"; + case SOD_BOSSPIC1PIC: return "BOSSPIC1PIC"; + case SOD_BOSSPIC2PIC: return "BOSSPIC2PIC"; + case SOD_BOSSPIC3PIC: return "BOSSPIC3PIC"; + case SOD_BOSSPIC4PIC: return "BOSSPIC4PIC"; + case SOD_KNIFEPIC: return "KNIFEPIC"; + case SOD_GUNPIC: return "GUNPIC"; + case SOD_MACHINEGUNPIC: return "MACHINEGUNPIC"; + case SOD_GATLINGGUNPIC: return "GATLINGGUNPIC"; + case SOD_NOKEYPIC: return "NOKEYPIC"; + case SOD_GOLDKEYPIC: return "GOLDKEYPIC"; + case SOD_SILVERKEYPIC: return "SILVERKEYPIC"; + case SOD_N_BLANKPIC: return "N_BLANKPIC"; + case SOD_N_0PIC: + case SOD_N_1PIC: + case SOD_N_2PIC: + case SOD_N_3PIC: + case SOD_N_4PIC: + case SOD_N_5PIC: + case SOD_N_6PIC: + case SOD_N_7PIC: + case SOD_N_8PIC: + case SOD_N_9PIC: return "N_NUMPIC"; + case SOD_FACE1APIC: return "FACE1APIC"; + case SOD_FACE1BPIC: return "FACE1BPIC"; + case SOD_FACE1CPIC: return "FACE1CPIC"; + case SOD_FACE2APIC: return "FACE2APIC"; + case SOD_FACE2BPIC: return "FACE2BPIC"; + case SOD_FACE2CPIC: return "FACE2CPIC"; + case SOD_FACE3APIC: return "FACE3APIC"; + case SOD_FACE3BPIC: return "FACE3BPIC"; + case SOD_FACE3CPIC: return "FACE3CPIC"; + case SOD_FACE4APIC: return "FACE4APIC"; + case SOD_FACE4BPIC: return "FACE4BPIC"; + case SOD_FACE4CPIC: return "FACE4CPIC"; + case SOD_FACE5APIC: return "FACE5APIC"; + case SOD_FACE5BPIC: return "FACE5BPIC"; + case SOD_FACE5CPIC: return "FACE5CPIC"; + case SOD_FACE6APIC: return "FACE6APIC"; + case SOD_FACE6BPIC: return "FACE6BPIC"; + case SOD_FACE6CPIC: return "FACE6CPIC"; + case SOD_FACE7APIC: return "FACE7APIC"; + case SOD_FACE7BPIC: return "FACE7BPIC"; + case SOD_FACE7CPIC: return "FACE7CPIC"; + case SOD_FACE8APIC: return "FACE8APIC"; + case SOD_GOTGATLINGPIC: return "GOTGATLINGPIC"; + case SOD_GODMODEFACE1PIC: return "GODMODEFACE0PIC"; + case SOD_GODMODEFACE2PIC: return "GODMODEFACE1PIC"; + case SOD_GODMODEFACE3PIC: return "GODMODEFACE2PIC"; + case SOD_BJWAITING1PIC: return "BJWAITING0PIC"; + case SOD_BJWAITING2PIC: return "BJWAITING1PIC"; + case SOD_BJOUCHPIC: return "BJOUCHPIC"; + case SOD_PAUSEDPIC: return "PAUSEDPIC"; + case SOD_GETPSYCHEDPIC: return "GETPSYCHEDPIC"; + + default: return NULL; + + } // End switch chunk + +} + + + + + +PUBLIC char *GetMusicFileName_WL6( W32 chunk ) +{ + switch( chunk ) + { + case CORNER_MUS: return "CORNER"; + case DUNGEON_MUS: return "DUNGEON"; + case WARMARCH_MUS: return "WARMARCH"; + case GETTHEM_MUS: return "GETTHEM"; + case HEADACHE_MUS: return "HEADACHE"; + case HITLWLTZ_MUS: return "HITLWLTZ"; + case INTROCW3_MUS: return "INTROCW3"; + case NAZI_NOR_MUS: return "NAZI_NOR"; + case NAZI_OMI_MUS: return "NAZI_OMI"; + case POW_MUS: return "POW"; + case SALUTE_MUS: return "SALUTE"; + case SEARCHN_MUS: return "SEARCHN"; + case SUSPENSE_MUS: return "SUSPENSE"; + case VICTORS_MUS: return "VICTORS"; + case WONDERIN_MUS: return "WONDERIN"; + case FUNKYOU_MUS: return "FUNKYOU"; + case ENDLEVEL_MUS: return "ENDLEVEL"; + case GOINGAFT_MUS: return "GOINGAFT"; + case PREGNANT_MUS: return "PREGNANT"; + case ULTIMATE_MUS: return "ULTIMATE"; + case NAZI_RAP_MUS: return "NAZI_RAP"; + case ZEROHOUR_MUS: return "ZEROHOUR"; + case TWELFTH_MUS: return "TWELFTH"; + case ROSTER_MUS: return "ROSTER"; + case URAHERO_MUS: return "URAHERO"; + case VICMARCH_MUS: return "VICMARCH"; + case PACMAN_MUS: return "PACMAN"; + + default: return NULL; + + } // End switch chunk + +} + +PUBLIC char *GetMusicFileName_SOD( W32 chunk ) +{ + switch( chunk ) + { + case SOD_XFUNKIE_MUS: return "XFUNKIE"; + case SOD_DUNGEON_MUS: return "DUNGEON"; + case SOD_XDEATH_MUS: return "XDEATH"; + case SOD_GETTHEM_MUS: return "GETTHEM"; + case SOD_XTIPTOE_MUS: return "XTIPTOE"; + case SOD_GOINGAFT_MUS: return "GOINGAFT"; + case SOD_URAHERO_MUS: return "URAHERO"; + case SOD_XTHEEND_MUS: return "XTHEEND"; + case SOD_NAZI_OMI_MUS: return "NAZI_OMI"; + case SOD_POW_MUS: return "POW"; + case SOD_TWELFTH_MUS: return "TWELFTH"; + case SOD_SEARCHN_MUS: return "SEARCHN"; + case SOD_SUSPENSE_MUS: return "SUSPENSE"; + case SOD_ZEROHOUR_MUS: return "ZEROHOUR"; + case SOD_WONDERIN_MUS: return "WONDERIN"; + case SOD_ULTIMATE_MUS: return "ULTIMATE"; + case SOD_ENDLEVEL_MUS: return "ENDLEVEL"; + case SOD_XEVIL_MUS: return "XEVIL"; + case SOD_XJAZNAZI_MUS: return "XJAZNAZI"; + case SOD_COPYPRO_MUS: return "COPYPRO"; + case SOD_XAWARD_MUS: return "XAWARD"; + case SOD_XPUTIT_MUS: return "XPUTIT"; + case SOD_XGETYOU_MUS: return "XGETYOU"; + case SOD_XTOWER2_MUS: return "XTOWER2"; + + default: return NULL; + + } // End switch chunk + +} \ No newline at end of file diff --git a/wolf3d/wolfextractor/wolf/wolf_aud.c b/wolf3d/wolfextractor/wolf/wolf_aud.c new file mode 100644 index 0000000..98534f0 --- /dev/null +++ b/wolf3d/wolfextractor/wolf/wolf_aud.c @@ -0,0 +1,507 @@ +/* + + Copyright (C) 2004 Michael Liebscher + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * wolf_aud.c: Decode Wolfenstein 3-D Adlib audio data. + * + * Author: Michael Liebscher + * Date: 2004 + * + * Acknowledgement: + * This code was derived from Wolfenstein 3-D, and was originally + * written by Id Software, Inc. + * + */ + +#include +#include + +#include "wolf_def.h" + +#include "../string/com_string.h" +#include "../adlib/adlib.h" +#include "../adlib/fmopl.h" +#include "../loaders/wav.h" +#include "../filesys/file.h" +#include "../../../common/common_utils.h" +#include "../../../common/arch.h" +#include "../memory/memory.h" + +#define AHEADFNAME "AUDIOHED" +#define AUDIOFNAME "AUDIOT" + + +#define MAX_CHUNK_SIZE 500 + + +#define WL6_STARTMUSIC 262 +#define SOD_STARTMUSIC 243 + + + +PRIVATE FILE *audiohandle; + +PRIVATE W32 *audiostarts; + + +/* +----------------------------------------------------------------------------- + Function: CAL_SetupAudioFile() -Setup for decoding audio data. + + Parameters: fextension -[in] Pointer to string with file extension. + + Returns: Non-zero on success, otherwise zero. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE W8 CAL_SetupAudioFile( const char *fextension ) +{ + FILE *handle; + SW32 length; + W32 count; + char fname[ 13 ]; + + if( ! fextension || ! *fextension ) + { + printf( "NULL extension passed into CAL_SetupAudioFile!\n" ); + + return 0; + } + +// +// load audiohed.XXX (offsets and lengths for audio file) +// + cs_strlcpy( fname, AHEADFNAME, sizeof( fname ) ); + cs_strlcat( fname, fextension, sizeof( fname ) ); + + handle = fopen( cs_strupr( fname ), "rb" ); + if( handle == NULL ) + { + handle = fopen( cs_strlwr( fname ), "rb" ); + + if( handle == NULL ) + { + printf( "Can not open file (%s) for read!\n", fname ); + return 0; + } + } + + length = FS_FileLength( handle ); + if( length < 4 ) + { + fclose( handle ); + printf( "Incorrect audio header size on file: %s\n", fname ); + return 0; + } + + audiostarts = (PW32) MM_MALLOC( length ); + if( audiostarts == NULL ) + { + return 0; + } + + count = fread( audiostarts, sizeof( W32 ), length >> 2, handle ); + if( count != (W32)(length >> 2) ) + { + fclose( handle ); + printf( "[Error]: Read error on file: (%s)", fname ); + return 0; + } + + + fclose( handle ); + +// +// open the Audio data file +// + cs_strlcpy( fname, AUDIOFNAME, sizeof( fname ) ); + cs_strlcat( fname, fextension, sizeof( fname ) ); + + audiohandle = fopen( cs_strupr( fname ), "rb" ); + if( audiohandle == NULL ) + { + audiohandle = fopen( cs_strlwr( fname ), "rb" ); + if( audiohandle == NULL ) + { + printf( "Could not open file (%s) for read!\n", fname ); + return 0; + } + } + + return 1; +} + +/* +----------------------------------------------------------------------------- + Function: CA_CacheAudioChunk() -Cache audio data. + + Parameters: chunk -[in] Chunk number to cache. + BuffChunk -[in] Allocated memory block to hold data. + + Returns: Non-zero on success, otherwise zero. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE W8 CA_CacheAudioChunk( W32 chunk, W8 *BuffChunk ) +{ + W32 pos, length, count; + + +// +// load the chunk into a buffer +// + pos = audiostarts[ chunk ]; + length = audiostarts[ chunk+1 ] - pos; + if( length < 1 || length > MAX_CHUNK_SIZE ) + { + printf( "[CA_CacheAudioChunk]: Chunk length not valid\n" ); + return 0; + } + + + if( fseek( audiohandle, pos, SEEK_SET ) != 0 ) + { + printf( "[CA_CacheAudioChunk]: Could not seek!\n" ); + return 0; + } + + + count = fread( BuffChunk, 1, length, audiohandle ); + if( count != length ) + { + printf( "[CA_CacheAudioChunk]: Read error!\n" ); + return 0; + } + + return 1; +} + +/* +----------------------------------------------------------------------------- + Function: CA_SaveAudioChunk() -Decode and save audio data. + + Parameters: chunk -[in] Chunk number to cache. + filename -[in] Save as filename. + BuffChunk -[in] Sound data to decode. + BuffWav -[in] Allocated memory block to hold decoded data. + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE void CA_SaveAudioChunk( W32 chunk, const char *filename, + W8 *BuffChunk, W8 *BuffWav ) +{ + W32 length; + + if( ! filename || ! *filename ) + { + return; + } + + if( ! CA_CacheAudioChunk( chunk, BuffChunk ) ) + { + return; + } + + if( ADLIB_DecodeSound( (AdLibSound *)BuffChunk, BuffWav, &length ) == 0 ) + { + return; + } + + write_wav( filename, BuffWav, length, 1, 22050, 2 ); +} + + +extern W32 ADLIB_UpdateMusic( W32 size, void *buffer ); +extern W32 ADLIB_getLength( void *musbuffer ); +extern void ADLIB_LoadMusic( void *musbuffer ); + +extern int vorbis_encode( const char *filename, void *data, W32 size, W32 in_channels, W32 in_samplesize, + W32 rate, W32 quality, W32 max_bitrate, W32 min_bitrate ); + + +#define NCH 1 // channels +#define BPS 16 // bit per second + +PRIVATE void CA_SaveMusicChunk( W32 chunk, const char *filename ) +{ + W8 *data, *BuffWav; + W32 pos, length, uncompr_length; + W32 len; + + + pos = audiostarts[ chunk ]; + length = audiostarts[ chunk+1 ] - pos; + + data = MM_MALLOC( length ); + if( data == NULL ) + { + return; + } + + if( fseek( audiohandle, pos, SEEK_SET ) != 0 ) + { + printf( "[CA_SaveMusicChunk]: Could not seek!\n" ); + + MM_FREE( data ); + + return; + } + + if( fread( data, 1, length, audiohandle ) != length ) + { + printf( "[CA_SaveMusicChunk]: Read error!\n" ); + + MM_FREE( data ); + + return; + } + + + uncompr_length = ADLIB_getLength( data ); + if( uncompr_length == 1 ) + { + MM_FREE( data ); + + return; + } + + + ADLIB_LoadMusic( data ); + + BuffWav = MM_MALLOC( uncompr_length * 64 * 2 ); + if( BuffWav == NULL ) + { + MM_FREE( data ); + + return; + } + + len = ADLIB_UpdateMusic( uncompr_length, BuffWav ); + + +#if 1 + + vorbis_encode( filename, BuffWav, len, 1, 16, 44100, 0, 0, 0 ); + +#else + + write_wav( filename, BuffWav, len, 1, 44100, 2 ); + +#endif + + MM_FREE( BuffWav ); + MM_FREE( data ); +} + +/* +----------------------------------------------------------------------------- + Function: CAL_ShutdownAudioFile() -Decode and save audio data. + + Parameters: Nothing. + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE void CAL_ShutdownAudioFile() +{ + if( audiohandle ) + { + fclose( audiohandle ); + audiohandle = NULL; + } + + if( audiostarts ) + { + MM_FREE( audiostarts ); + } + +} + +/* +----------------------------------------------------------------------------- + Function: AudioRipper() -Interface to audio decoder. + + Parameters: fextension -[in] file extension string. + start -[in] Chunk number for start of audio data. + end -[in] Chunk number for end of audio data. + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC _boolean AudioRipper( const char *fextension, + W32 start, W32 end, W16 version ) +{ + W32 i, j; + char filename[ 64 ]; + W8 *buffChunk; + W8 *buffWav; + W32 startofmusic = WL6_STARTMUSIC - 1; + W32 endofmusic = LASTMUSIC; + +// +// Setup +// + + if( version == SOD_PAK || version == SDM_PAK ) + { + if( 0 == FS_Mkdir( SODLSFXDIR ) ) + { + printf( "[%s] Could not create directory (%s)!\n", "wolf_aud.c", SODLSFXDIR ); + + return false; + } + + startofmusic = SOD_STARTMUSIC; + endofmusic = SOD_LASTMUSIC; + } + else + { + if( 0 == FS_Mkdir( LSFXDIR ) ) + { + printf( "[%s] Could not create directory (%s)!\n", "wolf_aud.c", LSFXDIR ); + + return false; + } + } + + + if( 0 == FS_Mkdir( MUSICDIR ) ) + { + printf( "[%s] Could not create directory (%s)!\n", "wolf_aud.c", LSFXDIR ); + + return false; + } + + + + + + if( ! CAL_SetupAudioFile( fextension ) ) + { + CAL_ShutdownAudioFile(); + + return false; + } + + if( ! ADLIB_Init( 22050 ) ) + { + CAL_ShutdownAudioFile(); + + return false; + } + +// +// Allocate buffers +// + + buffChunk = MM_MALLOC( MAX_CHUNK_SIZE ); + if( buffChunk == NULL ) + { + ADLIB_Shutdown(); + CAL_ShutdownAudioFile(); + + return false; + } + + buffWav = MM_MALLOC( MAX_WAV_SIZE ); + if( buffWav == NULL ) + { + ADLIB_Shutdown(); + CAL_ShutdownAudioFile(); + MM_FREE( buffChunk ); + + return false; + } + +// +// Decode Audio data +// + + printf( "Decoding Audio Data...\n" ); + + for( i = start, j = 0; i < end; ++i, ++j ) + { + if( version == SOD_PAK || version == SDM_PAK ) + { + cs_snprintf( filename, sizeof( filename ), "%s/%.3d.wav", SODLSFXDIR, j ); + } + else + { + cs_snprintf( filename, sizeof( filename ), "%s/%.3d.wav", LSFXDIR, j ); + } + + CA_SaveAudioChunk( i, filename, buffChunk, buffWav ); + } + + ADLIB_Shutdown(); + + MM_FREE( buffWav ); + MM_FREE( buffChunk ); + + +// +// Decode Music data +// + + if( ! ADLIB_Init( 44100 ) ) + { + CAL_ShutdownAudioFile(); + + return false; + } + + printf( "Decoding Music Data...\n" ); + + for( i = 0 ; i < endofmusic ; ++i ) + { + if( version == SOD_PAK || version == SDM_PAK ) + { + cs_snprintf( filename, sizeof( filename ), "%s/%s.ogg", MUSICDIR, GetMusicFileName_SOD( i ) ); + } + else + { + cs_snprintf( filename, sizeof( filename ), "%s/%s.ogg", MUSICDIR, GetMusicFileName_WL6( i ) ); + } + + CA_SaveMusicChunk( startofmusic + i, filename ); + } + + ADLIB_Shutdown(); + +// +// Shutdown +// + + + CAL_ShutdownAudioFile(); + + + + return true; +} diff --git a/wolf3d/wolfextractor/wolf/wolf_def.h b/wolf3d/wolfextractor/wolf/wolf_def.h new file mode 100644 index 0000000..032fa1b --- /dev/null +++ b/wolf3d/wolfextractor/wolf/wolf_def.h @@ -0,0 +1,919 @@ +/* + + Copyright (C) 2004 Michael Liebscher + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * wolf_def.h: Valid chunk numbers for Wolfenstein 3-D and Spear of Destiny. + * + * Author: Michael Liebscher + * Date: 2004 + * + * Acknowledgement: + * This code was derived from Wolfenstein 3-D, and was originally + * written by Id Software, Inc. + * + */ + +/* + Notes: + This module is implemented by wolf_aud.c, wolf_gfx.c, wolf_map.c, + wolf_pal.c, wolf_pm.c and wl6_name.c. + +*/ + +#ifndef __WOLF_DEF_H__ +#define __WOLF_DEF_H__ + +#include "../../../common/arch.h" + + +#define WL1_PAK (1<<0) +#define WL6_PAK (1<<1) +#define SDM_PAK (1<<2) +#define SOD_PAK (1<<3) +#define MAC_PAK (1<<4) +#define THREEDO_PAK (1<<5) + + +#define WL1_FEXT "*.WL1" +#define WL6_FEXT "*.WL6" +#define SDM_FEXT "*.SDM" +#define SOD_FEXT "*.SOD" +#define MAC_FEXT "*.MAC" + + + +#define GFXWALLDIR "walls" +#define GFXSPRITEDIR "sprites" +#define SFXDIR "sfx" + +#define SODGFXSPRITEDIR "sodsprites" +#define SODSFXDIR "sodsfx" + +#define MAPDIR "maps" + +#define LGFXDIR "pics" + +#define LSFXDIR "lsfx" +#define SODLSFXDIR "sodlsfx" + +#define MUSICDIR "music" + + + + + +typedef enum +{ + // Lump Start + WL1_H_BJPIC = 3, + WL1_H_CASTLEPIC, // 4 + WL1_H_KEYBOARDPIC, // 5 + WL1_H_CONTROLPIC, // 6 + WL1_H_HEALPIC, // 7 + WL1_H_BGPIC, // 8 + WL1_H_GUNPIC, // 9 + WL1_H_KEYPIC, // 10 + WL1_H_BLAZEPIC, // 11 + WL1_H_WEAPON1234PIC, // 12 + WL1_H_WOLFLOGOPIC, // 13 + WL1_H_VISAPIC, // 14 + WL1_H_MCPIC, // 15 + WL1_H_IDLOGOPIC, // 16 + WL1_H_TOPWINDOWPIC, // 17 + WL1_H_LEFTWINDOWPIC, // 18 + WL1_H_RIGHTWINDOWPIC, // 19 + WL1_H_BOTTOMINFOPIC, // 20 + WL1_H_GAMEPIC, // 21 + // Lump Start + WL1_C_OPTIONSPIC, // 22 + WL1_C_CURSOR1PIC, // 23 + WL1_C_CURSOR2PIC, // 24 + WL1_C_NOTSELECTEDPIC, // 25 + WL1_C_SELECTEDPIC, // 26 + WL1_C_FXTITLEPIC, // 27 + WL1_C_DIGITITLEPIC, // 28 + WL1_C_MUSICTITLEPIC, // 29 + WL1_C_MOUSELBACKPIC, // 30 + WL1_C_BABYMODEPIC, // 31 + WL1_C_EASYPIC, // 32 + WL1_C_NORMALPIC, // 33 + WL1_C_HARDPIC, // 34 + WL1_C_LOADSAVEDISKPIC, // 35 + WL1_C_DISKLOADING1PIC, // 36 + WL1_C_DISKLOADING2PIC, // 37 + WL1_C_CONTROLPIC, // 38 + WL1_C_CUSTOMIZEPIC, // 39 + WL1_C_LOADGAMEPIC, // 40 + WL1_C_SAVEGAMEPIC, // 41 + WL1_C_EPISODE1PIC, // 42 + WL1_C_EPISODE2PIC, // 43 + WL1_C_EPISODE3PIC, // 44 + WL1_C_EPISODE4PIC, // 45 + WL1_C_EPISODE5PIC, // 46 + WL1_C_EPISODE6PIC, // 47 + WL1_C_CODEPIC, // 48 + WL1_C_TIMECODEPIC, // 49 + WL1_C_LEVELPIC, // 50 + WL1_C_NAMEPIC, // 51 + WL1_C_SCOREPIC, // 52 + WL1_C_JOY1PIC, // 53 + WL1_C_JOY2PIC, // 54 + // Lump Start + WL1_L_GUYPIC, // 55 + WL1_L_COLONPIC, // 56 + WL1_L_NUM0PIC, // 57 + WL1_L_NUM1PIC, // 58 + WL1_L_NUM2PIC, // 59 + WL1_L_NUM3PIC, // 60 + WL1_L_NUM4PIC, // 61 + WL1_L_NUM5PIC, // 62 + WL1_L_NUM6PIC, // 63 + WL1_L_NUM7PIC, // 64 + WL1_L_NUM8PIC, // 65 + WL1_L_NUM9PIC, // 66 + WL1_L_PERCENTPIC, // 67 + WL1_L_APIC, // 68 + WL1_L_BPIC, // 69 + WL1_L_CPIC, // 70 + WL1_L_DPIC, // 71 + WL1_L_EPIC, // 72 + WL1_L_FPIC, // 73 + WL1_L_GPIC, // 74 + WL1_L_HPIC, // 75 + WL1_L_IPIC, // 76 + WL1_L_JPIC, // 77 + WL1_L_KPIC, // 78 + WL1_L_LPIC, // 79 + WL1_L_MPIC, // 80 + WL1_L_NPIC, // 81 + WL1_L_OPIC, // 82 + WL1_L_PPIC, // 83 + WL1_L_QPIC, // 84 + WL1_L_RPIC, // 85 + WL1_L_SPIC, // 86 + WL1_L_TPIC, // 87 + WL1_L_UPIC, // 88 + WL1_L_VPIC, // 89 + WL1_L_WPIC, // 90 + WL1_L_XPIC, // 91 + WL1_L_YPIC, // 92 + WL1_L_ZPIC, // 93 + WL1_L_EXPOINTPIC, // 94 + WL1_L_APOSTROPHEPIC, // 95 + WL1_L_GUY2PIC, // 96 + WL1_L_BJWINSPIC, // 97 + WL1_STATUSBARPIC, // 98 + WL1_TITLEPIC, // 99 + WL1_PG13PIC, // 100 + WL1_CREDITSPIC, // 101 + WL1_HIGHSCORESPIC, // 102 + // Lump Start + WL1_KNIFEPIC, // 103 + WL1_GUNPIC, // 104 + WL1_MACHINEGUNPIC, // 105 + WL1_GATLINGGUNPIC, // 106 + WL1_NOKEYPIC, // 107 + WL1_GOLDKEYPIC, // 108 + WL1_SILVERKEYPIC, // 109 + WL1_N_BLANKPIC, // 110 + WL1_N_0PIC, // 111 + WL1_N_1PIC, // 112 + WL1_N_2PIC, // 113 + WL1_N_3PIC, // 114 + WL1_N_4PIC, // 115 + WL1_N_5PIC, // 116 + WL1_N_6PIC, // 117 + WL1_N_7PIC, // 118 + WL1_N_8PIC, // 119 + WL1_N_9PIC, // 120 + WL1_FACE1APIC, // 121 + WL1_FACE1BPIC, // 122 + WL1_FACE1CPIC, // 123 + WL1_FACE2APIC, // 124 + WL1_FACE2BPIC, // 125 + WL1_FACE2CPIC, // 126 + WL1_FACE3APIC, // 127 + WL1_FACE3BPIC, // 128 + WL1_FACE3CPIC, // 129 + WL1_FACE4APIC, // 130 + WL1_FACE4BPIC, // 131 + WL1_FACE4CPIC, // 132 + WL1_FACE5APIC, // 133 + WL1_FACE5BPIC, // 134 + WL1_FACE5CPIC, // 135 + WL1_FACE6APIC, // 136 + WL1_FACE6BPIC, // 137 + WL1_FACE6CPIC, // 138 + WL1_FACE7APIC, // 139 + WL1_FACE7BPIC, // 140 + WL1_FACE7CPIC, // 141 + WL1_FACE8APIC, // 142 + WL1_GOTGATLINGPIC, // 143 + WL1_MUTANTBJPIC, // 144 + WL1_PAUSEDPIC, // 145 + WL1_GETPSYCHEDPIC, // 146 + + WL1_ENUMEND + +} wl1_graphicnums; + +typedef enum +{ + // Lump Start + H_BJPIC = 3, + H_CASTLEPIC, // 4 + H_BLAZEPIC, // 5 + H_TOPWINDOWPIC, // 6 + H_LEFTWINDOWPIC, // 7 + H_RIGHTWINDOWPIC, // 8 + H_BOTTOMINFOPIC, // 9 + // Lump Start + C_OPTIONSPIC, // 10 + C_CURSOR1PIC, // 11 + C_CURSOR2PIC, // 12 + C_NOTSELECTEDPIC, // 13 + C_SELECTEDPIC, // 14 + C_FXTITLEPIC, // 15 + C_DIGITITLEPIC, // 16 + C_MUSICTITLEPIC, // 17 + C_MOUSELBACKPIC, // 18 + C_BABYMODEPIC, // 19 + C_EASYPIC, // 20 + C_NORMALPIC, // 21 + C_HARDPIC, // 22 + C_LOADSAVEDISKPIC, // 23 + C_DISKLOADING1PIC, // 24 + C_DISKLOADING2PIC, // 25 + C_CONTROLPIC, // 26 + C_CUSTOMIZEPIC, // 27 + C_LOADGAMEPIC, // 28 + C_SAVEGAMEPIC, // 29 + C_EPISODE1PIC, // 30 + C_EPISODE2PIC, // 31 + C_EPISODE3PIC, // 32 + C_EPISODE4PIC, // 33 + C_EPISODE5PIC, // 34 + C_EPISODE6PIC, // 35 + C_CODEPIC, // 36 + C_TIMECODEPIC, // 37 + C_LEVELPIC, // 38 + C_NAMEPIC, // 39 + C_SCOREPIC, // 40 + C_JOY1PIC, // 41 + C_JOY2PIC, // 42 + // Lump Start + L_GUYPIC, // 43 + L_COLONPIC, // 44 + L_NUM0PIC, // 45 + L_NUM1PIC, // 46 + L_NUM2PIC, // 47 + L_NUM3PIC, // 48 + L_NUM4PIC, // 49 + L_NUM5PIC, // 50 + L_NUM6PIC, // 51 + L_NUM7PIC, // 52 + L_NUM8PIC, // 53 + L_NUM9PIC, // 54 + L_PERCENTPIC, // 55 + L_APIC, // 56 + L_BPIC, // 57 + L_CPIC, // 58 + L_DPIC, // 59 + L_EPIC, // 60 + L_FPIC, // 61 + L_GPIC, // 62 + L_HPIC, // 63 + L_IPIC, // 64 + L_JPIC, // 65 + L_KPIC, // 66 + L_LPIC, // 67 + L_MPIC, // 68 + L_NPIC, // 69 + L_OPIC, // 70 + L_PPIC, // 71 + L_QPIC, // 72 + L_RPIC, // 73 + L_SPIC, // 74 + L_TPIC, // 75 + L_UPIC, // 76 + L_VPIC, // 77 + L_WPIC, // 78 + L_XPIC, // 79 + L_YPIC, // 80 + L_ZPIC, // 81 + L_EXPOINTPIC, // 82 + L_APOSTROPHEPIC, // 83 + L_GUY2PIC, // 84 + L_BJWINSPIC, // 85 + STATUSBARPIC, // 86 + TITLEPIC, // 87 + PG13PIC, // 88 + CREDITSPIC, // 89 + HIGHSCORESPIC, // 90 + // Lump Start + KNIFEPIC, // 91 + GUNPIC, // 92 + MACHINEGUNPIC, // 93 + GATLINGGUNPIC, // 94 + NOKEYPIC, // 95 + GOLDKEYPIC, // 96 + SILVERKEYPIC, // 97 + N_BLANKPIC, // 98 + N_0PIC, // 99 + N_1PIC, // 100 + N_2PIC, // 101 + N_3PIC, // 102 + N_4PIC, // 103 + N_5PIC, // 104 + N_6PIC, // 105 + N_7PIC, // 106 + N_8PIC, // 107 + N_9PIC, // 108 + FACE1APIC, // 109 + FACE1BPIC, // 110 + FACE1CPIC, // 111 + FACE2APIC, // 112 + FACE2BPIC, // 113 + FACE2CPIC, // 114 + FACE3APIC, // 115 + FACE3BPIC, // 116 + FACE3CPIC, // 117 + FACE4APIC, // 118 + FACE4BPIC, // 119 + FACE4CPIC, // 120 + FACE5APIC, // 121 + FACE5BPIC, // 122 + FACE5CPIC, // 123 + FACE6APIC, // 124 + FACE6BPIC, // 125 + FACE6CPIC, // 126 + FACE7APIC, // 127 + FACE7BPIC, // 128 + FACE7CPIC, // 129 + FACE8APIC, // 130 + GOTGATLINGPIC, // 131 + MUTANTBJPIC, // 132 + PAUSEDPIC, // 133 + GETPSYCHEDPIC, // 134 + + ORDERSCREEN=136, + ERRORSCREEN, // 137 + T_HELPART, // 138 + T_DEMO0, // 139 + T_DEMO1, // 140 + T_DEMO2, // 141 + T_DEMO3, // 142 + T_ENDART1, // 143 + T_ENDART2, // 144 + T_ENDART3, // 145 + T_ENDART4, // 146 + T_ENDART5, // 147 + T_ENDART6, // 148 + ENUMEND + +} graphicnums; + + +typedef enum +{ + // Lump Start + SDM_C_BACKDROPPIC = 3, + SDM_C_MOUSELBACKPIC, // 4 + SDM_C_CURSOR1PIC, // 5 + SDM_C_CURSOR2PIC, // 6 + SDM_C_NOTSELECTEDPIC, // 7 + SDM_C_SELECTEDPIC, // 8 + // Lump Start + SDM_C_CUSTOMIZEPIC, // 9 + SDM_C_JOY1PIC, // 10 + SDM_C_JOY2PIC, // 11 + SDM_C_MOUSEPIC, // 12 + SDM_C_JOYSTICKPIC, // 13 + SDM_C_KEYBOARDPIC, // 14 + SDM_C_CONTROLPIC, // 15 + // Lump Start + SDM_C_OPTIONSPIC, // 16 + // Lump Start + SDM_C_FXTITLEPIC, // 17 + SDM_C_DIGITITLEPIC, // 18 + SDM_C_MUSICTITLEPIC, // 19 + // Lump Start + SDM_C_HOWTOUGHPIC, // 20 + SDM_C_BABYMODEPIC, // 21 + SDM_C_EASYPIC, // 22 + SDM_C_NORMALPIC, // 23 + SDM_C_HARDPIC, // 24 + // Lump Start + SDM_C_DISKLOADING1PIC, // 25 + SDM_C_DISKLOADING2PIC, // 26 + SDM_C_LOADGAMEPIC, // 27 + SDM_C_SAVEGAMEPIC, // 28 + // Lump Start + SDM_HIGHSCORESPIC, // 29 + SDM_C_WONSPEARPIC, // 30 + // Lump Start + SDM_L_GUYPIC, // 31 + SDM_L_COLONPIC, // 32 + SDM_L_NUM0PIC, // 33 + SDM_L_NUM1PIC, // 34 + SDM_L_NUM2PIC, // 35 + SDM_L_NUM3PIC, // 36 + SDM_L_NUM4PIC, // 37 + SDM_L_NUM5PIC, // 38 + SDM_L_NUM6PIC, // 39 + SDM_L_NUM7PIC, // 40 + SDM_L_NUM8PIC, // 41 + SDM_L_NUM9PIC, // 42 + SDM_L_PERCENTPIC, // 43 + SDM_L_APIC, // 44 + SDM_L_BPIC, // 45 + SDM_L_CPIC, // 46 + SDM_L_DPIC, // 47 + SDM_L_EPIC, // 48 + SDM_L_FPIC, // 49 + SDM_L_GPIC, // 50 + SDM_L_HPIC, // 51 + SDM_L_IPIC, // 52 + SDM_L_JPIC, // 53 + SDM_L_KPIC, // 54 + SDM_L_LPIC, // 55 + SDM_L_MPIC, // 56 + SDM_L_NPIC, // 57 + SDM_L_OPIC, // 58 + SDM_L_PPIC, // 59 + SDM_L_QPIC, // 60 + SDM_L_RPIC, // 61 + SDM_L_SPIC, // 62 + SDM_L_TPIC, // 63 + SDM_L_UPIC, // 64 + SDM_L_VPIC, // 65 + SDM_L_WPIC, // 66 + SDM_L_XPIC, // 67 + SDM_L_YPIC, // 68 + SDM_L_ZPIC, // 69 + SDM_L_EXPOINTPIC, // 70 + SDM_L_APOSTROPHEPIC, // 71 + SDM_L_GUY2PIC, // 72 + SDM_L_BJWINSPIC, // 73 + // Lump Start + SDM_TITLE1PIC, // 74 + SDM_TITLE2PIC, // 75 + SDM_STATUSBARPIC, // 76 + SDM_PG13PIC, // 77 + SDM_CREDITSPIC, // 78 + // Lump Start + SDM_KNIFEPIC, // 79 + SDM_GUNPIC, // 80 + SDM_MACHINEGUNPIC, // 81 + SDM_GATLINGGUNPIC, // 82 + SDM_NOKEYPIC, // 83 + SDM_GOLDKEYPIC, // 84 + SDM_SILVERKEYPIC, // 85 + SDM_N_BLANKPIC, // 86 + SDM_N_0PIC, // 87 + SDM_N_1PIC, // 88 + SDM_N_2PIC, // 89 + SDM_N_3PIC, // 90 + SDM_N_4PIC, // 91 + SDM_N_5PIC, // 92 + SDM_N_6PIC, // 93 + SDM_N_7PIC, // 94 + SDM_N_8PIC, // 95 + SDM_N_9PIC, // 96 + SDM_FACE1APIC, // 97 + SDM_FACE1BPIC, // 98 + SDM_FACE1CPIC, // 99 + SDM_FACE2APIC, // 100 + SDM_FACE2BPIC, // 101 + SDM_FACE2CPIC, // 102 + SDM_FACE3APIC, // 103 + SDM_FACE3BPIC, // 104 + SDM_FACE3CPIC, // 105 + SDM_FACE4APIC, // 106 + SDM_FACE4BPIC, // 107 + SDM_FACE4CPIC, // 108 + SDM_FACE5APIC, // 109 + SDM_FACE5BPIC, // 110 + SDM_FACE5CPIC, // 111 + SDM_FACE6APIC, // 112 + SDM_FACE6BPIC, // 113 + SDM_FACE6CPIC, // 114 + SDM_FACE7APIC, // 115 + SDM_FACE7BPIC, // 116 + SDM_FACE7CPIC, // 117 + SDM_FACE8APIC, // 118 + SDM_GOTGATLINGPIC, // 119 + SDM_GODMODEFACE1PIC, // 120 + SDM_GODMODEFACE2PIC, // 121 + SDM_GODMODEFACE3PIC, // 122 + SDM_BJWAITING1PIC, // 123 + SDM_BJWAITING2PIC, // 124 + SDM_BJOUCHPIC, // 125 + SDM_PAUSEDPIC, // 126 + SDM_GETPSYCHEDPIC, // 127 + + + + SDM_ORDERSCREEN = 129, + SDM_ERRORSCREEN, // 130 + SDM_TITLEPALETTE, // 131 + SDM_T_DEMO0, // 132 + + SDM_ENUMEND + +} sdm_graphicnums; + +typedef enum +{ + // Lump Start + SOD_C_BACKDROPPIC = 3, + SOD_C_MOUSELBACKPIC, // 4 + SOD_C_CURSOR1PIC, // 5 + SOD_C_CURSOR2PIC, // 6 + SOD_C_NOTSELECTEDPIC, // 7 + SOD_C_SELECTEDPIC, // 8 + // Lump Start + SOD_C_CUSTOMIZEPIC, // 9 + SOD_C_JOY1PIC, // 10 + SOD_C_JOY2PIC, // 11 + SOD_C_MOUSEPIC, // 12 + SOD_C_JOYSTICKPIC, // 13 + SOD_C_KEYBOARDPIC, // 14 + SOD_C_CONTROLPIC, // 15 + // Lump Start + SOD_C_OPTIONSPIC, // 16 + // Lump Start + SOD_C_FXTITLEPIC, // 17 + SOD_C_DIGITITLEPIC, // 18 + SOD_C_MUSICTITLEPIC, // 19 + // Lump Start + SOD_C_HOWTOUGHPIC, // 20 + SOD_C_BABYMODEPIC, // 21 + SOD_C_EASYPIC, // 22 + SOD_C_NORMALPIC, // 23 + SOD_C_HARDPIC, // 24 + // Lump Start + SOD_C_DISKLOADING1PIC, // 25 + SOD_C_DISKLOADING2PIC, // 26 + SOD_C_LOADGAMEPIC, // 27 + SOD_C_SAVEGAMEPIC, // 28 + // Lump Start + SOD_HIGHSCORESPIC, // 29 + SOD_C_WONSPEARPIC, // 30 + // Lump Start + SOD_BJCOLLAPSE1PIC, // 31 + SOD_BJCOLLAPSE2PIC, // 32 + SOD_BJCOLLAPSE3PIC, // 33 + SOD_BJCOLLAPSE4PIC, // 34 + SOD_ENDPICPIC, // 35 + // Lump Start + SOD_L_GUYPIC, // 36 + SOD_L_COLONPIC, // 37 + SOD_L_NUM0PIC, // 38 + SOD_L_NUM1PIC, // 39 + SOD_L_NUM2PIC, // 40 + SOD_L_NUM3PIC, // 41 + SOD_L_NUM4PIC, // 42 + SOD_L_NUM5PIC, // 43 + SOD_L_NUM6PIC, // 44 + SOD_L_NUM7PIC, // 45 + SOD_L_NUM8PIC, // 46 + SOD_L_NUM9PIC, // 47 + SOD_L_PERCENTPIC, // 48 + SOD_L_APIC, // 49 + SOD_L_BPIC, // 50 + SOD_L_CPIC, // 51 + SOD_L_DPIC, // 52 + SOD_L_EPIC, // 53 + SOD_L_FPIC, // 54 + SOD_L_GPIC, // 55 + SOD_L_HPIC, // 56 + SOD_L_IPIC, // 57 + SOD_L_JPIC, // 58 + SOD_L_KPIC, // 59 + SOD_L_LPIC, // 60 + SOD_L_MPIC, // 61 + SOD_L_NPIC, // 62 + SOD_L_OPIC, // 63 + SOD_L_PPIC, // 64 + SOD_L_QPIC, // 65 + SOD_L_RPIC, // 66 + SOD_L_SPIC, // 67 + SOD_L_TPIC, // 68 + SOD_L_UPIC, // 69 + SOD_L_VPIC, // 70 + SOD_L_WPIC, // 71 + SOD_L_XPIC, // 72 + SOD_L_YPIC, // 73 + SOD_L_ZPIC, // 74 + SOD_L_EXPOINTPIC, // 75 + SOD_L_APOSTROPHEPIC, // 76 + SOD_L_GUY2PIC, // 77 + SOD_L_BJWINSPIC, // 78 + // Lump Start + SOD_TITLE1PIC, // 79 + SOD_TITLE2PIC, // 80 + // Lump Start + SOD_ENDSCREEN11PIC, // 81 + // Lump Start + SOD_ENDSCREEN12PIC, // 82 + SOD_ENDSCREEN3PIC, // 83 + SOD_ENDSCREEN4PIC, // 84 + SOD_ENDSCREEN5PIC, // 85 + SOD_ENDSCREEN6PIC, // 86 + SOD_ENDSCREEN7PIC, // 87 + SOD_ENDSCREEN8PIC, // 88 + SOD_ENDSCREEN9PIC, // 89 + SOD_STATUSBARPIC, // 90 + SOD_PG13PIC, // 91 + SOD_CREDITSPIC, // 92 + // Lump Start + SOD_IDGUYS1PIC, // 93 + SOD_IDGUYS2PIC, // 94 + // Lump Start + SOD_COPYPROTTOPPIC, // 95 + SOD_COPYPROTBOXPIC, // 96 + SOD_BOSSPIC1PIC, // 97 + SOD_BOSSPIC2PIC, // 98 + SOD_BOSSPIC3PIC, // 99 + SOD_BOSSPIC4PIC, // 100 + // Lump Start + SOD_KNIFEPIC, // 101 + SOD_GUNPIC, // 102 + SOD_MACHINEGUNPIC, // 103 + SOD_GATLINGGUNPIC, // 104 + SOD_NOKEYPIC, // 105 + SOD_GOLDKEYPIC, // 106 + SOD_SILVERKEYPIC, // 107 + SOD_N_BLANKPIC, // 108 + SOD_N_0PIC, // 109 + SOD_N_1PIC, // 110 + SOD_N_2PIC, // 111 + SOD_N_3PIC, // 112 + SOD_N_4PIC, // 113 + SOD_N_5PIC, // 114 + SOD_N_6PIC, // 115 + SOD_N_7PIC, // 116 + SOD_N_8PIC, // 117 + SOD_N_9PIC, // 118 + SOD_FACE1APIC, // 119 + SOD_FACE1BPIC, // 120 + SOD_FACE1CPIC, // 121 + SOD_FACE2APIC, // 122 + SOD_FACE2BPIC, // 123 + SOD_FACE2CPIC, // 124 + SOD_FACE3APIC, // 125 + SOD_FACE3BPIC, // 126 + SOD_FACE3CPIC, // 127 + SOD_FACE4APIC, // 128 + SOD_FACE4BPIC, // 129 + SOD_FACE4CPIC, // 130 + SOD_FACE5APIC, // 131 + SOD_FACE5BPIC, // 132 + SOD_FACE5CPIC, // 133 + SOD_FACE6APIC, // 134 + SOD_FACE6BPIC, // 135 + SOD_FACE6CPIC, // 136 + SOD_FACE7APIC, // 137 + SOD_FACE7BPIC, // 138 + SOD_FACE7CPIC, // 139 + SOD_FACE8APIC, // 140 + SOD_GOTGATLINGPIC, // 141 + SOD_GODMODEFACE1PIC, // 142 + SOD_GODMODEFACE2PIC, // 143 + SOD_GODMODEFACE3PIC, // 144 + SOD_BJWAITING1PIC, // 145 + SOD_BJWAITING2PIC, // 146 + SOD_BJOUCHPIC, // 147 + SOD_PAUSEDPIC, // 148 + SOD_GETPSYCHEDPIC, // 149 + + SOD_ORDERSCREEN = 151, + SOD_ERRORSCREEN, // 152 + SOD_TITLEPALETTE, // 153 + SOD_END1PALETTE, // 154 + SOD_END2PALETTE, // 155 + SOD_END3PALETTE, // 156 + SOD_END4PALETTE, // 157 + SOD_END5PALETTE, // 158 + SOD_END6PALETTE, // 159 + SOD_END7PALETTE, // 160 + SOD_END8PALETTE, // 161 + SOD_END9PALETTE, // 162 + SOD_IDGUYSPALETTE, // 163 + SOD_T_DEMO0, // 164 + SOD_T_DEMO1, // 165 + SOD_T_DEMO2, // 166 + SOD_T_DEMO3, // 167 + SOD_T_ENDART1, // 168 + SOD_ENUMEND + +} sod_graphicnums; + + +typedef enum +{ + CORNER_MUS, // 0 + DUNGEON_MUS, // 1 + WARMARCH_MUS, // 2 + GETTHEM_MUS, // 3 + HEADACHE_MUS, // 4 + HITLWLTZ_MUS, // 5 + INTROCW3_MUS, // 6 + NAZI_NOR_MUS, // 7 + NAZI_OMI_MUS, // 8 + POW_MUS, // 9 + SALUTE_MUS, // 10 + SEARCHN_MUS, // 11 + SUSPENSE_MUS, // 12 + VICTORS_MUS, // 13 + WONDERIN_MUS, // 14 + FUNKYOU_MUS, // 15 + ENDLEVEL_MUS, // 16 + GOINGAFT_MUS, // 17 + PREGNANT_MUS, // 18 + ULTIMATE_MUS, // 19 + NAZI_RAP_MUS, // 20 + ZEROHOUR_MUS, // 21 + TWELFTH_MUS, // 22 + ROSTER_MUS, // 23 + URAHERO_MUS, // 24 + VICMARCH_MUS, // 25 + PACMAN_MUS, // 26 + LASTMUSIC + +} wl6_musicnames; + +typedef enum +{ + SOD_XFUNKIE_MUS, // 0 + SOD_DUNGEON_MUS, // 1 + SOD_XDEATH_MUS, // 2 + SOD_GETTHEM_MUS, // 3 + SOD_XTIPTOE_MUS, // 4 + SOD_GOINGAFT_MUS, // 5 + SOD_URAHERO_MUS, // 6 + SOD_XTHEEND_MUS, // 7 + SOD_NAZI_OMI_MUS, // 8 + SOD_POW_MUS, // 9 + SOD_TWELFTH_MUS, // 10 + SOD_SEARCHN_MUS, // 11 + SOD_SUSPENSE_MUS, // 12 + SOD_ZEROHOUR_MUS, // 13 + SOD_WONDERIN_MUS, // 14 + SOD_ULTIMATE_MUS, // 15 + SOD_ENDLEVEL_MUS, // 16 + SOD_XEVIL_MUS, // 17 + SOD_XJAZNAZI_MUS, // 18 + SOD_COPYPRO_MUS, // 19 + SOD_XAWARD_MUS, // 20 + SOD_XPUTIT_MUS, // 21 + SOD_XGETYOU_MUS, // 22 + SOD_XTOWER2_MUS, // 23 + SOD_LASTMUSIC + +} sod_musicnames; + + +///////////////////////////////////////////////////////////////////// +// +// WL1 +// +///////////////////////////////////////////////////////////////////// + +// +// Data LUMPs +// +#define WL1_README_LUMP_START 3 +#define WL1_README_LUMP_END 25 + +#define WL1_CONTROLS_LUMP_START 26 +#define WL1_CONTROLS_LUMP_END 52 + +#define WL1_LEVELEND_LUMP_START 53 +#define WL1_LEVELEND_LUMP_END 93 + +#define WL1_LATCHPICS_LUMP_START 99 +#define WL1_LATCHPICS_LUMP_END 141 + + + +///////////////////////////////////////////////////////////////////// +// +// WL6 +// +///////////////////////////////////////////////////////////////////// + +// +// Data LUMPs +// +#define WL6_README_LUMP_START 3 +#define WL6_README_LUMP_END 9 + +#define WL6_CONTROLS_LUMP_START 10 +#define WL6_CONTROLS_LUMP_END 42 + +#define WL6_LEVELEND_LUMP_START 43 +#define WL6_LEVELEND_LUMP_END 85 + +#define WL6_LATCHPICS_LUMP_START 91 +#define WL6_LATCHPICS_LUMP_END 134 + + +// +// Amount of each data item +// +#define NUMFONT 2 +#define NUMFONTM 0 +#define NUMPICM 0 +#define NUMSPRITES 0 +#define NUMTILE8 72 +#define NUMTILE8M 0 +#define NUMTILE16 0 +#define NUMTILE16M 0 +#define NUMTILE32 0 +#define NUMTILE32M 0 +#define NUMEXTERNS 13 +// +// File offsets for data items +// +#define STRUCTPIC 0 + +#define STARTFONT 1 +#define STARTFONTM 3 +#define STARTPICS 3 +#define STARTPICM 135 +#define STARTSPRITES 135 +#define STARTTILE8 135 +#define STARTTILE8M 136 +#define STARTTILE16 136 +#define STARTTILE16M 136 +#define STARTTILE32 136 +#define STARTTILE32M 136 +#define STARTEXTERNS 136 + + + +///////////////////////////////////////////////////////////////////// +// +// Spear of Destiny +// +///////////////////////////////////////////////////////////////////// + + +// +// Amount of each data item +// +#define NUMCHUNKS 169 +#define NUMPICS 147 +#define SOD_NUMEXTERNS 18 +// +// File offsets for data items +// + +#define SOD_STARTDIFF 15 + +//// End SOD + + + + + + +extern _boolean LumpExtractor( const char *fextension, W32 limit, W16 version ); +extern _boolean PExtractor( const char *extension, W16 version ); +extern _boolean AudioRipper( const char *fextension, W32 start, W32 end, W16 version ); + +extern _boolean MapRipper( const char *fextension, W16 version ); + + + +extern char *GetMusicFileName_WL6( W32 chunk ); +extern char *GetMusicFileName_SOD( W32 chunk ); + + +extern char *GetLumpFileName_WL1( W32 chunk ); +extern char *GetLumpFileName_WL6( W32 chunk ); +extern char *GetLumpFileName_SDM( W32 chunk ); +extern char *GetLumpFileName_SOD( W32 chunk ); + + +#endif /* __WOLF_DEF_H__ */ + diff --git a/wolf3d/wolfextractor/wolf/wolf_gfx.c b/wolf3d/wolfextractor/wolf/wolf_gfx.c new file mode 100644 index 0000000..d9a0dba --- /dev/null +++ b/wolf3d/wolfextractor/wolf/wolf_gfx.c @@ -0,0 +1,1707 @@ +/* + + Copyright (C) 2004 Michael Liebscher + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * wolf_gfx.c: Decode Wolfenstein3-D GFX data. + * + * Author: Michael Liebscher + * Date: 2004 + * + * Acknowledgement: + * This code was derived from Wolfenstein3-D, and was originally + * written by Id Software, Inc. + * + */ + +#include +#include +#include + +#include "wolf_def.h" + +#include "../loaders/tga.h" +#include "../hq2x.h" +#include "../string/com_string.h" +#include "../filesys/file.h" +#include "../../../common/common_utils.h" +#include "../../../common/arch.h" +#include "../memory/memory.h" + + +extern char gamepal[]; + +#define FILEPOSSIZE 3 + + + + +#define GFXHEADFNAME "VGAHEAD" +#define GFXFNAME "VGAGRAPH" +#define GFXDICTFNAME "VGADICT" + + + +#define FONTWIDTH 256 +#define FONTHEIGHT 128 + + + + +typedef struct +{ + short height; + short location[ 256 ]; + char width[ 256 ]; + +} fontstruct; + + +typedef struct +{ + // 0-255 is a character, > is a pointer to a node + W16 bit0, bit1; + +} huffnode; + +typedef struct +{ + W16 width, height; + +} pictabletype; + +pictabletype *pictable; +huffnode grhuffman[ 255 ]; + + +FILE *grhandle; +SW32 *grstarts; // array of offsets in vgagraph, -1 for sparse + +void *grsegs[ NUMCHUNKS ]; + + + + +/* +----------------------------------------------------------------------------- + Function: GRFILEPOS() -Calculate graphic file position. + + Parameters: chunk -[in] Chunk number to calculate file offset. + + Returns: File offset value or -1 for sparse tile. + + Notes: See 'wl6_name.h' for valid chunk numbers for SOD and WL6. + grstarts must be allocated and initialized before call. + Uses global variable grstarts. + +----------------------------------------------------------------------------- +*/ +PRIVATE SW32 GRFILEPOS( W32 c ) +{ + SW32 value; + W32 offset; + + offset = c * 3; + + value = *(PW32)( ( (PW8)grstarts ) + offset ); + + value &= 0x00ffffffl; + + if( value == 0xffffffl ) + { + value = -1; + } + + return value; +}; + + +/* +----------------------------------------------------------------------------- + Function: CAL_GetGrChunkLength() -Calculate length of compressed graphic + chunk. + + Parameters: chunk -[in] Chunk number to calculate file offset. + + Returns: The length of the compressed graphic chunk. + + Notes: Gets the length of an explicit length chunk (not tiles). + The file pointer is positioned so the compressed data + can be read in next. + +----------------------------------------------------------------------------- +*/ +PRIVATE SW32 CAL_GetGrChunkLength( W32 chunk ) +{ + fseek( grhandle, GRFILEPOS( chunk ) + sizeof( W32 ), SEEK_SET ); + + return ( GRFILEPOS( chunk + 1 ) - GRFILEPOS( chunk ) - 4 ); +} + +/* +----------------------------------------------------------------------------- + Function: CAL_HuffExpand() -Expand compressed data. + + Parameters: source -[in] Pointer to compressed data. + destination -[out] Pointer to hold decompressed data. + length -[in] Length of expanded data. + hufftable -[in] Huffman dictionary data. + + Returns: Nothing. + + Notes: Uses classic Huffman node tree (not optimized). +----------------------------------------------------------------------------- +*/ +PRIVATE void CAL_HuffExpand( const W8 *source, + W8 *destination, + W32 length, + huffnode *hufftable ) +{ + W32 bx; // node pointer + W32 dx; + + W32 ch; // high order of CX + W32 cl; // low order of CX + + const W8 *si; // Source Index + W8 *di; // Destination Index + + bx = 254; // head node is always node 254 + si = source; + di = destination; + + + ch = *si; // load first byte + si++; + cl = 1; + + do + { + if( (ch & cl) & 0xff ) // bit set? + dx = hufftable[ bx ].bit1; // take bit1 path from node + else + dx = hufftable[ bx ].bit0; // take bit0 path from node + + + cl <<= 1; // advance to next bit position + + if( cl & 0x100 ) + { + ch = *si; // load next byte + si++; + cl = 1; // back to first bit + } + + if( (cl & 0x100) == 0 ) + { + if( dx < 256 ) + { + *di = (W8)(dx & 0xff); // write a decompressed byte out + di++; + bx = 254; // back to the head node for next bit + + length--; + } + else + { + bx = dx - 256; // next node = (huffnode *)code + } + } + + } while( length ); + +} + +/* +----------------------------------------------------------------------------- + Function: CAL_SetupGrFile() -Initialize graphic files and arrays. + + Parameters: extension -[in] Pointer to a null-terminated string that + specifies the file extension. + (must be in '.XXX' format). + + Returns: 1 on success, 0 otherwise. + + Notes: + Uses global variables grhandle and pictable. + 1. Open vgadict.XXX, read huffman dictionary data. + 2. Open vgahead.XXX, read data offsets. + 3. Open vgagraph.XXX, read pic and sprite header, expand data. +----------------------------------------------------------------------------- +*/ +PRIVATE W8 CAL_SetupGrFile( const char *extension ) +{ + void *compseg; + FILE *handle; + char filename[ 16 ]; + SW32 chunkcomplen; // chunk compressed length + +// +// load vgadict.ext (huffman dictionary for graphics files) +// + cs_strlcpy( filename, GFXDICTFNAME, sizeof( filename ) ); + cs_strlcat( filename, extension, sizeof( filename ) ); + + if( ( handle = fopen( cs_strupr( filename ), "rb" ) ) == NULL ) + { + if( ( handle = fopen( cs_strlwr( filename ), "rb" ) ) == NULL ) + { + printf( "Could not open file (%s) for read!\n", filename ); + return 0; + } + } + + fread( grhuffman, sizeof( grhuffman ), 1, handle ); + fclose( handle ); + +// +// Open then load the data offsets from vgahead.ext +// + + cs_strlcpy( filename, GFXHEADFNAME, sizeof( filename ) ); + cs_strlcat( filename, extension, sizeof( filename ) ); + + if( (handle = fopen( cs_strupr( filename ), "rb" )) == NULL ) + { + if( (handle = fopen( cs_strlwr( filename ), "rb" )) == NULL ) + { + printf( "Could not open file (%s) for read!\n", filename ); + return 0; + } + } + + grstarts = MM_MALLOC( (NUMCHUNKS+1) * FILEPOSSIZE ); + if( grstarts == NULL ) + { + return 0; + } + + fread( grstarts, sizeof( long ), (NUMCHUNKS+1) * FILEPOSSIZE, handle ); + + fclose( handle ); + +// +// Open the graphics file 'vgagraph.XXX'. +// + + cs_strlcpy( filename, GFXFNAME, sizeof( filename ) ); + cs_strlcat( filename, extension, sizeof( filename ) ); + + if( ( grhandle = fopen( cs_strupr( filename ), "rb" ) ) == NULL ) + { + if( ( grhandle = fopen( cs_strlwr( filename ), "rb" ) ) == NULL ) + { + printf( "Could not open file (%s) for read!\n", filename ); + return 0; + } + } + +// +// load the pic and sprite headers into the arrays. +// + pictable = MM_MALLOC( NUMPICS * sizeof( pictabletype ) ); + if( pictable == NULL ) + { + return 0; + } + + + chunkcomplen = CAL_GetGrChunkLength( STRUCTPIC ); // position file pointer + + compseg = MM_MALLOC( chunkcomplen ); + if( compseg == NULL ) + { + return 0; + } + + fread( compseg, chunkcomplen, 1, grhandle ); + + CAL_HuffExpand( compseg, (PW8)pictable, + NUMPICS * sizeof( pictabletype ), + grhuffman ); + + MM_FREE( compseg ); + + return 1; +} + +/* +----------------------------------------------------------------------------- + Function: CAL_Shutdown() -Shutdown module. + + Parameters: Nothing. + + Returns: Nothing. + + Notes: Frees grstarts, pictable and grsegs data. Closes grhandle file handle. +----------------------------------------------------------------------------- +*/ +PUBLIC void CAL_Shutdown( void ) +{ + W32 i; + + if( grstarts ) + { + MM_FREE( grstarts ); + } + + if( pictable ) + { + MM_FREE( pictable ); + } + + if( grhandle ) + { + fclose( grhandle ); + } + + for( i = 0; i < NUMCHUNKS; ++i ) + { + if( grsegs[ i ] ) + { + MM_FREE( grsegs[ i ] ); + } + } + +} + +/* +----------------------------------------------------------------------------- + Function: CAL_ExpandGrChunk() -Expand compressed graphic chunk. + + Parameters: chunk -[in] Chunk number to expand. + source -[in] Pointer to compressed data. + version -[in] extension version. + 1 -WL6 + 2 -SOD + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE void CAL_ExpandGrChunk( W32 chunk, const W8 *source, W16 version ) +{ + W32 expanded; + W16 offset = 0; + + if( version & SOD_PAK ) + offset = SOD_STARTDIFF; + + if( chunk >= ( STARTTILE8 + offset ) && + chunk < ( STARTEXTERNS + offset ) ) + { + // + // expanded sizes of tile8/16/32 are implicit + // + +#define BLOCK 64 +#define MASKBLOCK 128 + + if( chunk < (STARTTILE8M + offset) ) // tile 8s are all in one chunk! + expanded = BLOCK * NUMTILE8; + else if( chunk < (STARTTILE16 + offset) ) + expanded = MASKBLOCK * NUMTILE8M; + else if( chunk < (STARTTILE16M + offset) ) // all other tiles are one/chunk + expanded = BLOCK << 2; + else if( chunk < (STARTTILE32 + offset) ) + expanded = MASKBLOCK << 2; + else if( chunk < (STARTTILE32M + offset) ) + expanded = BLOCK << 4; + else + expanded = MASKBLOCK << 4; + } + else + { + // + // everything else has an explicit size longword + // + expanded = *(PW32)source; + source += 4; // skip over length + } + +// +// allocate final space and decompress it. +// Sprites need to have shifts made and various other junk. +// + grsegs[ chunk ] = MM_MALLOC( expanded ); + if( grsegs[ chunk ] == NULL ) + { + return; + } + + CAL_HuffExpand( source, grsegs[ chunk ], expanded, grhuffman ); +} + +/* +----------------------------------------------------------------------------- + Function: CA_CacheGrChunk() -Cache graphic chunk. + + Parameters: chunk -[in] Chunk number to cache. + version -[in] extension version. + 1 -WL6 + 2 -SOD + + Returns: Nothing. + + Notes: Makes sure a given chunk is in memory, loading it if needed. +----------------------------------------------------------------------------- +*/ +PRIVATE void CA_CacheGrChunk( W32 chunk, W16 version ) +{ + SW32 pos; + W32 compressed; + void *buffer; + W32 next; + + if( grsegs[ chunk ] ) + { + return; // already in memory + } + + +// +// load the chunk into a buffer +// + pos = GRFILEPOS( chunk ); + if( pos < 0 ) // $FFFFFFFF start is a sparse tile + { + return; + } + + next = chunk + 1; + while( GRFILEPOS( next ) == -1 ) // skip past any sparse tiles + { + next++; + } + + compressed = GRFILEPOS( next ) - pos; + + fseek( grhandle, pos, SEEK_SET ); + + + buffer = MM_MALLOC( compressed ); + if( buffer == NULL ) + { + return; + } + + + fread( buffer, 1, compressed, grhandle ); + + CAL_ExpandGrChunk( chunk, buffer, version ); + + + MM_FREE( buffer ); +} + + + +/* +----------------------------------------------------------------------------- + Function: RGB32toRGB24() -Convert image from 32bits to 24bits. + + Parameters: src -[in] Buffer to convert from. + dest -[in/out] Buffer to convert to. + size -[in] Size of src buffer. + + Returns: Nothing. + + Notes: src and dest can point to the same memory block. +----------------------------------------------------------------------------- +*/ +PUBLIC void RGB32toRGB24( const W8 *src, W8 *dest, size_t size ) +{ + size_t i; + size_t npixels = size >> 2; + + for( i = 0 ; i < npixels ; ++i ) + { + dest[ i * 3 + 0 ] = src[ i * 4 + 0 ]; + dest[ i * 3 + 1 ] = src[ i * 4 + 1 ]; + dest[ i * 3 + 2 ] = src[ i * 4 + 2 ]; + } +} + + + +/* +----------------------------------------------------------------------------- + Function: MergePics() -Merge image inside another image. + + Parameters: src -[in] Source image to copy from. + dest -[in] Destination image to copy to. + width -[in] Width of source image. + height -[in] Height of source image. + bpp -[in] Bytes per pixel of images. + totalwidth -[in] -Total width (in pixels) of destination image. + x_offset -[in] X offset (in pixels) in destination image. + y_offset -[in] Y offset (in pixels) in destination image. + + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE void MergePics( const W8 *src, W8 *dest, W16 width, W16 height, W16 bpp, W16 totalwidth, + W32 x_offset, + W32 y_offset ) +{ + W16 x, y; + W8 *dptr; + + + dptr = dest + (y_offset * totalwidth * bpp) + (x_offset * bpp); + for( y = 0 ; y < height ; ++y ) + { + for( x = 0 ; x < width ; ++x ) + { + dptr[ 0 ] = src[ 0 ]; + dptr[ 1 ] = src[ 1 ]; + + src += bpp; + dptr += bpp; + } + + dptr += (totalwidth * bpp) - width * bpp; + } +} + +PRIVATE void MergeImages( W8 *src, W16 src_bpp, W16 src_totalwidth, W16 src_region_width, W16 src_region_height, W32 src_x_offset, W32 src_y_offset, + W8 *dest, W16 dest_bpp, W16 dest_totalwidth, W16 dest_region_width, W16 dest_region_height, W32 dest_x_offset, W32 dest_y_offset ) +{ + W16 x, y; + W8 *dptr; + W8 *sptr; + + + dptr = dest + (dest_y_offset * dest_totalwidth * dest_bpp) + (dest_x_offset * dest_bpp); + sptr = src + (src_y_offset * src_totalwidth * src_bpp) + (src_x_offset * src_bpp); + for( y = 0 ; y < src_region_height ; ++y ) + { + for( x = 0 ; x < src_region_width ; ++x ) + { + dptr[ 0 ] = sptr[ 0 ]; + dptr[ 1 ] = sptr[ 1 ]; + + sptr += src_bpp; + dptr += dest_bpp; + } + + dptr += (dest_totalwidth * dest_bpp) - dest_region_width * dest_bpp; + sptr += (src_totalwidth * src_bpp) - src_region_width * src_bpp; + } +} + +/* +----------------------------------------------------------------------------- + Function: SavePic() -Save graphic lump in targa image format. + + Parameters: chunk -[in] Chunk number to save. + version -[in] extension version. + 1 -WL6 + 2 -SOD + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE void SavePic( W32 chunknum, W16 version, W8 *buffer, W8 *buffer2 ) +{ + W16 i; + W16 temp; + char filename[32]; + char *fname; + W8 *ptr; + W8 *pic; + W32 picnum; + W16 width, height; + W16 linewidth, plane, sx, sy; + W8 r,g,b; + W16 rgb; + W8 *tpalette = gamepal; + static W16 offset = 0; + + + if( ( (chunknum == WL1_N_BLANKPIC || + chunknum == WL1_NOKEYPIC ) && (version & WL1_PAK) ) ) + { + return; + } + + if( ( (chunknum == N_BLANKPIC || + chunknum == NOKEYPIC ) && (version & WL6_PAK) ) ) + { + return; + } + + if( ( (chunknum == SDM_N_BLANKPIC || + chunknum == SDM_NOKEYPIC ) && (version & SDM_PAK) ) ) + { + return; + } + + if( ( (chunknum == SOD_N_BLANKPIC || + chunknum == SOD_NOKEYPIC ) && (version & SOD_PAK) ) ) + { + return; + } + + // Spear used multiple palettes, so + // pull out the one we need. + if( version & SDM_PAK ) + { + switch( chunknum ) + { + case SDM_TITLE1PIC: + case SDM_TITLE2PIC: + CA_CacheGrChunk( SDM_TITLEPALETTE, version ); + tpalette = grsegs[ SDM_TITLEPALETTE ]; + break; + + default: + tpalette = gamepal; + break; + } + } + + if( version & SOD_PAK ) + { + switch( chunknum ) + { + case SOD_IDGUYS1PIC: + case SOD_IDGUYS2PIC: + CA_CacheGrChunk( SOD_IDGUYSPALETTE, version ); + tpalette = grsegs[ SOD_IDGUYSPALETTE ]; + break; + + case SOD_TITLE1PIC: + case SOD_TITLE2PIC: + CA_CacheGrChunk( SOD_TITLEPALETTE, version ); + tpalette = grsegs[ SOD_TITLEPALETTE ]; + break; + + case SOD_ENDSCREEN11PIC: + CA_CacheGrChunk( SOD_END1PALETTE, version ); + tpalette = grsegs[ SOD_END1PALETTE ]; + break; + + case SOD_ENDSCREEN12PIC: + CA_CacheGrChunk( SOD_END2PALETTE, version ); + tpalette = grsegs[ SOD_END2PALETTE ]; + break; + + case SOD_ENDSCREEN3PIC: + CA_CacheGrChunk( SOD_END3PALETTE, version ); + tpalette = grsegs[ SOD_END3PALETTE ]; + break; + + case SOD_ENDSCREEN4PIC: + CA_CacheGrChunk( SOD_END4PALETTE, version ); + tpalette = grsegs[ SOD_END4PALETTE ]; + break; + + case SOD_ENDSCREEN5PIC: + CA_CacheGrChunk( SOD_END5PALETTE, version ); + tpalette = grsegs[ SOD_END5PALETTE ]; + break; + + case SOD_ENDSCREEN6PIC: + CA_CacheGrChunk( SOD_END6PALETTE, version ); + tpalette = grsegs[ SOD_END6PALETTE ]; + break; + + case SOD_ENDSCREEN7PIC: + CA_CacheGrChunk( SOD_END7PALETTE, version ); + tpalette = grsegs[ SOD_END7PALETTE ]; + break; + + case SOD_ENDSCREEN8PIC: + CA_CacheGrChunk( SOD_END8PALETTE, version ); + tpalette = grsegs[ SOD_END8PALETTE ]; + break; + + case SOD_ENDSCREEN9PIC: + CA_CacheGrChunk( SOD_END9PALETTE, version ); + tpalette = grsegs[ SOD_END9PALETTE ]; + break; + + default: + tpalette = gamepal; + break; + + } // End switch chunknum + + } // End if version & SOD_PAK + +STATUSBARHACK: + + picnum = chunknum - STARTPICS; + + pic = grsegs[ chunknum ]; + width = pictable[ picnum ].width; + height= pictable[ picnum ].height; + + + + linewidth = width / 4; + for( i = 0; i < ( width * height ); ++i, pic++ ) + { + plane = i / ( (width * height) / 4 ); + sx = ( ( i % ( linewidth ) ) * 4 ) + plane; + sy = ( ( i / linewidth ) % height ); + + ptr = buffer + ( (sx*2) + (sy * width)*2); + + + temp = (*pic) * 3; + r = tpalette[ temp ] >> 1; + g = tpalette[ temp+1 ]; + b = tpalette[ temp+2 ] >> 1; + + rgb = (b << 11) | (g << 5) | r; + ptr[ 0 ] = rgb & 0xff; + ptr[ 1 ] = rgb >> 8; + } + + +// +// Hacks to reassemble images +// + if( version & WL1_PAK ) + { + if( chunknum == WL1_STATUSBARPIC ) + { + memcpy( buffer2, buffer, width * height * 2 ); // Save Status bar pic + CA_CacheGrChunk( WL1_NOKEYPIC, version ); // cache NOKEYPIC + chunknum = WL1_NOKEYPIC; + + goto STATUSBARHACK; + } + else if( chunknum == WL1_H_BOTTOMINFOPIC ) + { + MergeImages( buffer, 2, 304, 91, 16, 24, 4, + buffer2, 2, 91, 91, 16, 0, 0 ); + MergeImages( buffer, 2, 304, 91, 16, 192, 4, + buffer2, 2, 91, 91, 16, 0, 16 ); + + + hq2x_32( buffer2, buffer, 91, 16, (91*2)*4 ); + RGB32toRGB24( buffer, buffer, 182*32*4 ); + + cs_snprintf( filename, sizeof( filename ), "%s/%s.tga", LGFXDIR, "PLAQUE_PAGE" ); + + WriteTGA( filename, 24, 182, 32, buffer, 0, 0 ); + + hq2x_32( buffer2 + (16 * 91 * 2), buffer, 91, 16, (91*2)*4 ); + RGB32toRGB24( buffer, buffer, 182*32*4 ); + + cs_snprintf( filename, sizeof( filename ), "%s/%s.tga", LGFXDIR, "PLAQUE_BLANK" ); + + WriteTGA( filename, 24, 182, 32, buffer, 0, 1 ); + + return; + } + else if( chunknum == WL1_NOKEYPIC ) + { + chunknum = WL1_STATUSBARPIC; + MergePics( buffer, buffer2, width, height, 2, 320, 240, 4 ); + MergePics( buffer, buffer2, width, height, 2, 320, 240, 4+height ); + + memcpy( buffer, buffer2, 320 * 40 * 2 ); + width = 320; + height = 40; + } + else if( chunknum == WL1_L_COLONPIC ) + { + memset( buffer2, 0, 256*64*2 ); + + MergePics( buffer, buffer2, width, height, 2, 256, 160, 16 ); + + return; + } + else if( chunknum == WL1_L_EXPOINTPIC ) + { + MergePics( buffer, buffer2, width, height, 2, 256, 16, 0 ); + + return; + } + else if( chunknum == WL1_L_APOSTROPHEPIC ) + { + W16 i; + + MergePics( buffer, buffer2, width, height, 2, 256, 112, 0 ); + + memcpy( buffer, buffer2, 256 * 64 * 2 ); + + + for( i = 0 ; i < 256 * 64 * 2 ; i += 2 ) + { + if( buffer[ i ] == 0 && buffer[ i + 1 ] == 0 ) + { + buffer[ i + 1 ] = 66; + } + } + + offset = 0; + width = 256; + height = 64; + } + else if( chunknum == WL1_L_PERCENTPIC ) + { + offset = 16; // this is for L_APIC... + + MergePics( buffer, buffer2, width, height, 2, 256, 80, 0 ); + + return; + } + else if( chunknum >= WL1_L_NUM0PIC && chunknum <= WL1_L_NUM9PIC ) + { + MergePics( buffer, buffer2, width, height, 2, 256, offset, 16 ); + + offset += width; + + return; + } + else if( chunknum >= WL1_N_0PIC && chunknum < WL1_N_9PIC ) + { + MergePics( buffer, buffer2, width, height, 2, 90, offset, 0 ); + + offset += width + 1; + + return; + } + else if( chunknum == WL1_N_9PIC ) + { + W32 i; + + MergePics( buffer, buffer2, width, height, 2, 90, offset, 0 ); + + memcpy( buffer, buffer2, 90 * height * 2 ); + + for( i = 0 ; i < 90 * 16 * 2 ; i += 2 ) + { + if( ! (i % 9) && i != 0 ) + { + buffer[ i - 2 ] = 0; + buffer[ i - 1 ] = 160; + } + } + + width = 90; + offset = 0; + } + else if( chunknum >= WL1_L_APIC && chunknum <= WL1_L_ZPIC ) + { + static W32 yoffset = 32; + + MergePics( buffer, buffer2, width, height, 2, 256, offset, yoffset ); + + offset += width; + + if( offset >= 256 ) + { + offset = 0; + yoffset += 16; + } + + return; + } + else if( chunknum == WL1_FACE5CPIC ) + { + // hmmm... Why is this one messed up? + + MergeImages( buffer, 2, 24, 18, height-2, 8, 2, + buffer2, 2, 24, 18, height-2, 0, 0 ); + MergeImages( buffer, 2, 24, 8, height-3, 0, 3, + buffer2, 2, 24, 8, height-2, 16, 0 ); + + MergeImages( buffer, 2, 24, 18, 2, 9, 0, + buffer2, 2, 24, 18, 2, 0, height-2 ); + MergeImages( buffer, 2, 24, 7, 3, 1, 0, + buffer2, 2, 24, 7, 3, 16, height-3 ); + + memcpy( buffer, buffer2, 24 * 32 * 2 ); + + + buffer[ (30 * 24 * 2) + (3 * 2) ] = 73; + buffer[ (30 * 24 * 2) + (3 * 2) + 1 ] = 74; + + buffer[ (31 * 24 * 2) + (3 * 2) ] = 73; + buffer[ (31 * 24 * 2) + (3 * 2) + 1 ] = 74; + + + + buffer[ (29 * 24 * 2) + (23 * 2) ] = 73; + buffer[ (29 * 24 * 2) + (23 * 2) + 1 ] = 74; + + buffer[ (30 * 24 * 2) + (23 * 2) ] = 73; + buffer[ (30 * 24 * 2) + (23 * 2) + 1 ] = 74; + + buffer[ (31 * 24 * 2) + (23 * 2) ] = 73; + buffer[ (31 * 24 * 2) + (23 * 2) + 1 ] = 74; + + + + buffer[ (29 * 24 * 2) + (19 * 2) ] = 255; + buffer[ (29 * 24 * 2) + (19 * 2) + 1 ] = 100; + + buffer[ (30 * 24 * 2) + (19 * 2) ] = 63; + buffer[ (30 * 24 * 2) + (19 * 2) + 1 ] = 117; + + buffer[ (31 * 24 * 2) + (19 * 2) ] = 52; + buffer[ (31 * 24 * 2) + (19 * 2) + 1 ] = 59; + + + + buffer[ (30 * 24 * 2) + (7 * 2) ] = 19; + buffer[ (30 * 24 * 2) + (7 * 2) + 1 ] = 59; + + buffer[ (31 * 24 * 2) + (7 * 2) ] = 19; + buffer[ (31 * 24 * 2) + (7 * 2) + 1 ] = 59; + + + + buffer[ (30 * 24 * 2) + (11 * 2) ] = 91; + buffer[ (30 * 24 * 2) + (11 * 2) + 1 ] = 84; + + buffer[ (31 * 24 * 2) + (11 * 2) ] = 190; + buffer[ (31 * 24 * 2) + (11 * 2) + 1 ] = 92; + + + buffer[ (30 * 24 * 2) + (15 * 2) ] = 249; + buffer[ (30 * 24 * 2) + (15 * 2) + 1 ] = 75; + + buffer[ (31 * 24 * 2) + (15 * 2) ] = 190; + buffer[ (31 * 24 * 2) + (15 * 2) + 1 ] = 92; + } + } + else if( version & WL6_PAK ) + { + if( chunknum == STATUSBARPIC ) + { + memcpy( buffer2, buffer, width * height * 2 ); // Save Status bar pic + CA_CacheGrChunk( NOKEYPIC, version ); // cache NOKEYPIC + chunknum = NOKEYPIC; + + goto STATUSBARHACK; + } + else if( chunknum == H_BOTTOMINFOPIC ) + { + MergeImages( buffer, 2, 304, 91, 16, 24, 4, + buffer2, 2, 91, 91, 16, 0, 0 ); + MergeImages( buffer, 2, 304, 91, 16, 192, 4, + buffer2, 2, 91, 91, 16, 0, 16 ); + + + hq2x_32( buffer2, buffer, 91, 16, (91*2)*4 ); + RGB32toRGB24( buffer, buffer, 182*32*4 ); + + cs_snprintf( filename, sizeof( filename ), "%s/%s.tga", LGFXDIR, "PLAQUE_PAGE" ); + + WriteTGA( filename, 24, 182, 32, buffer, 0, 0 ); + + hq2x_32( buffer2 + (16 * 91 * 2), buffer, 91, 16, (91*2)*4 ); + RGB32toRGB24( buffer, buffer, 182*32*4 ); + + cs_snprintf( filename, sizeof( filename ), "%s/%s.tga", LGFXDIR, "PLAQUE_BLANK" ); + + WriteTGA( filename, 24, 182, 32, buffer, 0, 1 ); + + return; + } + else if( chunknum == NOKEYPIC ) + { + chunknum = STATUSBARPIC; + MergePics( buffer, buffer2, width, height, 2, 320, 240, 4 ); + MergePics( buffer, buffer2, width, height, 2, 320, 240, 4+height ); + + memcpy( buffer, buffer2, 320 * 40 * 2 ); + width = 320; + height = 40; + } + else if( chunknum == L_COLONPIC ) + { + memset( buffer2, 0, 256*64*2 ); + + MergePics( buffer, buffer2, width, height, 2, 256, 160, 16 ); + + return; + } + else if( chunknum == L_EXPOINTPIC ) + { + MergePics( buffer, buffer2, width, height, 2, 256, 16, 0 ); + + return; + } + else if( chunknum == L_APOSTROPHEPIC ) + { + W16 i; + + MergePics( buffer, buffer2, width, height, 2, 256, 112, 0 ); + + memcpy( buffer, buffer2, 256 * 64 * 2 ); + + + for( i = 0 ; i < 256 * 64 * 2 ; i += 2 ) + { + if( buffer[ i ] == 0 && buffer[ i + 1 ] == 0 ) + { + buffer[ i + 1 ] = 66; + } + } + + offset = 0; + width = 256; + height = 64; + } + else if( chunknum == L_PERCENTPIC ) + { + offset = 16; // this is for L_APIC... + + MergePics( buffer, buffer2, width, height, 2, 256, 80, 0 ); + + return; + } + else if( chunknum >= L_NUM0PIC && chunknum <= L_NUM9PIC ) + { + MergePics( buffer, buffer2, width, height, 2, 256, offset, 16 ); + + offset += width; + + return; + } + else if( chunknum >= N_0PIC && chunknum < N_9PIC ) + { + MergePics( buffer, buffer2, width, height, 2, 90, offset, 0 ); + + offset += width + 1; + + return; + } + else if( chunknum == N_9PIC ) + { + W32 i; + + MergePics( buffer, buffer2, width, height, 2, 90, offset, 0 ); + + memcpy( buffer, buffer2, 90 * height * 2 ); + + for( i = 0 ; i < 90 * 16 * 2 ; i += 2 ) + { + if( ! (i % 9) && i != 0 ) + { + buffer[ i - 2 ] = 0; + buffer[ i - 1 ] = 160; + } + } + + width = 90; + offset = 0; + } + else if( chunknum >= L_APIC && chunknum <= L_ZPIC ) + { + static W32 yoffset = 32; + + MergePics( buffer, buffer2, width, height, 2, 256, offset, yoffset ); + + offset += width; + + if( offset >= 256 ) + { + offset = 0; + yoffset += 16; + } + + + return; + } + } + else if( version & SDM_PAK ) + { + if( chunknum == SDM_STATUSBARPIC ) + { + memcpy( buffer2, buffer, width * height * 2 ); // Save Status bar pic + CA_CacheGrChunk( SDM_NOKEYPIC, version ); // cache SOD_NOKEYPIC + chunknum = SDM_NOKEYPIC; + + goto STATUSBARHACK; + } + else if( chunknum == SDM_NOKEYPIC ) + { + chunknum = SDM_STATUSBARPIC; + MergePics( buffer, buffer2, width, height, 2, 320, 240, 4 ); + MergePics( buffer, buffer2, width, height, 2, 320, 240, 4+height ); + + memcpy( buffer, buffer2, 320 * 40 * 2 ); + width = 320; + height = 40; + } + else if( chunknum == SDM_L_COLONPIC ) + { + memset( buffer2, 0, 256*64*2 ); + + MergePics( buffer, buffer2, width, height, 2, 256, 160, 16 ); + + return; + } + else if( chunknum == SDM_L_EXPOINTPIC ) + { + MergePics( buffer, buffer2, width, height, 2, 256, 16, 0 ); + + return; + } + else if( chunknum == SDM_L_APOSTROPHEPIC ) + { + W16 i; + + MergePics( buffer, buffer2, width, height, 2, 256, 112, 0 ); + + memcpy( buffer, buffer2, 256 * 64 * 2 ); + + + for( i = 0 ; i < 256 * 64 * 2 ; i += 2 ) + { + if( buffer[ i ] == 0 && buffer[ i + 1 ] == 0 ) + { + buffer[ i + 1 ] = 66; + } + } + + offset = 0; + width = 256; + height = 64; + } + else if( chunknum == SDM_L_PERCENTPIC ) + { + offset = 16; // this is for L_APIC... + + MergePics( buffer, buffer2, width, height, 2, 256, 80, 0 ); + + return; + } + else if( chunknum >= SDM_L_NUM0PIC && chunknum <= SDM_L_NUM9PIC ) + { + MergePics( buffer, buffer2, width, height, 2, 256, offset, 16 ); + + offset += width; + + return; + } + else if( chunknum >= SDM_N_0PIC && chunknum < SDM_N_9PIC ) + { + MergePics( buffer, buffer2, width, height, 2, 90, offset, 0 ); + + offset += width + 1; + + return; + } + else if( chunknum == SDM_N_9PIC ) + { + W32 i; + + MergePics( buffer, buffer2, width, height, 2, 90, offset, 0 ); + + memcpy( buffer, buffer2, 90 * height * 2 ); + + for( i = 0 ; i < 90 * 16 * 2 ; i += 2 ) + { + if( ! (i % 9) && i != 0 ) + { + buffer[ i - 2 ] = 0; + buffer[ i - 1 ] = 160; + } + } + + width = 90; + offset = 0; + } + else if( chunknum >= SDM_L_APIC && chunknum <= SDM_L_ZPIC ) + { + static W32 yoffset = 32; + + MergePics( buffer, buffer2, width, height, 2, 256, offset, yoffset ); + + offset += width; + + if( offset >= 256 ) + { + offset = 0; + yoffset += 16; + } + + return; + } + else if( chunknum == SDM_TITLE1PIC ) + { + memcpy( buffer2+offset, buffer, (width*height*2) ); + offset += width*height*2; + + return; + } + else if( chunknum == SDM_TITLE2PIC ) + { + memcpy( buffer2+offset, buffer, (width*height*2) ); + memcpy( buffer, buffer2, 320*200*2 ); + height = 200; + offset = 0; + } + } + else if( version & SOD_PAK ) + { + if( chunknum == SOD_STATUSBARPIC ) + { + memcpy( buffer2, buffer, width * height * 2 ); // Save Status bar pic + CA_CacheGrChunk( SOD_NOKEYPIC, version ); // cache SOD_NOKEYPIC + chunknum = SOD_NOKEYPIC; + + goto STATUSBARHACK; + } + else if( chunknum == SOD_NOKEYPIC ) + { + chunknum = SOD_STATUSBARPIC; + MergePics( buffer, buffer2, width, height, 2, 320, 240, 4 ); + MergePics( buffer, buffer2, width, height, 2, 320, 240, 4+height ); + + memcpy( buffer, buffer2, 320 * 40 * 2 ); + width = 320; + height = 40; + } + else if( chunknum == SOD_L_COLONPIC ) + { + memset( buffer2, 0, 256*64*2 ); + + MergePics( buffer, buffer2, width, height, 2, 256, 160, 16 ); + + return; + } + else if( chunknum == SOD_L_EXPOINTPIC ) + { + MergePics( buffer, buffer2, width, height, 2, 256, 16, 0 ); + + return; + } + else if( chunknum == SOD_L_APOSTROPHEPIC ) + { + W16 i; + + MergePics( buffer, buffer2, width, height, 2, 256, 112, 0 ); + + memcpy( buffer, buffer2, 256 * 64 * 2 ); + + + for( i = 0 ; i < 256 * 64 * 2 ; i += 2 ) + { + if( buffer[ i ] == 0 && buffer[ i + 1 ] == 0 ) + { + buffer[ i + 1 ] = 66; + } + } + + offset = 0; + width = 256; + height = 64; + } + else if( chunknum == SOD_L_PERCENTPIC ) + { + offset = 16; // this is for L_APIC... + + MergePics( buffer, buffer2, width, height, 2, 256, 80, 0 ); + + return; + } + else if( chunknum >= SOD_L_NUM0PIC && chunknum <= SOD_L_NUM9PIC ) + { + MergePics( buffer, buffer2, width, height, 2, 256, offset, 16 ); + + offset += width; + + return; + } + else if( chunknum >= SOD_N_0PIC && chunknum < SOD_N_9PIC ) + { + MergePics( buffer, buffer2, width, height, 2, 90, offset, 0 ); + + offset += width + 1; + + return; + } + else if( chunknum == SOD_N_9PIC ) + { + W32 i; + + MergePics( buffer, buffer2, width, height, 2, 90, offset, 0 ); + + memcpy( buffer, buffer2, 90 * height * 2 ); + + for( i = 0 ; i < 90 * 16 * 2 ; i += 2 ) + { + if( ! (i % 9) && i != 0 ) + { + buffer[ i - 2 ] = 0; + buffer[ i - 1 ] = 160; + } + } + + width = 90; + offset = 0; + } + else if( chunknum >= SOD_L_APIC && chunknum <= SOD_L_ZPIC ) + { + static W32 yoffset = 32; + + MergePics( buffer, buffer2, width, height, 2, 256, offset, yoffset ); + + offset += width; + + if( offset >= 256 ) + { + offset = 0; + yoffset += 16; + } + + return; + } + else if( chunknum == SOD_IDGUYS1PIC ) + { + memcpy( buffer2+offset, buffer, (width*height*2) ); + offset += width*height*2; + + return; + } + else if( chunknum == SOD_IDGUYS2PIC ) + { + memcpy( buffer2+offset, buffer, (width*height*2) ); + memcpy( buffer, buffer2, 320*200*2 ); + height = 200; + offset = 0; + } + else if( chunknum == SOD_TITLE1PIC ) + { + memcpy( buffer2+offset, buffer, (width*height*2) ); + offset += width*height*2; + + return; + } + else if( chunknum == SOD_TITLE2PIC ) + { + memcpy( buffer2+offset, buffer, (width*height*2) ); + memcpy( buffer, buffer2, 320*200*2 ); + height = 200; + offset = 0; + } + } +// +// End of images hacks +// + + + if( version & WL1_PAK ) + { + fname = GetLumpFileName_WL1( chunknum ); + } + else if( version & WL6_PAK ) + { + fname = GetLumpFileName_WL6( chunknum ); + } + else if( version & SDM_PAK ) + { + fname = GetLumpFileName_SDM( chunknum ); + } + else if( version & SOD_PAK ) + { + fname = GetLumpFileName_SOD( chunknum ); + } + else + { + printf( "Unknown file extension!\n" ); + + return; + } + + if( fname == NULL ) + { + printf( "File name not found for item: (%d)\n", chunknum ); + + return; + } + + cs_snprintf( filename, sizeof( filename ), "%s/%s.tga", LGFXDIR, fname ); + + + hq2x_32( buffer, buffer2, width, height, (width*2)*4 ); + + + // Get rid of alpha channel + RGB32toRGB24( buffer2, buffer2, (width*2)*(height*2)*4 ); + + + WriteTGA( filename, 24, (width*2), (height*2), buffer2, 0, 1 ); + + return; +} + + + + +/* +----------------------------------------------------------------------------- + Function: Fontline() -Extract and save font. + + Parameters: fontnumber -[in] font to save. + version -[in] extension version. + 1 -WL6 + 2 -SOD + + Returns: Nothing. + + Notes: Font must be cached in grsegs[] before calling. +----------------------------------------------------------------------------- +*/ +PRIVATE void Fontline( W32 fontnumber, W16 version ) +{ + fontstruct *font; + W16 i; + W16 x, y; + W16 px, py; + W8 *buffer; + W8 *source; + W8 *ptr; + char filename[ 256 ]; + + + font = (fontstruct *)grsegs[ fontnumber ]; + + + buffer = MM_MALLOC( FONTWIDTH * FONTHEIGHT * 4 ); + if( buffer == NULL ) + return; + + ptr = buffer; + for( x = 0; x < FONTWIDTH; ++x ) + { + for( y = 0; y < FONTHEIGHT; ++y, ptr += 4 ) + { + ptr[ 0 ] = ptr[ 1 ] = ptr[ 2 ] = 0xFF; + ptr[ 3 ] = 0x00; + } + } + + px = py = 0; + for( i = 0; i < 256; ++i ) + { + if( ! font->width[ i ] ) + continue; + + if( px + font->width[ i ] > FONTWIDTH-1 ) + { + py += font->height; + px = 0; + } + + source = ((PW8) font) + font->location[ i ]; + + ptr = buffer + (py * FONTWIDTH + px) * 4; + for( y = 0; y < font->height; ++y, ptr += FONTWIDTH * 4 ) + { + for( x = 0; x < font->width[ i ]; ++x ) + { + if( *source++ ) + { + ptr[ x * 4 + 3 ] = 0xFF; + } + } + } + + px += 16; + + } // end for i = 0; i < 256; ++i + + + cs_snprintf( filename, sizeof( filename ), "%s/font%d.tga", LGFXDIR, fontnumber ); + + WriteTGA( filename, 32, FONTWIDTH, FONTHEIGHT, buffer, 0, 1 ); + + MM_FREE( buffer ); + +} + + +PRIVATE void DecodeText( W16 version ) +{ + char *text; + int artnum; + int endextern; + int i; + int length; + FILE *fhandle; + int limit; + + + limit = 6; + if( version & SOD_PAK ) + { + endextern = 168; + fhandle = fopen( "sod.txt", "wb" ); + if( ! fhandle ) + { + return; + } + + limit = 1; + } + else if( version & WL6_PAK ) + { + endextern = 143; + fhandle = fopen( "wl6.txt", "wb" ); + if( ! fhandle ) + { + return; + } + } + else + { + return; + } + + for( i = 0 ; i < limit ; ++i ) + { + artnum = endextern + i; + CA_CacheGrChunk( artnum, version ); + text = (char *)grsegs[ artnum ]; + + length = strlen( text ); + + fwrite( text, sizeof( W8 ), length, fhandle ); + fprintf( fhandle, "\n\n" ); + + MM_FREE( grsegs[ artnum ] ); + } + + fclose( fhandle ); +} + +/* +----------------------------------------------------------------------------- + Function: LumpExtractor() -Extract Lump gfx from Wolf3D and SOD data files. + + Parameters: fextension -[in] String holding file extension + (must be in '.XXX' format). + limit -[in] max + version -[in] extension version. + 1 -WL6 + 2 -SOD + + Returns: Nothing. + + Notes: + +----------------------------------------------------------------------------- +*/ +PUBLIC _boolean LumpExtractor( const char *fextension, W32 limit, W16 version ) +{ + W32 i; + W8 *buffer, *buffer2; + + + if( ! fextension || ! *fextension ) + { + printf( "Invalid file extension passed into LumpExtractor!\n" ); + + return false; + } + +// +// Setup +// + + if( 0 == FS_Mkdir( LGFXDIR ) ) + { + printf( "[%s] Could not create directory (%s)!\n", "wolf_gfx.c", LGFXDIR ); + + return false; + } + + + if( ! CAL_SetupGrFile( fextension ) ) + { + CAL_Shutdown(); + + return false; + } + +// +// Allocate buffers +// + + buffer = MM_MALLOC( 320 * 416 * 2 ); + if( buffer == NULL ) + { + CAL_Shutdown(); + + return false; + } + + buffer2 = MM_MALLOC( 640 * 400 * 4 ); + if( buffer2 == NULL ) + { + MM_FREE( buffer ); + CAL_Shutdown(); + + return false; + } + +// +// Decode GFX data +// + + printf( "Decoding GFX Data...\n" ); + +// (void)DecodeText( version ); + + + for( i = STARTFONT; i < STARTPICS; ++i ) + { + CA_CacheGrChunk( i, version ); + Fontline( i, version ); + } + + + for( i = STARTPICS; i < limit+1; ++i ) + { + CA_CacheGrChunk( i, version ); + SavePic( i, version, buffer, buffer2 ); + } + + + +// +// Shutdown +// + + MM_FREE( buffer2 ); + MM_FREE( buffer ); + + CAL_Shutdown(); + + return true; +} + diff --git a/wolf3d/wolfextractor/wolf/wolf_map.c b/wolf3d/wolfextractor/wolf/wolf_map.c new file mode 100644 index 0000000..ca99c80 --- /dev/null +++ b/wolf3d/wolfextractor/wolf/wolf_map.c @@ -0,0 +1,692 @@ +/* + + Copyright (C) 2004-2005 Michael Liebscher + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * wolf_map.c: Decode Wolfenstein 3-D Map data. + * + * Author: Michael Liebscher + * Date: 2004 + * + * Acknowledgement: + * This code was derived from Wolfenstein 3-D, and was originally + * written by Id Software, Inc. + * + */ + +#include +#include +#include + +#include "wolf_def.h" + +#include "../string/com_string.h" +#include "../loaders/tga.h" +#include "../filesys/file.h" +#include "../../../common/arch.h" +#include "../memory/memory.h" +#include "../../../common/common_utils.h" + + +#define MAPHEADNAME "MAPHEAD" +#define MAPNAME "GAMEMAPS" + + + +PRIVATE FILE *maphandle; + + +PRIVATE W32 headeroffsets[ 100 ]; +PRIVATE W32 TotalMaps; +PRIVATE W16 RLEWtag; + +PRIVATE W16 gameversion; + + +PRIVATE const W32 vgaCeilingWL6[] = +{ + 0x1d1d,0x1d1d,0x1d1d,0x1d1d,0x1d1d,0x1d1d,0x1d1d,0x1d1d,0x1d1d,0xbfbf, + 0x4e4e,0x4e4e,0x4e4e,0x1d1d,0x8d8d,0x4e4e,0x1d1d,0x2d2d,0x1d1d,0x8d8d, + 0x1d1d,0x1d1d,0x1d1d,0x1d1d,0x1d1d,0x2d2d,0xdddd,0x1d1d,0x1d1d,0x9898, + + 0x1d1d,0x9d9d,0x2d2d,0xdddd,0xdddd,0x9d9d,0x2d2d,0x4d4d,0x1d1d,0xdddd, + 0x7d7d,0x1d1d,0x2d2d,0x2d2d,0xdddd,0xd7d7,0x1d1d,0x1d1d,0x1d1d,0x2d2d, + 0x1d1d,0x1d1d,0x1d1d,0x1d1d,0xdddd,0xdddd,0x7d7d,0xdddd,0xdddd,0xdddd +}; + +PRIVATE const W32 vgaCeilingSOD[] = +{ + 0x6f6f,0x4f4f,0x1d1d,0xdede,0xdfdf,0x2e2e,0x7f7f,0x9e9e,0xaeae,0x7f7f, + 0x1d1d,0xdede,0xdfdf,0xdede,0xdfdf,0xdede,0xe1e1,0xdcdc,0x2e2e,0x1d1d,0xdcdc +}; + +PRIVATE W32 WL6_songs[] = +{ +// +// Episode One +// + GETTHEM_MUS, + SEARCHN_MUS, + POW_MUS, + SUSPENSE_MUS, + GETTHEM_MUS, + SEARCHN_MUS, + POW_MUS, + SUSPENSE_MUS, + + WARMARCH_MUS, // Boss level + CORNER_MUS, // Secret level + +// +// Episode Two +// + NAZI_OMI_MUS, + PREGNANT_MUS, + GOINGAFT_MUS, + HEADACHE_MUS, + NAZI_OMI_MUS, + PREGNANT_MUS, + HEADACHE_MUS, + GOINGAFT_MUS, + + WARMARCH_MUS, // Boss level + DUNGEON_MUS, // Secret level + +// +// Episode Three +// + INTROCW3_MUS, + NAZI_RAP_MUS, + TWELFTH_MUS, + ZEROHOUR_MUS, + INTROCW3_MUS, + NAZI_RAP_MUS, + TWELFTH_MUS, + ZEROHOUR_MUS, + + ULTIMATE_MUS, // Boss level + PACMAN_MUS, // Secret level + +// +// Episode Four +// + GETTHEM_MUS, + SEARCHN_MUS, + POW_MUS, + SUSPENSE_MUS, + GETTHEM_MUS, + SEARCHN_MUS, + POW_MUS, + SUSPENSE_MUS, + + WARMARCH_MUS, // Boss level + CORNER_MUS, // Secret level + +// +// Episode Five +// + NAZI_OMI_MUS, + PREGNANT_MUS, + GOINGAFT_MUS, + HEADACHE_MUS, + NAZI_OMI_MUS, + PREGNANT_MUS, + HEADACHE_MUS, + GOINGAFT_MUS, + + WARMARCH_MUS, // Boss level + DUNGEON_MUS, // Secret level + +// +// Episode Six +// + INTROCW3_MUS, + NAZI_RAP_MUS, + TWELFTH_MUS, + ZEROHOUR_MUS, + INTROCW3_MUS, + NAZI_RAP_MUS, + TWELFTH_MUS, + ZEROHOUR_MUS, + + ULTIMATE_MUS, // Boss level + FUNKYOU_MUS // Secret level +}; + + +PRIVATE W32 SOD_songs[] = +{ + SOD_XTIPTOE_MUS, + SOD_XFUNKIE_MUS, + SOD_XDEATH_MUS, + SOD_XGETYOU_MUS, // DON'T KNOW + SOD_ULTIMATE_MUS, // Trans Grosse + + SOD_DUNGEON_MUS, + SOD_GOINGAFT_MUS, + SOD_POW_MUS, + SOD_TWELFTH_MUS, + SOD_ULTIMATE_MUS, // Barnacle Wilhelm BOSS + + SOD_NAZI_OMI_MUS, + SOD_GETTHEM_MUS, + SOD_SUSPENSE_MUS, + SOD_SEARCHN_MUS, + SOD_ZEROHOUR_MUS, + SOD_ULTIMATE_MUS, // Super Mutant BOSS + + SOD_XPUTIT_MUS, + SOD_ULTIMATE_MUS, // Death Knight BOSS + + SOD_XJAZNAZI_MUS, // Secret level + SOD_XFUNKIE_MUS, // Secret level (DON'T KNOW) + + SOD_XEVIL_MUS // Angel of Death BOSS + +}; + + + +typedef struct +{ + float time; + char timestr[ 6 ]; + +} times; + + +PRIVATE times parTimesWL6[] = +{ + // + // Episode One Par Times + // + { 1.5, "01:30" }, + { 2, "02:00" }, + { 2, "02:00" }, + { 3.5, "03:30" }, + { 3, "03:00" }, + { 3, "03:00" }, + { 2.5, "02:30" }, + { 2.5, "02:30" }, + { 0, "??:??" }, // Boss level + { 0, "??:??" }, // Secret level + + // + // Episode Two Par Times + // + { 1.5, "01:30" }, + { 3.5, "03:30" }, + { 3, "03:00" }, + { 2, "02:00" }, + { 4, "04:00" }, + { 6, "06:00" }, + { 1, "01:00" }, + { 3, "03:00" }, + { 0, "??:??" }, + { 0, "??:??" }, + + // + // Episode Three Par Times + // + { 1.5, "01:30" }, + { 1.5, "01:30" }, + { 2.5, "02:30" }, + { 2.5, "02:30" }, + { 3.5, "03:30" }, + { 2.5, "02:30" }, + { 2, "02:00" }, + { 6, "06:00" }, + { 0, "??:??" }, + { 0, "??:??" }, + + // + // Episode Four Par Times + // + { 2, "02:00" }, + { 2, "02:00" }, + { 1.5, "01:30" }, + { 1, "01:00" }, + { 4.5, "04:30" }, + { 3.5, "03:30" }, + { 2, "02:00" }, + { 4.5, "04:30" }, + { 0, "??:??" }, + { 0, "??:??" }, + + // + // Episode Five Par Times + // + { 2.5, "02:30" }, + { 1.5, "01:30" }, + { 2.5, "02:30" }, + { 2.5, "02:30" }, + { 4, "04:00" }, + { 3, "03:00" }, + { 4.5, "04:30" }, + { 3.5, "03:30" }, + { 0, "??:??" }, + { 0, "??:??" }, + + // + // Episode Six Par Times + // + { 6.5, "06:30" }, + { 4, "04:00" }, + { 4.5, "04:30" }, + { 6, "06:00" }, + { 5, "05:00" }, + { 5.5, "05:30" }, + { 5.5, "05:30" }, + { 8.5, "08:30" }, + { 0, "??:??" }, + { 0, "??:??" } +}; + +PRIVATE times parTimesSOD[] = +{ + // + // SPEAR OF DESTINY TIMES + // + { 1.5, "01:30" }, + { 3.5, "03:30" }, + { 2.75,"02:45" }, + { 3.5, "03:30" }, + { 0, "??:??" }, // Boss 1 + { 4.5, "04:30" }, + { 3.25,"03:15" }, + { 2.75,"02:45" }, + { 4.75,"04:45" }, + { 0, "??:??" }, // Boss 2 + { 6.5, "06:30" }, + { 4.5, "04:30" }, + { 2.75,"02:45" }, + { 4.5, "04:30" }, + { 6, "06:00" }, + { 0, "??:??" }, // Boss 3 + { 6, "06:00" }, + { 0, "??:??" }, // Boss 4 + { 0, "??:??" }, // Secret level 1 + { 0, "??:??" }, // Secret level 2 + +}; + + +/* +----------------------------------------------------------------------------- + Function: CAL_SetupMapFile -Setup map files for decoding. + + Parameters: extension -[in] file extension for map data files. + + Returns: Non-zero on success, zero otherwise. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE W8 CAL_SetupMapFile( const char *extension ) +{ + FILE *handle; + SW32 length; + char fname[ 13 ]; + + +// +// load maphead.xxx (offsets and tileinfo for map file) +// + cs_strlcpy( fname, MAPHEADNAME, sizeof( fname ) ); + cs_strlcat( fname, extension, sizeof( fname ) ); + + handle = fopen( cs_strupr( fname ), "rb" ); + if( handle == NULL ) + { + handle = fopen( cs_strlwr( fname ), "rb" ); + if( handle == NULL ) + { + printf( "Could not open file (%s) for read!\n", fname ); + return 0; + } + } + + length = FS_FileLength( handle ); + + + fread( &RLEWtag, 2, 1, handle ); + + for( TotalMaps = 0 ; TotalMaps < length ; ++TotalMaps ) + { + fread( &headeroffsets[ TotalMaps ], 4, 1, handle ); + if( ! headeroffsets[ TotalMaps ] ) + { + break; + } + } + + + fclose( handle ); + + + + cs_strlcpy( fname, MAPNAME, sizeof( fname ) ); + cs_strlcat( fname, extension, sizeof( fname ) ); + + maphandle = fopen( cs_strupr( fname ), "rb"); + if( NULL == maphandle ) + { + maphandle = fopen( cs_strlwr( fname ), "rb"); + if( NULL == maphandle ) + { + return 0; + } + } + + + return 1; +} + +/* +----------------------------------------------------------------------------- + Function: CAL_ShutdownMapFile -Shutdown map file. + + Parameters: Nothing. + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE void CAL_ShutdownMapFile( void ) +{ + if( maphandle ) + { + fclose( maphandle ); + } +} + + + +/* +----------------------------------------------------------------------------- + Function: CA_CacheMap -Cache and save map data. + + Parameters: + ChunkOffset -[in] Chunk offset. + Chunklength -[in] Length of chunk. + filename -[in] File name to save map as. + index -[in] File name index number. + + Returns: Non-zero on success, otherwise zero. + + Notes: +----------------------------------------------------------------------------- +*/ +PRIVATE W8 CA_CacheMap( W32 ChunkOffset, W32 Chunklength, const char *filename, W32 index ) +{ + W32 offset[ 3 ]; + W32 offsetin[ 3 ]; + W32 temp; + W16 length[ 3 ]; + W8 sig[ 5 ]; + W16 w, h; + W8 *data; + W32 ceiling; + W32 floor; + FILE *fout; + float ftime; + char *stime; + char name[ 32 ]; + char musicName[ 64 ]; + extern char gamepal[]; + SW32 jmp; + + if( gameversion == SOD_PAK ) + { + temp = (vgaCeilingSOD[ index ] & 0xff) * 3; + ceiling = ( (gamepal[ temp ] << 2) << 16 ) | ( (gamepal[ temp+1 ] << 2 ) << 8) | (gamepal[ temp+2 ]<<2); + + temp = 0x19 * 3; + floor = ( (gamepal[ temp ] << 2) << 16 ) | ( (gamepal[ temp+1 ] << 2 ) << 8) | (gamepal[ temp+2 ]<<2); + + ftime = parTimesSOD[ index ].time; + stime = parTimesSOD[ index ].timestr; + + cs_snprintf( musicName, sizeof( musicName ), "music/%s.ogg", GetMusicFileName_SOD( SOD_songs[ index ] ) ); + } + else + { + temp = (vgaCeilingWL6[ index ] & 0xff) * 3; + ceiling = ( (gamepal[ temp ] << 2) << 16 ) | ( (gamepal[ temp+1 ] << 2 ) << 8) | (gamepal[ temp+2 ]<<2); + + temp = 0x19 * 3; + floor = ( (gamepal[ temp ] << 2) << 16 ) | ( (gamepal[ temp+1 ] << 2 ) << 8) | (gamepal[ temp+2 ]<<2); + + ftime = parTimesWL6[ index ].time; + stime = parTimesWL6[ index ].timestr; + + cs_snprintf( musicName, sizeof( musicName ), "music/%s.ogg", GetMusicFileName_WL6( WL6_songs[ index ] ) ); + } + + fout = fopen( filename, "wb"); + if( NULL == fout ) + { + return 0; + } + + + + fseek( maphandle, ChunkOffset, SEEK_SET ); + + + fread( &offsetin, sizeof( W32 ), 3, maphandle ); + fread( &length, sizeof( W16 ), 3, maphandle ); + + fread( &w, sizeof( W16 ), 1, maphandle ); + fread( &h, sizeof( W16 ), 1, maphandle ); + + + + fread( name, sizeof( W8 ), 16, maphandle ); + fread( sig, sizeof( W8 ), 4, maphandle ); + +// +// Output header +// + + // Map file header signature + fwrite( sig, sizeof( W8 ), 4, fout ); + + // RLE Word tag + fwrite( &RLEWtag, sizeof( W16 ), 1, fout ); + + // Max Width + fwrite( &w, sizeof( W16 ), 1, fout ); + + // Max Height + fwrite( &h, sizeof( W16 ), 1, fout ); + + // Ceiling Colour + fwrite( &ceiling, sizeof( W32 ), 1, fout ); + + // Floor Colour + fwrite( &floor, sizeof( W32 ), 1, fout ); + + // Length of layers + temp = length[ 0 ]; + fwrite( &temp, sizeof( W16 ), 1, fout ); // Length One + temp = length[ 1 ]; + fwrite( &temp, sizeof( W16 ), 1, fout ); // Length Two + temp = length[ 2 ]; + fwrite( &temp, sizeof( W16 ), 1, fout ); // Length Three + + jmp = ftell( fout ); + + temp = 0; + fwrite( &temp, sizeof( W32 ), 1, fout ); // Offset One + fwrite( &temp, sizeof( W32 ), 1, fout ); // Offset Two + fwrite( &temp, sizeof( W32 ), 1, fout ); // Offset Three + + + // Map name length + temp = strlen( name ); + fwrite( &temp, sizeof( W16 ), 1, fout ); + + // Music name length + temp = strlen( musicName ); + fwrite( &temp, sizeof( W16 ), 1, fout ); + + // Par time Float + fwrite( &ftime, sizeof( float ), 1, fout ); + + // Par time string + fwrite( stime, sizeof( W8 ), 5 , fout ); + + // Map name + fwrite( name, sizeof( W8 ), strlen( name ), fout ); + + // Music file name + fwrite( musicName, sizeof( W8 ), strlen( musicName ), fout ); + + + + + + data = MM_MALLOC( length[ 0 ] ); + if( data == NULL ) + { + return 0; + } + + offset[ 0 ] = ftell( fout ); + + fseek( maphandle, offsetin[ 0 ], SEEK_SET ); + fread( data, 1, length[ 0 ], maphandle ); + + fwrite( data, 1, length[ 0 ], fout ); + + + data = MM_REALLOC( data, length[ 1 ] ); + if( data == NULL ) + { + return 0; + } + + offset[ 1 ] = ftell( fout ); + + fseek( maphandle, offsetin[ 1 ], SEEK_SET ); + fread( data, 1, length[ 1 ], maphandle ); + + fwrite( data, 1, length[ 1 ], fout ); + + + + + data = MM_REALLOC( data, length[ 2 ] ); + if( data == NULL ) + { + return 0; + } + + offset[ 2 ] = ftell( fout ); + + fseek( maphandle, offsetin[ 2 ], SEEK_SET ); + fread( data, 1, length[ 2 ], maphandle ); + + fwrite( data, 1, length[ 2 ], fout ); + + MM_FREE( data ); + + + fseek( fout, jmp, SEEK_SET ); + + temp = offset[ 0 ]; + fwrite( &temp, sizeof( W32 ), 1, fout ); // Offset One + + temp = offset[ 1 ]; + fwrite( &temp, sizeof( W32 ), 1, fout ); // Offset Two + + temp = offset[ 2 ]; + fwrite( &temp, sizeof( W32 ), 1, fout ); // Offset Three + + + fclose( fout ); + + + return 1; +} + + +/* +----------------------------------------------------------------------------- + Function: MapRipper -Re-encode map data. + + Parameters: extension -[in] file extension for map data files. + + Returns: Nothing. + + Notes: +----------------------------------------------------------------------------- +*/ +PUBLIC _boolean MapRipper( const char *fextension, W16 version ) +{ + W32 i; + char fname[ 32 ]; + + gameversion = version; + +// +// Setup +// + + if( 0 == FS_Mkdir( MAPDIR ) ) + { + printf( "[%s] Could not create directory (%s)!\n", "wolf_map.c", MAPDIR ); + + return false; + } + + + if( ! CAL_SetupMapFile( fextension ) ) + { + CAL_ShutdownMapFile(); + + return false; + } + +// +// Decode Map data +// + + printf( "Decoding Map Data...\n" ); + + for( i = 0 ; i < TotalMaps ; ++i ) + { + cs_snprintf( fname, sizeof( fname ), "%s/%c%.2d.map", MAPDIR, TOLOWER( fextension[ 1 ] ), i ); + + CA_CacheMap( headeroffsets[ i ], + headeroffsets[ i + 1 ] - headeroffsets[ i ], + fname, i ); + + } + +// +// Shutdown +// + + CAL_ShutdownMapFile(); + + return true; +} diff --git a/wolf3d/wolfextractor/wolf/wolf_pal.c b/wolf3d/wolfextractor/wolf/wolf_pal.c new file mode 100644 index 0000000..d13361e --- /dev/null +++ b/wolf3d/wolfextractor/wolf/wolf_pal.c @@ -0,0 +1,263 @@ + +char gamepal[ 768 ] = { + 0, 0, 0, + 0, 0, 42, + 0, 42, 0, + 0, 42, 42, + 42, 0, 0, + 42, 0, 42, + 42, 21, 0, + 42, 42, 42, + 21, 21, 21, + 21, 21, 63, + 21, 63, 21, + 21, 63, 63, + 63, 21, 21, + 63, 21, 63, + 63, 63, 21, + 63, 63, 63, + 59, 59, 59, + 55, 55, 55, + 52, 52, 52, + 48, 48, 48, + 45, 45, 45, + 42, 42, 42, + 38, 38, 38, + 35, 35, 35, + 31, 31, 31, + 28, 28, 28, + 25, 25, 25, + 21, 21, 21, + 18, 18, 18, + 14, 14, 14, + 11, 11, 11, + 8, 8, 8, + 63, 0, 0, + 59, 0, 0, + 56, 0, 0, + 53, 0, 0, + 50, 0, 0, + 47, 0, 0, + 44, 0, 0, + 41, 0, 0, + 38, 0, 0, + 34, 0, 0, + 31, 0, 0, + 28, 0, 0, + 25, 0, 0, + 22, 0, 0, + 19, 0, 0, + 16, 0, 0, + 63, 54, 54, + 63, 46, 46, + 63, 39, 39, + 63, 31, 31, + 63, 23, 23, + 63, 16, 16, + 63, 8, 8, + 63, 0, 0, + 63, 42, 23, + 63, 38, 16, + 63, 34, 8, + 63, 30, 0, + 57, 27, 0, + 51, 24, 0, + 45, 21, 0, + 39, 19, 0, + 63, 63, 54, + 63, 63, 46, + 63, 63, 39, + 63, 63, 31, + 63, 62, 23, + 63, 61, 16, + 63, 61, 8, + 63, 61, 0, + 57, 54, 0, + 51, 49, 0, + 45, 43, 0, + 39, 39, 0, + 33, 33, 0, + 28, 27, 0, + 22, 21, 0, + 16, 16, 0, + 52, 63, 23, + 49, 63, 16, + 45, 63, 8, + 40, 63, 0, + 36, 57, 0, + 32, 51, 0, + 29, 45, 0, + 24, 39, 0, + 54, 63, 54, + 47, 63, 46, + 39, 63, 39, + 32, 63, 31, + 24, 63, 23, + 16, 63, 16, + 8, 63, 8, + 0, 63, 0, + 0, 63, 0, + 0, 59, 0, + 0, 56, 0, + 0, 53, 0, + 1, 50, 0, + 1, 47, 0, + 1, 44, 0, + 1, 41, 0, + 1, 38, 0, + 1, 34, 0, + 1, 31, 0, + 1, 28, 0, + 1, 25, 0, + 1, 22, 0, + 1, 19, 0, + 1, 16, 0, + 54, 63, 63, + 46, 63, 63, + 39, 63, 63, + 31, 63, 62, + 23, 63, 63, + 16, 63, 63, + 8, 63, 63, + 0, 63, 63, + 0, 57, 57, + 0, 51, 51, + 0, 45, 45, + 0, 39, 39, + 0, 33, 33, + 0, 28, 28, + 0, 22, 22, + 0, 16, 16, + 23, 47, 63, + 16, 44, 63, + 8, 42, 63, + 0, 39, 63, + 0, 35, 57, + 0, 31, 51, + 0, 27, 45, + 0, 23, 39, + 54, 54, 63, + 46, 47, 63, + 39, 39, 63, + 31, 32, 63, + 23, 24, 63, + 16, 16, 63, + 8, 9, 63, + 0, 1, 63, + 0, 0, 63, + 0, 0, 59, + 0, 0, 56, + 0, 0, 53, + 0, 0, 50, + 0, 0, 47, + 0, 0, 44, + 0, 0, 41, + 0, 0, 38, + 0, 0, 34, + 0, 0, 31, + 0, 0, 28, + 0, 0, 25, + 0, 0, 22, + 0, 0, 19, + 0, 0, 16, + 10, 10, 10, + 63, 56, 13, + 63, 53, 9, + 63, 51, 6, + 63, 48, 2, + 63, 45, 0, + +// 45, 8, 63, //hmmmm +// 42, 0, 63, //hmmmm + 0, 14, 0, + 0, 10, 0, + + 38, 0, 57, + 32, 0, 51, + 29, 0, 45, + 24, 0, 39, + 20, 0, 33, + 17, 0, 28, + 13, 0, 22, + 10, 0, 16, + 63, 54, 63, + 63, 46, 63, + 63, 39, 63, + 63, 31, 63, + 63, 23, 63, + 63, 16, 63, + 63, 8, 63, + 63, 0, 63, + 56, 0, 57, + 50, 0, 51, + 45, 0, 45, + 39, 0, 39, + 33, 0, 33, + 27, 0, 28, + 22, 0, 22, + 16, 0, 16, + 63, 58, 55, + 63, 56, 52, + 63, 54, 49, + 63, 53, 47, + 63, 51, 44, + 63, 49, 41, + 63, 47, 39, + 63, 46, 36, + 63, 44, 32, + 63, 41, 28, + 63, 39, 24, + 60, 37, 23, + 58, 35, 22, + 55, 34, 21, + 52, 32, 20, + 50, 31, 19, + 47, 30, 18, + 45, 28, 17, + 42, 26, 16, + 40, 25, 15, + 39, 24, 14, + 36, 23, 13, + 34, 22, 12, + 32, 20, 11, + 29, 19, 10, + 27, 18, 9, + 23, 16, 8, + 21, 15, 7, + 18, 14, 6, + 16, 12, 6, + 14, 11, 5, + 10, 8, 3, + 24, 0, 25, + 0, 25, 25, + 0, 24, 24, + 0, 0, 7, + 0, 0, 11, + 12, 9, 4, + 18, 0, 18, + 20, 0, 20, + 0, 0, 13, + 7, 7, 7, + 19, 19, 19, + 23, 23, 23, + 16, 16, 16, + 12, 12, 12, + 13, 13, 13, + 54, 61, 61, + 46, 58, 58, + 39, 55, 55, + 29, 50, 50, + 18, 48, 48, + 8, 45, 45, + 8, 44, 44, + 0, 41, 41, + 0, 38, 38, + 0, 35, 35, + 0, 33, 33, + 0, 31, 31, + 0, 30, 30, + 0, 29, 29, + 0, 28, 28, + 0, 27, 27, + 38, 0, 34 +}; diff --git a/wolf3d/wolfextractor/wolf/wolf_pm.c b/wolf3d/wolfextractor/wolf/wolf_pm.c new file mode 100644 index 0000000..5a8d356 --- /dev/null +++ b/wolf3d/wolfextractor/wolf/wolf_pm.c @@ -0,0 +1,943 @@ +/* + + Copyright (C) 2004-2005 Michael Liebscher + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * wolf_pm.c: Decode Wolfenstein3-D Page data. + * + * Author: Michael Liebscher + * + * Acknowledgement: + * This code was derived from Wolfenstein 3-D, and was originally + * written by Id Software, Inc. + * + */ + +#include +#include +#include + +#include "wolf_def.h" + +#include "../../../common/arch.h" +#include "../../../common/common_utils.h" +#include "../loaders/tga.h" +#include "../hq2x.h" +#include "../loaders/wav.h" +#include "../filesys/file.h" +#include "../string/com_string.h" +#include "../memory/memory.h" + + +extern char gamepal[]; + +#define PAGEFNAME "VSWAP" + + + + + +#define SAMPLERATE 7000 // In Hz + + +typedef struct +{ + W32 offset; // Offset of chunk into file + W16 length; // Length of the chunk + +} PageList_t; + +typedef struct +{ + W16 leftpix, rightpix; + W16 dataofs[ 64 ]; + // table data after dataofs[ rightpix - leftpix + 1 ] + +} t_compshape; + + +PRIVATE PageList_t *PMPages; + +PRIVATE FILE *PageFile = NULL; + +PRIVATE W16 PMNumBlocks; +PRIVATE W16 PMSpriteStart, PMSoundStart; + + + +/* +----------------------------------------------------------------------------- + Function: CAL_GetGrChunkLength() -Opens the page file and sets up + the page info. + + Parameters: extension -[in] Pointer to a null-terminated string that + specifies the file extension. + (must be in '.XXX' format) + + Returns: 1 on success, otherwise 0. + + Notes: + +----------------------------------------------------------------------------- +*/ +PRIVATE W8 PML_OpenPageFile( const char *extension ) +{ + W32 i; + W32 size; + void *buf; + char filename[ 16 ]; + W32 *offsetptr; + W16 *lengthptr; + PageList_t *page; + + if( ! extension || ! *extension ) + { + printf( "Invalid file extension passed to PML_OpenPageFile()\n" ); + return 0; + } + + cs_strlcpy( filename, PAGEFNAME, sizeof( filename ) ); + cs_strlcat( filename, extension, sizeof( filename ) ); + + PageFile = fopen( cs_strupr( filename ), "rb" ); + if( PageFile == NULL ) + { + PageFile = fopen( cs_strlwr( filename ), "rb" ); + if( PageFile == NULL ) + { + printf( "Could not open file (%s) for read!\n", filename ); + return 0; + } + } + + // Read in header variables + fread( &PMNumBlocks, sizeof( PMNumBlocks ), 1, PageFile ); + fread( &PMSpriteStart, sizeof( PMSpriteStart ), 1, PageFile ); + fread( &PMSoundStart, sizeof( PMSoundStart ), 1, PageFile ); + + + // Allocate and clear the page list + PMPages = (PageList_t *) MM_MALLOC( sizeof( PageList_t ) * PMNumBlocks ); + if( PMPages == NULL ) + { + return 0; + } + + memset( PMPages, 0, sizeof( PageList_t ) * PMNumBlocks ); + + // Read in the chunk offsets + size = sizeof( W32 ) * PMNumBlocks; + + buf = MM_MALLOC( size ); + if( buf == NULL ) + { + return 0; + } + + if( fread( buf, 1, size, PageFile ) == 0 ) + { + printf( "PML_OpenPageFile: Length read failed\n" ); + } + offsetptr = (PW32) buf; + for( i = 0, page = PMPages; i < PMNumBlocks; i++, page++ ) + { + page->offset = *offsetptr++; + } + MM_FREE( buf ); + + // Read in the chunk lengths + size = sizeof( W16 ) * PMNumBlocks; + + buf = MM_MALLOC( size ); + if( buf == NULL ) + { + return 0; + } + + if( fread( buf, 1, size, PageFile ) == 0 ) + { + printf( "PML_OpenPageFile: Length read failed\n" ); + } + + lengthptr = (PW16)buf; + for( i = 0, page = PMPages; i < PMNumBlocks; ++i, page++ ) + { + page->length = *lengthptr++; + } + + MM_FREE( buf ); + + return 1; +} + +/* +----------------------------------------------------------------------------- + Function: PML_ReadFromFile() -Reads in data from Page file. + + Parameters: buf -[out] Storage location for data. + offset -[in] Number of bytes from beginning of file. + length -[in] Maximum number of items to be read. + + Returns: Nothing. + + Notes: + +----------------------------------------------------------------------------- +*/ +PRIVATE void PML_ReadFromFile( W8 *buf, SW32 offset, W16 length ) +{ + if( ! buf ) + { + printf( "[PML_ReadFromFile]: NULL pointer\n" ); + return; + } + + if( ! offset ) + { + printf( "[PML_ReadFromFile]: Zero offset\n" ); + return; + } + + if( fseek( PageFile, offset, SEEK_SET ) ) + { + printf( "[PML_ReadFromFile]: Seek failed\n" ); + return; + } + + if( ! fread( buf, 1, length, PageFile ) ) + { + printf( "[PML_ReadFromFile]: Read failed\n" ); + return; + } +} + +/* +----------------------------------------------------------------------------- + Function: PML_LoadPage() -Reads in data from Page file. + + Parameters: buf -[out] Storage location for data. + offset -[in] Number of bytes from beginning of file. + clength -[in] Maximum number of items to be read. + + Returns: Nothing. + + Notes: + +----------------------------------------------------------------------------- +*/ +PRIVATE void *PML_LoadPage( W32 pagenum, W16 *clength ) +{ + W8 *addr; + PageList_t *page; + + page = &PMPages[ pagenum ]; + if( page->length == 0 ) + { + return NULL; + } + + *clength = page->length; + + addr = MM_MALLOC( page->length ); + if( addr == NULL ) + { + return NULL; + } + + PML_ReadFromFile( addr, page->offset, page->length ); + + return addr; +} + +void OutlineImage( W8 *rgba, int width, int height ) { + W8 *data_p; + W8 *copy_p; + W8 *copy = (W8 *)_alloca( width * height * 4 ); + int x, y; + + memcpy( copy, rgba, width * height * 4 ); + data_p = rgba; + copy_p = copy; + + for ( y = 0 ; y < height ; y++ ) { + for ( x = 0 ; x < width ; x++, data_p+=4, copy_p+=4 ) { + if ( data_p[3] != 0 ) { + continue; + } + if ( x < width-1 && copy_p[7] != 0 ) { + *(int *)data_p = ((int *)copy_p)[1]; + } else if ( x > 0 && copy_p[-1] != 0 ) { + *(int *)data_p = ((int *)copy_p)[-1]; + } else if ( y < height-1 && copy_p[width*4+3] != 0 ) { + *(int *)data_p = ((int *)copy_p)[width]; + } else if ( y > 0 && copy_p[-width*4+3] != 0 ) { + *(int *)data_p = ((int *)copy_p)[-width]; + } + data_p[3] = 1; + } + } +} + +typedef struct { + int hasAlpha; + int srcWidth; + int srcHeight; + int uploadWidth; + int uploadHeight; + + // track the outlines of up to two boxes of non-transparent pixels. + // The reason for two boxes is that the common lights have something + // at the top and something at the bottom, with nothing inbetween. + // These are inclusive bounds of the rows / columns with non-0 alpha + int numBounds; + int bounds[2][2][2]; +} picHeader_t; + +int RowClear( W8 *rgba, int w, int h, int y ) { + int x; + for ( x = 0 ; x < w ; x++ ) { + if ( rgba[(y*w+x)*4+3] != 0 ) { + return 0; + } + } + return 1; +} + +void Write5551( const char *tgaName, int w, int h, W8 *rgba, int hasAlpha ) { + unsigned short *s = _alloca( w*h*4 ); + FILE *f; + picHeader_t *header = (picHeader_t *)s; + unsigned short *s_p; + int i; + int shorts; + W8 *tempMip; + W8 *rgba_p; + int b, x, y, c; + char newName[1024]; + char *ext; + + memset( header, 0, sizeof( *header ) ); + header->hasAlpha = hasAlpha; + header->srcWidth = w; + header->srcHeight = h; + header->uploadWidth = w; + header->uploadHeight = h; + + if ( !hasAlpha ) { + // convert from 24 bit to 32 bit + W8 *newPic = _alloca( w * h * 4 ); + for ( i = 0 ; i < w*h ; i++ ) { + newPic[i*4+0] = rgba[i*3+0]; + newPic[i*4+1] = rgba[i*3+1]; + newPic[i*4+2] = rgba[i*3+2]; + newPic[i*4+3] = 255; + } + rgba = newPic; + } + + // find the bounding boxes for more efficient drawing + header->numBounds = 1; + for ( y = 0 ; y < h ; y++ ) { + if ( !RowClear( rgba, w, h, y ) ) { + // this row is needed + header->bounds[0][0][1] = y; + break; + } + } + for ( y = h-1 ; y >= 0 ; y-- ) { + if ( !RowClear( rgba, w, h, y ) ) { + // this row is needed + header->bounds[0][1][1] = y; + break; + } + } + + // if the middle row is clear, make two boxes + // We could make a better test, but this catches the ones we care about... + if ( header->bounds[0][0][1] < h/2 && header->bounds[0][1][1] > h / 2 && RowClear( rgba, w, h, h/2 ) ) { + header->numBounds = 2; + header->bounds[1][1][1] = header->bounds[0][1][1]; + + for ( y = h/2-1 ; y >= 0 ; y-- ) { + if ( !RowClear( rgba, w, h, y ) ) { + header->bounds[0][1][1] = y; + break; + } + } + for ( y = h/2+1 ; y < h ; y++ ) { + if ( !RowClear( rgba, w, h, y ) ) { + header->bounds[1][0][1] = y; + break; + } + } + } + + for ( b = 0 ; b < header->numBounds ; b++ ) { + for ( x = 0 ; x < w ; x++ ) { + for ( y = header->bounds[b][0][1] ; y <= header->bounds[b][1][1] ; y++ ) { + if ( rgba[(y*w+x)*4+3] != 0 ) { + // this column is needed + header->bounds[b][0][0] = x; + break; + } + } + if ( y <= header->bounds[b][1][1] ) { + break; + } + } + for ( x = w-1 ; x >= 0 ; x-- ) { + for ( y = header->bounds[b][0][1] ; y <= header->bounds[b][1][1] ; y++ ) { + if ( rgba[(y*w+x)*4+3] != 0 ) { + // this column is needed + header->bounds[b][1][0] = x; + break; + } + } + if ( y <= header->bounds[b][1][1] ) { + break; + } + } + } + + s_p = (unsigned short *)(header+1); + + while ( 1 ) { + rgba_p = rgba; + + // convert to 5551 + for ( i = 0 ; i < w*h ; i++, rgba_p+=4 ) { + int r = rgba_p[0]; + int g = rgba_p[1]; + int b = rgba_p[2]; + int a = rgba_p[3]; + + *s_p++ = ((r>>3)<<11) | ((g>>3)<<6) | ((b>>3)<<1) | (a>>7); + } + + if ( w == 1 && h == 1 ) { + break; + } + // mip map + w >>= 1; + if ( w == 0 ) { + w = 1; + } + h >>= 1; + if ( h == 0 ) { + h = 1; + } + tempMip = _alloca( w * h * 4 ); + for ( y = 0 ; y < h ; y++ ) { + for ( x = 0 ; x < w ; x++ ) { + for ( c = 0 ; c < 4 ; c++ ) { + tempMip[(y*w+x)*4+c] = ( + rgba[((y*2+0)*w*2+(x*2+0))*4+c] + + rgba[((y*2+0)*w*2+(x*2+1))*4+c] + + rgba[((y*2+1)*w*2+(x*2+0))*4+c] + + rgba[((y*2+1)*w*2+(x*2+1))*4+c] ) >> 2; + } + } + } + rgba = tempMip; + } + shorts = s_p - s; + + // byte swap +#if 0 + for ( i = 0 ; i < shorts ; i++ ) { + int temp = ((W8 *)s)[i*2+0]; + ((W8 *)s)[i*2+0] = ((W8 *)s)[i*2+1]; + ((W8 *)s)[i*2+1] = temp; + } +#endif + + // write + strcpy( newName, tgaName ); + ext = strstr( newName, ".tga" ); + strcpy( ext, ".5551" ); + f = fopen( newName, "wb" ); + if( f == NULL ) { + printf( "Could not open file (%s) for write!\n", newName ); + return; + } + fwrite( s, 2, shorts, f ); + fclose( f ); +} + +#include +void UpdateSingleSprite( const char *srcTGA, const char *destTGA ) { + W8 *rgba; + int width, height; + int i; + + // HACK HACK HACK just to convert the single health pack sprite without the + // trademarked "red cross" + + LoadTGA( srcTGA, &rgba, &width, &height ); + assert( rgba ); + assert( width == 64 && height == 64 ); + + // JDC: outline the image to avoid dark halos with filtering + for ( i = 0 ; i < 8 ; i++ ) { + OutlineImage( rgba, 64, 64 ); + } + for ( i = 0 ; i < 64*64 ; i++ ) { + if ( rgba[i*4+3] == 1 ) { + rgba[i*4+3] = 0; + } + } + WriteTGA( destTGA, 32, 64, 64, rgba, 0, 1 ); + Write5551( destTGA, 64, 64, rgba, 1 ); +} + +/* +----------------------------------------------------------------------------- + Function: PML_LoadPage() -Save image data from page file. + + Parameters: nPage -[in] Page number to save. + filename -[in] Pointer to string with filename. + buffer -[in] Allocated memory buffer to hold image data. + buffer2 -[in] Allocated memory buffer to hold hq2x data. + + Returns: Non-zero on success, otherwise zero. + + Notes: + +----------------------------------------------------------------------------- +*/ +PRIVATE W8 PML_SaveGFXPage( W32 nPage, const char *filename, + W8 *buffer, W8 *buffer2, _boolean iswall, W32 GunFlash ) +{ + W16 x, y; + W8 *data; + W8 *ptr; + W16 temp; + W8 r,g,b; + W16 clength; // Chunk length + + data = (PW8)PML_LoadPage( nPage, &clength ); + if( data == NULL ) + { + return 0; + } + + if( nPage < PMSpriteStart ) + { + // simple 64x64 image + W8 *rgb = (W8 *)_alloca( 64*64*3 ); + for( x = 0; x < 64; ++x ) + { + for( y = 0; y < 64; ++y ) + { + temp = ( data[ (x<<6)+y ] ) * 3; + + // gamepal is in 6 bit color + r = gamepal[ temp ]; + g = gamepal[ temp+1 ]; + b = gamepal[ temp+2 ]; + + ptr = rgb + ( ( (y << 6) + x ) * 3 ); + ptr[ 0 ] = ( r << 2 ) | ( r >> 4 ); + ptr[ 1 ] = ( g << 2 ) | ( g >> 4 ); + ptr[ 2 ] = ( b << 2 ) | ( b >> 4 ); + } + } + WriteTGA( filename, 24, 64, 64, rgb, 0, 1 ); + Write5551( filename, 64, 64, rgb, 0 ); + } + else if( nPage >= PMSpriteStart && nPage < PMSoundStart ) + { + W16 *cmdptr; + short *linecmds; + t_compshape *shape; + int x, y; + W8 *rgba = (W8 *)_alloca( 64*64*4 ); + int i; + + // all transparent at the beginning + memset( rgba, 0, 64*64*4 ); + + // draw the spans into the buffer + shape = (t_compshape *)data; + cmdptr = shape->dataofs; + for( x = shape->leftpix; x <= shape->rightpix; ++x ) + { + linecmds = (short *)( data + *cmdptr++ ); + for( ; *linecmds; linecmds += 3 ) + { + i = linecmds[ 2 ] / 2 + linecmds[ 1 ]; + for( y = linecmds[ 2 ] / 2; y < linecmds[ 0 ] / 2; ++y, ++i ) + { + temp = ( data[ i ] ) * 3; + + r = gamepal[ temp ]; + g = gamepal[ temp+1 ]; + b = gamepal[ temp+2 ]; + + ptr = rgba + ( (y * 64 + x) * 4 ); + ptr[ 0 ] = ( r << 2 ) | ( r >> 4 ); + ptr[ 1 ] = ( g << 2 ) | ( g >> 4 ); + ptr[ 2 ] = ( b << 2 ) | ( b >> 4 ); + ptr[ 3 ] = 255; + } + } + } + + // JDC: outline the image to avoid dark halos with filtering + for ( i = 0 ; i < 8 ; i++ ) { + OutlineImage( rgba, 64, 64 ); + } + for ( i = 0 ; i < 64*64 ; i++ ) { + if ( rgba[i*4+3] == 1 ) { + rgba[i*4+3] = 0; + } + } + WriteTGA( filename, 32, 64, 64, rgba, 0, 1 ); + Write5551( filename, 64, 64, rgba, 1 ); + } + else + { + MM_FREE( data ); + printf( "Out of bounds page number passed into PML_SavePage()!\n" ); + return 0; + } + + + MM_FREE( data ); + + return 1; +} + +/* +----------------------------------------------------------------------------- + Function: PML_SaveSoundPage() -Save sound data from Page file. + + Parameters: nPage -[in] Page number to save. + filename -[in] Pointer to string with filename. + buffer -[in] Allocated memory buffer to hold sound data. + size -[in] Size of allocated memory buffer. + + Returns: Non-zero on success, otherwise zero. + + Notes: + +----------------------------------------------------------------------------- +*/ +PRIVATE W8 PML_SaveSoundPage( W32 nPage, char *filename, + W8 *buffer, + W32 size ) +{ + static W16 totallength = 0; + W8 *data; + W16 clength; // Chunk length + + if( nPage < PMSoundStart || nPage > PMNumBlocks ) + { + printf( "Out of bounds page number passed into PML_SaveSound()!\n" ); + return 1; + } + + data = (PW8) PML_LoadPage( nPage, &clength ); + if( data == NULL ) + { + return 1; + } + + if( totallength > size ) + { + printf( "[wolf_pmc] Buffer not large enough!\n" ); + return 2; + } + + memcpy( buffer + totallength, data, clength ); + + totallength += clength; + if( clength < 4096 ) + { + write_wav( filename, buffer, totallength, 1, SAMPLERATE, 1 ); + totallength = 0; + } + + MM_FREE( data ); + + return 0; +} + +/* +----------------------------------------------------------------------------- + Function: PML_Shutdown() -Shutdown page cache. + + Parameters: Nothing. + + Returns: Nothing. + + Notes: + +----------------------------------------------------------------------------- +*/ +PRIVATE void PML_Shutdown() +{ + if( PageFile ) + { + fclose( PageFile ); + PageFile = NULL; + } + + if( PMPages ) + { + MM_FREE( PMPages ); + } +} + + +/* +----------------------------------------------------------------------------- + Function: PExtractor() -Interface to page manager. + + Parameters: extension -[in] Ponter to string with file extenion of data + files. + + Returns: Nothing. + + Notes: + +----------------------------------------------------------------------------- +*/ +PUBLIC _boolean PExtractor( const char *extension, W16 version ) +{ + W32 i, j; + char filename[ 256 ]; + W8 *buffer, *buffer2; + W32 Flash; + + +// +// Setup +// + + if( 0 == FS_Mkdir( GFXWALLDIR ) ) + { + printf( "[%s] Could not create directory (%s)!\n", "PExtractor", GFXWALLDIR ); + + return false; + } + + if( version == SOD_PAK || version == SDM_PAK ) + { + if( 0 == FS_Mkdir( SODGFXSPRITEDIR ) ) + { + printf( "[%s] Could not create directory (%s)!\n", "PExtractor", GFXSPRITEDIR ); + + return false; + } + + if( 0 == FS_Mkdir( SODSFXDIR ) ) + { + printf( "[%s] Could not create directory (%s)!\n", "PExtractor", SODSFXDIR ); + + return false; + } + } + else + { + if( 0 == FS_Mkdir( GFXSPRITEDIR ) ) + { + printf( "[%s] Could not create directory (%s)!\n", "PExtractor", GFXSPRITEDIR ); + + return false; + } + + if( 0 == FS_Mkdir( SFXDIR ) ) + { + printf( "[%s] Could not create directory (%s)!\n", "PExtractor", SFXDIR ); + + return false; + } + } + + + if( ! PML_OpenPageFile( extension ) ) + { + PML_Shutdown(); + + return false; + } + +// +// Allocate buffers +// + + buffer = MM_MALLOC( 64 * 64 * 2 ); + if( buffer == NULL ) + { + PML_Shutdown(); + + return false; + } + + buffer2 = MM_MALLOC( 128 * 128 * 4 ); + if( buffer2 == NULL ) + { + MM_FREE( buffer ); + PML_Shutdown(); + + return false; + } + +// +// Decode Page data +// + + printf( "Decoding Page Data...\n" ); + + for( i = 0, j = 0; i < PMSpriteStart; ++i, ++j ) + { + // Hacks + if( version == WL6_PAK || version == WL1_PAK ) + { + if( 98 == j ) + { + j = 126; + } + } + + cs_snprintf( filename, sizeof( filename ), "%s/%.3d.tga", GFXWALLDIR, j ); + + PML_SaveGFXPage( i, filename, buffer, buffer2, 1, 0 ); + } + + for( i = PMSpriteStart, j = 0; i < PMSoundStart; ++i, ++j ) + { + // Hacks + if( version == WL1_PAK ) + { + if( j == 50 ) + { + j = 54; + } + + if( j == 191 ) + { + j = 300; + i += 109; + } + + if( j == 311 ) + { + j = 431; + i += 101; + } + + if( j == 439 ) + { + j = 514; + } + } + + if( version == WL6_PAK ) + { + if( j == 50 ) + { + j = 54; + } + + if( j == 389 ) + { + j = 408; + } + + if( j == 439 ) + { + j = 514; + } + } + + if( version == SDM_PAK ) + { + if( j == 401 ) + { + j = 514; + } + } + + if( version == SOD_PAK ) + { + if( j == 292 ) + { + j = 374; + } + + if( j == 408 ) + { + j = 439; + } + } + + if( version == SOD_PAK || version == SDM_PAK ) + { + cs_snprintf( filename, sizeof( filename ), "%s/%.3d.tga", SODGFXSPRITEDIR, j ); + } + else + { + cs_snprintf( filename, sizeof( filename ), "%s/%.3d.tga", GFXSPRITEDIR, j ); + } + + + if( j == 531 || + j == 532 || + j == 526 || + j == 521 ) + { + Flash = j; + } + else + { + Flash = 0; + } + + + PML_SaveGFXPage( i, filename, buffer, buffer2, 0, Flash ); + } + + for( i = PMSoundStart, j = 0; i < PMNumBlocks-1; ++i, ++j ) + { + if( version == SOD_PAK || version == SDM_PAK ) + { + cs_snprintf( filename, sizeof( filename ), "%s/%.3d.wav", SODSFXDIR, j ); + } + else + { + cs_snprintf( filename, sizeof( filename ), "%s/%.3d.wav", SFXDIR, j ); + } + + PML_SaveSoundPage( i, filename, buffer2, 128 * 128 * 4 ); + } + +// +// Shutdown +// + + MM_FREE( buffer ); + MM_FREE( buffer2 ); + + PML_Shutdown(); + + return true; +} + diff --git a/wolf3d/wolfextractor/wolfextractor.dsp b/wolf3d/wolfextractor/wolfextractor.dsp new file mode 100644 index 0000000..bef75d3 --- /dev/null +++ b/wolf3d/wolfextractor/wolfextractor.dsp @@ -0,0 +1,257 @@ +# Microsoft Developer Studio Project File - Name="wolfextractor" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=wolfextractor - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "wolfextractor.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "wolfextractor.mak" CFG="wolfextractor - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "wolfextractor - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "wolfextractor - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "wolfextractor - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D vsnprintf=_vsnprintf /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib vorbisenc_static.lib vorbis_static.lib ogg_static.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt.lib" + +!ELSEIF "$(CFG)" == "wolfextractor - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D vsnprintf=_vsnprintf /YX /FD /GZ /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib vorbisenc_static.lib vorbis_static.lib ogg_static.lib /nologo /subsystem:console /profile /debug /machine:I386 /nodefaultlib:"libcmt.lib" + +!ENDIF + +# Begin Target + +# Name "wolfextractor - Win32 Release" +# Name "wolfextractor - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\zlib\adler32.c +# End Source File +# Begin Source File + +SOURCE=.\adlib\adlib.c +# End Source File +# Begin Source File + +SOURCE=..\..\common\arch.c +# End Source File +# Begin Source File + +SOURCE=.\string\com_string.c +# End Source File +# Begin Source File + +SOURCE=..\..\zlib\compress.c +# End Source File +# Begin Source File + +SOURCE=..\..\zlib\crc32.c +# End Source File +# Begin Source File + +SOURCE=..\..\zlib\deflate.c +# End Source File +# Begin Source File + +SOURCE=.\filesys\file.c +# End Source File +# Begin Source File + +SOURCE=.\adlib\fmopl.c +# End Source File +# Begin Source File + +SOURCE=.\hq2x.c +# End Source File +# Begin Source File + +SOURCE=.\mac\mac.c +# End Source File +# Begin Source File + +SOURCE=.\main.c +# End Source File +# Begin Source File + +SOURCE=.\memory\memory.c +# End Source File +# Begin Source File + +SOURCE=.\pak.c +# End Source File +# Begin Source File + +SOURCE=.\loaders\tga.c +# End Source File +# Begin Source File + +SOURCE=..\..\zlib\trees.c +# End Source File +# Begin Source File + +SOURCE=.\vorbisenc_inter.c +# End Source File +# Begin Source File + +SOURCE=.\loaders\wav.c +# End Source File +# Begin Source File + +SOURCE=.\filesys\win32\win_file.c +# End Source File +# Begin Source File + +SOURCE=.\wolf\wl6_name.c +# End Source File +# Begin Source File + +SOURCE=.\wolf\wolf_aud.c +# End Source File +# Begin Source File + +SOURCE=.\wolf\wolf_gfx.c +# End Source File +# Begin Source File + +SOURCE=.\wolf\wolf_map.c +# End Source File +# Begin Source File + +SOURCE=.\wolf\wolf_pal.c +# End Source File +# Begin Source File + +SOURCE=.\wolf\wolf_pm.c +# End Source File +# Begin Source File + +SOURCE=.\zip\zipfile.c +# End Source File +# Begin Source File + +SOURCE=..\..\zlib\zutil.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\adlib\adlib.h +# End Source File +# Begin Source File + +SOURCE=..\..\common\arch.h +# End Source File +# Begin Source File + +SOURCE=.\string\com_string.h +# End Source File +# Begin Source File + +SOURCE=..\..\common\common_utils.h +# End Source File +# Begin Source File + +SOURCE=.\filesys\file.h +# End Source File +# Begin Source File + +SOURCE=.\adlib\fmopl.h +# End Source File +# Begin Source File + +SOURCE=.\hq2x.h +# End Source File +# Begin Source File + +SOURCE=.\mac\mac.h +# End Source File +# Begin Source File + +SOURCE=.\memory\memory.h +# End Source File +# Begin Source File + +SOURCE=.\loaders\tga.h +# End Source File +# Begin Source File + +SOURCE=.\loaders\wav.h +# End Source File +# Begin Source File + +SOURCE=.\wolf\wolf_def.h +# End Source File +# Begin Source File + +SOURCE=.\zip\zip.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/wolf3d/wolfextractor/wolfextractor.dsw b/wolf3d/wolfextractor/wolfextractor.dsw new file mode 100644 index 0000000..71f4c57 --- /dev/null +++ b/wolf3d/wolfextractor/wolfextractor.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "wolfextractor"=.\wolfextractor.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/wolf3d/wolfextractor/wolfextractor.ncb b/wolf3d/wolfextractor/wolfextractor.ncb new file mode 100644 index 0000000..1d93511 Binary files /dev/null and b/wolf3d/wolfextractor/wolfextractor.ncb differ diff --git a/wolf3d/wolfextractor/wolfextractor.sln b/wolf3d/wolfextractor/wolfextractor.sln new file mode 100644 index 0000000..144c88a --- /dev/null +++ b/wolf3d/wolfextractor/wolfextractor.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wolfextractor", "wolfextractor.vcproj", "{22DE1107-6438-4DB7-BADB-EB734285B464}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {22DE1107-6438-4DB7-BADB-EB734285B464}.Debug|Win32.ActiveCfg = Debug|Win32 + {22DE1107-6438-4DB7-BADB-EB734285B464}.Debug|Win32.Build.0 = Debug|Win32 + {22DE1107-6438-4DB7-BADB-EB734285B464}.Release|Win32.ActiveCfg = Release|Win32 + {22DE1107-6438-4DB7-BADB-EB734285B464}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/wolf3d/wolfextractor/wolfextractor.suo b/wolf3d/wolfextractor/wolfextractor.suo new file mode 100644 index 0000000..4e9b523 Binary files /dev/null and b/wolf3d/wolfextractor/wolfextractor.suo differ diff --git a/wolf3d/wolfextractor/wolfextractor.vcproj b/wolf3d/wolfextractor/wolfextractor.vcproj new file mode 100644 index 0000000..5666978 --- /dev/null +++ b/wolf3d/wolfextractor/wolfextractor.vcproj @@ -0,0 +1,814 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wolf3d/wolfextractor/wolfextractor.vcproj.EDEN.johnc.user b/wolf3d/wolfextractor/wolfextractor.vcproj.EDEN.johnc.user new file mode 100644 index 0000000..9c75882 --- /dev/null +++ b/wolf3d/wolfextractor/wolfextractor.vcproj.EDEN.johnc.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/wolf3d/wolfextractor/zip/zip.h b/wolf3d/wolfextractor/zip/zip.h new file mode 100644 index 0000000..9eadbef --- /dev/null +++ b/wolf3d/wolfextractor/zip/zip.h @@ -0,0 +1,104 @@ +/* + + Copyright (C) 2004 Michael Liebscher + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +#ifndef __ZIP_H__ +#define __ZIP_H__ + +#include "../../../common/arch.h" + +/* compression method */ +#define CM_NO_COMPRESSION 0 +#define CM_SHRUNK 1 +#define CM_REDUCED_F1 2 +#define CM_REDUCED_F2 3 +#define CM_REDUCED_F3 4 +#define CM_REDUCED_F4 5 +#define CM_IMPLODED 6 +#define CM_RESERVED_7 7 +#define CM_DEFLATED 8 +#define CM_DEFLATE64 9 +#define CM_IMPLODING 10 +#define CM_RESERVED_11 11 +#define CM_BZIP2 12 + + +/* version made by */ +#define VMB_MSDOS_FAT 0 +#define VMB_AMIGA 1 +#define VMB_OPENVMS 2 +#define VMB_UNIX 3 +#define VMB_VM_CMS 4 +#define VMB_ATARI_ST 5 +#define VMB_OS_2_HPFS 6 +#define VMB_MACINTOSH 7 +#define VMB_Z_SYSTEM 8 +#define VMB_CP_M 9 +#define VMB_WINDOWS_NTFS 10 +#define VMB_MVS_OS_390_Z_OS 11 +#define VMB_VSE 12 +#define VMB_ACORN_RISC 13 +#define VMB_VFAT 14 +#define VMB_ALTERNATE_MVS 15 +#define VMB_BEOS 16 +#define VMB_TANDEM 17 +#define VMB_OS_400 18 +#define VMB_OS_X_DARWIN 19 + + + + +struct zlist +{ + W16 versionmadeby; + W16 versionneeded; + W16 flag; + W16 compression_method; + W32 timedate; + W32 crc32; + W32 compressed_size; + W32 uncompressed_size; + W16 filename_length; + W16 extrafield_length; + W16 centralextra_length; + W16 comment_length; + W16 disknumstart; + W16 internalattribute; + W16 localflag; + W32 externalattribute; + W32 offset; + _boolean deletefile; + char filename[ 256 ]; + char extrafield[ 256 ]; + char centralextra[ 256 ]; + char comment[ 256 ]; + + struct zlist *next; /* Pointer to next header in chain */ +}; + + +extern _boolean zip_writelocalfileheader( struct zlist *z, FILE *f ); +extern _boolean zip_writeextended( struct zlist *z, FILE *f ); +extern _boolean zip_writecentral( struct zlist *z, FILE *f ); +extern _boolean zip_writeend( SW32 num, W32 size, W32 offset, W16 len, char *comment, FILE *f ); + + + +#endif /* __ZIP_H__ */ + diff --git a/wolf3d/wolfextractor/zip/zipfile.c b/wolf3d/wolfextractor/zip/zipfile.c new file mode 100644 index 0000000..70ffc1d --- /dev/null +++ b/wolf3d/wolfextractor/zip/zipfile.c @@ -0,0 +1,267 @@ +/* + + Copyright (C) 2004 Michael Liebscher + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +/* + * zipfile.c: Write zip file + * + * Author: Michael Liebscher + * + */ + +/* + + Notes: + + Reference document: + http://www.pkware.com/company/standards/appnote/appnote.txt + + +*/ + + +#include + +#include "../../../common/arch.h" +#include "../../../common/common_utils.h" +#include "zip.h" + +/* Signatures for zip file information headers */ +#define SIG_LOCAL 0x04034b50L +#define SIG_CENTRAL 0x02014b50L +#define SIG_END 0x06054b50L +#define SIG_EXTENDLOCAL 0x08074b50L +#define SIG_EXTENDSPLOCAL 0x30304b50L + +/* Length of header (not counting the signature) */ +#define LOCALHEAD_SIZE 26 +#define CENTRALHEAD_SIZE 42 +#define ENDHEAD_SIZE 18 + + +/* +----------------------------------------------------------------------------- + Function: zip_writelocalfileheader -Write a local header to file. + + Parameters: + z -[in] zip entry to write local header for. + f -[in] File to write to. + + Returns: + + Notes: + +----------------------------------------------------------------------------- +*/ +_boolean zip_writelocalfileheader( struct zlist *z, FILE *f ) +{ + W32 temp32; + W16 temp16; + W32 retval; + + temp32 = LittleLong( SIG_LOCAL ); + retval = fwrite( &temp32, 1, 4, f ); + + temp16 = LittleShort( z->versionneeded ); + retval += fwrite( &temp16, 1, 2, f ); + + temp16 = LittleShort( z->localflag ); + retval += fwrite( &temp16, 1, 2, f ); + + temp16 = LittleShort( z->compression_method ); + retval += fwrite( &temp16, 1, 2, f ); + + temp32 = LittleLong( z->timedate ); + retval += fwrite( &temp32, 1, 4, f ); + + temp32 = LittleLong( z->crc32 ); + retval += fwrite( &temp32, 1, 4, f ); + + temp32 = LittleLong( z->compressed_size ); + retval += fwrite( &temp32, 1, 4, f ); + + temp32 = LittleLong( z->uncompressed_size ); + retval += fwrite( &temp32, 1, 4, f ); + + temp16 = LittleShort( z->filename_length ); + retval += fwrite( &temp16, 1, 2, f ); + + temp16 = LittleShort( z->extrafield_length ); + retval += fwrite( &temp16, 1, 2, f ); + + if( retval != LOCALHEAD_SIZE + 4 ) + { + return false; + } + + if( fwrite( z->filename, 1, z->filename_length, f ) != z->filename_length || + (z->extrafield && fwrite( z->extrafield, 1, z->extrafield_length, f) != z->extrafield_length) ) + { + return false; + } + + return true; +} + + + +/* +----------------------------------------------------------------------------- + Function: zip_writecentral -Write a central header to file. + + Parameters: + z -[in] zip entry to write central header for. + f -[in] File to write to. + + Returns: + + Notes: + +----------------------------------------------------------------------------- +*/ +_boolean zip_writecentral( struct zlist *z, FILE *f ) +{ + W32 temp32; + W16 temp16; + W32 retval; + + temp32 = LittleLong( SIG_CENTRAL ); + retval = fwrite( &temp32, 1, 4, f ); + + temp16 = LittleShort( z->versionmadeby ); + retval += fwrite( &temp16, 1, 2, f ); + + temp16 = LittleShort( z->versionneeded ); + retval += fwrite( &temp16, 1, 2, f ); + + temp16 = LittleShort( z->flag ); + retval += fwrite( &temp16, 1, 2, f ); + + temp16 = LittleShort( z->compression_method ); + retval += fwrite( &temp16, 1, 2, f ); + + temp32 = LittleLong( z->timedate ); + retval += fwrite( &temp32, 1, 4, f ); + + temp32 = LittleLong( z->crc32 ); + retval += fwrite( &temp32, 1, 4, f ); + + temp32 = LittleLong( z->compressed_size ); + retval += fwrite( &temp32, 1, 4, f ); + + temp32 = LittleLong( z->uncompressed_size ); + retval += fwrite( &temp32, 1, 4, f ); + + temp16 = LittleShort( z->filename_length ); + retval += fwrite( &temp16, 1, 2, f ); + + temp16 = LittleShort( z->centralextra_length ); + retval += fwrite( &temp16, 1, 2, f ); + + temp16 = LittleShort( z->comment_length ); + retval += fwrite( &temp16, 1, 2, f ); + + temp16 = LittleShort( z->disknumstart ); + retval += fwrite( &temp16, 1, 2, f ); + + temp16 = LittleShort( z->internalattribute ); + retval += fwrite( &temp16, 1, 2, f ); + + temp32 = LittleLong( z->externalattribute ); + retval += fwrite( &temp32, 1, 4, f ); + + temp32 = LittleLong( z->offset ); + retval += fwrite( &temp32, 1, 4, f ); + + if( retval != CENTRALHEAD_SIZE + 4 ) + { + return false; + } + + if( fwrite(z->filename, 1, z->filename_length, f) != z->filename_length || + (z->centralextra_length && fwrite(z->centralextra, 1, z->centralextra_length, f) != z->centralextra_length) || + (z->comment_length && fwrite(z->comment, 1, z->comment_length, f) != z->comment_length) ) + { + return false; + } + + return true; +} + +/* +----------------------------------------------------------------------------- + Function: zip_writeend -Write end of central directory data to file. + + Parameters: + num -[in] Number of entries in central directory. + size -[in] Size of central directory. + offset -[in] Offset of central directory. + len -[in] Length of zip file comment (0 if none). + comment -[in] Zip file comment if len != 0. + f -[in] File to write to. + + Returns: + + Notes: + +----------------------------------------------------------------------------- +*/ +_boolean zip_writeend( SW32 num, W32 size, W32 offset, W16 len, char *comment, FILE *f ) +{ + W32 temp32; + W16 temp16; + W32 retval; + + temp32 = LittleLong( SIG_END ); + retval = fwrite( &temp32, 1, 4, f ); + + temp16 = 0; + retval += fwrite( &temp16, 1, 2, f ); + + temp16 = 0; + retval += fwrite( &temp16, 1, 2, f ); + + temp16 = LittleShort( num ); + retval += fwrite( &temp16, 1, 2, f ); + + temp16 = LittleShort( num ); + retval += fwrite( &temp16, 1, 2, f ); + + temp32 = LittleLong( size ); + retval += fwrite( &temp32, 1, 4, f ); + + temp32 = LittleLong( offset ); + retval += fwrite( &temp32, 1, 4, f ); + + temp16 = LittleShort( len ); + retval += fwrite( &temp16, 1, 2, f ); + + if( retval != ENDHEAD_SIZE + 4 ) + { + return false; + } + + + if( len && fwrite( comment, 1, len, f ) != len ) + { + return false; + } + + return true; +}