Initial source commit

This commit is contained in:
Tony Bark 2025-10-03 02:19:59 -04:00
commit f1384c11ee
335 changed files with 52715 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 506 B

View file

@ -0,0 +1,32 @@
<?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>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDisplayName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string>Icon.png</string>
<key>CFBundleIdentifier</key>
<string>net.sf.hcsoftware.${PRODUCT_NAME}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>3.1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSMainNibFile</key>
<string>MainWindow</string>
<key>UIStatusBarHidden</key>
<true/>
</dict>
</plist>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View file

@ -0,0 +1,237 @@
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.03">
<data>
<int key="IBDocument.SystemTarget">528</int>
<string key="IBDocument.SystemVersion">9F33</string>
<string key="IBDocument.InterfaceBuilderVersion">677</string>
<string key="IBDocument.AppKitVersion">949.34</string>
<string key="IBDocument.HIToolboxVersion">352.00</string>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
<integer value="2"/>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</object>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBProxyObject" id="841351856">
<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
</object>
<object class="IBProxyObject" id="427554174">
<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
</object>
<object class="IBUICustomObject" id="664661524"/>
<object class="IBUIWindow" id="380026005">
<reference key="NSNextResponder"/>
<int key="NSvFlags">1316</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBUIView" id="309370163">
<reference key="NSNextResponder" ref="380026005"/>
<int key="NSvFlags">1298</int>
<string key="NSFrameSize">{320, 480}</string>
<reference key="NSSuperview" ref="380026005"/>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MQA</bytes>
<object class="NSColorSpace" key="NSCustomColorSpace">
<int key="NSID">2</int>
</object>
</object>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
</object>
</object>
<object class="NSPSMatrix" key="NSFrameMatrix"/>
<string key="NSFrameSize">{320, 480}</string>
<reference key="NSSuperview"/>
<object class="NSColor" key="IBUIBackgroundColor">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MSAxIDEAA</bytes>
</object>
<bool key="IBUIOpaque">NO</bool>
<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
</object>
</object>
<object class="IBObjectContainer" key="IBDocument.Objects">
<object class="NSMutableArray" key="connectionRecords">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="841351856"/>
<reference key="destination" ref="664661524"/>
</object>
<int key="connectionID">4</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">window</string>
<reference key="source" ref="664661524"/>
<reference key="destination" ref="380026005"/>
</object>
<int key="connectionID">5</int>
</object>
<object class="IBConnectionRecord">
<object class="IBCocoaTouchOutletConnection" key="connection">
<string key="label">view</string>
<reference key="source" ref="664661524"/>
<reference key="destination" ref="309370163"/>
</object>
<int key="connectionID">11</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBObjectRecord">
<int key="objectID">0</int>
<object class="NSArray" key="object" id="957960031">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<reference key="children" ref="1000"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">2</int>
<reference key="object" ref="380026005"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="309370163"/>
</object>
<reference key="parent" ref="957960031"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
<reference key="object" ref="841351856"/>
<reference key="parent" ref="957960031"/>
<string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">3</int>
<reference key="object" ref="664661524"/>
<reference key="parent" ref="957960031"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-2</int>
<reference key="object" ref="427554174"/>
<reference key="parent" ref="957960031"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">10</int>
<reference key="object" ref="309370163"/>
<reference key="parent" ref="380026005"/>
</object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>-1.CustomClassName</string>
<string>-2.CustomClassName</string>
<string>10.CustomClassName</string>
<string>10.IBPluginDependency</string>
<string>2.IBAttributePlaceholdersKey</string>
<string>2.IBEditorWindowLastContentRect</string>
<string>2.IBPluginDependency</string>
<string>3.CustomClassName</string>
<string>3.IBPluginDependency</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>UIApplication</string>
<string>UIResponder</string>
<string>MyView</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<object class="NSMutableDictionary">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<string>{{411, 129}, {320, 480}}</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
<string>gameWindowAppDelegate</string>
<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
</object>
</object>
<object class="NSMutableDictionary" key="unlocalizedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<nil key="activeLocalization"/>
<object class="NSMutableDictionary" key="localizations">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<nil key="sourceID"/>
<int key="maxID">11</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBPartialClassDescription">
<string key="className">MyView</string>
<string key="superclassName">UIView</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier" id="747307864">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">gameWindowAppDelegate.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">MyView</string>
<string key="superclassName">UIView</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBUserSource</string>
<string key="minorKey"/>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">gameWindowAppDelegate</string>
<string key="superclassName">NSObject</string>
<object class="NSMutableDictionary" key="outlets">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>view</string>
<string>window</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>MyView</string>
<string>UIWindow</string>
</object>
</object>
<reference key="sourceIdentifier" ref="747307864"/>
</object>
</object>
</object>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.LastKnownRelativeProjectPath">gameWindowApp.xcodeproj</string>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
</data>
</archive>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View file

@ -0,0 +1,84 @@
#include "blowUp.h"
#include <string.h>
void blowupOntoScreen( Uint32 *inImage, int inWidth, int inHeight,
int inBlowFactor, Uint32 *inScreenPixels,
int inScreenWidth, int inScreenHeight ) {
int newWidth = inBlowFactor * inWidth;
int newHeight = inBlowFactor * inHeight;
int yOffset = ( inScreenHeight - newHeight ) / 2;
// "up" a bit more on iPhone to make room for touch widget
int xOffset = 2 * ( inScreenWidth - newWidth ) / 3;
// pitch equals width for iPhone implementation
int scanlineWidth = inScreenWidth;
Uint32 *pixels = inScreenPixels;
// looping across the smaller image, instead of across the larger screen,
// was discovered using the profiler.
// an entire screen row is repeated inBlowFactor times down the screen
// (as a row of pixel boxes)
// Thus, we can offload a lot more work onto memcpy if we assemble one
// of these rows and then memcpy it onto the screen inBlowFactor times
for( int y=0; y<inHeight; y++ ) {
Uint32 *screenRow = new Uint32[ newWidth ];
// flip image vertically for iPhone
int gameY = (inHeight - 1) - y;
// fill the screen row with rows from the pixel boxes
for( int x=0; x<inWidth; x++ ) {
Uint32 pixelValue = inImage[ gameY * inWidth + x ];
// swap red and blue on iPhone
unsigned char red = (pixelValue >> 16) & 0xFF;
unsigned char green = (pixelValue >> 8) & 0xFF;
unsigned char blue = (pixelValue >> 0) & 0xFF;
pixelValue = blue << 16 | green << 8 | red;
// spread this pixel across an inBlowFactor-wide box row in
// the screen row
int boxXStart = inBlowFactor * x;
int boxXEnd = boxXStart + inBlowFactor;
// make an array to represent one row of this box
// we can thus replace the inner loop with a memcpy below
for( int i=boxXStart; i<boxXEnd; i++ ) {
screenRow[i] = pixelValue;
}
}
// now copy the row onto the screen inBlowFactor times
int screenRowStart = ( yOffset + y * inBlowFactor ) * scanlineWidth
+ xOffset;
int screenRowEnd = screenRowStart + inBlowFactor * scanlineWidth;
int screenRowIncrement = scanlineWidth;
for( int screenRowIndex = screenRowStart;
screenRowIndex < screenRowEnd;
screenRowIndex += screenRowIncrement ) {
memcpy( &( pixels[ screenRowIndex ] ),
screenRow, newWidth * 4 );
}
delete [] screenRow;
}
}

View file

@ -0,0 +1,10 @@
#include "drawIntoScreen.h"
/**
* Blows an image up onto the screen using nearest neighbor (pixelated)
* interpolation.
*/
void blowupOntoScreen( Uint32 *inImage, int inWidth, int inHeight,
int inBlowFactor, Uint32 *inScreenPixels,
int inScreenWidth, int inScreenHeight );

View file

@ -0,0 +1,25 @@
#include "common.h"
#include "minorGems/graphics/converters/TGAImageConverter.h"
#include "minorGems/io/file/File.h"
#include "minorGems/io/file/FileInputStream.h"
Image *readTGA( char *inFileName ) {
return readTGA( "graphics", inFileName );
}
Image *readTGA( char *inFolderName, char *inFileName ) {
// ignore passed-in path (use bundle root)
File tgaFile( NULL, inFileName );
FileInputStream tgaStream( &tgaFile );
TGAImageConverter converter;
return converter.deformatImage( &tgaStream );
}

View file

@ -0,0 +1,22 @@
// interface for generic screen drawing framework
#include <stdint.h>
typedef uint32_t Uint32;
void initScreenDrawer( Uint32 *inScreenBuffer, int inWidth, int inHeight );
// each pixel is 4 characters
void drawIntoScreen( Uint32 *inScreenBuffer, int inWidth, int inHeight );
// set device orientation from accelerometer
void setOrientation( float inX, float inY );
void touchStartPoint( float inX, float inY );
void touchMovePoint( float inX, float inY );
void touchEndPoint( float inX, float inY );
void freeScreenDrawer();

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,468 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 45;
objects = {
/* Begin PBXBuildFile section */
1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };
1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; };
DA12F3060EF6E70100A40C6D /* title.tga in Resources */ = {isa = PBXBuildFile; fileRef = DA12F2FC0EF6E70100A40C6D /* title.tga */; };
DA12F3070EF6E70100A40C6D /* heart.tga in Resources */ = {isa = PBXBuildFile; fileRef = DA12F2FD0EF6E70100A40C6D /* heart.tga */; };
DA12F3080EF6E70100A40C6D /* numerals.tga in Resources */ = {isa = PBXBuildFile; fileRef = DA12F2FE0EF6E70100A40C6D /* numerals.tga */; };
DA12F3090EF6E70100A40C6D /* spouseSprite.tga in Resources */ = {isa = PBXBuildFile; fileRef = DA12F2FF0EF6E70100A40C6D /* spouseSprite.tga */; };
DA12F30A0EF6E70100A40C6D /* tileSet.tga in Resources */ = {isa = PBXBuildFile; fileRef = DA12F3000EF6E70100A40C6D /* tileSet.tga */; };
DA12F30B0EF6E70100A40C6D /* chestPrize.tga in Resources */ = {isa = PBXBuildFile; fileRef = DA12F3010EF6E70100A40C6D /* chestPrize.tga */; };
DA12F30C0EF6E70100A40C6D /* chestDust.tga in Resources */ = {isa = PBXBuildFile; fileRef = DA12F3020EF6E70100A40C6D /* chestDust.tga */; };
DA12F30D0EF6E70100A40C6D /* chest.tga in Resources */ = {isa = PBXBuildFile; fileRef = DA12F3030EF6E70100A40C6D /* chest.tga */; };
DA12F30E0EF6E70100A40C6D /* characterSpriteSad.tga in Resources */ = {isa = PBXBuildFile; fileRef = DA12F3040EF6E70100A40C6D /* characterSpriteSad.tga */; };
DA12F30F0EF6E70100A40C6D /* characterSprite.tga in Resources */ = {isa = PBXBuildFile; fileRef = DA12F3050EF6E70100A40C6D /* characterSprite.tga */; };
DA12F3390EF6E89F00A40C6D /* World.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA12F32E0EF6E89F00A40C6D /* World.cpp */; };
DA12F33A0EF6E89F00A40C6D /* score.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA12F3300EF6E89F00A40C6D /* score.cpp */; };
DA12F33B0EF6E89F00A40C6D /* map.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA12F3320EF6E89F00A40C6D /* map.cpp */; };
DA12F33C0EF6E89F00A40C6D /* landscape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA12F3340EF6E89F00A40C6D /* landscape.cpp */; };
DA12F33D0EF6E89F00A40C6D /* Envelope.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA12F3370EF6E89F00A40C6D /* Envelope.cpp */; };
DA12F3420EF6E8BD00A40C6D /* blowUp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA12F33E0EF6E8BD00A40C6D /* blowUp.cpp */; };
DA12F3430EF6E8BD00A40C6D /* common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA12F3400EF6E8BD00A40C6D /* common.cpp */; };
DA12F3440EF6E8BD00A40C6D /* game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA12F3410EF6E8BD00A40C6D /* game.cpp */; };
DA12F3E60EF6F00600A40C6D /* music.tga in Resources */ = {isa = PBXBuildFile; fileRef = DA12F3E50EF6F00600A40C6D /* music.tga */; };
DA7F11810EF6D77000CB6D50 /* gameWindowAppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = DA7F117E0EF6D77000CB6D50 /* gameWindowAppDelegate.mm */; };
DA8276E60EF9B2290061079D /* arrows.tga in Resources */ = {isa = PBXBuildFile; fileRef = DA8276E50EF9B2290061079D /* arrows.tga */; };
DA8277840EF9FFE80061079D /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = DA8277830EF9FFE80061079D /* Icon.png */; };
DA86AEC90EF53C7100054E6B /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 28AD733E0D9D9553002E5188 /* MainWindow.xib */; };
DA8C9E1C0EF8095C002FCA67 /* TimeUnix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA8C9E1B0EF8095C002FCA67 /* TimeUnix.cpp */; };
DA8C9E1E0EF80968002FCA67 /* ThreadLinux.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA8C9E1D0EF80968002FCA67 /* ThreadLinux.cpp */; };
DA8C9E200EF80985002FCA67 /* PathLinux.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA8C9E1F0EF80985002FCA67 /* PathLinux.cpp */; };
DA8C9F090EF817F7002FCA67 /* StringBufferOutputStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA8C9F050EF817F7002FCA67 /* StringBufferOutputStream.cpp */; };
DA8C9F0A0EF817F7002FCA67 /* stringUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA8C9F070EF817F7002FCA67 /* stringUtils.cpp */; };
DA90DD060EFAB907001BABB5 /* musicPlayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA90DD050EFAB907001BABB5 /* musicPlayer.cpp */; };
DA90DD140EFAC2AF001BABB5 /* Timbre.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA90DD110EFAC2AF001BABB5 /* Timbre.cpp */; };
DA90DD4A0EFADE15001BABB5 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA90DD490EFADE15001BABB5 /* AudioToolbox.framework */; };
DA9E302E0EFC010300DFACC7 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA9E302C0EFC010300DFACC7 /* QuartzCore.framework */; };
DA9E302F0EFC010300DFACC7 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA9E302D0EFC010300DFACC7 /* OpenGLES.framework */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
1D6058910D05DD3D006BFB54 /* Passage.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Passage.app; sourceTree = BUILT_PRODUCTS_DIR; };
1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
28AD733E0D9D9553002E5188 /* MainWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainWindow.xib; sourceTree = "<group>"; };
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
DA12F2FC0EF6E70100A40C6D /* title.tga */ = {isa = PBXFileReference; lastKnownFileType = file; name = title.tga; path = ../graphics/title.tga; sourceTree = SOURCE_ROOT; };
DA12F2FD0EF6E70100A40C6D /* heart.tga */ = {isa = PBXFileReference; lastKnownFileType = file; name = heart.tga; path = ../graphics/heart.tga; sourceTree = SOURCE_ROOT; };
DA12F2FE0EF6E70100A40C6D /* numerals.tga */ = {isa = PBXFileReference; lastKnownFileType = file; name = numerals.tga; path = ../graphics/numerals.tga; sourceTree = SOURCE_ROOT; };
DA12F2FF0EF6E70100A40C6D /* spouseSprite.tga */ = {isa = PBXFileReference; lastKnownFileType = file; name = spouseSprite.tga; path = ../graphics/spouseSprite.tga; sourceTree = SOURCE_ROOT; };
DA12F3000EF6E70100A40C6D /* tileSet.tga */ = {isa = PBXFileReference; lastKnownFileType = file; name = tileSet.tga; path = ../graphics/tileSet.tga; sourceTree = SOURCE_ROOT; };
DA12F3010EF6E70100A40C6D /* chestPrize.tga */ = {isa = PBXFileReference; lastKnownFileType = file; name = chestPrize.tga; path = ../graphics/chestPrize.tga; sourceTree = SOURCE_ROOT; };
DA12F3020EF6E70100A40C6D /* chestDust.tga */ = {isa = PBXFileReference; lastKnownFileType = file; name = chestDust.tga; path = ../graphics/chestDust.tga; sourceTree = SOURCE_ROOT; };
DA12F3030EF6E70100A40C6D /* chest.tga */ = {isa = PBXFileReference; lastKnownFileType = file; name = chest.tga; path = ../graphics/chest.tga; sourceTree = SOURCE_ROOT; };
DA12F3040EF6E70100A40C6D /* characterSpriteSad.tga */ = {isa = PBXFileReference; lastKnownFileType = file; name = characterSpriteSad.tga; path = ../graphics/characterSpriteSad.tga; sourceTree = SOURCE_ROOT; };
DA12F3050EF6E70100A40C6D /* characterSprite.tga */ = {isa = PBXFileReference; lastKnownFileType = file; name = characterSprite.tga; path = ../graphics/characterSprite.tga; sourceTree = SOURCE_ROOT; };
DA12F32D0EF6E89F00A40C6D /* World.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = World.h; path = ../World.h; sourceTree = SOURCE_ROOT; };
DA12F32E0EF6E89F00A40C6D /* World.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = World.cpp; path = ../World.cpp; sourceTree = SOURCE_ROOT; };
DA12F32F0EF6E89F00A40C6D /* score.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = score.h; path = ../score.h; sourceTree = SOURCE_ROOT; };
DA12F3300EF6E89F00A40C6D /* score.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = score.cpp; path = ../score.cpp; sourceTree = SOURCE_ROOT; };
DA12F3310EF6E89F00A40C6D /* map.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = map.h; path = ../map.h; sourceTree = SOURCE_ROOT; };
DA12F3320EF6E89F00A40C6D /* map.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = map.cpp; path = ../map.cpp; sourceTree = SOURCE_ROOT; };
DA12F3330EF6E89F00A40C6D /* landscape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = landscape.h; path = ../landscape.h; sourceTree = SOURCE_ROOT; };
DA12F3340EF6E89F00A40C6D /* landscape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = landscape.cpp; path = ../landscape.cpp; sourceTree = SOURCE_ROOT; };
DA12F3350EF6E89F00A40C6D /* HashTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HashTable.h; path = ../HashTable.h; sourceTree = SOURCE_ROOT; };
DA12F3360EF6E89F00A40C6D /* Envelope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Envelope.h; path = ../Envelope.h; sourceTree = SOURCE_ROOT; };
DA12F3370EF6E89F00A40C6D /* Envelope.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Envelope.cpp; path = ../Envelope.cpp; sourceTree = SOURCE_ROOT; };
DA12F33E0EF6E8BD00A40C6D /* blowUp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = blowUp.cpp; sourceTree = "<group>"; };
DA12F33F0EF6E8BD00A40C6D /* blowUp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blowUp.h; sourceTree = "<group>"; };
DA12F3400EF6E8BD00A40C6D /* common.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = common.cpp; sourceTree = "<group>"; };
DA12F3410EF6E8BD00A40C6D /* game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = game.cpp; sourceTree = "<group>"; };
DA12F3CF0EF6EED000A40C6D /* common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = common.h; path = ../common.h; sourceTree = SOURCE_ROOT; };
DA12F3E50EF6F00600A40C6D /* music.tga */ = {isa = PBXFileReference; lastKnownFileType = file; name = music.tga; path = ../music/music.tga; sourceTree = SOURCE_ROOT; };
DA7F10EE0EF6CA2500CB6D50 /* drawIntoScreen.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = drawIntoScreen.h; sourceTree = "<group>"; };
DA7F117E0EF6D77000CB6D50 /* gameWindowAppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = gameWindowAppDelegate.mm; sourceTree = "<group>"; };
DA7F117F0EF6D77000CB6D50 /* gameWindowAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gameWindowAppDelegate.h; sourceTree = "<group>"; };
DA7F11800EF6D77000CB6D50 /* gameWindowApp_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gameWindowApp_Prefix.pch; sourceTree = "<group>"; };
DA8276E50EF9B2290061079D /* arrows.tga */ = {isa = PBXFileReference; lastKnownFileType = file; path = arrows.tga; sourceTree = "<group>"; };
DA8277830EF9FFE80061079D /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon.png; sourceTree = "<group>"; };
DA8C9E1B0EF8095C002FCA67 /* TimeUnix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TimeUnix.cpp; path = ../../../minorGems/system/unix/TimeUnix.cpp; sourceTree = SOURCE_ROOT; };
DA8C9E1D0EF80968002FCA67 /* ThreadLinux.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ThreadLinux.cpp; path = ../../../minorGems/system/linux/ThreadLinux.cpp; sourceTree = SOURCE_ROOT; };
DA8C9E1F0EF80985002FCA67 /* PathLinux.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PathLinux.cpp; path = ../../../minorGems/io/file/linux/PathLinux.cpp; sourceTree = SOURCE_ROOT; };
DA8C9F050EF817F7002FCA67 /* StringBufferOutputStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StringBufferOutputStream.cpp; path = ../../../minorGems/util/StringBufferOutputStream.cpp; sourceTree = SOURCE_ROOT; };
DA8C9F060EF817F7002FCA67 /* StringBufferOutputStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StringBufferOutputStream.h; path = ../../../minorGems/util/StringBufferOutputStream.h; sourceTree = SOURCE_ROOT; };
DA8C9F070EF817F7002FCA67 /* stringUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stringUtils.cpp; path = ../../../minorGems/util/stringUtils.cpp; sourceTree = SOURCE_ROOT; };
DA8C9F080EF817F7002FCA67 /* stringUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stringUtils.h; path = ../../../minorGems/util/stringUtils.h; sourceTree = SOURCE_ROOT; };
DA90DD050EFAB907001BABB5 /* musicPlayer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = musicPlayer.cpp; sourceTree = "<group>"; };
DA90DD110EFAC2AF001BABB5 /* Timbre.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Timbre.cpp; path = ../Timbre.cpp; sourceTree = SOURCE_ROOT; };
DA90DD120EFAC2AF001BABB5 /* Timbre.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Timbre.h; path = ../Timbre.h; sourceTree = SOURCE_ROOT; };
DA90DD130EFAC2AF001BABB5 /* musicPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = musicPlayer.h; path = ../musicPlayer.h; sourceTree = SOURCE_ROOT; };
DA90DD490EFADE15001BABB5 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
DA9E302C0EFC010300DFACC7 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
DA9E302D0EFC010300DFACC7 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
1D60588F0D05DD3D006BFB54 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */,
1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */,
DA90DD4A0EFADE15001BABB5 /* AudioToolbox.framework in Frameworks */,
DA9E302E0EFC010300DFACC7 /* QuartzCore.framework in Frameworks */,
DA9E302F0EFC010300DFACC7 /* OpenGLES.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
080E96DDFE201D6D7F000001 /* Classes */ = {
isa = PBXGroup;
children = (
);
path = Classes;
sourceTree = "<group>";
};
19C28FACFE9D520D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
1D6058910D05DD3D006BFB54 /* Passage.app */,
);
name = Products;
sourceTree = "<group>";
};
29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
isa = PBXGroup;
children = (
080E96DDFE201D6D7F000001 /* Classes */,
29B97315FDCFA39411CA2CEA /* Other Sources */,
29B97317FDCFA39411CA2CEA /* Resources */,
29B97323FDCFA39411CA2CEA /* Frameworks */,
19C28FACFE9D520D11CA2CBB /* Products */,
);
name = CustomTemplate;
sourceTree = "<group>";
};
29B97315FDCFA39411CA2CEA /* Other Sources */ = {
isa = PBXGroup;
children = (
DA12F31E0EF6E84900A40C6D /* Unchanged */,
DA12F31D0EF6E83D00A40C6D /* Customized */,
DA7F117E0EF6D77000CB6D50 /* gameWindowAppDelegate.mm */,
DA7F117F0EF6D77000CB6D50 /* gameWindowAppDelegate.h */,
DA7F11800EF6D77000CB6D50 /* gameWindowApp_Prefix.pch */,
DA7F10EE0EF6CA2500CB6D50 /* drawIntoScreen.h */,
29B97316FDCFA39411CA2CEA /* main.m */,
);
name = "Other Sources";
sourceTree = "<group>";
};
29B97317FDCFA39411CA2CEA /* Resources */ = {
isa = PBXGroup;
children = (
DA8277830EF9FFE80061079D /* Icon.png */,
DA12F2FB0EF6E6B100A40C6D /* graphics */,
28AD733E0D9D9553002E5188 /* MainWindow.xib */,
8D1107310486CEB800E47090 /* Info.plist */,
);
name = Resources;
sourceTree = "<group>";
};
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
isa = PBXGroup;
children = (
DA9E302C0EFC010300DFACC7 /* QuartzCore.framework */,
DA9E302D0EFC010300DFACC7 /* OpenGLES.framework */,
DA90DD490EFADE15001BABB5 /* AudioToolbox.framework */,
1DF5F4DF0D08C38300B7A737 /* UIKit.framework */,
1D30AB110D05D00D00671497 /* Foundation.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
DA12F2FB0EF6E6B100A40C6D /* graphics */ = {
isa = PBXGroup;
children = (
DA8276E50EF9B2290061079D /* arrows.tga */,
DA12F3E50EF6F00600A40C6D /* music.tga */,
DA12F2FC0EF6E70100A40C6D /* title.tga */,
DA12F2FD0EF6E70100A40C6D /* heart.tga */,
DA12F2FE0EF6E70100A40C6D /* numerals.tga */,
DA12F2FF0EF6E70100A40C6D /* spouseSprite.tga */,
DA12F3000EF6E70100A40C6D /* tileSet.tga */,
DA12F3010EF6E70100A40C6D /* chestPrize.tga */,
DA12F3020EF6E70100A40C6D /* chestDust.tga */,
DA12F3030EF6E70100A40C6D /* chest.tga */,
DA12F3040EF6E70100A40C6D /* characterSpriteSad.tga */,
DA12F3050EF6E70100A40C6D /* characterSprite.tga */,
);
name = graphics;
sourceTree = "<group>";
};
DA12F31D0EF6E83D00A40C6D /* Customized */ = {
isa = PBXGroup;
children = (
DA12F33E0EF6E8BD00A40C6D /* blowUp.cpp */,
DA90DD050EFAB907001BABB5 /* musicPlayer.cpp */,
DA12F33F0EF6E8BD00A40C6D /* blowUp.h */,
DA12F3400EF6E8BD00A40C6D /* common.cpp */,
DA12F3410EF6E8BD00A40C6D /* game.cpp */,
);
name = Customized;
sourceTree = "<group>";
};
DA12F31E0EF6E84900A40C6D /* Unchanged */ = {
isa = PBXGroup;
children = (
DA8C9E030EF80930002FCA67 /* minorGems */,
DA90DD110EFAC2AF001BABB5 /* Timbre.cpp */,
DA90DD120EFAC2AF001BABB5 /* Timbre.h */,
DA90DD130EFAC2AF001BABB5 /* musicPlayer.h */,
DA12F3CF0EF6EED000A40C6D /* common.h */,
DA12F32D0EF6E89F00A40C6D /* World.h */,
DA12F32E0EF6E89F00A40C6D /* World.cpp */,
DA12F32F0EF6E89F00A40C6D /* score.h */,
DA12F3300EF6E89F00A40C6D /* score.cpp */,
DA12F3310EF6E89F00A40C6D /* map.h */,
DA12F3320EF6E89F00A40C6D /* map.cpp */,
DA12F3330EF6E89F00A40C6D /* landscape.h */,
DA12F3340EF6E89F00A40C6D /* landscape.cpp */,
DA12F3350EF6E89F00A40C6D /* HashTable.h */,
DA12F3360EF6E89F00A40C6D /* Envelope.h */,
DA12F3370EF6E89F00A40C6D /* Envelope.cpp */,
);
name = Unchanged;
sourceTree = "<group>";
};
DA8C9E030EF80930002FCA67 /* minorGems */ = {
isa = PBXGroup;
children = (
DA8C9F050EF817F7002FCA67 /* StringBufferOutputStream.cpp */,
DA8C9F060EF817F7002FCA67 /* StringBufferOutputStream.h */,
DA8C9F070EF817F7002FCA67 /* stringUtils.cpp */,
DA8C9F080EF817F7002FCA67 /* stringUtils.h */,
DA8C9E1F0EF80985002FCA67 /* PathLinux.cpp */,
DA8C9E1B0EF8095C002FCA67 /* TimeUnix.cpp */,
DA8C9E1D0EF80968002FCA67 /* ThreadLinux.cpp */,
);
name = minorGems;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
1D6058900D05DD3D006BFB54 /* Passage */ = {
isa = PBXNativeTarget;
buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "Passage" */;
buildPhases = (
1D60588D0D05DD3D006BFB54 /* Resources */,
1D60588E0D05DD3D006BFB54 /* Sources */,
1D60588F0D05DD3D006BFB54 /* Frameworks */,
DA12F31C0EF6E79F00A40C6D /* ShellScript */,
);
buildRules = (
);
dependencies = (
);
name = Passage;
productName = testWindowApp;
productReference = 1D6058910D05DD3D006BFB54 /* Passage.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
29B97313FDCFA39411CA2CEA /* Project object */ = {
isa = PBXProject;
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "gameWindowApp" */;
compatibilityVersion = "Xcode 3.1";
hasScannedForEncodings = 1;
mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;
projectDirPath = "";
projectRoot = "";
targets = (
1D6058900D05DD3D006BFB54 /* Passage */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
1D60588D0D05DD3D006BFB54 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
DA86AEC90EF53C7100054E6B /* MainWindow.xib in Resources */,
DA12F3060EF6E70100A40C6D /* title.tga in Resources */,
DA12F3070EF6E70100A40C6D /* heart.tga in Resources */,
DA12F3080EF6E70100A40C6D /* numerals.tga in Resources */,
DA12F3090EF6E70100A40C6D /* spouseSprite.tga in Resources */,
DA12F30A0EF6E70100A40C6D /* tileSet.tga in Resources */,
DA12F30B0EF6E70100A40C6D /* chestPrize.tga in Resources */,
DA12F30C0EF6E70100A40C6D /* chestDust.tga in Resources */,
DA12F30D0EF6E70100A40C6D /* chest.tga in Resources */,
DA12F30E0EF6E70100A40C6D /* characterSpriteSad.tga in Resources */,
DA12F30F0EF6E70100A40C6D /* characterSprite.tga in Resources */,
DA12F3E60EF6F00600A40C6D /* music.tga in Resources */,
DA8276E60EF9B2290061079D /* arrows.tga in Resources */,
DA8277840EF9FFE80061079D /* Icon.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
DA12F31C0EF6E79F00A40C6D /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
1D60588E0D05DD3D006BFB54 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
1D60589B0D05DD56006BFB54 /* main.m in Sources */,
DA7F11810EF6D77000CB6D50 /* gameWindowAppDelegate.mm in Sources */,
DA12F3390EF6E89F00A40C6D /* World.cpp in Sources */,
DA12F33A0EF6E89F00A40C6D /* score.cpp in Sources */,
DA12F33B0EF6E89F00A40C6D /* map.cpp in Sources */,
DA12F33C0EF6E89F00A40C6D /* landscape.cpp in Sources */,
DA12F33D0EF6E89F00A40C6D /* Envelope.cpp in Sources */,
DA12F3420EF6E8BD00A40C6D /* blowUp.cpp in Sources */,
DA12F3430EF6E8BD00A40C6D /* common.cpp in Sources */,
DA12F3440EF6E8BD00A40C6D /* game.cpp in Sources */,
DA8C9E1C0EF8095C002FCA67 /* TimeUnix.cpp in Sources */,
DA8C9E1E0EF80968002FCA67 /* ThreadLinux.cpp in Sources */,
DA8C9E200EF80985002FCA67 /* PathLinux.cpp in Sources */,
DA8C9F090EF817F7002FCA67 /* StringBufferOutputStream.cpp in Sources */,
DA8C9F0A0EF817F7002FCA67 /* stringUtils.cpp in Sources */,
DA90DD060EFAB907001BABB5 /* musicPlayer.cpp in Sources */,
DA90DD140EFAC2AF001BABB5 /* Timbre.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
1D6058940D05DD3E006BFB54 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
COPY_PHASE_STRIP = NO;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = gameWindowApp_Prefix.pch;
HEADER_SEARCH_PATHS = /Users/jasonrohrer/cpp;
INFOPLIST_FILE = Info.plist;
PRODUCT_NAME = Passage;
};
name = Debug;
};
1D6058950D05DD3E006BFB54 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
COPY_PHASE_STRIP = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = gameWindowApp_Prefix.pch;
HEADER_SEARCH_PATHS = /Users/jasonrohrer/cpp;
INFOPLIST_FILE = Info.plist;
PRODUCT_NAME = Passage;
};
name = Release;
};
C01FCF4F08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
GCC_C_LANGUAGE_STANDARD = c99;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
ONLY_ACTIVE_ARCH = YES;
PREBINDING = NO;
SDKROOT = iphoneos2.2;
};
name = Debug;
};
C01FCF5008A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
GCC_C_LANGUAGE_STANDARD = c99;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
PREBINDING = NO;
SDKROOT = iphoneos2.2;
};
name = Release;
};
DA9E30CB0EFC240700DFACC7 /* Distribution */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
GCC_C_LANGUAGE_STANDARD = c99;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
PREBINDING = NO;
SDKROOT = iphoneos2.2;
};
name = Distribution;
};
DA9E30CC0EFC240700DFACC7 /* Distribution */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CODE_SIGN_IDENTITY = "";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Jason Rohrer";
COPY_PHASE_STRIP = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = gameWindowApp_Prefix.pch;
HEADER_SEARCH_PATHS = /Users/jasonrohrer/cpp;
INFOPLIST_FILE = Info.plist;
PRODUCT_NAME = Passage;
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "0BE1AB5F-422D-4C27-A26D-B23A5A1F89C1";
};
name = Distribution;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "Passage" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1D6058940D05DD3E006BFB54 /* Debug */,
1D6058950D05DD3E006BFB54 /* Release */,
DA9E30CC0EFC240700DFACC7 /* Distribution */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "gameWindowApp" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4F08A954540054247B /* Debug */,
C01FCF5008A954540054247B /* Release */,
DA9E30CB0EFC240700DFACC7 /* Distribution */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
}

View file

@ -0,0 +1,74 @@
//
// testWindowAppAppDelegate.h
// testWindowApp
//
// Created by Jason Rohrer on 12/14/08.
// Copyright __MyCompanyName__ 2008. All rights reserved.
//
#include "drawIntoScreen.h"
#import <UIKit/UIKit.h>
#import <OpenGLES/EAGL.h>
#import <OpenGLES/ES1/gl.h>
#import <OpenGLES/ES1/glext.h>
@interface MyView : UIView {
@private
NSTimer *animationTimer;
/* The pixel dimensions of the backbuffer */
GLint backingWidth;
GLint backingHeight;
EAGLContext *context;
/* OpenGL names for the renderbuffer and framebuffers used to render to this view */
GLuint viewRenderbuffer, viewFramebuffer;
/* OpenGL name for the depth buffer that is attached to viewFramebuffer, if it exists (0 if it does not exist) */
GLuint depthRenderbuffer;
GLuint textureID;
Uint32 *screenBitmap;
int bitmapW;
int bitmapH;
int bitmapBytes;
// for old DrawImage version
// CGDataProviderRef provider;
// CGColorSpaceRef colorSpaceRef;
// CGImageRef imageRef;
}
@property NSTimer *animationTimer;
@property (nonatomic, retain) EAGLContext *context;
- (void)startAnimation;
- (void)stopAnimation;
- (void)drawFrame;
- (BOOL) createFramebuffer;
- (void) destroyFramebuffer;
@end
@interface gameWindowAppDelegate : NSObject <UIAccelerometerDelegate> {
UIWindow *window;
MyView *view;
// used for low-pass filtering
UIAccelerationValue accelerationBuffer[3];
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet MyView *view;
@end

View file

@ -0,0 +1,434 @@
//
// testWindowAppAppDelegate.m
// testWindowApp
//
// Created by Jason Rohrer on 12/14/08.
// Copyright __MyCompanyName__ 2008. All rights reserved.
//
#import "gameWindowAppDelegate.h"
@implementation gameWindowAppDelegate
@synthesize window;
@synthesize view;
- (void)applicationDidFinishLaunching:(UIApplication *)application {
printf( "App finished launching\n" );
printf( "Calling start anim\n" );
[view startAnimation];
printf( "Done starting animation\n" );
// Override point for customization after application launch
[window makeKeyAndVisible];
// Configure and start the accelerometer
// off for now
//[[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1.0 / 15)];
//[[UIAccelerometer sharedAccelerometer] setDelegate:self];
}
// UIAccelerometerDelegate method, called when the device accelerates.
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
//printf( "%d --- accel called w %f,%f\n", timeOfCall, acceleration.x, acceleration.y );
// low pass filter
float filterFactor = 0.5;
accelerationBuffer[0] = acceleration.x * filterFactor + (1-filterFactor) * accelerationBuffer[0];
accelerationBuffer[1] = acceleration.y * filterFactor + (1-filterFactor) * accelerationBuffer[1];
accelerationBuffer[2] = acceleration.z * filterFactor + (1-filterFactor) * accelerationBuffer[2];
setOrientation( asin( accelerationBuffer[0] ), asin( accelerationBuffer[1] ) );
}
- (void)dealloc {
[window release];
[view stopAnimation];
[view release];
[super dealloc];
}
@end
#include "drawIntoScreen.h"
#import <QuartzCore/QuartzCore.h>
#import <OpenGLES/EAGLDrawable.h>
@implementation MyView
@synthesize animationTimer;
@synthesize context;
// You must implement this method
+ (Class)layerClass {
return [CAEAGLLayer class];
}
//The GL view is stored in the nib file. When it's unarchived it's sent -initWithCoder:
- (id)initWithCoder:(NSCoder*)coder {
if ((self = [super initWithCoder:coder])) {
// Get the layer
CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer;
eaglLayer.opaque = YES;
eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:NO], kEAGLDrawablePropertyRetainedBacking, kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat, nil];
context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];
if (!context || ![EAGLContext setCurrentContext:context]) {
[self release];
return nil;
}
}
return self;
}
NSTimeInterval countStartTime;
int appFrameCount = 0;
- (void)layoutSubviews {
[EAGLContext setCurrentContext:context];
[self destroyFramebuffer];
[self createFramebuffer];
NSDate *then = [NSDate date];
countStartTime = [then timeIntervalSinceReferenceDate];
[self drawFrame];
}
- (BOOL)createFramebuffer {
glGenFramebuffersOES(1, &viewFramebuffer);
glGenRenderbuffersOES(1, &viewRenderbuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer];
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES) {
NSLog(@"failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES));
return NO;
}
glGenTextures( 1, &textureID );
return YES;
}
- (void)destroyFramebuffer {
glDeleteFramebuffersOES(1, &viewFramebuffer);
viewFramebuffer = 0;
glDeleteRenderbuffersOES(1, &viewRenderbuffer);
viewRenderbuffer = 0;
if(depthRenderbuffer) {
glDeleteRenderbuffersOES(1, &depthRenderbuffer);
depthRenderbuffer = 0;
}
glDeleteTextures( 1, &textureID );
}
- (void)setAnimationTimer:(NSTimer *)newTimer {
[animationTimer invalidate];
animationTimer = newTimer;
}
- (void)startAnimation {
NSTimeInterval animationInterval = 1 / 15.0;
self.animationTimer = [NSTimer scheduledTimerWithTimeInterval:animationInterval target:self selector:@selector(drawFrame) userInfo:nil repeats:YES];
bitmapW = 128;
bitmapH = 128;
int screenPixels = bitmapW * bitmapH;
bitmapBytes = screenPixels* 4;
screenBitmap = (Uint32 *) malloc( bitmapBytes );
/*
// for old DrawImage version
provider = CGDataProviderCreateWithData( NULL, screenBitmap, screenPixels * 4, NULL );
colorSpaceRef = CGColorSpaceCreateDeviceRGB();
imageRef = CGImageCreate(
bitmapW,
bitmapH,
8,
32,
4 * bitmapW,
colorSpaceRef,
kCGImageAlphaNoneSkipLast,
provider,
NULL,
NO,
kCGRenderingIntentDefault );
*/
initScreenDrawer( screenBitmap, bitmapW, bitmapH );
}
- (void)stopAnimation {
printf( "Stop anim called\n" );
self.animationTimer = nil;
free( screenBitmap );
freeScreenDrawer();
}
- (void)drawFrame {
// old DrawImage version
//[self setNeedsDisplay];
const GLfloat squareVertices[] = {
-1.6f, -1.6f,
1.6f, -1.6f,
-1.6f, 1.6f,
1.6f, 1.6f,
};
/*
const GLubyte squareColors[] = {
255, 255, 0, 255,
0, 255, 255, 255,
255, 0, 0, 0,
255, 0, 255, 255,
};
*/
const GLfloat squareTextureCoords[] = {
0, 0,
1, 0,
0, 1,
1, 1
};
[EAGLContext setCurrentContext:context];
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
glViewport(0, 0, backingWidth, backingHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(-1.0f, 1.0f, -1.5f, 1.5f, -1.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);
//glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
//glClear(GL_COLOR_BUFFER_BIT);
glVertexPointer(2, GL_FLOAT, 0, squareVertices);
glEnableClientState(GL_VERTEX_ARRAY);
//glColorPointer(4, GL_UNSIGNED_BYTE, 0, squareColors);
//glEnableClientState(GL_COLOR_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, squareTextureCoords);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
// set new texture data
drawIntoScreen( screenBitmap, bitmapW, bitmapH );
int error;
GLenum texFormat = GL_RGBA;
glBindTexture( GL_TEXTURE_2D, textureID );
error = glGetError();
if( error != GL_NO_ERROR ) { // error
printf( "Error binding to texture id %d, error = %d\n",
(int)textureID,
error );
}
glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
glTexImage2D( GL_TEXTURE_2D, 0,
texFormat, bitmapW,
bitmapH, 0,
texFormat, GL_UNSIGNED_BYTE, screenBitmap );
error = glGetError();
if( error != GL_NO_ERROR ) { // error
printf( "Error setting texture data for id %d, error = %d\n",
(int)textureID, error );
printf( "Perhaps texture image width or height is not a power of 2\n"
"Width = %lu, Height = %lu\n",
bitmapW, bitmapH );
}
glEnable( GL_TEXTURE_2D );
glBindTexture( GL_TEXTURE_2D, textureID );
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
appFrameCount++;
// disable FPS tracking
if( false && appFrameCount > 100 ) {
NSDate *now = [NSDate date];
NSTimeInterval newStartTime = [now timeIntervalSinceReferenceDate];
NSTimeInterval elapsedTime = newStartTime - countStartTime;
printf( "FPS: %f\n", appFrameCount / elapsedTime );
countStartTime = newStartTime;
appFrameCount = 0;
}
}
/*
// old DrawImage version
#include <time.h>
unsigned int appFrameCountStartTime = time( NULL );
int appFrameCount = 0;
- (void)drawRect:(CGRect)rect {
//printf( "Draw Rect called!\n" );
drawIntoScreen( screenBitmap, bitmapW, bitmapH );
CGContextRef context = UIGraphicsGetCurrentContext();
//CGContextRotateCTM ( context, M_PI / 2 );
//CGContextTranslateCTM ( context, 0, -bitmapH );
CGRect imageRect = CGRectMake ( 0, 0, bitmapW, bitmapH );
CGContextDrawImage(context, imageRect, imageRef );
appFrameCount++;
if( appFrameCount > 100 ) {
unsigned int newTime = time( NULL );
unsigned int timeDelta = newTime - appFrameCountStartTime;
printf( "FPS = %f\n", (double)appFrameCount / (double)timeDelta );
appFrameCount = 0;
appFrameCountStartTime = newTime;
}
}
*/
// Handles the start of a touch
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
CGRect bounds = [self bounds];
UITouch* touch = [[event touchesForView:self] anyObject];
//Convert touch point from UIView referential to OpenGL one (upside-down flip)
CGPoint location = [touch locationInView:self];
location.y = bounds.size.height - location.y;
touchStartPoint( location.x, location.y );
}
// Handles touch motion
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
CGRect bounds = [self bounds];
UITouch* touch = [[event touchesForView:self] anyObject];
//Convert touch point from UIView referential to OpenGL one (upside-down flip)
CGPoint location = [touch locationInView:self];
location.y = bounds.size.height - location.y;
touchMovePoint( location.x, location.y );
}
// Handles touch end
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
CGRect bounds = [self bounds];
UITouch* touch = [[event touchesForView:self] anyObject];
//Convert touch point from UIView referential to OpenGL one (upside-down flip)
CGPoint location = [touch locationInView:self];
location.y = bounds.size.height - location.y;
touchEndPoint( location.x, location.y );
}
@end

View file

@ -0,0 +1,8 @@
//
// Prefix header for all source files of the 'testWindowApp' target in the 'testWindowApp' project
//
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#endif

View file

@ -0,0 +1,41 @@
//
// main.m
// testWindowApp
//
// Created by Jason Rohrer on 12/14/08.
// Copyright __MyCompanyName__ 2008. All rights reserved.
//
#import <UIKit/UIKit.h>
int main(int argc, char *argv[]) {
//printf( "Arg 0 = %s\n", argv[0] );
// arg 0 is the path to the app executable
char *appDirectoryPath = strdup( argv[ 0 ] );
//printf( "Mac: app path %s\n", appDirectoryPath );
char *bundleName = "Passage.app";
char *appNamePointer = strstr( appDirectoryPath, bundleName );
if( appNamePointer != NULL ) {
// terminate full app path to get bundle directory
appNamePointer[ strlen( bundleName ) ] = '\0';
printf( "Mac: changing working dir to %s\n", appDirectoryPath );
chdir( appDirectoryPath );
}
free( appDirectoryPath );
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}

View file

@ -0,0 +1,799 @@
#include "common.h"
#include "Timbre.h"
#include "Envelope.h"
#include "minorGems/util/SimpleVector.h"
//#include <CoreServices.h>
#include <AudioUnit/AudioUnit.h>
#include <AudioUnit/AUComponent.h>
#include <math.h>
#include <stdlib.h>
#include <stdint.h>
typedef int16_t Sint16;
typedef uint8_t Uint8;
int sampleRate = 22050;
//int sampleRate = 11025;
Image *musicImage = NULL;
int w, h;
// total number of samples played so far
int streamSamples = 0;
// offset into grid at start
// for testing
int gridStartOffset = 0;
// overal loudness of music
double musicLoudness = 1.0;
// one grid step in seconds
double gridStepDuration = 0.25;
int gridStepDurationInSamples = (int)( gridStepDuration * sampleRate );
double entireGridDuraton;
// c
double keyFrequency = 261.63;
int numTimbres = 4;
Timbre *musicTimbres[ 4 ];
int numEnvelopes = 4;
Envelope *musicEnvelopes[ 4 ];
class Note {
public:
// index into musicTimbres array
int mTimbreNumber;
// index into musicEnvelopes array
int mEnvelopeNumber;
int mScaleNoteNumber;
// additional loudness adjustment
// places note in stereo space
double mLoudnessLeft;
double mLoudnessRight;
// start time, in seconds from start of note grid
double mStartTime;
// duration in seconds
double mDuration;
// used when note is currently playing to track progress in note
// negative if we should wait before starting to play the note
int mCurrentSampleNumber;
// duration in samples
int mNumSamples;
};
// isomorphic to our music image, except only has an entry for each note
// start (all others, including grid spots that contain note continuations,
// are NULL)
// indexed as noteGrid[y][x]
Note ***noteGrid;
SimpleVector<Note*> currentlyPlayingNotes;
// need to synch these with audio thread
void setMusicLoudness( double inLoudness ) {
//SDL_LockAudio();
musicLoudness = inLoudness;
//SDL_UnlockAudio();
}
void restartMusic() {
//SDL_LockAudio();
// return to beginning (and forget samples we've played so far)
streamSamples = 0;
// drop all currently-playing notes
currentlyPlayingNotes.deleteAll();
//SDL_UnlockAudio();
}
// called by SDL to get more samples
void audioCallback( void *inUserData, Uint8 *inStream, int inLengthToFill ) {
// 2 bytes for each channel of stereo sample
int numSamples = inLengthToFill / 4;
Sint16 *samplesL = new Sint16[ numSamples ];
Sint16 *samplesR = new Sint16[ numSamples ];
// first, zero-out the buffer to prepare it for our sum of note samples
// each sample is 2 bytes
memset( samplesL, 0, 2 * numSamples );
memset( samplesR, 0, 2 * numSamples );
int i;
// hop through all grid steps that *start* in this stream buffer
// add notes that start during this stream buffer
// how far into stream buffer before we hit our first grid step?
int startOfFirstGridStep = streamSamples % gridStepDurationInSamples;
if( startOfFirstGridStep != 0 ) {
startOfFirstGridStep =
gridStepDurationInSamples - startOfFirstGridStep;
}
// hop from start of grid step to start of next grid step
// ignore samples in between, since notes don't start there,
// and all we're doing right now is finding notes that start
for( i=startOfFirstGridStep;
i<numSamples;
i += gridStepDurationInSamples ) {
// start of new grid position
// check for new notes that are starting
// map into our music image:
int x = ( streamSamples + i ) / gridStepDurationInSamples;
// wrap in image
x = x % w;
for( int y=0; y<h; y++ ) {
Note *note = noteGrid[y][x];
if( note != NULL ) {
// new note
currentlyPlayingNotes.push_back( note );
// start it
// set a delay for its start based on our position
// in this callback buffer
note->mCurrentSampleNumber = -i;
}
}
}
streamSamples += numSamples;
// loop over all current notes and add their samples to buffer
for( int n=0; n<currentlyPlayingNotes.size(); n++ ) {
Note *note = *( currentlyPlayingNotes.getElement( n ) );
int waveTableNumber = note->mScaleNoteNumber;
Timbre *timbre = musicTimbres[ note->mTimbreNumber ];
int tableLength = timbre->mWaveTableLengths[ waveTableNumber ];
Sint16 *waveTable = timbre->mWaveTable[ waveTableNumber ];
Envelope *env = musicEnvelopes[ note->mEnvelopeNumber ];
double *envLevels =
env->getEnvelope(
// index envelope by number of grid steps in note
note->mNumSamples / gridStepDurationInSamples );
double noteLoudnessL = note->mLoudnessLeft;
double noteLoudnessR = note->mLoudnessRight;
// do this outside inner loop
noteLoudnessL *= musicLoudness;
noteLoudnessR *= musicLoudness;
int noteStartInBuffer = 0;
int noteEndInBuffer = numSamples;
if( note->mCurrentSampleNumber < 0 ) {
// delay before note starts in this sample buffer
noteStartInBuffer = - note->mCurrentSampleNumber;
// we've taken account of the delay
note->mCurrentSampleNumber = 0;
}
char endNote = false;
int numSamplesLeftInNote =
note->mNumSamples - note->mCurrentSampleNumber;
if( noteStartInBuffer + numSamplesLeftInNote < noteEndInBuffer ) {
// note ends before end of buffer
noteEndInBuffer = noteStartInBuffer + numSamplesLeftInNote;
endNote = true;
}
int waveTablePos = note->mCurrentSampleNumber % tableLength;
int currentSampleNumber = note->mCurrentSampleNumber;
for( i=noteStartInBuffer; i != noteEndInBuffer; i++ ) {
double envelope = envLevels[ currentSampleNumber ];
double monoSample = envelope *
waveTable[ waveTablePos ];
samplesL[i] += (Sint16)( noteLoudnessL * monoSample );
samplesR[i] += (Sint16)( noteLoudnessR * monoSample );
currentSampleNumber ++;
waveTablePos ++;
// avoid using mod operator (%) in inner loop
// found with profiler
if( waveTablePos == tableLength ) {
// back to start of table
waveTablePos = 0;
}
}
note->mCurrentSampleNumber += ( noteEndInBuffer - noteStartInBuffer );
if( endNote ) {
// note ended in this buffer
currentlyPlayingNotes.deleteElement( n );
n--;
}
}
// now copy samples into Uint8 buffer
int streamPosition = 0;
for( i=0; i != numSamples; i++ ) {
Sint16 intSampleL = samplesL[i];
Sint16 intSampleR = samplesR[i];
inStream[ streamPosition ] = (Uint8)( intSampleL & 0xFF );
inStream[ streamPosition + 1 ] = (Uint8)( ( intSampleL >> 8 ) & 0xFF );
inStream[ streamPosition + 2 ] = (Uint8)( intSampleR & 0xFF );
inStream[ streamPosition + 3 ] = (Uint8)( ( intSampleR >> 8 ) & 0xFF );
streamPosition += 4;
}
delete [] samplesL;
delete [] samplesR;
}
// limit on n, based on Nyquist, when summing sine components
//int nLimit = (int)( sampleRate * M_PI );
// actually, this is way too many: it takes forever to compute
// use a lower limit instead
// This produces fine results (almost perfect square wave)
int nLimit = 40;
// square wave with period of 2pi
double squareWave( double inT ) {
double sum = 0;
for( int n=1; n<nLimit; n+=2 ) {
sum += 1.0/n * sin( n * inT );
}
return sum;
}
// sawtoot wave with period of 2pi
double sawWave( double inT ) {
double sum = 0;
for( int n=1; n<nLimit; n++ ) {
sum += 1.0/n * sin( n * inT );
}
return sum;
}
// white noise, ignores inT
double whiteNoise( double inT ) {
return 2.0 * ( rand() / (double)RAND_MAX ) - 1.0;
}
// white noise where each sample is averaged with last sample
// effectively a low-pass filter
double lastSample = 0;
double smoothedWhiteNoise( double inT ) {
// give double-weight to last sample to make it even smoother
lastSample = ( 2 * lastSample + whiteNoise( inT ) ) / 3;
return lastSample;
}
void loadMusicImage( char *inTGAFileName ) {
musicImage = readTGA( "music", inTGAFileName );
w = musicImage->getWidth();
h = musicImage->getHeight();
// notes are in red and green channel
double *redChannel = musicImage->getChannel( 0 );
double *greenChannel = musicImage->getChannel( 1 );
entireGridDuraton = gridStepDuration * w;
// jump ahead in stream, if needed
streamSamples += gridStartOffset * gridStepDurationInSamples;
// blank line of pixels between timbres
int heightPerTimbre = (h+1) / numTimbres - 1;
// find the maximum number of simultaneous notes in the song
// take loudness into account
double maxNoteLoudnessInAColumn = 0;
int x, y;
for( x=0; x<w; x++ ) {
double noteLoudnessInColumnL = 0;
double noteLoudnessInColumnR = 0;
for( y=0; y<h; y++ ) {
int imageIndex = y * w + x;
// the note number in our scale
// scale starts over for each timbre, with blank line
// in between timbres
int noteNumber = (h - y - 1) % (heightPerTimbre + 1);
if( // not blank line between timbres
noteNumber < heightPerTimbre &&
// tone present in image
( redChannel[ imageIndex ] > 0 ||
greenChannel[ imageIndex ] > 0 ) ) {
noteLoudnessInColumnL += greenChannel[ imageIndex ];
noteLoudnessInColumnR += redChannel[ imageIndex ];
}
}
// pick loudest channel for this column and compare it to
// loudest column/channel seen so far
if( maxNoteLoudnessInAColumn < noteLoudnessInColumnL ) {
maxNoteLoudnessInAColumn = noteLoudnessInColumnL;
}
if( maxNoteLoudnessInAColumn < noteLoudnessInColumnR ) {
maxNoteLoudnessInAColumn = noteLoudnessInColumnR;
}
}
// divide loudness amoung timbres to avoid clipping
double loudnessPerTimbre = 1.0 / maxNoteLoudnessInAColumn;
// further adjust loudness per channel here as we construct
// each timbre.
// This is easier than tweaking loundness of a given part by hand
// using a painting program
musicTimbres[0] = new Timbre( sampleRate, 0.6 * loudnessPerTimbre,
keyFrequency,
heightPerTimbre, sawWave );
musicTimbres[1] = new Timbre( sampleRate, loudnessPerTimbre,
keyFrequency,
heightPerTimbre, sin );
musicTimbres[2] = new Timbre( sampleRate, 0.4 * loudnessPerTimbre,
keyFrequency / 4,
heightPerTimbre, squareWave );
musicTimbres[3] = new Timbre( sampleRate, 0.75 * loudnessPerTimbre,
keyFrequency / 4,
heightPerTimbre, smoothedWhiteNoise );
// next, compute the longest note in the song
int maxNoteLength = 0;
for( y=0; y<h; y++ ) {
int currentNoteLength = 0;
for( x=0; x<w; x++ ) {
int imageIndex = y * w + x;
// the note number in our scale
// scale starts over for each timbre, with blank line
// in between timbres
int noteNumber = (h - y - 1) % (heightPerTimbre + 1);
if( // not blank line between timbres
noteNumber < heightPerTimbre &&
// tone present in image
( redChannel[ imageIndex ] > 0 ||
greenChannel[ imageIndex ] > 0 ) ) {
currentNoteLength ++;
}
else {
currentNoteLength = 0;
}
if( currentNoteLength > maxNoteLength ) {
maxNoteLength = currentNoteLength;
}
}
}
printf( "Max note length in song = %d\n", maxNoteLength );
musicEnvelopes[0] = new Envelope( 0.05, 0.7, 0.25, 0.1,
maxNoteLength,
gridStepDurationInSamples );
musicEnvelopes[1] = new Envelope( 0.1, 0.9, 0.0, 0.0,
maxNoteLength,
gridStepDurationInSamples );
musicEnvelopes[2] = new Envelope( 0.25, 0.0, 1.0, 0.1,
maxNoteLength,
gridStepDurationInSamples );
musicEnvelopes[3] = new Envelope( 0.0, 0.2, 0.0, 0.0,
maxNoteLength,
gridStepDurationInSamples );
noteGrid = new Note**[ h ];
for( int y=0; y<h; y++ ) {
noteGrid[y] = new Note*[ w ];
// each row is one pitch for a given instrument
// thus, two consecutive pixels should be the same note
// handle this by tracking whether a note is playing or not
char notePlaying = false;
Note *noteStart = NULL;
for( int x=0; x<w; x++ ) {
int imageIndex = y * w + x;
// default to NULL
noteGrid[y][x] = NULL;
// the note number in our scale
// scale starts over for each timbre, with blank line
// in between timbres
int noteNumber = (h - y - 1) % (heightPerTimbre + 1);
if( // not blank line between timbres
noteNumber < heightPerTimbre &&
// tone present in image
( redChannel[ imageIndex ] > 0 ||
greenChannel[ imageIndex ] > 0 ) ) {
if( notePlaying ) {
// part of note that's already playing
// one more grid step
noteStart->mDuration += gridStepDuration;
noteStart->mNumSamples += gridStepDurationInSamples;
}
else {
// start a new note
noteGrid[y][x] = new Note();
noteGrid[y][x]->mScaleNoteNumber = noteNumber;
noteGrid[y][x]->mTimbreNumber =
y / ( heightPerTimbre + 1 );
// same as timbre number
noteGrid[y][x]->mEnvelopeNumber =
noteGrid[y][x]->mTimbreNumber;
// left loudness from green brightness
noteGrid[y][x]->mLoudnessLeft = greenChannel[ imageIndex ];
// right loudness from red brightness
noteGrid[y][x]->mLoudnessRight = redChannel[ imageIndex ];
noteGrid[y][x]->mStartTime = gridStepDuration * x;
// one grid step so far
noteGrid[y][x]->mDuration = gridStepDuration;
noteGrid[y][x]->mNumSamples = gridStepDurationInSamples;
// track if it needs to be continued
notePlaying = true;
noteStart = noteGrid[y][x];
}
}
else {
// no tone
if( notePlaying ) {
// stop it
notePlaying = false;
noteStart = NULL;
}
}
}
}
}
AudioUnit gOutputUnit;
OSStatus MyRenderer(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData)
{
audioCallback( NULL, (Uint8 *)( ioData->mBuffers[0].mData ), ioData->mBuffers[0].mDataByteSize );
/*
RenderSin (sSinWaveFrameCount,
inNumberFrames,
ioData->mBuffers[0].mData,
sSampleRate,
sAmplitude,
sToneFrequency,
sWhichFormat);
//we're just going to copy the data into each channel
for (UInt32 channel = 1; channel < ioData->mNumberBuffers; channel++)
memcpy (ioData->mBuffers[channel].mData, ioData->mBuffers[0].mData, ioData->mBuffers[0].mDataByteSize);
sSinWaveFrameCount += inNumberFrames;
*/
return noErr;
}
// ________________________________________________________________________________
//
// CreateDefaultAU
//
void CreateDefaultAU()
{
OSStatus err = noErr;
// Open the default output unit
AudioComponentDescription desc;
desc.componentType = kAudioUnitType_Output;
desc.componentSubType = kAudioUnitSubType_RemoteIO;
desc.componentManufacturer = kAudioUnitManufacturer_Apple;
desc.componentFlags = 0;
desc.componentFlagsMask = 0;
AudioComponent comp = AudioComponentFindNext(NULL, &desc);
if (comp == NULL) { printf ("FindNextComponent\n"); return; }
err = AudioComponentInstanceNew(comp, &gOutputUnit);
if (comp == NULL) { printf ("OpenAComponent=%ld\n", (long int)err); return; }
// Set up a callback function to generate output to the output unit
AURenderCallbackStruct input;
input.inputProc = MyRenderer;
input.inputProcRefCon = NULL;
err = AudioUnitSetProperty (gOutputUnit,
kAudioUnitProperty_SetRenderCallback,
kAudioUnitScope_Input,
0,
&input,
sizeof(input));
if (err) { printf ("AudioUnitSetProperty-CB=%ld\n", (long int)err); return; }
}
// ________________________________________________________________________________
//
// TestDefaultAU
//
void TestDefaultAU()
{
OSStatus err = noErr;
// We tell the Output Unit what format we're going to supply data to it
// this is necessary if you're providing data through an input callback
// AND you want the DefaultOutputUnit to do any format conversions
// necessary from your format to the device's format.
AudioStreamBasicDescription streamFormat;
streamFormat.mSampleRate = sampleRate;
streamFormat.mFormatID = kAudioFormatLinearPCM;
streamFormat.mFormatFlags =
kLinearPCMFormatFlagIsSignedInteger
| kAudioFormatFlagsNativeEndian
| kLinearPCMFormatFlagIsPacked;
//| kAudioFormatFlagIsNonInterleaved;
streamFormat.mBytesPerPacket = 4;
streamFormat.mFramesPerPacket = 1;
streamFormat.mBytesPerFrame = 4;
streamFormat.mChannelsPerFrame = 2;
streamFormat.mBitsPerChannel = 16;
printf("Rendering source:\n\t");
printf ("SampleRate=%f,", streamFormat.mSampleRate);
printf ("BytesPerPacket=%ld,", (long int)streamFormat.mBytesPerPacket);
printf ("FramesPerPacket=%ld,", (long int)streamFormat.mFramesPerPacket);
printf ("BytesPerFrame=%ld,", (long int)streamFormat.mBytesPerFrame);
printf ("BitsPerChannel=%ld,", (long int)streamFormat.mBitsPerChannel);
printf ("ChannelsPerFrame=%ld\n", (long int)streamFormat.mChannelsPerFrame);
err = AudioUnitSetProperty ( gOutputUnit,
kAudioUnitProperty_StreamFormat,
kAudioUnitScope_Input,
0,
&streamFormat,
sizeof(AudioStreamBasicDescription) );
if (err) { printf ("AudioUnitSetProperty-SF=%4.4s, %ld\n", (char*)&err, (long int)err); return; }
// Initialize unit
err = AudioUnitInitialize(gOutputUnit);
if (err) { printf ("AudioUnitInitialize=%ld\n", (long int)err); return; }
Float64 outSampleRate;
UInt32 size = sizeof(Float64);
err = AudioUnitGetProperty (gOutputUnit,
kAudioUnitProperty_SampleRate,
kAudioUnitScope_Output,
0,
&outSampleRate,
&size);
if (err) { printf ("AudioUnitSetProperty-GF=%4.4s, %ld\n", (char*)&err, (long int)err); return; }
// Start the rendering
// The DefaultOutputUnit will do any format conversions to the format of the default device
err = AudioOutputUnitStart (gOutputUnit);
if (err) { printf ("AudioOutputUnitStart=%ld\n", (long int)err); return; }
// we call the CFRunLoopRunInMode to service any notifications that the audio
// system has to deal with
//CFRunLoopRunInMode(kCFRunLoopDefaultMode, 2, false);
}
void CloseDefaultAU ()
{
// Clean up
OSStatus err = noErr;
err = AudioOutputUnitStop( gOutputUnit );
if (err) { printf ("AudioOutputUnitStop=%ld\n", (long int)err); return; }
err = AudioUnitUninitialize (gOutputUnit);
if (err) { printf ("AudioUnitUninitialize=%ld\n", (long int)err); return; }
AudioComponentInstanceDispose( gOutputUnit );
//CloseComponent(gOutputUnit);
}
void startMusic( char *inTGAFileName ) {
loadMusicImage( inTGAFileName );
CreateDefaultAU();
TestDefaultAU();
}
void stopMusic() {
CloseDefaultAU();
if( musicImage != NULL ) {
delete musicImage;
musicImage = NULL;
}
for( int y=0; y<h; y++ ) {
for( int x=0; x<w; x++ ) {
if( noteGrid[y][x] != NULL ) {
delete noteGrid[y][x];
}
}
delete [] noteGrid[y];
}
delete [] noteGrid;
int i;
for( i=0; i<numTimbres; i++ ) {
delete musicTimbres[i];
}
for( i=0; i<numEnvelopes; i++ ) {
delete musicEnvelopes[i];
}
}

View file

@ -0,0 +1,3 @@
Provider Provider Country Vendor Identifier UPC ISRC Artist / Show Title / Episode / Season Label/Studio/Network Product Type Identifier Units Royalty Price Begin Date End Date Customer Currency Country Code Royalty Currency Preorder Season Pass ISAN Apple Identifier Customer Price CMA Asset/Content Flavor
APPLE US 1001 Jason Rohrer Passage 1 1 .7 12/23/2008 12/23/2008 CAD CA CAD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 3 .7 12/23/2008 12/23/2008 USD US USD 300702040 .99

View file

@ -0,0 +1,14 @@
Provider Provider Country Vendor Identifier UPC ISRC Artist / Show Title / Episode / Season Label/Studio/Network Product Type Identifier Units Royalty Price Begin Date End Date Customer Currency Country Code Royalty Currency Preorder Season Pass ISAN Apple Identifier Customer Price CMA Asset/Content Flavor
APPLE US 1001 Jason Rohrer Passage 1 8 .36 12/24/2008 12/24/2008 GBP GB GBP 300702040 .59
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/24/2008 12/24/2008 EUR BE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 81 12/24/2008 12/24/2008 JPY JP JPY 300702040 115
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/24/2008 12/24/2008 EUR DE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/24/2008 12/24/2008 SEK SE EUR 300702040 7
APPLE US 1001 Jason Rohrer Passage 1 162 .7 12/24/2008 12/24/2008 USD US USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 2 .48 12/24/2008 12/24/2008 EUR FI EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/24/2008 12/24/2008 EUR ES EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 2 .48 12/24/2008 12/24/2008 EUR FR EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/24/2008 12/24/2008 EUR NL EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 0 12/24/2008 12/24/2008 USD US USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/24/2008 12/24/2008 EUR IE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 11 .7 12/24/2008 12/24/2008 CAD CA CAD 300702040 .99

View file

@ -0,0 +1,16 @@
Provider Provider Country Vendor Identifier UPC ISRC Artist / Show Title / Episode / Season Label/Studio/Network Product Type Identifier Units Royalty Price Begin Date End Date Customer Currency Country Code Royalty Currency Preorder Season Pass ISAN Apple Identifier Customer Price CMA Asset/Content Flavor
APPLE US 1001 Jason Rohrer Passage 1 99 .7 12/25/2008 12/25/2008 USD US USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 3 .48 12/25/2008 12/25/2008 EUR FR EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 5 .48 12/25/2008 12/25/2008 EUR DE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/25/2008 12/25/2008 EUR PT EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/25/2008 12/25/2008 EUR IE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 4 .48 12/25/2008 12/25/2008 EUR NL EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/25/2008 12/25/2008 EUR ES EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 5 .48 12/25/2008 12/25/2008 SEK SE EUR 300702040 7
APPLE US 1001 Jason Rohrer Passage 1 4 .48 12/25/2008 12/25/2008 DKK DK EUR 300702040 6
APPLE US 1001 Jason Rohrer Passage 1 1 .76 12/25/2008 12/25/2008 NZD NZ AUD 300702040 1.29
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/25/2008 12/25/2008 EUR BE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 6 .7 12/25/2008 12/25/2008 CAD CA CAD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 8 .76 12/25/2008 12/25/2008 AUD AU AUD 300702040 1.19
APPLE US 1001 Jason Rohrer Passage 1 32 .36 12/25/2008 12/25/2008 GBP GB GBP 300702040 .59
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/25/2008 12/25/2008 EUR IT EUR 300702040 .79

View file

@ -0,0 +1,20 @@
Provider Provider Country Vendor Identifier UPC ISRC Artist / Show Title / Episode / Season Label/Studio/Network Product Type Identifier Units Royalty Price Begin Date End Date Customer Currency Country Code Royalty Currency Preorder Season Pass ISAN Apple Identifier Customer Price CMA Asset/Content Flavor
APPLE US 1001 Jason Rohrer Passage 1 -1 .7 12/26/2008 12/26/2008 USD US USD 300702040 -.99
APPLE US 1001 Jason Rohrer Passage 1 2 .7 12/26/2008 12/26/2008 USD SG USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 1 .7 12/26/2008 12/26/2008 USD AR USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 2 .48 12/26/2008 12/26/2008 EUR FR EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 2 .48 12/26/2008 12/26/2008 EUR AT EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 3 .48 12/26/2008 12/26/2008 DKK DK EUR 300702040 6
APPLE US 1001 Jason Rohrer Passage 1 31 .36 12/26/2008 12/26/2008 GBP GB GBP 300702040 .59
APPLE US 1001 Jason Rohrer Passage 1 25 .7 12/26/2008 12/26/2008 CAD CA CAD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/26/2008 12/26/2008 NOK NO EUR 300702040 6
APPLE US 1001 Jason Rohrer Passage 1 2 .48 12/26/2008 12/26/2008 EUR NL EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 254 .7 12/26/2008 12/26/2008 USD US USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 9 .48 12/26/2008 12/26/2008 EUR DE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 6 .76 12/26/2008 12/26/2008 AUD AU AUD 300702040 1.19
APPLE US 1001 Jason Rohrer Passage 1 1 81 12/26/2008 12/26/2008 JPY JP JPY 300702040 115
APPLE US 1001 Jason Rohrer Passage 1 2 .48 12/26/2008 12/26/2008 EUR PL EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 2 .48 12/26/2008 12/26/2008 EUR BE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/26/2008 12/26/2008 EUR IT EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 5 .48 12/26/2008 12/26/2008 SEK SE EUR 300702040 7
APPLE US 1001 Jason Rohrer Passage 1 2 .48 12/26/2008 12/26/2008 CHF CH EUR 300702040 1.1

View file

@ -0,0 +1,24 @@
Provider Provider Country Vendor Identifier UPC ISRC Artist / Show Title / Episode / Season Label/Studio/Network Product Type Identifier Units Royalty Price Begin Date End Date Customer Currency Country Code Royalty Currency Preorder Season Pass ISAN Apple Identifier Customer Price CMA Asset/Content Flavor
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/27/2008 12/27/2008 EUR GR EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 2 .48 12/27/2008 12/27/2008 EUR NL EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 7 .48 12/27/2008 12/27/2008 SEK SE EUR 300702040 7
APPLE US 1001 Jason Rohrer Passage 1 5 .48 12/27/2008 12/27/2008 EUR FR EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 43 .36 12/27/2008 12/27/2008 GBP GB GBP 300702040 .59
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/27/2008 12/27/2008 EUR BE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/27/2008 12/27/2008 CHF CH EUR 300702040 1.1
APPLE US 1001 Jason Rohrer Passage 1 1 .7 12/27/2008 12/27/2008 MXN MX USD 300702040 10
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/27/2008 12/27/2008 EUR PL EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 141 .7 12/27/2008 12/27/2008 USD US USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 14 .48 12/27/2008 12/27/2008 EUR DE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .7 12/27/2008 12/27/2008 USD SG USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/27/2008 12/27/2008 EUR ES EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .7 12/27/2008 12/27/2008 USD PH USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 3 .76 12/27/2008 12/27/2008 NZD NZ AUD 300702040 1.29
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/27/2008 12/27/2008 EUR CZ EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 2 .48 12/27/2008 12/27/2008 EUR AT EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/27/2008 12/27/2008 EUR IE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 3 .7 12/27/2008 12/27/2008 CAD CA CAD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 2 .48 12/27/2008 12/27/2008 DKK DK EUR 300702040 6
APPLE US 1001 Jason Rohrer Passage 1 15 .76 12/27/2008 12/27/2008 AUD AU AUD 300702040 1.19
APPLE US 1001 Jason Rohrer Passage 1 3 81 12/27/2008 12/27/2008 JPY JP JPY 300702040 115
APPLE US 1001 Jason Rohrer Passage 1 2 .48 12/27/2008 12/27/2008 EUR FI EUR 300702040 .79

View file

@ -0,0 +1,18 @@
Provider Provider Country Vendor Identifier UPC ISRC Artist / Show Title / Episode / Season Label/Studio/Network Product Type Identifier Units Royalty Price Begin Date End Date Customer Currency Country Code Royalty Currency Preorder Season Pass ISAN Apple Identifier Customer Price CMA Asset/Content Flavor
APPLE US 1001 Jason Rohrer Passage 1 14 .36 12/28/2008 12/28/2008 GBP GB GBP 300702040 .59
APPLE US 1001 Jason Rohrer Passage 1 7 .7 12/28/2008 12/28/2008 CAD CA CAD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 79 .7 12/28/2008 12/28/2008 USD US USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 2 .48 12/28/2008 12/28/2008 EUR FI EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/28/2008 12/28/2008 EUR ES EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 2 .48 12/28/2008 12/28/2008 CHF CH EUR 300702040 1.1
APPLE US 1001 Jason Rohrer Passage 1 5 .76 12/28/2008 12/28/2008 AUD AU AUD 300702040 1.19
APPLE US 1001 Jason Rohrer Passage 1 1 .76 12/28/2008 12/28/2008 NZD NZ AUD 300702040 1.29
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/28/2008 12/28/2008 EUR IE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 81 12/28/2008 12/28/2008 JPY JP JPY 300702040 115
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/28/2008 12/28/2008 EUR PL EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 2 .48 12/28/2008 12/28/2008 EUR FR EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/28/2008 12/28/2008 EUR IT EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 3 .48 12/28/2008 12/28/2008 SEK SE EUR 300702040 7
APPLE US 1001 Jason Rohrer Passage 1 8 .48 12/28/2008 12/28/2008 EUR DE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .7 12/28/2008 12/28/2008 USD SG USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 3 .48 12/28/2008 12/28/2008 EUR NL EUR 300702040 .79

View file

@ -0,0 +1,14 @@
Provider Provider Country Vendor Identifier UPC ISRC Artist / Show Title / Episode / Season Label/Studio/Network Product Type Identifier Units Royalty Price Begin Date End Date Customer Currency Country Code Royalty Currency Preorder Season Pass ISAN Apple Identifier Customer Price CMA Asset/Content Flavor
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/29/2008 12/29/2008 EUR AT EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 6 .48 12/29/2008 12/29/2008 EUR DE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 3 .48 12/29/2008 12/29/2008 EUR FR EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 5 .7 12/29/2008 12/29/2008 CAD CA CAD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/29/2008 12/29/2008 CHF CH EUR 300702040 1.1
APPLE US 1001 Jason Rohrer Passage 1 90 .7 12/29/2008 12/29/2008 USD US USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 13 .36 12/29/2008 12/29/2008 GBP GB GBP 300702040 .59
APPLE US 1001 Jason Rohrer Passage 1 1 .7 12/29/2008 12/29/2008 USD SG USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 7 .48 12/29/2008 12/29/2008 EUR NL EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 7 .76 12/29/2008 12/29/2008 AUD AU AUD 300702040 1.19
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/29/2008 12/29/2008 EUR HU EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/29/2008 12/29/2008 EUR FI EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/29/2008 12/29/2008 SEK SE EUR 300702040 7

View file

@ -0,0 +1,15 @@
Provider Provider Country Vendor Identifier UPC ISRC Artist / Show Title / Episode / Season Label/Studio/Network Product Type Identifier Units Royalty Price Begin Date End Date Customer Currency Country Code Royalty Currency Preorder Season Pass ISAN Apple Identifier Customer Price CMA Asset/Content Flavor
APPLE US 1001 Jason Rohrer Passage 1 2 .48 12/30/2008 12/30/2008 NOK NO EUR 300702040 6
APPLE US 1001 Jason Rohrer Passage 1 3 .76 12/30/2008 12/30/2008 NZD NZ AUD 300702040 1.29
APPLE US 1001 Jason Rohrer Passage 1 2 .48 12/30/2008 12/30/2008 EUR FI EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .7 12/30/2008 12/30/2008 USD IN USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 2 .48 12/30/2008 12/30/2008 EUR FR EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 3 .48 12/30/2008 12/30/2008 EUR NL EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/30/2008 12/30/2008 EUR IT EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 2 .48 12/30/2008 12/30/2008 EUR DE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 54 .7 12/30/2008 12/30/2008 USD US USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 12 .36 12/30/2008 12/30/2008 GBP GB GBP 300702040 .59
APPLE US 1001 Jason Rohrer Passage 1 3 .48 12/30/2008 12/30/2008 SEK SE EUR 300702040 7
APPLE US 1001 Jason Rohrer Passage 1 4 .76 12/30/2008 12/30/2008 AUD AU AUD 300702040 1.19
APPLE US 1001 Jason Rohrer Passage 1 6 .7 12/30/2008 12/30/2008 CAD CA CAD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 2 .7 12/30/2008 12/30/2008 USD SG USD 300702040 .99

View file

@ -0,0 +1,9 @@
Provider Provider Country Vendor Identifier UPC ISRC Artist / Show Title / Episode / Season Label/Studio/Network Product Type Identifier Units Royalty Price Begin Date End Date Customer Currency Country Code Royalty Currency Preorder Season Pass ISAN Apple Identifier Customer Price CMA Asset/Content Flavor
APPLE US 1001 Jason Rohrer Passage 1 4 .7 12/31/2008 12/31/2008 CAD CA CAD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/31/2008 12/31/2008 EUR DE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/31/2008 12/31/2008 EUR FI EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 81 12/31/2008 12/31/2008 JPY JP JPY 300702040 115
APPLE US 1001 Jason Rohrer Passage 1 32 .7 12/31/2008 12/31/2008 USD US USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/31/2008 12/31/2008 EUR IE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .48 12/31/2008 12/31/2008 SEK SE EUR 300702040 7
APPLE US 1001 Jason Rohrer Passage 1 10 .36 12/31/2008 12/31/2008 GBP GB GBP 300702040 .59

View file

@ -0,0 +1,11 @@
Provider Provider Country Vendor Identifier UPC ISRC Artist / Show Title / Episode / Season Label/Studio/Network Product Type Identifier Units Royalty Price Begin Date End Date Customer Currency Country Code Royalty Currency Preorder Season Pass ISAN Apple Identifier Customer Price CMA Asset/Content Flavor
APPLE US 1001 Jason Rohrer Passage 1 3 .76 01/01/2009 01/01/2009 AUD AU AUD 300702040 1.19
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/01/2009 01/01/2009 EUR LU EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 81 01/01/2009 01/01/2009 JPY JP JPY 300702040 115
APPLE US 1001 Jason Rohrer Passage 1 1 .7 01/01/2009 01/01/2009 CAD CA CAD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 1 .76 01/01/2009 01/01/2009 NZD NZ AUD 300702040 1.29
APPLE US 1001 Jason Rohrer Passage 1 33 .7 01/01/2009 01/01/2009 USD US USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 6 .36 01/01/2009 01/01/2009 GBP GB GBP 300702040 .59
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/01/2009 01/01/2009 EUR FR EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 4 .48 01/01/2009 01/01/2009 SEK SE EUR 300702040 7
APPLE US 1001 Jason Rohrer Passage 1 2 .48 01/01/2009 01/01/2009 EUR DE EUR 300702040 .79

View file

@ -0,0 +1,9 @@
Provider Provider Country Vendor Identifier UPC ISRC Artist / Show Title / Episode / Season Label/Studio/Network Product Type Identifier Units Royalty Price Begin Date End Date Customer Currency Country Code Royalty Currency Preorder Season Pass ISAN Apple Identifier Customer Price CMA Asset/Content Flavor
APPLE US 1001 Jason Rohrer Passage 1 26 .7 01/02/2009 01/02/2009 USD US USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 2 .48 01/02/2009 01/02/2009 EUR DE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 81 01/02/2009 01/02/2009 JPY JP JPY 300702040 115
APPLE US 1001 Jason Rohrer Passage 1 8 .36 01/02/2009 01/02/2009 GBP GB GBP 300702040 .59
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/02/2009 01/02/2009 EUR NL EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 5 .7 01/02/2009 01/02/2009 CAD CA CAD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 3 .48 01/02/2009 01/02/2009 EUR FR EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/02/2009 01/02/2009 SEK SE EUR 300702040 7

View file

@ -0,0 +1,11 @@
Provider Provider Country Vendor Identifier UPC ISRC Artist / Show Title / Episode / Season Label/Studio/Network Product Type Identifier Units Royalty Price Begin Date End Date Customer Currency Country Code Royalty Currency Preorder Season Pass ISAN Apple Identifier Customer Price CMA Asset/Content Flavor
APPLE US 1001 Jason Rohrer Passage 1 29 .7 01/03/2009 01/03/2009 USD US USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/03/2009 01/03/2009 EUR IE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 7 15 0 01/03/2009 01/03/2009 CAD CA CAD 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 2 81 01/03/2009 01/03/2009 JPY JP JPY 300702040 115
APPLE US 1001 Jason Rohrer Passage 7 183 0 01/03/2009 01/03/2009 USD US USD 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 1 .76 01/03/2009 01/03/2009 AUD AU AUD 300702040 1.19
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/03/2009 01/03/2009 EUR ES EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/03/2009 01/03/2009 EUR FR EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 2 .7 01/03/2009 01/03/2009 CAD CA CAD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 6 .36 01/03/2009 01/03/2009 GBP GB GBP 300702040 .59

View file

@ -0,0 +1,35 @@
Provider Provider Country Vendor Identifier UPC ISRC Artist / Show Title / Episode / Season Label/Studio/Network Product Type Identifier Units Royalty Price Begin Date End Date Customer Currency Country Code Royalty Currency Preorder Season Pass ISAN Apple Identifier Customer Price CMA Asset/Content Flavor
APPLE US 1001 Jason Rohrer Passage 7 16 0 01/04/2009 01/04/2009 AUD AU AUD 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 2 0 01/04/2009 01/04/2009 NZD NZ AUD 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 1 81 01/04/2009 01/04/2009 JPY JP JPY 300702040 115
APPLE US 1001 Jason Rohrer Passage 7 11 0 01/04/2009 01/04/2009 EUR NL EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/04/2009 01/04/2009 USD IN USD 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 3 0 01/04/2009 01/04/2009 EUR PL EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/04/2009 01/04/2009 EUR LU EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/04/2009 01/04/2009 EUR ES EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 3 .7 01/04/2009 01/04/2009 CAD CA CAD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 7 2 0 01/04/2009 01/04/2009 CHF CH EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 4 0 01/04/2009 01/04/2009 USD SG USD 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 37 .7 01/04/2009 01/04/2009 USD US USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 7 19 0 01/04/2009 01/04/2009 EUR DE EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 4 .48 01/04/2009 01/04/2009 EUR DE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/04/2009 01/04/2009 EUR BE EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/04/2009 01/04/2009 EUR GR EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/04/2009 01/04/2009 EUR IE EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/04/2009 01/04/2009 EUR PT EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 19 0 01/04/2009 01/04/2009 CAD CA CAD 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 11 0 01/04/2009 01/04/2009 SEK SE EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/04/2009 01/04/2009 NOK NO EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 10 0 01/04/2009 01/04/2009 EUR FR EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 68 0 01/04/2009 01/04/2009 GBP GB GBP 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/04/2009 01/04/2009 EUR FI EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/04/2009 01/04/2009 EUR IT EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/04/2009 01/04/2009 DKK DK EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/04/2009 01/04/2009 USD AR USD 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 4 .36 01/04/2009 01/04/2009 GBP GB GBP 300702040 .59
APPLE US 1001 Jason Rohrer Passage 7 3 0 01/04/2009 01/04/2009 EUR FI EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/04/2009 01/04/2009 MXN MX USD 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 214 0 01/04/2009 01/04/2009 USD US USD 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/04/2009 01/04/2009 SEK SE EUR 300702040 7
APPLE US 1001 Jason Rohrer Passage 7 6 0 01/04/2009 01/04/2009 JPY JP JPY 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/04/2009 01/04/2009 USD PH USD 300702040 0

View file

@ -0,0 +1,26 @@
Provider Provider Country Vendor Identifier UPC ISRC Artist / Show Title / Episode / Season Label/Studio/Network Product Type Identifier Units Royalty Price Begin Date End Date Customer Currency Country Code Royalty Currency Preorder Season Pass ISAN Apple Identifier Customer Price CMA Asset/Content Flavor
APPLE US 1001 Jason Rohrer Passage 1 22 .7 01/05/2009 01/05/2009 USD US USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/05/2009 01/05/2009 CHF CH EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 2 .76 01/05/2009 01/05/2009 AUD AU AUD 300702040 1.19
APPLE US 1001 Jason Rohrer Passage 7 106 0 01/05/2009 01/05/2009 USD US USD 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/05/2009 01/05/2009 EUR DE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/05/2009 01/05/2009 EUR ES EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/05/2009 01/05/2009 DKK DK EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 2 81 01/05/2009 01/05/2009 JPY JP JPY 300702040 115
APPLE US 1001 Jason Rohrer Passage 7 22 0 01/05/2009 01/05/2009 GBP GB GBP 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/05/2009 01/05/2009 EUR IE EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/05/2009 01/05/2009 EUR IT EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 2 0 01/05/2009 01/05/2009 EUR NL EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 11 0 01/05/2009 01/05/2009 EUR DE EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 6 .36 01/05/2009 01/05/2009 GBP GB GBP 300702040 .59
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/05/2009 01/05/2009 EUR NL EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 7 6 0 01/05/2009 01/05/2009 SEK SE EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 9 0 01/05/2009 01/05/2009 AUD AU AUD 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 2 0 01/05/2009 01/05/2009 NZD NZ AUD 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 3 0 01/05/2009 01/05/2009 EUR FR EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/05/2009 01/05/2009 EUR FI EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/05/2009 01/05/2009 DKK DK EUR 300702040 6
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/05/2009 01/05/2009 EUR BE EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 6 0 01/05/2009 01/05/2009 CAD CA CAD 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 1 .7 01/05/2009 01/05/2009 CAD CA CAD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/05/2009 01/05/2009 USD SG USD 300702040 0

View file

@ -0,0 +1,19 @@
Provider Provider Country Vendor Identifier UPC ISRC Artist / Show Title / Episode / Season Label/Studio/Network Product Type Identifier Units Royalty Price Begin Date End Date Customer Currency Country Code Royalty Currency Preorder Season Pass ISAN Apple Identifier Customer Price CMA Asset/Content Flavor
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/07/2009 01/07/2009 SEK SE EUR 300702040 7
APPLE US 1001 Jason Rohrer Passage 7 2 0 01/07/2009 01/07/2009 AUD AU AUD 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 42 0 01/07/2009 01/07/2009 USD US USD 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 4 0 01/07/2009 01/07/2009 EUR DE EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/07/2009 01/07/2009 EUR ES EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 3 .48 01/07/2009 01/07/2009 EUR DE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .7 01/07/2009 01/07/2009 CAD CA CAD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 2 .76 01/07/2009 01/07/2009 AUD AU AUD 300702040 1.19
APPLE US 1001 Jason Rohrer Passage 1 3 .48 01/07/2009 01/07/2009 EUR FR EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/07/2009 01/07/2009 EUR IT EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 3 0 01/07/2009 01/07/2009 CAD CA CAD 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 3 0 01/07/2009 01/07/2009 SEK SE EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 2 0 01/07/2009 01/07/2009 DKK DK EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 25 .7 01/07/2009 01/07/2009 USD US USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 7 2 0 01/07/2009 01/07/2009 EUR FR EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 10 0 01/07/2009 01/07/2009 GBP GB GBP 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 2 .36 01/07/2009 01/07/2009 GBP GB GBP 300702040 .59
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/07/2009 01/07/2009 EUR NL EUR 300702040 .79

View file

@ -0,0 +1,17 @@
Provider Provider Country Vendor Identifier UPC ISRC Artist / Show Title / Episode / Season Label/Studio/Network Product Type Identifier Units Royalty Price Begin Date End Date Customer Currency Country Code Royalty Currency Preorder Season Pass ISAN Apple Identifier Customer Price CMA Asset/Content Flavor
APPLE US 1001 Jason Rohrer Passage 7 32 0 01/08/2009 01/08/2009 USD US USD 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 3 0 01/08/2009 01/08/2009 CAD CA CAD 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/08/2009 01/08/2009 NZD NZ AUD 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/08/2009 01/08/2009 JPY JP JPY 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 1 .36 01/08/2009 01/08/2009 GBP GB GBP 300702040 .59
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/08/2009 01/08/2009 EUR AT EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 1 .7 01/08/2009 01/08/2009 USD HK USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 7 4 0 01/08/2009 01/08/2009 GBP GB GBP 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/08/2009 01/08/2009 EUR ES EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/08/2009 01/08/2009 EUR BE EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 2 81 01/08/2009 01/08/2009 JPY JP JPY 300702040 115
APPLE US 1001 Jason Rohrer Passage 1 26 .7 01/08/2009 01/08/2009 USD US USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/08/2009 01/08/2009 EUR FR EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 7 2 0 01/08/2009 01/08/2009 EUR FI EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 3 0 01/08/2009 01/08/2009 EUR DE EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/08/2009 01/08/2009 CHF CH EUR 300702040 0

View file

@ -0,0 +1,17 @@
Provider Provider Country Vendor Identifier UPC ISRC Artist / Show Title / Episode / Season Label/Studio/Network Product Type Identifier Units Royalty Price Begin Date End Date Customer Currency Country Code Royalty Currency Preorder Season Pass ISAN Apple Identifier Customer Price CMA Asset/Content Flavor
APPLE US 1001 Jason Rohrer Passage 1 16 .7 01/09/2009 01/09/2009 USD US USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 7 23 0 01/09/2009 01/09/2009 USD US USD 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 2 .48 01/09/2009 01/09/2009 EUR FR EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 7 3 0 01/09/2009 01/09/2009 CAD CA CAD 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 1 81 01/09/2009 01/09/2009 JPY JP JPY 300702040 115
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/09/2009 01/09/2009 EUR HU EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 2 0 01/09/2009 01/09/2009 GBP GB GBP 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 2 .36 01/09/2009 01/09/2009 GBP GB GBP 300702040 .59
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/09/2009 01/09/2009 SEK SE EUR 300702040 7
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/09/2009 01/09/2009 JPY JP JPY 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/09/2009 01/09/2009 EUR IE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/09/2009 01/09/2009 EUR IT EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 2 .7 01/09/2009 01/09/2009 CAD CA CAD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/09/2009 01/09/2009 EUR CZ EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/09/2009 01/09/2009 EUR FR EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 2 0 01/09/2009 01/09/2009 DKK DK EUR 300702040 0

View file

@ -0,0 +1,15 @@
Provider Provider Country Vendor Identifier UPC ISRC Artist / Show Title / Episode / Season Label/Studio/Network Product Type Identifier Units Royalty Price Begin Date End Date Customer Currency Country Code Royalty Currency Preorder Season Pass ISAN Apple Identifier Customer Price CMA Asset/Content Flavor
APPLE US 1001 Jason Rohrer Passage 7 17 0 01/10/2009 01/10/2009 USD US USD 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 1 .7 01/10/2009 01/10/2009 USD SG USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 1 .36 01/10/2009 01/10/2009 GBP GB GBP 300702040 .59
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/10/2009 01/10/2009 CHF CH EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/10/2009 01/10/2009 EUR DE EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/10/2009 01/10/2009 EUR NL EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/10/2009 01/10/2009 EUR FI EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 1 .7 01/10/2009 01/10/2009 CAD CA CAD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 1 81 01/10/2009 01/10/2009 JPY JP JPY 300702040 115
APPLE US 1001 Jason Rohrer Passage 1 16 .7 01/10/2009 01/10/2009 USD US USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 7 2 0 01/10/2009 01/10/2009 AUD AU AUD 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 2 .76 01/10/2009 01/10/2009 AUD AU AUD 300702040 1.19
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/10/2009 01/10/2009 GBP GB GBP 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 2 0 01/10/2009 01/10/2009 CAD CA CAD 300702040 0

View file

@ -0,0 +1,14 @@
Provider Provider Country Vendor Identifier UPC ISRC Artist / Show Title / Episode / Season Label/Studio/Network Product Type Identifier Units Royalty Price Begin Date End Date Customer Currency Country Code Royalty Currency Preorder Season Pass ISAN Apple Identifier Customer Price CMA Asset/Content Flavor
APPLE US 1001 Jason Rohrer Passage 7 2 0 01/11/2009 01/11/2009 GBP GB GBP 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/11/2009 01/11/2009 EUR FR EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/11/2009 01/11/2009 CAD CA CAD 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 1 .7 01/11/2009 01/11/2009 USD AR USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/11/2009 01/11/2009 EUR FI EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/11/2009 01/11/2009 AUD AU AUD 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 1 .76 01/11/2009 01/11/2009 AUD AU AUD 300702040 1.19
APPLE US 1001 Jason Rohrer Passage 7 24 0 01/11/2009 01/11/2009 USD US USD 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/11/2009 01/11/2009 SEK SE EUR 300702040 7
APPLE US 1001 Jason Rohrer Passage 1 29 .7 01/11/2009 01/11/2009 USD US USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/11/2009 01/11/2009 EUR DE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 2 81 01/11/2009 01/11/2009 JPY JP JPY 300702040 115
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/11/2009 01/11/2009 EUR FR EUR 300702040 .79

View file

@ -0,0 +1,12 @@
Provider Provider Country Vendor Identifier UPC ISRC Artist / Show Title / Episode / Season Label/Studio/Network Product Type Identifier Units Royalty Price Begin Date End Date Customer Currency Country Code Royalty Currency Preorder Season Pass ISAN Apple Identifier Customer Price CMA Asset/Content Flavor
APPLE US 1001 Jason Rohrer Passage 1 3 .36 01/12/2009 01/12/2009 GBP GB GBP 300702040 .59
APPLE US 1001 Jason Rohrer Passage 7 2 0 01/12/2009 01/12/2009 AUD AU AUD 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 1 .7 01/12/2009 01/12/2009 USD SG USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/12/2009 01/12/2009 EUR SK EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 7 10 0 01/12/2009 01/12/2009 USD US USD 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 20 .7 01/12/2009 01/12/2009 USD US USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/12/2009 01/12/2009 EUR PT EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 2 .7 01/12/2009 01/12/2009 CAD CA CAD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/12/2009 01/12/2009 EUR AT EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 3 0 01/12/2009 01/12/2009 GBP GB GBP 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/12/2009 01/12/2009 SEK SE EUR 300702040 0

View file

@ -0,0 +1,16 @@
Provider Provider Country Vendor Identifier UPC ISRC Artist / Show Title / Episode / Season Label/Studio/Network Product Type Identifier Units Royalty Price Begin Date End Date Customer Currency Country Code Royalty Currency Preorder Season Pass ISAN Apple Identifier Customer Price CMA Asset/Content Flavor
APPLE US 1001 Jason Rohrer Passage 1 7 .7 01/13/2009 01/13/2009 USD US USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 2 .36 01/13/2009 01/13/2009 GBP GB GBP 300702040 .59
APPLE US 1001 Jason Rohrer Passage 1 2 .76 01/13/2009 01/13/2009 AUD AU AUD 300702040 1.19
APPLE US 1001 Jason Rohrer Passage 7 12 0 01/13/2009 01/13/2009 USD US USD 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/13/2009 01/13/2009 EUR FR EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/13/2009 01/13/2009 EUR IE EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/13/2009 01/13/2009 AUD AU AUD 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 1 .7 01/13/2009 01/13/2009 USD SG USD 300702040 .99
APPLE US 1001 Jason Rohrer Passage 1 3 .48 01/13/2009 01/13/2009 EUR DE EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/13/2009 01/13/2009 SEK SE EUR 300702040 7
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/13/2009 01/13/2009 NOK NO EUR 300702040 6
APPLE US 1001 Jason Rohrer Passage 7 1 0 01/13/2009 01/13/2009 SEK SE EUR 300702040 0
APPLE US 1001 Jason Rohrer Passage 1 2 81 01/13/2009 01/13/2009 JPY JP JPY 300702040 115
APPLE US 1001 Jason Rohrer Passage 1 1 .48 01/13/2009 01/13/2009 EUR ES EUR 300702040 .79
APPLE US 1001 Jason Rohrer Passage 7 2 0 01/13/2009 01/13/2009 GBP GB GBP 300702040 0

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View file

@ -0,0 +1,9 @@
The critically-acclaimed breakout-hit from art game designer Jason Rohrer. Passage is a tiny, touching, five-minute game about life.
"More than any game I've ever played, it illustrates how a game can be a fantastically expressive, artistic vehicle for exploring the human condition." -- Clive Thompson, Wired
"Passage may look primitive but it's an absolute pinnacle of videogame development." --Andy Chalk, The Escapist
"Portal is a fine game---nothing less than excellent... Passage is even better." --Nick Montfort, MIT
You can read an in-depth profile of Jason Rohrer, along with an extensive discussion of Passage, in Esquire Magazine's December 2008 "Genius" issue.

View file

@ -0,0 +1,21 @@
#include "drawIntoScreen.h"
#include <stdlib.h>
void drawIntoScreen( Uint32 *inScreenBuffer, int inWidth, int inHeight ) {
// add dot at random spot
int x = rand() % inWidth;
int y = rand() % inHeight;
int i = y * inWidth + x;
inScreenBuffer[ i ] = 0xFFFFFFFF;
}
void initScreenDrawer( Uint32 *inScreenBuffer, int inWidth, int inHeight ) {
}
void freeScreenDrawer() {
}