Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
W
wolf3d
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PocketInsanity
wolf3d
Commits
47bb8aa7
Commit
47bb8aa7
authored
Dec 10, 2000
by
Steven Fuller
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Removed unused files
parent
095e8f06
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
1 addition
and
1336 deletions
+1
-1336
Makefile
macsrc/Makefile
+1
-17
vi_glxm.c
macsrc/vi_glxm.c
+0
-674
vi_sdl.c
macsrc/vi_sdl.c
+0
-32
vi_xm.c
macsrc/vi_xm.c
+0
-613
No files found.
macsrc/Makefile
View file @
47bb8aa7
...
@@ -26,10 +26,8 @@ LFLAGS = -lm
...
@@ -26,10 +26,8 @@ LFLAGS = -lm
SLFLAGS
=
$(LFLAGS)
-lvga
SLFLAGS
=
$(LFLAGS)
-lvga
#XLFLAGS = $(LFLAGS) -L/usr/X11R6/lib -lX11 -lXext -lXxf86vm -lXxf86dga
#XLFLAGS = $(LFLAGS) -L/usr/X11R6/lib -lX11 -lXext -lXxf86vm -lXxf86dga
XLFLAGS
=
$(LFLAGS)
-L
/usr/X11R6/lib
-lX11
XLFLAGS
=
$(LFLAGS)
-L
/usr/X11R6/lib
-lX11
XMLFLAGS
=
$(LFLAGS)
-L
/usr/X11R6/lib
-lX11
-L
/usr/local/motif/lib
GLFLAGS
=
$(LFLAGS)
`
gtk-config
--libs
`
# -L/usr/X11R6/lib -lX11 -lXi -lXext -lgdk -lgtk
GLFLAGS
=
$(LFLAGS)
`
gtk-config
--libs
`
# -L/usr/X11R6/lib -lX11 -lXi -lXext -lgdk -lgtk
GLLFLAGS
=
$(LFLAGS)
-L
/usr/lib
-L
/usr/X11R6/lib
-lX11
-lXext
-lGL
GLLFLAGS
=
$(LFLAGS)
-L
/usr/lib
-L
/usr/X11R6/lib
-lX11
-lXext
-lGL
GLXMLFLAGS
=
$(LFLAGS)
-L
/usr/lib
-L
/usr/X11R6/lib
-L
/usr/local/motif/lib
-lX11
-lXext
-lGL
NASM
=
nasm
NASM
=
nasm
...
@@ -39,43 +37,29 @@ all: swolf3d xwolf3d glwolf3d
...
@@ -39,43 +37,29 @@ all: swolf3d xwolf3d glwolf3d
$(SOBJS)
:
Sounds.h Sprites.h States.h Wolf.h burger.h wolfdef.h
$(SOBJS)
:
Sounds.h Sprites.h States.h Wolf.h burger.h wolfdef.h
$(XOBJS)
:
Sounds.h Sprites.h States.h Wolf.h burger.h wolfdef.h
$(XOBJS)
:
Sounds.h Sprites.h States.h Wolf.h burger.h wolfdef.h
$(XMOBJS)
:
Sounds.h Sprites.h States.h Wolf.h burger.h wolfdef.h
$(GOBJS)
:
Sounds.h Sprites.h States.h Wolf.h burger.h wolfdef.h
$(GOBJS)
:
Sounds.h Sprites.h States.h Wolf.h burger.h wolfdef.h
$(GLOBJS)
:
Sounds.h Sprites.h States.h Wolf.h burger.h wolfdef.h
$(GLOBJS)
:
Sounds.h Sprites.h States.h Wolf.h burger.h wolfdef.h
$(GLXMOBJS)
:
Sounds.h Sprites.h States.h Wolf.h burger.h wolfdef.h
.asm.o
:
.asm.o
:
$(NASM)
-f
elf
-o
$@
$<
$(NASM)
-f
elf
-o
$@
$<
vi_xm.o
:
vi_xm.c
gcc
-c
vi_xm.c
$(CFLAGS)
-I
/usr/local/motif/include
vi_gtk.o
:
vi_gtk.c
vi_gtk.o
:
vi_gtk.c
gcc
-c
vi_gtk.c
$(CFLAGS)
`
gtk-config
--cflags
`
gcc
-c
vi_gtk.c
$(CFLAGS)
`
gtk-config
--cflags
`
vi_glxm.o
:
vi_glxm.c
gcc
-c
vi_glxm.c
$(CFLAGS)
-I
/usr/local/motif/include
swolf3d
:
$(SOBJS)
swolf3d
:
$(SOBJS)
gcc
-o
swolf3d
$(SOBJS)
$(SLFLAGS)
gcc
-o
swolf3d
$(SOBJS)
$(SLFLAGS)
xwolf3d
:
$(XOBJS)
xwolf3d
:
$(XOBJS)
gcc
-o
xwolf3d
$(XOBJS)
$(XLFLAGS)
gcc
-o
xwolf3d
$(XOBJS)
$(XLFLAGS)
xmwolf3d
:
$(XMOBJS)
gcc
-o
xmwolf3d
$(XMOBJS)
$(XMLFLAGS)
gwolf3d
:
$(GOBJS)
gwolf3d
:
$(GOBJS)
gcc
-o
gwolf3d
$(GOBJS)
$(GLFLAGS)
gcc
-o
gwolf3d
$(GOBJS)
$(GLFLAGS)
glwolf3d
:
$(GLOBJS)
glwolf3d
:
$(GLOBJS)
gcc
-o
glwolf3d
$(GLOBJS)
$(GLLFLAGS)
gcc
-o
glwolf3d
$(GLOBJS)
$(GLLFLAGS)
glxmwolf3d
:
$(GLXMOBJS)
gcc
-o
glxmwolf3d
$(GLXMOBJS)
$(GLXMLFLAGS)
clean
:
clean
:
rm
-rf
swolf3d xwolf3d gwolf3d glwolf3d
xmwolf3d glxmwolf3d
*
.o
rm
-rf
swolf3d xwolf3d gwolf3d glwolf3d
*
.o
distclean
:
clean
distclean
:
clean
rm
-rf
core
*
~ DEADJOE
rm
-rf
core
*
~ DEADJOE
...
...
macsrc/vi_glxm.c
deleted
100644 → 0
View file @
095e8f06
/*
Copyright (C) 1992-1994 Id Software, Inc.
Copyright (C) 2000 Steven Fuller <relnev@atdot.org>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <getopt.h>
#include <setjmp.h>
#include <Xm/MainW.h>
#include <X11/keysym.h>
#include <GL/gl.h>
#include <GL/glx.h>
#include <GL/glext.h>
#include "wolfdef.h"
Display
*
dpy
;
int
screen
;
Window
win
,
root
;
XVisualInfo
*
vi
;
GLXContext
ctx
;
Atom
wmDeleteWindow
;
#ifdef GL_EXT_shared_texture_palette
extern
int
UseSharedTexturePalette
;
extern
PFNGLCOLORTABLEEXTPROC
pglColorTableEXT
;
#endif
extern
int
CheckToken
(
const
char
*
str
,
const
char
*
item
);
int
VidWidth
,
VidHeight
,
ViewHeight
;
int
HandleEvents
();
extern
jmp_buf
ResetJmp
;
extern
Boolean
JumpOK
;
int
attrib
[]
=
{
GLX_RGBA
,
GLX_RED_SIZE
,
5
,
GLX_GREEN_SIZE
,
5
,
GLX_BLUE_SIZE
,
5
,
GLX_DEPTH_SIZE
,
16
,
GLX_DOUBLEBUFFER
,
None
};
int
main
(
int
argc
,
char
*
argv
[])
{
XSetWindowAttributes
attr
;
Colormap
cmap
;
Pixmap
bitmap
;
Cursor
cursor
;
XColor
bg
=
{
0
};
XColor
fg
=
{
0
};
char
data
[
8
]
=
{
0x01
};
char
*
display
;
const
char
*
ext
;
int
mask
,
major
,
minor
,
verbose
=
0
;
int
opt
;
while
((
opt
=
getopt
(
argc
,
argv
,
"v"
))
!=
-
1
)
{
switch
(
opt
)
{
case
'v'
:
verbose
=
1
;
break
;
default:
fprintf
(
stderr
,
"%d (%c) is unknown to me
\n
"
,
opt
,
opt
);
break
;
}
}
if
((
argc
-
optind
)
!=
1
)
{
fprintf
(
stderr
,
"usage: %s <mac wolf3d resource fork>
\n
"
,
argv
[
0
]);
exit
(
EXIT_FAILURE
);
}
if
(
InitResources
(
argv
[
optind
]))
{
fprintf
(
stderr
,
"could not load %s
\n
"
,
argv
[
optind
]);
exit
(
EXIT_FAILURE
);
}
display
=
getenv
(
"DISPLAY"
);
dpy
=
XOpenDisplay
(
getenv
(
display
));
if
(
dpy
==
NULL
)
{
fprintf
(
stderr
,
"Unable to open display %s
\n
"
,
XDisplayName
(
display
));
exit
(
EXIT_FAILURE
);
}
screen
=
DefaultScreen
(
dpy
);
root
=
RootWindow
(
dpy
,
screen
);
if
(
glXQueryExtension
(
dpy
,
NULL
,
NULL
)
==
False
)
{
fprintf
(
stderr
,
"Display %s does not support the GLX Extension
\n
"
,
XDisplayName
(
display
));
exit
(
EXIT_FAILURE
);
}
if
(
glXQueryVersion
(
dpy
,
&
major
,
&
minor
)
==
False
)
{
fprintf
(
stderr
,
"glXQueryVersion returned False?
\n
"
);
exit
(
EXIT_FAILURE
);
}
else
if
(
verbose
)
{
printf
(
"GLX Version %d.%d
\n
"
,
major
,
minor
);
printf
(
"GLX Client:
\n
"
);
printf
(
"GLX_VENDOR: %s
\n
"
,
glXGetClientString
(
dpy
,
GLX_VENDOR
));
printf
(
"GLX_VERSION: %s
\n
"
,
glXGetClientString
(
dpy
,
GLX_VERSION
));
printf
(
"GLX_EXTENSIONS: %s
\n
"
,
glXGetClientString
(
dpy
,
GLX_EXTENSIONS
));
printf
(
"GLX Server:
\n
"
);
printf
(
"GLX_VENDOR: %s
\n
"
,
glXQueryServerString
(
dpy
,
screen
,
GLX_VENDOR
));
printf
(
"GLX_VERSION: %s
\n
"
,
glXQueryServerString
(
dpy
,
screen
,
GLX_VERSION
));
printf
(
"GLX_EXTENSIONS: %s
\n
"
,
glXQueryServerString
(
dpy
,
screen
,
GLX_EXTENSIONS
));
printf
(
"Both:
\n
"
);
printf
(
"GLX_EXTENSIONS: %s
\n
"
,
glXQueryExtensionsString
(
dpy
,
screen
));
}
vi
=
glXChooseVisual
(
dpy
,
screen
,
attrib
);
if
(
vi
==
NULL
)
{
fprintf
(
stderr
,
"No usable GL visual found on %s:%d
\n
"
,
XDisplayName
(
display
),
screen
);
exit
(
EXIT_FAILURE
);
}
ctx
=
glXCreateContext
(
dpy
,
vi
,
NULL
,
True
);
if
(
ctx
==
NULL
)
{
fprintf
(
stderr
,
"GLX context creation failed
\n
"
);
exit
(
EXIT_FAILURE
);
}
cmap
=
XCreateColormap
(
dpy
,
root
,
vi
->
visual
,
AllocNone
);
attr
.
colormap
=
cmap
;
attr
.
event_mask
=
KeyPressMask
|
KeyReleaseMask
|
ExposureMask
|
StructureNotifyMask
;
mask
=
CWColormap
|
CWEventMask
;
win
=
XCreateWindow
(
dpy
,
root
,
0
,
0
,
640
,
480
,
0
,
CopyFromParent
,
InputOutput
,
vi
->
visual
,
mask
,
&
attr
);
if
(
win
==
None
)
{
fprintf
(
stderr
,
"Unable to create window
\n
"
);
exit
(
EXIT_FAILURE
);
}
XSetWMProperties
(
dpy
,
win
,
NULL
,
NULL
,
argv
,
argc
,
None
,
None
,
None
);
XStoreName
(
dpy
,
win
,
"Wolfenstein 3D"
);
XSetIconName
(
dpy
,
win
,
"Wolfenstein 3D"
);
wmDeleteWindow
=
XInternAtom
(
dpy
,
"WM_DELETE_WINDOW"
,
False
);
XSetWMProtocols
(
dpy
,
win
,
&
wmDeleteWindow
,
1
);
bitmap
=
XCreateBitmapFromData
(
dpy
,
win
,
data
,
8
,
8
);
cursor
=
XCreatePixmapCursor
(
dpy
,
bitmap
,
bitmap
,
&
fg
,
&
bg
,
0
,
0
);
XDefineCursor
(
dpy
,
win
,
cursor
);
glXMakeCurrent
(
dpy
,
win
,
ctx
);
if
(
verbose
)
{
printf
(
"GL Library:
\n
"
);
printf
(
"GL_VENDOR: %s
\n
"
,
glGetString
(
GL_VENDOR
));
printf
(
"GL_RENDERER: %s
\n
"
,
glGetString
(
GL_RENDERER
));
printf
(
"GL_VERSION: %s
\n
"
,
glGetString
(
GL_VERSION
));
printf
(
"GL_EXTENSIONS: %s
\n
"
,
glGetString
(
GL_EXTENSIONS
));
}
XMapWindow
(
dpy
,
win
);
XFlush
(
dpy
);
ext
=
(
const
char
*
)
glGetString
(
GL_EXTENSIONS
);
#ifdef GL_EXT_shared_texture_palette
UseSharedTexturePalette
=
0
;
if
(
CheckToken
(
ext
,
"GL_EXT_shared_texture_palette"
))
{
pglColorTableEXT
=
glXGetProcAddressARB
((
unsigned
const
char
*
)
"glColorTableEXT"
);
if
(
pglColorTableEXT
)
{
UseSharedTexturePalette
=
1
;
printf
(
"GL_EXT_shared_texture_palette found...
\n
"
);
}
}
#endif
glShadeModel
(
GL_FLAT
);
InitData
();
SlowDown
=
1
;
GameViewSize
=
3
;
NewGameWindow
(
GameViewSize
);
ClearTheScreen
(
BLACK
);
BlastScreen
();
/* NoEnemies = 1; */
return
WolfMain
(
argc
,
argv
);
}
void
Quit
(
char
*
str
)
{
FreeResources
();
glXDestroyContext
(
dpy
,
ctx
);
if
(
str
&&
*
str
)
{
fprintf
(
stderr
,
"%s
\n
"
,
str
);
exit
(
EXIT_FAILURE
);
}
exit
(
EXIT_SUCCESS
);
}
void
BlastScreen2
(
Rect
*
BlastRect
)
{
BlastScreen
();
}
#define w VidWidth
#define h VidHeight
#define v ViewHeight
void
BlastScreen
()
{
GLint
error
;
glXSwapBuffers
(
dpy
,
win
);
error
=
glGetError
();
if
(
error
!=
GL_NO_ERROR
)
{
do
{
fprintf
(
stderr
,
"GL Error: %d
\n
"
,
error
);
error
=
glGetError
();
}
while
(
error
!=
GL_NO_ERROR
);
exit
(
EXIT_FAILURE
);
}
}
Word
VidXs
[]
=
{
320
,
512
,
640
,
640
};
Word
VidYs
[]
=
{
200
,
384
,
400
,
480
};
Word
VidVs
[]
=
{
160
,
320
,
320
,
400
};
Word
VidPics
[]
=
{
rFaceShapes
,
rFace512
,
rFace640
,
rFace640
};
Word
VidSize
=
-
1
;
Word
NewGameWindow
(
Word
NewVidSize
)
{
XSizeHints
sizehints
;
if
(
NewVidSize
==
VidSize
)
return
VidSize
;
if
(
NewVidSize
<
4
)
{
w
=
VidXs
[
NewVidSize
];
h
=
VidYs
[
NewVidSize
];
v
=
VidVs
[
NewVidSize
];
}
else
{
fprintf
(
stderr
,
"Invalid Vid size: %d
\n
"
,
NewVidSize
);
exit
(
EXIT_FAILURE
);
}
sizehints
.
min_width
=
w
;
sizehints
.
min_height
=
h
;
sizehints
.
flags
=
PMinSize
;
XSetWMNormalHints
(
dpy
,
win
,
&
sizehints
);
XResizeWindow
(
dpy
,
win
,
w
,
h
);
SetAPalette
(
rBlackPal
);
ClearTheScreen
(
BLACK
);
BlastScreen
();
VidSize
=
NewVidSize
;
XSync
(
dpy
,
False
);
glXWaitGL
();
glXWaitX
();
HandleEvents
();
return
VidSize
;
}
/* Keyboard Hack */
static
int
RSJ
;
static
int
keys
[
128
];
void
FlushKeys
()
{
joystick1
=
0
;
memset
(
keys
,
0
,
sizeof
(
keys
));
}
struct
{
char
code
[
13
];
}
CheatCodes
[]
=
{
{
"XUSCNIELPPA"
},
{
"IDDQD"
},
{
"BURGER"
},
{
"WOWZERS"
},
{
"LEDOUX"
},
{
"SEGER"
},
{
"MCCALL"
},
{
"APPLEIIGS"
}
};
const
int
CheatCount
=
sizeof
(
CheatCodes
)
/
sizeof
(
CheatCodes
[
0
]);
int
CheatIndex
;
#define SC_CURSORUPLEFT 1
#define SC_CURSORUP 2
#define SC_CURSORUPRIGHT 3
#define SC_CURSORRIGHT 4
#define SC_CURSORDOWNRIGHT 5
#define SC_CURSORDOWN 6
#define SC_CURSORDOWNLEFT 7
#define SC_CURSORLEFT 8
#define SC_CURSORBLOCKLEFT 9
#define SC_CURSORBLOCKRIGHT 10
#define SC_CURSORBLOCKUP 11
#define SC_CURSORBLOCKDOWN 12
#define SC_KEYPADENTER 13
#define SC_ENTER 14
#define SC_SPACE 15
#define SC_LEFTALT 16
#define SC_RIGHTALT 17
#define SC_LEFTCONTROL 18
#define SC_RIGHTCONTROL 19
#define SC_LEFTSHIFT 20
#define SC_RIGHTSHIFT 21
#define SC_B 22
void
UpdateKeys
(
KeySym
key
,
int
press
)
{
switch
(
key
)
{
case
XK_KP_Home
:
keys
[
SC_CURSORUPLEFT
]
=
press
;
break
;
case
XK_KP_Up
:
keys
[
SC_CURSORUP
]
=
press
;
break
;
case
XK_KP_Page_Up
:
keys
[
SC_CURSORUPRIGHT
]
=
press
;
break
;
case
XK_KP_Right
:
keys
[
SC_CURSORRIGHT
]
=
press
;
break
;
case
XK_KP_Page_Down
:
keys
[
SC_CURSORDOWNRIGHT
]
=
press
;
break
;
case
XK_KP_Down
:
keys
[
SC_CURSORDOWN
]
=
press
;
break
;
case
XK_KP_End
:
keys
[
SC_CURSORDOWNLEFT
]
=
press
;
break
;
case
XK_KP_Left
:
keys
[
SC_CURSORLEFT
]
=
press
;
break
;
case
XK_Up
:
keys
[
SC_CURSORBLOCKUP
]
=
press
;
break
;
case
XK_Down
:
keys
[
SC_CURSORBLOCKDOWN
]
=
press
;
break
;
case
XK_Left
:
keys
[
SC_CURSORBLOCKLEFT
]
=
press
;
break
;
case
XK_Right
:
keys
[
SC_CURSORBLOCKRIGHT
]
=
press
;
break
;
case
XK_KP_Enter
:
keys
[
SC_KEYPADENTER
]
=
press
;
break
;
case
XK_Return
:
keys
[
SC_ENTER
]
=
press
;
break
;
case
XK_space
:
keys
[
SC_SPACE
]
=
press
;
break
;
case
XK_Alt_L
:
keys
[
SC_LEFTALT
]
=
press
;
break
;
case
XK_Alt_R
:
keys
[
SC_RIGHTALT
]
=
press
;
break
;
case
XK_Control_L
:
keys
[
SC_LEFTCONTROL
]
=
press
;
break
;
case
XK_Control_R
:
keys
[
SC_RIGHTCONTROL
]
=
press
;
break
;
case
XK_Shift_L
:
keys
[
SC_LEFTSHIFT
]
=
press
;
break
;
case
XK_Shift_R
:
keys
[
SC_RIGHTSHIFT
]
=
press
;
break
;
case
XK_b
:
keys
[
SC_B
]
=
press
;
break
;
}
}
void
keyboard_handler
(
KeySym
keycode
,
int
press
)
{
int
i
;
UpdateKeys
(
keycode
,
press
);
if
(
press
==
0
)
{
switch
(
keycode
)
{
case
XK_Escape
:
Quit
(
NULL
);
/* fast way out */
case
XK_F2
:
if
(
playstate
==
EX_STILLPLAYING
)
{
if
(
!
SaveGame
(
"wolf3d.sav"
))
fprintf
(
stderr
,
"Unable to save game
\n
"
);
}
break
;
case
XK_F3
:
if
(
!
LoadGame
(
"wolf3d.sav"
))
{
fprintf
(
stderr
,
"Unable to load game
\n
"
);
}
else
{
longjmp
(
ResetJmp
,
EX_LOADGAME
);
}
break
;
default:
break
;
}
}
if
(
RSJ
)
{
if
(
press
==
0
)
{
for
(
i
=
0
;
i
<
CheatCount
;
i
++
)
{
char
*
key
=
XKeysymToString
(
keycode
);
if
(
key
==
NULL
)
break
;
if
(
strlen
(
key
)
!=
1
)
break
;
if
(
CheatCodes
[
i
].
code
[
CheatIndex
]
==
toupper
(
key
[
0
]))
{
CheatIndex
++
;
if
(
CheatCodes
[
i
].
code
[
CheatIndex
]
==
0
)
{
PlaySound
(
SND_BONUS
);
switch
(
i
)
{
case
0
:
case
4
:
GiveKey
(
0
);
GiveKey
(
1
);
gamestate
.
godmode
=
TRUE
;
break
;
case
1
:
gamestate
.
godmode
^=
TRUE
;
break
;
case
2
:
gamestate
.
machinegun
=
TRUE
;
gamestate
.
chaingun
=
TRUE
;
gamestate
.
flamethrower
=
TRUE
;
gamestate
.
missile
=
TRUE
;
GiveAmmo
(
gamestate
.
maxammo
);
GiveGas
(
99
);
GiveMissile
(
99
);
break
;
case
3
:
gamestate
.
maxammo
=
999
;
GiveAmmo
(
999
);
break
;
case
5
:
GiveKey
(
0
);
GiveKey
(
1
);
break
;
case
6
:
playstate
=
EX_WARPED
;
nextmap
=
gamestate
.
mapon
+
1
;
if
(
MapListPtr
->
MaxMap
<=
nextmap
)
nextmap
=
0
;
break
;
case
7
:
ShowPush
^=
TRUE
;
break
;
}
CheatIndex
=
0
;
}
break
;
}
}
if
(
i
==
CheatCount
)
CheatIndex
=
0
;
}
joystick1
=
0
;
if
(
press
==
0
)
{
switch
(
keycode
)
{
case
XK_1
:
gamestate
.
pendingweapon
=
WP_KNIFE
;
break
;
case
XK_2
:
if
(
gamestate
.
ammo
)
{
gamestate
.
pendingweapon
=
WP_PISTOL
;
}
break
;
case
XK_3
:
if
(
gamestate
.
ammo
&&
gamestate
.
machinegun
)
{
gamestate
.
pendingweapon
=
WP_MACHINEGUN
;
}
break
;
case
XK_4
:
if
(
gamestate
.
ammo
&&
gamestate
.
chaingun
)
{
gamestate
.
pendingweapon
=
WP_CHAINGUN
;
}
break
;
case
XK_5
:
if
(
gamestate
.
gas
&&
gamestate
.
flamethrower
)
{
gamestate
.
pendingweapon
=
WP_FLAMETHROWER
;
}
break
;
case
XK_6
:
if
(
gamestate
.
missiles
&&
gamestate
.
missile
)
{
gamestate
.
pendingweapon
=
WP_MISSILE
;
}
break
;
case
XK_period
:
case
XK_slash
:
joystick1
=
JOYPAD_START
;
break
;
}
}
if
(
keys
[
SC_CURSORUPLEFT
])
joystick1
|=
(
JOYPAD_UP
|
JOYPAD_LFT
);
if
(
keys
[
SC_CURSORUP
])
joystick1
|=
JOYPAD_UP
;
if
(
keys
[
SC_CURSORUPRIGHT
])
joystick1
|=
(
JOYPAD_UP
|
JOYPAD_RGT
);
if
(
keys
[
SC_CURSORRIGHT
])
joystick1
|=
JOYPAD_RGT
;
if
(
keys
[
SC_CURSORDOWNRIGHT
])
joystick1
|=
(
JOYPAD_DN
|
JOYPAD_RGT
);
if
(
keys
[
SC_CURSORDOWN
])
joystick1
|=
JOYPAD_DN
;
if
(
keys
[
SC_CURSORDOWNLEFT
])
joystick1
|=
(
JOYPAD_DN
|
JOYPAD_LFT
);
if
(
keys
[
SC_CURSORLEFT
])
joystick1
|=
JOYPAD_LFT
;
if
(
keys
[
SC_CURSORBLOCKLEFT
])
joystick1
|=
JOYPAD_LFT
;
if
(
keys
[
SC_CURSORBLOCKRIGHT
])
joystick1
|=
JOYPAD_RGT
;
if
(
keys
[
SC_CURSORBLOCKUP
])
joystick1
|=
JOYPAD_UP
;
if
(
keys
[
SC_CURSORBLOCKDOWN
])
joystick1
|=
JOYPAD_DN
;
if
(
keys
[
SC_KEYPADENTER
])
joystick1
|=
JOYPAD_A
;
if
(
keys
[
SC_ENTER
])
joystick1
|=
JOYPAD_A
;
if
(
keys
[
SC_SPACE
])
joystick1
|=
JOYPAD_A
;
if
(
keys
[
SC_LEFTALT
])
joystick1
|=
JOYPAD_TR
;
if
(
keys
[
SC_RIGHTALT
])
joystick1
|=
JOYPAD_TR
;
if
(
keys
[
SC_LEFTCONTROL
])
joystick1
|=
JOYPAD_B
;
if
(
keys
[
SC_RIGHTCONTROL
])
joystick1
|=
JOYPAD_B
;
if
(
keys
[
SC_LEFTSHIFT
])
joystick1
|=
(
JOYPAD_X
|
JOYPAD_Y
);
if
(
keys
[
SC_RIGHTSHIFT
])
joystick1
|=
(
JOYPAD_X
|
JOYPAD_Y
);
if
((
joystick1
&
(
JOYPAD_LFT
|
JOYPAD_RGT
))
==
(
JOYPAD_LFT
|
JOYPAD_RGT
))
joystick1
&=
~
(
JOYPAD_LFT
|
JOYPAD_RGT
);
if
((
joystick1
&
(
JOYPAD_UP
|
JOYPAD_DN
))
==
(
JOYPAD_UP
|
JOYPAD_DN
))
joystick1
&=
~
(
JOYPAD_UP
|
JOYPAD_DN
);
if
(
joystick1
&
JOYPAD_TR
)
{
if
(
joystick1
&
JOYPAD_LFT
)
{
joystick1
=
(
joystick1
&
~
(
JOYPAD_TR
|
JOYPAD_LFT
))
|
JOYPAD_TL
;
}
else
if
(
joystick1
&
JOYPAD_RGT
)
{
joystick1
=
joystick1
&
~
JOYPAD_RGT
;
}
else
{
joystick1
&=
~
JOYPAD_TR
;
}
}
}
}
int
HandleEvents
()
{
XEvent
event
;
int
ret
=
0
;
if
(
XPending
(
dpy
))
{
do
{
XNextEvent
(
dpy
,
&
event
);
switch
(
event
.
type
)
{
case
KeyPress
:
keyboard_handler
(
XKeycodeToKeysym
(
dpy
,
event
.
xkey
.
keycode
,
0
),
1
);
ret
=
1
;
break
;
case
KeyRelease
:
keyboard_handler
(
XKeycodeToKeysym
(
dpy
,
event
.
xkey
.
keycode
,
0
),
0
);
ret
=
0
;
break
;
case
Expose
:
RedrawScreen
();
break
;
case
ConfigureNotify
:
glViewport
(
0
,
0
,
event
.
xconfigure
.
width
,
event
.
xconfigure
.
height
);
glPixelZoom
(
1
.
0
f
,
-
1
.
0
f
);
glRasterPos2f
(
-
1
.
0
f
,
1
.
0
f
);
RedrawScreen
();
break
;
case
ClientMessage
:
if
(
event
.
xclient
.
data
.
l
[
0
]
==
wmDeleteWindow
)
Quit
(
NULL
);
break
;
default:
break
;
}
}
while
(
XPending
(
dpy
));
}
return
ret
;
}
void
ReadSystemJoystick
()
{
RSJ
=
1
;
HandleEvents
();
}
int
DoEvents
()
{
RSJ
=
0
;
if
(
HandleEvents
())
{
if
(
keys
[
SC_B
])
{
/* Special */
return
'B'
;
}
return
1
;
}
return
0
;
}
Word
ChooseGameDiff
()
{
/* 0 = easy, 1 = normal, 2 = hard, 3 = death incarnate */
difficulty
=
1
;
SetAPalette
(
rGamePal
);
return
1
;
}
macsrc/vi_sdl.c
deleted
100644 → 0
View file @
095e8f06
/*
Copyright (C) 1992-1994 Id Software, Inc.
Copyright (C) 2000 Steven Fuller <relnev@atdot.org>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <sdl.h>
#include "wolfdef.h"
/*
This is currently unimplemented.
*/
int
main
(
int
argc
,
char
*
argv
[])
{
fprintf
(
stderr
,
"TO BE IMPLEMENTED
\n
"
);
}
macsrc/vi_xm.c
deleted
100644 → 0
View file @
095e8f06
/*
Copyright (C) 1992-1994 Id Software, Inc.
Copyright (C) 2000 Steven Fuller <relnev@atdot.org>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/keysym.h>
#include "wolfdef.h"
Display
*
dpy
;
int
screen
;
Window
win
,
root
;
XVisualInfo
*
vi
;
GC
gc
;
XImage
*
img
;
Colormap
cmap
;
Atom
wmDeleteWindow
;
XColor
clr
[
256
];
Byte
*
gfxbuf
;
int
main
(
int
argc
,
char
*
argv
[])
{
XSetWindowAttributes
attr
;
XVisualInfo
vitemp
;
XGCValues
gcvalues
;
Pixmap
bitmap
;
Cursor
cursor
;
XColor
bg
=
{
0
};
XColor
fg
=
{
0
};
char
data
[
8
]
=
{
0x01
};
char
*
display
;
int
mask
,
i
;
if
(
argc
!=
2
)
{
fprintf
(
stderr
,
"usage: %s <mac wolf3d resource fork>
\n
"
,
argv
[
0
]);
exit
(
EXIT_FAILURE
);
}
if
(
InitResources
(
argv
[
1
]))
{
fprintf
(
stderr
,
"could not load %s
\n
"
,
argv
[
1
]);
exit
(
EXIT_FAILURE
);
}
display
=
getenv
(
"DISPLAY"
);
dpy
=
XOpenDisplay
(
getenv
(
display
));
if
(
dpy
==
NULL
)
{
fprintf
(
stderr
,
"Unable to open display %s
\n
"
,
XDisplayName
(
display
));
exit
(
EXIT_FAILURE
);
}
screen
=
DefaultScreen
(
dpy
);
root
=
RootWindow
(
dpy
,
screen
);
vitemp
.
screen
=
screen
;
vitemp
.
depth
=
8
;
vitemp
.
class
=
PseudoColor
;
mask
=
VisualScreenMask
|
VisualDepthMask
|
VisualClassMask
;
vi
=
XGetVisualInfo
(
dpy
,
mask
,
&
vitemp
,
&
i
);
if
(
!
(
vi
&&
i
)
)
{
fprintf
(
stderr
,
"Unable to get a depth 8 PseudoColor visual on screen %d
\n
"
,
screen
);
exit
(
EXIT_FAILURE
);
}
cmap
=
XCreateColormap
(
dpy
,
root
,
vi
->
visual
,
AllocAll
);
for
(
i
=
0
;
i
<
256
;
i
++
)
{
clr
[
i
].
pixel
=
i
;
clr
[
i
].
flags
=
DoRed
|
DoGreen
|
DoBlue
;
}
attr
.
colormap
=
cmap
;
attr
.
event_mask
=
KeyPressMask
|
KeyReleaseMask
|
ExposureMask
;
mask
=
CWColormap
|
CWEventMask
;
win
=
XCreateWindow
(
dpy
,
root
,
0
,
0
,
320
,
200
,
0
,
CopyFromParent
,
InputOutput
,
vi
->
visual
,
mask
,
&
attr
);
if
(
win
==
None
)
{
fprintf
(
stderr
,
"Unable to create window
\n
"
);
exit
(
EXIT_FAILURE
);
}
gcvalues
.
foreground
=
BlackPixel
(
dpy
,
screen
);
gcvalues
.
background
=
WhitePixel
(
dpy
,
screen
);
mask
=
GCForeground
|
GCBackground
;
gc
=
XCreateGC
(
dpy
,
win
,
mask
,
&
gcvalues
);
XSetWMProperties
(
dpy
,
win
,
NULL
,
NULL
,
argv
,
argc
,
None
,
None
,
None
);
XStoreName
(
dpy
,
win
,
"Wolfenstein 3D"
);
XSetIconName
(
dpy
,
win
,
"Wolfenstein 3D"
);
wmDeleteWindow
=
XInternAtom
(
dpy
,
"WM_DELETE_WINDOW"
,
False
);
XSetWMProtocols
(
dpy
,
win
,
&
wmDeleteWindow
,
1
);
bitmap
=
XCreateBitmapFromData
(
dpy
,
win
,
data
,
8
,
8
);
cursor
=
XCreatePixmapCursor
(
dpy
,
bitmap
,
bitmap
,
&
fg
,
&
bg
,
0
,
0
);
XDefineCursor
(
dpy
,
win
,
cursor
);
XMapWindow
(
dpy
,
win
);
XFlush
(
dpy
);
InitData
();
GameViewSize
=
3
;
NewGameWindow
(
GameViewSize
);
ClearTheScreen
(
BLACK
);
BlastScreen
();
return
WolfMain
(
argc
,
argv
);
}
void
Quit
(
char
*
str
)
{
FreeResources
();
if
(
img
)
XDestroyImage
(
img
);
if
(
str
&&
*
str
)
{
fprintf
(
stderr
,
"%s
\n
"
,
str
);
exit
(
EXIT_FAILURE
);
}
exit
(
EXIT_SUCCESS
);
}
void
SetPalette
(
Byte
*
pal
)
{
int
i
;
for
(
i
=
0
;
i
<
256
;
i
++
)
{
clr
[
i
].
red
=
pal
[
i
*
3
+
0
]
<<
8
;
clr
[
i
].
green
=
pal
[
i
*
3
+
1
]
<<
8
;
clr
[
i
].
blue
=
pal
[
i
*
3
+
2
]
<<
8
;
}
XStoreColors
(
dpy
,
cmap
,
clr
,
256
);
}
void
BlastScreen2
(
Rect
*
BlastRect
)
{
BlastScreen
();
}
int
VidWidth
,
VidHeight
,
ViewHeight
;
#define w VidWidth
#define h VidHeight
#define v ViewHeight
void
BlastScreen
()
{
XPutImage
(
dpy
,
win
,
gc
,
img
,
0
,
0
,
0
,
0
,
w
,
h
);
}
Word
VidXs
[]
=
{
320
,
512
,
640
,
640
};
/* Screen sizes to play with */
Word
VidYs
[]
=
{
200
,
384
,
400
,
480
};
Word
VidVs
[]
=
{
160
,
320
,
320
,
400
};
Word
VidPics
[]
=
{
rFaceShapes
,
rFace512
,
rFace640
,
rFace640
};
Word
VidSize
=
-
1
;
Word
NewGameWindow
(
Word
NewVidSize
)
{
XSizeHints
sizehints
;
LongWord
*
LongPtr
;
Byte
*
DestPtr
;
int
i
;
printf
(
"Called: %d
\n
"
,
NewVidSize
);
if
(
NewVidSize
==
VidSize
)
return
VidSize
;
printf
(
"Setting Size: %d (from %d)
\n
"
,
NewVidSize
,
VidSize
);
if
(
NewVidSize
<
4
)
{
w
=
VidXs
[
NewVidSize
];
h
=
VidYs
[
NewVidSize
];
v
=
VidVs
[
NewVidSize
];
}
else
{
fprintf
(
stderr
,
"Invalid Vid size: %d
\n
"
,
NewVidSize
);
exit
(
EXIT_FAILURE
);
}
if
(
img
)
{
XDestroyImage
(
img
);
/* free(gfxbuf); */
}
sizehints
.
min_width
=
sizehints
.
max_width
=
sizehints
.
base_width
=
w
;
sizehints
.
min_height
=
sizehints
.
max_height
=
sizehints
.
base_height
=
h
;
sizehints
.
flags
=
PMinSize
|
PMaxSize
|
PBaseSize
;
XSetWMNormalHints
(
dpy
,
win
,
&
sizehints
);
XResizeWindow
(
dpy
,
win
,
w
,
h
);
gfxbuf
=
(
Byte
*
)
malloc
(
w
*
h
);
img
=
XCreateImage
(
dpy
,
vi
->
visual
,
vi
->
depth
,
ZPixmap
,
0
,
(
char
*
)
gfxbuf
,
w
,
h
,
8
,
w
);
if
(
img
==
NULL
)
{
fprintf
(
stderr
,
"XCreateImage returned NULL, Unable to create an XImage
\n
"
);
exit
(
EXIT_FAILURE
);
}
VideoPointer
=
gfxbuf
;
VideoWidth
=
w
;
InitYTable
();
SetAPalette
(
rBlackPal
);
ClearTheScreen
(
BLACK
);
BlastScreen
();
LongPtr
=
(
LongWord
*
)
LoadAResource
(
VidPics
[
NewVidSize
]);
if
(
GameShapes
)
FreeSomeMem
(
GameShapes
);
GameShapes
=
(
Byte
**
)
AllocSomeMem
(
lMSB
(
LongPtr
[
0
]));
DLZSS
((
Byte
*
)
GameShapes
,
(
Byte
*
)
&
LongPtr
[
1
],
lMSB
(
LongPtr
[
0
]));
ReleaseAResource
(
VidPics
[
NewVidSize
]);
LongPtr
=
(
LongWord
*
)
GameShapes
;
DestPtr
=
(
Byte
*
)
GameShapes
;
for
(
i
=
0
;
i
<
((
NewVidSize
==
1
)
?
57
:
47
);
i
++
)
GameShapes
[
i
]
=
DestPtr
+
lMSB
(
LongPtr
[
i
]);
VidSize
=
NewVidSize
;
return
VidSize
;
}
/* Keyboard Hack */
static
int
RSJ
;
static
int
keys
[
128
];
void
FlushKeys
()
{
joystick1
=
0
;
memset
(
keys
,
0
,
sizeof
(
keys
));
}
struct
{
char
code
[
13
];
}
CheatCodes
[]
=
{
{
"XUSCNIELPPA"
},
/* "XUSCNIELPPA" */
{
"IDDQD"
},
/* "IDDQD" */
{
"BURGER"
},
/* "BURGER" */
{
"WOWZERS"
},
/* "WOWZERS" */
{
"LEDOUX"
},
/* "LEDOUX" */
{
"SEGER"
},
/* "SEGER" */
{
"MCCALL"
},
/* "MCCALL" */
{
"APPLEIIGS"
}
/* "APPLEIIGS" */
};
const
int
CheatCount
=
sizeof
(
CheatCodes
)
/
sizeof
(
CheatCodes
[
0
]);
int
CheatIndex
;
#define SC_CURSORUPLEFT 1
#define SC_CURSORUP 2
#define SC_CURSORUPRIGHT 3
#define SC_CURSORRIGHT 4
#define SC_CURSORDOWNRIGHT 5
#define SC_CURSORDOWN 6
#define SC_CURSORDOWNLEFT 7
#define SC_CURSORLEFT 8
#define SC_CURSORBLOCKLEFT 9
#define SC_CURSORBLOCKRIGHT 10
#define SC_CURSORBLOCKUP 11
#define SC_CURSORBLOCKDOWN 12
#define SC_KEYPADENTER 13
#define SC_ENTER 14
#define SC_SPACE 15
#define SC_LEFTALT 16
#define SC_RIGHTALT 17
#define SC_LEFTCONTROL 18
#define SC_RIGHTCONTROL 19
#define SC_LEFTSHIFT 20
#define SC_RIGHTSHIFT 21
#define SC_B 22
void
UpdateKeys
(
KeySym
key
,
int
press
)
{
switch
(
key
)
{
case
XK_KP_Home
:
keys
[
SC_CURSORUPLEFT
]
=
press
;
break
;
case
XK_KP_Up
:
keys
[
SC_CURSORUP
]
=
press
;
break
;
case
XK_KP_Page_Up
:
keys
[
SC_CURSORUPRIGHT
]
=
press
;
break
;
case
XK_KP_Right
:
keys
[
SC_CURSORRIGHT
]
=
press
;
break
;
case
XK_KP_Page_Down
:
keys
[
SC_CURSORDOWNRIGHT
]
=
press
;
break
;
case
XK_KP_Down
:
keys
[
SC_CURSORDOWN
]
=
press
;
break
;
case
XK_KP_End
:
keys
[
SC_CURSORDOWNLEFT
]
=
press
;
break
;
case
XK_KP_Left
:
keys
[
SC_CURSORLEFT
]
=
press
;
break
;
case
XK_Up
:
keys
[
SC_CURSORBLOCKUP
]
=
press
;
break
;
case
XK_Down
:
keys
[
SC_CURSORBLOCKDOWN
]
=
press
;
break
;
case
XK_Left
:
keys
[
SC_CURSORBLOCKLEFT
]
=
press
;
break
;
case
XK_Right
:
keys
[
SC_CURSORBLOCKRIGHT
]
=
press
;
break
;
case
XK_KP_Enter
:
keys
[
SC_KEYPADENTER
]
=
press
;
break
;
case
XK_Return
:
keys
[
SC_ENTER
]
=
press
;
break
;
case
XK_space
:
keys
[
SC_SPACE
]
=
press
;
break
;
case
XK_Alt_L
:
keys
[
SC_LEFTALT
]
=
press
;
break
;
case
XK_Alt_R
:
keys
[
SC_RIGHTALT
]
=
press
;
break
;
case
XK_Control_L
:
keys
[
SC_LEFTCONTROL
]
=
press
;
break
;
case
XK_Control_R
:
keys
[
SC_RIGHTCONTROL
]
=
press
;
break
;
case
XK_Shift_L
:
keys
[
SC_LEFTSHIFT
]
=
press
;
break
;
case
XK_Shift_R
:
keys
[
SC_RIGHTSHIFT
]
=
press
;
break
;
case
XK_b
:
keys
[
SC_B
]
=
press
;
break
;
}
}
void
keyboard_handler
(
KeySym
keycode
,
int
press
)
{
int
i
;
UpdateKeys
(
keycode
,
press
);
if
(
RSJ
)
{
if
(
press
==
0
)
{
for
(
i
=
0
;
i
<
CheatCount
;
i
++
)
{
char
*
key
=
XKeysymToString
(
keycode
);
if
(
key
==
NULL
)
break
;
if
(
strlen
(
key
)
!=
1
)
break
;
if
(
CheatCodes
[
i
].
code
[
CheatIndex
]
==
toupper
(
key
[
0
]))
{
CheatIndex
++
;
if
(
CheatCodes
[
i
].
code
[
CheatIndex
]
==
0
)
{
PlaySound
(
SND_BONUS
);
switch
(
i
)
{
case
0
:
case
4
:
GiveKey
(
0
);
GiveKey
(
1
);
gamestate
.
godmode
=
TRUE
;
break
;
case
1
:
gamestate
.
godmode
^=
TRUE
;
break
;
case
2
:
gamestate
.
machinegun
=
TRUE
;
gamestate
.
chaingun
=
TRUE
;
gamestate
.
flamethrower
=
TRUE
;
gamestate
.
missile
=
TRUE
;
GiveAmmo
(
gamestate
.
maxammo
);
GiveGas
(
99
);
GiveMissile
(
99
);
break
;
case
3
:
gamestate
.
maxammo
=
999
;
GiveAmmo
(
999
);
break
;
case
5
:
GiveKey
(
0
);
GiveKey
(
1
);
break
;
case
6
:
playstate
=
EX_WARPED
;
nextmap
=
gamestate
.
mapon
+
1
;
if
(
MapListPtr
->
MaxMap
<=
nextmap
)
nextmap
=
0
;
break
;
case
7
:
ShowPush
^=
TRUE
;
break
;
}
CheatIndex
=
0
;
}
break
;
}
}
if
(
i
==
CheatCount
)
CheatIndex
=
0
;
}
joystick1
=
0
;
if
(
press
==
0
)
{
switch
(
keycode
)
{
case
XK_1
:
gamestate
.
pendingweapon
=
WP_KNIFE
;
break
;
case
XK_2
:
if
(
gamestate
.
ammo
)
{
gamestate
.
pendingweapon
=
WP_PISTOL
;
}
break
;
case
XK_3
:
if
(
gamestate
.
ammo
&&
gamestate
.
machinegun
)
{
gamestate
.
pendingweapon
=
WP_MACHINEGUN
;
}
break
;
case
XK_4
:
if
(
gamestate
.
ammo
&&
gamestate
.
chaingun
)
{
gamestate
.
pendingweapon
=
WP_CHAINGUN
;
}
break
;
case
XK_5
:
if
(
gamestate
.
gas
&&
gamestate
.
flamethrower
)
{
gamestate
.
pendingweapon
=
WP_FLAMETHROWER
;
}
break
;
case
XK_6
:
if
(
gamestate
.
missiles
&&
gamestate
.
missile
)
{
gamestate
.
pendingweapon
=
WP_MISSILE
;
}
break
;
case
XK_period
:
case
XK_slash
:
joystick1
=
JOYPAD_START
;
break
;
case
XK_Escape
:
Quit
(
NULL
);
/* fast way out */
}
}
if
(
keys
[
SC_CURSORUPLEFT
])
joystick1
|=
(
JOYPAD_UP
|
JOYPAD_LFT
);
if
(
keys
[
SC_CURSORUP
])
joystick1
|=
JOYPAD_UP
;
if
(
keys
[
SC_CURSORUPRIGHT
])
joystick1
|=
(
JOYPAD_UP
|
JOYPAD_RGT
);
if
(
keys
[
SC_CURSORRIGHT
])
joystick1
|=
JOYPAD_RGT
;
if
(
keys
[
SC_CURSORDOWNRIGHT
])
joystick1
|=
(
JOYPAD_DN
|
JOYPAD_RGT
);
if
(
keys
[
SC_CURSORDOWN
])
joystick1
|=
JOYPAD_DN
;
if
(
keys
[
SC_CURSORDOWNLEFT
])
joystick1
|=
(
JOYPAD_DN
|
JOYPAD_LFT
);
if
(
keys
[
SC_CURSORLEFT
])
joystick1
|=
JOYPAD_LFT
;
if
(
keys
[
SC_CURSORBLOCKLEFT
])
joystick1
|=
JOYPAD_LFT
;
if
(
keys
[
SC_CURSORBLOCKRIGHT
])
joystick1
|=
JOYPAD_RGT
;
if
(
keys
[
SC_CURSORBLOCKUP
])
joystick1
|=
JOYPAD_UP
;
if
(
keys
[
SC_CURSORBLOCKDOWN
])
joystick1
|=
JOYPAD_DN
;
if
(
keys
[
SC_KEYPADENTER
])
joystick1
|=
JOYPAD_A
;
if
(
keys
[
SC_ENTER
])
joystick1
|=
JOYPAD_A
;
if
(
keys
[
SC_SPACE
])
joystick1
|=
JOYPAD_A
;
if
(
keys
[
SC_LEFTALT
])
joystick1
|=
JOYPAD_TR
;
if
(
keys
[
SC_RIGHTALT
])
joystick1
|=
JOYPAD_TR
;
if
(
keys
[
SC_LEFTCONTROL
])
joystick1
|=
JOYPAD_B
;
if
(
keys
[
SC_RIGHTCONTROL
])
joystick1
|=
JOYPAD_B
;
if
(
keys
[
SC_LEFTSHIFT
])
joystick1
|=
(
JOYPAD_X
|
JOYPAD_Y
);
if
(
keys
[
SC_RIGHTSHIFT
])
joystick1
|=
(
JOYPAD_X
|
JOYPAD_Y
);
}
if
((
joystick1
&
(
JOYPAD_LFT
|
JOYPAD_RGT
))
==
(
JOYPAD_LFT
|
JOYPAD_RGT
))
joystick1
&=
~
(
JOYPAD_LFT
|
JOYPAD_RGT
);
if
((
joystick1
&
(
JOYPAD_UP
|
JOYPAD_DN
))
==
(
JOYPAD_UP
|
JOYPAD_DN
))
joystick1
&=
~
(
JOYPAD_UP
|
JOYPAD_DN
);
if
(
joystick1
&
JOYPAD_TR
)
{
if
(
joystick1
&
JOYPAD_LFT
)
{
joystick1
=
(
joystick1
&
~
(
JOYPAD_TR
|
JOYPAD_LFT
))
|
JOYPAD_TL
;
}
else
if
(
joystick1
&
JOYPAD_RGT
)
{
joystick1
=
joystick1
&
~
JOYPAD_RGT
;
}
else
{
joystick1
&=
~
JOYPAD_TR
;
}
}
}
int
HandleEvents
()
{
XEvent
event
;
int
ret
=
0
;
if
(
XPending
(
dpy
))
{
do
{
XNextEvent
(
dpy
,
&
event
);
switch
(
event
.
type
)
{
case
KeyPress
:
keyboard_handler
(
XKeycodeToKeysym
(
dpy
,
event
.
xkey
.
keycode
,
0
),
1
);
ret
=
1
;
break
;
case
KeyRelease
:
keyboard_handler
(
XKeycodeToKeysym
(
dpy
,
event
.
xkey
.
keycode
,
0
),
0
);
ret
=
0
;
break
;
case
Expose
:
BlastScreen
();
break
;
case
ClientMessage
:
if
(
event
.
xclient
.
data
.
l
[
0
]
==
wmDeleteWindow
)
Quit
(
NULL
);
break
;
default:
break
;
}
}
while
(
XPending
(
dpy
));
}
return
ret
;
}
void
ReadSystemJoystick
()
{
RSJ
=
1
;
HandleEvents
();
}
int
DoEvents
()
{
RSJ
=
0
;
if
(
HandleEvents
())
{
if
(
keys
[
SC_B
])
{
/* Special */
return
'B'
;
}
return
1
;
}
return
0
;
}
Word
ChooseGameDiff
()
{
/* 0 = easy, 1 = normal, 2 = hard, 3 = death incarnate */
difficulty
=
1
;
SetAPalette
(
rGamePal
);
return
1
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment