diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..f33056d5a --- /dev/null +++ b/.gitignore @@ -0,0 +1,48 @@ +# Compiled source # +################### +*.com +*.class +*.dll +*.exe +*.app +*.o +*.so +*.pyc +build + +# Packages # +############ +# it's better to unpack these files and commit the raw source +# git has its own built in compression methods +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip + +# Logs and databases # +###################### +*.log +*.sql +*.sqlite +*.dblite + +# OS generated files # +###################### +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +Icon? +ehthumbs.db +Thumbs.db + +# Xcode generated files # +###################### +# Note: committing these is optional +*.mode1v3 +*.pbxuser \ No newline at end of file diff --git a/SConstruct b/SConstruct index d17398406..1b1b0d07e 100644 --- a/SConstruct +++ b/SConstruct @@ -57,36 +57,36 @@ class DXXCommon: self.default_OGLES_LIB='GLESv2' self.opengles = int(ARGUMENTS.get('opengles', self.default_opengles)) self.opengles_lib = str(ARGUMENTS.get('opengles_lib', self.default_OGLES_LIB)) - default_builddir = '' builddir_prefix = ARGUMENTS.get('builddir_prefix', None) builddir_suffix = ARGUMENTS.get('builddir_suffix', None) + default_builddir = builddir_prefix or '' if builddir_prefix is not None or builddir_suffix is not None: - if builddir_prefix is not None: - default_builddir = builddir_prefix if os.environ.has_key('CC'): default_builddir += '%s-' % os.path.basename(os.environ['CC']) - for a in [ + for a in ( ('debug', 'dbg'), ('profiler', 'prf'), ('editor', 'ed'), ('opengl', 'ogl'), ('opengles', 'es'), ('raspberrypi', 'rpi'), - ]: + ): if getattr(self, a[0]): default_builddir += a[1] if builddir_suffix is not None: default_builddir += builddir_prefix - self.builddir = str(ARGUMENTS.get('builddir', default_builddir)) + self.builddir = ARGUMENTS.get('builddir', default_builddir) if self.builddir != '' and self.builddir[-1:] != '/': self.builddir += '/' # Base class for platform-specific settings processing class _PlatformSettings: + tools = None ogllibs = '' osasmdef = None platform_sources = [] # Settings to apply to mingw32 builds class Win32PlatformSettings(_PlatformSettings): + tools = ['mingw'] osdef = '_WIN32' osasmdef = 'win32' def adjust_environment(self,program,env): @@ -95,8 +95,21 @@ class DXXCommon: osdef = '__APPLE__' def __init__(self,user_settings): user_settings.asm = 0 + self.lflags = os.environ["LDFLAGS"] if os.environ.has_key('LDFLAGS') else '' def adjust_environment(self,program,env): + VERSION = str(program.VERSION_MAJOR) + '.' + str(program.VERSION_MINOR) + if (program.VERSION_MICRO): + VERSION += '.' + str(program.VERSION_MICRO) + env['VERSION_NUM'] = VERSION + env['VERSION_NAME'] = program.PROGRAM_NAME + ' v' + VERSION env.Append(CPPDEFINES = ['HAVE_STRUCT_TIMESPEC', 'HAVE_STRUCT_TIMEVAL', '__unix__']) + env.Append(CPPPATH = [os.path.join(program.srcdir, '../physfs'), os.path.join(os.getenv("HOME"), 'Library/Frameworks/SDL.framework/Headers'), '/Library/Frameworks/SDL.framework/Headers']) + env.Append(FRAMEWORKS = ['ApplicationServices', 'Carbon', 'Cocoa', 'SDL']) + if (self.user_settings.opengl == 1) or (self.user_settings.opengles == 1): + env.Append(FRAMEWORKS = ['OpenGL']) + env.Append(FRAMEWORKPATH = [os.path.join(os.getenv("HOME"), 'Library/Frameworks'), '/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks']) + self.libs = [''] + env['LIBPATH'] = '../physfs/build/Debug' # Settings to apply to Linux builds class LinuxPlatformSettings(_PlatformSettings): osdef = '__LINUX__' @@ -148,8 +161,6 @@ class DXXCommon: self.sources = [] def prepare_environment(self): - # Acquire environment object... - self.env = Environment(ENV = os.environ, tools = ['mingw']) if self.user_settings.builddir != '': self.env.VariantDir(self.user_settings.builddir, '.', duplicate=0) @@ -192,7 +203,6 @@ class DXXCommon: print "%s: LittleEndian machine detected" % self.PROGRAM_NAME def check_platform(self): - env = self.env # windows or *nix? if sys.platform == 'win32': print "%s: compiling on Windows" % self.PROGRAM_NAME @@ -200,12 +210,13 @@ class DXXCommon: elif sys.platform == 'darwin': print "%s: compiling on Mac OS X" % self.PROGRAM_NAME platform = self.DarwinPlatformSettings - sys.path += ['./arch/cocoa'] else: print "%s: compiling on *NIX" % self.PROGRAM_NAME platform = self.LinuxPlatformSettings self.platform_settings = platform(self.user_settings) - self.platform_settings.adjust_environment(self, env) + # Acquire environment object... + self.env = Environment(ENV = os.environ, tools = platform.tools) + self.platform_settings.adjust_environment(self, self.env) self.sources += self.platform_settings.platform_sources def process_user_settings(self): @@ -223,7 +234,7 @@ class DXXCommon: if (self.user_settings.asm == 1) and (self.user_settings.opengl == 0): print "%s: including: ASSEMBLER" % self.PROGRAM_NAME env.Replace(AS = 'nasm') - env.Append(ASCOM = ' -f ' + str(platform_settings.osasmdef) + ' -d' + str(platform_settings.osdef) + ' -Itexmap/ ') + env.Append(ASCOM = ' -f ' + str(self.platform_settings.osasmdef) + ' -d' + str(self.platform_settings.osdef) + ' -Itexmap/ ') self.sources += asm_sources else: env.Append(CPPDEFINES = ['NO_ASM']) @@ -344,9 +355,9 @@ class DXXArchive(DXXCommon): DXXCommon.__init__(self) self.user_settings = self.UserSettings(ARGUMENTS) self.user_settings.builddir = builddir + self.check_platform() self.prepare_environment() self.check_endian() - self.check_platform() self.process_user_settings() class DXXProgram(DXXCommon): @@ -468,8 +479,6 @@ class DXXProgram(DXXCommon): env.Append(CPPPATH = [os.path.join(self.srcdir, 'arch/win32/include')]) self.platform_sources = ['common/arch/win32/messagebox.c'] # Settings to apply to Apple builds - # This appears to be unused. The reference to sdl_only fails to - # execute. class DarwinPlatformSettings(DXXCommon.DarwinPlatformSettings): def __init__(self,user_settings): DXXCommon.DarwinPlatformSettings.__init__(self) @@ -501,10 +510,10 @@ class DXXProgram(DXXCommon): self.user_settings = self.UserSettings(self.ARGUMENTS, self.target) if not DXXProgram.static_archive_construction.has_key(self.user_settings.builddir): DXXProgram.static_archive_construction[self.user_settings.builddir] = DXXArchive(self.user_settings.builddir) + self.check_platform() self.prepare_environment() self.banner() self.check_endian() - self.check_platform() self.process_user_settings() self.register_program() @@ -538,6 +547,8 @@ class DXXProgram(DXXCommon): if (self.user_settings.sdlmixer == 1): if (sys.platform != 'darwin'): self.platform_settings.libs += ['SDL_mixer'] + else: + env.Append(FRAMEWORKS = ['SDL_mixer']) # profiler? if (self.user_settings.profiler == 1): @@ -578,6 +589,8 @@ class DXXProgram(DXXCommon): env.Install(self.user_settings.BIN_DIR, str(exe_target)) env.Alias('install', self.user_settings.BIN_DIR) else: + sys.path += ['./arch/cocoa'] + import tool_bundle tool_bundle.TOOL_BUNDLE(env) env.MakeBundle(self.PROGRAM_NAME + '.app', exe_target, 'free.%s-rebirth' % dxxstr, '%sgl-Info.plist' % dxxstr, diff --git a/common/main/cntrlcen.h b/common/main/cntrlcen.h index ce5516feb..ee38f5d4b 100644 --- a/common/main/cntrlcen.h +++ b/common/main/cntrlcen.h @@ -23,6 +23,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include "vecmat.h" #include "object.h" #include "wall.h" +#include "switch.h" #define CONTROLCEN_WEAPON_NUM 6 @@ -38,7 +39,9 @@ extern control_center_triggers ControlCenterTriggers; #if defined(DXX_BUILD_DESCENT_I) || defined(DXX_BUILD_DESCENT_II) typedef struct reactor { +#if defined(DXX_BUILD_DESCENT_II) int model_num; +#endif int n_guns; /* Location of the gun on the reactor model */ vms_vector gun_points[MAX_CONTROLCEN_GUNS]; diff --git a/common/main/gauges.h b/common/main/gauges.h index 81e6cb1cb..eea52ab36 100644 --- a/common/main/gauges.h +++ b/common/main/gauges.h @@ -92,7 +92,7 @@ struct object; void do_cockpit_window_view(int win, struct object *viewer, int rear_view_flag, int user, const char *label); #endif -#define GAUGE_HUD_NUMMODES 3 +#define GAUGE_HUD_NUMMODES 4 typedef struct span { int l,r; diff --git a/common/main/multibot.h b/common/main/multibot.h index 69a0f9060..7eb8797e0 100644 --- a/common/main/multibot.h +++ b/common/main/multibot.h @@ -35,7 +35,7 @@ int multi_can_move_robot(int objnum, int agitation); void multi_send_robot_position(int objnum, int fired); void multi_send_robot_fire(int objnum, int gun_num, vms_vector *fire); void multi_send_claim_robot(int objnum); -void multi_send_robot_explode(int,int,char); +void multi_send_robot_explode(int objnum, int killer, char unused); void multi_send_create_robot(int robotcen, int objnum, int type); void multi_send_boss_actions(int bossobjnum, int action, int secondary, int objnum); int multi_send_robot_frame(int sent); @@ -49,7 +49,7 @@ void multi_do_create_robot(const ubyte *buf); void multi_do_boss_actions(const ubyte *buf); void multi_do_create_robot_powerups(const ubyte *buf); -int multi_explode_robot_sub(int botnum, int killer,char); +int multi_explode_robot_sub(int botnum, int killer, char unused); void multi_drop_robot_powerups(int objnum); void multi_dump_robots(void); diff --git a/common/main/net_udp.h b/common/main/net_udp.h index af147720e..75216633f 100644 --- a/common/main/net_udp.h +++ b/common/main/net_udp.h @@ -56,8 +56,8 @@ void net_udp_send_netgame_update(); #define UPID_GAME_INFO_LITE_REQ 4 // Requesting lite info about a netgame. Used for discovering games. #define UPID_GAME_INFO_LITE 5 // Packet containing lite netgame info. #if defined(DXX_BUILD_DESCENT_I) -#define UPID_GAME_INFO_SIZE 506 -#define UPID_GAME_INFO_LITE_SIZE 69 +#define UPID_GAME_INFO_SIZE (360 + (NETGAME_NAME_LEN+1) + (MISSION_NAME_LEN+1) + ((MAX_PLAYERS+4)*(CALLSIGN_LEN+1))) +#define UPID_GAME_INFO_LITE_SIZE (31 + (NETGAME_NAME_LEN+1) + (MISSION_NAME_LEN+1)) #elif defined(DXX_BUILD_DESCENT_II) #define UPID_GAME_INFO_SIZE 510 #define UPID_GAME_INFO_LITE_SIZE 73 @@ -67,7 +67,7 @@ void net_udp_send_netgame_update(); #define UPID_ADDPLAYER 7 // Packet from Host containing info about a new player. #define UPID_REQUEST 8 // New player says: "I want to be inside of you!" (haha, sorry I could not resist) / Packet containing request to join the game actually. #define UPID_QUIT_JOINING 9 // Packet from a player who suddenly quits joining. -#define UPID_SEQUENCE_SIZE 12 +#define UPID_SEQUENCE_SIZE (3 + (CALLSIGN_LEN+1)) #define UPID_SYNC 10 // Packet from host containing full netgame info to sync players up. #define UPID_OBJECT_DATA 11 // Packet from host containing object buffer. #define UPID_PING 12 // Packet from host containing his GameTime and the Ping list. Client returns this time to host as UPID_PONG and adapts the ping list. diff --git a/d1x-rebirth/CHANGELOG.txt b/d1x-rebirth/CHANGELOG.txt index 65b5219d5..8f3f27983 100644 --- a/d1x-rebirth/CHANGELOG.txt +++ b/d1x-rebirth/CHANGELOG.txt @@ -1,5 +1,38 @@ D1X-Rebirth Changelog +20130418 +-------- +main/lighting.c, main/render.c: Removed light_frame_count due to being unnecessary since lighting is now time-based and messed up deletion of dynamic light +main/render.c: Due to additive blending, transparent sprites will become invivible in font of white surfaces (lamps). Fix that with a little desaturation +main/net_udp.h: Made UPID_GAME_INFO_SIZE, UPID_GAME_INFO_LITE_SIZE and UPID_SEQUENCE_SIZE change if NETGAME_NAME_LEN, MISSION_NAME_LEN or CALLSIGN_LEN changes, fixes bug where joining games was not possible anymore due to recent change of MISSION_NAME_LEN +main/multi.c: use const ubyte for multi_do_powcap_update() +main/gauges.c: Adjusted SB_PRIMARY_W_BOX_RIGHT_L to fit perfectly + +20130408 +-------- +main/gamecntl.c, main/gamerend.c, main/gauges.c, main/gauges.h: Added 4th alternative HUD mode for no HUD rendering, aka Immersion mode +main/menu.c, main/playsave.c, main/playsave.h, main/weapons.c: Added option to ignore cycling weapons that are not on autoselect list + +20130406 +-------- +d1x-rebirth.xcodeproj/project.pbxproj, editor/ehostage.c, main/custom.c: Updated Xcode project, changed references to error.h to dxxerror.h, since it was renamed +.gitignore: Added .gitignore + +20130405 +-------- +SConstruct: For the assembler build, make sure platform_settings is accessed from self, likely preventing a compiling error +SConstruct: Changes towards building using SCons on Mac OS X + +20130122 +-------- +README.RPi, SConstruct, arch/ogl/gr.c: Support for Raspberry Pi - patch by derhass +main/controls.c: Increased ship wiggle from 20FPS- to 30FPS-base as I think this more representy the 486 play style - feels way more natural to me, too + +20130119 +-------- +main/gamerend.c, main/menu.c, main/multi.c, main/multi.h, main/net_udp.c, main/playsave.c, main/playsave.h: Added Rankings functionality like in D2X-Rebirth while still utilizing eff file from original D1X source +main/multi.c, main/multi.h: Decrease personal score when killing multi buddy and don't increment towards kill goal + 20130117 -------- main/render.c: Fix click-selection in the editor for OpenGL implementations that insist on point blending diff --git a/d1x-rebirth/README.RPi b/d1x-rebirth/README.RPi new file mode 100644 index 000000000..ca159b909 --- /dev/null +++ b/d1x-rebirth/README.RPi @@ -0,0 +1,72 @@ +DXX-Rebirth for the Raspberry Pi + +BUILDING: +========= +Make sure you have installed (the development packages of) all of the required +libraries (libsdl, libphysfs, ...). For building, you will also need scons (and +for that, python). Most linux distributions should contain all the required +packages, debain/raspbian do so for sure. Using a distribution with hardfp ABI +is recommended for optimal performance. I developed/tested this on a raspbian +wheezy. + +To build directly on the device, just run: + +scons raspberrypi=1 [... other options (see scons -h)...] + +This assumes that the development files (libs/headers) for the VideoCore APIs +are located in /opt/vc. You can use rpi_vc_path to specify another location. + +Currently, there is no direct support for crosscompiling. + +RUNNING: +======== +The game should run with X11 or directly on the console (libsdl with fbcon/ +directfb driver). + +NOTE: *** PLEASE USE THE 128/128MB MEMORY SPLIT *** + +The game might completely freeze or diplay messed up graphics in +out-of-(GPU)-memory situations. If you want to run it with the 192/64MB memory +split, you might be able to do so by setting the texture filter to "NONE" in +the graphics options. (This disables mip mapping and reduces the memory +requirements of the textures. Note that the "BILINEAR" filter still uses +mipmapping). + +If the game freezes during the "Prepare for Descent" phase when loading a +level, you probably do not have enough GPU memory. + +RUNNING ON X11: +=============== +Recommendation is to use fullscreen mode. However, you can run in "windowed" +mode, too. The game will open an X11 window in that case, and the actual game +output will be an overlay of the same size, but not at the same position, and +always on top (and completely out of control of the X Server). Game input is +still handled via the X11 window, so make sure it has the focus. + +RUNNING ON THE CONSOLE: +======================= +libsdl supports running directly on the Linux console. While the SDL Video mode +is technically not required on the RPi, we still have to use it to get all the +input events we need. libsdl seems to have problems on the RPi, I always get a +crash in libsdl when trying to change the resolution. To avoid such crashes, +the code will try to detect if it is running on the console and activate a hack +to prevent switching the resolution. Note that the in-game framebuffer +resolution can still be changed, the RPi will just scale the output to the +initial resolution (in "fullscreen" mode). "Windowed" mode will just result in +unscaled output. As libsdl creates a black screen, you will not be able to have +the "Window" on top of the linux console output :( + +NOTE: You might need root privileges to use the libsdl fbcon/directfb drivers. + +BUGS, SUGGESTIONS AND FEEDBACK: +=============================== + +The RPi patch was written by: + Marcel Heinz + +Send bug reports, suggestions and other feedback regarding the operation +on the RPi to me via email, or post to the official dxx-rebirth forum at: + http://www.dxx-rebirth.com/frm/index.php + + -- derhass, 2012-08-09 + diff --git a/d1x-rebirth/arch/carbon/messagebox.c b/d1x-rebirth/arch/carbon/messagebox.c index eb2bd1088..a76f9d478 100644 --- a/d1x-rebirth/arch/carbon/messagebox.c +++ b/d1x-rebirth/arch/carbon/messagebox.c @@ -64,13 +64,15 @@ void display_mac_alert(char *message, int error) } else { + // This #if guard removes both compiler warnings + // and complications if we didn't link the (older) Mac OS X SDK that actually supports the following. +#if !defined(MAC_OS_X_VERSION_MAX_ALLOWED) || (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_4) Str255 error_text = "\pSorry, a critical error has occurred."; Str255 text; - -#if !defined(MAC_OS_X_VERSION_MAX_ALLOWED) || (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_4) // kill warning + CopyCStringToPascal(message, text); -#endif StandardAlert(error ? kAlertStopAlert : kAlertNoteAlert, error ? error_text : text, error ? text : NULL, 0, &itemHit); +#endif } if ((wind = window_get_front())) diff --git a/d1x-rebirth/arch/cocoa/SDLMain.m b/d1x-rebirth/arch/cocoa/SDLMain.m old mode 100755 new mode 100644 index 89f064eee..2434f81aa --- a/d1x-rebirth/arch/cocoa/SDLMain.m +++ b/d1x-rebirth/arch/cocoa/SDLMain.m @@ -5,35 +5,69 @@ Feel free to customize this file to suit your needs */ -#import -#import "SDLMain.h" -#import /* for MAXPATHLEN */ -#import +#include "SDL.h" +#include "SDLMain.h" +#include /* for MAXPATHLEN */ +#include + +/* For some reaon, Apple removed setAppleMenu from the headers in 10.4, + but the method still is there and works. To avoid warnings, we declare + it ourselves here. */ +@interface NSApplication(SDL_Missing_Methods) +- (void)setAppleMenu:(NSMenu *)menu; +@end /* Use this flag to determine whether we use SDLMain.nib or not */ #define SDL_USE_NIB_FILE 0 +/* Use this flag to determine whether we use CPS (docking) or not */ +#define SDL_USE_CPS 1 +#ifdef SDL_USE_CPS +/* Portions of CPS.h */ +typedef struct CPSProcessSerNum +{ + UInt32 lo; + UInt32 hi; +} CPSProcessSerNum; + +extern OSErr CPSGetCurrentProcess( CPSProcessSerNum *psn); +extern OSErr CPSEnableForegroundOperation( CPSProcessSerNum *psn, UInt32 _arg2, UInt32 _arg3, UInt32 _arg4, UInt32 _arg5); +extern OSErr CPSSetFrontProcess( CPSProcessSerNum *psn); + +#endif /* SDL_USE_CPS */ static int gArgc; static char **gArgv; static BOOL gFinderLaunch; +static BOOL gCalledAppMainline = FALSE; + +static NSString *getApplicationName(void) +{ + const NSDictionary *dict; + NSString *appName = 0; + + /* Determine the application name */ + dict = (const NSDictionary *)CFBundleGetInfoDictionary(CFBundleGetMainBundle()); + if (dict) + appName = [dict objectForKey: @"CFBundleName"]; + + if (![appName length]) + appName = [[NSProcessInfo processInfo] processName]; + + return appName; +} #if SDL_USE_NIB_FILE /* A helper category for NSString */ @interface NSString (ReplaceSubString) - (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString; @end -#else -/* An internal Apple class used to setup Apple menus */ -@interface NSAppleMenuController:NSObject {} -- (void)controlMenu:(NSMenu *)aMenu; -@end #endif -@interface SDLApplication : NSApplication +@interface NSApplication (SDLApplication) @end -@implementation SDLApplication +@implementation NSApplication (SDLApplication) /* Invoked from the Quit menu item */ - (void)terminate:(id)sender { @@ -44,31 +78,22 @@ static BOOL gFinderLaunch; } @end - /* The main class of the application, the application's delegate */ @implementation SDLMain /* Set the working directory to the .app's parent directory */ - (void) setupWorkingDirectory:(BOOL)shouldChdir { - char parentdir[MAXPATHLEN]; - char *c; - - strncpy ( parentdir, gArgv[0], sizeof(parentdir) ); - c = (char*) parentdir; - - while (*c != '\0') /* go to end */ - c++; - - while (*c != '/') /* back up to parent */ - c--; - - *c++ = '\0'; /* cut off last part (binary name) */ - if (shouldChdir) { - assert ( chdir (parentdir) == 0 ); /* chdir to the binary app's parent */ - assert ( chdir ("../../../") == 0 ); /* chdir to the .app's parent */ + char parentdir[MAXPATHLEN]; + CFURLRef url = CFBundleCopyBundleURL(CFBundleGetMainBundle()); + CFURLRef url2 = CFURLCreateCopyDeletingLastPathComponent(0, url); + if (CFURLGetFileSystemRepresentation(url2, 1, (UInt8 *)parentdir, MAXPATHLEN)) { + chdir(parentdir); /* chdir to the binary app's parent */ + } + CFRelease(url); + CFRelease(url2); } } @@ -94,43 +119,60 @@ static BOOL gFinderLaunch; if ([menuItem hasSubmenu]) [self fixMenu:[menuItem submenu] withAppName:appName]; } - [ aMenu sizeToFit ]; } #else -void setupAppleMenu(void) +static void setApplicationMenu(void) { /* warning: this code is very odd */ - NSAppleMenuController *appleMenuController; NSMenu *appleMenu; - NSMenuItem *appleMenuItem; - - appleMenuController = [[NSAppleMenuController alloc] init]; - appleMenu = [[NSMenu alloc] initWithTitle:@""]; - appleMenuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""]; + NSMenuItem *menuItem; + NSString *title; + NSString *appName; - [appleMenuItem setSubmenu:appleMenu]; + appName = getApplicationName(); + appleMenu = [[NSMenu alloc] initWithTitle:@""]; + + /* Add menu items */ + title = [@"About " stringByAppendingString:appName]; + [appleMenu addItemWithTitle:title action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""]; - /* yes, we do need to add it and then remove it -- - if you don't add it, it doesn't get displayed - if you don't remove it, you have an extra, titleless item in the menubar - when you remove it, it appears to stick around - very, very odd */ - [[NSApp mainMenu] addItem:appleMenuItem]; - [appleMenuController controlMenu:appleMenu]; - [[NSApp mainMenu] removeItem:appleMenuItem]; + [appleMenu addItem:[NSMenuItem separatorItem]]; + + title = [@"Hide " stringByAppendingString:appName]; + [appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h"]; + + menuItem = (NSMenuItem *)[appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"]; + [menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)]; + + [appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""]; + + [appleMenu addItem:[NSMenuItem separatorItem]]; + + title = [@"Quit " stringByAppendingString:appName]; + [appleMenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"]; + + + /* Put menu into the menubar */ + menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""]; + [menuItem setSubmenu:appleMenu]; + [[NSApp mainMenu] addItem:menuItem]; + + /* Tell the application object that this is now the application menu */ + [NSApp setAppleMenu:appleMenu]; + + /* Finally give up our references to the objects */ [appleMenu release]; - [appleMenuItem release]; + [menuItem release]; } /* Create a window menu */ -void setupWindowMenu(void) +static void setupWindowMenu(void) { - NSMenu *windowMenu; - NSMenuItem *windowMenuItem; - NSMenuItem *menuItem; - + NSMenu *windowMenu; + NSMenuItem *windowMenuItem; + NSMenuItem *menuItem; windowMenu = [[NSMenu alloc] initWithTitle:@"Window"]; @@ -153,19 +195,30 @@ void setupWindowMenu(void) } /* Replacement for NSApplicationMain */ -void CustomApplicationMain (argc, argv) +static void CustomApplicationMain (int argc, char **argv) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; SDLMain *sdlMain; /* Ensure the application object is initialised */ - [SDLApplication sharedApplication]; + [NSApplication sharedApplication]; +#ifdef SDL_USE_CPS + { + CPSProcessSerNum PSN; + /* Tell the dock about us */ + if (!CPSGetCurrentProcess(&PSN)) + if (!CPSEnableForegroundOperation(&PSN,0x03,0x3C,0x2C,0x1103)) + if (!CPSSetFrontProcess(&PSN)) + [NSApplication sharedApplication]; + } +#endif /* SDL_USE_CPS */ + /* Set up the menubar */ [NSApp setMainMenu:[[NSMenu alloc] init]]; - setupAppleMenu(); + setApplicationMenu(); setupWindowMenu(); - + /* Create SDLMain and make it the app delegate */ sdlMain = [[SDLMain alloc] init]; [NSApp setDelegate:sdlMain]; @@ -179,6 +232,56 @@ void CustomApplicationMain (argc, argv) #endif + +/* + * Catch document open requests...this lets us notice files when the app + * was launched by double-clicking a document, or when a document was + * dragged/dropped on the app's icon. You need to have a + * CFBundleDocumentsType section in your Info.plist to get this message, + * apparently. + * + * Files are added to gArgv, so to the app, they'll look like command line + * arguments. Previously, apps launched from the finder had nothing but + * an argv[0]. + * + * This message may be received multiple times to open several docs on launch. + * + * This message is ignored once the app's mainline has been called. + */ +- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename +{ + const char *temparg; + size_t arglen; + char *arg; + char **newargv; + + if (!gFinderLaunch) /* MacOS is passing command line args. */ + return FALSE; + + if (gCalledAppMainline) /* app has started, ignore this document. */ + return FALSE; + + temparg = [filename UTF8String]; + arglen = SDL_strlen(temparg) + 1; + arg = (char *) SDL_malloc(arglen); + if (arg == NULL) + return FALSE; + + newargv = (char **) realloc(gArgv, sizeof (char *) * (gArgc + 2)); + if (newargv == NULL) + { + SDL_free(arg); + return FALSE; + } + gArgv = newargv; + + SDL_strlcpy(arg, temparg, arglen); + gArgv[gArgc++] = arg; + gArgv[gArgc] = NULL; + return TRUE; +} + + /* Called when the internal event loop has just started running */ - (void) applicationDidFinishLaunching: (NSNotification *) note { @@ -189,10 +292,11 @@ void CustomApplicationMain (argc, argv) #if SDL_USE_NIB_FILE /* Set the main menu to contain the real app name instead of "SDL App" */ - [self fixMenu:[NSApp mainMenu] withAppName:[[NSProcessInfo processInfo] processName]]; + [self fixMenu:[NSApp mainMenu] withAppName:getApplicationName()]; #endif /* Hand off to main application code */ + gCalledAppMainline = TRUE; status = SDL_main (gArgc, gArgv); /* We're done, thank you for playing */ @@ -213,7 +317,7 @@ void CustomApplicationMain (argc, argv) NSString *result; bufferSize = selfLen + aStringLen - aRange.length; - buffer = NSAllocateMemoryPages(bufferSize*sizeof(unichar)); + buffer = (unichar *)NSAllocateMemoryPages(bufferSize*sizeof(unichar)); /* Get first part into buffer */ localRange.location = 0; @@ -250,29 +354,28 @@ void CustomApplicationMain (argc, argv) /* Main entry point to executable - should *not* be SDL_main! */ int main (int argc, char **argv) { - /* Copy the arguments into a global variable */ - int i; - /* This is passed if we are launched by double-clicking */ if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) { + gArgv = (char **) SDL_malloc(sizeof (char *) * 2); + gArgv[0] = argv[0]; + gArgv[1] = NULL; gArgc = 1; - gFinderLaunch = YES; + gFinderLaunch = YES; } else { + int i; gArgc = argc; - gFinderLaunch = NO; + gArgv = (char **) SDL_malloc(sizeof (char *) * (argc+1)); + for (i = 0; i <= argc; i++) + gArgv[i] = argv[i]; + gFinderLaunch = NO; } - gArgv = (char**) malloc (sizeof(*gArgv) * (gArgc+1)); - assert (gArgv != NULL); - for (i = 0; i < gArgc; i++) - gArgv[i] = argv[i]; - gArgv[i] = NULL; #if SDL_USE_NIB_FILE - [SDLApplication poseAsClass:[NSApplication class]]; NSApplicationMain (argc, argv); #else CustomApplicationMain (argc, argv); #endif return 0; } + diff --git a/d1x-rebirth/arch/cocoa/tool_bundle.py b/d1x-rebirth/arch/cocoa/tool_bundle.py index a3033b797..46d8e00b7 100644 --- a/d1x-rebirth/arch/cocoa/tool_bundle.py +++ b/d1x-rebirth/arch/cocoa/tool_bundle.py @@ -115,7 +115,7 @@ def TOOL_BUNDLE(env): env['BUNDLEPREFIX'] = '' env['BUNDLESUFFIX'] = '' env['BUNDLEDIRSUFFIX'] = '.bundle' - env['FRAMEWORKS'] = ['-framework Carbon', '-framework System'] + #env['FRAMEWORKS'] = ['-framework Carbon', '-framework System'] env['BUNDLE'] = '$SHLINK' env['BUNDLEFLAGS'] = ' -bundle' env['BUNDLECOM'] = '$BUNDLE $BUNDLEFLAGS -o ${TARGET} $SOURCES $_LIBDIRFLAGS $_LIBFLAGS $FRAMEWORKS' diff --git a/d1x-rebirth/d1x-rebirth.xcodeproj/project.pbxproj b/d1x-rebirth/d1x-rebirth.xcodeproj/project.pbxproj index 881729466..0340c4411 100755 --- a/d1x-rebirth/d1x-rebirth.xcodeproj/project.pbxproj +++ b/d1x-rebirth/d1x-rebirth.xcodeproj/project.pbxproj @@ -23,12 +23,10 @@ 676032FB066B39CE008A67A3 /* kmatrix.c in Sources */ = {isa = PBXBuildFile; fileRef = 676032F9066B39CE008A67A3 /* kmatrix.c */; }; 6766BAC20668B3A000A6052D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; 676AC1C20668A938007173EB /* u_mem.h in Headers */ = {isa = PBXBuildFile; fileRef = 67B4490F066880A300DF26D8 /* u_mem.h */; }; - 676AC1C30668A938007173EB /* error.h in Headers */ = {isa = PBXBuildFile; fileRef = 67B44913066880C400DF26D8 /* error.h */; }; 676AC1C40668A938007173EB /* gr.h in Headers */ = {isa = PBXBuildFile; fileRef = 67B44914066880C400DF26D8 /* gr.h */; }; 676AC1C50668A938007173EB /* grdef.h in Headers */ = {isa = PBXBuildFile; fileRef = 67B44915066880C400DF26D8 /* grdef.h */; }; 676AC1C70668A938007173EB /* byteswap.h in Headers */ = {isa = PBXBuildFile; fileRef = 6791CE4F0668852C00056A5A /* byteswap.h */; }; 676AC1C80668A938007173EB /* rle.h in Headers */ = {isa = PBXBuildFile; fileRef = 6791CE500668852C00056A5A /* rle.h */; }; - 676AC1CA0668A938007173EB /* u_dpmi.h in Headers */ = {isa = PBXBuildFile; fileRef = 6791CF090668878F00056A5A /* u_dpmi.h */; }; 676AC1CE0668A938007173EB /* fix.h in Headers */ = {isa = PBXBuildFile; fileRef = 6791CF420668881F00056A5A /* fix.h */; }; 676AC1CF0668A938007173EB /* palette.h in Headers */ = {isa = PBXBuildFile; fileRef = 6791CF4E0668883900056A5A /* palette.h */; }; 676AC1D00668A938007173EB /* pcx.h in Headers */ = {isa = PBXBuildFile; fileRef = 6791CF620668885500056A5A /* pcx.h */; }; @@ -58,7 +56,6 @@ 676AC1FB0668A938007173EB /* rect.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B4414C066878B300DF26D8 /* rect.c */; }; 676AC1FC0668A938007173EB /* rle.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B4414D066878B300DF26D8 /* rle.c */; }; 676AC1FD0668A938007173EB /* scalec.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B44151066878B300DF26D8 /* scalec.c */; }; - 676AC1FE0668A938007173EB /* tmerge.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B44152066878B300DF26D8 /* tmerge.c */; }; 676AC1FF0668A938007173EB /* clipper.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B441760668792300DF26D8 /* clipper.c */; }; 676AC2000668A938007173EB /* draw.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B441780668792300DF26D8 /* draw.c */; }; 676AC2010668A938007173EB /* globvars.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B441790668792300DF26D8 /* globvars.c */; }; @@ -146,7 +143,6 @@ 676AC2770668A939007173EB /* 3d.h in Headers */ = {isa = PBXBuildFile; fileRef = 6791CF8D066888DD00056A5A /* 3d.h */; }; 676AC2780668A939007173EB /* args.h in Headers */ = {isa = PBXBuildFile; fileRef = 6791D00B066889CD00056A5A /* args.h */; }; 676AC2790668A939007173EB /* byteswap.h in Headers */ = {isa = PBXBuildFile; fileRef = 6791CE4F0668852C00056A5A /* byteswap.h */; }; - 676AC27E0668A939007173EB /* error.h in Headers */ = {isa = PBXBuildFile; fileRef = 67B44913066880C400DF26D8 /* error.h */; }; 676AC2800668A939007173EB /* fix.h in Headers */ = {isa = PBXBuildFile; fileRef = 6791CF420668881F00056A5A /* fix.h */; }; 676AC2810668A939007173EB /* gr.h in Headers */ = {isa = PBXBuildFile; fileRef = 67B44914066880C400DF26D8 /* gr.h */; }; 676AC2820668A939007173EB /* grdef.h in Headers */ = {isa = PBXBuildFile; fileRef = 67B44915066880C400DF26D8 /* grdef.h */; }; @@ -159,7 +155,6 @@ 676AC2920668A939007173EB /* strutil.h in Headers */ = {isa = PBXBuildFile; fileRef = 6791D0A306688AB900056A5A /* strutil.h */; }; 676AC2930668A939007173EB /* texmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 6791CFB10668891200056A5A /* texmap.h */; }; 676AC2940668A939007173EB /* timer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6791D04B06688A2E00056A5A /* timer.h */; }; - 676AC2950668A939007173EB /* u_dpmi.h in Headers */ = {isa = PBXBuildFile; fileRef = 6791CF090668878F00056A5A /* u_dpmi.h */; }; 676AC2960668A939007173EB /* u_mem.h in Headers */ = {isa = PBXBuildFile; fileRef = 67B4490F066880A300DF26D8 /* u_mem.h */; }; 676AC2970668A939007173EB /* vecmat.h in Headers */ = {isa = PBXBuildFile; fileRef = 6791D026066889F100056A5A /* vecmat.h */; }; 676AC29C0668A939007173EB /* 2dsline.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B44139066878B300DF26D8 /* 2dsline.c */; }; @@ -179,7 +174,6 @@ 676AC2AB0668A939007173EB /* rect.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B4414C066878B300DF26D8 /* rect.c */; }; 676AC2AC0668A939007173EB /* rle.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B4414D066878B300DF26D8 /* rle.c */; }; 676AC2AD0668A939007173EB /* scalec.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B44151066878B300DF26D8 /* scalec.c */; }; - 676AC2AE0668A939007173EB /* tmerge.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B44152066878B300DF26D8 /* tmerge.c */; }; 676AC2AF0668A939007173EB /* clipper.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B441760668792300DF26D8 /* clipper.c */; }; 676AC2B00668A939007173EB /* draw.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B441780668792300DF26D8 /* draw.c */; }; 676AC2B10668A939007173EB /* globvars.c in Sources */ = {isa = PBXBuildFile; fileRef = 67B441790668792300DF26D8 /* globvars.c */; }; @@ -413,6 +407,10 @@ EBAFC290088E67CD006329AD /* digiobj.c in Sources */ = {isa = PBXBuildFile; fileRef = EBAFC28F088E67CD006329AD /* digiobj.c */; }; EBAFC291088E67CD006329AD /* digiobj.c in Sources */ = {isa = PBXBuildFile; fileRef = EBAFC28F088E67CD006329AD /* digiobj.c */; }; EBAFC2C0088E6BC7006329AD /* conf.h in Headers */ = {isa = PBXBuildFile; fileRef = EBAFC269088E508D006329AD /* conf.h */; }; + EBC4BAFA170E64540033D261 /* vers_id.c in Sources */ = {isa = PBXBuildFile; fileRef = EBC4BAF9170E63E90033D261 /* vers_id.c */; }; + EBC4BAFB170E64550033D261 /* vers_id.c in Sources */ = {isa = PBXBuildFile; fileRef = EBC4BAF9170E63E90033D261 /* vers_id.c */; }; + EBC4BB11170E660B0033D261 /* hash.c in Sources */ = {isa = PBXBuildFile; fileRef = EBC4BAFC170E64760033D261 /* hash.c */; }; + EBC4BB12170E660C0033D261 /* hash.c in Sources */ = {isa = PBXBuildFile; fileRef = EBC4BAFC170E64760033D261 /* hash.c */; }; EBC58E710D489E19007C8ABF /* args.c in Sources */ = {isa = PBXBuildFile; fileRef = EBC58E700D489E19007C8ABF /* args.c */; }; EBC58E720D489E19007C8ABF /* args.c in Sources */ = {isa = PBXBuildFile; fileRef = EBC58E700D489E19007C8ABF /* args.c */; }; EBC652030890D632004FCAA3 /* bmread.c in Sources */ = {isa = PBXBuildFile; fileRef = EBC652010890D632004FCAA3 /* bmread.c */; }; @@ -499,14 +497,8 @@ EBEEB1EA0D2B317800FF39B4 /* custom.h in Headers */ = {isa = PBXBuildFile; fileRef = EBEEB1E50D2B317700FF39B4 /* custom.h */; }; EBEEB1EE0D2B317800FF39B4 /* custom.c in Sources */ = {isa = PBXBuildFile; fileRef = EBEEB1E40D2B317700FF39B4 /* custom.c */; }; EBEEB1EF0D2B317800FF39B4 /* custom.h in Headers */ = {isa = PBXBuildFile; fileRef = EBEEB1E50D2B317700FF39B4 /* custom.h */; }; - EBEEB1FF0D2B320C00FF39B4 /* hash.c in Sources */ = {isa = PBXBuildFile; fileRef = EBEEB1F30D2B320B00FF39B4 /* hash.c */; }; EBEEB2000D2B320C00FF39B4 /* hash.h in Headers */ = {isa = PBXBuildFile; fileRef = EBEEB1F40D2B320B00FF39B4 /* hash.h */; }; - EBEEB2090D2B320C00FF39B4 /* script.h in Headers */ = {isa = PBXBuildFile; fileRef = EBEEB1FD0D2B320B00FF39B4 /* script.h */; }; - EBEEB20B0D2B320C00FF39B4 /* hash.c in Sources */ = {isa = PBXBuildFile; fileRef = EBEEB1F30D2B320B00FF39B4 /* hash.c */; }; EBEEB20C0D2B320C00FF39B4 /* hash.h in Headers */ = {isa = PBXBuildFile; fileRef = EBEEB1F40D2B320B00FF39B4 /* hash.h */; }; - EBEEB2150D2B320C00FF39B4 /* script.h in Headers */ = {isa = PBXBuildFile; fileRef = EBEEB1FD0D2B320B00FF39B4 /* script.h */; }; - EBEEB29F0D2B378B00FF39B4 /* compare.c in Sources */ = {isa = PBXBuildFile; fileRef = EBEEB29B0D2B378B00FF39B4 /* compare.c */; }; - EBEEB2A30D2B378B00FF39B4 /* compare.c in Sources */ = {isa = PBXBuildFile; fileRef = EBEEB29B0D2B378B00FF39B4 /* compare.c */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -567,7 +559,7 @@ 670E3796066C50C30085B671 /* CHANGELOG.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = CHANGELOG.txt; sourceTree = ""; }; 6710AAFE066B2D6100DB0F68 /* SDL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL.framework; path = /Library/Frameworks/SDL.framework; sourceTree = ""; }; 6710AB68066B2E0400DB0F68 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; - 675ED123066B196700E42AA7 /* d1x-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = "d1x-Info.plist"; sourceTree = ""; }; + 675ED123066B196700E42AA7 /* d1x-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "d1x-Info.plist"; sourceTree = ""; }; 676032DC066B399A008A67A3 /* multi.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = multi.c; sourceTree = ""; }; 676032DD066B399A008A67A3 /* multibot.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = multibot.c; sourceTree = ""; }; 676032F9066B39CE008A67A3 /* kmatrix.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = kmatrix.c; sourceTree = ""; }; @@ -576,7 +568,6 @@ 676AC31D0668A939007173EB /* d1xgl.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = d1xgl.app; sourceTree = BUILT_PRODUCTS_DIR; }; 6791CE4F0668852C00056A5A /* byteswap.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = byteswap.h; sourceTree = ""; }; 6791CE500668852C00056A5A /* rle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = rle.h; sourceTree = ""; }; - 6791CF090668878F00056A5A /* u_dpmi.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = u_dpmi.h; sourceTree = ""; }; 6791CF420668881F00056A5A /* fix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = fix.h; sourceTree = ""; }; 6791CF4E0668883900056A5A /* palette.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = palette.h; sourceTree = ""; }; 6791CF620668885500056A5A /* pcx.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = pcx.h; sourceTree = ""; }; @@ -606,7 +597,6 @@ 67B4414C066878B300DF26D8 /* rect.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = rect.c; sourceTree = ""; }; 67B4414D066878B300DF26D8 /* rle.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = rle.c; sourceTree = ""; }; 67B44151066878B300DF26D8 /* scalec.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = scalec.c; sourceTree = ""; }; - 67B44152066878B300DF26D8 /* tmerge.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = tmerge.c; sourceTree = ""; }; 67B441760668792300DF26D8 /* clipper.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = clipper.c; sourceTree = ""; }; 67B441780668792300DF26D8 /* draw.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = draw.c; sourceTree = ""; }; 67B441790668792300DF26D8 /* globvars.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = globvars.c; sourceTree = ""; }; @@ -691,12 +681,11 @@ 67B4488906687E5E00DF26D8 /* scanline.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = scanline.c; sourceTree = ""; }; 67B4489206687E5E00DF26D8 /* tmapflat.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = tmapflat.c; sourceTree = ""; }; 67B4490F066880A300DF26D8 /* u_mem.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = u_mem.h; sourceTree = ""; }; - 67B44913066880C400DF26D8 /* error.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = error.h; sourceTree = ""; }; 67B44914066880C400DF26D8 /* gr.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = gr.h; sourceTree = ""; }; 67B44915066880C400DF26D8 /* grdef.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = grdef.h; sourceTree = ""; }; 67F6FED0066B13B400443922 /* SDLMain.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = SDLMain.h; path = arch/cocoa/SDLMain.h; sourceTree = ""; }; 67F6FED1066B13B400443922 /* SDLMain.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = SDLMain.m; path = arch/cocoa/SDLMain.m; sourceTree = ""; }; - 67F6FEEA066B13D900443922 /* d1xgl-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = "d1xgl-Info.plist"; sourceTree = ""; }; + 67F6FEEA066B13D900443922 /* d1xgl-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "d1xgl-Info.plist"; sourceTree = ""; }; EB01AFA90A65323200EA4C7C /* newdemo.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = newdemo.h; sourceTree = ""; }; EB0420B90A341041002CC961 /* multi.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = multi.h; sourceTree = ""; }; EB0420BB0A341042002CC961 /* morph.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = morph.h; sourceTree = ""; }; @@ -734,7 +723,6 @@ EB0420DE0A341042002CC961 /* newmenu.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = newmenu.h; sourceTree = ""; }; EB0420E10A341042002CC961 /* digi.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = digi.h; sourceTree = ""; }; EB0420E30A341042002CC961 /* gameseq.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = gameseq.h; sourceTree = ""; }; - EB0420E40A341042002CC961 /* desc_id.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = desc_id.h; sourceTree = ""; }; EB0420E50A341042002CC961 /* credits.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = credits.h; sourceTree = ""; }; EB0420E70A341042002CC961 /* multibot.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = multibot.h; sourceTree = ""; }; EB0420E80A341042002CC961 /* gameseg.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = gameseg.h; sourceTree = ""; }; @@ -764,7 +752,6 @@ EB0421060A341042002CC961 /* config.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; EB0929F712A10889004D9A79 /* messagebox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = messagebox.h; sourceTree = ""; }; EB0929F812A10889004D9A79 /* messagebox.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = messagebox.c; sourceTree = ""; }; - EB092A3912A2151A004D9A79 /* messagebox.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = messagebox.c; sourceTree = ""; }; EB092A3A12A21527004D9A79 /* messagebox.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = messagebox.c; sourceTree = ""; }; EB092A4912A21A14004D9A79 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; EB1283BE0D59D94800A991A3 /* d1x.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = d1x.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -784,7 +771,6 @@ EB35ABDF0FB199B800C36930 /* window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = window.h; sourceTree = ""; }; EB35ABE00FB199B800C36930 /* window.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = window.c; sourceTree = ""; }; EB380D7C0E168B1900EBD9AD /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; - EB3CA4F90E97740E00FB1E93 /* tracker.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = tracker.h; sourceTree = ""; }; EB6142451501EDC9004E2AE8 /* curve.pad */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = curve.pad; sourceTree = ""; }; EB6142461501EDC9004E2AE8 /* dummy.pad */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dummy.pad; sourceTree = ""; }; EB6142471501EDC9004E2AE8 /* group.pad */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = group.pad; sourceTree = ""; }; @@ -820,6 +806,13 @@ EBAFC26A088E508D006329AD /* descent.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; path = descent.r; sourceTree = ""; }; EBAFC26D088E508D006329AD /* SDL_main.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = SDL_main.c; sourceTree = ""; }; EBAFC28F088E67CD006329AD /* digiobj.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = digiobj.c; sourceTree = ""; }; + EBC4BAF4170E62160033D261 /* dxxerror.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dxxerror.h; sourceTree = ""; }; + EBC4BAF5170E62160033D261 /* makesig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = makesig.h; sourceTree = ""; }; + EBC4BAF6170E62C60033D261 /* tool_bundle.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; name = tool_bundle.py; path = arch/cocoa/tool_bundle.py; sourceTree = ""; }; + EBC4BAF7170E63380033D261 /* d1x-rebirth.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "d1x-rebirth.rc"; sourceTree = ""; }; + EBC4BAF8170E63890033D261 /* esegment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = esegment.h; sourceTree = ""; }; + EBC4BAF9170E63E90033D261 /* vers_id.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vers_id.c; sourceTree = ""; }; + EBC4BAFC170E64760033D261 /* hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hash.c; sourceTree = ""; }; EBC58E700D489E19007C8ABF /* args.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = args.c; sourceTree = ""; }; EBC650800890C882004FCAA3 /* autosave.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = autosave.c; sourceTree = ""; }; EBC650970890C882004FCAA3 /* centers.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = centers.c; sourceTree = ""; }; @@ -837,7 +830,6 @@ EBC650A90890C882004FCAA3 /* kcurve.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = kcurve.c; sourceTree = ""; }; EBC650AB0890C882004FCAA3 /* kfuncs.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = kfuncs.c; sourceTree = ""; }; EBC650AD0890C882004FCAA3 /* kgame.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = kgame.c; sourceTree = ""; }; - EBC650AE0890C882004FCAA3 /* kgroup.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = kgroup.c; sourceTree = ""; }; EBC650AF0890C882004FCAA3 /* khelp.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = khelp.c; sourceTree = ""; }; EBC650B00890C882004FCAA3 /* kmine.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = kmine.c; sourceTree = ""; }; EBC650B10890C882004FCAA3 /* ksegmove.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = ksegmove.c; sourceTree = ""; }; @@ -845,7 +837,6 @@ EBC650B30890C882004FCAA3 /* ksegsize.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = ksegsize.c; sourceTree = ""; }; EBC650B40890C882004FCAA3 /* ktmap.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = ktmap.c; sourceTree = ""; }; EBC650B50890C882004FCAA3 /* kview.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = kview.c; sourceTree = ""; }; - EBC650B60890C882004FCAA3 /* macro.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = macro.c; sourceTree = ""; }; EBC650B90890C882004FCAA3 /* med.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = med.c; sourceTree = ""; }; EBC650BA0890C882004FCAA3 /* meddraw.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = meddraw.c; sourceTree = ""; }; EBC650BD0890C882004FCAA3 /* medmisc.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = medmisc.c; sourceTree = ""; }; @@ -914,23 +905,12 @@ EBEEB1BD0D2A423E00FF39B4 /* pstypes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = pstypes.h; sourceTree = ""; }; EBEEB1E40D2B317700FF39B4 /* custom.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = custom.c; sourceTree = ""; }; EBEEB1E50D2B317700FF39B4 /* custom.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = custom.h; sourceTree = ""; }; - EBEEB1F30D2B320B00FF39B4 /* hash.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = hash.c; sourceTree = ""; }; EBEEB1F40D2B320B00FF39B4 /* hash.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = hash.h; sourceTree = ""; }; - EBEEB1FD0D2B320B00FF39B4 /* script.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = script.h; sourceTree = ""; }; - EBEEB2190D2B34DE00FF39B4 /* alsadigi.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = alsadigi.c; sourceTree = ""; }; - EBEEB21A0D2B34DE00FF39B4 /* hmiplay.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = hmiplay.c; sourceTree = ""; }; - EBEEB2290D2B351400FF39B4 /* music.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = music.h; sourceTree = ""; }; EBEEB2540D2B35B000FF39B4 /* resource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = resource.h; sourceTree = ""; }; - EBEEB25B0D2B364300FF39B4 /* altsound.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = altsound.c; sourceTree = ""; }; - EBEEB25C0D2B364300FF39B4 /* altsound.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = altsound.h; sourceTree = ""; }; - EBEEB25E0D2B364300FF39B4 /* compbit.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = compbit.h; sourceTree = ""; }; EBEEB2600D2B364300FF39B4 /* digicomp.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = digicomp.c; sourceTree = ""; }; EBEEB2610D2B364300FF39B4 /* digicomp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = digicomp.h; sourceTree = ""; }; - EBEEB2660D2B364300FF39B4 /* mute.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = mute.c; sourceTree = ""; }; - EBEEB2670D2B364300FF39B4 /* mute.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = mute.h; sourceTree = ""; }; EBEEB2680D2B364300FF39B4 /* snddecom.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = snddecom.c; sourceTree = ""; }; EBEEB2690D2B364300FF39B4 /* snddecom.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = snddecom.h; sourceTree = ""; }; - EBEEB29B0D2B378B00FF39B4 /* compare.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = compare.c; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -978,6 +958,7 @@ children = ( 67F6FED0066B13B400443922 /* SDLMain.h */, 67F6FED1066B13B400443922 /* SDLMain.m */, + EBC4BAF6170E62C60033D261 /* tool_bundle.py */, ); name = Classes; sourceTree = ""; @@ -1067,14 +1048,6 @@ name = Frameworks; sourceTree = ""; }; - 67603357066B3AE0008A67A3 /* include */ = { - isa = PBXGroup; - children = ( - EBEEB2290D2B351400FF39B4 /* music.h */, - ); - path = include; - sourceTree = ""; - }; 676AC04B0668A814007173EB /* ogl */ = { isa = PBXGroup; children = ( @@ -1107,7 +1080,6 @@ 67B4414C066878B300DF26D8 /* rect.c */, 67B4414D066878B300DF26D8 /* rle.c */, 67B44151066878B300DF26D8 /* scalec.c */, - 67B44152066878B300DF26D8 /* tmerge.c */, ); path = 2d; sourceTree = SOURCE_ROOT; @@ -1130,18 +1102,6 @@ path = 3d; sourceTree = SOURCE_ROOT; }; - 67B44193066879B000DF26D8 /* linux */ = { - isa = PBXGroup; - children = ( - EB092A3912A2151A004D9A79 /* messagebox.c */, - EBEEB2190D2B34DE00FF39B4 /* alsadigi.c */, - EBEEB21A0D2B34DE00FF39B4 /* hmiplay.c */, - 67603357066B3AE0008A67A3 /* include */, - ); - name = linux; - path = arch/linux; - sourceTree = SOURCE_ROOT; - }; 67B441D106687A0200DF26D8 /* sdl */ = { isa = PBXGroup; children = ( @@ -1169,7 +1129,6 @@ children = ( EBAFC268088E508D006329AD /* carbon */, EB3319E60D53341900C799B0 /* include */, - 67B44193066879B000DF26D8 /* linux */, 676AC04B0668A814007173EB /* ogl */, 67B441D106687A0200DF26D8 /* sdl */, EBEEB24A0D2B35B000FF39B4 /* win32 */, @@ -1190,7 +1149,6 @@ children = ( 67B446CF06687CF400DF26D8 /* ai.c */, 67B446D206687CF400DF26D8 /* aipath.c */, - EBEEB25B0D2B364300FF39B4 /* altsound.c */, 67B446D406687CF400DF26D8 /* automap.c */, 67B446D606687CF400DF26D8 /* bm.c */, EBC652010890D632004FCAA3 /* bmread.c */, @@ -1218,7 +1176,6 @@ 67B4471006687CF400DF26D8 /* gameseg.c */, 67B4471206687CF400DF26D8 /* gameseq.c */, 67B4471506687CF400DF26D8 /* gauges.c */, - EBEEB1F30D2B320B00FF39B4 /* hash.c */, 67B4471706687CF400DF26D8 /* hostage.c */, 67B4471906687CF400DF26D8 /* hud.c */, 67B4471B06687CF400DF26D8 /* inferno.c */, @@ -1232,7 +1189,6 @@ 67B4473106687CF400DF26D8 /* morph.c */, 676032DC066B399A008A67A3 /* multi.c */, 676032DD066B399A008A67A3 /* multibot.c */, - EBEEB2660D2B364300FF39B4 /* mute.c */, 17DFA6AF10C1A29500674D11 /* net_udp.c */, 67B4473D06687CF400DF26D8 /* newdemo.c */, 67B4473F06687CF400DF26D8 /* newmenu.c */, @@ -1257,22 +1213,20 @@ 67B4477F06687CF500DF26D8 /* text.c */, 67B4478206687CF500DF26D8 /* titles.c */, 67B4478406687CF500DF26D8 /* vclip.c */, + EBC4BAF9170E63E90033D261 /* vers_id.c */, 67B4478706687CF500DF26D8 /* wall.c */, 67B4478906687CF500DF26D8 /* weapon.c */, EB0421040A341042002CC961 /* ai.h */, EB0421010A341042002CC961 /* aistruct.h */, - EBEEB25C0D2B364300FF39B4 /* altsound.h */, EB0421030A341042002CC961 /* automap.h */, EB0421020A341042002CC961 /* bm.h */, EB0420F10A341042002CC961 /* collide.h */, - EBEEB25E0D2B364300FF39B4 /* compbit.h */, EB0421060A341042002CC961 /* config.h */, EB0421050A341042002CC961 /* controls.h */, EB0420BF0A341042002CC961 /* cntrlcen.h */, EB0420E50A341042002CC961 /* credits.h */, EBEEB2610D2B364300FF39B4 /* digicomp.h */, EBEEB1E50D2B317700FF39B4 /* custom.h */, - EB0420E40A341042002CC961 /* desc_id.h */, EB0420E10A341042002CC961 /* digi.h */, EB0421000A341042002CC961 /* effects.h */, EB0420FF0A341042002CC961 /* endlevel.h */, @@ -1299,7 +1253,6 @@ EB0420BB0A341042002CC961 /* morph.h */, EB0420B90A341041002CC961 /* multi.h */, EB0420E70A341042002CC961 /* multibot.h */, - EBEEB2670D2B364300FF39B4 /* mute.h */, 17DFA6B210C1A2A300674D11 /* net_udp.h */, EB01AFA90A65323200EA4C7C /* newdemo.h */, EB0420DE0A341042002CC961 /* newmenu.h */, @@ -1315,7 +1268,6 @@ EB0420D30A341042002CC961 /* robot.h */, EB0420D20A341042002CC961 /* scores.h */, EB0420D10A341042002CC961 /* screens.h */, - EBEEB1FD0D2B320B00FF39B4 /* script.h */, EB0420D00A341042002CC961 /* segment.h */, EB0420CF0A341042002CC961 /* segpoint.h */, EB0420CE0A341042002CC961 /* slew.h */, @@ -1360,9 +1312,9 @@ isa = PBXGroup; children = ( EBC58E700D489E19007C8ABF /* args.c */, - EBEEB29B0D2B378B00FF39B4 /* compare.c */, EB92BEA40CDD6A570045A32C /* dl_list.c */, 67B4486A06687E1000DF26D8 /* error.c */, + EBC4BAFC170E64760033D261 /* hash.c */, 179E6E9D11F37B3400175C54 /* hmp.c */, EBAC98F90D42497F0017D4BC /* ignorecase.c */, EB1405B912100883002B1CC6 /* physfsx.c */, @@ -1388,13 +1340,12 @@ isa = PBXGroup; children = ( EBEEB1140D2A329900FF39B4 /* editor */, - EB3CA4F80E97740E00FB1E93 /* tracker */, 6791CF8D066888DD00056A5A /* 3d.h */, 6791D00B066889CD00056A5A /* args.h */, 6791CE4F0668852C00056A5A /* byteswap.h */, EB9181090DABA47B0010CB39 /* console.h */, EB92BE680CDD69830045A32C /* dl_list.h */, - 67B44913066880C400DF26D8 /* error.h */, + EBC4BAF4170E62160033D261 /* dxxerror.h */, 6791CF420668881F00056A5A /* fix.h */, EBC652120890D6DF004FCAA3 /* func.h */, 67B44914066880C400DF26D8 /* gr.h */, @@ -1404,6 +1355,7 @@ EBAC994E0D4250320017D4BC /* ignorecase.h */, EB3319F00D5334B600C799B0 /* internal.h */, EB3319F10D53351600C799B0 /* loadgl.h */, + EBC4BAF5170E62160033D261 /* makesig.h */, 6791D08F06688A9C00056A5A /* maths.h */, EB3319F20D53351600C799B0 /* ogl_init.h */, 6791CF4E0668883900056A5A /* palette.h */, @@ -1416,8 +1368,6 @@ 6791D0A306688AB900056A5A /* strutil.h */, 6791CFB10668891200056A5A /* texmap.h */, 6791D04B06688A2E00056A5A /* timer.h */, - EBFD39740E3C1C2300FED206 /* tracker */, - 6791CF090668878F00056A5A /* u_dpmi.h */, EBC6520F0890D6B7004FCAA3 /* ui.h */, 67B4490F066880A300DF26D8 /* u_mem.h */, 6791D026066889F100056A5A /* vecmat.h */, @@ -1443,14 +1393,6 @@ path = arch/include; sourceTree = ""; }; - EB3CA4F80E97740E00FB1E93 /* tracker */ = { - isa = PBXGroup; - children = ( - EB3CA4F90E97740E00FB1E93 /* tracker.h */, - ); - path = tracker; - sourceTree = ""; - }; EB6142441501EDC9004E2AE8 /* data */ = { isa = PBXGroup; children = ( @@ -1512,7 +1454,6 @@ EBC650A90890C882004FCAA3 /* kcurve.c */, EBC650AB0890C882004FCAA3 /* kfuncs.c */, EBC650AD0890C882004FCAA3 /* kgame.c */, - EBC650AE0890C882004FCAA3 /* kgroup.c */, EBC650AF0890C882004FCAA3 /* khelp.c */, EBC650B00890C882004FCAA3 /* kmine.c */, EBC650B10890C882004FCAA3 /* ksegmove.c */, @@ -1520,7 +1461,6 @@ EBC650B30890C882004FCAA3 /* ksegsize.c */, EBC650B40890C882004FCAA3 /* ktmap.c */, EBC650B50890C882004FCAA3 /* kview.c */, - EBC650B60890C882004FCAA3 /* macro.c */, EBC650B90890C882004FCAA3 /* med.c */, EBC650BA0890C882004FCAA3 /* meddraw.c */, EBC650BD0890C882004FCAA3 /* medmisc.c */, @@ -1571,6 +1511,7 @@ EBEEB1160D2A329900FF39B4 /* editor.h */, EBEEB1170D2A329900FF39B4 /* ehostage.h */, EBEEB1180D2A329900FF39B4 /* eobject.h */, + EBC4BAF8170E63890033D261 /* esegment.h */, EBEEB1190D2A329900FF39B4 /* eswitch.h */, EBEEB11A0D2A329900FF39B4 /* info.h */, EBEEB11B0D2A329900FF39B4 /* kdefs.h */, @@ -1592,6 +1533,7 @@ EBEEB24A0D2B35B000FF39B4 /* win32 */ = { isa = PBXGroup; children = ( + EBC4BAF7170E63380033D261 /* d1x-rebirth.rc */, EB092A3A12A21527004D9A79 /* messagebox.c */, EBEEB24F0D2B35B000FF39B4 /* include */, ); @@ -1607,13 +1549,6 @@ path = include; sourceTree = ""; }; - EBFD39740E3C1C2300FED206 /* tracker */ = { - isa = PBXGroup; - children = ( - ); - path = tracker; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -1622,12 +1557,10 @@ buildActionMask = 2147483647; files = ( 676AC1C20668A938007173EB /* u_mem.h in Headers */, - 676AC1C30668A938007173EB /* error.h in Headers */, 676AC1C40668A938007173EB /* gr.h in Headers */, 676AC1C50668A938007173EB /* grdef.h in Headers */, 676AC1C70668A938007173EB /* byteswap.h in Headers */, 676AC1C80668A938007173EB /* rle.h in Headers */, - 676AC1CA0668A938007173EB /* u_dpmi.h in Headers */, 676AC1CE0668A938007173EB /* fix.h in Headers */, 676AC1CF0668A938007173EB /* palette.h in Headers */, 676AC1D00668A938007173EB /* pcx.h in Headers */, @@ -1652,7 +1585,6 @@ EBEEB1080D2A307300FF39B4 /* texmapl.h in Headers */, EBEEB1EA0D2B317800FF39B4 /* custom.h in Headers */, EBEEB2000D2B320C00FF39B4 /* hash.h in Headers */, - EBEEB2090D2B320C00FF39B4 /* script.h in Headers */, EB35ABE30FB199B800C36930 /* window.h in Headers */, EB0929FB12A10889004D9A79 /* messagebox.h in Headers */, ); @@ -1665,7 +1597,6 @@ 676AC2770668A939007173EB /* 3d.h in Headers */, 676AC2780668A939007173EB /* args.h in Headers */, 676AC2790668A939007173EB /* byteswap.h in Headers */, - 676AC27E0668A939007173EB /* error.h in Headers */, 676AC2800668A939007173EB /* fix.h in Headers */, 676AC2810668A939007173EB /* gr.h in Headers */, 676AC2820668A939007173EB /* grdef.h in Headers */, @@ -1678,7 +1609,6 @@ 676AC2920668A939007173EB /* strutil.h in Headers */, 676AC2930668A939007173EB /* texmap.h in Headers */, 676AC2940668A939007173EB /* timer.h in Headers */, - 676AC2950668A939007173EB /* u_dpmi.h in Headers */, 676AC2960668A939007173EB /* u_mem.h in Headers */, 676AC2970668A939007173EB /* vecmat.h in Headers */, 67F6FED4066B13B400443922 /* SDLMain.h in Headers */, @@ -1693,7 +1623,6 @@ EBEEB1060D2A307300FF39B4 /* texmapl.h in Headers */, EBEEB1EF0D2B317800FF39B4 /* custom.h in Headers */, EBEEB20C0D2B320C00FF39B4 /* hash.h in Headers */, - EBEEB2150D2B320C00FF39B4 /* script.h in Headers */, EB35ABE10FB199B800C36930 /* window.h in Headers */, EB0929F912A10889004D9A79 /* messagebox.h in Headers */, ); @@ -1764,7 +1693,14 @@ isa = PBXProject; buildConfigurationList = EBBAD49E0B2D0F7E00080BBF /* Build configuration list for PBXProject "d1x-rebirth" */; compatibilityVersion = "Xcode 2.4"; + developmentRegion = English; hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + ); mainGroup = 29B97314FDCFA39411CA2CEA /* d1x */; projectDirPath = ""; projectRoot = ""; @@ -1836,7 +1772,6 @@ 676AC1FB0668A938007173EB /* rect.c in Sources */, 676AC1FC0668A938007173EB /* rle.c in Sources */, 676AC1FD0668A938007173EB /* scalec.c in Sources */, - 676AC1FE0668A938007173EB /* tmerge.c in Sources */, 676AC1FF0668A938007173EB /* clipper.c in Sources */, 676AC2000668A938007173EB /* draw.c in Sources */, 676AC2010668A938007173EB /* globvars.c in Sources */, @@ -1932,8 +1867,6 @@ EB92BE670CDD693C0045A32C /* jukebox.c in Sources */, EB92BEA80CDD6A570045A32C /* dl_list.c in Sources */, EBEEB1E90D2B317800FF39B4 /* custom.c in Sources */, - EBEEB1FF0D2B320C00FF39B4 /* hash.c in Sources */, - EBEEB29F0D2B378B00FF39B4 /* compare.c in Sources */, EBAC98FD0D42497F0017D4BC /* ignorecase.c in Sources */, EBC58E720D489E19007C8ABF /* args.c in Sources */, EB331A0C0D53578800C799B0 /* snddecom.c in Sources */, @@ -2002,6 +1935,8 @@ EBECB67912C041EA00D660B3 /* userbox.c in Sources */, EBECB67A12C041EB00D660B3 /* dialog.c in Sources */, EB2C86E612C36FFB0073E30E /* file.c in Sources */, + EBC4BAFA170E64540033D261 /* vers_id.c in Sources */, + EBC4BB11170E660B0033D261 /* hash.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2027,7 +1962,6 @@ 676AC2AB0668A939007173EB /* rect.c in Sources */, 676AC2AC0668A939007173EB /* rle.c in Sources */, 676AC2AD0668A939007173EB /* scalec.c in Sources */, - 676AC2AE0668A939007173EB /* tmerge.c in Sources */, 676AC2AF0668A939007173EB /* clipper.c in Sources */, 676AC2B00668A939007173EB /* draw.c in Sources */, 676AC2B10668A939007173EB /* globvars.c in Sources */, @@ -2121,8 +2055,6 @@ EB92BE630CDD693C0045A32C /* jukebox.c in Sources */, EB92BEA60CDD6A570045A32C /* dl_list.c in Sources */, EBEEB1EE0D2B317800FF39B4 /* custom.c in Sources */, - EBEEB20B0D2B320C00FF39B4 /* hash.c in Sources */, - EBEEB2A30D2B378B00FF39B4 /* compare.c in Sources */, EBAC98FB0D42497F0017D4BC /* ignorecase.c in Sources */, EBC58E710D489E19007C8ABF /* args.c in Sources */, EB3319850D50A6B200C799B0 /* bmread.c in Sources */, @@ -2193,6 +2125,8 @@ EBAC9A6D1525C5E800F6C779 /* texpage.c in Sources */, EBAC9A6E1525C5E800F6C779 /* texture.c in Sources */, EBAC9A6F1525C64400F6C779 /* dumpmine.c in Sources */, + EBC4BAFB170E64550033D261 /* vers_id.c in Sources */, + EBC4BB12170E660C0033D261 /* hash.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/d1x-rebirth/editor/ehostage.c b/d1x-rebirth/editor/ehostage.c index 09a11e070..9e56ccad5 100644 --- a/d1x-rebirth/editor/ehostage.c +++ b/d1x-rebirth/editor/ehostage.c @@ -32,7 +32,6 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include "timer.h" #include "objpage.h" #include "fix.h" -#include "error.h" #include "kdefs.h" #include "object.h" #include "polyobj.h" diff --git a/d1x-rebirth/main/ai.c b/d1x-rebirth/main/ai.c index 49c08caf2..4e8d4413c 100644 --- a/d1x-rebirth/main/ai.c +++ b/d1x-rebirth/main/ai.c @@ -3268,8 +3268,9 @@ void ai_cloak_info_read_n_swap(ai_cloak_info *ci, int n, int swap, PHYSFS_file * } } -int ai_restore_state(PHYSFS_file *fp, int swap) +int ai_restore_state(PHYSFS_file *fp, int version, int swap) { + (void)version; fix tmptime32 = 0; Ai_initialized = PHYSFSX_readSXE32(fp, swap); diff --git a/d1x-rebirth/main/ai.h b/d1x-rebirth/main/ai.h index c1ab40a52..499524bf0 100644 --- a/d1x-rebirth/main/ai.h +++ b/d1x-rebirth/main/ai.h @@ -97,6 +97,6 @@ extern int Boss_been_hit; extern fix AI_proc_time; extern int ai_save_state(PHYSFS_file * fp); -extern int ai_restore_state(PHYSFS_file *fp, int swap); +extern int ai_restore_state(PHYSFS_file *fp, int version, int swap); #endif diff --git a/d1x-rebirth/main/custom.c b/d1x-rebirth/main/custom.c index 45f642175..44a783c94 100644 --- a/d1x-rebirth/main/custom.c +++ b/d1x-rebirth/main/custom.c @@ -12,7 +12,6 @@ #include "digi.h" #include "hash.h" #include "u_mem.h" -#include "error.h" #include "custom.h" //#define D2TMAP_CONV // used for testing diff --git a/d1x-rebirth/main/gamecntl.c b/d1x-rebirth/main/gamecntl.c index ac7d69d82..3e4df73f8 100644 --- a/d1x-rebirth/main/gamecntl.c +++ b/d1x-rebirth/main/gamecntl.c @@ -679,6 +679,13 @@ int HandleGameKey(int key) KEY_MAC(case KEY_COMMAND+KEY_ALTED+KEY_7:) PlayerCfg.HudMode=(PlayerCfg.HudMode+1)%GAUGE_HUD_NUMMODES; write_player_file(); + switch (PlayerCfg.HudMode) + { + case 0: HUD_init_message(HM_DEFAULT, "Standard HUD"); break; + case 1: HUD_init_message(HM_DEFAULT, "Alternative HUD #1"); break; + case 2: HUD_init_message(HM_DEFAULT, "Alternative HUD #2"); break; + case 3: HUD_init_message(HM_DEFAULT, "No HUD"); break; + } break; #ifdef NETWORK diff --git a/d1x-rebirth/main/gamerend.c b/d1x-rebirth/main/gamerend.c index 8cd5074ea..225188917 100644 --- a/d1x-rebirth/main/gamerend.c +++ b/d1x-rebirth/main/gamerend.c @@ -56,8 +56,6 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include "ogl_init.h" #endif -extern fix Cruise_speed; - int netplayerinfo_on=0; #ifdef NETWORK @@ -117,7 +115,8 @@ void show_framerate() #ifdef NETWORK void show_netplayerinfo() { - int x=0, y=0, i=0, color=0; + int x=0, y=0, i=0, color=0, eff=0; + char *eff_strings[]={"trashing","really hurting","seriously effecting","hurting","effecting","tarnishing"}; gr_set_current_canvas(NULL); gr_set_curfont(GAME_FONT); @@ -210,6 +209,27 @@ void show_netplayerinfo() gr_printf(x+FSPACX(8)*8,y,"%i",team_kills[1]); y+=LINE_SPACING*2; } + else + y+=LINE_SPACING*4; + + gr_set_fontcolor(255,-1); + + // additional information about game - ranking + eff=(int)((float)((float)PlayerCfg.NetlifeKills/((float)PlayerCfg.NetlifeKilled+(float)PlayerCfg.NetlifeKills))*100.0); + if (eff<0) + eff=0; + + if (!PlayerCfg.NoRankings) + { + gr_printf(0x8000,y,"Your lifetime efficiency of %d%% (%d/%d)",eff,PlayerCfg.NetlifeKills,PlayerCfg.NetlifeKilled); + y+=LINE_SPACING; + if (eff<60) + gr_printf(0x8000,y,"is %s your ranking.",eff_strings[eff/10]); + else + gr_printf(0x8000,y,"is serving you well."); + y+=LINE_SPACING; + gr_printf(0x8000,y,"your rank is: %s",RankStrings[GetMyNetRanking()]); + } } #endif @@ -307,35 +327,6 @@ void game_draw_hud_stuff() render_countdown_gauge(); - // this should be made part of hud code some day - if ( Player_num > -1 && Viewer->type==OBJ_PLAYER && Viewer->id==Player_num && PlayerCfg.CockpitMode[1] != CM_REAR_VIEW) { - int x = FSPACX(1); - int y = grd_curcanv->cv_bitmap.bm_h; - - gr_set_curfont( GAME_FONT ); - gr_set_fontcolor( BM_XRGB(0, 31, 0), -1 ); - if (Cruise_speed > 0) { - if (PlayerCfg.CockpitMode[1]==CM_FULL_SCREEN) { - if (Game_mode & GM_MULTI) - y -= LINE_SPACING * 10; - else - y -= LINE_SPACING * 6; - } else if (PlayerCfg.CockpitMode[1] == CM_STATUS_BAR) { - if (Game_mode & GM_MULTI) - y -= LINE_SPACING * 6; - else - y -= LINE_SPACING * 1; - } else { - if (Game_mode & GM_MULTI) - y -= LINE_SPACING * 7; - else - y -= LINE_SPACING * 2; - } - - gr_printf( x, y, "%s %2d%%", TXT_CRUISE, f2i(Cruise_speed) ); - } - } - if (GameCfg.FPSIndicator && PlayerCfg.CockpitMode[1] != CM_REAR_VIEW) show_framerate(); diff --git a/d1x-rebirth/main/gauges.c b/d1x-rebirth/main/gauges.c index 6e99655f8..2fa4e9ffc 100644 --- a/d1x-rebirth/main/gauges.c +++ b/d1x-rebirth/main/gauges.c @@ -257,7 +257,7 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #define SB_PRIMARY_W_BOX_LEFT_L 34 //50 #define SB_PRIMARY_W_BOX_TOP_L 154 -#define SB_PRIMARY_W_BOX_RIGHT_L (SB_PRIMARY_W_BOX_LEFT_L+53) +#define SB_PRIMARY_W_BOX_RIGHT_L (SB_PRIMARY_W_BOX_LEFT_L+55) #define SB_PRIMARY_W_BOX_BOT_L (195) #define SB_PRIMARY_W_BOX_LEFT_H 68 @@ -337,6 +337,7 @@ int weapon_box_states[2]; fix weapon_box_fade_values[2]; int Color_0_31_0 = -1; extern fix ThisLevelTime; +extern fix Cruise_speed; typedef struct gauge_box { int left,top; @@ -2387,6 +2388,38 @@ void show_HUD_names() void draw_hud() { + if (PlayerCfg.HudMode==3) // no hud, "immersion mode" + return; + + // Cruise speed + if ( Player_num > -1 && Viewer->type==OBJ_PLAYER && Viewer->id==Player_num && PlayerCfg.CockpitMode[1] != CM_REAR_VIEW) { + int x = FSPACX(1); + int y = grd_curcanv->cv_bitmap.bm_h; + + gr_set_curfont( GAME_FONT ); + gr_set_fontcolor( BM_XRGB(0, 31, 0), -1 ); + if (Cruise_speed > 0) { + if (PlayerCfg.CockpitMode[1]==CM_FULL_SCREEN) { + if (Game_mode & GM_MULTI) + y -= LINE_SPACING * 10; + else + y -= LINE_SPACING * 6; + } else if (PlayerCfg.CockpitMode[1] == CM_STATUS_BAR) { + if (Game_mode & GM_MULTI) + y -= LINE_SPACING * 6; + else + y -= LINE_SPACING * 1; + } else { + if (Game_mode & GM_MULTI) + y -= LINE_SPACING * 7; + else + y -= LINE_SPACING * 2; + } + + gr_printf( x, y, "%s %2d%%", TXT_CRUISE, f2i(Cruise_speed) ); + } + } + // Show score so long as not in rearview if ( !Rear_view && PlayerCfg.CockpitMode[1]!=CM_REAR_VIEW && PlayerCfg.CockpitMode[1]!=CM_STATUS_BAR) { hud_show_score(); diff --git a/d1x-rebirth/main/menu.c b/d1x-rebirth/main/menu.c index 1b8c3a1b2..c5643a6e7 100644 --- a/d1x-rebirth/main/menu.c +++ b/d1x-rebirth/main/menu.c @@ -1865,7 +1865,7 @@ void do_sound_menu() void do_misc_menu() { - newmenu_item m[8]; + newmenu_item m[10]; int i = 0; do { @@ -1874,9 +1874,11 @@ void do_misc_menu() ADD_CHECK(2, "Screenshots w/o HUD",PlayerCfg.PRShot); ADD_CHECK(3, "No redundant pickup messages",PlayerCfg.NoRedundancy); ADD_CHECK(4, "Show Player chat only (Multi)",PlayerCfg.MultiMessages); - ADD_CHECK(5, "Show D2-style Prox. Bomb Gauge",PlayerCfg.BombGauge); - ADD_CHECK(6, "Free Flight controls in Automap",PlayerCfg.AutomapFreeFlight); - ADD_CHECK(7, "No Weapon Autoselect when firing",PlayerCfg.NoFireAutoselect); + ADD_CHECK(5, "No Rankings (Multi)",PlayerCfg.NoRankings); + ADD_CHECK(6, "Show D2-style Prox. Bomb Gauge",PlayerCfg.BombGauge); + ADD_CHECK(7, "Free Flight controls in Automap",PlayerCfg.AutomapFreeFlight); + ADD_CHECK(8, "No Weapon Autoselect when firing",PlayerCfg.NoFireAutoselect); + ADD_CHECK(9, "Only Cycle Autoselect Weapons",PlayerCfg.CycleAutoselectOnly); i = newmenu_do1( NULL, "Misc Options", sizeof(m)/sizeof(*m), m, NULL, NULL, i ); @@ -1885,9 +1887,11 @@ void do_misc_menu() PlayerCfg.PRShot = m[2].value; PlayerCfg.NoRedundancy = m[3].value; PlayerCfg.MultiMessages = m[4].value; - PlayerCfg.BombGauge = m[5].value; - PlayerCfg.AutomapFreeFlight = m[6].value; - PlayerCfg.NoFireAutoselect = m[7].value; + PlayerCfg.NoRankings = m[5].value; + PlayerCfg.BombGauge = m[6].value; + PlayerCfg.AutomapFreeFlight = m[7].value; + PlayerCfg.NoFireAutoselect = m[8].value; + PlayerCfg.CycleAutoselectOnly = m[9].value; } while( i>-1 ); diff --git a/d1x-rebirth/main/multi.c b/d1x-rebirth/main/multi.c index 8b313ff29..aa8f89542 100644 --- a/d1x-rebirth/main/multi.c +++ b/d1x-rebirth/main/multi.c @@ -81,6 +81,7 @@ void multi_send_heartbeat(); void multi_do_kill_goal_counts(const ubyte *buf); void multi_powcap_cap_objects(); void multi_powcap_adjust_remote_cap(int pnum); +void multi_send_ranking(); void multi_new_bounty_target( int pnum ); void multi_do_bounty( const ubyte *buf ); void multi_save_game(ubyte slot, uint id, char *desc); @@ -205,6 +206,7 @@ static const int message_length[MULTI_MAX_TYPE+1] = { 3, // MULTI_GMODE_UPDATE 7, // MULTI_KILL_HOST 5, // MULTI_KILL_CLIENT + 3, // MULTI_RANK }; void multi_reset_player_object(object *objp); @@ -212,6 +214,9 @@ void multi_set_robot_ai(void); void multi_add_lifetime_killed(); void multi_add_lifetime_kills(); +char *RankStrings[]={"(unpatched) ","Cadet ","Ensign ","Lieutenant ","Lt.Commander ", + "Commander ","Captain ","Vice Admiral ","Admiral ","Demigod "}; + int multi_allow_powerup_mask[MAX_POWERUP_TYPES] = { NETFLAG_DOINVUL, 0, 0, NETFLAG_DOLASER, 0, 0, 0, 0, 0, 0, 0, 0, NETFLAG_DOQUAD, NETFLAG_DOVULCAN, NETFLAG_DOSPREAD, NETFLAG_DOPLASMA, NETFLAG_DOFUSION, @@ -223,6 +228,41 @@ char *multi_allow_powerup_text[MULTI_ALLOW_POWERUP_MAX] = "Fusion cannon", "Homing missiles", "Smart missiles", "Mega missiles", "Proximity bombs", "Cloaking", "Invulnerability" }; +int GetMyNetRanking() +{ + int rank, eff; + + if (PlayerCfg.NetlifeKills+PlayerCfg.NetlifeKilled==0) + return (1); + + rank=(int) (((float)PlayerCfg.NetlifeKills/3000.0)*8.0); + + eff=(int)((float)((float)PlayerCfg.NetlifeKills/((float)PlayerCfg.NetlifeKilled+(float)PlayerCfg.NetlifeKills))*100.0); + + if (rank>8) + rank=8; + + if (eff<0) + eff=0; + + if (eff<60) + rank-=((59-eff)/10); + + if (rank<0) + rank=0; + if (rank>8) + rank=8; + + return (rank+1); +} + +void ClipRank (ubyte *rank) +{ + // This function insures no crashes when dealing with D2 1.0 + if (*rank > 9) + *rank = 0; +} + // // Functions that replace what used to be macros // @@ -679,14 +719,21 @@ void multi_compute_kill(int killer, int killed) else { - if (Game_mode & GM_TEAM) + if (Game_mode & GM_TEAM) + { + if (get_team(killed_pnum) == get_team(killer_pnum)) { - if (get_team(killed_pnum) == get_team(killer_pnum)) - team_kills[get_team(killed_pnum)] -= 1; - else - team_kills[get_team(killer_pnum)] += 1; + team_kills[get_team(killed_pnum)] -= 1; + Players[killer_pnum].net_kills_total -= 1; + } + else + { + team_kills[get_team(killer_pnum)] += 1; + Players[killer_pnum].net_kills_total += 1; + Players[killer_pnum].KillGoalCount +=1; + } } - if( Game_mode & GM_BOUNTY ) + else if( Game_mode & GM_BOUNTY ) { /* Did the target die? Did the target get a kill? */ if( killed_pnum == Bounty_target || killer_pnum == Bounty_target ) @@ -3308,7 +3355,7 @@ void multi_send_powcap_update () multi_send_data(multibuf, MAX_POWERUP_TYPES+1, 2); } -void multi_do_powcap_update (char *buf) +void multi_do_powcap_update (const ubyte *buf) { int i; @@ -3407,20 +3454,85 @@ void multi_check_for_killgoal_winner () net_destroy_controlcen (objp); } +extern char *RankStrings[]; + void multi_add_lifetime_kills () { - // This function adds a kill to lifetime stats of this player - // Trivial, but syncing with D2X + // This function adds a kill to lifetime stats of this player, and possibly + // gives a promotion. If so, it will tell everyone else + + int oldrank; + + if (!(Game_mode & GM_NETWORK)) + return; + + oldrank=GetMyNetRanking(); PlayerCfg.NetlifeKills++; + + if (oldrank!=GetMyNetRanking()) + { + multi_send_ranking(); + if (!PlayerCfg.NoRankings) + { + HUD_init_message(HM_MULTI, "You have been promoted to %s!",RankStrings[GetMyNetRanking()]); + digi_play_sample (SOUND_CONTROL_CENTER_WARNING_SIREN,F1_0*2); + Netgame.players[Player_num].rank=GetMyNetRanking(); + } + } } void multi_add_lifetime_killed () { - // This function adds a "killed" to lifetime stats of this player - // Trivial, but syncing with D2X + // This function adds a "killed" to lifetime stats of this player, and possibly + // gives a demotion. If so, it will tell everyone else + + int oldrank; + + if (!(Game_mode & GM_NETWORK)) + return; + + oldrank=GetMyNetRanking(); PlayerCfg.NetlifeKilled++; + + if (oldrank!=GetMyNetRanking()) + { + multi_send_ranking(); + Netgame.players[Player_num].rank=GetMyNetRanking(); + + if (!PlayerCfg.NoRankings) + HUD_init_message(HM_MULTI, "You have been demoted to %s!",RankStrings[GetMyNetRanking()]); + + } +} + +void multi_send_ranking () +{ + multibuf[0]=(char)MULTI_RANK; + multibuf[1]=(char)Player_num; + multibuf[2]=(char)GetMyNetRanking(); + + multi_send_data (multibuf,3,2); +} + +void multi_do_ranking (char *buf) +{ + char rankstr[20]; + char pnum=buf[1]; + char rank=buf[2]; + + if (Netgame.players[(int)pnum].rankrank) + strcpy (rankstr,"demoted"); + else + return; + + Netgame.players[(int)pnum].rank=rank; + + if (!PlayerCfg.NoRankings) + HUD_init_message(HM_MULTI, "%s has been %s to %s!",Players[(int)pnum].callsign,rankstr,RankStrings[(int)rank]); } // Decide if fire from "killer" is friendly. If yes return 1 (no harm to me) otherwise 0 (damage me) diff --git a/d1x-rebirth/main/multi.h b/d1x-rebirth/main/multi.h index c2c68f7a0..abcd6fd10 100644 --- a/d1x-rebirth/main/multi.h +++ b/d1x-rebirth/main/multi.h @@ -64,7 +64,7 @@ extern int multi_protocol; // set and determinate used protocol #define MULTI_PROTO_UDP 1 // UDP protocol // What version of the multiplayer protocol is this? Increment each time something drastic changes in Multiplayer without the version number changes. Can be reset to 0 each time the version of the game changes -#define MULTI_PROTO_VERSION 3 +#define MULTI_PROTO_VERSION 5 // PROTOCOL VARIABLES AND DEFINES - END @@ -113,8 +113,9 @@ extern int multi_protocol; // set and determinate used protocol #define MULTI_GMODE_UPDATE 42 #define MULTI_KILL_HOST 43 #define MULTI_KILL_CLIENT 44 +#define MULTI_RANK 45 -#define MULTI_MAX_TYPE 44 +#define MULTI_MAX_TYPE 45 #define MAX_MULTI_MESSAGE_LEN 90 //didn't change it, just moved it up @@ -175,6 +176,8 @@ extern char *multi_allow_powerup_text[MULTI_ALLOW_POWERUP_MAX]; // Exported functions +extern int GetMyNetRanking(); +extern void ClipRank (ubyte *rank); int objnum_remote_to_local(int remote_obj, int owner); int objnum_local_to_remote(int local_obj, sbyte *owner); void map_objnum_local_to_remote(int local, int remote, int owner); @@ -301,6 +304,8 @@ extern int Bounty_target; extern bitmap_index multi_player_textures[MAX_PLAYERS][N_PLAYER_SHIP_TEXTURES]; +extern char *RankStrings[]; + #define NETGAME_FLAG_CLOSED 1 #define NETGAME_FLAG_SHOW_ID 2 #define NETGAME_FLAG_SHOW_MAP 4 diff --git a/d1x-rebirth/main/net_udp.c b/d1x-rebirth/main/net_udp.c index e7bcc6a56..278422046 100644 --- a/d1x-rebirth/main/net_udp.c +++ b/d1x-rebirth/main/net_udp.c @@ -1056,6 +1056,8 @@ void net_udp_init() UDP_Seq.type = UPID_REQUEST; memcpy(UDP_Seq.player.callsign, Players[Player_num].callsign, CALLSIGN_LEN+1); + UDP_Seq.player.rank=GetMyNetRanking(); + multi_new_game(); net_udp_flush(); @@ -1235,6 +1237,9 @@ net_udp_new_player(UDP_sequence_packet *their) memcpy(Netgame.players[pnum].callsign, their->player.callsign, CALLSIGN_LEN+1); memcpy(&Netgame.players[pnum].protocol.udp.addr, &their->player.protocol.udp.addr, sizeof(struct _sockaddr)); + ClipRank (&their->player.rank); + Netgame.players[pnum].rank=their->player.rank; + Players[pnum].connected = CONNECT_PLAYING; Players[pnum].net_kills_total = 0; Players[pnum].net_killed_total = 0; @@ -1251,7 +1256,12 @@ net_udp_new_player(UDP_sequence_packet *their) digi_play_sample(SOUND_HUD_MESSAGE, F1_0); - HUD_init_message(HM_MULTI, "'%s' %s",their->player.callsign, TXT_JOINING); + ClipRank (&their->player.rank); + + if (PlayerCfg.NoRankings) + HUD_init_message(HM_MULTI, "'%s' %s\n",their->player.callsign, TXT_JOINING); + else + HUD_init_message(HM_MULTI, "%s'%s' %s\n",RankStrings[their->player.rank],their->player.callsign, TXT_JOINING); multi_make_ghost_player(pnum); @@ -1383,7 +1393,10 @@ void net_udp_welcome_player(UDP_sequence_packet *their) digi_play_sample(SOUND_HUD_MESSAGE, F1_0); - HUD_init_message(HM_MULTI, "'%s' %s", Players[player_num].callsign, TXT_REJOIN); + if (PlayerCfg.NoRankings) + HUD_init_message(HM_MULTI, "'%s' %s", Players[player_num].callsign, TXT_REJOIN); + else + HUD_init_message(HM_MULTI, "%s'%s' %s", RankStrings[Netgame.players[player_num].rank],Players[player_num].callsign, TXT_REJOIN); multi_send_score(); @@ -1874,6 +1887,7 @@ void net_udp_add_player(UDP_sequence_packet *p) return; // too many of em } + ClipRank (&p->player.rank); memcpy( Netgame.players[N_players].callsign, p->player.callsign, CALLSIGN_LEN+1 ); memcpy( (struct _sockaddr *)&Netgame.players[N_players].protocol.udp.addr, (struct _sockaddr *)&p->player.protocol.udp.addr, sizeof(struct _sockaddr) ); Netgame.players[N_players].rank=p->player.rank; @@ -1911,6 +1925,7 @@ void net_udp_remove_player(UDP_sequence_packet *p) memcpy( Netgame.players[i].callsign, Netgame.players[i+1].callsign, CALLSIGN_LEN+1 ); memcpy( (struct _sockaddr *)&Netgame.players[i].protocol.udp.addr, (struct _sockaddr *)&Netgame.players[i+1].protocol.udp.addr, sizeof(struct _sockaddr) ); Netgame.players[i].rank=Netgame.players[i+1].rank; + ClipRank (&Netgame.players[i].rank); } N_players--; @@ -2765,8 +2780,10 @@ int net_udp_start_poll( newmenu *menu, d_event *event, void *userdata ) if (n < Netgame.numplayers ) { - sprintf( menus[N_players-1].text, "%d. %-16s", N_players, Netgame.players[N_players-1].callsign ); - + if (PlayerCfg.NoRankings) + sprintf( menus[N_players-1].text, "%d. %-20s", N_players,Netgame.players[N_players-1].callsign ); + else + sprintf( menus[N_players-1].text, "%d. %s%-20s", N_players, RankStrings[Netgame.players[N_players-1].rank],Netgame.players[N_players-1].callsign ); //Begin addition by GF digi_play_sample(SOUND_HUD_MESSAGE, F1_0); //A noise to alert you when someone joins a starting game... //End addition by GF @@ -2786,7 +2803,10 @@ int net_udp_start_poll( newmenu *menu, d_event *event, void *userdata ) for (i=0; i N_players) { memcpy(Netgame.players[N_players].callsign, Netgame.players[i].callsign, CALLSIGN_LEN+1); + Netgame.players[N_players].rank=Netgame.players[i].rank; + ClipRank (&Netgame.players[N_players].rank); } Players[N_players].connected = CONNECT_PLAYING; N_players++; @@ -3620,6 +3646,7 @@ abort: for (i = N_players; i < MAX_PLAYERS; i++) { memset(Netgame.players[i].callsign, 0, CALLSIGN_LEN+1); + Netgame.players[i].rank=0; } if (Netgame.gamemode == NETGAME_TEAM_ANARCHY) @@ -4669,8 +4696,12 @@ void net_udp_read_pdata_packet(UDP_frame_info *pd) newdemo_record_multi_reconnect(TheirPlayernum); digi_play_sample( SOUND_HUD_MESSAGE, F1_0); - - HUD_init_message(HM_MULTI, "'%s' %s", Players[TheirPlayernum].callsign, TXT_REJOIN ); + ClipRank (&Netgame.players[TheirPlayernum].rank); + + if (PlayerCfg.NoRankings) + HUD_init_message(HM_MULTI, "'%s' %s", Players[TheirPlayernum].callsign, TXT_REJOIN ); + else + HUD_init_message(HM_MULTI, "%s'%s' %s", RankStrings[Netgame.players[TheirPlayernum].rank],Players[TheirPlayernum].callsign, TXT_REJOIN ); multi_send_score(); @@ -4786,6 +4817,8 @@ void net_udp_process_pong(ubyte *data, int data_len, struct _sockaddr sender_add void net_udp_do_refuse_stuff (UDP_sequence_packet *their) { int i,new_player_num; + + ClipRank (&their->player.rank); for (i=0;iplayer.callsign); + if (!PlayerCfg.NoRankings) + { + HUD_init_message(HM_MULTI, "%s %s wants to join",RankStrings[their->player.rank],their->player.callsign); + } + else + { + HUD_init_message(HM_MULTI, "%s wants to join",their->player.callsign); + } HUD_init_message(HM_MULTI, "Alt-1 assigns to team %s. Alt-2 to team %s",Netgame.team_name[0],Netgame.team_name[1]); } else diff --git a/d1x-rebirth/main/playsave.c b/d1x-rebirth/main/playsave.c index cc426725d..d72361eb9 100644 --- a/d1x-rebirth/main/playsave.c +++ b/d1x-rebirth/main/playsave.c @@ -94,9 +94,11 @@ int new_player_config() PlayerCfg.PRShot = 0; PlayerCfg.NoRedundancy = 0; PlayerCfg.MultiMessages = 0; + PlayerCfg.NoRankings = 0; PlayerCfg.BombGauge = 1; PlayerCfg.AutomapFreeFlight = 0; PlayerCfg.NoFireAutoselect = 0; + PlayerCfg.CycleAutoselectOnly = 0; PlayerCfg.AlphaEffects = 0; PlayerCfg.DynLightColor = 0; @@ -319,12 +321,16 @@ int read_player_d1x(char *filename) PlayerCfg.NoRedundancy = atoi(line); if(!strcmp(word,"MULTIMESSAGES")) PlayerCfg.MultiMessages = atoi(line); + if(!strcmp(word,"NORANKINGS")) + PlayerCfg.NoRankings = atoi(line); if(!strcmp(word,"BOMBGAUGE")) PlayerCfg.BombGauge = atoi(line); if(!strcmp(word,"AUTOMAPFREEFLIGHT")) PlayerCfg.AutomapFreeFlight = atoi(line); if(!strcmp(word,"NOFIREAUTOSELECT")) PlayerCfg.NoFireAutoselect = atoi(line); + if(!strcmp(word,"CYCLEAUTOSELECTONLY")) + PlayerCfg.CycleAutoselectOnly = atoi(line); d_free(word); PHYSFSX_fgets(line,50,f); word=splitword(line,'='); @@ -653,9 +659,11 @@ int write_player_d1x(char *filename) PHYSFSX_printf(fout,"prshot=%i\n",PlayerCfg.PRShot); PHYSFSX_printf(fout,"noredundancy=%i\n",PlayerCfg.NoRedundancy); PHYSFSX_printf(fout,"multimessages=%i\n",PlayerCfg.MultiMessages); + PHYSFSX_printf(fout,"norankings=%i\n",PlayerCfg.NoRankings); PHYSFSX_printf(fout,"bombgauge=%i\n",PlayerCfg.BombGauge); PHYSFSX_printf(fout,"automapfreeflight=%i\n",PlayerCfg.AutomapFreeFlight); PHYSFSX_printf(fout,"nofireautoselect=%i\n",PlayerCfg.NoFireAutoselect); + PHYSFSX_printf(fout,"cycleautoselectonly=%i\n",PlayerCfg.CycleAutoselectOnly); PHYSFSX_printf(fout,"[end]\n"); PHYSFSX_printf(fout,"[graphics]\n"); PHYSFSX_printf(fout,"alphaeffects=%i\n",PlayerCfg.AlphaEffects); diff --git a/d1x-rebirth/main/playsave.h b/d1x-rebirth/main/playsave.h index 812242d98..e3022ddd3 100644 --- a/d1x-rebirth/main/playsave.h +++ b/d1x-rebirth/main/playsave.h @@ -78,9 +78,11 @@ typedef struct player_config int PRShot; ubyte NoRedundancy; ubyte MultiMessages; + ubyte NoRankings; ubyte BombGauge; ubyte AutomapFreeFlight; ubyte NoFireAutoselect; + ubyte CycleAutoselectOnly; int AlphaEffects; int DynLightColor; } __pack__ player_config; diff --git a/d1x-rebirth/main/render.c b/d1x-rebirth/main/render.c index e7c869d4b..4353ded40 100644 --- a/d1x-rebirth/main/render.c +++ b/d1x-rebirth/main/render.c @@ -269,6 +269,12 @@ void render_face(int segnum, int sidenum, int nv, int *vp, int tmap1, int tmap2, dyn_light[i].g = MAX_LIGHT; if (dyn_light[i].b > MAX_LIGHT) dyn_light[i].b = MAX_LIGHT; + if (PlayerCfg.AlphaEffects) // due to additive blending, transparent sprites will become invivible in font of white surfaces (lamps). Fix that with a little desaturation + { + dyn_light[i].r *= .93; + dyn_light[i].g *= .93; + dyn_light[i].b *= .93; + } } @@ -1679,7 +1685,6 @@ done_list: void render_mine(int start_seg_num,fix eye_offset, int window_num) { int nn; - static fix64 dynlight_time = 0; // Initialize number of objects (actually, robots!) rendered this frame. Window_rendered_data[window_num].num_objects = 0; @@ -1749,11 +1754,8 @@ void render_mine(int start_seg_num,fix eye_offset, int window_num) if (!(_search_mode)) build_object_lists(N_render_segs); - if (eye_offset<=0 && dynlight_time < timer_query()) // Do for left eye or zero. - { - dynlight_time = timer_query() + (F1_0/60); // It's enough to update dynamic light 60 times per second max. More is just waste of CPU time + if (eye_offset<=0) // Do for left eye or zero. set_dynamic_light(); - } if (!_search_mode && Clear_window == 2) { if (first_terminal_seg < N_render_segs) { diff --git a/d1x-rebirth/main/state.c b/d1x-rebirth/main/state.c index f47b535fe..3acbf04bd 100644 --- a/d1x-rebirth/main/state.c +++ b/d1x-rebirth/main/state.c @@ -1355,7 +1355,7 @@ RetryObjectLoading: Total_countdown_time = Countdown_timer/F0_5; // we do not need to know this, but it should not be 0 either... // Restore the AI state - ai_restore_state( fp, swap ); + ai_restore_state( fp, 0, swap ); // Restore the automap visited info if ( Highest_segment_index+1 > MAX_SEGMENTS_ORIGINAL ) diff --git a/d1x-rebirth/main/weapon.c b/d1x-rebirth/main/weapon.c index d69dd2403..515672784 100644 --- a/d1x-rebirth/main/weapon.c +++ b/d1x-rebirth/main/weapon.c @@ -154,8 +154,17 @@ void CyclePrimary () cur_order_slot++; // next slot if (cur_order_slot >= MAX_PRIMARY_WEAPONS+1) // loop if necessary cur_order_slot = 0; - if (cur_order_slot == POrderList(255)) // ignore "do not autoselect" - continue; + if (cur_order_slot == POrderList(255)) // what to to with non-autoselect weapons? + { + if (PlayerCfg.CycleAutoselectOnly) + { + cur_order_slot = 0; // loop over or ... + } + else + { + continue; // continue? + } + } desired_weapon = PlayerCfg.PrimaryOrder[cur_order_slot]; // now that is the weapon next to our current one // select the weapon if we have it if (player_has_weapon(desired_weapon, 0) == HAS_ALL) @@ -176,8 +185,17 @@ void CycleSecondary () cur_order_slot++; // next slot if (cur_order_slot >= MAX_SECONDARY_WEAPONS+1) // loop if necessary cur_order_slot = 0; - if (cur_order_slot == SOrderList(255)) // ignore "do not autoselect" - continue; + if (cur_order_slot == SOrderList(255)) // what to to with non-autoselect weapons? + { + if (PlayerCfg.CycleAutoselectOnly) + { + cur_order_slot = 0; // loop over or ... + } + else + { + continue; // continue? + } + } desired_weapon = PlayerCfg.SecondaryOrder[cur_order_slot]; // now that is the weapon next to our current one // select the weapon if we have it if (player_has_weapon(desired_weapon, 1) == HAS_ALL) diff --git a/similar/main/lighting.c b/similar/main/lighting.c index 25bb44143..0468cc877 100644 --- a/similar/main/lighting.c +++ b/similar/main/lighting.c @@ -48,7 +48,6 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. int Do_dynamic_light=1; int use_fcd_lighting = 0; -static int light_frame_count = 0; g3s_lrgb Dynamic_light[MAX_VERTICES]; #define HEADLIGHT_CONE_DOT (F1_0*9/10) @@ -80,18 +79,16 @@ void apply_light(g3s_lrgb obj_light_emission, int obj_seg, vms_vector *obj_pos, fix dist; vertnum = vp[vv]; - if ((vertnum ^ light_frame_count) & 1) { - vertpos = &Vertices[vertnum]; - dist = vm_vec_dist_quick(obj_pos, vertpos); - dist = fixmul(dist/4, dist/4); - if (dist < abs(obji_64)) { - if (dist < MIN_LIGHT_DIST) - dist = MIN_LIGHT_DIST; - - Dynamic_light[vertnum].r += fixdiv(obj_light_emission.r, dist); - Dynamic_light[vertnum].g += fixdiv(obj_light_emission.g, dist); - Dynamic_light[vertnum].b += fixdiv(obj_light_emission.b, dist); - } + vertpos = &Vertices[vertnum]; + dist = vm_vec_dist_quick(obj_pos, vertpos); + dist = fixmul(dist/4, dist/4); + if (dist < abs(obji_64)) { + if (dist < MIN_LIGHT_DIST) + dist = MIN_LIGHT_DIST; + + Dynamic_light[vertnum].r += fixdiv(obj_light_emission.r, dist); + Dynamic_light[vertnum].g += fixdiv(obj_light_emission.g, dist); + Dynamic_light[vertnum].b += fixdiv(obj_light_emission.b, dist); } } } else { @@ -125,7 +122,6 @@ void apply_light(g3s_lrgb obj_light_emission, int obj_seg, vms_vector *obj_pos, } } #endif - // -- for (vv=light_frame_count&1; vv F1_0*32) - { - dist = find_connected_distance(obj_pos, obj_seg, vertpos, vsegnum, n_render_vertices, WID_RENDPAST_FLAG+WID_FLY_FLAG); - if (dist >= 0) - apply_light = 1; - } - else - { - dist = vm_vec_dist_quick(obj_pos, vertpos); + if (use_fcd_lighting && abs(obji_64) > F1_0*32) + { + dist = find_connected_distance(obj_pos, obj_seg, vertpos, vsegnum, n_render_vertices, WID_RENDPAST_FLAG+WID_FLY_FLAG); + if (dist >= 0) apply_light = 1; - } + } + else + { + dist = vm_vec_dist_quick(obj_pos, vertpos); + apply_light = 1; + } - if (apply_light && ((dist >> headlight_shift) < abs(obji_64))) { + if (apply_light && ((dist >> headlight_shift) < abs(obji_64))) { - if (dist < MIN_LIGHT_DIST) - dist = MIN_LIGHT_DIST; + if (dist < MIN_LIGHT_DIST) + dist = MIN_LIGHT_DIST; - if (headlight_shift && objnum != -1) + if (headlight_shift && objnum != -1) + { + fix dot; + vms_vector vec_to_point; + + vm_vec_sub(&vec_to_point, vertpos, obj_pos); + vm_vec_normalize_quick(&vec_to_point); // MK, Optimization note: You compute distance about 15 lines up, this is partially redundant + dot = vm_vec_dot(&vec_to_point, &Objects[objnum].orient.fvec); + if (dot < F1_0/2) { - fix dot; - vms_vector vec_to_point; - - vm_vec_sub(&vec_to_point, vertpos, obj_pos); - vm_vec_normalize_quick(&vec_to_point); // MK, Optimization note: You compute distance about 15 lines up, this is partially redundant - dot = vm_vec_dot(&vec_to_point, &Objects[objnum].orient.fvec); - if (dot < F1_0/2) + // Do the normal thing, but darken around headlight. + Dynamic_light[vertnum].r += fixdiv(obj_light_emission.r, fixmul(HEADLIGHT_SCALE, dist)); + Dynamic_light[vertnum].g += fixdiv(obj_light_emission.g, fixmul(HEADLIGHT_SCALE, dist)); + Dynamic_light[vertnum].b += fixdiv(obj_light_emission.b, fixmul(HEADLIGHT_SCALE, dist)); + } + else + { + if (Game_mode & GM_MULTI) { - // Do the normal thing, but darken around headlight. - Dynamic_light[vertnum].r += fixdiv(obj_light_emission.r, fixmul(HEADLIGHT_SCALE, dist)); - Dynamic_light[vertnum].g += fixdiv(obj_light_emission.g, fixmul(HEADLIGHT_SCALE, dist)); - Dynamic_light[vertnum].b += fixdiv(obj_light_emission.b, fixmul(HEADLIGHT_SCALE, dist)); - } - else - { - if (Game_mode & GM_MULTI) - { - if (dist < max_headlight_dist) - { - Dynamic_light[vertnum].r += fixmul(fixmul(dot, dot), obj_light_emission.r)/8; - Dynamic_light[vertnum].g += fixmul(fixmul(dot, dot), obj_light_emission.g)/8; - Dynamic_light[vertnum].b += fixmul(fixmul(dot, dot), obj_light_emission.b)/8; - } - } - else + if (dist < max_headlight_dist) { Dynamic_light[vertnum].r += fixmul(fixmul(dot, dot), obj_light_emission.r)/8; Dynamic_light[vertnum].g += fixmul(fixmul(dot, dot), obj_light_emission.g)/8; Dynamic_light[vertnum].b += fixmul(fixmul(dot, dot), obj_light_emission.b)/8; } } + else + { + Dynamic_light[vertnum].r += fixmul(fixmul(dot, dot), obj_light_emission.r)/8; + Dynamic_light[vertnum].g += fixmul(fixmul(dot, dot), obj_light_emission.g)/8; + Dynamic_light[vertnum].b += fixmul(fixmul(dot, dot), obj_light_emission.b)/8; + } } - else - { - Dynamic_light[vertnum].r += fixdiv(obj_light_emission.r, dist); - Dynamic_light[vertnum].g += fixdiv(obj_light_emission.g, dist); - Dynamic_light[vertnum].b += fixdiv(obj_light_emission.b, dist); - } + } + else + { + Dynamic_light[vertnum].r += fixdiv(obj_light_emission.r, dist); + Dynamic_light[vertnum].g += fixdiv(obj_light_emission.g, dist); + Dynamic_light[vertnum].b += fixdiv(obj_light_emission.b, dist); } } } @@ -480,15 +474,17 @@ void set_dynamic_light(void) int vert_segnum_list[MAX_VERTICES]; sbyte render_vertex_flags[MAX_VERTICES]; int render_seg,segnum, v; + static fix light_time; Num_headlights = 0; if (!Do_dynamic_light) return; - light_frame_count++; - if (light_frame_count > F1_0) - light_frame_count = 0; + light_time += FrameTime; + if (light_time < (F1_0/60)) // it's enough to stress the CPU 60 times per second + return; + light_time = light_time - (F1_0/60); memset(render_vertex_flags, 0, Highest_vertex_index+1); @@ -519,8 +515,7 @@ void set_dynamic_light(void) vertnum = render_vertices[vv]; Assert(vertnum >= 0 && vertnum <= Highest_vertex_index); - if ((vertnum ^ light_frame_count) & 1) - Dynamic_light[vertnum].r = Dynamic_light[vertnum].g = Dynamic_light[vertnum].b = 0; + Dynamic_light[vertnum].r = Dynamic_light[vertnum].g = Dynamic_light[vertnum].b = 0; } cast_muzzle_flash_light(n_render_vertices, render_vertices, vert_segnum_list); diff --git a/similar/main/multibot.c b/similar/main/multibot.c index fe3aa792e..70ff9be4b 100644 --- a/similar/main/multibot.c +++ b/similar/main/multibot.c @@ -861,15 +861,14 @@ multi_explode_robot_sub(int botnum, int killer,char isthief) multi_drop_robot_powerups(robot-Objects); multi_delete_controlled_robot(robot-Objects); } -#if defined(DXX_BUILD_DESCENT_I) - (void)isthief; -#elif defined(DXX_BUILD_DESCENT_II) else if (robot->ctype.ai_info.REMOTE_OWNER == -1 && multi_i_am_master()) { multi_drop_robot_powerups(robot-Objects); //multi_delete_controlled_robot(robot-Objects); } - +#if defined(DXX_BUILD_DESCENT_I) + (void)isthief; +#elif defined(DXX_BUILD_DESCENT_II) if (isthief || Robot_info[robot->id].thief) drop_stolen_items(robot); #endif diff --git a/similar/main/robot.c b/similar/main/robot.c index 62d712b81..baa28c6c1 100644 --- a/similar/main/robot.c +++ b/similar/main/robot.c @@ -336,6 +336,10 @@ int robot_info_read_n(robot_info *ri, int n, PHYSFS_file *fp) for (j = 0; j < MAX_GUNS + 1; j++) jointlist_read_n(ri[i].anim_states[j], N_ANIM_STATES, fp); + + for (j = 0; j < MAX_GUNS + 1; j++) + jointlist_read_n(ri[i].anim_states[j], N_ANIM_STATES, fp); + ri[i].always_0xabcd = PHYSFSX_readInt(fp); } return i; diff --git a/similar/main/wall.c b/similar/main/wall.c index 319c787fd..2c5802fac 100644 --- a/similar/main/wall.c +++ b/similar/main/wall.c @@ -268,7 +268,6 @@ void blast_blastable_wall(segment *seg, int side) } - //----------------------------------------------------------------- // Destroys a blastable wall. void wall_destroy(segment *seg, int side)