mirror of
https://github.com/id-Software/DOOM-IOS2.git
synced 2026-03-20 00:49:30 +01:00
Initial Commit
This commit is contained in:
@@ -0,0 +1,612 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 46;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
3DC1C7D814B6252E00680D02 /* eas.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6A614B6252D00680D02 /* eas.h */; };
|
||||
3DC1C7D914B6252E00680D02 /* eas_build.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6A714B6252D00680D02 /* eas_build.h */; };
|
||||
3DC1C7DA14B6252E00680D02 /* eas_chorus.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6A814B6252D00680D02 /* eas_chorus.h */; };
|
||||
3DC1C7DB14B6252E00680D02 /* eas_config.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6A914B6252D00680D02 /* eas_config.c */; };
|
||||
3DC1C7DC14B6252E00680D02 /* eas_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6AA14B6252D00680D02 /* eas_config.h */; };
|
||||
3DC1C7DD14B6252E00680D02 /* eas_debugmsgs.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6AB14B6252D00680D02 /* eas_debugmsgs.h */; };
|
||||
3DC1C7DE14B6252E00680D02 /* eas_host.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6AC14B6252D00680D02 /* eas_host.h */; };
|
||||
3DC1C7DF14B6252E00680D02 /* eas_hostmm.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6AD14B6252D00680D02 /* eas_hostmm.c */; };
|
||||
3DC1C7E114B6252E00680D02 /* eas_report.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6AF14B6252D00680D02 /* eas_report.c */; };
|
||||
3DC1C7E214B6252E00680D02 /* eas_report.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6B014B6252D00680D02 /* eas_report.h */; };
|
||||
3DC1C7E314B6252E00680D02 /* eas_reverb.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6B114B6252D00680D02 /* eas_reverb.h */; };
|
||||
3DC1C7E414B6252E00680D02 /* eas_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6B214B6252D00680D02 /* eas_types.h */; };
|
||||
3DC1C7E514B6252E00680D02 /* eas_wave.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6B314B6252D00680D02 /* eas_wave.c */; };
|
||||
3DC1C7E614B6252E00680D02 /* eas_wave.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6B414B6252D00680D02 /* eas_wave.h */; };
|
||||
3DC1C7E714B6252E00680D02 /* jet.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6B514B6252D00680D02 /* jet.h */; };
|
||||
3DC1C7F614B6252E00680D02 /* dls.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6CF14B6252D00680D02 /* dls.h */; };
|
||||
3DC1C7F714B6252E00680D02 /* dls2.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6D014B6252D00680D02 /* dls2.h */; };
|
||||
3DC1C7F814B6252E00680D02 /* eas_audioconst.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6D114B6252D00680D02 /* eas_audioconst.h */; };
|
||||
3DC1C7F914B6252E00680D02 /* eas_chorus.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6D214B6252D00680D02 /* eas_chorus.c */; };
|
||||
3DC1C7FA14B6252E00680D02 /* eas_chorusdata.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6D314B6252D00680D02 /* eas_chorusdata.c */; };
|
||||
3DC1C7FB14B6252E00680D02 /* eas_chorusdata.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6D414B6252D00680D02 /* eas_chorusdata.h */; };
|
||||
3DC1C7FC14B6252E00680D02 /* eas_ctype.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6D514B6252D00680D02 /* eas_ctype.h */; };
|
||||
3DC1C7FD14B6252E00680D02 /* eas_data.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6D614B6252D00680D02 /* eas_data.c */; };
|
||||
3DC1C7FE14B6252E00680D02 /* eas_data.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6D714B6252D00680D02 /* eas_data.h */; };
|
||||
3DC1C80014B6252E00680D02 /* eas_dlssynth.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6D914B6252D00680D02 /* eas_dlssynth.h */; };
|
||||
3DC1C80114B6252E00680D02 /* eas_effects.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6DA14B6252D00680D02 /* eas_effects.h */; };
|
||||
3DC1C80214B6252E00680D02 /* eas_flog.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6DB14B6252D00680D02 /* eas_flog.c */; };
|
||||
3DC1C80314B6252E00680D02 /* eas_ima_tables.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6DC14B6252D00680D02 /* eas_ima_tables.c */; };
|
||||
3DC1C80414B6252E00680D02 /* eas_imaadpcm.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6DD14B6252D00680D02 /* eas_imaadpcm.c */; };
|
||||
3DC1C80514B6252E00680D02 /* eas_imelody.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6DE14B6252D00680D02 /* eas_imelody.c */; };
|
||||
3DC1C80614B6252E00680D02 /* eas_imelodydata.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6DF14B6252D00680D02 /* eas_imelodydata.c */; };
|
||||
3DC1C80714B6252E00680D02 /* eas_imelodydata.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6E014B6252D00680D02 /* eas_imelodydata.h */; };
|
||||
3DC1C80814B6252E00680D02 /* eas_math.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6E114B6252D00680D02 /* eas_math.c */; };
|
||||
3DC1C80914B6252E00680D02 /* eas_math.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6E214B6252D00680D02 /* eas_math.h */; };
|
||||
3DC1C80B14B6252E00680D02 /* eas_mdls.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6E414B6252D00680D02 /* eas_mdls.h */; };
|
||||
3DC1C80C14B6252E00680D02 /* eas_midi.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6E514B6252D00680D02 /* eas_midi.c */; };
|
||||
3DC1C80D14B6252E00680D02 /* eas_midi.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6E614B6252D00680D02 /* eas_midi.h */; };
|
||||
3DC1C80E14B6252E00680D02 /* eas_midictrl.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6E714B6252D00680D02 /* eas_midictrl.h */; };
|
||||
3DC1C80F14B6252E00680D02 /* eas_mididata.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6E814B6252D00680D02 /* eas_mididata.c */; };
|
||||
3DC1C81014B6252E00680D02 /* eas_miditypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6E914B6252D00680D02 /* eas_miditypes.h */; };
|
||||
3DC1C81114B6252E00680D02 /* eas_mixbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6EA14B6252D00680D02 /* eas_mixbuf.c */; };
|
||||
3DC1C81214B6252E00680D02 /* eas_mixer.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6EB14B6252D00680D02 /* eas_mixer.c */; };
|
||||
3DC1C81314B6252E00680D02 /* eas_mixer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6EC14B6252D00680D02 /* eas_mixer.h */; };
|
||||
3DC1C81414B6252E00680D02 /* eas_ota.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6ED14B6252D00680D02 /* eas_ota.c */; };
|
||||
3DC1C81514B6252E00680D02 /* eas_otadata.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6EE14B6252D00680D02 /* eas_otadata.c */; };
|
||||
3DC1C81614B6252E00680D02 /* eas_otadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6EF14B6252D00680D02 /* eas_otadata.h */; };
|
||||
3DC1C81714B6252E00680D02 /* eas_pan.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6F014B6252D00680D02 /* eas_pan.c */; };
|
||||
3DC1C81814B6252E00680D02 /* eas_pan.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6F114B6252D00680D02 /* eas_pan.h */; };
|
||||
3DC1C81914B6252E00680D02 /* eas_parser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6F214B6252D00680D02 /* eas_parser.h */; };
|
||||
3DC1C81A14B6252E00680D02 /* eas_pcm.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6F314B6252D00680D02 /* eas_pcm.c */; };
|
||||
3DC1C81B14B6252E00680D02 /* eas_pcm.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6F414B6252D00680D02 /* eas_pcm.h */; };
|
||||
3DC1C81C14B6252E00680D02 /* eas_pcmdata.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6F514B6252D00680D02 /* eas_pcmdata.c */; };
|
||||
3DC1C81D14B6252E00680D02 /* eas_pcmdata.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6F614B6252D00680D02 /* eas_pcmdata.h */; };
|
||||
3DC1C81E14B6252E00680D02 /* eas_public.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6F714B6252D00680D02 /* eas_public.c */; };
|
||||
3DC1C81F14B6252E00680D02 /* eas_reverb.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6F814B6252D00680D02 /* eas_reverb.c */; };
|
||||
3DC1C82014B6252E00680D02 /* eas_reverbdata.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6F914B6252D00680D02 /* eas_reverbdata.c */; };
|
||||
3DC1C82114B6252E00680D02 /* eas_reverbdata.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6FA14B6252D00680D02 /* eas_reverbdata.h */; };
|
||||
3DC1C82214B6252E00680D02 /* eas_rtttl.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6FB14B6252D00680D02 /* eas_rtttl.c */; };
|
||||
3DC1C82314B6252E00680D02 /* eas_rtttldata.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6FC14B6252D00680D02 /* eas_rtttldata.c */; };
|
||||
3DC1C82414B6252E00680D02 /* eas_rtttldata.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6FD14B6252D00680D02 /* eas_rtttldata.h */; };
|
||||
3DC1C82514B6252E00680D02 /* eas_smf.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C6FE14B6252D00680D02 /* eas_smf.c */; };
|
||||
3DC1C82614B6252E00680D02 /* eas_smf.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C6FF14B6252D00680D02 /* eas_smf.h */; };
|
||||
3DC1C82714B6252E00680D02 /* eas_smfdata.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C70014B6252D00680D02 /* eas_smfdata.c */; };
|
||||
3DC1C82814B6252E00680D02 /* eas_smfdata.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C70114B6252D00680D02 /* eas_smfdata.h */; };
|
||||
3DC1C82914B6252E00680D02 /* eas_sndlib.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C70214B6252D00680D02 /* eas_sndlib.h */; };
|
||||
3DC1C82A14B6252E00680D02 /* eas_synth.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C70314B6252D00680D02 /* eas_synth.h */; };
|
||||
3DC1C82B14B6252E00680D02 /* eas_synth_protos.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C70414B6252D00680D02 /* eas_synth_protos.h */; };
|
||||
3DC1C82C14B6252E00680D02 /* eas_synthcfg.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C70514B6252D00680D02 /* eas_synthcfg.h */; };
|
||||
3DC1C82D14B6252E00680D02 /* eas_tcdata.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C70614B6252D00680D02 /* eas_tcdata.c */; };
|
||||
3DC1C82E14B6252E00680D02 /* eas_tcdata.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C70714B6252D00680D02 /* eas_tcdata.h */; };
|
||||
3DC1C82F14B6252E00680D02 /* eas_tonecontrol.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C70814B6252D00680D02 /* eas_tonecontrol.c */; };
|
||||
3DC1C83014B6252E00680D02 /* eas_vm_protos.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C70914B6252D00680D02 /* eas_vm_protos.h */; };
|
||||
3DC1C83114B6252E00680D02 /* eas_voicemgt.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C70A14B6252D00680D02 /* eas_voicemgt.c */; };
|
||||
3DC1C83214B6252E00680D02 /* eas_wavefile.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C70B14B6252D00680D02 /* eas_wavefile.c */; };
|
||||
3DC1C83314B6252E00680D02 /* eas_wavefile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C70C14B6252D00680D02 /* eas_wavefile.h */; };
|
||||
3DC1C83414B6252E00680D02 /* eas_wavefiledata.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C70D14B6252D00680D02 /* eas_wavefiledata.c */; };
|
||||
3DC1C83514B6252E00680D02 /* eas_wt_IPC_frame.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C70E14B6252D00680D02 /* eas_wt_IPC_frame.h */; };
|
||||
3DC1C83614B6252E00680D02 /* eas_wtengine.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C70F14B6252D00680D02 /* eas_wtengine.c */; };
|
||||
3DC1C83714B6252E00680D02 /* eas_wtengine.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C71014B6252D00680D02 /* eas_wtengine.h */; };
|
||||
3DC1C83814B6252E00680D02 /* eas_wtsynth.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C71114B6252D00680D02 /* eas_wtsynth.c */; };
|
||||
3DC1C83914B6252E00680D02 /* eas_wtsynth.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C71214B6252D00680D02 /* eas_wtsynth.h */; };
|
||||
3DC1C83B14B6252E00680D02 /* eas_xmf.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C71414B6252D00680D02 /* eas_xmf.h */; };
|
||||
3DC1C83D14B6252E00680D02 /* eas_xmfdata.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C71614B6252D00680D02 /* eas_xmfdata.h */; };
|
||||
3DC1C83F14B6252E00680D02 /* jet_data.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C71814B6252D00680D02 /* jet_data.h */; };
|
||||
3DC1C84014B6252E00680D02 /* wt_22khz.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C71914B6252D00680D02 /* wt_22khz.c */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
3DC1C5D614B624ED00680D02 /* libEmbeddedAudioSynthesis.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libEmbeddedAudioSynthesis.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
3DC1C6A614B6252D00680D02 /* eas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas.h; sourceTree = "<group>"; };
|
||||
3DC1C6A714B6252D00680D02 /* eas_build.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_build.h; sourceTree = "<group>"; };
|
||||
3DC1C6A814B6252D00680D02 /* eas_chorus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_chorus.h; sourceTree = "<group>"; };
|
||||
3DC1C6A914B6252D00680D02 /* eas_config.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_config.c; sourceTree = "<group>"; };
|
||||
3DC1C6AA14B6252D00680D02 /* eas_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_config.h; sourceTree = "<group>"; };
|
||||
3DC1C6AB14B6252D00680D02 /* eas_debugmsgs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_debugmsgs.h; sourceTree = "<group>"; };
|
||||
3DC1C6AC14B6252D00680D02 /* eas_host.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_host.h; sourceTree = "<group>"; };
|
||||
3DC1C6AD14B6252D00680D02 /* eas_hostmm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_hostmm.c; sourceTree = "<group>"; };
|
||||
3DC1C6AF14B6252D00680D02 /* eas_report.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_report.c; sourceTree = "<group>"; };
|
||||
3DC1C6B014B6252D00680D02 /* eas_report.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_report.h; sourceTree = "<group>"; };
|
||||
3DC1C6B114B6252D00680D02 /* eas_reverb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_reverb.h; sourceTree = "<group>"; };
|
||||
3DC1C6B214B6252D00680D02 /* eas_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_types.h; sourceTree = "<group>"; };
|
||||
3DC1C6B314B6252D00680D02 /* eas_wave.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_wave.c; sourceTree = "<group>"; };
|
||||
3DC1C6B414B6252D00680D02 /* eas_wave.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_wave.h; sourceTree = "<group>"; };
|
||||
3DC1C6B514B6252D00680D02 /* jet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jet.h; sourceTree = "<group>"; };
|
||||
3DC1C6CF14B6252D00680D02 /* dls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dls.h; sourceTree = "<group>"; };
|
||||
3DC1C6D014B6252D00680D02 /* dls2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dls2.h; sourceTree = "<group>"; };
|
||||
3DC1C6D114B6252D00680D02 /* eas_audioconst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_audioconst.h; sourceTree = "<group>"; };
|
||||
3DC1C6D214B6252D00680D02 /* eas_chorus.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_chorus.c; sourceTree = "<group>"; };
|
||||
3DC1C6D314B6252D00680D02 /* eas_chorusdata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_chorusdata.c; sourceTree = "<group>"; };
|
||||
3DC1C6D414B6252D00680D02 /* eas_chorusdata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_chorusdata.h; sourceTree = "<group>"; };
|
||||
3DC1C6D514B6252D00680D02 /* eas_ctype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_ctype.h; sourceTree = "<group>"; };
|
||||
3DC1C6D614B6252D00680D02 /* eas_data.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_data.c; sourceTree = "<group>"; };
|
||||
3DC1C6D714B6252D00680D02 /* eas_data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_data.h; sourceTree = "<group>"; };
|
||||
3DC1C6D814B6252D00680D02 /* eas_dlssynth.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_dlssynth.c; sourceTree = "<group>"; };
|
||||
3DC1C6D914B6252D00680D02 /* eas_dlssynth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_dlssynth.h; sourceTree = "<group>"; };
|
||||
3DC1C6DA14B6252D00680D02 /* eas_effects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_effects.h; sourceTree = "<group>"; };
|
||||
3DC1C6DB14B6252D00680D02 /* eas_flog.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_flog.c; sourceTree = "<group>"; };
|
||||
3DC1C6DC14B6252D00680D02 /* eas_ima_tables.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_ima_tables.c; sourceTree = "<group>"; };
|
||||
3DC1C6DD14B6252D00680D02 /* eas_imaadpcm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_imaadpcm.c; sourceTree = "<group>"; };
|
||||
3DC1C6DE14B6252D00680D02 /* eas_imelody.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_imelody.c; sourceTree = "<group>"; };
|
||||
3DC1C6DF14B6252D00680D02 /* eas_imelodydata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_imelodydata.c; sourceTree = "<group>"; };
|
||||
3DC1C6E014B6252D00680D02 /* eas_imelodydata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_imelodydata.h; sourceTree = "<group>"; };
|
||||
3DC1C6E114B6252D00680D02 /* eas_math.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_math.c; sourceTree = "<group>"; };
|
||||
3DC1C6E214B6252D00680D02 /* eas_math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_math.h; sourceTree = "<group>"; };
|
||||
3DC1C6E314B6252D00680D02 /* eas_mdls.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_mdls.c; sourceTree = "<group>"; };
|
||||
3DC1C6E414B6252D00680D02 /* eas_mdls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_mdls.h; sourceTree = "<group>"; };
|
||||
3DC1C6E514B6252D00680D02 /* eas_midi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_midi.c; sourceTree = "<group>"; };
|
||||
3DC1C6E614B6252D00680D02 /* eas_midi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_midi.h; sourceTree = "<group>"; };
|
||||
3DC1C6E714B6252D00680D02 /* eas_midictrl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_midictrl.h; sourceTree = "<group>"; };
|
||||
3DC1C6E814B6252D00680D02 /* eas_mididata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_mididata.c; sourceTree = "<group>"; };
|
||||
3DC1C6E914B6252D00680D02 /* eas_miditypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_miditypes.h; sourceTree = "<group>"; };
|
||||
3DC1C6EA14B6252D00680D02 /* eas_mixbuf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_mixbuf.c; sourceTree = "<group>"; };
|
||||
3DC1C6EB14B6252D00680D02 /* eas_mixer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_mixer.c; sourceTree = "<group>"; };
|
||||
3DC1C6EC14B6252D00680D02 /* eas_mixer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_mixer.h; sourceTree = "<group>"; };
|
||||
3DC1C6ED14B6252D00680D02 /* eas_ota.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_ota.c; sourceTree = "<group>"; };
|
||||
3DC1C6EE14B6252D00680D02 /* eas_otadata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_otadata.c; sourceTree = "<group>"; };
|
||||
3DC1C6EF14B6252D00680D02 /* eas_otadata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_otadata.h; sourceTree = "<group>"; };
|
||||
3DC1C6F014B6252D00680D02 /* eas_pan.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_pan.c; sourceTree = "<group>"; };
|
||||
3DC1C6F114B6252D00680D02 /* eas_pan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_pan.h; sourceTree = "<group>"; };
|
||||
3DC1C6F214B6252D00680D02 /* eas_parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_parser.h; sourceTree = "<group>"; };
|
||||
3DC1C6F314B6252D00680D02 /* eas_pcm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_pcm.c; sourceTree = "<group>"; };
|
||||
3DC1C6F414B6252D00680D02 /* eas_pcm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_pcm.h; sourceTree = "<group>"; };
|
||||
3DC1C6F514B6252D00680D02 /* eas_pcmdata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_pcmdata.c; sourceTree = "<group>"; };
|
||||
3DC1C6F614B6252D00680D02 /* eas_pcmdata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_pcmdata.h; sourceTree = "<group>"; };
|
||||
3DC1C6F714B6252D00680D02 /* eas_public.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_public.c; sourceTree = "<group>"; };
|
||||
3DC1C6F814B6252D00680D02 /* eas_reverb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_reverb.c; sourceTree = "<group>"; };
|
||||
3DC1C6F914B6252D00680D02 /* eas_reverbdata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_reverbdata.c; sourceTree = "<group>"; };
|
||||
3DC1C6FA14B6252D00680D02 /* eas_reverbdata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_reverbdata.h; sourceTree = "<group>"; };
|
||||
3DC1C6FB14B6252D00680D02 /* eas_rtttl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_rtttl.c; sourceTree = "<group>"; };
|
||||
3DC1C6FC14B6252D00680D02 /* eas_rtttldata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_rtttldata.c; sourceTree = "<group>"; };
|
||||
3DC1C6FD14B6252D00680D02 /* eas_rtttldata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_rtttldata.h; sourceTree = "<group>"; };
|
||||
3DC1C6FE14B6252D00680D02 /* eas_smf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_smf.c; sourceTree = "<group>"; };
|
||||
3DC1C6FF14B6252D00680D02 /* eas_smf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_smf.h; sourceTree = "<group>"; };
|
||||
3DC1C70014B6252D00680D02 /* eas_smfdata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_smfdata.c; sourceTree = "<group>"; };
|
||||
3DC1C70114B6252D00680D02 /* eas_smfdata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_smfdata.h; sourceTree = "<group>"; };
|
||||
3DC1C70214B6252D00680D02 /* eas_sndlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_sndlib.h; sourceTree = "<group>"; };
|
||||
3DC1C70314B6252D00680D02 /* eas_synth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_synth.h; sourceTree = "<group>"; };
|
||||
3DC1C70414B6252D00680D02 /* eas_synth_protos.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_synth_protos.h; sourceTree = "<group>"; };
|
||||
3DC1C70514B6252D00680D02 /* eas_synthcfg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_synthcfg.h; sourceTree = "<group>"; };
|
||||
3DC1C70614B6252D00680D02 /* eas_tcdata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_tcdata.c; sourceTree = "<group>"; };
|
||||
3DC1C70714B6252D00680D02 /* eas_tcdata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_tcdata.h; sourceTree = "<group>"; };
|
||||
3DC1C70814B6252D00680D02 /* eas_tonecontrol.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_tonecontrol.c; sourceTree = "<group>"; };
|
||||
3DC1C70914B6252D00680D02 /* eas_vm_protos.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_vm_protos.h; sourceTree = "<group>"; };
|
||||
3DC1C70A14B6252D00680D02 /* eas_voicemgt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_voicemgt.c; sourceTree = "<group>"; };
|
||||
3DC1C70B14B6252D00680D02 /* eas_wavefile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_wavefile.c; sourceTree = "<group>"; };
|
||||
3DC1C70C14B6252D00680D02 /* eas_wavefile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_wavefile.h; sourceTree = "<group>"; };
|
||||
3DC1C70D14B6252D00680D02 /* eas_wavefiledata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_wavefiledata.c; sourceTree = "<group>"; };
|
||||
3DC1C70E14B6252D00680D02 /* eas_wt_IPC_frame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_wt_IPC_frame.h; sourceTree = "<group>"; };
|
||||
3DC1C70F14B6252D00680D02 /* eas_wtengine.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_wtengine.c; sourceTree = "<group>"; };
|
||||
3DC1C71014B6252D00680D02 /* eas_wtengine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_wtengine.h; sourceTree = "<group>"; };
|
||||
3DC1C71114B6252D00680D02 /* eas_wtsynth.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_wtsynth.c; sourceTree = "<group>"; };
|
||||
3DC1C71214B6252D00680D02 /* eas_wtsynth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_wtsynth.h; sourceTree = "<group>"; };
|
||||
3DC1C71314B6252D00680D02 /* eas_xmf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_xmf.c; sourceTree = "<group>"; };
|
||||
3DC1C71414B6252D00680D02 /* eas_xmf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_xmf.h; sourceTree = "<group>"; };
|
||||
3DC1C71514B6252D00680D02 /* eas_xmfdata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eas_xmfdata.c; sourceTree = "<group>"; };
|
||||
3DC1C71614B6252D00680D02 /* eas_xmfdata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eas_xmfdata.h; sourceTree = "<group>"; };
|
||||
3DC1C71714B6252D00680D02 /* jet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jet.c; sourceTree = "<group>"; };
|
||||
3DC1C71814B6252D00680D02 /* jet_data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jet_data.h; sourceTree = "<group>"; };
|
||||
3DC1C71914B6252D00680D02 /* wt_22khz.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wt_22khz.c; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
3DC1C5D314B624ED00680D02 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
3DC1C5CB14B624ED00680D02 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3DC1C5EC14B6250600680D02 /* EAS */,
|
||||
3DC1C5D714B624ED00680D02 /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3DC1C5D714B624ED00680D02 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3DC1C5D614B624ED00680D02 /* libEmbeddedAudioSynthesis.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3DC1C5EC14B6250600680D02 /* EAS */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3DC1C6A014B6252D00680D02 /* arm-wt-22k */,
|
||||
);
|
||||
name = EAS;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3DC1C6A014B6252D00680D02 /* arm-wt-22k */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3DC1C6A414B6252D00680D02 /* host_src */,
|
||||
3DC1C6C714B6252D00680D02 /* lib_src */,
|
||||
);
|
||||
name = "arm-wt-22k";
|
||||
path = "../../embeddedaudiosynthesis/arm-wt-22k";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3DC1C6A414B6252D00680D02 /* host_src */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3DC1C6A614B6252D00680D02 /* eas.h */,
|
||||
3DC1C6A714B6252D00680D02 /* eas_build.h */,
|
||||
3DC1C6A814B6252D00680D02 /* eas_chorus.h */,
|
||||
3DC1C6A914B6252D00680D02 /* eas_config.c */,
|
||||
3DC1C6AA14B6252D00680D02 /* eas_config.h */,
|
||||
3DC1C6AB14B6252D00680D02 /* eas_debugmsgs.h */,
|
||||
3DC1C6AC14B6252D00680D02 /* eas_host.h */,
|
||||
3DC1C6AD14B6252D00680D02 /* eas_hostmm.c */,
|
||||
3DC1C6AF14B6252D00680D02 /* eas_report.c */,
|
||||
3DC1C6B014B6252D00680D02 /* eas_report.h */,
|
||||
3DC1C6B114B6252D00680D02 /* eas_reverb.h */,
|
||||
3DC1C6B214B6252D00680D02 /* eas_types.h */,
|
||||
3DC1C6B314B6252D00680D02 /* eas_wave.c */,
|
||||
3DC1C6B414B6252D00680D02 /* eas_wave.h */,
|
||||
3DC1C6B514B6252D00680D02 /* jet.h */,
|
||||
);
|
||||
path = host_src;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3DC1C6C714B6252D00680D02 /* lib_src */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3DC1C6CF14B6252D00680D02 /* dls.h */,
|
||||
3DC1C6D014B6252D00680D02 /* dls2.h */,
|
||||
3DC1C6D114B6252D00680D02 /* eas_audioconst.h */,
|
||||
3DC1C6D214B6252D00680D02 /* eas_chorus.c */,
|
||||
3DC1C6D314B6252D00680D02 /* eas_chorusdata.c */,
|
||||
3DC1C6D414B6252D00680D02 /* eas_chorusdata.h */,
|
||||
3DC1C6D514B6252D00680D02 /* eas_ctype.h */,
|
||||
3DC1C6D614B6252D00680D02 /* eas_data.c */,
|
||||
3DC1C6D714B6252D00680D02 /* eas_data.h */,
|
||||
3DC1C6D814B6252D00680D02 /* eas_dlssynth.c */,
|
||||
3DC1C6D914B6252D00680D02 /* eas_dlssynth.h */,
|
||||
3DC1C6DA14B6252D00680D02 /* eas_effects.h */,
|
||||
3DC1C6DB14B6252D00680D02 /* eas_flog.c */,
|
||||
3DC1C6DC14B6252D00680D02 /* eas_ima_tables.c */,
|
||||
3DC1C6DD14B6252D00680D02 /* eas_imaadpcm.c */,
|
||||
3DC1C6DE14B6252D00680D02 /* eas_imelody.c */,
|
||||
3DC1C6DF14B6252D00680D02 /* eas_imelodydata.c */,
|
||||
3DC1C6E014B6252D00680D02 /* eas_imelodydata.h */,
|
||||
3DC1C6E114B6252D00680D02 /* eas_math.c */,
|
||||
3DC1C6E214B6252D00680D02 /* eas_math.h */,
|
||||
3DC1C6E314B6252D00680D02 /* eas_mdls.c */,
|
||||
3DC1C6E414B6252D00680D02 /* eas_mdls.h */,
|
||||
3DC1C6E514B6252D00680D02 /* eas_midi.c */,
|
||||
3DC1C6E614B6252D00680D02 /* eas_midi.h */,
|
||||
3DC1C6E714B6252D00680D02 /* eas_midictrl.h */,
|
||||
3DC1C6E814B6252D00680D02 /* eas_mididata.c */,
|
||||
3DC1C6E914B6252D00680D02 /* eas_miditypes.h */,
|
||||
3DC1C6EA14B6252D00680D02 /* eas_mixbuf.c */,
|
||||
3DC1C6EB14B6252D00680D02 /* eas_mixer.c */,
|
||||
3DC1C6EC14B6252D00680D02 /* eas_mixer.h */,
|
||||
3DC1C6ED14B6252D00680D02 /* eas_ota.c */,
|
||||
3DC1C6EE14B6252D00680D02 /* eas_otadata.c */,
|
||||
3DC1C6EF14B6252D00680D02 /* eas_otadata.h */,
|
||||
3DC1C6F014B6252D00680D02 /* eas_pan.c */,
|
||||
3DC1C6F114B6252D00680D02 /* eas_pan.h */,
|
||||
3DC1C6F214B6252D00680D02 /* eas_parser.h */,
|
||||
3DC1C6F314B6252D00680D02 /* eas_pcm.c */,
|
||||
3DC1C6F414B6252D00680D02 /* eas_pcm.h */,
|
||||
3DC1C6F514B6252D00680D02 /* eas_pcmdata.c */,
|
||||
3DC1C6F614B6252D00680D02 /* eas_pcmdata.h */,
|
||||
3DC1C6F714B6252D00680D02 /* eas_public.c */,
|
||||
3DC1C6F814B6252D00680D02 /* eas_reverb.c */,
|
||||
3DC1C6F914B6252D00680D02 /* eas_reverbdata.c */,
|
||||
3DC1C6FA14B6252D00680D02 /* eas_reverbdata.h */,
|
||||
3DC1C6FB14B6252D00680D02 /* eas_rtttl.c */,
|
||||
3DC1C6FC14B6252D00680D02 /* eas_rtttldata.c */,
|
||||
3DC1C6FD14B6252D00680D02 /* eas_rtttldata.h */,
|
||||
3DC1C6FE14B6252D00680D02 /* eas_smf.c */,
|
||||
3DC1C6FF14B6252D00680D02 /* eas_smf.h */,
|
||||
3DC1C70014B6252D00680D02 /* eas_smfdata.c */,
|
||||
3DC1C70114B6252D00680D02 /* eas_smfdata.h */,
|
||||
3DC1C70214B6252D00680D02 /* eas_sndlib.h */,
|
||||
3DC1C70314B6252D00680D02 /* eas_synth.h */,
|
||||
3DC1C70414B6252D00680D02 /* eas_synth_protos.h */,
|
||||
3DC1C70514B6252D00680D02 /* eas_synthcfg.h */,
|
||||
3DC1C70614B6252D00680D02 /* eas_tcdata.c */,
|
||||
3DC1C70714B6252D00680D02 /* eas_tcdata.h */,
|
||||
3DC1C70814B6252D00680D02 /* eas_tonecontrol.c */,
|
||||
3DC1C70914B6252D00680D02 /* eas_vm_protos.h */,
|
||||
3DC1C70A14B6252D00680D02 /* eas_voicemgt.c */,
|
||||
3DC1C70B14B6252D00680D02 /* eas_wavefile.c */,
|
||||
3DC1C70C14B6252D00680D02 /* eas_wavefile.h */,
|
||||
3DC1C70D14B6252D00680D02 /* eas_wavefiledata.c */,
|
||||
3DC1C70E14B6252D00680D02 /* eas_wt_IPC_frame.h */,
|
||||
3DC1C70F14B6252D00680D02 /* eas_wtengine.c */,
|
||||
3DC1C71014B6252D00680D02 /* eas_wtengine.h */,
|
||||
3DC1C71114B6252D00680D02 /* eas_wtsynth.c */,
|
||||
3DC1C71214B6252D00680D02 /* eas_wtsynth.h */,
|
||||
3DC1C71314B6252D00680D02 /* eas_xmf.c */,
|
||||
3DC1C71414B6252D00680D02 /* eas_xmf.h */,
|
||||
3DC1C71514B6252D00680D02 /* eas_xmfdata.c */,
|
||||
3DC1C71614B6252D00680D02 /* eas_xmfdata.h */,
|
||||
3DC1C71714B6252D00680D02 /* jet.c */,
|
||||
3DC1C71814B6252D00680D02 /* jet_data.h */,
|
||||
3DC1C71914B6252D00680D02 /* wt_22khz.c */,
|
||||
);
|
||||
path = lib_src;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXHeadersBuildPhase section */
|
||||
3DC1C5D414B624ED00680D02 /* Headers */ = {
|
||||
isa = PBXHeadersBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
3DC1C7D814B6252E00680D02 /* eas.h in Headers */,
|
||||
3DC1C7D914B6252E00680D02 /* eas_build.h in Headers */,
|
||||
3DC1C7DA14B6252E00680D02 /* eas_chorus.h in Headers */,
|
||||
3DC1C7DC14B6252E00680D02 /* eas_config.h in Headers */,
|
||||
3DC1C7DD14B6252E00680D02 /* eas_debugmsgs.h in Headers */,
|
||||
3DC1C7DE14B6252E00680D02 /* eas_host.h in Headers */,
|
||||
3DC1C7E214B6252E00680D02 /* eas_report.h in Headers */,
|
||||
3DC1C7E314B6252E00680D02 /* eas_reverb.h in Headers */,
|
||||
3DC1C7E414B6252E00680D02 /* eas_types.h in Headers */,
|
||||
3DC1C7E614B6252E00680D02 /* eas_wave.h in Headers */,
|
||||
3DC1C7E714B6252E00680D02 /* jet.h in Headers */,
|
||||
3DC1C7F614B6252E00680D02 /* dls.h in Headers */,
|
||||
3DC1C7F714B6252E00680D02 /* dls2.h in Headers */,
|
||||
3DC1C7F814B6252E00680D02 /* eas_audioconst.h in Headers */,
|
||||
3DC1C7FB14B6252E00680D02 /* eas_chorusdata.h in Headers */,
|
||||
3DC1C7FC14B6252E00680D02 /* eas_ctype.h in Headers */,
|
||||
3DC1C7FE14B6252E00680D02 /* eas_data.h in Headers */,
|
||||
3DC1C80014B6252E00680D02 /* eas_dlssynth.h in Headers */,
|
||||
3DC1C80114B6252E00680D02 /* eas_effects.h in Headers */,
|
||||
3DC1C80714B6252E00680D02 /* eas_imelodydata.h in Headers */,
|
||||
3DC1C80914B6252E00680D02 /* eas_math.h in Headers */,
|
||||
3DC1C80B14B6252E00680D02 /* eas_mdls.h in Headers */,
|
||||
3DC1C80D14B6252E00680D02 /* eas_midi.h in Headers */,
|
||||
3DC1C80E14B6252E00680D02 /* eas_midictrl.h in Headers */,
|
||||
3DC1C81014B6252E00680D02 /* eas_miditypes.h in Headers */,
|
||||
3DC1C81314B6252E00680D02 /* eas_mixer.h in Headers */,
|
||||
3DC1C81614B6252E00680D02 /* eas_otadata.h in Headers */,
|
||||
3DC1C81814B6252E00680D02 /* eas_pan.h in Headers */,
|
||||
3DC1C81914B6252E00680D02 /* eas_parser.h in Headers */,
|
||||
3DC1C81B14B6252E00680D02 /* eas_pcm.h in Headers */,
|
||||
3DC1C81D14B6252E00680D02 /* eas_pcmdata.h in Headers */,
|
||||
3DC1C82114B6252E00680D02 /* eas_reverbdata.h in Headers */,
|
||||
3DC1C82414B6252E00680D02 /* eas_rtttldata.h in Headers */,
|
||||
3DC1C82614B6252E00680D02 /* eas_smf.h in Headers */,
|
||||
3DC1C82814B6252E00680D02 /* eas_smfdata.h in Headers */,
|
||||
3DC1C82914B6252E00680D02 /* eas_sndlib.h in Headers */,
|
||||
3DC1C82A14B6252E00680D02 /* eas_synth.h in Headers */,
|
||||
3DC1C82B14B6252E00680D02 /* eas_synth_protos.h in Headers */,
|
||||
3DC1C82C14B6252E00680D02 /* eas_synthcfg.h in Headers */,
|
||||
3DC1C82E14B6252E00680D02 /* eas_tcdata.h in Headers */,
|
||||
3DC1C83014B6252E00680D02 /* eas_vm_protos.h in Headers */,
|
||||
3DC1C83314B6252E00680D02 /* eas_wavefile.h in Headers */,
|
||||
3DC1C83514B6252E00680D02 /* eas_wt_IPC_frame.h in Headers */,
|
||||
3DC1C83714B6252E00680D02 /* eas_wtengine.h in Headers */,
|
||||
3DC1C83914B6252E00680D02 /* eas_wtsynth.h in Headers */,
|
||||
3DC1C83B14B6252E00680D02 /* eas_xmf.h in Headers */,
|
||||
3DC1C83D14B6252E00680D02 /* eas_xmfdata.h in Headers */,
|
||||
3DC1C83F14B6252E00680D02 /* jet_data.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXHeadersBuildPhase section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
3DC1C5D514B624ED00680D02 /* EmbeddedAudioSynthesis */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 3DC1C5E314B624ED00680D02 /* Build configuration list for PBXNativeTarget "EmbeddedAudioSynthesis" */;
|
||||
buildPhases = (
|
||||
3DC1C5D214B624ED00680D02 /* Sources */,
|
||||
3DC1C5D314B624ED00680D02 /* Frameworks */,
|
||||
3DC1C5D414B624ED00680D02 /* Headers */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = EmbeddedAudioSynthesis;
|
||||
productName = EmbeddedAudioSynthesis;
|
||||
productReference = 3DC1C5D614B624ED00680D02 /* libEmbeddedAudioSynthesis.a */;
|
||||
productType = "com.apple.product-type.library.static";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
3DC1C5CD14B624ED00680D02 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0500;
|
||||
};
|
||||
buildConfigurationList = 3DC1C5D014B624ED00680D02 /* Build configuration list for PBXProject "EmbeddedAudioSynthesis" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
);
|
||||
mainGroup = 3DC1C5CB14B624ED00680D02;
|
||||
productRefGroup = 3DC1C5D714B624ED00680D02 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
3DC1C5D514B624ED00680D02 /* EmbeddedAudioSynthesis */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
3DC1C5D214B624ED00680D02 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
3DC1C7DB14B6252E00680D02 /* eas_config.c in Sources */,
|
||||
3DC1C7DF14B6252E00680D02 /* eas_hostmm.c in Sources */,
|
||||
3DC1C7E114B6252E00680D02 /* eas_report.c in Sources */,
|
||||
3DC1C7E514B6252E00680D02 /* eas_wave.c in Sources */,
|
||||
3DC1C7F914B6252E00680D02 /* eas_chorus.c in Sources */,
|
||||
3DC1C7FA14B6252E00680D02 /* eas_chorusdata.c in Sources */,
|
||||
3DC1C7FD14B6252E00680D02 /* eas_data.c in Sources */,
|
||||
3DC1C80214B6252E00680D02 /* eas_flog.c in Sources */,
|
||||
3DC1C80314B6252E00680D02 /* eas_ima_tables.c in Sources */,
|
||||
3DC1C80414B6252E00680D02 /* eas_imaadpcm.c in Sources */,
|
||||
3DC1C80514B6252E00680D02 /* eas_imelody.c in Sources */,
|
||||
3DC1C80614B6252E00680D02 /* eas_imelodydata.c in Sources */,
|
||||
3DC1C80814B6252E00680D02 /* eas_math.c in Sources */,
|
||||
3DC1C80C14B6252E00680D02 /* eas_midi.c in Sources */,
|
||||
3DC1C80F14B6252E00680D02 /* eas_mididata.c in Sources */,
|
||||
3DC1C81114B6252E00680D02 /* eas_mixbuf.c in Sources */,
|
||||
3DC1C81214B6252E00680D02 /* eas_mixer.c in Sources */,
|
||||
3DC1C81414B6252E00680D02 /* eas_ota.c in Sources */,
|
||||
3DC1C81514B6252E00680D02 /* eas_otadata.c in Sources */,
|
||||
3DC1C81714B6252E00680D02 /* eas_pan.c in Sources */,
|
||||
3DC1C81A14B6252E00680D02 /* eas_pcm.c in Sources */,
|
||||
3DC1C81C14B6252E00680D02 /* eas_pcmdata.c in Sources */,
|
||||
3DC1C81E14B6252E00680D02 /* eas_public.c in Sources */,
|
||||
3DC1C81F14B6252E00680D02 /* eas_reverb.c in Sources */,
|
||||
3DC1C82014B6252E00680D02 /* eas_reverbdata.c in Sources */,
|
||||
3DC1C82214B6252E00680D02 /* eas_rtttl.c in Sources */,
|
||||
3DC1C82314B6252E00680D02 /* eas_rtttldata.c in Sources */,
|
||||
3DC1C82514B6252E00680D02 /* eas_smf.c in Sources */,
|
||||
3DC1C82714B6252E00680D02 /* eas_smfdata.c in Sources */,
|
||||
3DC1C82D14B6252E00680D02 /* eas_tcdata.c in Sources */,
|
||||
3DC1C82F14B6252E00680D02 /* eas_tonecontrol.c in Sources */,
|
||||
3DC1C83114B6252E00680D02 /* eas_voicemgt.c in Sources */,
|
||||
3DC1C83214B6252E00680D02 /* eas_wavefile.c in Sources */,
|
||||
3DC1C83414B6252E00680D02 /* eas_wavefiledata.c in Sources */,
|
||||
3DC1C83614B6252E00680D02 /* eas_wtengine.c in Sources */,
|
||||
3DC1C83814B6252E00680D02 /* eas_wtsynth.c in Sources */,
|
||||
3DC1C84014B6252E00680D02 /* wt_22khz.c in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
3DC1C5E114B624ED00680D02 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
_DEBUG,
|
||||
_SAMPLE_RATE_22050,
|
||||
EAS_WT_SYNTH,
|
||||
_8_BIT_SAMPLES,
|
||||
_REVERB_ENABLED,
|
||||
_CHORUS_ENABLED,
|
||||
_FILTER_ENABLED,
|
||||
"MAX_SYNTH_VOICES=32",
|
||||
"NUM_OUTPUT_CHANNELS=2",
|
||||
UNIFIED_DEBUG_MESSAGES,
|
||||
);
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||
GCC_THUMB_SUPPORT = NO;
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 3.0;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
USER_HEADER_SEARCH_PATHS = "../../embeddedaudiosynthesis/arm-wt-22k";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
3DC1C5E214B624ED00680D02 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
COPY_PHASE_STRIP = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
_DEBUG,
|
||||
_SAMPLE_RATE_22050,
|
||||
EAS_WT_SYNTH,
|
||||
_8_BIT_SAMPLES,
|
||||
_REVERB_ENABLED,
|
||||
_CHORUS_ENABLED,
|
||||
_FILTER_ENABLED,
|
||||
"MAX_SYNTH_VOICES=32",
|
||||
"NUM_OUTPUT_CHANNELS=2",
|
||||
UNIFIED_DEBUG_MESSAGES,
|
||||
);
|
||||
GCC_THUMB_SUPPORT = NO;
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 3.0;
|
||||
SDKROOT = iphoneos;
|
||||
USER_HEADER_SEARCH_PATHS = "../../embeddedaudiosynthesis/arm-wt-22k";
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
3DC1C5E414B624ED00680D02 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
DSTROOT = /tmp/EmbeddedAudioSynthesis.dst;
|
||||
GCC_VERSION = "";
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"\"$(SRCROOT)/../../embeddedaudiosynthesis/arm-fm-22k/lib\"",
|
||||
"\"$(SRCROOT)/../../embeddedaudiosynthesis/arm-hybrid-22k/lib\"",
|
||||
"\"$(SRCROOT)/../../embeddedaudiosynthesis/arm-wt-22k/lib\"",
|
||||
);
|
||||
OTHER_LDFLAGS = "-ObjC";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
3DC1C5E514B624ED00680D02 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
DSTROOT = /tmp/EmbeddedAudioSynthesis.dst;
|
||||
GCC_VERSION = "";
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"\"$(SRCROOT)/../../embeddedaudiosynthesis/arm-fm-22k/lib\"",
|
||||
"\"$(SRCROOT)/../../embeddedaudiosynthesis/arm-hybrid-22k/lib\"",
|
||||
"\"$(SRCROOT)/../../embeddedaudiosynthesis/arm-wt-22k/lib\"",
|
||||
);
|
||||
OTHER_LDFLAGS = "-ObjC";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
3DC1C5D014B624ED00680D02 /* Build configuration list for PBXProject "EmbeddedAudioSynthesis" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
3DC1C5E114B624ED00680D02 /* Debug */,
|
||||
3DC1C5E214B624ED00680D02 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
3DC1C5E314B624ED00680D02 /* Build configuration list for PBXNativeTarget "EmbeddedAudioSynthesis" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
3DC1C5E414B624ED00680D02 /* Debug */,
|
||||
3DC1C5E514B624ED00680D02 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 3DC1C5CD14B624ED00680D02 /* Project object */;
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0500"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "3DC1C5D514B624ED00680D02"
|
||||
BuildableName = "libEmbeddedAudioSynthesis.a"
|
||||
BlueprintName = "EmbeddedAudioSynthesis"
|
||||
ReferencedContainer = "container:EmbeddedAudioSynthesis.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
buildConfiguration = "Debug">
|
||||
<Testables>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Debug"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
allowLocationSimulation = "YES">
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Release"
|
||||
debugDocumentVersioning = "YES">
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>EmbeddedAudioSynthesis.xcscheme</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>4</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
<dict>
|
||||
<key>3DC1C5D514B624ED00680D02</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "3DC1C5D514B624ED00680D02"
|
||||
BuildableName = "libEmbeddedAudioSynthesis.a"
|
||||
BlueprintName = "EmbeddedAudioSynthesis"
|
||||
ReferencedContainer = "container:EmbeddedAudioSynthesis.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
buildConfiguration = "Debug">
|
||||
<Testables>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Debug"
|
||||
debugDocumentVersioning = "YES"
|
||||
allowLocationSimulation = "YES">
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Release"
|
||||
debugDocumentVersioning = "YES">
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>EmbeddedAudioSynthesis.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>5</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
<dict>
|
||||
<key>3DC1C5D514B624ED00680D02</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "3DC1C5D514B624ED00680D02"
|
||||
BuildableName = "libEmbeddedAudioSynthesis.a"
|
||||
BlueprintName = "EmbeddedAudioSynthesis"
|
||||
ReferencedContainer = "container:EmbeddedAudioSynthesis.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
buildConfiguration = "Debug">
|
||||
<Testables>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Debug"
|
||||
debugDocumentVersioning = "YES"
|
||||
allowLocationSimulation = "YES">
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Release"
|
||||
debugDocumentVersioning = "YES">
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>EmbeddedAudioSynthesis.xcscheme</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>5</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
<dict>
|
||||
<key>3DC1C5D514B624ED00680D02</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
604
common/ios/doomengine.xcodeproj/project.pbxproj
Executable file
604
common/ios/doomengine.xcodeproj/project.pbxproj
Executable file
@@ -0,0 +1,604 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 46;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
3D15600C14B51250000D33AA /* libtess.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D155FD614B51128000D33AA /* libtess.a */; };
|
||||
3D2B137714BFB57E00C8D221 /* iphone_loop.c in Sources */ = {isa = PBXBuildFile; fileRef = 3D2B137614BFB57E00C8D221 /* iphone_loop.c */; };
|
||||
3D2EC246148EBA8300273241 /* EASGlue.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D2EC244148EBA8300273241 /* EASGlue.h */; };
|
||||
3D2EC247148EBA8300273241 /* EASGlue.c in Sources */ = {isa = PBXBuildFile; fileRef = 3D2EC245148EBA8300273241 /* EASGlue.c */; };
|
||||
3D460D2914BCA5430078262C /* iphone_async.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D460D2814BCA5430078262C /* iphone_async.cpp */; };
|
||||
3D460D4F14BCFBD40078262C /* iphone_glViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3D460D4E14BCFBD40078262C /* iphone_glViewController.mm */; };
|
||||
3D5BB94A14B79BFE00A9A7FB /* DoomGameCenterMatch.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D5BB94814B79BFE00A9A7FB /* DoomGameCenterMatch.h */; };
|
||||
3D5BB94B14B79BFE00A9A7FB /* DoomGameCenterMatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D5BB94914B79BFE00A9A7FB /* DoomGameCenterMatch.cpp */; };
|
||||
3D7D555D14D1C53A00A0F1FF /* iphone_start.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D7D555C14D1C53900A0F1FF /* iphone_start.cpp */; };
|
||||
3D80889A1492E2E8002D6CC3 /* iphone_common.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3D8088991492E2E7002D6CC3 /* iphone_common.mm */; };
|
||||
3D80889C1492E378002D6CC3 /* iphone_common.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D80889B1492E378002D6CC3 /* iphone_common.h */; };
|
||||
3DC1C84814B627E600680D02 /* libEmbeddedAudioSynthesis.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DC1C5EB14B624EE00680D02 /* libEmbeddedAudioSynthesis.a */; };
|
||||
3DC1CAF814B641CC00680D02 /* libprboom.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DC1C86A14B63E1C00680D02 /* libprboom.a */; };
|
||||
3DDA6FCE148D765100C834C7 /* SDL_Mixer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DDA6FCD148D765100C834C7 /* SDL_Mixer.h */; };
|
||||
3DDA6FD1148DA2C800C834C7 /* SDL_Mixer.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DDA6FD0148DA2C800C834C7 /* SDL_Mixer.m */; };
|
||||
3DE6943D1489AFDE0049CAA4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DE6943C1489AFDE0049CAA4 /* Foundation.framework */; };
|
||||
3DE6946D1489B0850049CAA4 /* arialGlyphRects.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DE6944E1489B0850049CAA4 /* arialGlyphRects.h */; };
|
||||
3DE6946F1489B0850049CAA4 /* cmd.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DE694501489B0850049CAA4 /* cmd.c */; };
|
||||
3DE694701489B0850049CAA4 /* cvar.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DE694511489B0850049CAA4 /* cvar.c */; };
|
||||
3DE694711489B0850049CAA4 /* cvar.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DE694521489B0850049CAA4 /* cvar.h */; };
|
||||
3DE694731489B0850049CAA4 /* doomiphone.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DE694541489B0850049CAA4 /* doomiphone.h */; };
|
||||
3DE694741489B0850049CAA4 /* EAGLView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DE694551489B0850049CAA4 /* EAGLView.h */; };
|
||||
3DE694751489B0850049CAA4 /* EAGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DE694561489B0850049CAA4 /* EAGLView.m */; };
|
||||
3DE694761489B0850049CAA4 /* gles_glue.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DE694571489B0850049CAA4 /* gles_glue.c */; };
|
||||
3DE694771489B0850049CAA4 /* gles_glue.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DE694581489B0850049CAA4 /* gles_glue.h */; };
|
||||
3DE694781489B0850049CAA4 /* ipak.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DE694591489B0850049CAA4 /* ipak.c */; };
|
||||
3DE694791489B0850049CAA4 /* ipak.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DE6945A1489B0850049CAA4 /* ipak.h */; };
|
||||
3DE6947A1489B0850049CAA4 /* iphone_doom.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DE6945B1489B0850049CAA4 /* iphone_doom.h */; };
|
||||
3DE6947B1489B0850049CAA4 /* iphone_email.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DE6945C1489B0850049CAA4 /* iphone_email.h */; };
|
||||
3DE6947C1489B0850049CAA4 /* iphone_email.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DE6945D1489B0850049CAA4 /* iphone_email.m */; };
|
||||
3DE6947D1489B0850049CAA4 /* iphone_main.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DE6945E1489B0850049CAA4 /* iphone_main.c */; };
|
||||
3DE6947E1489B0850049CAA4 /* iphone_mapSelect.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DE6945F1489B0850049CAA4 /* iphone_mapSelect.c */; };
|
||||
3DE694851489B0850049CAA4 /* misc.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DE694661489B0850049CAA4 /* misc.c */; };
|
||||
3DE694861489B0850049CAA4 /* misc.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DE694671489B0850049CAA4 /* misc.h */; };
|
||||
3DE694871489B0850049CAA4 /* prboomInterface.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DE694681489B0850049CAA4 /* prboomInterface.c */; };
|
||||
3DE694881489B0850049CAA4 /* SoundEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3DE694691489B0850049CAA4 /* SoundEngine.cpp */; };
|
||||
3DE694891489B0850049CAA4 /* SoundEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DE6946A1489B0850049CAA4 /* SoundEngine.h */; };
|
||||
3DE69620148C28810049CAA4 /* iphone_render.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DE6961F148C28810049CAA4 /* iphone_render.c */; };
|
||||
3DF31FB0148C3A3600C66CD7 /* hud.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DF31FAF148C3A3600C66CD7 /* hud.c */; };
|
||||
3DF31FB4148C3B5100C66CD7 /* iphone_sound.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DF31FB3148C3B5100C66CD7 /* iphone_sound.c */; };
|
||||
C82EE118149958A0003B9C74 /* BackgroundMusic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C82EE117149958A0003B9C74 /* BackgroundMusic.cpp */; };
|
||||
C86CA85814B4F3C40057FF54 /* iphone_delegate.h in Headers */ = {isa = PBXBuildFile; fileRef = C86CA85214B4F3C40057FF54 /* iphone_delegate.h */; };
|
||||
C86CA85914B4F3C40057FF54 /* iphone_delegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = C86CA85314B4F3C40057FF54 /* iphone_delegate.mm */; };
|
||||
C86CA85A14B4F3C40057FF54 /* iphone_glViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = C86CA85414B4F3C40057FF54 /* iphone_glViewController.h */; };
|
||||
C8DB8AD014BDFBE80006467C /* iphone_sys.mm in Sources */ = {isa = PBXBuildFile; fileRef = C8DB8ACF14BDFBE80006467C /* iphone_sys.mm */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
1391CE121882E50B0049671C /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 1391CE0E1882E50A0049671C /* idmobilelib.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 3D80884714928766002D6CC3;
|
||||
remoteInfo = idmobilelib;
|
||||
};
|
||||
3D155FD514B51128000D33AA /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 3D155FD114B51127000D33AA /* tess.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 3D155FC114B51127000D33AA;
|
||||
remoteInfo = tess;
|
||||
};
|
||||
3D15600A14B511BB000D33AA /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 3D155FD114B51127000D33AA /* tess.xcodeproj */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 3D155FC014B51127000D33AA;
|
||||
remoteInfo = tess;
|
||||
};
|
||||
3DC1C5EA14B624EE00680D02 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 3DC1C5E614B624ED00680D02 /* EmbeddedAudioSynthesis.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 3DC1C5D614B624ED00680D02;
|
||||
remoteInfo = EmbeddedAudioSynthesis;
|
||||
};
|
||||
3DC1C86914B63E1C00680D02 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 3DC1C86514B63E1B00680D02 /* prboom.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = 3DC1C85514B63E1B00680D02;
|
||||
remoteInfo = prboom;
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
1391CE0E1882E50A0049671C /* idmobilelib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = idmobilelib.xcodeproj; path = ../idmobilelib/ios/idmobilelib.xcodeproj; sourceTree = "<group>"; };
|
||||
3D155FD114B51127000D33AA /* tess.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = tess.xcodeproj; path = tess/tess.xcodeproj; sourceTree = "<group>"; };
|
||||
3D2B137614BFB57E00C8D221 /* iphone_loop.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = iphone_loop.c; sourceTree = "<group>"; };
|
||||
3D2EC244148EBA8300273241 /* EASGlue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EASGlue.h; sourceTree = "<group>"; };
|
||||
3D2EC245148EBA8300273241 /* EASGlue.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = EASGlue.c; sourceTree = "<group>"; };
|
||||
3D460D2814BCA5430078262C /* iphone_async.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = iphone_async.cpp; sourceTree = "<group>"; };
|
||||
3D460D4E14BCFBD40078262C /* iphone_glViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = iphone_glViewController.mm; sourceTree = "<group>"; };
|
||||
3D5BB94814B79BFE00A9A7FB /* DoomGameCenterMatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DoomGameCenterMatch.h; sourceTree = "<group>"; };
|
||||
3D5BB94914B79BFE00A9A7FB /* DoomGameCenterMatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DoomGameCenterMatch.cpp; sourceTree = "<group>"; };
|
||||
3D7D555C14D1C53900A0F1FF /* iphone_start.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = iphone_start.cpp; sourceTree = "<group>"; };
|
||||
3D8088991492E2E7002D6CC3 /* iphone_common.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = iphone_common.mm; sourceTree = "<group>"; };
|
||||
3D80889B1492E378002D6CC3 /* iphone_common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iphone_common.h; sourceTree = "<group>"; };
|
||||
3DC1C5E614B624ED00680D02 /* EmbeddedAudioSynthesis.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = EmbeddedAudioSynthesis.xcodeproj; path = EmbeddedAudioSynthesis/EmbeddedAudioSynthesis.xcodeproj; sourceTree = "<group>"; };
|
||||
3DC1C86514B63E1B00680D02 /* prboom.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = prboom.xcodeproj; path = prboom/prboom.xcodeproj; sourceTree = "<group>"; };
|
||||
3DDA6FCD148D765100C834C7 /* SDL_Mixer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_Mixer.h; path = ../SDL_shim/SDL_Mixer.h; sourceTree = "<group>"; };
|
||||
3DDA6FD0148DA2C800C834C7 /* SDL_Mixer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SDL_Mixer.m; path = ../SDL_shim/ios/SDL_Mixer.m; sourceTree = "<group>"; };
|
||||
3DE694391489AFDE0049CAA4 /* libdoomengine.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libdoomengine.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
3DE6943C1489AFDE0049CAA4 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||
3DE6944E1489B0850049CAA4 /* arialGlyphRects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = arialGlyphRects.h; sourceTree = "<group>"; };
|
||||
3DE694501489B0850049CAA4 /* cmd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmd.c; sourceTree = "<group>"; };
|
||||
3DE694511489B0850049CAA4 /* cvar.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cvar.c; sourceTree = "<group>"; };
|
||||
3DE694521489B0850049CAA4 /* cvar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cvar.h; sourceTree = "<group>"; };
|
||||
3DE694541489B0850049CAA4 /* doomiphone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = doomiphone.h; sourceTree = "<group>"; };
|
||||
3DE694551489B0850049CAA4 /* EAGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EAGLView.h; sourceTree = "<group>"; };
|
||||
3DE694561489B0850049CAA4 /* EAGLView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EAGLView.m; sourceTree = "<group>"; };
|
||||
3DE694571489B0850049CAA4 /* gles_glue.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = gles_glue.c; sourceTree = "<group>"; };
|
||||
3DE694581489B0850049CAA4 /* gles_glue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gles_glue.h; sourceTree = "<group>"; };
|
||||
3DE694591489B0850049CAA4 /* ipak.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ipak.c; sourceTree = "<group>"; };
|
||||
3DE6945A1489B0850049CAA4 /* ipak.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ipak.h; sourceTree = "<group>"; };
|
||||
3DE6945B1489B0850049CAA4 /* iphone_doom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iphone_doom.h; sourceTree = "<group>"; };
|
||||
3DE6945C1489B0850049CAA4 /* iphone_email.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iphone_email.h; sourceTree = "<group>"; };
|
||||
3DE6945D1489B0850049CAA4 /* iphone_email.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iphone_email.m; sourceTree = "<group>"; };
|
||||
3DE6945E1489B0850049CAA4 /* iphone_main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = iphone_main.c; sourceTree = "<group>"; };
|
||||
3DE6945F1489B0850049CAA4 /* iphone_mapSelect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = iphone_mapSelect.c; sourceTree = "<group>"; };
|
||||
3DE694661489B0850049CAA4 /* misc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = misc.c; sourceTree = "<group>"; };
|
||||
3DE694671489B0850049CAA4 /* misc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = misc.h; sourceTree = "<group>"; };
|
||||
3DE694681489B0850049CAA4 /* prboomInterface.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = prboomInterface.c; sourceTree = "<group>"; };
|
||||
3DE694691489B0850049CAA4 /* SoundEngine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SoundEngine.cpp; sourceTree = "<group>"; };
|
||||
3DE6946A1489B0850049CAA4 /* SoundEngine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SoundEngine.h; sourceTree = "<group>"; };
|
||||
3DE6961F148C28810049CAA4 /* iphone_render.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = iphone_render.c; sourceTree = "<group>"; };
|
||||
3DF31FAF148C3A3600C66CD7 /* hud.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hud.c; sourceTree = "<group>"; };
|
||||
3DF31FB3148C3B5100C66CD7 /* iphone_sound.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = iphone_sound.c; sourceTree = "<group>"; };
|
||||
C82EE117149958A0003B9C74 /* BackgroundMusic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BackgroundMusic.cpp; sourceTree = "<group>"; };
|
||||
C86CA85214B4F3C40057FF54 /* iphone_delegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iphone_delegate.h; sourceTree = "<group>"; };
|
||||
C86CA85314B4F3C40057FF54 /* iphone_delegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = iphone_delegate.mm; sourceTree = "<group>"; };
|
||||
C86CA85414B4F3C40057FF54 /* iphone_glViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iphone_glViewController.h; sourceTree = "<group>"; };
|
||||
C8DB8ACF14BDFBE80006467C /* iphone_sys.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = iphone_sys.mm; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
3DE694361489AFDE0049CAA4 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
3DC1CAF814B641CC00680D02 /* libprboom.a in Frameworks */,
|
||||
3DC1C84814B627E600680D02 /* libEmbeddedAudioSynthesis.a in Frameworks */,
|
||||
3D15600C14B51250000D33AA /* libtess.a in Frameworks */,
|
||||
3DE6943D1489AFDE0049CAA4 /* Foundation.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
1391CE0F1882E50A0049671C /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1391CE131882E50B0049671C /* libidmobilelib.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3D155FD214B51127000D33AA /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3D155FD614B51128000D33AA /* libtess.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3D2EC141148EB77900273241 /* embeddedaudiosynthesis */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3D2EC244148EBA8300273241 /* EASGlue.h */,
|
||||
3D2EC245148EBA8300273241 /* EASGlue.c */,
|
||||
);
|
||||
name = embeddedaudiosynthesis;
|
||||
path = ../embeddedaudiosynthesis;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3DC1C5E714B624ED00680D02 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3DC1C5EB14B624EE00680D02 /* libEmbeddedAudioSynthesis.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3DC1C86614B63E1B00680D02 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3DC1C86A14B63E1C00680D02 /* libprboom.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3DDA6FCC148D75DB00C834C7 /* SDL_shim */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3DDA6FCF148DA2B000C834C7 /* ios */,
|
||||
3DDA6FCD148D765100C834C7 /* SDL_Mixer.h */,
|
||||
);
|
||||
name = SDL_shim;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3DDA6FCF148DA2B000C834C7 /* ios */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3DDA6FD0148DA2C800C834C7 /* SDL_Mixer.m */,
|
||||
);
|
||||
name = ios;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3DE6942E1489AFDE0049CAA4 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
1391CE0E1882E50A0049671C /* idmobilelib.xcodeproj */,
|
||||
3DC1C86514B63E1B00680D02 /* prboom.xcodeproj */,
|
||||
3DC1C5E614B624ED00680D02 /* EmbeddedAudioSynthesis.xcodeproj */,
|
||||
3D155FD114B51127000D33AA /* tess.xcodeproj */,
|
||||
3D2EC141148EB77900273241 /* embeddedaudiosynthesis */,
|
||||
3DDA6FCC148D75DB00C834C7 /* SDL_shim */,
|
||||
3DE6943E1489AFDE0049CAA4 /* doomengine */,
|
||||
3DE6943B1489AFDE0049CAA4 /* Frameworks */,
|
||||
3DE6943A1489AFDE0049CAA4 /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3DE6943A1489AFDE0049CAA4 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3DE694391489AFDE0049CAA4 /* libdoomengine.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3DE6943B1489AFDE0049CAA4 /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3DE6943C1489AFDE0049CAA4 /* Foundation.framework */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3DE6943E1489AFDE0049CAA4 /* doomengine */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C8DB8ACF14BDFBE80006467C /* iphone_sys.mm */,
|
||||
C86CA85214B4F3C40057FF54 /* iphone_delegate.h */,
|
||||
C86CA85314B4F3C40057FF54 /* iphone_delegate.mm */,
|
||||
C86CA85414B4F3C40057FF54 /* iphone_glViewController.h */,
|
||||
C82EE117149958A0003B9C74 /* BackgroundMusic.cpp */,
|
||||
3DE6944E1489B0850049CAA4 /* arialGlyphRects.h */,
|
||||
3DE694501489B0850049CAA4 /* cmd.c */,
|
||||
3DE694511489B0850049CAA4 /* cvar.c */,
|
||||
3DE694521489B0850049CAA4 /* cvar.h */,
|
||||
3DE694541489B0850049CAA4 /* doomiphone.h */,
|
||||
3DE694551489B0850049CAA4 /* EAGLView.h */,
|
||||
3DE694561489B0850049CAA4 /* EAGLView.m */,
|
||||
3DE694571489B0850049CAA4 /* gles_glue.c */,
|
||||
3DE694581489B0850049CAA4 /* gles_glue.h */,
|
||||
3DF31FAF148C3A3600C66CD7 /* hud.c */,
|
||||
3DE694591489B0850049CAA4 /* ipak.c */,
|
||||
3DE6945A1489B0850049CAA4 /* ipak.h */,
|
||||
3D460D2814BCA5430078262C /* iphone_async.cpp */,
|
||||
3D80889B1492E378002D6CC3 /* iphone_common.h */,
|
||||
3D8088991492E2E7002D6CC3 /* iphone_common.mm */,
|
||||
3DE6945B1489B0850049CAA4 /* iphone_doom.h */,
|
||||
3DE6945C1489B0850049CAA4 /* iphone_email.h */,
|
||||
3DE6945D1489B0850049CAA4 /* iphone_email.m */,
|
||||
3D460D4E14BCFBD40078262C /* iphone_glViewController.mm */,
|
||||
3D2B137614BFB57E00C8D221 /* iphone_loop.c */,
|
||||
3DE6945E1489B0850049CAA4 /* iphone_main.c */,
|
||||
3DE6945F1489B0850049CAA4 /* iphone_mapSelect.c */,
|
||||
3DE6961F148C28810049CAA4 /* iphone_render.c */,
|
||||
3D7D555C14D1C53900A0F1FF /* iphone_start.cpp */,
|
||||
3DF31FB3148C3B5100C66CD7 /* iphone_sound.c */,
|
||||
3DE694661489B0850049CAA4 /* misc.c */,
|
||||
3DE694671489B0850049CAA4 /* misc.h */,
|
||||
3DE694681489B0850049CAA4 /* prboomInterface.c */,
|
||||
3DE694691489B0850049CAA4 /* SoundEngine.cpp */,
|
||||
3DE6946A1489B0850049CAA4 /* SoundEngine.h */,
|
||||
3D5BB94814B79BFE00A9A7FB /* DoomGameCenterMatch.h */,
|
||||
3D5BB94914B79BFE00A9A7FB /* DoomGameCenterMatch.cpp */,
|
||||
);
|
||||
path = doomengine;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXHeadersBuildPhase section */
|
||||
3DE694371489AFDE0049CAA4 /* Headers */ = {
|
||||
isa = PBXHeadersBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
3DE6946D1489B0850049CAA4 /* arialGlyphRects.h in Headers */,
|
||||
3DE694711489B0850049CAA4 /* cvar.h in Headers */,
|
||||
3DE694731489B0850049CAA4 /* doomiphone.h in Headers */,
|
||||
3DE694741489B0850049CAA4 /* EAGLView.h in Headers */,
|
||||
3DE694771489B0850049CAA4 /* gles_glue.h in Headers */,
|
||||
3DE694791489B0850049CAA4 /* ipak.h in Headers */,
|
||||
3DE6947A1489B0850049CAA4 /* iphone_doom.h in Headers */,
|
||||
3DE6947B1489B0850049CAA4 /* iphone_email.h in Headers */,
|
||||
3DE694861489B0850049CAA4 /* misc.h in Headers */,
|
||||
3DE694891489B0850049CAA4 /* SoundEngine.h in Headers */,
|
||||
3DDA6FCE148D765100C834C7 /* SDL_Mixer.h in Headers */,
|
||||
3D2EC246148EBA8300273241 /* EASGlue.h in Headers */,
|
||||
3D80889C1492E378002D6CC3 /* iphone_common.h in Headers */,
|
||||
C86CA85814B4F3C40057FF54 /* iphone_delegate.h in Headers */,
|
||||
C86CA85A14B4F3C40057FF54 /* iphone_glViewController.h in Headers */,
|
||||
3D5BB94A14B79BFE00A9A7FB /* DoomGameCenterMatch.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXHeadersBuildPhase section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
3DE694381489AFDE0049CAA4 /* doomengine */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 3DE694461489AFDE0049CAA4 /* Build configuration list for PBXNativeTarget "doomengine" */;
|
||||
buildPhases = (
|
||||
3DE694351489AFDE0049CAA4 /* Sources */,
|
||||
3DE694361489AFDE0049CAA4 /* Frameworks */,
|
||||
3DE694371489AFDE0049CAA4 /* Headers */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
3D15600B14B511BB000D33AA /* PBXTargetDependency */,
|
||||
);
|
||||
name = doomengine;
|
||||
productName = doomengine;
|
||||
productReference = 3DE694391489AFDE0049CAA4 /* libdoomengine.a */;
|
||||
productType = "com.apple.product-type.library.static";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
3DE694301489AFDE0049CAA4 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0500;
|
||||
};
|
||||
buildConfigurationList = 3DE694331489AFDE0049CAA4 /* Build configuration list for PBXProject "doomengine" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
);
|
||||
mainGroup = 3DE6942E1489AFDE0049CAA4;
|
||||
productRefGroup = 3DE6943A1489AFDE0049CAA4 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectReferences = (
|
||||
{
|
||||
ProductGroup = 3DC1C5E714B624ED00680D02 /* Products */;
|
||||
ProjectRef = 3DC1C5E614B624ED00680D02 /* EmbeddedAudioSynthesis.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 1391CE0F1882E50A0049671C /* Products */;
|
||||
ProjectRef = 1391CE0E1882E50A0049671C /* idmobilelib.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 3DC1C86614B63E1B00680D02 /* Products */;
|
||||
ProjectRef = 3DC1C86514B63E1B00680D02 /* prboom.xcodeproj */;
|
||||
},
|
||||
{
|
||||
ProductGroup = 3D155FD214B51127000D33AA /* Products */;
|
||||
ProjectRef = 3D155FD114B51127000D33AA /* tess.xcodeproj */;
|
||||
},
|
||||
);
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
3DE694381489AFDE0049CAA4 /* doomengine */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXReferenceProxy section */
|
||||
1391CE131882E50B0049671C /* libidmobilelib.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libidmobilelib.a;
|
||||
remoteRef = 1391CE121882E50B0049671C /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
3D155FD614B51128000D33AA /* libtess.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libtess.a;
|
||||
remoteRef = 3D155FD514B51128000D33AA /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
3DC1C5EB14B624EE00680D02 /* libEmbeddedAudioSynthesis.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libEmbeddedAudioSynthesis.a;
|
||||
remoteRef = 3DC1C5EA14B624EE00680D02 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
3DC1C86A14B63E1C00680D02 /* libprboom.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
path = libprboom.a;
|
||||
remoteRef = 3DC1C86914B63E1C00680D02 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
/* End PBXReferenceProxy section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
3DE694351489AFDE0049CAA4 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
3DE6946F1489B0850049CAA4 /* cmd.c in Sources */,
|
||||
3DE694701489B0850049CAA4 /* cvar.c in Sources */,
|
||||
3DE694751489B0850049CAA4 /* EAGLView.m in Sources */,
|
||||
3DE694761489B0850049CAA4 /* gles_glue.c in Sources */,
|
||||
3DE694781489B0850049CAA4 /* ipak.c in Sources */,
|
||||
3DE6947C1489B0850049CAA4 /* iphone_email.m in Sources */,
|
||||
3DE6947D1489B0850049CAA4 /* iphone_main.c in Sources */,
|
||||
3DE6947E1489B0850049CAA4 /* iphone_mapSelect.c in Sources */,
|
||||
3DE694851489B0850049CAA4 /* misc.c in Sources */,
|
||||
3DE694871489B0850049CAA4 /* prboomInterface.c in Sources */,
|
||||
3DE694881489B0850049CAA4 /* SoundEngine.cpp in Sources */,
|
||||
3DE69620148C28810049CAA4 /* iphone_render.c in Sources */,
|
||||
3DF31FB0148C3A3600C66CD7 /* hud.c in Sources */,
|
||||
3DF31FB4148C3B5100C66CD7 /* iphone_sound.c in Sources */,
|
||||
3DDA6FD1148DA2C800C834C7 /* SDL_Mixer.m in Sources */,
|
||||
3D2EC247148EBA8300273241 /* EASGlue.c in Sources */,
|
||||
3D80889A1492E2E8002D6CC3 /* iphone_common.mm in Sources */,
|
||||
C82EE118149958A0003B9C74 /* BackgroundMusic.cpp in Sources */,
|
||||
C86CA85914B4F3C40057FF54 /* iphone_delegate.mm in Sources */,
|
||||
3D5BB94B14B79BFE00A9A7FB /* DoomGameCenterMatch.cpp in Sources */,
|
||||
3D460D2914BCA5430078262C /* iphone_async.cpp in Sources */,
|
||||
3D460D4F14BCFBD40078262C /* iphone_glViewController.mm in Sources */,
|
||||
C8DB8AD014BDFBE80006467C /* iphone_sys.mm in Sources */,
|
||||
3D2B137714BFB57E00C8D221 /* iphone_loop.c in Sources */,
|
||||
3D7D555D14D1C53A00A0F1FF /* iphone_start.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
3D15600B14B511BB000D33AA /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
name = tess;
|
||||
targetProxy = 3D15600A14B511BB000D33AA /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
3DE694441489AFDE0049CAA4 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_OBJCPP_ARC_ABI = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"$(inherited)",
|
||||
IPHONE,
|
||||
);
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
|
||||
GCC_THUMB_SUPPORT = NO;
|
||||
GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES;
|
||||
GCC_TREAT_WARNINGS_AS_ERRORS = YES;
|
||||
GCC_VERSION = "";
|
||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
||||
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;
|
||||
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES;
|
||||
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
||||
GCC_WARN_STRICT_SELECTOR_MATCH = YES;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNKNOWN_PRAGMAS = YES;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_LABEL = YES;
|
||||
GCC_WARN_UNUSED_PARAMETER = NO;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 3.2;
|
||||
ONLY_ACTIVE_ARCH = NO;
|
||||
SDKROOT = iphoneos;
|
||||
USER_HEADER_SEARCH_PATHS = "../embeddedaudiosynthesis/arm-wt-22k/host_src ../ ../../../idTechM/idTechM/shared/idmobilelib ../prboom";
|
||||
VALID_ARCHS = "armv7 armv7s";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
3DE694451489AFDE0049CAA4 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_OBJCPP_ARC_ABI = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES;
|
||||
COPY_PHASE_STRIP = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
IPHONE,
|
||||
NDEBUG,
|
||||
);
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
|
||||
GCC_THUMB_SUPPORT = NO;
|
||||
GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES;
|
||||
GCC_TREAT_WARNINGS_AS_ERRORS = YES;
|
||||
GCC_VERSION = "";
|
||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
||||
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;
|
||||
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES;
|
||||
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
|
||||
GCC_WARN_STRICT_SELECTOR_MATCH = YES;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = NO;
|
||||
GCC_WARN_UNKNOWN_PRAGMAS = YES;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_LABEL = YES;
|
||||
GCC_WARN_UNUSED_PARAMETER = NO;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 3.2;
|
||||
SDKROOT = iphoneos;
|
||||
USER_HEADER_SEARCH_PATHS = "../embeddedaudiosynthesis/arm-wt-22k/host_src ../ ../../../idTechM/idTechM/shared/idmobilelib ../prboom";
|
||||
VALIDATE_PRODUCT = YES;
|
||||
VALID_ARCHS = "armv7 armv7s";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
3DE694471489AFDE0049CAA4 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
DSTROOT = /tmp/doomengine.dst;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = NO;
|
||||
GCC_PREFIX_HEADER = "";
|
||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"\"$(SRCROOT)/../embeddedaudiosynthesis/arm-wt-22k/lib\"",
|
||||
);
|
||||
OTHER_LDFLAGS = "-ObjC";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
USER_HEADER_SEARCH_PATHS = "../embeddedaudiosynthesis/arm-wt-22k/host_src ../ ../idmobilelib ../prboom";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
3DE694481489AFDE0049CAA4 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
DSTROOT = /tmp/doomengine.dst;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = NO;
|
||||
GCC_PREFIX_HEADER = "";
|
||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"\"$(SRCROOT)/../embeddedaudiosynthesis/arm-wt-22k/lib\"",
|
||||
);
|
||||
OTHER_LDFLAGS = "-ObjC";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
USER_HEADER_SEARCH_PATHS = "../embeddedaudiosynthesis/arm-wt-22k/host_src ../ ../idmobilelib ../prboom";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
3DE694331489AFDE0049CAA4 /* Build configuration list for PBXProject "doomengine" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
3DE694441489AFDE0049CAA4 /* Debug */,
|
||||
3DE694451489AFDE0049CAA4 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
3DE694461489AFDE0049CAA4 /* Build configuration list for PBXNativeTarget "doomengine" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
3DE694471489AFDE0049CAA4 /* Debug */,
|
||||
3DE694481489AFDE0049CAA4 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 3DE694301489AFDE0049CAA4 /* Project object */;
|
||||
}
|
||||
7
common/ios/doomengine.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Executable file
7
common/ios/doomengine.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Executable file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:doomengine.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
BIN
common/ios/doomengine.xcodeproj/project.xcworkspace/xcuserdata/ryan.gerleve.xcuserdatad/UserInterfaceState.xcuserstate
generated
Executable file
BIN
common/ios/doomengine.xcodeproj/project.xcworkspace/xcuserdata/ryan.gerleve.xcuserdatad/UserInterfaceState.xcuserstate
generated
Executable file
Binary file not shown.
59
common/ios/doomengine.xcodeproj/xcshareddata/xcschemes/doomengine.xcscheme
Executable file
59
common/ios/doomengine.xcodeproj/xcshareddata/xcschemes/doomengine.xcscheme
Executable file
@@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0500"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "3DE694381489AFDE0049CAA4"
|
||||
BuildableName = "libdoomengine.a"
|
||||
BlueprintName = "doomengine"
|
||||
ReferencedContainer = "container:doomengine.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
buildConfiguration = "Debug">
|
||||
<Testables>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Debug"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
allowLocationSimulation = "YES">
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Release"
|
||||
debugDocumentVersioning = "YES">
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>doomengine.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
<dict>
|
||||
<key>3DE694381489AFDE0049CAA4</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>doomengine.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
<dict>
|
||||
<key>3DE694381489AFDE0049CAA4</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>doomengine.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
<dict>
|
||||
<key>3DE694381489AFDE0049CAA4</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
541
common/ios/doomengine/BackgroundMusic.cpp
Executable file
541
common/ios/doomengine/BackgroundMusic.cpp
Executable file
@@ -0,0 +1,541 @@
|
||||
/*
|
||||
* BackgroundMusic.cpp
|
||||
* doom
|
||||
*
|
||||
* Created by John Carmack on 5/15/09.
|
||||
* Copyright 2009 Id Software. All rights reserved.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
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.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
//==================================================================================================
|
||||
// Includes
|
||||
//==================================================================================================
|
||||
|
||||
// System Includes
|
||||
#include <AudioToolbox/AudioToolbox.h>
|
||||
#include <CoreFoundation/CFURL.h>
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include <pthread.h>
|
||||
#include <mach/mach.h>
|
||||
#include <string>
|
||||
|
||||
extern "C" {
|
||||
#include "doomiphone.h"
|
||||
}
|
||||
|
||||
enum {
|
||||
kSoundEngineErrUnitialized = 1,
|
||||
kSoundEngineErrInvalidID = 2,
|
||||
kSoundEngineErrFileNotFound = 3,
|
||||
kSoundEngineErrInvalidFileFormat = 4,
|
||||
kSoundEngineErrDeviceNotFound = 5
|
||||
};
|
||||
|
||||
|
||||
#define AssertNoError(inMessage, inHandler) \
|
||||
if(result != noErr) \
|
||||
{ \
|
||||
printf("%s: %d\n", inMessage, (int)result); \
|
||||
goto inHandler; \
|
||||
}
|
||||
|
||||
|
||||
#define kNumberBuffers 3
|
||||
|
||||
|
||||
static Float32 gMasterVolumeGain = 0.5f;
|
||||
|
||||
|
||||
//==================================================================================================
|
||||
// Helper functions
|
||||
//==================================================================================================
|
||||
|
||||
OSStatus LoadFileDataInfo(const char *inFilePath, AudioFileID &outAFID, AudioStreamBasicDescription &outFormat, UInt64 &outDataSize)
|
||||
{
|
||||
UInt32 thePropSize;
|
||||
|
||||
CFURLRef theURL = CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, (UInt8*)inFilePath, strlen(inFilePath), false);
|
||||
if (theURL == NULL)
|
||||
return kSoundEngineErrFileNotFound;
|
||||
|
||||
OSStatus result = AudioFileOpenURL(theURL, kAudioFileReadPermission, 0, &outAFID);
|
||||
CFRelease(theURL);
|
||||
AssertNoError("Error opening file", end);
|
||||
|
||||
thePropSize = sizeof(outFormat);
|
||||
result = AudioFileGetProperty(outAFID, kAudioFilePropertyDataFormat, &thePropSize, &outFormat);
|
||||
AssertNoError("Error getting file format", end);
|
||||
|
||||
thePropSize = sizeof(UInt64);
|
||||
result = AudioFileGetProperty(outAFID, kAudioFilePropertyAudioDataByteCount, &thePropSize, &outDataSize);
|
||||
AssertNoError("Error getting file data size", end);
|
||||
|
||||
end:
|
||||
return result;
|
||||
}
|
||||
|
||||
void CalculateBytesForTime (AudioStreamBasicDescription & inDesc, UInt32 inMaxPacketSize, Float64 inSeconds, UInt32 *outBufferSize, UInt32 *outNumPackets)
|
||||
{
|
||||
static const UInt32 maxBufferSize = 0x10000; // limit size to 64K
|
||||
static const UInt32 minBufferSize = 0x4000; // limit size to 16K
|
||||
|
||||
if (inDesc.mFramesPerPacket) {
|
||||
Float64 numPacketsForTime = inDesc.mSampleRate / inDesc.mFramesPerPacket * inSeconds;
|
||||
*outBufferSize = (long unsigned int)numPacketsForTime * inMaxPacketSize;
|
||||
} else {
|
||||
// if frames per packet is zero, then the codec has no predictable packet == time
|
||||
// so we can't tailor this (we don't know how many Packets represent a time period
|
||||
// we'll just return a default buffer size
|
||||
*outBufferSize = maxBufferSize > inMaxPacketSize ? maxBufferSize : inMaxPacketSize;
|
||||
}
|
||||
|
||||
// we're going to limit our size to our default
|
||||
if (*outBufferSize > maxBufferSize && *outBufferSize > inMaxPacketSize)
|
||||
*outBufferSize = maxBufferSize;
|
||||
else {
|
||||
// also make sure we're not too small - we don't want to go the disk for too small chunks
|
||||
if (*outBufferSize < minBufferSize)
|
||||
*outBufferSize = minBufferSize;
|
||||
}
|
||||
*outNumPackets = *outBufferSize / inMaxPacketSize;
|
||||
}
|
||||
|
||||
static Boolean MatchFormatFlags(const AudioStreamBasicDescription& x, const AudioStreamBasicDescription& y)
|
||||
{
|
||||
UInt32 xFlags = x.mFormatFlags;
|
||||
UInt32 yFlags = y.mFormatFlags;
|
||||
|
||||
// match wildcards
|
||||
if (x.mFormatID == 0 || y.mFormatID == 0 || xFlags == 0 || yFlags == 0)
|
||||
return true;
|
||||
|
||||
if (x.mFormatID == kAudioFormatLinearPCM)
|
||||
{
|
||||
// knock off the all clear flag
|
||||
xFlags = xFlags & ~kAudioFormatFlagsAreAllClear;
|
||||
yFlags = yFlags & ~kAudioFormatFlagsAreAllClear;
|
||||
|
||||
// if both kAudioFormatFlagIsPacked bits are set, then we don't care about the kAudioFormatFlagIsAlignedHigh bit.
|
||||
if (xFlags & yFlags & kAudioFormatFlagIsPacked) {
|
||||
xFlags = xFlags & ~kAudioFormatFlagIsAlignedHigh;
|
||||
yFlags = yFlags & ~kAudioFormatFlagIsAlignedHigh;
|
||||
}
|
||||
|
||||
// if both kAudioFormatFlagIsFloat bits are set, then we don't care about the kAudioFormatFlagIsSignedInteger bit.
|
||||
if (xFlags & yFlags & kAudioFormatFlagIsFloat) {
|
||||
xFlags = xFlags & ~kAudioFormatFlagIsSignedInteger;
|
||||
yFlags = yFlags & ~kAudioFormatFlagIsSignedInteger;
|
||||
}
|
||||
|
||||
// if the bit depth is 8 bits or less and the format is packed, we don't care about endianness
|
||||
if((x.mBitsPerChannel <= 8) && ((xFlags & kAudioFormatFlagIsPacked) == kAudioFormatFlagIsPacked))
|
||||
{
|
||||
xFlags = xFlags & ~kAudioFormatFlagIsBigEndian;
|
||||
}
|
||||
if((y.mBitsPerChannel <= 8) && ((yFlags & kAudioFormatFlagIsPacked) == kAudioFormatFlagIsPacked))
|
||||
{
|
||||
yFlags = yFlags & ~kAudioFormatFlagIsBigEndian;
|
||||
}
|
||||
|
||||
// if the number of channels is 0 or 1, we don't care about non-interleavedness
|
||||
if (x.mChannelsPerFrame <= 1 && y.mChannelsPerFrame <= 1) {
|
||||
xFlags &= ~kLinearPCMFormatFlagIsNonInterleaved;
|
||||
yFlags &= ~kLinearPCMFormatFlagIsNonInterleaved;
|
||||
}
|
||||
}
|
||||
return xFlags == yFlags;
|
||||
}
|
||||
|
||||
Boolean FormatIsEqual(AudioStreamBasicDescription x, AudioStreamBasicDescription y)
|
||||
{
|
||||
// the semantics for equality are:
|
||||
// 1) Values must match exactly
|
||||
// 2) wildcard's are ignored in the comparison
|
||||
|
||||
#define MATCH(name) ((x.name) == 0 || (y.name) == 0 || (x.name) == (y.name))
|
||||
|
||||
return
|
||||
((x.mSampleRate==0.) || (y.mSampleRate==0.) || (x.mSampleRate==y.mSampleRate))
|
||||
&& MATCH(mFormatID)
|
||||
&& MatchFormatFlags(x, y)
|
||||
&& MATCH(mBytesPerPacket)
|
||||
&& MATCH(mFramesPerPacket)
|
||||
&& MATCH(mBytesPerFrame)
|
||||
&& MATCH(mChannelsPerFrame)
|
||||
&& MATCH(mBitsPerChannel) ;
|
||||
}
|
||||
|
||||
#pragma mark ***** BackgroundTrackMgr *****
|
||||
//==================================================================================================
|
||||
// BackgroundTrackMgr class
|
||||
//==================================================================================================
|
||||
typedef struct BG_FileInfo {
|
||||
std::string mFilePath;
|
||||
AudioFileID mAFID;
|
||||
AudioStreamBasicDescription mFileFormat;
|
||||
UInt64 mFileDataSize;
|
||||
//UInt64 mFileNumPackets; // this is only used if loading file to memory
|
||||
Boolean mLoadAtOnce;
|
||||
Boolean mFileDataInQueue;
|
||||
} BackgroundMusicFileInfo;
|
||||
|
||||
class BackgroundTrackMgr
|
||||
{
|
||||
public:
|
||||
BackgroundTrackMgr();
|
||||
~BackgroundTrackMgr();
|
||||
|
||||
void Teardown();
|
||||
|
||||
static void QueueCallback( void * inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inCompleteAQBuffer);
|
||||
|
||||
OSStatus SetupQueue(BG_FileInfo *inFileInfo);
|
||||
OSStatus SetupBuffers(BG_FileInfo *inFileInfo);
|
||||
OSStatus LoadTrack(const char* inFilePath, Boolean inAddToQueue, Boolean inLoadAtOnce);
|
||||
|
||||
OSStatus SetVolume(Float32 inVolume);
|
||||
Float32 GetVolume() const;
|
||||
|
||||
OSStatus Start();
|
||||
OSStatus Stop(Boolean inStopAtEnd);
|
||||
|
||||
AudioQueueRef mQueue;
|
||||
AudioQueueBufferRef mBuffers[kNumberBuffers];
|
||||
UInt32 mBufferByteSize;
|
||||
SInt64 mCurrentPacket;
|
||||
UInt32 mNumPacketsToRead;
|
||||
Float32 mVolume;
|
||||
AudioStreamPacketDescription * mPacketDescs;
|
||||
static BG_FileInfo * CurFileInfo;
|
||||
Boolean mStopAtEnd;
|
||||
};
|
||||
|
||||
BG_FileInfo *BackgroundTrackMgr::CurFileInfo;
|
||||
|
||||
|
||||
BackgroundTrackMgr::BackgroundTrackMgr()
|
||||
: mQueue(0),
|
||||
mBufferByteSize(0),
|
||||
mCurrentPacket(0),
|
||||
mNumPacketsToRead(0),
|
||||
mVolume(1.0f),
|
||||
mPacketDescs(NULL),
|
||||
mStopAtEnd(false)
|
||||
{ }
|
||||
|
||||
BackgroundTrackMgr::~BackgroundTrackMgr() {
|
||||
Teardown();
|
||||
}
|
||||
|
||||
void BackgroundTrackMgr::Teardown() {
|
||||
if (mQueue) {
|
||||
AudioQueueDispose(mQueue, true);
|
||||
mQueue = NULL;
|
||||
}
|
||||
if ( CurFileInfo ) {
|
||||
AudioFileClose( CurFileInfo->mAFID);
|
||||
delete CurFileInfo;
|
||||
CurFileInfo = NULL;
|
||||
}
|
||||
if (mPacketDescs) {
|
||||
delete[] mPacketDescs;
|
||||
mPacketDescs = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void BackgroundTrackMgr::QueueCallback( void * inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inCompleteAQBuffer ) {
|
||||
// dispose of the buffer if no longer in use
|
||||
OSStatus result = noErr;
|
||||
BackgroundTrackMgr *THIS = (BackgroundTrackMgr*)inUserData;
|
||||
UInt32 nPackets = 0;
|
||||
// loop the current buffer if the following:
|
||||
// 1. file was loaded into the buffer previously
|
||||
// 2. only one file in the queue
|
||||
// 3. we have not been told to stop at playlist completion
|
||||
if ((CurFileInfo->mFileDataInQueue) && (!THIS->mStopAtEnd)) {
|
||||
nPackets = THIS->mNumPacketsToRead;
|
||||
} else {
|
||||
UInt32 numBytes;
|
||||
while (nPackets == 0) {
|
||||
// if loadAtOnce, get all packets in the file, otherwise ~.5 seconds of data
|
||||
nPackets = THIS->mNumPacketsToRead;
|
||||
result = AudioFileReadPackets(CurFileInfo->mAFID, false, &numBytes, THIS->mPacketDescs, THIS->mCurrentPacket, &nPackets,
|
||||
inCompleteAQBuffer->mAudioData);
|
||||
AssertNoError("Error reading file data", end);
|
||||
|
||||
inCompleteAQBuffer->mAudioDataByteSize = numBytes;
|
||||
|
||||
if (nPackets == 0) { // no packets were read, this file has ended.
|
||||
if (CurFileInfo->mLoadAtOnce) {
|
||||
CurFileInfo->mFileDataInQueue = true;
|
||||
}
|
||||
|
||||
THIS->mCurrentPacket = 0;
|
||||
|
||||
// we have gone through the playlist. if mStopAtEnd, stop the queue here
|
||||
if ( THIS->mStopAtEnd ) {
|
||||
result = AudioQueueStop(inAQ, false);
|
||||
AssertNoError("Error stopping queue", end);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result = AudioQueueEnqueueBuffer(inAQ, inCompleteAQBuffer, (THIS->mPacketDescs ? nPackets : 0), THIS->mPacketDescs);
|
||||
if(result != noErr) {
|
||||
result = AudioQueueFreeBuffer(inAQ, inCompleteAQBuffer);
|
||||
AssertNoError("Error freeing buffers that didn't enqueue", end);
|
||||
}
|
||||
AssertNoError("Error enqueuing new buffer", end);
|
||||
if (CurFileInfo->mLoadAtOnce) {
|
||||
CurFileInfo->mFileDataInQueue = true;
|
||||
}
|
||||
|
||||
THIS->mCurrentPacket += nPackets;
|
||||
|
||||
end:
|
||||
return;
|
||||
}
|
||||
|
||||
OSStatus BackgroundTrackMgr::SetupQueue(BG_FileInfo *inFileInfo) {
|
||||
UInt32 size = 0;
|
||||
OSStatus err;
|
||||
OSStatus result = AudioQueueNewOutput(&inFileInfo->mFileFormat, QueueCallback, this,
|
||||
CFRunLoopGetMain() /* CFRunLoopGetCurrent() */, kCFRunLoopCommonModes, 0, &mQueue);
|
||||
AssertNoError("Error creating queue", end);
|
||||
#if 0
|
||||
// (2) If the file has a cookie, we should get it and set it on the AQ
|
||||
size = sizeof(UInt32);
|
||||
result = AudioFileGetPropertyInfo (inFileInfo->mAFID, kAudioFilePropertyMagicCookieData, &size, NULL);
|
||||
|
||||
if (!result && size) {
|
||||
char* cookie = new char [size];
|
||||
result = AudioFileGetProperty (inFileInfo->mAFID, kAudioFilePropertyMagicCookieData, &size, cookie);
|
||||
AssertNoError("Error getting magic cookie", end);
|
||||
result = AudioQueueSetProperty(mQueue, kAudioQueueProperty_MagicCookie, cookie, size);
|
||||
delete [] cookie;
|
||||
AssertNoError("Error setting magic cookie", end);
|
||||
}
|
||||
#endif
|
||||
// channel layout
|
||||
err = AudioFileGetPropertyInfo(inFileInfo->mAFID, kAudioFilePropertyChannelLayout, &size, NULL);
|
||||
if (err == noErr && size > 0) {
|
||||
AudioChannelLayout *acl = (AudioChannelLayout *)malloc(size);
|
||||
result = AudioFileGetProperty(inFileInfo->mAFID, kAudioFilePropertyChannelLayout, &size, acl);
|
||||
AssertNoError("Error getting channel layout from file", end);
|
||||
result = AudioQueueSetProperty(mQueue, kAudioQueueProperty_ChannelLayout, acl, size);
|
||||
free(acl);
|
||||
AssertNoError("Error setting channel layout on queue", end);
|
||||
}
|
||||
|
||||
// volume
|
||||
result = SetVolume(mVolume);
|
||||
|
||||
end:
|
||||
return result;
|
||||
}
|
||||
|
||||
OSStatus BackgroundTrackMgr::SetupBuffers(BG_FileInfo *inFileInfo) {
|
||||
int numBuffersToQueue = kNumberBuffers;
|
||||
UInt32 maxPacketSize;
|
||||
UInt32 size = sizeof(maxPacketSize);
|
||||
bool isFormatVBR;
|
||||
// we need to calculate how many packets we read at a time, and how big a buffer we need
|
||||
// we base this on the size of the packets in the file and an approximate duration for each buffer
|
||||
|
||||
// first check to see what the max size of a packet is - if it is bigger
|
||||
// than our allocation default size, that needs to become larger
|
||||
OSStatus result = AudioFileGetProperty(inFileInfo->mAFID, kAudioFilePropertyPacketSizeUpperBound, &size, &maxPacketSize);
|
||||
AssertNoError("Error getting packet upper bound size", end);
|
||||
isFormatVBR = (inFileInfo->mFileFormat.mBytesPerPacket == 0 || inFileInfo->mFileFormat.mFramesPerPacket == 0);
|
||||
|
||||
CalculateBytesForTime(inFileInfo->mFileFormat, maxPacketSize, 0.5/*seconds*/, &mBufferByteSize, &mNumPacketsToRead);
|
||||
|
||||
// if the file is smaller than the capacity of all the buffer queues, always load it at once
|
||||
if ((mBufferByteSize * numBuffersToQueue) > inFileInfo->mFileDataSize) {
|
||||
inFileInfo->mLoadAtOnce = true;
|
||||
}
|
||||
|
||||
if (inFileInfo->mLoadAtOnce) {
|
||||
UInt64 theFileNumPackets;
|
||||
size = sizeof(UInt64);
|
||||
result = AudioFileGetProperty(inFileInfo->mAFID, kAudioFilePropertyAudioDataPacketCount, &size, &theFileNumPackets);
|
||||
AssertNoError("Error getting packet count for file", end);
|
||||
|
||||
mNumPacketsToRead = (UInt32)theFileNumPackets;
|
||||
mBufferByteSize = (UInt32)inFileInfo->mFileDataSize;
|
||||
numBuffersToQueue = 1;
|
||||
} else {
|
||||
mNumPacketsToRead = mBufferByteSize / maxPacketSize;
|
||||
}
|
||||
|
||||
if (isFormatVBR) {
|
||||
mPacketDescs = new AudioStreamPacketDescription [mNumPacketsToRead];
|
||||
} else {
|
||||
mPacketDescs = NULL; // we don't provide packet descriptions for constant bit rate formats (like linear PCM)
|
||||
}
|
||||
|
||||
// allocate the queue's buffers
|
||||
for (int i = 0; i < numBuffersToQueue; ++i) {
|
||||
result = AudioQueueAllocateBuffer(mQueue, mBufferByteSize, &mBuffers[i]);
|
||||
AssertNoError("Error allocating buffer for queue", end);
|
||||
QueueCallback (this, mQueue, mBuffers[i]);
|
||||
if (inFileInfo->mLoadAtOnce) {
|
||||
inFileInfo->mFileDataInQueue = true;
|
||||
}
|
||||
}
|
||||
|
||||
end:
|
||||
return result;
|
||||
}
|
||||
|
||||
OSStatus BackgroundTrackMgr::LoadTrack(const char* inFilePath, Boolean inAddToQueue, Boolean inLoadAtOnce) {
|
||||
// OSStatus result = LoadFileDataInfo(CurFileInfo->mFilePath.c_str(), CurFileInfo->mAFID, CurFileInfo->mFileFormat, CurFileInfo->mFileDataSize);
|
||||
// AssertNoError("Error getting file data info", fail);
|
||||
OSStatus result;
|
||||
UInt32 thePropSize;
|
||||
|
||||
CFURLRef theURL = CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, (UInt8*)inFilePath, strlen(inFilePath), false);
|
||||
if (theURL == NULL)
|
||||
result = kSoundEngineErrFileNotFound;
|
||||
else
|
||||
result = 0;
|
||||
AssertNoError("Error opening URL", fail);
|
||||
|
||||
CurFileInfo = new BG_FileInfo;
|
||||
CurFileInfo->mFilePath = inFilePath;
|
||||
|
||||
result = AudioFileOpenURL(theURL, kAudioFileReadPermission, 0, &CurFileInfo->mAFID);
|
||||
CFRelease(theURL);
|
||||
AssertNoError("Error opening file", fail);
|
||||
|
||||
thePropSize = sizeof(CurFileInfo->mFileFormat);
|
||||
result = AudioFileGetProperty(CurFileInfo->mAFID, kAudioFilePropertyDataFormat, &thePropSize, &CurFileInfo->mFileFormat);
|
||||
AssertNoError("Error getting file format", fail);
|
||||
|
||||
thePropSize = sizeof(UInt64);
|
||||
result = AudioFileGetProperty(CurFileInfo->mAFID, kAudioFilePropertyAudioDataByteCount, &thePropSize, &CurFileInfo->mFileDataSize);
|
||||
AssertNoError("Error getting file data size", fail);
|
||||
|
||||
CurFileInfo->mLoadAtOnce = inLoadAtOnce;
|
||||
CurFileInfo->mFileDataInQueue = false;
|
||||
|
||||
result = SetupQueue(CurFileInfo);
|
||||
AssertNoError("Error setting up queue", fail);
|
||||
|
||||
result = SetupBuffers(CurFileInfo);
|
||||
AssertNoError("Error setting up queue buffers", fail);
|
||||
|
||||
return result;
|
||||
|
||||
fail:
|
||||
if (CurFileInfo) {
|
||||
delete CurFileInfo;
|
||||
CurFileInfo = NULL;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
OSStatus BackgroundTrackMgr::SetVolume(Float32 inVolume) {
|
||||
mVolume = inVolume;
|
||||
return AudioQueueSetParameter(mQueue, kAudioQueueParam_Volume, mVolume * gMasterVolumeGain);
|
||||
}
|
||||
|
||||
Float32 BackgroundTrackMgr::GetVolume() const {
|
||||
return mVolume;
|
||||
}
|
||||
|
||||
OSStatus BackgroundTrackMgr::Start() {
|
||||
OSStatus result = AudioQueuePrime(mQueue, 1, NULL);
|
||||
if (result) {
|
||||
printf("BackgroundTrackMgr: Error priming queue: %d\n", (int)result);
|
||||
return result;
|
||||
}
|
||||
return AudioQueueStart(mQueue, NULL);
|
||||
}
|
||||
|
||||
OSStatus BackgroundTrackMgr::Stop(Boolean inStopAtEnd) {
|
||||
if (inStopAtEnd) {
|
||||
mStopAtEnd = true;
|
||||
return noErr;
|
||||
} else {
|
||||
return AudioQueueStop(mQueue, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static BackgroundTrackMgr sBackgroundTrackMgr;
|
||||
|
||||
static char currentMusicName[1024];
|
||||
|
||||
void iphonePauseMusic() {
|
||||
if( music ) {
|
||||
if ( music->value == 0 ) {
|
||||
// music is disabled
|
||||
return;
|
||||
}
|
||||
AudioQueuePause(sBackgroundTrackMgr.mQueue);
|
||||
}
|
||||
}
|
||||
void iphoneResumeMusic() {
|
||||
if ( music->value == 0 ) {
|
||||
// music is disabled
|
||||
return;
|
||||
}
|
||||
AudioQueueStart(sBackgroundTrackMgr.mQueue,NULL);
|
||||
}
|
||||
void iphoneStopMusic() {
|
||||
sBackgroundTrackMgr.Teardown();
|
||||
}
|
||||
|
||||
void iphoneStartMusic() {
|
||||
if ( music->value == 0 ) {
|
||||
// music is disabled
|
||||
return;
|
||||
}
|
||||
char fullName[1024];
|
||||
sprintf( fullName, "%s/base/music/d_%s.mp3", SysIphoneGetAppDir(), currentMusicName );
|
||||
|
||||
printf( "Starting music '%s'\n", fullName );
|
||||
|
||||
iphoneStopMusic();
|
||||
sBackgroundTrackMgr.LoadTrack( fullName, false, true);
|
||||
sBackgroundTrackMgr.Start();
|
||||
|
||||
if ( !strcmp( currentMusicName, "intro" ) ) {
|
||||
// stop the intro music at end, don't loop
|
||||
sBackgroundTrackMgr.mStopAtEnd = true;
|
||||
} else {
|
||||
sBackgroundTrackMgr.mStopAtEnd = false;
|
||||
}
|
||||
}
|
||||
|
||||
void iphonePlayMusic( const char *name ) {
|
||||
strcpy( currentMusicName, name );
|
||||
|
||||
iphoneStartMusic();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
422
common/ios/doomengine/DoomGameCenterMatch.cpp
Executable file
422
common/ios/doomengine/DoomGameCenterMatch.cpp
Executable file
@@ -0,0 +1,422 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company.
|
||||
|
||||
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 "DoomGameCenterMatch.h"
|
||||
#include "doomiphone.h"
|
||||
#include "ios/ios_interface.h"
|
||||
|
||||
#include <cstdio>
|
||||
#include <string>
|
||||
#include <algorithm>
|
||||
|
||||
DoomGameCenterMatch gDoomGameCenterMatch;
|
||||
|
||||
std::string serverGameCenterID;
|
||||
std::tr1::array<std::string, 4> playerIndexToIDMap;
|
||||
|
||||
namespace {
|
||||
bool IsServer() {
|
||||
return setupPacket.gameID == localGameID;
|
||||
}
|
||||
|
||||
int numPlayersToJoin = 0;
|
||||
}
|
||||
|
||||
DoomGameCenterMatch::~DoomGameCenterMatch() {
|
||||
}
|
||||
|
||||
void DoomGameCenterMatch::createdMatchImpl() {
|
||||
std::printf( "Created a DOOM match!\n" );
|
||||
}
|
||||
|
||||
void DoomGameCenterMatch::allPlayersConnectedImpl( std::vector<std::string> connectedPlayerIDs ) {
|
||||
std::printf( "All players connected to a DOOM match!\n" );
|
||||
|
||||
// Send an initial setup packet if this is the server, this will cause clients to
|
||||
// send their join packets.
|
||||
if ( IsServer() ) {
|
||||
printf( "Server broadcasting initial setup packet.\n" );
|
||||
|
||||
numPlayersToJoin = connectedPlayerIDs.size();
|
||||
assert( numPlayersToJoin > 0 );
|
||||
SendGameCenterSetup();
|
||||
}
|
||||
}
|
||||
|
||||
void DoomGameCenterMatch::playerConnectedImpl( std::string playerIdentifier ) {
|
||||
std::printf( "Player %s connected!\n", playerIdentifier.c_str() );
|
||||
}
|
||||
|
||||
void DoomGameCenterMatch::playerDisconnectedImpl( std::string playerIdentifier ) {
|
||||
std::printf( "Player %s disconnected!\n", playerIdentifier.c_str() );
|
||||
|
||||
if ( IsServer() ) {
|
||||
// Only the server tracks disconnected players. The next server packet sent to each
|
||||
// client will have the new playeringame[MAXPLAYERS] info.
|
||||
for ( int i = 0; i < MAXPLAYERS; ++i ) {
|
||||
if ( playerIndexToIDMap[i] == playerIdentifier ) {
|
||||
playeringame[i] = false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// If we are a client, and the server is the one that disconnected, we're hosed.
|
||||
if ( !netGameFailure && playerIdentifier == serverGameCenterID ) {
|
||||
netGameFailure = NF_LOST_SERVER;
|
||||
|
||||
idGameCenter::DisconnectFromMatch();
|
||||
|
||||
ShowSystemAlert( "#LostServerTitle", "#LostServerMessage" );
|
||||
|
||||
iphoneMainMenu();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
template<class Type, size_t Size>
|
||||
const Type * end( const Type (&testArray)[Size] ) {
|
||||
return testArray + Size;
|
||||
}
|
||||
|
||||
template<class Type, size_t Size>
|
||||
bool ArrayContains( const Type (&testArray)[Size], const Type & value ) {
|
||||
return std::find( testArray, end( testArray ), value ) != end( testArray );
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
DoomGameCenterMatch::receivedDataImpl
|
||||
|
||||
A packet has been received from Game Center. Because the Game Center "callback" actually runs
|
||||
on the main thread, it should be safe to directly process the packets here. This should only
|
||||
be called in between displaylink updates.
|
||||
==================
|
||||
*/
|
||||
void DoomGameCenterMatch::receivedDataImpl( std::string fromPlayerID, const void * data, int numBytes ) {
|
||||
|
||||
if ( numBytes < 4 ) {
|
||||
std::printf( "discarding packet because numBytes = %i.\n", numBytes );
|
||||
return;
|
||||
}
|
||||
|
||||
int packetID = *(int *)data;
|
||||
|
||||
if ( packetID == PACKET_VERSION_SETUP ) {
|
||||
std::printf( "Received a setup packet!\n" );
|
||||
|
||||
// Only the server sends setup packets, and we need to keep track of it's ID.
|
||||
serverGameCenterID = fromPlayerID;
|
||||
|
||||
if ( localGameID == setupPacket.gameID ) {
|
||||
// if we are sending packets, always ignore other setup packets
|
||||
printf( "discarding setup packet because we are the server\n" );
|
||||
return;
|
||||
}
|
||||
setupPacketFrameNum = iphoneFrameNum;
|
||||
|
||||
// save this packet
|
||||
setupPacket = *(packetSetup_t *)data;
|
||||
|
||||
// Send a join packet to the server so that it's aware of this client, if this client
|
||||
// isn't already in the list.
|
||||
if ( !ArrayContains( setupPacket.playerID, localGameID ) ) {
|
||||
printf( "This client has not notified the server yet - sending join packet.\n" );
|
||||
SendJoinPacket();
|
||||
}
|
||||
|
||||
// check for game start in a received setup packet
|
||||
if ( !netgame && setupPacket.startGame ) {
|
||||
StartupWithCorrectWads( setupPacket.map.dataset );
|
||||
|
||||
ShowGLView();
|
||||
|
||||
if ( StartNetGame() ) {
|
||||
setupPacket.startGame = false;
|
||||
// we aren't in this game
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ( packetID == PACKET_VERSION_JOIN ) {
|
||||
// we should only process join packets if we are running the current game
|
||||
if ( setupPacket.gameID != localGameID ) {
|
||||
printf( "discarding join packet because we aren't the server\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
packetJoin_t *pj = (packetJoin_t *)data;
|
||||
if ( pj->playerID == 0 ) {
|
||||
// should never happen
|
||||
printf( "discarding join packet because playerID is 0\n" );
|
||||
return;
|
||||
}
|
||||
// add this player
|
||||
int i;
|
||||
for ( i = 0 ; i < MAXPLAYERS ; i++ ) {
|
||||
if ( setupPacket.playerID[i] == pj->playerID ) {
|
||||
netPlayers[i].peer.lastPacketTime = SysIphoneMilliseconds();
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( i == MAXPLAYERS ) {
|
||||
// not in yet, add if possible
|
||||
for ( i = 0 ; i < MAXPLAYERS ; i++ ) {
|
||||
if ( setupPacket.playerID[i] == 0 ) {
|
||||
setupPacket.playerID[i] = pj->playerID;
|
||||
|
||||
// Save this client's GameCenter ID to send it packets later.
|
||||
playerIndexToIDMap[i] = fromPlayerID;
|
||||
|
||||
//netPlayers[i].peer.address = *from;
|
||||
netPlayers[i].peer.lastPacketTime = SysIphoneMilliseconds();
|
||||
|
||||
--numPlayersToJoin;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
// if all players are active, the new join gets ignored
|
||||
}
|
||||
|
||||
printf( "valid join packet from %s\n", fromPlayerID.c_str() );
|
||||
|
||||
if ( numPlayersToJoin == 0 ) {
|
||||
std::printf( "Server starting the game!\n" );
|
||||
|
||||
// Got the join packet from everyone, start the game!
|
||||
setupPacket.startGame = 1;
|
||||
|
||||
StartupWithCorrectWads( setupPacket.map.dataset );
|
||||
|
||||
StartNetGame();
|
||||
ShowGLView();
|
||||
}
|
||||
|
||||
// Broadcast another setup packet to let each client know that someone else joined.
|
||||
SendGameCenterSetup();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// The only other packets we should be recieving are client and server packets. This call
|
||||
// will handle those.
|
||||
iphoneProcessPacket( NULL, data, numBytes );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void SetupEmptyNetGame() {
|
||||
// Disconnect from any previous multiplayer game
|
||||
idGameCenter::DisconnectFromMatch();
|
||||
|
||||
// no current setup packet, so initialize with this phone's default values
|
||||
localGameID = SysIphoneMicroseconds();
|
||||
memset( &setupPacket, 0, sizeof( setupPacket ) );
|
||||
setupPacket.gameID = localGameID;
|
||||
setupPacket.packetType = PACKET_VERSION_SETUP;
|
||||
setupPacket.map.dataset = mpExpansion->value;
|
||||
setupPacket.map.episode = mpEpisode->value;
|
||||
setupPacket.map.map = mpMap->value;
|
||||
setupPacket.map.skill = mpSkill->value;
|
||||
setupPacket.deathmatch = mpDeathmatch->value;
|
||||
setupPacket.timelimit = timeLimit->value;
|
||||
setupPacket.fraglimit = fragLimit->value;
|
||||
setupPacket.playerID[0] = playerID;
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
SendJoinPacket
|
||||
|
||||
These will be sent to the server ever frame we are in the multiplayer menu.
|
||||
==================
|
||||
*/
|
||||
void SendJoinPacket() {
|
||||
packetJoin_t pj;
|
||||
|
||||
pj.packetType = PACKET_VERSION_JOIN;
|
||||
pj.gameID = setupPacket.gameID;
|
||||
pj.playerID = playerID;
|
||||
|
||||
idGameCenter::SendPacketToPlayerReliable( serverGameCenterID, &pj, sizeof( pj ) );
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
SendGameCenterSetup
|
||||
|
||||
the server sends out a setup packet to each joined client so they
|
||||
can see the game options needed to start the game.
|
||||
==================
|
||||
*/
|
||||
void SendGameCenterSetup() {
|
||||
if ( setupPacket.gameID != localGameID ) {
|
||||
// we aren't the server
|
||||
return;
|
||||
}
|
||||
|
||||
if ( gametic >= 2 ) {
|
||||
// everyone has already started, so they don't need more setup packets
|
||||
return;
|
||||
}
|
||||
|
||||
setupPacket.sendCount++;
|
||||
idGameCenter::BroadcastPacketReliable( &setupPacket, sizeof( setupPacket ) );
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//------------------------
|
||||
// In order to facilitate automatching through Game Center, we can use a 32-bit playerGroup
|
||||
// value. Players will only be matched with other players with the exact same playerGroup.
|
||||
// Unfortunately, there doesn't seem to be a way to do more complex logical operations, such
|
||||
// as match a player who is willing to play on any map with a player who has chosen a specific
|
||||
// map.
|
||||
//
|
||||
// These functions will take the game setup parameters and create a 32-bit playerGroup value to
|
||||
// match with other players who have chosen the same settings.
|
||||
//
|
||||
// In order to pack the game parameters into 32 bits, we use the following information:
|
||||
//
|
||||
// Deathmatch field requires 2 bits for 4 possible values.
|
||||
// This will be 0 for co-op, 1 for deathmatch, and 2 for altdeath.
|
||||
//
|
||||
// Expansion pack field requires 3 bits for 8 possible values, but we only have 5 expansions
|
||||
// currently.
|
||||
// This will simply be the enum value of iphoneMissionPack_t.
|
||||
//
|
||||
// Map number will require 5 bits for 32 possible maps per expansion, but let's use 6 since a)
|
||||
// we have the space b) it allows for future expansion and c) allows us to start counting at 1,
|
||||
// which is the natural first index for map nums.
|
||||
//
|
||||
// The frag limit is capped by us at 20, so we'll use 5 bits for this value.
|
||||
// Zero here will indicate an infinite frag limit.
|
||||
//
|
||||
// The time limit is capped to 20 minutes, so we'll use 5 bits for this value.
|
||||
// Zero here will indicate unlimited time.
|
||||
//
|
||||
// Skill will require 3 bits for 8 possible values, as there are 5 skill levels.
|
||||
//
|
||||
// In summary, we will need 2 + 3 + 6 + 5 + 5 + 3 = 24 bits to completely specify multiplayer
|
||||
// parameters.
|
||||
//
|
||||
// So, the actual format of the playerGroup is:
|
||||
//
|
||||
// Bits 0-1: Match type.
|
||||
// Bits 2-4: Expansion pack.
|
||||
// Bits 5-10: Map number.
|
||||
// Bits 11-15: Frag limit.
|
||||
// Bits 16-20: Time limit in minutes.
|
||||
// Bits 21-23: Skill level.
|
||||
//------------------------
|
||||
|
||||
namespace {
|
||||
const unsigned int deathmatchGroupNumBits = 2;
|
||||
const unsigned int expansionGroupNumBits = 3;
|
||||
const unsigned int mapGroupNumBits = 6;
|
||||
const unsigned int fragLimitGroupNumBits = 5;
|
||||
const unsigned int timeLimitGroupNumBits = 5;
|
||||
|
||||
// Currently unused
|
||||
//static const unsigned int skillGroupNumBits = 3;
|
||||
|
||||
const unsigned int deathmatchGroupOffset = 0;
|
||||
const unsigned int expansionGroupOffset = deathmatchGroupOffset + deathmatchGroupNumBits;
|
||||
const unsigned int mapGroupOffset = expansionGroupOffset + expansionGroupNumBits;
|
||||
const unsigned int fragLimitGroupOffset = mapGroupOffset + mapGroupNumBits;
|
||||
const unsigned int timeLimitGroupOffset = fragLimitGroupOffset + fragLimitGroupNumBits;
|
||||
const unsigned int skillGroupOffset = timeLimitGroupOffset + timeLimitGroupNumBits;
|
||||
}
|
||||
|
||||
//------------------------
|
||||
// deathmatch: 1 for deathmatch, 2 for altdeath, 0 for cooperative
|
||||
//------------------------
|
||||
std::tr1::uint32_t GeneratePlayerGroup( const int deathmatch,
|
||||
const int missionPack,
|
||||
const int mapNum,
|
||||
const int fragLimit,
|
||||
const int timeLimit,
|
||||
const int skill ) {
|
||||
|
||||
|
||||
const int deathmatchGroup = deathmatch << deathmatchGroupOffset;
|
||||
const int expansionGroup = static_cast<int>( missionPack ) << expansionGroupOffset;
|
||||
const int mapNumGroup = mapNum << mapGroupOffset;
|
||||
const int tempFragLimitGroup = fragLimit << fragLimitGroupOffset;
|
||||
const int tempTimeLimitGroup = timeLimit << timeLimitGroupOffset;
|
||||
const int tempSkillGroup = skill << skillGroupOffset;
|
||||
|
||||
// Don't let deathmatch or co-op specific options influence the matchmaking process.
|
||||
// If deathmatch, always set skill to 0.
|
||||
// If co-op, always set frag limit and time limit to 0.
|
||||
const int fragLimitGroup = ( deathmatch == 0 ) ? 0 : tempFragLimitGroup;
|
||||
const int timeLimitGroup = ( deathmatch == 0 ) ? 0 : tempTimeLimitGroup;
|
||||
const int skillGroup = ( deathmatch != 0 ) ? 0 : tempSkillGroup;
|
||||
|
||||
const int playerGroup = deathmatchGroup
|
||||
| expansionGroup
|
||||
| mapNumGroup
|
||||
| fragLimitGroup
|
||||
| timeLimitGroup
|
||||
| skillGroup;
|
||||
|
||||
return playerGroup;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//------------------------
|
||||
// Converts a playerGroup from Game Center into a setupPacket_t
|
||||
//------------------------
|
||||
packetSetup_t GenerateSetupPacketFromPlayerGroup( std::tr1::uint32_t playerGroup ) {
|
||||
packetSetup_t packet;
|
||||
|
||||
packet.packetType = PACKET_VERSION_SETUP;
|
||||
packet.gameID = 0;
|
||||
packet.startGame = 0;
|
||||
packet.sendCount = 0;
|
||||
|
||||
packet.map.dataset = 0;
|
||||
packet.map.episode = 0;
|
||||
packet.map.map = 0;
|
||||
packet.map.skill = 0;
|
||||
|
||||
packet.deathmatch = 0;
|
||||
packet.fraglimit = 0;
|
||||
packet.timelimit = 0;
|
||||
|
||||
std::fill( packet.playerID, packet.playerID + sizeof( packet.playerID ), 0 );
|
||||
|
||||
return packet;
|
||||
}
|
||||
|
||||
|
||||
62
common/ios/doomengine/DoomGameCenterMatch.h
Executable file
62
common/ios/doomengine/DoomGameCenterMatch.h
Executable file
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company.
|
||||
|
||||
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 DOOM_GAME_CENTER_MATCH_H
|
||||
#define DOOM_GAME_CENTER_MATCH_H
|
||||
|
||||
#include "ios/GameCenter.h"
|
||||
#include "iphone_doom.h"
|
||||
|
||||
#include <tr1/array>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <tr1/cstdint>
|
||||
|
||||
class DoomGameCenterMatch : public idGameCenterMatchHandler {
|
||||
public:
|
||||
virtual ~DoomGameCenterMatch();
|
||||
|
||||
private:
|
||||
virtual void createdMatchImpl();
|
||||
virtual void allPlayersConnectedImpl( std::vector<std::string> connectedPlayerIDs );
|
||||
virtual void playerConnectedImpl( std::string playerIdentifier );
|
||||
virtual void playerDisconnectedImpl( std::string playerIdentifier );
|
||||
|
||||
virtual void receivedDataImpl( std::string fromPlayerID, const void * data, int numBytes );
|
||||
};
|
||||
|
||||
extern DoomGameCenterMatch gDoomGameCenterMatch;
|
||||
extern std::string serverGameCenterID;
|
||||
extern std::tr1::array<std::string, 4> playerIndexToIDMap;
|
||||
|
||||
void SetupEmptyNetGame();
|
||||
void SendGameCenterSetup();
|
||||
void SendJoinPacket();
|
||||
|
||||
std::tr1::uint32_t GeneratePlayerGroup( const int deathmatch,
|
||||
const int missionPack,
|
||||
const int mapNum,
|
||||
const int fragLimit,
|
||||
const int timeLimit,
|
||||
const int skill );
|
||||
|
||||
packetSetup_t GenerateSetupPacketFromPlayerGroup( std::tr1::uint32_t playerGroup );
|
||||
|
||||
#endif
|
||||
48
common/ios/doomengine/EAGLView.h
Executable file
48
common/ios/doomengine/EAGLView.h
Executable file
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 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.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import <OpenGLES/EAGL.h>
|
||||
#import <OpenGLES/ES1/gl.h>
|
||||
#import <OpenGLES/ES1/glext.h>
|
||||
|
||||
/*
|
||||
This class wraps the CAEAGLLayer from CoreAnimation into a convenient UIView subclass.
|
||||
The view content is basically an EAGL surface you render your OpenGL scene into.
|
||||
Note that setting the view non-opaque will only work if the EAGL surface has an alpha channel.
|
||||
*/
|
||||
@interface EAGLView : UIView <UITextFieldDelegate> {
|
||||
@public
|
||||
UITextField *textField;
|
||||
|
||||
GLuint mViewRenderbuffer;
|
||||
GLuint mViewFramebuffer;
|
||||
GLuint mDepthRenderbuffer;
|
||||
|
||||
@private
|
||||
/* The pixel dimensions of the backbuffer */
|
||||
GLint backingWidth;
|
||||
GLint backingHeight;
|
||||
}
|
||||
|
||||
- (void) Initialize;
|
||||
|
||||
@end
|
||||
371
common/ios/doomengine/EAGLView.m
Executable file
371
common/ios/doomengine/EAGLView.m
Executable file
@@ -0,0 +1,371 @@
|
||||
//
|
||||
// EAGLView.m
|
||||
// Doom
|
||||
//
|
||||
// Created by Cass Everitt on 2/20/09.
|
||||
// Copyright Id Software 2009. All rights reserved.
|
||||
//
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 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.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
#import <QuartzCore/QuartzCore.h>
|
||||
#import <OpenGLES/EAGLDrawable.h>
|
||||
|
||||
#import "EAGLView.h"
|
||||
|
||||
#include "doomiphone.h"
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
EAGLView *eaglview;
|
||||
EAGLContext *context;
|
||||
|
||||
@implementation EAGLView
|
||||
|
||||
// You must implement this method
|
||||
+ (Class)layerClass {
|
||||
return [CAEAGLLayer class];
|
||||
}
|
||||
|
||||
float screenResolutionScale = 1.0f;
|
||||
|
||||
CAEAGLLayer *eaglLayer;
|
||||
|
||||
- (void) Initialize {
|
||||
|
||||
eaglview = self;
|
||||
|
||||
// allow multiple touch events
|
||||
self.multipleTouchEnabled = true;
|
||||
|
||||
// Double the resolution on iPhone 4.
|
||||
if ( [[UIScreen mainScreen] respondsToSelector:@selector(scale)] &&
|
||||
[self respondsToSelector:@selector(setContentScaleFactor:)] ) {
|
||||
|
||||
screenResolutionScale = [UIScreen mainScreen].scale;
|
||||
|
||||
// set scaling factor
|
||||
[self setContentScaleFactor:[UIScreen mainScreen].scale];
|
||||
}
|
||||
|
||||
// Get the layer
|
||||
eaglLayer = (CAEAGLLayer *)self.layer;
|
||||
|
||||
// set opaque so UIKit doesn't try to blend it over other layers
|
||||
eaglLayer.opaque = YES;
|
||||
|
||||
// set it to no-backing-retained so it can do ast pageflips instead
|
||||
// of update copies, and go to 565 bit depth for higher performance.
|
||||
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;
|
||||
}
|
||||
|
||||
glGenFramebuffersOES(1, &mViewFramebuffer);
|
||||
glGenRenderbuffersOES(1, &mViewRenderbuffer);
|
||||
|
||||
glBindFramebufferOES(GL_FRAMEBUFFER_OES, mViewFramebuffer);
|
||||
glBindRenderbufferOES(GL_RENDERBUFFER_OES, mViewRenderbuffer);
|
||||
|
||||
[context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer];
|
||||
|
||||
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, mViewRenderbuffer);
|
||||
|
||||
// the backing sizes should be the same as the screen
|
||||
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
|
||||
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
|
||||
|
||||
displaywidth = backingHeight;
|
||||
displayheight = backingWidth;
|
||||
|
||||
glGenRenderbuffersOES(1, &mDepthRenderbuffer);
|
||||
glBindRenderbufferOES(GL_RENDERBUFFER_OES, mDepthRenderbuffer);
|
||||
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, backingWidth, backingHeight);
|
||||
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, mDepthRenderbuffer);
|
||||
|
||||
// the framebuffer will stay constant
|
||||
glBindRenderbufferOES(GL_RENDERBUFFER_OES, mViewRenderbuffer);
|
||||
glBindFramebufferOES(GL_FRAMEBUFFER_OES, mViewFramebuffer);
|
||||
|
||||
if ( glCheckFramebufferStatusOES( GL_FRAMEBUFFER_OES ) != GL_FRAMEBUFFER_COMPLETE_OES ) {
|
||||
printf( "Failed to make complete framebuffer object %x", glCheckFramebufferStatusOES( GL_FRAMEBUFFER_OES ) );
|
||||
assert( 0 );
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
- (id) initWithCoder:(NSCoder *)aCoder{
|
||||
|
||||
if(self = [super initWithCoder:aCoder] ) {
|
||||
[self Initialize];
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (id) initWithFrame:(CGRect)rect{
|
||||
if(self = [super initWithFrame:rect] ) {
|
||||
[self Initialize];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) handleTouches:(UIEvent*)event {
|
||||
int touchCount = 0;
|
||||
static int previousTouchCount;
|
||||
static int touchRover;
|
||||
int touchThisSequence[MAX_TOUCHES];
|
||||
|
||||
memset( touchThisSequence, 0, sizeof( touchThisSequence ) );
|
||||
|
||||
NSSet *theTouches = [event allTouches];
|
||||
// printf( "count: %i\n", [touches count] );
|
||||
|
||||
for (UITouch *myTouch in theTouches)
|
||||
{
|
||||
CGPoint touchLocation = [myTouch locationInView:self];
|
||||
|
||||
// Scale Touches with the screen resolution.
|
||||
touchLocation.x *= screenResolutionScale;
|
||||
touchLocation.y *= screenResolutionScale;
|
||||
|
||||
const int x = touchLocation.x;
|
||||
const int y = touchLocation.y;
|
||||
// printf( "%i, %i\n", x, y );
|
||||
touchCount++;
|
||||
|
||||
|
||||
touch_t *t2;
|
||||
|
||||
// find which one it is closest to
|
||||
int minDist = 64 * 64; // allow up to 64 unit moves to be drags
|
||||
int minIndex = -1;
|
||||
for ( int i = 0 ; i < MAX_TOUCHES ; i++ ) {
|
||||
t2 = &sysTouches[i];
|
||||
if ( !t2->down ) {
|
||||
continue;
|
||||
}
|
||||
int dist = ( t2->x - x ) * ( t2->x - x ) + ( t2->y - y ) * ( t2->y - y );
|
||||
if ( dist < minDist ) {
|
||||
minDist = dist;
|
||||
minIndex = i;
|
||||
}
|
||||
}
|
||||
if ( minIndex != -1 ) {
|
||||
// reuse a touch
|
||||
sysTouches[minIndex].x = x;
|
||||
sysTouches[minIndex].y = y;
|
||||
if (myTouch.phase == UITouchPhaseEnded) {
|
||||
// if this was released before the game got to see it,
|
||||
// make it a special case
|
||||
if ( sysTouches[minIndex].stateCount == 1 ) {
|
||||
// leave it in the down state with a special count
|
||||
sysTouches[minIndex].stateCount = -1;
|
||||
// printf( "Tap release touch on a reuse\n" );
|
||||
} else {
|
||||
sysTouches[minIndex].down = false;
|
||||
sysTouches[minIndex].stateCount = 1;
|
||||
// printf( "Release touch on a reuse\n" );
|
||||
}
|
||||
} else {
|
||||
if (myTouch.phase == UITouchPhaseBegan) {
|
||||
sysTouches[minIndex].stateCount = 1;
|
||||
sysTouches[minIndex].controlOwner = NULL;
|
||||
// printf( "Begin touch on a reuse\n" );
|
||||
} else {
|
||||
// printf( "Drag touch on a reuse\n" );
|
||||
}
|
||||
sysTouches[minIndex].down = true;
|
||||
}
|
||||
touchThisSequence[minIndex] = true;
|
||||
} else {
|
||||
if ( myTouch.phase != UITouchPhaseBegan ) {
|
||||
printf( "Non-local touch wasn't a begin\n" );
|
||||
} else {
|
||||
// allocate a new one
|
||||
// grab the next rover spot
|
||||
// don't just use first-not-down, because that might
|
||||
// cause the release to be missed by the game code.
|
||||
int i, j;
|
||||
for ( j = 0 ; j < MAX_TOUCHES ; j++ ) {
|
||||
i = touchRover;
|
||||
t2 = &sysTouches[i];
|
||||
touchRover = ( touchRover + 1 ) % MAX_TOUCHES;
|
||||
if ( !t2->down ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( j == MAX_TOUCHES ) {
|
||||
printf( "MAX_TOUCHES, clearing everything!\n" );
|
||||
memset( sysTouches, 0, sizeof( sysTouches ) );
|
||||
continue;
|
||||
}
|
||||
// printf( "new touch down\n" );
|
||||
t2->x = x;
|
||||
t2->y = y;
|
||||
t2->down = true;
|
||||
t2->controlOwner = NULL;
|
||||
t2->stateCount = 1;
|
||||
|
||||
touchThisSequence[i] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Change any active touches to released if they weren't
|
||||
// in the touch set. This will happen if we forced a break because
|
||||
// a "moved" event was so large that it was very likely a release and
|
||||
// press of a different finger that happened to be in the same frame.
|
||||
for ( int i = 0 ; i < MAX_TOUCHES ; i++ ) {
|
||||
if ( sysTouches[i].down && !touchThisSequence[i] ) {
|
||||
printf( "clearing touch %i\n", i );
|
||||
sysTouches[i].down = false;
|
||||
sysTouches[i].stateCount = 0;
|
||||
touchCount--;
|
||||
}
|
||||
}
|
||||
|
||||
// toggle the console with four touches
|
||||
if ( touchCount == 4 && previousTouchCount != 4 ) {
|
||||
touchCount = 0; // won't get the releases, because the text field will eat them
|
||||
|
||||
if ( textField == nil ) {
|
||||
// do this before starting the textField, which
|
||||
// takes a long time
|
||||
// iphoneActivateConsole();
|
||||
|
||||
textField = [UITextField alloc];
|
||||
[textField initWithFrame:CGRectMake( 0, 0, 20, 20 ) ];
|
||||
[self addSubview:textField];
|
||||
[textField release];
|
||||
textField.hidden = true;
|
||||
textField.delegate = self;
|
||||
textField.autocapitalizationType = UITextAutocapitalizationTypeNone;
|
||||
textField.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||
[textField becomeFirstResponder];
|
||||
} else {
|
||||
}
|
||||
}
|
||||
|
||||
previousTouchCount = touchCount;
|
||||
}
|
||||
|
||||
|
||||
- (void) touchesBegan:(NSSet*)touchSet withEvent:(UIEvent*)event {
|
||||
(void)touchSet;
|
||||
|
||||
[self handleTouches:event];
|
||||
}
|
||||
|
||||
- (void)touchesMoved:(NSSet *)touchSet withEvent:(UIEvent *)event {
|
||||
(void)touchSet;
|
||||
|
||||
[self handleTouches:event];
|
||||
}
|
||||
|
||||
- (void) touchesEnded:(NSSet*)touchSet withEvent:(UIEvent*)event {
|
||||
(void)touchSet;
|
||||
|
||||
[self handleTouches:event];
|
||||
}
|
||||
|
||||
- (void)touchesCancelled:(NSSet *)touchSet withEvent:(UIEvent *)event {
|
||||
(void)touchSet;
|
||||
|
||||
[self handleTouches:event];
|
||||
}
|
||||
|
||||
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation EAGLView (UITextFieldDelegate)
|
||||
|
||||
char consoleCommand[1024];
|
||||
|
||||
- (BOOL)textFieldShouldReturn:(UITextField *)_textField
|
||||
{
|
||||
(void)_textField;
|
||||
|
||||
if ( eaglview->textField == nil ) {
|
||||
return YES;
|
||||
}
|
||||
|
||||
// we can't just execute this, because we are running in another
|
||||
// thread, so fetch the line and the game will catch it next time
|
||||
// around
|
||||
|
||||
const char *line = [ eaglview->textField.text UTF8String ];
|
||||
strncpy( consoleCommand, line, sizeof(consoleCommand)-1 );
|
||||
eaglview->textField.text = [ NSString stringWithUTF8String: "" ];
|
||||
|
||||
// put it away
|
||||
[textField resignFirstResponder];
|
||||
[textField removeFromSuperview];
|
||||
textField = nil;
|
||||
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
const char * SysIPhoneGetConsoleTextField() {
|
||||
if ( eaglview->textField == nil ) {
|
||||
return "";
|
||||
}
|
||||
return [ eaglview->textField.text UTF8String ];
|
||||
}
|
||||
|
||||
void SysIPhoneSetConsoleTextField( const char * str) {
|
||||
assert( eaglview->textField != nil );
|
||||
eaglview->textField.text = [ NSString stringWithUTF8String: str ];
|
||||
}
|
||||
|
||||
void SysIPhoneSwapBuffers() {
|
||||
|
||||
glBindRenderbufferOES(GL_RENDERBUFFER_OES, eaglview->mViewRenderbuffer);
|
||||
|
||||
// present the renderbuffer for display
|
||||
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
1818
common/ios/doomengine/SoundEngine.cpp
Executable file
1818
common/ios/doomengine/SoundEngine.cpp
Executable file
File diff suppressed because it is too large
Load Diff
383
common/ios/doomengine/SoundEngine.h
Executable file
383
common/ios/doomengine/SoundEngine.h
Executable file
@@ -0,0 +1,383 @@
|
||||
/*
|
||||
|
||||
File: SoundEngine.h
|
||||
Abstract: These functions play background music tracks, multiple sound effects,
|
||||
and support stereo panning with a low-latency response.
|
||||
|
||||
Version: 1.7
|
||||
|
||||
Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Inc.
|
||||
("Apple") in consideration of your agreement to the following terms, and your
|
||||
use, installation, modification or redistribution of this Apple software
|
||||
constitutes acceptance of these terms. If you do not agree with these terms,
|
||||
please do not use, install, modify or redistribute this Apple software.
|
||||
|
||||
In consideration of your agreement to abide by the following terms, and subject
|
||||
to these terms, Apple grants you a personal, non-exclusive license, under
|
||||
Apple's copyrights in this original Apple software (the "Apple Software"), to
|
||||
use, reproduce, modify and redistribute the Apple Software, with or without
|
||||
modifications, in source and/or binary forms; provided that if you redistribute
|
||||
the Apple Software in its entirety and without modifications, you must retain
|
||||
this notice and the following text and disclaimers in all such redistributions
|
||||
of the Apple Software.
|
||||
Neither the name, trademarks, service marks or logos of Apple Inc. may be used
|
||||
to endorse or promote products derived from the Apple Software without specific
|
||||
prior written permission from Apple. Except as expressly stated in this notice,
|
||||
no other rights or licenses, express or implied, are granted by Apple herein,
|
||||
including but not limited to any patent rights that may be infringed by your
|
||||
derivative works or by other works in which the Apple Software may be
|
||||
incorporated.
|
||||
|
||||
The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO
|
||||
WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
|
||||
WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
|
||||
COMBINATION WITH YOUR PRODUCTS.
|
||||
|
||||
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR
|
||||
DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF
|
||||
CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF
|
||||
APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Copyright (C) 2008 Apple Inc. All Rights Reserved.
|
||||
|
||||
*/
|
||||
|
||||
/*==================================================================================================
|
||||
SoundEngine.h
|
||||
==================================================================================================*/
|
||||
#if !defined(__SoundEngine_h__)
|
||||
#define __SoundEngine_h__
|
||||
|
||||
//==================================================================================================
|
||||
// Includes
|
||||
//==================================================================================================
|
||||
|
||||
// System Includes
|
||||
#ifndef WIN32
|
||||
#include <CoreAudio/CoreAudioTypes.h>
|
||||
#include <AudioToolbox/AudioToolbox.h>
|
||||
#else
|
||||
typedef int OSStatus;
|
||||
typedef int SInt32;
|
||||
typedef unsigned int UInt32;
|
||||
typedef float Float32;
|
||||
typedef unsigned char Boolean;
|
||||
#endif
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
//==================================================================================================
|
||||
// Sound Engine
|
||||
//==================================================================================================
|
||||
/*!
|
||||
@enum SoundEngine error codes
|
||||
@abstract These are the error codes returned from the SoundEngine API.
|
||||
@constant kSoundEngineErrUnitialized
|
||||
The SoundEngine has not been initialized. Use SoundEngine_Initialize().
|
||||
@constant kSoundEngineErrInvalidID
|
||||
The specified EffectID was not found. This can occur if the effect has not been loaded, or
|
||||
if an unloaded is trying to be accessed.
|
||||
@constant kSoundEngineErrFileNotFound
|
||||
The specified file was not found.
|
||||
@constant kSoundEngineErrInvalidFileFormat
|
||||
The format of the file is invalid. Effect data must be little-endian 8 or 16 bit LPCM.
|
||||
@constant kSoundEngineErrDeviceNotFound
|
||||
The output device was not found.
|
||||
|
||||
*/
|
||||
enum {
|
||||
kSoundEngineErrUnitialized = 1,
|
||||
kSoundEngineErrInvalidID = 2,
|
||||
kSoundEngineErrFileNotFound = 3,
|
||||
kSoundEngineErrInvalidFileFormat = 4,
|
||||
kSoundEngineErrDeviceNotFound = 5
|
||||
};
|
||||
|
||||
|
||||
/*!
|
||||
@function SoundEngine_Initialize
|
||||
@abstract Initializes and sets up the sound engine. Calling after a previous initialize will
|
||||
reset the state of the SoundEngine, with all previous effects and music tracks
|
||||
erased. Note: This is not required, loading an effect or background track will
|
||||
initialize as necessary.
|
||||
@param inMixerOutputRate
|
||||
A Float32 that represents the output sample rate of the mixer unit. Setting this to
|
||||
0 will use the default rate (the sample rate of the device)
|
||||
@result A OSStatus indicating success or failure.
|
||||
*/
|
||||
OSStatus SoundEngine_Initialize(Float32 inMixerOutputRate);
|
||||
|
||||
|
||||
OSStatus SoundEngine_Reactivate();
|
||||
|
||||
|
||||
/*!
|
||||
@function SoundEngine_Teardown
|
||||
@abstract Tearsdown the sound engine.
|
||||
@result A OSStatus indicating success or failure.
|
||||
*/
|
||||
OSStatus SoundEngine_Teardown();
|
||||
|
||||
/*!
|
||||
@function SoundEngine_SetMasterVolume
|
||||
@abstract Sets the overall volume of all sounds coming from the process
|
||||
@param inValue
|
||||
A Float32 that represents the level. The range is between 0.0 and 1.0 (inclusive).
|
||||
@result A OSStatus indicating success or failure.
|
||||
*/
|
||||
OSStatus SoundEngine_SetMasterVolume(Float32 inValue);
|
||||
|
||||
/*!
|
||||
@function SoundEngine_SetListenerPosition
|
||||
@abstract Sets the position of the listener in the 3D space
|
||||
@param inX
|
||||
A Float32 that represents the listener's position along the X axis.
|
||||
@param inY
|
||||
A Float32 that represents the listener's position along the Y axis.
|
||||
@param inZ
|
||||
A Float32 that represents the listener's position along the Z axis.
|
||||
@result A OSStatus indicating success or failure.
|
||||
*/
|
||||
OSStatus SoundEngine_SetListenerPosition(Float32 inX, Float32 inY, Float32 inZ);
|
||||
OSStatus SoundEngine_SetListenerDirection(Float32 inX, Float32 inY, Float32 inZ);
|
||||
|
||||
/*!
|
||||
@function SoundEngine_SetListenerGain
|
||||
@abstract Sets the gain of the listener. Must be >= 0.0
|
||||
@param inValue
|
||||
A Float32 that represents the listener's gain
|
||||
@result A OSStatus indicating success or failure.
|
||||
*/
|
||||
OSStatus SoundEngine_SetListenerGain(Float32 inValue);
|
||||
|
||||
/*!
|
||||
@function SoundEngine_LoadBackgroundMusicTrack
|
||||
@abstract Tells the background music player which file to play
|
||||
@param inPath
|
||||
The absolute path to the file to play.
|
||||
@param inAddToQueue
|
||||
If true, file will be added to the current background music queue. If
|
||||
false, queue will be cleared and only loop the specified file.
|
||||
@param inLoadAtOnce
|
||||
If true, file will be loaded completely into memory. If false, data will be
|
||||
streamed from the file as needed. For games without large memory pressure and/or
|
||||
small background music files, this can save memory access and improve power efficiency
|
||||
@result A OSStatus indicating success or failure.
|
||||
*/
|
||||
OSStatus SoundEngine_LoadBackgroundMusicTrack(const char* inPath, Boolean inAddToQueue, Boolean inLoadAtOnce);
|
||||
|
||||
/*!
|
||||
@function SoundEngine_UnloadBackgroundMusicTrack
|
||||
@abstract Tells the background music player to release all resources and stop playing.
|
||||
@result A OSStatus indicating success or failure.
|
||||
*/
|
||||
OSStatus SoundEngine_UnloadBackgroundMusicTrack();
|
||||
|
||||
/*!
|
||||
@function SoundEngine_StartBackgroundMusic
|
||||
@abstract Tells the background music player to start playing.
|
||||
@result A OSStatus indicating success or failure.
|
||||
*/
|
||||
OSStatus SoundEngine_StartBackgroundMusic();
|
||||
|
||||
/*!
|
||||
@function SoundEngine_StopBackgroundMusic
|
||||
@abstract Tells the background music player to stop playing.
|
||||
@param inAddToQueue
|
||||
If true, playback will stop when all tracks have completed. If false, playback
|
||||
will stop immediately.
|
||||
@result A OSStatus indicating success or failure.
|
||||
*/
|
||||
OSStatus SoundEngine_StopBackgroundMusic(Boolean inStopAtEnd);
|
||||
|
||||
/*!
|
||||
@function SoundEngine_SetBackgroundMusicVolume
|
||||
@abstract Sets the volume for the background music player
|
||||
@param inValue
|
||||
A Float32 that represents the level. The range is between 0.0 and 1.0 (inclusive).
|
||||
@result A OSStatus indicating success or failure.
|
||||
*/
|
||||
OSStatus SoundEngine_SetBackgroundMusicVolume(Float32 inValue);
|
||||
|
||||
/*!
|
||||
@function SoundEngine_GetBackgroundMusicVolume
|
||||
@abstract Gets the volume for the background music player
|
||||
@result A Float32 representing the background music player volume, or 0 if it's not enabled
|
||||
*/
|
||||
Float32 SoundEngine_GetBackgroundMusicVolume();
|
||||
|
||||
/*!
|
||||
@function SoundEngine_LoadLoopingEffect
|
||||
@abstract Loads a sound effect from a file and return an ID to refer to that effect. Note: The files
|
||||
MUST all be in the same data format and sample rate
|
||||
@param inLoopFilePath
|
||||
The absolute path to the file to load. This is the file that will loop continually.
|
||||
@param inAttackFilePath
|
||||
The absolute path to the file to load. This will play once at the start of the effect.
|
||||
Set to NULL if no attack is desired, looping file will play immediately.
|
||||
@param inDecayFilePath
|
||||
The absolute path to the file to load. This will play once after looping has been ended.
|
||||
Triggered using SoundEngine_StopEffect with the inDoDecay set to true. Set to NULL if no
|
||||
decay is desired, looping file will stop immediately.
|
||||
@param outEffectID
|
||||
A UInt32 ID that refers to the effect.
|
||||
@result A OSStatus indicating success or failure.
|
||||
*/
|
||||
OSStatus SoundEngine_LoadLoopingEffect(const char* inLoopFilePath, const char* inAttackFilePath, const char* inDecayFilePath, UInt32* outEffectID);
|
||||
|
||||
/*!
|
||||
@function SoundEngine_LoadEffect
|
||||
@abstract Loads a sound effect from a file and return an ID to refer to that effect.
|
||||
@param inPath
|
||||
The absolute path to the file to load.
|
||||
@param outEffectID
|
||||
A UInt32 ID that refers to the effect.
|
||||
@result A OSStatus indicating success or failure.
|
||||
*/
|
||||
OSStatus SoundEngine_LoadEffect(const char* inPath, UInt32* outEffectID);
|
||||
|
||||
/*!
|
||||
@function SoundEngine_UnloadEffect
|
||||
@abstract Releases all resources associated with the given effect ID
|
||||
@param inEffectID
|
||||
The ID of the effect to unload.
|
||||
@result A OSStatus indicating success or failure.
|
||||
*/
|
||||
OSStatus SoundEngine_UnloadEffect(UInt32 inEffectID);
|
||||
|
||||
/*!
|
||||
@function SoundEngine_StartEffect
|
||||
@abstract Starts playback of an effect
|
||||
@param inEffectID
|
||||
The ID of the effect to start.
|
||||
@result A OSStatus indicating success or failure.
|
||||
*/
|
||||
OSStatus SoundEngine_StartEffect(UInt32 inEffectID);
|
||||
|
||||
/*!
|
||||
@function SoundEngine_StopEffect
|
||||
@abstract Stops playback of an effect
|
||||
@param inEffectID
|
||||
The ID of the effect to stop.
|
||||
@param inDoDecay
|
||||
Whether to play the decay file or stop immmediately (this is ignored
|
||||
for non-looping effects)
|
||||
@result A OSStatus indicating success or failure.
|
||||
*/
|
||||
OSStatus SoundEngine_StopEffect(UInt32 inEffectID, Boolean inDoDecay);
|
||||
|
||||
/*!
|
||||
@function SoundEngine_Vibrate
|
||||
@abstract Tells the device to vibrate
|
||||
*/
|
||||
#if TARGET_OS_IPHONE
|
||||
#define SoundEngine_Vibrate() AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
|
||||
#endif
|
||||
|
||||
/*!
|
||||
@function SoundEngine_SetEffectPitch
|
||||
@abstract Applies pitch shifting to an effect
|
||||
@param inEffectID
|
||||
The ID of the effect to adjust
|
||||
@param inValue
|
||||
A Float32 that represents the pitch scalar, with 1.0 being unchanged. Must
|
||||
be greater than 0.
|
||||
@result A OSStatus indicating success or failure.
|
||||
*/
|
||||
OSStatus SoundEngine_SetEffectPitch(UInt32 inEffectID, Float32 inValue);
|
||||
|
||||
/*!
|
||||
@function SoundEngine_SetEffectVolume
|
||||
@abstract Sets the volume for an effect
|
||||
@param inEffectID
|
||||
The ID of the effect to adjust
|
||||
@param inValue
|
||||
A Float32 that represents the level. The range is between 0.0 and 1.0 (inclusive).
|
||||
@result A OSStatus indicating success or failure.
|
||||
*/
|
||||
OSStatus SoundEngine_SetEffectLevel(UInt32 inEffectID, Float32 inValue);
|
||||
|
||||
/*!
|
||||
@function SoundEngine_SetEffectPosition
|
||||
@abstract Tells the engine whether a given effect should loop when played or if it should
|
||||
play through just once and stop.
|
||||
@param inEffectID
|
||||
The ID of the effect to adjust
|
||||
@param inX
|
||||
A Float32 that represents the effect's position along the X axis. Maximum distance
|
||||
is 100000.0 (absolute, not per axis), reference distance (distance from which gain
|
||||
begins to attenuate) is 1.0
|
||||
@param inY
|
||||
A Float32 that represents the effect's position along the Y axis. Maximum distance
|
||||
is 100000.0 (absolute, not per axis), reference distance (distance from which gain
|
||||
begins to attenuate) is 1.0
|
||||
@param inZ
|
||||
A Float32 that represents the effect's position along the Z axis. Maximum distance
|
||||
is 100000.0 by default (absolute, not per axis), reference distance (distance from
|
||||
which gain begins to attenuate) is 1.0
|
||||
@result A OSStatus indicating success or failure.
|
||||
*/
|
||||
OSStatus SoundEngine_SetEffectPosition(UInt32 inEffectID, Float32 inX, Float32 inY, Float32 inZ);
|
||||
|
||||
/*!
|
||||
@function SoundEngine_SetEffectsVolume
|
||||
@abstract Sets the overall volume for the effects
|
||||
@param inValue
|
||||
A Float32 that represents the level. The range is between 0.0 and 1.0 (inclusive).
|
||||
@result A OSStatus indicating success or failure.
|
||||
*/
|
||||
OSStatus SoundEngine_SetEffectsVolume(Float32 inValue);
|
||||
|
||||
/*!
|
||||
@function SoundEngine_GetEffectsVolume
|
||||
@abstract Gets the overall volume for the effects
|
||||
@result A Float32 representing the effects volume, or 0 if it's disabled
|
||||
*/
|
||||
Float32 SoundEngine_GetEffectsVolume();
|
||||
|
||||
/*!
|
||||
@function SoundEngine_SetMaxDistance
|
||||
@abstract Sets the maximum distance for effect attenuation. Gain will attenuate between the
|
||||
reference distance and the maximum distance, after which gain will be 0.0
|
||||
@param inValue
|
||||
A Float32 that represents the level. Must be greater than 0.0.
|
||||
@result A OSStatus indicating success or failure.
|
||||
*/
|
||||
OSStatus SoundEngine_SetMaxDistance(Float32 inValue);
|
||||
|
||||
/*!
|
||||
@function SoundEngine_SetReferenceDistance
|
||||
@abstract Sets the distance at which effect gain attenuation begins. It will attenuate between
|
||||
the reference distance and the maximum distance. Sounds closer than the reference
|
||||
distance will have no attenuation applied
|
||||
@param inValue
|
||||
A Float32 that represents the level. Must be greater than 0.0.
|
||||
@result A OSStatus indicating success or failure.
|
||||
*/
|
||||
OSStatus SoundEngine_SetReferenceDistance(Float32 inValue);
|
||||
|
||||
/*!
|
||||
@function SoundEngine_SetEffectReferenceDistance
|
||||
@abstract Sets the distance at which effect gain attenuation begins. It will attenuate between
|
||||
the reference distance and the maximum distance. Sounds closer than the reference
|
||||
distance will have no attenuation applied
|
||||
@param inEffectId
|
||||
The sound engine effect Id
|
||||
@param inValue
|
||||
A Float32 that represents the level. Must be greater than 0.0.
|
||||
@result A OSStatus indicating success or failure.
|
||||
*/
|
||||
OSStatus SoundEngine_SetEffectReferenceDistance(UInt32 inEffectID, Float32 inValue);
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
123
common/ios/doomengine/arialGlyphRects.h
Executable file
123
common/ios/doomengine/arialGlyphRects.h
Executable file
@@ -0,0 +1,123 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 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.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
// generated by fontimg
|
||||
//
|
||||
|
||||
// struct GlyphRect { unsigned short x0, y0, x1, y1; float xoff, yoff, xadvance; };
|
||||
GlyphRect glyphRects[] = {
|
||||
/* ' ' */ { 2, 2, 2, 2, 0.000000, 0.000000, 7.958042 },
|
||||
/* '!' */ { 6, 2, 9, 22, 2.250000, -20.750000, 7.958042 },
|
||||
/* '"' */ { 14, 2, 21, 9, 1.250000, -20.750000, 10.167832 },
|
||||
/* '#' */ { 26, 2, 41, 23, 0.250000, -21.000000, 15.930070 },
|
||||
/* '$' */ { 46, 2, 59, 27, 1.000000, -22.500000, 15.930070 },
|
||||
/* '%' */ { 64, 2, 86, 24, 1.500000, -21.000000, 25.468531 },
|
||||
/* '&' */ { 92, 2, 109, 23, 1.000000, -21.000000, 19.104895 },
|
||||
/* ''' */ { 114, 2, 117, 9, 1.250000, -20.750000, 5.468532 },
|
||||
/* '(' */ { 122, 2, 129, 29, 1.500000, -21.000000, 9.538462 },
|
||||
/* ')' */ { 134, 2, 141, 29, 1.500000, -21.000000, 9.538462 },
|
||||
/* '*' */ { 146, 2, 155, 11, 0.750000, -21.000000, 11.146853 },
|
||||
/* '+' */ { 160, 2, 173, 15, 1.500000, -17.000000, 16.727272 },
|
||||
/* ',' */ { 178, 2, 181, 9, 2.250000, -3.000000, 7.958042 },
|
||||
/* '-' */ { 186, 2, 194, 4, 0.750000, -8.750000, 9.538462 },
|
||||
/* '.' */ { 198, 2, 201, 5, 2.500000, -3.000000, 7.958042 },
|
||||
/* '/' */ { 206, 2, 214, 23, 0.000000, -21.000000, 7.958042 },
|
||||
/* '0' */ { 218, 2, 231, 23, 1.000000, -20.750000, 15.930070 },
|
||||
/* '1' */ { 236, 2, 243, 22, 3.000000, -20.750000, 15.930070 },
|
||||
/* '2' */ { 2, 34, 15, 54, 0.750000, -20.750000, 15.930070 },
|
||||
/* '3' */ { 20, 34, 33, 55, 1.000000, -20.750000, 15.930070 },
|
||||
/* '4' */ { 38, 34, 52, 54, 0.250000, -20.750000, 15.930070 },
|
||||
/* '5' */ { 58, 34, 72, 54, 1.000000, -20.250000, 15.930070 },
|
||||
/* '6' */ { 76, 34, 89, 55, 1.000000, -20.750000, 15.930070 },
|
||||
/* '7' */ { 94, 34, 107, 54, 1.250000, -20.250000, 15.930070 },
|
||||
/* '8' */ { 112, 34, 125, 55, 1.000000, -20.750000, 15.930070 },
|
||||
/* '9' */ { 130, 34, 143, 55, 1.000000, -20.750000, 15.930070 },
|
||||
/* ':' */ { 148, 34, 151, 49, 2.500000, -15.000000, 7.958042 },
|
||||
/* ';' */ { 156, 34, 159, 53, 2.250000, -15.000000, 7.958042 },
|
||||
/* '<' */ { 164, 34, 177, 48, 1.500000, -17.250000, 16.727272 },
|
||||
/* '=' */ { 182, 34, 195, 42, 1.500000, -14.500000, 16.727272 },
|
||||
/* '>' */ { 200, 34, 213, 48, 1.500000, -17.250000, 16.727272 },
|
||||
/* '?' */ { 218, 34, 231, 55, 1.250000, -21.000000, 15.930070 },
|
||||
/* '@' */ { 2, 60, 28, 87, 1.500000, -21.000000, 29.076923 },
|
||||
/* 'A' */ { 34, 60, 53, 80, -0.250000, -20.750000, 19.104895 },
|
||||
/* 'B' */ { 58, 60, 73, 80, 2.000000, -20.750000, 19.104895 },
|
||||
/* 'C' */ { 78, 60, 96, 81, 1.250000, -21.000000, 20.685314 },
|
||||
/* 'D' */ { 102, 60, 119, 80, 2.000000, -20.750000, 20.685314 },
|
||||
/* 'E' */ { 124, 60, 139, 80, 2.250000, -20.750000, 19.104895 },
|
||||
/* 'F' */ { 144, 60, 158, 80, 2.250000, -20.750000, 17.496504 },
|
||||
/* 'G' */ { 162, 60, 181, 81, 1.500000, -21.000000, 22.279720 },
|
||||
/* 'H' */ { 186, 60, 202, 80, 2.250000, -20.750000, 20.685314 },
|
||||
/* 'I' */ { 208, 60, 211, 80, 2.500000, -20.750000, 7.958042 },
|
||||
/* 'J' */ { 216, 60, 227, 81, 0.750000, -20.750000, 14.321678 },
|
||||
/* 'K' */ { 232, 60, 249, 80, 2.000000, -20.750000, 19.104895 },
|
||||
/* 'L' */ { 2, 92, 15, 112, 2.000000, -20.750000, 15.930070 },
|
||||
/* 'M' */ { 20, 92, 39, 112, 2.000000, -20.750000, 23.860140 },
|
||||
/* 'N' */ { 44, 92, 60, 112, 2.000000, -20.750000, 20.685314 },
|
||||
/* 'O' */ { 66, 92, 85, 113, 1.250000, -21.000000, 22.279720 },
|
||||
/* 'P' */ { 90, 92, 106, 112, 2.000000, -20.750000, 19.104895 },
|
||||
/* 'Q' */ { 110, 92, 130, 114, 1.000000, -21.000000, 22.279720 },
|
||||
/* 'R' */ { 136, 92, 154, 112, 2.250000, -20.750000, 20.685314 },
|
||||
/* 'S' */ { 160, 92, 176, 113, 1.250000, -21.000000, 19.104895 },
|
||||
/* 'T' */ { 182, 92, 198, 112, 0.500000, -20.750000, 17.496504 },
|
||||
/* 'U' */ { 204, 92, 220, 113, 2.250000, -20.750000, 20.685314 },
|
||||
/* 'V' */ { 226, 92, 245, 112, 0.000000, -20.750000, 19.104895 },
|
||||
/* 'W' */ { 2, 120, 28, 140, 0.250000, -20.750000, 27.034966 },
|
||||
/* 'X' */ { 34, 120, 53, 140, 0.000000, -20.750000, 19.104895 },
|
||||
/* 'Y' */ { 58, 120, 77, 140, 0.000000, -20.750000, 19.104895 },
|
||||
/* 'Z' */ { 82, 120, 98, 140, 0.500000, -20.750000, 17.496504 },
|
||||
/* '[' */ { 104, 120, 109, 146, 1.750000, -20.750000, 7.958042 },
|
||||
/* '\' */ { 114, 120, 122, 141, 0.000000, -21.000000, 7.958042 },
|
||||
/* ']' */ { 126, 120, 131, 146, 0.500000, -20.750000, 7.958042 },
|
||||
/* '^' */ { 136, 120, 148, 131, 0.750000, -21.000000, 13.440559 },
|
||||
/* '_' */ { 152, 120, 169, 122, -0.500000, 3.750000, 15.930070 },
|
||||
/* '`' */ { 174, 120, 179, 124, 1.000000, -20.750000, 9.538462 },
|
||||
/* 'a' */ { 184, 120, 197, 135, 1.000000, -15.250000, 15.930070 },
|
||||
/* 'b' */ { 202, 120, 215, 141, 1.750000, -20.750000, 15.930070 },
|
||||
/* 'c' */ { 220, 120, 233, 135, 1.000000, -15.250000, 14.321678 },
|
||||
/* 'd' */ { 238, 120, 251, 141, 0.750000, -20.750000, 15.930070 },
|
||||
/* 'e' */ { 2, 152, 15, 167, 1.000000, -15.250000, 15.930070 },
|
||||
/* 'f' */ { 20, 152, 28, 173, 0.250000, -21.000000, 7.958042 },
|
||||
/* 'g' */ { 34, 152, 47, 173, 0.750000, -15.250000, 15.930070 },
|
||||
/* 'h' */ { 52, 152, 64, 172, 1.750000, -20.750000, 15.930070 },
|
||||
/* 'i' */ { 70, 152, 72, 172, 1.750000, -20.750000, 6.363636 },
|
||||
/* 'j' */ { 78, 152, 84, 179, -1.500000, -20.750000, 6.363636 },
|
||||
/* 'k' */ { 88, 152, 100, 172, 1.750000, -20.750000, 14.321678 },
|
||||
/* 'l' */ { 106, 152, 108, 172, 1.750000, -20.750000, 6.363636 },
|
||||
/* 'm' */ { 114, 152, 134, 167, 1.750000, -15.250000, 23.860140 },
|
||||
/* 'n' */ { 140, 152, 152, 167, 1.750000, -15.250000, 15.930070 },
|
||||
/* 'o' */ { 158, 152, 172, 167, 0.750000, -15.250000, 15.930070 },
|
||||
/* 'p' */ { 178, 152, 191, 173, 1.750000, -15.250000, 15.930070 },
|
||||
/* 'q' */ { 196, 152, 209, 173, 1.000000, -15.250000, 15.930070 },
|
||||
/* 'r' */ { 214, 152, 222, 167, 1.750000, -15.250000, 9.538462 },
|
||||
/* 's' */ { 228, 152, 240, 167, 0.750000, -15.250000, 14.321678 },
|
||||
/* 't' */ { 246, 152, 253, 172, 0.500000, -20.250000, 7.958042 },
|
||||
/* 'u' */ { 2, 184, 14, 199, 1.750000, -15.000000, 15.930070 },
|
||||
/* 'v' */ { 20, 184, 33, 199, 0.250000, -15.000000, 14.321678 },
|
||||
/* 'w' */ { 38, 184, 58, 199, 0.000000, -15.000000, 20.685314 },
|
||||
/* 'x' */ { 64, 184, 78, 199, 0.000000, -15.000000, 14.321678 },
|
||||
/* 'y' */ { 84, 184, 98, 205, 0.250000, -15.000000, 14.321678 },
|
||||
/* 'z' */ { 102, 184, 115, 199, 0.500000, -15.000000, 14.321678 },
|
||||
/* '{' */ { 120, 184, 128, 211, 0.750000, -21.000000, 9.566434 },
|
||||
/* '|' */ { 134, 184, 136, 211, 2.500000, -21.000000, 7.440559 },
|
||||
/* '}' */ { 142, 184, 150, 211, 0.500000, -21.000000, 9.566434 },
|
||||
/* '~' */ { 156, 184, 170, 188, 1.000000, -12.500000, 16.727272 },
|
||||
/* '' */ { 176, 184, 190, 202, 3.500000, -18.000000, 21.482517 }
|
||||
};
|
||||
166
common/ios/doomengine/cmd.c
Executable file
166
common/ios/doomengine/cmd.c
Executable file
@@ -0,0 +1,166 @@
|
||||
/*
|
||||
* cmd.c
|
||||
* doom
|
||||
*
|
||||
* Created by John Carmack on 4/14/09.
|
||||
* Copyright 2009 id Software. All rights reserved.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
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 "doomiphone.h"
|
||||
|
||||
typedef struct cmd_function_s {
|
||||
struct cmd_function_s *next;
|
||||
const char *name;
|
||||
int hashid;
|
||||
xcommand_t function;
|
||||
} cmd_function_t;
|
||||
|
||||
|
||||
#define MAX_STRING_TOKENS 16
|
||||
#define MAX_STRING_CHARS 1024
|
||||
|
||||
int cmd_argc;
|
||||
char *cmd_argv[ MAX_STRING_TOKENS ];
|
||||
|
||||
cmd_function_t *cmd_functions; // possible commands to execute
|
||||
|
||||
int Cmd_Argc( void ) {
|
||||
return cmd_argc;
|
||||
}
|
||||
|
||||
const char *Cmd_Argv( int arg ) {
|
||||
if( arg >= cmd_argc ) {
|
||||
return "";
|
||||
}
|
||||
|
||||
return cmd_argv[ arg ];
|
||||
}
|
||||
|
||||
|
||||
void Cmd_TokenizeString( const char *text ) {
|
||||
static char *stringCopy;
|
||||
|
||||
// clear the args from the last string
|
||||
// This better not be called recursively...
|
||||
if ( stringCopy ) {
|
||||
free( stringCopy );
|
||||
stringCopy = NULL;
|
||||
}
|
||||
|
||||
cmd_argc = 0;
|
||||
|
||||
if( ! text ) {
|
||||
return;
|
||||
}
|
||||
|
||||
stringCopy = strdup( text );
|
||||
char *strval = stringCopy;
|
||||
|
||||
while( 1 ) {
|
||||
char *start = strsep( &strval," \t\r\n");
|
||||
if ( !start ) {
|
||||
break;
|
||||
}
|
||||
if ( start[0] != 0 ) {
|
||||
cmd_argv[cmd_argc] = start;
|
||||
if ( ++cmd_argc == MAX_STRING_TOKENS ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Cmd_ListCommands_f() {
|
||||
for( cmd_function_t *cmd = cmd_functions ; cmd ; cmd = cmd->next ) {
|
||||
Com_Printf( "%s\n", cmd->name );
|
||||
}
|
||||
}
|
||||
|
||||
void Cmd_AddCommand( const char *cmd_name, xcommand_t function ) {
|
||||
cmd_function_t *cmd;
|
||||
int hashid;
|
||||
|
||||
hashid = HashString( cmd_name );
|
||||
|
||||
// fail if the command already exists
|
||||
for( cmd = cmd_functions ; cmd ; cmd = cmd->next ) {
|
||||
if( hashid == cmd->hashid && !strcmp( cmd_name, cmd->name ) ) {
|
||||
Com_Printf( "Cmd_AddCommand: \"%s\" already defined\n", cmd_name );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
cmd = malloc( sizeof( cmd_function_t ) );
|
||||
cmd->name = cmd_name;
|
||||
cmd->hashid = hashid;
|
||||
cmd->function = function;
|
||||
cmd->next = cmd_functions;
|
||||
cmd_functions = cmd;
|
||||
|
||||
}
|
||||
|
||||
void Cmd_ExecuteString( const char *str ) {
|
||||
int l = strlen( str );
|
||||
if ( str[l-1] == '\n' ) {
|
||||
char *stripped = alloca( l+1 );
|
||||
strcpy( stripped, str );
|
||||
str = stripped;
|
||||
stripped[l-1] = 0;
|
||||
}
|
||||
|
||||
Com_Printf( "%s\n", str );
|
||||
Cmd_TokenizeString( str );
|
||||
|
||||
const char *arg0 = Cmd_Argv( 0 );
|
||||
int hashid = HashString( arg0 );
|
||||
|
||||
// check commands first
|
||||
for( cmd_function_t *cmd = cmd_functions ; cmd ; cmd = cmd->next ) {
|
||||
if( hashid == cmd->hashid && !strcmp( arg0, cmd->name ) ) {
|
||||
cmd->function();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// then check cvars
|
||||
cvar_t *cvar = Cvar_FindVar( arg0 );
|
||||
if ( cvar ) {
|
||||
Cvar_Set( arg0, Cmd_Argv( 1 ) );
|
||||
return;
|
||||
}
|
||||
Com_Printf( "Unknown command: %s\n", arg0 );
|
||||
}
|
||||
|
||||
// execute each line of the config file
|
||||
void Cmd_ExecuteFile( const char *fullPathName ) {
|
||||
Com_Printf( "Executing command file '%s'\n", fullPathName );
|
||||
FILE *f = fopen( fullPathName, "rb" );
|
||||
if ( !f ) {
|
||||
Com_Printf( "Failed to open.\n" );
|
||||
return;
|
||||
}
|
||||
char line[1024];
|
||||
while( fgets( line, sizeof( line ), f ) ) {
|
||||
Cmd_ExecuteString( line );
|
||||
}
|
||||
fclose( f );
|
||||
}
|
||||
|
||||
374
common/ios/doomengine/cvar.c
Executable file
374
common/ios/doomengine/cvar.c
Executable file
@@ -0,0 +1,374 @@
|
||||
/*
|
||||
|
||||
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 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 License for more details.
|
||||
|
||||
You should have received a copy of the GNU General 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 "doomiphone.h"
|
||||
|
||||
|
||||
cvar_t *cvar_vars;
|
||||
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: Cvar_FindVar -Return cvar;
|
||||
|
||||
Parameters: var_name -[in] Name of cvar to lookup.
|
||||
|
||||
Returns: NULL if cvar not found, otherwise returns the cvar.
|
||||
|
||||
Notes:
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
cvar_t *Cvar_FindVar( const char *var_name )
|
||||
{
|
||||
cvar_t *var;
|
||||
int hashid;
|
||||
|
||||
hashid = HashString( var_name );
|
||||
|
||||
for( var = cvar_vars ; var ; var = var->next )
|
||||
{
|
||||
if( hashid == var->hashid && !strcasecmp( var_name, var->name ) )
|
||||
{
|
||||
return var;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: Cvar_VariableValue -Get value of cvar.
|
||||
|
||||
Parameters: var_name -[in] Name of cvar to get value.
|
||||
|
||||
Returns: 0 if not found, other the value of the cvar.
|
||||
|
||||
Notes:
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
float Cvar_VariableValue( const char *var_name )
|
||||
{
|
||||
cvar_t *var;
|
||||
|
||||
var = Cvar_FindVar( var_name );
|
||||
if( ! var )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (float)atof( var->string );
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: Cvar_VariableString -Get cvar variable as string.
|
||||
|
||||
Parameters: var_name -[in] Name of cvar to get value.
|
||||
|
||||
Returns: Blank string on error, otherwise value string.
|
||||
|
||||
Notes:
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
char *Cvar_VariableString( const char *var_name )
|
||||
{
|
||||
cvar_t *var;
|
||||
|
||||
var = Cvar_FindVar( var_name );
|
||||
if( ! var )
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
return var->string;
|
||||
}
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: Cvar_CompleteVariable -Complete cvar string name.
|
||||
|
||||
Parameters: partial -[in] Partial name of string to look up.
|
||||
|
||||
Returns: NULL if partial string not found, otherwise the complete
|
||||
string name.
|
||||
|
||||
Notes:
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
char *Cvar_CompleteVariable( const char *partial )
|
||||
{
|
||||
cvar_t *cvar;
|
||||
size_t len;
|
||||
|
||||
len = strlen( partial );
|
||||
|
||||
if( ! len )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//
|
||||
// Check partial match.
|
||||
//
|
||||
for( cvar = cvar_vars ; cvar ; cvar = cvar->next )
|
||||
{
|
||||
if( ! strncmp( partial, cvar->name, len ) )
|
||||
{
|
||||
return cvar->name;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: Cvar_Get -Get cvar structure.
|
||||
|
||||
Parameters:
|
||||
var_name -[in] the name of the cvar variable.
|
||||
var_value -[in] string value of the cvar variable.
|
||||
flags -[in] see CVARFlags for more information.
|
||||
|
||||
Returns: NULL on error, otherwise valid pointer to cvar_t structure.
|
||||
|
||||
Notes:
|
||||
If the variable already exists, the value will not be set and
|
||||
the flags will be or'ed.
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
cvar_t *Cvar_Get( const char *var_name, const char *var_value, CVARFlags flags ) {
|
||||
cvar_t *var;
|
||||
|
||||
var = Cvar_FindVar( var_name );
|
||||
if( var ) {
|
||||
var->flags |= flags;
|
||||
return var;
|
||||
}
|
||||
|
||||
if( ! var_value ) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
var = malloc( sizeof( *var ) );
|
||||
var->name = strdup( var_name );
|
||||
var->string = strdup( var_value );
|
||||
var->defaultString = strdup( var_value );
|
||||
var->hashid = HashString( var_name );
|
||||
var->modified = true;
|
||||
var->value = (float)atof( var->string );
|
||||
|
||||
// link the variable in
|
||||
var->next = cvar_vars;
|
||||
cvar_vars = var;
|
||||
|
||||
var->flags = flags;
|
||||
|
||||
return var;
|
||||
}
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function:
|
||||
|
||||
Parameters:
|
||||
|
||||
Returns:
|
||||
|
||||
Notes:
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
void Cvar_Set( const char *var_name, const char *value ) {
|
||||
cvar_t *var;
|
||||
|
||||
var = Cvar_FindVar( var_name );
|
||||
if( ! var ) {
|
||||
Com_Printf( "Cvar '%s' doesn't exist\n", var_name );
|
||||
return;
|
||||
}
|
||||
|
||||
if( var->flags & CVAR_NOSET ) {
|
||||
Com_Printf( "%s is write protected.\n", var_name );
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if( ! strcmp( value, var->string ) ) {
|
||||
return; // not changed
|
||||
}
|
||||
|
||||
var->modified = true;
|
||||
|
||||
free( var->string ); // free the old value string
|
||||
|
||||
var->string = strdup( value );
|
||||
var->value = (float)atof( var->string );
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function:
|
||||
|
||||
Parameters:
|
||||
|
||||
Returns:
|
||||
|
||||
Notes:
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
void Cvar_SetValue( const char *var_name, float value )
|
||||
{
|
||||
char val[ 32 ];
|
||||
|
||||
if( value == (int)value )
|
||||
{
|
||||
snprintf( val, sizeof( val ), "%i", (int)value );
|
||||
}
|
||||
else
|
||||
{
|
||||
snprintf( val, sizeof( val ), "%f", value );
|
||||
}
|
||||
|
||||
Cvar_Set( var_name, val );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: Cvar_Command -Handles variable inspection and changing from
|
||||
the console.
|
||||
|
||||
Parameters: Nothing.
|
||||
|
||||
Returns: false if variable not found, otherwise true.
|
||||
|
||||
Notes:
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
boolean Cvar_Command( void )
|
||||
{
|
||||
cvar_t *v;
|
||||
|
||||
// check variables
|
||||
v = Cvar_FindVar( Cmd_Argv( 0 ) );
|
||||
if( ! v )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// perform a variable print or set
|
||||
if( Cmd_Argc() == 1 )
|
||||
{
|
||||
Com_Printf( "\"%s\" is \"%s\"\n", v->name, v->string );
|
||||
return true;
|
||||
}
|
||||
|
||||
Cvar_Set( v->name, Cmd_Argv( 1 ) );
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: Cvar_WriteVariables -Appends lines containing "set variable value"
|
||||
for all variables with the archive flag set
|
||||
to true.
|
||||
|
||||
Parameters:
|
||||
|
||||
Returns: Nothing.
|
||||
|
||||
Notes:
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
void Cvar_WriteVariables( const char *path )
|
||||
{
|
||||
cvar_t *var;
|
||||
char buffer[1024];
|
||||
FILE *f;
|
||||
|
||||
f = fopen( path, "a" );
|
||||
for( var = cvar_vars ; var ; var = var->next )
|
||||
{
|
||||
if( var->flags & CVAR_ARCHIVE )
|
||||
{
|
||||
snprintf( buffer, sizeof( buffer ), "set %s %s\n", var->name, var->string );
|
||||
fprintf( f, "%s", buffer );
|
||||
}
|
||||
}
|
||||
fclose( f );
|
||||
}
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: Cvar_List_f -Print all cvars to the console.
|
||||
|
||||
Parameters: Nothing.
|
||||
|
||||
Returns: Nothing.
|
||||
|
||||
Notes:
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
void Cvar_List_f( void )
|
||||
{
|
||||
cvar_t *var;
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
for( var = cvar_vars ; var ; var = var->next, ++i )
|
||||
{
|
||||
if( var->flags & CVAR_ARCHIVE )
|
||||
{
|
||||
Com_Printf ("*");
|
||||
}
|
||||
else
|
||||
{
|
||||
Com_Printf (" ");
|
||||
}
|
||||
|
||||
|
||||
Com_Printf (" %s \"%s\"\n", var->name, var->string);
|
||||
}
|
||||
|
||||
Com_Printf ("%i cvars\n", i);
|
||||
}
|
||||
|
||||
|
||||
void Cvar_Reset_f( void ) {
|
||||
for( cvar_t *var = cvar_vars ; var ; var = var->next ) {
|
||||
Cvar_Set( var->name, var->defaultString );
|
||||
}
|
||||
}
|
||||
|
||||
139
common/ios/doomengine/cvar.h
Executable file
139
common/ios/doomengine/cvar.h
Executable file
@@ -0,0 +1,139 @@
|
||||
/*
|
||||
|
||||
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.
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
* cvar.h: Dynamic variable tracking.
|
||||
*
|
||||
* Author: Michael Liebscher <johnnycanuck@users.sourceforge.net>
|
||||
* Date: 2004
|
||||
*
|
||||
* Acknowledgement:
|
||||
* This code was derived from Quake II, and was originally
|
||||
* written by Id Software, Inc.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
Notes:
|
||||
|
||||
Dynamic variable tracking.
|
||||
|
||||
cvar_t variables are used to hold scalar or string variables
|
||||
that can be changed or displayed at the console or prog code
|
||||
as well as accessed directly in C code.
|
||||
|
||||
The user can access cvars from the console in three ways:
|
||||
r_draworder -prints the current value
|
||||
r_draworder 0 -sets the current value to 0
|
||||
set r_draworder 0 -as above, but creates the cvar if not present
|
||||
|
||||
Cvars are restricted from having the same names as commands to keep this
|
||||
module from being ambiguous.
|
||||
|
||||
This module is implemented by cvar.c
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __CVAR_H__
|
||||
#define __CVAR_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef enum _CVARFlags
|
||||
{
|
||||
CVAR_INIT = 0x0, // Just create it with no flag value.
|
||||
CVAR_ARCHIVE = 0x1, // Set to cause it to be saved to the config file
|
||||
CVAR_NOSET = 0x8, // Don't allow change from console at all,
|
||||
// but can be set from the command line.
|
||||
} CVARFlags;
|
||||
|
||||
|
||||
// nothing outside the Cvar_*() functions should modify these fields!
|
||||
typedef struct cvar_s {
|
||||
// By putting the value first, cvars can be referenced in other code
|
||||
// as just extern float *name, without having to include the cvar_t
|
||||
// declaration. This is probably a bad idea that I will
|
||||
// regret at some point.
|
||||
float value;
|
||||
|
||||
char *name;
|
||||
char *string;
|
||||
char *defaultString;
|
||||
int hashid;
|
||||
int flags;
|
||||
boolean modified; // set each time the cvar is changed
|
||||
struct cvar_s *next;
|
||||
} cvar_t;
|
||||
|
||||
extern cvar_t *cvar_vars;
|
||||
|
||||
void Cvar_List_f();
|
||||
void Cvar_Reset_f();
|
||||
|
||||
extern cvar_t *Cvar_Get( const char *var_name, const char *value, CVARFlags flags );
|
||||
// creates the variable if it doesn't exist, or returns the existing one
|
||||
// if it exists, the value will not be changed, but flags will be ORed in
|
||||
// that allows variables to be unarchived without needing bitflags
|
||||
|
||||
extern cvar_t *Cvar_FindVar( const char *var_name );
|
||||
// returns NULL if it doesn't exist
|
||||
|
||||
extern void Cvar_Set( const char *var_name, const char *value );
|
||||
// prints warning if it doesn't exist
|
||||
|
||||
extern void Cvar_SetValue( const char *var_name, float value );
|
||||
// expands value to a string and calls Cvar_Set
|
||||
|
||||
extern float Cvar_VariableValue( const char *var_name );
|
||||
// returns 0 if not defined or non numeric
|
||||
|
||||
extern char *Cvar_VariableString( const char *var_name );
|
||||
// returns an empty string if not defined
|
||||
|
||||
extern char *Cvar_CompleteVariable( const char *partial );
|
||||
// attempts to match a partial variable name for command line completion
|
||||
// returns NULL if nothing fits
|
||||
|
||||
extern void Cvar_GetLatchedVars( void );
|
||||
// any CVAR_LATCHED variables that have been set will now take effect
|
||||
|
||||
extern void Cvar_WriteVariables( const char *path );
|
||||
// appends lines containing "set variable value" for all variables
|
||||
// with the archive flag set to true.
|
||||
|
||||
extern void Cvar_Init( void );
|
||||
|
||||
extern char *Cvar_Userinfo( void );
|
||||
// returns an info string containing all the CVAR_USERINFO cvars
|
||||
|
||||
extern char *Cvar_Serverinfo( void );
|
||||
// returns an info string containing all the CVAR_SERVERINFO cvars
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* __CVAR_H__ */
|
||||
|
||||
140
common/ios/doomengine/doomiphone.h
Executable file
140
common/ios/doomengine/doomiphone.h
Executable file
@@ -0,0 +1,140 @@
|
||||
/*
|
||||
* doomiphone.h
|
||||
* doom
|
||||
*
|
||||
* Created by John Carmack on 3/13/09.
|
||||
* Copyright 2009 idSoftware. All rights reserved.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 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.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef _DOOM_IPHONE_H_
|
||||
#define _DOOM_IPHONE_H_
|
||||
|
||||
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
|
||||
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
|
||||
#define IS_IPHONE_5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0f)
|
||||
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
#include <assert.h>
|
||||
#include <setjmp.h>
|
||||
#include <math.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <dlfcn.h>
|
||||
#include <dlfcn.h>
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/mman.h>
|
||||
#include <dirent.h>
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <pthread.h>
|
||||
#include <semaphore.h>
|
||||
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <ifaddrs.h>
|
||||
|
||||
#include <OpenGLES/ES1/gl.h>
|
||||
#include <OpenGLES/ES1/glext.h>
|
||||
#include "gles_glue.h"
|
||||
|
||||
#include <OpenAL/al.h>
|
||||
#include <OpenAL/alc.h>
|
||||
#include <OpenAL/oalStaticBufferExtension.h>
|
||||
#undef ALCAPI
|
||||
#define ALCAPI
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "prboom/SDL_opengl.h"
|
||||
|
||||
// prBoom code
|
||||
#include "prboom/m_fixed.h"
|
||||
#include "prboom/doomdef.h"
|
||||
#include "prboom/doomtype.h"
|
||||
#include "prboom/doomstat.h"
|
||||
#include "prboom/d_net.h"
|
||||
#include "prboom/dstrings.h"
|
||||
#include "prboom/sounds.h"
|
||||
#include "prboom/z_zone.h"
|
||||
#include "prboom/w_wad.h"
|
||||
#include "prboom/s_sound.h"
|
||||
#include "prboom/v_video.h"
|
||||
#include "prboom/f_finale.h"
|
||||
#include "prboom/f_wipe.h"
|
||||
#include "prboom/m_argv.h"
|
||||
#include "prboom/m_misc.h"
|
||||
#include "prboom/m_menu.h"
|
||||
#include "prboom/p_checksum.h"
|
||||
#include "prboom/i_main.h"
|
||||
#include "prboom/i_system.h"
|
||||
#include "prboom/i_sound.h"
|
||||
#include "prboom/i_video.h"
|
||||
#include "prboom/g_game.h"
|
||||
#include "prboom/hu_stuff.h"
|
||||
#include "prboom/wi_stuff.h"
|
||||
#include "prboom/st_stuff.h"
|
||||
#include "prboom/am_map.h"
|
||||
#include "prboom/p_setup.h"
|
||||
#include "prboom/r_draw.h"
|
||||
#include "prboom/r_main.h"
|
||||
#include "prboom/r_fps.h"
|
||||
#include "prboom/d_main.h"
|
||||
#include "prboom/d_deh.h"
|
||||
#include "prboom/lprintf.h"
|
||||
#include "prboom/am_map.h"
|
||||
#include "prboom/gl_intern.h"
|
||||
#include "prboom/p_mobj.h"
|
||||
#include "prboom/p_maputl.h"
|
||||
#include "prboom/p_map.h"
|
||||
// open / close name collision problem... #include "prboom/p_spec.h"
|
||||
#include "prboom/p_inter.h"
|
||||
#include "prboom/m_random.h"
|
||||
#include "prboom/m_bbox.h"
|
||||
#include "prboom/m_cheat.h"
|
||||
|
||||
// we will now define landscapeViewport / landscapeScissor to rotate the coords
|
||||
#undef glViewport
|
||||
#undef glScissor
|
||||
|
||||
// our vestigial system environment
|
||||
#include "misc.h"
|
||||
#include "cvar.h"
|
||||
|
||||
// new iphone code
|
||||
#include "ipak.h"
|
||||
#include "iphone_email.h" //gsh, adds support for emailing the console to id
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#include "iphone_doom.h"
|
||||
|
||||
#endif
|
||||
228
common/ios/doomengine/gles_glue.c
Executable file
228
common/ios/doomengine/gles_glue.c
Executable file
@@ -0,0 +1,228 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 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 "doomiphone.h"
|
||||
|
||||
//int registration_sequence;
|
||||
|
||||
//#include "iphone_gl.h"
|
||||
|
||||
void R_Draw_Blend( int x, int y, int w, int h, color4_t c ) {
|
||||
|
||||
x *= ((float)displaywidth) / 480.0f;
|
||||
y *= ((float)displayheight) / 320.0f;
|
||||
w *= ((float)displaywidth) / 480.0f;
|
||||
h *= ((float)displayheight) / 320.0f;
|
||||
|
||||
glDisable( GL_TEXTURE_2D );
|
||||
glColor4ubv( c );
|
||||
|
||||
glBegin( GL_QUADS );
|
||||
|
||||
glVertex2i( x, y );
|
||||
glVertex2i( x+w, y );
|
||||
glVertex2i( x+w, y+h );
|
||||
glVertex2i( x, y+h );
|
||||
|
||||
glEnd();
|
||||
|
||||
glColor3f( 1, 1, 1 );
|
||||
glEnable( GL_TEXTURE_2D );
|
||||
}
|
||||
|
||||
|
||||
void R_Draw_Fill( int x, int y, int w, int h, color3_t c ) {
|
||||
// as of 2.2 OS, doing a clear with a small scissor rect is MUCH slower
|
||||
// than drawing geometry
|
||||
color4_t c4;
|
||||
c4[0] = c[0];
|
||||
c4[1] = c[1];
|
||||
c4[2] = c[2];
|
||||
c4[3] = 255;
|
||||
R_Draw_Blend( x, y, w, h, c4 );
|
||||
}
|
||||
|
||||
void GLCheckError(const char *message) {
|
||||
GLint err = glGetError();
|
||||
if ( err != GL_NO_ERROR ) {
|
||||
printf( "GL ERROR %d from %s\n", err, message );
|
||||
}
|
||||
}
|
||||
|
||||
unsigned int QGLBeginStarted = 0;
|
||||
|
||||
struct Vertex {
|
||||
float xyz[3];
|
||||
float st[2];
|
||||
#ifdef VERTEX_COLOR
|
||||
GLubyte c[4];
|
||||
#endif
|
||||
};
|
||||
|
||||
#define MAX_VERTS 16384
|
||||
|
||||
typedef struct Vertex Vertex;
|
||||
Vertex immediate[ MAX_VERTS ];
|
||||
Vertex vab;
|
||||
short quad_indexes[MAX_VERTS * 3 / 2 ];
|
||||
int curr_vertex;
|
||||
GLenum curr_prim;
|
||||
|
||||
void SetImmediateModeGLVertexArrays( void ) {
|
||||
glVertexPointer( 3, GL_FLOAT, sizeof( Vertex ), immediate[ 0 ].xyz );
|
||||
glEnableClientState( GL_VERTEX_ARRAY );
|
||||
glTexCoordPointer( 2, GL_FLOAT, sizeof( Vertex ), immediate[ 0 ].st );
|
||||
glEnableClientState( GL_TEXTURE_COORD_ARRAY );
|
||||
#ifdef VERTEX_COLOR
|
||||
glColorPointer( 4, GL_UNSIGNED_BYTE, sizeof( Vertex ), immediate[ 0 ].c );
|
||||
glEnableClientState( GL_COLOR_ARRAY );
|
||||
#endif
|
||||
}
|
||||
|
||||
void InitImmediateModeGL( void ) {
|
||||
for ( int i = 0; i < MAX_VERTS * 3 / 2; i+=6 ) {
|
||||
int q = i / 6 * 4;
|
||||
quad_indexes[ i + 0 ] = q + 0;
|
||||
quad_indexes[ i + 1 ] = q + 1;
|
||||
quad_indexes[ i + 2 ] = q + 2;
|
||||
|
||||
quad_indexes[ i + 3 ] = q + 0;
|
||||
quad_indexes[ i + 4 ] = q + 2;
|
||||
quad_indexes[ i + 5 ] = q + 3;
|
||||
}
|
||||
|
||||
SetImmediateModeGLVertexArrays();
|
||||
}
|
||||
|
||||
void glBegin( GLenum prim ) {
|
||||
curr_vertex = 0;
|
||||
curr_prim = prim;
|
||||
}
|
||||
|
||||
void glVertex3f( GLfloat x, GLfloat y, GLfloat z ) {
|
||||
assert( curr_vertex < MAX_VERTS );
|
||||
vab.xyz[ 0 ] = x;
|
||||
vab.xyz[ 1 ] = y;
|
||||
vab.xyz[ 2 ] = z;
|
||||
immediate[ curr_vertex ] = vab;
|
||||
curr_vertex++;
|
||||
}
|
||||
void glVertex3fv( GLfloat *xyz ) {
|
||||
assert( curr_vertex < MAX_VERTS );
|
||||
vab.xyz[ 0 ] = xyz[0];
|
||||
vab.xyz[ 1 ] = xyz[1];
|
||||
vab.xyz[ 2 ] = xyz[2];
|
||||
immediate[ curr_vertex ] = vab;
|
||||
curr_vertex++;
|
||||
}
|
||||
void glVertex2f( GLfloat x, GLfloat y ) {
|
||||
assert( curr_vertex < MAX_VERTS );
|
||||
vab.xyz[ 0 ] = (float)x;
|
||||
vab.xyz[ 1 ] = (float)y;
|
||||
vab.xyz[ 2 ] = 0.0f;
|
||||
immediate[ curr_vertex ] = vab;
|
||||
curr_vertex++;
|
||||
}
|
||||
void glVertex2i( GLint x, GLint y ) {
|
||||
assert( curr_vertex < MAX_VERTS );
|
||||
vab.xyz[ 0 ] = (float)x;
|
||||
vab.xyz[ 1 ] = (float)y;
|
||||
vab.xyz[ 2 ] = 0.0f;
|
||||
immediate[ curr_vertex ] = vab;
|
||||
curr_vertex++;
|
||||
}
|
||||
|
||||
#ifdef VERTEX_COLOR
|
||||
void glColor4ub( GLubyte r, GLubyte g, GLubyte b, GLubyte a ) {
|
||||
vab.c[ 0 ] = r;
|
||||
vab.c[ 1 ] = g;
|
||||
vab.c[ 2 ] = b;
|
||||
vab.c[ 3 ] = a;
|
||||
}
|
||||
void glColor4ubv( GLubyte *rgba ) {
|
||||
vab.c[ 0 ] = rgba[0];
|
||||
vab.c[ 1 ] = rgba[1];
|
||||
vab.c[ 2 ] = rgba[2];
|
||||
vab.c[ 3 ] = rgba[3];
|
||||
}
|
||||
void glColor4f( GLfloat r, GLfloat g, GLfloat b, GLfloat a ) {
|
||||
vab.c[ 0 ] = (GLubyte) ( r * 255 );
|
||||
vab.c[ 1 ] = (GLubyte) ( g * 255 );
|
||||
vab.c[ 2 ] = (GLubyte) ( b * 255 );
|
||||
vab.c[ 3 ] = (GLubyte) ( a * 255 );
|
||||
}
|
||||
void glColor4fv( GLfloat *rgba ) {
|
||||
vab.c[ 0 ] = (GLubyte) ( rgba[0] * 255 );
|
||||
vab.c[ 1 ] = (GLubyte) ( rgba[1] * 255 );
|
||||
vab.c[ 2 ] = (GLubyte) ( rgba[2] * 255 );
|
||||
vab.c[ 3 ] = (GLubyte) ( rgba[3] * 255 );
|
||||
}
|
||||
void glColor3f( GLfloat r, GLfloat g, GLfloat b ) {
|
||||
vab.c[ 0 ] = (GLubyte) ( r * 255 );
|
||||
vab.c[ 1 ] = (GLubyte) ( g * 255 );
|
||||
vab.c[ 2 ] = (GLubyte) ( b * 255 );
|
||||
vab.c[ 3 ] = 255;
|
||||
}
|
||||
#endif
|
||||
|
||||
void glTexCoord2i( GLint s, GLint t ) {
|
||||
vab.st[ 0 ] = (float)s;
|
||||
vab.st[ 1 ] = (float)t;
|
||||
}
|
||||
void glTexCoord2f( GLfloat s, GLfloat t ) {
|
||||
vab.st[ 0 ] = s;
|
||||
vab.st[ 1 ] = t;
|
||||
}
|
||||
void glTexCoord2fv( GLfloat *st ) {
|
||||
vab.st[ 0 ] = st[0];
|
||||
vab.st[ 1 ] = st[1];
|
||||
}
|
||||
|
||||
void glEnd( void ) {
|
||||
#if 0
|
||||
glVertexPointer( 3, GL_FLOAT, sizeof( Vertex ), immediate[ 0 ].xyz );
|
||||
glTexCoordPointer( 2, GL_FLOAT, sizeof( Vertex ), immediate[ 0 ].st );
|
||||
glColorPointer( 4, GL_UNSIGNED_BYTE, sizeof( Vertex ), immediate[ 0 ].c );
|
||||
glEnableClientState( GL_VERTEX_ARRAY );
|
||||
glEnableClientState( GL_TEXTURE_COORD_ARRAY );
|
||||
glEnableClientState( GL_COLOR_ARRAY );
|
||||
#endif
|
||||
if ( curr_prim == GL_QUADS ) {
|
||||
glDrawElements( GL_TRIANGLES, curr_vertex / 4 * 6, GL_UNSIGNED_SHORT, quad_indexes );
|
||||
GLCheckError("DrawElements");
|
||||
} else {
|
||||
glDrawArrays( curr_prim, 0, curr_vertex );
|
||||
GLCheckError("DrawArrays");
|
||||
}
|
||||
curr_vertex = 0;
|
||||
curr_prim = 0;
|
||||
}
|
||||
|
||||
void landscapeViewport( GLint x, GLint y, GLsizei width, GLsizei height ) {
|
||||
y = 0; // !@#
|
||||
glViewport( y, x, height, width );
|
||||
}
|
||||
|
||||
void landscapeScissor( GLint x, GLint y, GLsizei width, GLsizei height ) {
|
||||
y = 0; // !@#
|
||||
glScissor( y, x, height, width );
|
||||
}
|
||||
|
||||
55
common/ios/doomengine/gles_glue.h
Executable file
55
common/ios/doomengine/gles_glue.h
Executable file
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 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.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __GLES_GLUE_H__
|
||||
#define __GLES_GLUE_H__
|
||||
|
||||
#include <OpenGLES/ES1/gl.h>
|
||||
|
||||
#define GL_QUADS 888
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void GLCheckError( const char *message );
|
||||
|
||||
void glBegin( GLenum prim );
|
||||
void glVertex2f( GLfloat x, GLfloat y );
|
||||
void glVertex3f( float x, float y, float z );
|
||||
void glVertex3fv( GLfloat *xyz );
|
||||
void glVertex2i( GLint x, GLint y );
|
||||
void glColor4ub( GLubyte r, GLubyte g, GLubyte b, GLubyte a );
|
||||
void glColor4ubv( GLubyte *rgba );
|
||||
void glColor3f( GLfloat r, GLfloat g, GLfloat b );
|
||||
void glColor4f( GLfloat r, GLfloat g, GLfloat b, GLfloat a );
|
||||
void glColor4fv( GLfloat *rgba );
|
||||
void glTexCoord2i( GLint s, GLint t );
|
||||
void glTexCoord2f( GLfloat s, GLfloat t );
|
||||
void glEnd( void );
|
||||
|
||||
void SetImmediateModeGLVertexArrays( void );
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
235
common/ios/doomengine/hud.c
Executable file
235
common/ios/doomengine/hud.c
Executable file
@@ -0,0 +1,235 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 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 "doomiphone.h"
|
||||
#include <math.h>
|
||||
|
||||
hud_t huds;
|
||||
|
||||
void HudDraw();
|
||||
|
||||
void HudWrite();
|
||||
|
||||
void HudRead();
|
||||
|
||||
ibutton_t *dragHud;
|
||||
int dragX, dragY;
|
||||
|
||||
void SetHudPic( ibutton_t *hp, const char *image ) {
|
||||
pkTexture_t *gl;
|
||||
gl = PK_FindTexture( image );
|
||||
assert( gl );
|
||||
hp->texture = gl;
|
||||
hp->touch = NULL; // in case one was down when it was saved
|
||||
}
|
||||
|
||||
void SetHudSpot( ibutton_t *hp, int x, int y, int dw, int dh ) {
|
||||
hp->touch = NULL; // in case one was down when it was saved
|
||||
|
||||
float xRatio = ((float)displaywidth) / 480.0f;
|
||||
float yRatio = ((float)displayheight) / 320.0f;
|
||||
|
||||
float themin = MIN( xRatio, yRatio );
|
||||
|
||||
x *= ((float)displaywidth) / 480.0f;
|
||||
y *= ((float)displayheight) / 320.0f;
|
||||
|
||||
dw *= themin;
|
||||
dh *= themin;
|
||||
|
||||
hp->x = x - dw/2;
|
||||
hp->y = y - dh/2;
|
||||
hp->drawWidth = dw;
|
||||
hp->drawHeight = dh;
|
||||
hp->buttonFlags = 0;
|
||||
hp->scale = 1.0f;
|
||||
}
|
||||
|
||||
void HudSetTexnums() {
|
||||
SetHudPic( &huds.forwardStick, "iphone/up_down.tga" );
|
||||
SetHudPic( &huds.sideStick, "iphone/side_2_side.tga" );
|
||||
SetHudPic( &huds.turnStick, "iphone/directional_2.tga" );
|
||||
SetHudPic( &huds.turnRotor, "iphone/rotate.tga" );
|
||||
SetHudPic( &huds.fire, "iphone/fire.tga" );
|
||||
SetHudPic( &huds.menu, "iphone/menu_button.tga" );
|
||||
SetHudPic( &huds.map, "iphone/map_button.tga" );
|
||||
|
||||
SetHudSpot( &huds.weaponSelect, 240, 280, 40, 40 );
|
||||
}
|
||||
|
||||
void HudSetForScheme( int schemeNum ) {
|
||||
for ( ibutton_t *hud = (ibutton_t *)&huds ; hud != (ibutton_t *)(&huds+1) ; hud++ ) {
|
||||
hud->buttonFlags = BF_IGNORE;
|
||||
}
|
||||
int STICK_SIZE = 128;
|
||||
int HALF_STICK = 128/2;
|
||||
|
||||
if( displaywidth >= 1024 ) {
|
||||
STICK_SIZE = 64;
|
||||
HALF_STICK = 64/2;
|
||||
}
|
||||
|
||||
static const int BOTTOM = 320 - 44; // above the status bar
|
||||
SetHudSpot( &huds.weaponSelect, 240, 280, 40, 40 ); // the touch area is doubled
|
||||
|
||||
// make the forward / back sticks touch taller than they draw
|
||||
switch ( schemeNum ) {
|
||||
default:
|
||||
case 0: // turn stick
|
||||
SetHudSpot( &huds.forwardStick, HALF_STICK, BOTTOM-HALF_STICK, STICK_SIZE, STICK_SIZE );
|
||||
SetHudSpot( &huds.turnStick, HALF_STICK, BOTTOM-HALF_STICK, STICK_SIZE, STICK_SIZE );
|
||||
SetHudSpot( &huds.fire, 480-40, BOTTOM-HALF_STICK, 80, 80 );
|
||||
SetHudSpot( &huds.menu, 480-24, 24, 48, 48 );
|
||||
SetHudSpot( &huds.map, 24, 24, 48, 48 );
|
||||
break;
|
||||
case 1: // dual stick
|
||||
SetHudSpot( &huds.forwardStick, HALF_STICK, BOTTOM-HALF_STICK, STICK_SIZE, STICK_SIZE );
|
||||
SetHudSpot( &huds.sideStick, HALF_STICK, BOTTOM-HALF_STICK, STICK_SIZE, STICK_SIZE );
|
||||
SetHudSpot( &huds.turnStick, 480-HALF_STICK, BOTTOM-HALF_STICK, STICK_SIZE, STICK_SIZE );
|
||||
SetHudSpot( &huds.fire, 480-40, 40, 80, 80 );
|
||||
SetHudSpot( &huds.menu, 48+24, 24, 48, 48 );
|
||||
SetHudSpot( &huds.map, 24, 24, 48, 48 );
|
||||
break;
|
||||
case 2: // rotor
|
||||
SetHudSpot( &huds.forwardStick, HALF_STICK, BOTTOM-HALF_STICK, STICK_SIZE, STICK_SIZE );
|
||||
SetHudSpot( &huds.sideStick, HALF_STICK, BOTTOM-HALF_STICK, STICK_SIZE, STICK_SIZE );
|
||||
SetHudSpot( &huds.turnRotor, 480-HALF_STICK, BOTTOM-HALF_STICK, STICK_SIZE, STICK_SIZE );
|
||||
SetHudSpot( &huds.fire, 480-40, 40, 80, 80 );
|
||||
SetHudSpot( &huds.menu, 48+24, 24, 48, 48 );
|
||||
SetHudSpot( &huds.map, 24, 24, 48, 48 );
|
||||
break;
|
||||
}
|
||||
|
||||
// don't process these in the update hud touch loop, because they will be
|
||||
// handled with normal button calls
|
||||
huds.menu.buttonFlags |= BF_HUDBUTTON;
|
||||
huds.map.buttonFlags |= BF_HUDBUTTON;
|
||||
|
||||
// don't make the big button click sound for the fire button
|
||||
huds.fire.buttonFlags |= BF_SMALL_CLICK;
|
||||
|
||||
}
|
||||
|
||||
void SnapSticks( ibutton_t *test, const ibutton_t *to ) {
|
||||
if ( abs( test->x - to->x ) < test->drawWidth && abs( test->y - to->y ) < test->drawHeight ) {
|
||||
test->x = to->x;
|
||||
test->y = to->y;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
HudEditFrame
|
||||
|
||||
==================
|
||||
*/
|
||||
void HudEditFrame() {
|
||||
color3_t gray = { 32, 32, 32 };
|
||||
|
||||
if ( numTouches == 0 && numPrevTouches == 1 && dragHud ) {
|
||||
Sound_StartLocalSound( "iphone/baction_01.wav" );
|
||||
dragHud = NULL;
|
||||
}
|
||||
|
||||
if ( numTouches == 1 && numPrevTouches == 0 ) {
|
||||
// identify the hud being touched for drag
|
||||
int x = touches[0][0];
|
||||
int y = touches[0][1];
|
||||
dragHud = NULL;
|
||||
for ( ibutton_t *hud = (ibutton_t *)&huds ; hud != (ibutton_t *)(&huds+1) ; hud++ ) {
|
||||
if ( hud->buttonFlags & BF_IGNORE ) {
|
||||
continue;
|
||||
}
|
||||
if ( x >= hud->x && x - hud->x < hud->drawWidth && y >= hud->y && y - hud->y < hud->drawHeight ) {
|
||||
dragHud = hud;
|
||||
dragX = dragHud->x - x;
|
||||
dragY = dragHud->y - y;
|
||||
Sound_StartLocalSound( "iphone/bdown_01.wav" );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( numTouches == 1 && numPrevTouches == 1 && dragHud ) {
|
||||
// adjust the position of the dragHud
|
||||
dragHud->x = touches[0][0] + dragX;
|
||||
dragHud->y = touches[0][1] + dragY;
|
||||
if ( dragHud->x < 0 ) {
|
||||
dragHud->x = 0;
|
||||
}
|
||||
if ( dragHud->x > displaywidth - dragHud->drawWidth ) {
|
||||
dragHud->x = displaywidth - dragHud->drawWidth;
|
||||
}
|
||||
if ( dragHud->y < 0 ) {
|
||||
dragHud->y = 0;
|
||||
}
|
||||
if ( dragHud->y > displayheight - dragHud->drawHeight ) {
|
||||
dragHud->y = displayheight - dragHud->drawHeight;
|
||||
}
|
||||
|
||||
// magnet pull a matchable axis
|
||||
if ( controlScheme->value == 0 ) {
|
||||
if ( dragHud == &huds.forwardStick ) {
|
||||
SnapSticks( &huds.turnStick, dragHud );
|
||||
}
|
||||
} else {
|
||||
if ( dragHud == &huds.forwardStick ) {
|
||||
SnapSticks( &huds.sideStick, dragHud );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// solid background color and some UI elements for context
|
||||
R_Draw_Fill( 0, 0, 480, 320, gray );
|
||||
glColor4f( 1, 1, 1, 1 );
|
||||
iphoneCenterText( 240, 20, 0.75, "Drag the controls" );
|
||||
|
||||
// draw the status bar
|
||||
extern patchnum_t stbarbg;
|
||||
if ( statusBar->value ) {
|
||||
// force doom to rebind, since we have changed the active GL_TEXTURE_2D
|
||||
last_gltexture = NULL;
|
||||
gld_DrawNumPatch(0, ST_Y, stbarbg.lumpnum, CR_DEFAULT, VPT_STRETCH);
|
||||
}
|
||||
|
||||
// draw the active items at their current locations
|
||||
for ( ibutton_t *hud = (ibutton_t *)&huds ; hud != (ibutton_t *)(&huds+1) ; hud++ ) {
|
||||
if ( !hud->texture ) {
|
||||
continue;
|
||||
}
|
||||
if ( hud->buttonFlags & BF_IGNORE ) {
|
||||
continue;
|
||||
}
|
||||
PK_StretchTexture( hud->texture, hud->x, hud->y, hud->drawWidth, hud->drawHeight );
|
||||
}
|
||||
|
||||
// draw the done button
|
||||
static ibutton_t btnDone;
|
||||
if ( !btnDone.texture ) {
|
||||
// initial setup
|
||||
SetButtonPicsAndSizes( &btnDone, "iphone/back_button.tga", "Done", 240 - 32, 160-32, 64, 64 );
|
||||
}
|
||||
if ( HandleButton( &btnDone ) ) {
|
||||
menuState = IPM_MAIN;
|
||||
iphonePopGL();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
408
common/ios/doomengine/ipak.c
Executable file
408
common/ios/doomengine/ipak.c
Executable file
@@ -0,0 +1,408 @@
|
||||
/*
|
||||
* ipak.c
|
||||
* doom
|
||||
*
|
||||
* Created by John Carmack on 4/9/09.
|
||||
* Copyright 2009 Id Software. All rights reserved.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 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 "doomiphone.h"
|
||||
|
||||
pkHeader_t *pkHeader;
|
||||
off_t pkSize;
|
||||
|
||||
// images and wavs have writable state, so they need separate
|
||||
// structs that also point to the source in the pak file
|
||||
pkTexture_t *pkTextures;
|
||||
pkWav_t *pkWavs;
|
||||
|
||||
void PK_LoadTexture( pkTexture_t *image );
|
||||
|
||||
/*
|
||||
==================
|
||||
PK_Init
|
||||
|
||||
==================
|
||||
*/
|
||||
void PK_Init( const char *pakFileName ) {
|
||||
printf( "PK_Init( %s )\n", pakFileName );
|
||||
|
||||
int fd = open( pakFileName, O_RDONLY );
|
||||
if ( fd == -1 ) {
|
||||
printf( "Couldn't open file\n" );
|
||||
assert( 0 );
|
||||
}
|
||||
|
||||
struct stat s;
|
||||
fstat( fd, &s );
|
||||
|
||||
pkSize = s.st_size;
|
||||
pkHeader = mmap( NULL, (size_t)pkSize, PROT_READ, MAP_FILE|MAP_PRIVATE, fd, 0 );
|
||||
|
||||
// mmap keeps the file internally, we can close our descriptor
|
||||
close( fd );
|
||||
|
||||
if ( (int)pkHeader == -1 ) {
|
||||
printf( "mmap failed: %s\n", strerror( errno ) );
|
||||
assert( 0 );
|
||||
}
|
||||
|
||||
if ( pkHeader->version != PKFILE_VERSION ) {
|
||||
printf( "bad pak file version: 0x%x != 0x%x\n", pkHeader->version, PKFILE_VERSION );
|
||||
assert( 0 );
|
||||
}
|
||||
|
||||
// build the local image table
|
||||
pkTextures = malloc( sizeof( pkTextures[0] ) * pkHeader->textures.count );
|
||||
memset( pkTextures, 0, sizeof( pkTextures[0] ) * pkHeader->textures.count );
|
||||
for ( int i = 0 ; i < pkHeader->textures.count ; i++ ) {
|
||||
pkTextures[i].textureData = (pkTextureData_t *)( (byte *)pkHeader + pkHeader->textures.tableOfs + i * pkHeader->textures.structSize );
|
||||
}
|
||||
|
||||
// build the local wav table
|
||||
int startLoadingWavs = SysIphoneMicroseconds();
|
||||
pkWavs = malloc( sizeof( pkWavs[0] ) * pkHeader->wavs.count );
|
||||
memset( pkWavs, 0, sizeof( pkWavs[0] ) * pkHeader->wavs.count );
|
||||
for ( int i = 0 ; i < pkHeader->wavs.count ; i++ ) {
|
||||
pkWav_t *sfx = &pkWavs[i];
|
||||
sfx->wavData = (pkWavData_t *)( (byte *)pkHeader + pkHeader->wavs.tableOfs + i * pkHeader->wavs.structSize );
|
||||
// there is no harm in setting the OpenAl static buffer up for everything now
|
||||
alGenBuffers( 1, &sfx->alBufferNum );
|
||||
|
||||
int alFormat;
|
||||
if ( sfx->wavData->wavChannels == 1 ) {
|
||||
if ( sfx->wavData->wavChannelBytes == 1 ) {
|
||||
alFormat = AL_FORMAT_MONO8;
|
||||
} else {
|
||||
alFormat = AL_FORMAT_MONO16;
|
||||
}
|
||||
} else {
|
||||
if ( sfx->wavData->wavChannelBytes == 1 ) {
|
||||
alFormat = AL_FORMAT_STEREO8;
|
||||
} else {
|
||||
alFormat = AL_FORMAT_STEREO16;
|
||||
}
|
||||
}
|
||||
alBufferData( sfx->alBufferNum, alFormat, (byte *)pkHeader + sfx->wavData->wavDataOfs
|
||||
, sfx->wavData->wavChannels*sfx->wavData->wavChannelBytes*sfx->wavData->wavNumSamples
|
||||
, sfx->wavData->wavRate );
|
||||
}
|
||||
int endLoadingWavs = SysIphoneMicroseconds();
|
||||
printf( "%i usec to load wavs\n", endLoadingWavs - startLoadingWavs );
|
||||
|
||||
printf( "Mapped %lld bytes of %s at 0x%p\n", pkSize, pakFileName, (void*)pkHeader );
|
||||
printf( "%4i textures\n", pkHeader->textures.count );
|
||||
printf( "%4i wavs\n", pkHeader->wavs.count );
|
||||
printf( "%4i raws\n", pkHeader->raws.count );
|
||||
#if 0
|
||||
// testing
|
||||
for ( int j = 0 ; j < 4 ; j++ ) {
|
||||
int startTime = Sys_Microseconds();
|
||||
int sum = 0;
|
||||
for ( off_t i = 0 ; i < pkSize ; i+=16 ) {
|
||||
sum += ((byte *)pkHeader)[i];
|
||||
}
|
||||
int endTime = Sys_Microseconds();
|
||||
printf( "%5.1f mb/s page-in speed (%i)\n", (float)pkSize / (endTime - startTime ), endTime - startTime );
|
||||
}
|
||||
|
||||
for ( int i = 0 ; i < pkHeader->numTextures ; i++ ) {
|
||||
printf( "-------------------------\n" );
|
||||
for ( int j = 0 ; j < 8 ; j++ ) {
|
||||
pkTexture_t *tex = &pkTextures[i];
|
||||
int start = Sys_Microseconds();
|
||||
PK_LoadTexture( tex );
|
||||
int middle = Sys_Microseconds();
|
||||
PK_StretchTexture( tex, 0, 0, 0, 0 );
|
||||
int middle2 = Sys_Microseconds();
|
||||
PK_StretchTexture( tex, 0, 0, 0, 0 );
|
||||
int end = Sys_Microseconds();
|
||||
printf( "%i usec load, %i usec first draw, %i usec second draw\n",
|
||||
middle - start, middle2 - middle, end - middle2 );
|
||||
|
||||
glDeleteTextures( 1, &tex->glTexNum );
|
||||
tex->glTexNum = 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
==================
|
||||
PK_LoadTexture
|
||||
|
||||
==================
|
||||
*/
|
||||
void PK_LoadTexture( pkTexture_t *tex ) {
|
||||
int startTime = SysIphoneMicroseconds();
|
||||
|
||||
const pkTextureData_t *imd = tex->textureData;
|
||||
|
||||
glGenTextures( 1, &tex->glTexNum );
|
||||
glBindTexture( GL_TEXTURE_2D, tex->glTexNum );
|
||||
|
||||
// load the image directly from the mapped file
|
||||
typedef struct {
|
||||
int internalFormat;
|
||||
int externalFormat;
|
||||
int type;
|
||||
int bpp;
|
||||
} formatInfo_t;
|
||||
|
||||
static formatInfo_t formatInfo[9] = {
|
||||
{ GL_RGB , GL_RGB, GL_UNSIGNED_SHORT_5_6_5, 16 },
|
||||
{ GL_RGBA, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, 16 },
|
||||
{ GL_RGBA, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, 16 },
|
||||
{ GL_RGBA, GL_BGRA, GL_UNSIGNED_BYTE, 32 },
|
||||
{ GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, 16 },
|
||||
{ GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG, 0, 0, 4 },
|
||||
{ GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, 0, 0, 4 },
|
||||
{ GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG, 0, 0, 2 },
|
||||
{ GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG, 0, 0, 2 },
|
||||
};
|
||||
|
||||
assert( imd->format < 9 );
|
||||
formatInfo_t *fi = &formatInfo[imd->format];
|
||||
|
||||
unsigned char *s = (byte *)pkHeader + imd->picDataOfs;
|
||||
int w = imd->uploadWidth;
|
||||
int h = imd->uploadHeight;
|
||||
// upload each mip level
|
||||
int l = 0;
|
||||
int totalSize = 0;
|
||||
while( 1 ) {
|
||||
int size = (w*h*fi->bpp)/8;
|
||||
if ( fi->type == 0 ) {
|
||||
if ( size < 32 ) {
|
||||
// minimum PVRTC size
|
||||
size = 32;
|
||||
}
|
||||
glCompressedTexImage2D( GL_TEXTURE_2D, l, fi->internalFormat, w, h, 0,
|
||||
size, s );
|
||||
} else {
|
||||
glTexImage2D( GL_TEXTURE_2D, l, fi->internalFormat, w, h, 0,
|
||||
fi->externalFormat, fi->type, s );
|
||||
}
|
||||
GLCheckError( "texture upload" );
|
||||
|
||||
totalSize += size;
|
||||
if ( ++l == imd->numLevels ) {
|
||||
break;
|
||||
}
|
||||
if ( w == 1 && h == 1 ) {
|
||||
break;
|
||||
}
|
||||
s += size;
|
||||
w >>= 1;
|
||||
if ( w == 0 ) {
|
||||
w = 1;
|
||||
}
|
||||
h >>= 1;
|
||||
if ( h == 0 ) {
|
||||
h = 1;
|
||||
}
|
||||
}
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, imd->minFilter );
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, imd->magFilter );
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, imd->wrapS );
|
||||
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, imd->wrapT );
|
||||
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 2.0f );
|
||||
|
||||
int endTime = SysIphoneMicroseconds();
|
||||
|
||||
printf( "%5.1f mb/s TexImage for %s\n", (float)totalSize /
|
||||
( endTime - startTime ), imd->name.name );
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
PK_FindTexture
|
||||
|
||||
Fully creates the gl texture before returning.
|
||||
==================
|
||||
*/
|
||||
pkTexture_t *PK_FindTexture( const char *imageName ) {
|
||||
int texIndex;
|
||||
pkTexture_t *texData = (pkTexture_t *)PK_FindType( imageName, &pkHeader->textures, &texIndex );
|
||||
if ( !texData ) {
|
||||
return NULL;
|
||||
}
|
||||
pkTexture_t *tex = pkTextures + texIndex;
|
||||
if ( tex->glTexNum == 0 ) {
|
||||
PK_LoadTexture( tex );
|
||||
}
|
||||
return tex;
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
PK_FindWav
|
||||
|
||||
==================
|
||||
*/
|
||||
pkWav_t *PK_FindWav( const char *soundName ) {
|
||||
int wavIndex;
|
||||
pkWavData_t *wavData = (pkWavData_t *)PK_FindType( soundName, &pkHeader->wavs, &wavIndex );
|
||||
if ( !wavData ) {
|
||||
return NULL;
|
||||
}
|
||||
pkWav_t *wav = pkWavs + wavIndex;
|
||||
|
||||
// create the OpenAL buffer
|
||||
|
||||
return wav;
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
PK_FindRaw
|
||||
|
||||
==================
|
||||
*/
|
||||
const byte *PK_FindRaw( const char *rawName, int *len ) {
|
||||
pkRawData_t *raw = (pkRawData_t *)PK_FindType( rawName, &pkHeader->raws, NULL );
|
||||
if ( !raw ) {
|
||||
if ( len ) {
|
||||
*len = -1;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ( len ) {
|
||||
*len = raw->rawDataLen;
|
||||
}
|
||||
return (byte *)pkHeader + raw->rawDataOfs;
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
PK_HashName
|
||||
|
||||
==================
|
||||
*/
|
||||
int PK_HashName( const char *name, char canonical[MAX_PK_NAME] ) {
|
||||
int o = 0;
|
||||
int hash = 0;
|
||||
|
||||
do {
|
||||
int c = name[o];
|
||||
if ( c == 0 ) {
|
||||
break;
|
||||
}
|
||||
// backslashes to forward slashes
|
||||
if ( c == '\\' ) {
|
||||
c = '/';
|
||||
}
|
||||
// to lowercase
|
||||
c = tolower( c );
|
||||
canonical[o++] = c;
|
||||
hash = (hash << 5) - hash + c;
|
||||
} while ( o < MAX_PK_NAME-1 );
|
||||
canonical[o] = 0;
|
||||
|
||||
return hash;
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
PK_FindType
|
||||
|
||||
==================
|
||||
*/
|
||||
const pkName_t *PK_FindType( const char *rawName, const pkType_t *type, int *indexOutput ) {
|
||||
char canonicalName[MAX_PK_NAME];
|
||||
|
||||
int hash = PK_HashName( rawName, canonicalName );
|
||||
|
||||
int hashChain = hash & (PK_HASH_CHAINS-1);
|
||||
|
||||
int typeIndex = type->hashChains[hashChain];
|
||||
while ( typeIndex != -1 ) {
|
||||
assert( typeIndex >= 0 && typeIndex < type->count );
|
||||
const pkName_t *name = (pkName_t *)((byte *)pkHeader + type->tableOfs + typeIndex * type->structSize );
|
||||
if ( name->nameHash == hash && !strcmp( canonicalName, name->name ) ) {
|
||||
// this is it
|
||||
if ( indexOutput ) {
|
||||
*indexOutput = typeIndex;
|
||||
}
|
||||
return name;
|
||||
}
|
||||
typeIndex = name->nextOnHashChain;
|
||||
}
|
||||
|
||||
// not found
|
||||
if ( indexOutput ) {
|
||||
*indexOutput = -1;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
==================
|
||||
PK_BindTexture
|
||||
|
||||
==================
|
||||
*/
|
||||
void PK_BindTexture( pkTexture_t *tex ) {
|
||||
assert( tex->glTexNum );
|
||||
glBindTexture( GL_TEXTURE_2D, tex->glTexNum );
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
PK_DrawTexture
|
||||
|
||||
==================
|
||||
*/
|
||||
void PK_DrawTexture( pkTexture_t *tex, int x, int y ) {
|
||||
PK_BindTexture( tex );
|
||||
|
||||
int w = tex->textureData->srcWidth;
|
||||
int h = tex->textureData->srcHeight;
|
||||
|
||||
glBegin( GL_QUADS );
|
||||
|
||||
glTexCoord2f( 0.0f, 0.0f ); glVertex2i( x, y );
|
||||
glTexCoord2f( tex->textureData->maxS, 0.0f ); glVertex2i( x+w, y );
|
||||
glTexCoord2f( tex->textureData->maxS, tex->textureData->maxT ); glVertex2i( x+w, y+h );
|
||||
glTexCoord2f( 0.0f, tex->textureData->maxT ); glVertex2i( x, y+h );
|
||||
|
||||
glEnd();
|
||||
}
|
||||
|
||||
void PK_StretchTexture( pkTexture_t *tex, float x, float y, float w, float h ) {
|
||||
PK_BindTexture( tex );
|
||||
|
||||
glBegin( GL_QUADS );
|
||||
|
||||
glTexCoord2f( 0.0f, 0.0f ); glVertex2i( x, y );
|
||||
glTexCoord2f( tex->textureData->maxS, 0.0f ); glVertex2i( x+w, y );
|
||||
glTexCoord2f( tex->textureData->maxS, tex->textureData->maxT ); glVertex2i( x+w, y+h );
|
||||
glTexCoord2f( 0.0f, tex->textureData->maxT ); glVertex2i( x, y+h );
|
||||
|
||||
glEnd();
|
||||
}
|
||||
|
||||
183
common/ios/doomengine/ipak.h
Executable file
183
common/ios/doomengine/ipak.h
Executable file
@@ -0,0 +1,183 @@
|
||||
/*
|
||||
* ipak.h
|
||||
* General purpose data file management intended to be used
|
||||
* as a read-only memory mapped file to play nice with iPhone OS's
|
||||
* non-swapping and variable memory management.
|
||||
*
|
||||
* Created by John Carmack on 4/9/09.
|
||||
* Copyright 2009 id Software. All rights reserved.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 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.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef IPAK_H
|
||||
#define IPAK_H
|
||||
|
||||
//============================================================
|
||||
//
|
||||
// In-file structures
|
||||
//
|
||||
// These stuctures are in the mapped data file, and shared
|
||||
// between the app and utility.
|
||||
//
|
||||
// Type headers are stored separately from the bulk data to minimize the
|
||||
// number of active pages.
|
||||
//
|
||||
// The full hash of the name is stored in nameHash, and nameHash&(PK_HASH_BUCKETS-1) is
|
||||
// used to chain structures of a particular type together.
|
||||
//
|
||||
//============================================================
|
||||
|
||||
#define MAX_PK_NAME 64
|
||||
typedef struct {
|
||||
int nameHash; // PK_HashName( name )
|
||||
int nextOnHashChain; // -1 = end of chain
|
||||
char name[MAX_PK_NAME]; // in canonical form: backslashes to slashes and lowercase
|
||||
} pkName_t;
|
||||
|
||||
#define PK_HASH_CHAINS 256
|
||||
typedef struct {
|
||||
int tableOfs; // // &firstStruct = (byte *)dfHeader + tableOfs
|
||||
int count;
|
||||
int structSize; // sizeof( pkWavData_t ), etc
|
||||
int hashChains[PK_HASH_CHAINS]; // -1 = end of chain
|
||||
} pkType_t;
|
||||
|
||||
// dfWavData holds everything necessary to fully create an OpenAL sample buffer
|
||||
typedef struct {
|
||||
pkName_t name;
|
||||
int wavDataOfs;
|
||||
int wavChannels; // 1 or 2
|
||||
int wavChannelBytes; // 1 or 2
|
||||
int wavRate; // 22050, etc
|
||||
int wavNumSamples; // each sample holds all the channels
|
||||
// we may want looping information here later
|
||||
} pkWavData_t;
|
||||
|
||||
// iPhone does not natively support palettized textures, but we
|
||||
// might conceivably want to support luminance and intensity textures
|
||||
// in the future.
|
||||
typedef enum {
|
||||
TF_565,
|
||||
TF_5551,
|
||||
TF_4444,
|
||||
TF_8888,
|
||||
TF_LA,
|
||||
TF_PVR4,
|
||||
TF_PVR4A,
|
||||
TF_PVR2,
|
||||
TF_PVR2A,
|
||||
} textureFormat_t;
|
||||
|
||||
// dfImageData_t holds everything necessary to fully create an OpenGL texture object
|
||||
typedef struct {
|
||||
pkName_t name;
|
||||
int picDataOfs; // the raw bits to pass to gl, mipmaps appended
|
||||
// for PVR formats, the minimum size of each level is 32 bytes
|
||||
|
||||
int format;
|
||||
int uploadWidth;
|
||||
int uploadHeight;
|
||||
int numLevels; // 1 for non mipmapped, otherwise log2( largest dimension )
|
||||
|
||||
// glTexParameters
|
||||
int wrapS;
|
||||
int wrapT;
|
||||
int minFilter;
|
||||
int magFilter;
|
||||
int aniso;
|
||||
|
||||
// The upload sizes can be larger than the source sizes for
|
||||
// non power of two sources, or for non square sources in the
|
||||
// case of PVR compression.
|
||||
int srcWidth;
|
||||
int srcHeight;
|
||||
|
||||
float maxS; // srcWidth / uploadWidth
|
||||
float maxT;
|
||||
|
||||
// Track the outlines of up to two boxes of non-transparent pixels
|
||||
// to allow optimized drawing of sprites with large empty areas.
|
||||
// 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 in
|
||||
// uploadWidth / uploadHeight with non-0 alpha
|
||||
int numBounds;
|
||||
int bounds[2][2][2];
|
||||
} pkTextureData_t;
|
||||
|
||||
typedef struct {
|
||||
pkName_t name;
|
||||
int rawDataOfs; // (byte *)pkHeader + dataOfs
|
||||
int rawDataLen; // there will always be a 0 byte appended to terminate strings
|
||||
// that is not counted in this length
|
||||
} pkRawData_t;
|
||||
|
||||
#define PKFILE_VERSION 0x12340002
|
||||
typedef struct {
|
||||
int version;
|
||||
|
||||
pkType_t textures;
|
||||
pkType_t wavs;
|
||||
pkType_t raws;
|
||||
} pkHeader_t;
|
||||
|
||||
|
||||
//============================================================
|
||||
//
|
||||
// In-memory, writable structures
|
||||
//
|
||||
//============================================================
|
||||
|
||||
typedef struct {
|
||||
unsigned glTexNum;
|
||||
const pkTextureData_t *textureData;
|
||||
// we will need to add LRU links if texture caching is needed
|
||||
} pkTexture_t;
|
||||
|
||||
typedef struct {
|
||||
unsigned alBufferNum; // created with the staticBuffer extension directly in the mapped memory
|
||||
const pkWavData_t *wavData;
|
||||
} pkWav_t;
|
||||
|
||||
void PK_Init( const char *pakFileName );
|
||||
const pkName_t *PK_FindType( const char *rawName, const pkType_t *type, int *index );
|
||||
const byte * PK_FindRaw( const char *rawName, int *len ); // len can be NULL if you don't need it
|
||||
pkTexture_t * PK_FindTexture( const char *imageName );
|
||||
pkWav_t * PK_FindWav( const char *soundName );
|
||||
|
||||
// The name will be converted to canonical name (backslashes converted to slashes and lowercase)
|
||||
// before generating a hash.
|
||||
int PK_HashName( const char *name, char canonical[MAX_PK_NAME] );
|
||||
|
||||
void PK_BindTexture( pkTexture_t *tex );
|
||||
void PK_DrawTexture( pkTexture_t *tex, int x, int y );
|
||||
void PK_StretchTexture( pkTexture_t *tex, float x, float y, float w, float h );
|
||||
|
||||
extern pkHeader_t * pkHeader;
|
||||
extern off_t pkSize;
|
||||
|
||||
// images and wavs have writable state, so they need separate
|
||||
// structs that also point to the source in the pak file
|
||||
extern pkTexture_t *pkTextures;
|
||||
extern pkWav_t * pkWavs;
|
||||
|
||||
#endif
|
||||
952
common/ios/doomengine/iphone_async.cpp
Executable file
952
common/ios/doomengine/iphone_async.cpp
Executable file
@@ -0,0 +1,952 @@
|
||||
/*
|
||||
* iphone_async.c
|
||||
* doom
|
||||
*
|
||||
* Created by John Carmack on 7/2/09.
|
||||
* Copyright 2009 id Software. All rights reserved.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 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 "doomiphone.h"
|
||||
#include "DoomGameCenterMatch.h"
|
||||
|
||||
#include "ios/GameCenter.h"
|
||||
|
||||
typedef struct {
|
||||
int msecFromLast;
|
||||
int msecToExecute;
|
||||
int sent;
|
||||
int received;
|
||||
int latency;
|
||||
} asyncStats_t;
|
||||
|
||||
#define MAX_ASYNC_LOGS 256
|
||||
static asyncStats_t asyncStats[MAX_ASYNC_LOGS];
|
||||
int asyncTicNum;
|
||||
|
||||
// we save this for the packet acknowledge, and also for debugging
|
||||
static packetServer_t lastServerPacket;
|
||||
|
||||
/*
|
||||
==================
|
||||
ShowNet
|
||||
|
||||
Graph packet receives and transmits
|
||||
==================
|
||||
*/
|
||||
void ShowNet() {
|
||||
if ( !showNet->value ) {
|
||||
return;
|
||||
}
|
||||
color4_t red = { 255, 0, 0, 255 };
|
||||
color4_t green = { 0, 255, 0, 255 };
|
||||
color4_t blue = { 0, 0, 255, 255 };
|
||||
|
||||
int now = asyncTicNum; // latch it in case it changes
|
||||
|
||||
for ( int i = 1 ; i < 30 ; i++ ) {
|
||||
asyncStats_t *lt = &asyncStats[(now - i ) & (MAX_ASYNC_LOGS-1)];
|
||||
R_Draw_Fill( 0, i * 4, lt->sent * 10, 2, red );
|
||||
R_Draw_Fill( 100, i * 4, lt->received * 10, 2, green );
|
||||
R_Draw_Fill( 200, i * 4, lt->latency * 10, 2, blue );
|
||||
}
|
||||
}
|
||||
|
||||
void ShowMiniNet() {
|
||||
if ( !miniNet->value ) {
|
||||
return;
|
||||
}
|
||||
|
||||
color4_t red = { 255, 0, 0, 255 };
|
||||
color4_t green = { 0, 255, 0, 255 };
|
||||
color4_t blue = { 0, 0, 255, 255 };
|
||||
|
||||
int now = asyncTicNum; // latch it in case it changes
|
||||
now--;
|
||||
|
||||
int x = huds.menu.x;
|
||||
int y = huds.menu.y;
|
||||
|
||||
for ( int i = 0 ; i < 10 ; i++ ) {
|
||||
asyncStats_t *lt = &asyncStats[(now - i ) & (MAX_ASYNC_LOGS-1)];
|
||||
R_Draw_Fill( x, y+i * 4, lt->sent * 4, 2, red );
|
||||
R_Draw_Fill( x+20, y+i * 4, lt->received * 4, 2, green );
|
||||
R_Draw_Fill( x+40, y+i * 4, lt->latency * 4, 2, blue );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
UpdatePeerTiming
|
||||
|
||||
Calculates one way latency based on local and remote times
|
||||
==================
|
||||
*/
|
||||
void UpdatePeerTiming( netPeer_t *peer, int remoteMilliseconds ) {
|
||||
peer->lastPacketAsyncTic = asyncTicNum;
|
||||
peer->lastPacketTime = SysIphoneMilliseconds();
|
||||
peer->lastTimeDelta = abs( remoteMilliseconds - peer->lastPacketTime );
|
||||
if ( peer->lowestTimeDelta == 0 || peer->lastTimeDelta < peer->lowestTimeDelta ) {
|
||||
peer->lowestTimeDelta = peer->lastTimeDelta;
|
||||
}
|
||||
peer->oneWayLatency = peer->lastTimeDelta - peer->lowestTimeDelta;
|
||||
if ( peer->oneWayLatency < 0 ) {
|
||||
// this can happen if we context switched at a bad time
|
||||
peer->lowestTimeDelta = peer->lastTimeDelta;
|
||||
peer->oneWayLatency = 0;
|
||||
}
|
||||
// printf( "OWL:%i timeDelta:%i lowest:%i\n", peer->oneWayLatency,
|
||||
// peer->lastTimeDelta, peer->lowestTimeDelta );
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
iphoneProcessPacket
|
||||
|
||||
A packet has been received over WiFi or bluetooth
|
||||
==================
|
||||
*/
|
||||
void iphoneProcessPacket( const struct sockaddr *from, const void *data, int len ) {
|
||||
if ( len < 4 ) {
|
||||
printf( "discarding packet because len = %i.\n", len );
|
||||
return;
|
||||
}
|
||||
int packetID = *(int *)data;
|
||||
|
||||
if ( !netgame ) {
|
||||
// setup and join are only processed while in the menu system
|
||||
|
||||
if ( packetID == PACKET_VERSION_SETUP ) {
|
||||
if ( localGameID == setupPacket.gameID ) {
|
||||
// if we are sending packets, always ignore other setup packets
|
||||
printf( "discarding setup packet because we are the server\n" );
|
||||
return;
|
||||
}
|
||||
setupPacketFrameNum = iphoneFrameNum;
|
||||
|
||||
// save this packet
|
||||
// printf( "valid setup packet\n" );
|
||||
setupPacket = *(packetSetup_t *)data;
|
||||
return;
|
||||
}
|
||||
|
||||
if ( packetID == PACKET_VERSION_JOIN ) {
|
||||
// we should only process join packets if we are in the multiplayer
|
||||
// menu and running the current game
|
||||
if ( menuState != IPM_MULTIPLAYER ) {
|
||||
printf( "discarding join packet because not in IPM_MULTIPLAYER\n" );
|
||||
return;
|
||||
}
|
||||
if ( setupPacket.gameID != localGameID ) {
|
||||
printf( "discarding join packet because we aren't the server\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
packetJoin_t *pj = (packetJoin_t *)data;
|
||||
if ( pj->playerID == 0 ) {
|
||||
// should never happen
|
||||
printf( "discarding join packet because playerID is 0\n" );
|
||||
return;
|
||||
}
|
||||
// add this player
|
||||
int i;
|
||||
for ( i = 0 ; i < MAXPLAYERS ; i++ ) {
|
||||
if ( setupPacket.playerID[i] == pj->playerID ) {
|
||||
netPlayers[i].peer.lastPacketTime = SysIphoneMilliseconds();
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( i == MAXPLAYERS ) {
|
||||
// not in yet, add if possible
|
||||
for ( i = 0 ; i < MAXPLAYERS ; i++ ) {
|
||||
if ( setupPacket.playerID[i] == 0 ) {
|
||||
setupPacket.playerID[i] = pj->playerID;
|
||||
netPlayers[i].peer.address = *from;
|
||||
netPlayers[i].peer.lastPacketTime = SysIphoneMilliseconds();
|
||||
break;
|
||||
}
|
||||
}
|
||||
// if all players are active, the new join gets ignored
|
||||
}
|
||||
// printf( "valid join packet\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
// no other packets are processed unless we are in the game
|
||||
printf( "discarding packet with id 0x%x when not in netgame\n", packetID );
|
||||
return;
|
||||
}
|
||||
|
||||
// the following are only for running games
|
||||
|
||||
if ( consoleplayer == 0 ) {
|
||||
// we are the server, and should only receive packetClient_t
|
||||
if ( packetID != PACKET_VERSION_CLIENT ) {
|
||||
static boolean typeErrorPrinted;
|
||||
if ( !typeErrorPrinted ) {
|
||||
typeErrorPrinted = true;
|
||||
printf( "Packet received with type 0x%x instead of 0x%x\n", packetID, PACKET_VERSION_CLIENT );
|
||||
}
|
||||
return;
|
||||
}
|
||||
packetClient_t *pc = (packetClient_t *)data;
|
||||
if ( len != sizeof( *pc ) ) {
|
||||
// this should always be an exact length match
|
||||
return;
|
||||
}
|
||||
|
||||
if ( pc->gameID != gameID ) {
|
||||
static boolean gameErrorPrinted;
|
||||
if ( !gameErrorPrinted ) {
|
||||
gameErrorPrinted = true;
|
||||
printf( "Packet received with gameID 0x%x instead of 0x%x\n", pc->gameID, gameID );
|
||||
}
|
||||
return;
|
||||
}
|
||||
assert( pc->consoleplayer > 0 && pc->consoleplayer < MAXPLAYERS );
|
||||
|
||||
netPlayer_t *np = &netPlayers[pc->consoleplayer];
|
||||
if ( np->pc.packetSequence >= pc->packetSequence ) {
|
||||
printf( "Out of order or duplicated packet from player %i\n", pc->consoleplayer );
|
||||
return;
|
||||
}
|
||||
np->peer.currentPingTics = packetSequence - pc->packetAcknowledge;
|
||||
if ( np->pc.packetSequence != pc->packetSequence - 1 ) {
|
||||
printf( "Dropped %i packets from player %i\n", pc->packetSequence - 1 - np->pc.packetSequence,
|
||||
pc->consoleplayer );
|
||||
}
|
||||
|
||||
// good packet from client
|
||||
np->pc = *pc;
|
||||
UpdatePeerTiming( &np->peer, np->pc.milliseconds );
|
||||
} else {
|
||||
// we are a client, and should only receive server packets
|
||||
if ( packetID != PACKET_VERSION_SERVER ) {
|
||||
static boolean typeErrorPrinted;
|
||||
if ( !typeErrorPrinted ) {
|
||||
typeErrorPrinted = true;
|
||||
printf( "Packet received with type 0x%x instead of 0x%x\n", packetID, PACKET_VERSION_CLIENT );
|
||||
}
|
||||
return;
|
||||
}
|
||||
packetServer_t *ps = (packetServer_t *)data;
|
||||
if ( len > sizeof( *ps ) ) {
|
||||
// packets will usually have less ticcmd_t, but never more
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ps->gameID != gameID ) {
|
||||
static boolean gameErrorPrinted;
|
||||
if ( !gameErrorPrinted ) {
|
||||
gameErrorPrinted = true;
|
||||
printf( "Packet received with gameID 0x%x instead of 0x%x\n", ps->gameID, gameID );
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ps->packetSequence <= lastServerPacket.packetSequence ) {
|
||||
printf( "Out of order or duplicated packet from server: %i <= %i\n",
|
||||
ps->packetSequence , lastServerPacket.packetSequence );
|
||||
return;
|
||||
}
|
||||
int drop = ps->packetSequence - (lastServerPacket.packetSequence + 1);
|
||||
if ( drop > 0 ) {
|
||||
printf( "Dropped %i packets from server\n", drop );
|
||||
}
|
||||
|
||||
// good packet from server
|
||||
memcpy( &lastServerPacket, ps, len );
|
||||
UpdatePeerTiming( &netServer, ps->milliseconds );
|
||||
netServer.currentPingTics = packetSequence - ps->packetAcknowledge;
|
||||
|
||||
// It is possible to have a client run a tic that hasn't been run yet on the game
|
||||
// server, since the server can be generating cmds and sending packets while
|
||||
// its game frame is hitched for an image load, so this is not an error condition.
|
||||
// assert( ps->gametic >= gametic );
|
||||
|
||||
// this should never happen
|
||||
assert( ps->maketic >= maketic );
|
||||
|
||||
// if a ticcmd_t that we need has permanently rolled off the end, we are hosed.
|
||||
// This shouldn't happen, since we don't create commands if all the clients
|
||||
// haven't processed most of the ones already sent.
|
||||
if ( ps->maketic - gametic >= BACKUPTICS ) {
|
||||
printf( "BACKUPTICS exceeded: ps->maketic %i, gametic %i\n",
|
||||
ps->maketic, gametic );
|
||||
netGameFailure = NF_INTERRUPTED;
|
||||
}
|
||||
|
||||
// move over the new commands
|
||||
// it is possible that some early frames of these are redundant, due
|
||||
// to packets crossing in flight.
|
||||
ticcmd_t *cmd_p = ps->netcmds;
|
||||
for ( int i = ps->starttic ; i < ps->maketic ; i++ ) {
|
||||
for ( int j = 0 ; j < MAXPLAYERS ; j++ ) {
|
||||
if ( playeringame[j] ) {
|
||||
netcmds[j][i&BACKUPTICMASK] = *cmd_p++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// copy this after the cmds have been updated
|
||||
maketic = ps->maketic;
|
||||
|
||||
// See if anyone has disconnected.
|
||||
for ( int i = 0; i < MAXPLAYERS; ++i ) {
|
||||
playeringame[i] = ps->playersInGame[i];
|
||||
}
|
||||
|
||||
// check consistancy for all in-game players on the most
|
||||
// recent gametic that the server knew this client had run
|
||||
int checkTic = ps->consistancyTic;
|
||||
assert( checkTic > gametic - BACKUPTICS ); // if older than this, we have lost the data
|
||||
checkTic &= BACKUPTICMASK;
|
||||
for ( int i = 0 ; i < MAXPLAYERS ; i++ ) {
|
||||
if ( playeringame[i] ) {
|
||||
if ( ps->consistancy[i] != consistancy[i][checkTic] ) {
|
||||
printf( "ConsistancyFailure for player %i on consistancyTic %i\n",
|
||||
i, ps->consistancyTic );
|
||||
netGameFailure = NF_CONSISTANCY;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
SendSetupPacketIfNecessary
|
||||
|
||||
the server sends out a setup packet to each joined client so they
|
||||
can see the game options needed to start the game.
|
||||
==================
|
||||
*/
|
||||
void SendSetupPacketIfNecessary() {
|
||||
if ( setupPacket.gameID != localGameID ) {
|
||||
// we aren't the server
|
||||
return;
|
||||
}
|
||||
|
||||
if ( gametic >= 2 ) {
|
||||
// everyone has already started, so they don't need more setup packets
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
setupPacket.sendCount++;
|
||||
|
||||
// player 0 is always the server, no need to send to ourselves
|
||||
for ( int i = 1 ; i < MAXPLAYERS ; i++ ) {
|
||||
if ( setupPacket.playerID[i] == 0 ) {
|
||||
continue;
|
||||
}
|
||||
int r = sendto( gameSocket, &setupPacket, sizeof( setupPacket ), 0,
|
||||
&netPlayers[i].peer.address, sizeof( netPlayers[i].peer.address ) );
|
||||
if ( r == -1 ) {
|
||||
Com_Printf( "UDP sendTo failed: %s\n", strerror( errno ) );
|
||||
close( gameSocket );
|
||||
gameSocket = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
==================
|
||||
DeadBandAdjust
|
||||
|
||||
Compresses the 0.0 - 1.0 range into deadband - 1.0
|
||||
==================
|
||||
*/
|
||||
float DeadBandAdjust( float f, float deadBand ) {
|
||||
if ( f < 0 ) {
|
||||
return -DeadBandAdjust( -f, deadBand );
|
||||
}
|
||||
if ( f > 1.0 ) {
|
||||
return 1.0;
|
||||
}
|
||||
if ( f < deadBand ) {
|
||||
return 0;
|
||||
}
|
||||
return (f-deadBand) / (1.0 - deadBand);
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
AxisHit
|
||||
|
||||
Returns a -1 to 1 range
|
||||
|
||||
If activeFraction is less than 1.0, the range will clamp
|
||||
to the limits before the edge of the box is hit.
|
||||
==================
|
||||
*/
|
||||
float AxisHit( ibutton_t *hud ) {
|
||||
// will be set true if -1 or 1
|
||||
hud->drawAsLimit = false;
|
||||
|
||||
if ( hud->buttonFlags & BF_IGNORE ) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
touch_t *t = hud->touch;
|
||||
if ( !t ) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int centerX, centerY;
|
||||
|
||||
if ( centerSticks->value ) {
|
||||
// center on each touch
|
||||
centerX = hud->downX;
|
||||
centerY = hud->downY;
|
||||
} else {
|
||||
centerX = hud->x + hud->drawWidth / 2;
|
||||
centerY = hud->y + hud->drawHeight / 2;
|
||||
}
|
||||
|
||||
float w = hud->drawWidth * 0.5 * hud->scale;
|
||||
float h = hud->drawHeight * 0.5 * hud->scale;
|
||||
int x = t->x - centerX;
|
||||
int y = t->y - centerY;
|
||||
float f;
|
||||
int isXaxis = ( hud != &huds.forwardStick );
|
||||
if ( isXaxis ) {
|
||||
f = (float)x / w;
|
||||
} else {
|
||||
f = (float)y / h;
|
||||
}
|
||||
float deadBand = stickDeadBand->value;
|
||||
if ( hud == &huds.turnStick ) {
|
||||
deadBand = 0;
|
||||
}
|
||||
if ( f > deadBand ) {
|
||||
f -= deadBand;
|
||||
} else if ( f < -deadBand ) {
|
||||
f += deadBand;
|
||||
} else {
|
||||
// inside the deadband
|
||||
return 0;
|
||||
}
|
||||
|
||||
// adjust so you can hit the limit even if the control is drawn at the very edge
|
||||
// of the screen
|
||||
f /= (0.95-deadBand);
|
||||
if ( f > 1.0f ) {
|
||||
f = 1.0f;
|
||||
hud->drawAsLimit = true;
|
||||
} else if ( f < -1.0f ) {
|
||||
f = -1.0f;
|
||||
hud->drawAsLimit = true;
|
||||
}
|
||||
|
||||
if ( hud == &huds.turnStick && rampTurn->value ) {
|
||||
// do "gamma corrected" movement, so changes are always proportional
|
||||
if ( f > 0 ) {
|
||||
f = 0.01 * pow( 1.047, f * 100 );
|
||||
} else {
|
||||
f = -0.01 * pow( 1.047, f * -100 );
|
||||
}
|
||||
}
|
||||
return f;
|
||||
}
|
||||
|
||||
|
||||
static const float NOT_TOUCHED_STATE = 99999.0f;
|
||||
|
||||
float RotorControl( ibutton_t *hud ) {
|
||||
if ( hud->buttonFlags & BF_IGNORE ) {
|
||||
return 0;
|
||||
}
|
||||
touch_t *t = hud->touch;
|
||||
if ( !t ) {
|
||||
// no touches in the control
|
||||
hud->touchState = NOT_TOUCHED_STATE;
|
||||
return 0;
|
||||
}
|
||||
float delta[2];
|
||||
|
||||
int centerX = hud->x + hud->drawWidth / 2;
|
||||
int centerY = hud->y + hud->drawHeight / 2;
|
||||
|
||||
delta[0] = t->x - centerX;
|
||||
delta[1] = t->y - centerY;
|
||||
|
||||
float rotorAngle = atan2( delta[1], delta[0] );
|
||||
if ( hud->touchState == NOT_TOUCHED_STATE ) {
|
||||
// just touched, haven't moved yet
|
||||
hud->touchState = rotorAngle;
|
||||
return 0;
|
||||
}
|
||||
float deltaAngle = rotorAngle - hud->touchState;
|
||||
// handle the wrap around cases
|
||||
if ( deltaAngle >= M_PI ) {
|
||||
deltaAngle = deltaAngle - 2*M_PI;
|
||||
} else if ( deltaAngle <= -M_PI ) {
|
||||
deltaAngle = 2*M_PI + deltaAngle;
|
||||
}
|
||||
hud->touchState = rotorAngle;
|
||||
hud->drawState += deltaAngle;
|
||||
return deltaAngle / (2*M_PI);
|
||||
}
|
||||
|
||||
#define TURBOTHRESHOLD 0x32
|
||||
static int ClampMove( int v ) {
|
||||
if ( v > TURBOTHRESHOLD ) {
|
||||
return TURBOTHRESHOLD;
|
||||
}
|
||||
if ( v < -TURBOTHRESHOLD ) {
|
||||
return -TURBOTHRESHOLD;
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
==================
|
||||
iphoneBuildTiccmd
|
||||
|
||||
Use touch and tilt controls to set up a doom ticcmd_t
|
||||
==================
|
||||
*/
|
||||
static void iphoneBuildTiccmd(ticcmd_t* cmd) {
|
||||
memset(cmd,0,sizeof*cmd);
|
||||
// cmd->consistancy = consistancy[consoleplayer][maketic & BACKUPTICMASK];
|
||||
|
||||
if ( menuState != IPM_GAME ) {
|
||||
// if in the menus, always generate an empty event
|
||||
return;
|
||||
}
|
||||
|
||||
// the respawn button triggers a use
|
||||
if ( respawnActive ) {
|
||||
cmd->buttons |= BT_USE;
|
||||
respawnActive = false;
|
||||
}
|
||||
|
||||
if ( gamestate != GS_LEVEL ) {
|
||||
// at intermissions, all taps equal attack
|
||||
// FIXME: better latched value
|
||||
if ( numTouches == numPrevTouches + 1 ) {
|
||||
cmd->buttons |= BT_ATTACK;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// don't allow movement control use during automap
|
||||
if ( automapmode & am_active ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// don't built a tic when dead, other than the respawn use
|
||||
if ( players[consoleplayer].playerstate == PST_DEAD ) {
|
||||
return;
|
||||
}
|
||||
|
||||
//------------------------
|
||||
// No controls during weapon-select screen
|
||||
//------------------------
|
||||
boolean weaponCycle = false;
|
||||
if ( drawWeaponSelect ) {
|
||||
// if the weaponSelect overlay is up, continue tracking held touches
|
||||
// until the are released
|
||||
for ( ibutton_t *hud = (ibutton_t *)&huds ; hud != (ibutton_t *)(&huds+1) ; hud++ ) {
|
||||
if ( hud->touch || hud == &huds.weaponSelect ) {
|
||||
UpdateHudTouch( hud );
|
||||
}
|
||||
}
|
||||
|
||||
// Re-tapping in the weapon select area will cycle to the next weapon.
|
||||
// The action happens on initial touch.
|
||||
touch_t *t = huds.weaponSelect.touch;
|
||||
if ( t && t->down && t->stateCount == 1 ) {
|
||||
drawWeaponSelect = false;
|
||||
t->stateCount++; // ensure it won't bring it back up
|
||||
weaponCycle = true;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------
|
||||
// gameplay controls
|
||||
//------------------------
|
||||
|
||||
// update all the hud touch states
|
||||
if ( menuState == IPM_GAME ) {
|
||||
UpdateHudTouch( &huds.forwardStick );
|
||||
UpdateHudTouch( &huds.sideStick );
|
||||
UpdateHudTouch( &huds.turnStick );
|
||||
UpdateHudTouch( &huds.turnRotor );
|
||||
UpdateHudTouch( &huds.weaponSelect );
|
||||
}
|
||||
// tap in the lower center for weapon switch
|
||||
touch_t *t = huds.weaponSelect.touch;
|
||||
if ( t && t->down && t->stateCount == 1 ) {
|
||||
drawWeaponSelect = true;
|
||||
}
|
||||
|
||||
// hack to let a single touch control both hud elements on combo sticks
|
||||
// This is dependent on the order in the structure, and probably not a good
|
||||
// way to do things.
|
||||
if ( huds.sideStick.x == huds.forwardStick.x && huds.sideStick.y == huds.forwardStick.y ) {
|
||||
huds.sideStick.touch = huds.forwardStick.touch;
|
||||
huds.sideStick.downX = huds.forwardStick.downX;
|
||||
huds.sideStick.downY = huds.forwardStick.downY;
|
||||
}
|
||||
if ( huds.turnStick.x == huds.forwardStick.x && huds.turnStick.y == huds.forwardStick.y ) {
|
||||
huds.turnStick.touch = huds.forwardStick.touch;
|
||||
huds.turnStick.downX = huds.forwardStick.downX;
|
||||
huds.turnStick.downY = huds.forwardStick.downY;
|
||||
}
|
||||
|
||||
// the fire button doesn't grab touches
|
||||
{
|
||||
int x = huds.fire.x - ( huds.fire.drawWidth >> 1 );
|
||||
int y = huds.fire.y - ( huds.fire.drawHeight >> 1 );
|
||||
int w = huds.fire.drawWidth << 1;
|
||||
int h = huds.fire.drawHeight << 1;
|
||||
if ( AnyTouchInBounds( x, y, w, h ) ) {
|
||||
cmd->buttons |= BT_ATTACK;
|
||||
huds.fire.buttonFlags |= BF_DRAW_ACTIVE; // draw with color
|
||||
} else {
|
||||
huds.fire.buttonFlags &= ~BF_DRAW_ACTIVE;
|
||||
}
|
||||
}
|
||||
int forwardmove;
|
||||
int sidemove;
|
||||
|
||||
// the edge of the drawn control should give the maximum
|
||||
// legal doom movement speed
|
||||
huds.forwardStick.scale = stickMove->value / 128.0f;
|
||||
huds.sideStick.scale = stickMove->value / 128.0f;
|
||||
|
||||
forwardmove = -TURBOTHRESHOLD * AxisHit( &huds.forwardStick );
|
||||
sidemove = TURBOTHRESHOLD * AxisHit( &huds.sideStick );
|
||||
|
||||
huds.turnStick.scale = stickTurn->value / 128.0f;
|
||||
cmd->angleturn = -1500.0f * AxisHit( &huds.turnStick );
|
||||
|
||||
// rotary wheel
|
||||
cmd->angleturn -= rotorTurn->value * RotorControl( &huds.turnRotor );
|
||||
|
||||
// accelerometer tilting
|
||||
sidemove += tiltMove->value * DeadBandAdjust( tilt, tiltDeadBand->value );
|
||||
cmd->angleturn -= tiltTurn->value * DeadBandAdjust( tilt, tiltDeadBand->value );
|
||||
|
||||
// clamp movements
|
||||
cmd->forwardmove = ClampMove( forwardmove );
|
||||
cmd->sidemove = ClampMove( sidemove );
|
||||
|
||||
// tap in the upper center for use
|
||||
if ( TouchPressed( 140, 0, 240, 200 ) ) {
|
||||
cmd->buttons |= BT_USE;
|
||||
}
|
||||
|
||||
// auto-use if the game thread found a usable line in front of the player
|
||||
if ( autoUse->value && autoUseActive ) {
|
||||
if ( cmd->buttons & BT_USE ) {
|
||||
// Allow a tap to briefly cancel the auto-use, which works around
|
||||
// some issues with incorrectly started auto-uses preventing
|
||||
// a real door from opening.
|
||||
cmd->buttons &= ~BT_USE;
|
||||
} else {
|
||||
cmd->buttons |= BT_USE;
|
||||
}
|
||||
}
|
||||
|
||||
if ( weaponSelected != -1 ) {
|
||||
cmd->buttons |= BT_CHANGE;
|
||||
cmd->buttons |= weaponSelected<<BT_WEAPONSHIFT;
|
||||
weaponSelected = -1;
|
||||
} else {
|
||||
// auto-cycle weapons when firing on empty
|
||||
if ( players[consoleplayer].attackdown && !P_CheckAmmo(&players[consoleplayer]) ) {
|
||||
weaponCycle = true;
|
||||
}
|
||||
|
||||
// weapon switch
|
||||
int newweapon = wp_nochange;
|
||||
if ( weaponCycle ) {
|
||||
// witch to next weapon when out of ammo
|
||||
newweapon = P_SwitchWeapon(&players[consoleplayer]);
|
||||
}
|
||||
|
||||
if (newweapon != wp_nochange) {
|
||||
cmd->buttons |= BT_CHANGE;
|
||||
cmd->buttons |= newweapon<<BT_WEAPONSHIFT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
ShouldSendPacket
|
||||
|
||||
WiFi can suffer from bad "pileup" because of the link-level
|
||||
retransmit behavior. What we would dearly love is an ioctl or
|
||||
something that returned a value of how many packets are backed
|
||||
up in the transmit queue, but that would be terribly driver
|
||||
specific, and we are unlikely to ever see it.
|
||||
|
||||
We are going to infer that there is a pileup by looking at the
|
||||
round trip latency. If we ever support internet connections with
|
||||
real latencies that are this large, we will have to use something
|
||||
else.
|
||||
==================
|
||||
*/
|
||||
// while 1 is usual, some combinations of AsyncTic phases will give 2 commonly,
|
||||
// and we don't want to throttle back in those cases.
|
||||
static const int okPacketLatency = 4;
|
||||
static const int okOneWayLatency = 70;
|
||||
static boolean ShouldSendPacket( netPeer_t *peer, int packetLatency ) {
|
||||
if ( throttle->value == 0 ) {
|
||||
// disabled completely, always send
|
||||
return true;
|
||||
}
|
||||
|
||||
if ( peer == &netServer ) {
|
||||
if ( throttle->value == 2 ) {
|
||||
return false; // don't send client messages at all
|
||||
}
|
||||
} else {
|
||||
if ( throttle->value == 3 ) { // don't send server messages at all
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// immediately fire back a packet if it looks like we just got one through
|
||||
// clearly
|
||||
if ( peer->lastPacketAsyncTic == asyncTicNum && peer->oneWayLatency < okOneWayLatency ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ( packetLatency <= okPacketLatency ) {
|
||||
return true;
|
||||
}
|
||||
// limit from 1 to 4, in worst case only transmit a packet
|
||||
// every 16 frames, or about half a second
|
||||
packetLatency -= okPacketLatency;
|
||||
if ( packetLatency > 4 ) {
|
||||
packetLatency = 4;
|
||||
}
|
||||
|
||||
if ( asyncTicNum & ((1<<packetLatency)-1) ) {
|
||||
return false; // inhibit transmit this frame
|
||||
}
|
||||
|
||||
printf( "Sending on packetLatency %i\n", packetLatency );
|
||||
|
||||
return true; // we are throttling back, but transmit this frame
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
==================
|
||||
iphoneAsyncTic
|
||||
|
||||
This is called by a 30hz scheduled timeer in the main application thread.
|
||||
Commands are generated and sent to the packet server
|
||||
on this regular basis, regardless of the frame rate held by iphoneFrame().
|
||||
This thread should be higher priority, so it always interrupts the game
|
||||
thread.
|
||||
|
||||
It might be nice to run the game tics here, but the rendering code is not
|
||||
thread safe with the game, so it isn't an option.
|
||||
==================
|
||||
*/
|
||||
void iphoneAsyncTic() {
|
||||
// log our timing accuracy (seems to be within a few msec -- not bad)
|
||||
static int prev;
|
||||
int now = SysIphoneMilliseconds();
|
||||
asyncStats_t *stats = &asyncStats[asyncTicNum&(MAX_ASYNC_LOGS-1)];
|
||||
asyncTicNum++;
|
||||
|
||||
memset( stats, 0, sizeof( *stats ) );
|
||||
stats->msecFromLast = now - prev;
|
||||
stats->msecToExecute = 0;
|
||||
|
||||
prev = now;
|
||||
|
||||
// don't generate any commands while loading levels
|
||||
if ( iphoneFrameNum == levelLoadFrameNum ) {
|
||||
return;
|
||||
}
|
||||
|
||||
int afterLock = SysIphoneMilliseconds();
|
||||
|
||||
// latch the current touches for processing
|
||||
for ( int i = 0 ; i < MAX_TOUCHES ; i++ ) {
|
||||
touch_t *t = &sysTouches[i];
|
||||
|
||||
gameTouches[i] = *t;
|
||||
|
||||
// handle the special case of a touch that went down and up
|
||||
// inside a single frame
|
||||
if ( t->stateCount == -1 ) {
|
||||
gameTouches[i].stateCount = 1;
|
||||
t->stateCount = 0;
|
||||
t->down = false;
|
||||
} else {
|
||||
t->stateCount++;
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------
|
||||
// Create local user command
|
||||
//
|
||||
// We always create one, but it might not wind up being used for a game
|
||||
// tic if it doesn't make it to the server at the right time.
|
||||
//---------------------------------
|
||||
ticcmd_t cmd;
|
||||
iphoneBuildTiccmd( &cmd );
|
||||
|
||||
//---------------------------------
|
||||
// If we are a client, send our command to the server
|
||||
//---------------------------------
|
||||
if ( consoleplayer != 0 ) {
|
||||
if ( gameID != 0 && netgame && !netGameFailure ) {
|
||||
stats->latency = packetSequence - lastServerPacket.packetAcknowledge;
|
||||
if ( ShouldSendPacket( &netServer, packetSequence - lastServerPacket.packetAcknowledge ) ) {
|
||||
packetClient_t cp;
|
||||
memset( &cp, 0, sizeof( cp ) );
|
||||
cp.packetType = PACKET_VERSION_CLIENT;
|
||||
cp.gameID = gameID;
|
||||
cp.packetAcknowledge = lastServerPacket.packetSequence;
|
||||
cp.milliseconds = SysIphoneMilliseconds();
|
||||
cp.packetSequence = packetSequence++;
|
||||
cp.consoleplayer = consoleplayer;
|
||||
cp.gametic = gametic;
|
||||
cp.cmd = cmd;
|
||||
|
||||
idGameCenter::SendPacketToPlayerUnreliable( serverGameCenterID, &cp, sizeof ( cp ) );
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
// take our command directly
|
||||
netPlayers[0].pc.cmd = cmd;
|
||||
netPlayers[0].pc.gametic = gametic;
|
||||
netPlayers[0].peer.lastPacketTime = now;
|
||||
|
||||
|
||||
//---------------------------------
|
||||
// Decide if we want to latch the current commands for execution by the game
|
||||
//
|
||||
//---------------------------------
|
||||
int ticIndex = maketic & BACKUPTICMASK;
|
||||
|
||||
int worstTic = gametic;
|
||||
for ( int i = 0 ; i < MAXPLAYERS ; i++ ) {
|
||||
if ( playeringame[i] ) {
|
||||
netcmds[i][ticIndex] = netPlayers[i].pc.cmd;
|
||||
if ( netPlayers[i].pc.gametic < worstTic ) {
|
||||
worstTic = netPlayers[i].pc.gametic;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// only let the server get a few tics ahead of any client, so if
|
||||
// anyone is having significant net delivery problems, everyone will
|
||||
// stall instead of losing the player. If this is too small, then
|
||||
// every little hitch that any player gets will cause everyone to hitch.
|
||||
if ( maketic - worstTic < netBuffer->value ) {
|
||||
maketic++;
|
||||
}
|
||||
|
||||
|
||||
//---------------------------------
|
||||
// Build server packets to send to clients
|
||||
//
|
||||
// Always send out the current command set over the network
|
||||
// even if we didn't create a new command, in case we are just
|
||||
// recovering from a lot of dropped packets.
|
||||
//---------------------------------
|
||||
if ( netgame && !netGameFailure ) {
|
||||
// since we are sampling a shared wireless network, any of the player's
|
||||
// latencies should be a good enough metric
|
||||
stats->latency = packetSequence - netPlayers[1].pc.packetAcknowledge;
|
||||
|
||||
if ( ShouldSendPacket( &netPlayers[1].peer, stats->latency ) ) {
|
||||
packetServer_t gp;
|
||||
memset( &gp, 0, sizeof( gp ) );
|
||||
gp.packetType = PACKET_VERSION_SERVER;
|
||||
gp.gameID = gameID;
|
||||
gp.packetSequence = packetSequence++;
|
||||
gp.maketic = maketic;
|
||||
for ( int i = 0; i < MAXPLAYERS; ++i ) {
|
||||
gp.playersInGame[i] = playeringame[i];
|
||||
}
|
||||
memcpy( gp.netcmds, netcmds, sizeof( gp.netcmds ) );
|
||||
|
||||
//---------------------------------
|
||||
// Send network packets to the clients
|
||||
//---------------------------------
|
||||
for ( int i = 1 ; i < MAXPLAYERS ; i++ ) {
|
||||
if ( !playeringame[i] ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
netPlayer_t *np = &netPlayers[i];
|
||||
|
||||
// only send over the ticcmd that this client needs
|
||||
gp.starttic = np->pc.gametic;
|
||||
ticcmd_t *cmd_p = gp.netcmds;
|
||||
for ( int j = gp.starttic ; j < gp.maketic ; j++ ) {
|
||||
for ( int k = 0 ; k < MAXPLAYERS ; k++ ) {
|
||||
if ( playeringame[k] ) {
|
||||
*cmd_p++ = netcmds[k][j&BACKUPTICMASK];
|
||||
}
|
||||
}
|
||||
}
|
||||
int packetSize = (byte *)cmd_p - (byte *)&gp;
|
||||
(void)packetSize;
|
||||
|
||||
// use the most recent tic that both the client and
|
||||
// server have run
|
||||
gp.consistancyTic = np->pc.gametic < gametic ? np->pc.gametic : gametic;
|
||||
gp.consistancyTic--;
|
||||
|
||||
for ( int j = 0 ; j < MAXPLAYERS ; j++ ) {
|
||||
gp.consistancy[j] = consistancy[j][gp.consistancyTic&BACKUPTICMASK];
|
||||
}
|
||||
|
||||
gp.packetAcknowledge = np->pc.packetSequence;
|
||||
gp.milliseconds = SysIphoneMilliseconds();
|
||||
|
||||
// transmit the packet
|
||||
const std::string theClient = playerIndexToIDMap[i];
|
||||
idGameCenter::SendPacketToPlayerUnreliable( theClient, &gp, packetSize );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stats->msecToExecute = SysIphoneMilliseconds() - now;
|
||||
if ( stats->msecToExecute > 6 ) {
|
||||
printf( "long asyncTic %i: %i msec (%i in lock), %i packets\n", asyncTicNum - 1, stats->msecToExecute,
|
||||
afterLock - now, stats->received );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
35
common/ios/doomengine/iphone_common.h
Executable file
35
common/ios/doomengine/iphone_common.h
Executable file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company.
|
||||
|
||||
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 doomengine_iphone_common_h
|
||||
#define doomengine_iphone_common_h
|
||||
|
||||
|
||||
@class UIViewController;
|
||||
|
||||
void CommonSystemSetup( UIViewController * gameController );
|
||||
|
||||
|
||||
|
||||
extern char iphoneDocDirectory[PATH_MAX];
|
||||
extern char iphoneAppDirectory[PATH_MAX];
|
||||
extern char iphoneTempDirectory[PATH_MAX];
|
||||
|
||||
#endif
|
||||
105
common/ios/doomengine/iphone_common.mm
Executable file
105
common/ios/doomengine/iphone_common.mm
Executable file
@@ -0,0 +1,105 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company.
|
||||
|
||||
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 <Foundation/Foundation.h>
|
||||
|
||||
#include "iphone_common.h"
|
||||
#include "doomiphone.h"
|
||||
#include "ios/GameCenter.h"
|
||||
#include "ios/Localization.h"
|
||||
#import "ios/LocalizationObjectiveC.h"
|
||||
#include "iphone_delegate.h"
|
||||
#include "DoomGameCenterMatch.h"
|
||||
#import "ios/objectivec_utilities.h"
|
||||
|
||||
@class UIViewController;
|
||||
|
||||
/*
|
||||
=======================
|
||||
CommonSystemSetup
|
||||
|
||||
Called in each game's didFinishLaunching method.
|
||||
=======================
|
||||
*/
|
||||
void CommonSystemSetup( UIViewController * gameViewController ) {
|
||||
|
||||
// Authenticate the Game Center player.
|
||||
idGameCenter::Initialize();
|
||||
idGameCenter::AuthenticateLocalPlayer( gameViewController, &gDoomGameCenterMatch );
|
||||
|
||||
// get the documents directory, where we will write configs and save games
|
||||
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
|
||||
NSString *documentsDirectory = [paths objectAtIndex:0];
|
||||
[documentsDirectory getCString: iphoneDocDirectory
|
||||
maxLength: sizeof( iphoneDocDirectory ) - 1
|
||||
encoding: NSASCIIStringEncoding ];
|
||||
|
||||
// get the app directory, where our data files live
|
||||
// this gives something like:
|
||||
// /var/mobile/Applications/71355F9F-6400-4267-B07D-E7980764F5A8/Applications
|
||||
// when what we want is:
|
||||
// /var/mobile/Applications/71355F9F-6400-4267-B07D-E7980764F5A8/doom.app
|
||||
// so we get that in main() from argv[0]
|
||||
#if 0
|
||||
paths = NSSearchPathForDirectoriesInDomains(NSApplicationDirectory, NSUserDomainMask, YES);
|
||||
NSString *appDirectory = [paths objectAtIndex:0];
|
||||
|
||||
static char iphoneAppDirectoryFromAPI[1024];
|
||||
[appDirectory getCString: iphoneAppDirectoryFromAPI
|
||||
maxLength: sizeof( iphoneAppDirectoryFromAPI ) - 1
|
||||
encoding: NSASCIIStringEncoding ];
|
||||
#endif
|
||||
|
||||
|
||||
// Get the temporary directory.
|
||||
NSString * tempDirectory = NSTemporaryDirectory();
|
||||
[tempDirectory getCString:iphoneTempDirectory maxLength:PATH_MAX encoding:NSUTF8StringEncoding];
|
||||
|
||||
// Initialize the localization system.
|
||||
idLocalization_Initialize();
|
||||
}
|
||||
|
||||
/*
|
||||
=======================
|
||||
MainMenu
|
||||
|
||||
Hides the OpenGL View and reverts back to Interface builder.
|
||||
=======================
|
||||
*/
|
||||
void iphoneMainMenu() {
|
||||
|
||||
[ gAppDelegate HideGLView];
|
||||
menuState = IPM_MAIN;
|
||||
}
|
||||
|
||||
/*
|
||||
=======================
|
||||
iphonePopGL
|
||||
|
||||
Hides the OpenGL View and reverts back to Interface builder.
|
||||
=======================
|
||||
*/
|
||||
void iphonePopGL() {
|
||||
|
||||
[ gAppDelegate PopGLView];
|
||||
menuState = IPM_MAIN;
|
||||
}
|
||||
|
||||
|
||||
50
common/ios/doomengine/iphone_delegate.h
Executable file
50
common/ios/doomengine/iphone_delegate.h
Executable file
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 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.
|
||||
|
||||
*/
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import <UIKit/UIAccelerometer.h>
|
||||
#import "iphone_glViewController.h"
|
||||
|
||||
@class EAGLView;
|
||||
|
||||
@interface iphoneApp : NSObject <UIApplicationDelegate, UIAccelerometerDelegate> {
|
||||
|
||||
UIWindow * window; // Main Application Window.
|
||||
UINavigationController * navigationController; // Our View Stack
|
||||
iphone_glViewController * openGLViewController; // our OpenGL (Game) View
|
||||
BOOL hasPushedGLView; // Keep track of whether the GL view
|
||||
// is on top of the stack, for the
|
||||
// hacked delay used to hide the first
|
||||
// frame of garbage.
|
||||
}
|
||||
|
||||
@property (nonatomic, retain) IBOutlet UIWindow *window;
|
||||
|
||||
extern iphoneApp * gAppDelegate;
|
||||
|
||||
- (void) InitializeInterfaceBuilder;
|
||||
|
||||
- (void) HACK_PushController;
|
||||
- (void) ShowGLView;
|
||||
- (void) HideGLView;
|
||||
- (void) PopGLView;
|
||||
|
||||
@end
|
||||
|
||||
225
common/ios/doomengine/iphone_delegate.mm
Executable file
225
common/ios/doomengine/iphone_delegate.mm
Executable file
@@ -0,0 +1,225 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company.
|
||||
|
||||
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 "iphone_delegate.h"
|
||||
|
||||
#import <AudioToolbox/AudioServices.h>
|
||||
#include "doomiphone.h"
|
||||
#include "iphone_common.h"
|
||||
#include "ios/InAppStore.h"
|
||||
#include "ios/GameCenter.h"
|
||||
|
||||
|
||||
|
||||
@implementation iphoneApp
|
||||
|
||||
@synthesize window;
|
||||
|
||||
iphoneApp * gAppDelegate = NULL;
|
||||
bool inBackgroundProcess = false;
|
||||
|
||||
touch_t sysTouches[MAX_TOUCHES];
|
||||
touch_t gameTouches[MAX_TOUCHES];
|
||||
|
||||
#define FRAME_HERTZ 30.0f
|
||||
const static float ACCELEROMETER_UPDATE_INTERVAL = 1.0f / FRAME_HERTZ;
|
||||
|
||||
/*
|
||||
========================
|
||||
applicationDidFinishLaunching
|
||||
========================
|
||||
*/
|
||||
- (void)applicationDidFinishLaunching:(UIApplication *)application {
|
||||
|
||||
gAppDelegate = self;
|
||||
inBackgroundProcess = false;
|
||||
hasPushedGLView = NO;
|
||||
|
||||
// Create the window programmatically instead of loading from a nib file.
|
||||
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
|
||||
|
||||
// Disable Screen Dimming.
|
||||
[[ UIApplication sharedApplication] setIdleTimerDisabled: YES ];
|
||||
|
||||
// Initial Application Style config.
|
||||
[ application setStatusBarHidden: YES ];
|
||||
|
||||
// start the flow of accelerometer events
|
||||
UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer];
|
||||
[ accelerometer setDelegate: self ];
|
||||
[ accelerometer setUpdateInterval: ACCELEROMETER_UPDATE_INTERVAL ];
|
||||
|
||||
[self InitializeInterfaceBuilder ];
|
||||
|
||||
CommonSystemSetup( [navigationController topViewController] );
|
||||
|
||||
// do all the game startup work
|
||||
iphoneStartup();
|
||||
|
||||
UIView * view = navigationController.view;
|
||||
|
||||
[window addSubview: view];
|
||||
[window setRootViewController:navigationController];
|
||||
[window setBackgroundColor: [UIColor blackColor] ];
|
||||
[window makeKeyAndVisible];
|
||||
}
|
||||
|
||||
/*
|
||||
========================
|
||||
applicationWillResignActive
|
||||
========================
|
||||
*/
|
||||
- (void)applicationWillResignActive:(UIApplication *)application {
|
||||
inBackgroundProcess = YES;
|
||||
|
||||
idGameCenter::HandleMoveToBackground();
|
||||
|
||||
// If we're in a multiplater game, and showing the OpenGL view,
|
||||
// go back to the main menu since the multiplayer game is hosed.
|
||||
if ( netgame && navigationController.topViewController == gAppDelegate->openGLViewController ) {
|
||||
iphoneMainMenu();
|
||||
}
|
||||
|
||||
iphonePauseMusic();
|
||||
iphoneShutdown();
|
||||
}
|
||||
|
||||
/*
|
||||
========================
|
||||
applicationDidBecomeActive
|
||||
========================
|
||||
*/
|
||||
- (void)applicationDidBecomeActive:(UIApplication *)application {
|
||||
inBackgroundProcess = NO;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
========================
|
||||
applicationWillTerminate
|
||||
========================
|
||||
*/
|
||||
- (void)applicationWillTerminate:(UIApplication *)application {
|
||||
iphoneStopMusic();
|
||||
iphoneShutdown();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
========================
|
||||
applicationDidReceiveMemoryWarning
|
||||
========================
|
||||
*/
|
||||
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
|
||||
Com_Printf( "applicationDidReceiveMemoryWarning\n" );
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
========================
|
||||
dealloc
|
||||
========================
|
||||
*/
|
||||
- (void)dealloc {
|
||||
[window release];
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
/*
|
||||
========================
|
||||
accelerometer
|
||||
========================
|
||||
*/
|
||||
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
|
||||
{
|
||||
float acc[4];
|
||||
acc[0] = acceleration.x;
|
||||
acc[1] = acceleration.y;
|
||||
acc[2] = acceleration.z;
|
||||
acc[3] = acceleration.timestamp;
|
||||
|
||||
|
||||
iphoneTiltEvent( acc );
|
||||
}
|
||||
|
||||
/*
|
||||
========================
|
||||
HACK_PushController - Removes Flicker from Loading Wads.
|
||||
God forgive me.
|
||||
|
||||
========================
|
||||
*/
|
||||
- (void) HACK_PushController {
|
||||
[navigationController pushViewController:openGLViewController animated:NO];
|
||||
}
|
||||
|
||||
/*
|
||||
========================
|
||||
ShowGLView
|
||||
========================
|
||||
*/
|
||||
- (void)ShowGLView {
|
||||
|
||||
if( hasPushedGLView == NO ) {
|
||||
hasPushedGLView = YES;
|
||||
// Hack city.
|
||||
[NSTimer scheduledTimerWithTimeInterval:0.2f target:self selector:@selector(HACK_PushController) userInfo:nil repeats:NO];
|
||||
|
||||
[ openGLViewController StartDisplay ];
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
========================
|
||||
HideGLView
|
||||
========================
|
||||
*/
|
||||
- (void) HideGLView {
|
||||
|
||||
[ navigationController popToRootViewControllerAnimated:NO ];
|
||||
hasPushedGLView = NO;
|
||||
}
|
||||
|
||||
/*
|
||||
========================
|
||||
PopGLView
|
||||
========================
|
||||
*/
|
||||
- (void) PopGLView {
|
||||
[ navigationController popViewControllerAnimated:NO];
|
||||
hasPushedGLView = NO;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
========================
|
||||
InitializeInterfaceBuilder
|
||||
========================
|
||||
*/
|
||||
- (void) InitializeInterfaceBuilder {
|
||||
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
void ShowGLView( void ) {
|
||||
[ gAppDelegate ShowGLView ];
|
||||
}
|
||||
|
||||
589
common/ios/doomengine/iphone_doom.h
Executable file
589
common/ios/doomengine/iphone_doom.h
Executable file
@@ -0,0 +1,589 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 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.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef IPHONE_DOOM_H
|
||||
#define IPHONE_DOOM_H
|
||||
|
||||
#include "prboom/doomtype.h"
|
||||
#include "prboom/doomdef.h"
|
||||
#include "prboom/doomstat.h"
|
||||
#include "prboom/d_ticcmd.h"
|
||||
|
||||
#include "ipak.h"
|
||||
#include "cvar.h"
|
||||
|
||||
#include <sys/socket.h>
|
||||
|
||||
// this is the version number displayed on the menu screen
|
||||
#define DOOM_IPHONE_VERSION 0.9
|
||||
|
||||
// if defined, the game runs in a separate thread from the app event loop
|
||||
#define USE_GAME_THREAD
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef enum menuState {
|
||||
IPM_GAME,
|
||||
IPM_MAIN,
|
||||
IPM_MAPS,
|
||||
IPM_MULTIPLAYER,
|
||||
IPM_CONTROLS,
|
||||
IPM_OPTIONS,
|
||||
IPM_HUDEDIT,
|
||||
IPM_PACKET_TEST
|
||||
} menuState_t;
|
||||
|
||||
extern menuState_t menuState;
|
||||
extern menuState_t lastState;
|
||||
|
||||
void iphoneDrawMenus();
|
||||
|
||||
#define VID_WIDTH 480
|
||||
#define VID_HEIGHT 320
|
||||
|
||||
#define MAX_SKILLS 5
|
||||
#define MAX_MAPS 200
|
||||
|
||||
#define MF_TRIED 1
|
||||
#define MF_COMPLETED 2
|
||||
#define MF_KILLS 4
|
||||
#define MF_SECRETS 8
|
||||
#define MF_TREASURE 16
|
||||
#define MF_TIME 32
|
||||
|
||||
// we want to track mapStats for downloaded content, so we
|
||||
// won't have a known number of these
|
||||
typedef struct {
|
||||
int dataset;
|
||||
int episode;
|
||||
int map;
|
||||
|
||||
int completionFlags[MAX_SKILLS];
|
||||
} mapStats_t;
|
||||
|
||||
// the level select screen returns this
|
||||
typedef struct {
|
||||
int dataset;
|
||||
int episode;
|
||||
int map;
|
||||
int skill;
|
||||
} mapStart_t;
|
||||
|
||||
// this structure is saved out at the head of the binary save file,
|
||||
// and allows all the menus to work without having to load a game save
|
||||
typedef struct {
|
||||
mapStart_t map; // this is the map currently being run
|
||||
|
||||
int saveGameIsValid; // when 0, resume game will just be a new game
|
||||
|
||||
// if someone downloads more than MAX_MAPS, they won't get stat tracking on them.
|
||||
int numMapStats;
|
||||
mapStats_t mapStats[MAX_MAPS];
|
||||
} playState_t;
|
||||
|
||||
extern playState_t playState;
|
||||
|
||||
extern boolean levelHasBeenLoaded; // determines if "resume game" does a loadGame and exiting does a saveGame
|
||||
|
||||
extern pkTexture_t *arialFontTexture;
|
||||
|
||||
// set to 1 when app is exiting to cause game thread to do a save game,
|
||||
// which would not be safe to do from the event thread
|
||||
extern volatile int saveOnExitState;
|
||||
|
||||
extern int asyncTicNum; // 30hz
|
||||
extern int iphoneFrameNum; // frame rate dependent, max of 30hz
|
||||
extern int levelLoadFrameNum;
|
||||
extern int consoleActive;
|
||||
extern boolean iphoneTimeDemo;
|
||||
extern int timeDemoStart;
|
||||
extern char timeDemoResultString[80];
|
||||
|
||||
extern cvar_t *skill;
|
||||
extern cvar_t *episode;
|
||||
extern cvar_t *controlScheme;
|
||||
extern cvar_t *stickMove;
|
||||
extern cvar_t *stickTurn;
|
||||
extern cvar_t *rotorTurn;
|
||||
extern cvar_t *stickDeadBand;
|
||||
extern cvar_t *tiltTurn;
|
||||
extern cvar_t *tiltMove;
|
||||
extern cvar_t *tiltDeadBand;
|
||||
extern cvar_t *tiltAverages;
|
||||
extern cvar_t *music;
|
||||
extern cvar_t *miniNet;
|
||||
extern cvar_t *showTilt;
|
||||
extern cvar_t *showTime;
|
||||
extern cvar_t *showNet;
|
||||
extern cvar_t *showSound;
|
||||
extern cvar_t *cropSprites;
|
||||
extern cvar_t *mapScale;
|
||||
extern cvar_t *drawControls;
|
||||
extern cvar_t *autoUse;
|
||||
extern cvar_t *statusBar;
|
||||
extern cvar_t *touchClick;
|
||||
extern cvar_t *messages;
|
||||
extern cvar_t *timeLimit;
|
||||
extern cvar_t *fragLimit;
|
||||
extern cvar_t *mpDeathmatch;
|
||||
extern cvar_t *mpDataset;
|
||||
extern cvar_t *mpSkill;
|
||||
extern cvar_t *mpEpisode;
|
||||
extern cvar_t *mpMap;
|
||||
extern cvar_t *mpExpansion;
|
||||
extern cvar_t *glfinish;
|
||||
extern cvar_t *mapSelectY;
|
||||
extern cvar_t *throttle;
|
||||
extern cvar_t *centerSticks;
|
||||
extern cvar_t *rampTurn;
|
||||
extern cvar_t *netBuffer;
|
||||
|
||||
extern int numTouches;
|
||||
extern int touches[5][2]; // [0] = x, [1] = y in landscape mode, raster order with y = 0 at top
|
||||
// so we can detect button releases
|
||||
extern int numPrevTouches;
|
||||
extern int prevTouches[5][2];
|
||||
|
||||
extern float tilt; // -1.0 to 1.0
|
||||
extern float tiltPitch;
|
||||
|
||||
extern boolean drawWeaponSelect; // true when the weapon select overlay is up
|
||||
extern int weaponSelected; // -1 for no change
|
||||
|
||||
typedef unsigned char color4_t[4];
|
||||
typedef unsigned char color3_t[3];
|
||||
|
||||
// networking
|
||||
typedef enum {
|
||||
PACKET_VERSION_BASE = 0x24350010,
|
||||
PACKET_VERSION_SETUP,
|
||||
PACKET_VERSION_JOIN,
|
||||
PACKET_VERSION_CLIENT,
|
||||
PACKET_VERSION_SERVER
|
||||
} packetType_t;
|
||||
|
||||
#define DOOM_PORT 14666 // setup packets will go to DOOM_PORT+1
|
||||
|
||||
// the server sends out a setup packet by broadcast, and also directly addressed
|
||||
// to each client that has joined the game because broadcast packets have truly
|
||||
// crappy delivery characteristics over WiFi
|
||||
typedef struct {
|
||||
int packetType;
|
||||
int gameID; // every change to anything in packetSetup_t must change gameID
|
||||
int startGame; // when this is set, start running the game
|
||||
|
||||
int sendCount; // just for packet drop tests
|
||||
|
||||
mapStart_t map;
|
||||
|
||||
int deathmatch;
|
||||
int fraglimit;
|
||||
int timelimit;
|
||||
|
||||
int playerID[MAXPLAYERS]; // 0 = not in game
|
||||
} packetSetup_t;
|
||||
|
||||
// If we have received a recent setup packet before hitting the multiplayer
|
||||
// button, we will send a join packet to that server. Otherwise, we will
|
||||
// start acting as a new server.
|
||||
typedef struct {
|
||||
int packetType;
|
||||
|
||||
// this should match the packetSetup.gameID
|
||||
int gameID;
|
||||
|
||||
int playerID;
|
||||
} packetJoin_t;
|
||||
|
||||
typedef struct {
|
||||
int packetType;
|
||||
|
||||
// gameID is determined randomly during setup, any packet that doesn't
|
||||
// match is discarded
|
||||
int gameID;
|
||||
|
||||
// this could be used to tell when we are dropping client packets
|
||||
// but it isn't critical
|
||||
int packetSequence;
|
||||
|
||||
// used to show current round trip latency
|
||||
int packetAcknowledge;
|
||||
|
||||
// the client's clock at the time the packet was sent, used
|
||||
// to track one-way latency
|
||||
int milliseconds;
|
||||
|
||||
// the server could match this up based on ip alone, but it is nice to have
|
||||
int consoleplayer;
|
||||
|
||||
// the last tic that the client has run
|
||||
int gametic;
|
||||
|
||||
// some commands will get missed over the network
|
||||
ticcmd_t cmd;
|
||||
} packetClient_t;
|
||||
|
||||
typedef struct {
|
||||
int packetType;
|
||||
|
||||
// gameID is determined randomly during setup, any packet that doesn't
|
||||
// match is discarded
|
||||
int gameID;
|
||||
|
||||
// used to detect packet drops
|
||||
int packetSequence;
|
||||
|
||||
// used to show current round trip latency
|
||||
int packetAcknowledge;
|
||||
|
||||
// the server's clock at the time the packet was sent, used
|
||||
// to track one-way latency
|
||||
int milliseconds;
|
||||
|
||||
// consistancyTic will be the last acknowledged gametic for this
|
||||
// particular client
|
||||
int consistancyTic;
|
||||
|
||||
// constancy is used to see if somehow the game running on the
|
||||
// client has diverged from the one running on the server,
|
||||
// which is an unrecoverable error
|
||||
short consistancy[MAXPLAYERS];
|
||||
|
||||
// this will be the last pc.gametic from the player
|
||||
int starttic;
|
||||
|
||||
// netcmds[][(maketic-1)&BACKUPTICMASK] is the most recent
|
||||
int maketic;
|
||||
|
||||
// notifies the server of which players are connected. This way we can handle players
|
||||
// that disconnect in the middle of a game.
|
||||
int playersInGame[MAXPLAYERS];
|
||||
|
||||
// only the [playersInGame*(maketic-starttic)] will be transmitted
|
||||
ticcmd_t netcmds[MAXPLAYERS*BACKUPTICS];
|
||||
} packetServer_t;
|
||||
|
||||
extern int gameSocket;
|
||||
extern struct sockaddr_in gameSocketAddress;
|
||||
|
||||
extern int playerID;
|
||||
extern int gameID;
|
||||
extern int localGameID;
|
||||
extern int packetSequence;
|
||||
|
||||
// Only one game can be set up at a time on a given wireless segment, although
|
||||
// several independent games can be played.
|
||||
// If a valid setupPacket has arrived in the last second, that will be the
|
||||
// displayed game, otherwise the local system starts sending out setupPackets.
|
||||
extern packetSetup_t setupPacket;
|
||||
extern int setupPacketFrameNum;
|
||||
extern int localGameID; // change every time we take over as the sender of setupPackets
|
||||
|
||||
// set after each game tic if a usable line is in front of the player
|
||||
extern boolean autoUseActive;
|
||||
extern boolean respawnActive;
|
||||
|
||||
typedef enum {
|
||||
NF_NONE,
|
||||
NF_CONSISTANCY,
|
||||
NF_INTERRUPTED,
|
||||
NF_LOST_SERVER
|
||||
} netFail_t;
|
||||
extern netFail_t netGameFailure; // set by asyncThread
|
||||
|
||||
typedef struct {
|
||||
int interfaceIndex; // we must use the right socket to send packets
|
||||
struct sockaddr address;
|
||||
int oneWayLatency; // will always have 30+ msec of jitter
|
||||
int lastPacketAsyncTic; // to easily tell if it just arrived
|
||||
int lastPacketTime; // local milliseconds of last receive
|
||||
int lastTimeDelta; // packet milliseconds - local milliseconds
|
||||
int lowestTimeDelta; // min'd with lastTimeDelta each arrival
|
||||
int currentPingTics; // packetSequence - last packetAcknowledge
|
||||
} netPeer_t;
|
||||
|
||||
typedef struct {
|
||||
netPeer_t peer;
|
||||
packetClient_t pc; // most recent packet received
|
||||
|
||||
// TODO: There would be some benefit to ensuring that no edge transitions on
|
||||
// buttons are missed due to clock/net jitter.
|
||||
} netPlayer_t;
|
||||
|
||||
// all received packets, whether bluetooth or WiFi, go through here
|
||||
void iphoneProcessPacket( const struct sockaddr *from, const void *data, int len );
|
||||
|
||||
extern netPeer_t netServer;
|
||||
extern netPlayer_t netPlayers[MAXPLAYERS];
|
||||
|
||||
typedef struct {
|
||||
int numGameTics;
|
||||
int numPingTics;
|
||||
int enterFrame;
|
||||
int afterSleep;
|
||||
int beforeSwap;
|
||||
int afterSwap;
|
||||
} logTime_t;
|
||||
#define MAX_LOGGED_TIMES 512
|
||||
extern logTime_t loggedTimes[MAX_LOGGED_TIMES]; // indexed by iphoneFrameNum
|
||||
|
||||
void LoadWallTexture( int wallPicNum );
|
||||
|
||||
float StringFontWidth( const char *str );
|
||||
int TouchDown( int x, int y, int w, int h );
|
||||
int TouchReleased( int x, int y, int w, int h );
|
||||
int TouchPressed( int x, int y, int w, int h );
|
||||
|
||||
// y is the baseline for font drawing
|
||||
float iphoneDrawText( float x, float y, float scale, const char *str );
|
||||
float iphoneCenterText( float x, float y, float scale, const char *str );
|
||||
|
||||
void StartGame();
|
||||
void iphoneOpenAutomap();
|
||||
void iphoneDrawNotifyText();
|
||||
void iphoneSet2D( void );
|
||||
|
||||
void R_Draw_Fill( int x, int y, int w, int h, color3_t c );
|
||||
void R_Draw_Blend( int x, int y, int w, int h, color4_t c );
|
||||
|
||||
void InitImmediateModeGL();
|
||||
|
||||
void iphonePacifierUpdate();
|
||||
void iphoneDrawScreen();
|
||||
|
||||
extern int damageflash;
|
||||
extern int bonusFrameNum;
|
||||
extern int attackDirTime[2];
|
||||
|
||||
#define BF_IGNORE 1 // don't draw or process touches
|
||||
#define BF_INACTIVE 2 // draw, but no touch processing at all
|
||||
#define BF_GLOW 4 // animated overbright glow
|
||||
#define BF_DIMMED 8 // draw darker, but still selectable
|
||||
#define BF_CENTERTEXT 16 // text in middle of button, not underneath
|
||||
#define BF_TRANSPARENT 32 // blend translucent
|
||||
#define BF_HUDBUTTON 64 // don't process in UpdateHudTouch
|
||||
#define BF_DRAW_ACTIVE 128 // for fire button
|
||||
#define BF_SMALL_CLICK 256 // for fire button
|
||||
|
||||
typedef struct {
|
||||
int x, y;
|
||||
int drawWidth, drawHeight;
|
||||
pkTexture_t *texture;
|
||||
|
||||
const char *title;
|
||||
struct touch_s *touch;
|
||||
float scale; // ramps up and down after touches
|
||||
int frameNum; // reset scale if not checked on previous frame
|
||||
int buttonFlags;
|
||||
boolean twoFingerPress; // if a second finger came down before a release for timedemo / etc
|
||||
boolean pressed; // true when a touch goes down in it
|
||||
|
||||
// stuff for hud controls
|
||||
boolean drawAsLimit; // color tint when further movement won't do anything
|
||||
float touchState; // rotor angle
|
||||
float drawState; // offsets for rotors
|
||||
int downX, downY; // initial touch went down here
|
||||
} ibutton_t;
|
||||
|
||||
typedef struct {
|
||||
ibutton_t forwardStick;
|
||||
ibutton_t sideStick;
|
||||
ibutton_t turnStick;
|
||||
ibutton_t turnRotor;
|
||||
ibutton_t fire;
|
||||
ibutton_t menu;
|
||||
ibutton_t map;
|
||||
ibutton_t weaponSelect;
|
||||
} hud_t;
|
||||
|
||||
extern hud_t huds;
|
||||
|
||||
void HudSetForScheme( int schemeNum );
|
||||
void HudSetTexnums();
|
||||
void HudEditFrame();
|
||||
|
||||
boolean StartNetGame();
|
||||
|
||||
int BackButton();
|
||||
void ResumeGame();
|
||||
|
||||
//---------------------------------------
|
||||
// Touch and button
|
||||
//---------------------------------------
|
||||
|
||||
typedef struct touch_s {
|
||||
boolean down;
|
||||
int x, y;
|
||||
// int prevX, prevY; // will be set to x, y on first touch, copied after each game frame
|
||||
int stateCount; // set to 1 on first event that state changes, incremented each game frame (-1 is a special tapped-and-released code)
|
||||
void *controlOwner;
|
||||
} touch_t;
|
||||
|
||||
#define MAX_TOUCHES 5
|
||||
extern touch_t sysTouches[MAX_TOUCHES];
|
||||
extern touch_t gameTouches[MAX_TOUCHES];
|
||||
|
||||
touch_t *TouchInBounds( int x, int y, int w, int h );
|
||||
touch_t *AnyTouchInBounds( int x, int y, int w, int h );
|
||||
touch_t *UpdateHudTouch( ibutton_t *hud );
|
||||
|
||||
bool NewTextButton( ibutton_t *b, const char *title, int x, int y, int w, int h );
|
||||
void SetButtonPics( ibutton_t *button, const char *picName, const char *title, int x, int y );
|
||||
void SetButtonPicsAndSizes( ibutton_t *button, const char *picBase, const char *title, int x, int y, int w, int h );
|
||||
boolean HandleButton( ibutton_t *button );
|
||||
|
||||
//---------------------------------------
|
||||
// Doom stuff we use directly
|
||||
//---------------------------------------
|
||||
void G_DoSaveGame (boolean menu);
|
||||
extern short consistancy[MAXPLAYERS][BACKUPTICS];
|
||||
extern boolean levelTimer;
|
||||
extern int levelTimeCount;
|
||||
extern boolean levelFragLimit;
|
||||
extern int levelFragLimitCount;
|
||||
|
||||
//---------------------------------------
|
||||
// iphone_sound.c
|
||||
//---------------------------------------
|
||||
|
||||
void Sound_Init( void );
|
||||
void Sound_StartLocalSound( const char *sound );
|
||||
void Sound_StartLocalSoundAtVolume( const char *sound, float volume );
|
||||
|
||||
void ShowSound();
|
||||
|
||||
//---------------------------------------
|
||||
// iphone_net.c
|
||||
//---------------------------------------
|
||||
|
||||
// dump all the interfaces and ip addresses for debugging
|
||||
void ReportNetworkInterfaces();
|
||||
|
||||
// open a UDP socket, pass "en0" for wifi
|
||||
int UDPSocket( const char *interfaceName, int portnum );
|
||||
|
||||
// return false if the multiplayer button should be disabled
|
||||
boolean NetworkAvailable();
|
||||
|
||||
// this can be called every frame in the menu to highlight
|
||||
// the multiplayer icon when a server is already up
|
||||
boolean NetworkServerAvailable();
|
||||
|
||||
// returns "WiFi", "BlueTooth", or "" for display on the
|
||||
// main menu multiplayer icon
|
||||
const char *NetworkServerTransport();
|
||||
|
||||
// this queries DNS for the actual address
|
||||
boolean ResolveNetworkServer( struct sockaddr *addr );
|
||||
|
||||
// If we are starting a server instead of joining one, make
|
||||
// us available as a bonjour service until we start the game
|
||||
// or back out of the multiplayer menu. Returns false if
|
||||
// someone else grabbed it just before we could.
|
||||
boolean RegisterGameService();
|
||||
void TerminateGameService();
|
||||
|
||||
// called by AsyncTic() to check for server state changes,
|
||||
// registers for service browsing on first call.
|
||||
void ProcessDNSMessages();
|
||||
|
||||
// draw a graph of packets sent and received
|
||||
void ShowNet();
|
||||
void ShowMiniNet();
|
||||
|
||||
//---------------------------------------
|
||||
// iphone_mapSelect.c
|
||||
//---------------------------------------
|
||||
mapStats_t *FindMapStats( int dataset, int episode, int map, boolean create );
|
||||
const char *FindMapName( int dataset, int episode, int map );
|
||||
|
||||
//---------------------------------------
|
||||
// iphone_start.c
|
||||
//
|
||||
// game harness routines
|
||||
//---------------------------------------
|
||||
void ResumeGame();
|
||||
boolean StartNetGame();
|
||||
void StartSaveGame();
|
||||
void StartSinglePlayerGame( mapStart_t map );
|
||||
void StartDemoGame( boolean timeDemoMode );
|
||||
void StartupWithCorrectWads( int mission );
|
||||
|
||||
//---------------------------------------
|
||||
// interfaces from the original game code
|
||||
//---------------------------------------
|
||||
void iphoneSetNotifyText( const char *str, ... );
|
||||
void iphoneIntermission( wbstartstruct_t* wbstartstruct );
|
||||
void iphoneStartLevel();
|
||||
void iphoneStartMusic();
|
||||
void iphoneStopMusic();
|
||||
void iphonePlayMusic( const char *name );
|
||||
void iphonePauseMusic();
|
||||
void iphoneResumeMusic();
|
||||
void iphoneDoomStartup( const char * iwad, const char * pwad );
|
||||
void iphoneLoadMissionPack(void);
|
||||
void iphoneAddPWADFiles(void);
|
||||
|
||||
//---------------------------------------
|
||||
// interfaces to Objective-C land
|
||||
//---------------------------------------
|
||||
|
||||
// The event thread will fill this after hitting enter
|
||||
// on the console. The game thread should check it,
|
||||
// execute it, and clear it under mutex.
|
||||
extern char consoleCommand[1024];
|
||||
|
||||
void SysIPhoneSwapBuffers();
|
||||
void SysIPhoneVibrate();
|
||||
void SysIPhoneOpenURL( const char *url );
|
||||
int SysIPhoneIsDeviceLandscapeRight( void );
|
||||
void SysIPhoneSetUIKitOrientation( int isLandscapeRight );
|
||||
const char * SysIPhoneGetConsoleTextField();
|
||||
void SysIPhoneSetConsoleTextField(const char *);
|
||||
void SysIPhoneInitAudioSession();
|
||||
int SysIPhoneOtherAudioIsPlaying();
|
||||
int SysIphoneMilliseconds();
|
||||
int SysIphoneMicroseconds();
|
||||
const char * SysIphoneGetAppDir();
|
||||
const char * SysIphoneGetDocDir();
|
||||
const char * SysIphoneGetTempDir();
|
||||
|
||||
void ShowGLView( void );
|
||||
|
||||
//---------------------------------------
|
||||
// interfaces from Objective-C land
|
||||
//---------------------------------------
|
||||
void iphoneStartup();
|
||||
void iphoneShutdown();
|
||||
void iphoneFrame();
|
||||
void iphoneAsyncTic();
|
||||
void iphoneTiltEvent( float *tilts );
|
||||
void iphoneMainMenu();
|
||||
void iphonePopGL();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#define DEFAULTS_MISSIONPACK_KEY "missionPack"
|
||||
|
||||
#endif
|
||||
35
common/ios/doomengine/iphone_email.h
Executable file
35
common/ios/doomengine/iphone_email.h
Executable file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* iphone_email.h
|
||||
* Doom
|
||||
*
|
||||
* Created by Greg Hodges on 10/20/09.
|
||||
* Copyright 2009 id Software. All rights reserved.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 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.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
//Appends the console buffer while replacings non-URLscheme compatible text
|
||||
void AppendConsoleBuffer(const char *buf);
|
||||
|
||||
//Emails the console buffer to id software
|
||||
void EmailConsole();
|
||||
203
common/ios/doomengine/iphone_email.m
Executable file
203
common/ios/doomengine/iphone_email.m
Executable file
@@ -0,0 +1,203 @@
|
||||
/*
|
||||
* iphone_email.c
|
||||
* Doom
|
||||
*
|
||||
* Created by Greg Hodges on 10/20/09.
|
||||
* Copyright 2009 id Software. All rights reserved.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 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 "iphone_email.h"
|
||||
#include <time.h>
|
||||
|
||||
#import <Foundation/NSURL.h>
|
||||
#import <UIKit/UIApplication.h>
|
||||
|
||||
|
||||
char *consoleBuffer = NULL; //buffer for the console output
|
||||
int size = 0;
|
||||
|
||||
/*
|
||||
* ReplaceAt()
|
||||
* Replaces the char at location with the insertString
|
||||
*/
|
||||
void ReplaceAt( char *oldString, const char *insertString, int location)
|
||||
{
|
||||
int length = strlen(oldString);
|
||||
int chunkLength = strlen(insertString);
|
||||
|
||||
char *newString = malloc(length + chunkLength + 1);//the 1 includes space for the null terminating character
|
||||
|
||||
#if 0
|
||||
//strcpy(newString, old);
|
||||
strncpy(newString, oldString, location);
|
||||
newString[location] = '\0';
|
||||
strcat(newString, insertString);
|
||||
strcpy(&newString[location+chunkLength], &oldString[location + 1]);
|
||||
|
||||
free(oldString);
|
||||
oldString = newString;
|
||||
#endif
|
||||
|
||||
//copy the front part
|
||||
char frontPart[location+1];
|
||||
strncpy(frontPart, oldString, location);
|
||||
frontPart[location] = '\0';
|
||||
printf("\nfrontPart: %s", frontPart);
|
||||
|
||||
//copy the back part
|
||||
char backPart[length - location];
|
||||
strcpy(backPart, &oldString[location+1]);
|
||||
backPart[length - location - 1] = '\0';
|
||||
printf("\nbackPart: %s\n\n", backPart);
|
||||
|
||||
//put it all together in the new string
|
||||
newString[0] = '\0';
|
||||
strcat(newString, frontPart);
|
||||
strcat(newString, insertString);
|
||||
strcat(newString, backPart);
|
||||
|
||||
//delete old string
|
||||
free(oldString);
|
||||
|
||||
//replace old string
|
||||
oldString = newString;
|
||||
}
|
||||
|
||||
/*
|
||||
* AppendBuffer()
|
||||
* Directly appends the console buffer
|
||||
*/
|
||||
void AppendBuffer(const char *buf)
|
||||
{
|
||||
int length = strlen(buf) + 1; //strlen doesn't include the null terminating character
|
||||
char *temp = malloc(length);
|
||||
strcpy(temp, buf);
|
||||
|
||||
|
||||
for (int i = 0; i < length; ++i)
|
||||
{
|
||||
if (temp[i] == ' ' || temp[i] == '\n' || temp[i] == '=' )
|
||||
temp[i] = '_';
|
||||
}
|
||||
|
||||
#if 0
|
||||
int i = 0;
|
||||
while (temp[i] != '\0')
|
||||
{
|
||||
if (temp[i] == ' ')
|
||||
ReplaceAt(temp, "_testString_", i);
|
||||
|
||||
++i;
|
||||
}
|
||||
length = strlen(temp) + 1;
|
||||
#endif
|
||||
|
||||
//copy the old & new string into a buffer
|
||||
char *newBuf = malloc(size + length);
|
||||
if (consoleBuffer)
|
||||
{
|
||||
strcpy(newBuf, consoleBuffer);
|
||||
}
|
||||
strcpy(&newBuf[size], temp);
|
||||
|
||||
|
||||
//delete the old string and have it point to the new one
|
||||
free(consoleBuffer);
|
||||
consoleBuffer = newBuf;
|
||||
size = strlen(consoleBuffer);
|
||||
|
||||
|
||||
//delete the temp string
|
||||
free(temp);
|
||||
}
|
||||
|
||||
/*
|
||||
* AppendChunk()
|
||||
* Just append a chunk of the incoming string from start to i
|
||||
*/
|
||||
void AppendChunk(const char *buf, int start, int i)
|
||||
{
|
||||
int chunkSize = i+1 - start;
|
||||
char chunk[chunkSize];
|
||||
chunk[0] = '\0';
|
||||
strncpy(chunk, &buf[start], chunkSize-1);
|
||||
chunk[chunkSize-1] = '\0';
|
||||
AppendBuffer(chunk);
|
||||
}
|
||||
|
||||
/*
|
||||
* AppendConsoleBuffer()
|
||||
* Appends the console buffer while replacings non-URLscheme compatible text
|
||||
*/
|
||||
void AppendConsoleBuffer(const char *buf)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* Email the console buffer to id
|
||||
*
|
||||
*/
|
||||
void EmailConsole()
|
||||
{
|
||||
|
||||
return; // do not email me anymore.
|
||||
|
||||
#if 0
|
||||
if (!consoleBuffer)
|
||||
return;
|
||||
|
||||
//copy everything from consoleBuffer into a char*
|
||||
char *buffer = malloc(1024+size+1);
|
||||
|
||||
#if 0
|
||||
time_t rawtime;
|
||||
struct tm * timeinfo;
|
||||
time ( &rawtime );
|
||||
timeinfo = gmtime ( &rawtime );
|
||||
char dateBuffer[128];
|
||||
sprintf(dateBuffer, asctime(timeinfo));
|
||||
for (int i = 0; i < strlen(dateBuffer); ++i)
|
||||
{
|
||||
if (dateBuffer[i] == ' ' || dateBuffer[i] == ':')
|
||||
dateBuffer[i] = '_';
|
||||
}
|
||||
printf("formatted time: %s\n", dateBuffer);
|
||||
|
||||
sprintf( buffer, "mailto:iphonesupport@idsoftware.com?subject=DoomClassicReport%s&body=%s", dateBuffer, consoleBuffer);
|
||||
#else
|
||||
sprintf( buffer, "mailto:iphonesupport@idsoftware.com?subject=DoomClassicReport&body=%s", consoleBuffer);
|
||||
#endif
|
||||
|
||||
//call the mail app
|
||||
NSURL *url = [[NSURL alloc] initWithString:[NSString stringWithCString:buffer encoding:NSUTF8StringEncoding]];
|
||||
[[UIApplication sharedApplication] openURL:url];
|
||||
|
||||
free(buffer);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
36
common/ios/doomengine/iphone_glViewController.h
Executable file
36
common/ios/doomengine/iphone_glViewController.h
Executable file
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company.
|
||||
Copyright (C) 2009 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.
|
||||
|
||||
*/
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
|
||||
@interface iphone_glViewController : UIViewController {
|
||||
|
||||
CADisplayLink *displayLink;
|
||||
|
||||
}
|
||||
|
||||
@property (nonatomic, retain) IBOutlet CADisplayLink *displayLink;
|
||||
|
||||
- (void) StartDisplay;
|
||||
- (void) StopDisplay;
|
||||
- (bool) IsDisplaying;
|
||||
|
||||
@end
|
||||
164
common/ios/doomengine/iphone_glViewController.mm
Executable file
164
common/ios/doomengine/iphone_glViewController.mm
Executable file
@@ -0,0 +1,164 @@
|
||||
/*
|
||||
Copyright (C) 2009-2011 id Software LLC, a ZeniMax Media company.
|
||||
|
||||
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 "iphone_glViewController.h"
|
||||
#import "EAGLView.h"
|
||||
#import <QuartzCore/CADisplayLink.h>
|
||||
#include "doomiphone.h"
|
||||
|
||||
const static int DISPLAY_LINK_FRAME_INTERVAL = 2;
|
||||
|
||||
// Need one buffer frame when transitioning from IB menus to the OpenGL game view.
|
||||
// Otherwise, occasionally the IB view stays onscreen during the Doom loading frame.
|
||||
// This seems to make precaching take way to long (about a whole minute).
|
||||
// This flag will be set to true in StartDisplay, and reset to false after one display link
|
||||
// frame has fired.
|
||||
static bool inTransition = false;
|
||||
|
||||
@implementation iphone_glViewController
|
||||
|
||||
@synthesize displayLink;
|
||||
|
||||
/*
|
||||
========================
|
||||
runFrame
|
||||
========================
|
||||
*/
|
||||
- (void)runFrame {
|
||||
|
||||
// Skip the frist frame after coming from IB menus, to give the view a chance to switch to
|
||||
// OpenGL. For some reason, not doing this causes precaching to take way too long.
|
||||
if ( inTransition ) {
|
||||
inTransition = false;
|
||||
return;
|
||||
}
|
||||
|
||||
// Update the Game
|
||||
iphoneAsyncTic();
|
||||
|
||||
// Render the Game.
|
||||
iphoneFrame();
|
||||
}
|
||||
|
||||
/*
|
||||
========================
|
||||
initWithNibName
|
||||
========================
|
||||
*/
|
||||
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
|
||||
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
|
||||
if (self) {
|
||||
|
||||
// Create the OpenGL View.
|
||||
EAGLView *glView = [[EAGLView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
|
||||
self.view = glView;
|
||||
[glView release];
|
||||
|
||||
|
||||
// Setup the Display Link
|
||||
CADisplayLink *aDisplayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(runFrame)];
|
||||
[ aDisplayLink setFrameInterval: DISPLAY_LINK_FRAME_INTERVAL];
|
||||
[ aDisplayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
|
||||
[ self setDisplayLink: aDisplayLink ];
|
||||
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
/*
|
||||
========================
|
||||
shouldAutorotateToInterfaceOrientation
|
||||
========================
|
||||
*/
|
||||
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
|
||||
// Return YES for supported orientations.
|
||||
return UIInterfaceOrientationIsLandscape(interfaceOrientation);
|
||||
}
|
||||
|
||||
/*
|
||||
========================
|
||||
viewDidLoad
|
||||
========================
|
||||
*/
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
|
||||
// Stop the Display link.
|
||||
[self.displayLink invalidate];
|
||||
self.displayLink = nil;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
========================
|
||||
didReceiveMemoryWarning
|
||||
========================
|
||||
*/
|
||||
- (void)didReceiveMemoryWarning {
|
||||
// Releases the view if it doesn't have a superview.
|
||||
[super didReceiveMemoryWarning];
|
||||
}
|
||||
|
||||
/*
|
||||
========================
|
||||
viewDidUnload
|
||||
========================
|
||||
*/
|
||||
- (void)viewDidUnload {
|
||||
[super viewDidUnload];
|
||||
}
|
||||
|
||||
/*
|
||||
========================
|
||||
dealloc
|
||||
========================
|
||||
*/
|
||||
- (void)dealloc {
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
/*
|
||||
========================
|
||||
StartDisplay
|
||||
========================
|
||||
*/
|
||||
- (void) StartDisplay {
|
||||
inTransition = true;
|
||||
displayLink.paused = NO;
|
||||
}
|
||||
|
||||
/*
|
||||
========================
|
||||
StopDisplay
|
||||
========================
|
||||
*/
|
||||
- (void) StopDisplay {
|
||||
displayLink.paused = YES;
|
||||
}
|
||||
|
||||
/*
|
||||
========================
|
||||
IsDisplaying
|
||||
========================
|
||||
*/
|
||||
- (bool) IsDisplaying {
|
||||
return displayLink.paused;
|
||||
}
|
||||
|
||||
@end
|
||||
1792
common/ios/doomengine/iphone_loop.c
Executable file
1792
common/ios/doomengine/iphone_loop.c
Executable file
File diff suppressed because it is too large
Load Diff
519
common/ios/doomengine/iphone_main.c
Executable file
519
common/ios/doomengine/iphone_main.c
Executable file
@@ -0,0 +1,519 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2004-2005 Michael Liebscher <johnnycanuck@users.sourceforge.net>
|
||||
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.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
|
||||
doom
|
||||
----
|
||||
modifications to config.h
|
||||
don't add the d_ipxgate.c file
|
||||
don't add d_server.c file
|
||||
don't add mmus2mid.[ch] files
|
||||
don't add w_memcache.c, use w_mmap.c instead
|
||||
added new SDL_opengl.h, changed code files from <SDL_opengl.h> to "SDL_opengl.h"
|
||||
commented out #include <SDL.h>
|
||||
|
||||
Commented out the static on D_DoomMainSetup();
|
||||
Add define HAVE_CONFIG_H to the target settings
|
||||
Add define _DEBUG
|
||||
|
||||
#if around uses of GL_TEXTURE_RESIDENT in gl_texture.c
|
||||
// JDC: not in GLES, not needed since it is the default condition glDisable(GL_POLYGON_SMOOTH);
|
||||
|
||||
// JDC #define USE_VERTEX_ARRAYS in gl_main.c
|
||||
|
||||
add the iphoneRotateForLandscape calls
|
||||
|
||||
static JDC removed short consistancy[MAXPLAYERS][BACKUPTICS];
|
||||
|
||||
// JDC glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
// JDC glDisableClientState(GL_VERTEX_ARRAY);
|
||||
#ifdef IPHONE // JDC
|
||||
#define MAX_SCREENWIDTH 480
|
||||
#define MAX_SCREENHEIGHT 320
|
||||
#else
|
||||
|
||||
|
||||
code notes
|
||||
----------
|
||||
all the fixed point mess
|
||||
goofy polar clipping
|
||||
path traverse should have used a BSP tree
|
||||
|
||||
rename vldoor_e close and open enums to not conflict with unistd
|
||||
|
||||
opengl_error_break
|
||||
|
||||
|
||||
WiFi internet play
|
||||
---------
|
||||
voip instead of key chat
|
||||
|
||||
extra asset work
|
||||
----------------------
|
||||
perfect weapon scales
|
||||
demo of each level?
|
||||
additive art separation -- attacks, buttons, etc
|
||||
|
||||
tuned option
|
||||
------------
|
||||
last kill / last secret / last item messages
|
||||
more achievements in general
|
||||
better item pickup sounds
|
||||
scale blood spray with distance
|
||||
easier item pickup
|
||||
crosshair
|
||||
better movement clipping to walls
|
||||
better key pickup sound
|
||||
textured automap
|
||||
better low health warning
|
||||
better feedback on where bullets hit
|
||||
better bob cycle when going down stairs
|
||||
map item should also show all monsters and items to make it cool
|
||||
barrels explode easier
|
||||
wave FOV when berzerk
|
||||
pistol shots are useless in deathmatch
|
||||
show opponent / enemy health when attacking them?
|
||||
|
||||
|
||||
cpu optimizations
|
||||
-------------
|
||||
convert to 16 bit vertex data
|
||||
void gld_BindPatch(GLTexture *gltexture, int cm) is expensive
|
||||
fixedMul / fixedDiv in asm (negligable performance gain)
|
||||
atlas all of the non-character items (and bodies?)
|
||||
remove the pitch changes from sound?
|
||||
|
||||
gpu optimizations
|
||||
------------------
|
||||
use fog instead of full screen blend for damage/pickup flash (3 msec on IP3G)
|
||||
pvrtc walls and floors
|
||||
|
||||
art needed
|
||||
----------
|
||||
new map / menu button
|
||||
awards on medals
|
||||
icon
|
||||
thumbsticks
|
||||
settings gears
|
||||
|
||||
|
||||
must do
|
||||
-------
|
||||
pause music in menu
|
||||
timelimit carry over to new levels
|
||||
server going to demo causes client to crash
|
||||
|
||||
fixed 10/13/09
|
||||
--------------
|
||||
recover from sound interruption
|
||||
caps for slider bar text
|
||||
reset defaults doesn't reset reverse-landscape
|
||||
pause music when going to the menu
|
||||
reset timelimit each level on deathmatch
|
||||
disable demos, new game, and web site during multiplayer
|
||||
|
||||
fixed
|
||||
-----
|
||||
automap / menu button actions with multi-thread
|
||||
capitalized "game saved."
|
||||
Added punctuation to "Ned a blue keycard", etc
|
||||
added "defaults" button in options
|
||||
|
||||
todo
|
||||
----
|
||||
don't accept fire from an owned touch?
|
||||
text scaling in buttons isn't perfect
|
||||
better view angle transport
|
||||
audio bugs
|
||||
rotor control shouldn't be dimmed
|
||||
volume button hack?
|
||||
change background color for networking
|
||||
tapping weapon change to cycle
|
||||
is openal thread safe? we issue touch clicks from asynctic
|
||||
disable multiplayer button if no ethernet addresses found
|
||||
touch latching issues
|
||||
add one tic latency to server?
|
||||
select new game while in netgame
|
||||
multiplayer arrow colors
|
||||
remove players with stale joins
|
||||
rocket explosion offset
|
||||
texture preload status bar stuff and blood / impacts
|
||||
stereo panning for headphones
|
||||
directly build 16 bit textures instead of translating from 32 bit
|
||||
texture wrap seam after end of e3m8
|
||||
sliders should be touch-latch controls
|
||||
respawn flash sounds sometimes not playing?
|
||||
don't allow starting on secret levels
|
||||
loaded savegame spot on different level didn't get view height on first frame
|
||||
use graphic?
|
||||
don't ever close doors with auto-use
|
||||
separators in map select
|
||||
rotor speed adjust
|
||||
check all powerup effects
|
||||
remove uses of prboom.wad?
|
||||
check patch outlining code
|
||||
flash all controls on initial level load
|
||||
touch sounds when cancelling demo playback
|
||||
play sound on respawn
|
||||
catch memory warning, purge textures
|
||||
use wad sound data
|
||||
stop sound cleanly
|
||||
entire gun doesn't get fullbright with muzzle flash
|
||||
require four touches in line for console
|
||||
restartable pwad interface
|
||||
somewhat normal based lighting on walls
|
||||
help menu
|
||||
visual tilt indicator
|
||||
tilt draw the turnstick when active
|
||||
console
|
||||
|
||||
*/
|
||||
|
||||
#include "doomiphone.h"
|
||||
|
||||
cvar_t *freeLevelOfWeek;
|
||||
cvar_t *skill;
|
||||
cvar_t *episode;
|
||||
cvar_t *controlScheme;
|
||||
cvar_t *stickTurn;
|
||||
cvar_t *stickMove;
|
||||
cvar_t *stickDeadBand;
|
||||
cvar_t *rotorTurn;
|
||||
cvar_t *tiltTurn;
|
||||
cvar_t *tiltMove;
|
||||
cvar_t *tiltDeadBand;
|
||||
cvar_t *tiltAverages;
|
||||
cvar_t *miniNet;
|
||||
cvar_t *music;
|
||||
cvar_t *showTilt;
|
||||
cvar_t *showTime;
|
||||
cvar_t *showNet;
|
||||
cvar_t *showSound;
|
||||
cvar_t *cropSprites;
|
||||
cvar_t *mapScale;
|
||||
cvar_t *drawControls;
|
||||
cvar_t *autoUse;
|
||||
cvar_t *statusBar;
|
||||
cvar_t *touchClick;
|
||||
cvar_t *messages;
|
||||
cvar_t *timeLimit;
|
||||
cvar_t *fragLimit;
|
||||
cvar_t *mpDeathmatch;
|
||||
cvar_t *mpSkill;
|
||||
cvar_t *mpDataset;
|
||||
cvar_t *mpEpisode;
|
||||
cvar_t *mpMap;
|
||||
cvar_t *mpExpansion;
|
||||
cvar_t *noBlend;
|
||||
cvar_t *glfinish;
|
||||
cvar_t *mapSelectY;
|
||||
cvar_t *throttle;
|
||||
cvar_t *centerSticks;
|
||||
cvar_t *rampTurn;
|
||||
cvar_t *netBuffer;
|
||||
|
||||
#define VERSION_BCONFIG ( 0x89490000 + sizeof( huds ) + sizeof( playState ) )
|
||||
|
||||
void Sys_Error( const char *format, ... )
|
||||
{
|
||||
va_list argptr;
|
||||
char string[ 1024 ];
|
||||
|
||||
va_start( argptr, format );
|
||||
(void)vsnprintf( string, sizeof( string ), format, argptr );
|
||||
va_end( argptr );
|
||||
|
||||
fprintf( stderr, "Error: %s\n", string );
|
||||
|
||||
_exit( 1 );
|
||||
|
||||
}
|
||||
|
||||
#define plyr (players+consoleplayer) /* the console player */
|
||||
|
||||
void Give_f() {
|
||||
|
||||
plyr->armorpoints = idfa_armor; // Ty 03/09/98 - deh
|
||||
plyr->armortype = idfa_armor_class; // Ty 03/09/98 - deh
|
||||
|
||||
// You can't own weapons that aren't in the game // phares 02/27/98
|
||||
for (int i=0;i<NUMWEAPONS;i++)
|
||||
if (!(((i == wp_plasma || i == wp_bfg) && gamemode == shareware) ||
|
||||
(i == wp_supershotgun && gamemode != commercial)))
|
||||
plyr->weaponowned[i] = true;
|
||||
|
||||
for (int i=0;i<NUMAMMO;i++)
|
||||
if (i!=am_cell || gamemode!=shareware)
|
||||
plyr->ammo[i] = plyr->maxammo[i];
|
||||
|
||||
plyr->message = s_STSTR_FAADDED;
|
||||
|
||||
for (int i=0;i<NUMCARDS;i++)
|
||||
if (!plyr->cards[i]) // only print message if at least one key added
|
||||
{ // however, caller may overwrite message anyway
|
||||
plyr->cards[i] = true;
|
||||
}
|
||||
}
|
||||
|
||||
void God_f() {
|
||||
plyr->cheats ^= CF_GODMODE;
|
||||
if (plyr->cheats & CF_GODMODE)
|
||||
{
|
||||
if (plyr->mo)
|
||||
plyr->mo->health = god_health; // Ty 03/09/98 - deh
|
||||
|
||||
plyr->health = god_health;
|
||||
plyr->message = s_STSTR_DQDON; // Ty 03/27/98 - externalized
|
||||
}
|
||||
else
|
||||
plyr->message = s_STSTR_DQDOFF; // Ty 03/27/98 - externalized
|
||||
}
|
||||
|
||||
void ResetMaps_f() {
|
||||
playState.numMapStats = 0;
|
||||
memset( playState.mapStats, 0, sizeof( playState.mapStats ) );
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
iphoneStartup
|
||||
|
||||
==================
|
||||
*/
|
||||
struct addrinfo *addrinfoHead;
|
||||
|
||||
void D_DoomMainSetup( const char * iwad, const char * pwad );
|
||||
void iphoneStartup() {
|
||||
int start = SysIphoneMilliseconds();
|
||||
|
||||
// microseconds will be plenty random for playerID and localGameID
|
||||
playerID = localGameID = SysIphoneMicroseconds();
|
||||
|
||||
InitImmediateModeGL();
|
||||
|
||||
// init OpenAL before pak file, so the pak file can
|
||||
// make all the al static buffers
|
||||
Sound_Init();
|
||||
|
||||
char buffer[1028];
|
||||
sprintf( buffer, "%s/base.iPack", SysIphoneGetAppDir() );
|
||||
// get our new-style pak file
|
||||
PK_Init( buffer );
|
||||
|
||||
// register console commands
|
||||
Cmd_AddCommand( "listcvars", Cvar_List_f );
|
||||
Cmd_AddCommand( "resetcvars", Cvar_Reset_f );
|
||||
Cmd_AddCommand( "resetmaps", ResetMaps_f );
|
||||
Cmd_AddCommand( "listcmds", Cmd_ListCommands_f );
|
||||
Cmd_AddCommand( "give", Give_f );
|
||||
Cmd_AddCommand( "god", God_f );
|
||||
Cmd_AddCommand( "mail", EmailConsole ); //gsh, mails the console to id
|
||||
|
||||
// register console variables
|
||||
Cvar_Get( "version", va( "%3.1f %s %s", DOOM_IPHONE_VERSION, __DATE__, __TIME__ ), 0 );
|
||||
|
||||
freeLevelOfWeek = Cvar_Get("freeLevelOfWeek", "0", 0 );
|
||||
skill = Cvar_Get( "skill", "1", CVAR_ARCHIVE );
|
||||
episode = Cvar_Get( "episode", "0", CVAR_ARCHIVE );
|
||||
|
||||
controlScheme = Cvar_Get( "controlScheme", "0", CVAR_ARCHIVE );
|
||||
stickTurn = Cvar_Get( "stickTurn", "128", CVAR_ARCHIVE );
|
||||
stickMove = Cvar_Get( "stickMove", "128", CVAR_ARCHIVE );
|
||||
stickDeadBand = Cvar_Get( "stickDeadBand", "0.05", CVAR_ARCHIVE );
|
||||
rotorTurn = Cvar_Get( "rotorTurn", "50000", CVAR_ARCHIVE );
|
||||
tiltTurn = Cvar_Get( "tiltTurn", "0", CVAR_ARCHIVE );
|
||||
tiltMove = Cvar_Get( "tiltMove", "0", CVAR_ARCHIVE );
|
||||
tiltDeadBand = Cvar_Get( "tiltDeadBand", "0.08", CVAR_ARCHIVE );
|
||||
tiltAverages = Cvar_Get( "tiltAverages", "3", CVAR_ARCHIVE );
|
||||
centerSticks = Cvar_Get( "centerSticks", "1", CVAR_ARCHIVE );
|
||||
rampTurn = Cvar_Get( "rampTurn", "1", CVAR_ARCHIVE );
|
||||
|
||||
music = Cvar_Get( "music", "1", CVAR_ARCHIVE );
|
||||
cropSprites = Cvar_Get( "cropSprites", "1", 0 );
|
||||
mapScale = Cvar_Get( "mapScale", "10", CVAR_ARCHIVE );
|
||||
drawControls = Cvar_Get( "drawControls", "1", CVAR_ARCHIVE );
|
||||
autoUse = Cvar_Get( "autoUse", "1", CVAR_ARCHIVE );
|
||||
statusBar = Cvar_Get( "statusBar", "1", CVAR_ARCHIVE );
|
||||
touchClick = Cvar_Get( "touchClick", "1", CVAR_ARCHIVE );
|
||||
messages = Cvar_Get( "messages", "1", CVAR_ARCHIVE );
|
||||
mapSelectY = Cvar_Get( "mapSelectY", "0", CVAR_ARCHIVE );
|
||||
miniNet = Cvar_Get( "miniNet", "1", CVAR_ARCHIVE );
|
||||
|
||||
// multiplayer setup
|
||||
timeLimit = Cvar_Get( "timeLimit", "0", CVAR_ARCHIVE );
|
||||
fragLimit = Cvar_Get( "fragLimit", "5", CVAR_ARCHIVE );
|
||||
mpDeathmatch = Cvar_Get( "mpDeathmatch", "0", CVAR_ARCHIVE );
|
||||
mpDataset = Cvar_Get( "mpDataset", "0", CVAR_ARCHIVE );
|
||||
mpEpisode = Cvar_Get( "mpEpisode", "1", CVAR_ARCHIVE );
|
||||
mpSkill = Cvar_Get( "mpSkill", "1", CVAR_ARCHIVE );
|
||||
mpMap = Cvar_Get( "mpMap", "1", CVAR_ARCHIVE );
|
||||
mpExpansion = Cvar_Get( "mpExpansion", "0", CVAR_ARCHIVE | CVAR_NOSET );
|
||||
|
||||
// debug tools
|
||||
showTilt = Cvar_Get( "showTilt", "-1", 0 );
|
||||
showTime = Cvar_Get( "showTime", "0", 0 );
|
||||
showNet = Cvar_Get( "showNet", "0", 0 );
|
||||
showSound = Cvar_Get( "showSound", "0", 0 );
|
||||
noBlend = Cvar_Get( "noBlend", "0", 0 ); // disable the damae blends for screenshots
|
||||
glfinish = Cvar_Get( "glfinish", "0", 0 );
|
||||
throttle = Cvar_Get( "throttle", "0", 0 ); // network packet throttle enable
|
||||
|
||||
// Was origiinally 4. Trying different values to help internet play.
|
||||
netBuffer = Cvar_Get( "netBuffer", "12", 0 ); // max tics to buffer ahead
|
||||
|
||||
// load the archived cvars
|
||||
Cmd_ExecuteFile( va( "%s/config.cfg", SysIphoneGetDocDir() ) );
|
||||
|
||||
// start the intro music if it wasn't disabled with the music cvar
|
||||
iphonePlayMusic( "intro" );
|
||||
// iphonePlayMusic( "e1m1" );
|
||||
|
||||
// these should get overwritten by the config loading
|
||||
memset( &playState, 0, sizeof( playState ) );
|
||||
playState.map.skill = 1;
|
||||
playState.map.episode = 1;
|
||||
playState.map.map = 1;
|
||||
HudSetForScheme( 0 );
|
||||
|
||||
// load the binary config file
|
||||
FILE *f = fopen( va( "%s/binaryConfig.bin", SysIphoneGetDocDir() ), "rb" );
|
||||
if ( f ) {
|
||||
int version;
|
||||
|
||||
version = 0;
|
||||
fread( &version, 1, sizeof( version ), f );
|
||||
if ( version != VERSION_BCONFIG ) {
|
||||
Com_Printf( "Binary config file bad version.\n" );
|
||||
} else {
|
||||
fread( &playState, 1, sizeof( playState ), f );
|
||||
fread( &huds, 1, sizeof( huds ), f );
|
||||
|
||||
version = 0;
|
||||
fread( &version, 1, sizeof( version ), f );
|
||||
if ( version != VERSION_BCONFIG ) {
|
||||
Com_Error( "Binary config file bad trailing version.\n" );
|
||||
}
|
||||
}
|
||||
fclose( f );
|
||||
}
|
||||
|
||||
|
||||
Com_Printf( "startup time: %i msec\n", SysIphoneMilliseconds() - start );
|
||||
|
||||
start = SysIphoneMilliseconds();
|
||||
|
||||
// the texnums might have been different in the savegame
|
||||
HudSetTexnums();
|
||||
|
||||
arialFontTexture = PK_FindTexture( "iphone/arialImageLAL.tga" );
|
||||
|
||||
Com_Printf( "preloadBeforePlay(): %i msec\n", SysIphoneMilliseconds() - start );
|
||||
|
||||
// prBoom seems to draw the static pic screens without setting up 2D, causing
|
||||
// a bad first frame
|
||||
iphoneSet2D();
|
||||
|
||||
menuState = IPM_MAIN;
|
||||
lastState = IPM_MAIN;
|
||||
|
||||
#if 0
|
||||
// jump right to the save spot for debugging
|
||||
ResumeGame();
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
iphoneDoomSetup
|
||||
|
||||
Run the Doom game setup functions. This was made seperate from iphoneStartup so that the user
|
||||
could select a mission pack first.
|
||||
==================
|
||||
*/
|
||||
void iphoneDoomStartup( const char * iwad, const char * pwad ) {
|
||||
Com_Printf( "---------- D_DoomMain ----------\n" );
|
||||
D_DoomMainSetup( iwad, pwad );
|
||||
|
||||
// put savegames here
|
||||
strcpy( basesavegame, SysIphoneGetDocDir() );
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
iphoneShutdown
|
||||
|
||||
Write out configs and save the game at this position
|
||||
==================
|
||||
*/
|
||||
void iphoneShutdown() {
|
||||
FILE *fp;
|
||||
char path[1024];
|
||||
cvar_t *var;
|
||||
char buffer[1024];
|
||||
|
||||
if( lastState == IPM_GAME && gamestate != GS_INTERMISSION && !demoplayback ) {
|
||||
G_DoSaveGame( false );
|
||||
}
|
||||
|
||||
// write the ascii config file
|
||||
snprintf( path, sizeof( path ), "%s/config.cfg", SysIphoneGetDocDir() );
|
||||
fp = fopen( path, "w" );
|
||||
if( ! fp ) {
|
||||
Com_Printf( "Could not write config.cfg.\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
// write out commands to set the archived cvars
|
||||
for( var = cvar_vars ; var ; var = var->next ) {
|
||||
if( var->flags & CVAR_ARCHIVE ) {
|
||||
snprintf( buffer, sizeof( buffer ), "%s %s\n", var->name, var->string );
|
||||
fprintf( fp, "%s", buffer );
|
||||
Com_Printf( "%s", buffer );
|
||||
}
|
||||
}
|
||||
|
||||
fclose( fp );
|
||||
|
||||
|
||||
// write the binary config file
|
||||
FILE *f = fopen( va( "%s/binaryConfig.bin", SysIphoneGetDocDir() ), "wb" );
|
||||
if ( !f ) {
|
||||
Com_Printf( "Could not write binaryConfig.cfg.\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
int version = VERSION_BCONFIG;
|
||||
|
||||
fwrite( &version, 1, sizeof( version ), f );
|
||||
|
||||
fwrite( &playState, 1, sizeof( playState ), f );
|
||||
fwrite( &huds, 1, sizeof( huds ), f );
|
||||
|
||||
fwrite( &version, 1, sizeof( version ), f );
|
||||
fclose( f );
|
||||
|
||||
}
|
||||
|
||||
|
||||
236
common/ios/doomengine/iphone_mapSelect.c
Executable file
236
common/ios/doomengine/iphone_mapSelect.c
Executable file
@@ -0,0 +1,236 @@
|
||||
/*
|
||||
* iphone_mapSelect.c
|
||||
* doom
|
||||
*
|
||||
* Created by John Carmack on 4/19/09.
|
||||
* Copyright 2009 id Software. All rights reserved.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 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 "doomiphone.h"
|
||||
|
||||
typedef struct {
|
||||
int dataset;
|
||||
int episode;
|
||||
int map;
|
||||
const char *name;
|
||||
} mapData_t;
|
||||
|
||||
mapData_t mapData[] = {
|
||||
{ 0, 1, 1, "E1M1: Hangar" },
|
||||
{ 0, 1, 2, "E1M2: Nuclear Plant" },
|
||||
{ 0, 1, 3, "E1M3: Toxin Refinery" },
|
||||
{ 0, 1, 4, "E1M4: Command Control" },
|
||||
{ 0, 1, 5, "E1M5: Phobos Lab" },
|
||||
{ 0, 1, 6, "E1M6: Central Processing" },
|
||||
{ 0, 1, 7, "E1M7: Computer Station" },
|
||||
{ 0, 1, 8, "E1M8: Phobos Anomaly" },
|
||||
{ 0, 1, 9, "E1M9: Military Base" },
|
||||
|
||||
{ 0, 2, 1, "E2M1: Deimos Anomaly" },
|
||||
{ 0, 2, 2, "E2M2: Containment Area" },
|
||||
{ 0, 2, 3, "E2M3: Refinery" },
|
||||
{ 0, 2, 4, "E2M4: Deimos Lab" },
|
||||
{ 0, 2, 5, "E2M5: Command Center" },
|
||||
{ 0, 2, 6, "E2M6: Halls of the Damned" },
|
||||
{ 0, 2, 7, "E2M7: Spawning Vats" },
|
||||
{ 0, 2, 8, "E2M8: Tower of Babel" },
|
||||
{ 0, 2, 9, "E2M9: Fortress of Mystery" },
|
||||
|
||||
{ 0, 3, 1, "E3M1: Hell Keep" },
|
||||
{ 0, 3, 2, "E3M2: Slough of Despair" },
|
||||
{ 0, 3, 3, "E3M3: Pandemonium" },
|
||||
{ 0, 3, 4, "E3M4: House of Pain" },
|
||||
{ 0, 3, 5, "E3M5: Unholy Cathedral" },
|
||||
{ 0, 3, 6, "E3M6: Mt. Erebus" },
|
||||
{ 0, 3, 7, "E3M7: Limbo" },
|
||||
{ 0, 3, 8, "E3M8: Dis" },
|
||||
{ 0, 3, 9, "E3M9: Warrens" },
|
||||
|
||||
{ 0, 4, 1, "E4M1: Hell Beneath" },
|
||||
{ 0, 4, 2, "E4M2: Perfect Hatred" },
|
||||
{ 0, 4, 3, "E4M3: Sever The Wicked" },
|
||||
{ 0, 4, 4, "E4M4: Unruly Evil" },
|
||||
{ 0, 4, 5, "E4M5: They Will Repent" },
|
||||
{ 0, 4, 6, "E4M6: Against Thee Wickedly" },
|
||||
{ 0, 4, 7, "E4M7: And Hell Followed" },
|
||||
{ 0, 4, 8, "E4M8: Unto The Cruel" },
|
||||
{ 0, 4, 9, "E4M9: Fear" },
|
||||
|
||||
#if 0
|
||||
|
||||
{ 0, 0, 0, "level 1: entryway" },
|
||||
{ 0, 0, 0, "level 2: underhalls" },
|
||||
{ 0, 0, 0, "level 3: the gantlet" },
|
||||
{ 0, 0, 0, "level 4: the focus" },
|
||||
{ 0, 0, 0, "level 5: the waste tunnels" },
|
||||
{ 0, 0, 0, "level 6: the crusher" },
|
||||
{ 0, 0, 0, "level 7: dead simple" },
|
||||
{ 0, 0, 0, "level 8: tricks and traps" },
|
||||
{ 0, 0, 0, "level 9: the pit" },
|
||||
{ 0, 0, 0, "level 10: refueling base" },
|
||||
{ 0, 0, 0, "level 11: 'o' of destruction!" },
|
||||
{ 0, 0, 0, "level 12: the factory" },
|
||||
{ 0, 0, 0, "level 13: downtown" },
|
||||
{ 0, 0, 0, "level 14: the inmost dens" },
|
||||
{ 0, 0, 0, "level 15: industrial zone" },
|
||||
{ 0, 0, 0, "level 16: suburbs" },
|
||||
{ 0, 0, 0, "level 17: tenements" },
|
||||
{ 0, 0, 0, "level 18: the courtyard" },
|
||||
{ 0, 0, 0, "level 19: the citadel" },
|
||||
{ 0, 0, 0, "level 20: gotcha!" },
|
||||
{ 0, 0, 0, "level 21: nirvana" },
|
||||
{ 0, 0, 0, "level 22: the catacombs" },
|
||||
{ 0, 0, 0, "level 23: barrels o' fun" },
|
||||
{ 0, 0, 0, "level 24: the chasm" },
|
||||
{ 0, 0, 0, "level 25: bloodfalls" },
|
||||
{ 0, 0, 0, "level 26: the abandoned mines" },
|
||||
{ 0, 0, 0, "level 27: monster condo" },
|
||||
{ 0, 0, 0, "level 28: the spirit world" },
|
||||
{ 0, 0, 0, "level 29: the living end" },
|
||||
{ 0, 0, 0, "level 30: icon of sin" },
|
||||
{ 0, 0, 0, "level 31: wolfenstein" },
|
||||
{ 0, 0, 0, "level 32: grosse" },
|
||||
|
||||
{ 0, 0, 0, "level 1: congo" },
|
||||
{ 0, 0, 0, "level 2: well of souls" },
|
||||
{ 0, 0, 0, "level 3: aztec" },
|
||||
{ 0, 0, 0, "level 4: caged" },
|
||||
{ 0, 0, 0, "level 5: ghost town" },
|
||||
{ 0, 0, 0, "level 6: baron's lair" },
|
||||
{ 0, 0, 0, "level 7: caughtyard" },
|
||||
{ 0, 0, 0, "level 8: realm" },
|
||||
{ 0, 0, 0, "level 9: abattoire" },
|
||||
{ 0, 0, 0, "level 10: onslaught" },
|
||||
{ 0, 0, 0, "level 11: hunted" },
|
||||
{ 0, 0, 0, "level 12: speed" },
|
||||
{ 0, 0, 0, "level 13: the crypt" },
|
||||
{ 0, 0, 0, "level 14: genesis" },
|
||||
{ 0, 0, 0, "level 15: the twilight" },
|
||||
{ 0, 0, 0, "level 16: the omen" },
|
||||
{ 0, 0, 0, "level 17: compound" },
|
||||
{ 0, 0, 0, "level 18: neurosphere" },
|
||||
{ 0, 0, 0, "level 19: nme" },
|
||||
{ 0, 0, 0, "level 20: the death domain" },
|
||||
{ 0, 0, 0, "level 21: slayer" },
|
||||
{ 0, 0, 0, "level 22: impossible mission" },
|
||||
{ 0, 0, 0, "level 23: tombstone" },
|
||||
{ 0, 0, 0, "level 24: the final frontier" },
|
||||
{ 0, 0, 0, "level 25: the temple of darkness" },
|
||||
{ 0, 0, 0, "level 26: bunker" },
|
||||
{ 0, 0, 0, "level 27: anti-christ" },
|
||||
{ 0, 0, 0, "level 28: the sewers" },
|
||||
{ 0, 0, 0, "level 29: odyssey of noises" },
|
||||
{ 0, 0, 0, "level 30: the gateway of hell" },
|
||||
{ 0, 0, 0, "level 31: cyberden" },
|
||||
{ 0, 0, 0, "level 32: go 2 it" },
|
||||
|
||||
{ 0, 0, 0, "level 1: system control" },
|
||||
{ 0, 0, 0, "level 2: human bbq" },
|
||||
{ 0, 0, 0, "level 3: power control" },
|
||||
{ 0, 0, 0, "level 4: wormhole" },
|
||||
{ 0, 0, 0, "level 5: hanger" },
|
||||
{ 0, 0, 0, "level 6: open season" },
|
||||
{ 0, 0, 0, "level 7: prison" },
|
||||
{ 0, 0, 0, "level 8: metal" },
|
||||
{ 0, 0, 0, "level 9: stronghold" },
|
||||
{ 0, 0, 0, "level 10: redemption" },
|
||||
{ 0, 0, 0, "level 11: storage facility" },
|
||||
{ 0, 0, 0, "level 12: crater" },
|
||||
{ 0, 0, 0, "level 13: nukage processing" },
|
||||
{ 0, 0, 0, "level 14: steel works" },
|
||||
{ 0, 0, 0, "level 15: dead zone" },
|
||||
{ 0, 0, 0, "level 16: deepest reaches" },
|
||||
{ 0, 0, 0, "level 17: processing area" },
|
||||
{ 0, 0, 0, "level 18: mill" },
|
||||
{ 0, 0, 0, "level 19: shipping/respawning" },
|
||||
{ 0, 0, 0, "level 20: central processing" },
|
||||
{ 0, 0, 0, "level 21: administration center" },
|
||||
{ 0, 0, 0, "level 22: habitat" },
|
||||
{ 0, 0, 0, "level 23: lunar mining project" },
|
||||
{ 0, 0, 0, "level 24: quarry" },
|
||||
{ 0, 0, 0, "level 25: baron's den" },
|
||||
{ 0, 0, 0, "level 26: ballistyx" },
|
||||
{ 0, 0, 0, "level 27: mount pain" },
|
||||
{ 0, 0, 0, "level 28: heck" },
|
||||
{ 0, 0, 0, "level 29: river styx" },
|
||||
{ 0, 0, 0, "level 30: last call" },
|
||||
{ 0, 0, 0, "level 31: pharaoh" },
|
||||
{ 0, 0, 0, "level 32: caribbean" },
|
||||
|
||||
#endif
|
||||
|
||||
{ 0, 0, 0, NULL }
|
||||
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
===================
|
||||
FindMapStats
|
||||
|
||||
Finds or creats a mapStats_t structure for the given level.
|
||||
This can return NULL if the entire array is filled up, which may
|
||||
happen when people have an absurd number of downloaded levels.
|
||||
===================
|
||||
*/
|
||||
mapStats_t *FindMapStats( int dataset, int theEpisode, int map, boolean create ) {
|
||||
for ( int i = 0 ; i < playState.numMapStats ; i++ ) {
|
||||
mapStats_t *ms = &playState.mapStats[i];
|
||||
if ( ms->dataset == dataset && ms->episode == theEpisode && ms->map == map ) {
|
||||
return ms;
|
||||
}
|
||||
}
|
||||
if ( playState.numMapStats == MAX_MAPS ) {
|
||||
// all full.
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ( !create ) {
|
||||
return NULL;
|
||||
}
|
||||
mapStats_t *cms = &playState.mapStats[playState.numMapStats];
|
||||
cms->dataset = dataset;
|
||||
cms->episode = theEpisode;
|
||||
cms->map = map;
|
||||
playState.numMapStats++;
|
||||
|
||||
return cms;
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
FindMapName
|
||||
|
||||
episodes and maps are one base
|
||||
==================
|
||||
*/
|
||||
const char *FindMapName( int dataset, int theEpisode, int map ) {
|
||||
for ( mapData_t *md = mapData ; md->name ; md++ ) {
|
||||
if ( md->dataset == dataset && md->episode == theEpisode && md->map == map ) {
|
||||
return md->name;
|
||||
}
|
||||
}
|
||||
return "UNKNOWN MAP NAME";
|
||||
}
|
||||
|
||||
631
common/ios/doomengine/iphone_net.c
Executable file
631
common/ios/doomengine/iphone_net.c
Executable file
@@ -0,0 +1,631 @@
|
||||
/*
|
||||
* iphone_net.c
|
||||
* doom
|
||||
*
|
||||
* Created by John Carmack on 7/8/09.
|
||||
* Copyright 2009 id Software. All rights reserved.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 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.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
|
||||
Deal with all the DNS / bonjour service discovery and resolution
|
||||
|
||||
*/
|
||||
|
||||
#include "doomiphone.h"
|
||||
|
||||
#include <dns_sd.h>
|
||||
#include <netdb.h> // for gethostbyname
|
||||
#include <net/if.h> // for if_nameindex()
|
||||
|
||||
DNSServiceRef browseRef;
|
||||
DNSServiceRef clientServiceRef;
|
||||
DNSServiceRef serviceRef;
|
||||
boolean serviceRefValid;
|
||||
|
||||
typedef struct {
|
||||
int interfaceIndex;
|
||||
char browseName[1024];
|
||||
char browseRegtype[1024];
|
||||
char browseDomain[1024];
|
||||
} service_t;
|
||||
|
||||
boolean localServer;
|
||||
|
||||
// we can find services on both WiFi and Bluetooth interfaces
|
||||
#define MAX_SERVICE_INTEFACES 4
|
||||
service_t serviceInterfaces[MAX_SERVICE_INTEFACES];
|
||||
|
||||
boolean gotServerAddress;
|
||||
struct sockaddr resolvedServerAddress;
|
||||
|
||||
static const char *serviceName = "_DoomServer._udp.";
|
||||
|
||||
int InterfaceIndexForName( const char *ifname );
|
||||
|
||||
void DNSServiceRegisterReplyCallback (
|
||||
DNSServiceRef sdRef,
|
||||
DNSServiceFlags flags,
|
||||
DNSServiceErrorType errorCode,
|
||||
const char *name,
|
||||
const char *regtype,
|
||||
const char *domain,
|
||||
void *context ) {
|
||||
(void)sdRef;
|
||||
(void)flags;
|
||||
(void)name;
|
||||
(void)regtype;
|
||||
(void)domain;
|
||||
(void)context;
|
||||
|
||||
if ( errorCode == kDNSServiceErr_NoError ) {
|
||||
localServer = true;
|
||||
} else {
|
||||
localServer = false;
|
||||
}
|
||||
}
|
||||
|
||||
boolean RegisterGameService() {
|
||||
DNSServiceErrorType err = DNSServiceRegister(
|
||||
&serviceRef,
|
||||
kDNSServiceFlagsNoAutoRename, // we want a conflict error
|
||||
InterfaceIndexForName( "en0" ), // pass 0 for all interfaces
|
||||
"iPhone Doom Classic",
|
||||
serviceName,
|
||||
NULL, // domain
|
||||
NULL, // host
|
||||
htons( DOOM_PORT ),
|
||||
0, // txtLen
|
||||
NULL, // txtRecord
|
||||
DNSServiceRegisterReplyCallback,
|
||||
NULL // context
|
||||
);
|
||||
|
||||
if ( err != kDNSServiceErr_NoError ) {
|
||||
printf( "DNSServiceRegister error\n" );
|
||||
} else {
|
||||
// block until we get a response, process it, and run the callback
|
||||
err = DNSServiceProcessResult( serviceRef );
|
||||
if ( err != kDNSServiceErr_NoError ) {
|
||||
printf( "DNSServiceProcessResult error\n" );
|
||||
}
|
||||
}
|
||||
return localServer;
|
||||
}
|
||||
|
||||
void TerminateGameService() {
|
||||
if ( localServer ) {
|
||||
localServer = false;
|
||||
}
|
||||
DNSServiceRefDeallocate( serviceRef );
|
||||
memset( serviceInterfaces, 0, sizeof( serviceInterfaces ) );
|
||||
}
|
||||
|
||||
void DNSServiceQueryRecordReplyCallback (
|
||||
DNSServiceRef DNSServiceRef,
|
||||
DNSServiceFlags flags,
|
||||
uint32_t interfaceIndex,
|
||||
DNSServiceErrorType errorCode,
|
||||
const char *fullname,
|
||||
uint16_t rrtype,
|
||||
uint16_t rrclass,
|
||||
uint16_t rdlen,
|
||||
const void *rdata,
|
||||
uint32_t ttl,
|
||||
void *context ) {
|
||||
(void)DNSServiceRef;
|
||||
(void)flags;
|
||||
(void)errorCode;
|
||||
(void)rrtype;
|
||||
(void)rrclass;
|
||||
(void)ttl;
|
||||
(void)context;
|
||||
|
||||
assert( rdlen == 4 );
|
||||
const byte *ip = (const byte *)rdata;
|
||||
char interfaceName[IF_NAMESIZE];
|
||||
if_indextoname( interfaceIndex, interfaceName );
|
||||
printf( "DNSServiceQueryRecordReplyCallback: %s, interface[%i] = %s, [%i] = %i.%i.%i.%i\n",
|
||||
fullname, interfaceIndex, interfaceName, rdlen, ip[0], ip[1], ip[2], ip[3] );
|
||||
|
||||
ReportNetworkInterfaces();
|
||||
|
||||
memset( &resolvedServerAddress, 0, sizeof( resolvedServerAddress ) );
|
||||
struct sockaddr_in *sin = (struct sockaddr_in *)&resolvedServerAddress;
|
||||
sin->sin_len = sizeof( resolvedServerAddress );
|
||||
sin->sin_family = AF_INET;
|
||||
sin->sin_port = htons( DOOM_PORT );
|
||||
memcpy( &sin->sin_addr, ip, 4 );
|
||||
|
||||
gotServerAddress = true;
|
||||
}
|
||||
|
||||
|
||||
DNSServiceFlags callbackFlags;
|
||||
|
||||
void DNSServiceResolveReplyCallback (
|
||||
DNSServiceRef sdRef,
|
||||
DNSServiceFlags flags,
|
||||
uint32_t interfaceIndex,
|
||||
DNSServiceErrorType errorCode,
|
||||
const char *fullname,
|
||||
const char *hosttarget,
|
||||
uint16_t port,
|
||||
uint16_t txtLen,
|
||||
const unsigned char *txtRecord,
|
||||
void *context ) {
|
||||
(void)sdRef;
|
||||
(void)errorCode;
|
||||
(void)port;
|
||||
(void)txtLen;
|
||||
(void)txtRecord;
|
||||
(void)context;
|
||||
|
||||
char interfaceName[IF_NAMESIZE];
|
||||
if_indextoname( interfaceIndex, interfaceName );
|
||||
printf( "Resolve: interfaceIndex [%i]=%s : %s @ %s\n", interfaceIndex, interfaceName, fullname, hosttarget );
|
||||
callbackFlags = flags;
|
||||
|
||||
#if 0
|
||||
struct hostent * host = gethostbyname( hosttarget );
|
||||
if ( host ) {
|
||||
printf( "h_name: %s\n", host->h_name );
|
||||
if ( host->h_aliases ) { // this can be NULL
|
||||
for ( char **list = host->h_aliases ; *list ; list++ ) {
|
||||
printf( "h_alias: %s\n", *list );
|
||||
}
|
||||
}
|
||||
printf( "h_addrtype: %i\n", host->h_addrtype );
|
||||
printf( "h_length: %i\n", host->h_length );
|
||||
if ( !host->h_addr_list ) { // I doubt this would ever be NULL...
|
||||
return;
|
||||
}
|
||||
for ( char **list = host->h_addr_list ; *list ; list++ ) {
|
||||
printf( "addr: %i.%i.%i.%i\n", ((byte *)*list)[0], ((byte *)*list)[1], ((byte *)*list)[2], ((byte *)*list)[3] );
|
||||
}
|
||||
|
||||
memset( &resolvedServerAddress, 0, sizeof( resolvedServerAddress ) );
|
||||
resolvedServerAddress.sin_len = sizeof( resolvedServerAddress );
|
||||
resolvedServerAddress.sin_family = host->h_addrtype;
|
||||
resolvedServerAddress.sin_port = htons( DOOM_PORT );
|
||||
assert( host->h_length == 4 );
|
||||
memcpy( &resolvedServerAddress.sin_addr, *host->h_addr_list, host->h_length );
|
||||
|
||||
gotServerAddress = true;
|
||||
}
|
||||
#else
|
||||
DNSServiceRef queryRef;
|
||||
|
||||
// look up the name for this host
|
||||
DNSServiceErrorType err = DNSServiceQueryRecord (
|
||||
&queryRef,
|
||||
kDNSServiceFlagsForceMulticast,
|
||||
interfaceIndex,
|
||||
hosttarget,
|
||||
kDNSServiceType_A, // we want the host address
|
||||
kDNSServiceClass_IN,
|
||||
DNSServiceQueryRecordReplyCallback,
|
||||
NULL /* may be NULL */
|
||||
);
|
||||
if ( err != kDNSServiceErr_NoError ) {
|
||||
printf( "DNSServiceQueryRecord error\n" );
|
||||
} else {
|
||||
// block until we get a response, process it, and run the callback
|
||||
err = DNSServiceProcessResult( queryRef );
|
||||
if ( err != kDNSServiceErr_NoError ) {
|
||||
printf( "DNSServiceProcessResult error\n" );
|
||||
}
|
||||
DNSServiceRefDeallocate( queryRef );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
boolean NetworkServerAvailable() {
|
||||
for ( int i = 0 ; i < MAX_SERVICE_INTEFACES ; i++ ) {
|
||||
if ( serviceInterfaces[i].interfaceIndex != 0 ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// returns "WiFi", "BlueTooth", or "" for display on the
|
||||
// main menu multiplayer icon
|
||||
const char *NetworkServerTransport() {
|
||||
int count = 0;
|
||||
for ( int i = 0 ; i < MAX_SERVICE_INTEFACES ; i++ ) {
|
||||
if ( serviceInterfaces[i].interfaceIndex != 0 ) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
static char str[1024];
|
||||
|
||||
str[0] = 0;
|
||||
for ( int i = 0 ; i < MAX_SERVICE_INTEFACES ; i++ ) {
|
||||
int index = serviceInterfaces[i].interfaceIndex;
|
||||
if ( index == 0 ) {
|
||||
continue;
|
||||
}
|
||||
if ( str[0] ) {
|
||||
strcat( str, "+" );
|
||||
}
|
||||
if ( index == -1 ) {
|
||||
strcat( str, "BT-NEW" );
|
||||
} else if ( index == 1 ) {
|
||||
strcat( str, "LOOP" ); // we should never see this!
|
||||
} else if ( index == 2 ) {
|
||||
strcat( str, "WiFi" );
|
||||
} else {
|
||||
strcat( str, "BT-EST" );
|
||||
}
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
|
||||
boolean ResolveNetworkServer( struct sockaddr *addr ) {
|
||||
if ( !NetworkServerAvailable() ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
gotServerAddress = false;
|
||||
|
||||
DNSServiceRef resolveRef;
|
||||
|
||||
// An unconnected bluetooth service will report an interfaceIndex of -1, so if
|
||||
// we have a wifi link with an interfaceIndex > 0, use that
|
||||
// explicitly.
|
||||
service_t *service = NULL;
|
||||
for ( int i = 0 ; i < MAX_SERVICE_INTEFACES ; i++ ) {
|
||||
if ( serviceInterfaces[i].interfaceIndex > 0 ) {
|
||||
service = &serviceInterfaces[i];
|
||||
char interfaceName[IF_NAMESIZE];
|
||||
if_indextoname( service->interfaceIndex, interfaceName );
|
||||
printf( "explicitly resolving server on interface %i = %s\n", service->interfaceIndex, interfaceName );
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( !service ) {
|
||||
#if 0 // don't support bluetooth now
|
||||
// settle for the unconnected bluetooth service
|
||||
for ( int i = 0 ; i < MAX_SERVICE_INTEFACES ; i++ ) {
|
||||
if ( serviceInterfaces[i].interfaceIndex != 0 ) {
|
||||
service = &serviceInterfaces[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if ( !service ) {
|
||||
printf( "No serviceInterface current.\n" );
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// look up the name for this service
|
||||
|
||||
DNSServiceErrorType err = DNSServiceResolve (
|
||||
&resolveRef,
|
||||
kDNSServiceFlagsForceMulticast, // always on local link
|
||||
service->interfaceIndex > 0 ? service->interfaceIndex : 0, // don't use -1 for bluetooth
|
||||
service->browseName,
|
||||
service->browseRegtype,
|
||||
service->browseDomain,
|
||||
DNSServiceResolveReplyCallback,
|
||||
NULL /* context */
|
||||
);
|
||||
|
||||
if ( err != kDNSServiceErr_NoError ) {
|
||||
printf( "DNSServiceResolve error\n" );
|
||||
} else {
|
||||
// We can get two callbacks when both wifi and bluetooth are enabled
|
||||
callbackFlags = 0;
|
||||
do {
|
||||
err = DNSServiceProcessResult( resolveRef );
|
||||
if ( err != kDNSServiceErr_NoError ) {
|
||||
printf( "DNSServiceProcessResult error\n" );
|
||||
}
|
||||
} while ( callbackFlags & kDNSServiceFlagsMoreComing );
|
||||
DNSServiceRefDeallocate( resolveRef );
|
||||
}
|
||||
|
||||
if ( gotServerAddress ) {
|
||||
*addr = resolvedServerAddress;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void DNSServiceBrowseReplyCallback(
|
||||
DNSServiceRef sdRef,
|
||||
DNSServiceFlags flags,
|
||||
uint32_t interfaceIndex,
|
||||
DNSServiceErrorType errorCode,
|
||||
const char *theServiceName,
|
||||
const char *regtype,
|
||||
const char *replyDomain,
|
||||
void *context ) {
|
||||
(void)sdRef;
|
||||
(void)errorCode;
|
||||
(void)context;
|
||||
|
||||
printf( "DNSServiceBrowseReplyCallback %s: interface:%i name:%s regtype:%s domain:%s\n",
|
||||
(flags & kDNSServiceFlagsAdd) ? "ADD" : "REMOVE",
|
||||
interfaceIndex, theServiceName, regtype, replyDomain );
|
||||
if ( flags & kDNSServiceFlagsAdd ) {
|
||||
// add it to the list
|
||||
if ( interfaceIndex == 1 ) {
|
||||
printf( "Not adding service on loopback interface.\n" );
|
||||
} else {
|
||||
for ( int i = 0 ; i < MAX_SERVICE_INTEFACES ; i++ ) {
|
||||
service_t *service = &serviceInterfaces[i];
|
||||
if ( service->interfaceIndex == 0 ) {
|
||||
strncpy( service->browseName, theServiceName, sizeof( service->browseName ) -1 );
|
||||
strncpy( service->browseRegtype, regtype, sizeof( service->browseRegtype ) -1 );
|
||||
strncpy( service->browseDomain, replyDomain, sizeof( service->browseDomain ) -1 );
|
||||
service->interfaceIndex = interfaceIndex;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// remove it from the list
|
||||
for ( int i = 0 ; i < MAX_SERVICE_INTEFACES ; i++ ) {
|
||||
if ( serviceInterfaces[i].interfaceIndex == interfaceIndex ) {
|
||||
serviceInterfaces[i].interfaceIndex = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ProcessDNSMessages() {
|
||||
static boolean initialized;
|
||||
|
||||
if ( !initialized ) {
|
||||
initialized = true;
|
||||
DNSServiceErrorType err = DNSServiceBrowse (
|
||||
&browseRef,
|
||||
0, /* flags */
|
||||
0, /* interface */
|
||||
serviceName,
|
||||
NULL, /* domain */
|
||||
DNSServiceBrowseReplyCallback,
|
||||
NULL /* context */
|
||||
);
|
||||
if ( err != kDNSServiceErr_NoError ) {
|
||||
printf( "DNSServiceBrowse error\n" );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// poll the socket for updates
|
||||
int socket = DNSServiceRefSockFD( browseRef );
|
||||
if ( socket <= 0 ) {
|
||||
return;
|
||||
}
|
||||
fd_set set;
|
||||
FD_ZERO( &set );
|
||||
FD_SET( socket, &set );
|
||||
|
||||
struct timeval tv;
|
||||
memset( &tv, 0, sizeof( tv ) );
|
||||
if ( select( socket+1, &set, NULL, NULL, &tv ) > 0 ) {
|
||||
DNSServiceProcessResult( browseRef );
|
||||
}
|
||||
}
|
||||
|
||||
void ReportNetworkInterfaces() {
|
||||
struct ifaddrs *ifap;
|
||||
printf( "getifaddrs():\n" );
|
||||
if ( getifaddrs( &ifap ) == -1 ) {
|
||||
perror( "getifaddrs(): " );
|
||||
} else {
|
||||
for ( struct ifaddrs *ifa = ifap ; ifa ; ifa = ifa->ifa_next ) {
|
||||
struct sockaddr_in *ina = (struct sockaddr_in *)ifa->ifa_addr;
|
||||
if ( ina->sin_family == AF_INET ) {
|
||||
byte *ip = (byte *)&ina->sin_addr;
|
||||
printf( "ifa_name: %s ifa_flags: %i sa_family: %i=AF_INET ip: %i.%i.%i.%i\n", ifa->ifa_name, ifa->ifa_flags,
|
||||
ina->sin_family, ip[0], ip[1], ip[2], ip[3] );
|
||||
} else if ( ina->sin_family == AF_LINK ) {
|
||||
struct if_data *data = (struct if_data *)ifa->ifa_data;
|
||||
printf( "ifa_name: %s ifa_flags: %i sa_family: %i=AF_LINK ifi_ipackets: %i\n", ifa->ifa_name, ifa->ifa_flags,
|
||||
ina->sin_family, data->ifi_ipackets );
|
||||
} else {
|
||||
printf( "ifa_name: %s ifa_flags: %i sa_family: %i=???\n", ifa->ifa_name, ifa->ifa_flags,
|
||||
ina->sin_family );
|
||||
}
|
||||
}
|
||||
freeifaddrs( ifap );
|
||||
}
|
||||
|
||||
printf( "if_nameindex():\n" );
|
||||
struct if_nameindex *ifnames = if_nameindex();
|
||||
if ( !ifnames ) {
|
||||
perror( "if_ameindex():" );
|
||||
} else {
|
||||
for ( int i = 0 ; ifnames[i].if_index != 0 ; i++ ) {
|
||||
printf( "%i : %s\n", ifnames[i].if_index, ifnames[i].if_name );
|
||||
}
|
||||
if_freenameindex( ifnames );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
boolean NetworkAvailable() {
|
||||
struct ifaddrs *ifap;
|
||||
if ( getifaddrs( &ifap ) == -1 ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// We can't tell if bluetooth is available from here, because
|
||||
// the interface doesn't appear until after the service is found,
|
||||
// but I decided not to support bluetooth for now due to the poor performance.
|
||||
boolean goodInterface = false;
|
||||
|
||||
for ( struct ifaddrs *ifa = ifap ; ifa ; ifa = ifa->ifa_next ) {
|
||||
struct sockaddr_in *ina = (struct sockaddr_in *)ifa->ifa_addr;
|
||||
if ( ina->sin_family == AF_INET ) {
|
||||
if ( !strcmp( ifa->ifa_name, "en0" ) ) {
|
||||
goodInterface = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
freeifaddrs( ifap );
|
||||
|
||||
return goodInterface;
|
||||
}
|
||||
|
||||
int InterfaceIndexForAddress( struct sockaddr_in *adr ) {
|
||||
(void)adr;
|
||||
// FIXME: compare against getifaddrs
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct sockaddr_in AddressForInterfaceName( const char *ifname ) {
|
||||
struct sockaddr_in s;
|
||||
memset( &s, 0, sizeof( s ) );
|
||||
|
||||
struct ifaddrs *ifap;
|
||||
if ( getifaddrs( &ifap ) == -1 ) {
|
||||
perror( "getifaddrs()" );
|
||||
return s;
|
||||
}
|
||||
|
||||
struct ifaddrs *ifa;
|
||||
for ( ifa = ifap ; ifa ; ifa = ifa->ifa_next ) {
|
||||
struct sockaddr_in *ina = (struct sockaddr_in *)ifa->ifa_addr;
|
||||
if ( ina->sin_family == AF_INET && !strcmp( ifa->ifa_name, ifname ) ) {
|
||||
byte *ip = (byte *)&ina->sin_addr;
|
||||
printf( "AddressForInterfaceName( %s ) = ifa_name: %s ifa_flags: %i sa_family: %i=AF_INET ip: %i.%i.%i.%i\n",
|
||||
ifname, ifa->ifa_name, ifa->ifa_flags,
|
||||
ina->sin_family, ip[0], ip[1], ip[2], ip[3] );
|
||||
freeifaddrs( ifap );
|
||||
return *ina;
|
||||
}
|
||||
}
|
||||
freeifaddrs( ifap );
|
||||
printf( "AddressForInterfaceName( %s ): Couldn't find IP address\n", ifname );
|
||||
return s;
|
||||
}
|
||||
|
||||
int InterfaceIndexForName( const char *ifname ) {
|
||||
struct if_nameindex *ifnames = if_nameindex();
|
||||
if ( !ifnames ) {
|
||||
perror( "if_nameindex()" );
|
||||
return 0;
|
||||
}
|
||||
for ( int i = 0 ; ifnames[i].if_index != 0 ; i++ ) {
|
||||
if ( !strcmp( ifname, ifnames[i].if_name ) ) {
|
||||
int index = ifnames[i].if_index;
|
||||
if_freenameindex( ifnames );
|
||||
return index;
|
||||
}
|
||||
}
|
||||
printf( "InterfaceIndexForName( %s ): Couldn't find interface\n", ifname );
|
||||
if_freenameindex( ifnames );
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct sockaddr_in AddressForInterfaceIndex( int interfaceIndex ) {
|
||||
struct sockaddr_in addr;
|
||||
|
||||
memset( &addr, 0, sizeof( addr ) );
|
||||
addr.sin_len = sizeof( addr );
|
||||
addr.sin_family = AF_INET;
|
||||
addr.sin_addr.s_addr = INADDR_ANY;
|
||||
|
||||
if ( interfaceIndex == 0 ) {
|
||||
return addr;
|
||||
}
|
||||
|
||||
struct if_nameindex *ifnames = if_nameindex();
|
||||
if ( !ifnames ) {
|
||||
perror( "if_ameindex()" );
|
||||
return addr;
|
||||
}
|
||||
for ( int i = 0 ; ifnames[i].if_index != 0 ; i++ ) {
|
||||
if ( ifnames[i].if_index == interfaceIndex ) {
|
||||
addr = AddressForInterfaceName( ifnames[i].if_name );
|
||||
if_freenameindex( ifnames );
|
||||
return addr;
|
||||
}
|
||||
}
|
||||
printf( "AddressForInterfaceIndex( %i ): Couldn't find interface\n", interfaceIndex );
|
||||
if_freenameindex( ifnames );
|
||||
return addr;
|
||||
}
|
||||
|
||||
struct sockaddr_in gameSocketAddress;
|
||||
|
||||
int UDPSocket( const char *interfaceName, int portnum ) {
|
||||
int udpSocket = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
|
||||
if ( udpSocket == -1 ) {
|
||||
Com_Printf( "UDP socket failed: %s\n", strerror( errno ) );
|
||||
return -1;
|
||||
}
|
||||
struct sockaddr_in addr = AddressForInterfaceName( interfaceName );
|
||||
addr.sin_port = htons( portnum );
|
||||
byte *ip = (byte *)&addr.sin_addr;
|
||||
gameSocketAddress = addr;
|
||||
Com_Printf( "UDPSocket( %s, %i ) = %i.%i.%i.%i\n", interfaceName, portnum,
|
||||
ip[0], ip[1], ip[2], ip[3] );
|
||||
if ( bind( udpSocket, (struct sockaddr *)&addr, sizeof( addr ) ) == -1 ) {
|
||||
Com_Printf( "UDP bind failed: %s\n", strerror( errno ) );
|
||||
close( udpSocket );
|
||||
return -1;
|
||||
}
|
||||
|
||||
#if 0
|
||||
// enable broadcast
|
||||
int on = 1;
|
||||
if ( setsockopt( udpSocket, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on) ) == -1 ) {
|
||||
Com_Printf( "UDP setsockopt failed: %s\n", strerror( errno ) );
|
||||
close( udpSocket );
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
// set the type-of-service, in hopes that the link level drivers use it
|
||||
// to stop buffering huge amounts of data when there are line errors
|
||||
int tos = 0x10; /* IPTOS_LOWDELAY; */ /* see <netinet/in.h> */
|
||||
if ( setsockopt( udpSocket, IPPROTO_IP, IP_TOS, &tos, sizeof(tos) ) == -1 ) {
|
||||
Com_Printf( "setsockopt IP_TOS failed: %s\n", strerror( errno ) );
|
||||
}
|
||||
#endif
|
||||
|
||||
// enable non-blocking IO
|
||||
if ( fcntl( udpSocket, F_SETFL, O_NONBLOCK ) == -1 ) {
|
||||
Com_Printf( "UDP fcntl failed: %s\n", strerror( errno ) );
|
||||
close( udpSocket );
|
||||
return -1;
|
||||
}
|
||||
|
||||
return udpSocket;
|
||||
}
|
||||
|
||||
2412
common/ios/doomengine/iphone_qgl.h
Executable file
2412
common/ios/doomengine/iphone_qgl.h
Executable file
File diff suppressed because it is too large
Load Diff
40
common/ios/doomengine/iphone_qgl_enumerants.h
Executable file
40
common/ios/doomengine/iphone_qgl_enumerants.h
Executable file
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 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.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef IPHONE_QGL_ENUMERANTS_H
|
||||
#define IPHONE_QGL_ENUMERANTS_H
|
||||
|
||||
#ifdef QGL_LOG_GL_CALLS
|
||||
|
||||
#include <OpenGLES/ES1/gl.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
const char *StringFromGLEnumerant( GLenum enumerant );
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // QGL_LOG_GL_CALLS
|
||||
|
||||
#endif // IPHONE_QGL_ENUMERANTS_H
|
||||
1765
common/ios/doomengine/iphone_render.c
Executable file
1765
common/ios/doomengine/iphone_render.c
Executable file
File diff suppressed because it is too large
Load Diff
293
common/ios/doomengine/iphone_sound.c
Executable file
293
common/ios/doomengine/iphone_sound.c
Executable file
@@ -0,0 +1,293 @@
|
||||
/*
|
||||
* iphone_sound.c
|
||||
* doom
|
||||
*
|
||||
* Created by John Carmack on 4/16/09.
|
||||
* Copyright 2009 Id Software. All rights reserved.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 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 "doomiphone.h"
|
||||
#include <AudioToolbox/AudioServices.h>
|
||||
|
||||
|
||||
typedef struct {
|
||||
unsigned sourceName; // OpenAL sourceName
|
||||
pkWav_t *sfx; // NULL if unused
|
||||
float volume; // stored for showSound display
|
||||
} channel_t;
|
||||
|
||||
static ALCcontext *Context;
|
||||
static ALCdevice *Device;
|
||||
|
||||
#define MAX_CHANNELS 16
|
||||
static channel_t s_channels[ MAX_CHANNELS ];
|
||||
|
||||
cvar_t *s_sfxVolume;
|
||||
|
||||
void Sound_StartLocalSound( const char *filename ) {
|
||||
Sound_StartLocalSoundAtVolume( filename, 1.0f );
|
||||
}
|
||||
|
||||
void Sound_StartLocalSoundAtVolume( const char *filename, float volume ) {
|
||||
pkWav_t *sfx;
|
||||
|
||||
sfx = PK_FindWav( filename );
|
||||
if( ! sfx ) {
|
||||
Com_Printf( "Sound_StartLocalSound: could not cache (%s)\n", filename );
|
||||
return;
|
||||
}
|
||||
// printf( "sound:%s\n", filename );
|
||||
// channel 0 is reserved for UI sounds, the other channels
|
||||
// are for DOOM sounds
|
||||
channel_t *ch = &s_channels[ 0 ];
|
||||
|
||||
ch->sfx = sfx;
|
||||
ch->volume = s_sfxVolume->value * volume;
|
||||
|
||||
alSourceStop( ch->sourceName );
|
||||
alSourcef( ch->sourceName, AL_GAIN, ch->volume );
|
||||
alSourcei( ch->sourceName, AL_BUFFER, sfx->alBufferNum );
|
||||
alSourcef( ch->sourceName, AL_PITCH, 1.0f );
|
||||
alSourcePlay( ch->sourceName );
|
||||
}
|
||||
|
||||
|
||||
static void Sound_Play_f( void ) {
|
||||
if( Cmd_Argc() == 1 ) {
|
||||
Com_Printf( "Usage: play <soundfile>\n" );
|
||||
return;
|
||||
}
|
||||
Sound_StartLocalSound( Cmd_Argv( 1 ) );
|
||||
}
|
||||
|
||||
// we won't allow music to be toggled on or off in the menu when this is true
|
||||
int otherAudioIsPlaying;
|
||||
|
||||
int SysIPhoneOtherAudioIsPlaying() {
|
||||
return otherAudioIsPlaying;
|
||||
}
|
||||
|
||||
void interruptionListener( void *inUserData, UInt32 inInterruption)
|
||||
{
|
||||
printf("Session interrupted! --- %s ---\n", inInterruption == kAudioSessionBeginInterruption ? "Begin Interruption" : "End Interruption");
|
||||
|
||||
if ( inInterruption == kAudioSessionBeginInterruption ) {
|
||||
printf("Audio interrupted.\n" );
|
||||
iphonePauseMusic();
|
||||
alcMakeContextCurrent( NULL );
|
||||
AudioSessionSetActive( false );
|
||||
} else if ( inInterruption == kAudioSessionEndInterruption ) {
|
||||
printf("Audio restored.\n" );
|
||||
|
||||
OSStatus r = AudioSessionSetActive( true );
|
||||
if ( r != kAudioSessionNoError ) {
|
||||
printf( "AudioSessionSetActive( true ) failed: 0x%x\n", (unsigned int)r );
|
||||
} else {
|
||||
printf( "AudioSessionSetActive( true ) succeeded.\n" );
|
||||
}
|
||||
alcMakeContextCurrent( Context );
|
||||
if( alcGetError( Device ) != ALC_NO_ERROR ) {
|
||||
Com_Error( "Failed to alcMakeContextCurrent\n" );
|
||||
}
|
||||
iphoneResumeMusic();
|
||||
}
|
||||
}
|
||||
|
||||
void Sound_Init( void ) {
|
||||
|
||||
Com_Printf( "\n------- Sound Initialization -------\n" );
|
||||
|
||||
s_sfxVolume = Cvar_Get( "s_sfxVolume", "1.0", 0 );
|
||||
|
||||
Cmd_AddCommand( "play", Sound_Play_f );
|
||||
|
||||
// make sure background ipod music mixes with our sound effects
|
||||
Com_Printf( "...Initializing AudioSession\n" );
|
||||
OSStatus status = 0;
|
||||
status = AudioSessionInitialize(NULL, NULL, interruptionListener, NULL); // else "couldn't initialize audio session"
|
||||
|
||||
// if there is iPod music playing in the background, we want to use
|
||||
// the AmbientSound catagory, otherwise we will leave it at the default.
|
||||
// If we always set it to AmbientSound, then the mp3 background music
|
||||
// playback goes to software on 3.0 for a huge slowdown.
|
||||
UInt32 propOtherAudioIsPlaying = kAudioSessionProperty_OtherAudioIsPlaying;
|
||||
UInt32 size = sizeof( otherAudioIsPlaying );
|
||||
AudioSessionGetProperty( propOtherAudioIsPlaying, &size, &otherAudioIsPlaying );
|
||||
Com_Printf("OtherAudioIsPlaying = %d\n", otherAudioIsPlaying );
|
||||
|
||||
if ( otherAudioIsPlaying ) {
|
||||
UInt32 audioCategory = kAudioSessionCategory_AmbientSound;
|
||||
status = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(audioCategory), &audioCategory);
|
||||
}
|
||||
|
||||
status = AudioSessionSetActive(true); // else "couldn't set audio session active\n"
|
||||
|
||||
Com_Printf( "...Initializing OpenAL subsystem\n" );
|
||||
|
||||
// get the OpenAL device
|
||||
Device = alcOpenDevice( NULL );
|
||||
if( Device == NULL ) {
|
||||
Com_Printf( "Failed to alcOpenDevice\n" );
|
||||
}
|
||||
|
||||
// Create context(s)
|
||||
Context = alcCreateContext( Device, NULL );
|
||||
if( Context == NULL ) {
|
||||
Com_Error( "Failed to alcCreateContext\n" );
|
||||
}
|
||||
|
||||
// Set active context
|
||||
alcGetError( Device );
|
||||
alcMakeContextCurrent( Context );
|
||||
if( alcGetError( Device ) != ALC_NO_ERROR ) {
|
||||
Com_Error( "Failed to alcMakeContextCurrent\n" );
|
||||
}
|
||||
|
||||
// allocate all the channels we are going to use
|
||||
channel_t *ch;
|
||||
int i;
|
||||
for( i = 0, ch = s_channels ; i < MAX_CHANNELS ; ++i, ++ch ) {
|
||||
alGenSources( 1, &ch->sourceName );
|
||||
|
||||
if( alGetError() != AL_NO_ERROR ) {
|
||||
Com_Error( "Allocating AL sound sources" );
|
||||
}
|
||||
alSourcei( ch->sourceName, AL_SOURCE_RELATIVE, AL_FALSE );
|
||||
}
|
||||
|
||||
Com_Printf( "------------------------------------\n" );
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
ShowSound
|
||||
|
||||
Display active sound channels
|
||||
==================
|
||||
*/
|
||||
void ShowSound() {
|
||||
|
||||
if ( !showSound->value ) {
|
||||
return;
|
||||
}
|
||||
channel_t *ch;
|
||||
int i;
|
||||
for( i = 0, ch = s_channels ; i < MAX_CHANNELS ; ++i, ++ch ) {
|
||||
int state;
|
||||
alGetSourcei( ch->sourceName, AL_SOURCE_STATE, &state );
|
||||
if ( state != AL_PLAYING ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
int v = ch->volume * 255;
|
||||
if ( v > 255 ) {
|
||||
v = 255;
|
||||
}
|
||||
color4_t color = { v, v, v, 255 };
|
||||
R_Draw_Fill( i*16, 0, 12, 12, color );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
==================================================================
|
||||
|
||||
PrBoom interface
|
||||
|
||||
==================================================================
|
||||
*/
|
||||
|
||||
// Initialize channels?
|
||||
void I_SetChannels(void) {}
|
||||
|
||||
// Get raw data lump index for sound descriptor.
|
||||
int I_GetSfxLumpNum (sfxinfo_t *sfx) {
|
||||
// find the pkWav_t for this sfxinfo
|
||||
char upper[16], *d = upper;
|
||||
for ( const char *c = sfx->name ; *c ; c++ ) {
|
||||
*d++ = toupper( *c );
|
||||
}
|
||||
*d = 0;
|
||||
pkWav_t *pkwav = PK_FindWav( va( "newsfx/DS%s.wav", upper ) );
|
||||
|
||||
return pkwav - pkWavs;
|
||||
}
|
||||
|
||||
// Starts a sound in a particular sound channel.
|
||||
// volume ranges 0 - 64
|
||||
// seperation tanges is 128 straight ahead, 0 = all left ear, 255 = all right ear
|
||||
// pitch centers around 128
|
||||
int I_StartSound(int sfx_id, int channel, int vol, int sep, int pitch, int priority) {
|
||||
|
||||
sfxinfo_t *dsfx = &S_sfx[sfx_id];
|
||||
|
||||
assert( dsfx->lumpnum >= 0 && dsfx->lumpnum < pkHeader->wavs.count );
|
||||
|
||||
pkWav_t *sfx = &pkWavs[dsfx->lumpnum];
|
||||
// printf( "sound: %s chan:%i vol:%i sep:%i pitch:%i priority:%i\n", sfx->wavData->name.name, channel, vol, sep, pitch, priority );
|
||||
|
||||
assert( channel >= 0 && channel < MAX_CHANNELS - 1 );
|
||||
channel_t *ch = &s_channels[ 1+channel ];
|
||||
|
||||
alSourceStop( ch->sourceName );
|
||||
if ( ch->sfx == sfx ) {
|
||||
// restarting the same sound
|
||||
alSourceRewind( ch->sourceName );
|
||||
} else {
|
||||
alSourcei( ch->sourceName, AL_BUFFER, sfx->alBufferNum );
|
||||
}
|
||||
|
||||
ch->sfx = sfx;
|
||||
ch->volume = s_sfxVolume->value * vol / 64.0;
|
||||
alSourcef( ch->sourceName, AL_GAIN, ch->volume );
|
||||
alSourcef( ch->sourceName, AL_PITCH, pitch / 128.0f );
|
||||
alSourcePlay( ch->sourceName );
|
||||
|
||||
return (int)ch;
|
||||
}
|
||||
|
||||
// Stops a sound channel.
|
||||
void I_StopSound(int handle) {}
|
||||
|
||||
// Called by S_*() functions
|
||||
// to see if a channel is still playing.
|
||||
// Returns 0 if no longer playing, 1 if playing.
|
||||
boolean I_SoundIsPlaying(int handle) {
|
||||
|
||||
channel_t *ch = (channel_t *)handle;
|
||||
if ( !ch ) {
|
||||
return false;
|
||||
}
|
||||
int state;
|
||||
alGetSourcei( ch->sourceName, AL_SOURCE_STATE, &state );
|
||||
|
||||
return state == AL_PLAYING;
|
||||
}
|
||||
|
||||
// Called by m_menu.c to let the quit sound play and quit right after it stops
|
||||
boolean I_AnySoundStillPlaying(void) { return false; }
|
||||
|
||||
// Updates the volume, separation,
|
||||
// and pitch of a sound channel.
|
||||
void I_UpdateSoundParams(int handle, int vol, int sep, int pitch) {}
|
||||
261
common/ios/doomengine/iphone_start.cpp
Executable file
261
common/ios/doomengine/iphone_start.cpp
Executable file
@@ -0,0 +1,261 @@
|
||||
/*
|
||||
* iphone_start.c
|
||||
* doom
|
||||
*
|
||||
* Created by John Carmack on 7/7/09.
|
||||
* Copyright 2009 id Software. All rights reserved.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 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 "doomiphone.h"
|
||||
#include "ios/GameCenter.h"
|
||||
|
||||
// Only one game can be set up at a time on a given wireless segment, although
|
||||
// several independent games can be played.
|
||||
// If a valid setupPacket has arrived in the last second, that will be the
|
||||
// displayed game, otherwise the local system starts sending out setupPackets.
|
||||
packetSetup_t setupPacket;
|
||||
int setupPacketFrameNum;
|
||||
int localGameID; // change every time we take over as the sender of setupPackets
|
||||
|
||||
boolean levelHasBeenLoaded; // determines if "resume game" does a loadGame and exiting does a saveGame
|
||||
|
||||
menuState_t menuState;
|
||||
menuState_t lastState = IPM_GAME;
|
||||
color4_t highlightColor = { 128, 128, 128, 255 };
|
||||
color4_t colorPressed = { 128, 128, 0, 255 };
|
||||
|
||||
/*
|
||||
==================
|
||||
ResumeGame
|
||||
|
||||
==================
|
||||
*/
|
||||
void ResumeGame() {
|
||||
if ( levelHasBeenLoaded && !demoplayback ) {
|
||||
// return to the already started game
|
||||
iphoneResumeMusic();
|
||||
drawWeaponSelect = false;
|
||||
weaponSelected = -1;
|
||||
automapmode = am_none;
|
||||
advancedemo = false;
|
||||
menuState = IPM_GAME;
|
||||
lastState = IPM_GAME;
|
||||
return;
|
||||
}
|
||||
|
||||
if ( !playState.saveGameIsValid || !G_SaveGameValid() ) {
|
||||
// they hit "resume game" on the first app lounch, so just start E1M1
|
||||
mapStart_t map;
|
||||
map.skill = 1;
|
||||
map.episode = 1;
|
||||
map.map = 1;
|
||||
StartSinglePlayerGame( map );
|
||||
lastState = IPM_GAME;
|
||||
} else {
|
||||
StartSaveGame();
|
||||
lastState = IPM_GAME;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
==================
|
||||
GameSetup
|
||||
|
||||
==================
|
||||
*/
|
||||
void GameSetup() {
|
||||
netGameFailure = NF_NONE;
|
||||
|
||||
// resume game just goes back to playing, it doesn't load anything
|
||||
levelHasBeenLoaded = true;
|
||||
|
||||
// make sure doom doesn't cycle to the next demo loop and kill the new game
|
||||
advancedemo = false;
|
||||
|
||||
// not in a timedemo yet
|
||||
timeDemoStart = 0;
|
||||
iphoneTimeDemo = false;
|
||||
|
||||
// display the game next time through the main loop
|
||||
drawWeaponSelect = false;
|
||||
weaponSelected = -1;
|
||||
automapmode = am_none;
|
||||
menuState = IPM_GAME;
|
||||
|
||||
demoplayback = false;
|
||||
|
||||
levelTimer = false;
|
||||
levelFragLimit = false;
|
||||
|
||||
// single player game
|
||||
netgame = false;
|
||||
deathmatch = false;
|
||||
nomonsters = false;
|
||||
memset( playeringame, 0, sizeof( playeringame ) );
|
||||
consoleplayer = 0;
|
||||
displayplayer = 0;
|
||||
playeringame[consoleplayer] = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
=======================
|
||||
StartSaveGame
|
||||
|
||||
Can be called by both the resume game button after launch, or the
|
||||
load game button after a player death
|
||||
=======================
|
||||
*/
|
||||
void StartSaveGame() {
|
||||
GameSetup();
|
||||
G_LoadGame( 0, true );
|
||||
G_DoLoadGame();
|
||||
}
|
||||
|
||||
/*
|
||||
=======================
|
||||
StartSinglePlayerGame
|
||||
|
||||
=======================
|
||||
*/
|
||||
void StartSinglePlayerGame( mapStart_t map ) {
|
||||
// Disconnect from a multiplayer game
|
||||
idGameCenter::DisconnectFromMatch();
|
||||
|
||||
playState.map = map;
|
||||
playState.saveGameIsValid = true; // assume we will save the game on exit
|
||||
lastState = IPM_GAME;
|
||||
|
||||
// mark this level / skill combination as tried
|
||||
//
|
||||
mapStats_t *cms = FindMapStats( playState.map.dataset, playState.map.episode, playState.map.map, true );
|
||||
if ( cms ) {
|
||||
// if we are at MAX_MAPS, no stat tracking...
|
||||
cms->completionFlags[playState.map.skill] |= MF_TRIED;
|
||||
}
|
||||
|
||||
GameSetup();
|
||||
|
||||
// start the map
|
||||
G_InitNew( static_cast<skill_t>( playState.map.skill ), playState.map.episode, playState.map.map );
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
=======================
|
||||
StartNetGame
|
||||
|
||||
Begins a game based on the contents of setupPacket
|
||||
=======================
|
||||
*/
|
||||
boolean StartNetGame() {
|
||||
// make sure we are supposed to be in this game
|
||||
int slot = -1;
|
||||
for ( int i = 0 ; i < MAXPLAYERS ; i++ ) {
|
||||
if ( setupPacket.playerID[i] == playerID ) {
|
||||
slot = i;
|
||||
}
|
||||
}
|
||||
if ( slot == -1 ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
GameSetup();
|
||||
|
||||
consoleplayer = displayplayer = slot;
|
||||
|
||||
netgame = true; // respawn without restarting levels
|
||||
|
||||
if ( setupPacket.deathmatch ) {
|
||||
// deathmatch game
|
||||
deathmatch = setupPacket.deathmatch; // could be either 1 or 2 for altdeath
|
||||
nomonsters = true;
|
||||
|
||||
if ( setupPacket.timelimit > 0 ) {
|
||||
levelTimer = true;
|
||||
// 30 hz, minutes
|
||||
levelTimeCount = setupPacket.timelimit * 30 * 60;
|
||||
}
|
||||
|
||||
if ( setupPacket.fraglimit > 0 ) {
|
||||
levelFragLimit = true;
|
||||
levelFragLimitCount = setupPacket.fraglimit;
|
||||
}
|
||||
} else {
|
||||
// coop game
|
||||
deathmatch = false;
|
||||
nomonsters = false;
|
||||
}
|
||||
|
||||
for ( int i = 0 ; i < MAXPLAYERS ; i++ ) {
|
||||
if ( setupPacket.playerID[i] != 0 ) {
|
||||
playeringame[i] = 1;
|
||||
} else {
|
||||
playeringame[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
gametic = 0;
|
||||
maketic = 1; // allow everyone to run the first frame without waiting for a packet
|
||||
|
||||
memset( netcmds, 0, sizeof( netcmds ) );
|
||||
memset( consistancy, 0, sizeof( consistancy ) );
|
||||
|
||||
gameID = setupPacket.gameID;
|
||||
|
||||
// start the map
|
||||
G_InitNew( static_cast<skill_t>( setupPacket.map.skill ), setupPacket.map.episode, setupPacket.map.map );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
=======================
|
||||
StartDemoGame
|
||||
|
||||
The demo button has been hit on the main menu
|
||||
=======================
|
||||
*/
|
||||
void StartDemoGame( boolean timeDemoMode ) {
|
||||
if ( levelHasBeenLoaded && !netgame && !demoplayback && usergame && gamestate == GS_LEVEL ) {
|
||||
// save the current game before starting the demos
|
||||
levelHasBeenLoaded = false;
|
||||
G_SaveGame( 0, "quicksave" );
|
||||
G_DoSaveGame(true);
|
||||
}
|
||||
lastState = IPM_GAME;
|
||||
|
||||
GameSetup();
|
||||
if ( timeDemoMode ) {
|
||||
iphoneTimeDemo = true;
|
||||
}
|
||||
|
||||
// always skip to the next one on each exit from the menu
|
||||
advancedemo = true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
93
common/ios/doomengine/iphone_sys.mm
Executable file
93
common/ios/doomengine/iphone_sys.mm
Executable file
@@ -0,0 +1,93 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 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 "doomiphone.h"
|
||||
#import <AudioToolbox/AudioServices.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "ios/View.h"
|
||||
|
||||
char consoleCommand[1024];
|
||||
|
||||
int SysIphoneMicroseconds() {
|
||||
struct timeval tp;
|
||||
struct timezone tzp;
|
||||
static int secbase;
|
||||
|
||||
gettimeofday( &tp, &tzp );
|
||||
|
||||
if( ! secbase ) {
|
||||
secbase = tp.tv_sec;
|
||||
return tp.tv_usec;
|
||||
}
|
||||
|
||||
int curtime = (tp.tv_sec - secbase) * 1000000 + tp.tv_usec;
|
||||
|
||||
return curtime;
|
||||
}
|
||||
|
||||
int SysIphoneMilliseconds() {
|
||||
return SysIphoneMicroseconds()/1000;
|
||||
}
|
||||
|
||||
|
||||
char iphoneDocDirectory[PATH_MAX];
|
||||
char iphoneAppDirectory[PATH_MAX];
|
||||
char iphoneTempDirectory[PATH_MAX];
|
||||
|
||||
const char *SysIphoneGetAppDir() {
|
||||
return iphoneAppDirectory;
|
||||
}
|
||||
|
||||
const char *SysIphoneGetDocDir() {
|
||||
return iphoneDocDirectory;
|
||||
}
|
||||
|
||||
const char *SysIphoneGetTempDir() {
|
||||
return iphoneTempDirectory;
|
||||
}
|
||||
|
||||
void SysIPhoneVibrate() {
|
||||
AudioServicesPlaySystemSound( kSystemSoundID_Vibrate );
|
||||
}
|
||||
|
||||
|
||||
void SysIPhoneOpenURL( const char *url ) {
|
||||
Com_Printf( "OpenURL char *: %s\n", url );
|
||||
|
||||
NSString *nss = [NSString stringWithCString: url encoding: NSASCIIStringEncoding];
|
||||
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: nss]];
|
||||
}
|
||||
|
||||
int SysIPhoneIsDeviceLandscapeRight( void ) {
|
||||
return [UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeRight;
|
||||
}
|
||||
|
||||
void SysIPhoneSetUIKitOrientation( int isLandscapeRight ) {
|
||||
// Using OS autorotation for now. If we ever want to support 60FPS on MBX devices,
|
||||
// we'll probably have to go back to manual rotation for the GL view.
|
||||
/*
|
||||
if ( isLandscapeRight ) {
|
||||
[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeRight;
|
||||
} else {
|
||||
[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeLeft;
|
||||
}
|
||||
*/
|
||||
}
|
||||
91
common/ios/doomengine/misc.c
Executable file
91
common/ios/doomengine/misc.c
Executable file
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* misc.c
|
||||
* doom
|
||||
*
|
||||
* Created by John Carmack on 4/13/09.
|
||||
* Copyright 2009 idSoftware. All rights reserved.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 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 "doomiphone.h"
|
||||
|
||||
void Com_Printf( const char *fmt, ... ) {
|
||||
va_list argptr;
|
||||
|
||||
va_start( argptr, fmt );
|
||||
|
||||
//gsh, send output to the console buffer
|
||||
char buffer[1024];
|
||||
vsnprintf( buffer, sizeof( buffer ), fmt, argptr );
|
||||
AppendConsoleBuffer(buffer);
|
||||
|
||||
vprintf( fmt, argptr );
|
||||
va_end( argptr );
|
||||
}
|
||||
|
||||
void Com_Error( const char *fmt, ... ) {
|
||||
va_list argptr;
|
||||
|
||||
va_start( argptr, fmt );
|
||||
|
||||
//gsh, send output to the console buffer
|
||||
char buffer[1024];
|
||||
vsnprintf( buffer, sizeof( buffer ), fmt, argptr );
|
||||
AppendConsoleBuffer(buffer);
|
||||
|
||||
vprintf( fmt, argptr );
|
||||
va_end( argptr );
|
||||
|
||||
//gsh, email the console to id
|
||||
EmailConsole();
|
||||
|
||||
// drop into the editor
|
||||
abort();
|
||||
exit( 1 );
|
||||
}
|
||||
|
||||
char *va( const char *format, ... ) {
|
||||
va_list argptr;
|
||||
static char string[ 1024 ];
|
||||
|
||||
va_start( argptr, format );
|
||||
(void)vsnprintf( string, sizeof( string ), format, argptr );
|
||||
va_end( argptr );
|
||||
|
||||
string[ sizeof( string ) - 1 ] = '\0';
|
||||
|
||||
return string;
|
||||
}
|
||||
|
||||
int HashString( const char *string ) {
|
||||
int hash = *string;
|
||||
|
||||
if( hash ) {
|
||||
for( string += 1; *string != '\0'; ++string ) {
|
||||
hash = (hash << 5) - hash + tolower(*string);
|
||||
}
|
||||
}
|
||||
|
||||
return hash;
|
||||
}
|
||||
|
||||
74
common/ios/doomengine/misc.h
Executable file
74
common/ios/doomengine/misc.h
Executable file
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* misc.h
|
||||
* doom
|
||||
*
|
||||
* Created by John Carmack on 4/13/09.
|
||||
* Copyright 2009 idSoftware. All rights reserved.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 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.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
char *va( const char *format, ... );
|
||||
void Com_Printf( const char *fmt, ... );
|
||||
void Com_Error( const char *fmt, ... );
|
||||
int HashString( const char *string );
|
||||
|
||||
/*
|
||||
|
||||
Command execution takes a NUL-terminated string, breaks it into tokens,
|
||||
then searches for a command or variable that matches the first token.
|
||||
|
||||
*/
|
||||
|
||||
typedef void (*xcommand_t) (void);
|
||||
|
||||
// called by the init functions of other parts of the program to
|
||||
// register commands and functions to call for them.
|
||||
// The cmd_name is referenced later, so it should not be in temp memory
|
||||
// if function is NULL, the command will be forwarded to the server
|
||||
// as a clc_stringcmd instead of executed locally
|
||||
void Cmd_AddCommand( const char *cmd_name, xcommand_t function );
|
||||
|
||||
// print all the added commands
|
||||
void Cmd_ListCommands_f();
|
||||
|
||||
// attempts to match a partial command for automatic command line completion
|
||||
// returns NULL if nothing fits
|
||||
char *Cmd_CompleteCommand( const char *partial );
|
||||
|
||||
// The functions that execute commands get their parameters with these
|
||||
// functions. Cmd_Argv () will return an empty string, not a NULL
|
||||
// if arg > argc, so string operations are always safe.
|
||||
int Cmd_Argc( void );
|
||||
const char *Cmd_Argv( int arg );
|
||||
|
||||
// Takes a NUL-terminated string. Does not need to be /n terminated.
|
||||
// breaks the string up into argc / argv tokens.
|
||||
void Cmd_TokenizeString( const char *text );
|
||||
|
||||
// Parses a single line of text into arguments and tries to execute it
|
||||
// as if it was typed at the console
|
||||
void Cmd_ExecuteString( const char *text );
|
||||
|
||||
// execute each line of the config file
|
||||
void Cmd_ExecuteFile( const char *fullPathName );
|
||||
|
||||
324
common/ios/doomengine/prboomInterface.c
Executable file
324
common/ios/doomengine/prboomInterface.c
Executable file
@@ -0,0 +1,324 @@
|
||||
/*
|
||||
* prboomInterface.c
|
||||
* doom
|
||||
*
|
||||
* Created by John Carmack on 4/14/09.
|
||||
* Copyright 2009 Id Software. All rights reserved.
|
||||
*
|
||||
* Stuff to get prboom to compile without SDL
|
||||
*/
|
||||
/*
|
||||
|
||||
Copyright (C) 2009 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 "doomiphone.h"
|
||||
|
||||
int desired_fullscreen;
|
||||
int usejoystick;
|
||||
int joyright;
|
||||
int joyleft;
|
||||
int joydown;
|
||||
int joyup;
|
||||
int gl_colorbuffer_bits;
|
||||
int gl_depthbuffer_bits;
|
||||
int snd_card;
|
||||
int mus_card;
|
||||
int endoom_mode;
|
||||
int use_fullscreen;
|
||||
int snd_samplerate;
|
||||
int ms_to_next_tick;
|
||||
int realtic_clock_rate;
|
||||
|
||||
|
||||
/* I_SafeExit
|
||||
* This function is called instead of exit() by functions that might be called
|
||||
* during the exit process (i.e. after exit() has already been called)
|
||||
* Prevent infinitely recursive exits -- killough
|
||||
*
|
||||
* JDC: we don't do any atexit() calls on iphone, so this shouldn't be necessary
|
||||
*/
|
||||
void I_SafeExit(int rc) {
|
||||
static int has_exited;
|
||||
if (!has_exited) {
|
||||
has_exited=rc ? 2 : 1;
|
||||
exit(rc);
|
||||
}
|
||||
}
|
||||
|
||||
void I_uSleep( unsigned long usec ) {
|
||||
usleep( usec );
|
||||
}
|
||||
|
||||
/*
|
||||
* HasTrailingSlash
|
||||
*
|
||||
* cphipps - simple test for trailing slash on dir names
|
||||
*/
|
||||
|
||||
boolean HasTrailingSlash(const char* dn)
|
||||
{
|
||||
return ( (dn[strlen(dn)-1] == '/') );
|
||||
}
|
||||
|
||||
void I_FindFile(const char* wfname, const char* ext, char * returnFileName )
|
||||
{
|
||||
sprintf( returnFileName, "%s/%s", SysIphoneGetAppDir(), wfname );
|
||||
if (access(returnFileName,F_OK))
|
||||
strcat(returnFileName, ext); // try adding the extension
|
||||
if (!access(returnFileName,F_OK)) {
|
||||
lprintf(LO_INFO, " found %s\n", returnFileName);
|
||||
|
||||
// Found the file.
|
||||
return;
|
||||
}
|
||||
// did not find the file.
|
||||
returnFileName[0] = '\0';
|
||||
lprintf(LO_INFO, " NOT found %s\n", wfname );
|
||||
|
||||
#if 0
|
||||
// lookup table of directories to search
|
||||
static const struct {
|
||||
const char *dir; // directory
|
||||
const char *sub; // subdirectory
|
||||
const char *env; // environment variable
|
||||
const char *(*func)(void); // for I_DoomExeDir
|
||||
} search[] = {
|
||||
{NULL}, // current working directory
|
||||
{NULL, NULL, "DOOMWADDIR"}, // run-time $DOOMWADDIR
|
||||
{DOOMWADDIR}, // build-time configured DOOMWADDIR
|
||||
{NULL, "doom", "HOME"}, // ~/doom
|
||||
{NULL, NULL, "HOME"}, // ~
|
||||
{NULL, NULL, NULL, I_DoomExeDir}, // config directory
|
||||
{"/usr/local/share/games/doom"},
|
||||
{"/usr/share/games/doom"},
|
||||
{"/usr/local/share/doom"},
|
||||
{"/usr/share/doom"},
|
||||
};
|
||||
|
||||
int i;
|
||||
/* Precalculate a length we will need in the loop */
|
||||
size_t pl = strlen(wfname) + strlen(ext) + 4;
|
||||
|
||||
for (i = 0; i < sizeof(search)/sizeof(*search); i++) {
|
||||
char * p;
|
||||
const char * d = NULL;
|
||||
const char * s = NULL;
|
||||
/* Each entry in the switch sets d to the directory to look in,
|
||||
* and optionally s to a subdirectory of d */
|
||||
// switch replaced with lookup table
|
||||
if (search[i].env) {
|
||||
if (!(d = getenv(search[i].env)))
|
||||
continue;
|
||||
} else if (search[i].func)
|
||||
d = search[i].func();
|
||||
else
|
||||
d = search[i].dir;
|
||||
s = search[i].sub;
|
||||
|
||||
p = malloc((d ? strlen(d) : 0) + (s ? strlen(s) : 0) + pl);
|
||||
sprintf(p, "%s%s%s%s%s", d ? d : "", (d && !HasTrailingSlash(d)) ? "/" : "",
|
||||
s ? s : "", (s && !HasTrailingSlash(s)) ? "/" : "",
|
||||
wfname);
|
||||
|
||||
if (access(p,F_OK))
|
||||
strcat(p, ext);
|
||||
if (!access(p,F_OK)) {
|
||||
lprintf(LO_INFO, " found %s\n", p);
|
||||
return p;
|
||||
}
|
||||
free(p);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
boolean I_StartDisplay(void) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void I_EndDisplay(void) {}
|
||||
int I_GetTime_RealTime(void) { return 0; }
|
||||
fixed_t I_GetTimeFrac (void) { return 0; }
|
||||
void I_GetTime_SaveMS(void) {}
|
||||
unsigned long I_GetRandomTimeSeed(void) { return 0; }
|
||||
|
||||
//const char* I_GetVersionString(char* buf, size_t sz);
|
||||
//const char* I_SigString(char* buf, size_t sz, int signum);
|
||||
|
||||
const char *I_DoomExeDir(void) { return SysIphoneGetAppDir(); }
|
||||
|
||||
//void I_SetAffinityMask(void);
|
||||
|
||||
|
||||
/*
|
||||
* I_Read
|
||||
*
|
||||
* cph 2001/11/18 - wrapper for read(2) which handles partial reads and aborts
|
||||
* on error.
|
||||
*/
|
||||
void I_Read(int fd, void* vbuf, size_t sz)
|
||||
{
|
||||
unsigned char* buf = vbuf;
|
||||
|
||||
while (sz) {
|
||||
int rc = read(fd,buf,sz);
|
||||
if (rc <= 0) {
|
||||
I_Error("I_Read: read failed: %s", rc ? strerror(errno) : "EOF");
|
||||
}
|
||||
sz -= rc; buf += rc;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* I_Filelength
|
||||
*
|
||||
* Return length of an open file.
|
||||
*/
|
||||
|
||||
int I_Filelength(int handle)
|
||||
{
|
||||
struct stat fileinfo;
|
||||
if (fstat(handle,&fileinfo) == -1)
|
||||
I_Error("I_Filelength: %s",strerror(errno));
|
||||
return (int)fileinfo.st_size;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void I_PreInitGraphics(void){}
|
||||
void I_CalculateRes(unsigned int width, unsigned int height){ (void)width; (void)height; }
|
||||
void I_ShutdownGraphics(void){}
|
||||
void I_SetPalette(int pal){ (void)pal; }
|
||||
void I_UpdateNoBlit (void){}
|
||||
void I_FinishUpdate (void){}
|
||||
int I_ScreenShot (const char *fname){ (void)fname; return 0;}
|
||||
|
||||
|
||||
// CPhipps -
|
||||
// I_SetRes
|
||||
// Sets the screen resolution
|
||||
void I_SetRes(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
I_CalculateRes(SCREENWIDTH, SCREENHEIGHT);
|
||||
|
||||
// set first three to standard values
|
||||
for (i=0; i<3; i++) {
|
||||
screens[i].width = SCREENWIDTH;
|
||||
screens[i].height = SCREENHEIGHT;
|
||||
screens[i].byte_pitch = SCREENPITCH;
|
||||
screens[i].short_pitch = SCREENPITCH / V_GetModePixelDepth(VID_MODE16);
|
||||
screens[i].int_pitch = SCREENPITCH / V_GetModePixelDepth(VID_MODE32);
|
||||
}
|
||||
|
||||
// statusbar
|
||||
screens[4].width = SCREENWIDTH;
|
||||
screens[4].height = (ST_SCALED_HEIGHT+1);
|
||||
screens[4].byte_pitch = SCREENPITCH;
|
||||
screens[4].short_pitch = SCREENPITCH / V_GetModePixelDepth(VID_MODE16);
|
||||
screens[4].int_pitch = SCREENPITCH / V_GetModePixelDepth(VID_MODE32);
|
||||
|
||||
lprintf(LO_INFO,"I_SetRes: Using resolution %dx%d\n", SCREENWIDTH, SCREENHEIGHT);
|
||||
}
|
||||
|
||||
void I_UpdateVideoMode(void)
|
||||
{
|
||||
lprintf(LO_INFO, "I_UpdateVideoMode: %dx%d\n", SCREENWIDTH, SCREENHEIGHT );
|
||||
|
||||
V_InitMode(VID_MODEGL);
|
||||
I_SetRes();
|
||||
#if 0
|
||||
screens[0].not_on_heap = true;
|
||||
screens[0].data = NULL;
|
||||
screens[0].byte_pitch = screen->pitch;
|
||||
screens[0].short_pitch = screen->pitch / V_GetModePixelDepth(VID_MODE16);
|
||||
screens[0].int_pitch = screen->pitch / V_GetModePixelDepth(VID_MODE32);
|
||||
#endif
|
||||
|
||||
V_AllocScreens();
|
||||
|
||||
R_InitBuffer(SCREENWIDTH, SCREENHEIGHT);
|
||||
gld_Init(SCREENWIDTH, SCREENHEIGHT);
|
||||
}
|
||||
|
||||
void I_InitGraphics(void)
|
||||
{
|
||||
char titlebuffer[2048];
|
||||
static int firsttime=1;
|
||||
|
||||
SCREENWIDTH = displaywidth;
|
||||
SCREENHEIGHT = displayheight;
|
||||
|
||||
if (firsttime)
|
||||
{
|
||||
firsttime = 0;
|
||||
|
||||
atexit(I_ShutdownGraphics);
|
||||
lprintf(LO_INFO, "I_InitGraphics: %dx%d\n", SCREENWIDTH, SCREENHEIGHT);
|
||||
|
||||
/* Set the video mode */
|
||||
I_UpdateVideoMode();
|
||||
|
||||
/* Setup the window title */
|
||||
strcpy(titlebuffer,PACKAGE);
|
||||
strcat(titlebuffer," ");
|
||||
strcat(titlebuffer,VERSION);
|
||||
// SDL_WM_SetCaption(titlebuffer, titlebuffer);
|
||||
|
||||
/* Initialize the input system */
|
||||
// I_InitInputs();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* I_StartTic
|
||||
* Called by D_DoomLoop,
|
||||
* called before processing each tic in a frame.
|
||||
* Quick syncronous operations are performed here.
|
||||
* Can call D_PostEvent.
|
||||
*/
|
||||
void I_StartTic (void){}
|
||||
|
||||
/* I_StartFrame
|
||||
* Called by D_DoomLoop,
|
||||
* called before processing any tics in a frame
|
||||
* (just after displaying a frame).
|
||||
* Time consuming syncronous operations
|
||||
* are performed here (joystick reading).
|
||||
* Can call D_PostEvent.
|
||||
*/
|
||||
|
||||
void I_StartFrame (void){}
|
||||
|
||||
|
||||
void I_Init() {
|
||||
I_InitSound();
|
||||
}
|
||||
|
||||
unsigned int SDL_GetTicks() { return 0; }
|
||||
|
||||
int (*I_GetTime)(void) = I_GetTime_RealTime;
|
||||
|
||||
842
common/ios/prboom/prboom.xcodeproj/project.pbxproj
Executable file
842
common/ios/prboom/prboom.xcodeproj/project.pbxproj
Executable file
@@ -0,0 +1,842 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 46;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
3DC1CA5814B63EC900680D02 /* am_map.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9B214B63EC900680D02 /* am_map.c */; };
|
||||
3DC1CA5914B63EC900680D02 /* am_map.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9B314B63EC900680D02 /* am_map.h */; };
|
||||
3DC1CA5A14B63EC900680D02 /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9B414B63EC900680D02 /* config.h */; };
|
||||
3DC1CA5B14B63EC900680D02 /* d_client.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9B514B63EC900680D02 /* d_client.c */; };
|
||||
3DC1CA5C14B63EC900680D02 /* d_deh.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9B614B63EC900680D02 /* d_deh.c */; };
|
||||
3DC1CA5D14B63EC900680D02 /* d_deh.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9B714B63EC900680D02 /* d_deh.h */; };
|
||||
3DC1CA5E14B63EC900680D02 /* d_englsh.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9B814B63EC900680D02 /* d_englsh.h */; };
|
||||
3DC1CA5F14B63EC900680D02 /* d_event.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9B914B63EC900680D02 /* d_event.h */; };
|
||||
3DC1CA6114B63EC900680D02 /* d_items.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9BB14B63EC900680D02 /* d_items.c */; };
|
||||
3DC1CA6214B63EC900680D02 /* d_items.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9BC14B63EC900680D02 /* d_items.h */; };
|
||||
3DC1CA6314B63EC900680D02 /* d_main.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9BD14B63EC900680D02 /* d_main.c */; };
|
||||
3DC1CA6414B63EC900680D02 /* d_main.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9BE14B63EC900680D02 /* d_main.h */; };
|
||||
3DC1CA6514B63EC900680D02 /* d_net.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9BF14B63EC900680D02 /* d_net.h */; };
|
||||
3DC1CA6614B63EC900680D02 /* d_player.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9C014B63EC900680D02 /* d_player.h */; };
|
||||
3DC1CA6714B63EC900680D02 /* d_server.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9C114B63EC900680D02 /* d_server.c */; };
|
||||
3DC1CA6814B63EC900680D02 /* d_think.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9C214B63EC900680D02 /* d_think.h */; };
|
||||
3DC1CA6914B63EC900680D02 /* d_ticcmd.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9C314B63EC900680D02 /* d_ticcmd.h */; };
|
||||
3DC1CA6A14B63EC900680D02 /* doomdata.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9C414B63EC900680D02 /* doomdata.h */; };
|
||||
3DC1CA6B14B63EC900680D02 /* doomdef.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9C514B63EC900680D02 /* doomdef.c */; };
|
||||
3DC1CA6C14B63EC900680D02 /* doomdef.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9C614B63EC900680D02 /* doomdef.h */; };
|
||||
3DC1CA6D14B63EC900680D02 /* doomstat.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9C714B63EC900680D02 /* doomstat.c */; };
|
||||
3DC1CA6E14B63EC900680D02 /* doomstat.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9C814B63EC900680D02 /* doomstat.h */; };
|
||||
3DC1CA6F14B63EC900680D02 /* doomtype.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9C914B63EC900680D02 /* doomtype.h */; };
|
||||
3DC1CA7014B63EC900680D02 /* dstrings.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9CA14B63EC900680D02 /* dstrings.c */; };
|
||||
3DC1CA7114B63EC900680D02 /* dstrings.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9CB14B63EC900680D02 /* dstrings.h */; };
|
||||
3DC1CA7214B63EC900680D02 /* f_finale.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9CC14B63EC900680D02 /* f_finale.c */; };
|
||||
3DC1CA7314B63EC900680D02 /* f_finale.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9CD14B63EC900680D02 /* f_finale.h */; };
|
||||
3DC1CA7414B63EC900680D02 /* f_wipe.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9CE14B63EC900680D02 /* f_wipe.c */; };
|
||||
3DC1CA7514B63EC900680D02 /* f_wipe.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9CF14B63EC900680D02 /* f_wipe.h */; };
|
||||
3DC1CA7614B63EC900680D02 /* g_game.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9D014B63EC900680D02 /* g_game.c */; };
|
||||
3DC1CA7714B63EC900680D02 /* g_game.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9D114B63EC900680D02 /* g_game.h */; };
|
||||
3DC1CA7814B63EC900680D02 /* gl_intern.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9D214B63EC900680D02 /* gl_intern.h */; };
|
||||
3DC1CA7914B63EC900680D02 /* gl_main.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9D314B63EC900680D02 /* gl_main.c */; };
|
||||
3DC1CA7A14B63EC900680D02 /* gl_struct.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9D414B63EC900680D02 /* gl_struct.h */; };
|
||||
3DC1CA7B14B63EC900680D02 /* gl_texture.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9D514B63EC900680D02 /* gl_texture.c */; };
|
||||
3DC1CA7C14B63EC900680D02 /* hu_lib.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9D614B63EC900680D02 /* hu_lib.c */; };
|
||||
3DC1CA7D14B63EC900680D02 /* hu_lib.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9D714B63EC900680D02 /* hu_lib.h */; };
|
||||
3DC1CA7E14B63EC900680D02 /* hu_stuff.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9D814B63EC900680D02 /* hu_stuff.c */; };
|
||||
3DC1CA7F14B63EC900680D02 /* hu_stuff.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9D914B63EC900680D02 /* hu_stuff.h */; };
|
||||
3DC1CA8014B63EC900680D02 /* i_joy.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9DA14B63EC900680D02 /* i_joy.h */; };
|
||||
3DC1CA8114B63EC900680D02 /* i_main.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9DB14B63EC900680D02 /* i_main.h */; };
|
||||
3DC1CA8214B63EC900680D02 /* i_network.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9DC14B63EC900680D02 /* i_network.h */; };
|
||||
3DC1CA8314B63EC900680D02 /* i_sound.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9DD14B63EC900680D02 /* i_sound.h */; };
|
||||
3DC1CA8414B63EC900680D02 /* i_system.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9DE14B63EC900680D02 /* i_system.h */; };
|
||||
3DC1CA8514B63EC900680D02 /* i_video.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9DF14B63EC900680D02 /* i_video.h */; };
|
||||
3DC1CA8614B63EC900680D02 /* info.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9E014B63EC900680D02 /* info.c */; };
|
||||
3DC1CA8714B63EC900680D02 /* info.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9E114B63EC900680D02 /* info.h */; };
|
||||
3DC1CA8814B63EC900680D02 /* lprintf.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9E214B63EC900680D02 /* lprintf.c */; };
|
||||
3DC1CA8914B63EC900680D02 /* lprintf.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9E314B63EC900680D02 /* lprintf.h */; };
|
||||
3DC1CA8A14B63EC900680D02 /* m_argv.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9E414B63EC900680D02 /* m_argv.c */; };
|
||||
3DC1CA8B14B63EC900680D02 /* m_argv.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9E514B63EC900680D02 /* m_argv.h */; };
|
||||
3DC1CA8C14B63EC900680D02 /* m_bbox.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9E614B63EC900680D02 /* m_bbox.c */; };
|
||||
3DC1CA8D14B63EC900680D02 /* m_bbox.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9E714B63EC900680D02 /* m_bbox.h */; };
|
||||
3DC1CA8E14B63EC900680D02 /* m_cheat.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9E814B63EC900680D02 /* m_cheat.c */; };
|
||||
3DC1CA8F14B63EC900680D02 /* m_cheat.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9E914B63EC900680D02 /* m_cheat.h */; };
|
||||
3DC1CA9014B63EC900680D02 /* m_fixed.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9EA14B63EC900680D02 /* m_fixed.h */; };
|
||||
3DC1CA9114B63EC900680D02 /* m_menu.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9EB14B63EC900680D02 /* m_menu.c */; };
|
||||
3DC1CA9214B63EC900680D02 /* m_menu.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9EC14B63EC900680D02 /* m_menu.h */; };
|
||||
3DC1CA9314B63EC900680D02 /* m_misc.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9ED14B63EC900680D02 /* m_misc.c */; };
|
||||
3DC1CA9414B63EC900680D02 /* m_misc.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9EE14B63EC900680D02 /* m_misc.h */; };
|
||||
3DC1CA9514B63EC900680D02 /* m_random.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9EF14B63EC900680D02 /* m_random.c */; };
|
||||
3DC1CA9614B63EC900680D02 /* m_random.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9F014B63EC900680D02 /* m_random.h */; };
|
||||
3DC1CA9714B63EC900680D02 /* m_swap.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9F114B63EC900680D02 /* m_swap.h */; };
|
||||
3DC1CA9814B63EC900680D02 /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9F314B63EC900680D02 /* md5.c */; };
|
||||
3DC1CA9914B63EC900680D02 /* md5.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9F414B63EC900680D02 /* md5.h */; };
|
||||
3DC1CA9A14B63EC900680D02 /* mmus2mid.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9F514B63EC900680D02 /* mmus2mid.c */; };
|
||||
3DC1CA9B14B63EC900680D02 /* mmus2mid.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9F614B63EC900680D02 /* mmus2mid.h */; };
|
||||
3DC1CA9C14B63EC900680D02 /* p_ceilng.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9F714B63EC900680D02 /* p_ceilng.c */; };
|
||||
3DC1CA9D14B63EC900680D02 /* p_checksum.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9F814B63EC900680D02 /* p_checksum.c */; };
|
||||
3DC1CA9E14B63EC900680D02 /* p_checksum.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9F914B63EC900680D02 /* p_checksum.h */; };
|
||||
3DC1CA9F14B63EC900680D02 /* p_doors.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9FA14B63EC900680D02 /* p_doors.c */; };
|
||||
3DC1CAA014B63EC900680D02 /* p_enemy.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9FB14B63EC900680D02 /* p_enemy.c */; };
|
||||
3DC1CAA114B63EC900680D02 /* p_enemy.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1C9FC14B63EC900680D02 /* p_enemy.h */; };
|
||||
3DC1CAA214B63EC900680D02 /* p_floor.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9FD14B63EC900680D02 /* p_floor.c */; };
|
||||
3DC1CAA314B63EC900680D02 /* p_genlin.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9FE14B63EC900680D02 /* p_genlin.c */; };
|
||||
3DC1CAA414B63EC900680D02 /* p_inter.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1C9FF14B63EC900680D02 /* p_inter.c */; };
|
||||
3DC1CAA514B63EC900680D02 /* p_inter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA0014B63EC900680D02 /* p_inter.h */; };
|
||||
3DC1CAA614B63EC900680D02 /* p_lights.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA0114B63EC900680D02 /* p_lights.c */; };
|
||||
3DC1CAA714B63EC900680D02 /* p_map.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA0214B63EC900680D02 /* p_map.c */; };
|
||||
3DC1CAA814B63EC900680D02 /* p_map.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA0314B63EC900680D02 /* p_map.h */; };
|
||||
3DC1CAA914B63EC900680D02 /* p_maputl.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA0414B63EC900680D02 /* p_maputl.c */; };
|
||||
3DC1CAAA14B63EC900680D02 /* p_maputl.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA0514B63EC900680D02 /* p_maputl.h */; };
|
||||
3DC1CAAB14B63EC900680D02 /* p_mobj.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA0614B63EC900680D02 /* p_mobj.c */; };
|
||||
3DC1CAAC14B63EC900680D02 /* p_mobj.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA0714B63EC900680D02 /* p_mobj.h */; };
|
||||
3DC1CAAD14B63EC900680D02 /* p_plats.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA0814B63EC900680D02 /* p_plats.c */; };
|
||||
3DC1CAAE14B63EC900680D02 /* p_pspr.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA0914B63EC900680D02 /* p_pspr.c */; };
|
||||
3DC1CAAF14B63EC900680D02 /* p_pspr.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA0A14B63EC900680D02 /* p_pspr.h */; };
|
||||
3DC1CAB014B63EC900680D02 /* p_saveg.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA0B14B63EC900680D02 /* p_saveg.c */; };
|
||||
3DC1CAB114B63EC900680D02 /* p_saveg.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA0C14B63EC900680D02 /* p_saveg.h */; };
|
||||
3DC1CAB214B63EC900680D02 /* p_setup.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA0D14B63EC900680D02 /* p_setup.c */; };
|
||||
3DC1CAB314B63EC900680D02 /* p_setup.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA0E14B63EC900680D02 /* p_setup.h */; };
|
||||
3DC1CAB414B63EC900680D02 /* p_sight.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA0F14B63EC900680D02 /* p_sight.c */; };
|
||||
3DC1CAB514B63EC900680D02 /* p_spec.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA1014B63EC900680D02 /* p_spec.c */; };
|
||||
3DC1CAB614B63EC900680D02 /* p_spec.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA1114B63EC900680D02 /* p_spec.h */; };
|
||||
3DC1CAB714B63EC900680D02 /* p_switch.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA1214B63EC900680D02 /* p_switch.c */; };
|
||||
3DC1CAB814B63EC900680D02 /* p_telept.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA1314B63EC900680D02 /* p_telept.c */; };
|
||||
3DC1CAB914B63EC900680D02 /* p_tick.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA1414B63EC900680D02 /* p_tick.c */; };
|
||||
3DC1CABA14B63EC900680D02 /* p_tick.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA1514B63EC900680D02 /* p_tick.h */; };
|
||||
3DC1CABB14B63EC900680D02 /* p_user.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA1614B63EC900680D02 /* p_user.c */; };
|
||||
3DC1CABC14B63EC900680D02 /* p_user.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA1714B63EC900680D02 /* p_user.h */; };
|
||||
3DC1CABD14B63EC900680D02 /* protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA1814B63EC900680D02 /* protocol.h */; };
|
||||
3DC1CABE14B63EC900680D02 /* r_bsp.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA1914B63EC900680D02 /* r_bsp.c */; };
|
||||
3DC1CABF14B63EC900680D02 /* r_bsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA1A14B63EC900680D02 /* r_bsp.h */; };
|
||||
3DC1CAC014B63EC900680D02 /* r_data.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA1B14B63EC900680D02 /* r_data.c */; };
|
||||
3DC1CAC114B63EC900680D02 /* r_data.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA1C14B63EC900680D02 /* r_data.h */; };
|
||||
3DC1CAC214B63EC900680D02 /* r_defs.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA1D14B63EC900680D02 /* r_defs.h */; };
|
||||
3DC1CAC314B63EC900680D02 /* r_demo.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA1E14B63EC900680D02 /* r_demo.c */; };
|
||||
3DC1CAC414B63EC900680D02 /* r_demo.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA1F14B63EC900680D02 /* r_demo.h */; };
|
||||
3DC1CAC514B63EC900680D02 /* r_draw.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA2014B63EC900680D02 /* r_draw.c */; };
|
||||
3DC1CAC614B63EC900680D02 /* r_draw.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA2114B63EC900680D02 /* r_draw.h */; };
|
||||
3DC1CAC714B63EC900680D02 /* r_filter.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA2614B63EC900680D02 /* r_filter.c */; };
|
||||
3DC1CAC814B63EC900680D02 /* r_filter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA2714B63EC900680D02 /* r_filter.h */; };
|
||||
3DC1CAC914B63EC900680D02 /* r_fps.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA2814B63EC900680D02 /* r_fps.c */; };
|
||||
3DC1CACA14B63EC900680D02 /* r_fps.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA2914B63EC900680D02 /* r_fps.h */; };
|
||||
3DC1CACB14B63EC900680D02 /* r_main.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA2A14B63EC900680D02 /* r_main.c */; };
|
||||
3DC1CACC14B63EC900680D02 /* r_main.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA2B14B63EC900680D02 /* r_main.h */; };
|
||||
3DC1CACD14B63EC900680D02 /* r_patch.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA2C14B63EC900680D02 /* r_patch.c */; };
|
||||
3DC1CACE14B63EC900680D02 /* r_patch.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA2D14B63EC900680D02 /* r_patch.h */; };
|
||||
3DC1CACF14B63EC900680D02 /* r_plane.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA2E14B63EC900680D02 /* r_plane.c */; };
|
||||
3DC1CAD014B63EC900680D02 /* r_plane.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA2F14B63EC900680D02 /* r_plane.h */; };
|
||||
3DC1CAD114B63EC900680D02 /* r_segs.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA3014B63EC900680D02 /* r_segs.c */; };
|
||||
3DC1CAD214B63EC900680D02 /* r_segs.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA3114B63EC900680D02 /* r_segs.h */; };
|
||||
3DC1CAD314B63EC900680D02 /* r_sky.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA3214B63EC900680D02 /* r_sky.c */; };
|
||||
3DC1CAD414B63EC900680D02 /* r_sky.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA3314B63EC900680D02 /* r_sky.h */; };
|
||||
3DC1CAD514B63EC900680D02 /* r_state.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA3414B63EC900680D02 /* r_state.h */; };
|
||||
3DC1CAD614B63EC900680D02 /* r_things.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA3514B63EC900680D02 /* r_things.c */; };
|
||||
3DC1CAD714B63EC900680D02 /* r_things.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA3614B63EC900680D02 /* r_things.h */; };
|
||||
3DC1CAD814B63EC900680D02 /* s_sound.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA3714B63EC900680D02 /* s_sound.c */; };
|
||||
3DC1CAD914B63EC900680D02 /* s_sound.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA3814B63EC900680D02 /* s_sound.h */; };
|
||||
3DC1CADD14B63ECA00680D02 /* i_sound.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA3D14B63EC900680D02 /* i_sound.c */; };
|
||||
3DC1CAE114B63ECA00680D02 /* SDL_opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA4114B63EC900680D02 /* SDL_opengl.h */; };
|
||||
3DC1CAE214B63ECA00680D02 /* sounds.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA4214B63EC900680D02 /* sounds.c */; };
|
||||
3DC1CAE314B63ECA00680D02 /* sounds.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA4314B63EC900680D02 /* sounds.h */; };
|
||||
3DC1CAE414B63ECA00680D02 /* st_lib.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA4414B63EC900680D02 /* st_lib.c */; };
|
||||
3DC1CAE514B63ECA00680D02 /* st_lib.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA4514B63EC900680D02 /* st_lib.h */; };
|
||||
3DC1CAE614B63ECA00680D02 /* st_stuff.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA4614B63EC900680D02 /* st_stuff.c */; };
|
||||
3DC1CAE714B63ECA00680D02 /* st_stuff.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA4714B63EC900680D02 /* st_stuff.h */; };
|
||||
3DC1CAE814B63ECA00680D02 /* tables.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA4814B63EC900680D02 /* tables.c */; };
|
||||
3DC1CAE914B63ECA00680D02 /* tables.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA4914B63EC900680D02 /* tables.h */; };
|
||||
3DC1CAEA14B63ECA00680D02 /* v_video.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA4A14B63EC900680D02 /* v_video.c */; };
|
||||
3DC1CAEB14B63ECA00680D02 /* v_video.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA4B14B63EC900680D02 /* v_video.h */; };
|
||||
3DC1CAEC14B63ECA00680D02 /* version.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA4C14B63EC900680D02 /* version.c */; };
|
||||
3DC1CAED14B63ECA00680D02 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA4D14B63EC900680D02 /* version.h */; };
|
||||
3DC1CAEE14B63ECA00680D02 /* w_memcache.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA4E14B63EC900680D02 /* w_memcache.c */; };
|
||||
3DC1CAEF14B63ECA00680D02 /* w_mmap.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA4F14B63EC900680D02 /* w_mmap.c */; };
|
||||
3DC1CAF014B63ECA00680D02 /* w_wad.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA5014B63EC900680D02 /* w_wad.c */; };
|
||||
3DC1CAF114B63ECA00680D02 /* w_wad.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA5114B63EC900680D02 /* w_wad.h */; };
|
||||
3DC1CAF214B63ECA00680D02 /* wi_stuff.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA5214B63EC900680D02 /* wi_stuff.c */; };
|
||||
3DC1CAF314B63ECA00680D02 /* wi_stuff.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA5314B63EC900680D02 /* wi_stuff.h */; };
|
||||
3DC1CAF414B63ECA00680D02 /* z_bmalloc.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA5414B63EC900680D02 /* z_bmalloc.c */; };
|
||||
3DC1CAF514B63ECA00680D02 /* z_bmalloc.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA5514B63EC900680D02 /* z_bmalloc.h */; };
|
||||
3DC1CAF614B63ECA00680D02 /* z_zone.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DC1CA5614B63EC900680D02 /* z_zone.c */; };
|
||||
3DC1CAF714B63ECA00680D02 /* z_zone.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DC1CA5714B63EC900680D02 /* z_zone.h */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
3DC1C85514B63E1B00680D02 /* libprboom.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libprboom.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
3DC1C9B214B63EC900680D02 /* am_map.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = am_map.c; path = ../../prboom/am_map.c; sourceTree = "<group>"; };
|
||||
3DC1C9B314B63EC900680D02 /* am_map.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = am_map.h; path = ../../prboom/am_map.h; sourceTree = "<group>"; };
|
||||
3DC1C9B414B63EC900680D02 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = config.h; path = ../../prboom/config.h; sourceTree = "<group>"; };
|
||||
3DC1C9B514B63EC900680D02 /* d_client.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = d_client.c; path = ../../prboom/d_client.c; sourceTree = "<group>"; };
|
||||
3DC1C9B614B63EC900680D02 /* d_deh.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = d_deh.c; path = ../../prboom/d_deh.c; sourceTree = "<group>"; };
|
||||
3DC1C9B714B63EC900680D02 /* d_deh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = d_deh.h; path = ../../prboom/d_deh.h; sourceTree = "<group>"; };
|
||||
3DC1C9B814B63EC900680D02 /* d_englsh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = d_englsh.h; path = ../../prboom/d_englsh.h; sourceTree = "<group>"; };
|
||||
3DC1C9B914B63EC900680D02 /* d_event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = d_event.h; path = ../../prboom/d_event.h; sourceTree = "<group>"; };
|
||||
3DC1C9BB14B63EC900680D02 /* d_items.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = d_items.c; path = ../../prboom/d_items.c; sourceTree = "<group>"; };
|
||||
3DC1C9BC14B63EC900680D02 /* d_items.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = d_items.h; path = ../../prboom/d_items.h; sourceTree = "<group>"; };
|
||||
3DC1C9BD14B63EC900680D02 /* d_main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = d_main.c; path = ../../prboom/d_main.c; sourceTree = "<group>"; };
|
||||
3DC1C9BE14B63EC900680D02 /* d_main.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = d_main.h; path = ../../prboom/d_main.h; sourceTree = "<group>"; };
|
||||
3DC1C9BF14B63EC900680D02 /* d_net.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = d_net.h; path = ../../prboom/d_net.h; sourceTree = "<group>"; };
|
||||
3DC1C9C014B63EC900680D02 /* d_player.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = d_player.h; path = ../../prboom/d_player.h; sourceTree = "<group>"; };
|
||||
3DC1C9C114B63EC900680D02 /* d_server.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = d_server.c; path = ../../prboom/d_server.c; sourceTree = "<group>"; };
|
||||
3DC1C9C214B63EC900680D02 /* d_think.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = d_think.h; path = ../../prboom/d_think.h; sourceTree = "<group>"; };
|
||||
3DC1C9C314B63EC900680D02 /* d_ticcmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = d_ticcmd.h; path = ../../prboom/d_ticcmd.h; sourceTree = "<group>"; };
|
||||
3DC1C9C414B63EC900680D02 /* doomdata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = doomdata.h; path = ../../prboom/doomdata.h; sourceTree = "<group>"; };
|
||||
3DC1C9C514B63EC900680D02 /* doomdef.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = doomdef.c; path = ../../prboom/doomdef.c; sourceTree = "<group>"; };
|
||||
3DC1C9C614B63EC900680D02 /* doomdef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = doomdef.h; path = ../../prboom/doomdef.h; sourceTree = "<group>"; };
|
||||
3DC1C9C714B63EC900680D02 /* doomstat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = doomstat.c; path = ../../prboom/doomstat.c; sourceTree = "<group>"; };
|
||||
3DC1C9C814B63EC900680D02 /* doomstat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = doomstat.h; path = ../../prboom/doomstat.h; sourceTree = "<group>"; };
|
||||
3DC1C9C914B63EC900680D02 /* doomtype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = doomtype.h; path = ../../prboom/doomtype.h; sourceTree = "<group>"; };
|
||||
3DC1C9CA14B63EC900680D02 /* dstrings.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dstrings.c; path = ../../prboom/dstrings.c; sourceTree = "<group>"; };
|
||||
3DC1C9CB14B63EC900680D02 /* dstrings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dstrings.h; path = ../../prboom/dstrings.h; sourceTree = "<group>"; };
|
||||
3DC1C9CC14B63EC900680D02 /* f_finale.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = f_finale.c; path = ../../prboom/f_finale.c; sourceTree = "<group>"; };
|
||||
3DC1C9CD14B63EC900680D02 /* f_finale.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = f_finale.h; path = ../../prboom/f_finale.h; sourceTree = "<group>"; };
|
||||
3DC1C9CE14B63EC900680D02 /* f_wipe.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = f_wipe.c; path = ../../prboom/f_wipe.c; sourceTree = "<group>"; };
|
||||
3DC1C9CF14B63EC900680D02 /* f_wipe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = f_wipe.h; path = ../../prboom/f_wipe.h; sourceTree = "<group>"; };
|
||||
3DC1C9D014B63EC900680D02 /* g_game.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = g_game.c; path = ../../prboom/g_game.c; sourceTree = "<group>"; };
|
||||
3DC1C9D114B63EC900680D02 /* g_game.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = g_game.h; path = ../../prboom/g_game.h; sourceTree = "<group>"; };
|
||||
3DC1C9D214B63EC900680D02 /* gl_intern.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gl_intern.h; path = ../../prboom/gl_intern.h; sourceTree = "<group>"; };
|
||||
3DC1C9D314B63EC900680D02 /* gl_main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = gl_main.c; path = ../../prboom/gl_main.c; sourceTree = "<group>"; };
|
||||
3DC1C9D414B63EC900680D02 /* gl_struct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gl_struct.h; path = ../../prboom/gl_struct.h; sourceTree = "<group>"; };
|
||||
3DC1C9D514B63EC900680D02 /* gl_texture.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = gl_texture.c; path = ../../prboom/gl_texture.c; sourceTree = "<group>"; };
|
||||
3DC1C9D614B63EC900680D02 /* hu_lib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hu_lib.c; path = ../../prboom/hu_lib.c; sourceTree = "<group>"; };
|
||||
3DC1C9D714B63EC900680D02 /* hu_lib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hu_lib.h; path = ../../prboom/hu_lib.h; sourceTree = "<group>"; };
|
||||
3DC1C9D814B63EC900680D02 /* hu_stuff.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hu_stuff.c; path = ../../prboom/hu_stuff.c; sourceTree = "<group>"; };
|
||||
3DC1C9D914B63EC900680D02 /* hu_stuff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hu_stuff.h; path = ../../prboom/hu_stuff.h; sourceTree = "<group>"; };
|
||||
3DC1C9DA14B63EC900680D02 /* i_joy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = i_joy.h; path = ../../prboom/i_joy.h; sourceTree = "<group>"; };
|
||||
3DC1C9DB14B63EC900680D02 /* i_main.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = i_main.h; path = ../../prboom/i_main.h; sourceTree = "<group>"; };
|
||||
3DC1C9DC14B63EC900680D02 /* i_network.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = i_network.h; path = ../../prboom/i_network.h; sourceTree = "<group>"; };
|
||||
3DC1C9DD14B63EC900680D02 /* i_sound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = i_sound.h; path = ../../prboom/i_sound.h; sourceTree = "<group>"; };
|
||||
3DC1C9DE14B63EC900680D02 /* i_system.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = i_system.h; path = ../../prboom/i_system.h; sourceTree = "<group>"; };
|
||||
3DC1C9DF14B63EC900680D02 /* i_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = i_video.h; path = ../../prboom/i_video.h; sourceTree = "<group>"; };
|
||||
3DC1C9E014B63EC900680D02 /* info.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = info.c; path = ../../prboom/info.c; sourceTree = "<group>"; };
|
||||
3DC1C9E114B63EC900680D02 /* info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = info.h; path = ../../prboom/info.h; sourceTree = "<group>"; };
|
||||
3DC1C9E214B63EC900680D02 /* lprintf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lprintf.c; path = ../../prboom/lprintf.c; sourceTree = "<group>"; };
|
||||
3DC1C9E314B63EC900680D02 /* lprintf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lprintf.h; path = ../../prboom/lprintf.h; sourceTree = "<group>"; };
|
||||
3DC1C9E414B63EC900680D02 /* m_argv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = m_argv.c; path = ../../prboom/m_argv.c; sourceTree = "<group>"; };
|
||||
3DC1C9E514B63EC900680D02 /* m_argv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = m_argv.h; path = ../../prboom/m_argv.h; sourceTree = "<group>"; };
|
||||
3DC1C9E614B63EC900680D02 /* m_bbox.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = m_bbox.c; path = ../../prboom/m_bbox.c; sourceTree = "<group>"; };
|
||||
3DC1C9E714B63EC900680D02 /* m_bbox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = m_bbox.h; path = ../../prboom/m_bbox.h; sourceTree = "<group>"; };
|
||||
3DC1C9E814B63EC900680D02 /* m_cheat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = m_cheat.c; path = ../../prboom/m_cheat.c; sourceTree = "<group>"; };
|
||||
3DC1C9E914B63EC900680D02 /* m_cheat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = m_cheat.h; path = ../../prboom/m_cheat.h; sourceTree = "<group>"; };
|
||||
3DC1C9EA14B63EC900680D02 /* m_fixed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = m_fixed.h; path = ../../prboom/m_fixed.h; sourceTree = "<group>"; };
|
||||
3DC1C9EB14B63EC900680D02 /* m_menu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = m_menu.c; path = ../../prboom/m_menu.c; sourceTree = "<group>"; };
|
||||
3DC1C9EC14B63EC900680D02 /* m_menu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = m_menu.h; path = ../../prboom/m_menu.h; sourceTree = "<group>"; };
|
||||
3DC1C9ED14B63EC900680D02 /* m_misc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = m_misc.c; path = ../../prboom/m_misc.c; sourceTree = "<group>"; };
|
||||
3DC1C9EE14B63EC900680D02 /* m_misc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = m_misc.h; path = ../../prboom/m_misc.h; sourceTree = "<group>"; };
|
||||
3DC1C9EF14B63EC900680D02 /* m_random.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = m_random.c; path = ../../prboom/m_random.c; sourceTree = "<group>"; };
|
||||
3DC1C9F014B63EC900680D02 /* m_random.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = m_random.h; path = ../../prboom/m_random.h; sourceTree = "<group>"; };
|
||||
3DC1C9F114B63EC900680D02 /* m_swap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = m_swap.h; path = ../../prboom/m_swap.h; sourceTree = "<group>"; };
|
||||
3DC1C9F214B63EC900680D02 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Makefile.am; path = ../../prboom/Makefile.am; sourceTree = "<group>"; };
|
||||
3DC1C9F314B63EC900680D02 /* md5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = md5.c; path = ../../prboom/md5.c; sourceTree = "<group>"; };
|
||||
3DC1C9F414B63EC900680D02 /* md5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = md5.h; path = ../../prboom/md5.h; sourceTree = "<group>"; };
|
||||
3DC1C9F514B63EC900680D02 /* mmus2mid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mmus2mid.c; path = ../../prboom/mmus2mid.c; sourceTree = "<group>"; };
|
||||
3DC1C9F614B63EC900680D02 /* mmus2mid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mmus2mid.h; path = ../../prboom/mmus2mid.h; sourceTree = "<group>"; };
|
||||
3DC1C9F714B63EC900680D02 /* p_ceilng.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = p_ceilng.c; path = ../../prboom/p_ceilng.c; sourceTree = "<group>"; };
|
||||
3DC1C9F814B63EC900680D02 /* p_checksum.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = p_checksum.c; path = ../../prboom/p_checksum.c; sourceTree = "<group>"; };
|
||||
3DC1C9F914B63EC900680D02 /* p_checksum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = p_checksum.h; path = ../../prboom/p_checksum.h; sourceTree = "<group>"; };
|
||||
3DC1C9FA14B63EC900680D02 /* p_doors.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = p_doors.c; path = ../../prboom/p_doors.c; sourceTree = "<group>"; };
|
||||
3DC1C9FB14B63EC900680D02 /* p_enemy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = p_enemy.c; path = ../../prboom/p_enemy.c; sourceTree = "<group>"; };
|
||||
3DC1C9FC14B63EC900680D02 /* p_enemy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = p_enemy.h; path = ../../prboom/p_enemy.h; sourceTree = "<group>"; };
|
||||
3DC1C9FD14B63EC900680D02 /* p_floor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = p_floor.c; path = ../../prboom/p_floor.c; sourceTree = "<group>"; };
|
||||
3DC1C9FE14B63EC900680D02 /* p_genlin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = p_genlin.c; path = ../../prboom/p_genlin.c; sourceTree = "<group>"; };
|
||||
3DC1C9FF14B63EC900680D02 /* p_inter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = p_inter.c; path = ../../prboom/p_inter.c; sourceTree = "<group>"; };
|
||||
3DC1CA0014B63EC900680D02 /* p_inter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = p_inter.h; path = ../../prboom/p_inter.h; sourceTree = "<group>"; };
|
||||
3DC1CA0114B63EC900680D02 /* p_lights.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = p_lights.c; path = ../../prboom/p_lights.c; sourceTree = "<group>"; };
|
||||
3DC1CA0214B63EC900680D02 /* p_map.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = p_map.c; path = ../../prboom/p_map.c; sourceTree = "<group>"; };
|
||||
3DC1CA0314B63EC900680D02 /* p_map.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = p_map.h; path = ../../prboom/p_map.h; sourceTree = "<group>"; };
|
||||
3DC1CA0414B63EC900680D02 /* p_maputl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = p_maputl.c; path = ../../prboom/p_maputl.c; sourceTree = "<group>"; };
|
||||
3DC1CA0514B63EC900680D02 /* p_maputl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = p_maputl.h; path = ../../prboom/p_maputl.h; sourceTree = "<group>"; };
|
||||
3DC1CA0614B63EC900680D02 /* p_mobj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = p_mobj.c; path = ../../prboom/p_mobj.c; sourceTree = "<group>"; };
|
||||
3DC1CA0714B63EC900680D02 /* p_mobj.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = p_mobj.h; path = ../../prboom/p_mobj.h; sourceTree = "<group>"; };
|
||||
3DC1CA0814B63EC900680D02 /* p_plats.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = p_plats.c; path = ../../prboom/p_plats.c; sourceTree = "<group>"; };
|
||||
3DC1CA0914B63EC900680D02 /* p_pspr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = p_pspr.c; path = ../../prboom/p_pspr.c; sourceTree = "<group>"; };
|
||||
3DC1CA0A14B63EC900680D02 /* p_pspr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = p_pspr.h; path = ../../prboom/p_pspr.h; sourceTree = "<group>"; };
|
||||
3DC1CA0B14B63EC900680D02 /* p_saveg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = p_saveg.c; path = ../../prboom/p_saveg.c; sourceTree = "<group>"; };
|
||||
3DC1CA0C14B63EC900680D02 /* p_saveg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = p_saveg.h; path = ../../prboom/p_saveg.h; sourceTree = "<group>"; };
|
||||
3DC1CA0D14B63EC900680D02 /* p_setup.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = p_setup.c; path = ../../prboom/p_setup.c; sourceTree = "<group>"; };
|
||||
3DC1CA0E14B63EC900680D02 /* p_setup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = p_setup.h; path = ../../prboom/p_setup.h; sourceTree = "<group>"; };
|
||||
3DC1CA0F14B63EC900680D02 /* p_sight.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = p_sight.c; path = ../../prboom/p_sight.c; sourceTree = "<group>"; };
|
||||
3DC1CA1014B63EC900680D02 /* p_spec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = p_spec.c; path = ../../prboom/p_spec.c; sourceTree = "<group>"; };
|
||||
3DC1CA1114B63EC900680D02 /* p_spec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = p_spec.h; path = ../../prboom/p_spec.h; sourceTree = "<group>"; };
|
||||
3DC1CA1214B63EC900680D02 /* p_switch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = p_switch.c; path = ../../prboom/p_switch.c; sourceTree = "<group>"; };
|
||||
3DC1CA1314B63EC900680D02 /* p_telept.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = p_telept.c; path = ../../prboom/p_telept.c; sourceTree = "<group>"; };
|
||||
3DC1CA1414B63EC900680D02 /* p_tick.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = p_tick.c; path = ../../prboom/p_tick.c; sourceTree = "<group>"; };
|
||||
3DC1CA1514B63EC900680D02 /* p_tick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = p_tick.h; path = ../../prboom/p_tick.h; sourceTree = "<group>"; };
|
||||
3DC1CA1614B63EC900680D02 /* p_user.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = p_user.c; path = ../../prboom/p_user.c; sourceTree = "<group>"; };
|
||||
3DC1CA1714B63EC900680D02 /* p_user.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = p_user.h; path = ../../prboom/p_user.h; sourceTree = "<group>"; };
|
||||
3DC1CA1814B63EC900680D02 /* protocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = protocol.h; path = ../../prboom/protocol.h; sourceTree = "<group>"; };
|
||||
3DC1CA1914B63EC900680D02 /* r_bsp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = r_bsp.c; path = ../../prboom/r_bsp.c; sourceTree = "<group>"; };
|
||||
3DC1CA1A14B63EC900680D02 /* r_bsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = r_bsp.h; path = ../../prboom/r_bsp.h; sourceTree = "<group>"; };
|
||||
3DC1CA1B14B63EC900680D02 /* r_data.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = r_data.c; path = ../../prboom/r_data.c; sourceTree = "<group>"; };
|
||||
3DC1CA1C14B63EC900680D02 /* r_data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = r_data.h; path = ../../prboom/r_data.h; sourceTree = "<group>"; };
|
||||
3DC1CA1D14B63EC900680D02 /* r_defs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = r_defs.h; path = ../../prboom/r_defs.h; sourceTree = "<group>"; };
|
||||
3DC1CA1E14B63EC900680D02 /* r_demo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = r_demo.c; path = ../../prboom/r_demo.c; sourceTree = "<group>"; };
|
||||
3DC1CA1F14B63EC900680D02 /* r_demo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = r_demo.h; path = ../../prboom/r_demo.h; sourceTree = "<group>"; };
|
||||
3DC1CA2014B63EC900680D02 /* r_draw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = r_draw.c; path = ../../prboom/r_draw.c; sourceTree = "<group>"; };
|
||||
3DC1CA2114B63EC900680D02 /* r_draw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = r_draw.h; path = ../../prboom/r_draw.h; sourceTree = "<group>"; };
|
||||
3DC1CA2214B63EC900680D02 /* r_drawcolpipeline.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = r_drawcolpipeline.inl; path = ../../prboom/r_drawcolpipeline.inl; sourceTree = "<group>"; };
|
||||
3DC1CA2314B63EC900680D02 /* r_drawcolumn.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = r_drawcolumn.inl; path = ../../prboom/r_drawcolumn.inl; sourceTree = "<group>"; };
|
||||
3DC1CA2414B63EC900680D02 /* r_drawflush.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = r_drawflush.inl; path = ../../prboom/r_drawflush.inl; sourceTree = "<group>"; };
|
||||
3DC1CA2514B63EC900680D02 /* r_drawspan.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = r_drawspan.inl; path = ../../prboom/r_drawspan.inl; sourceTree = "<group>"; };
|
||||
3DC1CA2614B63EC900680D02 /* r_filter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = r_filter.c; path = ../../prboom/r_filter.c; sourceTree = "<group>"; };
|
||||
3DC1CA2714B63EC900680D02 /* r_filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = r_filter.h; path = ../../prboom/r_filter.h; sourceTree = "<group>"; };
|
||||
3DC1CA2814B63EC900680D02 /* r_fps.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = r_fps.c; path = ../../prboom/r_fps.c; sourceTree = "<group>"; };
|
||||
3DC1CA2914B63EC900680D02 /* r_fps.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = r_fps.h; path = ../../prboom/r_fps.h; sourceTree = "<group>"; };
|
||||
3DC1CA2A14B63EC900680D02 /* r_main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = r_main.c; path = ../../prboom/r_main.c; sourceTree = "<group>"; };
|
||||
3DC1CA2B14B63EC900680D02 /* r_main.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = r_main.h; path = ../../prboom/r_main.h; sourceTree = "<group>"; };
|
||||
3DC1CA2C14B63EC900680D02 /* r_patch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = r_patch.c; path = ../../prboom/r_patch.c; sourceTree = "<group>"; };
|
||||
3DC1CA2D14B63EC900680D02 /* r_patch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = r_patch.h; path = ../../prboom/r_patch.h; sourceTree = "<group>"; };
|
||||
3DC1CA2E14B63EC900680D02 /* r_plane.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = r_plane.c; path = ../../prboom/r_plane.c; sourceTree = "<group>"; };
|
||||
3DC1CA2F14B63EC900680D02 /* r_plane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = r_plane.h; path = ../../prboom/r_plane.h; sourceTree = "<group>"; };
|
||||
3DC1CA3014B63EC900680D02 /* r_segs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = r_segs.c; path = ../../prboom/r_segs.c; sourceTree = "<group>"; };
|
||||
3DC1CA3114B63EC900680D02 /* r_segs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = r_segs.h; path = ../../prboom/r_segs.h; sourceTree = "<group>"; };
|
||||
3DC1CA3214B63EC900680D02 /* r_sky.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = r_sky.c; path = ../../prboom/r_sky.c; sourceTree = "<group>"; };
|
||||
3DC1CA3314B63EC900680D02 /* r_sky.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = r_sky.h; path = ../../prboom/r_sky.h; sourceTree = "<group>"; };
|
||||
3DC1CA3414B63EC900680D02 /* r_state.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = r_state.h; path = ../../prboom/r_state.h; sourceTree = "<group>"; };
|
||||
3DC1CA3514B63EC900680D02 /* r_things.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = r_things.c; path = ../../prboom/r_things.c; sourceTree = "<group>"; };
|
||||
3DC1CA3614B63EC900680D02 /* r_things.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = r_things.h; path = ../../prboom/r_things.h; sourceTree = "<group>"; };
|
||||
3DC1CA3714B63EC900680D02 /* s_sound.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = s_sound.c; path = ../../prboom/s_sound.c; sourceTree = "<group>"; };
|
||||
3DC1CA3814B63EC900680D02 /* s_sound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = s_sound.h; path = ../../prboom/s_sound.h; sourceTree = "<group>"; };
|
||||
3DC1CA3D14B63EC900680D02 /* i_sound.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = i_sound.c; sourceTree = "<group>"; };
|
||||
3DC1CA4114B63EC900680D02 /* SDL_opengl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_opengl.h; path = ../../prboom/SDL_opengl.h; sourceTree = "<group>"; };
|
||||
3DC1CA4214B63EC900680D02 /* sounds.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sounds.c; path = ../../prboom/sounds.c; sourceTree = "<group>"; };
|
||||
3DC1CA4314B63EC900680D02 /* sounds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sounds.h; path = ../../prboom/sounds.h; sourceTree = "<group>"; };
|
||||
3DC1CA4414B63EC900680D02 /* st_lib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = st_lib.c; path = ../../prboom/st_lib.c; sourceTree = "<group>"; };
|
||||
3DC1CA4514B63EC900680D02 /* st_lib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = st_lib.h; path = ../../prboom/st_lib.h; sourceTree = "<group>"; };
|
||||
3DC1CA4614B63EC900680D02 /* st_stuff.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = st_stuff.c; path = ../../prboom/st_stuff.c; sourceTree = "<group>"; };
|
||||
3DC1CA4714B63EC900680D02 /* st_stuff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = st_stuff.h; path = ../../prboom/st_stuff.h; sourceTree = "<group>"; };
|
||||
3DC1CA4814B63EC900680D02 /* tables.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tables.c; path = ../../prboom/tables.c; sourceTree = "<group>"; };
|
||||
3DC1CA4914B63EC900680D02 /* tables.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tables.h; path = ../../prboom/tables.h; sourceTree = "<group>"; };
|
||||
3DC1CA4A14B63EC900680D02 /* v_video.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = v_video.c; path = ../../prboom/v_video.c; sourceTree = "<group>"; };
|
||||
3DC1CA4B14B63EC900680D02 /* v_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = v_video.h; path = ../../prboom/v_video.h; sourceTree = "<group>"; };
|
||||
3DC1CA4C14B63EC900680D02 /* version.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = version.c; path = ../../prboom/version.c; sourceTree = "<group>"; };
|
||||
3DC1CA4D14B63EC900680D02 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = version.h; path = ../../prboom/version.h; sourceTree = "<group>"; };
|
||||
3DC1CA4E14B63EC900680D02 /* w_memcache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = w_memcache.c; path = ../../prboom/w_memcache.c; sourceTree = "<group>"; };
|
||||
3DC1CA4F14B63EC900680D02 /* w_mmap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = w_mmap.c; path = ../../prboom/w_mmap.c; sourceTree = "<group>"; };
|
||||
3DC1CA5014B63EC900680D02 /* w_wad.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = w_wad.c; path = ../../prboom/w_wad.c; sourceTree = "<group>"; };
|
||||
3DC1CA5114B63EC900680D02 /* w_wad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = w_wad.h; path = ../../prboom/w_wad.h; sourceTree = "<group>"; };
|
||||
3DC1CA5214B63EC900680D02 /* wi_stuff.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = wi_stuff.c; path = ../../prboom/wi_stuff.c; sourceTree = "<group>"; };
|
||||
3DC1CA5314B63EC900680D02 /* wi_stuff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = wi_stuff.h; path = ../../prboom/wi_stuff.h; sourceTree = "<group>"; };
|
||||
3DC1CA5414B63EC900680D02 /* z_bmalloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = z_bmalloc.c; path = ../../prboom/z_bmalloc.c; sourceTree = "<group>"; };
|
||||
3DC1CA5514B63EC900680D02 /* z_bmalloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = z_bmalloc.h; path = ../../prboom/z_bmalloc.h; sourceTree = "<group>"; };
|
||||
3DC1CA5614B63EC900680D02 /* z_zone.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = z_zone.c; path = ../../prboom/z_zone.c; sourceTree = "<group>"; };
|
||||
3DC1CA5714B63EC900680D02 /* z_zone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = z_zone.h; path = ../../prboom/z_zone.h; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
3DC1C85214B63E1B00680D02 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
3DC1C84A14B63E1B00680D02 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3DC1C9B114B63EBA00680D02 /* prboom */,
|
||||
3DC1C85614B63E1B00680D02 /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3DC1C85614B63E1B00680D02 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3DC1C85514B63E1B00680D02 /* libprboom.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3DC1C9B114B63EBA00680D02 /* prboom */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3DC1C9B214B63EC900680D02 /* am_map.c */,
|
||||
3DC1C9B314B63EC900680D02 /* am_map.h */,
|
||||
3DC1C9B414B63EC900680D02 /* config.h */,
|
||||
3DC1C9B514B63EC900680D02 /* d_client.c */,
|
||||
3DC1C9B614B63EC900680D02 /* d_deh.c */,
|
||||
3DC1C9B714B63EC900680D02 /* d_deh.h */,
|
||||
3DC1C9B814B63EC900680D02 /* d_englsh.h */,
|
||||
3DC1C9B914B63EC900680D02 /* d_event.h */,
|
||||
3DC1C9BB14B63EC900680D02 /* d_items.c */,
|
||||
3DC1C9BC14B63EC900680D02 /* d_items.h */,
|
||||
3DC1C9BD14B63EC900680D02 /* d_main.c */,
|
||||
3DC1C9BE14B63EC900680D02 /* d_main.h */,
|
||||
3DC1C9BF14B63EC900680D02 /* d_net.h */,
|
||||
3DC1C9C014B63EC900680D02 /* d_player.h */,
|
||||
3DC1C9C114B63EC900680D02 /* d_server.c */,
|
||||
3DC1C9C214B63EC900680D02 /* d_think.h */,
|
||||
3DC1C9C314B63EC900680D02 /* d_ticcmd.h */,
|
||||
3DC1C9C414B63EC900680D02 /* doomdata.h */,
|
||||
3DC1C9C514B63EC900680D02 /* doomdef.c */,
|
||||
3DC1C9C614B63EC900680D02 /* doomdef.h */,
|
||||
3DC1C9C714B63EC900680D02 /* doomstat.c */,
|
||||
3DC1C9C814B63EC900680D02 /* doomstat.h */,
|
||||
3DC1C9C914B63EC900680D02 /* doomtype.h */,
|
||||
3DC1C9CA14B63EC900680D02 /* dstrings.c */,
|
||||
3DC1C9CB14B63EC900680D02 /* dstrings.h */,
|
||||
3DC1C9CC14B63EC900680D02 /* f_finale.c */,
|
||||
3DC1C9CD14B63EC900680D02 /* f_finale.h */,
|
||||
3DC1C9CE14B63EC900680D02 /* f_wipe.c */,
|
||||
3DC1C9CF14B63EC900680D02 /* f_wipe.h */,
|
||||
3DC1C9D014B63EC900680D02 /* g_game.c */,
|
||||
3DC1C9D114B63EC900680D02 /* g_game.h */,
|
||||
3DC1C9D214B63EC900680D02 /* gl_intern.h */,
|
||||
3DC1C9D314B63EC900680D02 /* gl_main.c */,
|
||||
3DC1C9D414B63EC900680D02 /* gl_struct.h */,
|
||||
3DC1C9D514B63EC900680D02 /* gl_texture.c */,
|
||||
3DC1C9D614B63EC900680D02 /* hu_lib.c */,
|
||||
3DC1C9D714B63EC900680D02 /* hu_lib.h */,
|
||||
3DC1C9D814B63EC900680D02 /* hu_stuff.c */,
|
||||
3DC1C9D914B63EC900680D02 /* hu_stuff.h */,
|
||||
3DC1C9DA14B63EC900680D02 /* i_joy.h */,
|
||||
3DC1C9DB14B63EC900680D02 /* i_main.h */,
|
||||
3DC1C9DC14B63EC900680D02 /* i_network.h */,
|
||||
3DC1C9DD14B63EC900680D02 /* i_sound.h */,
|
||||
3DC1C9DE14B63EC900680D02 /* i_system.h */,
|
||||
3DC1C9DF14B63EC900680D02 /* i_video.h */,
|
||||
3DC1C9E014B63EC900680D02 /* info.c */,
|
||||
3DC1C9E114B63EC900680D02 /* info.h */,
|
||||
3DC1C9E214B63EC900680D02 /* lprintf.c */,
|
||||
3DC1C9E314B63EC900680D02 /* lprintf.h */,
|
||||
3DC1C9E414B63EC900680D02 /* m_argv.c */,
|
||||
3DC1C9E514B63EC900680D02 /* m_argv.h */,
|
||||
3DC1C9E614B63EC900680D02 /* m_bbox.c */,
|
||||
3DC1C9E714B63EC900680D02 /* m_bbox.h */,
|
||||
3DC1C9E814B63EC900680D02 /* m_cheat.c */,
|
||||
3DC1C9E914B63EC900680D02 /* m_cheat.h */,
|
||||
3DC1C9EA14B63EC900680D02 /* m_fixed.h */,
|
||||
3DC1C9EB14B63EC900680D02 /* m_menu.c */,
|
||||
3DC1C9EC14B63EC900680D02 /* m_menu.h */,
|
||||
3DC1C9ED14B63EC900680D02 /* m_misc.c */,
|
||||
3DC1C9EE14B63EC900680D02 /* m_misc.h */,
|
||||
3DC1C9EF14B63EC900680D02 /* m_random.c */,
|
||||
3DC1C9F014B63EC900680D02 /* m_random.h */,
|
||||
3DC1C9F114B63EC900680D02 /* m_swap.h */,
|
||||
3DC1C9F214B63EC900680D02 /* Makefile.am */,
|
||||
3DC1C9F314B63EC900680D02 /* md5.c */,
|
||||
3DC1C9F414B63EC900680D02 /* md5.h */,
|
||||
3DC1C9F514B63EC900680D02 /* mmus2mid.c */,
|
||||
3DC1C9F614B63EC900680D02 /* mmus2mid.h */,
|
||||
3DC1C9F714B63EC900680D02 /* p_ceilng.c */,
|
||||
3DC1C9F814B63EC900680D02 /* p_checksum.c */,
|
||||
3DC1C9F914B63EC900680D02 /* p_checksum.h */,
|
||||
3DC1C9FA14B63EC900680D02 /* p_doors.c */,
|
||||
3DC1C9FB14B63EC900680D02 /* p_enemy.c */,
|
||||
3DC1C9FC14B63EC900680D02 /* p_enemy.h */,
|
||||
3DC1C9FD14B63EC900680D02 /* p_floor.c */,
|
||||
3DC1C9FE14B63EC900680D02 /* p_genlin.c */,
|
||||
3DC1C9FF14B63EC900680D02 /* p_inter.c */,
|
||||
3DC1CA0014B63EC900680D02 /* p_inter.h */,
|
||||
3DC1CA0114B63EC900680D02 /* p_lights.c */,
|
||||
3DC1CA0214B63EC900680D02 /* p_map.c */,
|
||||
3DC1CA0314B63EC900680D02 /* p_map.h */,
|
||||
3DC1CA0414B63EC900680D02 /* p_maputl.c */,
|
||||
3DC1CA0514B63EC900680D02 /* p_maputl.h */,
|
||||
3DC1CA0614B63EC900680D02 /* p_mobj.c */,
|
||||
3DC1CA0714B63EC900680D02 /* p_mobj.h */,
|
||||
3DC1CA0814B63EC900680D02 /* p_plats.c */,
|
||||
3DC1CA0914B63EC900680D02 /* p_pspr.c */,
|
||||
3DC1CA0A14B63EC900680D02 /* p_pspr.h */,
|
||||
3DC1CA0B14B63EC900680D02 /* p_saveg.c */,
|
||||
3DC1CA0C14B63EC900680D02 /* p_saveg.h */,
|
||||
3DC1CA0D14B63EC900680D02 /* p_setup.c */,
|
||||
3DC1CA0E14B63EC900680D02 /* p_setup.h */,
|
||||
3DC1CA0F14B63EC900680D02 /* p_sight.c */,
|
||||
3DC1CA1014B63EC900680D02 /* p_spec.c */,
|
||||
3DC1CA1114B63EC900680D02 /* p_spec.h */,
|
||||
3DC1CA1214B63EC900680D02 /* p_switch.c */,
|
||||
3DC1CA1314B63EC900680D02 /* p_telept.c */,
|
||||
3DC1CA1414B63EC900680D02 /* p_tick.c */,
|
||||
3DC1CA1514B63EC900680D02 /* p_tick.h */,
|
||||
3DC1CA1614B63EC900680D02 /* p_user.c */,
|
||||
3DC1CA1714B63EC900680D02 /* p_user.h */,
|
||||
3DC1CA1814B63EC900680D02 /* protocol.h */,
|
||||
3DC1CA1914B63EC900680D02 /* r_bsp.c */,
|
||||
3DC1CA1A14B63EC900680D02 /* r_bsp.h */,
|
||||
3DC1CA1B14B63EC900680D02 /* r_data.c */,
|
||||
3DC1CA1C14B63EC900680D02 /* r_data.h */,
|
||||
3DC1CA1D14B63EC900680D02 /* r_defs.h */,
|
||||
3DC1CA1E14B63EC900680D02 /* r_demo.c */,
|
||||
3DC1CA1F14B63EC900680D02 /* r_demo.h */,
|
||||
3DC1CA2014B63EC900680D02 /* r_draw.c */,
|
||||
3DC1CA2114B63EC900680D02 /* r_draw.h */,
|
||||
3DC1CA2214B63EC900680D02 /* r_drawcolpipeline.inl */,
|
||||
3DC1CA2314B63EC900680D02 /* r_drawcolumn.inl */,
|
||||
3DC1CA2414B63EC900680D02 /* r_drawflush.inl */,
|
||||
3DC1CA2514B63EC900680D02 /* r_drawspan.inl */,
|
||||
3DC1CA2614B63EC900680D02 /* r_filter.c */,
|
||||
3DC1CA2714B63EC900680D02 /* r_filter.h */,
|
||||
3DC1CA2814B63EC900680D02 /* r_fps.c */,
|
||||
3DC1CA2914B63EC900680D02 /* r_fps.h */,
|
||||
3DC1CA2A14B63EC900680D02 /* r_main.c */,
|
||||
3DC1CA2B14B63EC900680D02 /* r_main.h */,
|
||||
3DC1CA2C14B63EC900680D02 /* r_patch.c */,
|
||||
3DC1CA2D14B63EC900680D02 /* r_patch.h */,
|
||||
3DC1CA2E14B63EC900680D02 /* r_plane.c */,
|
||||
3DC1CA2F14B63EC900680D02 /* r_plane.h */,
|
||||
3DC1CA3014B63EC900680D02 /* r_segs.c */,
|
||||
3DC1CA3114B63EC900680D02 /* r_segs.h */,
|
||||
3DC1CA3214B63EC900680D02 /* r_sky.c */,
|
||||
3DC1CA3314B63EC900680D02 /* r_sky.h */,
|
||||
3DC1CA3414B63EC900680D02 /* r_state.h */,
|
||||
3DC1CA3514B63EC900680D02 /* r_things.c */,
|
||||
3DC1CA3614B63EC900680D02 /* r_things.h */,
|
||||
3DC1CA3714B63EC900680D02 /* s_sound.c */,
|
||||
3DC1CA3814B63EC900680D02 /* s_sound.h */,
|
||||
3DC1CA3914B63EC900680D02 /* SDL */,
|
||||
3DC1CA4114B63EC900680D02 /* SDL_opengl.h */,
|
||||
3DC1CA4214B63EC900680D02 /* sounds.c */,
|
||||
3DC1CA4314B63EC900680D02 /* sounds.h */,
|
||||
3DC1CA4414B63EC900680D02 /* st_lib.c */,
|
||||
3DC1CA4514B63EC900680D02 /* st_lib.h */,
|
||||
3DC1CA4614B63EC900680D02 /* st_stuff.c */,
|
||||
3DC1CA4714B63EC900680D02 /* st_stuff.h */,
|
||||
3DC1CA4814B63EC900680D02 /* tables.c */,
|
||||
3DC1CA4914B63EC900680D02 /* tables.h */,
|
||||
3DC1CA4A14B63EC900680D02 /* v_video.c */,
|
||||
3DC1CA4B14B63EC900680D02 /* v_video.h */,
|
||||
3DC1CA4C14B63EC900680D02 /* version.c */,
|
||||
3DC1CA4D14B63EC900680D02 /* version.h */,
|
||||
3DC1CA4E14B63EC900680D02 /* w_memcache.c */,
|
||||
3DC1CA4F14B63EC900680D02 /* w_mmap.c */,
|
||||
3DC1CA5014B63EC900680D02 /* w_wad.c */,
|
||||
3DC1CA5114B63EC900680D02 /* w_wad.h */,
|
||||
3DC1CA5214B63EC900680D02 /* wi_stuff.c */,
|
||||
3DC1CA5314B63EC900680D02 /* wi_stuff.h */,
|
||||
3DC1CA5414B63EC900680D02 /* z_bmalloc.c */,
|
||||
3DC1CA5514B63EC900680D02 /* z_bmalloc.h */,
|
||||
3DC1CA5614B63EC900680D02 /* z_zone.c */,
|
||||
3DC1CA5714B63EC900680D02 /* z_zone.h */,
|
||||
);
|
||||
name = prboom;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3DC1CA3914B63EC900680D02 /* SDL */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3DC1CA3D14B63EC900680D02 /* i_sound.c */,
|
||||
);
|
||||
name = SDL;
|
||||
path = ../../prboom/SDL;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXHeadersBuildPhase section */
|
||||
3DC1C85314B63E1B00680D02 /* Headers */ = {
|
||||
isa = PBXHeadersBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
3DC1CA5914B63EC900680D02 /* am_map.h in Headers */,
|
||||
3DC1CA5A14B63EC900680D02 /* config.h in Headers */,
|
||||
3DC1CA5D14B63EC900680D02 /* d_deh.h in Headers */,
|
||||
3DC1CA5E14B63EC900680D02 /* d_englsh.h in Headers */,
|
||||
3DC1CA5F14B63EC900680D02 /* d_event.h in Headers */,
|
||||
3DC1CA6214B63EC900680D02 /* d_items.h in Headers */,
|
||||
3DC1CA6414B63EC900680D02 /* d_main.h in Headers */,
|
||||
3DC1CA6514B63EC900680D02 /* d_net.h in Headers */,
|
||||
3DC1CA6614B63EC900680D02 /* d_player.h in Headers */,
|
||||
3DC1CA6814B63EC900680D02 /* d_think.h in Headers */,
|
||||
3DC1CA6914B63EC900680D02 /* d_ticcmd.h in Headers */,
|
||||
3DC1CA6A14B63EC900680D02 /* doomdata.h in Headers */,
|
||||
3DC1CA6C14B63EC900680D02 /* doomdef.h in Headers */,
|
||||
3DC1CA6E14B63EC900680D02 /* doomstat.h in Headers */,
|
||||
3DC1CA6F14B63EC900680D02 /* doomtype.h in Headers */,
|
||||
3DC1CA7114B63EC900680D02 /* dstrings.h in Headers */,
|
||||
3DC1CA7314B63EC900680D02 /* f_finale.h in Headers */,
|
||||
3DC1CA7514B63EC900680D02 /* f_wipe.h in Headers */,
|
||||
3DC1CA7714B63EC900680D02 /* g_game.h in Headers */,
|
||||
3DC1CA7814B63EC900680D02 /* gl_intern.h in Headers */,
|
||||
3DC1CA7A14B63EC900680D02 /* gl_struct.h in Headers */,
|
||||
3DC1CA7D14B63EC900680D02 /* hu_lib.h in Headers */,
|
||||
3DC1CA7F14B63EC900680D02 /* hu_stuff.h in Headers */,
|
||||
3DC1CA8014B63EC900680D02 /* i_joy.h in Headers */,
|
||||
3DC1CA8114B63EC900680D02 /* i_main.h in Headers */,
|
||||
3DC1CA8214B63EC900680D02 /* i_network.h in Headers */,
|
||||
3DC1CA8314B63EC900680D02 /* i_sound.h in Headers */,
|
||||
3DC1CA8414B63EC900680D02 /* i_system.h in Headers */,
|
||||
3DC1CA8514B63EC900680D02 /* i_video.h in Headers */,
|
||||
3DC1CA8714B63EC900680D02 /* info.h in Headers */,
|
||||
3DC1CA8914B63EC900680D02 /* lprintf.h in Headers */,
|
||||
3DC1CA8B14B63EC900680D02 /* m_argv.h in Headers */,
|
||||
3DC1CA8D14B63EC900680D02 /* m_bbox.h in Headers */,
|
||||
3DC1CA8F14B63EC900680D02 /* m_cheat.h in Headers */,
|
||||
3DC1CA9014B63EC900680D02 /* m_fixed.h in Headers */,
|
||||
3DC1CA9214B63EC900680D02 /* m_menu.h in Headers */,
|
||||
3DC1CA9414B63EC900680D02 /* m_misc.h in Headers */,
|
||||
3DC1CA9614B63EC900680D02 /* m_random.h in Headers */,
|
||||
3DC1CA9714B63EC900680D02 /* m_swap.h in Headers */,
|
||||
3DC1CA9914B63EC900680D02 /* md5.h in Headers */,
|
||||
3DC1CA9B14B63EC900680D02 /* mmus2mid.h in Headers */,
|
||||
3DC1CA9E14B63EC900680D02 /* p_checksum.h in Headers */,
|
||||
3DC1CAA114B63EC900680D02 /* p_enemy.h in Headers */,
|
||||
3DC1CAA514B63EC900680D02 /* p_inter.h in Headers */,
|
||||
3DC1CAA814B63EC900680D02 /* p_map.h in Headers */,
|
||||
3DC1CAAA14B63EC900680D02 /* p_maputl.h in Headers */,
|
||||
3DC1CAAC14B63EC900680D02 /* p_mobj.h in Headers */,
|
||||
3DC1CAAF14B63EC900680D02 /* p_pspr.h in Headers */,
|
||||
3DC1CAB114B63EC900680D02 /* p_saveg.h in Headers */,
|
||||
3DC1CAB314B63EC900680D02 /* p_setup.h in Headers */,
|
||||
3DC1CAB614B63EC900680D02 /* p_spec.h in Headers */,
|
||||
3DC1CABA14B63EC900680D02 /* p_tick.h in Headers */,
|
||||
3DC1CABC14B63EC900680D02 /* p_user.h in Headers */,
|
||||
3DC1CABD14B63EC900680D02 /* protocol.h in Headers */,
|
||||
3DC1CABF14B63EC900680D02 /* r_bsp.h in Headers */,
|
||||
3DC1CAC114B63EC900680D02 /* r_data.h in Headers */,
|
||||
3DC1CAC214B63EC900680D02 /* r_defs.h in Headers */,
|
||||
3DC1CAC414B63EC900680D02 /* r_demo.h in Headers */,
|
||||
3DC1CAC614B63EC900680D02 /* r_draw.h in Headers */,
|
||||
3DC1CAC814B63EC900680D02 /* r_filter.h in Headers */,
|
||||
3DC1CACA14B63EC900680D02 /* r_fps.h in Headers */,
|
||||
3DC1CACC14B63EC900680D02 /* r_main.h in Headers */,
|
||||
3DC1CACE14B63EC900680D02 /* r_patch.h in Headers */,
|
||||
3DC1CAD014B63EC900680D02 /* r_plane.h in Headers */,
|
||||
3DC1CAD214B63EC900680D02 /* r_segs.h in Headers */,
|
||||
3DC1CAD414B63EC900680D02 /* r_sky.h in Headers */,
|
||||
3DC1CAD514B63EC900680D02 /* r_state.h in Headers */,
|
||||
3DC1CAD714B63EC900680D02 /* r_things.h in Headers */,
|
||||
3DC1CAD914B63EC900680D02 /* s_sound.h in Headers */,
|
||||
3DC1CAE114B63ECA00680D02 /* SDL_opengl.h in Headers */,
|
||||
3DC1CAE314B63ECA00680D02 /* sounds.h in Headers */,
|
||||
3DC1CAE514B63ECA00680D02 /* st_lib.h in Headers */,
|
||||
3DC1CAE714B63ECA00680D02 /* st_stuff.h in Headers */,
|
||||
3DC1CAE914B63ECA00680D02 /* tables.h in Headers */,
|
||||
3DC1CAEB14B63ECA00680D02 /* v_video.h in Headers */,
|
||||
3DC1CAED14B63ECA00680D02 /* version.h in Headers */,
|
||||
3DC1CAF114B63ECA00680D02 /* w_wad.h in Headers */,
|
||||
3DC1CAF314B63ECA00680D02 /* wi_stuff.h in Headers */,
|
||||
3DC1CAF514B63ECA00680D02 /* z_bmalloc.h in Headers */,
|
||||
3DC1CAF714B63ECA00680D02 /* z_zone.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXHeadersBuildPhase section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
3DC1C85414B63E1B00680D02 /* prboom */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 3DC1C86214B63E1B00680D02 /* Build configuration list for PBXNativeTarget "prboom" */;
|
||||
buildPhases = (
|
||||
3DC1C85114B63E1B00680D02 /* Sources */,
|
||||
3DC1C85214B63E1B00680D02 /* Frameworks */,
|
||||
3DC1C85314B63E1B00680D02 /* Headers */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = prboom;
|
||||
productName = prboom;
|
||||
productReference = 3DC1C85514B63E1B00680D02 /* libprboom.a */;
|
||||
productType = "com.apple.product-type.library.static";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
3DC1C84C14B63E1B00680D02 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0500;
|
||||
};
|
||||
buildConfigurationList = 3DC1C84F14B63E1B00680D02 /* Build configuration list for PBXProject "prboom" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
);
|
||||
mainGroup = 3DC1C84A14B63E1B00680D02;
|
||||
productRefGroup = 3DC1C85614B63E1B00680D02 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
3DC1C85414B63E1B00680D02 /* prboom */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
3DC1C85114B63E1B00680D02 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
3DC1CA5814B63EC900680D02 /* am_map.c in Sources */,
|
||||
3DC1CA5B14B63EC900680D02 /* d_client.c in Sources */,
|
||||
3DC1CA5C14B63EC900680D02 /* d_deh.c in Sources */,
|
||||
3DC1CA6114B63EC900680D02 /* d_items.c in Sources */,
|
||||
3DC1CA6314B63EC900680D02 /* d_main.c in Sources */,
|
||||
3DC1CA6714B63EC900680D02 /* d_server.c in Sources */,
|
||||
3DC1CA6B14B63EC900680D02 /* doomdef.c in Sources */,
|
||||
3DC1CA6D14B63EC900680D02 /* doomstat.c in Sources */,
|
||||
3DC1CA7014B63EC900680D02 /* dstrings.c in Sources */,
|
||||
3DC1CA7214B63EC900680D02 /* f_finale.c in Sources */,
|
||||
3DC1CA7414B63EC900680D02 /* f_wipe.c in Sources */,
|
||||
3DC1CA7614B63EC900680D02 /* g_game.c in Sources */,
|
||||
3DC1CA7914B63EC900680D02 /* gl_main.c in Sources */,
|
||||
3DC1CA7B14B63EC900680D02 /* gl_texture.c in Sources */,
|
||||
3DC1CA7C14B63EC900680D02 /* hu_lib.c in Sources */,
|
||||
3DC1CA7E14B63EC900680D02 /* hu_stuff.c in Sources */,
|
||||
3DC1CA8614B63EC900680D02 /* info.c in Sources */,
|
||||
3DC1CA8814B63EC900680D02 /* lprintf.c in Sources */,
|
||||
3DC1CA8A14B63EC900680D02 /* m_argv.c in Sources */,
|
||||
3DC1CA8C14B63EC900680D02 /* m_bbox.c in Sources */,
|
||||
3DC1CA8E14B63EC900680D02 /* m_cheat.c in Sources */,
|
||||
3DC1CA9114B63EC900680D02 /* m_menu.c in Sources */,
|
||||
3DC1CA9314B63EC900680D02 /* m_misc.c in Sources */,
|
||||
3DC1CA9514B63EC900680D02 /* m_random.c in Sources */,
|
||||
3DC1CA9814B63EC900680D02 /* md5.c in Sources */,
|
||||
3DC1CA9A14B63EC900680D02 /* mmus2mid.c in Sources */,
|
||||
3DC1CA9C14B63EC900680D02 /* p_ceilng.c in Sources */,
|
||||
3DC1CA9D14B63EC900680D02 /* p_checksum.c in Sources */,
|
||||
3DC1CA9F14B63EC900680D02 /* p_doors.c in Sources */,
|
||||
3DC1CAA014B63EC900680D02 /* p_enemy.c in Sources */,
|
||||
3DC1CAA214B63EC900680D02 /* p_floor.c in Sources */,
|
||||
3DC1CAA314B63EC900680D02 /* p_genlin.c in Sources */,
|
||||
3DC1CAA414B63EC900680D02 /* p_inter.c in Sources */,
|
||||
3DC1CAA614B63EC900680D02 /* p_lights.c in Sources */,
|
||||
3DC1CAA714B63EC900680D02 /* p_map.c in Sources */,
|
||||
3DC1CAA914B63EC900680D02 /* p_maputl.c in Sources */,
|
||||
3DC1CAAB14B63EC900680D02 /* p_mobj.c in Sources */,
|
||||
3DC1CAAD14B63EC900680D02 /* p_plats.c in Sources */,
|
||||
3DC1CAAE14B63EC900680D02 /* p_pspr.c in Sources */,
|
||||
3DC1CAB014B63EC900680D02 /* p_saveg.c in Sources */,
|
||||
3DC1CAB214B63EC900680D02 /* p_setup.c in Sources */,
|
||||
3DC1CAB414B63EC900680D02 /* p_sight.c in Sources */,
|
||||
3DC1CAB514B63EC900680D02 /* p_spec.c in Sources */,
|
||||
3DC1CAB714B63EC900680D02 /* p_switch.c in Sources */,
|
||||
3DC1CAB814B63EC900680D02 /* p_telept.c in Sources */,
|
||||
3DC1CAB914B63EC900680D02 /* p_tick.c in Sources */,
|
||||
3DC1CABB14B63EC900680D02 /* p_user.c in Sources */,
|
||||
3DC1CABE14B63EC900680D02 /* r_bsp.c in Sources */,
|
||||
3DC1CAC014B63EC900680D02 /* r_data.c in Sources */,
|
||||
3DC1CAC314B63EC900680D02 /* r_demo.c in Sources */,
|
||||
3DC1CAC514B63EC900680D02 /* r_draw.c in Sources */,
|
||||
3DC1CAC714B63EC900680D02 /* r_filter.c in Sources */,
|
||||
3DC1CAC914B63EC900680D02 /* r_fps.c in Sources */,
|
||||
3DC1CACB14B63EC900680D02 /* r_main.c in Sources */,
|
||||
3DC1CACD14B63EC900680D02 /* r_patch.c in Sources */,
|
||||
3DC1CACF14B63EC900680D02 /* r_plane.c in Sources */,
|
||||
3DC1CAD114B63EC900680D02 /* r_segs.c in Sources */,
|
||||
3DC1CAD314B63EC900680D02 /* r_sky.c in Sources */,
|
||||
3DC1CAD614B63EC900680D02 /* r_things.c in Sources */,
|
||||
3DC1CAD814B63EC900680D02 /* s_sound.c in Sources */,
|
||||
3DC1CADD14B63ECA00680D02 /* i_sound.c in Sources */,
|
||||
3DC1CAE214B63ECA00680D02 /* sounds.c in Sources */,
|
||||
3DC1CAE414B63ECA00680D02 /* st_lib.c in Sources */,
|
||||
3DC1CAE614B63ECA00680D02 /* st_stuff.c in Sources */,
|
||||
3DC1CAE814B63ECA00680D02 /* tables.c in Sources */,
|
||||
3DC1CAEA14B63ECA00680D02 /* v_video.c in Sources */,
|
||||
3DC1CAEC14B63ECA00680D02 /* version.c in Sources */,
|
||||
3DC1CAEE14B63ECA00680D02 /* w_memcache.c in Sources */,
|
||||
3DC1CAEF14B63ECA00680D02 /* w_mmap.c in Sources */,
|
||||
3DC1CAF014B63ECA00680D02 /* w_wad.c in Sources */,
|
||||
3DC1CAF214B63ECA00680D02 /* wi_stuff.c in Sources */,
|
||||
3DC1CAF414B63ECA00680D02 /* z_bmalloc.c in Sources */,
|
||||
3DC1CAF614B63ECA00680D02 /* z_zone.c in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
3DC1C86014B63E1B00680D02 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"$(inherited)",
|
||||
HAVE_CONFIG_H,
|
||||
IPHONE,
|
||||
);
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
|
||||
GCC_THUMB_SUPPORT = NO;
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 3.0;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
USER_HEADER_SEARCH_PATHS = "../doomengine ../../SDL_shim";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
3DC1C86114B63E1B00680D02 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
COPY_PHASE_STRIP = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
HAVE_CONFIG_H,
|
||||
IPHONE,
|
||||
);
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
|
||||
GCC_THUMB_SUPPORT = NO;
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 3.0;
|
||||
SDKROOT = iphoneos;
|
||||
USER_HEADER_SEARCH_PATHS = "../doomengine ../../SDL_shim";
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
3DC1C86314B63E1B00680D02 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
DSTROOT = /tmp/prboom.dst;
|
||||
GCC_VERSION = "";
|
||||
OTHER_LDFLAGS = "-ObjC";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
3DC1C86414B63E1B00680D02 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
DSTROOT = /tmp/prboom.dst;
|
||||
GCC_VERSION = "";
|
||||
OTHER_LDFLAGS = "-ObjC";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
3DC1C84F14B63E1B00680D02 /* Build configuration list for PBXProject "prboom" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
3DC1C86014B63E1B00680D02 /* Debug */,
|
||||
3DC1C86114B63E1B00680D02 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
3DC1C86214B63E1B00680D02 /* Build configuration list for PBXNativeTarget "prboom" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
3DC1C86314B63E1B00680D02 /* Debug */,
|
||||
3DC1C86414B63E1B00680D02 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 3DC1C84C14B63E1B00680D02 /* Project object */;
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0500"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "3DC1C85414B63E1B00680D02"
|
||||
BuildableName = "libprboom.a"
|
||||
BlueprintName = "prboom"
|
||||
ReferencedContainer = "container:prboom.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
buildConfiguration = "Debug">
|
||||
<Testables>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Debug"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
allowLocationSimulation = "YES">
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Release"
|
||||
debugDocumentVersioning = "YES">
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>prboom.xcscheme</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>3</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
<dict>
|
||||
<key>3DC1C85414B63E1B00680D02</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "3DC1C85414B63E1B00680D02"
|
||||
BuildableName = "libprboom.a"
|
||||
BlueprintName = "prboom"
|
||||
ReferencedContainer = "container:prboom.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
buildConfiguration = "Debug">
|
||||
<Testables>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Debug"
|
||||
debugDocumentVersioning = "YES"
|
||||
allowLocationSimulation = "YES">
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Release"
|
||||
debugDocumentVersioning = "YES">
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>prboom.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>4</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
<dict>
|
||||
<key>3DC1C85414B63E1B00680D02</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "3DC1C85414B63E1B00680D02"
|
||||
BuildableName = "libprboom.a"
|
||||
BlueprintName = "prboom"
|
||||
ReferencedContainer = "container:prboom.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
buildConfiguration = "Debug">
|
||||
<Testables>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Debug"
|
||||
debugDocumentVersioning = "YES"
|
||||
allowLocationSimulation = "YES">
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Release"
|
||||
debugDocumentVersioning = "YES">
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>prboom.xcscheme</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>6</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
<dict>
|
||||
<key>3DC1C85414B63E1B00680D02</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
299
common/ios/tess/tess.xcodeproj/project.pbxproj
Executable file
299
common/ios/tess/tess.xcodeproj/project.pbxproj
Executable file
@@ -0,0 +1,299 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 46;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
3D155FF014B51175000D33AA /* dict-list.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D155FD814B51175000D33AA /* dict-list.h */; };
|
||||
3D155FF114B51175000D33AA /* dict.c in Sources */ = {isa = PBXBuildFile; fileRef = 3D155FD914B51175000D33AA /* dict.c */; };
|
||||
3D155FF214B51175000D33AA /* dict.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D155FDA14B51175000D33AA /* dict.h */; };
|
||||
3D155FF314B51175000D33AA /* geom.c in Sources */ = {isa = PBXBuildFile; fileRef = 3D155FDB14B51175000D33AA /* geom.c */; };
|
||||
3D155FF414B51175000D33AA /* geom.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D155FDC14B51175000D33AA /* geom.h */; };
|
||||
3D155FF514B51175000D33AA /* memalloc.c in Sources */ = {isa = PBXBuildFile; fileRef = 3D155FDD14B51175000D33AA /* memalloc.c */; };
|
||||
3D155FF614B51175000D33AA /* memalloc.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D155FDE14B51175000D33AA /* memalloc.h */; };
|
||||
3D155FF714B51175000D33AA /* mesh.c in Sources */ = {isa = PBXBuildFile; fileRef = 3D155FDF14B51175000D33AA /* mesh.c */; };
|
||||
3D155FF814B51175000D33AA /* mesh.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D155FE014B51175000D33AA /* mesh.h */; };
|
||||
3D155FF914B51175000D33AA /* normal.c in Sources */ = {isa = PBXBuildFile; fileRef = 3D155FE114B51175000D33AA /* normal.c */; };
|
||||
3D155FFA14B51175000D33AA /* normal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D155FE214B51175000D33AA /* normal.h */; };
|
||||
3D155FFB14B51175000D33AA /* priorityq-heap.c in Sources */ = {isa = PBXBuildFile; fileRef = 3D155FE314B51175000D33AA /* priorityq-heap.c */; };
|
||||
3D155FFC14B51175000D33AA /* priorityq-heap.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D155FE414B51175000D33AA /* priorityq-heap.h */; };
|
||||
3D155FFD14B51175000D33AA /* priorityq-sort.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D155FE514B51175000D33AA /* priorityq-sort.h */; };
|
||||
3D155FFE14B51175000D33AA /* priorityq.c in Sources */ = {isa = PBXBuildFile; fileRef = 3D155FE614B51175000D33AA /* priorityq.c */; };
|
||||
3D155FFF14B51175000D33AA /* priorityq.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D155FE714B51175000D33AA /* priorityq.h */; };
|
||||
3D15600014B51175000D33AA /* render.c in Sources */ = {isa = PBXBuildFile; fileRef = 3D155FE814B51175000D33AA /* render.c */; };
|
||||
3D15600114B51175000D33AA /* render.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D155FE914B51175000D33AA /* render.h */; };
|
||||
3D15600214B51175000D33AA /* sweep.c in Sources */ = {isa = PBXBuildFile; fileRef = 3D155FEA14B51175000D33AA /* sweep.c */; };
|
||||
3D15600314B51175000D33AA /* sweep.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D155FEB14B51175000D33AA /* sweep.h */; };
|
||||
3D15600414B51175000D33AA /* tess.c in Sources */ = {isa = PBXBuildFile; fileRef = 3D155FEC14B51175000D33AA /* tess.c */; };
|
||||
3D15600514B51175000D33AA /* tess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D155FED14B51175000D33AA /* tess.h */; };
|
||||
3D15600614B51175000D33AA /* tessmono.c in Sources */ = {isa = PBXBuildFile; fileRef = 3D155FEE14B51175000D33AA /* tessmono.c */; };
|
||||
3D15600714B51175000D33AA /* tessmono.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D155FEF14B51175000D33AA /* tessmono.h */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
3D155FC114B51127000D33AA /* libtess.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libtess.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
3D155FD814B51175000D33AA /* dict-list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "dict-list.h"; path = "../../libtess/dict-list.h"; sourceTree = "<group>"; };
|
||||
3D155FD914B51175000D33AA /* dict.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dict.c; path = ../../libtess/dict.c; sourceTree = "<group>"; };
|
||||
3D155FDA14B51175000D33AA /* dict.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dict.h; path = ../../libtess/dict.h; sourceTree = "<group>"; };
|
||||
3D155FDB14B51175000D33AA /* geom.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = geom.c; path = ../../libtess/geom.c; sourceTree = "<group>"; };
|
||||
3D155FDC14B51175000D33AA /* geom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = geom.h; path = ../../libtess/geom.h; sourceTree = "<group>"; };
|
||||
3D155FDD14B51175000D33AA /* memalloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = memalloc.c; path = ../../libtess/memalloc.c; sourceTree = "<group>"; };
|
||||
3D155FDE14B51175000D33AA /* memalloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = memalloc.h; path = ../../libtess/memalloc.h; sourceTree = "<group>"; };
|
||||
3D155FDF14B51175000D33AA /* mesh.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mesh.c; path = ../../libtess/mesh.c; sourceTree = "<group>"; };
|
||||
3D155FE014B51175000D33AA /* mesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mesh.h; path = ../../libtess/mesh.h; sourceTree = "<group>"; };
|
||||
3D155FE114B51175000D33AA /* normal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = normal.c; path = ../../libtess/normal.c; sourceTree = "<group>"; };
|
||||
3D155FE214B51175000D33AA /* normal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = normal.h; path = ../../libtess/normal.h; sourceTree = "<group>"; };
|
||||
3D155FE314B51175000D33AA /* priorityq-heap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "priorityq-heap.c"; path = "../../libtess/priorityq-heap.c"; sourceTree = "<group>"; };
|
||||
3D155FE414B51175000D33AA /* priorityq-heap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "priorityq-heap.h"; path = "../../libtess/priorityq-heap.h"; sourceTree = "<group>"; };
|
||||
3D155FE514B51175000D33AA /* priorityq-sort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "priorityq-sort.h"; path = "../../libtess/priorityq-sort.h"; sourceTree = "<group>"; };
|
||||
3D155FE614B51175000D33AA /* priorityq.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = priorityq.c; path = ../../libtess/priorityq.c; sourceTree = "<group>"; };
|
||||
3D155FE714B51175000D33AA /* priorityq.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = priorityq.h; path = ../../libtess/priorityq.h; sourceTree = "<group>"; };
|
||||
3D155FE814B51175000D33AA /* render.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = render.c; path = ../../libtess/render.c; sourceTree = "<group>"; };
|
||||
3D155FE914B51175000D33AA /* render.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = render.h; path = ../../libtess/render.h; sourceTree = "<group>"; };
|
||||
3D155FEA14B51175000D33AA /* sweep.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sweep.c; path = ../../libtess/sweep.c; sourceTree = "<group>"; };
|
||||
3D155FEB14B51175000D33AA /* sweep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sweep.h; path = ../../libtess/sweep.h; sourceTree = "<group>"; };
|
||||
3D155FEC14B51175000D33AA /* tess.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tess.c; path = ../../libtess/tess.c; sourceTree = "<group>"; };
|
||||
3D155FED14B51175000D33AA /* tess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tess.h; path = ../../libtess/tess.h; sourceTree = "<group>"; };
|
||||
3D155FEE14B51175000D33AA /* tessmono.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tessmono.c; path = ../../libtess/tessmono.c; sourceTree = "<group>"; };
|
||||
3D155FEF14B51175000D33AA /* tessmono.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tessmono.h; path = ../../libtess/tessmono.h; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
3D155FBE14B51127000D33AA /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
3D155FB614B51127000D33AA = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3D155FD714B51142000D33AA /* libtess */,
|
||||
3D155FC214B51127000D33AA /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3D155FC214B51127000D33AA /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3D155FC114B51127000D33AA /* libtess.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3D155FD714B51142000D33AA /* libtess */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3D155FD814B51175000D33AA /* dict-list.h */,
|
||||
3D155FD914B51175000D33AA /* dict.c */,
|
||||
3D155FDA14B51175000D33AA /* dict.h */,
|
||||
3D155FDB14B51175000D33AA /* geom.c */,
|
||||
3D155FDC14B51175000D33AA /* geom.h */,
|
||||
3D155FDD14B51175000D33AA /* memalloc.c */,
|
||||
3D155FDE14B51175000D33AA /* memalloc.h */,
|
||||
3D155FDF14B51175000D33AA /* mesh.c */,
|
||||
3D155FE014B51175000D33AA /* mesh.h */,
|
||||
3D155FE114B51175000D33AA /* normal.c */,
|
||||
3D155FE214B51175000D33AA /* normal.h */,
|
||||
3D155FE314B51175000D33AA /* priorityq-heap.c */,
|
||||
3D155FE414B51175000D33AA /* priorityq-heap.h */,
|
||||
3D155FE514B51175000D33AA /* priorityq-sort.h */,
|
||||
3D155FE614B51175000D33AA /* priorityq.c */,
|
||||
3D155FE714B51175000D33AA /* priorityq.h */,
|
||||
3D155FE814B51175000D33AA /* render.c */,
|
||||
3D155FE914B51175000D33AA /* render.h */,
|
||||
3D155FEA14B51175000D33AA /* sweep.c */,
|
||||
3D155FEB14B51175000D33AA /* sweep.h */,
|
||||
3D155FEC14B51175000D33AA /* tess.c */,
|
||||
3D155FED14B51175000D33AA /* tess.h */,
|
||||
3D155FEE14B51175000D33AA /* tessmono.c */,
|
||||
3D155FEF14B51175000D33AA /* tessmono.h */,
|
||||
);
|
||||
name = libtess;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXHeadersBuildPhase section */
|
||||
3D155FBF14B51127000D33AA /* Headers */ = {
|
||||
isa = PBXHeadersBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
3D155FF014B51175000D33AA /* dict-list.h in Headers */,
|
||||
3D155FF214B51175000D33AA /* dict.h in Headers */,
|
||||
3D155FF414B51175000D33AA /* geom.h in Headers */,
|
||||
3D155FF614B51175000D33AA /* memalloc.h in Headers */,
|
||||
3D155FF814B51175000D33AA /* mesh.h in Headers */,
|
||||
3D155FFA14B51175000D33AA /* normal.h in Headers */,
|
||||
3D155FFC14B51175000D33AA /* priorityq-heap.h in Headers */,
|
||||
3D155FFD14B51175000D33AA /* priorityq-sort.h in Headers */,
|
||||
3D155FFF14B51175000D33AA /* priorityq.h in Headers */,
|
||||
3D15600114B51175000D33AA /* render.h in Headers */,
|
||||
3D15600314B51175000D33AA /* sweep.h in Headers */,
|
||||
3D15600514B51175000D33AA /* tess.h in Headers */,
|
||||
3D15600714B51175000D33AA /* tessmono.h in Headers */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXHeadersBuildPhase section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
3D155FC014B51127000D33AA /* tess */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 3D155FCE14B51127000D33AA /* Build configuration list for PBXNativeTarget "tess" */;
|
||||
buildPhases = (
|
||||
3D155FBD14B51127000D33AA /* Sources */,
|
||||
3D155FBE14B51127000D33AA /* Frameworks */,
|
||||
3D155FBF14B51127000D33AA /* Headers */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = tess;
|
||||
productName = tess;
|
||||
productReference = 3D155FC114B51127000D33AA /* libtess.a */;
|
||||
productType = "com.apple.product-type.library.static";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
3D155FB814B51127000D33AA /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0500;
|
||||
};
|
||||
buildConfigurationList = 3D155FBB14B51127000D33AA /* Build configuration list for PBXProject "tess" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
);
|
||||
mainGroup = 3D155FB614B51127000D33AA;
|
||||
productRefGroup = 3D155FC214B51127000D33AA /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
3D155FC014B51127000D33AA /* tess */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
3D155FBD14B51127000D33AA /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
3D155FF114B51175000D33AA /* dict.c in Sources */,
|
||||
3D155FF314B51175000D33AA /* geom.c in Sources */,
|
||||
3D155FF514B51175000D33AA /* memalloc.c in Sources */,
|
||||
3D155FF714B51175000D33AA /* mesh.c in Sources */,
|
||||
3D155FF914B51175000D33AA /* normal.c in Sources */,
|
||||
3D155FFB14B51175000D33AA /* priorityq-heap.c in Sources */,
|
||||
3D155FFE14B51175000D33AA /* priorityq.c in Sources */,
|
||||
3D15600014B51175000D33AA /* render.c in Sources */,
|
||||
3D15600214B51175000D33AA /* sweep.c in Sources */,
|
||||
3D15600414B51175000D33AA /* tess.c in Sources */,
|
||||
3D15600614B51175000D33AA /* tessmono.c in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
3D155FCC14B51127000D33AA /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||
GCC_THUMB_SUPPORT = NO;
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 3.0;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
3D155FCD14B51127000D33AA /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
COPY_PHASE_STRIP = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_THUMB_SUPPORT = NO;
|
||||
GCC_VERSION = com.apple.compilers.llvmgcc42;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 3.0;
|
||||
SDKROOT = iphoneos;
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
3D155FCF14B51127000D33AA /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
DSTROOT = /tmp/tess.dst;
|
||||
GCC_VERSION = "";
|
||||
OTHER_LDFLAGS = "-ObjC";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
3D155FD014B51127000D33AA /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
DSTROOT = /tmp/tess.dst;
|
||||
GCC_VERSION = "";
|
||||
OTHER_LDFLAGS = "-ObjC";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
3D155FBB14B51127000D33AA /* Build configuration list for PBXProject "tess" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
3D155FCC14B51127000D33AA /* Debug */,
|
||||
3D155FCD14B51127000D33AA /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
3D155FCE14B51127000D33AA /* Build configuration list for PBXNativeTarget "tess" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
3D155FCF14B51127000D33AA /* Debug */,
|
||||
3D155FD014B51127000D33AA /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 3D155FB814B51127000D33AA /* Project object */;
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0500"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "3D155FC014B51127000D33AA"
|
||||
BuildableName = "libtess.a"
|
||||
BlueprintName = "tess"
|
||||
ReferencedContainer = "container:tess.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
buildConfiguration = "Debug">
|
||||
<Testables>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Debug"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
allowLocationSimulation = "YES">
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Release"
|
||||
debugDocumentVersioning = "YES">
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>tess.xcscheme</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>5</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
<dict>
|
||||
<key>3D155FC014B51127000D33AA</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "3D155FC014B51127000D33AA"
|
||||
BuildableName = "libtess.a"
|
||||
BlueprintName = "tess"
|
||||
ReferencedContainer = "container:tess.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
buildConfiguration = "Debug">
|
||||
<Testables>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Debug"
|
||||
debugDocumentVersioning = "YES"
|
||||
allowLocationSimulation = "YES">
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Release"
|
||||
debugDocumentVersioning = "YES">
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>tess.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>7</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
<dict>
|
||||
<key>3D155FC014B51127000D33AA</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "3D155FC014B51127000D33AA"
|
||||
BuildableName = "libtess.a"
|
||||
BlueprintName = "tess"
|
||||
ReferencedContainer = "container:tess.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
buildConfiguration = "Debug">
|
||||
<Testables>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Debug"
|
||||
debugDocumentVersioning = "YES"
|
||||
allowLocationSimulation = "YES">
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
buildConfiguration = "Release"
|
||||
debugDocumentVersioning = "YES">
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>tess.xcscheme</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>4</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
<dict>
|
||||
<key>3D155FC014B51127000D33AA</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
Reference in New Issue
Block a user