Merge branch d1x-rebirth into unification/master

Conflicts:
	SConstruct
	common/main/cntrlcen.h
	common/main/fuelcen.h
	common/main/fvi.h
	common/main/gameseq.h
	common/main/gauges.h
	common/main/multibot.h
	common/main/net_udp.h
	common/main/object.h
	common/main/player.h
	common/main/vers_id.h
	d1x-rebirth/main/hostage.c
	d1x-rebirth/main/multi.c
	main/controls.c
	main/hostage.h
	main/laser.h
	main/screens.h
	similar/arch/ogl/gr.c
	similar/editor/centers.c
	similar/main/inferno.c
	similar/main/lighting.c
	similar/main/multibot.c
	similar/main/paging.c
	similar/main/physics.c
	similar/main/player.c
	similar/main/robot.c
	similar/main/wall.c
This commit is contained in:
Kp 2013-04-20 23:56:13 +00:00
commit 616a3a6b70
32 changed files with 765 additions and 339 deletions

48
.gitignore vendored Normal file
View file

@ -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

View file

@ -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,

View file

@ -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];

View file

@ -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;

View file

@ -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);

View file

@ -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.

View file

@ -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

72
d1x-rebirth/README.RPi Normal file
View file

@ -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 <derhass@arcor.de>
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

View file

@ -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()))

239
d1x-rebirth/arch/cocoa/SDLMain.m Executable file → Normal file
View file

@ -5,35 +5,69 @@
Feel free to customize this file to suit your needs
*/
#import <SDL/SDL.h>
#import "SDLMain.h"
#import <sys/param.h> /* for MAXPATHLEN */
#import <unistd.h>
#include "SDL.h"
#include "SDLMain.h"
#include <sys/param.h> /* for MAXPATHLEN */
#include <unistd.h>
/* 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;
}

View file

@ -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'

View file

@ -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 = "<group>"; };
6710AAFE066B2D6100DB0F68 /* SDL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL.framework; path = /Library/Frameworks/SDL.framework; sourceTree = "<absolute>"; };
6710AB68066B2E0400DB0F68 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
675ED123066B196700E42AA7 /* d1x-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = "d1x-Info.plist"; sourceTree = "<group>"; };
675ED123066B196700E42AA7 /* d1x-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "d1x-Info.plist"; sourceTree = "<group>"; };
676032DC066B399A008A67A3 /* multi.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = multi.c; sourceTree = "<group>"; };
676032DD066B399A008A67A3 /* multibot.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = multibot.c; sourceTree = "<group>"; };
676032F9066B39CE008A67A3 /* kmatrix.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = kmatrix.c; sourceTree = "<group>"; };
@ -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 = "<group>"; };
6791CE500668852C00056A5A /* rle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = rle.h; sourceTree = "<group>"; };
6791CF090668878F00056A5A /* u_dpmi.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = u_dpmi.h; sourceTree = "<group>"; };
6791CF420668881F00056A5A /* fix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = fix.h; sourceTree = "<group>"; };
6791CF4E0668883900056A5A /* palette.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = palette.h; sourceTree = "<group>"; };
6791CF620668885500056A5A /* pcx.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = pcx.h; sourceTree = "<group>"; };
@ -606,7 +597,6 @@
67B4414C066878B300DF26D8 /* rect.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = rect.c; sourceTree = "<group>"; };
67B4414D066878B300DF26D8 /* rle.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = rle.c; sourceTree = "<group>"; };
67B44151066878B300DF26D8 /* scalec.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = scalec.c; sourceTree = "<group>"; };
67B44152066878B300DF26D8 /* tmerge.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = tmerge.c; sourceTree = "<group>"; };
67B441760668792300DF26D8 /* clipper.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = clipper.c; sourceTree = "<group>"; };
67B441780668792300DF26D8 /* draw.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = draw.c; sourceTree = "<group>"; };
67B441790668792300DF26D8 /* globvars.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = globvars.c; sourceTree = "<group>"; };
@ -691,12 +681,11 @@
67B4488906687E5E00DF26D8 /* scanline.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = scanline.c; sourceTree = "<group>"; };
67B4489206687E5E00DF26D8 /* tmapflat.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = tmapflat.c; sourceTree = "<group>"; };
67B4490F066880A300DF26D8 /* u_mem.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = u_mem.h; sourceTree = "<group>"; };
67B44913066880C400DF26D8 /* error.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = error.h; sourceTree = "<group>"; };
67B44914066880C400DF26D8 /* gr.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = gr.h; sourceTree = "<group>"; };
67B44915066880C400DF26D8 /* grdef.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = grdef.h; sourceTree = "<group>"; };
67F6FED0066B13B400443922 /* SDLMain.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = SDLMain.h; path = arch/cocoa/SDLMain.h; sourceTree = "<group>"; };
67F6FED1066B13B400443922 /* SDLMain.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = SDLMain.m; path = arch/cocoa/SDLMain.m; sourceTree = "<group>"; };
67F6FEEA066B13D900443922 /* d1xgl-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = "d1xgl-Info.plist"; sourceTree = "<group>"; };
67F6FEEA066B13D900443922 /* d1xgl-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "d1xgl-Info.plist"; sourceTree = "<group>"; };
EB01AFA90A65323200EA4C7C /* newdemo.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = newdemo.h; sourceTree = "<group>"; };
EB0420B90A341041002CC961 /* multi.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = multi.h; sourceTree = "<group>"; };
EB0420BB0A341042002CC961 /* morph.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = morph.h; sourceTree = "<group>"; };
@ -734,7 +723,6 @@
EB0420DE0A341042002CC961 /* newmenu.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = newmenu.h; sourceTree = "<group>"; };
EB0420E10A341042002CC961 /* digi.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = digi.h; sourceTree = "<group>"; };
EB0420E30A341042002CC961 /* gameseq.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = gameseq.h; sourceTree = "<group>"; };
EB0420E40A341042002CC961 /* desc_id.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = desc_id.h; sourceTree = "<group>"; };
EB0420E50A341042002CC961 /* credits.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = credits.h; sourceTree = "<group>"; };
EB0420E70A341042002CC961 /* multibot.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = multibot.h; sourceTree = "<group>"; };
EB0420E80A341042002CC961 /* gameseg.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = gameseg.h; sourceTree = "<group>"; };
@ -764,7 +752,6 @@
EB0421060A341042002CC961 /* config.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; };
EB0929F712A10889004D9A79 /* messagebox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = messagebox.h; sourceTree = "<group>"; };
EB0929F812A10889004D9A79 /* messagebox.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = messagebox.c; sourceTree = "<group>"; };
EB092A3912A2151A004D9A79 /* messagebox.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = messagebox.c; sourceTree = "<group>"; };
EB092A3A12A21527004D9A79 /* messagebox.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = messagebox.c; sourceTree = "<group>"; };
EB092A4912A21A14004D9A79 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
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 = "<group>"; };
EB35ABE00FB199B800C36930 /* window.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = window.c; sourceTree = "<group>"; };
EB380D7C0E168B1900EBD9AD /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
EB3CA4F90E97740E00FB1E93 /* tracker.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = tracker.h; sourceTree = "<group>"; };
EB6142451501EDC9004E2AE8 /* curve.pad */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = curve.pad; sourceTree = "<group>"; };
EB6142461501EDC9004E2AE8 /* dummy.pad */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dummy.pad; sourceTree = "<group>"; };
EB6142471501EDC9004E2AE8 /* group.pad */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = group.pad; sourceTree = "<group>"; };
@ -820,6 +806,13 @@
EBAFC26A088E508D006329AD /* descent.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; path = descent.r; sourceTree = "<group>"; };
EBAFC26D088E508D006329AD /* SDL_main.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = SDL_main.c; sourceTree = "<group>"; };
EBAFC28F088E67CD006329AD /* digiobj.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = digiobj.c; sourceTree = "<group>"; };
EBC4BAF4170E62160033D261 /* dxxerror.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dxxerror.h; sourceTree = "<group>"; };
EBC4BAF5170E62160033D261 /* makesig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = makesig.h; sourceTree = "<group>"; };
EBC4BAF6170E62C60033D261 /* tool_bundle.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; name = tool_bundle.py; path = arch/cocoa/tool_bundle.py; sourceTree = "<group>"; };
EBC4BAF7170E63380033D261 /* d1x-rebirth.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "d1x-rebirth.rc"; sourceTree = "<group>"; };
EBC4BAF8170E63890033D261 /* esegment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = esegment.h; sourceTree = "<group>"; };
EBC4BAF9170E63E90033D261 /* vers_id.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vers_id.c; sourceTree = "<group>"; };
EBC4BAFC170E64760033D261 /* hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hash.c; sourceTree = "<group>"; };
EBC58E700D489E19007C8ABF /* args.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = args.c; sourceTree = "<group>"; };
EBC650800890C882004FCAA3 /* autosave.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = autosave.c; sourceTree = "<group>"; };
EBC650970890C882004FCAA3 /* centers.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = centers.c; sourceTree = "<group>"; };
@ -837,7 +830,6 @@
EBC650A90890C882004FCAA3 /* kcurve.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = kcurve.c; sourceTree = "<group>"; };
EBC650AB0890C882004FCAA3 /* kfuncs.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = kfuncs.c; sourceTree = "<group>"; };
EBC650AD0890C882004FCAA3 /* kgame.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = kgame.c; sourceTree = "<group>"; };
EBC650AE0890C882004FCAA3 /* kgroup.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = kgroup.c; sourceTree = "<group>"; };
EBC650AF0890C882004FCAA3 /* khelp.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = khelp.c; sourceTree = "<group>"; };
EBC650B00890C882004FCAA3 /* kmine.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = kmine.c; sourceTree = "<group>"; };
EBC650B10890C882004FCAA3 /* ksegmove.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = ksegmove.c; sourceTree = "<group>"; };
@ -845,7 +837,6 @@
EBC650B30890C882004FCAA3 /* ksegsize.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = ksegsize.c; sourceTree = "<group>"; };
EBC650B40890C882004FCAA3 /* ktmap.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = ktmap.c; sourceTree = "<group>"; };
EBC650B50890C882004FCAA3 /* kview.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = kview.c; sourceTree = "<group>"; };
EBC650B60890C882004FCAA3 /* macro.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = macro.c; sourceTree = "<group>"; };
EBC650B90890C882004FCAA3 /* med.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = med.c; sourceTree = "<group>"; };
EBC650BA0890C882004FCAA3 /* meddraw.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = meddraw.c; sourceTree = "<group>"; };
EBC650BD0890C882004FCAA3 /* medmisc.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = medmisc.c; sourceTree = "<group>"; };
@ -914,23 +905,12 @@
EBEEB1BD0D2A423E00FF39B4 /* pstypes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = pstypes.h; sourceTree = "<group>"; };
EBEEB1E40D2B317700FF39B4 /* custom.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = custom.c; sourceTree = "<group>"; };
EBEEB1E50D2B317700FF39B4 /* custom.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = custom.h; sourceTree = "<group>"; };
EBEEB1F30D2B320B00FF39B4 /* hash.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = hash.c; sourceTree = "<group>"; };
EBEEB1F40D2B320B00FF39B4 /* hash.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = hash.h; sourceTree = "<group>"; };
EBEEB1FD0D2B320B00FF39B4 /* script.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = script.h; sourceTree = "<group>"; };
EBEEB2190D2B34DE00FF39B4 /* alsadigi.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = alsadigi.c; sourceTree = "<group>"; };
EBEEB21A0D2B34DE00FF39B4 /* hmiplay.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = hmiplay.c; sourceTree = "<group>"; };
EBEEB2290D2B351400FF39B4 /* music.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = music.h; sourceTree = "<group>"; };
EBEEB2540D2B35B000FF39B4 /* resource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = resource.h; sourceTree = "<group>"; };
EBEEB25B0D2B364300FF39B4 /* altsound.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = altsound.c; sourceTree = "<group>"; };
EBEEB25C0D2B364300FF39B4 /* altsound.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = altsound.h; sourceTree = "<group>"; };
EBEEB25E0D2B364300FF39B4 /* compbit.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = compbit.h; sourceTree = "<group>"; };
EBEEB2600D2B364300FF39B4 /* digicomp.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = digicomp.c; sourceTree = "<group>"; };
EBEEB2610D2B364300FF39B4 /* digicomp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = digicomp.h; sourceTree = "<group>"; };
EBEEB2660D2B364300FF39B4 /* mute.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = mute.c; sourceTree = "<group>"; };
EBEEB2670D2B364300FF39B4 /* mute.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = mute.h; sourceTree = "<group>"; };
EBEEB2680D2B364300FF39B4 /* snddecom.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = snddecom.c; sourceTree = "<group>"; };
EBEEB2690D2B364300FF39B4 /* snddecom.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = snddecom.h; sourceTree = "<group>"; };
EBEEB29B0D2B378B00FF39B4 /* compare.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = compare.c; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -978,6 +958,7 @@
children = (
67F6FED0066B13B400443922 /* SDLMain.h */,
67F6FED1066B13B400443922 /* SDLMain.m */,
EBC4BAF6170E62C60033D261 /* tool_bundle.py */,
);
name = Classes;
sourceTree = "<group>";
@ -1067,14 +1048,6 @@
name = Frameworks;
sourceTree = "<group>";
};
67603357066B3AE0008A67A3 /* include */ = {
isa = PBXGroup;
children = (
EBEEB2290D2B351400FF39B4 /* music.h */,
);
path = include;
sourceTree = "<group>";
};
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 = "<group>";
};
EB3CA4F80E97740E00FB1E93 /* tracker */ = {
isa = PBXGroup;
children = (
EB3CA4F90E97740E00FB1E93 /* tracker.h */,
);
path = tracker;
sourceTree = "<group>";
};
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 = "<group>";
};
EBFD39740E3C1C2300FED206 /* tracker */ = {
isa = PBXGroup;
children = (
);
path = tracker;
sourceTree = "<group>";
};
/* 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;
};

View file

@ -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"

View file

@ -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);

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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();

View file

@ -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();

View file

@ -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 );

View file

@ -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].rank<rank)
strcpy (rankstr,"promoted");
else if (Netgame.players[(int)pnum].rank>rank)
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)

View file

@ -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

View file

@ -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; i++ )
{
sprintf( menus[i].text, "%d. %-16s", i+1, Netgame.players[i].callsign );
if (PlayerCfg.NoRankings)
sprintf( menus[i].text, "%d. %-20s", i+1, Netgame.players[i].callsign );
else
sprintf( menus[i].text, "%d. %s%-20s", i+1, RankStrings[Netgame.players[i].rank],Netgame.players[i].callsign );
if (i < Netgame.max_numplayers)
menus[i].value = 1;
else
@ -3336,6 +3356,7 @@ void net_udp_read_sync_packet( ubyte * data, int data_len, struct _sockaddr send
Players[Player_num].connected = CONNECT_PLAYING;
Netgame.players[Player_num].connected = CONNECT_PLAYING;
Netgame.players[Player_num].rank=GetMyNetRanking();
if (!Network_rejoined)
{
@ -3500,14 +3521,14 @@ net_udp_select_players(void)
{
int i, j, opts, opt_msg;
newmenu_item m[MAX_PLAYERS+1];
char text[MAX_PLAYERS][25];
char text[MAX_PLAYERS][45];
char title[50];
int save_nplayers;
net_udp_add_player( &UDP_Seq );
for (i=0; i< MAX_PLAYERS; i++ ) {
sprintf( text[i], "%d. %-16s", i+1, "" );
sprintf( text[i], "%d. %-20s", i+1, "" );
m[i].type = NM_TYPE_CHECK; m[i].text = text[i]; m[i].value = 0;
}
//added/edited on 11/7/98 by Victor Rachels in an attempt to get msgs going.
@ -3518,7 +3539,10 @@ net_udp_select_players(void)
m[0].value = 1; // Assume server will play...
sprintf( text[0], "%d. %-16s", 1, Players[Player_num].callsign );
if (PlayerCfg.NoRankings)
sprintf( text[0], "%d. %-20s", 1, Players[Player_num].callsign );
else
sprintf( text[0], "%d. %s%-20s", 1, RankStrings[Netgame.players[Player_num].rank],Players[Player_num].callsign );
sprintf( title, "%s %d %s", TXT_TEAM_SELECT, Netgame.max_numplayers, TXT_TEAM_PRESS_ENTER );
GetPlayersAgain:
@ -3608,6 +3632,8 @@ abort:
if (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;i<MAX_PLAYERS;i++)
{
@ -4811,7 +4844,14 @@ void net_udp_do_refuse_stuff (UDP_sequence_packet *their)
if (Game_mode & GM_TEAM)
{
HUD_init_message(HM_MULTI, "%s wants to join",their->player.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

View file

@ -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);

View file

@ -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;

View file

@ -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) {

View file

@ -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 )

View file

@ -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)

View file

@ -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<n_render_vertices; vv+=2) {
for (vv=0; vv<n_render_vertices; vv++) {
int vertnum, vsegnum;
vms_vector *vertpos;
@ -134,66 +130,64 @@ void apply_light(g3s_lrgb obj_light_emission, int obj_seg, vms_vector *obj_pos,
vertnum = render_vertices[vv];
vsegnum = vert_segnum_list[vv];
if ((vertnum ^ light_frame_count) & 1) {
vertpos = &Vertices[vertnum];
vertpos = &Vertices[vertnum];
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);
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);

View file

@ -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

View file

@ -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;

View file

@ -268,7 +268,6 @@ void blast_blastable_wall(segment *seg, int side)
}
//-----------------------------------------------------------------
// Destroys a blastable wall.
void wall_destroy(segment *seg, int side)