summaryrefslogtreecommitdiff
path: root/games
diff options
context:
space:
mode:
authoragc <agc@pkgsrc.org>2001-04-27 15:27:30 +0000
committeragc <agc@pkgsrc.org>2001-04-27 15:27:30 +0000
commitdc08309f80881a990abf850361df242f7f3aab3c (patch)
treeebfd163c1446b7fd3b971894066499b0c12fb552 /games
parentf03393a1685494fd69c2bc1b00cabe6e8cd5cfee (diff)
downloadpkgsrc-dc08309f80881a990abf850361df242f7f3aab3c.tar.gz
Initial import of ularn-6.12.92 into the packages collection.
Provided in PR 12072 by Ben Collver (collver@linuxfreemail.com). Ularn is a fantasy games in which your child has contracted a strange dis- ease, and none of your home remedies seem to have any effect. You set out to find a remedy in a limited amount of time, and to collect gold along the way of course! Ularn is based on larn, and adds the concept of character classes.
Diffstat (limited to 'games')
-rw-r--r--games/ularn/Makefile32
-rw-r--r--games/ularn/distinfo34
-rw-r--r--games/ularn/patches/patch-aa58
-rw-r--r--games/ularn/patches/patch-ab157
-rw-r--r--games/ularn/patches/patch-ac87
-rw-r--r--games/ularn/patches/patch-ad143
-rw-r--r--games/ularn/patches/patch-ae288
-rw-r--r--games/ularn/patches/patch-af65
-rw-r--r--games/ularn/patches/patch-ag259
-rw-r--r--games/ularn/patches/patch-ah1175
-rw-r--r--games/ularn/patches/patch-ai13
-rw-r--r--games/ularn/patches/patch-aj13
-rw-r--r--games/ularn/patches/patch-ak63
-rw-r--r--games/ularn/patches/patch-al309
-rw-r--r--games/ularn/patches/patch-am15
-rw-r--r--games/ularn/patches/patch-an119
-rw-r--r--games/ularn/patches/patch-ao13
-rw-r--r--games/ularn/patches/patch-ap471
-rw-r--r--games/ularn/patches/patch-aq94
-rw-r--r--games/ularn/patches/patch-ar70
-rw-r--r--games/ularn/patches/patch-as56
-rw-r--r--games/ularn/patches/patch-at291
-rw-r--r--games/ularn/patches/patch-au317
-rw-r--r--games/ularn/patches/patch-av19
-rw-r--r--games/ularn/patches/patch-aw243
-rw-r--r--games/ularn/patches/patch-ax198
-rw-r--r--games/ularn/patches/patch-ay145
-rw-r--r--games/ularn/patches/patch-az76
-rw-r--r--games/ularn/patches/patch-ba50
-rw-r--r--games/ularn/patches/patch-bb316
-rw-r--r--games/ularn/patches/patch-bc81
-rw-r--r--games/ularn/patches/patch-bd79
-rw-r--r--games/ularn/pkg/DESCR6
-rw-r--r--games/ularn/pkg/MESSAGE6
-rw-r--r--games/ularn/pkg/PLIST6
35 files changed, 5367 insertions, 0 deletions
diff --git a/games/ularn/Makefile b/games/ularn/Makefile
new file mode 100644
index 00000000000..12247133412
--- /dev/null
+++ b/games/ularn/Makefile
@@ -0,0 +1,32 @@
+# $NetBSD: Makefile,v 1.1.1.1 2001/04/27 15:27:30 agc Exp $
+
+DISTNAME= ularn
+PKGNAME= ularn-6.12.92
+CATEGORIES= games
+MASTER_SITES= ftp://ftp.win.tue.nl/pub/games/larn/ \
+ http://amaterasu.math.orst.edu:8080/~sharpej/
+
+MAINTAINER= collver@linuxfreemail.com
+HOMEPAGE= http://www.win.tue.nl/games/roguelike/larn/
+COMMENT= fantasy roguelike game based on vintage larn
+
+NO_WRKSUBDIR= yes
+HAS_CONFIGURE= # defined
+CONFIGURE_ENV+= PREFIX=${LOCALBASE}
+CONFIGURE_SCRIPT= ./Configure
+CONFIGURE_ARGS+= -d
+
+pre-configure:
+ ${MV} ${WRKSRC}/Configure ${WRKSRC}/Configure.template
+ ${SED} 's:XXXLIBDIRXXX:${LOCALBASE}/share/Ularn:;\
+ s:XXXBINDIRXXX:${LOCALBASE}/bin:' \
+ <${WRKSRC}/Configure.template \
+ >${WRKSRC}/Configure
+ ${CHMOD} u+x ${WRKSRC}/Configure
+
+post-install:
+ ${CHGRP} games ${LOCALBASE}/bin/Ularn
+ ${CHMOD} g+s ${LOCALBASE}/bin/Ularn
+ ${CHMOD} g+w ${LOCALBASE}/share/Ularn
+
+.include "../../mk/bsd.pkg.mk"
diff --git a/games/ularn/distinfo b/games/ularn/distinfo
new file mode 100644
index 00000000000..f10eccca43c
--- /dev/null
+++ b/games/ularn/distinfo
@@ -0,0 +1,34 @@
+$NetBSD: distinfo,v 1.1.1.1 2001/04/27 15:27:30 agc Exp $
+
+SHA1 (ularn.tar.gz) = abc5bbecca65968e9ddaf2a8d07ac5141009459d
+Size (ularn.tar.gz) = 142790 bytes
+SHA1 (patch-aa) = 83e99ee4fa571b7d4a937f95a26990297f7dc22c
+SHA1 (patch-ab) = a45fec8456da7b2b1985dc2332ede80082b2dab4
+SHA1 (patch-ac) = 859fb4ae3782658d2f2cf29d11da67a901499e61
+SHA1 (patch-ad) = ecf9b099ac8df2b86a9c45c0cf76c7caf194f64b
+SHA1 (patch-ae) = 6232c2735b01a275f840c458bf78618094c99e27
+SHA1 (patch-af) = 252c2f2d318189efc9ab5d2ec78ff78c3d54fb68
+SHA1 (patch-ag) = 85dd443611465ddb3fc9819e8d69dd6028fa6fe7
+SHA1 (patch-ah) = ad5134994d8280fd3331a214eb5321b3cd541ed3
+SHA1 (patch-ai) = 43b9a2fb45a2a52347f0a83efca5ba70c3c58989
+SHA1 (patch-aj) = 34336ad095ecbba9c28cea1cb8f6d0d8023251a6
+SHA1 (patch-ak) = d2cb3bda3c2e95868362a0d0dcf4bb584d6df987
+SHA1 (patch-al) = cb3b13211c8897e0138347c74557dcbb7d318244
+SHA1 (patch-am) = 1df190db775f3d2278275894f18246e4897738e0
+SHA1 (patch-an) = 8c669a56795a8b4a2a6e24fd2fb121aa0699c01a
+SHA1 (patch-ao) = 42a184fea3408fc935f3dcc62b7a127e81b71085
+SHA1 (patch-ap) = a46a3b27d2f5ac9e4479ac77bf193636608b42a4
+SHA1 (patch-aq) = e5b1e4a63d242316d9db3184b4f3e5ab62b4271c
+SHA1 (patch-ar) = 51494cad1ac3db43eece043df920797d9213a61c
+SHA1 (patch-as) = faec3ca3cd3d0ded4f0cf0740fd856dbecbd0841
+SHA1 (patch-at) = f0fd98ce48e779e63122a8311d4a4223cda5a751
+SHA1 (patch-au) = 09f12532f42d39b59381d12c115842d5c7b8c7f3
+SHA1 (patch-av) = 028b49f03ca8e63f1adee5eb82460de2855aa6cb
+SHA1 (patch-aw) = 4e0e0501946928775e80f831f081fde887ddb67d
+SHA1 (patch-ax) = 31f39079aeb8ccf490cc7fbbd1d3c70d9f0737ed
+SHA1 (patch-ay) = 72bc4da5ec2006f3b1b4f29afec085e13f94ed11
+SHA1 (patch-az) = a2fbfbfacc77f297f77322ce66f30bf25bddbbfd
+SHA1 (patch-ba) = be841fd37db8b8f0b588076f032c213d3eecb2f5
+SHA1 (patch-bb) = 5500e86403adc57c8315c4df66a13b851e74ef1c
+SHA1 (patch-bc) = b2a894056c94cf6b21c614b000fb9de0744f0268
+SHA1 (patch-bd) = 54063f569eb03349b888d0dfaf02b7dcf15f7321
diff --git a/games/ularn/patches/patch-aa b/games/ularn/patches/patch-aa
new file mode 100644
index 00000000000..e34f3bcb173
--- /dev/null
+++ b/games/ularn/patches/patch-aa
@@ -0,0 +1,58 @@
+$NetBSD: patch-aa,v 1.1.1.1 2001/04/27 15:27:32 agc Exp $
+
+--- Configure.orig Wed Jan 18 11:41:26 1995
++++ Configure Sun Jan 28 16:18:39 2001
+@@ -58,7 +58,7 @@
+ medium=''
+ large=''
+ huge=''
+-ccflags=''
++ccflags='-g -Wall -Wno-comment'
+ ldflags=''
+ cc=''
+ n=''
+@@ -98,7 +98,7 @@
+ uncompress=''
+ imake=''
+ xmkmf=''
+-bindir=''
++bindir='XXXBINDIRXXX'
+ d_drand48=''
+ d_havetlib=''
+ termlib=''
+@@ -107,7 +107,7 @@
+ d_random=''
+ defcomp=''
+ imaketmpl=''
+-libdir=''
++libdir='XXXLIBDIRXXX'
+ mycompress=''
+ myuncompress=''
+ CONFIG=''
+@@ -187,7 +187,7 @@
+ c='\c'
+ fi
+ echo $n "Type carriage return to continue. Your cursor should be here-->$c"
+-read ans
++#read ans
+ rm -f .echotmp
+
+ : now set up to do reads with possible shell escape and default assignment
+@@ -1361,6 +1361,8 @@
+ ;;
+ esac
+
++termlib="$termlib -lcompat"
++
+ echo " "
+ echo "End of configuration questions."
+ echo " "
+@@ -1520,7 +1522,7 @@
+ echo "If you didn't make any mistakes, then just type a carriage return here."
+ rp="If you need to edit config.sh, do it as a shell escape here:"
+ $echo $n "$rp $c"
+-. UU/myread
++#. UU/myread
+ case "$ans" in
+ '') ;;
+ *) : in case they cannot read
diff --git a/games/ularn/patches/patch-ab b/games/ularn/patches/patch-ab
new file mode 100644
index 00000000000..713609599ec
--- /dev/null
+++ b/games/ularn/patches/patch-ab
@@ -0,0 +1,157 @@
+$NetBSD: patch-ab,v 1.1.1.1 2001/04/27 15:27:30 agc Exp $
+
+--- action.c.orig Sat Jan 13 16:20:10 2001
++++ action.c Sat Jan 13 17:54:58 2001
+@@ -4,7 +4,7 @@
+ #include "player.h"
+ #include "extern.h"
+
+-run (dir)
++void run (dir)
+ int dir;
+ {
+ int i;
+@@ -27,7 +27,7 @@
+ /*
+ function to wield a weapon
+ */
+-wield ()
++void wield ()
+ {
+ int i;
+
+@@ -56,14 +56,14 @@
+ /*
+ common routine to say you don't have an item
+ */
+-ydhi (x)
++void ydhi (x)
+ int x;
+ {
+ cursors();
+ lprintf("\nYou don't have item %c!",x);
+ }
+
+-ycwi (x)
++void ycwi (x)
+ int x;
+ {
+ cursors();
+@@ -73,7 +73,7 @@
+ /*
+ function to wear armor
+ */
+-wear ()
++void wear ()
+ {
+ int i;
+
+@@ -124,10 +124,10 @@
+ /*
+ function to drop an object
+ */
+-dropobj ()
++void dropobj ()
+ {
+ int i, pitflag=0;
+- char *p;
++ int *p;
+ long amt;
+
+ p = &item[playerx][playery];
+@@ -197,7 +197,7 @@
+ /*
+ * readscr() Subroutine to read a scroll one is carrying
+ */
+-readscr ()
++void readscr ()
+ {
+ int i;
+
+@@ -230,39 +230,40 @@
+ /*
+ * subroutine to eat a cookie one is carrying
+ */
+-eatcookie ()
++void eatcookie ()
+ {
+ int i;
+ char *fortune(), *p;
+
+ while (1) {
+- if ((i = whatitem("eat"))==ESC)
+- return;
+- if (i != '.')
+- if (i=='*')
+- showeat();
+- else {
+- if (iven[i-'a']==OCOOKIE) {
+- lprcat("\nThe cookie was delicious.");
+- iven[i-'a']=0;
+- if (!c[BLINDCOUNT]) {
+- if ((p=fortune(fortfile))!=0) {
+- lprcat(" Inside you find a scrap of paper that says:\n");
+- lprcat(p);
++ if ((i = whatitem("eat"))==ESC)
++ return;
++ if (i != '.') {
++ if (i=='*') {
++ showeat();
++ } else {
++ if (iven[i-'a']==OCOOKIE) {
++ lprcat("\nThe cookie was delicious.");
++ iven[i-'a']=0;
++ if (!c[BLINDCOUNT]) {
++ if ((p=fortune(fortfile))!=0) {
++ lprcat(" Inside you find a scrap of paper that says:\n");
++ lprcat(p);
++ }
++ }
++ return;
+ }
++ if (iven[i-'a']==0) { ydhi(i); return; }
++ lprcat("\nYou can't eat that!"); return;
+ }
+- return;
+ }
+- if (iven[i-'a']==0) { ydhi(i); return; }
+- lprcat("\nYou can't eat that!"); return;
+- }
+ }
+ }
+
+ /*
+ * subroutine to quaff a potion one is carrying
+ */
+-quaff ()
++void quaff ()
+ {
+ int i;
+
+@@ -289,7 +290,7 @@
+ }
+ }
+
+-qwhatitem ()
++int qwhatitem ()
+ {
+ int j, i=0;
+ char tmp[IVENSIZE];
+@@ -316,7 +317,7 @@
+ /*
+ function to ask what player wants to do
+ */
+-whatitem (str)
++int whatitem (str)
+ char *str;
+ {
+ int j=0, flag=0, i=0;
+@@ -440,7 +441,7 @@
+ return (amt);
+ }
+
+-do_create()
++void do_create()
+ {
+ int t, a;
+
diff --git a/games/ularn/patches/patch-ac b/games/ularn/patches/patch-ac
new file mode 100644
index 00000000000..be9c6598c92
--- /dev/null
+++ b/games/ularn/patches/patch-ac
@@ -0,0 +1,87 @@
+$NetBSD: patch-ac,v 1.1.1.1 2001/04/27 15:27:31 agc Exp $
+
+--- bill.c.orig Sat Jan 13 17:22:51 2001
++++ bill.c Sat Jan 13 17:30:42 2001
+@@ -1,4 +1,10 @@
+ /* bill.c */
++#include <sys/types.h>
++#include <sys/uio.h>
++#include <sys/wait.h>
++#include <unistd.h>
++#include <stdlib.h>
++
+ #include "header.h"
+ #include "player.h"
+ #include "extern.h"
+@@ -7,7 +13,7 @@
+ static int pid;
+ long Taxes;
+
+-letter1()
++int letter1(void)
+ {
+ sprintf(mail600, "/tmp/#%dmail600",pid); /* prepare path */
+ if (lcreat(mail600) < 0) {
+@@ -33,7 +39,7 @@
+ return(1);
+ }
+
+-letter2 ()
++int letter2 (void)
+ {
+ sprintf(mail600,"/tmp/#%dmail600",pid); /* prepare path */
+ if (lcreat(mail600) < 0) {
+@@ -56,7 +62,7 @@
+ return(1);
+ }
+
+-letter3 ()
++int letter3 (void)
+ {
+ sprintf(mail600,"/tmp/#%dmail600",pid); /* prepare path */
+ if (lcreat(mail600) < 0) {
+@@ -82,7 +88,7 @@
+ return(1);
+ }
+
+-letter4 ()
++int letter4 (void)
+ {
+ sprintf(mail600,"/tmp/#%dmail600",pid); /* prepare path */
+ if (lcreat(mail600) < 0) {
+@@ -101,7 +107,7 @@
+ return(1);
+ }
+
+-letter5 ()
++int letter5 (void)
+ {
+ sprintf(mail600,"/tmp/#%dmail600",pid); /* prepare path */
+ if (lcreat(mail600) < 0) {
+@@ -126,7 +132,7 @@
+ return(1);
+ }
+
+-letter6 ()
++int letter6 (void)
+ {
+ sprintf(mail600,"/tmp/#%dmail600",pid); /* prepare path */
+ if (lcreat(mail600) < 0) {
+@@ -156,7 +162,7 @@
+ letter1, letter2, letter3, letter4, letter5, letter6
+ };
+
+-mailbill ()
++void mailbill (void)
+ {
+ int i;
+ char buf[128];
+@@ -168,7 +174,7 @@
+ for (i=0; i<sizeof(pfn)/sizeof(int (*)()); i++)
+ if (pfn[i]()) {
+ sleep(20);
+- sprintf(buf,"/bin/mail %s < %s",
++ sprintf(buf,"/usr/bin/mail %s < %s",
+ loginname,mail600);
+ system(buf);
+ unlink(mail600);
diff --git a/games/ularn/patches/patch-ad b/games/ularn/patches/patch-ad
new file mode 100644
index 00000000000..e25242259b8
--- /dev/null
+++ b/games/ularn/patches/patch-ad
@@ -0,0 +1,143 @@
+$NetBSD: patch-ad,v 1.1.1.1 2001/04/27 15:27:31 agc Exp $
+
+--- create.c.orig Fri Jun 19 13:55:34 1992
++++ create.c Sat Jan 13 21:52:52 2001
+@@ -1,4 +1,6 @@
+ /* create.c */
++#include <stdlib.h>
++
+ #include "header.h"
+ #include "monst.h"
+ #include "player.h"
+@@ -11,12 +13,12 @@
+ * subroutine to create the player and the players attributes
+ * this is called at the beginning of a game and at no other time
+ */
+-makeplayer ()
++void makeplayer ()
+ {
+ int i;
+
+ scbr();
+- clear();
++ ularn_clear();
+ c[LEVEL]=1; /* player starts at level one */
+ c[REGENCOUNTER]=16;
+ c[ECOUNTER]=96; /*start regeneration correctly*/
+@@ -49,7 +51,7 @@
+ * levels will get a few more monsters.
+ * Note that it is here we remove genocided monsters from the present level
+ */
+-newcavelevel (x)
++void newcavelevel (x)
+ int x;
+ {
+ int i,j;
+@@ -87,7 +89,7 @@
+ */
+ static int mx,mxl,mxh,my,myl,myh,tmp2;
+
+-makemaze (lev)
++void makemaze (lev)
+ int lev;
+ {
+ int i,j;
+@@ -160,7 +162,7 @@
+ /*
+ function to eat away a filled in maze
+ */
+-eat (xx,yy)
++void eat (xx,yy)
+ int xx, yy;
+ {
+ int dir,try;
+@@ -225,7 +227,7 @@
+ * ! cure dianthroritis - random object
+ */
+
+-cannedlevel (lev)
++int cannedlevel (lev)
+ int lev;
+ {
+ int i,j;
+@@ -307,7 +309,7 @@
+ * - level 10's treasure room has the eye in it and demon lords
+ * - level V5 has potion of cure dianthroritis and demon prince
+ */
+-treasureroom(lv)
++void treasureroom(lv)
+ int lv;
+ {
+ int tx,ty,xsize,ysize;
+@@ -329,7 +331,7 @@
+ * room is filled with objects and monsters
+ * the coordinate given is that of the upper left corner of the room
+ */
+-troom(lv,xsize,ysize,tx,ty,glyph)
++void troom(lv,xsize,ysize,tx,ty,glyph)
+ int lv,xsize,ysize,tx,ty,glyph;
+ {
+ int i,j;
+@@ -388,7 +390,7 @@
+ * ***********
+ * subroutine to create the objects in the maze for the given level
+ */
+-makeobject (j)
++void makeobject (j)
+ int j;
+ {
+ int i;
+@@ -612,7 +614,7 @@
+ /*
+ * subroutine to fill in a number of objects of the same kind
+ */
+-fillmroom(n,what,arg)
++void fillmroom(n,what,arg)
+ int n, what, arg;
+ {
+ int i;
+@@ -621,7 +623,7 @@
+ fillroom(what,arg);
+ }
+
+-froom(n,itm,arg)
++void froom(n,itm,arg)
+ int n, itm, arg;
+ {
+ if (rnd(151) < n)
+@@ -632,7 +634,7 @@
+ * subroutine to put an object into an empty room
+ * uses a random walk
+ */
+-fillroom (what,arg)
++void fillroom (what,arg)
+ int what, arg;
+ {
+ int x,y;
+@@ -659,7 +661,7 @@
+ * subroutine to put monsters into an empty room without walls or other
+ * monsters
+ */
+-fillmonst (what)
++int fillmonst (what)
+ int what;
+ {
+ int x,y,trys;
+@@ -684,7 +686,7 @@
+ * must be done when entering a new level
+ * if sethp(1) then wipe out old monsters else leave them there
+ */
+-sethp (flg)
++void sethp (flg)
+ int flg;
+ {
+ int i,j;
+@@ -738,7 +740,7 @@
+ /*
+ * Function to destroy all genocided monsters on the present level
+ */
+-checkgen ()
++void checkgen (void)
+ {
+ int x,y;
+
diff --git a/games/ularn/patches/patch-ae b/games/ularn/patches/patch-ae
new file mode 100644
index 00000000000..824aa89efec
--- /dev/null
+++ b/games/ularn/patches/patch-ae
@@ -0,0 +1,288 @@
+$NetBSD: patch-ae,v 1.1.1.1 2001/04/27 15:27:31 agc Exp $
+
+--- data.c.orig Fri Jun 19 13:55:29 1992
++++ data.c Sun Jan 14 13:42:03 2001
+@@ -114,27 +114,27 @@
+ char logname[LOGNAMESIZE]; /* players name storage for scoring */
+ char char_class[20]; /* character class */
+
+-short hitp[MAXX][MAXY]; /* monster hp on level */
+-short iarg[MAXX][MAXY]; /* arg for the item array */
+-short lastnum=0; /* the number of the monster last hitting player, or */
+- /* reason why dead */
++int hitp[MAXX][MAXY]; /* monster hp on level */
++int iarg[MAXX][MAXY]; /* arg for the item array */
++int lastnum=0; /* number of monster last hitting player, or */
++ /* reason why dead */
+
+-char compress
++int compress
+ #ifdef DEF_COMPRESS
+ = 1;
+ #else
+ = 0;
+ #endif
+-char item[MAXX][MAXY]; /* objects in maze if any */
+-char know[MAXX][MAXY]; /* 1 or 0 if here before */
+-/*char mitem[MAXX][MAXY]; /* monster item array */
+-char moved[MAXX][MAXY]; /* monster movement flags */
+-char stealth[MAXX][MAXY]; /* 0=sleeping 1=awake monst */
+-char iven[IVENSIZE]; /* inventory for player */
++int item[MAXX][MAXY]; /* objects in maze if any */
++int know[MAXX][MAXY]; /* 1 or 0 if here before */
++/*char mitem[MAXX][MAXY]; *//* monster item array */
++int moved[MAXX][MAXY]; /* monster movement flags */
++int stealth[MAXX][MAXY]; /* 0=sleeping 1=awake monst */
++int iven[IVENSIZE]; /* inventory for player */
+ short ivenarg[IVENSIZE]; /* inventory args for player */
+-char beenhere[NLEVELS]={0}; /* 1 if have been on this level */
+-char nosignal=0; /* set to 1 to disable the signals from doing anything*/
+-char predostuff=0; /*
++int beenhere[NLEVELS]={0}; /* 1 if have been on this level */
++int nosignal=0; /* set to 1 to disable the signals from doing anything*/
++int predostuff=0; /*
+ ** 2 means that the trap handling routines must do a
+ ** showplayer() after a trap. 0 means don't showplayer()
+ ** 0 - we are in create player screen
+@@ -142,27 +142,29 @@
+ ** 2 - we are in the normal game
+ */
+
+-char ramboflag=0;
+-char do_fork=0;
+-char sex=1; /* default is man, 0=woman */
+-char boldon=1; /* 1=bold objects, 0=inverse objects */
+-char mail=1; /* 1=mail letters after win game */
+-char ckpflag=0; /* 1 if want checkpointing of game, 0 otherwise */
+-char cheat=0; /* 1 if the player has fudged save file */
+-char level=0; /* cavelevel player is on = c[CAVELEVEL]*/
+-char wizard=0; /* the wizard mode flag */
+-char hitflag=0; /* flag for if player has been hit when running */
+-char hit2flag=0; /* flag for if player has been hit when running */
+-char hit3flag=0; /* flag for if player has been hit flush input*/
+-char playerx,playery; /* the room on the present level of the player*/
+-char lastpx,lastpy; /* 0 --- MAXX-1 or 0 --- MAXY-1 */
+-char oldx,oldy;
+-char lasthx=0,lasthy=0;/* location of monster last hit by player*/
+-char nobeep=0; /* true if program is not to beep*/
+-char char_picked; /* the character chosen */
+-
+-char enable_scroll=0; /* constant for enabled/disabled scrolling regn */
+-
++int ramboflag=0;
++int do_fork=0;
++int sex=1; /* default is man, 0=woman */
++int boldon=1; /* 1=bold objects, 0=inverse objects */
++int mail=1; /* 1=mail letters after win game */
++int ckpflag=0; /* 1 if want checkpointing of game, 0 otherwise */
++int cheat=0; /* 1 if the player has fudged save file */
++int level=0; /* cavelevel player is on = c[CAVELEVEL]*/
++int wizard=0; /* the wizard mode flag */
++int hitflag=0; /* flag for if player has been hit when running */
++int hit2flag=0; /* flag for if player has been hit when running */
++int hit3flag=0; /* flag for if player has been hit flush input*/
++int playerx,playery; /* the room on the present level of the player*/
++int oldx,oldy;
++int nobeep=0; /* true if program is not to beep*/
++int char_picked; /* the character chosen */
++
++int enable_scroll=0; /* constant for enabled/disabled scrolling regn */
++
++int lastpx; /* 0 --- MAXX-1 */
++int lastpy; /* 0 --- MAXY-1 */
++int lasthx = 0; /* location of monster last hit by player */
++int lasthy = 0; /* location of monster last hit by player */
+
+ long initialtime=0; /* time playing began */
+ long gtime=0; /* the clock for the game */
+@@ -289,7 +291,7 @@
+ *
+ * array to do rnd() to create monsters <= a given level
+ */
+-char monstlevel[] = {5, 11, 17, 22, 27, 33, 39, 42, 46, 50, 53, 56};
++int monstlevel[] = {5, 11, 17, 22, 27, 33, 39, 42, 46, 50, 53, 56};
+
+ struct monst monster[] = {
+
+@@ -380,82 +382,85 @@
+
+ /* name array for scrolls */
+ char *scrollname[MAXSCROLL] = {
+- "\0enchant armor",
+- "\0enchant weapon",
+- "\0enlightenment",
+- "\0blank paper",
+- "\0create monster",
+- "\0create artifact",
+- "\0aggravate monsters",
+- "\0time warp",
+- "\0teleportation",
+- "\0expanded awareness",
+- "\0haste monsters",
+- "\0monster healing",
+- "\0spirit protection",
+- "\0undead protection",
+- "\0stealth",
+- "\0magic mapping",
+- "\0hold monsters",
+- "\0gem perfection",
+- "\0spell extension",
+- "\0identify",
+- "\0remove curse",
+- "\0annihilation",
+- "\0pulverization",
+- "\0life protection",
+- "\0 ",
+- "\0 ",
+- "\0 ",
+- "\0 "
++ "enchant armor",
++ "enchant weapon",
++ "enlightenment",
++ "blank paper",
++ "create monster",
++ "create artifact",
++ "aggravate monsters",
++ "time warp",
++ "teleportation",
++ "expanded awareness",
++ "haste monsters",
++ "monster healing",
++ "spirit protection",
++ "undead protection",
++ "stealth",
++ "magic mapping",
++ "hold monsters",
++ "gem perfection",
++ "spell extension",
++ "identify",
++ "remove curse",
++ "annihilation",
++ "pulverization",
++ "life protection",
++ " ",
++ " ",
++ " ",
++ " "
+ };
+
++int scrollknown[MAXSCROLL];
++
+ /* name array for magic potions */
+ char *potionname[MAXPOTION] = {
+- "\0sleep",
+- "\0healing",
+- "\0raise level",
+- "\0increase ability",
+- "\0wisdom",
+- "\0strength",
+- "\0raise charisma",
+- "\0dizziness",
+- "\0learning",
+- "\0gold detection",
+- "\0monster detection",
+- "\0forgetfulness",
+- "\0water",
+- "\0blindness",
+- "\0confusion",
+- "\0heroism",
+- "\0sturdiness",
+- "\0giant strength",
+- "\0fire resistance",
+- "\0treasure finding",
+- "\0instant healing",
+- " cure dianthroritis",
+- "\0poison",
+- "\0see invisible",
+- "\0 ",
+- "\0 ",
+- "\0 ",
+- "\0 ",
+- "\0 ",
+- "\0 ",
+- "\0 ",
+- "\0 ",
+- "\0 ",
+- "\0 ",
+- "\0 "
++ "sleep",
++ "healing",
++ "raise level",
++ "increase ability",
++ "wisdom",
++ "strength",
++ "raise charisma",
++ "dizziness",
++ "learning",
++ "gold detection",
++ "monster detection",
++ "forgetfulness",
++ "water",
++ "blindness",
++ "confusion",
++ "heroism",
++ "sturdiness",
++ "giant strength",
++ "fire resistance",
++ "treasure finding",
++ "instant healing",
++ "cure dianthroritis",
++ "poison",
++ "see invisible",
++ " ",
++ " ",
++ " ",
++ " ",
++ " ",
++ " ",
++ " ",
++ " ",
++ " ",
++ " ",
++ " "
+ };
+
++int potionknown[MAXPOTION];
+
+ /*
+ ** i = rund((tmp=splev[lev])?tmp:1);
+ ** i = rnd((tmp=splev[lev]-9) ?tmp:1 ) + 9;
+ */
+-char spelknow[SPNUM]={0};
+-char splev[] = {
++int spelknow[SPNUM]={0};
++int splev[] = {
+ 1,4,7,11,15,
+ 20,24,28,30,32,
+ 33,34,35,36,37,
+@@ -762,7 +767,7 @@
+ * 20 - remove curse 21 - annihilation
+ * 22 - pulverization 23 - life protection
+ */
+-char scprob[]= {
++int scprob[]= {
+ 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3,
+ 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8,
+ 9, 9, 9, 9, 10, 10, 10, 10, 11, 11,
+@@ -800,15 +805,15 @@
+ * 22 - poison
+ * 23 - see invisible
+ */
+-char potprob[] = {
++int potprob[] = {
+ 0, 0, 1, 1, 1, 2, 3, 3, 4, 4,
+ 5, 5, 6, 6, 7, 7, 8, 9, 9, 9,
+ 10, 10, 10, 11, 11, 12, 12, 13, 14, 15,
+ 16, 17, 18, 19, 19, 20, 20, 22, 22, 23,
+ 23 }; /* 41 total */
+
+-char nlpts[] = { 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7 };
+-char nch[] = { 0, 0, 0, 1, 1, 1, 2, 2, 3, 4 };
+-char nplt[] = { 0, 0, 0, 0, 1, 1, 2, 2, 3, 4 };
+-char ndgg[] = { 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 4, 5 };
+-char nsw[] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 3 };
++int nlpts[] = { 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7 };
++int nch[] = { 0, 0, 0, 1, 1, 1, 2, 2, 3, 4 };
++int nplt[] = { 0, 0, 0, 0, 1, 1, 2, 2, 3, 4 };
++int ndgg[] = { 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 4, 5 };
++int nsw[] = { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 3 };
diff --git a/games/ularn/patches/patch-af b/games/ularn/patches/patch-af
new file mode 100644
index 00000000000..9a1b9efbdf1
--- /dev/null
+++ b/games/ularn/patches/patch-af
@@ -0,0 +1,65 @@
+$NetBSD: patch-af,v 1.1.1.1 2001/04/27 15:27:30 agc Exp $
+
+--- diag.c.orig Fri Jun 19 13:55:29 1992
++++ diag.c Sat Jan 13 17:52:26 2001
+@@ -61,7 +61,7 @@
+
+ FILE *dfile;
+
+-diag()
++void diag(void)
+ {
+ int i, j;
+
+@@ -75,10 +75,10 @@
+
+ fprintf(dfile, "Hit points: %2ld(%2ld)\n", c[HP], c[HPMAX]);
+
+- fprintf(dfile, "gold: %ld Experience: %ld Character level: %d Level in caverns: %ld\n",
+- (long) c[GOLD],
+- (long) c[EXPERIENCE],
+- (long) c[LEVEL],
++ fprintf(dfile, "gold: %ld Experience: %ld Character level: %ld Level in caverns: %d\n",
++ c[GOLD],
++ c[EXPERIENCE],
++ c[LEVEL],
+ level);
+
+ fprintf(dfile, "\nFor the c[] array:\n");
+@@ -143,12 +143,12 @@
+
+ fprintf(dfile, "\nAvailable potions:\n\n");
+ for (i = 0; i < MAXPOTION; i++)
+- fprintf(dfile, "%20s\n", &potionname[i][1]);
++ fprintf(dfile, "%20s\n", potionname[i]);
+ fflush(dfile);
+
+ fprintf(dfile, "\nAvailable scrolls:\n\n");
+ for (i = 0; i < MAXSCROLL; i++)
+- fprintf(dfile, "%20s\n", &scrollname[i][1]);
++ fprintf(dfile, "%20s\n", scrollname[i]);
+ fflush(dfile);
+
+ fprintf(dfile, "\nSpell list:\n\n");
+@@ -184,17 +184,16 @@
+ /*
+ draw the whole screen
+ */
+-diagdrawscreen()
++void diagdrawscreen(void)
+ {
+ int i, j, k;
+
+ /* east west walls of this line */
+ for (i = 0; i < MAXY; i++) {
+ for (j = 0; j < MAXX; j++)
+- if (k = mitem[j][i].mon)
+- fprintf(dfile, "%c", monstnamelist[k]);
+- else
+- fprintf(dfile, "%c", objnamelist[item[j][i]]);
++ k = mitem[j][i].mon;
++ fprintf(dfile, "%c",
++ k ? monstnamelist[k] : objnamelist[item[j][i]]);
+ fprintf(dfile, "\n");
+ }
+ }
diff --git a/games/ularn/patches/patch-ag b/games/ularn/patches/patch-ag
new file mode 100644
index 00000000000..029c06b9922
--- /dev/null
+++ b/games/ularn/patches/patch-ag
@@ -0,0 +1,259 @@
+$NetBSD: patch-ag,v 1.1.1.1 2001/04/27 15:27:31 agc Exp $
+
+--- display.c.orig Fri Jun 19 13:55:30 1992
++++ display.c Sat Jan 13 21:53:21 2001
+@@ -1,4 +1,5 @@
+ /* display.c */
++#include <stdlib.h>
+ #include "header.h"
+ #include "player.h"
+ #include "itm.h"
+@@ -8,7 +9,7 @@
+ static int minx,maxx,miny,maxy,k,m;
+ static char always=0;
+ char bot1f=0, bot2f=0, bot3f=0;
+-static char mimicmonst=MIMIC;
++static int mimicmonst=MIMIC;
+
+ #define botsub(idx,x,y,str) \
+ if (c[(idx)] != cbak[(idx)]) { \
+@@ -17,7 +18,7 @@
+ lprintf(str,c[(idx)]); \
+ }
+
+-bottomdo()
++void bottomdo(void)
+ {
+ if (bot1f) {
+ bot3f=bot1f=bot2f=0;
+@@ -35,12 +36,12 @@
+ }
+
+ /* update only the gold number on the bottomline, called from ogold() */
+-bottomgold() { botsub(GOLD,72,19,"%-8d"); }
++void bottomgold(void) { botsub(GOLD,72,19,"%-8d"); }
+
+ /* update number of spells called from regen() */
+-bot_spellx() { botsub(SPELLS,9,18,"%2d"); }
++void bot_spellx(void) { botsub(SPELLS,9,18,"%2d"); }
+
+-bot_linex()
++void bot_linex(void)
+ {
+ int i;
+ char buf[12];
+@@ -65,7 +66,7 @@
+ /* c[HP], c[HPMAX], c[STRENGTH]+c[STREXTRA], */
+ /* c[INTELLIGENCE]); */
+
+- sprintf(buf, "%d (%d)", c[HP], c[HPMAX]);
++ sprintf(buf, "%ld (%ld)", c[HP], c[HPMAX]);
+ /* 12345 111122 222222 3 */
+ /* 678901 345678 0 */
+ lprintf("HP: %11s STR=%-2d INT=%-2d ",
+@@ -147,7 +148,7 @@
+ special routine to update hp and level fields on bottom lines
+ called in monster.c hitplayer() and spattack()
+ */
+-bot_hpx()
++void bot_hpx(void)
+ {
+ if (c[EXPERIENCE] != cbak[EXPERIENCE]) {
+ recalc();
+@@ -164,26 +165,26 @@
+ int typ;
+ char *string;
+ } bot_data[] = {
+- STEALTH, "stealth",
+- UNDEADPRO, "undead pro",
+- SPIRITPRO, "spirit pro",
+- CHARMCOUNT, "Charm",
+- TIMESTOP, "Time Stop",
+- HOLDMONST, "Hold Monst",
+- GIANTSTR, "Giant Str",
+- FIRERESISTANCE,"Fire Resit",
+- DEXCOUNT, "Dexterity",
+- STRCOUNT, "Strength",
+- SCAREMONST, "Scare",
+- HASTESELF, "Haste Self",
+- CANCELLATION, "Cancel",
+- INVISIBILITY, "Invisible",
+- ALTPRO, "Protect 3",
+- PROTECTIONTIME, "Protect 2",
+- WTW, "Wall-Walk"
++ { STEALTH, "stealth" },
++ { UNDEADPRO, "undead pro" },
++ { SPIRITPRO, "spirit pro" },
++ { CHARMCOUNT, "Charm" },
++ { TIMESTOP, "Time Stop" },
++ { HOLDMONST, "Hold Monst" },
++ { GIANTSTR, "Giant Str" },
++ { FIRERESISTANCE, "Fire Resit" },
++ { DEXCOUNT, "Dexterity" },
++ { STRCOUNT, "Strength" },
++ { SCAREMONST, "Scare" },
++ { HASTESELF, "Haste Self" },
++ { CANCELLATION, "Cancel" },
++ { INVISIBILITY, "Invisible" },
++ { ALTPRO, "Protect 3" },
++ { PROTECTIONTIME, "Protect 2" },
++ { WTW, "Wall-Walk" },
+ };
+
+-botside()
++void botside(void)
+ {
+ int i,idx;
+
+@@ -208,7 +209,7 @@
+ always=0;
+ }
+
+-bothp()
++void bothp(void)
+ {
+ char buf[12];
+
+@@ -216,7 +217,7 @@
+ return;
+ cbak[HP]=c[HP];
+ cbak[HPMAX]=c[HPMAX];
+- sprintf(buf, "%d (%d)", c[HP], c[HPMAX]);
++ sprintf(buf, "%ld (%ld)", c[HP], c[HPMAX]);
+ cursor(5, 19);
+ lprintf("%11s", buf);
+ }
+@@ -230,7 +231,7 @@
+ d_xmax=MAXX,
+ d_ymin=0,
+ d_ymax=MAXY; /* for limited screen drawing */
+-draws(xmin,xmax,ymin,ymax)
++void draws(xmin,xmax,ymin,ymax)
+ int xmin,xmax,ymin,ymax;
+ {
+ int i,idx;
+@@ -272,14 +273,14 @@
+ **
+ ** redraw the whole screen as the player knows it
+ */
+-drawscreen()
++void drawscreen(void)
+ {
+ int i,j,k;
+ int lastx,lasty; /* used to optimize the object printing */
+
+ if (d_xmin==0 && d_xmax==MAXX && d_ymin==0 && d_ymax==MAXY) {
+ d_flag=1;
+- clear(); /* clear the screen */
++ ularn_clear(); /* clear the screen */
+ }
+ else {
+ d_flag=0;
+@@ -293,7 +294,8 @@
+ if (know[j][i]==0)
+ screen[j][i] = objnamelist[0];
+ else {
+- if (k=mitem[j][i].mon) {
++ k = mitem[j][i].mon;
++ if (k) {
+ if (k==MIMIC) {
+ if (gtime % 10 == 0)
+ while((mimicmonst = rnd(MAXMONST))==INVISIBLESTALKER);
+@@ -382,7 +384,7 @@
+ **
+ ** subroutine to display a cell location on the screen
+ */
+-showcell(x,y)
++void showcell(x,y)
+ int x,y;
+ {
+ int i,j,k,m;
+@@ -459,7 +461,7 @@
+ ** these coordinated are not shown
+ ** used in godirect() in monster.c for missile weapons display
+ */
+-show1cell(x,y)
++void show1cell(x,y)
+ int x,y;
+ {
+ if (c[BLINDCOUNT])
+@@ -504,7 +506,7 @@
+ ** subroutine to show where the player is on the screen
+ ** cursor values start from 1 up
+ */
+-showplayer()
++void showplayer(void)
+ {
+ cursor(playerx+1,playery+1);
+ oldx=playerx;
+@@ -524,7 +526,7 @@
+ char diroffx[] = { 0, 0, 1, 0, -1, 1, -1, 1, -1 };
+ char diroffy[] = { 0, 1, 0, -1, 0, -1, -1, 1, 1 };
+
+-moveplayer(dir)
++int moveplayer(dir)
+ int dir; /* from = present room # direction = [1-north]
+ [2-east] [3-south] [4-west] [5-northeast]
+ [6-northwest] [7-southeast] [8-southwest]
+@@ -589,7 +591,7 @@
+ */
+ static int lincount,count;
+
+-seemagic(arg)
++void seemagic(arg)
+ int arg;
+ {
+ int i,number;
+@@ -620,7 +622,7 @@
+ }
+ else {
+ resetscroll();
+- clear();
++ ularn_clear();
+ }
+
+ lprcat("The magic spells you have discovered thus far:\n\n");
+@@ -647,9 +649,9 @@
+ lprcat("\nThe magic scrolls you have found to date are:\n\n");
+ count=0;
+ for (i=0; i<MAXSCROLL; i++)
+- if (scrollname[i][0])
+- if (scrollname[i][1]!=' ') {
+- lprintf("%-26s",&scrollname[i][1]);
++ if (scrollknown[i])
++ if (scrollname[i][0]!=' ') {
++ lprintf("%-26s",scrollname[i]);
+ seepage();
+ }
+
+@@ -662,9 +664,9 @@
+ lprcat("\nThe magic potions you have found to date are:\n\n");
+ count=0;
+ for (i=0; i<MAXPOTION; i++)
+- if (potionname[i][0])
+- if (potionname[i][1]!=' ') {
+- lprintf("%-26s",&potionname[i][1]);
++ if (potionknown[i])
++ if (potionname[i][0]!=' ') {
++ lprintf("%-26s",potionname[i]);
+ seepage();
+ }
+
+@@ -677,7 +679,7 @@
+ /*
+ * subroutine to paginate the seemagic function
+ */
+-seepage()
++void seepage(void)
+ {
+ if (++count==3) {
+ lincount++;
+@@ -686,7 +688,7 @@
+ if (lincount>17) {
+ lincount=0;
+ more();
+- clear();
++ ularn_clear();
+ }
+ }
+ }
diff --git a/games/ularn/patches/patch-ah b/games/ularn/patches/patch-ah
new file mode 100644
index 00000000000..aff4972dcd5
--- /dev/null
+++ b/games/ularn/patches/patch-ah
@@ -0,0 +1,1175 @@
+$NetBSD: patch-ah,v 1.1.1.1 2001/04/27 15:27:31 agc Exp $
+
+--- extern.h.orig Fri Jun 19 13:55:30 1992
++++ extern.h Sat Jan 13 21:29:33 2001
+@@ -2,19 +2,19 @@
+
+ /* module: action.c */
+
+-int run(int);
+-int wield(void);
+-int ydhi(int);
+-int ycwi(int);
+-int wear(void);
+-int dropobj(void);
+-int readscr(void);
+-int eatcookie(void);
+-int quaff(void);
++void run(int);
++void wield(void);
++void ydhi(int);
++void ycwi(int);
++void wear(void);
++void dropobj(void);
++void readscr(void);
++void eatcookie(void);
++void quaff(void);
+ int qwhatitem(void);
+ int whatitem(char *);
+ long readnum(long);
+-int do_create(void);
++void do_create(void);
+
+ /* module: bill.c */
+
+@@ -24,53 +24,53 @@
+ int letter4(void);
+ int letter5(void);
+ int letter6(void);
+-int mailbill(void);
++void mailbill(void);
+
+ /* module: config.c */
+
+
+ /* module: create.c */
+
+-int makeplayer(void);
+-int newcavelevel(int);
+-int makemaze(int);
+-int eat(int, int);
++void makeplayer(void);
++void newcavelevel(int);
++void makemaze(int);
++void eat(int, int);
+ int cannedlevel(int);
+-int treasureroom(int);
+-int troom(int, int, int, int, int, int);
+-int makeobject(int);
+-int fillmroom(int, int, int);
+-int froom(int, int, int);
+-int fillroom(int, int);
++void treasureroom(int);
++void troom(int, int, int, int, int, int);
++void makeobject(int);
++void fillmroom(int, int, int);
++void froom(int, int, int);
++void fillroom(int, int);
+ int fillmonst(int);
+-int sethp(int);
+-int checkgen(void);
++void sethp(int);
++void checkgen(void);
+
+ /* module: data.c */
+
+
+ /* module: diag.c */
+
+-int diag(void);
+-int diagdrawscreen(void);
++void diag(void);
++void diagdrawscreen(void);
+
+ /* module: display.c */
+
+-int bottomdo(void);
+-int bottomgold(void);
+-int bot_spellx(void);
+-int bot_linex(void);
+-int bot_hpx(void);
+-int botside(void);
+-int bothp(void);
+-int draws(int, int, int, int);
+-int drawscreen(void);
+-int showcell(int, int);
+-int show1cell(int, int);
+-int showplayer(void);
++void bottomdo(void);
++void bottomgold(void);
++void bot_spellx(void);
++void bot_linex(void);
++void bot_hpx(void);
++void botside(void);
++void bothp(void);
++void draws(int, int, int, int);
++void drawscreen(void);
++void showcell(int, int);
++void show1cell(int, int);
++void showplayer(void);
+ int moveplayer(int);
+-int seemagic(int);
+-int seepage(void);
++void seemagic(int);
++void seepage(void);
+
+ /* module: fortune.c */
+
+@@ -78,178 +78,178 @@
+
+ /* module: help.c */
+
+-int help(void);
+-int welcome(void);
+-int retcont(void);
++void help(void);
++void welcome(void);
++void retcont(void);
+ int openhelp(void);
+
+ /* module: io.c */
+
+ int getcharacter(void);
+-int newgame(void);
++void newgame(void);
+ /*VARARGS*/
+-int lprintf();
+-int lprint(long);
+-int lwrite(char *, int);
++void lprintf();
++void lprint(long);
++void lwrite(char *, int);
+ long lgetc1(void);
+ long lrint(void);
+-int lrfill(char *, int);
++void lrfill(char *, int);
+ char *lgetw(void);
+ char *lgetl(void);
+ int lcreat(char *);
+ int lopen(char *);
+ int lappend(char *);
+-int lrclose(void);
+-int lwclose(void);
+-int lprcat(char *);
+-int init_term(void);
+-int cl_up(int, int);
+-int cl_dn(int, int);
+-int standout(char *);
+-int set_score_output(void);
+-int lflush(void);
++void lrclose(void);
++void lwclose(void);
++void lprcat(char *);
++void init_term(void);
++void cl_up(int, int);
++void cl_dn(int, int);
++void standout(char *);
++void set_score_output(void);
++void lflush(void);
+ int putcharacter(int);
+-int flush_buf(void);
+-int tmcapcnv(char *, char *);
++void flush_buf(void);
++void tmcapcnv(char *, char *);
+ char *getword(char *);
+
+ /* module: main.c */
+
+ int main(int, char **);
+-int parse(void);
+-int parse2(void);
++void parse(void);
++void parse2(void);
+
+ /* module: monster.c */
+
+-int createmonster(int);
++void createmonster(int);
+ int cgood(int, int, int, int);
+-int createitem(int, int, int, int);
+-int cast(void);
+-int speldamage(int);
+-int loseint(void);
++void createitem(int, int, int, int);
++void cast(void);
++void speldamage(int);
++void loseint(void);
+ int isconfuse(void);
+ int nospell(int, int);
+ int fullhit(int);
+-int direct(int, int, char *, int);
+-int godirect(int, int, char *, int, int);
+-int ifblind(int, int);
+-int tdirect(int);
+-int makewall(int);
+-int omnidirect(int, int, char *);
++void direct(int, int, char *, int);
++void godirect(int, int, char *, int, int);
++void ifblind(int, int);
++void tdirect(int);
++void makewall(int);
++void omnidirect(int, int, char *);
+ int dirsub(int *, int *);
+ int verifyxy(int *, int *);
+-int dirpoly(int);
+-int hitmonster(int, int);
++void dirpoly(int);
++void hitmonster(int, int);
+ int hitm(int, int, int);
+-int hitplayer(int, int);
+-int dropsomething(int, int, int);
+-int dropgold(int);
+-int something(int, int, int);
++void hitplayer(int, int);
++void dropsomething(int, int, int);
++void dropgold(int);
++void something(int, int, int);
+ int newobject(int, int *);
+ int spattack(int, int, int);
+-int checkloss(int);
+-int annihilate(void);
+-int genmonst(void);
++void checkloss(int);
++void annihilate(void);
++void genmonst(void);
+ int makemonst(int);
+-int randmonst(void);
++void randmonst(void);
+
+ /* module: moreobj.c */
+
+-int oaltar(void);
+-int ohear(void);
+-int othrone(int);
+-int odeadthrone(void);
+-int ochest(void);
+-int ofountain(void);
+-int fntchange(int);
+-int fch(int, long *);
++void oaltar(void);
++void ohear(void);
++void othrone(int);
++void odeadthrone(void);
++void ochest(void);
++void ofountain(void);
++void fntchange(int);
++void fch(int, long *);
+
+ /* module: movem.c */
+
+-int movemonst(void);
+-int movemt(int, int);
+-int mmove(int, int, int, int);
+-int teleportmonst(int, int, int);
++void movemonst(void);
++void movemt(int, int);
++void mmove(int, int, int, int);
++void teleportmonst(int, int, int);
+
+ /* module: nap.c */
+
+-int nap(int);
+-int napms(int);
++void nap(int);
++void napms(int);
+
+ /* module: object.c */
+
+-int lookforobject(void);
+-int finditem(int);
+-int ostairs(int);
+-int oteleport(int);
+-int opotion(int);
+-int quaffpotion(int);
+-int oscroll(int);
+-int adjusttime(long);
+-int read_scroll(int);
+-int opit(void);
+-int obottomless(void);
+-int oelevator(int);
+-int ostatue(void);
+-int omirror(void);
+-int obook(void);
+-int readbook(int);
+-int ocookie(void);
+-int ogold(int);
+-int ohome(void);
+-int iopts(void);
+-int ignore(void);
+-int closedoor(void);
++void lookforobject(void);
++void finditem(int);
++void ostairs(int);
++void oteleport(int);
++void opotion(int);
++void quaffpotion(int);
++void oscroll(int);
++void adjusttime(long);
++void read_scroll(int);
++void opit(void);
++void obottomless(void);
++void oelevator(int);
++void ostatue(void);
++void omirror(void);
++void obook(void);
++void readbook(int);
++void ocookie(void);
++void ogold(int);
++void ohome(void);
++void iopts(void);
++void ignore(void);
++void closedoor(void);
+
+ /* module: player.c */
+
+-int raiselevel(void);
+-int loselevel(void);
+-int raiseexperience(long);
+-int loseexperience(long);
+-int losehp(int);
+-int losemhp(int);
+-int raisehp(int);
+-int raisemhp(int);
+-int raisespells(int);
+-int raisemspells(int);
+-int losespells(int);
+-int losemspells(int);
+-int positionplayer(void);
+-int recalc(void);
+-int quit(void);
+-int more(void);
++void raiselevel(void);
++void loselevel(void);
++void raiseexperience(long);
++void loseexperience(long);
++void losehp(int);
++void losemhp(int);
++void raisehp(int);
++void raisemhp(int);
++void raisespells(int);
++void raisemspells(int);
++void losespells(int);
++void losemspells(int);
++void positionplayer(void);
++void recalc(void);
++void quit(void);
++void more(void);
+ int take(int, int);
+ int drop_object(int);
+-int enchantarmor(void);
+-int enchweapon(void);
++void enchantarmor(void);
++void enchweapon(void);
+ int pocketfull(void);
+ int nearbymonst(void);
+ int stealsomething(int, int);
+ int emptyhanded(void);
+-int creategem(void);
+-int adjustcvalues(int, int);
+-int gettokstr(char *);
++void creategem(void);
++void adjustcvalues(int, int);
++void gettokstr(char *);
+ int getpassword(void);
+ int getyn(void);
+ int packweight(void);
+
+ /* module: regen.c */
+
+-int regen(void);
++void regen(void);
+
+ /* module: savelev.c */
+
+-int savelevel(void);
+-int getlevel();
++void savelevel(void);
++void getlevel(void);
+ int savegame(char *);
+-int restoregame(char *);
+-int greedy(void);
+-int fsorry(void);
+-int fcheat(void);
+-int init_cells(void);
+-int bwrite(int, char *, long);
+-int bread(int, char *, long);
++void restoregame(char *);
++void greedy(void);
++void fsorry(void);
++void fcheat(void);
++void init_cells(void);
++void bwrite(int, char *, long);
++void bread(int, char *, long);
+ unsigned int sum(unsigned char *, int);
+
+ /* module: scores.c */
+@@ -261,112 +261,112 @@
+ long paytaxes(long);
+ int winshou(void);
+ int shou(int);
+-int showscores(void);
+-int showallscores(void);
++void showscores(void);
++void showallscores(void);
+ int sortboard(void);
+-int newscore(long, char *, int, int);
+-int new1sub(long, int, char *, long);
+-int new2sub(long, int, char *, int);
+-int died(int);
+-int diedsub(int);
+-int showscore3(int);
+-int showscore1(int, char **);
++void newscore(long, char *, int, int);
++void new1sub(long, int, char *, long);
++void new2sub(long, int, char *, int);
++void died(int);
++void diedsub(int);
++void showscore3(int);
++void showscore1(int, char **);
+
+ /* module: show.c */
+
+-int showstr(void);
+-int qshowstr(void);
+-int t_setup(int);
+-int t_endup(int);
+-int showwear(void);
+-int showwield(void);
+-int showread(void);
+-int showeat(void);
+-int showquaff(void);
+-int show1(int, char **);
+-int show3(int);
++void showstr(void);
++void qshowstr(void);
++void t_setup(int);
++void t_endup(int);
++void showwear(void);
++void showwield(void);
++void showread(void);
++void showeat(void);
++void showquaff(void);
++void show1(int, char **, int);
++void show3(int);
+
+ /* module: signal.c */
+
+-int s2choose(void);
+-SIGTYPE cntlc(void);
+-SIGTYPE sgam(void);
++void s2choose(void);
++SIGTYPE cntlc(int);
++SIGTYPE sgam(int);
+ SIGTYPE tstop(int);
+-int sigsetup(void);
+-int sigsave(void);
+-int sigreset(void);
+-int sigpanic(int);
++void sigsetup(void);
++void sigsave(void);
++void sigreset(void);
++SIGTYPE sigpanic(int);
+
+ /* module: sphere.c */
+
+-int newsphere(int, int, int, int);
+-int rmsphere(int, int);
+-int sphboom(int, int);
+-int movsphere(void);
++void newsphere(int, int, int, int);
++void rmsphere(int, int);
++void sphboom(int, int);
++void movsphere(void);
+
+ /* module: store.c */
+
+-int dnd_2hed(void);
+-int dnd_hed(void);
+-int dndstore(void);
+-int handsfull(void);
+-int outofstock(void);
+-int nogold(void);
+-int dnditem(int);
+-int sch_hed(void);
+-int oschool(void);
+-int obank(void);
+-int obank2(void);
+-int banktitle(char *);
+-int ointerest(void);
+-int obanksub(void);
+-int appraise(int, int);
+-int otradhead(void);
+-int otradepost(void);
+-int cnsitm(void);
+-int olrs(void);
+-int nomore(void);
+-int nocash(void);
+-int pad_hd(void);
+-int opad(void);
++void dnd_2hed(void);
++void dnd_hed(void);
++void dndstore(void);
++void handsfull(void);
++void outofstock(void);
++void nogold(void);
++void dnditem(int);
++void sch_hed(void);
++void oschool(void);
++void obank(void);
++void obank2(void);
++void banktitle(char *);
++void ointerest(void);
++void obanksub(void);
++void appraise(int, int);
++void otradhead(void);
++void otradepost(void);
++void cnsitm(void);
++void olrs(void);
++void nomore(void);
++void nocash(void);
++void pad_hd(void);
++void opad(void);
+ int snag(int);
+-int pick_char(int);
++void pick_char(int);
+
+ /* module: tok.c */
+
+ int yylex(void);
+-int flushall(void);
+-int sethard(int);
+-int readopts(void);
++void flushall(void);
++void sethard(int);
++void readopts(void);
+
+ /* module: tty.c */
+
+-int setctty(void);
+-int gettty(void);
+-int settty(void);
+-int setuptty(void);
+-int scbr(void);
+-int sncbr(void);
+-int setupvt100(void);
+-int clearvt100(void);
++void setctty(void);
++void gettty(void);
++void settty(void);
++void setuptty(void);
++void scbr(void);
++void sncbr(void);
++void setupvt100(void);
++void clearvt100(void);
+
+ #else
+
+ /* module: action.c */
+
+-int run();
+-int wield();
+-int ydhi();
+-int ycwi();
+-int wear();
+-int dropobj();
+-int readscr();
+-int eatcookie();
+-int quaff();
++void run();
++void wield();
++void ydhi();
++void ycwi();
++void wear();
++void dropobj();
++void readscr();
++void eatcookie();
++void quaff();
+ int qwhatitem();
+ int whatitem();
+ long readnum();
+-int do_create();
++void do_create();
+
+ /* module: bill.c */
+
+@@ -376,53 +376,53 @@
+ int letter4();
+ int letter5();
+ int letter6();
+-int mailbill();
++void mailbill();
+
+ /* module: config.c */
+
+
+ /* module: create.c */
+
+-int makeplayer();
+-int newcavelevel();
+-int makemaze();
+-int eat();
++void makeplayer();
++void newcavelevel();
++void makemaze();
++void eat();
+ int cannedlevel();
+-int treasureroom();
+-int troom();
+-int makeobject();
+-int fillmroom();
+-int froom();
+-int fillroom();
++void treasureroom();
++void troom();
++void makeobject();
++void fillmroom();
++void froom();
++void fillroom();
+ int fillmonst();
+-int sethp();
+-int checkgen();
++void sethp();
++void checkgen();
+
+ /* module: data.c */
+
+
+ /* module: diag.c */
+
+-int diag();
+-int diagdrawscreen();
++void diag();
++void diagdrawscreen();
+
+ /* module: display.c */
+
+-int bottomdo();
+-int bottomgold();
+-int bot_spellx();
+-int bot_linex();
+-int bot_hpx();
+-int botside();
+-int bothp();
+-int draws();
+-int drawscreen();
+-int showcell();
+-int show1cell();
+-int showplayer();
++void bottomdo();
++void bottomgold();
++void bot_spellx();
++void bot_linex();
++void bot_hpx();
++void botside();
++void bothp();
++void draws();
++void drawscreen();
++void showcell();
++void show1cell();
++void showplayer();
+ int moveplayer();
+-int seemagic();
+-int seepage();
++void seemagic();
++void seepage();
+
+ /* module: fortune.c */
+
+@@ -430,178 +430,178 @@
+
+ /* module: help.c */
+
+-int help();
+-int welcome();
+-int retcont();
++void help();
++void welcome();
++void retcont();
+ int openhelp();
+
+ /* module: io.c */
+
+ int getcharacter();
+-int newgame();
++void newgame();
+ /*VARARGS*/
+-int lprintf();
+-int lprint();
+-int lwrite();
++void lprintf();
++void lprint();
++void lwrite();
+ long lgetc1();
+ long lrint();
+-int lrfill();
++void lrfill();
+ char *lgetw();
+ char *lgetl();
+ int lcreat();
+ int lopen();
+ int lappend();
+-int lrclose();
+-int lwclose();
+-int lprcat();
+-int init_term();
+-int cl_up();
+-int cl_dn();
+-int standout();
+-int set_score_output();
+-int lflush();
++void lrclose();
++void lwclose();
++void lprcat();
++void init_term();
++void cl_up();
++void cl_dn();
++void standout();
++void set_score_output();
++void lflush();
+ int putcharacter();
+-int flush_buf();
+-int tmcapcnv();
++void flush_buf();
++void tmcapcnv();
+ char *getword();
+
+ /* module: main.c */
+
+ int main();
+-int parse();
+-int parse2();
++void parse();
++void parse2();
+
+ /* module: monster.c */
+
+-int createmonster();
++void createmonster();
+ int cgood();
+-int createitem();
+-int cast();
+-int speldamage();
+-int loseint();
++void createitem();
++void cast();
++void speldamage();
++void loseint();
+ int isconfuse();
+ int nospell();
+ int fullhit();
+-int direct();
+-int godirect();
+-int ifblind();
+-int tdirect();
+-int makewall();
+-int omnidirect();
++void direct();
++void godirect();
++void ifblind();
++void tdirect();
++void makewall();
++void omnidirect();
+ int dirsub();
+ int verifyxy();
+-int dirpoly();
+-int hitmonster();
++void dirpoly();
++void hitmonster();
+ int hitm();
+-int hitplayer();
+-int dropsomething();
+-int dropgold();
+-int something();
++void hitplayer();
++void dropsomething();
++void dropgold();
++void something();
+ int newobject();
+ int spattack();
+-int checkloss();
+-int annihilate();
+-int genmonst();
++void checkloss();
++void annihilate();
++void genmonst();
+ int makemonst();
+-int randmonst();
++void randmonst();
+
+ /* module: moreobj.c */
+
+-int oaltar();
+-int ohear();
+-int othrone();
+-int odeadthrone();
+-int ochest();
+-int ofountain();
+-int fntchange();
+-int fch();
++void oaltar();
++void ohear();
++void othrone();
++void odeadthrone();
++void ochest();
++void ofountain();
++void fntchange();
++void fch();
+
+ /* module: movem.c */
+
+-int movemonst();
+-int movemt();
+-int mmove();
+-int teleportmonst();
++void movemonst();
++void movemt();
++void mmove();
++void teleportmonst();
+
+ /* module: nap.c */
+
+-int nap();
+-int napms();
++void nap();
++void napms();
+
+ /* module: object.c */
+
+-int lookforobject();
+-int finditem();
+-int ostairs();
+-int oteleport();
+-int opotion();
+-int quaffpotion();
+-int oscroll();
+-int adjusttime();
+-int read_scroll();
+-int opit();
+-int obottomless();
+-int oelevator();
+-int ostatue();
+-int omirror();
+-int obook();
+-int readbook();
+-int ocookie();
+-int ogold();
+-int ohome();
+-int iopts();
+-int ignore();
+-int closedoor();
++void lookforobject();
++void finditem();
++void ostairs();
++void oteleport();
++void opotion();
++void quaffpotion();
++void oscroll();
++void adjusttime();
++void read_scroll();
++void opit();
++void obottomless();
++void oelevator();
++void ostatue();
++void omirror();
++void obook();
++void readbook();
++void ocookie();
++void ogold();
++void ohome();
++void iopts();
++void ignore();
++void closedoor();
+
+ /* module: player.c */
+
+-int raiselevel();
+-int loselevel();
+-int raiseexperience();
+-int loseexperience();
+-int losehp();
+-int losemhp();
+-int raisehp();
+-int raisemhp();
+-int raisespells();
+-int raisemspells();
+-int losespells();
+-int losemspells();
+-int positionplayer();
+-int recalc();
+-int quit();
+-int more();
++void raiselevel();
++void loselevel();
++void raiseexperience();
++void loseexperience();
++void losehp();
++void losemhp();
++void raisehp();
++void raisemhp();
++void raisespells();
++void raisemspells();
++void losespells();
++void losemspells();
++void positionplayer();
++void recalc();
++void quit();
++void more();
+ int take();
+ int drop_object();
+-int enchantarmor();
+-int enchweapon();
++void enchantarmor();
++void enchweapon();
+ int pocketfull();
+ int nearbymonst();
+ int stealsomething();
+ int emptyhanded();
+-int creategem();
+-int adjustcvalues();
+-int gettokstr();
++void creategem();
++void adjustcvalues();
++void gettokstr();
+ int getpassword();
+ int getyn();
+ int packweight();
+
+ /* module: regen.c */
+
+-int regen();
++void regen();
+
+ /* module: savelev.c */
+
+-int savelevel();
+-int getlevel();
++void savelevel();
++void getlevel();
+ int savegame();
+-int restoregame();
+-int greedy();
+-int fsorry();
+-int fcheat();
+-int init_cells();
+-int bwrite();
+-int bread();
++void restoregame();
++void greedy();
++void fsorry();
++void fcheat();
++void init_cells();
++void bwrite();
++void bread();
+ unsigned int sum();
+
+ /* module: scores.c */
+@@ -613,96 +613,96 @@
+ long paytaxes();
+ int winshou();
+ int shou();
+-int showscores();
+-int showallscores();
++void showscores();
++void showallscores();
+ int sortboard();
+-int newscore();
+-int new1sub();
+-int new2sub();
+-int died();
+-int diedsub();
+-int showscore3();
+-int showscore1();
++void newscore();
++void new1sub();
++void new2sub();
++void died();
++void diedsub();
++void showscore3();
++void showscore1();
+
+ /* module: show.c */
+
+-int showstr();
+-int qshowstr();
+-int t_setup();
+-int t_endup();
+-int showwear();
+-int showwield();
+-int showread();
+-int showeat();
+-int showquaff();
+-int show1();
+-int show3();
++void showstr();
++void qshowstr();
++void t_setup();
++void t_endup();
++void showwear();
++void showwield();
++void showread();
++void showeat();
++void showquaff();
++void show1();
++void show3();
+
+ /* module: signal.c */
+
+-int s2choose();
+-SIGTYPE cntlc();
+-SIGTYPE sgam();
+-SIGTYPE tstop();
+-int sigsetup();
+-int sigsave();
+-int sigreset();
+-int sigpanic();
++void s2choose();
++SIGTYPE cntlc(int);
++SIGTYPE sgam(int);
++SIGTYPE tstop(int);
++void sigsetup(void);
++void sigsave(void);
++void sigreset(void);
++SIGTYPE sigpanic(int);
+
+ /* module: sphere.c */
+
+-int newsphere();
+-int rmsphere();
+-int sphboom();
+-int movsphere();
++void newsphere();
++void rmsphere();
++void sphboom();
++void movsphere();
+
+ /* module: store.c */
+
+-int dnd_2hed();
+-int dnd_hed();
+-int dndstore();
+-int handsfull();
+-int outofstock();
+-int nogold();
+-int dnditem();
+-int sch_hed();
+-int oschool();
+-int obank();
+-int obank2();
+-int banktitle();
+-int ointerest();
+-int obanksub();
+-int appraise();
+-int otradhead();
+-int otradepost();
+-int cnsitm();
+-int olrs();
+-int nomore();
+-int nocash();
+-int pad_hd();
+-int opad();
++void dnd_2hed();
++void dnd_hed();
++void dndstore();
++void handsfull();
++void outofstock();
++void nogold();
++void dnditem();
++void sch_hed();
++void oschool();
++void obank();
++void obank2();
++void banktitle();
++void ointerest();
++void obanksub();
++void appraise();
++void otradhead();
++void otradepost();
++void cnsitm();
++void olrs();
++void nomore();
++void nocash();
++void pad_hd();
++void opad();
+ int snag();
+-int pick_char();
++void pick_char();
+
+ /* module: tok.c */
+
+ int yylex();
+-int flushall();
+-int sethard();
+-int readopts();
++void flushall();
++void sethard();
++void readopts();
+
+ /* module: tty.c */
+
+-int setctty();
+-int gettty();
+-int settty();
+-int setuptty();
+-int intron();
+-int introff();
+-int scbr();
+-int sncbr();
+-int setupvt100();
+-int clearvt100();
++void setctty();
++void gettty();
++void settty();
++void setuptty();
++void intron();
++void introff();
++void scbr();
++void sncbr();
++void setupvt100();
++void clearvt100();
+
+ #endif /* __STD__ */
+
+@@ -718,20 +718,20 @@
+ extern char objnamelist[],optsfile[],*potionname[],stealth[MAXX][MAXY];
+ extern char *scrollname[],*spelcode[],*speldescript[];
+ extern char *class[],course[],diagfile[],fortfile[],helpfile[];
+-extern char *inbuffer,drug[], know[MAXX][MAXY], item[MAXX][MAXY];
++extern char *inbuffer,drug[], know[MAXX][MAXY];
+ extern char *levelname[],loginname[],logname[],*lpbuf,*lpend;
+ /* extern char *lpnt, *password, mitem[MAXX][MAXY], moved[MAXX][MAXY]; */
+ extern char *lpnt, *password, moved[MAXX][MAXY];
+-extern char *objectname[], *spelname[],*spelmes[],char_class[], iven[];
+-extern char nosignal, nobeep,oldx,oldy,playerx,playery, dropflag;
++extern char *objectname[], *spelname[],*spelmes[],char_class[];
++extern char nosignal, nobeep,oldx,oldy,dropflag;
+ extern char restorflag,nomove, srcount, char_picked;
+-extern char nowelcome, level, cheat, enable_scroll;
++extern char nowelcome, cheat, enable_scroll;
+ extern char nch[], ndgg[], ckpflag, monstlevel[];
+ extern char nlpts[], nplt[],nsw[], mail,boldon, splev[];
+ extern char potprob[], predostuff, scprob[], spelknow[], do_fork, sex;
+ extern char spelweird[MAXMONST+8][SPNUM], wizard;
+ extern char diroffx[],diroffy[],hitflag,hit2flag,hit3flag;
+-extern char rmst, lasthx,lasthy,lastpx,lastpy;
++extern char rmst;
+ extern char ramboflag, compress;
+
+ extern short hitp[MAXX][MAXY], ivenarg[], screen[MAXX][MAXY];
+@@ -739,6 +739,17 @@
+
+ extern int yrepcount,userid;
+ extern int ipoint, iepoint;
++extern int potionknown[MAXPOTION];
++extern int scrollknown[MAXSCROLL];
++extern int playerx;
++extern int playery;
++extern int level;
++extern int iven[];
++extern int item[MAXX][MAXY];
++extern int lasthx;
++extern int lasthy;
++extern int lastpx;
++extern int lastpy;
+
+ extern long initialtime,outstanding_taxes,skill[],gtime,c[],cbak[];
+ extern long lasttime;
diff --git a/games/ularn/patches/patch-ai b/games/ularn/patches/patch-ai
new file mode 100644
index 00000000000..46e0bf54e7a
--- /dev/null
+++ b/games/ularn/patches/patch-ai
@@ -0,0 +1,13 @@
+$NetBSD: patch-ai,v 1.1.1.1 2001/04/27 15:27:31 agc Exp $
+
+--- fortune.c.orig Fri Jun 19 13:55:36 1992
++++ fortune.c Sat Jan 13 18:07:37 2001
+@@ -1,4 +1,8 @@
+ /* fortune.c */
++#include <sys/types.h>
++#include <sys/uio.h>
++#include <stdlib.h>
++#include <unistd.h>
+ #include "header.h"
+ #include "extern.h"
+ /*
diff --git a/games/ularn/patches/patch-aj b/games/ularn/patches/patch-aj
new file mode 100644
index 00000000000..ce479466c43
--- /dev/null
+++ b/games/ularn/patches/patch-aj
@@ -0,0 +1,13 @@
+$NetBSD: patch-aj,v 1.1.1.1 2001/04/27 15:27:32 agc Exp $
+
+--- header.h.orig Sat Jan 13 21:51:26 2001
++++ header.h Sat Jan 13 21:51:43 2001
+@@ -120,7 +120,7 @@
+ #define resetbold() {if (boldon) *lpnt++ = ST_END;}
+
+ /* clear the screen and home the cursor */
+-#define clear() { *lpnt++ =CLEAR; cbak[SPELLS]= -50; }
++#define ularn_clear() { *lpnt++ =CLEAR; cbak[SPELLS]= -50; }
+
+ /* clear to end of line */
+ #define cltoeoln() *lpnt++ = CL_LINE
diff --git a/games/ularn/patches/patch-ak b/games/ularn/patches/patch-ak
new file mode 100644
index 00000000000..0ee96214bbf
--- /dev/null
+++ b/games/ularn/patches/patch-ak
@@ -0,0 +1,63 @@
+$NetBSD: patch-ak,v 1.1.1.1 2001/04/27 15:27:32 agc Exp $
+
+--- help.c.orig Fri Jun 19 13:55:30 1992
++++ help.c Sat Jan 13 21:52:16 2001
+@@ -1,4 +1,5 @@
+ /* help.c */
++#include <unistd.h>
+ #include "header.h"
+ #include "player.h"
+ #include "extern.h"
+@@ -14,7 +15,7 @@
+ */
+ extern char helpfile[];
+
+-help ()
++void help (void)
+ {
+ int i,j;
+ char tmbuf[128];
+@@ -25,7 +26,7 @@
+ for (i=0; i<23; i++)
+ lgetl(); /* skip over intro message */
+ for (; j>0; j--) {
+- clear();
++ ularn_clear();
+ for (i=0; i<23; i++) {
+ tmcapcnv(tmbuf,lgetl());
+ lprcat(tmbuf);
+@@ -55,14 +56,14 @@
+ /*
+ * function to display the welcome message and background
+ */
+-welcome ()
++void welcome (void)
+ {
+ int i;
+ char tmbuf[128];/* intermediate translation buffer when not a VT100 */
+
+ if (openhelp() < 0)
+ return; /* open the help file */
+- clear();
++ ularn_clear();
+ for(i=0; i<23; i++) {
+ tmcapcnv(tmbuf,lgetl());
+ lprcat(tmbuf);
+@@ -74,7 +75,7 @@
+ /*
+ * function to say press return to continue and reset scroll when done
+ */
+-retcont ()
++void retcont (void)
+ {
+ cursor(1,24);
+ lprcat("Press ");
+@@ -88,7 +89,7 @@
+ /*
+ * routine to open the help file and return the first character - '0'
+ */
+-openhelp ()
++int openhelp (void)
+ {
+ if (lopen(helpfile)<0) {
+ lprintf("Can't open help file \"%s\" ",helpfile);
diff --git a/games/ularn/patches/patch-al b/games/ularn/patches/patch-al
new file mode 100644
index 00000000000..c60d35668b0
--- /dev/null
+++ b/games/ularn/patches/patch-al
@@ -0,0 +1,309 @@
+$NetBSD: patch-al,v 1.1.1.1 2001/04/27 15:27:32 agc Exp $
+
+--- io.c.orig Wed Jan 18 11:48:27 1995
++++ io.c Sun Jan 14 07:56:12 2001
+@@ -47,6 +47,12 @@
+ *
+ * Note: ** entries are available only in termcap mode.
+ */
++
++#include <sys/types.h>
++#include <sys/uio.h>
++#include <stdlib.h>
++#include <termcap.h>
++#include <unistd.h>
+ #include "header.h"
+ #include "extern.h"
+
+@@ -61,13 +67,13 @@
+ /*
+ * getcharacter() Routine to read in one character from the terminal
+ */
+-getcharacter ()
++int getcharacter (void)
+ {
+ char byt;
+
+ lflush(); /* be sure output buffer is flushed */
+ read(0, &byt,1); /* get byte from terminal */
+- return(byt);
++ return((int)byt);
+ }
+
+
+@@ -75,7 +81,7 @@
+ * newgame()
+ * Subroutine to save the initial time and seed rnd()
+ */
+-newgame ()
++void newgame (void)
+ {
+ long *p,*pe;
+
+@@ -101,7 +107,7 @@
+ */
+ /*VARARGS*/
+
+-lprintf(va_alist)
++void lprintf(va_alist)
+ va_dcl
+ {
+ va_list ap; /* pointer for variable argument list */
+@@ -164,7 +170,7 @@
+ break;
+ }
+ if (wide==0) {
+- while (*outb++ = *tmpb++);
++ while ((*outb++ = *tmpb++));
+ --outb;
+ }
+ else {
+@@ -172,7 +178,7 @@
+ if (left)
+ while (n-- > 0)
+ *outb++ = ' ';
+- while (*outb++ = *tmpb++)
++ while ((*outb++ = *tmpb++))
+ ;
+ --outb;
+ if (left==0)
+@@ -230,7 +236,7 @@
+ * No checking for output buffer overflow is done, but flushes if needed!
+ * Returns nothing of value.
+ */
+-lprint (x)
++void lprint (x)
+ long x;
+ {
+ if (lpnt >= lpend)
+@@ -251,7 +257,7 @@
+ * Enter with the address and number of bytes to write out
+ * Returns nothing of value
+ */
+-lwrite (buf, len)
++void lwrite (buf, len)
+ char *buf;
+ int len;
+ {
+@@ -286,7 +292,7 @@
+ *
+ * Returns 0 if EOF, otherwise the character
+ */
+-long lgetc1()
++long lgetc1(void)
+ {
+ int i;
+
+@@ -320,7 +326,7 @@
+ * The save order is low order first, to high order (4 bytes total)
+ * Returns the int read
+ */
+-long lrint()
++long lrint(void)
+ {
+ long i;
+
+@@ -339,7 +345,7 @@
+ * Reads "number" bytes into the buffer pointed to by "address".
+ * Returns nothing of value
+ */
+-lrfill (adr, num)
++void lrfill (adr, num)
+ char *adr;
+ int num;
+ {
+@@ -379,7 +385,7 @@
+ *
+ * Returns pointer to a buffer that contains word. If EOF, returns a 0
+ */
+-char *lgetw()
++char *lgetw(void)
+ {
+ char *lgp;
+ int cc, n=LINBUFSIZE, quote=0;
+@@ -412,7 +418,7 @@
+ *
+ *Returns pointer to a buffer that contains the line. If EOF, returns 0
+ */
+-char *lgetl()
++char *lgetl(void)
+ {
+ int i=LINBUFSIZE,ch;
+ char *str=lgetwbuf;
+@@ -437,7 +443,7 @@
+ * lcreat((char*)0); means to the terminal
+ * Returns -1 if error, otherwise the file descriptor opened.
+ */
+-lcreat(str)
++int lcreat(str)
+ char *str;
+ {
+ lpnt = lpbuf;
+@@ -461,7 +467,7 @@
+ * lopen(0) means from the terminal
+ * Returns -1 if error, otherwise the file descriptor opened.
+ */
+-lopen (str)
++int lopen (str)
+ char *str;
+ {
+ ipoint = iepoint = BUFSIZ;
+@@ -484,7 +490,7 @@
+ * lappend(0) means to the terminal
+ * Returns -1 if error, otherwise the file descriptor opened.
+ */
+-lappend (str)
++int lappend (str)
+ char *str;
+ {
+ lpnt = lpbuf;
+@@ -507,7 +513,7 @@
+ *
+ * Returns nothing of value.
+ */
+-lrclose()
++void lrclose(void)
+ {
+ if (fd > 0)
+ close(fd);
+@@ -518,7 +524,7 @@
+ *
+ * Returns nothing of value.
+ */
+-lwclose ()
++void lwclose (void)
+ {
+ lflush();
+ if (lfd > 2)
+@@ -529,7 +535,7 @@
+ * lprcat(string) append a string to the output buffer
+ * avoids calls to lprintf (time consuming)
+ */
+-lprcat (str)
++void lprcat (str)
+ char *str;
+ {
+ char *str2;
+@@ -537,8 +543,7 @@
+ if (lpnt >= lpend)
+ lflush();
+ str2 = lpnt;
+- while (*str2++ = *str++)
+- ;
++ while ((*str2++ = *str++));
+ lpnt = str2 - 1;
+ }
+
+@@ -553,15 +558,16 @@
+ static char *outbuf=0; /* translated output buffer */
+ char *CM, *CE, *CD, *CL, *SO, *SE, *AL, *DL;/* Termcap capabilities */
+ char *HO, *BC, *UP;
+-extern char *PC;
++/* extern char *PC; */ /* termcap.h declares extern char PC, not a pointer */
+
+ /*
+ * init_term() Terminal initialization -- setup termcap info
+ */
+-init_term ()
++void init_term (void)
+ {
+ char termbuf[1024];
+- char *pc, *capptr = cap+10;
++ char *pc;
++ char *capptr = cap+10;
+ char *malloc(), *tgetstr(), *term, *getenv();
+
+ switch (tgetent(termbuf, term = getenv("TERM"))) {
+@@ -584,12 +590,11 @@
+ UP = tgetstr("up", &capptr); /* cursor up */
+ HO = tgetstr("ho", &capptr); /* home cursor */
+
+- if (pc = tgetstr("pc", &capptr)) /* padding character */
+- PC = pc;
+-/*
++ pc = tgetstr("pc", &capptr); /* padding character */
++ if (pc)
++ PC = *pc;
+ else
+- *PC = '\0';
+-*/
++ PC = '\0';
+
+ if (!(BC = tgetstr("bc", &capptr))) { /* backspace */
+ if (!(BC=tgetstr("le", &capptr))) {
+@@ -632,7 +637,7 @@
+ /*
+ * cl_up(x,y) Clear screen from [x,1] to current position. Leave cursor at [x,y]
+ */
+-cl_up (x,y)
++void cl_up (x,y)
+ int x, y;
+ {
+ int i;
+@@ -648,7 +653,7 @@
+ /*
+ * cl_dn(x,y) Clear screen from [1,y] to end of display. Leave cursor at [x,y]
+ */
+-cl_dn (x,y)
++void cl_dn (x,y)
+ int x, y;
+ {
+ int i;
+@@ -671,7 +676,7 @@
+ /*
+ * standout(str) Print the argument string in inverse video (standout mode).
+ */
+-standout (str)
++void standout (str)
+ char *str;
+ {
+ if (boldon == 0) {
+@@ -687,7 +692,7 @@
+ /*
+ * set_score_output() Called when output should be literally printed.
+ */
+-set_score_output() {
++void set_score_output() {
+ enable_scroll = -1;
+ }
+
+@@ -700,7 +705,7 @@
+ */
+ static int scrline=18; /* line # for wraparound instead of scrolling if no DL */
+
+-lflush ()
++void lflush ()
+ {
+ int lpoint;
+ char *str;
+@@ -796,18 +801,19 @@
+ /*
+ * putcharacter(c) Print one character in decoded output buffer.
+ */
+-putcharacter(c)
++int putcharacter(c)
+ int c;
+ {
+ outbuf[ind++]=c;
+ if(ind>=BUFSIZ)
+ flush_buf();
++ return c;
+ }
+
+ /*
+ * flush_buf() Flush buffer with decoded output.
+ */
+-flush_buf()
++void flush_buf(void)
+ {
+ if (ind)
+ write(lfd, outbuf, ind);
+@@ -825,7 +831,7 @@
+ *
+ *
+ */
+-tmcapcnv(sd,ss)
++void tmcapcnv(sd,ss)
+ char *sd, *ss;
+ {
+ int tmstate=0; /* 0=normal, 1=ESC 2=[ 3=# */
diff --git a/games/ularn/patches/patch-am b/games/ularn/patches/patch-am
new file mode 100644
index 00000000000..da018337622
--- /dev/null
+++ b/games/ularn/patches/patch-am
@@ -0,0 +1,15 @@
+$NetBSD: patch-am,v 1.1.1.1 2001/04/27 15:27:32 agc Exp $
+
+--- itm.h.orig Sat Jan 13 21:13:03 2001
++++ itm.h Sat Jan 13 21:14:05 2001
+@@ -2,8 +2,8 @@
+ struct _itm {
+ long price;
+ char **mem;
+- char obj;
+- char arg;
++ int obj;
++ int arg;
+ char qty;
+ };
+
diff --git a/games/ularn/patches/patch-an b/games/ularn/patches/patch-an
new file mode 100644
index 00000000000..29124a89e9c
--- /dev/null
+++ b/games/ularn/patches/patch-an
@@ -0,0 +1,119 @@
+$NetBSD: patch-an,v 1.1.1.1 2001/04/27 15:27:32 agc Exp $
+
+--- main.c.orig Fri Jun 19 13:55:33 1992
++++ main.c Sat Jan 13 21:53:56 2001
+@@ -1,5 +1,8 @@
+ /* main.c */
+ /* This game is bad for you. It is evil. It will rot your brain. */
++#include <sys/types.h>
++#include <stdlib.h>
++#include <unistd.h>
+ #include "header.h"
+ #include "player.h"
+ #include "itm.h"
+@@ -40,7 +43,7 @@
+ ************
+ */
+
+-main (argc, argv)
++int main (argc, argv)
+ int argc;
+ char *argv[];
+ {
+@@ -55,14 +58,21 @@
+ /*
+ * first task is to identify the player
+ */
+- if ((ptr = getlogin()) == (char *)NULL) {
+- if (pwe=getpwuid(geteuid()))
++ ptr = getlogin();
++ if (ptr == (char *)NULL) {
++ pwe = getpwuid(geteuid());
++ if (pwe) {
+ ptr = pwe->pw_name;
+- else if ((ptr = getenv("LOGNAME")) == (char *)NULL)
+- if ((ptr = getenv("USER")) == (char *)NULL) {
+-noone: fprintf(stderr,"Who *are* you?\n");
+- exit(1);
+- }
++ } else {
++ ptr = getenv("LOGNAME");
++ if (ptr == (char *)NULL) {
++ ptr = getenv("USER");
++ if (ptr == (char *)NULL) {
++noone: fprintf(stderr,"Who *are* you?\n");
++ exit(1);
++ }
++ }
++ }
+ }
+ if (ptr==(char *)NULL)
+ goto noone;
+@@ -109,6 +119,9 @@
+
+ init_cells(); /* initialize dungeon storage */
+
++ memset(potionknown, 0, sizeof(potionknown));
++ memset(scrollknown, 0, sizeof(scrollknown));
++
+ lcreat((char*)0);
+ newgame(); /* set the initial clock */
+ hard= -1;
+@@ -277,6 +290,7 @@
+ }
+ } /* end main loop */
+ /* NOTREACHED */
++ exit(0);
+ } /* end main */
+
+
+@@ -285,7 +299,7 @@
+ *
+ * get and execute a command
+ */
+-parse ()
++void parse (void)
+ {
+ int i,j;
+ int k,flag;
+@@ -393,7 +407,7 @@
+ nomove=1;
+ return; /*give the help screen*/
+
+- case 'S': clear();
++ case 'S': ularn_clear();
+ lprcat("Saving . . .");
+ lflush();
+ if (savegame(savefilename) == -1 && compress) {
+@@ -533,18 +547,18 @@
+ for (i=0; i<SPNUM; i++)
+ spelknow[i]=1;
+ for (i=0; i<MAXSCROLL; i++)
+- scrollname[i][0]=' ';
++ scrollknown[i] = 1;
+ for (i=0; i<MAXPOTION; i++)
+- potionname[i][0]=' ';
++ potionknown[i] = 1;
+ }
+ for (i=0; i<MAXSCROLL; i++)
+- if (strlen(scrollname[i])>2) {
++ if (strlen(scrollname[i])>1) {
+ item[i][0]=OSCROLL;
+ iarg[i][0]=i;
+ }
+ for (i=MAXX-1; i>MAXX-1-MAXPOTION; i--)
+ /* no null items */
+- if (strlen(potionname[i-MAXX+MAXPOTION])>2) {
++ if (strlen(potionname[i-MAXX+MAXPOTION])>1) {
+ item[i][0]=OPOTION;
+ iarg[i][0]=i-MAXX+MAXPOTION;
+ }
+@@ -619,7 +633,7 @@
+ }
+ }
+
+-parse2 ()
++void parse2 (void)
+ {
+ if (c[HASTEMONST])
+ movemonst();
diff --git a/games/ularn/patches/patch-ao b/games/ularn/patches/patch-ao
new file mode 100644
index 00000000000..0a9f05b8098
--- /dev/null
+++ b/games/ularn/patches/patch-ao
@@ -0,0 +1,13 @@
+$NetBSD: patch-ao,v 1.1.1.1 2001/04/27 15:27:30 agc Exp $
+
+--- monst.h.orig Sat Jan 13 17:42:57 2001
++++ monst.h Sat Jan 13 17:43:01 2001
+@@ -35,7 +35,7 @@
+ struct Steal stolen[NLEVELS];
+ #else
+ typedef struct {
+- char mon;
++ int mon;
+ char n;
+ StolenItem it[6];
+ } struct_mitem;
diff --git a/games/ularn/patches/patch-ap b/games/ularn/patches/patch-ap
new file mode 100644
index 00000000000..5a6a9c0dd2c
--- /dev/null
+++ b/games/ularn/patches/patch-ap
@@ -0,0 +1,471 @@
+$NetBSD: patch-ap,v 1.1.1.1 2001/04/27 15:27:31 agc Exp $
+
+--- monster.c.orig Fri Jun 19 13:55:33 1992
++++ monster.c Sat Jan 13 20:21:51 2001
+@@ -1,4 +1,5 @@
+ /* monster.c */
++#include <stdlib.h>
+ #include "header.h"
+ #include "itm.h"
+ #include "player.h"
+@@ -88,7 +89,7 @@
+ *
+ * Enter with the monster number (1 to MAXMONST+8) Returns no value.
+ */
+-createmonster(mon)
++void createmonster(mon)
+ int mon;
+ {
+ int x, y, k, i;
+@@ -133,7 +134,7 @@
+ * check for no monster at this location This routine will return FALSE if at
+ * a wall or the dungeon exit on level 1
+ */
+-cgood(x, y, itm, monst)
++int cgood(x, y, itm, monst)
+ int x, y, itm, monst;
+ {
+ if ((y >= 0) && (y <= MAXY - 1)
+@@ -156,7 +157,7 @@
+ * value, thus we don't know about createitem() failures.
+ *
+ */
+-createitem(x, y, it, arg)
++void createitem(x, y, it, arg)
+ int x,y, it, arg;
+ {
+ int k, i;
+@@ -230,7 +231,7 @@
+ */
+ static char eys[] = "\nEnter your spell: ";
+
+-cast()
++void cast(void)
+ {
+ int i, j, a, b, d;
+
+@@ -276,12 +277,14 @@
+ * Enter with the spell number, returns no value. Please insure that there are 2
+ * spaces before all messages here
+ */
+-speldamage(x)
++void speldamage(x)
+ int x;
+ {
+ int i, j, clev;
+ int xl, xh, yl, yh;
+- char *it, *kn, *pm;
++ int *pm;
++ int *it;
++ char *kn;
+ char *s;
+
+ if (x >= SPNUM)
+@@ -684,7 +687,7 @@
+ * > 3
+ *
+ */
+-loseint()
++void loseint(void)
+ {
+ if (--c[INTELLIGENCE] < 3)
+ c[INTELLIGENCE] = 3;
+@@ -696,7 +699,7 @@
+ * This routine prints out a message saying "You can't aim your magic!" returns
+ * 0 if not confused, non-zero (time remaining confused) if confused
+ */
+-isconfuse()
++int isconfuse(void)
+ {
+ if (c[CONFUSE]) {
+ lprcat(" You can't aim your magic!");
+@@ -713,7 +716,7 @@
+ * returns 0 Enter with the spell number in x, and the monster number in
+ * monst.
+ */
+-nospell(x, monst)
++int nospell(x, monst)
+ int x, monst;
+ {
+ int tmp;
+@@ -737,7 +740,7 @@
+ * Function to return hp damage to monster due to a number of full hits Enter
+ * with the number of full hits being done
+ */
+-fullhit(xx)
++int fullhit(xx)
+ int xx;
+ {
+ int i;
+@@ -760,7 +763,7 @@
+ * the spell number in spnum, the damage to be done in dam, lprintf format
+ * string in str, and lprintf's argument in arg. Returns no value.
+ */
+-direct(spnum, dam, str, arg)
++void direct(spnum, dam, str, arg)
+ int spnum, dam, arg;
+ char *str;
+ {
+@@ -822,11 +825,11 @@
+ * str, the # of milliseconds to delay between locations in delay, and the
+ * character to represent the weapon in cshow. Returns no value.
+ */
+-godirect(spnum, dam, str, delay, cshow)
++void godirect(spnum, dam, str, delay, cshow)
+ int spnum, dam, delay;
+ char *str, cshow;
+ {
+- char *it;
++ int *it;
+ int x, y, m;
+ int dx, dy;
+
+@@ -967,7 +970,7 @@
+ * Subroutine to copy the word "monster" into lastmonst if the player is blind.
+ * Enter with the coordinates (x,y) of the monster Returns no value.
+ */
+-ifblind(x, y)
++void ifblind(x, y)
+ int x, y;
+ {
+ char *s;
+@@ -989,7 +992,7 @@
+ * Routine to ask for a direction to a spell and then teleport away monster
+ * Enter with the spell number that wants to teleport away Returns no value.
+ */
+-tdirect(spnum)
++void tdirect(spnum)
+ int spnum;
+ {
+ int x, y;
+@@ -1014,7 +1017,7 @@
+ }
+
+
+-makewall(spnum)
++void makewall(spnum)
+ int spnum;
+ {
+ int x, y;
+@@ -1025,7 +1028,12 @@
+ return;
+ dirsub(&x, &y);
+
+- if ((y >= 0) && (y <= MAXY - 1) && (x >= 0) && (x <= MAXX - 1)) /* within bounds? */
++ /* within bounds? */
++ if ( y >= 0 &&
++ y <= MAXY - 1 &&
++ x >= 0 &&
++ x <= MAXX - 1)
++ {
+ if (item[x][y] != OWALL) { /* can't make anything on
+ * walls */
+ if (item[x][y] == 0) { /* is it free of items? */
+@@ -1035,14 +1043,19 @@
+ item[x][y] = OWALL;
+ know[x][y] = 1;
+ show1cell(x, y);
+- } else
++ } else {
+ lprcat("\nyou can't make a wall there!");
+- } else
++ }
++ } else {
+ lprcat("\nthere's a monster there!");
+- } else
++ }
++ } else {
+ lprcat("\nthere's something there already!");
+- } else
++ }
++ } else {
+ lprcat("\nthere's a wall there already!");
++ }
++ }
+ }
+
+ /*
+@@ -1054,7 +1067,7 @@
+ * the spell number in sp, the damage done to wach square in dam, and the
+ * lprintf string to identify the spell in str. Returns no value.
+ */
+-omnidirect(spnum, dam, str)
++void omnidirect(spnum, dam, str)
+ int spnum, dam;
+ char *str;
+ {
+@@ -1062,9 +1075,9 @@
+
+ if (spnum < 0 || spnum >= SPNUM || str == 0)
+ return; /* bad args */
+- for (x = playerx - 1; x < playerx + 2; x++)
++ for (x = playerx - 1; x < playerx + 2; x++) {
+ for (y = playery - 1; y < playery + 2; y++) {
+- if ((m = mitem[x][y].mon) != 0)
++ if ((m = mitem[x][y].mon) != 0) {
+ if (nospell(spnum, m) == 0) {
+ ifblind(x, y);
+ cursors();
+@@ -1076,7 +1089,9 @@
+ lasthx = x;
+ lasthy = y;
+ }
++ }
+ }
++ }
+ }
+
+ /*
+@@ -1087,7 +1102,7 @@
+ * with the origination coordinates in (x,y). Returns index into diroffx[]
+ * (0-8).
+ */
+-dirsub(x, y)
++int dirsub(x, y)
+ int *x, *y;
+ {
+ int i;
+@@ -1130,7 +1145,7 @@
+ * level. Returns TRUE if it was out of bounds, and the *x & *y in the
+ * calling routine are affected.
+ */
+-verifyxy(x, y)
++int verifyxy(x, y)
+ int *x, *y;
+ {
+ int flag = 0;
+@@ -1162,7 +1177,7 @@
+ * Subroutine to polymorph a monster and ask for the direction its in Enter with
+ * the spell number in spmun. Returns no value.
+ */
+-dirpoly(spnum)
++void dirpoly(spnum)
+ int spnum;
+ {
+ int x, y, m;
+@@ -1194,7 +1209,7 @@
+ * This routine is used for a bash & slash type attack on a monster Enter with
+ * the coordinates of the monster in (x,y). Returns no value.
+ */
+-hitmonster(x, y)
++void hitmonster(x, y)
+ int x, y;
+ {
+ int tmp, monst, damag, flag;
+@@ -1231,11 +1246,14 @@
+
+ /* if the monster was hit */
+ if (flag) {
+- if (iven[c[WIELD]] != OSWORDofSLASHING)
++ if (iven[c[WIELD]] != OSWORDofSLASHING) {
+ /* if a "dulling" monster */
+- if (monst == RUSTMONSTER || monst == DISENCHANTRESS || monst == CUBE)
++ if ( monst == RUSTMONSTER ||
++ monst == DISENCHANTRESS ||
++ monst == CUBE)
++ {
+ /* if we are wielding something */
+- if (c[WIELD] > 0)
++ if (c[WIELD] > 0) {
+ /* if it's not already dulled to hell */
+ if (((ivenarg[c[WIELD]] > -10) &&
+ ((iven[c[WIELD]] == OSLAYER) ||
+@@ -1248,7 +1266,8 @@
+ (iven[c[WIELD]] == OLANCE) ||
+ (iven[c[WIELD]] == OHAMMER) ||
+ (iven[c[WIELD]] == OBELT)))
+- || (ivenarg[c[WIELD]] > 0)) {
++ || (ivenarg[c[WIELD]] > 0))
++ {
+ lprintf("\nYour weapon is dulled by the %s", lastmonst);
+ beep();
+ --ivenarg[c[WIELD]];
+@@ -1257,6 +1276,9 @@
+ iven[c[WIELD]] = ivenarg[c[WIELD]] = 0;
+ c[WIELD] = 0;
+ }
++ }
++ }
++ }
+ }
+ if (flag) {
+ hitm(x, y, damag);
+@@ -1271,7 +1293,7 @@
+ show1cell(x, y);
+ }
+ if (mitem[x][y].mon == LEMMING)
+- if (rnd(100) <= 40)
++ if (rnd(100) <= 10)
+ createmonster(LEMMING);
+ }
+
+@@ -1284,7 +1306,7 @@
+ * specifically damage a monster at a location (x,y) Called by
+ * hitmonster(x,y)
+ */
+-hitm(x, y, amt)
++int hitm(x, y, amt)
+ int x, y, amt;
+ {
+ int monst;
+@@ -1369,7 +1391,7 @@
+ * Function for the monster to hit the player with monster at location x,y
+ * Returns nothing of value.
+ */
+-hitplayer (x, y)
++void hitplayer (x, y)
+ int x, y;
+ {
+ register int dam,tmp,mster,bias;
+@@ -1465,7 +1487,7 @@
+ * Enter with the monster number
+ * Returns nothing of value.
+ */
+-dropsomething (x,y,monst)
++void dropsomething (x,y,monst)
+ int x,y;
+ int monst;
+ {
+@@ -1495,7 +1517,7 @@
+ *
+ * Enter with the number of gold pieces to drop Returns nothing of value.
+ */
+-dropgold(amount)
++void dropgold(amount)
+ int amount;
+ {
+ if (amount > 250)
+@@ -1512,7 +1534,7 @@
+ * with the cave level on which something is to be dropped Returns nothing of
+ * value.
+ */
+-something(x,y,lev)
++void something(x,y,lev)
+ int x,y,lev;
+ {
+ int j, i;
+@@ -1544,7 +1566,7 @@
+ OSPEAR, OBELT, ORING, OSTUDLEATHER, OSHIELD, OFLAIL, OCHAIN,
+ O2SWORD, OPLATE, OLONGSWORD}; /* 38 */
+
+-newobject(lev, i)
++int newobject(lev, i)
+ int lev, *i;
+ {
+ int tmp = 32, j;
+@@ -1671,18 +1693,19 @@
+ */
+ #define ARMORTYPES 6
+
+-static short rustarm[ARMORTYPES][2] = {
+- OSTUDLEATHER, -2,
+- ORING, -4,
+- OCHAIN, -5,
+- OSPLINT, -6,
+- OPLATE, -8,
+- OPLATEARMOR, -9
++static short rustarm[ARMORTYPES][2] =
++{
++ { OSTUDLEATHER, -2 },
++ { ORING, -4 },
++ { OCHAIN, -5 },
++ { OSPLINT, -6 },
++ { OPLATE, -8 },
++ { OPLATEARMOR, -9 },
+ };
+
+ static char spsel[] = {1, 2, 3, 5, 6, 8, 9, 11, 13, 14};
+
+-spattack(x, xx, yy)
++int spattack(x, xx, yy)
+ int x, xx, yy;
+ {
+ int i, j = 0, k, m;
+@@ -1693,12 +1716,14 @@
+ /*
+ * cancel only works 5% of time for demon prince and god
+ */
+- if (c[CANCELLATION])
++ if (c[CANCELLATION]) {
+ if (mitem[xx][yy].mon >= DEMONPRINCE) {
+ if (rnd(100) >= 95)
+ return (0);
+- } else
++ } else {
+ return (0);
++ }
++ }
+
+ /* staff of power cancels demonlords/wraiths/vampires 75% of time */
+ /* lucifer is unaffected */
+@@ -1921,7 +1946,7 @@
+ * Enter with the number of hit points to lose Note: if x > c[HP] this routine
+ * could kill the player!
+ */
+-checkloss(x)
++void checkloss(x)
+ int x;
+ {
+ if (x > 0) {
+@@ -1937,16 +1962,17 @@
+ * Gives player experience, but no dropped objects Returns the experience gained
+ * from all monsters killed
+ */
+-annihilate()
++void annihilate(void)
+ {
+ int i, j;
+ long k;
+- char *p;
++ int *p;
+
+- for (k = 0, i = playerx - 1; i <= playerx + 1; i++)
+- for (j = playery - 1; j <= playery + 1; j++)
+- if (!verifyxy(&i, &j)) /* if not out of bounds */
+- if (*(p = &mitem[i][j].mon)) /* if a monster there */
++ for (k = 0, i = playerx - 1; i <= playerx + 1; i++) {
++ for (j = playery - 1; j <= playery + 1; j++) {
++ if (!verifyxy(&i, &j)) { /* if not out of bounds */
++ p = &mitem[i][j].mon;
++ if (*p) { /* if a monster there */
+ if (*p < DEMONLORD) {
+ k += monster[*p].experience;
+ *p = know[i][j] = 0;
+@@ -1956,6 +1982,10 @@
+ /* lose half hit points */
+ hitp[i][j] = (hitp[i][j] >> 1) + 1;
+ }
++ }
++ }
++ }
++ }
+ if (k > 0) {
+ lprcat("\nYou hear loud screams of agony!");
+ raiseexperience((long) k);
+@@ -1967,7 +1997,7 @@
+ *
+ * This is done by setting a flag in the monster[] structure
+ */
+-genmonst()
++void genmonst(void)
+ {
+ int i, j;
+
+@@ -1996,7 +2026,7 @@
+ * function to return monster number for a randomly selected monster for the
+ * given cave level
+ */
+-makemonst(lev)
++int makemonst(lev)
+ int lev;
+ {
+ int tmp, x;
+@@ -2028,7 +2058,7 @@
+ /*
+ subroutine to randomly create monsters if needed
+ */
+-randmonst ()
++void randmonst (void)
+ { /* don't make monsters if time is stopped */
+ if (c[TIMESTOP])
+ return;
diff --git a/games/ularn/patches/patch-aq b/games/ularn/patches/patch-aq
new file mode 100644
index 00000000000..ff332418cc2
--- /dev/null
+++ b/games/ularn/patches/patch-aq
@@ -0,0 +1,94 @@
+$NetBSD: patch-aq,v 1.1.1.1 2001/04/27 15:27:31 agc Exp $
+
+--- moreobj.c.orig Sat Jan 13 20:22:49 2001
++++ moreobj.c Sat Jan 13 20:27:37 2001
+@@ -7,6 +7,8 @@
+ * ochest()
+ * ofountain()
+ */
++#include <stdlib.h>
++#include <unistd.h>
+ #include "header.h"
+ #include "player.h"
+ #include "itm.h"
+@@ -19,7 +21,7 @@
+ * ******
+ *
+ */
+-oaltar()
++void oaltar(void)
+ {
+ long k;
+
+@@ -71,7 +73,7 @@
+ return;
+ }
+ c[GOLD] -= k;
+- if (k < c[GOLD]/10 || k<rnd(50) && !wizard) {
++ if ((k < c[GOLD]/10 || k<rnd(50)) && !wizard) {
+ createmonster(makemonst(level+2));
+ c[AGGRAVATE] += 500;
+ }
+@@ -129,7 +131,7 @@
+ /*
+ function to cast a +3 protection on the player
+ */
+-ohear()
++void ohear(void)
+ {
+ lprcat("You have been heard!");
+ if (c[ALTPRO]==0)
+@@ -144,7 +146,7 @@
+ * *******
+ *
+ */
+-othrone(arg)
++void othrone(arg)
+ int arg;
+ {
+ int i,k;
+@@ -194,7 +196,7 @@
+ } /* NOTREACHED */
+ }
+
+-odeadthrone()
++void odeadthrone(void)
+ {
+ int k;
+
+@@ -228,7 +230,7 @@
+ * ******
+ *
+ */
+-ochest()
++void ochest(void)
+ {
+ int i,k;
+
+@@ -294,7 +296,7 @@
+ * OFOUNTAIN
+ * *********
+ */
+-ofountain()
++void ofountain(void)
+ {
+ int x;
+
+@@ -371,7 +373,7 @@
+ a subroutine to raise or lower character levels
+ if how > 0 they are raised if how < 0 they are lowered
+ */
+-fntchange(how)
++void fntchange(how)
+ int how;
+ {
+ long j;
+@@ -464,7 +466,7 @@
+ *
+ * process an up/down of a character attribute for ofountain
+ */
+-fch(how,x)
++void fch(how,x)
+ int how;
+ long *x;
+ {
diff --git a/games/ularn/patches/patch-ar b/games/ularn/patches/patch-ar
new file mode 100644
index 00000000000..64c62d48f2e
--- /dev/null
+++ b/games/ularn/patches/patch-ar
@@ -0,0 +1,70 @@
+$NetBSD: patch-ar,v 1.1.1.1 2001/04/27 15:27:32 agc Exp $
+
+--- movem.c.orig Fri Jun 19 13:55:34 1992
++++ movem.c Sat Jan 13 20:33:43 2001
+@@ -10,6 +10,7 @@
+ * mmove(x,y,xd,yd)
+ * Function to actually perform the monster movement
+ */
++#include <stdlib.h>
+ #include "header.h"
+ #include "sphere.h"
+ #include "monst.h"
+@@ -26,7 +27,7 @@
+ */
+ static short w1[9],w1x[9],w1y[9];
+ static int tmp1,tmp2,tmp3,tmp4,distance;
+-movemonst()
++void movemonst(void)
+ {
+ int i,j;
+
+@@ -115,7 +116,7 @@
+ */
+ static int tmpitem,xl,xh,yl,yh;
+
+-movemt(i,j)
++void movemt(i,j)
+ int i,j;
+ {
+ int k,m,z,tmp,xtmp,ytmp,monst;
+@@ -294,7 +295,7 @@
+ * Enter with the from coordinates in (x,y) and the destination coordinates
+ * in (xd,yd).
+ */
+-mmove(aa,bb,cc,dd)
++void mmove(aa,bb,cc,dd)
+ int aa,bb,cc,dd;
+ {
+ int tmp,it,i,x,flag;
+@@ -372,10 +373,10 @@
+ hitp[cc][dd]=1;
+
+ if (tmp==LEMMING) {
+- /* 10% chance moving a lemming creates a new lemming
++ /* 1% chance moving a lemming creates a new lemming
+ ** in the old spot
+ */
+- if (rnd(100)<=9) {
++ if (rnd(100)==1) {
+ mitem[aa][bb].mon = LEMMING;
+ know[aa][bb]=1;
+ }
+@@ -398,7 +399,7 @@
+ case OEMERALD:
+ case OSAPPHIRE:
+ if (mitem[cc][dd].n < 6) {
+- char n = mitem[cc][dd].n++;
++ int n = mitem[cc][dd].n++;
+ mitem[cc][dd].it[n].item = item[cc][dd];
+ mitem[cc][dd].it[n].itemarg = iarg[cc][dd];
+ }
+@@ -481,7 +482,7 @@
+ show1cell(cc,dd);
+ }
+
+-teleportmonst (xx, yy, monst)
++void teleportmonst (xx, yy, monst)
+ int xx, yy, monst;
+ {
+ int i, x,y,trys;
diff --git a/games/ularn/patches/patch-as b/games/ularn/patches/patch-as
new file mode 100644
index 00000000000..36042b15efa
--- /dev/null
+++ b/games/ularn/patches/patch-as
@@ -0,0 +1,56 @@
+$NetBSD: patch-as,v 1.1.1.1 2001/04/27 15:27:31 agc Exp $
+
+--- nap.c.orig Sat Jan 13 20:39:28 2001
++++ nap.c Sat Jan 13 20:38:50 2001
+@@ -1,12 +1,14 @@
+ /* nap.c */
++#include <unistd.h>
+ #include "header.h"
++#include "extern.h"
+
+ int nonap = 0;
+
+ /*
+ * routine to take a nap for n milliseconds
+ */
+-nap(x)
++void nap(x)
+ int x;
+ {
+ if (x<=0 || nonap)
+@@ -23,7 +25,7 @@
+ SIGTYPE nullf(sig)int sig; { }
+
+ /* napms - sleep for time milliseconds - uses setitimer() */
+-napms(time)
++void napms(time)
+ int time;
+ {
+ struct itimerval timeout;
+@@ -48,7 +50,7 @@
+ # ifdef FTIMER
+ /* napms - sleep for time milliseconds - uses ftime() */
+
+-napms(time)
++void napms(time)
+ int time;
+ {
+ struct timeb _gtime;
+@@ -75,7 +77,7 @@
+ # else /* FTIMER */
+ # ifdef HZ
+ /* napms - sleep for time milliseconds - uses times() */
+-napms(time)
++void napms(time)
+ int time;
+ {
+ long matchclock, times();
+@@ -90,7 +92,7 @@
+ ;
+ }
+ # else
+-napms(x) int x; {}
++void napms(x) int x; {}
+ # endif /* HZ */
+ # endif /* FTIMER */
+ #endif /* ITIMER */
diff --git a/games/ularn/patches/patch-at b/games/ularn/patches/patch-at
new file mode 100644
index 00000000000..af4a3a0f5af
--- /dev/null
+++ b/games/ularn/patches/patch-at
@@ -0,0 +1,291 @@
+$NetBSD: patch-at,v 1.1.1.1 2001/04/27 15:27:32 agc Exp $
+
+--- object.c.orig Fri Jun 19 13:55:36 1992
++++ object.c Sat Jan 13 21:54:23 2001
+@@ -1,4 +1,5 @@
+ /* object.c */
++#include <stdlib.h>
+ #include "header.h"
+ #include "monst.h"
+ #include "itm.h"
+@@ -13,7 +14,7 @@
+ subroutine to look for an object and give the player his options
+ if an object was found.
+ */
+-lookforobject()
++void lookforobject(void)
+ {
+ int i,j;
+
+@@ -39,14 +40,14 @@
+ case OPOTION:
+ lprcat("\n\nYou have found a magic potion");
+ i = iarg[playerx][playery];
+- if (potionname[i][0]) lprintf(" of %s",&potionname[i][1]);
++ if (potionknown[i]) lprintf(" of %s",potionname[i]);
+ opotion(i);
+ break;
+
+ case OSCROLL:
+ lprcat("\n\nYou have found a magic scroll");
+ i = iarg[playerx][playery];
+- if (scrollname[i][0]) lprintf(" of %s",&scrollname[i][1]);
++ if (scrollknown[i]) lprintf(" of %s",scrollname[i]);
+ oscroll(i);
+ break;
+
+@@ -684,7 +685,7 @@
+ /*
+ function to say what object we found and ask if player wants to take it
+ */
+-finditem(itm)
++void finditem(itm)
+ int itm;
+ {
+ int tmp,i;
+@@ -732,7 +733,7 @@
+ subroutine to process the stair cases
+ if dir > 0 then up else down
+ */
+-ostairs(dir)
++void ostairs(dir)
+ int dir;
+ {
+ int x, y;
+@@ -806,7 +807,7 @@
+
+ subroutine to handle a teleport trap +/- 1 level maximum
+ */
+-oteleport(err)
++void oteleport(err)
+ int err;
+ {
+ int tmp;
+@@ -845,24 +846,10 @@
+ *******
+ OPOTION
+ *******
+- }
+- playerx = rnd(MAXX-2);
+- playery = rnd(MAXY-2);
+- if (level != tmp)
+- newcavelevel(tmp);
+- positionplayer();
+- draws(0,MAXX,0,MAXY);
+- bot_linex();
+-}
+-
+-/*
+- *******
+- OPOTION
+- *******
+
+ function to process a potion
+ */
+-opotion(pot)
++void opotion(pot)
+ int pot;
+ {
+ lprcat("\nDo you (d) drink it, (t) take it");
+@@ -890,7 +877,7 @@
+ /*
+ function to drink a potion
+ */
+-quaffpotion(pot)
++void quaffpotion(pot)
+ int pot;
+ {
+ int i,j;
+@@ -899,8 +886,8 @@
+ if (pot<0 || pot>=MAXPOTION)
+ return; /* check for within bounds */
+
+- if (potionname[pot][0] == '\0')
+- potionname[pot][0] = ' ';
++ if (potionknown[pot] == 0)
++ potionknown[pot] = 1;
+
+ switch(pot) {
+ case 0:
+@@ -1072,7 +1059,7 @@
+
+ function to process a magic scroll
+ */
+-oscroll(typ)
++void oscroll(typ)
+ int typ;
+ {
+ lprcat("\nDo you ");
+@@ -1110,13 +1097,13 @@
+ data for the function to read a scroll
+ */
+ static int xh,yh,yl,xl;
+-static char curse[] = {
++static int curse[] = {
+ BLINDCOUNT, CONFUSE, AGGRAVATE, HASTEMONST, ITCHING,
+ LAUGHING, DRAINSTRENGTH, CLUMSINESS, INFEEBLEMENT, HALFDAM };
+-static char exten[] = {
++static int exten[] = {
+ PROTECTIONTIME, DEXCOUNT, STRCOUNT, CHARMCOUNT,
+ INVISIBILITY, CANCELLATION, HASTESELF, GLOBE, SCAREMONST, HOLDMONST, TIMESTOP };
+-char time_change[] = {
++int time_change[] = {
+ HASTESELF,HERO,ALTPRO,PROTECTIONTIME,DEXCOUNT,
+ STRCOUNT,GIANTSTR,CHARMCOUNT,INVISIBILITY,CANCELLATION,
+ HASTESELF,AGGRAVATE,SCAREMONST,STEALTH,AWARENESS,HOLDMONST,HASTEMONST,
+@@ -1125,7 +1112,7 @@
+ /*
+ * function to adjust time when time warping and taking courses in school
+ */
+-adjusttime(tim)
++void adjusttime(tim)
+ long tim;
+ {
+ int j;
+@@ -1143,13 +1130,13 @@
+ /*
+ function to read a scroll
+ */
+-read_scroll(typ)
++void read_scroll(typ)
+ int typ;
+ {
+ int i,j;
+ if (typ<0 || typ>=MAXSCROLL)
+ return; /* be sure we are within bounds */
+- scrollname[typ][0] = ' ';
++ scrollknown[typ] = 1;
+ switch(typ) {
+ case 0:
+ lprcat("\nYour armor glows for a moment");
+@@ -1282,9 +1269,9 @@
+ for (i=0; i<IVENSIZE; i++) /* identify */
+ {
+ if (iven[i]==OPOTION)
+- potionname[ivenarg[i]][0] = ' ';
++ potionknown[ivenarg[i]] = 1;
+ if (iven[i]==OSCROLL)
+- scrollname[ivenarg[i]][0] = ' ';
++ scrollknown[ivenarg[i]] = 1;
+ }
+ break;
+
+@@ -1309,7 +1296,7 @@
+ }
+
+
+-opit()
++void opit(void)
+ {
+ int i;
+ if (rnd(101)>81)
+@@ -1341,7 +1328,7 @@
+ }
+ }
+
+-obottomless()
++void obottomless(void)
+ {
+ lprcat("\nYou fell into a pit leading straight to HELL!");
+ beep();
+@@ -1350,7 +1337,7 @@
+ died(262);
+ }
+
+-oelevator(dir)
++void oelevator(dir)
+ int dir;
+ {
+ if (dir==1) {
+@@ -1382,14 +1369,14 @@
+ bot_linex();
+ }
+
+-ostatue()
++void ostatue(void)
+ { } /* nothing happens when you move on a statue */
+
+
+-omirror()
++void omirror(void)
+ { } /* nothing happens when you move on a mirror */
+
+-obook()
++void obook(void)
+ {
+ lprcat("\nDo you ");
+ if (c[BLINDCOUNT]==0) lprcat("(r) read it, ");
+@@ -1421,7 +1408,7 @@
+ /*
+ function to read a book
+ */
+-readbook(arg)
++void readbook(arg)
+ int arg;
+ {
+ int i,tmp;
+@@ -1443,7 +1430,7 @@
+ }
+ }
+
+-ocookie()
++void ocookie(void)
+ {
+ char *fortune(), *p;
+
+@@ -1474,7 +1461,7 @@
+
+
+ /* routine to pick up some gold -- if arg==OMAXGOLD then the pile is worth 100* the argument */
+-ogold(arg)
++void ogold(arg)
+ int arg;
+ {
+ long i;
+@@ -1491,7 +1478,7 @@
+ item[playerx][playery] = know[playerx][playery] = 0;/*destroy gold*/
+ }
+
+-ohome()
++void ohome(void)
+ {
+ int i;
+
+@@ -1501,7 +1488,7 @@
+ if (iven[i]==OPOTION)
+ if (ivenarg[i]==21) {
+ iven[i]=0;
+- clear();
++ ularn_clear();
+ lprcat("Congratulations. You found the potion of cure dianthroritis!\n");
+ lprcat("\nFrankly, No one thought you could do it.");
+ lprcat(" Boy! Did you surprise them!\n");
+@@ -1531,7 +1518,7 @@
+ }
+
+ while (1) {
+- clear();
++ ularn_clear();
+ lprintf("Welcome home %s.",logname);
+ lprcat(" Latest word from the doctor is not good.\n");
+
+@@ -1571,16 +1558,16 @@
+ }
+
+ /* routine to save program space */
+-iopts()
++void iopts(void)
+ {
+ lprcat(", or (i) ignore it? ");
+ }
+-ignore()
++void ignore(void)
+ {
+ lprcat("ignore\n");
+ }
+
+-closedoor()
++void closedoor(void)
+ {
+ int i;
+
diff --git a/games/ularn/patches/patch-au b/games/ularn/patches/patch-au
new file mode 100644
index 00000000000..4fcdd392d1a
--- /dev/null
+++ b/games/ularn/patches/patch-au
@@ -0,0 +1,317 @@
+$NetBSD: patch-au,v 1.1.1.1 2001/04/27 15:27:31 agc Exp $
+
+--- player.c.orig Fri Jun 19 13:55:34 1992
++++ player.c Sat Jan 13 21:54:50 2001
+@@ -20,6 +20,7 @@
+ * to quit
+ */
+
++#include <stdlib.h>
+ #include "header.h"
+ #include "player.h"
+ #include "monst.h"
+@@ -36,7 +37,7 @@
+ * uses the skill[] array to find level boundarys
+ * uses c[EXPERIENCE] c[LEVEL]
+ */
+-raiselevel ()
++void raiselevel (void)
+ {
+ if (c[LEVEL] < MAXPLEVEL)
+ raiseexperience((long)(skill[c[LEVEL]]-c[EXPERIENCE]));
+@@ -50,7 +51,7 @@
+ *
+ * subroutine to lower the players character level by one
+ */
+-loselevel ()
++void loselevel (void)
+ {
+ if (c[LEVEL] > 1)
+ loseexperience((long)(c[EXPERIENCE] - skill[c[LEVEL]-1] + 1));
+@@ -64,7 +65,7 @@
+ *
+ * subroutine to increase experience points
+ */
+-raiseexperience (x)
++void raiseexperience (x)
+ long x;
+ {
+ int i,tmp;
+@@ -115,9 +116,9 @@
+ for (i=0; i<SPNUM; i++)
+ spelknow[i]=1;
+ for (i=0; i<MAXSCROLL; i++)
+- scrollname[i][0]=' ';
++ scrollknown[i]=1;
+ for (i=0; i<MAXPOTION; i++)
+- potionname[i][0]=' ';
++ potionknown[i]=1;
+ }
+ break;
+ }
+@@ -132,7 +133,7 @@
+ *
+ * subroutine to lose experience points
+ */
+-loseexperience (x)
++void loseexperience (x)
+ long x;
+ {
+ int i,tmp;
+@@ -167,7 +168,7 @@
+ * subroutine to remove hit points from the player
+ * warning -- will kill player if hp goes to zero
+ */
+-losehp (x)
++void losehp (x)
+ int x;
+ {
+ if ((c[HP] -= x) <= 0) {
+@@ -178,7 +179,7 @@
+ }
+ }
+
+-losemhp (x)
++void losemhp (x)
+ int x;
+ {
+ c[HP] -= x;
+@@ -198,14 +199,14 @@
+ *
+ * subroutine to gain maximum hit points
+ */
+-raisehp (x)
++void raisehp (x)
+ int x;
+ {
+ if ((c[HP] += x) > c[HPMAX])
+ c[HP] = c[HPMAX];
+ }
+
+-raisemhp (x)
++void raisemhp (x)
+ int x;
+ {
+ c[HPMAX] += x;
+@@ -221,14 +222,14 @@
+ *
+ * subroutine to gain maximum spells
+ */
+-raisespells (x)
++void raisespells (x)
+ int x;
+ {
+ if ((c[SPELLS] += x) > c[SPELLMAX])
+ c[SPELLS] = c[SPELLMAX];
+ }
+
+-raisemspells (x)
++void raisemspells (x)
+ int x;
+ {
+ c[SPELLMAX]+=x;
+@@ -244,14 +245,14 @@
+ *
+ * subroutine to lose maximum spells
+ */
+-losespells (x)
++void losespells (x)
+ int x;
+ {
+ if ((c[SPELLS] -= x) < 0)
+ c[SPELLS]=0;
+ }
+
+-losemspells (x)
++void losemspells (x)
+ int x;
+ {
+ if ((c[SPELLMAX] -= x) < 0)
+@@ -266,7 +267,7 @@
+ *
+ * function to be sure player is not in a wall
+ */
+-positionplayer ()
++void positionplayer ()
+ {
+ int try;
+ try = 2;
+@@ -286,7 +287,7 @@
+ /*
+ * recalc() function to recalculate the armor class of the player
+ */
+-recalc ()
++void recalc ()
+ {
+ int i,j,k;
+
+@@ -417,7 +418,7 @@
+ *
+ * subroutine to ask if the player really wants to quit
+ */
+-quit ()
++void quit (void)
+ {
+ int i;
+
+@@ -427,7 +428,7 @@
+ while (1) {
+ i=getcharacter();
+ if (i == 'y') {
+- clear();
++ ularn_clear();
+ lflush();
+ died(300);
+ return;
+@@ -440,7 +441,7 @@
+ if (i == 's') {
+ lprcat(" save");
+ lflush();
+- clear();
++ ularn_clear();
+ lprcat("Saving . . .");
+ lflush();
+ savegame(savefilename);
+@@ -466,7 +467,7 @@
+ /*
+ * function to ask --more-- then the user must enter a space
+ */
+-more()
++void more(void)
+ {
+ char c;
+
+@@ -481,7 +482,7 @@
+ * function to put something in the players inventory
+ * returns 0 if success, 1 if a failure
+ */
+-take (itm, arg)
++int take (itm, arg)
+ int itm, arg;
+ {
+ int i;
+@@ -576,7 +577,7 @@
+ *
+ * k is index into iven list of object to drop
+ */
+-drop_object (k)
++int drop_object (k)
+ int k;
+ {
+ int itm, pitflag=0;
+@@ -628,7 +629,7 @@
+ /*
+ * function to enchant armor player is currently wearing
+ */
+-enchantarmor ()
++void enchantarmor (void)
+ {
+ int tmp;
+
+@@ -677,7 +678,7 @@
+ /*
+ * function to enchant a weapon presently being wielded
+ */
+-enchweapon ()
++void enchweapon (void)
+ {
+ int tmp;
+
+@@ -716,7 +717,7 @@
+ * routine to tell if player can carry one more thing
+ * returns 1 if pockets are full, else 0
+ */
+-pocketfull ()
++int pocketfull (void)
+ {
+ int i,limit;
+ if ((limit = 15+(c[LEVEL]>>1)) > IVENSIZE)
+@@ -730,7 +731,7 @@
+ /*
+ * function to return 1 if a monster is next to the player else returns 0
+ */
+-nearbymonst ()
++int nearbymonst (void)
+ {
+ int tmp,tmp2;
+
+@@ -745,7 +746,7 @@
+ * function to steal an item from the players pockets
+ * returns 1 if steals something else returns 0
+ */
+-stealsomething (x,y)
++int stealsomething (x,y)
+ int x,y;
+ {
+ int i,n=100;
+@@ -775,7 +776,7 @@
+ /*
+ * function to return 1 is player carrys nothing else return 0
+ */
+-emptyhanded ()
++int emptyhanded (void)
+ {
+ int i;
+
+@@ -789,7 +790,7 @@
+ /*
+ * function to create a gem on a square near the player
+ */
+-creategem ()
++void creategem (void)
+ {
+ int i,j;
+
+@@ -818,7 +819,7 @@
+ * function to change character levels as needed when dropping an object
+ * that affects these characteristics
+ */
+-adjustcvalues (itm, arg)
++void adjustcvalues (itm, arg)
+ int itm, arg;
+ {
+ int flag,i;
+@@ -902,7 +903,7 @@
+ * function to read a string from token input "string"
+ * returns a pointer to the string
+ */
+-gettokstr (str)
++void gettokstr (str)
+ char *str;
+ {
+ int i,j;
+@@ -929,14 +930,14 @@
+ * returns 1 if entered correctly, 0 if not
+ */
+
+-getpassword ()
++int getpassword (void)
+ {
+ char gpwbuf[BUFSIZ];
+
+ scbr();
+ lprcat("\nEnter Password: ");
+ lflush();
+- gets(gpwbuf);
++ fgets(gpwbuf, BUFSIZ, stdin);
+ if (strcmp(gpwbuf,password) != 0) {
+ lprcat("\nSorry\n");
+ lflush();
+@@ -949,7 +950,7 @@
+ * subroutine to get a yes or no response from the user
+ * returns y or n
+ */
+-getyn ()
++int getyn (void)
+ {
+ int i;
+
+@@ -965,7 +966,7 @@
+ * function to calculate the pack weight of the player
+ * returns the number of pounds the player is carrying
+ */
+-packweight ()
++int packweight (void)
+ {
+ int i,j,k;
+
diff --git a/games/ularn/patches/patch-av b/games/ularn/patches/patch-av
new file mode 100644
index 00000000000..787e2348c64
--- /dev/null
+++ b/games/ularn/patches/patch-av
@@ -0,0 +1,19 @@
+$NetBSD: patch-av,v 1.1.1.1 2001/04/27 15:27:31 agc Exp $
+
+--- regen.c.orig Sat Jan 13 21:19:57 2001
++++ regen.c Sat Jan 13 21:21:02 2001
+@@ -1,4 +1,5 @@
+ /* regen.c */
++#include <stdlib.h>
+ #include "header.h"
+ #include "player.h"
+ #include "itm.h"
+@@ -12,7 +13,7 @@
+
+ subroutine to regenerate player hp and spells
+ */
+-regen()
++void regen(void)
+ {
+ int i,flag;
+ long *d;
diff --git a/games/ularn/patches/patch-aw b/games/ularn/patches/patch-aw
new file mode 100644
index 00000000000..e0b7d31ef13
--- /dev/null
+++ b/games/ularn/patches/patch-aw
@@ -0,0 +1,243 @@
+$NetBSD: patch-aw,v 1.1.1.1 2001/04/27 15:27:32 agc Exp $
+
+--- savelev.c.orig Fri Jun 19 13:55:34 1992
++++ savelev.c Sun Jan 14 15:27:32 2001
+@@ -1,4 +1,6 @@
+ /* savelev.c */
++#include <stdlib.h>
++#include <unistd.h>
+ #include "header.h"
+ #include "sphere.h"
+ #include "player.h"
+@@ -9,9 +11,7 @@
+ extern char *sys_errlist[];
+ extern int errno;
+
+-typedef char Char_Ary[MAXX][MAXY];
+-typedef short Short_Ary[MAXX][MAXY];
+-typedef long Long_Ary[MAXX][MAXY];
++typedef int Int_Ary[MAXX][MAXY];
+ typedef struct_mitem Mitem_Ary[MAXX][MAXY];
+
+ static int w = 0;
+@@ -19,11 +19,11 @@
+
+ /* this is the structure that holds the entire dungeon specifications */
+ typedef struct save_lev_str {
+- Short_Ary hitp;
++ Int_Ary hitp;
+ Mitem_Ary mitem;
+- Char_Ary item;
+- Short_Ary iarg; /* must be long for goldpiles */
+- Char_Ary know;
++ Int_Ary item;
++ Int_Ary iarg;
++ Int_Ary know;
+ } Saved_Level;
+
+ static Saved_Level *saved_levels[NLEVELS];
+@@ -33,15 +33,15 @@
+ /*
+ * routine to save the present level into storage
+ */
+-savelevel()
++void savelevel(void)
+ {
+ Saved_Level *storage = saved_levels[level];
+
+- memcpy((char *)storage->hitp, (char *)hitp, sizeof(Short_Ary));
++ memcpy((char *)storage->hitp, (char *)hitp, sizeof(Int_Ary));
+ memcpy((char *)storage->mitem, (char *)mitem, sizeof(Mitem_Ary));
+- memcpy((char *)storage->item, (char *)item, sizeof(Char_Ary));
+- memcpy((char *)storage->iarg, (char *)iarg, sizeof(Short_Ary));
+- memcpy((char *)storage->know, (char *)know, sizeof(Char_Ary));
++ memcpy((char *)storage->item, (char *)item, sizeof(Int_Ary));
++ memcpy((char *)storage->iarg, (char *)iarg, sizeof(Int_Ary));
++ memcpy((char *)storage->know, (char *)know, sizeof(Int_Ary));
+ level_sums[level] = sum((unsigned char *)storage, sizeof(Saved_Level));
+ }
+
+@@ -49,17 +49,17 @@
+ /*
+ * routine to restore a level from storage
+ */
+-getlevel()
++void getlevel(void)
+ {
+ unsigned int i;
+
+ Saved_Level *storage = saved_levels[level];
+
+- memcpy((char *)hitp, (char *)storage->hitp, sizeof(Short_Ary));
++ memcpy((char *)hitp, (char *)storage->hitp, sizeof(Int_Ary));
+ memcpy((char *)mitem, (char *)storage->mitem, sizeof(Mitem_Ary));
+- memcpy((char *)item, (char *)storage->item, sizeof(Char_Ary));
+- memcpy((char *)iarg, (char *)storage->iarg, sizeof(Short_Ary));
+- memcpy((char *)know, (char *)storage->know, sizeof(Char_Ary));
++ memcpy((char *)item, (char *)storage->item, sizeof(Int_Ary));
++ memcpy((char *)iarg, (char *)storage->iarg, sizeof(Int_Ary));
++ memcpy((char *)know, (char *)storage->know, sizeof(Int_Ary));
+
+ if (level_sums[level] > 0) {
+ if ((i = sum((unsigned char *)storage,sizeof(Saved_Level)))
+@@ -82,7 +82,7 @@
+ /*
+ * to save the game in a file
+ */
+-savegame(fname)
++int savegame(fname)
+ char *fname;
+ {
+ int i;
+@@ -145,10 +145,10 @@
+ bwrite(fd,(char * )char_class, 20 * sizeof(char));
+
+ for (i=0; i<MAXSCROLL; i++)
+- bwrite(fd,(char *)scrollname[i], sizeof(scrollname[i]));
++ bwrite(fd, (char *)&scrollknown[i], sizeof(scrollknown[i]));
+
+ for (i=0; i<MAXPOTION; i++)
+- bwrite(fd,(char *)potionname[i], sizeof(potionname[i]));
++ bwrite(fd, (char *)&potionknown[i], sizeof(potionknown[i]));
+
+ bwrite(fd,(char *)spelknow, sizeof(char) * SPNUM);
+ bwrite(fd,(char *)&wizard, sizeof(wizard));
+@@ -192,18 +192,22 @@
+ }
+
+
+-restoregame(fname)
++void restoregame(fname)
+ char *fname;
+ {
+ int i;
+ unsigned int thesum, asum;
+ struct sphere *sp,*splast;
+ Saved_Level * storage;
+- char buf[1024], *tmp="/tmp/UtmpXXXXXX", *mktemp();
++ char buf[1024];
++ char *tmp;
+ int fd;
+
++ tmp = strdup("/tmp/UtmpXXXXXX");
+ if (compress) {
+- if ((tempfilename = mktemp(tmp)) == NULL) {
++ tempfilename = mktemp(tmp);
++ free(tmp);
++ if (tempfilename == NULL) {
+ fprintf(stderr,"Can't create temp file to restore game\n");
+ perror("mktemp");
+ nosignal=0;
+@@ -273,10 +277,10 @@
+ bread(fd,(char * )char_class, sizeof(char) * 20);
+
+ for (i=0; i<MAXSCROLL; i++)
+- bread(fd,(char *)scrollname[i], sizeof(scrollname[i]));
++ bread(fd, (char *)&scrollknown[i], sizeof(scrollknown[i]));
+
+ for (i=0; i<MAXPOTION; i++)
+- bread(fd,(char *)potionname[i], sizeof(potionname[i]));
++ bread(fd, (char *)&potionknown[i], sizeof(potionknown[i]));
+
+ bread(fd,(char * )spelknow, sizeof(char) * SPNUM);
+
+@@ -350,7 +354,7 @@
+ /*
+ subroutine to not allow greedy cheaters
+ */
+-greedy()
++void greedy(void)
+ {
+ if (wizard)
+ return;
+@@ -370,7 +374,7 @@
+ subroutine to not allow altered save files and terminate the attempted
+ restart
+ */
+-fsorry()
++void fsorry(void)
+ {
+ if (cheat)
+ return;
+@@ -385,7 +389,7 @@
+ /*
+ subroutine to not allow game if save file can't be deleted
+ */
+-fcheat()
++void fcheat(void)
+ {
+ if (wizard)
+ return;
+@@ -403,7 +407,7 @@
+ }
+
+
+-init_cells()
++void init_cells(void)
+ {
+ int i;
+
+@@ -415,18 +419,20 @@
+ }
+
+
+-bwrite(fd, buf, num)
++void bwrite(fd, buf, num)
+ int fd;
+ char *buf;
+ long num;
+ {
+ int nwrote;
+ static int ncalls = 0;
++ char *zerror;
+
+ ncalls++;
+ if ((nwrote = write(fd, buf, num)) == -1) {
++ zerror = strerror(errno);
+ fprintf(stderr, "Error writing to save file\n");
+- fprintf(stderr, "errno = %d\t[%s]\n",errno,sys_errlist[errno]);
++ fprintf(stderr, "errno = %d\t[%s]\n",errno,zerror);
+ fprintf(stderr, " Wrote %d bytes so far\n", w);
+ fprintf(stderr, " Call: %d\n", ncalls);
+ abort();
+@@ -437,7 +443,7 @@
+ w += nwrote;
+ if (nwrote != num) {
+ fprintf(stderr, "Error writing to save file\n");
+- fprintf(stderr, "wrote %d, wanted %d\n", nwrote, num);
++ fprintf(stderr, "wrote %d, wanted %ld\n", nwrote, num);
+ fprintf(stderr, " Wrote %d bytes so far\n", w);
+ fprintf(stderr, " Call: %d\n", ncalls);
+ sleep(4);
+@@ -446,18 +452,20 @@
+ FileSum += sum((unsigned char *)buf, num);
+ }
+
+-bread(fd, buf, num)
++void bread(fd, buf, num)
+ int fd;
+ char *buf;
+ long num;
+ {
+ int nread;
+ static int ncalls = 0;
++ char *zerror;
+
+ ncalls++;
+ if ((nread = read(fd, buf, num)) == -1) {
++ zerror = strerror(errno);
+ fprintf(stderr, "Error reading from save file\n");
+- fprintf(stderr, "errno = %d\t[%s]\n",errno,sys_errlist[errno]);
++ fprintf(stderr, "errno = %d\t[%s]\n",errno,zerror);
+ fprintf(stderr, " Read %d bytes so far\n", w);
+ fprintf(stderr, " Call: %d\n", ncalls);
+ perror("read");
+@@ -467,7 +475,7 @@
+ r += nread;
+ if (nread != num) {
+ fprintf(stderr, "Error reading save file\n");
+- fprintf(stderr, " Got %d, wanted %d bytes\n", nread, num);
++ fprintf(stderr, " Got %d, wanted %ld bytes\n", nread, num);
+ fprintf(stderr, " Read %d bytes so far\n", r);
+ fprintf(stderr, " Call: %d\n", ncalls);
+ sleep(4);
diff --git a/games/ularn/patches/patch-ax b/games/ularn/patches/patch-ax
new file mode 100644
index 00000000000..fc3cbf63583
--- /dev/null
+++ b/games/ularn/patches/patch-ax
@@ -0,0 +1,198 @@
+$NetBSD: patch-ax,v 1.1.1.1 2001/04/27 15:27:31 agc Exp $
+
+--- scores.c.orig Fri Jun 19 13:55:34 1992
++++ scores.c Sat Jan 13 21:55:18 2001
+@@ -33,6 +33,7 @@
+ * diedsub(x)
+ * Subroutine to print out a line showing player when he is killed
+ */
++#include <unistd.h>
+ #include "header.h"
+ #include "monst.h"
+ #include "itm.h"
+@@ -109,7 +110,7 @@
+ *
+ * returns -1 if unable to read in the scoreboard, returns 0 if all is OK
+ */
+-readboard()
++int readboard(void)
+ {
+ FILE *fp;
+
+@@ -142,7 +143,7 @@
+ *
+ * returns -1 if unable to write the scoreboard, returns 0 if all is OK
+ */
+-writeboard()
++int writeboard(void)
+ {
+ FILE *fp;
+
+@@ -175,7 +176,7 @@
+ *
+ * returns -1 if unable to write the scoreboard, returns 0 if all is OK
+ */
+-makeboard()
++int makeboard(void)
+ {
+ int i;
+
+@@ -200,7 +201,7 @@
+ * scoreboard. This function also sets outstanding_taxes to the value in
+ * the winners scoreboard.
+ */
+-hashewon()
++int hashewon(void)
+ {
+ int i;
+
+@@ -263,7 +264,7 @@
+ *
+ * Returns the number of players on scoreboard that were shown
+ */
+-winshou()
++int winshou(void)
+ {
+ struct wscofmt *p;
+ int i, j, count;
+@@ -312,7 +313,7 @@
+ * Enter with 0 to list the scores, enter with 1 to list inventories too
+ * Returns the number of players on scoreboard that were shown
+ */
+-shou(x)
++int shou(x)
+ int x;
+ {
+ int i, j, n;
+@@ -385,7 +386,7 @@
+ */
+ static char esb[] = "The scoreboard is empty.\n";
+
+-showscores()
++void showscores(void)
+ {
+ int i, j;
+
+@@ -408,7 +409,7 @@
+ *
+ * Returns nothing of value
+ */
+-showallscores()
++void showallscores(void)
+ {
+ int i, j;
+
+@@ -419,9 +420,9 @@
+ c[WEAR] = c[WIELD] = c[SHIELD] = -1;
+
+ for (i = 0; i < MAXPOTION; i++)
+- potionname[i][0] = ' ';
++ potionknown[i] = 1;
+ for (i = 0; i < MAXSCROLL; i++)
+- scrollname[i][0] = ' ';
++ scrollknown[i] = 1;
+
+ i = winshou();
+ j = shou(1);
+@@ -439,7 +440,7 @@
+ *
+ * Returns 0 if no sorting done, else returns 1
+ */
+-sortboard()
++int sortboard(void)
+ {
+ int i, j, pos;
+ long jdat;
+@@ -480,7 +481,7 @@
+ * died() reason # in whyded, and TRUE/FALSE in winner if a winner
+ * ex. newscore(1000, "player 1", 32, 0);
+ */
+-newscore(score, whoo, whyded, winner)
++void newscore(score, whoo, whyded, winner)
+ long score;
+ int winner, whyded;
+ char *whoo;
+@@ -544,7 +545,7 @@
+ * slot in scoreboard in i, and the tax bill in taxes.
+ * Returns nothing of value
+ */
+-new1sub(score, i, whoo, taxes)
++void new1sub(score, i, whoo, taxes)
+ long score, taxes;
+ int i;
+ char *whoo;
+@@ -576,7 +577,7 @@
+ * died() reason # in whyded, and slot in scoreboard in i.
+ * Returns nothing of value
+ */
+-new2sub(score, i, whoo, whyded)
++void new2sub(score, i, whoo, whyded)
+ long score;
+ int i, whyded;
+ char *whoo;
+@@ -649,7 +650,7 @@
+
+ static int scorerror;
+
+-died(x)
++void died(x)
+ int x;
+ {
+ int f, win;
+@@ -710,7 +711,7 @@
+ /* now enter the player at the end of the scoreboard */
+ newscore(c[GOLD] + c[BANKACCOUNT], logname, x, win);
+
+- clear();
++ ularn_clear();
+ lflush();
+ diedsub(x); /* print out the score line */
+
+@@ -743,7 +744,7 @@
+ * diedsub(x)
+ * int x;
+ */
+-diedsub(x)
++void diedsub(x)
+ int x;
+ {
+ char ch, *mod, *cls;
+@@ -753,7 +754,7 @@
+ puts("---------------------------------------------------------------");
+ puts(" U L A R N S C O R E S");
+ puts("---------------------------------------------------------------");
+- printf("Score: %ld Diff: %d ", c[GOLD], c[HARDGAME]);
++ printf("Score: %ld Diff: %ld ", c[GOLD], c[HARDGAME]);
+ printf("Level: %s Char: %s\n", cls, char_class);
+ printf("\t%s", logname);
+ if (wizard)
+@@ -788,7 +789,7 @@
+ fflush(stdout);
+ }
+
+-showscore3(index)
++void showscore3(index)
+ int index;
+ {
+ switch (iven[index]) {
+@@ -820,9 +821,9 @@
+ default:
+ printf("\n%c) %s", index + 'a' , objectname[iven[index]]);
+ if (ivenarg[index] > 0)
+- printf(" + %d", (long)ivenarg[index]);
++ printf(" + %ld", (long)ivenarg[index]);
+ else if (ivenarg[index] < 0)
+- printf(" %d", (long)ivenarg[index]);
++ printf(" %ld", (long)ivenarg[index]);
+ break;
+ }
+ if (c[WIELD] == index)
+@@ -832,7 +833,7 @@
+ fflush(stdout);
+ }
+
+-showscore1(idx, str2)
++void showscore1(idx, str2)
+ int idx;
+ char *str2[];
+ {
diff --git a/games/ularn/patches/patch-ay b/games/ularn/patches/patch-ay
new file mode 100644
index 00000000000..2c026281c70
--- /dev/null
+++ b/games/ularn/patches/patch-ay
@@ -0,0 +1,145 @@
+$NetBSD: patch-ay,v 1.1.1.1 2001/04/27 15:27:31 agc Exp $
+
+--- show.c.orig Fri Jun 19 13:55:30 1992
++++ show.c Sat Jan 13 21:55:39 2001
+@@ -9,7 +9,7 @@
+
+ show character's inventory
+ */
+-showstr()
++void showstr(void)
+ {
+ int i,number;
+
+@@ -20,7 +20,7 @@
+ t_endup(number);
+ }
+
+-qshowstr()
++void qshowstr(void)
+ {
+ int k;
+
+@@ -44,7 +44,7 @@
+ /*
+ * subroutine to clear screen depending on # lines to display
+ */
+-t_setup (count)
++void t_setup (count)
+ int count;
+ {
+ if (count<20) {
+@@ -53,14 +53,14 @@
+ }
+ else {
+ resetscroll();
+- clear();
++ ularn_clear();
+ }
+ }
+
+ /*
+ * subroutine to restore normal display screen depending on t_setup()
+ */
+-t_endup (count)
++void t_endup (count)
+ int count;
+ {
+ if (count<18) /* how did we clear the screen? */
+@@ -74,7 +74,7 @@
+ /*
+ function to show the things player is wearing only
+ */
+-showwear()
++void showwear(void)
+ {
+ int count, i,j;
+
+@@ -124,7 +124,7 @@
+ /*
+ function to show the things player can wield only
+ */
+-showwield()
++void showwield(void)
+ {
+ int i,j,count;
+
+@@ -182,7 +182,7 @@
+ /*
+ * function to show the things player can read only
+ */
+-showread ()
++void showread (void)
+ {
+ int i,j,count;
+
+@@ -213,7 +213,7 @@
+ /*
+ * function to show the things player can eat only
+ */
+-showeat ()
++void showeat (void)
+ {
+ int i,j,count;
+
+@@ -242,7 +242,7 @@
+ /*
+ function to show the things player can quaff only
+ */
+-showquaff ()
++void showquaff (void)
+ {
+ int i,j,count;
+
+@@ -268,27 +268,26 @@
+ t_endup(count);
+ }
+
+-show1 (idx, str2)
++void show1 (idx, str2, known)
+ int idx;
+ char *str2[];
++int known;
+ {
+- if (str2==0)
+- lprintf("\n%c) %s",idx+'a',objectname[iven[idx]]);
+- else if (*str2[ivenarg[idx]]==0)
++ if (str2 == 0 || known == 0)
+ lprintf("\n%c) %s",idx+'a',objectname[iven[idx]]);
+ else
+- lprintf("\n%c) %s of%s",
++ lprintf("\n%c) %s of %s",
+ idx+'a',objectname[iven[idx]],str2[ivenarg[idx]]);
+ if (wizard)
+ lprintf(" [ %d ]", ivenarg[idx]);
+ }
+
+-show3 (index)
++void show3 (index)
+ int index;
+ {
+ switch(iven[index]) {
+- case OPOTION: show1(index,potionname); break;
+- case OSCROLL: show1(index,scrollname); break;
++ case OPOTION: show1(index,potionname,potionknown[index]); break;
++ case OSCROLL: show1(index,scrollname,scrollknown[index]); break;
+ case OLARNEYE:
+ case OBOOK:
+ case OSPIRITSCARAB:
+@@ -305,7 +304,7 @@
+ case OURN:
+ case OWWAND:
+ case OSPHTALISMAN:
+- case ONOTHEFT: show1(index,(char **)0); break;
++ case ONOTHEFT: show1(index,(char **)0,0); break;
+
+ default:
+ lprintf("\n%c) %s",index+'a',objectname[iven[index]]);
+@@ -322,6 +321,6 @@
+ if (++srcount>=22) {
+ srcount=0;
+ more();
+- clear();
++ ularn_clear();
+ }
+ }
diff --git a/games/ularn/patches/patch-az b/games/ularn/patches/patch-az
new file mode 100644
index 00000000000..39e2693602e
--- /dev/null
+++ b/games/ularn/patches/patch-az
@@ -0,0 +1,76 @@
+$NetBSD: patch-az,v 1.1.1.1 2001/04/27 15:27:31 agc Exp $
+
+--- signal.c.orig Fri Jun 19 13:55:37 1992
++++ signal.c Sat Jan 13 21:03:53 2001
+@@ -1,8 +1,10 @@
+ /* signal.c */
++#include <sys/types.h>
++#include <unistd.h>
+ #include "header.h"
+ #include "extern.h"
+
+-s2choose() /* text to be displayed if ^C during intro screen */
++void s2choose(void) /* text to be displayed if ^C during intro screen */
+ {
+ cursor(1,24);
+ lprcat("Press ");
+@@ -14,7 +16,8 @@
+ }
+
+ SIGTYPE
+-cntlc() /* what to do for an interrupt */
++cntlc(siggy) /* what to do for an interrupt */
++int siggy;
+ {
+ if (nosignal) {
+ signal(SIGINT, cntlc);
+@@ -37,7 +40,8 @@
+ * subroutine to save the game if a hangup signal
+ */
+ SIGTYPE
+-sgam()
++sgam(siggy)
++int siggy;
+ {
+ if (ckpflag) {
+ if (fork() == 0) {
+@@ -86,10 +90,10 @@
+ ** sigsave called before a shell escape
+ ** sigreset called after a shell escape
+ */
+-static SIGTYPE (*intsave)(),
+- (*quitsave)();
++static SIGTYPE (*intsave)(int),
++ (*quitsave)(int);
+
+-sigsetup()
++void sigsetup(void)
+ {
+ SIGTYPE tstop();
+ signal(SIGHUP, sgam);
+@@ -110,7 +114,7 @@
+ #endif /* SIGTSTP */
+ }
+
+-sigsave()
++void sigsave(void)
+ {
+ signal(SIGHUP, SIG_DFL);
+ intsave = signal(SIGINT, SIG_DFL);
+@@ -130,7 +134,7 @@
+ #endif /* SIGTSTP */
+ }
+
+-sigreset()
++void sigreset(void)
+ {
+ signal(SIGHUP, sgam);
+ signal(SIGINT, intsave);
+@@ -177,6 +181,7 @@
+ /*
+ * routine to process a fatal error signal
+ */
++SIGTYPE
+ sigpanic(sig)
+ int sig;
+ {
diff --git a/games/ularn/patches/patch-ba b/games/ularn/patches/patch-ba
new file mode 100644
index 00000000000..72e16079bb0
--- /dev/null
+++ b/games/ularn/patches/patch-ba
@@ -0,0 +1,50 @@
+$NetBSD: patch-ba,v 1.1.1.1 2001/04/27 15:27:31 agc Exp $
+
+--- sphere.c.orig Sat Jan 13 21:04:38 2001
++++ sphere.c Sat Jan 13 21:07:29 2001
+@@ -1,4 +1,5 @@
+ /* sphere.c */
++#include <stdlib.h>
+ #include "header.h"
+ #include "monst.h"
+ #include "player.h"
+@@ -28,9 +29,8 @@
+ * Enter with the coordinates of the sphere in x,y
+ * the direction (0-8 diroffx format) in dir, and the lifespan of the
+ * sphere in lifetime (in turns)
+- * Returns the number of spheres currently in existence
+ */
+-newsphere (x, y, dir, life)
++void newsphere (x, y, dir, life)
+ int x, y, dir, life;
+ {
+ int m,i;
+@@ -131,9 +131,8 @@
+ * int x,y;
+ *
+ * Enter with the coordinates of the sphere (on current level)
+- * Returns the number of spheres currently in existence
+ */
+-rmsphere (x, y)
++void rmsphere (x, y)
+ int x, y;
+ {
+ struct sphere *sp,*sp2=(struct sphere *)NULL;
+@@ -167,7 +166,7 @@
+ *
+ * Enter with the coordinates of the blast, Returns no value
+ */
+-sphboom (x, y)
++void sphboom (x, y)
+ int x, y;
+ {
+ int i,j,k;
+@@ -202,7 +201,7 @@
+ * No value is returned.
+ */
+ #define SPHMAX 20 /* maximum number of spheres movsphere can handle */
+-movsphere()
++void movsphere(void)
+ {
+ int x,y,dir,len;
+ struct sphere *sp,*sp2;
diff --git a/games/ularn/patches/patch-bb b/games/ularn/patches/patch-bb
new file mode 100644
index 00000000000..c5633f48140
--- /dev/null
+++ b/games/ularn/patches/patch-bb
@@ -0,0 +1,316 @@
+$NetBSD: patch-bb,v 1.1.1.1 2001/04/27 15:27:31 agc Exp $
+
+--- store.c.orig Fri Jun 19 13:55:37 1992
++++ store.c Sat Jan 13 21:56:25 2001
+@@ -1,4 +1,5 @@
+ /* store.c */
++#include <stdlib.h>
+ #include "header.h"
+ #include "player.h"
+ #include "itm.h"
+@@ -136,14 +137,14 @@
+ /*
+ function for the dnd store
+ */
+-dnd_2hed()
++void dnd_2hed(void)
+ {
+ lprcat("Welcome to the Ularn Thrift Shoppe. We stock many items explorers find useful\n");
+ lprcat("in their adventures. Feel free to browse to your hearts content.\n");
+ lprcat("Also be advised, if you break 'em, you pay for 'em.");
+ }
+
+-dnd_hed()
++void dnd_hed(void)
+ {
+ int i;
+
+@@ -153,13 +154,13 @@
+ lprcat("You have ");
+ }
+
+-dndstore()
++void dndstore(void)
+ {
+ int i;
+
+ dnditm = 0;
+ nosignal = 1; /* disable signals */
+- clear();
++ ularn_clear();
+ dnd_2hed();
+ if (outstanding_taxes>0) {
+ lprcat("\n\nThe Ularn Revenue Service has ordered us to not do business with tax evaders.\n");
+@@ -192,7 +193,7 @@
+ while ((i<'a' || i>'z') && (i!=' ') && (i!=ESC) && (i!=12))
+ i=getcharacter();
+ if (i==12) {
+- clear();
++ ularn_clear();
+ dnd_2hed();
+ dnd_hed();
+ }
+@@ -238,19 +239,21 @@
+ /*
+ function for the players hands are full
+ */
+-handsfull()
++void handsfull(void)
+ {
+ lprcat("\nYou can't carry anything more!");
+ lflush();
+ nap(2200);
+ }
+-outofstock()
++
++void outofstock(void)
+ {
+ lprcat("\nSorry, but we are out of that item.");
+ lflush();
+ nap(2200);
+ }
+-nogold()
++
++void nogold(void)
+ {
+ lprcat("\nYou don't have enough gold to pay for that!");
+ lflush();
+@@ -263,7 +266,7 @@
+ to print the item list;
+ used in dndstore() enter with the index into itm
+ */
+-dnditem(i)
++void dnditem(i)
+ int i;
+ {
+ int j,k;
+@@ -281,11 +284,11 @@
+ lprintf("%c) ",(i%IVENSIZE)+'a');
+ if (itm[i].obj == OPOTION) {
+ lprcat("potion of ");
+- lprintf("%s",&potionname[itm[i].arg][1]);
++ lprintf("%s",potionname[itm[i].arg]);
+ }
+ else if (itm[i].obj == OSCROLL) {
+ lprcat("scroll of ");
+- lprintf("%s",&scrollname[itm[i].arg][1]);
++ lprintf("%s",scrollname[itm[i].arg]);
+ }
+ else lprintf("%s",objectname[itm[i].obj]);
+ cursor( j+31,k );
+@@ -302,9 +305,9 @@
+ /*
+ function to display the header info for the school
+ */
+-sch_hed()
++void sch_hed(void)
+ {
+- clear();
++ ularn_clear();
+ lprcat("The College of Ularn offers the exciting opportunity of higher education to\n");
+ lprcat("all inhabitants of the caves. Here is a list of the class schedule:\n\n\n");
+ lprcat("\t\t Course Name \t Time Needed\n\n");
+@@ -339,7 +342,7 @@
+ lprcat("You are presently carrying ");
+ }
+
+-oschool()
++void oschool(void)
+ {
+ int i;
+
+@@ -470,20 +473,21 @@
+ * for the first national bank of Ularn
+ */
+ long lasttime=0; /* last time he was in bank */
+-obank()
++void obank(void)
+ {
+ banktitle(" Welcome to the First National Bank of Ularn.");
+ }
+-obank2()
++
++void obank2(void)
+ {
+ banktitle("Welcome to the 8th level branch office of the First National Bank of Ularn.");
+ }
+
+-banktitle(str)
++void banktitle(str)
+ char *str;
+ {
+ nosignal = 1; /* disable signals */
+- clear();
++ ularn_clear();
+ lprcat(str);
+ if (outstanding_taxes>0) {
+ int i;
+@@ -517,7 +521,7 @@
+ * limit of 1 million gold pieces in bank
+ */
+ #define BANKLIMIT 1000000
+-ointerest()
++void ointerest(void)
+ {
+ int i;
+
+@@ -537,7 +541,7 @@
+ static short gemorder[IVENSIZE]={0}; /* the reference to screen location for each */
+ static long gemvalue[IVENSIZE]={0}; /* the appraisal of the gems */
+
+-obanksub()
++void obanksub(void)
+ {
+ long amt;
+ int i,k, eye=0;
+@@ -674,7 +678,7 @@
+ }
+ }
+
+-appraise(eye, order)
++void appraise(eye, order)
+ int eye, order;
+ {
+ long amt;
+@@ -710,9 +714,9 @@
+ /*
+ function for the trading post
+ */
+-otradhead()
++void otradhead(void)
+ {
+- clear();
++ ularn_clear();
+ lprcat("Welcome to the Ularn Trading Post. We buy items that explorers no longer find\n");
+ lprcat("useful. Since the condition of the items you bring in is not certain,\n");
+ lprcat("and we incur great expense in reconditioning the items, we usually pay\n");
+@@ -720,7 +724,7 @@
+ lprcat("damaged, we will pay only 10% of their new value.\n\n");
+ }
+
+-otradepost()
++void otradepost(void)
+ {
+ int i,j,isub,izarg;
+ long value;
+@@ -748,12 +752,12 @@
+ isub = i - 'a';
+ j=0;
+ if (iven[isub]==OSCROLL)
+- if (scrollname[ivenarg[isub]][0]==0) {
++ if (scrollknown[ivenarg[isub]]==0) {
+ j=1;
+ cnsitm();
+ } /* can't sell unidentified item */
+ if (iven[isub]==OPOTION)
+- if (potionname[ivenarg[isub]][0]==0) {
++ if (potionknown[ivenarg[isub]]==0) {
+ j=1;
+ cnsitm();
+ } /* can't sell unidentified item */
+@@ -761,9 +765,9 @@
+ j=1;
+ lprcat("\nYou don't *really* want to sell that, now do you?");
+ }
+- if (!j)
++ if (!j) {
+ if (i=='*') {
+- clear();
++ ularn_clear();
+ qshowstr();
+ otradhead();
+ }
+@@ -814,10 +818,11 @@
+ if (j <= DNDSIZE+2)
+ lprcat("\nSo sorry, but we are not authorized to accept that item.");
+ }
++ }
+ }
+ }
+
+-cnsitm()
++void cnsitm(void)
+ {
+ lprcat("\nSorry, we can't accept unidentified objects.");
+ }
+@@ -825,13 +830,13 @@
+ /*
+ * for the Ularn Revenue Service
+ */
+-olrs()
++void olrs(void)
+ {
+ int i,first;
+ long amt;
+
+ first = nosignal = 1; /* disable signals */
+- clear();
++ ularn_clear();
+ resetscroll();
+ cursor(1,4);
+ if (outstanding_taxes)
+@@ -899,13 +904,14 @@
+ }
+
+
+-nomore()
++void nomore(void)
+ {
+ lprcat("\nSorry man, I ain't got no more of that shit.");
+ lflush();
+ nap(2200);
+ }
+-nocash()
++
++void nocash(void)
+ {
+ lprcat("\nWhattaya trying to pull on me? You aint got the cash!");
+ lflush();
+@@ -919,9 +925,9 @@
+ function to display the header info for the pad
+ */
+ char drug[5]={0};
+-pad_hd()
++void pad_hd(void)
+ {
+- clear();
++ ularn_clear();
+ lprcat("Hey man, welcome to Dealer McDope's Pad! I gots the some of the finest shit\n");
+ lprcat("you'll find anywhere in Ularn - check it out...\n\n\n");
+ lprcat("\t\t The Stash\t\t\tThe Cash\n\n");
+@@ -942,7 +948,7 @@
+ lprcat("Looks like you got about ");
+ }
+
+-opad()
++void opad(void)
+ {
+ int i,flag;
+
+@@ -1061,7 +1067,7 @@
+ } /*end while(1) */
+ } /* end pad() */
+
+-snag(itm)
++int snag(itm)
+ int itm;
+ {
+ int i,limit;
+@@ -1082,7 +1088,7 @@
+ return(0);
+ }
+
+-pick_char(foo)
++void pick_char(foo)
+ int foo;
+ {
+ int i;
+@@ -1090,7 +1096,7 @@
+ nosignal = 1; /* disable signals */
+
+ if (foo == 0) {
+- clear();
++ ularn_clear();
+ lprcat("\t\tThe Addiction of Ularn\n\n");
+ lprcat("Pick a character class...\n\n\n");
+ lprcat("\t\t Character\n\n");
diff --git a/games/ularn/patches/patch-bc b/games/ularn/patches/patch-bc
new file mode 100644
index 00000000000..ba56bb95c38
--- /dev/null
+++ b/games/ularn/patches/patch-bc
@@ -0,0 +1,81 @@
+$NetBSD: patch-bc,v 1.1.1.1 2001/04/27 15:27:31 agc Exp $
+
+--- tok.c.orig Fri Jun 19 13:55:30 1992
++++ tok.c Sat Jan 13 21:56:42 2001
+@@ -1,4 +1,7 @@
+ /* tok.c */
++#include <sys/types.h>
++#include <sys/wait.h>
++#include <unistd.h>
+ #include "header.h"
+ #include "player.h"
+ #include "monst.h"
+@@ -12,12 +15,12 @@
+ int yrepcount=0;
+
+ static char usermonster[MAXUM][MAXMNAME];
+-static char usermpoint=0; /* the user monster pointer */
++static int usermpoint=0; /* the user monster pointer */
+
+ /*
+ * lexical analyzer for Ularn
+ */
+-yylex ()
++int yylex (void)
+ {
+ int cc, ic;
+ char *sh, *getenv();
+@@ -61,14 +64,14 @@
+ /* shell escape */
+ if (cc == '!') {
+ int pgrp;
+-#ifdef USG
++#if defined(USG) || defined(__NetBSD__)
+ pgrp = getpgrp();
+ #else
+ pgrp = getpgrp(getpid());
+ #endif /* USG */
+
+ resetscroll();
+- clear();
++ ularn_clear();
+ cl_dn(0,0);
+ lflush();
+ if ((ic=fork())==0) {
+@@ -116,7 +119,7 @@
+ /*
+ * flushall() Function to flush all type-ahead in the input buffer
+ */
+-flushall()
++void flushall(void)
+ {
+ #ifdef TCFLSH
+ ioctl(0, TCFLSH, 0); /* standard ioctl to flush buffer */
+@@ -143,7 +146,7 @@
+ function to set the desired hardness
+ enter with hard= -1 for default hardness, else any desired hardness
+ */
+-sethard (hard)
++void sethard (hard)
+ int hard;
+ {
+ int j,k,i;
+@@ -157,7 +160,8 @@
+ c[HARDGAME] = hard;
+ }
+
+- if (k=c[HARDGAME])
++ k=c[HARDGAME];
++ if (k)
+ for (j=0; j<=MAXMONST+8; j++) {
+ i = ((6+k)*monster[j].hitpoints+1)/6;
+ monster[j].hitpoints = (i > 32767) ? 32767 : i;
+@@ -175,7 +179,7 @@
+ /*
+ * function to read and process the larn options file
+ */
+-readopts ()
++void readopts (void)
+ {
+ char s1buf[80], *str, s2buf[80];
+ char *getword();
diff --git a/games/ularn/patches/patch-bd b/games/ularn/patches/patch-bd
new file mode 100644
index 00000000000..f157cd33992
--- /dev/null
+++ b/games/ularn/patches/patch-bd
@@ -0,0 +1,79 @@
+$NetBSD: patch-bd,v 1.1.1.1 2001/04/27 15:27:32 agc Exp $
+
+--- tty.c.orig Fri Jun 19 13:55:34 1992
++++ tty.c Sat Jan 13 21:57:04 2001
+@@ -55,7 +55,7 @@
+ /*
+ * set current tty
+ */
+-setctty()
++void setctty(void)
+ {
+ if (STTY(&curttyb) == -1 )
+ perror("setctty");
+@@ -68,7 +68,7 @@
+ * and switch off tab expansion if necessary.
+ * Called by startup() in termcap.c and after returning from ! or ^Z
+ */
+-gettty()
++void gettty(void)
+ {
+ if (GTTY(&inittyb) == -1)
+ perror("gettty");
+@@ -88,7 +88,7 @@
+ }
+
+ /* reset terminal to original state */
+-settty()
++void settty(void)
+ {
+ if (STTY(&inittyb) == -1)
+ perror("settty");
+@@ -98,7 +98,7 @@
+ curttyb.inputflags |= STRIPHI;
+ }
+
+-setuptty()
++void setuptty(void)
+ {
+ curttyb.echoflgs &= ~ECHOMASK;
+ #ifdef TERMIO
+@@ -118,7 +118,7 @@
+ *
+ * like: system("stty cbreak -echo")
+ */
+-scbr ()
++void scbr (void)
+ {
+ curttyb.cbrkflgs &= ~ECHOMASK;
+ #ifdef TERMIO
+@@ -133,7 +133,7 @@
+ * sncbr() Function to set -cbreak echo for the terminal
+ *
+ */
+-sncbr ()
++void sncbr (void)
+ {
+ curttyb.cbrkflgs |= ECHOMASK;
+ #ifdef TERMIO
+@@ -149,9 +149,9 @@
+ * Subroutine to set up terminal in correct mode for game
+ * Attributes off, clear screen, set scrolling region, set tty mode
+ */
+-setupvt100 ()
++void setupvt100 (void)
+ {
+- clear();
++ ularn_clear();
+ setscroll();
+ gettty();
+ }
+@@ -161,7 +161,7 @@
+ * Subroutine to clean up terminal when the game is over
+ * Attributes off, clear screen, unset scrolling region, restore tty mode
+ */
+-clearvt100 ()
++void clearvt100 (void)
+ {
+ resetscroll();
+ settty();
diff --git a/games/ularn/pkg/DESCR b/games/ularn/pkg/DESCR
new file mode 100644
index 00000000000..0f6988a4b08
--- /dev/null
+++ b/games/ularn/pkg/DESCR
@@ -0,0 +1,6 @@
+Ularn is a fantasy games in which your child has contracted a strange dis-
+ease, and none of your home remedies seem to have any effect. You set
+out to find a remedy in a limited amount of time, and to collect gold
+along the way of course!
+
+Ularn is based on larn, and adds the concept of character classes.
diff --git a/games/ularn/pkg/MESSAGE b/games/ularn/pkg/MESSAGE
new file mode 100644
index 00000000000..6929fdfcf5e
--- /dev/null
+++ b/games/ularn/pkg/MESSAGE
@@ -0,0 +1,6 @@
+Ularn has more features than NetBSD's larn, but ularn's source is
+unmaintained, unportable, and less clean. This package fixes compile
+errors and runtime crashes. This package does not modernize the code
+or remove the security flaws.
+
+To play ularn, type Ularn.
diff --git a/games/ularn/pkg/PLIST b/games/ularn/pkg/PLIST
new file mode 100644
index 00000000000..1e9fa3b04a3
--- /dev/null
+++ b/games/ularn/pkg/PLIST
@@ -0,0 +1,6 @@
+@comment $NetBSD: PLIST,v 1.1.1.1 2001/04/27 15:27:32 agc Exp $
+bin/Ularn
+share/Ularn/Uhelp
+share/Ularn/Umaps
+share/Ularn/Ufortune
+@dirrm share/Ularn