diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..d678fd1c3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +baseq2/ +baseq2-bak/ +quake2 \ No newline at end of file diff --git a/client/client.h b/client/client.h index 2dc57a26e..460e283ed 100644 --- a/client/client.h +++ b/client/client.h @@ -26,6 +26,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include #include +#include #include "ref.h" diff --git a/client/menu.c b/client/menu.c index 1835a86c5..fe60a46ec 100644 --- a/client/menu.c +++ b/client/menu.c @@ -1013,7 +1013,11 @@ CONTROLS MENU ======================================================================= */ static cvar_t *win_noalttab; -extern cvar_t *in_joystick; + +// TODO: Implement Cvar_Get inside IN_init for macOS +#ifndef __APPLE__ + extern cvar_t *in_joystick; +#endif static menuframework_s s_options_menu; static menuaction_s s_options_defaults_action; @@ -1099,8 +1103,13 @@ static void ControlsSetMenuItemValues( void ) Cvar_SetValue( "crosshair", ClampCvar( 0, 3, crosshair->value ) ); s_options_crosshair_box.curvalue = crosshair->value; - Cvar_SetValue( "in_joystick", ClampCvar( 0, 1, in_joystick->value ) ); - s_options_joystick_box.curvalue = in_joystick->value; + // TODO: Properly implement CVAR system here + // Cvar_SetValue( "in_joystick", ClampCvar( 0, 1, in_joystick->value ) ); + // s_options_joystick_box.curvalue = in_joystick->value; + + // Added by LT + Cvar_SetValue( "in_joystick", ClampCvar( 0, 1, 0 ) ); + s_options_joystick_box.curvalue = 0; s_options_noalttab_box.curvalue = win_noalttab->value; } diff --git a/game/g_local.h b/game/g_local.h index 78605e59b..76f42ee75 100644 --- a/game/g_local.h +++ b/game/g_local.h @@ -458,9 +458,10 @@ extern spawn_temp_t st; extern int sm_meat_index; extern int snd_fry; -extern int jacket_armor_index; -extern int combat_armor_index; -extern int body_armor_index; +// Removed by LT because of compile-error +// extern int jacket_armor_index; +// extern int combat_armor_index; +// extern int body_armor_index; // means of death diff --git a/game/q_shared.h b/game/q_shared.h index b10b741bd..93d360d62 100644 --- a/game/q_shared.h +++ b/game/q_shared.h @@ -38,6 +38,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include #include +#include #if (defined _M_IX86 || defined __i386__) && !defined C_ONLY && !defined __sun__ #define id386 1 @@ -52,7 +53,13 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #endif typedef unsigned char byte; -typedef enum {false, true} qboolean; + +// Foundation.h > CoreFoundation.h > stdbool.h +// This results in a identifier conflict. +// I simply redefinded bool as qboolean. +// Old Defintion: +// typedef enum {false, true} qboolean; +typedef bool qboolean; #ifndef NULL diff --git a/makefile b/makefile index 79bf919f9..114708222 100644 --- a/makefile +++ b/makefile @@ -1,6 +1,6 @@ CFLAGS = -Wall -c -g -DNO_PRIVATE -LDFLAGS = -sectcreate __ICON __header rhapsody/QuakeWorld.iconheader -segprot __ICON r r -sectcreate __ICON app rhapsody/QuakeWorld.tiff -framework AppKit -framework Foundation +LDFLAGS = -sectcreate __ICON __header rhapsody/quake2.iconheader -segprot __ICON r r -sectcreate __ICON app rhapsody/quake2.tiff -framework AppKit -framework Foundation ODIR = rhapsody/output EXEBASE = QuakeWorld @@ -24,20 +24,20 @@ clean: REF_SOFT_SYSTEM_FILES = $(ODIR)/r_next.o -REF_SOFT_FILES = $(ODIR)/d_polyse.o $(ODIR)/d_scan.o $(ODIR)/draw.o $(ODIR)/model.o $(ODIR)/r_aclip.o $(ODIR)/r_alias.o $(ODIR)/r_bsp.o $(ODIR)/r_draw.o $(ODIR)/r_edge.o $(ODIR)/r_efrag.o $(ODIR)/r_inter.o $(ODIR)/r_light.o $(ODIR)/r_main.o $(ODIR)/r_misc.o $(ODIR)/r_part.o $(ODIR)/r_sky.o $(ODIR)/r_sprite.o $(ODIR)/r_surf.o $(REF_SOFT_SYSTEM_FILES) +REF_SOFT_FILES = $(ODIR)/r_polyse.o $(ODIR)/r_scan.o $(ODIR)/r_model.o $(ODIR)/r_aclip.o $(ODIR)/r_alias.o $(ODIR)/r_bsp.o $(ODIR)/r_draw.o $(ODIR)/r_edge.o $(ODIR)/r_light.o $(ODIR)/r_main.o $(ODIR)/r_misc.o $(ODIR)/r_part.o $(ODIR)/r_sprite.o $(ODIR)/r_surf.o $(REF_SOFT_SYSTEM_FILES) -CLIENT_SYSTEM_FILES = $(ODIR)/in_next.o $(ODIR)/cd_null.o $(ODIR)/snd_next.o $(ODIR)/vid_null.o +CLIENT_SYSTEM_FILES = $(ODIR)/in_next.o SOUND_FILES = $(ODIR)/snd_dma.o $(ODIR)/snd_mix.o $(ODIR)/snd_mem.o -CLIENT_FILES = $(ODIR)/cl_demo.o $(ODIR)/cl_ents.o $(ODIR)/cl_input.o $(ODIR)/cl_main.o $(ODIR)/cl_parse.o $(ODIR)/cl_pred.o $(ODIR)/cl_tent.o $(ODIR)/console.o $(ODIR)/keys.o $(ODIR)/menu.o $(ODIR)/sbar.o $(ODIR)/screen.o $(ODIR)/view.o $(SOUND_FILES) $(CLIENT_SYSTEM_FILES) $(REF_SOFT_FILES) +CLIENT_FILES = $(ODIR)/cl_ents.o $(ODIR)/cl_input.o $(ODIR)/cl_main.o $(ODIR)/cl_parse.o $(ODIR)/cl_pred.o $(ODIR)/cl_tent.o $(ODIR)/console.o $(ODIR)/keys.o $(ODIR)/menu.o $(SOUND_FILES) $(CLIENT_SYSTEM_FILES) $(REF_SOFT_FILES) #CLIENT_FILES = $(ODIR)/cl_null.o -SERVER_FILES = $(ODIR)/pr_cmds.o $(ODIR)/pr_edict.o $(ODIR)/pr_exec.o $(ODIR)/sv_ccmds.o $(ODIR)/sv_ents.o $(ODIR)/sv_init.o $(ODIR)/sv_main.o $(ODIR)/sv_move.o $(ODIR)/sv_phys.o $(ODIR)/sv_send.o $(ODIR)/sv_user.o $(ODIR)/world.o +SERVER_FILES = $(ODIR)/sv_ccmds.o $(ODIR)/sv_ents.o $(ODIR)/sv_init.o $(ODIR)/sv_main.o $(ODIR)/sv_send.o $(ODIR)/sv_user.o $(ODIR)/sv_world.o #SERVER_FILES = $(ODIR)/sv_null.o -QCOMMON_SYSTEM_FILES = $(ODIR)/net_udp.o $(ODIR)/sys_next.o -QCOMMON_FILES = $(ODIR)/cmd.o $(ODIR)/cmodel.o $(ODIR)/common.o $(ODIR)/crc.o $(ODIR)/cvar.o $(ODIR)/files.o $(ODIR)/mathlib.o $(ODIR)/net_chan.o $(ODIR)/pmove.o $(QCOMMON_SYSTEM_FILES) +# QCOMMON_SYSTEM_FILES = $(ODIR)/sys_next.o +QCOMMON_FILES = $(ODIR)/cmd.o $(ODIR)/cmodel.o $(ODIR)/common.o $(ODIR)/crc.o $(ODIR)/cvar.o $(ODIR)/files.o $(ODIR)/net_chan.o $(ODIR)/pmove.o $(QCOMMON_SYSTEM_FILES) $(EXE): $(CLIENT_FILES) $(SERVER_FILES) $(QCOMMON_FILES) cc -o $(EXE) $(CLIENT_FILES) $(SERVER_FILES) $(QCOMMON_FILES) $(LDFLAGS) @@ -48,9 +48,6 @@ $(ODIR)/cl_null.o : client/cl_null.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i cc $(CFLAGS) -o $@ /tmp/temp.i -$(ODIR)/cl_demo.o : client/cl_demo.c - cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i - cc $(CFLAGS) -o $@ /tmp/temp.i $(ODIR)/cl_ents.o : client/cl_ents.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i cc $(CFLAGS) -o $@ /tmp/temp.i @@ -78,15 +75,6 @@ $(ODIR)/keys.o : client/keys.c $(ODIR)/menu.o : client/menu.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i cc $(CFLAGS) -o $@ /tmp/temp.i -$(ODIR)/sbar.o : client/sbar.c - cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i - cc $(CFLAGS) -o $@ /tmp/temp.i -$(ODIR)/screen.o : client/screen.c - cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i - cc $(CFLAGS) -o $@ /tmp/temp.i -$(ODIR)/view.o : client/view.c - cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i - cc $(CFLAGS) -o $@ /tmp/temp.i $(ODIR)/snd_dma.o : client/snd_dma.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i @@ -98,23 +86,16 @@ $(ODIR)/snd_mem.o : client/snd_mem.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i cc $(CFLAGS) -o $@ /tmp/temp.i -$(ODIR)/cd_null.o : client/cd_null.c - cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i - cc $(CFLAGS) -o $@ /tmp/temp.i $(ODIR)/in_null.o : client/in_null.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i cc $(CFLAGS) -o $@ /tmp/temp.i $(ODIR)/snd_null.o : client/snd_null.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i cc $(CFLAGS) -o $@ /tmp/temp.i -$(ODIR)/vid_null.o : client/vid_null.c - cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i - cc $(CFLAGS) -o $@ /tmp/temp.i $(ODIR)/in_next.o : rhapsody/in_next.m cc $(CFLAGS) -o $@ $? -$(ODIR)/snd_next.o : rhapsody/snd_next.m - cc $(CFLAGS) -o $@ $? + #=========================================================================== @@ -122,15 +103,6 @@ $(ODIR)/sv_null.o : server/sv_null.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i cc $(CFLAGS) -o $@ /tmp/temp.i -$(ODIR)/pr_cmds.o : server/pr_cmds.c - cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i - cc $(CFLAGS) -o $@ /tmp/temp.i -$(ODIR)/pr_edict.o : server/pr_edict.c - cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i - cc $(CFLAGS) -o $@ /tmp/temp.i -$(ODIR)/pr_exec.o : server/pr_exec.c - cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i - cc $(CFLAGS) -o $@ /tmp/temp.i $(ODIR)/sv_ccmds.o : server/sv_ccmds.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i cc $(CFLAGS) -o $@ /tmp/temp.i @@ -143,34 +115,25 @@ $(ODIR)/sv_init.o : server/sv_init.c $(ODIR)/sv_main.o : server/sv_main.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i cc $(CFLAGS) -o $@ /tmp/temp.i -$(ODIR)/sv_move.o : server/sv_move.c - cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i - cc $(CFLAGS) -o $@ /tmp/temp.i -$(ODIR)/sv_phys.o : server/sv_phys.c - cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i - cc $(CFLAGS) -o $@ /tmp/temp.i $(ODIR)/sv_send.o : server/sv_send.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i cc $(CFLAGS) -o $@ /tmp/temp.i $(ODIR)/sv_user.o : server/sv_user.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i cc $(CFLAGS) -o $@ /tmp/temp.i -$(ODIR)/world.o : server/world.c +$(ODIR)/sv_world.o : server/sv_world.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i cc $(CFLAGS) -o $@ /tmp/temp.i #=========================================================================== -$(ODIR)/d_polyse.o : ref_soft/d_polyse.c +$(ODIR)/r_polyse.o : ref_soft/r_polyse.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i cc $(CFLAGS) -o $@ /tmp/temp.i -$(ODIR)/d_scan.o : ref_soft/d_scan.c +$(ODIR)/r_scan.o : ref_soft/r_scan.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i cc $(CFLAGS) -o $@ /tmp/temp.i -$(ODIR)/draw.o : ref_soft/draw.c - cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i - cc $(CFLAGS) -o $@ /tmp/temp.i -$(ODIR)/model.o : ref_soft/model.c +$(ODIR)/r_model.o : ref_soft/r_model.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i cc $(CFLAGS) -o $@ /tmp/temp.i $(ODIR)/r_aclip.o : ref_soft/r_aclip.c @@ -188,12 +151,6 @@ $(ODIR)/r_draw.o : ref_soft/r_draw.c $(ODIR)/r_edge.o : ref_soft/r_edge.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i cc $(CFLAGS) -o $@ /tmp/temp.i -$(ODIR)/r_efrag.o : ref_soft/r_efrag.c - cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i - cc $(CFLAGS) -o $@ /tmp/temp.i -$(ODIR)/r_inter.o : ref_soft/r_inter.c - cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i - cc $(CFLAGS) -o $@ /tmp/temp.i $(ODIR)/r_light.o : ref_soft/r_light.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i cc $(CFLAGS) -o $@ /tmp/temp.i @@ -206,9 +163,6 @@ $(ODIR)/r_misc.o : ref_soft/r_misc.c $(ODIR)/r_part.o : ref_soft/r_part.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i cc $(CFLAGS) -o $@ /tmp/temp.i -$(ODIR)/r_sky.o : ref_soft/r_sky.c - cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i - cc $(CFLAGS) -o $@ /tmp/temp.i $(ODIR)/r_sprite.o : ref_soft/r_sprite.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i cc $(CFLAGS) -o $@ /tmp/temp.i @@ -239,15 +193,9 @@ $(ODIR)/cvar.o : qcommon/cvar.c $(ODIR)/files.o : qcommon/files.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i cc $(CFLAGS) -o $@ /tmp/temp.i -$(ODIR)/mathlib.o : qcommon/mathlib.c - cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i - cc $(CFLAGS) -o $@ /tmp/temp.i $(ODIR)/net_chan.o : qcommon/net_chan.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i cc $(CFLAGS) -o $@ /tmp/temp.i -$(ODIR)/net_udp.o : qcommon/net_udp.c - cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i - cc $(CFLAGS) -o $@ /tmp/temp.i $(ODIR)/pmove.o : qcommon/pmove.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i cc $(CFLAGS) -o $@ /tmp/temp.i @@ -255,5 +203,3 @@ $(ODIR)/pmove.o : qcommon/pmove.c $(ODIR)/sys_null.o : qcommon/sys_null.c cc $(CFLAGS) -E $? | tr -d '\015' > /tmp/temp.i cc $(CFLAGS) -o $@ /tmp/temp.i -$(ODIR)/sys_next.o : rhapsody/sys_next.m - cc $(CFLAGS) -o $@ $? diff --git a/rhapsody/Makefile b/rhapsody/Makefile new file mode 100644 index 000000000..a4aacaf90 --- /dev/null +++ b/rhapsody/Makefile @@ -0,0 +1,63 @@ + +CFLAGS = -O -g -DGAME_HARD_LINKED -DREF_HARD_LINKED +LDFLAGS = -sectcreate __ICON __header quake2.iconheader -segprot __ICON r r -sectcreate __ICON app quake2.tiff -framework AppKit -framework Foundation +EXE = quake2 +TARGETS = $(EXE) + +all: $(TARGETS) + +#---------------------------------------------------------------------- + +SERVERFILES = sv_ccmds.o sv_ents.o sv_game.o sv_init.o sv_main.o sv_send.o sv_user.o sv_world.o + +GAMEFILES = g_ai.o g_cmds.o g_chase.o g_svcmds.o g_combat.o g_func.o g_items.o g_main.o g_misc.o g_monster.o g_phys.o g_save.o g_spawn.o g_target.o g_trigger.o g_utils.o g_weapon.o g_turret.o m_actor.o m_berserk.o m_boss2.o m_boss3.o m_boss31.o m_boss32.o m_brain.o m_chick.o m_flipper.o m_float.o m_flyer.o m_gladiator.o m_gunner.o m_hover.o m_infantry.o m_insane.o m_medic.o m_move.o m_mutant.o m_parasite.o m_soldier.o m_supertank.o m_tank.o p_client.o p_hud.o p_trail.o p_view.o p_weapon.o + +CLIENTFILES = cl_ents.o cl_fx.o cl_input.o cl_inv.o cl_main.o cl_parse.o cl_pred.o cl_scrn.o cl_cin.o cl_tent.o cl_view.o console.o keys.o menu.o qmenu.o snd_dma.o snd_mem.o snd_mix.o cl_newfx.o + +# commonfiles are used by both client and server +COMMONFILES = m_flash.o cmd.o cmodel.o common.o cvar.o files.o md4.o net_chan.o net_udp.o pmove.o crc.o + +REFGLFILES = gl_draw.o gl_light.o gl_mesh.o gl_model.o gl_rmain.o gl_rmisc.o gl_rsurf.o gl_warp.o gl_image.o + +REFSOFTFILES = r_aclip.o r_alias.o r_bsp.o r_draw.o r_edge.o r_image.o r_light.o r_main.o r_misc.o r_model.o r_part.o r_polyse.o r_poly.o r_rast.o r_scan.o r_sprite.o r_surf.o + +# sharedfiles are included in EVERY dll +SHAREDFILES = q_shared.o + +IRIXFILES = cd_sgi.o glx_imp.o qgl_sgi.o sys_sgi.o vid_sgi.o in_sgi.o snddma_null.o + +RHAPFILES = cd_null.o in_null.o snddma_null.o sys_rhap.o vid_null.o swimp_rhap.o + +NULLFILES = cd_null.o in_null.o snddma_null.o sys_null.o vid_null.o swimp_null.o + +#---------------------------------------------------------------------- + +FILES = $(SERVERFILES) $(GAMEFILES) $(COMMONFILES) $(CLIENTFILES) $(REFSOFTFILES) $(SHAREDFILES) $(RHAPFILES) + +$(EXE) : $(FILES) + cc -o $(EXE) $(FILES) $(LDFLAGS) + +clean: + rm -f $(EXE) $(FILES) + +#---------------------------------------------------------------------- + +# gnumake pattern rules are so cool! + +%.o : ../game/%.c + cc $(CFLAGS) -c -o $@ $? +%.o : ../qcommon/%.c + cc $(CFLAGS) -c -o $@ $? +%.o : ../client/%.c + cc $(CFLAGS) -c -o $@ $? +%.o : ../server/%.c + cc $(CFLAGS) -c -o $@ $? +%.o : ../ref_soft/%.c + cc $(CFLAGS) -c -o $@ $? +%.o : ../ref_gl/%.c + cc $(CFLAGS) -c -o $@ $? +%.o : ../null/%.c + cc $(CFLAGS) -c -o $@ $? +%.o : ../rhapsody/%.m + cc $(CFLAGS) -c -o $@ $? + diff --git a/rhapsody/in_next.m b/rhapsody/in_next.m index 97022bd08..6fc9d7f56 100644 --- a/rhapsody/in_next.m +++ b/rhapsody/in_next.m @@ -1,7 +1,7 @@ // in_next.m #import -#import +// #import #include "../client/client.h" float mousex, mousey; @@ -14,7 +14,7 @@ void PShidecursor (void); void PScurrentmouse (int win, float *x, float *y); -extern NSView *vid_view_i; +extern NSView *vid_view_i; extern NSWindow *vid_window_i; qboolean mlooking; @@ -29,7 +29,8 @@ cvar_t in_mouse = {"in_mouse", "0", CVAR_ARCHIVE}; cvar_t m_filter = {"m_filter", "0", CVAR_ARCHIVE}; -cvar_t freelook = {"in_freelook", "0", CVAR_ARCHIVE}; +cvar_t g_freelook = {"in_freelook", "0", CVAR_ARCHIVE}; +cvar_t* freelook = &g_freelook; /* @@ -114,13 +115,13 @@ void IN_MouseEvent (int mstate) if ( (mstate & (1<value; + mouse_y *= sensitivity->value; // add mouse X/Y movement to cmd - if ( (in_strafe.state & 1) || (lookstrafe.value && mlooking )) - cmd->sidemove += m_side.value * mouse_x; + if ( (in_strafe.state & 1) || (lookstrafe->value && mlooking )) + cmd->sidemove += m_side->value * mouse_x; else - cl.viewangles[YAW] -= m_yaw.value * mouse_x; + cl.viewangles[YAW] -= m_yaw->value * mouse_x; - if ( (mlooking || freelook.value) && !(in_strafe.state & 1)) + if ( (mlooking || freelook->value) && !(in_strafe.state & 1)) { - cl.viewangles[PITCH] += m_pitch.value * mouse_y; + cl.viewangles[PITCH] += m_pitch->value * mouse_y; if (cl.viewangles[PITCH] > 80) cl.viewangles[PITCH] = 80; if (cl.viewangles[PITCH] < -70) @@ -248,7 +249,7 @@ void IN_MouseMove (usercmd_t *cmd) } else { - cmd->forwardmove -= m_forward.value * mouse_y; + cmd->forwardmove -= m_forward->value * mouse_y; } } @@ -263,9 +264,9 @@ void IN_HideMouse (void) PShidecursor (); } -NXEventHandle eventhandle; -NXMouseScaling oldscaling, newscaling; -NXMouseButton oldbutton; +// NXEventHandle eventhandle; +// NXMouseScaling oldscaling, newscaling; +// NXMouseButton oldbutton; /* ============= @@ -274,9 +275,9 @@ void IN_HideMouse (void) */ void IN_Init (void) { - Cvar_RegisterVariable (&in_mouse); - Cvar_RegisterVariable (&m_filter); - Cvar_RegisterVariable (&freelook); + // Cvar_RegisterVariable (&in_mouse); + // Cvar_RegisterVariable (&m_filter); + // Cvar_RegisterVariable (&freelook); Cmd_AddCommand ("showmouse", IN_ShowMouse); Cmd_AddCommand ("hidemouse", IN_HideMouse); @@ -284,11 +285,11 @@ void IN_Init (void) IN_StartupMouse (); // open the event status driver - eventhandle = NXOpenEventStatus(); - NXGetMouseScaling (eventhandle, &oldscaling); - NXSetMouseScaling (eventhandle, &newscaling); - oldbutton = NXMouseButtonEnabled (eventhandle); - NXEnableMouseButton (eventhandle, 2); + // eventhandle = NXOpenEventStatus(); + // NXGetMouseScaling (eventhandle, &oldscaling); + // NXSetMouseScaling (eventhandle, &newscaling); + // oldbutton = NXMouseButtonEnabled (eventhandle); + // NXEnableMouseButton (eventhandle, 2); } /* @@ -301,9 +302,9 @@ void IN_Shutdown (void) IN_DeactivateMouse (); // put mouse scaling back the way it was - NXSetMouseScaling (eventhandle, &oldscaling); - NXEnableMouseButton (eventhandle, oldbutton); - NXCloseEventStatus (eventhandle); + // NXSetMouseScaling (eventhandle, &oldscaling); + // NXEnableMouseButton (eventhandle, oldbutton); + // NXCloseEventStatus (eventhandle); } void IN_Move (usercmd_t *cmd) @@ -326,7 +327,7 @@ void IN_Commands (void) void V_StopPitchDrift (void) { - cl.laststop = cl.time; - cl.nodrift = true; - cl.pitchvel = 0; + // cl.laststop = cl.time; + // cl.nodrift = true; + // cl.pitchvel = 0; } diff --git a/rhapsody/net_udp.m b/rhapsody/net_udp.m new file mode 100644 index 000000000..10423b002 --- /dev/null +++ b/rhapsody/net_udp.m @@ -0,0 +1,556 @@ +// net_wins.c + +#include "../qcommon/qcommon.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef NeXT +#include +#endif + +// Added by LT +int stricmp(const char *a, const char *b) { + int ca, cb; + do { + // ca = (unsigned char) *a++; + ca = *((unsigned char *) a++); + cb = (unsigned char) *b++; + ca = tolower(toupper(ca)); + cb = tolower(toupper(cb)); + } while (ca == cb && ca != '\0'); + return ca - cb; +} + +netadr_t net_local_adr; + +#define LOOPBACK 0x7f000001 + +#define MAX_LOOPBACK 4 + +typedef struct +{ + byte data[MAX_MSGLEN]; + int datalen; +} loopmsg_t; + +typedef struct +{ + loopmsg_t msgs[MAX_LOOPBACK]; + int get, send; +} loopback_t; + +loopback_t loopbacks[2]; +int ip_sockets[2]; +int ipx_sockets[2]; + +int NET_Socket (char *net_interface, int port); +char *NET_ErrorString (void); + +//============================================================================= + +void NetadrToSockadr (netadr_t *a, struct sockaddr_in *s) +{ + memset (s, 0, sizeof(*s)); + + if (a->type == NA_BROADCAST) + { + s->sin_family = AF_INET; + + s->sin_port = a->port; + *(int *)&s->sin_addr = -1; + } + else if (a->type == NA_IP) + { + s->sin_family = AF_INET; + + *(int *)&s->sin_addr = *(int *)&a->ip; + s->sin_port = a->port; + } +} + +void SockadrToNetadr (struct sockaddr_in *s, netadr_t *a) +{ + *(int *)&a->ip = *(int *)&s->sin_addr; + a->port = s->sin_port; + a->type = NA_IP; +} + + +qboolean NET_CompareAdr (netadr_t a, netadr_t b) +{ + if (a.ip[0] == b.ip[0] && a.ip[1] == b.ip[1] && a.ip[2] == b.ip[2] && a.ip[3] == b.ip[3] && a.port == b.port) + return true; + return false; +} + +/* +=================== +NET_CompareBaseAdr + +Compares without the port +=================== +*/ +qboolean NET_CompareBaseAdr (netadr_t a, netadr_t b) +{ + if (a.type != b.type) + return false; + + if (a.type == NA_LOOPBACK) + return true; + + if (a.type == NA_IP) + { + if (a.ip[0] == b.ip[0] && a.ip[1] == b.ip[1] && a.ip[2] == b.ip[2] && a.ip[3] == b.ip[3]) + return true; + return false; + } + + if (a.type == NA_IPX) + { + if ((memcmp(a.ipx, b.ipx, 10) == 0)) + return true; + return false; + } + + // Added by LT. + return false; +} + +char *NET_AdrToString (netadr_t a) +{ + static char s[64]; + + Com_sprintf (s, sizeof(s), "%i.%i.%i.%i:%i", a.ip[0], a.ip[1], a.ip[2], a.ip[3], ntohs(a.port)); + + return s; +} + +char *NET_BaseAdrToString (netadr_t a) +{ + static char s[64]; + + Com_sprintf (s, sizeof(s), "%i.%i.%i.%i", a.ip[0], a.ip[1], a.ip[2], a.ip[3]); + + return s; +} + +/* +============= +NET_StringToAdr + +localhost +idnewt +idnewt:28000 +192.246.40.70 +192.246.40.70:28000 +============= +*/ +qboolean NET_StringToSockaddr (char *s, struct sockaddr *sadr) +{ + struct hostent *h; + char *colon; + char copy[128]; + + memset (sadr, 0, sizeof(*sadr)); + ((struct sockaddr_in *)sadr)->sin_family = AF_INET; + + ((struct sockaddr_in *)sadr)->sin_port = 0; + + strcpy (copy, s); + // strip off a trailing :port if present + for (colon = copy ; *colon ; colon++) + if (*colon == ':') + { + *colon = 0; + ((struct sockaddr_in *)sadr)->sin_port = htons((short)atoi(colon+1)); + } + + if (copy[0] >= '0' && copy[0] <= '9') + { + *(int *)&((struct sockaddr_in *)sadr)->sin_addr = inet_addr(copy); + } + else + { + if (! (h = gethostbyname(copy)) ) + return 0; + *(int *)&((struct sockaddr_in *)sadr)->sin_addr = *(int *)h->h_addr_list[0]; + } + + return true; +} + +/* +============= +NET_StringToAdr + +localhost +idnewt +idnewt:28000 +192.246.40.70 +192.246.40.70:28000 +============= +*/ +qboolean NET_StringToAdr (char *s, netadr_t *a) +{ + struct sockaddr_in sadr; + + if (!strcmp (s, "localhost")) + { + memset (a, 0, sizeof(*a)); + a->type = NA_LOOPBACK; + return true; + } + + if (!NET_StringToSockaddr (s, (struct sockaddr *)&sadr)) + return false; + + SockadrToNetadr (&sadr, a); + + return true; +} + + +qboolean NET_IsLocalAddress (netadr_t adr) +{ + return NET_CompareAdr (adr, net_local_adr); +} + +/* +============================================================================= + +LOOPBACK BUFFERS FOR LOCAL PLAYER + +============================================================================= +*/ + +qboolean NET_GetLoopPacket (netsrc_t sock, netadr_t *net_from, sizebuf_t *net_message) +{ + int i; + loopback_t *loop; + + loop = &loopbacks[sock]; + + if (loop->send - loop->get > MAX_LOOPBACK) + loop->get = loop->send - MAX_LOOPBACK; + + if (loop->get >= loop->send) + return false; + + i = loop->get & (MAX_LOOPBACK-1); + loop->get++; + + memcpy (net_message->data, loop->msgs[i].data, loop->msgs[i].datalen); + net_message->cursize = loop->msgs[i].datalen; + *net_from = net_local_adr; + return true; + +} + + +void NET_SendLoopPacket (netsrc_t sock, int length, void *data, netadr_t to) +{ + int i; + loopback_t *loop; + + loop = &loopbacks[sock^1]; + + i = loop->send & (MAX_LOOPBACK-1); + loop->send++; + + memcpy (loop->msgs[i].data, data, length); + loop->msgs[i].datalen = length; +} + +//============================================================================= + +qboolean NET_GetPacket (netsrc_t sock, netadr_t *net_from, sizebuf_t *net_message) +{ + int ret; + struct sockaddr_in from; + int fromlen; + int net_socket; + int protocol; + int err; + + if (NET_GetLoopPacket (sock, net_from, net_message)) + return true; + + for (protocol = 0 ; protocol < 2 ; protocol++) + { + if (protocol == 0) + net_socket = ip_sockets[sock]; + else + net_socket = ipx_sockets[sock]; + + if (!net_socket) + continue; + + fromlen = sizeof(from); + ret = recvfrom (net_socket, net_message->data, net_message->maxsize + , 0, (struct sockaddr *)&from, &fromlen); + if (ret == -1) + { + err = errno; + + if (err == EWOULDBLOCK || err == ECONNREFUSED) + continue; + Com_Printf ("NET_GetPacket: %s", NET_ErrorString()); + continue; + } + + if (ret == net_message->maxsize) + { + Com_Printf ("Oversize packet from %s\n", NET_AdrToString (*net_from)); + continue; + } + + net_message->cursize = ret; + SockadrToNetadr (&from, net_from); + return true; + } + + return false; +} + +//============================================================================= + +void NET_SendPacket (netsrc_t sock, int length, void *data, netadr_t to) +{ + int ret; + struct sockaddr_in addr; + int net_socket; + + if ( to.type == NA_LOOPBACK ) + { + NET_SendLoopPacket (sock, length, data, to); + return; + } + + if (to.type == NA_BROADCAST) + { + net_socket = ip_sockets[sock]; + if (!net_socket) + return; + } + else if (to.type == NA_IP) + { + net_socket = ip_sockets[sock]; + if (!net_socket) + return; + } + else if (to.type == NA_IPX) + { + net_socket = ipx_sockets[sock]; + if (!net_socket) + return; + } + else if (to.type == NA_BROADCAST_IPX) + { + net_socket = ipx_sockets[sock]; + if (!net_socket) + return; + } + else + Com_Error (ERR_FATAL, "NET_SendPacket: bad address type"); + + NetadrToSockadr (&to, &addr); + + ret = sendto (net_socket, data, length, 0, (struct sockaddr *)&addr, sizeof(addr) ); + if (ret == -1) + { + Com_Printf ("NET_SendPacket ERROR: %i\n", NET_ErrorString()); + } +} + + +//============================================================================= + + + + +/* +==================== +NET_OpenIP +==================== +*/ +void NET_OpenIP (void) +{ + cvar_t *port, *ip; + + port = Cvar_Get ("port", va("%i", PORT_SERVER), CVAR_NOSET); + ip = Cvar_Get ("ip", "localhost", CVAR_NOSET); + + if (!ip_sockets[NS_SERVER]) + ip_sockets[NS_SERVER] = NET_Socket (ip->string, port->value); + if (!ip_sockets[NS_CLIENT]) + ip_sockets[NS_CLIENT] = NET_Socket (ip->string, PORT_ANY); +} + +/* +==================== +NET_OpenIPX +==================== +*/ +void NET_OpenIPX (void) +{ +} + + +/* +==================== +NET_Config + +A single player game will only use the loopback code +==================== +*/ +void NET_Config (qboolean multiplayer) +{ + int i; + + if (!multiplayer) + { // shut down any existing sockets + for (i=0 ; i<2 ; i++) + { + if (ip_sockets[i]) + { + close (ip_sockets[i]); + ip_sockets[i] = 0; + } + if (ipx_sockets[i]) + { + close (ipx_sockets[i]); + ipx_sockets[i] = 0; + } + } + } + else + { // open sockets + NET_OpenIP (); + NET_OpenIPX (); + } +} + + +//=================================================================== + + +/* +==================== +NET_Init +==================== +*/ +void NET_Init (void) +{ +} + + +/* +==================== +NET_Socket +==================== +*/ +int NET_Socket (char *net_interface, int port) +{ + int newsocket; + struct sockaddr_in address; + qboolean _true = true; + int i = 1; + + if ((newsocket = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) + { + Com_Printf ("ERROR: UDP_OpenSocket: socket:", NET_ErrorString()); + return 0; + } + + // make it non-blocking + if (ioctl (newsocket, FIONBIO, &_true) == -1) + { + Com_Printf ("ERROR: UDP_OpenSocket: ioctl FIONBIO:%s\n", NET_ErrorString()); + return 0; + } + + // make it broadcast capable + if (setsockopt(newsocket, SOL_SOCKET, SO_BROADCAST, (char *)&i, sizeof(i)) == -1) + { + Com_Printf ("ERROR: UDP_OpenSocket: setsockopt SO_BROADCAST:%s\n", NET_ErrorString()); + return 0; + } + + if (!net_interface || !net_interface[0] || !stricmp(net_interface, "localhost")) + address.sin_addr.s_addr = INADDR_ANY; + else + NET_StringToSockaddr (net_interface, (struct sockaddr *)&address); + + if (port == PORT_ANY) + address.sin_port = 0; + else + address.sin_port = htons((short)port); + + address.sin_family = AF_INET; + + if( bind (newsocket, (void *)&address, sizeof(address)) == -1) + { + Com_Printf ("ERROR: UDP_OpenSocket: bind: %s\n", NET_ErrorString()); + close (newsocket); + return 0; + } + + return newsocket; +} + + +/* +==================== +NET_Shutdown +==================== +*/ +void NET_Shutdown (void) +{ + NET_Config (false); // close sockets +} + + +/* +==================== +NET_ErrorString +==================== +*/ +char *NET_ErrorString (void) +{ + int code; + + code = errno; + return strerror (code); +} + +// sleeps msec or until net socket is ready +void NET_Sleep(int msec) +{ + struct timeval timeout; + fd_set fdset; + extern cvar_t *dedicated; + + qboolean stdin_active = true; + + if (!ip_sockets[NS_SERVER] || (dedicated && !dedicated->value)) + return; // we're not a server, just run full speed + + FD_ZERO(&fdset); + if (stdin_active) + FD_SET(0, &fdset); // stdin is processed too + FD_SET(ip_sockets[NS_SERVER], &fdset); // network socket + timeout.tv_sec = msec/1000; + timeout.tv_usec = (msec%1000)*1000; + select(ip_sockets[NS_SERVER]+1, &fdset, NULL, NULL, &timeout); +} + diff --git a/rhapsody/r_next.m b/rhapsody/r_next.m index 902cbd6ca..58dc7786e 100644 --- a/rhapsody/r_next.m +++ b/rhapsody/r_next.m @@ -2,6 +2,9 @@ #import #include "../ref_soft/r_local.h" +extern host_t task_self_; +#define task_self() task_self_ + /* ==================================================================== @@ -22,6 +25,7 @@ @interface QuakeView : NSView int Draw_SetResolution (void); +void Sys_SetPalette (byte *palette); #define TYPE_FULLSCREEN 0 #define TYPE_WINDOWED 1 @@ -233,6 +237,7 @@ int Draw_SetResolution (void) vid.width = resolutions[(int)(vid_mode->value)][0]; vid.height = resolutions[(int)(vid_mode->value)][1]; + /* vid.win_width = vid.width; vid.win_height = vid.height; if (vid_stretched->value) @@ -240,14 +245,15 @@ int Draw_SetResolution (void) vid.win_width <<= 1; vid.win_height <<= 1; } + */ - vid.aspect = 1; + // vid.aspect = 1; vid.buffer = malloc (vid.width*vid.height); vid.rowbytes = vid.width; d_pzbuffer = malloc(vid.width*vid.height*2); buffernative = malloc(vid.width*vid.height*4); - D_InitCaches (); + // D_InitCaches (); Sys_SetPalette ((byte *)d_8to24table); @@ -258,7 +264,7 @@ int Draw_SetResolution (void) // // open a window // - content = NSMakeRect (vid_x->value,vid_y->value,vid.win_width, vid.win_height); + content = NSMakeRect (vid_x->value,vid_y->value,vid.width, vid.height); vid_window_i = [[NSWindow alloc] initWithContentRect: content styleMask: NSTitledWindowMask @@ -286,7 +292,7 @@ int Draw_SetResolution (void) // leave focus locked forever [vid_view_i lockFocus]; - ri.VID_SetSize (vid.width, vid.height); + // ri.VID_SetSize (vid.width, vid.height); return 0; } @@ -325,7 +331,7 @@ int Draw_Init (void *window) Draw_SetResolution (); - R_Init (); + R_Init (NULL, NULL); return 0; } @@ -456,7 +462,7 @@ void Draw_EndFrame (void) int maxsize; int cursize; -void *Hunk_Begin (void) +void *Hunk_Begin (int maxsize) { kern_return_t r; @@ -631,19 +637,19 @@ - (void)resignKeyWindow - (void)mouseDown:(NSEvent *)theEvent { - Key_Event (K_MOUSE1, true); + Key_Event (K_MOUSE1, true, 0); } - (void)mouseUp:(NSEvent *)theEvent { - Key_Event (K_MOUSE1, false); + Key_Event (K_MOUSE1, false, 0); } - (void)rightMouseDown:(NSEvent *)theEvent { - Key_Event (K_MOUSE2, true); + Key_Event (K_MOUSE2, true, 0); } - (void)rightMouseUp:(NSEvent *)theEvent { - Key_Event (K_MOUSE2, false); + Key_Event (K_MOUSE2, false, 0); } @@ -664,7 +670,7 @@ - (void)keyDown:(NSEvent *)theEvent for (km=keymaps;km->source!=-1;km++) if (ch == km->source) { - Key_Event (km->dest, true); + Key_Event (km->dest, true, 0); return; } @@ -674,7 +680,7 @@ - (void)keyDown:(NSEvent *)theEvent if (ch>=256) return; - Key_Event (ch, true); + Key_Event (ch, true, 0); } - (void)flagsChanged:(NSEvent *)theEvent @@ -697,9 +703,9 @@ - (void)flagsChanged:(NSEvent *)theEvent if ( (1<source) { if (newflags & (1<dest, true); + Key_Event (km->dest, true, 0); else - Key_Event (km->dest, false); + Key_Event (km->dest, false, 0); } } @@ -718,7 +724,7 @@ - (void)keyUp:(NSEvent *)theEvent for (km=keymaps;km->source!=-1;km++) if (ch == km->source) { - Key_Event (km->dest, false); + Key_Event (km->dest, false, 0); return; } @@ -727,7 +733,7 @@ - (void)keyUp:(NSEvent *)theEvent ch += 'a' - 'A'; if (ch>=256) return; - Key_Event (ch, false); + Key_Event (ch, false, 0); } @end diff --git a/rhapsody/swimp_rhap.m b/rhapsody/swimp_rhap.m index aeb77dc46..1556a334e 100644 --- a/rhapsody/swimp_rhap.m +++ b/rhapsody/swimp_rhap.m @@ -1,5 +1,5 @@ #import -#import +// #import #import #include "../ref_soft/r_local.h" @@ -8,7 +8,7 @@ @interface QuakeView : NSView NSWindow *vid_window_i; QuakeView *vid_view_i; -NSDirectScreen *vid_screen; +// NSDirectScreen *vid_screen; byte *vid_buffer; // real framebuffer int vid_rowbytes; // framebuffer rowbytes @@ -34,6 +34,7 @@ @interface QuakeView : NSView /* ** InitFullscreen */ +/* rserr_t InitFullscreen (int width, int height) { NSDictionary *mode, *bestMode; @@ -89,10 +90,11 @@ rserr_t InitFullscreen (int width, int height) return rserr_ok; } +*/ void ShutdownFullscreen (void) { - [vid_screen dealloc]; + // [vid_screen dealloc]; [NSCursor unhide]; } @@ -242,7 +244,9 @@ void BlitWindowed (void) ); [vid_view_i unlockFocus]; - PSWait (); + + // TODO: PSWait doesn't seem to exist anymore. Find counter-part. Process wait!? + // PSWait (); } @@ -307,7 +311,7 @@ rserr_t SWimp_SetMode( int *pwidth, int *pheight, int mode, qboolean fullscreen) if (fullscreen) { rhap_mode = rhap_fullscreen; - ret = InitFullscreen (*pwidth, *pheight); + // ret = InitFullscreen (*pwidth, *pheight); } else { rhap_mode = rhap_windowed; ret = InitWindowed (*pwidth, *pheight); diff --git a/rhapsody/sys_rhap.m b/rhapsody/sys_rhap.m index ad0507d95..63b22d2da 100644 --- a/rhapsody/sys_rhap.m +++ b/rhapsody/sys_rhap.m @@ -236,7 +236,7 @@ void Sys_Quit (void) */ void Sys_Init(void) { - moncontrol(0); // turn off profiling except during real Quake work + // moncontrol(0); // turn off profiling except during real Quake work // change stdin to non blocking fcntl (0, F_SETFL, fcntl (0, F_GETFL, 0) | FNDELAY); @@ -307,7 +307,7 @@ void Sys_SendKeyEvents (void) main ============= */ -void main (int argc, char **argv) +int main (int argc, char **argv) { int frame; NSAutoreleasePool *pool; @@ -324,13 +324,13 @@ void main (int argc, char **argv) { pool =[[NSAutoreleasePool alloc] init]; - if (++frame > 10) - moncontrol(1);// profile only while we do each Quake frame + // if (++frame > 10) + // moncontrol(1); // profile only while we do each Quake frame t = Sys_Milliseconds (); Qcommon_Frame (t - oldtime); oldtime = t; - moncontrol(0); + // moncontrol(0); [pool release]; }