diff --git a/src/doors/ny2008/3rdparty.doc b/src/doors/ny2008/3rdparty.doc
new file mode 100644
index 0000000000000000000000000000000000000000..1a4b0c813af2fd5bc50a01f91f3d6b1fed21347d
--- /dev/null
+++ b/src/doors/ny2008/3rdparty.doc
@@ -0,0 +1,299 @@
+==============================================================================
+NY2008 Third Party Development Manual (update 11)
+==============================================================================
+
+> NEW STUFF THAT WAS ADDED IN UPDATE 6!
+| NEW STUFF THAT WAS ADDED IN UPDATE 7!
+* NEW STUFF THAT WAS ADDED IN UPDATE 8!
+@ NEW STUFF THAT WAS ADDED IN UPDATE 9!
+} NEW STUFF THAT WAS ADDED IN UPDATE 10!
++ NEW STUFF THAT WAS ADDED IN UPDATE 11!
+
+} I found a misspelling, CRAPS is supposed to be CRABS ... oh well ... not to
+} make any incompatibilities, all the data files still use CRAPS ... but
+} please make your igm display CRABS ... sorry bout this:)
+
+> From wide beta 7 up the .inf drop file has changed format a bit, READ ON
+> if you made any IGM's for wide beta 6 or lower!
+
+@ You can now add IGMs to be fight events. You just create a file called
+@ 3rdevent.dat with same format as 3rdparty.dat. If this file exists NY2008
+@ will sometimes ask the player instead of a fight event if he wants to enter 
+@ a randomly chozen IGM for the 3rdevent.dat file.
+
+* There is a new type of character information file, the .stt file. The
+* name and location of this file is the same as for the n00?????.sts
+* file. The only difference is that it is written as a text file so it is
+* easier to read for you non-C programmers ... Read on
+
+* If ya are too lazy to write a good installation program for your IGM then I 
+* included mine, it's easy to setup and use for almost any igm you make. Look
+* at it in the NY_IGMIN.ZIP file, which is included in the ny2008 main archive
+@ It now asks if the IGM should be added to 3rdparty.dat, 3rdevent.dat or both.
+
+  Well ... so ya want to create something i haven't done already for NY2008
+  ...
+
+  First a few tips on how i do stuff ... i LOVE binary files, whatever can be
+  IS in binary format ...
+
+  And read the struct.doc for the structures of those files and a few extra
+  tips ...
+
+  User number is the number in the user file...
+
+  DO NOT CHANGE how many points the user has in the user file... you can do it
+  as an IGM and pass the new point value back to NY2008, but do not do it to 
+  users anytime otherwise. It will messup the score file for the day ...
+  (Actually in an IGM you can change almost all the user data, xpt the level,
+  and the rank variable, those will change when ny2008 reads in the .sts file)
+
+  To get info on the user that's online read in his .sts file, changing this
+  will not effect anything unless you are returning from an igm so don't 
+  change it otherwise.
+
+  DO NOT REARANGE USERS!!!!! (WILL MESS UP VERY VERY BAD!)
+  (or if ya have to read the struct.doc file VERY carefully, but i would not
+  recomend it ... and this is absolutely not to be done in IGM's anywayz)
+
+  Flags for users (flag files I mean) are named 
+
+  U00<0 padded user number>.<flag name>
+
+  And they are store in the FlagDirectory if it is specified in the .cfg file
+
+  For example online flag for user 36 would look like "U0000036.ON"
+
+
+  The temporary character dropfile is named (it is stored in the game
+  directory not in the flag didrectory!)
+
+  N<0 padded node number>.STS
+
+  For example .STS file for node 6 would look like "N0000006.STS"
+
+  NOTE: There is also a flagfile called U00?????.STS ... this is used for
+  data recovery and if you dump any data in here it will not be read unless
+  the crash recovery is run ...
+
+==============================================================================
+How to create In Game Modules for NY2008!
+==============================================================================
+
+| If You'd like to see how an IGM looks inside look at NY_JPSRC.ZIP which  
+| is the source code for the Jackpot IGM. It's in Turbo C++ and OpenDoors 5.00
+
+  To create NY2008 IGM's you actually create something like a door, only
+  easier, because you anly have to deal with one type of dropfile and one
+  character information file. These will be created in the game directory, so
+  you will have to get that information from the user. (I'd recomend having
+  it passed on the command line rather than having it read from a cfg file.)
+* There are two character dropfiles you can choose from now on ... so it's
+* easier for non-C programmers.
+
+  NY2008 will pass the node number, the user number and if the game is local
+  or not, through the command line, by adding '-N<node number> -U<user number>'
+  and optionally '-L' if the game is in local mode, to the command line when
+  calling the IGM. '-L' is passed every local game no matter if it was started
+  from command line or from a dropfile.
+
+@ You have to create or edit '3rdparty.dat' and/or '3rdevent.dat' and put in
+> appearance to user first and the command line on the second line. Comments
+* are OK! (comment lines start with ';'!) -  there can be any number of IGM's!
+* As i said above i'd recommend passing the path to the dropfiles on the
+  command line!
+
+@ '3rdparty.dat' file will add your IGM to the other stuff menu!
+@ '3rdevent.dat' file will add your IGM as a random fight event! 
+
+  Example:
+    `@B`4ar
+    C:\NY2008\BAR.BAT C:\BBS\NY2008\
+
+  And the BAR.BAT would look like:
+
+    cd\bar
+    bar.exe %1 %2 %3 %4
+    cd\ny2008
+
+  Don't worry about changing dirs back ... ny2008 will do that by itself.
+} But the IGM will be run with the game dir of ny2008 as the current dir!!!!
+} so in the batch file make sure you change to the igm's dir, or o that in
+} the IGM itself. Or use the '*' described next
+
+> There is also a new feature if you want NY2008 to change to the IGM's dir
+> before it is run, you add '*' as the VERY FIRST character in the command
+> line!
+
+> Example:
+>   `@B`4ar
+>   *C:\NY2008\BAR\BAR.EXE C:\BBS\NY2008\
+
+> This will run BAR.EXE in it's own dir (c:\ny2008\bar) so you don't need to
+> write a bat file as in the example above!
+
+
+  THE FILES: 
+@ You have to read both, and they are in the game directory, not the flag 
+@ directory! You can choose the character info file, but you have to read the 
+@ text version and delete the binary version, so that ny2008 knows you read 
+@ the text version, or just read the binary version, you don't have to delete 
+@ the text version, ny2008 will read the binary version as default, only if it 
+@ doesn't find it will it read the text version!
+
+  The character information file (N<node number>.STS) is a binary file with
+  the user structure dumped into it. (read struct.doc) (this is the one you
+  can change!) (e.g. N0000003.STS for node 3)
+
+* User rank and days user has been inactive will not be read in after an IGM
+* so it wouldn't kill the user or destroy others if they get changed in
+* the IGM.
+
+* There is also a text character information file available too. if you want to
+* use that you have to delete the N<node number>.STS so that ny2008 will read
+* this file instead. The name for this file is N<node number>.STT!
+* It has the same data order as the character info structure, here it is:
+*
+} Line 1:  The BBS name of the user !!!Will not be read in!!!
+* Line 2:  The name of the character
+* Line 3:  What the user says when he wins
+* Line 4:  What the user says when he looses
+* Line 5:  User rank !!! Will not be read in !!!
+* Line 6:  Days the user has been inactive !!! Will not be read in !!!
+* Line 7:  Attacking strenght of the user !!these will have a change only for!!
+* Line 8:  Defensive strenght             !!this level I recomend no change  !!
+* Line 9:  Condoms user has
+* Line 10: Days since the user last got laid
+* Line 11: The hits of drug that the user has
+* Line 12: If addicted how long the user has not used the drug
+* Line 13: User's hitpoints
+* Line 14: Maximum of the user's hitpoints
+* Line 15: User's points
+* Line 16: Money in hand
+* Line 17: Money in bank
+* Line 18: User level
+* Line 19: Fights the user has left today
+* Line 20: % of hunger
+* Line 21: Sex turns left today
+* Line 22: % of current std infection
+* Line 23: % of drug addiction
+* Line 24: % of how "high" the player is
+* Line 25: For how many more days the hotel is paid for
+* Line 26: How many days has the user has been in hospital
+* Line 27: If alive this is set to "ALIVE" if not consious "UNCONSIOUS"
+*          set this to "DEAD" if user died in the IGM (user has to start over!)
+* Line 28: "M" if male "F" if female
+* Line 29: what the user is:
+*          "PUNK", "HEADBANGER", "BIG FAT DUDE","CRACK ADDICT" or "HIPPIE"
++ Line 30: number of the user's weapon .... 0=hands, 1 pepper spray,... more
++          weapons in v0.11 look it all up in STRUCTS.DOC
+* Line 31: user'ss STD:
+*          "CRAPS", "HERPES", "SYPHILIS", "AIDS" or "NONE"
+}          Sorry about the "CRAPS" misspelling, but it's still here not to
+}          make trouble, but in the game make sure it displays "crabs":)
+* Line 32: user's drug:
+*          "POT", "HASH", "LSD", "COKE", "PCP" or "HEROIN"
+* Line 33: Where the user is staying:
+*          "NOWHERE", "MOTEL", "REGULAR HOTEL", "EXPENSIVE HOTEL"
+* Line 34: UN HQ bombings left for today
+* Line 35: Water poisonings left for today
+} Line 36: Rocks, The number of rocks the player has
+} Line 37: Throwing ability 0-100
+} Line 38: Punching ability 0-100
+} Line 39: Kicking ability 0-100
+} Line 40: InterBBS Moves Left Today
+
+
+  The dropfile is a textfile with the communication parameters written in it:
+  (e.g. U0000034.INF for user 34) (this is also the ... in IGM flag, so do not
+  modify it cuz it might change names if the maintanance runs on another node!)
+
+  Line1: The path to the bbs dropfiles...(if you want to read those)
+	 (they will not be available if game was run with the '-L' command
+	 line option.
+  Line2: Callers time left
+  Line3: Com Port (0 based - COM1=0, COM2=1 ...)
+  Line4: Baud Rate
+> Line5: Either "ANSI","AVATAR" or "ASCII" depending on players terminal!
+}        Will be ANSI If the user has RIP, If your door has a RIP interface
+}        Then make it autodetect RIP (simple).
+> Line6: User's location
+> Line7: This is either "FOSSIL" if fossil driver is used or "NOFOSSIL" if not
+
+  The rest of these settings is written to the dropfile only if FOSSIL is
+  disabled!
+
+> Line8: Com port address
+> Line9: Com port IRQ
+> Line10: Either "FIFO" or "NOFIFO" depending if the 16550A FIFO buffer is used
+> Line11: The number of bytes that is placed in the FIFO buffer before trigger
+> Line12: Receive Buffer
+> Line13: Send Buffer
+
+  That's it .... all the caller info you need is in the character file, but 
+  if you need something that's not here, read the first line of this dropfile 
+  which has the path to the bbs dropfiles. (also i do not recomend that .... 
+  it makes life of the sysop who installs the software not very easy to do 
+  job, since all you need is passed through this dropfile and the .sts file 
+  then there's no need to do anything else, and it will make the IGM's 
+  portable to any system.)
+
+  Only the things that you change in the character file will be read in by 
+  NY2008. (Do not change the bbsname field in the character file as this could
+} have unpredictable results). It will no longer be read in!
+
+  Also do not change the level of the user, the user will have his level 
+  raised when he returns back to the game (if he deserves it).
+
+==============================================================================
+How amounts work... for any add-on ...
+==============================================================================
+
+  The usuall points raise for a single fight is 10*(level+1) for better things 
+  make it a bit more.
+
+  The money the user gets is calculated from the hitpoints of his enemy (plus 
+  some randomness):
+  (level+1)*(enemy_hitpoints*0.5 + randomf(enemy_hitpoints*.7))+(20*(level+1))
+
+  This is to give you an idea how the money is calculated, take in account 
+  that the player will spend some money on healing.
+
+  Generally try not to give out too much money or points for free .... 
+  gambling is good cuz that makles people loose money also.
+
+==============================================================================
+How to change users offline ...
+==============================================================================
+
+  if you want to write to the user file, do it when the user is offline ...
+  if the user is online there's no way you can edit him (unless if you edit
+  the .sts file from an IGM). (U00?????.ON will be present if user is online).
+
+==============================================================================
+Running stuff in maintanance
+==============================================================================
+
+* NY2008 has the option to run an external program after it's nightly
+* maintanance, just create 3rdmnt.bat and put whatever you want in there and
+* it will run it after every maintanance. Do not make your maintanance
+* too long since on most systems maintanance takes place when the first
+* user gets online. if you have something that takes long (maybe NPC's), just
+* ask the sysop installing your software to put it in his nightly maintanance
+* batch file.
+
+* If you want to send remote output, there is a "3rdmnt.inf" file created,
+* it has the same format as the IGM dropfile, so look at that.
+
+* You could also use the old style, and use the option in the .cfg file, but
+* no "3rdmnt.inf" is created for that one and I recomend strongly agains it
+* since the above way is just a better way to do it, and more flexible.
+
+==============================================================================
+
+  Anywayz ... have fun ....
+
+  Franz
+
+  PS: I know i can be very cryptic and incomplete in instructions .... contact
+  me with any problems you might have.
diff --git a/src/doors/ny2008/armm.rip b/src/doors/ny2008/armm.rip
new file mode 100644
index 0000000000000000000000000000000000000000..16b7f90387a383889e6729d4145e510226e93146
--- /dev/null
+++ b/src/doors/ny2008/armm.rip
@@ -0,0 +1,6 @@
+!|*|1K|w0000000010|W0|c09|Y07000400|@6R0QArm Yerself
+!|1B00000000LC0200000F000800000008000000|1U6G1XCP990000
+!|1B00000000LC020000000F0800000008000000|1U6N23CI930000|Y00000100
+!|1B0000020S9402070F0F000800000708000000|1U712UBX3C1U00<>Buy a Weapon<>B
+!|1U7141BX4J2B00<>Sell Yer Weapon<>S|1U7159BX5R2H00<>Your Stats<>Y
+!|1U716HBX6Z2400<>List Prices<>L|1U717SBX8A0000<>Go Back<>Q|#|#|#
\ No newline at end of file
diff --git a/src/doors/ny2008/bank.rip b/src/doors/ny2008/bank.rip
new file mode 100644
index 0000000000000000000000000000000000000000..13b104b5a8942830f837498f72b583850dfe9816
--- /dev/null
+++ b/src/doors/ny2008/bank.rip
@@ -0,0 +1,6 @@
+!|*|1K|w0000000011|W0|c0A|Y0A000A00|@2S01$|c02|Y06000600|@0S04Bank|Y00000100
+!|1B000002027402080F0F080700000807000000|1U600TBE5M0000
+!|1B000002030002080F0F080700000807000000|1U6912B41G0000<>Deposit Money<>D
+!|1U691TB4270000<>Withraw Money<>W|1U692LB42Z0000<>Go Steal Money<>G
+!|1U693DB33R0000<>Send Money To Others<>S|1U6945B34J0000<>Your Stats<>Y
+!|1U694XB25B0000<>Return To Central Park<>Q|#|#|#
\ No newline at end of file
diff --git a/src/doors/ny2008/bank1.rip b/src/doors/ny2008/bank1.rip
new file mode 100644
index 0000000000000000000000000000000000000000..809485cf1ae255dfa4945e8a8c465b263592aa81
--- /dev/null
+++ b/src/doors/ny2008/bank1.rip
@@ -0,0 +1,6 @@
+!|*|1K|w0000000000|W0|c0A|Y0A000A00|@2S01$|c02|Y06000600|@0S04Bank|Y00000100
+!|1B000002027402080F0F080700000807000000|1U600TBE5M0000
+!|1B000002030202080F0F080700000807000000|1U6912B41G0000<>Deposit Money<>D
+!|1U691TB4270000<>Withraw Money<>W|1U692LB42Z0000<>Go Steal Money<>G
+!|1U693DB33R0000<>Send Money To Others<>S|1U6945B34J0000<>Your Stats<>Y
+!|1U694XB25B0000<>Return To Central Park<>Q|#|#|#
diff --git a/src/doors/ny2008/busted.rip b/src/doors/ny2008/busted.rip
new file mode 100644
index 0000000000000000000000000000000000000000..260b0faa5124b9be887057ad19b8c0d29a822cc0
--- /dev/null
+++ b/src/doors/ny2008/busted.rip
@@ -0,0 +1,6 @@
+!|1B00000000LC0200000F030B0000000B000000|1U1M20FQ6K0000
+!|1B00000000LC020000030F0B0000000B000000|1U1T26FJ6E0000|W0|c0C|Y01000200
+!|@7G2CBUSTED\!\!\!|c04|@2S33Well the police beat the hell out of you\!\!\!
+!|@4W3ZYou lost 2% of yer points\!|@3B4VWhy don't ya come back tommorrow
+!|Y00000100|1B00000202ZK02080F0F080700000807000000
+!|1U215TFA670000<>Press Enter Or Click Here<>^M|#|#|#
diff --git a/src/doors/ny2008/central.rip b/src/doors/ny2008/central.rip
new file mode 100644
index 0000000000000000000000000000000000000000..f60506e699808ee1893029e61b2942f23384c749
--- /dev/null
+++ b/src/doors/ny2008/central.rip
@@ -0,0 +1,22 @@
+!|*|1K|w0000000000|Y00000100|1B00000000LC0200000B080300000003000000
+!|1U4Q02HP9N0000|1B00000000LC020000080B0300000003000000|1U4X08HI9H0000|W0|c0A
+!|=00000001|S010A|p07009P004R0R49204N3F4G4O4S4O9P|c02|S0102
+!|p0B001H12171Y1D3E0P4F0W4N0V4N4S3D4G204O0R4A014S|c07|S0107
+!|p040E1C0E0S100S1217|p04241A24002X002X0W|c08|S0108|p052Y0B3P0B3P0R3E0P2Y0X
+!|p04120Z1M0Z1M1B1218|c0B|S010B
+!|p0B00002300231B1Y1D1N1B1N0Y120Y120R0D0R0D1E001G
+!|p072Y004N004N0U4G0W3Q0R3Q0A2Y0A|Y07000400
+!|1B00000200MC02080C0E020A0000080A000000|1U4Z0AHF1F0000<>Central Park
+!|Y00000100|1B00000202ZQ02080F0F080700000807000000
+!|1U691WAE292B00<>Street Fights<>S|1U692LAE2Y1V00<>Cop Fights<>C
+!|1U693AAE3N2800<>Player Fights<>P|1UBX1WG2291X00<>Evil Stuff<>E
+!|1UBX2LG22Y1U00<>Bank and Money<>B|1UBY3AG33N2000<>Healing<>H
+!|1U693YAE4B1Y00<>Food<>F|1U694NAE501W00<>Drugs<>D
+!|1U695CAE5P1T00<>Arm Yerself<>A|1U6961AE6E1Z00<>Get Laid<>G
+!|1U6A6QAF732D00<>Use Atomic Bomb<>U|1U697EAE7R2500<>Mail<>M
+!|1U6983AE8G2100<>Change Yer Info<>I|1UBX3YG24B2H00<>Your Stats<>Y
+!|1UBX4NG2502400<>List Players<>L|1UBX5CG25P2F00<>Whos Online<>W
+!|1UBX61G26E2A00<>Rest Somewhere<>R|1UBX6QG2732600<>Newz<>N
+!|1UBX7EG27R0000<>Instructions<>\!|1UBX83G28G2300<>Kill Yerself\!<>K
+!|1U0A904F9D2900<>Quit To BBS<>Q|1B00000202ZK02080F0F080700000807000000
+!|1U698SAE952700<>Other Stuff<>O|1UBX8SG2950000<>Other Cities<>*|#|#|#
\ No newline at end of file
diff --git a/src/doors/ny2008/central1.rip b/src/doors/ny2008/central1.rip
new file mode 100644
index 0000000000000000000000000000000000000000..06a576d61f64de315e74440e3ae1fb5cd64b0f5e
--- /dev/null
+++ b/src/doors/ny2008/central1.rip
@@ -0,0 +1,13 @@
+!|*|1K|w000V271610|Y00000100|1B00000202ZK02080F0F080700000807000000
+!|1U1V22602F2B00<>Street Fights<>S|1U1V2R60341V00<>Cop Fights<>C
+!|1U1V3G603T2800<>Player Fights<>P|1UAZ22F42F1X00<>Evil Stuff<>E
+!|1UAZ2RF4341U00<>Bank and Money<>B|1UB03GF53T2000<>Healing<>H
+!|1U1V44604H1Y00<>Food<>F|1U1V4T60561W00<>Drugs<>D
+!|1U6C22AH2F1T00<>Arm Yerself<>A|1U6C2RAH341Z00<>Get Laid<>G
+!|1U6D3GAI3T2D00<>Use Atomic Bomb<>U|1U6C44AH4H2500<>Mail<>M
+!|1U6C4TAH562100<>Change Yer Info<>I|1UAZ44F44H2H00<>Your Stats<>Y
+!|1UAZ4TF4562400<>List Players<>L|1U1V5H605U2F00<>Whos Online<>W
+!|1U1V66606J2A00<>Rest Somewhere<>R|1U6C5HAH5U2600<>Newz<>N
+!|1U6C66AH6J0000<>Instructions<>\!|1UAZ5HF45U2300<>Kill Yerself\!<>K
+!|1UAZ66F46J2900<>Quit To BBS<>Q|Y00000400
+!|1B000002027802080F0E020A0000080A000000|1U1X0GF51L0000<>Central Park|#|#|#
\ No newline at end of file
diff --git a/src/doors/ny2008/centralt.rip b/src/doors/ny2008/centralt.rip
new file mode 100644
index 0000000000000000000000000000000000000000..836c3da9759ec7cdfddb649ed5ae1d48a3f23351
--- /dev/null
+++ b/src/doors/ny2008/centralt.rip
@@ -0,0 +1,21 @@
+!|*|1K|w0000000000|Y00000100|1B00000000LC0200000B080300000003000000
+!|1U4Q02HP9N0000|1B00000000LC020000080B0300000003000000|1U4X08HI9H0000|W0|c0A
+!|=00000001|S010A|p07009P004R0R49204N3F4G4O4S4O9P|c02|S0102
+!|p0B001H12171Y1D3E0P4F0W4N0V4N4S3D4G204O0R4A014S|c07|S0107
+!|p040E1C0E0S100S1217|p04241A24002X002X0W|c08|S0108|p052Y0B3P0B3P0R3E0P2Y0X
+!|p04120Z1M0Z1M1B1218|c0B|S010B
+!|p0B00002300231B1Y1D1N1B1N0Y120Y120R0D0R0D1E001G
+!|p072Y004N004N0U4G0W3Q0R3Q0A2Y0A|Y07000400
+!|1B00000200MC02080C0E020A0000080A000000|1U4Z0AHF1F0000<>Central Park
+!|Y00000100|1B00000202ZM02080F0F080700000807000000
+!|1U691WAE292B00<>Street Fights<>S|1U692LAE2Y1V00<>Cop Fights<>C
+!|1U693AAE3N2800<>Player Fights<>P|1UBX1WG2291X00<>Evil Stuff<>E
+!|1UBX2LG22Y1U00<>Bank and Money<>B|1UBY3AG33N2000<>Healing<>H
+!|1U693YAE4B1Y00<>Food<>F|1U694NAE501W00<>Drugs<>D
+!|1U695CAE5P1T00<>Arm Yerself<>A|1U6961AE6E1Z00<>Get Laid<>G
+!|1U6A6QAF732D00<>Use Atomic Bomb<>U|1U697EAE7R2500<>Mail<>M
+!|1U6983AE8G2100<>Change Yer Info<>I|1UBX3YG24B2H00<>Your Stats<>Y
+!|1UBX4NG2502400<>List Players<>L|1UBX5CG25P2F00<>Whos Online<>W
+!|1UBX61G26E2A00<>Rest Somewhere<>R|1UBX6QG2732600<>Newz<>N
+!|1UBX7EG27R0000<>Instructions<>\!|1UBX83G28G2300<>Kill Yerself\!<>K
+!|1U698SAE952700<>Other Stuff<>O|1UBX8SG2952900<>Quit To BBS<>Q|#|#|#
diff --git a/src/doors/ny2008/contact.doc b/src/doors/ny2008/contact.doc
new file mode 100644
index 0000000000000000000000000000000000000000..ab0d93f0dfdc28da314b8795be152ed9f10e8757
--- /dev/null
+++ b/src/doors/ny2008/contact.doc
@@ -0,0 +1,205 @@
+NO MORE distro sites .. the game is free .. no mroe support
+
+I will answer to e-mail at
+
+jirka@5z.com
+
+you should be able to get the files at 
+
+ftp://ftp.5z.com/pub/ny2008
+
+Franz
+
+--------------------------------------------------------
+
+
+
+
+
+
+
+
+
+
+
+
+
+There are several Distro and Support BBSes.
+
+Right now I only kept the international and internet distro sites on the list.
+
+Also my bbs is no longer online!
+
+------------------------------------------------------------------------------
+
+To reach me do the following:
+
+  Send me internet e-mail to: franz@azstarnet.com
+                              
+  or send me some letter to:
+
+  George Lebl
+  PraetorSoft
+  6161 Arnoldson Ct
+  San Diego, CA 92122
+  USA
+
+------------------------------------------------------------------------------
+
+The filenaming convention is:
+
+NY_???.ZIP
+   ^^^
+    \--the version number
+
+(e.g. NY_013.ZIP for v0.13)
+(e.g. NY_010W2.ZIP for v0.10 WIDE BETA 2)
+
+Here's the official distro site list:
+
+------------------------------------------------------------------------------
+Internet:
+  
+ FTP:
+  ftp.uniserve.com
+  in the pub/bbs_doors/ny2008 directory
+
+  aros.net
+  in the pub/users/jalapeno/ny2008 directory
+
+  ftp.netins.net
+  in the /showcase/agency/ny2008 directory
+
+  empire.bbs.net.au
+  in /NY2008 directory
+
+  you might also try, ftp.wustl.edu, but It might not be there.
+  it's in the pub/MSDOS_UPLOADS/bbs/doors dir (i think)
+
+ World Wide Web:
+
+   http://www.azstarnet.com/~franz
+   My home page .... the absolutely newest versions here:   
+
+   http://haven.uniserve.com/~shane/ny2008.html
+   Shane's Ny2008 page, usually takes a while to get updated
+
+------------------------------------------------------------------------------
+BBSes:
+
+ USA:
+  Partners For Peace  node1:520-298-3448      28800
+                      node2:520-298-8627
+  This is the official USA distro site and FIDO distro site! This is not 
+  a good way to reach me, but I upload the newest version here as soon 
+  as it comes out.
+  You can FREQ here under NY2008 or any filename (if you know it).
+  Fido #: 1:300/705
+
+ Kelowna, BC, Canada:
+  The Misfits BBS           604-763-8031      14400
+  Sysop: Faphra
+
+ Norway:
+  Sidekick BBS              +47 70 13 12 60
+                       ISDN +47 70 13 30 62
+  Sysops: Kristian Hoff and Frank Nedregaard
+
+ Singapore, Singapore:
+  Pandesmos BBS             +65-766-4169      14400 
+  Sysop: Sam Seh, HDD: 2.4 gigs
+
+ Poland:
+  Genesis of Earth          +48-22-6653501    14400
+  Sysop: Light Vader
+
+ Orebro, Sweden:
+  Malfunction               +46-19-240285     28800
+  Sysop: Daniel Ostman
+
+ Israel:
+  Tomer Ginat'S Place BBs   972-3-5582519 (two 28.8 lines)
+  Sysop:Tomer Ginat
+
+----------------------------------------------------------------------------
+
+Here's the old distro site list:
+
+I'm no longer keeping a list of the distro bbses since it was too much work
+and didn't pay off much .... you can be a distro bbs but will not be listed
+anywhere. If you register and have an e-mail address you will be notified of
+new releases as they come out! the existing list will be as it is with no more
+additions, (unless I feel otherwise:)
+
+Here they are:
+
+Tucson, AZ:
+  Franz's BBS               DISCONNECTED      1200-28800
+  My own BBS ... single node and requires CBV to verify. But it will allways
+  have the most recent version. Even before anybody else. And it's the 
+  fastest way to reach me.
+
+  (note up and running again, check above)
+  Partners For Peace  node1:DISCONNECTED      14400
+                      node2:DISCONNECTED
+  This is a 2 node BBS that also requires verification, but it's easier to 
+  reach since it's 2 node. This is not a good way to reach me, but I upload
+  the newest version here as soon as it comes out. Testing Wildcat.
+  You can FREQ here under NY2008 or any filename (if you know it).
+  Fido #: 1:300/705
+
+Placentia, CA:
+  PSYKoSiS ONLiNE           714-961-0181      38400             
+  This board is one of the biggest in Orange County.
+  It has 8-nodez and continues to grow.
+  It's also the Beta test site!
+  You can leave me msg in the Gamerz Forum of DoUGHneT here.
+
+Nashura, NH:
+  The Barracks BBS          603-888-2454      2400-14400
+  single node (for the moment) HD 2.9 gigs, 2 CD's tot: 7.5gigs
+  You should get the newest version here!
+  Fidonet #: 1:132/312
+  Singnet #: 93:4603/106
+  Enchantnet #: 23:6603/121
+
+Madison, WI:
+  kaOs                      608-278-0471      14400 
+  4 Nodes Under OS/2 Warp HD 1.5 gigs 12 CD's
+  You can leave a MSG's in the NY2008 msg area
+  checks Franz's BBS daily for new Releases
+
+Manlius, NY:
+  City Lights OLS           315-682-5014      28800
+                            315-682-1804      14400
+  This is the distro site where it should be:) 
+  David Marvasti is the sysop. 
+  FIDO #: 1:260/390
+
+Bitely, MI:
+  The Buck Pole             616-745-8476      14400
+  2 nodes, 4200 files online, 10,000 files offline
+  Sysop: Magilla
+
+Tallahassee, FL:
+  The Love Palace           904-421-6235      14400
+                            904-421-3284      28800
+  FIDO #1: 1:3605/997  FIDO #2: 1:3605/998
+
+Kelowna, BC, Canada:
+  The Misfits BBS           604-763-8031      14400
+  Tribbs ... sysop: Faphra
+
+Springfield, OR:
+  The Satisfied Guillotine  503-746-5506      14400
+  VBBS
+
+Singapore, Singapore:
+  Pandesmos BBS             +65-766-4169      14400 
+  Sysop: Sam Seh, HDD: 2.4 gigs
+
+Burnsville, MN:
+  The Ultimate Experience BBS 612-431-5731    
+  sysop: Rev. VCLQM The 3rd
+  software: WWIV 4.24a
+
diff --git a/src/doors/ny2008/drugm.rip b/src/doors/ny2008/drugm.rip
new file mode 100644
index 0000000000000000000000000000000000000000..e1908c1d56e6f6c3fdf7c7d8b316ddb5ae491bff
--- /dev/null
+++ b/src/doors/ny2008/drugm.rip
@@ -0,0 +1,8 @@
+!|*|1K|w0000000010|W0|c08|Y01000500|@7E1GDrugs|c00|=00000001|S010A
+!|p042J7D2O7I2U7F2Z6N|p082X6M2W662Y5S355E3M4Q3G5H3768336H
+!|p062Y6M396C3R5Z4C5S3X663F6G|p062Y6L3R6F436F4C6J3P6N346N
+!|p05316M3B6Q3H6V3H70396V|p05316L2Q6L2J6P2F6T2P6Q|p052X6M2M6A2D5U2D592O5T
+!|p042X6L2E681Z672D6H|Y00000100|1B0000020S9402070F0F000800000708000000
+!|1U643ZB04H1U00<>Buy Drugs<>B|1U9V4WER5E2D00<>Use Drugs<>U
+!|1U585TA46B2B00<>Sell Drugs<>S|1U876PD3772H00<>Your Stats<>Y
+!|1U6L7MBH841V00<>Change Yer Drug<>C|1UAW8HFS8Z0000<>Get Outta Here<>Q|#|#|#
\ No newline at end of file
diff --git a/src/doors/ny2008/enm.txt b/src/doors/ny2008/enm.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2f3afb4a6b47de458840d5d3b6d0ec7562becc57
--- /dev/null
+++ b/src/doors/ny2008/enm.txt
@@ -0,0 +1,1339 @@
+;This is the enemy file (run 'AEDIT < ENM.TXT' to compile)
+;format:
+;commands = 
+; A - Add record, followed by the record ... do not add comments into the
+;     record...
+; N - Set the next enemy to be overleap into the next level and increase 
+;     level and set it to the first enemy of the new level
+; Q - Quit Sets the last record as the last enemy in the current level and 
+;     quits
+;record format =
+;name
+;hitpoints
+;attack strength
+;defense strength
+;arm
+;-----------
+A
+Kid
+12 
+3
+3
+1
+;-----------
+A
+Beggar
+17
+2
+3
+1
+;-----------
+A
+Old Fart
+14
+5
+2
+1
+;-----------
+A
+Ugly Old Slut
+19
+4
+4
+1
+;-----------
+A
+Yer Nextdoor Neighbour
+18
+4
+4
+1
+;-----------
+A
+Blind Criple
+10
+2
+3
+0
+;-----------
+A
+Big Ugly Rat
+11
+5
+3
+0
+;-----------
+A
+John Waynes' Bobbit Dick
+13
+3
+5
+0
+;-----------
+A
+Tagger
+19
+3
+4
+1
+;-----------
+A
+Real Old Hippie
+23
+2
+3
+2
+;-----------
+A
+Drunken Slob
+21
+3
+3
+2
+;-----------
+A
+Ceasar's Ghost
+25
+2
+2
+2
+;-----------
+N - level 1
+A
+Acid Junkie On A Trip
+21
+2
+3
+2
+;-----------
+A
+Small Gang Member
+23
+4
+2
+1
+;-----------
+A
+Gang Banger
+34
+5
+3
+2
+;-----------
+A
+Drive By Maniac
+30
+4
+3
+2
+;-----------
+A
+Imbecil
+26
+4
+3
+2
+;-----------
+A
+One Legged Veteran
+29
+3
+2
+1
+;-----------
+A
+Limo Driver
+30
+4
+4
+2
+;-----------
+A
+Drunk Biker
+31
+4
+4
+2
+;-----------
+A
+Blind Bulldog
+30
+4
+4
+2
+;-----------
+A
+Alleycat
+32
+4
+3
+2
+;-----------
+N - level 2
+A
+Big Fat Dude
+35
+5
+5
+3
+;-----------
+A
+Ugly Hooker
+51
+5
+3
+2
+;-----------
+A
+Ex-Cop
+49
+5
+4
+2
+;-----------
+A
+Karate Guy
+55
+12
+5
+0
+;-----------
+A
+Private Security Dude
+50
+5
+5
+2
+;-----------
+A
+Ugly Kid
+50
+5
+5
+2
+;-----------
+A
+Prep
+47
+5
+5
+2
+;-----------
+A
+A Fairly Large Rat
+48
+5
+5
+2
+;-----------
+A
+Limping Dog
+50
+5
+4
+2
+;-----------
+A
+Strange Lookin' Fella
+47
+4
+5
+2
+;-----------
+N - level 3
+A
+Vietnam Vet
+54
+6
+6
+3
+;-----------
+A
+Taxi Driver
+72
+8
+9
+3
+;-----------
+A
+Rich Kid on LSD
+70
+7
+9
+4
+;-----------
+A
+Teacher
+73
+9
+8
+3
+;-----------
+A
+Butthead
+72
+8
+9
+3
+;-----------
+A
+Drunk
+69
+8
+10
+3
+;-----------
+A
+Surfer Dude
+71
+9
+9
+4
+;-----------
+A
+Ugly Mutanat
+70
+9
+9
+4
+;-----------
+A
+Lunch Lady
+71
+9
+9
+4
+;-----------
+N - level 4
+A
+Wannabe
+72
+8
+9
+4
+;-----------
+A
+Rich Boy
+120
+11
+11
+4
+;-----------
+A
+Chinese Dude
+120
+11
+11
+4
+;-----------
+A
+Small Black Dude
+130
+12
+11
+3
+;-----------
+A
+White Kid
+123
+12
+11
+4
+;-----------
+A
+Grunge Dude
+119
+11
+10
+4
+;-----------
+A
+Wannabe Skinhead
+115
+13
+8
+4
+;-----------
+A
+Real Ugly Dude
+126
+10
+8
+4
+;-----------
+A
+Big Fat Chick
+137
+11
+12
+4
+;-----------
+A
+Judo Chick
+130
+12
+12
+4
+;-----------
+N - level 5
+A
+Country Hick
+120
+11
+10
+4
+;-----------
+A
+Fake Priest
+210
+15
+14
+4
+;-----------
+A
+Middle Class Junkie
+215
+16
+12
+3
+;-----------
+A
+Big Ugly Fella
+270
+8
+10
+3
+;-----------
+A
+Fireman
+250
+25
+15
+1
+;-----------
+A
+Small Illegal Alien
+310
+25
+12
+0
+;-----------
+A
+Shareware Author
+315
+10
+10
+3
+;-----------
+N - level 6
+A
+Disco Maniac
+260
+15
+15
+4
+;-----------
+A
+College Dude
+350
+20
+19
+4
+;-----------
+A
+50's Cool Dude
+360
+19
+20
+4
+;-----------
+A
+Lonely Hitchhiker
+354
+19
+19
+4
+;-----------
+A
+Metallica Fan
+375
+18
+19
+4
+;-----------
+A
+City Boy
+340
+20
+17
+4
+;-----------
+A
+Cowboy
+320
+24
+17
+4
+;-----------
+A
+Very Small Alien
+325
+24
+18
+4
+;-----------
+N - level 7
+A
+Buisness Guy
+370
+18
+16
+5
+;-----------
+A
+Artist Dude
+630
+21
+19
+5
+;-----------
+A
+Crook
+615
+20
+20
+5
+;-----------
+A
+Male Prostitute
+620
+22
+18
+5
+;-----------
+A
+Shop Clerk
+612
+21
+20
+5
+;-----------
+A
+Your Aunt
+630
+18
+18
+5
+;-----------
+N - level 8
+A
+Wannabe Cop
+1500
+20
+20
+4
+;-----------
+A
+Guns Dealer
+1250
+25
+24
+5
+;-----------
+A
+Small Rich Kid
+1050
+35
+34
+5
+;-----------
+A
+Lorena Bobbit
+1000
+34
+36
+5
+;-----------
+A
+Big Ugly Hairball
+1100
+34
+30
+5
+;-----------
+A
+Small Wannabe Headbanger
+1099
+32
+30
+5
+;-----------
+A
+Door to Door Sales Dude
+1111
+32
+35
+5
+;-----------
+A
+A Sysop You Hate
+1066
+33
+35
+5
+;-----------
+N - level 9
+A
+Slayer Fan
+1576
+30
+35
+5
+;-----------
+A
+Jim Morrison's Ghost
+1811
+41
+41
+6
+;-----------
+A
+Street Priest
+1790
+41
+40
+6
+;-----------
+A
+Monkeyspank
+1801
+37
+38
+7
+;-----------
+A
+Clean Dude
+1799
+42
+36
+6
+;-----------
+A
+Big Ugly Guy
+2100
+34
+31
+6
+;-----------
+A
+Security Robot
+3600
+12
+18
+7
+;-----------
+A
+Regular Lowlife
+1700
+45
+41
+6
+;-----------
+N - level 10
+A
+Big Disco Dude
+2000
+42
+40
+6
+;-----------
+A
+Crack Addict
+3103
+59
+64
+6
+;-----------
+A
+Pot Dealer
+2999
+52
+65
+7
+;-----------
+A
+Wannabe Superman
+3007
+60
+68
+6
+;-----------
+A
+Preppy Dude
+2800
+60
+67
+6
+;-----------
+A
+Black Blues Dude
+3154
+49
+70
+7
+;-----------
+A
+Elvis
+3033
+60
+68
+6
+;-----------
+A
+Small Skinhead
+2998
+54
+77
+6
+;-----------
+A
+Hot Dog Mascot
+3000
+55
+77
+6
+;-----------
+N - level 11
+A
+Wannabe Biker
+3400
+49
+62
+7
+;-----------
+A
+Drunken Hippie
+5276
+63
+76
+7
+;-----------
+A
+Real Clean Guy
+5300
+79
+76
+6
+;-----------
+A
+Green Martian
+5300
+75
+70
+6
+;-----------
+A
+Fat Slut
+5222
+80
+70
+6
+;-----------
+A
+Illegal Guns Dealer
+9555
+35
+18
+7
+;-----------
+A
+Cowboy
+3000
+34
+130
+7
+;-----------
+A
+Citizen X
+5387
+80
+68
+6
+;-----------
+A
+Living Dead
+5223
+85
+68
+6
+;-----------
+N - level 12
+A
+Bill Clinton
+5297
+70
+72
+7
+;-----------
+A
+Workout Guy
+8888
+91
+79
+7
+;-----------
+A
+Bill Gates
+9000
+97
+89
+6
+;-----------
+A
+Wierd Lookin Guy
+8765
+93
+95
+7
+;-----------
+A
+Jimi Hendrix's Ghost
+8999
+94
+99
+7
+;-----------
+A
+Green Day Fan
+9021
+82
+93
+8
+;-----------
+A
+Facist Dude
+9458
+85
+90
+7
+;-----------
+A
+Malcom X Ghost
+9408
+86
+90
+7
+;-----------
+N - level 13
+A
+8th Grader on PCP
+9111
+130
+90
+5
+;-----------
+A
+Big Car Thief
+15112
+120
+120
+7
+;-----------
+A
+Copkiller Guy
+15355
+120
+120
+7
+;-----------
+A
+Regular Skinhead
+16744
+128
+121
+7
+;-----------
+A
+Headbanger
+17000
+117
+117
+8
+;-----------
+A
+Bountyhunter
+16121
+121
+120
+7
+;-----------
+A
+Big Dude
+15341
+122
+120
+7
+;-----------
+N - level 14
+A
+Jock
+16123
+125
+130
+7
+;-----------
+A
+Anti-Abortion Dude
+26034
+190
+199
+8
+;-----------
+A
+Headhunter
+25345
+199
+200
+7
+;-----------
+A
+Industrial Lead Singer
+25121
+205
+200
+7
+;-----------
+A
+Big Karate Guy
+35865
+2750
+220
+0
+;-----------
+A
+Real Big Taxi Driver
+20872
+199
+210
+7
+;-----------
+A
+Your Mirror Reflection
+25256
+210
+198
+7
+;-----------
+A
+Punk-Rock Girl
+25035
+200
+210
+7
+;-----------
+A
+Rock Station DJ
+34000
+190
+200
+7
+;-----------
+N - level 15
+A
+White Zombie Fan
+32000
+210
+10
+7
+;-----------
+A
+Small Sex Pistols Fan
+45634
+230
+10
+7
+;-----------
+A
+Real Dirty Dude
+44875
+230
+20
+8
+;-----------
+A
+UFO Thing
+48976
+230
+10
+8
+;-----------
+A
+It
+45023
+230
+20
+7
+;-----------
+A
+Street Artist
+41876
+230
+10
+7
+;-----------
+A
+Scottish Dude
+47628
+230
+10
+7
+;-----------
+A
+James Bond
+50000
+230
+10
+7
+;-----------
+A
+Rich Boy
+52183
+230
+10
+7
+;-----------
+N - level 16
+A
+Thing
+49354
+240
+10
+7
+;-----------
+A
+Big Fat Waitress
+75452
+360
+20
+7
+;-----------
+A
+Beavis
+81648
+390
+90
+7
+;-----------
+A
+Pot Pusher
+73853
+420
+10
+8
+;-----------
+A
+Small Coke Dealer
+76963
+455
+13
+8
+;-----------
+A
+Judo Dude
+68754
+8806
+40
+0
+;-----------
+A
+Hacker
+70234
+430
+10
+8
+;-----------
+A
+Knife Throwing Dude
+75439
+7854
+24
+2
+;-----------
+N -level 17
+A
+Butthead's Mom
+79467
+400
+10
+8
+;-----------
+A
+Weight Lifter
+128529
+523
+22
+8
+;-----------
+A
+Nintendo Addict
+134428
+520
+10
+8
+;-----------
+A
+Dude on PCP
+128566
+530
+20
+8
+;-----------
+A
+Zombie
+138246
+529
+30
+7
+;-----------
+A
+Doomsday Guy
+125874
+534
+90
+6
+;-----------
+A
+Football Player
+134428
+520
+30
+8
+;-----------
+A
+Skinhead Dude
+145672
+540
+60
+8
+;-----------
+A
+OJ Simpson
+125413
+660
+20
+7
+;-----------
+N - level 18
+A
+BBS Maniac
+139451
+570
+40
+8
+;-----------
+A
+Undertaker
+228564
+670
+60
+9
+;-----------
+A
+Cool Dude
+212343
+620
+60
+9
+;-----------
+A
+PCP dealer
+235632
+620
+60
+9
+;-----------
+A
+Undertaker's Son
+228564
+600
+50
+9
+;-----------
+A
+Biker Bitch
+213563
+660
+70
+9
+;-----------
+A
+Mafia Guy
+222543
+600
+60
+9
+;-----------
+A
+Hitman
+226226
+1210
+70
+7
+;-----------
+N - level 19
+A
+Led Zepelin Dude
+250232
+650
+60
+9
+;-----------
+A
+Big Mafia Dude
+480776
+480
+20
+9
+;-----------
+A
+Big Stoned Hippie
+472653
+480
+60
+10
+;-----------
+A
+Big Guitar Player
+467771
+480
+90
+10
+;-----------
+A
+Heavy Metal Dude
+450542
+480
+50
+10
+;-----------
+A
+Heroin Addict
+467321
+481
+30
+9
+;-----------
+A
+Big Skinhead Dude
+480442
+483
+70
+10
+;-----------
+A
+Real Mad Sysop
+450666
+480
+70
+10
+;-----------
+A
+Beer Dude
+467843
+484
+90
+9
+;-----------
+N - level 20
+A
+Heavy Metal Singer
+480653
+481
+40
+10
+;-----------
+A
+Sid Vicious's Ghost
+1010423
+800
+50
+10
+;-----------
+A
+Punk Guy
+1000423
+790
+11
+10
+;-----------
+A
+Punk Rock Singer
+1010102
+790
+11
+10
+;-----------
+A
+Big Biker Guy
+1009321
+799
+11
+10
+;-----------
+A
+Sex Pistols Fan
+1099634
+800
+15
+10
+;-----------
+A
+Heroin Dealer
+1000111
+799
+10
+10
+;-----------
+A
+Big Biker Bitch
+998534
+800
+10
+10
+;-----------
+A
+Ozzy
+1020954
+790
+30
+10
+;-----------
+A
+Nancy Spungen
+1010954
+790
+30
+10
+;-----------
+A
+Mass Killer
+1001521
+800
+20
+10
+;-----------
+A
+Franz's Girlfriend
+1020000
+820
+35
+10
+;-----------
+A
+Franz
+1050000
+820
+35
+10
+;-----------
+Q
diff --git a/src/doors/ny2008/enmbak.txt b/src/doors/ny2008/enmbak.txt
new file mode 100644
index 0000000000000000000000000000000000000000..879bd90e0695a589b9a60411dd931e3623b6af91
--- /dev/null
+++ b/src/doors/ny2008/enmbak.txt
@@ -0,0 +1,117 @@
+;This is the enemy file (run 'AEDIT < ENM.TXT' to compile)
+;format:
+;commands = 
+; A - Add record, followed by the record ... do not add comments into the
+;     record...
+; N - Set the last enemy to be overleap into the next level and increase 
+;     level and set it to the first enemy of the new level
+; Q - Quit Sets the last record as the last enemy in the current level and 
+;     quits
+;record format =
+;name
+;hitpoints
+;attack strength
+;defense strength
+;arm
+;-----------
+A
+Kid
+12 
+10
+9
+1
+;-----------
+A
+Beggar
+17
+10
+10
+1
+;-----------
+A
+Old Fart
+14
+9
+6
+1
+;-----------
+A
+Ugly old bitch
+19
+13
+9
+1
+;-----------
+A
+Blind criple
+10
+5
+3
+0
+;-----------
+A
+Big ugly rat
+11
+10
+11
+0
+;-----------
+A
+John Waynes' Bobbit Dick
+14
+15
+5
+0
+;-----------
+A
+Tagger
+19
+14
+9
+1
+;-----------
+A
+Real old hippie
+23
+14
+8
+2
+N - 1 level
+;-----------
+A
+Acid junkie on a trip
+26
+16
+12
+2
+;-----------
+A
+Small gang member
+23
+17
+15
+3
+;-----------
+A
+Gang banger
+34
+19
+18
+4
+;-----------
+A
+Drive by maniac
+30
+20
+15
+4
+N - 2 level
+;-----------
+A
+Big Fat Dude
+35
+21
+19
+4
+;-----------
+Q
diff --git a/src/doors/ny2008/entry.rip b/src/doors/ny2008/entry.rip
new file mode 100644
index 0000000000000000000000000000000000000000..6eaa10fa6ab45d616238fef1f43de1dda729ffc5
--- /dev/null
+++ b/src/doors/ny2008/entry.rip
@@ -0,0 +1,7 @@
+!|*|1K|w0000000010|W0|c0B|Y00000600|@0302New|c03|@5F01York|c09|@BZ012008|c0C
+!|Y00000100|@041GBy Franz|c0A|@041VVersion `v `w|c04|@042A`r|c02
+!|@042PThis game has been running `d days\!
+!|1B00000202ZK02080F0F080700000807000000|1U5Y4EAD4R1X00<>Enter The Streets<>E
+!|1U5Y50AD5D2400<>List Players<>L|1U5Y5MAD5Z2H00<>Your Stats<>Y
+!|1U5Y68AD6L2600<>Newz<>N|1U5Y6UAD772900<>Quit To BBS<>Q|c0A|Y02000400
+!|@D01C(c) 1995-1996 George Lebl|=00000001|R5G3VAX7Q|#|#|#
\ No newline at end of file
diff --git a/src/doors/ny2008/evilm.rip b/src/doors/ny2008/evilm.rip
new file mode 100644
index 0000000000000000000000000000000000000000..b9ea9445bcfd1c6d8b1f0d6d24695f564d983d6a
--- /dev/null
+++ b/src/doors/ny2008/evilm.rip
@@ -0,0 +1,6 @@
+!|*|1K|w0000000010|W0|c04|Y0A000400|@5I0OEvil Stuff|Y00000100
+!|1B00000202YY02070F0F000800000708000000|1U5B2YBR3J2B00<>Steal From Beggars<>S
+!|1U5C3YBR4J1W00<>Destroy a Car<>D|1U5C4YBS5J1U00<>Burn a School Down<>B
+!|1U5C5YBS6J2A00<>Break a Window<>R|1U5C70BS7L2800<>Poison Water<>P
+!|1U5C80BT8L2F00<>United Nations HQ Bombing<>U
+!|1U5C90BT9L0000<>Return<>R|#|#|#
diff --git a/src/doors/ny2008/file_id.diz b/src/doors/ny2008/file_id.diz
new file mode 100644
index 0000000000000000000000000000000000000000..c1bbc1143b4bb55aca4a64c656e0f4d05231c27f
--- /dev/null
+++ b/src/doors/ny2008/file_id.diz
@@ -0,0 +1,4 @@
+C/C++ SOURCES for NY2008
+online bbs game
+FREE,Public domain!!!!!!
+get em hack em ....
diff --git a/src/doors/ny2008/files.doc b/src/doors/ny2008/files.doc
new file mode 100644
index 0000000000000000000000000000000000000000..e5b10d0686ac97678e34eaaf989d4adaf129df50
--- /dev/null
+++ b/src/doors/ny2008/files.doc
@@ -0,0 +1,38 @@
+Files included in this archive:                        <---- = important
+
+NY2008.EXE   - The game executable.
+SAMPLE.CFG   - Edit this and save as NY2008.CFG!!!          <-----
+SAMPLEIB.CFG - Sample InterBBS configuration file.
+NYEDIT.EXE   - The User Editor.
+RESET.BAT    - This batch file will erase the game files and RESET THE GAME!
+EXAMPLE.BAT  - Example batch file which runs the game.
+READ.ME      - Important notes about the release!           <-----
+3RDPARTY.DOC - How to create 3rd party software and IGM's.
+SYSOP.DOC    - How to install and run the game!!!!!!!!      <-----
+INTERBBS.DOC - How to set up interbbs games
+STRUCT.DOC   - The 'C' Structures for NY2008.
+CONTACT.DOC  - Contacts and beta sites.
+WHATSNEW.DOC - All the changes are here.
+HISTORY.DOC  - When was which version released.
+LICENSE.DOC  - The software license and disclaimer.         <-----
+FILES.DOC    - This file!
+MENUS.DAT    - The menus of the game.
+LINES.DAT    - Various text lines from the game (language file).
+MENUSC.DAT   - Version of menus.dat for clean mode.
+LINESC.DAT   - Version of lines.dat for clean mode.
+MENUS.RIP    - The RIP menus of the game.
+LINES.RIP    - Various RIP text lines from the game (language file).
+MENUSC.RIP   - Version of menus.rip for clean mode.
+LINESC.RIP   - Version of lines.rip for clean mode.
+NYINSTR.ASC  - The instruction file. (in NY2008 color codes)
+NYINSTRC.ASC - The instruction file for clean mode.
+INTRO.???    - Introduction text file.
+WIN.???      - File displayed when a person wins the game.
+NY2008.???   - File for you to display on logon to advertise the game.
+*.RIP        - Files needed for RIP games.
+NYENM.IDX    - Enemy index file.
+NYENM.DAT    - Enemy data file.
+NY_JPSRC.ZIP - An example IGM source code.
+NY_IGMIN.ZIP - IGM installation program you can use in your own IGM's
+
+
diff --git a/src/doors/ny2008/food.rip b/src/doors/ny2008/food.rip
new file mode 100644
index 0000000000000000000000000000000000000000..34c9c1a02a7c9542f36b850c8059d0f1f460d251
--- /dev/null
+++ b/src/doors/ny2008/food.rip
@@ -0,0 +1,7 @@
+!|*|1K|w0000000010|Y00000100|1B0000020S8W02000F0E020A0000000A000000
+!|1U9V19EI1U0000<>Go Eat Out<>G|1B0000020S8W02000F0B010900000009000000
+!|1U802NCN380000<>Eat From Dumpster<>E|1B0000020S8W02000F0F070E0000000E000000
+!|1U9Q3ZED4K0000<>Steal Some Food<>S|1B0000020S8W02000F0F050D0000000D000000
+!|1UB75IFU630000<>Your Stats<>Y|1B0000020S8W02000F0F040C0000000C000000
+!|1U8171CO7M0000<>Go BACK<>Q|1B000002026802000F0F040C0000000C000000
+!|1U6U05759J0000|W0|c0C|Y0A000500|@0KBFood|#|#|#
\ No newline at end of file
diff --git a/src/doors/ny2008/frame.rip b/src/doors/ny2008/frame.rip
new file mode 100644
index 0000000000000000000000000000000000000000..f8a49aa38e5e11a2e3f3dbbd1335d6cf31cf70be
--- /dev/null
+++ b/src/doors/ny2008/frame.rip
@@ -0,0 +1 @@
+!|*|1K|w0000270Z10|1B00000000LC0200000F080700000007000000|1U0284HP9N0000|#|#|#
diff --git a/src/doors/ny2008/frame1.rip b/src/doors/ny2008/frame1.rip
new file mode 100644
index 0000000000000000000000000000000000000000..1e353df3ecc34a14be11875414a0682e5a45ac08
--- /dev/null
+++ b/src/doors/ny2008/frame1.rip
@@ -0,0 +1,3 @@
+!|1B00000000LC0200000F080700000007000000|1U0284HP9N0000
+!|Y06000300|1B0000020SAA02080F0F080700000807000000
+!|1U0D8DHE9D0000<>Click Here Or Press Enter<>^M|#|#|#
diff --git a/src/doors/ny2008/frame2.rip b/src/doors/ny2008/frame2.rip
new file mode 100644
index 0000000000000000000000000000000000000000..f48bb478c1d753e05005cd1e653bb49d602a0a24
--- /dev/null
+++ b/src/doors/ny2008/frame2.rip
@@ -0,0 +1,4 @@
+!|1B00000000LC0200000F080700000007000000|1U0284HP9N0000
+!|Y06000300|1B0000020SAA02080F0F080700000807000000
+!|1U0D8D5F9E0000<>Todays News<>T|1UCC8DHE9E0000<>Quit<>Q
+!|1U6C8DBE9E0000<>Yesterdays News<>Y|#|#|#
diff --git a/src/doors/ny2008/frame3.rip b/src/doors/ny2008/frame3.rip
new file mode 100644
index 0000000000000000000000000000000000000000..c555f0818f235d68d9bc9f9b30aa50c6012cf0eb
--- /dev/null
+++ b/src/doors/ny2008/frame3.rip
@@ -0,0 +1,4 @@
+!|1B00000000LC0200000F080700000007000000|1U0284HP9N0000
+!|Y06000300|1B0000020SAA02080F0F080700000807000000
+!|1U0D8D5F9E0000<>More<>Y|1UCC8DHE9E0000<>Non-Stop<>=
+!|1U6C8DBE9E0000<>Stop<>N|#|#|#
diff --git a/src/doors/ny2008/frame4.rip b/src/doors/ny2008/frame4.rip
new file mode 100644
index 0000000000000000000000000000000000000000..9ad547ebb35fb51fa9646517fed149fa20f2193c
--- /dev/null
+++ b/src/doors/ny2008/frame4.rip
@@ -0,0 +1,2 @@
+!|*|1K|w0007271610|Y01000400|1B000002027402080F0F080700000807000000
+!|1U0404HN1F0000<>Reading Mail|#|#|#
\ No newline at end of file
diff --git a/src/doors/ny2008/heal.rip b/src/doors/ny2008/heal.rip
new file mode 100644
index 0000000000000000000000000000000000000000..8531878d85de675c7eae8bf65e3ef3956686741b
--- /dev/null
+++ b/src/doors/ny2008/heal.rip
@@ -0,0 +1,7 @@
+!|*|1K|w0000000010|S010F|B001T728P|S010C|B074I6V5T|B2H2H4888|Y00000100
+!|1B00000202KG02000F0E020A0000000A000000|1U7A1TBC2H0000<>Heal Wounds<>H
+!|1B00000202KG02000F0F040C0000000C000000|1UB031F23P0000<>Cure STD's<>C
+!|1B00000202KG02000F0F070E0000000E000000|1U7M4NBO5B0000<>Drug Rehab<>D
+!|1B00000202KG02000F0F030B0000000B000000|1UAH68EJ6W0000<>Yer Stats<>Y
+!|1B00000202KG02000F0F050D0000000D000000|1U9C80DE8O0000<>Get Outta Here<>Q|#|#
+!|#
\ No newline at end of file
diff --git a/src/doors/ny2008/history.doc b/src/doors/ny2008/history.doc
new file mode 100644
index 0000000000000000000000000000000000000000..2609755abc47cf4ee350ae4a51cfcc5f9d919bf1
--- /dev/null
+++ b/src/doors/ny2008/history.doc
@@ -0,0 +1,291 @@
+Sometime in February 1995
+-------------------------
+Started working on New York. At this time it was still supposed to be a
+small freeware game, but soon I have seen there is gonna be too much work
+to make it freeware ... so it became shareware ...
+
+Also I put up the ALPHA 1 on my BBS.
+
+Then ALPHA 2-23 followed.
+
+3/17/1995
+---------
+I released the BETA 1 version.
+
+3/19/1995
+---------
+BETA 2 version.
+1 more BETA 2 release with a minor bugfix.
+
+3/22/1995
+---------
+BETA 3 version. - bug fix release
+
+3/23/1995
+---------
+BETA 4 version. - bug fix release
+
+3/24/1995
+---------
+BETA 5 version.
+
+3/28/1995
+---------
+BETA 6 version.
+new file structures implemented. - proved to cause a few bugs
+
+3/30/1995
+---------
+BETA 7 version. - bug fix release
+
+4/6/1995
+--------
+BETA 8 version.
+Got new stuff users asked for. + IGM support! (read 3rdparty.doc + struct.doc)
+after a release to one beta test site ... new bugfixes arrived ... same ver #
+Only released to one beta test site.
+
+4/9/1995
+--------
+BETA 9 version started being tested on my BBS.
+
+4/21/1995
+---------
+BETA 9 version released.
+new record to the structure added, no conversion neccessary.
+using text files for the output! ... editable!
+
+4/27/1995
+---------
+v0.01 WIDE BETA!
+first public release!
+
+4/29/1995
+---------
+New 3rdparty.doc file released.
+
+5/3/1995
+--------
+WIDE BETA 2 released!
+                     
+5/12/1995
+---------
+WIDE BETA 3 released!
+
+5/14/1995
+---------
+WIDE BETA 4 released!
+
+5/15/1995 - 8/10/1995
+---------------------
+Been on vacation no releases
+
+8/15/1995
+---------
+WIDE BETA 5 released!
+
+8/21/1995
+---------
+WIDE BETA 6 released!
+nasty bug in wb5 fixed!
+
+8/23/1995
+---------
+WIDE BETA 7 released!
+IGM .inf drop file format changed a bit .... 
+this was a more-IGM-support-features-and-fixes release
+JACKPOT IGM released!
+
+8/24/1995
+---------
+JACKPOT IGM source released
+
+9/4/1995
+--------
+WIDE BETA 8 released
+Franz's Bar IGM released
+
+9/10/1995
+---------
+WIDE BETA 9 released!
+bugfixes and mail search speeded up to warp speed!
+
+9/21/1995
+---------
+v0.01 released!
+the first non-beta release!
+Jackpot IGM v1.1 released
+Franz's Bar IGM v1.1 released
+Shoot Em IGM released
+Custom Installation Program released in the ny2008 main archive
+
+9/28/1995
+---------
+v0.02 minor release!
+Franz's Bar IGM v1.2 released!
+Custom Installation Program v1.1 released!
+
+10/16/1995
+----------
+I have not been working on the game too hard, but I started testing 0.03
+bugfix release on my board.
+
+10/18/1995
+----------
+LOT of bugtesting today brought results, a faster multitasking support, and
+a lot of bugfixes.
+
+10/25/1995
+----------
+0.03 released
+v1.3 of Franz's Bar released
+v1.2 of Jackpot released
+v1.1 of Shoot Em released
+
+11/2/1995
+---------
+0.03a released
+
+12/1/1995
+---------
+Just got hold of the crack for 0.03a ... try again ...
+
+12/6/1995
+---------
+0.03b released
+
+12/9/1995
+---------
+Finally found the -p command line argument bug 
+v0.03c released
+
+12/15/1995
+----------
+CheatFix!! There has been a "legal way" to gain lot of points (but only 
+worked for higher level players!) So ... I fixed it!
+v0.03d is put up on my board, no public release!
+
+12/18/1995
+----------
+Finished all fixes and compiled 0.04 and I think I will release it in the 
+morning. Actually it is the morning, but I have not yet slept:)
+
+1/26/1996
+---------
+Fineshed all i planned for this release ... not much but it makes the game 
+much more stable (well as long as the new stuff is working correctly:)!
+The new ver # is v0.05
+
+1/28/1996
+---------
+I just remembered one feature which was supposed to be in 0.05 but I forgot 
+about it ... so I relased v0.05a which includes this new feature ... I will 
+dist it a bit today and tommorow .. no big deal ...
+
+During most of February 1996
+----------------------------
+I'm working on the new version v0.10, it is now named v0.06 and is only
+on my BBS ... Wow just realized ... this is exactly a year after I started
+working on New York ... v0.10 will probably be the biggest release since
+WB1 ... Since there are BIG changes ... look at the WHATSNEW.DOC file.
+
+3/23/1996
+---------
+I have finaly cought a bug that I have been stalking for the last couple of
+weeks. It was a VERY VERY nasty overflow bug, that occured in interbbs mail
+So it seems I'm getting VERY close to the first beta of v0.10 ...
+
+3/23/1996
+---------
+BETA 1 of v0.10 Will be released today or tommorrow ... some ibbs stuff is not
+implemented yet but enough is to test how the interbbs works. I have finished
+making temporary rip screens.
+
+3/24/1996
+---------
+BETA 1 was released the 23rd, 1 year and 6 days after BETA 1 of v0.01
+was released. And exactly 1 year after BETA 4 of v0.01 was released.
+
+3/28/1996
+---------
+Just finished all I need for BETA 2, but haven't tested it yet ... I'll do
+that tommorrow.
+
+4/2/1996
+--------
+I'm waiting for .MSG packets from beta sites so I can resolve the problem
+of them not being read in. So I did a little (ok a lot) of optimizing and
+saved around 18k of the exe file!
+
+4/5/1996
+--------
+Well just about finished with BETA 2 since I solved that problem with the
+.msg packets hopefully ... so I'm testing it right now and I will release
+it tommorrow.
+
+4/7/1996
+--------
+Well I had a large problem with the .exe file and large memory model. To
+avoid switching to huge, I took the interbbs -ibbsi, -ibbso, and
+-sendnodelist and made a separate .exe file for that ... I just finished but
+have not tested it yet.
+
+4/14/1996
+---------
+Ok finally found the problem, well a couple of them, it wasn't the memory
+model nor too large exefile, but a few bad pointer assigments and too short
+declared strings ... A LOT OF STUFF .... So it seems to be all working right
+now i will have to test it and change one more thing before putting out the
+beta 2
+
+4/15/1996
+---------
+Everything seems to be working so I'm releasing beta 2!
+
+4/27/1996
+---------
+I don't have much time with finals coming up, I fixed the online fight bug in
+beta 2. Also I found a couple of bugs in the interbbs and fixed them. Still
+some are lurking around. I'm releasing this as BETA 3 today.
+
+5/17/1996
+---------
+Summer finally:) ... I have decided to make the BETA 3 available to the
+public as wide beta 1 as I have not gotten enough feedback from the beta
+sites.
+
+7/7/1996
+--------
+I have made some changes to the manuals and the distro site list but have
+not distributed it since I have a more then a full time job and no time for
+ny2008 ...
+
+8/28/1996
+---------
+I have made more changes to docs, plus added more weapons and worked on
+the program a bit. I'm releasing 0.11 as the first 0.1? non-beta release!
+
+11/24/1996
+----------
+I fixed a few bugs, the wepons selecting bug and a mail bug. 0.12 is out.
+no new big releases are coming too soon since registrations are slow and 
+I have a lot of other projects. I WILL keep supporting this software 
+though, releasing, bug fixes as they come in. I plan a Win95/NT version. 
+This might take a little time but I think I will get to that this spring 
+at least, maybe sooner.
+
+12/25/1996
+----------
+I'm waiting to getting all my new internet stuff set up before releasing 
+another version, bad words support are in plus a few other things I've done.
+
+4/22/1997
+---------
+Tired of not getting regs. THE GAME IS FREE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+v1.00 released!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+ok so this is the end of ny2008 development .. I will make sources available 
+as well ... for anybody wanteing to port mess around with it use it ...
+whatever.
+
+Franz
diff --git a/src/doors/ny2008/imenu.rip b/src/doors/ny2008/imenu.rip
new file mode 100644
index 0000000000000000000000000000000000000000..d0539baa843895c99714c439ee35e7be2d1cb168
--- /dev/null
+++ b/src/doors/ny2008/imenu.rip
@@ -0,0 +1,7 @@
+!|*|1K|w000Q271310|W0|c0B|Y00000600|@0302New|c03|@5F01York|c09|@BZ012008|c0C
+!|Y00000100|@771GBy Franz|c0A|@6G1TVersion $NY_VER$|c04|@6W26$REG_STRING$|c02
+!|@3M2KThis game has been running $NYDAYS$ days\!
+!|1B00000202ZK02080F0F080700000807000000|1U5Y32AD3F1X00<>Enter The Streets<>E
+!|1U5Y3LAD3Y2400<>List Players<>L|1U5Y44AD4H2H00<>Your Stats<>Y
+!|1U5Y4NAD502600<>Newz<>N|1U5Y56AD5J2900<>Quit To BBS<>Q|c0A|Y02000400
+!|@D01C(c) 1995-1996 George Lebl|#|#|#
\ No newline at end of file
diff --git a/src/doors/ny2008/input.rip b/src/doors/ny2008/input.rip
new file mode 100644
index 0000000000000000000000000000000000000000..e9f7e9366927239ff3a2ec5223e0994d5c645c54
--- /dev/null
+++ b/src/doors/ny2008/input.rip
@@ -0,0 +1,7 @@
+!|w020F250I10|Y00000100|1B00000000LC0200000F080700000007000000
+!|1U022EHP660000|1B00000000LC020000080F0000000000000000|1U0A3AHF4B0000
+!|1B0000020SAA02080F0F080700000807000000|1U0C4N17540000<>1<>1
+!|1U1M4N2H540000<>2<>2|1U2W4N3R540000<>3<>3|1U464N51540000<>4<>4
+!|1U5G4N6B540000<>5<>5|1U6Q4N7L540000<>6<>6|1U804N8V540000<>7<>6
+!|1U9A4NA5540000<>8<>8|1UAK4NBF540000<>9<>9|1UBU4NCP540000<>0<>0
+!|1UD44NDZ540000<>Del<>^H|1UEE4NF9540000<>MAX<>>|1UFO4NHE540000<>Done<>^M|#|#|#
diff --git a/src/doors/ny2008/interbbs.doc b/src/doors/ny2008/interbbs.doc
new file mode 100644
index 0000000000000000000000000000000000000000..ba13c9d496050bceef53471849d48d808bf51fdc
--- /dev/null
+++ b/src/doors/ny2008/interbbs.doc
@@ -0,0 +1,178 @@
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+New York 2008 InterBBS Documentation
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+New York v0.10 and higher have the ability to be set up as an interbbs
+door over any fido style network or even locally (have two installations
+of the game fight against each other on the same bbs)
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+How It Works...
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+There is one "operator" system, which is the central system, the sysop
+of that bbs controls and sends out the node list and basically maintains
+the whole game. Read on for instructions for the "operator" bbs.
+
+The rest of the boards are regular game nodes.
+
+There can be up to 255 bbses in one game ....
+
+There can be up to 32000 games, so that one bbs can run more than one
+interbbs game (league) at a time.
+
+The game never has to be reset, unless you want to ... The best winner lists
+will never be reset (unless each system would delete the "NYBEST.TEN" file)
+The game is made so that the bbses can compete for the best average player
+score. Or just player can compete between each other. It's like in local
+games if one player wins he's added to the ten best list (if he's good enough)
+and he is reset, but the rest of the game can just keep on playing.
+I all depends on how the players want to play the game. It's best not
+to work together actually, but to compete even between local players since
+thats' the way to get points. I guess it will be more a battle of individuals
+more then a battle of bbses ....
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+If you are a normal bbs wanting to join in a game ....
+
+Make sure you are a registered sysop, otherwise the interbbs stuff will NOT
+work ... on info how to register, read REGISTER.DOC
+
+The Inter-BBS is enabled by a keyword in the game .cfg file (usually
+"NY2008.CFG"), "InterBBS" set that, make sure that "InterBBSOperator" is not
+set unless you are the "operator" bbs. And make sure you put down the
+game number you are joining under "InterBBSGameNumber" keyword.
+
+Copy SAMPLEIB.CFG to INTERBBS.CFG then edit the INTERBBS.CFG with your info.
+
+Set up the interbbs maintanance modes in your nightly batch file.
+
+There are two modes ... which are controlled by command line options.
+You use these with the NYIBBS.EXE file! You can specify -C option with
+nyibbs.exe to specify a .cfg file or make sure the ny2008.cfg file contains
+the bbs name, interbbs number and the other info. The nyibbs.exe also reads
+INTERBBS.CFG for the remaining interbbs info.
+
+-ibbso = Proccess all outgoing information, should be run before you proccess
+         and send your mail that day. 
+-ibbsi = Proccess all incoming information, should be run after you proccess
+         and recieve all mail that day.
+
+So in your nightly batch file you'd first run:
+
+ nyibbs -ibbso
+
+ then you would proccess your mail and send it with your front door or another
+ mailer, and you would get all the incoming mail, just like usual. After that
+ you would run:
+
+ nyibbs -ibbsi
+
+Run your game as you normally would with no other options ... just make sure
+that the .cfg file which the game is using (usually NY2008.CFG) has interbbs
+enabled and contains the right game number.
+
+You have to contact the "operator" of the game you want to join and have him
+add you to the node list and send out a new one. You will get it
+automatiacally if you setup everything right. You will need to supply him
+with some information, Your FIDO(or other fido style net) node number,
+Your BBS name and Your location(city and state should do).
+
+If you recieve the nodelist the game will automatically request player lists
+from other bbses and the game can begin. You don't have to get the nodelist
+yourself since the "operator" bbs sends it out and the game will recieve and
+read it automatically. To check if everything went well, check if you have
+recieved the nodelist, the filename is "NYNODE.LST", it migth take a few days,
+depending on how far your bbs is from the "operator" system which sent out the
+nodelist. So if you are impatient you can get the nodelist from the "operator"
+bbs yourself ... so you can start the game earlier. But basically you don't
+have to worry about anything .. it's all done automatically ...
+
+And thats' it you are now part of the game .... pretty easy eh? ....
+
+If you want to get out, of the game, run ny2008 RESET and select the kill
+interbbs option. It will not reset the game. Then tell the "operator" system
+so he can take you out of the nodelist.
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+If you are the "operator" BBS
+
+There can only be one "operator" BBS in any InterBBS game. If you are the
+operator you will be maintaining the nodelist for the game and basically
+overseeing the game. Look at "SAMPLE.LST" file for creating a nodelist.
+Once you cerated a nodelist and all of the systems that the nodelist
+contains have their systems set up for interbbs, and all have the
+game number in the interbbs.cfg file set to the same number, just run:
+
+nyibbs -sendnodelist
+
+This will read the nodelist and send it to all the systems in the nodelist.
+
+If you ever add or delete a system, just run this again and all the nodelists
+on all the systems (including the one you added) will be updated.
+
+That's basically all you have to do, remember you have to have the
+"InterBBSOperator" option set in your config file if you are one, otherwise
+it will not work.
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+LOCAL IBBS GAMES! (If having remote games use the setup above!)
+
+If you want to run a local league, just create the node file, select one
+of the games to be the operator, install the games in different directories.
+If you set the flag dir in the config file, these have to be different too.
+
+Create a directory where to put mail. Then set it as the mail directory in
+the interbbs.cfg of each game installation. This should be something like
+'C:\DOOR\NY2008\MSG'
+
+In the nodelist create "fake" node nubers like, 1:1/1 or similiar. Assign
+a different one to each game installation.
+
+There are 3 ways to run the local games, You will need to run
+
+  NYIBBS -IBBSI
+  NYIBBS -IBBSO
+
+In your batchfile every night in each game's directory no matter how
+you choose to run the game itself.
+
+I)
+ For slow response time but fast game startup, just run the game as you
+ would for a non-interbbs game. This makes the response time slow (the time
+ it takes for mail and stuff to get from one game to the other) but the game
+ starts up fast
+
+II)
+ Run the game as you allways would but add -IBBSM as another command line
+ argument. This will proccess the mail every time the game is entered, but
+ it will not proccess any other info, most player interaction is done through
+ mail anyway ... xcept spying. So you would run the game like this
+
+ NY2008 -IBBSM <put all your other command line arguments here>
+
+III) 
+ To make the game response fastest, but entering the game will be slower,
+ put this in your batchfile
+
+  NYIBBS -IBBSI
+  NY2008 <the command line arguments to run the game>
+
+ this will make the interaction between the nodes the fastest, though it might
+ slow things down for the user, since he will have to wait for the incoming
+ stuff to be proccessed, but this will be no problem for small games but if
+ there aren't more then a few game installations then it should be no problem.
+ Make sure you run the -IBBSI for each game installation at least once a day
+ so that you don't get a big pileup of all the .MSG files. And make sure you
+ also run the -IBBSO once a day so that the scores and stuff can be proccesed,
+ this don't have to be run after the game, once a day is enough and will still make the ibbs
+ game responsive.
+
+Remember the -IBBSI and -IBBSO options don't have remote output, so make sure
+they don't take too long if you are running them while somebody is online.
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+OK have fun ...
+
+Franz
diff --git a/src/doors/ny2008/intro.ans b/src/doors/ny2008/intro.ans
new file mode 100644
index 0000000000000000000000000000000000000000..5efc2e4174d92cbf6d1e4467eace98e0a2b79217
--- /dev/null
+++ b/src/doors/ny2008/intro.ans
@@ -0,0 +1,21 @@
+[?7hɻ��ͻ�  ����    �   ���
+����ͼȻ�ɼ   �� �� ��   ��    �    �
+�ȼ��� �ʼ�  ��    ���� ����
+��    � ��ͻ   �    ��   �   ������
+��͹�ͼ�ͼ�ɼ�   � ��
+   �    ��   �  ̹  �   �  �ͻ �ͻ�ͻ�ͻ  ��� �    ��
+��  � � �Ȼ�ͼ � �� ��͹    �  ��۱ �
+  ���    �ÿ �  �����ͼ�ͼ�ͼ����۱ ���
+�   ��  ���´ ô �    �    �   �    ���������� 
+  ������Ŵ ô   ��   �    �ֽ�������� �   �    �
+ ����    ����Ŵ ô�  ���������� ��|�������� ��
+ ����  ������                 ������    �||�������� �    �
+���������                 ������  ������������ ������������������
+������������ �  ���������    ���������������������������� �  By
+������������    ������������������������������������ �
+�������������������������   �  ���������������������������� �    Franz
+��������������������������  ������������������������������� �
+����������������������������������������������������������� �
+����������������������������������������������������������� �(c) 1995
+����������������������������������������������������������� �
+����������������������������������������������������������� ���
diff --git a/src/doors/ny2008/intro.asc b/src/doors/ny2008/intro.asc
new file mode 100644
index 0000000000000000000000000000000000000000..4d9af8922da110359d6e58f524f80db1d0841b6c
--- /dev/null
+++ b/src/doors/ny2008/intro.asc
@@ -0,0 +1,9 @@
+ɻ��ͻ�   �                                                  ������������������
+����ͼȻ�ɼ                                                  �  By
+�ȼ��� �ʼ                                                   �
+�            � ��ͻ   �                                      �    Franz
+             �͹�ͼ�ͼ�ɼ                                    �
+               �   �  ̹         �ͻ �ͻ�ͻ�ͻ               �
+               �      �Ȼ        �ͼ � �� ��͹               �      (c) 1995
+                                 �����ͼ�ͼ�ͼ               �
+                                                             ���
diff --git a/src/doors/ny2008/intro.avt b/src/doors/ny2008/intro.avt
new file mode 100644
index 0000000000000000000000000000000000000000..9a268d67dc77c2c5890a9d32a77fc8ddc008969c
Binary files /dev/null and b/src/doors/ny2008/intro.avt differ
diff --git a/src/doors/ny2008/intro.rip b/src/doors/ny2008/intro.rip
new file mode 100644
index 0000000000000000000000000000000000000000..7e4c082c2e282a830aaff4ba8403fd661650f202
--- /dev/null
+++ b/src/doors/ny2008/intro.rip
@@ -0,0 +1,31 @@
+!|1K|*|w0000000000|W00|=00000001|c00|S0908|p069H4T7L4ZAD5JBH56CL5BCM5B
+!|p0BCT5SE95CFT5JEG60EJ6JGJ6XHP6EG362EN6JEH5YEI5Z
+!|p074F4E4F3S5K3S5M4K55574B5B4B5C|S0901
+!|p0C7I3XB53UDI3WGG41CR42BO45DO4DHE4PCM4G8Z415O405O40|c08|S0900
+!|p053T451N4E534U704I6Z4I|p05BJ4P9R51E55LFS54FQ56|c07|S0100
+!|p05E45LE49PFP56FP9PFO9P|c00|S0107|p05E55MFP56FP9PE59PE59P
+!|p05534V539P779P704I704I|S0907|p059R529R9PE39PE35LE35L
+!|p051M4E1M9P549P534U534U|S010E
+!|p0B8E8U8G8M8I8W8L8R8N8X8N918H908B90888L87918791
+!|p0A0F840H7W0I880K840M8D0H8H0G8A0C8D0B880988|p05GI59GK55GL5AGL5CGL5C
+!|p06025D0455065E035J035D035D|S0908
+!|p09828Y7E938F9A9M9I8O978Y979D978C928F92|p067J527H737P5E87577T557T55
+!|p05GM71GX9GGX73HP6OHQ6O|p081F840L7X18881C8H028V1H8J1L8B1L8B
+!|p05025O1K5Y0F5X005W005V|S0909
+!|p0G000S5K0KCA0LHR0TCR0T920U9A13EA1R87146Q0X6X140A2258165W0X350R350R
+!|L1L4T555A|L1N57525N|L1N5K525Z|L1N60526F|L1M6F526U|L1M6S5278|L1N78527M
+!|L1M7M5180|L1M82518E|L1N8F528S|L1N8V5197|L1O9B559P|L5359704X|L525O745A
+!|L5460765N|L556F7360|L536U766F|L5578776U|L557M7878|L5481787N|L558F7D80
+!|L558S7A8F|L55987H8T|L579P7B9C|l049S5HE260FQ5JFQ5J|l049Q5UE36EFP5XFP5X
+!|l049R68E36RFP6BFO6B|l049R6ME477FQ6QFP6Q|l049Q71E37MFO75FO75
+!|l049R7HE381FP7IFP7I|l049P7WE38JFQ80FN81|l049Q8GE494FQ8JFP8J
+!|l049Q8WE39LFO91FO91|l039P99BV9OBV9O|l03F79PFQ9GFR9G|S0104|Y01000600|c08
+!|@5616New York|c07|@5515New York|c06
+!|p0Z654C694E674I644J604F614968446J436U466Y4D6W4N6N4S6D4X665267546J586S5\
+76U526V5B6O5F6D5E66596559625F5W5F5W53614U6A4P6I4M6M4I6L4C6I486C4668486748
+!|o7R4Q0H0O|o934Q0H0O|oAE4B0G09|oAE4Z0N0F|S0100|o7R4Q0A0J|o934Q0A0J
+!|oAE4B0B05|oAE4Z0I0A|c00|S0908|p089B4V8X4W8Z53945897589B539C4Y9C4Y|S0907
+!|p07AN559X52A256A957AJ57AM57AM57|c08|LAS4U9X4Z|L9Y52AP55|Y01000300
+!|1B0000020QP403070007000800040406000000|1U4B7ICX8C0000<>Time to Die<>^M
+!|#|#|#
+
diff --git a/src/doors/ny2008/laidm.rip b/src/doors/ny2008/laidm.rip
new file mode 100644
index 0000000000000000000000000000000000000000..153b972e9b2e3476c04de16fc5b6baf48f158425
--- /dev/null
+++ b/src/doors/ny2008/laidm.rip
@@ -0,0 +1,7 @@
+!|*|1K|w0000000010|W0|c03|Y08000400|@2Q0VGet Laid|Y00000100
+!|1B0000020S9402070F0F000800000708000000|1U9809E40R1Z00<>Get Laid<>G
+!|1U841OD0262B00<>Score Other Players<>S|1U1A2R66392A00<>Rape Somebody<>R
+!|1U843GD03Y2800<>Pick Up a Hooker<>P|1U6Z4ZBV5H1U00<>Buy Condoms<>B
+!|1UAO6FFK6X2500<>Masturbate<>M|1U7Z7OCV862H00<>Yer Stats<>Y
+!|1UBP8XGL9F0000<>Get Me Out<>Q|c00|=00000001|S0103|p04109A1E6W4A6W3Z9A
+!|C2M8319|C2M8313|Y07000200|@1K7QTrojan|#|#|#
\ No newline at end of file
diff --git a/src/doors/ny2008/license.doc b/src/doors/ny2008/license.doc
new file mode 100644
index 0000000000000000000000000000000000000000..d4874f5c64f14561dcfdc57f41cc471d2aea8dd1
--- /dev/null
+++ b/src/doors/ny2008/license.doc
@@ -0,0 +1,29 @@
+New York 2008 Copyright 1995-97 George Lebl
+
+the sources and the game and all it's files are in public domain!
+This game is dead for me so ... do what you want with these ....
+NO RESTRICTIONS!!!!!!!!!!
+
+I'm not responsible in any way for them ... whatever happens to them or
+whoever uses them for whatever purpose they want ...
+
+(here's the old license)
+LICENSE AND DISCLAIMER:
+
+For Lawyers (or however you spell that sucker):
+George Lebl hereby disclaims all warranties relating to this software, 
+whether express or implied, including without limitation any implied 
+warranties of merchantability or fitness for a particular purpose. 
+George Lebl will not be liable for any special, incidental, consequential, 
+indirect or similar damages due to loss of data or any other reason, even 
+if George Lebl or an agent of George Lebl has been advised of the possibility 
+of such damages.  In no event shall George Lebl's liability for any damages 
+ever exceed the price paid for the license to use software, regardless of 
+the form of the claim.  The person using the software bears all risk as to 
+the quality and performance of the software.
+
+For Humans:
+In short, I won't give ya no money if my software screws you up, whatever 
+the cause.
+
+Franz
diff --git a/src/doors/ny2008/lines.dat b/src/doors/ny2008/lines.dat
new file mode 100644
index 0000000000000000000000000000000000000000..dfd2ff5c6bec1118a542193af2ca8af9fe30cef0
--- /dev/null
+++ b/src/doors/ny2008/lines.dat
@@ -0,0 +1,482 @@
+`@Smack [ENTER] to go on.
+`@G`4etting the menu text file pointers...
+`@R`4eading mail...
+`%Please wait while maintanance runs on another node...
+`%Thanks for waiting...
+`%You were kicked out of the hotel
+`%You get a message!
+   `9F`1rom: `@
+`@M`4aking `%ANSI`4, `%ASCII`4 scorefiles ...
+ `@D`4one!
+`3### Checking for maintanance running
+### Checking for last maintanance
+### Running daily maintance
+### Packing and updating user file and creating scorefile
+### User file done...
+### Sorting SCR file...
+### Checking for mail index file...
+### Packing mail index file...
+### Deleting messages for dead users...
+### Deleting read messages...
+### Mail file done...
+### Cleaning up...
+### Executing custom maintanance program
+`3### Running Crash Recovery
+### Updating (no maintanance) user file and creating scorefile
+### User file done...
+### Sorting new SCR file...
+`@C`4hange `@Y`4er `@I`4nfo
+`%1 `4- `@Y`4er name: `0
+`%2 `4- `@W`4hen you win ya say: `0
+`%3 `4- `@W`4hen you loose ya say: `0
+`%Q `4- `@R`4eturn to Central Park
+`9W`1hich do ya wanna change? (`91`1,`92`1,`93`1,`9Q`1)
+`$T`6his game has been running for `0
+`6 days!
+`9E`1nter `9Y`1er `9C`1ommand (`9
+`1mins)`9>
+`%S`!t`9ats `%F`!o`9r `%L`!e`9vel `%
+`@S`4ex: `0
+`@W`4ell it's end of the road for ya....yer `%DEAD`4!
+`0Y`2ou died of: `0
+Drug Overdose
+`@Y`4a should consider cutting down on those drugs next time ...
+Hunger
+`@Y`4a should consider eating more next time ...
+Sexual Diseases
+`@Y`4a got a bad luck with girls ... next time ...
+`@Y`4a got a bad luck with guys ... next time ...
+Suicide
+`@Y`4a should talk to somebody before you get that down ... next time ...
+`%But you can still start all over tomorrow and be the best!
+`@B`4oy yer hungry....you should eat something not to starve...
+`@M`4an yer dying of hunger... If you don't eat today yer gonna die!
+`%Ya sure ya really wanna kill yerself? (`0heffta start over`%) (Y/N)
+`@E`4xpert mode turned `@ON
+`@R`4egular mode turned `@ON
+`@R`4eally quit? (`@Y`4/`@N`4)
+`!Y`9ou ain't got an A-Bomb.....
+`@R`4eally do it? (`@Y`4/`@N`4)
+`@Y`4er level has been raised to level `@
+`@Y`4er already staying at: `0
+`@W`4anna check outta there (no money back)? (`@Y`4/`@N`4)
+`@Y`4e're still staying at: `0
+`@O`4k dude you got it ...
+`0T`4 - Todays Newz `0Y`4 - Yesterdays Newz `0[Q]`4 - Quit `2:`0
+`0H`2ere's what I got:
+`0C`2hoose yer new weapon:
+`%If you buy an A-Bomb you will have to fight with hands again, but who wants to
+fight if you can finish what you came here for ...
+`@Y`4a'll heffta sell yer `0
+`0S`2old
+`%Ya ain't got nuff money bro ...
+`@B`4uy a `0
+`@Y`4a now got the `0
+ `4so go destroy something ...
+`%You ain't got nothing to sell!
+`@S`4ell yer `0
+ `4for `@
+`4? (`@Y`4/`@N`4)
+`%You ain't got no hits man ...
+`!Y`9er already 100% stoned!
+`@Y`4ou take a hit of yer favorite drug ...
+`@Y`4ou are now `@
+%`4 high
+`@Y`4er drug addiction went up by `@10%
+`@Y`4er not infected ... (yet) ...
+`@I`4t costs `@
+`4 to cure `@1%
+`@Y`4ou can heal `@
+`4% for `@
+`@Y`4ou can only afford to cure `@
+`0S`2o how much ya want healed (`9Enter`2=`0[
+]`2, `9M`2=max `0
+`4% cured!
+`@Y`4er not addicted to anything...
+`0T`2he price is `0
+`2 for loosing 1/3 of addiction, do it (`0Y`2/`0N`2)
+`%You can't afford it!
+`0Y`2ou feel so much better ...
+`@Y`4er not hurt ... (yet) ...
+`@Y`4ou can heal `@
+`@Y`4ou can only afford to heal `@
+`4 hitpoints!
+`0S`2o how much ya want healed (`9Enter`2=`0[
+ H`4itpoints were healed!
+`0Y`2er not hungry ...
+`0A`2s you enter a restaurant you look at the prices ... `0
+`2 ... do it (`0Y`2/`0N`2)
+`%Well you ain't got enuff cash for that ...
+`@Y`4ou feel so refreshed yer hitpoints maxed out ...
+`@T`4hough not feeling that hungry anymore, you feel a bit worse and
+loose 1/3 of yer hitpoints ...
+`%Level 0 players can't steal ...
+`@Y`4ou try to steel some food from a supermarket ...
+`@Y`4ou just stole enough so yer hunger went down by `@
+`@Y`4ou did not manage to steal anything but did not get busted ...
+`@Y`4our points went up by `@
+`%You already used up all your sex turns today ...
+`@Y`4ou look for a victim ...
+`@Y`4ou raped some lady and ran away ... `@G`4ood job ...
+`@Y`4ou raped some guy and ran away ... `@G`4ood job ...
+`@Y`4ou couldn't find any victim ...
+`@Y`4ou scored a pretty nice chick ... `@G`4ood job ...
+`@Y`4ou scored some cool guy ... `@G`4ood job ...
+`@Y`4ou couldn't find anybody who'd like you ...
+`@T`4he sex turns went down anyway ...
+`@Y`4ou can get a hooker fer `@
+`4 ... (`@Y`4/`@N`4)
+`@O`4k there you go ...
+`@Y`4ou wanna list all the female players (`@Y`4/`@N`4)
+`@Y`4ou wanna list all the male players (`@Y`4/`@N`4)
+`@W`4ho ya wanna screw (`@full`4 or `@partial`4 name):`0
+`@G`4ot no idea who you mean ...
+`@H`4ow you gonna ask? (`@/s`4=save `@/a`4=abort):
+`@S`4aving ...
+`@A`4borted ...
+`@W`4ell it aint the real thing, but at least you don't feel that you didn't
+have `@REAL`4 sex in such a long time, and you can't get sick like this.
+`0Y`2ou got `0
+`2 condoms.
+`0H`2ow much ya want? (`9Enter`2=`0[0]`2, `9M`2=max `0
+`@O`4k you now got `@
+`4 condoms.
+`@Y`4ou used a condom and got only 1/2 infected ...
+`@Y`4ou are now `0
+`4% infected with `0
+`0H`2ow much ya want to deposit? (`9Enter`2=`0[0]`2, `9M`2=max `0
+`@Y`4ou got `@
+`4 in the bank ...
+`0H`2ow much ya want to widthraw? (`9Enter`2=`0[0]`2, `9M`2=max `2
+`4 on ya...
+`@Y`4ou try to steel some money from the bank ...
+`@Y`4ou just stole `@
+`4 without getting busted, good job ...
+`@Y`4ou did not manage to steal anything but did not get busted ...
+`0Y`2er drug of choice is: `0
+`0T`2he price is `0
+`0H`2ow much ya want? (`9Enter`2=`0[0]`2, `9M`2=max `0
+`@O`4k you now have `@
+`4 hits!
+`0Y`2a can sell it for `0
+`0H`2ow much ya wanna sell? (`9Enter`2=`0[0]`2, `9M`2=max `0
+`%You are addicted to another drug ... First you heffta get off of that ...
+`@W`4hich drug you wanna switch to ...`0
+`@S`4o....(`0[0]`4=quit):
+`@Y`4ou'll heffta sell all the hits of yer old drug! Do it?(`@Y`4/`@N`4)
+`@Y`4er drug of choice set to: `0
+`%Sorry that name is already in use ... choose a different one ...
+`!T`9his game contains violence, sex, drugs ... `!Y`9a sure ya can handle that?(`!Y`9/`!N`9)
+`@N`4ot everybody was born with a vicious mind ...
+`@N`4ow that we got through that, I'll heffta ask ya a few questions ...
+`0W`2hat is yer name: `0
+`@W`4hat is your sex (`@M`4/`@F`4):
+`@W`4ell? :
+`!D`9id ya enter all that stuff correctly?(`!Y`9/`!N`9)
+`9Resetting User Record ...
+`9Writing to user file ...
+`@W`4ell nothing 'round here ... (yet)
+ `0Q`2 - Quit
+`%Loading ...
+`@Y`4ou cannot bomb anymore today, try again tomorrow ...
+`@Y`4ou cannot poison people anymore today, try again tomorrow ...
+`%Stuff happens ...
+`@Y`4a find a rich new car ...
+`@S`4mash it? (`@Y`4/`@N`4)
+`@Y`4a find an open car ...
+`@T`4here is money inside ...
+`@T`4ake the money? (`@Y`4/`@N`4)
+`@Y`4a consider the risks and decide it ain't a good idea
+`@W`4ow, the guy that owns the car came back and kicked yer ass!
+`@Y`4a lost almost all yer hitpoints and 1/2 the money on ya!
+`@Y`4ou totally smashed that car ... a very nice job ...
+`@Y`4a find a bunch of hippies ...
+`@Y`4a smoke some dope with them ...
+`@T`4hey give ya hit of yer favorite drug ...
+`@A`4nd yer hitpoints max out!
+`@Y`4a fell inside a hole ...
+`@Y`4a lost 1/3 of yer hitpoints ...
+`@Y`4a enter the hospital ...
+`@Y`4a ain't got no fights left ... come back tomorrow
+`@Y`4ou meet `0
+ `4...
+`@H`4e got a bad lokin' `0
+`@S`4treet `@F`4ight`0
+'s `@H`4itpoints: `0
+`@Y`4er `@H`4itpoints: `0
+`@W`4hat ya gonna do? (`@[A] T K P R G Y`4)
+`@Y`4a kick `0
+'s `4ass fer `0
+ `4damage
+ `4kicks yer ass fer `0
+`@Y`4a got away ...
+`@Y`4a couldn't find a way outta this ...
+`@Y`4ou kicked `0
+'s `4ass ...
+`@Y`4a find `@
+`4 bucks and ya get `@
+`4 points!
+`@L`4ookin fer yer enemy ... (`%S`4) to stop ...
+`@U`4ser is not online anymore!
+`@O`4nline `@P`4layer `@F`4ight
+`@W`4aiting ...
+`@Y`4er enemy droped carrier on ya!
+`@G`4o and kill him offline!
+`@W`4aiting fer enemy response ...
+`@Y`4er enemy ran away in fear ...
+`@Y`4a `%WON`4!
+`@D`4o ya wanna swap weapons with `0
+`@D`4one! `@Y`4ou now got the `0
+`@D`4o ya wanna rape `0
+`4 tried to get away but could not ...
+ `4raped ya!
+`@W`4ho ya don't like (`@full`4 or `@partial`4 name):`0
+`@T`4he user is already being fought!
+`@T`4he player is somewhere where you can't find him! `4(Other stuff)
+`@I`4t will cost ya `0
+`4 to get keys to his room ... Do it?(`@Y`4/`@N`4)
+`%Not nuff money man ...
+`@S`4till wanna do it? (`@Y`4/`@N`4)
+`@P`4layer `@F`4ight
+`@Y`4ou find some blind beggar and try to take some of his money ...
+`@Y`4ou just stole `0
+`4 from the poor bastard, good job ...
+`@T`4he poor bastard was broke ...
+`@Y`4ou find a school ... that's the easy part ...
+`@I`4t looks lovely as the school buildings crumble into ashes ...
+`@S`4chools don't burn very well ... all matches are gone ...
+`@Y`4ou pick up a rock and ...
+`@B`4reaking glass sounds so good ...
+`@P`4oisoning water will cost ya `@
+`4 ... Do it(`@Y`4/`@N`4)
+`@Y`4a can't afford it man ...
+`@Y`4ou buy enough poison and dump it into the water...
+`@W`4ow lotsa dead folks ... It worked ...
+`@T`4he poison didn't work ... The guy ripped you off ...
+`@E`4xplosives will cost ya `@
+`@Y`4ou buy nuff explosives and ...
+`%BOOOOOOOM `4... `@W`4ow ... it didn't fall but almost ...
+`@T`4he police found yer explosives ... Bad Luck ...
+`@S`4ooo... (`@0`4-`@9 [Q]`4=quit)
+`%You cannot attack this cop in your level...
+`@C`4op `@F`4ight
+`@W`4ow ya got `@
+`4 from that car ...
+`@Y`4a find `0
+`4 bucks!
+`%New York 2008  v`v  `w
+`7(Xpert or Regular mode recomended for slow modems)
+`7Wanna start in Xpert, Regular or Novice mode (`%X`7,`%[R]`7,`%N`7) `%
+`@S`4tatus: `@
+`@P`4oints: `0
+`@M`4oney `@I`4n `@H`4and: `0
+`@F`4ights: `0
+`@M`4oney `@I`4n `@B`4ank: `0
+`@H`4it `@P`4oints: `0
+`@o`4f `0
+`@H`4ungry: `0
+`@A`4rm: `0
+`@W`4inning `@S`4entence: `0
+`@L`4oosing `@S`4entence: `0
+`@D`4ays `@S`4ince `@G`4ot `@L`4aid: `0
+`@S`4TD: `0
+`@S`4ex `@T`4urns `@L`4eft: `0
+`@I`4nfected: `0
+`@C`4ondoms: `0
+`@D`4rug: `0
+`@H`4its: `0
+`@H`4igh: `0
+`@A`4ddicted: `0
+`@D`4ays `@S`4ince `@L`4ast `@H`4it: `0
+`@S`4taying `@a`4t: `0
+ `@F`4or `0
+`@ D`4ays
+ `4has attacked you ... `@Y`4ou are now in an online battle!
+`%YOU WON THE GAME!!!!! With `0
+`% points ...
+`@I`4t will cost ya `@
+`4 per day.
+`@Y`4ou can afford `@
+`4 days!
+`0H`2ow mady days ya wanna stay here? (`9Enter`2=`0[0]`2, `9M`2=max `0
+`@Y`4ou made the `%BEST`4 list.
+`@Y`4ou didn't make the `%BEST`4 list.\n\r`@T`4here were better.
+`@A`4ctually ya were the first to do it.
+`@W`4ho's mailbox do ya wanna fill (`@full`4 or `@partial`4 name): `0
+`@A`4sk `@
+`4 to have sex with you?(`@Y`4/`@N`4)
+`@O`4k type yer message now (`@/s`4=save `@/a`4=abort):
+`@S`4ay what:
+|-----------------------------------------------------------------------------|`0
+`@P`4osted...
+`@W`4ho do ya want to bother (full or partial): `0
+`@O`4k type what u wanna say now:
+|------------------------------------------------|`0
+`@S`4ent!
+`9S`1earching `9...
+`@M`4ail from: `0
+  `@T`4o: `0
+`4 wants to have sex with ya, `@O`4k?
+`9[O]`4=OK (sex) `9R`4=reply `9D`4=delete `9I`4=ignore `9>
+`9R`4=reply `9[D]`4=delete `9I`4=ignore `9>
+`4 agreed and had sex with ya ...
+`4 raped you!!
+`4 defeated you!!
+`@D`4eleting...
+`%Try again tomorrow....
+`@Y`4ou just had sex with `@
+`@A`4sk `@
+`4 to have sex with you?(`@Y`4/`@N`4)
+`@Q`4uote message? (`@Y`4/`@N`4)
+`@C`4ommand (`9S A C`4=continue)
+`@D`4id ya mean `@
+`@W`4hich one? `@Y`4ou got `@
+`4 to spend. (`@A-W`4, `@Enter`4=`@[Q]`4=Quit)
+ `4for `@
+`4, OK?(`@Y`4/`@N`4)
+`@Y`4ou stopped looking ...
+`@T`4his is a single node only game!!!!
+`@Y`4ou just raped `0
+`0's`4 unconcious body!
+`@N`4ovice mode turned `@ON
+`@C`4entral `@P`4ark`0
+`@R`4est `@S`4omewhere`0
+`@M`4ail`0
+`@A`4rm `@Y`4erself`0
+`@H`4ealing`0
+`@F`4ood`0
+`@G`4et `@L`4aid`0
+`@B`4ank ...`@M`4oney ...`@A`4nd `@S`4tuff ...`0
+`@D`4rugs`0
+`@O`4ther `@S`4tuff`0
+? = list  Q = Quit
+`@S`4treet `@F`4ights`0
+`@P`4layer `@F`4ights`0
+`@E`4vil `@S`4tuff`0
+`@C`4op `@F`4ights`0
+`@ S`4ent you mail!
+`@ R`4eplied to yer mail!
+`@R`4ead your mail? (`@[Y]`4/`@N`4) `@
+`@ A`4rrived at `@N`4ew `@Y`4ork!
+`@ L`4eft `@N`4ew `@Y`4ork!
+`0H`2eadbanger
+`0H`2ippie
+`0B`2ig `0F`2at `0D`2ude
+`0C`2rack `0A`2ddict
+`0P`2unk
+M`2ale  `@
+F`2emale`@
+`0A`2live
+DEAD
+UNCONSIOUS
+C`2heap `0M`2otel
+R`2egular `0H`2otel
+E`2xpensive `0H`2otel
+`0P`2ot
+`0H`2ash
+`0L`2SD
+`0C`2oke
+`0P`2CP
+`0H`2eroin
+`0H`2ealthy
+`0C`2rabs
+`0H`2erpes
+`0S`2yphilis
+`0A`2IDS
+`0H`2ands
+`0P`2epper `0S`2pray
+`0K`2nife
+`0C`2hain
+`0G`2un
+`0R`2ifle
+`0L`2aser `0G`2un
+`0S`2hotgun
+`0M`2achine `0G`2un
+`0G`2ranade `0L`2auncher
+`0B`2laster
+`0A`2tomic `0B`2omb
+`@Y`4ou get 10 points for not having yer ass kicked...
+`1-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`%Dead people are not allowed to play, come back tomorrow to start over!
+`%You heffta wait until tomorrow to play again!
+`@Y`4ou are currently being fought by another node ... come back later...
+`@Y`4er feeling better as you wake up from a coma...
+`%PLEASE tell your sysop to register!
+`@T`4hanks to `0
+`@Y`4ou see a cop so you run away...
+`@Y`4ou just can't hit any window...
+`@Y`4ou cannot buy an `@A`4-`@B`4omb until yer in level `@20
+`@P`4 - `@P`4revious  `@
+`@N`4 - `@N`4ext  `@
+`@Y`4ou come up to a place called:
+`@G`4o there? (`@Y`4/`@N`4):`@
+`@N`4othing has happened in New York today!
+`@N`4othing has happened in New York yesterday!
+`%You are high on another drug ... Come tommorrow when ya sober up ...
+`@S`4end money to who: `0
+`0H`2ow much to send? (`9Enter`2=`0[0]`2, `9M`2=max `0
+`@S`4ent ...
+ `4sent you `0
+ `4bucks!
+`@Y`4ou hear a voice saying: `%Tell the sysop to register this game so you can WIN!
+`@Y`4ou hear a voice saying: `%If you are too weak for regular fights, fight cops!
+`@Y`4ou hear a voice saying: `%Put all money to bank so you won't loose it!
+`@Y`4ou hear a voice saying: `%Eating in restaurants heals you!
+`@Y`4ou find an open house go inside? (`@Y`4/`@N`4):`@
+`@Y`4ou find `@
+ `4bucks, take it? (`@Y`4/`@N`4):`@
+`@Y`4ou find a hit of yer drug, take it? (`@Y`4/`@N`4):`@
+`@O`4k, ya got away with it ... `@G`4ood job!
+`@T`4he guy that lives here `@REALLY `4kicked your ass!
+`@H`4e took all yer money too!
+`@Y`4a find an unused condom! `@Y`4ou take it ... maybe you will find a use for it!
+`@R`4ocks: `0
+`@A`4bilities: `@T`4hrowing: `0
+`@K`4icking: `0
+`@P`4unching: `0
+`@R`4aise which ability: `0T `4- Throwing `0K `4- Kicking `0P `4- Punching : `0
+ `4rocks to throw.
+`@Y`4a kick REAL hard ...
+`@Y`4a kick REAL hard ... but `%MISS
+`@Y`4a punch your opponent in the face ...
+`@Y`4a punch your opponent in the face ... but `%MISS
+`@Y`4a throw a rock at your enemy ...
+`@Y`4a throw a rock at your enemy ... but `%MISS
+`@Y`4a realize ya don't got no rocks ... `@G`4o find some ...
+`@O`4k type yer message now (`@10 `4lines`@ max`4) (`@/s`4=save `@/a`4=abort):
+### Packing InterBBS mail file...
+`@W`4hich `@BBS #`4: `0
+`@W`4hich `@P`4layer `@#`4: `0
+`@P`4layer list not yet recieved!
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`0P`2layer `0L`2isting `0F`2or: `@
+`!BBS Name:                                Highest Player Score:
+`@O`4ther `@C`4ities`0
+`%No InterBBS moves left, only two InterBBS actions per day!
+`@S`4py information requested ...
+`!Lvl: Name:                     Points:              S: T:
+`4 sent you an infected prostitute!
+`@S`4omebody sent you an infected prostitute!
+`@S`4omebody tried to send you an infected prostitute!
+`4 hired a Hitman.
+`@Y`4ou have to fight him!
+`4 sent you a mailbomb!
+`@S`4omebody sent you a mailbomb!
+`@S`4omebody tried to send you a maibomb but it failed!
+`@Y`4ou loose 1/3 of your hitpoints!
+`@A`4 mailbomb will cost `0
+`4, OK?(`@Y`4/`@N`4)
+`@T`4he hitman will cost `0
+`@S`4o who is it: `0
+`0S`2harp `0S`2tick
+`0S`2crewdriver
+`0H`2ammer
+`0L`2ead `0P`2ipe
+`0C`2olt
+`0E`2lephant `0G`2un
+`0N`2ail `0G`2un
+`0A`2ssault `0R`2ifle
+`0P`2roton `0G`2un
+`0N`2Neutron `0P`2haser
+`0U`2ltrasound `0G`2un
+
diff --git a/src/doors/ny2008/lines.rip b/src/doors/ny2008/lines.rip
new file mode 100644
index 0000000000000000000000000000000000000000..22749fdb2627abb1ff39f6ac4dad1c9b253ea83a
--- /dev/null
+++ b/src/doors/ny2008/lines.rip
@@ -0,0 +1,481 @@
+`@Smack [ENTER] to go on.
+`@G`4etting the menu text file pointers...
+!|*|c0C|TReading mail...|#|#|#
+!|*|c0C|TPlease wait while maintanance runs on another node...|#|#|#
+!|@0020Thanks for waiting...|#|#|#
+!|@0040You were kicked out of the hotel|#|#|#
+!|10000((*You get a message/!::^M@OK))|#|#|#
+   `9F`1rom: `@
+`@M`4aking `%ANSI`4, `%ASCII`4 scorefiles ...
+ `@D`4one!
+`3### Checking for maintanance running
+### Checking for last maintanance
+### Running daily maintance
+### Packing and updating user file and creating scorefile
+### User file done...
+### Sorting SCR file...
+### Checking for mail index file...
+### Packing mail index file...
+### Deleting messages for dead users...
+### Deleting read messages...
+### Mail file done...
+### Cleaning up...
+### Executing custom maintanance program
+`3### Running Crash Recovery
+### Updating (no maintanance) user file and creating scorefile
+### User file done...
+### Sorting new SCR file...
+`@C`4hange `@Y`4er `@I`4nfo
+`%1 `4- `@Y`4er name: `0
+`%2 `4- `@W`4hen you win ya say: `0
+`%3 `4- `@W`4hen you loose ya say: `0
+`%Q `4- `@R`4eturn to Central Park
+`9W`1hich do ya wanna change? (`91`1,`92`1,`93`1,`9Q`1)
+`$T`6his game has been running for `0
+`6 days!
+`9E`1nter `9Y`1er `9C`1ommand (`9
+`1mins)`9>
+`%S`!t`9ats `%F`!o`9r `%L`!e`9vel `%
+`@S`4ex: `0
+`@W`4ell it's end of the road for ya....yer `%DEAD`4!
+`0Y`2ou died of: `0
+Drug Overdose
+`@Y`4a should consider cutting down on those drugs next time ...
+Hunger
+`@Y`4a should consider eating more next time ...
+Sexual Diseases
+`@Y`4a got a bad luck with girls ... next time ...
+`@Y`4a got a bad luck with guys ... next time ...
+Suicide
+`@Y`4a should talk to somebody before you get that down ... next time ...
+`%But you can still start all over tomorrow and be the best!
+!|10000((*Boy yer hungry....you should eat something not to starve...::^M@OK))|#|#|#
+!|10000((*Yer dying of hunger... If you don't eat today yer gonna die\!::^M@OK))|#|#|#
+!|10000((*Ya sure ya really wanna kill yerself? (heffta start over)::Y@Yes,N@No))|#|#|#
+`@E`4xpert mode turned `@ON
+`@R`4egular mode turned `@ON
+!|10000((*Do you want to quit the game?::Y@Yes,N@No))|#|#|#
+!|10000((*You ain't got an A-Bomb::^M@OK))|#|#|#
+!|10000((*Really do it?::Y@Yes,N@No))|#|#|#
+!|10000((*Yer level has been raised to level 
+!|10000((*Yer already staying at:
+!|10000((*Wanna check outta there (no money back)?::Y@Yes,N@No))|#|#|#
+!|10000((*Yer still staying at:
+!|10000((*Ok dude you got it ...::@OK))|#|#|#
+`0T`4 - Todays Newz `0Y`4 - Yesterdays Newz `0[Q]`4 - Quit `2:`0
+`0H`2ere's what I got:
+`0C`2hoose yer new weapon:
+`%If you buy an A-Bomb you will have to fight with hands again, but who wants to
+fight if you can finish what you came here for ...
+!|10000((*Ya'll heffta sell yer
+!|10000((*Sold\!::^M@OK))|#|#|#
+!|10000((*Ya ain't got nuff money bro ...::^M@OK))|#|#|#
+!|10000((*Buy a 
+!|10000((*Ya now got the 
+ so go destroy something::^M@OK))|#|#|#
+!|10000((*You ain't got nothing to sell\!::^M@OK))|#|#|#
+!|10000((*Sell yer 
+ for 
+?::Y@Yes,N@No))|#|#|#
+!|10000((*You ain't got no hits man ...::^M@OK))|#|#|#
+!|10000((*Yer already 100% stoned\!::^M@OK))|#|#|#
+!|10000((*You take a hit of yer favorite drug ...::^M@OK))|#|#|#
+!|10000((*You are now 
+% high::^M@OK))|#|#|#
+!|10000((*Yer drug addiction went up by 10%::^M@OK))|#|#|#
+!|10000((*Yer not infected ... (yet) ...::^M@OK))|#|#|#
+!|10000((*It costs 
+ to cure 1%::^M@OK))|#|#|#
+!|10000((*You can heal 
+% for 
+!|10000((*You can only afford to cure 
+`0S`2o how much ya want healed (`9Enter`2=`0[
+]`2, `9M`2=max `0
+% cured\!::^M@OK))|#|#|#
+!|10000((*Yer not addicted to anything...::^M@OK))|#|#|#
+!|10000((*Pay
+ for loosing 1/3 of addiction, do it?::Y@Yes,N@No))|#|#|#
+!|10000((*You can't afford it\!::^M@OK))|#|#|#
+!|10000((*You feel so much better ...::^M@OK))|#|#|#
+!|10000((*Yer not hurt ... (yet) ...::^M@OK))|#|#|#
+!|10000((*You can heal 
+!|10000((*You can only afford to heal 
+ hitpoints\!::^M@OK))|#|#|#
+`0S`2o how much ya want healed (`9Enter`2=`0[
+ Hitpoints were healed\!::^M@OK))|#|#|#
+!|10000((*Yer not hungry ...::^M@OK))|#|#|#
+!|10000((*You look at the prices ... 
+ ... do it?::Y@Yes,N@No))|#|#|#
+!|10000((*Well you ain't got enuff cash for that ...::^M@OK))|#|#|#
+!|10000((*You feel so refreshed yer hitpoints maxed out ...::^M@OK))|#|#|#
+!|10000((*Though not feeling that hungry anymore, you feel sick\!::^M@OK))|#|#|#
+!|10000((*You loose 1/3 of yer hitpoints ...::^M@OK))|#|#|#
+!|10000((*Level 0 players can't steal ...::^M@OK))|#|#|#
+!|10000((*You try to steel some food from a supermarket ...::^M@OK))|#|#|#
+!|10000((*You just stole enough so yer hunger went down by 
+!|10000((*You did not manage to steal anything but did not get busted\!::^M@OK))|#|#|#
+!|10000((*Your points went up by 
+!|10000((*You already used up all your sex turns today ...::^M@OK))|#|#|#
+!|10000((*You look for a victim ...::^M@OK))|#|#|#
+!|10000((*You raped some lady and ran away ... Good job ...::^M@OK))|#|#|#
+!|10000((*You raped some guy and ran away ... Good job ...::^M@OK))|#|#|#
+!|10000((*You couldn't find any victim ...::^M@OK))|#|#|#
+!|10000((*You scored a pretty nice chick ... Good job ...::^M@OK))|#|#|#
+!|10000((*You scored some cool guy ... Good job ...::^M@OK))|#|#|#
+!|10000((*You couldn't find anybody who'd like you ...::^M@OK))|#|#|#
+!|10000((*The sex turns went down anyway ...::^M@OK))|#|#|#
+!|10000((*You can get a hooker fer 
+ ...::Y@Yes,N@No))|#|#|#
+!|10000((*Ok there you go ...::^M@OK))|#|#|#
+!|10000((*You wanna list all the female players?::Y@Yes,N@No))|#|#|#
+!|10000((*You wanna list all the male players?::Y@Yes,N@No))|#|#|#
+`@W`4ho ya wanna screw (`@full`4 or `@partial`4 name):`0
+!|10000((*Got no idea who you mean ...::^M@OK))|#|#|#
+`@H`4ow you gonna ask? (`@/s`4=save `@/a`4=abort):
+!|10000((*Saving ...::^M@OK))|#|#|#
+!|10000((*Aborted ...::^M@OK))|#|#|#
+!|10000((*Well it just aint the real thing.::^M@OK))|#|#|#
+!|10000((*But at least ya can't get sick this way.::^M@OK))|#|#|#
+!|10000((*You got 
+ condoms.::^M@OK))|#|#|#
+`0H`2ow much ya want? (`9Enter`2=`0[0]`2, `9M`2=max `0
+!|10000((*Ok you now got 
+ condoms.::^M@OK))|#|#|#
+!|10000((*You used a condom and got only 1/2 infected ...::^M@OK))|#|#|#
+!|10000((*You are now 
+% infected with 
+`0H`2ow much ya want to deposit? (`9Enter`2=`0[0]`2, `9M`2=max `0
+!|10000((*You got 
+ in the bank ...::^M@OK))|#|#|#
+`0H`2ow much ya want to widthraw? (`9Enter`2=`0[0]`2, `9M`2=max `2
+ on ya...::^M@OK))|#|#|#
+!|10000((*You try to steel some money from the bank ...::^M@OK))|#|#|#
+!|10000((*You just stole
+ without getting busted, good job ...::^M@OK))|#|#|#
+!|10000((*You did not manage to steal anything but did not get busted\!::^M@OK))|#|#|#
+!|10000((*Yer drug of choice is: 
+!|10000((*The price is 
+`0H`2ow much ya want? (`9Enter`2=`0[0]`2, `9M`2=max `0
+!|10000((*Ok you now have 
+ hits\!::^M@OK))|#|#|#
+!|10000((*Ya can sell it for 
+`0H`2ow much ya wanna sell? (`9Enter`2=`0[0]`2, `9M`2=max `0
+!|10000((*Yer addicted to another drug ... Get off of that first ...
+!|10000((*Which drug you wanna switch to?::1@Pot,2@Hash,3@LSD,4@Coke,5@PCP,6@Heroin,0@Quit))|#|#|#
+`@S`4o....(`0[0]`4=quit):
+!|10000((*You'll heffta sell all the hits of yer old drug\! Do it?::Y@Yes,N@No))|#|#|#
+!|10000((*Yer drug of choice set to: 
+!|10000((*Sorry that name is already in use...choose a different one\!::^M@OK))|#|#|#
+`!T`9his game contains violence, sex, drugs ... `!Y`9a sure ya can handle that?(`!Y`9/`!N`9)
+`@N`4ot everybody was born with a vicious mind ...
+`@N`4ow that we got through that, I'll heffta ask ya a few questions ...
+`0W`2hat is yer name: `0
+!|10000((*What is your sex?::m@Male,f@Female))|#|#|#
+!|10000((*What Are You?::1@Headbanger,2@Hippie,3@Big Fat Dude,4@Crack Addict,5@Punk))|#|#|#
+!|10000((*Did ya enter all that stuff correctly?::Y@Yes,N@No))|#|#|#
+`9Resetting User Record ...
+`9Writing to user file ...
+`@W`4ell nothing 'round here ... (yet)
+ `0Q`2 - Quit
+`%Loading ...
+!|10000((*You cannot bomb anymore today, try again tomorrow ...::^M@OK))|#|#|#
+!|10000((*You cannot poison people anymore today, try again tomorrow ...::^M@OK))|#|#|#
+!|10000((*Stuff happens ...::^M@OK))|#|#|#
+!|10000((*Ya find a rich new car ...::^M@OK))|#|#|#
+!|10000((*Smash it?::Y@Yes,N@No))|#|#|#
+!|10000((*Ya find an open car ...::^M@OK))|#|#|#
+!|10000((*There is money inside ...::^M@OK))|#|#|#
+!|10000((*Take the money?::Y@Yes,N@No))|#|#|#
+!|10000((*Ya consider the risks and decide it ain't a good idea::^M@OK))|#|#|#
+!|10000((*Wow, the guy that owns the car came back and kicked yer ass\!::^M@OK))|#|#|#
+!|10000((*Ya lost almost all yer hitpoints and 1/2 the money on ya\!::^M@OK))|#|#|#
+!|10000((*You totally smashed that car ... a very nice job ...::^M@OK))|#|#|#
+!|10000((*Ya find a bunch of hippies ...::^M@OK))|#|#|#
+!|10000((*Ya smoke some dope with them ...::^M@OK))|#|#|#
+!|10000((*They give ya hit of yer favorite drug ...::^M@OK))|#|#|#
+!|10000((*And yer hitpoints max out\!::^M@OK))|#|#|#
+!|10000((*Ya fell inside a hole ...::^M@OK))|#|#|#
+!|10000((*Ya lost 1/3 of yer hitpoints ...::^M@OK))|#|#|#
+!|10000((*Ya enter the hospital ...::^M@OK))|#|#|#
+!|10000((*Ya ain't got no fights left ... come back tomorrow::^M@OK))|#|#|#
+`@Y`4ou meet `0
+ `4...
+`@H`4e got a bad lokin' `0
+`@S`4treet `@F`4ight`0
+'s `@H`4itpoints: `0
+`@Y`4er `@H`4itpoints: `0
+`@W`4hat ya gonna do? (`@[A] T K P R G Y`4)
+`@Y`4a kick `0
+'s `4ass fer `0
+ `4damage
+ `4kicks yer ass fer `0
+!|10000((*Ya got away ...::^M@OK))|#|#|#
+`@Y`4a couldn't find a way outta this ...
+`@Y`4ou kicked `0
+'s `4ass ...
+`@Y`4a find `@
+`4 bucks and ya get `@
+`4 points!
+`@L`4ookin fer yer enemy ... (`%S`4) to stop ...
+!|10000((*User is not online anymore\!::^M@OK))|#|#|#
+`@O`4nline `@P`4layer `@F`4ight
+`@W`4aiting ...
+!|10000((*Yer enemy droped carrier on ya\!::^M@OK))|#|#|#
+!|10000((*Go and kill him offline\!::^M@OK))|#|#|#
+`@W`4aiting fer enemy response ...
+`@Y`4er enemy ran away in fear ...
+`@Y`4a `%WON`4!
+!|10000((*Do ya wanna swap weapons with 
+!|10000((*Done\! You now got the 
+!|10000((*Do ya wanna rape 
+`4 tried to get away but could not ...
+ `4raped ya!
+`@W`4ho ya don't like (`@full`4 or `@partial`4 name):`0
+!|10000((*The user is already being fought\!::^M@OK))|#|#|#
+!|10000((*The player is somewhere where you can't find him\!::^M@OK))|#|#|#
+!|10000((*It will cost ya
+ to get keys to his room ... Do it?::Y@Yes,N@No))|#|#|#
+!|10000((*Not nuff money man ...::^M@OK))|#|#|#
+`@S`4till wanna do it? (`@Y`4/`@N`4)
+`@P`4layer `@F`4ight
+!|10000((*You find a blind beggar and try to take some of his money::^M@OK))|#|#|#
+!|10000((*You just stole 
+ from the poor bastard, good job ...::^M@OK))|#|#|#
+!|10000((*The poor bastard was broke ...::^M@OK))|#|#|#
+!|10000((*You find a school ... that's the easy part ...::^M@OK))|#|#|#
+!|10000((*It looks lovely as the school buildings crumble into ashes\!::^M@OK))|#|#|#
+!|10000((*Schools don't burn very well ... all matches are gone ...::^M@OK))|#|#|#
+!|10000((*You pick up a rock and ...::^M@OK))|#|#|#
+!|10000((*Breaking glass sounds so good ...::^M@OK))|#|#|#
+!|10000((*Poisoning water will cost ya 
+ ... Do it?::Y@Yes,N@No))|#|#|#
+!|10000((*Ya can't afford it man ...::^M@OK))|#|#|#
+!|10000((*You buy enough poison and dump it into the water...::^M@OK))|#|#|#
+!|10000((*Wow lotsa dead folks ... It worked ...::^M@OK))|#|#|#
+!|10000((*The poison didn't work ... The guy ripped you off ...::^M@OK))|#|#|#
+!|10000((*Explosives will cost ya 
+!|10000((*You buy nuff explosives and ...::^M@OK))|#|#|#
+!|10000((*BOOOOOOOM ... Wow ... it didn't fall but almost ...::^M@OK))|#|#|#
+!|10000((*The police found yer explosives ... Bad Luck ...::^M@OK))|#|#|#
+!|10000((*Which one do ya wanna attack?::0@Museum Nightguard,1@School Security Guy,2@Old Sergant,3@Regular Street Cop,4@Motorcycle Cop,5@Detective,6@Gang Unit Member,7@Special Assigment Member,8@Anti Terrorist Unit Guy,9@SuperCop,Q@Quit))|#|#|#
+!|10000((*You cannot attack this cop in your level...::^M@OK))|#|#|#
+`@C`4op `@F`4ight
+!|10000((*Wow ya got 
+ from that car ...::^M@OK))|#|#|#
+!|10000((*Ya find 
+ bucks\!::^M@OK))|#|#|#
+`%New York 2008  v`v  `w
+`7(Xpert or Regular mode recomended for slow modems)
+`7Wanna start in Xpert, Regular or Novice mode (`%X`7,`%[R]`7,`%N`7) `%
+`@S`4tatus: `@
+`@P`4oints: `0
+`@M`4oney `@I`4n `@H`4and: `0
+`@F`4ights: `0
+`@M`4oney `@I`4n `@B`4ank: `0
+`@H`4it `@P`4oints: `0
+`@o`4f `0
+`@H`4ungry: `0
+`@A`4rm: `0
+`@W`4inning `@S`4entence: `0
+`@L`4oosing `@S`4entence: `0
+`@D`4ays `@S`4ince `@G`4ot `@L`4aid: `0
+`@S`4TD: `0
+`@S`4ex `@T`4urns `@L`4eft: `0
+`@I`4nfected: `0
+`@C`4ondoms: `0
+`@D`4rug: `0
+`@H`4its: `0
+`@H`4igh: `0
+`@A`4ddicted: `0
+`@D`4ays `@S`4ince `@L`4ast `@H`4it: `0
+`@S`4taying `@a`4t: `0
+ `@F`4or `0
+`@ D`4ays
+ `4has attacked you ... `@Y`4ou are now in an online battle!
+`%YOU WON THE GAME!!!!! With `0
+`% points ...
+!|10000((*It will cost ya 
+ per day::^M@OK))|#|#|#
+!|10000((*You can afford 
+ days\!::^M@OK))|#|#|#
+`0H`2ow mady days ya wanna stay here? (`9Enter`2=`0[0]`2, `9M`2=max `0
+!|10000((*You made the BEST list.::^M@OK))|#|#|#
+!|10000((*You didn't make the BEST list. There were better.::^M@OK))|#|#|#
+!|10000((*Actually ya were the first to do it.::^M@OK))|#|#|#
+`@W`4ho's mailbox do ya wanna fill (`@full`4 or `@partial`4 name): `0
+!|10000((*Ask 
+ to have sex with you?::Y@Yes,N@No))|#|#|#
+`@O`4k type yer message now (`@/s`4=save `@/a`4=abort):
+`@S`4ay what:
+|-----------------------------------------------------------------------------|`0
+!|10000((*Posted...::^M@OK))|#|#|#
+`@W`4ho do ya want to bother (full or partial): `0
+`@O`4k type what u wanna say now:
+|------------------------------------------------|`0
+!|10000((*Sent\!::^M@OK))|#|#|#
+`9S`1earching `9...
+`@M`4ail from: `0
+  `@T`4o: `0
+`4 wants to have sex with ya, `@O`4k?
+`9[O]`4=OK (sex) `9R`4=reply `9D`4=delete `9I`4=ignore `9>
+`9R`4=reply `9[D]`4=delete `9I`4=ignore `9>
+`4 agreed and had sex with ya ...
+`4 raped you!!
+`4 defeated you!!
+!|10000((*Deleting...::^M@OK))|#|#|#
+!|10000((*Try again tomorrow....::^M@OK))|#|#|#
+`@Y`4ou just had sex with `@
+!|10000((*Ask 
+ to have sex with you?::Y@Yes,N@No))|#|#|#
+!|10000((*Quote message?::Y@Yes,N@No))|#|#|#
+`@C`4ommand (`9S A C`4=continue)
+!|10000((*Did ya mean 
+`@W`4hich one? `@Y`4ou got `@
+`4 to spend. (`@A-W`4, `@Enter`4=`@[Q]`4=Quit)
+ for 
+, OK?::Y@Yes,N@No))|#|#|#
+!|10000((*You stopped looking ...::^M@OK))|#|#|#
+!|10000((*This is a single node only game\!\!\!\!::^M@OK))|#|#|#
+!|10000((*You just raped 
+'s unconcious body\!::^M@OK))|#|#|#
+`@N`4ovice mode turned `@ON
+`@C`4entral `@P`4ark`0
+`@R`4est `@S`4omewhere`0
+`@M`4ail`0
+`@A`4rm `@Y`4erself`0
+`@H`4ealing`0
+`@F`4ood`0
+`@G`4et `@L`4aid`0
+`@B`4ank ...`@M`4oney ...`@A`4nd `@S`4tuff ...`0
+`@D`4rugs`0
+`@O`4ther `@S`4tuff`0
+? = list  Q = Quit
+`@S`4treet `@F`4ights`0
+`@P`4layer `@F`4ights`0
+`@E`4vil `@S`4tuff`0
+`@C`4op `@F`4ights`0
+ Sent you mail\!::^M@OK))|#|#|#
+ Replied to yer mail\!::^M@OK))|#|#|#
+!|10000((*Read your mail?::Y@Yes,N@No))|#|#|#
+ Arrived at New York\!::^M@OK))|#|#|#
+ Left New York\!::^M@OK))|#|#|#
+`0H`2eadbanger
+`0H`2ippie
+`0B`2ig `0F`2at `0D`2ude
+`0C`2rack `0A`2ddict
+`0P`2unk
+M`2ale  `@
+F`2emale`@
+`0A`2live
+DEAD
+UNCONSIOUS
+C`2heap `0M`2otel
+R`2egular `0H`2otel
+E`2xpensive `0H`2otel
+Pot
+Hash
+LSD
+Coke
+PCP
+Heroin
+Healthy
+Crabs
+Herpes
+Syphilis
+AIDS
+Hands
+Pepper Spray
+Knife
+Chain
+Gun
+Rifle
+Laser Gun
+Shotgun
+Machine Gun
+Granade Launcher
+Blaster
+Atomic Bomb
+!|10000((*You get 10 points for not having yer ass kicked...::^M@OK))|#|#|#
+`1-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+!|10000((*Dead people are not allowed to play\! Come back later\!::^M@OK))|#|#|#
+!|10000((*You heffta wait until tomorrow to play again\!::^M@OK))|#|#|#
+!|10000((*You are currently being fought by another node right now\!::^M@OK))|#|#|#
+!|10000((*Yer feeling better as you wake up from a coma...::^M@OK))|#|#|#
+`%PLEASE tell your sysop to register!
+`@T`4hanks to `0
+!|10000((*You see a cop so you run away...::^M@OK))|#|#|#
+!|10000((*You just can't hit any window...::^M@OK))|#|#|#
+!|10000((*You cannot buy an A-Bomb until yer in level 20::^M@OK))|#|#|#
+`@P`4 - `@P`4revious  `@
+`@N`4 - `@N`4ext  `@
+!|10000((*You come up to a place called:
+!|10000((*Go there?::Y@Yes,N@No))|#|#|#
+`@N`4othing has happened in New York today!
+`@N`4othing has happened in New York yesterday!
+!|10000((*You are high on another drug ... Come back when ya sober up\!::^M@OK))|#|#|#
+`@S`4end money to who: `0
+`0H`2ow much to send? (`9Enter`2=`0[0]`2, `9M`2=max `0
+!|10000((*Sent ...::^M@OK))|#|#|#
+ `4sent you `0
+ `4bucks!
+!|10000((*Tell the sysop to register this game so you can WIN\!::^M@OK))|#|#|#
+!|10000((*If you are too weak for regular fights, fight cops\!::^M@OK))|#|#|#
+!|10000((*Put all money to bank so you won't loose it\!::^M@OK))|#|#|#
+!|10000((*Eating in restaurants heals you\!::^M@OK))|#|#|#
+!|10000((*Ya find an open house go inside?::Y@Yes,N@No))|#|#|#
+!|10000((*You find 
+ bucks, take it?::Y@Yes,N@No))|#|#|#
+!|10000((*You find a hit of yer drug, take it?::Y@Yes,N@No))|#|#|#
+!|10000((*Ok, ya got away with it ... Good job\!::^M@OK))|#|#|#
+!|10000((*The guy that lives here REALLY kicked your ass\!::^M@OK))|#|#|#
+!|10000((*He took all yer money too\!::^M@OK))|#|#|#
+!|10000((*Ya find an unused condom\! You take it ...::^M@OK))|#|#|#
+`@R`4ocks: `0
+`@A`4bilities: `@T`4hrowing: `0
+`@K`4icking: `0
+`@P`4unching: `0
+!|10000((*Raise which ability?::T@Throwing,K@Kicking,P@Punching))|#|#|#
+ rocks to throw.::^M@OK))|#|#|#
+`@Y`4a kick REAL hard ...
+`@Y`4a kick REAL hard ... but `%MISS
+`@Y`4a punch your opponent in the face ...
+`@Y`4a punch your opponent in the face ... but `%MISS
+`@Y`4a throw a rock at your enemy ...
+`@Y`4a throw a rock at your enemy ... but `%MISS
+`@Y`4a realize ya don't got no rocks ... `@G`4o find some ...
+`@O`4k type yer message now (`@10 `4lines`@ max`4) (`@/s`4=save `@/a`4=abort):
+### Packing InterBBS mail file...
+`@W`4hich `@BBS #`4: `0
+`@W`4hich `@P`4layer `@#`4: `0
+`@P`4layer list not yet recieved!
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`0P`2layer `0L`2isting `0F`2or: `@
+`!BBS Name:                                Highest Player Score:
+`@O`4ther `@C`4ities`0
+!|10000((*No InterBBS Moves left, only two InterBBS actions per day\!::^M@OK))|#|#|#
+!|10000((*Spy information requested ...::^M@OK))|#|#|#
+`!Lvl: Name:                     Points:              S: T:
+`4 sent you an infected prostitute!
+`@S`4omebody sent you an infected prostitute!
+`@S`4omebody tried to send you an infected prostitute!
+`4 hired a Hitman.
+`@Y`4ou have to fight him!
+`4 sent you a mailbomb!
+`@S`4omebody sent you a mailbomb!
+`@S`4omebody tried to send you a maibomb but it failed!
+`@Y`4ou loose 1/3 of your hitpoints!
+!|10000((*A mailbomb will cost 
+, OK?::Y@Yes,N@No))|#|#|#
+!|10000((*The hitman will cost 
+!|10000((*Which hitman to send::1@George,2@Gang Member,3@Mafia Guy,4@Lloyd The Bloody,5@David Koresh,6@Masked Fella,Q@Quit))|#|#|#
+`0S`2harp `0S`2tick
+`0S`2crewdriver
+`0H`2ammer
+`0L`2ead `0P`2ipe
+`0C`2olt
+`0E`2lephant `0G`2un
+`0N`2ail `0G`2un
+`0A`2ssault `0R`2ifle
+`0P`2roton `0G`2un
+`0N`2Neutron `0P`2haser
+`0U`2ltrasound `0G`2un
diff --git a/src/doors/ny2008/linesc.dat b/src/doors/ny2008/linesc.dat
new file mode 100644
index 0000000000000000000000000000000000000000..cb5eec0b63f51a043881fe57852e9eef43912b9f
--- /dev/null
+++ b/src/doors/ny2008/linesc.dat
@@ -0,0 +1,481 @@
+`@Smack [ENTER] to go on.
+`@G`4etting the menu text file pointers...
+`@R`4eading mail...
+`%Please wait while maintanance runs on another node....
+`%Thanks for waiting....
+`%You were kicked out of the hotel
+`%You get a message!
+   `9F`1rom: `@
+`@M`4aking `%ANSI`4, `%ASCII`4 scorefiles ...
+ `@D`4one!
+`3### Checking for maintanance running
+### Checking for last maintanance
+### Running daily maintance
+### Packing and updating user file and creating scorefile
+### User file done...
+### Sorting SCR file...
+### Checking for mail index file...
+### Packing mail index file...
+### Deleting messages for dead users...
+### Deleting read messages...
+### Mail file done...
+### Cleaning up...
+### Executing custom maintanance program
+`3### Running Crash Recovery
+### Updating (no maintanance) user file and creating scorefile
+### User file done...
+### Sorting new SCR file...
+`@C`4hange `@Y`4er `@I`4nfo
+`%1 `4- `@Y`4er name: `0
+`%2 `4- `@W`4hen you win ya say: `0
+`%3 `4- `@W`4hen you loose ya say: `0
+`%Q `4- `@R`4eturn to Central Park
+`9W`1hich do ya wanna change? (`91`1,`92`1,`93`1,`9Q`1)
+`$T`6his game has been running for `0
+`6 days!
+`9E`1nter `9Y`1er `9C`1ommand (`9
+`1mins)`9>
+`%S`!t`9ats `%F`!o`9r `%L`!e`9vel `%
+`@S`4ex: `0
+`@W`4ell it's end of the road for ya....yer `%DEAD`4!
+`0Y`2ou died of: `0
+Drug Overdose
+`@Y`4a should consider cutting down on those drugs next time ...
+Hunger
+`@Y`4a should consider eating more next time ...
+Sexual Diseases
+`@Y`4a got a bad luck with girls ... next time ...
+`@Y`4a got a bad luck with guys ... next time ...
+Suicide
+`@Y`4a should talk to somebody before you get that down ... next time ...
+`%But you can still start all over tomorrow and be the best!
+`@B`4oy yer hungry....you should eat something not to starve...
+`@M`4an yer dying of hunger... If you don't eat today yer gonna die!
+`%Ya sure ya really wanna kill yerself? (`0heffta start over`%) (Y/N)
+`@E`4xpert mode turned `@ON
+`@R`4egular mode turned `@ON
+`@R`4eally quit? (`@Y`4/`@N`4)
+`!Y`9ou ain't got an A-Bomb.....
+`@R`4eally do it? (`@Y`4/`@N`4)
+`@Y`4er level has been raised to level `@
+`@Y`4er already staying at: `0
+`@W`4anna check outta there (no money back)? (`@Y`4/`@N`4)
+`@Y`4e're still staying at: `0
+`@O`4k dude you got it...
+`0T`4 - Todays Newz `0Y`4 - Yesterdays Newz `0[Q]`4 - Quit `2:`0
+`0H`2ere's what I got:
+`0C`2hoose yer new weapon:
+`%If you buy an A-Bomb you will have to fight with hands again, but who wants to
+fight if you can finish what you came here for ...
+`@Y`4a'll heffta sell yer `0
+`0S`2old
+`%Ya ain't got nuff money bro ...
+`@B`4uy a `0
+`@Y`4a now got the `0
+ `4so go destroy something ...
+`%You ain't got nothing to sell!
+`@S`4ell yer `0
+ `4for `@
+`4? (`@Y`4/`@N`4)
+`%You ain't got no hits man ...
+`!Y`9er already 100% stoned!
+`@Y`4ou take a hit of yer favorite drug ...
+`@Y`4ou are now `@
+%`4 high
+`@Y`4er drug addiction went up by `@10%
+`@Y`4er not infected ... (yet) ...
+`@I`4t costs `@
+`4 to cure `@1%
+`@Y`4ou can heal `@
+`4% for `@
+`@Y`4ou can only afford to cure `@
+`0S`2o how much ya want healed (`9Enter`2=`0[
+]`2, `9M`2=max `0
+`4% cured!
+`@Y`4er not addicted to anything...
+`0T`2he price is `0
+`2 for loosing 1/3 of addiction, do it (`0Y`2/`0N`2)
+`%You can't afford it!
+`0Y`2ou feel so much better ...
+`@Y`4er not hurt ... (yet) ...
+`@Y`4ou can heal `@
+`@Y`4ou can only afford to heal `@
+`4 hitpoints!
+`0S`2o how much ya want healed (`9Enter`2=`0[
+ H`4itpoints were healed!
+`0Y`2er not hungry ...
+`0A`2s you enter a restaurant you look at the prices ... `0
+`2 ... do it (`0Y`2/`0N`2)
+`%Well you ain't got enuff cash for that ...
+`@Y`4ou feel so refreshed yer hitpoints maxed out ...
+`@T`4hough not feeling that hungry anymore, you feel a bit worse and
+loose 1/3 of yer hitpoints ...
+`%Level 0 players can't steal ...
+`@Y`4ou try to steel some food from a supermarket ...
+`@Y`4ou just stole enough so yer hunger went down by `@
+`@Y`4ou did not manage to steal anything but did not get busted ...
+`@Y`4our points went up by `@
+`%You already used up all your sex turns today ...
+`@Y`4ou look for a victim ...
+`@Y`4ou raped some lady and ran away ... `@G`4ood job ...
+`@Y`4ou raped some guy and ran away ... `@G`4ood job ...
+`@Y`4ou couldn't find any victim ...
+`@Y`4ou went out with a pretty nice chick ... `@G`4ood job ...
+`@Y`4ou went out with some cool guy ... `@G`4ood job ...
+`@Y`4ou couldn't find anybody who'd like you ...
+`@T`4he sex turns went down anyway ...
+`@Y`4ou can get a hooker fer `@
+`4 ... (`@Y`4/`@N`4)
+`@O`4k there you go ...
+`@Y`4ou wanna list all the female players (`@Y`4/`@N`4)
+`@Y`4ou wanna list all the male players (`@Y`4/`@N`4)
+`@W`4ho ya wanna ask out (`@full`4 or `@partial`4 name):`0
+`@G`4ot no idea who you mean ...
+`@H`4ow you gonna ask? (`@/s`4=save `@/a`4=abort):
+`@S`4aving ...
+`@A`4borted ...
+`@W`4ell it aint the real thing, but at least you don't feel that you didn't
+have `@REAL`4 sex in such a long time, and you can't get sick like this.
+`0Y`2ou got `0
+`2 condoms.
+`0H`2ow much ya want? (`9Enter`2=`0[0]`2, `9M`2=max `0
+`@O`4k you now got `@
+`4 condoms.
+`@Y`4ou used a condom and got only 1/2 infected ...
+`@Y`4ou are now `0
+`4% infected with `0
+`0H`2ow much ya want to deposit? (`9Enter`2=`0[0]`2, `9M`2=max `0
+`@Y`4ou got `@
+`4 in the bank ...
+`0H`2ow much ya want to widthraw? (`9Enter`2=`0[0]`2, `9M`2=max `2
+`4 on ya...
+`@Y`4ou try to steel some money from the bank ...
+`@Y`4ou just stole `@
+`4 without getting busted, good job ...
+`@Y`4ou did not manage to steal anything but did not get busted ...
+`0Y`2er drug of choice is: `0
+`0T`2he price is `0
+`0H`2ow much ya want? (`9Enter`2=`0[0]`2, `9M`2=max `0
+`@O`4k you now have `@
+`4 hits!
+`0Y`2a can sell it for `0
+`0H`2ow much ya wanna sell? (`9Enter`2=`0[0]`2, `9M`2=max `0
+`%You are addicted to another drug ... First you heffta get off of that ...
+`@W`4hich drug you wanna switch to ...`0
+`@S`4o....(`0[0]`4=quit):
+`@Y`4ou'll heffta sell all the hits of yer old drug! Do it?(`@Y`4/`@N`4)
+`@Y`4er drug of choice set to: `0
+`%Sorry that name is already in use ... choose a different one ...
+`!T`9his game contains violence, sex, drugs ... `!Y`9a sure ya can handle that?(`!Y`9/`!N`9)
+`@N`4ot everybody was born with a vicious mind ...
+`@N`4ow that we got through that, I'll heffta ask ya a few questions ...
+`0W`2hat is yer name: `0
+`@W`4hat is your sex (`@M`4/`@F`4):
+`@W`4ell? :
+`!D`9id ya enter all that stuff correctly?(`!Y`9/`!N`9)
+`9Resetting User Record ...
+`9Writing to user file ...
+`@W`4ell nothing 'round here ... (yet)
+ `0Q`2 - Quit
+`%Loading ...
+`@Y`4ou cannot bomb anymore today, try again tomorrow ...
+`@Y`4ou cannot poison people anymore today, try again tomorrow ...
+`%Stuff happens ...
+`@Y`4a find a rich new car ...
+`@S`4mash it? (`@Y`4/`@N`4)
+`@Y`4a find an open car ...
+`@T`4here is money inside ...
+`@T`4ake the money? (`@Y`4/`@N`4)
+`@Y`4a consider the risks and decide it ain't a good idea
+`@W`4ow, the guy that owns the car came back and beat you up!
+`@Y`4a lost almost all yer hitpoints and 1/2 the money on ya!
+`@Y`4ou totally smashed that car ... a very nice job ...
+`@Y`4a find a bunch of hippies ...
+`@Y`4a smoke some dope with them ...
+`@T`4hey give ya hit of yer favorite drug ...
+`@A`4nd yer hitpoints max out!
+`@Y`4a fell inside a hole ...
+`@Y`4a lost 1/3 of yer hitpoints ...
+`@Y`4a enter the hospital ...
+`@Y`4a ain't got no fights left ... come back tomorrow
+`@Y`4ou meet `0
+ `4...
+`@H`4e got a bad lokin' `0
+`@S`4treet `@F`4ight`0
+'s `@H`4itpoints: `0
+`@Y`4er `@H`4itpoints: `0
+`@W`4hat ya gonna do? (`@[A] T K P R G Y`4)
+`@Y`4a hit `0
+ `4fer `0
+ `4damage
+ `4hits you fer `0
+`@Y`4a got away ...
+`@Y`4a couldn't find a way outta this ...
+`@Y`4ou beat up `0
+ `4...
+`@Y`4a find `@
+`4 bucks and ya get `@
+`4 points!
+`@L`4ookin fer yer enemy ... (`%S`4) to stop ...
+`@U`4ser is not online anymore!
+`@O`4nline `@P`4layer `@F`4ight
+`@W`4aiting ...
+`@Y`4er enemy droped carrier on ya!
+`@G`4o and kill him offline!
+`@W`4aiting fer enemy response ...
+`@Y`4er enemy ran away in fear ...
+`@Y`4a `%WON`4!
+`@D`4o ya wanna swap weapons with `0
+`@D`4one! `@Y`4ou now got the `0
+`@D`4o ya wanna rape `0
+`4 tried to get away but could not ...
+ `4raped ya!
+`@W`4ho ya don't like (`@full`4 or `@partial`4 name):`0
+`@T`4he user is already being fought!
+`@T`4he player is somewhere where you can't find him! `4(Other stuff)
+`@I`4t will cost ya `0
+`4 to get keys to his room ... Do it?(`@Y`4/`@N`4)
+`%Not nuff money man ...
+`@S`4till wanna do it? (`@Y`4/`@N`4)
+`@P`4layer `@F`4ight
+`@Y`4ou find some blind beggar and try to take some of his money ...
+`@Y`4ou just stole `0
+`4 from the poor bastard, good job ...
+`@T`4he poor bastard was broke ...
+`@Y`4ou find a school ... that's the easy part ...
+`@I`4t looks lovely as the school buildings crumble into ashes ...
+`@S`4chools don't burn very well ... all matches are gone ...
+`@Y`4ou pick up a rock and ...
+`@B`4reaking glass sounds so good ...
+`@P`4oisoning water will cost ya `@
+`4 ... Do it(`@Y`4/`@N`4)
+`@Y`4a can't afford it man ...
+`@Y`4ou buy enough poison and dump it into the water...
+`@W`4ow lotsa dead folks ... It worked ...
+`@T`4he poison didn't work ... The guy ripped you off ...
+`@E`4xplosives will cost ya `@
+`@Y`4ou buy nuff explosives and ...
+`%BOOOOOOOM `4... `@W`4ow ... it didn't fall but almost ...
+`@T`4he police found yer explosives ... Bad Luck ...
+`@S`4ooo... (`@0`4-`@9 [Q]`4=quit)
+`%You cannot attack this cop in your level...
+`@C`4op `@F`4ight
+`@W`4ow ya got `@
+`4 from that car ...
+`@Y`4a find `0
+`4 bucks!
+`%New York 2008  v`v  `w
+`7(Xpert or Regular mode recomended for slow modems)
+`7Wanna start in Xpert, Regular or Novice mode (`%X`7,`%[R]`7,`%N`7) `%
+`@S`4tatus: `@
+`@P`4oints: `0
+`@M`4oney `@I`4n `@H`4and: `0
+`@F`4ights: `0
+`@M`4oney `@I`4n `@B`4ank: `0
+`@H`4it `@P`4oints: `0
+`@o`4f `0
+`@H`4ungry: `0
+`@A`4rm: `0
+`@W`4inning `@S`4entence: `0
+`@L`4oosing `@S`4entence: `0
+`@D`4ays `@S`4ince `@G`4ot `@L`4aid: `0
+`@S`4TD: `0
+`@S`4ex `@T`4urns `@L`4eft: `0
+`@I`4nfected: `0
+`@C`4ondoms: `0
+`@D`4rug: `0
+`@H`4its: `0
+`@H`4igh: `0
+`@A`4ddicted: `0
+`@D`4ays `@S`4ince `@L`4ast `@H`4it: `0
+`@S`4taying `@a`4t: `0
+ `@F`4or `0
+`@ D`4ays
+ `4has attacked you ... `@Y`4ou are now in an online battle!
+`%YOU WON THE GAME!!!!! With `0
+`% points ...
+`@I`4t will cost ya `@
+`4 per day.
+`@Y`4ou can afford `@
+`4 days!
+`0H`2ow mady days ya wanna stay here? (`9Enter`2=`0[0]`2, `9M`2=max `0
+`@Y`4ou made the `%BEST`4 list.
+`@Y`4ou didn't make the `%BEST`4 list.\n\r`@T`4here were better.
+`@A`4ctually ya were the first to do it.
+`@W`4ho's mailbox do ya wanna fill (`@full`4 or `@partial`4 name): `0
+`@A`4sk `@
+`4 to have sex with you?(`@Y`4/`@N`4)
+`@O`4k type yer message now (`@/s`4=save `@/a`4=abort):
+`@S`4ay what:
+|-----------------------------------------------------------------------------|`0
+`@P`4osted...
+`@W`4ho do ya want to bother (full or partial): `0
+`@O`4k type what u wanna say now:
+|------------------------------------------------|`0
+`@S`4ent!
+`9S`1earching `9...
+`@M`4ail from: `0
+  `@T`4o: `0
+`4 wants to have sex with ya, `@O`4k?
+`9[O]`4=OK (sex) `9R`4=reply `9D`4=delete `9I`4=ignore `9>
+`9R`4=reply `9[D]`4=delete `9I`4=ignore `9>
+`4 agreed and had sex with ya ...
+`4 raped you!!
+`4 defeated you!!
+`@D`4eleting...
+`%Try again tomorrow....
+`@Y`4ou just had sex with `@
+`@A`4sk `@
+`4 to have sex with you?(`@Y`4/`@N`4)
+`@Q`4uote message? (`@Y`4/`@N`4)
+`@C`4ommand (`9S A C`4=continue)
+`@D`4id ya mean `@
+`@W`4hich one? `@Y`4ou got `@
+`4 to spend. (`@A-W`4, `@Enter`4=`@[Q]`4=Quit)
+ `4for `@
+`4, OK?(`@Y`4/`@N`4)
+`@Y`4ou stopped looking ...
+`@T`4his is a single node only game!!!!
+`@Y`4ou just raped `0
+`0's`4 unconcious body!
+`@N`4ovice mode turned `@ON
+`@C`4entral `@P`4ark`0
+`@R`4est `@S`4omewhere`0
+`@M`4ail`0
+`@A`4rm `@Y`4erself`0
+`@H`4ealing`0
+`@F`4ood`0
+`@G`4et `@L`4aid`0
+`@B`4ank ...`@M`4oney ...`@A`4nd `@S`4tuff ...`0
+`@D`4rugs`0
+`@O`4ther `@S`4tuff`0
+? = list  Q = Quit
+`@S`4treet `@F`4ights`0
+`@P`4layer `@F`4ights`0
+`@E`4vil `@S`4tuff`0
+`@C`4op `@F`4ights`0
+`@ S`4ent you mail!
+`@ R`4eplied to yer mail!
+`@R`4ead your mail? (`@[Y]`4/`@N`4) `@
+`@ A`4rrived at `@N`4ew `@Y`4ork!
+`@ L`4eft `@N`4ew `@Y`4ork!
+`0H`2eadbanger
+`0H`2ippie
+`0B`2ig `0F`2at `0D`2ude
+`0C`2rack `0A`2ddict
+`0P`2unk
+M`2ale  `@
+F`2emale`@
+`0A`2live
+DEAD
+UNCONSIOUS
+C`2heap `0M`2otel
+R`2egular `0H`2otel
+E`2xpensive `0H`2otel
+`0P`2ot
+`0H`2ash
+`0L`2SD
+`0C`2oke
+`0P`2CP
+`0H`2eroin
+`0H`2ealthy
+`0C`2rabs
+`0H`2erpes
+`0S`2yphilis
+`0A`2IDS
+`0H`2ands
+`0P`2epper `0S`2pray
+`0K`2nife
+`0C`2hain
+`0G`2un
+`0R`2ifle
+`0L`2aser `0G`2un
+`0S`2hotgun
+`0M`2achine `0G`2un
+`0G`2ranade `0L`2auncher
+`0B`2laster
+`0A`2tomic `0B`2omb
+`@Y`4ou get 10 points for staying consious...
+`1-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`%Dead people are not allowed to play, come back tomorrow to start over!
+`%You heffta wait until tomorrow to play again!
+`@Y`4ou are currently being fought by another node ... come back later...
+`@Y`4er feeling better as you wake up from a coma...
+`%PLEASE tell your sysop to register!
+`@T`4hanks to `0
+`@Y`4ou see a cop so you run away...
+`@Y`4ou just can't hit any window...
+`@Y`4ou cannot buy an `@A`4-`@B`4omb until yer in level `@20
+`@P`4 - `@P`4revious  `@
+`@N`4 - `@N`4ext  `@
+`@Y`4ou come up to a place called:
+`@G`4o there? (`@Y`4/`@N`4):`@
+`@N`4othing has happened in New York today!
+`@N`4othing has happened in New York yesterday!
+`%You are high on another drug ... Come tommorrow when ya sober up ...
+`@S`4end money to who: `0
+`0H`2ow much to send? (`9Enter`2=`0[0]`2, `9M`2=max `0
+`@S`4ent ...
+ `4sent you `0
+ `4bucks!
+`@Y`4ou hear a voice saying: `%Tell the sysop to register this game so you can WIN!
+`@Y`4ou hear a voice saying: `%If you are too weak for regular fights, fight cops!
+`@Y`4ou hear a voice saying: `%Put all money to bank so you won't loose it!
+`@Y`4ou hear a voice saying: `%Eating in restaurants heals you!
+`@Y`4ou find an open house go inside? (`@Y`4/`@N`4):`@
+`@Y`4ou find `@
+ `4bucks, take it? (`@Y`4/`@N`4):`@
+`@Y`4ou find a hit of yer drug, take it? (`@Y`4/`@N`4):`@
+`@O`4k, ya got away with it ... `@G`4ood job!
+`@T`4he guy that lives here `@REALLY `4beat you up!
+`@H`4e took all yer money too!
+`@Y`4a find an unused condom! `@Y`4ou take it ... maybe you will find a use for it!
+`@R`4ocks: `0
+`@A`4bilities: `@T`4hrowing: `0
+`@K`4icking: `0
+`@P`4unching: `0
+`@R`4aise which ability: `0T `4- Throwing `0K `4- Kicking `0P `4- Punching : `0
+ `4rocks to throw.
+`@Y`4a kick REAL hard ...
+`@Y`4a kick REAL hard ... but `%MISS
+`@Y`4a punch your opponent in the face ...
+`@Y`4a punch your opponent in the face ... but `%MISS
+`@Y`4a throw a rock at your enemy ...
+`@Y`4a throw a rock at your enemy ... but `%MISS
+`@Y`4a realize ya don't got no rocks ... `@G`4o find some ...
+`@O`4k type yer message now (`@10 `4lines`@ max`4) (`@/s`4=save `@/a`4=abort):
+### Packing InterBBS mail file...
+`@W`4hich `@BBS #`4: `0
+`@W`4hich `@P`4layer `@#`4: `0
+`@P`4layer list not yet recieved!
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`0P`2layer `0L`2isting `0F`2or: `@
+`!BBS Name:                                Highest Player Score:
+`@O`4ther `@C`4ities`0
+`%No InterBBS Moves left, Only Two InterBBS actions per day!
+`@S`4py information requested ...
+`!Lvl: Name:                     Points:              S: T:
+`4 sent you an infected prostitute!
+`@S`4omebody sent you an infected prostitute!
+`@S`4omebody tried to send you an infected prostitute!
+`4 hired a Hitman.
+`@Y`4ou have to fight him!
+`4 sent you a mailbomb!
+`@S`4omebody sent you a mailbomb!
+`@S`4omebody tried to send you a maibomb but it failed!
+`@Y`4ou loose 1/3 of your hitpoints!
+`@A`4 mailbomb will cost `0
+`4, OK?(`@Y`4/`@N`4)
+`@T`4he hitman will cost `0
+`@S`4o who is it: `0
+`0S`2harp `0S`2tick
+`0S`2crewdriver
+`0H`2ammer
+`0L`2ead `0P`2ipe
+`0C`2olt
+`0E`2lephant `0G`2un
+`0N`2ail `0G`2un
+`0A`2ssault `0R`2ifle
+`0P`2roton `0G`2un
+`0N`2Neutron `0P`2haser
+`0U`2ltrasound `0G`2un
diff --git a/src/doors/ny2008/linesc.rip b/src/doors/ny2008/linesc.rip
new file mode 100644
index 0000000000000000000000000000000000000000..336f10c0806677f7c6e640edefbad90f5869ba19
--- /dev/null
+++ b/src/doors/ny2008/linesc.rip
@@ -0,0 +1,481 @@
+`@Smack [ENTER] to go on.
+`@G`4etting the menu text file pointers...
+!|*|c0C|TReading mail...|#|#|#
+!|*|c0C|TPlease wait while maintanance runs on another node...|#|#|#
+!|@0020Thanks for waiting...|#|#|#
+!|@0040You were kicked out of the hotel|#|#|#
+!|10000((*You get a message/!::^M@OK))|#|#|#
+   `9F`1rom: `@
+`@M`4aking `%ANSI`4, `%ASCII`4 scorefiles ...
+ `@D`4one!
+`3### Checking for maintanance running
+### Checking for last maintanance
+### Running daily maintance
+### Packing and updating user file and creating scorefile
+### User file done...
+### Sorting SCR file...
+### Checking for mail index file...
+### Packing mail index file...
+### Deleting messages for dead users...
+### Deleting read messages...
+### Mail file done...
+### Cleaning up...
+### Executing custom maintanance program
+`3### Running Crash Recovery
+### Updating (no maintanance) user file and creating scorefile
+### User file done...
+### Sorting new SCR file...
+`@C`4hange `@Y`4er `@I`4nfo
+`%1 `4- `@Y`4er name: `0
+`%2 `4- `@W`4hen you win ya say: `0
+`%3 `4- `@W`4hen you loose ya say: `0
+`%Q `4- `@R`4eturn to Central Park
+`9W`1hich do ya wanna change? (`91`1,`92`1,`93`1,`9Q`1)
+`$T`6his game has been running for `0
+`6 days!
+`9E`1nter `9Y`1er `9C`1ommand (`9
+`1mins)`9>
+`%S`!t`9ats `%F`!o`9r `%L`!e`9vel `%
+`@S`4ex: `0
+`@W`4ell it's end of the road for ya....yer `%DEAD`4!
+`0Y`2ou died of: `0
+Drug Overdose
+`@Y`4a should consider cutting down on those drugs next time ...
+Hunger
+`@Y`4a should consider eating more next time ...
+Sexual Diseases
+`@Y`4a got a bad luck with girls ... next time ...
+`@Y`4a got a bad luck with guys ... next time ...
+Suicide
+`@Y`4a should talk to somebody before you get that down ... next time ...
+`%But you can still start all over tomorrow and be the best!
+!|10000((*Boy yer hungry....you should eat something not to starve...::^M@OK))|#|#|#
+!|10000((*Yer dying of hunger... If you don't eat today yer gonna die\!::^M@OK))|#|#|#
+!|10000((*Ya sure ya really wanna kill yerself? (heffta start over)::Y@Yes,N@No))|#|#|#
+`@E`4xpert mode turned `@ON
+`@R`4egular mode turned `@ON
+!|10000((*Do you want to quit the game?::Y@Yes,N@No))|#|#|#
+!|10000((*You ain't got an A-Bomb::^M@OK))|#|#|#
+!|10000((*Really do it?::Y@Yes,N@No))|#|#|#
+!|10000((*Yer level has been raised to level 
+!|10000((*Yer already staying at:
+!|10000((*Wanna check outta there (no money back)?::Y@Yes,N@No))|#|#|#
+!|10000((*Yer still staying at:
+!|10000((*Ok dude you got it ...::@OK))|#|#|#
+`0T`4 - Todays Newz `0Y`4 - Yesterdays Newz `0[Q]`4 - Quit `2:`0
+`0H`2ere's what I got:
+`0C`2hoose yer new weapon:
+`%If you buy an A-Bomb you will have to fight with hands again, but who wants to
+fight if you can finish what you came here for ...
+!|10000((*Ya'll heffta sell yer
+!|10000((*Sold\!::^M@OK))|#|#|#
+!|10000((*Ya ain't got nuff money bro ...::^M@OK))|#|#|#
+!|10000((*Buy a 
+!|10000((*Ya now got the 
+ so go destroy something::^M@OK))|#|#|#
+!|10000((*You ain't got nothing to sell\!::^M@OK))|#|#|#
+!|10000((*Sell yer 
+ for 
+?::Y@Yes,N@No))|#|#|#
+!|10000((*You ain't got no hits man ...::^M@OK))|#|#|#
+!|10000((*Yer already 100% stoned\!::^M@OK))|#|#|#
+!|10000((*You take a hit of yer favorite drug ...::^M@OK))|#|#|#
+!|10000((*You are now 
+% high::^M@OK))|#|#|#
+!|10000((*Yer drug addiction went up by 10%::^M@OK))|#|#|#
+!|10000((*Yer not infected ... (yet) ...::^M@OK))|#|#|#
+!|10000((*It costs 
+ to cure 1%::^M@OK))|#|#|#
+!|10000((*You can heal 
+% for 
+!|10000((*You can only afford to cure 
+`0S`2o how much ya want healed (`9Enter`2=`0[
+]`2, `9M`2=max `0
+% cured\!::^M@OK))|#|#|#
+!|10000((*Yer not addicted to anything...::^M@OK))|#|#|#
+!|10000((*Pay
+ for loosing 1/3 of addiction, do it?::Y@Yes,N@No))|#|#|#
+!|10000((*You can't afford it\!::^M@OK))|#|#|#
+!|10000((*You feel so much better ...::^M@OK))|#|#|#
+!|10000((*Yer not hurt ... (yet) ...::^M@OK))|#|#|#
+!|10000((*You can heal 
+!|10000((*You can only afford to heal 
+ hitpoints\!::^M@OK))|#|#|#
+`0S`2o how much ya want healed (`9Enter`2=`0[
+ Hitpoints were healed\!::^M@OK))|#|#|#
+!|10000((*Yer not hungry ...::^M@OK))|#|#|#
+!|10000((*You look at the prices ... 
+ ... do it?::Y@Yes,N@No))|#|#|#
+!|10000((*Well you ain't got enuff cash for that ...::^M@OK))|#|#|#
+!|10000((*You feel so refreshed yer hitpoints maxed out ...::^M@OK))|#|#|#
+!|10000((*Though not feeling that hungry anymore, you feel sick\!::^M@OK))|#|#|#
+!|10000((*You loose 1/3 of yer hitpoints ...::^M@OK))|#|#|#
+!|10000((*Level 0 players can't steal ...::^M@OK))|#|#|#
+!|10000((*You try to steel some food from a supermarket ...::^M@OK))|#|#|#
+!|10000((*You just stole enough so yer hunger went down by 
+!|10000((*You did not manage to steal anything but did not get busted\!::^M@OK))|#|#|#
+!|10000((*Your points went up by 
+!|10000((*You already used up all your sex turns today ...::^M@OK))|#|#|#
+!|10000((*You look for a victim ...::^M@OK))|#|#|#
+!|10000((*You raped some lady and ran away ... Good job ...::^M@OK))|#|#|#
+!|10000((*You raped some guy and ran away ... Good job ...::^M@OK))|#|#|#
+!|10000((*You couldn't find any victim ...::^M@OK))|#|#|#
+!|10000((*You scored a pretty nice chick ... Good job ...::^M@OK))|#|#|#
+!|10000((*You scored some cool guy ... Good job ...::^M@OK))|#|#|#
+!|10000((*You couldn't find anybody who'd like you ...::^M@OK))|#|#|#
+!|10000((*The sex turns went down anyway ...::^M@OK))|#|#|#
+!|10000((*You can get a hooker fer 
+ ...::Y@Yes,N@No))|#|#|#
+!|10000((*Ok there you go ...::^M@OK))|#|#|#
+!|10000((*You wanna list all the female players?::Y@Yes,N@No))|#|#|#
+!|10000((*You wanna list all the male players?::Y@Yes,N@No))|#|#|#
+`@W`4ho ya wanna ask out (`@full`4 or `@partial`4 name):`0
+!|10000((*Got no idea who you mean ...::^M@OK))|#|#|#
+`@H`4ow you gonna ask? (`@/s`4=save `@/a`4=abort):
+!|10000((*Saving ...::^M@OK))|#|#|#
+!|10000((*Aborted ...::^M@OK))|#|#|#
+!|10000((*Well it just aint the real thing.::^M@OK))|#|#|#
+!|10000((*But at least ya can't get sick this way.::^M@OK))|#|#|#
+!|10000((*You got 
+ condoms.::^M@OK))|#|#|#
+`0H`2ow much ya want? (`9Enter`2=`0[0]`2, `9M`2=max `0
+!|10000((*Ok you now got 
+ condoms.::^M@OK))|#|#|#
+!|10000((*You used a condom and got only 1/2 infected ...::^M@OK))|#|#|#
+!|10000((*You are now 
+% infected with 
+`0H`2ow much ya want to deposit? (`9Enter`2=`0[0]`2, `9M`2=max `0
+!|10000((*You got 
+ in the bank ...::^M@OK))|#|#|#
+`0H`2ow much ya want to widthraw? (`9Enter`2=`0[0]`2, `9M`2=max `2
+ on ya...::^M@OK))|#|#|#
+!|10000((*You try to steel some money from the bank ...::^M@OK))|#|#|#
+!|10000((*You just stole
+ without getting busted, good job ...::^M@OK))|#|#|#
+!|10000((*You did not manage to steal anything but did not get busted\!::^M@OK))|#|#|#
+!|10000((*Yer drug of choice is: 
+!|10000((*The price is 
+`0H`2ow much ya want? (`9Enter`2=`0[0]`2, `9M`2=max `0
+!|10000((*Ok you now have 
+ hits\!::^M@OK))|#|#|#
+!|10000((*Ya can sell it for 
+`0H`2ow much ya wanna sell? (`9Enter`2=`0[0]`2, `9M`2=max `0
+!|10000((*Yer addicted to another drug ... Get off of that first ...
+!|10000((*Which drug you wanna switch to?::1@Pot,2@Hash,3@LSD,4@Coke,5@PCP,6@Heroin,0@Quit))|#|#|#
+`@S`4o....(`0[0]`4=quit):
+!|10000((*You'll heffta sell all the hits of yer old drug\! Do it?::Y@Yes,N@No))|#|#|#
+!|10000((*Yer drug of choice set to: 
+!|10000((*Sorry that name is already in use...choose a different one\!::^M@OK))|#|#|#
+`!T`9his game contains violence, sex, drugs ... `!Y`9a sure ya can handle that?(`!Y`9/`!N`9)
+`@N`4ot everybody was born with a vicious mind ...
+`@N`4ow that we got through that, I'll heffta ask ya a few questions ...
+`0W`2hat is yer name: `0
+!|10000((*What is your sex?::m@Male,f@Female))|#|#|#
+!|10000((*What Are You?::1@Headbanger,2@Hippie,3@Big Fat Dude,4@Crack Addict,5@Punk))|#|#|#
+!|10000((*Did ya enter all that stuff correctly?::Y@Yes,N@No))|#|#|#
+`9Resetting User Record ...
+`9Writing to user file ...
+`@W`4ell nothing 'round here ... (yet)
+ `0Q`2 - Quit
+`%Loading ...
+!|10000((*You cannot bomb anymore today, try again tomorrow ...::^M@OK))|#|#|#
+!|10000((*You cannot poison people anymore today, try again tomorrow ...::^M@OK))|#|#|#
+!|10000((*Stuff happens ...::^M@OK))|#|#|#
+!|10000((*Ya find a rich new car ...::^M@OK))|#|#|#
+!|10000((*Smash it?::Y@Yes,N@No))|#|#|#
+!|10000((*Ya find an open car ...::^M@OK))|#|#|#
+!|10000((*There is money inside ...::^M@OK))|#|#|#
+!|10000((*Take the money?::Y@Yes,N@No))|#|#|#
+!|10000((*Ya consider the risks and decide it ain't a good idea::^M@OK))|#|#|#
+!|10000((*Wow, the guy that owns the car came back and beat you up\!::^M@OK))|#|#|#
+!|10000((*Ya lost almost all yer hitpoints and 1/2 the money on ya\!::^M@OK))|#|#|#
+!|10000((*You totally smashed that car ... a very nice job ...::^M@OK))|#|#|#
+!|10000((*Ya find a bunch of hippies ...::^M@OK))|#|#|#
+!|10000((*Ya smoke some dope with them ...::^M@OK))|#|#|#
+!|10000((*They give ya hit of yer favorite drug ...::^M@OK))|#|#|#
+!|10000((*And yer hitpoints max out\!::^M@OK))|#|#|#
+!|10000((*Ya fell inside a hole ...::^M@OK))|#|#|#
+!|10000((*Ya lost 1/3 of yer hitpoints ...::^M@OK))|#|#|#
+!|10000((*Ya enter the hospital ...::^M@OK))|#|#|#
+!|10000((*Ya ain't got no fights left ... come back tomorrow::^M@OK))|#|#|#
+`@Y`4ou meet `0
+ `4...
+`@H`4e got a bad lokin' `0
+`@S`4treet `@F`4ight`0
+'s `@H`4itpoints: `0
+`@Y`4er `@H`4itpoints: `0
+`@W`4hat ya gonna do? (`@[A] T K P R G Y`4)
+`@Y`4a hit `0
+ `4 fer `0
+ `4damage
+ `4hits you fer `0
+!|10000((*Ya got away ...::^M@OK))|#|#|#
+`@Y`4a couldn't find a way outta this ...
+`@Y`4ou beat up `0
+ `4 ...
+`@Y`4a find `@
+`4 bucks and ya get `@
+`4 points!
+`@L`4ookin fer yer enemy ... (`%S`4) to stop ...
+!|10000((*User is not online anymore\!::^M@OK))|#|#|#
+`@O`4nline `@P`4layer `@F`4ight
+`@W`4aiting ...
+!|10000((*Yer enemy droped carrier on ya\!::^M@OK))|#|#|#
+!|10000((*Go and kill him offline\!::^M@OK))|#|#|#
+`@W`4aiting fer enemy response ...
+`@Y`4er enemy ran away in fear ...
+`@Y`4a `%WON`4!
+!|10000((*Do ya wanna swap weapons with 
+!|10000((*Done\! You now got the 
+!|10000((*Do ya wanna rape 
+`4 tried to get away but could not ...
+ `4raped ya!
+`@W`4ho ya don't like (`@full`4 or `@partial`4 name):`0
+!|10000((*The user is already being fought\!::^M@OK))|#|#|#
+!|10000((*The player is somewhere where you can't find him\!::^M@OK))|#|#|#
+!|10000((*It will cost ya
+ to get keys to his room ... Do it?::Y@Yes,N@No))|#|#|#
+!|10000((*Not nuff money man ...::^M@OK))|#|#|#
+`@S`4till wanna do it? (`@Y`4/`@N`4)
+`@P`4layer `@F`4ight
+!|10000((*You find a blind beggar and try to take some of his money::^M@OK))|#|#|#
+!|10000((*You just stole 
+ from the poor bastard, good job ...::^M@OK))|#|#|#
+!|10000((*The poor bastard was broke ...::^M@OK))|#|#|#
+!|10000((*You find a school ... that's the easy part ...::^M@OK))|#|#|#
+!|10000((*It looks lovely as the school buildings crumble into ashes\!::^M@OK))|#|#|#
+!|10000((*Schools don't burn very well ... all matches are gone ...::^M@OK))|#|#|#
+!|10000((*You pick up a rock and ...::^M@OK))|#|#|#
+!|10000((*Breaking glass sounds so good ...::^M@OK))|#|#|#
+!|10000((*Poisoning water will cost ya 
+ ... Do it?::Y@Yes,N@No))|#|#|#
+!|10000((*Ya can't afford it man ...::^M@OK))|#|#|#
+!|10000((*You buy enough poison and dump it into the water...::^M@OK))|#|#|#
+!|10000((*Wow lotsa dead folks ... It worked ...::^M@OK))|#|#|#
+!|10000((*The poison didn't work ... The guy ripped you off ...::^M@OK))|#|#|#
+!|10000((*Explosives will cost ya 
+!|10000((*You buy nuff explosives and ...::^M@OK))|#|#|#
+!|10000((*BOOOOOOOM ... Wow ... it didn't fall but almost ...::^M@OK))|#|#|#
+!|10000((*The police found yer explosives ... Bad Luck ...::^M@OK))|#|#|#
+!|10000((*Which one do ya wanna attack?::0@Museum Nightguard,1@School Security Guy,2@Old Sergant,3@Regular Street Cop,4@Motorcycle Cop,5@Detective,6@Gang Unit Member,7@Special Assigment Member,8@Anti Terrorist Unit Guy,9@SuperCop,Q@Quit))|#|#|#
+!|10000((*You cannot attack this cop in your level...::^M@OK))|#|#|#
+`@C`4op `@F`4ight
+!|10000((*Wow ya got 
+ from that car ...::^M@OK))|#|#|#
+!|10000((*Ya find 
+ bucks\!::^M@OK))|#|#|#
+`%New York 2008  v`v  `w
+`7(Xpert or Regular mode recomended for slow modems)
+`7Wanna start in Xpert, Regular or Novice mode (`%X`7,`%[R]`7,`%N`7) `%
+`@S`4tatus: `@
+`@P`4oints: `0
+`@M`4oney `@I`4n `@H`4and: `0
+`@F`4ights: `0
+`@M`4oney `@I`4n `@B`4ank: `0
+`@H`4it `@P`4oints: `0
+`@o`4f `0
+`@H`4ungry: `0
+`@A`4rm: `0
+`@W`4inning `@S`4entence: `0
+`@L`4oosing `@S`4entence: `0
+`@D`4ays `@S`4ince `@G`4ot `@L`4aid: `0
+`@S`4TD: `0
+`@S`4ex `@T`4urns `@L`4eft: `0
+`@I`4nfected: `0
+`@C`4ondoms: `0
+`@D`4rug: `0
+`@H`4its: `0
+`@H`4igh: `0
+`@A`4ddicted: `0
+`@D`4ays `@S`4ince `@L`4ast `@H`4it: `0
+`@S`4taying `@a`4t: `0
+ `@F`4or `0
+`@ D`4ays
+ `4has attacked you ... `@Y`4ou are now in an online battle!
+`%YOU WON THE GAME!!!!! With `0
+`% points ...
+!|10000((*It will cost ya 
+ per day::^M@OK))|#|#|#
+!|10000((*You can afford 
+ days\!::^M@OK))|#|#|#
+`0H`2ow mady days ya wanna stay here? (`9Enter`2=`0[0]`2, `9M`2=max `0
+!|10000((*You made the BEST list.::^M@OK))|#|#|#
+!|10000((*You didn't make the BEST list. There were better.::^M@OK))|#|#|#
+!|10000((*Actually ya were the first to do it.::^M@OK))|#|#|#
+`@W`4ho's mailbox do ya wanna fill (`@full`4 or `@partial`4 name): `0
+!|10000((*Ask 
+ to have sex with you?::Y@Yes,N@No))|#|#|#
+`@O`4k type yer message now (`@/s`4=save `@/a`4=abort):
+`@S`4ay what:
+|-----------------------------------------------------------------------------|`0
+!|10000((*Posted...::^M@OK))|#|#|#
+`@W`4ho do ya want to bother (full or partial): `0
+`@O`4k type what u wanna say now:
+|------------------------------------------------|`0
+!|10000((*Sent\!::^M@OK))|#|#|#
+`9S`1earching `9...
+`@M`4ail from: `0
+  `@T`4o: `0
+`4 wants to have sex with ya, `@O`4k?
+`9[O]`4=OK (sex) `9R`4=reply `9D`4=delete `9I`4=ignore `9>
+`9R`4=reply `9[D]`4=delete `9I`4=ignore `9>
+`4 agreed and had sex with ya ...
+`4 raped you!!
+`4 defeated you!!
+!|10000((*Deleting...::^M@OK))|#|#|#
+!|10000((*Try again tomorrow....::^M@OK))|#|#|#
+`@Y`4ou just had sex with `@
+!|10000((*Ask 
+ to have sex with you?::Y@Yes,N@No))|#|#|#
+!|10000((*Quote message?::Y@Yes,N@No))|#|#|#
+`@C`4ommand (`9S A C`4=continue)
+!|10000((*Did ya mean 
+`@W`4hich one? `@Y`4ou got `@
+`4 to spend. (`@A-W`4, `@Enter`4=`@[Q]`4=Quit)
+ for 
+, OK?::Y@Yes,N@No))|#|#|#
+!|10000((*You stopped looking ...::^M@OK))|#|#|#
+!|10000((*This is a single node only game\!\!\!\!::^M@OK))|#|#|#
+!|10000((*You just raped 
+'s unconcious body\!::^M@OK))|#|#|#
+`@N`4ovice mode turned `@ON
+`@C`4entral `@P`4ark`0
+`@R`4est `@S`4omewhere`0
+`@M`4ail`0
+`@A`4rm `@Y`4erself`0
+`@H`4ealing`0
+`@F`4ood`0
+`@G`4et `@L`4aid`0
+`@B`4ank ...`@M`4oney ...`@A`4nd `@S`4tuff ...`0
+`@D`4rugs`0
+`@O`4ther `@S`4tuff`0
+? = list  Q = Quit
+`@S`4treet `@F`4ights`0
+`@P`4layer `@F`4ights`0
+`@E`4vil `@S`4tuff`0
+`@C`4op `@F`4ights`0
+ Sent you mail\!::^M@OK))|#|#|#
+ Replied to yer mail\!::^M@OK))|#|#|#
+!|10000((*Read your mail?::Y@Yes,N@No))|#|#|#
+ Arrived at New York\!::^M@OK))|#|#|#
+ Left New York\!::^M@OK))|#|#|#
+`0H`2eadbanger
+`0H`2ippie
+`0B`2ig `0F`2at `0D`2ude
+`0C`2rack `0A`2ddict
+`0P`2unk
+M`2ale  `@
+F`2emale`@
+`0A`2live
+DEAD
+UNCONSIOUS
+C`2heap `0M`2otel
+R`2egular `0H`2otel
+E`2xpensive `0H`2otel
+Pot
+Hash
+LSD
+Coke
+PCP
+Heroin
+Healthy
+Crabs
+Herpes
+Syphilis
+AIDS
+Hands
+Pepper Spray
+Knife
+Chain
+Gun
+Rifle
+Laser Gun
+Shotgun
+Machine Gun
+Granade Launcher
+Blaster
+Atomic Bomb
+!|10000((*You get 10 points for staying consious...::^M@OK))|#|#|#
+`1-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+!|10000((*Dead people are not allowed to play\! Come back later\!::^M@OK))|#|#|#
+!|10000((*You heffta wait until tomorrow to play again\!::^M@OK))|#|#|#
+!|10000((*You are currently being fought by another node right now\!::^M@OK))|#|#|#
+!|10000((*Yer feeling better as you wake up from a coma...::^M@OK))|#|#|#
+`%PLEASE tell your sysop to register!
+`@T`4hanks to `0
+!|10000((*You see a cop so you run away...::^M@OK))|#|#|#
+!|10000((*You just can't hit any window...::^M@OK))|#|#|#
+!|10000((*You cannot buy an A-Bomb until yer in level 20::^M@OK))|#|#|#
+`@P`4 - `@P`4revious  `@
+`@N`4 - `@N`4ext  `@
+!|10000((*You come up to a place called:
+!|10000((*Go there?::Y@Yes,N@No))|#|#|#
+`@N`4othing has happened in New York today!
+`@N`4othing has happened in New York yesterday!
+!|10000((*You are high on another drug ... Come back when ya sober up\!::^M@OK))|#|#|#
+`@S`4end money to who: `0
+`0H`2ow much to send? (`9Enter`2=`0[0]`2, `9M`2=max `0
+!|10000((*Sent ...::^M@OK))|#|#|#
+ `4sent you `0
+ `4bucks!
+!|10000((*Tell the sysop to register this game so you can WIN\!::^M@OK))|#|#|#
+!|10000((*If you are too weak for regular fights, fight cops\!::^M@OK))|#|#|#
+!|10000((*Put all money to bank so you won't loose it\!::^M@OK))|#|#|#
+!|10000((*Eating in restaurants heals you\!::^M@OK))|#|#|#
+!|10000((*Ya find an open house go inside?::Y@Yes,N@No))|#|#|#
+!|10000((*You find 
+ bucks, take it?::Y@Yes,N@No))|#|#|#
+!|10000((*You find a hit of yer drug, take it?::Y@Yes,N@No))|#|#|#
+!|10000((*Ok, ya got away with it ... Good job\!::^M@OK))|#|#|#
+!|10000((*The guy that lives here REALLY beat ya up\!::^M@OK))|#|#|#
+!|10000((*He took all yer money too\!::^M@OK))|#|#|#
+!|10000((*Ya find an unused condom\! You take it ...::^M@OK))|#|#|#
+`@R`4ocks: `0
+`@A`4bilities: `@T`4hrowing: `0
+`@K`4icking: `0
+`@P`4unching: `0
+!|10000((*Raise which ability?::T@Throwing,K@Kicking,P@Punching))|#|#|#
+ rocks to throw.::^M@OK))|#|#|#
+`@Y`4a kick REAL hard ...
+`@Y`4a kick REAL hard ... but `%MISS
+`@Y`4a punch your opponent in the face ...
+`@Y`4a punch your opponent in the face ... but `%MISS
+`@Y`4a throw a rock at your enemy ...
+`@Y`4a throw a rock at your enemy ... but `%MISS
+`@Y`4a realize ya don't got no rocks ... `@G`4o find some ...
+`@O`4k type yer message now (`@10 `4lines`@ max`4) (`@/s`4=save `@/a`4=abort):
+### Packing InterBBS mail file...
+`@W`4hich `@BBS #`4: `0
+`@W`4hich `@P`4layer `@#`4: `0
+`@P`4layer list not yet recieved!
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`0P`2layer `0L`2isting `0F`2or: `@
+`!BBS Name:                                Highest Player Score:
+`@O`4ther `@C`4ities`0
+!|10000((*No InterBBS Moves left, only two InterBBS actions per day\!::^M@OK))|#|#|#
+!|10000((*Spy information requested ...::^M@OK))|#|#|#
+`!Lvl: Name:                     Points:              S: T:
+`4 sent you an infected prostitute!
+`@S`4omebody sent you an infected prostitute!
+`@S`4omebody tried to send you an infected prostitute!
+`4 hired a Hitman.
+`@Y`4ou have to fight him!
+`4 sent you a mailbomb!
+`@S`4omebody sent you a mailbomb!
+`@S`4omebody tried to send you a maibomb but it failed!
+`@Y`4ou loose 1/3 of your hitpoints!
+!|10000((*A mailbomb will cost 
+, OK?::Y@Yes,N@No))|#|#|#
+!|10000((*The hitman will cost 
+!|10000((*Which hitman to send::1@George,2@Gang Member,3@Mafia Guy,4@Lloyd The Bloody,5@David Koresh,6@Masked Fella,Q@Quit))|#|#|#
+`0S`2harp `0S`2tick
+`0S`2crewdriver
+`0H`2ammer
+`0L`2ead `0P`2ipe
+`0C`2olt
+`0E`2lephant `0G`2un
+`0N`2ail `0G`2un
+`0A`2ssault `0R`2ifle
+`0P`2roton `0G`2un
+`0N`2Neutron `0P`2haser
+`0U`2ltrasound `0G`2un
diff --git a/src/doors/ny2008/mailm.rip b/src/doors/ny2008/mailm.rip
new file mode 100644
index 0000000000000000000000000000000000000000..0be84a6e326405cf513bb8a215caf3b45c221126
--- /dev/null
+++ b/src/doors/ny2008/mailm.rip
@@ -0,0 +1,6 @@
+!|*|1K|w0000000010|W0|c00|=00000001|S010F|p04224R31717A546B2X|L204S7A54
+!|L31706A2Y|c02|Y03000600|@2Y0SMail|Y00000100
+!|1B0000020S9402070F0F000800000708000000|1U6J15BF1N2B00<>Send Mail<>S
+!|1U792LC5332A00<>Read Yer Mail<>R|1U8L40DH4I1T00<>Anounce Something<>A
+!|1U7R5NCN652700<>Online Message<>O|1U4C79987R1V00<>Colors Info<>C
+!|1UCE8YHA9G0000<>Return<>Q|#|#|#
\ No newline at end of file
diff --git a/src/doors/ny2008/menus.dat b/src/doors/ny2008/menus.dat
new file mode 100644
index 0000000000000000000000000000000000000000..aa55f485e00e2e2fd64506ac3314ec9864fc100a
--- /dev/null
+++ b/src/doors/ny2008/menus.dat
@@ -0,0 +1,365 @@
+@CENTRAL_PARK
+`@C`4entral `@P`4ark
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9You find yerself sitting on the grass ... thinking bout yer next move...
+
+     `@S`4 - Street Fights         `@E`4 - Evil Stuff To Do
+     `@C`4 - Cop Fights            `@B`4 - Bank...Money...and Stuff
+     `@P`4 - Player Fights         `@H`4 - Healing
+     `@F`4 - Food                  `@Y`4 - Your Stats
+     `@D`4 - Drugs                 `@W`4 - Who's Online
+     `@A`4 - Arm Yerself           `@L`4 - List Players
+     `@G`4 - Get Laid              `@R`4 - Rest Somewhere
+     `@U`4 - Use Atomic Bomb       `@N`4 - Newz
+     `@M`4 - Mail                  `@O`4 - Other Stuff
+     `@I`4 - Change Yer Info       `0!`2 - Instructions
+     `%X`4 - Help Level Toggle     `0K`2 - Kill Yerself (Start over)
+
+		    `0Q`2 - Quit to BBS
+
+@CENTRAL_PARK_IB
+`@C`4entral `@P`4ark
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9You find yerself sitting on the grass ... thinking bout yer next move...
+
+     `@S`4 - Street Fights         `@E`4 - Evil Stuff To Do
+     `@C`4 - Cop Fights            `@B`4 - Bank...Money...and Stuff
+     `@P`4 - Player Fights         `@H`4 - Healing
+     `@F`4 - Food                  `@Y`4 - Your Stats
+     `@D`4 - Drugs                 `@W`4 - Who's Online
+     `@A`4 - Arm Yerself           `@L`4 - List Players
+     `@G`4 - Get Laid              `@R`4 - Rest Somewhere
+     `@U`4 - Use Atomic Bomb       `@N`4 - Newz
+     `@M`4 - Mail                  `@O`4 - Other Stuff
+     `@I`4 - Change Yer Info       `@*`4 - Other Cities
+     `%X`4 - Help Level Toggle     `0!`2 - Instructions
+
+		    `0K`2 - Kill Yerself (Start over)
+		    `0Q`2 - Quit to BBS
+
+@EVIL_STUFF
+`@E`4vil `@S`4tuff
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9So you wanna do some damage ....
+
+     `@S`4 - Steal From Beggars    `@D`4 - Destroy a Car
+     `@B`4 - Burn a School Down    `@R`4 - Break a Window
+     `@P`4 - Poison Water          `@U`4 - United Nations HQ Bombing
+     `@Q`4 - Return To Central Park
+
+@BANK
+`@B`4ank ...`@M`4oney ...`@A`4nd `@S`4tuff ...
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9Money...Yeah...Gotta get some...
+
+     `@D`4 - Deposit In Bank       `@G`4 - Go Steal Some Money
+     `@W`4 - Widthraw From Bank    `@S`4 - Send Money To Others
+     `@Y`4 - Your Stats            `@Q`4 - Return To Central Park
+
+@HEALING
+`@H`4ealing
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9You enter a hospital... that smell is familiar... horrible memories ...
+
+     `@H`4 - Heal Wounds           `@C`4 - Cure STD's
+     `@D`4 - Drug Rehab            `@Y`4 - Yer Stats
+     `@Q`4 - Return To Central Park
+
+@FOOD
+`@F`4ood
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9Well you gotta eat sometime ...
+
+     `@G`4 - Go Eat Out            `@S`4 - Steal Some Food
+     `@E`4 - Eat From Dumpster     `@Y`4 - Your Stats
+     `@Q`4 - Return To Central Park
+
+@DRUGS
+`@D`4rugs
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9You enter the drug strip... This is heaven you say to yerself...
+
+     `@B`4 - Buy Drugs             `@U`4 - Use Some Drugs
+     `@S`4 - Sell Drugs            `@Y`4 - Your Stats
+     `@C`4 - Change Yer Drug       `@Q`4 - Return To Central Park
+
+@ARMS
+`@A`4rm `@Y`4erself
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9You call up a friend of yours ... he deals illegal guns ...
+
+     `@B`4 - Buy Some Weapon       `@S`4 - Sell Your Weapon
+     `@Y`4 - Your Stats            `@L`4 - List Prices
+     `@Q`4 - Return To Central Park
+
+@SEX
+`@G`4et `@L`4aid
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9Looking to score? ...
+
+     `@G`4 - Get Laid              `@R`4 - Rape Somebody
+     `@S`4 - Score Other Players   `@P`4 - Pick Up a Hooker
+     `@B`4 - Buy Some Condoms      `@M`4 - Masturbate
+     `@Y`4 - Your Stats            `@Q`4 - Return To Central Park
+
+@MAIL
+`@M`4ail
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9Ahhh post office ... You could kick some ass here but you hold yerself ...
+
+     `@S`4 - Send Mail             `@R`4 - Read Yer Mail
+     `@A`4 - Anounce Something     `@O`4 - Online Message
+     `@C`4 - Colors Info           `@Q`4 - Return To Central Park
+
+@REST
+`@R`4est `@S`4omewhere
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9So u wanna go to sleep and come back tomorrow ...
+
+     `@C`4 - Cheap Motel...        `@R`4 - Regular Hotel
+     `@E`4 - Expensive Hotel       `@Y`4 - Your Stats
+     `@Q`4 - Return To Central Park
+
+@ENTRY_1
+`@N`4ew `@Y`4ork `@2008
+
+`2By `0Franz
+
+`4Version `@`v `%`w
+`1Copyright 1995, George Lebl
+@ENTRY_2
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+       `@E`4 - Enter The Streets
+       `@L`4 - List Players
+       `@Y`4 - Your Stats
+       `@N`4 - Newz
+       `@Q`4 - Quit I Don't Wanna Die
+
+@P_FIG
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9So you wanna kick some ass ....
+
+     `@K`4 - Kick a Player Ass     `@H`4 - Heal Wounds
+     `@Y`4 - Your Stats            `@T`4 - Take a Drug
+     `@L`4 - List Consious Players `@Q`4 - Return To Central Park
+
+@C_FIG
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9So you wanna kick some cop ass ....
+
+     `@L`4 - Look For Some Cop     `@H`4 - Heal Wounds
+     `@Y`4 - Your Stats            `@T`4 - Take a Drug
+     `@Q`4 - Return To Central Park
+
+@S_FIG
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9So you wanna kick some ass ....
+
+     `@L`4 - Look For Ass To Kick  `@H`4 - Heal Wounds
+     `@Y`4 - Your Stats            `@T`4 - Take a Drug
+     `@Q`4 - Return To Central Park
+
+@ONLINE
+`0O`2nline `0P`2layer `0L`2isting `0F`2or `@N`4ew `@Y`4ork `@2008
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`!Rank: Lvl: Name:                     Points:              S: T:
+@NEWZ
+`%T`3h`9e `%N`3e`9w `%Y`3o`9rk `%T`3i`9mes
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+@LIST
+`0P`2layer `0L`2isting `0F`2or `@N`4ew `@Y`4ork `@2008
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`!Rank: Lvl: Name:                     Points:              S: T:
+@CONSIOUS
+`0C`2onsious `0P`2layer `0L`2isting `0F`2or `@N`4ew `@Y`4ork `@2008
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`!Rank: Lvl: Name:                     Points:              S: T:
+@ATTACK
+`@[A] `4- `@A`4ttack
+`@[T] `4- `@T`4ake `@D`4rug `@A`4nd `@A`4ttack
+`@[K] `4- `@K`4ick
+`@[P] `4- `@P`4unch
+`@[R] `4- `@T`4hrow `@A R`4ock
+`@[G] `4- `@G`4et `@O`4utta `@H`4ere
+`@[Y] `4- `@Y`4er `@S`4tats
+@WIN
+`7Of course blowing up New York with an A-Bomb did wonders to your body ...
+basically what I'm saying is, you DIED... but you completed yer mission ...
+just think of all the people that died with you ...
+@MAINT_RUN
+`@W`4ell the maintanace is running on some other node so please come back
+later, or if it is a one node bbs or the sysop's running the maintanance in
+the nightly batch file then he should delete the MAINT.RUN flag file....
+@WEAPONS
+`%A`2. (price `0         70`2) `0P`2epper `0S`2pray
+`%B`2. (price `0        300`2) `0S`2harp `0S`2tick
+`%C`2. (price `0        600`2) `0S`2crewdriver
+`%D`2. (price `0      1,500`2) `0K`2nife
+`%E`2. (price `0      3,000`2) `0H`2ammer
+`%F`2. (price `0      7,000`2) `0C`2hain
+`%G`2. (price `0     12,000`2) `0L`2ead `0P`2ipe
+`%H`2. (price `0     30,000`2) `0G`2un
+`%I`2. (price `0     70,000`2) `0C`2olt
+`%J`2. (price `0    130,000`2) `0R`2ifle
+`%K`2. (price `0    300,000`2) `0E`2lephant `0G`2un
+`%L`2. (price `0    500,000`2) `0L`2aser `0G`2un
+`%M`2. (price `0    900,000`2) `0N`2ail `0G`2un
+`%N`2. (price `0  2,000,000`2) `0S`2hotgun
+`%O`2. (price `0  5,500,000`2) `0A`2ssault `0R`2ifle
+`%P`2. (price `0  8,000,000`2) `0M`2achine `0G`2un
+`%R`2. (price `0 15,000,000`2) `0P`2roton `0G`2un
+`%S`2. (price `0 30,000,000`2) `0G`2ranade `0L`2auncher
+`%T`2. (price `0 80,000,000`2) `0N`2Neutron `0P`2haser
+`%U`2. (price `0130,000,000`2) `0B`2laster
+`%V`2. (price `0150,000,000`2) `0U`2ltrasound `0G`2un
+`%W`2. (price `0500,000,000`2) `0A`2tomic `0B`2omb
+@COPS
+`@W`4hich one ya wanna attack:
+
+`%0`4. `0Museum Nightguard
+`%1`4. `0School Security Guy
+`%2`4. `0Old Sergant
+`%3`4. `0Regular Street Cop
+`%4`4. `0Motocycle Cop
+`%5`4. `0Detective
+`%6`4. `0Gang Unit Member
+`%7`4. `0Special Assigment Member
+`%8`4. `0Anti Terrorist Unit Guy
+`%9`4. `0SuperCop
+
+@NEW
+`@W`4elcome `@T`4o `@N`4ew `@Y`4ork `@2008
+
+`0T`2his game is quite self explanatory... `0T`2hough here is yer mission...
+`0Y`2ou are the child of terrorism, your grandfathers could only dream of what you
+are about to do ...`0B`2low up `@N`4ew `@Y`4ork `2...
+`0F`2or this you will need an `0ATOMIC BOMB`2... `0A`2nd believe me they're not cheap
+
+`@H`4ere are a few game tips: (read the instructions anywayz! (! in main menu))
+
+`@I`4f you get drug addiction of an addictive drug to 100% you die and heffta start
+over. `@S`4ame with hunger and sexual diseases ... so watch those percentages.
+`@A`4lso read instructions on the efects of drugs ... `@O`4ne more tip, if you
+don't have sex fer a while, your attack force goes down. `@K`4eep it in mind!
+`@C`4olors can be used in messages and in the stuff you say or namez!
+
+@NATION
+`@W`4hat are you....
+
+`01`2. `0H`2eadbanger
+`02`2. `0H`2ippie
+`03`2. `0B`2ig `0F`2at `0D`2ude
+`04`2. `0C`2rack `0A`2ddict
+`05`2. `0P`2unk
+
+@OTHER
+`@O`4ther `@S`4tuff
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9You go and look for something less boring ...
+
+@NEW_NAME
+`@I`4nput yer new name: (`@ENTER`4=abort)
+|------------------------|`0
+@NEW_WIN
+`@W`4hat do you say when you win:
+|--------------------------------------|`0
+@NEW_LOOSE
+`@W`4hat do you say when you get yer ass kicked:
+|--------------------------------------|`0
+@TEN_BEST
+`@T`4en `@B`4est ... `@W`4inners
+
+`1-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`!Rank:    Name:                     Points:
+@TEN_BEST_IBBS
+`@T`4en `@B`4est ... `@W`4inners
+
+`1-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`!Name:                     Points:       Location:
+@BUSTED
+`%BUSTED!!!! ... well the police beat the hell out of you ...
+Why don't you try again tomorrow ...
+Ya lost 2% of yer points!
+@ASS_KICKED
+`%You had yer ass kicked ... oh well that happens
+Come back tomorrow to get revenge ...
+You lost all the money on ya ...
+And 2% of yer points
+@ASS_KICKED_P
+`%You had yer ass kicked ... oh well that happens
+Come back tomorrow to get revenge ...
+Ya lost 8% of yer points
+@ASS_KICKED_O
+`@Y`4a `%LOST`4!!!!
+`@C`4ome back tomorrow to get revenge
+`@8%`4 of yer points lost
+@COLORS_HELP
+`@S`4o ya'd like to use colors, huh?
+
+`@W`4ell its easy. `@T`4hey can be used in mail and the stuff you say.
+
+`@Y`4ou simply type the `%`` `4character and one of the following:
+`11`22`33`44`55`66`77`88`99`00`!!`@@`##`$$`%%
+
+``$Colors ``0RULE
+
+Would look like:
+
+`$Colors `0RULE
+
+`@N`4OTE: `@S`4ame as in `@LORD
+@CH_DRUG
+`01`2. `0P`2ot
+`02`2. `0H`2ash
+`03`2. `0L`2SD
+`04`2. `0C`2oke
+`05`2. `0P`2CP
+`06`2. `0H`2eroin
+
+@LIST_IB_SYS
+`0O`2ther `0C`2ities:
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+@IBBS_MENU
+`@O`4ther `@C`4ities
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9Ya decide ya need to cause some evil in other cities ...
+
+     `@L`4 - List Cities           `@S`4 - Send Mail to Other Cities
+     `@M`4 - Send Money            `@B`4 - Send Mail Bombs
+     `@H`4 - Send Hitmen           `@I`4 - Send Infected Prostitute
+     `@P`4 - Spy on Players        `@D`4 - Look at Spy Database
+     `@X`4 - Have Sex              `@A`4 - Anounce Something in Every City
+     `@Y`4 - Your Stats            `@Q`4 - Return To Central Park
+
+@HITMEN
+`@W`4hich hitman to send:
+
+`@1`4 - `0G`2eorge
+`@2`4 - `0G`2ang `0M`2ember
+`@3`4 - `0M`2afia `0G`2uy
+`@4`4 - `0L`2loyd `0T`2he `0B`2loody
+`@5`4 - `0D`2avid `0K`2oresh
+`@6`4 - `0M`2asked `0F`2ella
+`@Q`4 - `@Q`4uit
+
+@END
+
diff --git a/src/doors/ny2008/menus.rip b/src/doors/ny2008/menus.rip
new file mode 100644
index 0000000000000000000000000000000000000000..1735397d1b67d374bd2e268f76ddc4db8516563e
--- /dev/null
+++ b/src/doors/ny2008/menus.rip
@@ -0,0 +1,320 @@
+@CENTRAL_PARK
+$RIP$
+!|*|1K|w0000000000|Y00000100|1B00000000LC0200000B080300000003000000
+!|1U4Q02HP9N0000|1B00000000LC020000080B0300000003000000|1U4X08HI9H0000|W0|c0A
+!|=00000001|S010A|p07009P004R0R49204N3F4G4O4S4O9P|c02|S0102
+!|p0B001H12171Y1D3E0P4F0W4N0V4N4S3D4G204O0R4A014S|c07|S0107
+!|p040E1C0E0S100S1217|p04241A24002X002X0W|c08|S0108|p052Y0B3P0B3P0R3E0P2Y0X
+!|p04120Z1M0Z1M1B1218|c0B|S010B
+!|p0B00002300231B1Y1D1N1B1N0Y120Y120R0D0R0D1E001G
+!|p072Y004N004N0U4G0W3Q0R3Q0A2Y0A|Y07000400
+!|1B00000200MC02080C0E020A0000080A000000|1U4Z0AHF1F0000<>Central Park
+!|Y00000100|1B00000202ZM02080F0F080700000807000000
+!|1U691WAE292B00<>Street Fights<>S|1U692LAE2Y1V00<>Cop Fights<>C
+!|1U693AAE3N2800<>Player Fights<>P|1UBX1WG2291X00<>Evil Stuff<>E
+!|1UBX2LG22Y1U00<>Bank and Money<>B|1UBY3AG33N2000<>Healing<>H
+!|1U693YAE4B1Y00<>Food<>F|1U694NAE501W00<>Drugs<>D
+!|1U695CAE5P1T00<>Arm Yerself<>A|1U6961AE6E1Z00<>Get Laid<>G
+!|1U6A6QAF732D00<>Use Atomic Bomb<>U|1U697EAE7R2500<>Mail<>M
+!|1U6983AE8G2100<>Change Yer Info<>I|1UBX3YG24B2H00<>Your Stats<>Y
+!|1UBX4NG2502400<>List Players<>L|1UBX5CG25P2F00<>Whos Online<>W
+!|1UBX61G26E2A00<>Rest Somewhere<>R|1UBX6QG2732600<>Newz<>N
+!|1UBX7EG27R0000<>Instructions<>\!|1UBX83G28G2300<>Kill Yerself\!<>K
+!|1U698SAE952700<>Other Stuff<>O|1UBX8SG2952900<>Quit To BBS<>Q|#|#|#
+@CENTRAL_PARK_IB
+$RIP$
+!|*|1K|w0000000000|Y00000100|1B00000000LC0200000B080300000003000000
+!|1U4Q02HP9N0000|1B00000000LC020000080B0300000003000000|1U4X08HI9H0000|W0|c0A
+!|=00000001|S010A|p07009P004R0R49204N3F4G4O4S4O9P|c02|S0102
+!|p0B001H12171Y1D3E0P4F0W4N0V4N4S3D4G204O0R4A014S|c07|S0107
+!|p040E1C0E0S100S1217|p04241A24002X002X0W|c08|S0108|p052Y0B3P0B3P0R3E0P2Y0X
+!|p04120Z1M0Z1M1B1218|c0B|S010B
+!|p0B00002300231B1Y1D1N1B1N0Y120Y120R0D0R0D1E001G
+!|p072Y004N004N0U4G0W3Q0R3Q0A2Y0A|Y07000400
+!|1B00000200MC02080C0E020A0000080A000000|1U4Z0AHF1F0000<>Central Park
+!|Y00000100|1B00000202ZM02080F0F080700000807000000
+!|1U691WAE292B00<>Street Fights<>S|1U692LAE2Y1V00<>Cop Fights<>C
+!|1U693AAE3N2800<>Player Fights<>P|1UBX1WG2291X00<>Evil Stuff<>E
+!|1UBX2LG22Y1U00<>Bank and Money<>B|1UBY3AG33N2000<>Healing<>H
+!|1U693YAE4B1Y00<>Food<>F|1U694NAE501W00<>Drugs<>D
+!|1U695CAE5P1T00<>Arm Yerself<>A|1U6961AE6E1Z00<>Get Laid<>G
+!|1U6A6QAF732D00<>Use Atomic Bomb<>U|1U697EAE7R2500<>Mail<>M
+!|1U6983AE8G2100<>Change Yer Info<>I|1UBX3YG24B2H00<>Your Stats<>Y
+!|1UBX4NG2502400<>List Players<>L|1UBX5CG25P2F00<>Whos Online<>W
+!|1UBX61G26E2A00<>Rest Somewhere<>R|1UBX6QG2732600<>Newz<>N
+!|1UBX7EG27R0000<>Instructions<>\!|1UBX83G28G2300<>Kill Yerself\!<>K
+!|1U0A904F9D2900<>Quit To BBS<>Q
+!|1U698SAE952700<>Other Stuff<>O|1UBX8SG2950000<>Other Cities<>*|#|#|#
+@EVIL_STUFF
+$RIP$
+!|*|1K|w0000000010|W0|c04|Y0A000400|@5I0OEvil Stuff|Y00000100
+!|1B00000202YY02070F0F000800000708000000|1U5B2YBR3J2B00<>Steal From Beggars<>S
+!|1U5B3YBR4J1W00<>Destroy a Car<>D|1U5C4YBS5J1U00<>Burn a School Down<>B
+!|1U5C5YBS6J2A00<>Break a Window<>R|1U5C70BS7L2800<>Poison Water<>P
+!|1U5D80BT8L2F00<>United Nations HQ Bombing<>U
+!|1U5C90BT9L0000<>Return<>Q|#|#|#
+@BANK
+$RIP$
+!|*|1K|w0000000000|W0|c0A|Y0A000A00|@2S01$|c02|Y06000600|@0S04Bank|Y00000100
+!|1B000002027402080F0F080700000807000000|1U600TBE5M0000
+!|1B000002030202080F0F080700000807000000|1U6912B41G0000<>Deposit Money<>D
+!|1U691TB4270000<>Withraw Money<>W|1U692LB42Z0000<>Go Steal Money<>G
+!|1U693DB33R0000<>Send Money To Others<>S|1U6945B34J0000<>Your Stats<>Y
+!|1U694XB25B0000<>Return To Central Park<>Q|#|#|#
+@HEALING
+$RIP$
+!|*|1K|w0000000010|S010F|B001T728P|S010C|B074I6V5T|B2H2H4888|Y00000100
+!|1B00000202KG22000F0E020A0000000A000000|1U7A1TBC2H0000<>Heal Wounds<>H
+!|1B00000202KG22000F0F040C0000000C000000|1UB031F23P0000<>Cure STD's<>C
+!|1B00000202KG22000F0F070E0000000E000000|1U7M4NBO5B0000<>Drug Rehab<>D
+!|1B00000202KG22000F0F030B0000000B000000|1UAH68EJ6W0000<>Yer Stats<>Y
+!|1B00000202KG22000F0F050D0000000D000000|1U9C80DE8O0000<>Get Outta Here<>Q|#|#|#
+@FOOD
+$RIP$
+!|*|1K|w0000000010|Y00000100|1B0000020S8Y02000F0E020A0000000A000000
+!|1U9V19EI1U0000<>Go Eat Out<>G|1B0000020S8Y02000F0B010900000009000000
+!|1U802NCN380000<>Eat From Dumpster<>E|1B0000020S8Y02000F0F070E0000000E000000
+!|1U9Q3ZED4K0000<>Steal Some Food<>S|1B0000020S8Y02000F0F050D0000000D000000
+!|1UB75IFU630000<>Your Stats<>Y|1B0000020S8Y02000F0F040C0000000C000000
+!|1U8171CO7M0000<>Go Away<>Q|1B000002026802000F0F040C0000000C000000
+!|1U6U05759J0000|W0|c0C|Y0A000500|@0K00Food|#|#|#
+@DRUGS
+$RIP$
+!|*|1K|w0000000010|W0|c08|Y01000500|@7E1GDrugs|c00|=00000001|S010A
+!|p042J7D2O7I2U7F2Z6N|p082X6M2W662Y5S355E3M4Q3G5H3768336H
+!|p062Y6M396C3R5Z4C5S3X663F6G|p062Y6L3R6F436F4C6J3P6N346N
+!|p05316M3B6Q3H6V3H70396V|p05316L2Q6L2J6P2F6T2P6Q|p052X6M2M6A2D5U2D592O5T
+!|p042X6L2E681Z672D6H|Y00000100|1B0000020S9602070F0F000800000708000000
+!|1U643ZB04H1U00<>Buy Drugs<>B|1U9V4WER5E2D00<>Use Drugs<>U
+!|1U585TA46B2B00<>Sell Drugs<>S|1U876PD3772H00<>Your Stats<>Y
+!|1U6L7MBH841V00<>Change Yer Drug<>C|1UAW8HFS8Z0000<>Get Outta Here<>Q|#|#|#
+@ARMS
+$RIP$
+!|*|1K|w0000000010|W0|c09|Y07000400|@6R0QArm Yerself
+!|1B00000000LC0200000F000800000008000000|1U6G1XCP990000
+!|1B00000000LC020000000F0800000008000000|1U6N23CI930000|Y00000100
+!|1B0000020S9602070F0F000800000708000000|1U712UBX3C1U00<>Buy a Weapon<>B
+!|1U7141BX4J2B00<>Sell Yer Weapon<>S|1U7159BX5R2H00<>Your Stats<>Y
+!|1U716HBX6Z2400<>List Prices<>L|1U717SBX8A0000<>Go Back<>Q|#|#|#
+@SEX
+$RIP$
+!|*|1K|w0000000010|W0|c03|Y08000400|@2Q0VGet Laid|Y00000100
+!|1B0000020S9602070F0F000800000708000000|1U9809E40R1Z00<>Get Laid<>G
+!|1U841OD0262B00<>Score Other Players<>S|1U1A2R66392A00<>Rape Somebody<>R
+!|1U843GD03Y2800<>Pick Up a Hooker<>P|1U6Z4ZBV5H1U00<>Buy Condoms<>B
+!|1UAO6FFK6X2500<>Masturbate<>M|1U7Z7OCV862H00<>Yer Stats<>Y
+!|1UBP8XGL9F0000<>Get Me Out<>Q|c00|=00000001|S0103|p04109A1E6W4A6W3Z9A
+!|C2M8319|C2M8313|Y07000200|@1K7QTrojan|#|#|#
+@MAIL
+$RIP$
+!|*|1K|w0000000010|W0|c00|=00000001|S010F|p04224R31717A546B2X|L204S7A54
+!|L31706A2Y|c02|Y03000600|@2Y0SMail|Y00000100
+!|1B0000020S9602070F0F000800000708000000|1U6J15BF1N2B00<>Send Mail<>S
+!|1U792LC5332A00<>Read Yer Mail<>R|1U8L40DH4I1T00<>Anounce Something<>A
+!|1U7R5NCN652700<>Online Message<>O|1U4C79987R1V00<>Colors Info<>C
+!|1UCE8YHA9G0000<>Return<>Q|#|#|#
+@REST
+$RIP$
+!|*|1K|w0000000010|W0|c02|Y03000400|@2R0XRest Somewhere|c00|=00000001|S0108
+!|p041A9F448X444G1A4W|p04444C184S0A4A1C4I|p04074E144X147F0V55|c0F|L1J521J5T
+!|L1J5H1R5G|L1S501S5R|O245C00A0060D|L2D4Y2T4V|L2J4Y2J5J|l04394S2Z4U2Z5E3B5C
+!|L2Z553653|l033I4Q3I5B3X58|Y00000100|1B0000020S9602070F0F000800000708000000
+!|1U5H3WAD4E1V00<>Cheap Motel<>C|1U604RAW592A00<>Regular Motel<>R
+!|1U6L5MBH641X00<>Expensive Hotel<>E|1U7G6GCC6Y2H00<>Your Stats<>Y
+!|1U857AD17S0000<>Return<>Q|#|#|#
+@ENTRY_1
+$RIP$
+!|*|1K|w0000000010|W0|c0B|Y00000600|@0302New|c03|@5F01York|c09|@BZ012008|c0C
+!|Y00000100|@041GBy Franz|c0A|@041VVersion `v `w|c04|@042A`r|c02
+!|@042PThis game has been running `d days\!
+!|1B00000202ZM02080F0F080700000807000000|1U5Y4EAD4R1X00<>Enter The Streets<>E
+!|1U5Y50AD5D2400<>List Players<>L|1U5Y5MAD5Z2H00<>Your Stats<>Y
+!|1U5Y68AD6L2600<>Newz<>N|1U5Y6UAD772900<>Quit To BBS<>Q|c0A|Y02000400
+!|@D01C(c) 1995-1996 George Lebl|=00000001|R5G3VAX7Q|#|#|#
+@P_FIG
+$RIP$
+!|*|1K|w0000000010|Y00000100|1B000002027402080F0F080700000807000000
+!|1U041IHD7D0000|1B000002030202080F0F080700000807000000
+!|1U0C5U7N642400<>List Consious Players<>L|1U0C3X7N472000<>Heal Wounds<>H
+!|1U0C4K7N4U2H00<>Your Stats<>Y|1U0C577N5H2C00<>Take a Drug<>T
+!|1U0C6I7N6S2A00<>Return To Central Park<>Q|W0|c0C|Y06000200
+!|@7Y36Hitpoints: `h|@7Y45Fights Left: `f|@7Y57Points: `p|@7Z6AMoney: `m|c01
+!|Y06000500|@0716Player Fights|c0A|=00000001|L072WHB2W|Y00000100
+!|1U0C3A7N3K2300<>Kick a Player Ass<>K|#|#|#
+@C_FIG
+$RIP$
+!|*|1K|w0000000010|Y00000100|1B000002027402080F0F080700000807000000
+!|1U041IHD7D0000|1B000002030202080F0F080700000807000000
+!|1U0B3A7M3K2400<>Look For Some Cop<>L|1U0B427M4C2000<>Heal Wounds<>H
+!|1U0B4V7M552H00<>Your Stats<>Y|1U0B5P7M5Z2C00<>Take a Drug<>T
+!|1U0B6I7M6S2A00<>Return To Central Park<>Q|W0|c0C|Y06000200
+!|@7Y36Hitpoints: `h|@7Y45Fights Left: `f|@7Y57Points: `p|@7Z6AMoney: `m|c01
+!|Y06000500|@0716Cop Fights|c0A|=00000001|L072WHB2W|#|#|#
+@S_FIG
+$RIP$
+!|*|1K|w0000000010|Y00000100|1B000002027402080F0F080700000807000000
+!|1U041IHD7D0000|1B000002030202080F0F080700000807000000
+!|1U0B3A7M3K2400<>Look For Ass To Kick<>L|1U0B427M4C2000<>Heal Wounds<>H
+!|1U0B4V7M552H00<>Your Stats<>Y|1U0B5P7M5Z2C00<>Take a Drug<>T
+!|1U0B6I7M6S2A00<>Return To Central Park<>Q|W0|c0C|Y06000200
+!|@7Y36Hitpoints: `h|@7Y45Fights Left: `f|@7Y57Points: `p|@7Z6AMoney: `m|c01
+!|Y06000500|@0716Street Fights|c0A|=00000001|L072WHB2W|#|#|#
+@ONLINE
+`0O`2nline `0P`2layer `0L`2isting `0F`2or `@N`4ew `@Y`4ork `@2008
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`!Rank: Lvl: Name:                     Points:              S: T:
+@NEWZ
+`%T`3h`9e `%N`3e`9w `%Y`3o`9rk `%T`3i`9mes
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+@LIST
+`0P`2layer `0L`2isting `0F`2or `@N`4ew `@Y`4ork `@2008
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`!Rank: Lvl: Name:                     Points:              S: T:
+@CONSIOUS
+`0C`2onsious `0P`2layer `0L`2isting `0F`2or `@N`4ew `@Y`4ork `@2008
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`!Rank: Lvl: Name:                     Points:              S: T:
+@ATTACK
+`@[A] `4- `@A`4ttack
+`@[T] `4- `@T`4ake `@D`4rug `@A`4nd `@A`4ttack
+`@[K] `4- `@K`4ick
+`@[P] `4- `@P`4unch
+`@[R] `4- `@T`4hrow `@A R`4ock
+`@[G] `4- `@G`4et `@O`4utta `@H`4ere
+`@[Y] `4- `@Y`4er `@S`4tats
+@WIN
+`7Of course blowing up New York with an A-Bomb did wonders to your body ...
+basically what I'm saying is, you DIED... but you completed yer mission ...
+just think of all the people that died with you ...
+@MAINT_RUN
+`@W`4ell the maintanace is running on some other node so please come back
+later, or if it is a one node bbs or the sysop's running the maintanance in
+the nightly batch file then he should delete the MAINT.RUN flag file....
+@WEAPONS
+`%A`2. (price `0         70`2) `0P`2epper `0S`2pray
+`%B`2. (price `0        300`2) `0S`2harp `0S`2tick
+`%C`2. (price `0        600`2) `0S`2crewdriver
+`%D`2. (price `0      1,500`2) `0K`2nife
+`%E`2. (price `0      3,000`2) `0H`2ammer
+`%F`2. (price `0      7,000`2) `0C`2hain
+`%G`2. (price `0     12,000`2) `0L`2ead `0P`2ipe
+`%H`2. (price `0     30,000`2) `0G`2un
+`%I`2. (price `0     70,000`2) `0C`2olt
+`%J`2. (price `0    130,000`2) `0R`2ifle
+`%K`2. (price `0    300,000`2) `0E`2lephant `0G`2un
+`%L`2. (price `0    500,000`2) `0L`2aser `0G`2un
+`%M`2. (price `0    900,000`2) `0N`2ail `0G`2un
+`%N`2. (price `0  2,000,000`2) `0S`2hotgun
+`%O`2. (price `0  5,500,000`2) `0A`2ssault `0R`2ifle
+`%P`2. (price `0  8,000,000`2) `0M`2achine `0G`2un
+`%R`2. (price `0 15,000,000`2) `0P`2roton `0G`2un
+`%S`2. (price `0 30,000,000`2) `0G`2ranade `0L`2auncher
+`%T`2. (price `0 80,000,000`2) `0N`2Neutron `0P`2haser
+`%U`2. (price `0130,000,000`2) `0B`2laster
+`%V`2. (price `0150,000,000`2) `0U`2ltrasound `0G`2un
+`%W`2. (price `0500,000,000`2) `0A`2tomic `0B`2omb
+@COPS
+Not Used For RIP
+@NEW
+`@W`4elcome `@T`4o `@N`4ew `@Y`4ork `@2008
+
+`0T`2his game is quite self explanatory... `0T`2hough here is yer mission...
+`0Y`2ou are the child of terrorism, your grandfathers could only dream of what you
+are about to do ...`0B`2low up `@N`4ew `@Y`4ork `2...
+`0F`2or this you will need an `0ATOMIC BOMB`2... `0A`2nd believe me they're not cheap
+
+`@H`4ere are a few game tips: (read the instructions anywayz! (! in main menu))
+
+`@I`4f you get drug addiction of an addictive drug to 100% you die and heffta start
+over. `@S`4ame with hunger and sexual diseases ... so watch those percentages.
+`@A`4lso read instructions on the efects of drugs ... `@O`4ne more tip, if you
+don't have sex fer a while, your attack force goes down. `@K`4eep it in mind!
+`@C`4olors can be used in messages and in the stuff you say or namez!
+
+@NATION
+Not Used For RIP
+@OTHER
+`@O`4ther `@S`4tuff
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9You go and look for something less boring ...
+
+@NEW_NAME
+`@I`4nput yer new name: (`@ENTER`4=abort)
+|------------------------|`0
+@NEW_WIN
+`@W`4hat do you say when you win:
+|--------------------------------------|`0
+@NEW_LOOSE
+`@W`4hat do you say when you get yer ass kicked:
+|--------------------------------------|`0
+@TEN_BEST
+`@T`4en `@B`4est ... `@W`4inners
+
+`1-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`!Rank:    Name:                     Points:
+@TEN_BEST_IBBS
+`@T`4en `@B`4est ... `@W`4inners
+
+`1-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`!Name:                     Points:       Location:
+@BUSTED
+$RIP$
+!|1B00000000LC0200000F030B0000000B000000|1U1M20FQ6K0000
+!|1B00000000LC020000030F0B0000000B000000|1U1T26FJ6E0000|W0|c0C|Y01000200
+!|@7G2CBUSTED\!\!\!|c04|@2S33Well the police beat the hell out of you\!\!\!
+!|@4W3ZYou lost 2% of yer points\!|@3B4VWhy don't ya come back tommorrow
+!|Y00000100|1B00000202ZM02080F0F080700000807000000
+!|1U215TFA670000<>Press Enter Or Click Here<>^M|#|#|#
+@ASS_KICKED
+`%You had yer ass kicked ... oh well that happens
+Come back tomorrow to get revenge ...
+You lost all the money on ya ...
+And 2% of yer points
+@ASS_KICKED_P
+`%You had yer ass kicked ... oh well that happens
+Come back tomorrow to get revenge ...
+Ya lost 8% of yer points
+@ASS_KICKED_O
+`@Y`4a `%LOST`4!!!!
+`@C`4ome back tomorrow to get revenge
+`@8%`4 of yer points lost
+@COLORS_HELP
+`@S`4o ya'd like to use colors, huh?
+
+`@W`4ell its easy. `@T`4hey can be used in mail and the stuff you say.
+
+`@Y`4ou simply type the `%`` `4character and one of the following:
+`11`22`33`44`55`66`77`88`99`00`!!`@@`##`$$`%%
+
+``$Colors ``0RULE
+
+Would look like:
+
+`$Colors `0RULE
+
+`@N`4OTE: `@S`4ame as in `@LORD
+@CH_DRUG
+Not Used For RIP
+@LIST_IB_SYS
+`0O`2ther `0C`2ities:
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+@IBBS_MENU
+$RIP$
+!|*|1K|w0000000010|W0|c03|Y06000800|@3U0AOther Cities|Y00000100
+!|1B0000020S9602070F0F000800000708000000|1U3T3F8P3X2400<>List Cities<>L
+!|1U993FE53X2B00<>Send Mail<>S|1U3T478P4P2500<>Send Money<>S
+!|1U9947E54P1U00<>Send Mail Bomb<>B|1U3T4Z8P5H2000<>Send Hitmen<>H
+!|1U994ZE55H2100<>Infected Prostitute<>I|1U3T5R8P692800<>Spy on Players<>P
+!|1U995RE5691W00<>Look at Spy DBase<>D|1U3T6J8P712G00<>Have Sex<>X
+!|1U996JE5711T00<>Anounce Something<>A|1U3T7B8P7T2H00<>Yer Stats<>Y
+!|1U997BE57T0000<>Return<>Q|#|#|#
+@HITMEN
+Not Used For RIP
+@END
+
diff --git a/src/doors/ny2008/menusc.dat b/src/doors/ny2008/menusc.dat
new file mode 100644
index 0000000000000000000000000000000000000000..acdc1003ce8b027285c7a00566c656a953bce1cf
--- /dev/null
+++ b/src/doors/ny2008/menusc.dat
@@ -0,0 +1,363 @@
+@CENTRAL_PARK
+`@C`4entral `@P`4ark
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9You find yerself sitting on the grass ... thinking bout yer next move...
+
+     `@S`4 - Street Fights         `@E`4 - Evil Stuff To Do
+     `@C`4 - Cop Fights            `@B`4 - Bank...Money...and Stuff
+     `@P`4 - Player Fights         `@H`4 - Healing
+     `@F`4 - Food                  `@Y`4 - Your Stats
+     `@D`4 - Drugs                 `@W`4 - Who's Online
+     `@A`4 - Arm Yerself           `@L`4 - List Players
+     `@G`4 - Get Laid              `@R`4 - Rest Somewhere
+     `@U`4 - Use Atomic Bomb       `@N`4 - Newz
+     `@M`4 - Mail                  `@O`4 - Other Stuff
+     `@I`4 - Change Yer Info       `0!`2 - Instructions
+     `%X`4 - Help Level Toggle     `0K`2 - Kill Yerself (Start over)
+
+		    `0Q`2 - Quit to BBS
+
+@CENTRAL_PARK_IB
+`@C`4entral `@P`4ark
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9You find yerself sitting on the grass ... thinking bout yer next move...
+
+     `@S`4 - Street Fights         `@E`4 - Evil Stuff To Do
+     `@C`4 - Cop Fights            `@B`4 - Bank...Money...and Stuff
+     `@P`4 - Player Fights         `@H`4 - Healing
+     `@F`4 - Food                  `@Y`4 - Your Stats
+     `@D`4 - Drugs                 `@W`4 - Who's Online
+     `@A`4 - Arm Yerself           `@L`4 - List Players
+     `@G`4 - Get Laid              `@R`4 - Rest Somewhere
+     `@U`4 - Use Atomic Bomb       `@N`4 - Newz
+     `@M`4 - Mail                  `@O`4 - Other Stuff
+     `@I`4 - Change Yer Info       `@*`4 - Other Cities
+     `%X`4 - Help Level Toggle     `0!`2 - Instructions
+
+		    `0K`2 - Kill Yerself (Start over)
+		    `0Q`2 - Quit to BBS
+
+@EVIL_STUFF
+`@E`4vil `@S`4tuff
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9So you wanna do some damage ....
+
+     `@S`4 - Steal From Beggars    `@D`4 - Destroy a Car
+     `@B`4 - Burn a School Down    `@R`4 - Break a Window
+     `@P`4 - Poison Water          `@U`4 - United Nations HQ Bombing
+     `@Q`4 - Return to Central Park
+
+@BANK
+`@B`4ank ...`@M`4oney ...`@A`4nd `@S`4tuff ...
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9Money...Yeah...Gotta get some...
+
+     `@D`4 - Deposit In Bank       `@G`4 - Go Steal Some Money
+     `@W`4 - Widthraw From Bank    `@S`4 - Send Money To Others
+     `@Y`4 - Your Stats            `@Q`4 - Return To Central Park
+
+@HEALING
+`@H`4ealing
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9You enter a hospital... that smell is familiar... horrible memories ...
+
+     `@H`4 - Heal Wounds           `@C`4 - Cure STD's
+     `@D`4 - Drug Rehab            `@Y`4 - Yer Stats
+     `@Q`4 - Return To Central Park
+
+@FOOD
+`@F`4ood
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9Well you gotta eat sometime ...
+
+     `@G`4 - Go Eat Out            `@S`4 - Steal Some Food
+     `@E`4 - Eat From Dumpster     `@Y`4 - Your Stats
+     `@Q`4 - Return To Central Park
+
+@DRUGS
+`@D`4rugs
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9You enter the drug strip... This is heaven you say to yerself...
+
+     `@B`4 - Buy Drugs             `@U`4 - Use Some Drugs
+     `@S`4 - Sell Drugs            `@Y`4 - Your Stats
+     `@C`4 - Change Yer Drug       `@Q`4 - Return To Central Park
+
+@ARMS
+`@A`4rm `@Y`4erself
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9You call up a friend of yours ... he deals illegal guns ...
+
+     `@B`4 - Buy Some Weapon       `@S`4 - Sell Your Weapon
+     `@Y`4 - Your Stats            `@L`4 - List Prices
+     `@Q`4 - Return To Central Park
+
+@SEX
+`@G`4et `@L`4aid
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9Looking to score? ...
+
+     `@G`4 - Get Laid              `@S`4 - Score Other Players
+     `@B`4 - Buy Some Condoms      `@M`4 - Masturbate
+     `@Y`4 - Your Stats            `@Q`4 - Return To Central Park
+
+@MAIL
+`@M`4ail
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9Ahhh post office ...
+
+     `@S`4 - Send Mail             `@R`4 - Read Yer Mail
+     `@A`4 - Anounce Something     `@O`4 - Online Message
+     `@C`4 - Colors Info           `@Q`4 - Return To Central Park
+
+@REST
+`@R`4est `@S`4omewhere
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9So u wanna go to sleep and come back tomorrow ...
+
+     `@C`4 - Cheap Motel...        `@R`4 - Regular Hotel
+     `@E`4 - Expensive Hotel       `@Y`4 - Your Stats
+     `@Q`4 - Return To Central Park
+
+@ENTRY_1
+`@N`4ew `@Y`4ork `@2008
+
+`2By `0Franz
+
+`4Version `@`v `%`w
+`1Copyright 1995, George Lebl
+@ENTRY_2
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+       `@E`4 - Enter The Streets
+       `@L`4 - List Players
+       `@Y`4 - Your Stats
+       `@N`4 - Newz
+       `@Q`4 - Quit I Don't Wanna Die
+
+@P_FIG
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9So you wanna beat someone up ....
+
+     `@K`4 - Fight a Player        `@H`4 - Heal Wounds
+     `@Y`4 - Your Stats            `@T`4 - Take a Drug
+     `@L`4 - List Consious Players `@Q`4 - Return To Central Park
+
+@C_FIG
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9So you wanna beat up some cops ....
+
+     `@L`4 - Look For Some Cop     `@H`4 - Heal Wounds
+     `@Y`4 - Your Stats            `@T`4 - Take a Drug
+     `@Q`4 - Return To Central Park
+
+@S_FIG
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9So you wanna beat up somebody ....
+
+     `@L`4 - Look For Enemies      `@H`4 - Heal Wounds
+     `@Y`4 - Your Stats            `@T`4 - Take a Drug
+     `@Q`4 - Return To Central Park
+
+@ONLINE
+`0O`2nline `0P`2layer `0L`2isting `0F`2or `@N`4ew `@Y`4ork `@2008
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`!Rank: Lvl: Name:                     Points:              S: T:
+@NEWZ
+`%T`3h`9e `%N`3e`9w `%Y`3o`9rk `%T`3i`9mes
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+@LIST
+`0P`2layer `0L`2isting `0F`2or `@N`4ew `@Y`4ork `@2008
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`!Rank: Lvl: Name:                     Points:              S: T:
+@CONSIOUS
+`0C`2onsious `0P`2layer `0L`2isting `0F`2or `@N`4ew `@Y`4ork `@2008
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`!Rank: Lvl: Name:                     Points:              S: T:
+@ATTACK
+`@[A] `4- `@A`4ttack
+`@[T] `4- `@T`4ake `@D`4rug `@A`4nd `@A`4ttack
+`@[K] `4- `@K`4ick
+`@[P] `4- `@P`4unch
+`@[R] `4- `@T`4hrow `@A R`4ock
+`@[G] `4- `@G`4et `@O`4utta `@H`4ere
+`@[Y] `4- `@Y`4er `@S`4tats
+@WIN
+`7Of course blowing up New York with an A-Bomb did wonders to your body ...
+basically what I'm saying is, you DIED... but you completed yer mission ...
+just think of all the people that died with you ...
+@MAINT_RUN
+`@W`4ell the maintanace is running on some other node so please come back
+later, or if it is a one node bbs or the sysop's running the maintanance in
+the nightly batch file then he should delete the MAINT.RUN flag file....
+@WEAPONS
+`%A`2. (price `0         70`2) `0P`2epper `0S`2pray
+`%B`2. (price `0        300`2) `0S`2harp `0S`2tick
+`%C`2. (price `0        600`2) `0S`2crewdriver
+`%D`2. (price `0      1,500`2) `0K`2nife
+`%E`2. (price `0      3,000`2) `0H`2ammer
+`%F`2. (price `0      7,000`2) `0C`2hain
+`%G`2. (price `0     12,000`2) `0L`2ead `0P`2ipe
+`%H`2. (price `0     30,000`2) `0G`2un
+`%I`2. (price `0     70,000`2) `0C`2olt
+`%J`2. (price `0    130,000`2) `0R`2ifle
+`%K`2. (price `0    300,000`2) `0E`2lephant `0G`2un
+`%L`2. (price `0    500,000`2) `0L`2aser `0G`2un
+`%M`2. (price `0    900,000`2) `0N`2ail `0G`2un
+`%N`2. (price `0  2,000,000`2) `0S`2hotgun
+`%O`2. (price `0  5,500,000`2) `0A`2ssault `0R`2ifle
+`%P`2. (price `0  8,000,000`2) `0M`2achine `0G`2un
+`%R`2. (price `0 15,000,000`2) `0P`2roton `0G`2un
+`%S`2. (price `0 30,000,000`2) `0G`2ranade `0L`2auncher
+`%T`2. (price `0 80,000,000`2) `0N`2Neutron `0P`2haser
+`%U`2. (price `0130,000,000`2) `0B`2laster
+`%V`2. (price `0150,000,000`2) `0U`2ltrasound `0G`2un
+`%W`2. (price `0500,000,000`2) `0A`2tomic `0B`2omb
+@COPS
+`@W`4hich one ya wanna attack:
+
+`%0`4. `0Museum Nightguard
+`%1`4. `0School Security Guy
+`%2`4. `0Old Sergant
+`%3`4. `0Regular Street Cop
+`%4`4. `0Motocycle Cop
+`%5`4. `0Detective
+`%6`4. `0Gang Unit Member
+`%7`4. `0Special Assigment Member
+`%8`4. `0Anti Terrorist Unit Guy
+`%9`4. `0SuperCop
+
+@NEW
+`@W`4elcome `@T`4o `@N`4ew `@Y`4ork `@2008
+
+`0T`2his game is quite self explanatory... `0T`2hough here is yer mission...
+`0Y`2ou are the child of terrorism, your grandfathers could only dream of what you
+are about to do ...`0B`2low up `@N`4ew `@Y`4ork `2...
+`0F`2or this you will need an `0ATOMIC BOMB`2... `0A`2nd believe me they're not cheap
+
+`@H`4ere are a few game tips: (read the instructions anywayz! (! in main menu))
+
+`@I`4f you get drug addiction of an addictive drug to 100% you die and heffta start
+over. `@S`4ame with hunger and sexual diseases ... so watch those percentages.
+`@A`4lso read instructions on the efects of drugs ... `@O`4ne more tip, if you
+don't have sex fer a while, your attack force goes down. `@K`4eep it in mind!
+`@C`4olors can be used in messages and in the stuff you say or namez!
+
+@NATION
+`@W`4hat are you....
+
+`01`2. `0H`2eadbanger
+`02`2. `0H`2ippie
+`03`2. `0B`2ig `0F`2at `0D`2ude
+`04`2. `0C`2rack `0A`2ddict
+`05`2. `0P`2unk
+
+@OTHER
+`@O`4ther `@S`4tuff
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9You go and look for something less boring ...
+
+@NEW_NAME
+`@I`4nput yer new name: (`@ENTER`4=abort)
+|------------------------|`0
+@NEW_WIN
+`@W`4hat do you say when you win:
+|--------------------------------------|`0
+@NEW_LOOSE
+`@W`4hat do you say when you get yer ass kicked:
+|--------------------------------------|`0
+@TEN_BEST
+`@T`4en `@B`4est ... `@W`4inners
+
+`1-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`!Rank:    Name:                     Points:
+@TEN_BEST_IBBS
+`@T`4en `@B`4est ... `@W`4inners
+
+`1-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`!Name:                     Points:       Location:
+@BUSTED
+`%BUSTED!!!! ...
+Why don't you try again tomorrow ...
+Ya lost 2% of yer points!
+@ASS_KICKED
+`%You were beaten ... oh well that happens
+Come back tomorrow to get revenge ...
+You lost all the money on ya ...
+And 2% of yer points
+@ASS_KICKED_P
+`%You were beaten ... oh well that happens
+Come back tomorrow to get revenge ...
+Ya lost 8% of yer points
+@ASS_KICKED_O
+`@Y`4a `%LOST`4!!!!
+`@C`4ome back tomorrow to get revenge
+`@8%`4 of yer points lost
+@COLORS_HELP
+`@S`4o ya'd like to use colors, huh?
+
+`@W`4ell its easy. `@T`4hey can be used in mail and the stuff you say.
+
+`@Y`4ou simply type the `%`` `4character and one of the following:
+`11`22`33`44`55`66`77`88`99`00`!!`@@`##`$$`%%
+
+``$Colors ``0RULE
+
+Would look like:
+
+`$Colors `0RULE
+
+`@N`4OTE: `@S`4ame as in `@LORD
+@CH_DRUG
+`01`2. `0P`2ot
+`02`2. `0H`2ash
+`03`2. `0L`2SD
+`04`2. `0C`2oke
+`05`2. `0P`2CP
+`06`2. `0H`2eroin
+
+@LIST_IB_SYS
+`0O`2ther `0C`2ities:
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+@IBBS_MENU
+`@O`4ther `@C`4ities
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9Ya decide ya need to cause some evil in other cities ...
+
+     `@L`4 - List Cities           `@S`4 - Send Mail to Other Cities
+     `@M`4 - Send Money            `@B`4 - Send Mail Bombs
+     `@H`4 - Send Hitmen           `@I`4 - Send Infected Prostitute
+     `@P`4 - Spy on Players        `@D`4 - Look at Spy Database
+     `@X`4 - Have Sex              `@A`4 - Anounce Something in Every City
+     `@Y`4 - Your Stats            `@Q`4 - Return To Central Park
+
+@HITMEN
+`@W`4hich hitman to send:
+
+`@1`4 - `0G`2eorge
+`@2`4 - `0G`2ang `0M`2ember
+`@3`4 - `0M`2afia `0G`2uy
+`@4`4 - `0L`2loyd `0T`2he `0B`2loody
+`@5`4 - `0D`2avid `0K`2oresh
+`@6`4 - `0M`2asked `0F`2ella
+`@Q`4 - `@Q`4uit
+
+@END
diff --git a/src/doors/ny2008/menusc.rip b/src/doors/ny2008/menusc.rip
new file mode 100644
index 0000000000000000000000000000000000000000..1ee696c32143b116c5c610cef33cd50e2d4df43c
--- /dev/null
+++ b/src/doors/ny2008/menusc.rip
@@ -0,0 +1,320 @@
+@CENTRAL_PARK
+$RIP$
+!|*|1K|w0000000000|Y00000100|1B00000000LC0200000B080300000003000000
+!|1U4Q02HP9N0000|1B00000000LC020000080B0300000003000000|1U4X08HI9H0000|W0|c0A
+!|=00000001|S010A|p07009P004R0R49204N3F4G4O4S4O9P|c02|S0102
+!|p0B001H12171Y1D3E0P4F0W4N0V4N4S3D4G204O0R4A014S|c07|S0107
+!|p040E1C0E0S100S1217|p04241A24002X002X0W|c08|S0108|p052Y0B3P0B3P0R3E0P2Y0X
+!|p04120Z1M0Z1M1B1218|c0B|S010B
+!|p0B00002300231B1Y1D1N1B1N0Y120Y120R0D0R0D1E001G
+!|p072Y004N004N0U4G0W3Q0R3Q0A2Y0A|Y07000400
+!|1B00000200MC02080C0E020A0000080A000000|1U4Z0AHF1F0000<>Central Park
+!|Y00000100|1B00000202ZM02080F0F080700000807000000
+!|1U691WAE292B00<>Street Fights<>S|1U692LAE2Y1V00<>Cop Fights<>C
+!|1U693AAE3N2800<>Player Fights<>P|1UBX1WG2291X00<>Evil Stuff<>E
+!|1UBX2LG22Y1U00<>Bank and Money<>B|1UBY3AG33N2000<>Healing<>H
+!|1U693YAE4B1Y00<>Food<>F|1U694NAE501W00<>Drugs<>D
+!|1U695CAE5P1T00<>Arm Yerself<>A|1U6961AE6E1Z00<>Get Laid<>G
+!|1U6A6QAF732D00<>Use Atomic Bomb<>U|1U697EAE7R2500<>Mail<>M
+!|1U6983AE8G2100<>Change Yer Info<>I|1UBX3YG24B2H00<>Your Stats<>Y
+!|1UBX4NG2502400<>List Players<>L|1UBX5CG25P2F00<>Whos Online<>W
+!|1UBX61G26E2A00<>Rest Somewhere<>R|1UBX6QG2732600<>Newz<>N
+!|1UBX7EG27R0000<>Instructions<>\!|1UBX83G28G2300<>Kill Yerself\!<>K
+!|1U698SAE952700<>Other Stuff<>O|1UBX8SG2952900<>Quit To BBS<>Q|#|#|#
+@CENTRAL_PARK_IB
+$RIP$
+!|*|1K|w0000000000|Y00000100|1B00000000LC0200000B080300000003000000
+!|1U4Q02HP9N0000|1B00000000LC020000080B0300000003000000|1U4X08HI9H0000|W0|c0A
+!|=00000001|S010A|p07009P004R0R49204N3F4G4O4S4O9P|c02|S0102
+!|p0B001H12171Y1D3E0P4F0W4N0V4N4S3D4G204O0R4A014S|c07|S0107
+!|p040E1C0E0S100S1217|p04241A24002X002X0W|c08|S0108|p052Y0B3P0B3P0R3E0P2Y0X
+!|p04120Z1M0Z1M1B1218|c0B|S010B
+!|p0B00002300231B1Y1D1N1B1N0Y120Y120R0D0R0D1E001G
+!|p072Y004N004N0U4G0W3Q0R3Q0A2Y0A|Y07000400
+!|1B00000200MC02080C0E020A0000080A000000|1U4Z0AHF1F0000<>Central Park
+!|Y00000100|1B00000202ZM02080F0F080700000807000000
+!|1U691WAE292B00<>Street Fights<>S|1U692LAE2Y1V00<>Cop Fights<>C
+!|1U693AAE3N2800<>Player Fights<>P|1UBX1WG2291X00<>Evil Stuff<>E
+!|1UBX2LG22Y1U00<>Bank and Money<>B|1UBY3AG33N2000<>Healing<>H
+!|1U693YAE4B1Y00<>Food<>F|1U694NAE501W00<>Drugs<>D
+!|1U695CAE5P1T00<>Arm Yerself<>A|1U6961AE6E1Z00<>Get Laid<>G
+!|1U6A6QAF732D00<>Use Atomic Bomb<>U|1U697EAE7R2500<>Mail<>M
+!|1U6983AE8G2100<>Change Yer Info<>I|1UBX3YG24B2H00<>Your Stats<>Y
+!|1UBX4NG2502400<>List Players<>L|1UBX5CG25P2F00<>Whos Online<>W
+!|1UBX61G26E2A00<>Rest Somewhere<>R|1UBX6QG2732600<>Newz<>N
+!|1UBX7EG27R0000<>Instructions<>\!|1UBX83G28G2300<>Kill Yerself\!<>K
+!|1U0A904F9D2900<>Quit To BBS<>Q
+!|1U698SAE952700<>Other Stuff<>O|1UBX8SG2950000<>Other Cities<>*|#|#|#
+@EVIL_STUFF
+$RIP$
+!|*|1K|w0000000010|W0|c04|Y0A000400|@5I0OEvil Stuff|Y00000100
+!|1B00000202YY02070F0F000800000708000000|1U5B2YBR3J2B00<>Steal From Beggars<>S
+!|1U5B3YBR4J1W00<>Destroy a Car<>D|1U5C4YBS5J1U00<>Burn a School Down<>B
+!|1U5C5YBS6J2A00<>Break a Window<>R|1U5C70BS7L2800<>Poison Water<>P
+!|1U5D80BT8L2F00<>United Nations HQ Bombing<>U
+!|1U5C90BT9L0000<>Return<>Q|#|#|#
+@BANK
+$RIP$
+!|*|1K|w0000000000|W0|c0A|Y0A000A00|@2S01$|c02|Y06000600|@0S04Bank|Y00000100
+!|1B000002027402080F0F080700000807000000|1U600TBE5M0000
+!|1B000002030202080F0F080700000807000000|1U6912B41G0000<>Deposit Money<>D
+!|1U691TB4270000<>Withraw Money<>W|1U692LB42Z0000<>Go Steal Money<>G
+!|1U693DB33R0000<>Send Money To Others<>S|1U6945B34J0000<>Your Stats<>Y
+!|1U694XB25B0000<>Return To Central Park<>Q|#|#|#
+@HEALING
+$RIP$
+!|*|1K|w0000000010|S010F|B001T728P|S010C|B074I6V5T|B2H2H4888|Y00000100
+!|1B00000202KG22000F0E020A0000000A000000|1U7A1TBC2H0000<>Heal Wounds<>H
+!|1B00000202KG22000F0F040C0000000C000000|1UB031F23P0000<>Cure STD's<>C
+!|1B00000202KG22000F0F070E0000000E000000|1U7M4NBO5B0000<>Drug Rehab<>D
+!|1B00000202KG22000F0F030B0000000B000000|1UAH68EJ6W0000<>Yer Stats<>Y
+!|1B00000202KG22000F0F050D0000000D000000|1U9C80DE8O0000<>Get Outta Here<>Q|#|#|#
+@FOOD
+$RIP$
+!|*|1K|w0000000010|Y00000100|1B0000020S8Y02000F0E020A0000000A000000
+!|1U9V19EI1U0000<>Go Eat Out<>G|1B0000020S8Y02000F0B010900000009000000
+!|1U802NCN380000<>Eat From Dumpster<>E|1B0000020S8Y02000F0F070E0000000E000000
+!|1U9Q3ZED4K0000<>Steal Some Food<>S|1B0000020S8Y02000F0F050D0000000D000000
+!|1UB75IFU630000<>Your Stats<>Y|1B0000020S8Y02000F0F040C0000000C000000
+!|1U8171CO7M0000<>Go Away<>Q|1B000002026802000F0F040C0000000C000000
+!|1U6U05759J0000|W0|c0C|Y0A000500|@0K00Food|#|#|#
+@DRUGS
+$RIP$
+!|*|1K|w0000000010|W0|c08|Y01000500|@7E1GDrugs|c00|=00000001|S010A
+!|p042J7D2O7I2U7F2Z6N|p082X6M2W662Y5S355E3M4Q3G5H3768336H
+!|p062Y6M396C3R5Z4C5S3X663F6G|p062Y6L3R6F436F4C6J3P6N346N
+!|p05316M3B6Q3H6V3H70396V|p05316L2Q6L2J6P2F6T2P6Q|p052X6M2M6A2D5U2D592O5T
+!|p042X6L2E681Z672D6H|Y00000100|1B0000020S9602070F0F000800000708000000
+!|1U643ZB04H1U00<>Buy Drugs<>B|1U9V4WER5E2D00<>Use Drugs<>U
+!|1U585TA46B2B00<>Sell Drugs<>S|1U876PD3772H00<>Your Stats<>Y
+!|1U6L7MBH841V00<>Change Yer Drug<>C|1UAW8HFS8Z0000<>Get Outta Here<>Q|#|#|#
+@ARMS
+$RIP$
+!|*|1K|w0000000010|W0|c09|Y07000400|@6R0QArm Yerself
+!|1B00000000LC0200000F000800000008000000|1U6G1XCP990000
+!|1B00000000LC020000000F0800000008000000|1U6N23CI930000|Y00000100
+!|1B0000020S9602070F0F000800000708000000|1U712UBX3C1U00<>Buy a Weapon<>B
+!|1U7141BX4J2B00<>Sell Yer Weapon<>S|1U7159BX5R2H00<>Your Stats<>Y
+!|1U716HBX6Z2400<>List Prices<>L|1U717SBX8A0000<>Go Back<>Q|#|#|#
+@SEX
+$RIP$
+!|*|1K|w0000000010|W0|c03|Y08000400|@2Q0VGet Laid|Y00000100
+!|1B0000020S9602070F0F000800000708000000|1U9809E40R1Z00<>Get Laid<>G
+!|1U841OD0262B00<>Score Other Players<>S|1U1A2R66392A00<>Rape Somebody<>R
+!|1U6Z4ZBV5H1U00<>Buy Condoms<>B
+!|1U7Z7OCV862H00<>Yer Stats<>Y
+!|1UBP8XGL9F0000<>Get Me Out<>Q|c00|=00000001|S0103|p04109A1E6W4A6W3Z9A
+!|C2M8319|C2M8313|Y07000200|@1K7QTrojan|#|#|#
+@MAIL
+$RIP$
+!|*|1K|w0000000010|W0|c00|=00000001|S010F|p04224R31717A546B2X|L204S7A54
+!|L31706A2Y|c02|Y03000600|@2Y0SMail|Y00000100
+!|1B0000020S9602070F0F000800000708000000|1U6J15BF1N2B00<>Send Mail<>S
+!|1U792LC5332A00<>Read Yer Mail<>R|1U8L40DH4I1T00<>Anounce Something<>A
+!|1U7R5NCN652700<>Online Message<>O|1U4C79987R1V00<>Colors Info<>C
+!|1UCE8YHA9G0000<>Return<>Q|#|#|#
+@REST
+$RIP$
+!|*|1K|w0000000010|W0|c02|Y03000400|@2R0XRest Somewhere|c00|=00000001|S0108
+!|p041A9F448X444G1A4W|p04444C184S0A4A1C4I|p04074E144X147F0V55|c0F|L1J521J5T
+!|L1J5H1R5G|L1S501S5R|O245C00A0060D|L2D4Y2T4V|L2J4Y2J5J|l04394S2Z4U2Z5E3B5C
+!|L2Z553653|l033I4Q3I5B3X58|Y00000100|1B0000020S9602070F0F000800000708000000
+!|1U5H3WAD4E1V00<>Cheap Motel<>C|1U604RAW592A00<>Regular Motel<>R
+!|1U6L5MBH641X00<>Expensive Hotel<>E|1U7G6GCC6Y2H00<>Your Stats<>Y
+!|1U857AD17S0000<>Return<>Q|#|#|#
+@ENTRY_1
+$RIP$
+!|*|1K|w0000000010|W0|c0B|Y00000600|@0302New|c03|@5F01York|c09|@BZ012008|c0C
+!|Y00000100|@041GBy Franz|c0A|@041VVersion `v `w|c04|@042A`r|c02
+!|@042PThis game has been running `d days\!
+!|1B00000202ZM02080F0F080700000807000000|1U5Y4EAD4R1X00<>Enter The Streets<>E
+!|1U5Y50AD5D2400<>List Players<>L|1U5Y5MAD5Z2H00<>Your Stats<>Y
+!|1U5Y68AD6L2600<>Newz<>N|1U5Y6UAD772900<>Quit To BBS<>Q|c0A|Y02000400
+!|@D01C(c) 1995-1996 George Lebl|=00000001|R5G3VAX7Q|#|#|#
+@P_FIG
+$RIP$
+!|*|1K|w0000000010|Y00000100|1B000002027402080F0F080700000807000000
+!|1U041IHD7D0000|1B000002030202080F0F080700000807000000
+!|1U0C5U7N642400<>List Consious Players<>L|1U0C3X7N472000<>Heal Wounds<>H
+!|1U0C4K7N4U2H00<>Your Stats<>Y|1U0C577N5H2C00<>Take a Drug<>T
+!|1U0C6I7N6S2A00<>Return To Central Park<>Q|W0|c0C|Y06000200
+!|@7Y36Hitpoints: `h|@7Y45Fights Left: `f|@7Y57Points: `p|@7Z6AMoney: `m|c01
+!|Y06000500|@0716Player Fights|c0A|=00000001|L072WHB2W|Y00000100
+!|1U0C3A7N3K2300<>Kick a Player Ass<>K|#|#|#
+@C_FIG
+$RIP$
+!|*|1K|w0000000010|Y00000100|1B000002027402080F0F080700000807000000
+!|1U041IHD7D0000|1B000002030202080F0F080700000807000000
+!|1U0B3A7M3K2400<>Look For Some Cop<>L|1U0B427M4C2000<>Heal Wounds<>H
+!|1U0B4V7M552H00<>Your Stats<>Y|1U0B5P7M5Z2C00<>Take a Drug<>T
+!|1U0B6I7M6S2A00<>Return To Central Park<>Q|W0|c0C|Y06000200
+!|@7Y36Hitpoints: `h|@7Y45Fights Left: `f|@7Y57Points: `p|@7Z6AMoney: `m|c01
+!|Y06000500|@0716Cop Fights|c0A|=00000001|L072WHB2W|#|#|#
+@S_FIG
+$RIP$
+!|*|1K|w0000000010|Y00000100|1B000002027402080F0F080700000807000000
+!|1U041IHD7D0000|1B000002030202080F0F080700000807000000
+!|1U0B3A7M3K2400<>Look For Ass To Kick<>L|1U0B427M4C2000<>Heal Wounds<>H
+!|1U0B4V7M552H00<>Your Stats<>Y|1U0B5P7M5Z2C00<>Take a Drug<>T
+!|1U0B6I7M6S2A00<>Return To Central Park<>Q|W0|c0C|Y06000200
+!|@7Y36Hitpoints: `h|@7Y45Fights Left: `f|@7Y57Points: `p|@7Z6AMoney: `m|c01
+!|Y06000500|@0716Street Fights|c0A|=00000001|L072WHB2W|#|#|#
+@ONLINE
+`0O`2nline `0P`2layer `0L`2isting `0F`2or `@N`4ew `@Y`4ork `@2008
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`!Rank: Lvl: Name:                     Points:              S: T:
+@NEWZ
+`%T`3h`9e `%N`3e`9w `%Y`3o`9rk `%T`3i`9mes
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+@LIST
+`0P`2layer `0L`2isting `0F`2or `@N`4ew `@Y`4ork `@2008
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`!Rank: Lvl: Name:                     Points:              S: T:
+@CONSIOUS
+`0C`2onsious `0P`2layer `0L`2isting `0F`2or `@N`4ew `@Y`4ork `@2008
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`!Rank: Lvl: Name:                     Points:              S: T:
+@ATTACK
+`@[A] `4- `@A`4ttack
+`@[T] `4- `@T`4ake `@D`4rug `@A`4nd `@A`4ttack
+`@[K] `4- `@K`4ick
+`@[P] `4- `@P`4unch
+`@[R] `4- `@T`4hrow `@A R`4ock
+`@[G] `4- `@G`4et `@O`4utta `@H`4ere
+`@[Y] `4- `@Y`4er `@S`4tats
+@WIN
+`7Of course blowing up New York with an A-Bomb did wonders to your body ...
+basically what I'm saying is, you DIED... but you completed yer mission ...
+just think of all the people that died with you ...
+@MAINT_RUN
+`@W`4ell the maintanace is running on some other node so please come back
+later, or if it is a one node bbs or the sysop's running the maintanance in
+the nightly batch file then he should delete the MAINT.RUN flag file....
+@WEAPONS
+`%A`2. (price `0         70`2) `0P`2epper `0S`2pray
+`%B`2. (price `0        300`2) `0S`2harp `0S`2tick
+`%C`2. (price `0        600`2) `0S`2crewdriver
+`%D`2. (price `0      1,500`2) `0K`2nife
+`%E`2. (price `0      3,000`2) `0H`2ammer
+`%F`2. (price `0      7,000`2) `0C`2hain
+`%G`2. (price `0     12,000`2) `0L`2ead `0P`2ipe
+`%H`2. (price `0     30,000`2) `0G`2un
+`%I`2. (price `0     70,000`2) `0C`2olt
+`%J`2. (price `0    130,000`2) `0R`2ifle
+`%K`2. (price `0    300,000`2) `0E`2lephant `0G`2un
+`%L`2. (price `0    500,000`2) `0L`2aser `0G`2un
+`%M`2. (price `0    900,000`2) `0N`2ail `0G`2un
+`%N`2. (price `0  2,000,000`2) `0S`2hotgun
+`%O`2. (price `0  5,500,000`2) `0A`2ssault `0R`2ifle
+`%P`2. (price `0  8,000,000`2) `0M`2achine `0G`2un
+`%R`2. (price `0 15,000,000`2) `0P`2roton `0G`2un
+`%S`2. (price `0 30,000,000`2) `0G`2ranade `0L`2auncher
+`%T`2. (price `0 80,000,000`2) `0N`2Neutron `0P`2haser
+`%U`2. (price `0130,000,000`2) `0B`2laster
+`%V`2. (price `0150,000,000`2) `0U`2ltrasound `0G`2un
+`%W`2. (price `0500,000,000`2) `0A`2tomic `0B`2omb
+@COPS
+Not Used For RIP
+@NEW
+`@W`4elcome `@T`4o `@N`4ew `@Y`4ork `@2008
+
+`0T`2his game is quite self explanatory... `0T`2hough here is yer mission...
+`0Y`2ou are the child of terrorism, your grandfathers could only dream of what you
+are about to do ...`0B`2low up `@N`4ew `@Y`4ork `2...
+`0F`2or this you will need an `0ATOMIC BOMB`2... `0A`2nd believe me they're not cheap
+
+`@H`4ere are a few game tips: (read the instructions anywayz! (! in main menu))
+
+`@I`4f you get drug addiction of an addictive drug to 100% you die and heffta start
+over. `@S`4ame with hunger and sexual diseases ... so watch those percentages.
+`@A`4lso read instructions on the efects of drugs ... `@O`4ne more tip, if you
+don't have sex fer a while, your attack force goes down. `@K`4eep it in mind!
+`@C`4olors can be used in messages and in the stuff you say or namez!
+
+@NATION
+Not Used For RIP
+@OTHER
+`@O`4ther `@S`4tuff
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`9You go and look for something less boring ...
+
+@NEW_NAME
+`@I`4nput yer new name: (`@ENTER`4=abort)
+|------------------------|`0
+@NEW_WIN
+`@W`4hat do you say when you win:
+|--------------------------------------|`0
+@NEW_LOOSE
+`@W`4hat do you say when you get yer ass kicked:
+|--------------------------------------|`0
+@TEN_BEST
+`@T`4en `@B`4est ... `@W`4inners
+
+`1-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`!Rank:    Name:                     Points:
+@TEN_BEST_IBBS
+`@T`4en `@B`4est ... `@W`4inners
+
+`1-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`!Name:                     Points:       Location:
+@BUSTED
+$RIP$
+!|1B00000000LC0200000F030B0000000B000000|1U1M20FQ6K0000
+!|1B00000000LC020000030F0B0000000B000000|1U1T26FJ6E0000|W0|c0C|Y01000200
+!|@7G2CBUSTED\!\!\!|c04|@2S33Well the police beat the hell out of you\!\!\!
+!|@4W3ZYou lost 2% of yer points\!|@3B4VWhy don't ya come back tommorrow
+!|Y00000100|1B00000202ZM02080F0F080700000807000000
+!|1U215TFA670000<>Press Enter Or Click Here<>^M|#|#|#
+@ASS_KICKED
+`%You had yer ass kicked ... oh well that happens
+Come back tomorrow to get revenge ...
+You lost all the money on ya ...
+And 2% of yer points
+@ASS_KICKED_P
+`%You had yer ass kicked ... oh well that happens
+Come back tomorrow to get revenge ...
+Ya lost 8% of yer points
+@ASS_KICKED_O
+`@Y`4a `%LOST`4!!!!
+`@C`4ome back tomorrow to get revenge
+`@8%`4 of yer points lost
+@COLORS_HELP
+`@S`4o ya'd like to use colors, huh?
+
+`@W`4ell its easy. `@T`4hey can be used in mail and the stuff you say.
+
+`@Y`4ou simply type the `%`` `4character and one of the following:
+`11`22`33`44`55`66`77`88`99`00`!!`@@`##`$$`%%
+
+``$Colors ``0RULE
+
+Would look like:
+
+`$Colors `0RULE
+
+`@N`4OTE: `@S`4ame as in `@LORD
+@CH_DRUG
+Not Used For RIP
+@LIST_IB_SYS
+`0O`2ther `0C`2ities:
+
+`2-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+@IBBS_MENU
+$RIP$
+!|*|1K|w0000000010|W0|c03|Y06000800|@3U0AOther Cities|Y00000100
+!|1B0000020S9602070F0F000800000708000000|1U3T3F8P3X2400<>List Cities<>L
+!|1U993FE53X2B00<>Send Mail<>S|1U3T478P4P2500<>Send Money<>S
+!|1U9947E54P1U00<>Send Mail Bomb<>B|1U3T4Z8P5H2000<>Send Hitmen<>H
+!|1U994ZE55H2100<>Infected Prostitute<>I|1U3T5R8P692800<>Spy on Players<>P
+!|1U995RE5691W00<>Look at Spy DBase<>D|1U3T6J8P712G00<>Have Sex<>X
+!|1U996JE5711T00<>Anounce Something<>A|1U3T7B8P7T2H00<>Yer Stats<>Y
+!|1U997BE57T0000<>Return<>Q|#|#|#
+@HITMEN
+Not Used For RIP
+@END
+
diff --git a/src/doors/ny2008/ny2008.ans b/src/doors/ny2008/ny2008.ans
new file mode 100644
index 0000000000000000000000000000000000000000..17bea56734de0dcd448dca718d0dda019521550d
--- /dev/null
+++ b/src/doors/ny2008/ny2008.ans
@@ -0,0 +1,21 @@
+[?7hɻ��ͻ�  ����    �   ���
+����ͼȻ�ɼ   ��Is Installed����    �
+�ȼ��� �ʼ�  ��    On This   �    ��� ����
+��    � ��ͻ   �    ��   �System   �����
+��͹�ͼ�ͼ�ɼ�   � ��
+   �    ��   �  ̹  �   �  �ͻ �ͻ�ͻ�ͻ  ��� �    ��
+��  � � �Ȼ�ͼ � �� ��͹    �  ��۱ �
+  ���    �ÿ �  �����ͼ�ͼ�ͼ����۱ ���
+�   ��  ���´ ô �    �v0.11   � �������� 
+  ������Ŵ ô   ��   �    ��������� �   �    �
+ ����    ����Ŵ ô�  ����������  � �������� ��
+ ����  ������                 �������������� �    �
+���������                 ������  ������������ ������������������
+������������ �  ���������    ���������������������������� �  By
+������������    ������������������������������������ �
+�������������������������   �  ���������������������������� �    Franz
+��������������������������  ������������������������������� �
+����������������������������������������������������������� �
+����������������������������������������������������������� �(c) 1995
+����������������������������������������������������������� �
+����������������������������������������������������������� ���
diff --git a/src/doors/ny2008/ny2008.asc b/src/doors/ny2008/ny2008.asc
new file mode 100644
index 0000000000000000000000000000000000000000..20ed73b924ddd57370d28f49303bd206832ab010
--- /dev/null
+++ b/src/doors/ny2008/ny2008.asc
@@ -0,0 +1,9 @@
+ɻ��ͻ�   �                                              ������������������
+����ͼȻ�ɼ            Is Installed                      �  By
+�ȼ��� �ʼ                          On This              �
+�            � ��ͻ   �                     System       �    Franz
+             �͹�ͼ�ͼ�ɼ                                �
+               �   �  ̹         �ͻ �ͻ�ͻ�ͻ           �
+               �      �Ȼ        �ͼ � �� ��͹           �      (c) 1995
+                                 �����ͼ�ͼ�ͼ           �
+                                         v0.11           ���
diff --git a/src/doors/ny2008/ny2008.avt b/src/doors/ny2008/ny2008.avt
new file mode 100644
index 0000000000000000000000000000000000000000..fc8591f36a082aa86abf7a652b13dd851c8a4aef
--- /dev/null
+++ b/src/doors/ny2008/ny2008.avt
@@ -0,0 +1,22 @@
+ɻ��ͻ�  �� � � �   � � 
+�
+�ͼȻ�ɼ   � �Is Installed � 	� 	� � �
+�ȼ��� �ʼ �  � � On This   � � � � ��� �
+	� � � ��ͻ   � � �   �System   � � �� �
+ � �͹�ͼ�ͼ�ɼ �   �   ��
+   � � �   �  ̹  �   �  �ͻ �ͻ�ͻ�ͻ  � �x�   � � �
+ � 		�  � � 	�Ȼ �ͼ � �� ��͹ �  ��x۱  �
+  � � � � ÿ �  �����ͼ�ͼ�ͼ ��x��۱  � � �
+ �   � �  ���´ ô � �       v0.11   � ���x� 
+  �� 	� ���Ŵ ô   ��   � � ���x�   �   � �
+ ���� � ���Ŵ ô�  ��������� �  � ���x�  � �
+ ����  � ����� �����  � ���x�  	� �
+��� 	��� ����� �  �������x�  �������
+����� �  ��������  � ���������	������x�  �  By
+����� �������� ���������	������x�  �
+���������������   �  ���������	������x�  � Franz
+����������������  ���������������������x�  �
+���������������������������������������x�  �
+���������������������������������������x�  � (	c) 	1995
+���������������������������������������x�  �
+���������������������������������������x�  ���
diff --git a/src/doors/ny2008/nyenm.dat b/src/doors/ny2008/nyenm.dat
new file mode 100644
index 0000000000000000000000000000000000000000..1369987f6c1b4a88fa1a3f28ea53bdf5f50983ab
Binary files /dev/null and b/src/doors/ny2008/nyenm.dat differ
diff --git a/src/doors/ny2008/nyenm.idx b/src/doors/ny2008/nyenm.idx
new file mode 100644
index 0000000000000000000000000000000000000000..265c2357f8676bbcb3194b7ee58d1eb5b8595974
Binary files /dev/null and b/src/doors/ny2008/nyenm.idx differ
diff --git a/src/doors/ny2008/nyenmb.dat b/src/doors/ny2008/nyenmb.dat
new file mode 100644
index 0000000000000000000000000000000000000000..9842227e1eacfc2163e19f69b74d4c7095998da3
Binary files /dev/null and b/src/doors/ny2008/nyenmb.dat differ
diff --git a/src/doors/ny2008/nyenmb.idx b/src/doors/ny2008/nyenmb.idx
new file mode 100644
index 0000000000000000000000000000000000000000..1ee8c80c9e06e75bfaf44ae86038cbf8b9796b5c
Binary files /dev/null and b/src/doors/ny2008/nyenmb.idx differ
diff --git a/src/doors/ny2008/nyinstr.asc b/src/doors/ny2008/nyinstr.asc
new file mode 100644
index 0000000000000000000000000000000000000000..2954a62b738cc489be0561b9884107588662b3db
--- /dev/null
+++ b/src/doors/ny2008/nyinstr.asc
@@ -0,0 +1,222 @@
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`#New York 2008 Instructions:
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+`@First of ... what is the goal of this game. The goal is to blow up New York
+
+`@with an atomic bomb ... don't ask me why ... it's just that yer the player
+`@and you have a sick mind ... I guess. Now to do that you have to go through 
+`@21 levels and fight in street fights, fight off cops, and generally speaking
+`@be evil. That's how you get points.
+
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`#CENTRAL PARK
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+`@This is yer starting point to everything. Here you usually hang out if you
+`@have nothing to do.
+
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+`#CENTRAL PARK MENU
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+`!Street Fights`@ - Go out into streets and look for trouble, kick peoples ass
+`@  ... this is the best way to gain points.
+
+`!Cop Fights`@ - Very similiar, though there are only 10 levels of cops, and
+`@  they are random generated, if you get tired of the same old street dudes.
+`@  They can be easy and they can be very hard to kill.
+
+`!Player Fights`@ - Kick some other player ass. Do I need to say more ...
+
+`!Food`@ - Get something to eat instead of starving to death.
+
+`!Drugs`@ - YES! Buy and use drugs .... drugs can be helpful in many ways.
+`@  They can also kill ya if you take too much.
+
+`!Arm Yerself`@ - Buy Weapons to better kick ass .... buy a better Weapon every
+`@  time you can or you're gonna loose.
+
+`!Get Laid`@ - Of course .... here goes the good part ... you have to have sex
+`@  or your fighting power goes down ... simple enough .... once a day is enough
+`@  to keep you in top shape but can you get laid every day ... ?
+
+`!Use Atomic Bomb`@ - If you got one ... use it and win the game ...
+
+`!Mail`@ - Send mail and stuff ... remember sex with other players is sent through
+`@  mail. You can use the Get Laid menu for that too ...
+
+`!Instructions`@ - Now ... what could be that ... I think I forgot ... duh ...
+
+`!Evil Stuff To Do`@ - Just what it says ... make some damage ... of course you
+`@  can get busted but it's worth the fun and extra points.
+
+`!Bank ... Money ... And Stuff`@ - Well this is where you put money in the bank 
+`@  so you can keep em even if you loose. also try robbing the bank if yer 
+`@  level 1 or over.
+
+`!Healing`@ - Heal yerself .... everything from healing wounds ... to drug rehab 
+`@  to curing STDs ... costs money though.
+
+`!Your Stats`@ - Now let me think what this could be ...
+
+`!Who's Online`@ - This shows ... well ... who's online ...
+
+`!List Players`@ - List all the players ....
+
+`!Rest Somewhere`@ - Check into a hotel so other will have harder time killing ya
+`@  spend more money ...
+
+`!Newz`@ - List the daily newz ...
+
+`!Kill Yerself`@ - Well just what it says ... go and commit suicide and start all
+`@  over.
+
+`!Quit to BBS`@ - Get outta this place ....
+
+`!Help Level Toggle`@ - Toggles between Expert, Regular or Novice mode, I
+`@  recomend the Regular mode, which will display the menu first time you
+`@  enter it. Expert mode will not display menu at all, and Novice will display
+`@  the menu every time. The menu can be displayed by pressing '?'.
+
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`#DRUGS
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+`@Drugs are an important part of what you do ... here is what you acomplish by
+`@using them:
+
+`%POT,HASH,LSD`@ - Every time you raise yer points it will add some more so
+`@you'll get into higher levels quicker. (Depends on the kind of drug and how 
+`@high you are). NOTE: These take away your strength though ... but aren't 
+`@addictive!
+
+`%COKE`@ - Increases yer attack and defense power a bit ... an addictive drug.
+
+`%PCP`@ - Increases yer offensive power by some ... addictive.
+
+`%HEROIN`@ - Increases yer defensive power ... addictive.
+
+`@Addictive drugs add to yer addiction every time you use them ... If you are 
+`@addicted a lot and haven't had any fer a few days your power goes down. But
+`@You will get off of them if you don't use them long enough ... the addiction
+`@drops everytime you play. You can also take drug rehab if you have enough 
+`@money.
+
+`@If drug addiction gets to 100% or over yer dead and heffta start over!!!!
+
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+`#DRUGS MENU
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+`@Here is how the drugs menu works:
+
+`!Buy Drugs`@ - Buy hits of yer current drug.
+
+`!Sell Drugs`@ - Sell a few hits of yer current drug, at a lower price of course.
+
+`!Change Yer Drug`@  - Changes yer drug of choice, to change yer drug you heffta 
+`@  be 0% addicted and you heffta sell all yer hits of yer previous drug.
+
+`!Use Some Drugs`@ - Take a hit of yer current drug. It adds 25% to your high and
+`@  10% addiction if the drug is addictive.
+
+`@Other items are self explanatory.
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`#SEX
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+`@Well in this game to succed you heffta get laid ... generally no girl will go 
+`@with ya if you are in lower levels and you don't have too many sexturns there
+`@either. That's why there is rape and hookers ... 
+
+`@If you don't have sex fer a few days yer power drops.
+
+`@But watch out for diseases. Use condoms to reduce the infection points.
+`@To use condoms, just buy them and they're used everytime you have sex.
+`@Of course there is nothing like safe sex, so you still can get infected,
+`@just not as much.
+
+`@If infected 100% you will die and heffta start over!!!!
+
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+`#GET LAID MENU
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+`!Get Laid`@ - Try to get somebody to willingly have sex with ya ... very low
+`@  probability at low levels.
+
+`!Score Other Players`@ - Get a player of opositte sex to have sex with ya by 
+`@  sending them a note.
+
+`!Buy Some Condoms`@ - Have some safe sex ... have condoms on ya at all times.
+
+`!Your Stats`@ - ...
+
+`!Rape Somebody`@ - Get some fer free ... better chances that otherwise but you
+`@  can also get busted.
+
+`!Pick Up a Hooker`@ - Well this is fer sure but ya heffta pay.
+
+`!Masturbate`@ - Well it only reduces the days since not laid so it's not as good
+`@  as the real thing ...
+
+`!Return To Central Park`@ - ...
+
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`#FOOD
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+`@Well you gotta eat ... there are a few options try'em out. Yer hunger gets
+`@bigger everyday so you heffta eat a lot ... It's usually cheap to get food.
+`@Especially in higher levels.
+
+`@Or you can steal it or eat from dumpster.
+
+`@If your hunger goes over 100% yer dead when you leave the game .... so EAT!!
+
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+`#FOOD MENU
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+`!Go Eat Out`@ - Pay money and go to a restaurant.
+
+`!Eat from the dumpster`@ - loose 1/3 of hitpoints, but it's free.
+
+`!Return to Central Park`@ - Do I gotta say it again ...
+
+`!Steal Some Food`@ - Well get some free food ... if ya can.
+
+`!Your Stats`@ - hmmm ...
+
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`#FIGHTS
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+`@There are a few different fight menus ...
+
+`!Street Fights`@ - Regular fights with programmed enemies.
+
+`!Cop Fights`@ - 10 levels of random Enemies. 
+
+`!Player Fights`@ - Kick some other player's ass.
+
+`@During the fight everything is self explanatory ...
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+`@I don't think the game needs too much explanation ... it's quite straight
+`@forward ...
+
+`@Well that's about it fer now fer instructions .... have fun ....
+
+`%Franz
diff --git a/src/doors/ny2008/nyinstrc.asc b/src/doors/ny2008/nyinstrc.asc
new file mode 100644
index 0000000000000000000000000000000000000000..3c760e978da370f135c97dba0217b64452813ade
--- /dev/null
+++ b/src/doors/ny2008/nyinstrc.asc
@@ -0,0 +1,216 @@
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`#New York 2008 Instructions:
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+`@First of ... what is the goal of this game. The goal is to blow up New York
+`@with an atomic bomb ... don't ask me why ... it's just that yer the player 
+`@and you have a sick mind ... I guess. Now to do that you have to go through 
+`@21 levels and fight in street fights, fight off cops, and generally speaking
+`@be evil. That's how you get points.
+
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`#CENTRAL PARK
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+`@This is yer starting point to everything. Here you usually hang out if you
+`@have nothing to do.
+
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+`#CENTRAL PARK MENU
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+`!Street Fights`@ - Go out into streets and look for trouble, kick peoples ass
+`@  ... this is the best way to gain points.
+
+`!Cop Fights`@ - Very similiar, though there are only 10 levels of cops, and
+`@  they are random generated, if you get tired of the same old street dudes.
+`@  They can be easy and they can be very hard to kill.
+
+`!Player Fights`@ - Beat up some of yer friends. Do I need to say more ...
+
+`!Food`@ - Get something to eat instead of starving to death.
+
+`!Drugs`@ - YES! Buy and use drugs .... drugs can be helpful in many ways.
+`@  They can also kill ya if you take too much.
+
+`!Arm Yerself`@ - Buy Weapons to fight better .... buy a better Weapon every
+`@  time you can or you're gonna loose.
+
+`!Get Laid`@ - Of course .... here goes the good part ... you have to have sex
+`@  or your fighting power goes down ... simple enough .... once a day is enough
+`@  to keep you in top shape but can you get laid every day ... ?
+
+`!Use Atomic Bomb`@ - If you got one ... use it and win the game ...
+
+`!Mail`@ - Send mail and stuff ... remember sex with other players is sent through
+`@  mail. You can use the Get Laid menu for that too ...
+
+`!Instructions`@ - Now ... what could be that ... I think I forgot ... duh ...
+
+`!Evil Stuff To Do`@ - Just what it says ... make some damage ... of course you
+`@  can get busted but it's worth the fun and extra points.
+
+`!Bank ... Money ... And Stuff`@ - Well this is where you put money in the bank
+`@  so you can keep em even if you loose. also try robbing the bank if yer
+`@  level 1 or over.
+
+`!Healing`@ - Heal yerself .... everything from healing wounds ... to drug rehab
+`@  to curing STDs ... costs money though.
+
+`!Your Stats`@ - Now let me think what this could be ...
+
+`!Who's Online`@ - This shows ... well ... who's online ...
+
+`!List Players`@ - List all the players ....
+
+`!Rest Somewhere`@ - Check into a hotel so other will have harder time killing ya
+`@  spend more money ...
+
+`!Newz`@ - List the daily newz ...
+
+`!Kill Yerself`@ - Well just what it says ... go and commit suicide and start all
+`@  over.
+
+`!Quit to BBS`@ - Get outta this place ....
+
+`!Help Level Toggle`@ - Toggles between Expert, Regular or Novice mode, I
+`@  recomend the Regular mode, which will display the menu first time you
+`@  enter it. Expert mode will not display menu at all, and Novice will display
+`@  the menu every time. The menu can be displayed by pressing '?'.
+
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`#DRUGS
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+`@Drugs are an important part of what you do ... here is what you acomplish by
+`@using them:
+
+`%POT,HASH,LSD`@ - Every time you raise yer points it will add some more so
+`@you'll get into higher levels quicker. (Depends on the kind of drug and how
+`@high you are). NOTE: These take away your strength though ... but aren't
+`@addictive!
+
+`%COKE`@ - Increases yer attack and defense power a bit ... an addictive drug.
+
+`%PCP`@ - Increases yer offensive power by some ... addictive.
+
+`%HEROIN`@ - Increases yer defensive power ... addictive.
+
+`@Addictive drugs add to yer addiction every time you use them ... If you are
+`@addicted a lot and haven't had any fer a few days your power goes down. But
+`@You will get off of them if you don't use them long enough ... the addiction
+`@drops everytime you play. You can also take drug rehab if you have enough
+`@money.
+
+`@If drug addiction gets to 100% or over yer dead and heffta start over!!!!
+
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+`#DRUGS MENU
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+`@Here is how the drugs menu works:
+
+`!Buy Drugs`@ - Buy hits of yer current drug.
+
+`!Sell Drugs`@ - Sell a few hits of yer current drug, at a lower price of course.
+
+`!Change Yer Drug`@  - Changes yer drug of choice, to change yer drug you heffta
+`@  be 0% addicted and you heffta sell all yer hits of yer previous drug.
+
+`!Use Some Drugs`@ - Take a hit of yer current drug. It adds 25% to your high and
+`@  10% addiction if the drug is addictive.
+
+`@Other items are self explanatory.
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`#SEX
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+`@Well in this game to succed you heffta get laid ... generally no girl will go
+`@with ya if you are in lower levels and you don't have too many sexturns there
+`@either.
+
+`@If you don't have sex fer a few days yer power drops.
+
+`@But watch out for diseases. Use condoms to reduce the infection points.
+`@To use condoms, just buy them and they're used everytime you have sex.
+`@Of course there is nothing like safe sex, so you still can get infected,
+`@just not as much.
+
+`@If infected 100% you will die and heffta start over!!!!
+
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+`#GET LAID MENU
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+`!Get Laid`@ - Try to get somebody to willingly have sex with ya ... very low
+`@  probability at low levels.
+
+`!Score Other Players`@ - Get a player of opositte sex to have sex with ya by
+`@  sending them a note.
+
+`!Buy Some Condoms`@ - Have some safe sex ... have condoms on ya at all times.
+
+`!Your Stats`@ - ...
+
+`!Masturbate`@ - Well it only reduces the days since not laid so it's not as good
+`@  as the real thing ...
+
+`!Return To Central Park`@ - ...
+
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`#FOOD
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+`@Well you gotta eat ... there are a few options try'em out. Yer hunger gets
+`@bigger everyday so you heffta eat a lot ... It's usually cheap to get food.
+`@Especially in higher levels.
+
+`@Or you can steal it or eat from dumpster.
+
+`@If your hunger goes over 100% yer dead when you leave the game .... so EAT!!
+
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+`#FOOD MENU
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+`!Go Eat Out`@ - Pay money and go to a restaurant.
+
+`!Eat from the dumpster`@ - loose 1/3 of hitpoints, but it's free.
+
+`!Return to Central Park`@ - Do I gotta say it again ...
+
+`!Steal Some Food`@ - Well get some free food ... if ya can.
+
+`!Your Stats`@ - hmmm ...
+
+`2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+`#FIGHTS
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+`@There are a few different fight menus ...
+
+`!Street Fights`@ - Regular fights with programmed enemies.
+
+`!Cop Fights`@ - 10 levels of random Enemies.
+
+`!Player Fights`@ - Fight your friends!
+
+`@During the fight everything is self explanatory ...
+`0-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+`@I don't think the game needs too much explanation ... it's quite straight
+`@forward ...
+
+`@Well that's about it fer now fer instructions .... have fun ....
+
+`%Franz
diff --git a/src/doors/ny2008/nyscores.ans b/src/doors/ny2008/nyscores.ans
new file mode 100644
index 0000000000000000000000000000000000000000..edcb24f25aa84d5f9df26981fc170991de9960ee
--- /dev/null
+++ b/src/doors/ny2008/nyscores.ans
@@ -0,0 +1,5 @@
+Player Listing For New York 2008
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+Rank: Lvl: Name:                     Points:              S: T:
+1     0    Deuce                     11                   M  HEADBANGER    
diff --git a/src/doors/ny2008/nyscores.asc b/src/doors/ny2008/nyscores.asc
new file mode 100644
index 0000000000000000000000000000000000000000..ca95b5dedd3ea457ea6cafd412531593352a984b
--- /dev/null
+++ b/src/doors/ny2008/nyscores.asc
@@ -0,0 +1,5 @@
+Player Listing For New York 2008
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+Rank: Lvl: Name:                     Points:              S: T:
+1     0    Deuce                     11                   M  HEADBANGER   
diff --git a/src/doors/ny2008/otherc.rip b/src/doors/ny2008/otherc.rip
new file mode 100644
index 0000000000000000000000000000000000000000..40f5cfc718ddf317c2e1a8e28e48d493d202fcd9
--- /dev/null
+++ b/src/doors/ny2008/otherc.rip
@@ -0,0 +1,8 @@
+!|*|1K|w0000000010|W0|c03|Y06000800|@3U0AOther Cities|Y00000100
+!|1B0000020S9402070F0F000800000708000000|1U3T3F8P3X2400<>List Cities<>L
+!|1U993FE53X2B00<>Send Mail<>S|1U3T478P4P2500<>Send Money<>S
+!|1U9947E54P1U00<>Send Mail Bomb<>B|1U3T4Z8P5H2000<>Send Hitmen<>H
+!|1U994ZE55H2100<>Infected Prostitute<>I|1U3T5R8P692800<>Spy on Players<>P
+!|1U995RE5691W00<>Look at Spy DBase<>D|1U3T6J8P712G00<>Have Sex<>X
+!|1U996JE5711T00<>Anounce Something<>A|1U3T7B8P7T2H00<>Yer Stats<>Y
+!|1U997BE57T0000<>Return<>Q|#|#|#
\ No newline at end of file
diff --git a/src/doors/ny2008/pfight.rip b/src/doors/ny2008/pfight.rip
new file mode 100644
index 0000000000000000000000000000000000000000..8df14f634884f3146cac3d94c983df2015fd4b0d
--- /dev/null
+++ b/src/doors/ny2008/pfight.rip
@@ -0,0 +1,8 @@
+!|*|1K|Y00000100|1B000002027402080F0F080700000807000000|1U041IHD7D0000
+!|1B000002030002080F0F080700000807000000
+!|1U0C5U7N642400<>List Consious Players<>L|1U0C3X7N472000<>Heal Wounds<>H
+!|1U0C4K7N4U2H00<>Your Stats<>Y|1U0C577N5H2C00<>Take s Drug<>T
+!|1U0C6I7N6S2A00<>Return To Central Park<>Q|W0|c0C|Y06000200
+!|@7Y36Hitpoints: `h|@7Y45Fights Left: `f|@7Y57Points: `p|@7Z6AMoney: `m|c01
+!|Y06000500|@0716Player Fights|c0A|=00000001|L072WHB2W|Y00000100
+!|1U0C3A7N3K2300<>Kick a Player Ass<>K|#|#|#
diff --git a/src/doors/ny2008/register.doc b/src/doors/ny2008/register.doc
new file mode 100644
index 0000000000000000000000000000000000000000..a21b11566b78fa4b9be09f2b864144aaa1ce3767
--- /dev/null
+++ b/src/doors/ny2008/register.doc
@@ -0,0 +1 @@
+It's free do whatever you want with it!
diff --git a/src/doors/ny2008/restm.rip b/src/doors/ny2008/restm.rip
new file mode 100644
index 0000000000000000000000000000000000000000..8d89330e1cc3636410b861851f26703b5a37a33f
--- /dev/null
+++ b/src/doors/ny2008/restm.rip
@@ -0,0 +1,7 @@
+!|*|1K|w0000000010|W0|c02|Y03000400|@2R0XRest Somewhere|c00|=00000001|S0108
+!|p041A9F448X444G1A4W|p04444C184S0A4A1C4I|p04074E144X147F0V55|c0F|L1J521J5T
+!|L1J5H1R5G|L1S501S5R|O245C00A0060D|L2D4Y2T4V|L2J4Y2J5J|l04394S2Z4U2Z5E3B5C
+!|L2Z553653|l033I4Q3I5B3X58|Y00000100|1B0000020S9402070F0F000800000708000000
+!|1U5H3WAD4E1V00<>Cheap Motel<>C|1U604RAW592A00<>Regular Motel<>R
+!|1U6L5MBH641X00<>Expensive Hotel<>E|1U7G6GCC6Y2H00<>Your Stats<>Y
+!|1U857AD17S0000<>Return<>Q|#|#|#
\ No newline at end of file
diff --git a/src/doors/ny2008/sample.cfg b/src/doors/ny2008/sample.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..4c775625d2f28cc8dbd1905907d10620033caa47
--- /dev/null
+++ b/src/doors/ny2008/sample.cfg
@@ -0,0 +1,441 @@
+; NY2008 configuration file
+;
+; Save this file as NY2008.CFG if you want to use it!
+;
+; If You have multiple configuration files start them with the -C command
+; line option. 'NY2008.CFG' is the deafault and will be read if the -C
+; option is not specified.
+;
+; Any text following a semi-colon (;), and blank lines, are ignored.
+;
+;------------------------------------------------------------------------------
+;
+;  BBS system directory. Indicates where the door information file (drop file)
+;  can be found. Remove the semi-colon (;) to activate this option.
+;  You can activate this to  the door look for the drop files here or you
+;  can pass this directory through the command line. I recomend not using
+;  this option and using the command line instead, that way you don't have to
+;  have several .cfg files. (command line -Pc:\path)
+;
+;BBSDir    C:\BBS
+;
+;------------------------------------------------------------------------------
+;
+;  The door's working directory. This is where the door's system files are
+;  located. Remove the semi-colon (;) to activate this option.
+;  You can run multiple games when you create a different cfg file and set
+;  each path different, then all the datafiles will be read from that 
+;  directory. Or if you want to have the data directory different.
+;  All the door files have to be located in this directory, basically this
+;  means copy all the files into this directory except the .doc files, the
+;  .exe file and the ny_jpsrc.zip file. Also the registration key file, 
+;  "KEY.REG" has to be located in this directory. Run the register.exe 
+;  program in this directory!
+;
+;DoorDir    C:\BBS\NY2008
+;
+;------------------------------------------------------------------------------
+;
+;  The flag file directory. This is where the temporary files are stored. I 
+;  would recomend it to be a RAM disk if you have one as this will make the
+;  game run faster. If it is nopt enabled the game direcory will be used.
+;  Remove the semi-colon (;) to activate this option.
+;
+;FlagDirectory  E:\NY2008
+;
+;------------------------------------------------------------------------------
+;
+;  Check other flags, for multiline messages while waiting for a key every so
+;  minutes. This olny aplies to when the game sits and waits for user input.
+;  It defaults to 2. (it can be anywhere from 1 to 60 seconds) The higher it
+;  is the faster the game would be, but the less REAL TIME and if it's higher
+;  than 10 online stuff (fights, messages) starts to be slow for people!
+;
+CheckFlagsEvery 2
+;
+;------------------------------------------------------------------------------
+;
+;  If DO NOT have a multitasking enviroment (Desqview, OS/2 ... ) uncomment 
+;  this option!
+;
+;NoMultitasker
+;
+;  You can fine tune the polling by changing the value here. 1500 is 
+;  recomended. Only used if multitasker support is enabled above!
+;
+PollingValue 1500
+;
+;------------------------------------------------------------------------------
+;
+;  Local mode override. Forces door to always operate in local test mode.
+;  Remove the semi-colon (;) to activate this option. When this mode is
+;  activated, no door information file is required and default settings are
+;  used for the user's name, location, etc.
+;  This is also done by the -L command line option. (recomended)
+;
+;LocalMode
+;
+;------------------------------------------------------------------------------
+;
+;  If you run a single node only bbs, you can de-activate file flagging,
+;  temporary file storing, and file locking by activating this option.
+;  This will give you a slight speed increase as it does not need to check
+;  for other nodes, online messages, online fight challanges or maintanance on
+;  another node. If there is any reason two people should be on-line or there
+;  is any other program, at the same time, that's working with the game files,
+;  I do not recomend this. If you do not have a Multitasking Enviroment or
+;  another computer using the drives (Novell Net,...), then it is safe to
+;  turn this option on. Remove the semi-colon (;) to activate this option.
+;
+;SingleNodeOnly
+;
+;------------------------------------------------------------------------------
+;
+;  Door personality setting. This setting selects one of a number of sysop
+;  interface personalities. Each personality setting emulates the status line
+;  format and sysop function keys of a particular BBS package. You can turn on 
+;  any personality from the NY2008 personality. To switch to "NY2008" 
+;  personality online press Alt-[F1]. Valid personality settings are:
+;
+;                     NY2008              (Player stats)
+;                     Standard            (OpenDoors style, similar to RA 1.11)
+;                     PCBoard
+;                     RemoteAccess
+;                     Wildcat
+;
+Personality    NY2008
+;
+;------------------------------------------------------------------------------
+;
+;  Inter-BBS! ... These options control the InterBBS capabilities of NY2008
+;  make sure you also copy the SAMPLEIB.CFG to INTERBBS.CFG in your game
+;  directory and edit it with your information. Read INTERBBS.DOC for more
+;  Info. The InterBBS option works only for registered sysops of NY2008.
+;
+;  If InterBBS is enabled, uncomment this option by removing the semicolon.
+;InterBBS
+;
+;  If you are the InterBBS "operator" BBS uncomment this option. There can
+;  be only one operator bbs and it's the one that controls the nodelists
+;InterBBSOperator
+;
+;  Put down the game number you are joining here, from 0-32000. Make sure
+;  you put down the right game number here. All members of a game must have
+;  the same number here.
+InterBBSGameNumber  0
+;
+;------------------------------------------------------------------------------
+;
+;  Game options, here you can specify how many fights is given to every player
+;  per day, and in how many days to delete inactive players. Only those days
+;  when somebody plays count. (registered version only)
+;
+FightsPerDay   20
+DeleteAfter    15
+;
+;  The daily percantage interest players get from the money in bank.
+;  (registered version only, 0 if unregistered)
+;
+BankInterest   5
+;
+;------------------------------------------------------------------------------
+;
+;  You can edit the probability of being busted here. First edit the
+;  percentage of the chance of being busted then if the the player is not
+;  busted, the SuccessChance percentage what is the chance of being
+;  successfull. (e.g. BustedChance is 33, so the player is caught 1/3 of the
+;  time he tries to do this. SuccessChance is 50 means if he is not busted
+;  he is successfull half the time ... this is simple ... 1/3 of the
+;  time he is busted, 1/3 of the time he is successfull and 1/3 of the time
+;  he is not busted but not successfull. (registered version only)
+;  Remove the semi-colon (;) to activate these options.
+;
+;  Bank robbing:
+;BustedChanceBank      33
+;SuccessChanceBank     50
+;
+;  Food stealing:
+;BustedChanceFood      33
+;SuccessChanceFood     50
+;
+;  Raping:
+;BustedChanceRape      33
+;SuccessChanceRape     50
+;
+;  Stealing from beggars:
+;BustedChanceBeggar    20
+;SuccessChanceBeggar   50
+;
+;  Smashing up a car (evil stuff and fight event):
+;BustedChanceCar       33
+;SuccessChanceCar      65
+;
+;  Burning down a school:
+;BustedChanceSchool    33
+;SuccessChanceSchool   50
+;
+;  Breaking a window:
+;BustedChanceWindow    20
+;SuccessChanceWindow   95
+;
+;  Poisoning water:
+;BustedChancePoison    25
+;SuccessChancePoison   33
+;
+;  United Nations HQ bombing:
+;BustedChanceBomb      25
+;SuccessChanceBomb     33
+;
+;------------------------------------------------------------------------------
+;
+;  You can give credits for registering the door, by typing the name in here.
+;  Remove the semi-colon (;) to activate this option.
+;
+;RegCreditTo    Nobody
+;
+;------------------------------------------------------------------------------
+;
+;  ScoreFiles are created everytime on door exit. Set the path and filename  
+;  in here.
+;
+AnsiScores     nyscores.ans
+AsciiScores    nyscores.asc
+;
+;  Remove the semicolon (;) to prevent NY2008 from creating scorefiles at all.
+;
+;NoScoreFiles
+;
+;------------------------------------------------------------------------------
+;
+;  This is obscelete, from now on just create a 3rdmnt.bat and that will be
+;  executed each time after the maintanance is run. Try to make this fast since
+;  the maintanance is usually run when the first user logs on that day ...
+;  If you want to send remote output, there is a "3rdmnt.inf" file created,
+;  it has the same format as the IGM dropfile, so look at that in the
+;  3rdparty.doc file. this only works if you use the 3rdmnt.bat file it will
+;  not work with this option!
+;
+;  I RECOMMEND NOT TO USE THIS OPTION AND USE THE 3RDMNT.BAT DESCRIBED ABOVE!!
+;
+;  After maintanance program, this variable is for third party software that
+;  needs to be run after the maintanance, give the full path and name of the
+;  program and it will be executed after the maintanance is run each day.
+;  Note, on multinode systems the other nodes will be still stopped even 
+;  while this program runs as it is the exxtention to the maintanance.
+;  Remove the semi-colon (;) to activate this option.
+;  
+;MaintExec     c:\bbs\third.exe
+;
+;------------------------------------------------------------------------------
+;
+;  Memory swapping options. These options are generally not needed, but can be
+;  used to customize NY2008's swapping behaviour. "SwappingDir" can be used
+;  to specify which directory or directories should be used for swapping.
+;  Multiple directory paths can be seperated using a semi-colon.
+;  "SwappingNoEMS" can be used to prevent any swapping from being done to EMS
+;  memory, and "SwappingDisable" can be used to disable memory swapping
+;  altogether. Swapping is usedon the third party maintanance above or on the
+;  IGM's. Remove the semi-colon (;) to activate any of these options.
+;
+;SwappingDir    C:\
+;SwappingNoEMS
+;SwappingDisable
+;
+;------------------------------------------------------------------------------
+;
+;  BBS node number that door is running on. Only used if NY2008 is unable
+;  to determine the node number by some other means.
+;  (the -N command line option or the dropfile) I recomend passing the -N
+;  option and the -P option to NY2008 for a multinode system, instead of 
+;  creating more config files.
+;
+;Node    1
+;
+;------------------------------------------------------------------------------
+;
+;  Maximum length of time a user is permitted to access NY2008. If the user's
+;  total remaining time on the BBS is less than this value, the user will only
+;  be permitted to access the door for this shorter length of time. 
+;  When this option is disabled, the user will be permitted to use the full
+;  of their remaining time on the BBS within the door. Remove the semi-colon 
+;  (;) to activate this option.
+;
+;MaximumDoorTime    15
+;
+;------------------------------------------------------------------------------
+;
+;  Inactivity timeout. Specifies the maximum number of seconds that may elapse
+;  without the user pressing any key, before the user will be automatically
+;  disconnected. A value of 0 disables inactivity timeouts.
+;
+InactivityTimeout    300
+;
+;------------------------------------------------------------------------------
+;
+;  Name of the sysop. Put the sysop's name or handle in here.
+;  It does not matter what name you registered the game in, only the BBS name
+;  has to match ... this name is used as a default name in local logins, if you
+;  press enter when NY2008 asks for name when using the -L option. If the
+;  LocalMode option is specified in this .CFG file, the game will not ask for
+;  name and will just use this one.
+;
+SysopName    Franz
+;
+;------------------------------------------------------------------------------
+;
+;  Name of the BBS. You have to supply this information correctly. It has to
+;  match the name you sent in with your registration, in order to enable all
+;  the registered features!
+;
+SystemName    Franz's BBS
+;
+;------------------------------------------------------------------------------
+;
+;  Serial port options. Setting these is known to cause trouble, so you are
+;  better off if the the bbs software you have can pass these in the drop
+;  file! These options are generally not needed, as these settings can usually
+;  be determined from the BBS door information file. "LockedBPS" specifies the
+;  the BPS rate at which the door should communicate with the modem.
+;  "SerialPort" specifies the port port number that the modem is connected to.
+;  Unless you have reassigned the port numbers through your FOSSIL drive,
+;  port 0 corresponds to COM1, port 1 corresponds to COM2, and so on. Remove
+;  the semi-colon (;) to activate either of these options.
+;
+;  The LockedBPS setting is not read in by default, if you are using fossil 
+;  drivers. If you have any problems with people getting grabage, or the game
+;  is too slow, include the "-RDBPS" command line option and put the Locked 
+;  BPS rate here and remove the semi-colon (;)
+;
+;LockedBPS    38400
+;SerialPort    0
+;
+;
+;  Normally, a FOSSIL driver is used for serial I/O if one is available. If
+;  a FOSSIL driver has not been loaded, the door communicates directly with
+;  the modem. Removing the semi-colon (;) from the "NoFossil" option causes
+;  the door to always communicate directly with the modem, bypassing any
+;  FOSSIL driver.
+;
+;NoFossil
+;
+;------------------------------------------------------------------------------
+;
+;  The following options only apply if a FOSSIL driver is NOT being used for
+;  serial communications. If a FOSSIL driver IS being used, these options
+;  are normally set on the FOSSIL driver command line.
+;
+;  Hexidecimal address of the serial port. This address can usually be
+;  determined automatically for ports COM1, COM2, COM3, and COM4, and is
+;  normally only required for ports COM5 and higher. Remove the semi-colon
+;  (;) to activate this option.
+;
+;PortAddress 2F8
+;
+;
+;  Interrupt request line that the serial port is using. May be any IRQ line
+;  from 1 to 15. By default, IRQ line 4 is used for ports COM1: and COM3:,
+;  while IRQ line 3 is used for all other ports. Remove the semi-colon (;)
+;  to activate this option.
+;
+;PortIRQ 4
+;
+;
+;  Serial I/O buffer sizes. "ReceiveBuffer" specifies the number of bytes in
+;  the serial I/O receive buffer. You may want to increase this buffer size
+;  if you find that characters being sent from the user's modem are being lost.
+;  "TransmitBuffer" specifies the number of bytes in the serial I/O transmit
+;  buffer. You may want to increase this buffer size for improved performance
+;  in some multitasking environments.
+;
+ReceiveBuffer 256
+TransmitBuffer 1024
+;
+;
+;  UART FIFO buffers. Normally, NY2008 will use 16550A UART FIFO buffers
+;  if they are available. You can prevent NY2008 from using the FIFO
+;  buffers, even if they are available, by removing the semi-colon before
+;  the "NoFIFO" keyword. The "FIFOTriggerSize" specifies how many characters
+;  may be placed in the FIFO buffers before an serial I/O interrupt is
+;  envoked. Valid values are 1, 4, 8 and 14 bytes. The default value is 4
+;  bytes.
+;
+;NoFIFO
+FIFOTriggerSize 4
+;
+;------------------------------------------------------------------------------
+;
+;  Custom door information file support. NY2008 automatically recognizes
+;  most door information file (drop file) formats, including DORINFO?.DEF,
+;  EXITINFO.BBS, DOOR.SYS, SFDOORS.DAT, CALLINFO.BBS and CHAIN.TXT. However,
+;  to permit NY2008 to operate on BBS systems that produce a different format
+;  file, you may define a custom door information file format. A custom door
+;  information file format is defined using the "CustomFileName" command,
+;  followed by one or more lines beginning with the "CustomFileLine" command.
+;
+;  The "CustomFileName" option specifies the filename used to distinguish this
+;  file format from other file formats. This filename should not include a
+;  path. To specify the path where the door information file is located, use
+;  the BBSDir setting, near the beginning of this file. If the filename of the
+;  custom format is the same as that of one of the built-in formats, the custom
+;  format will override the built-in format.
+;
+;  The actual format of the custom file is specified using a number of lines
+;  that begin with the keyword "CustomFileLine". Each of these lines will
+;  correspond to a single line in the door information file, with the option
+;  following the "CustomFileLine" keyword specifying the information that can
+;  be found on that line. This can be one of the following keywords:
+;
+;                    Ignore - Causes the next line in the door information
+;                             file to be ignored. Use on lines for which none
+;                             of the options below apply.
+;                   ComPort - COM? port the modem is connected to
+;                             (0 indicates local mode)
+;                FossilPort - Fossil port number the modem is connected to
+;                  ModemBPS - BPS rate at which to communicate with modem
+;                             (0 or non-numerical value indicates local mode)
+;                 LocalMode - 1, T or Y if door is operating in local mode
+;                  UserName - Full name of the user
+;             UserFirstName - First name(s) of the user
+;              UserLastName - Last name of the user
+;                     Alias - The user's psuedonym / handle
+;                 HoursLeft - Hours user has left online
+;               MinutesLeft - Minutes user has left online, or time left online
+;                             in format hh:mm
+;               SecondsLeft - Seconds user has left online, or time left online
+;                             in format hh:mm:ss or format mm:ss
+;                             (If more than one of the above time options are
+;                             used, the user time left is taken to be the total
+;                             of all of these values.)
+;                      ANSI - 1, T, Y or G for ANSI graphics mode
+;                    AVATAR - 1, T or Y for AVATAR graphics mode
+;                       RIP - 1, T or Y for RIP graphics mode
+;               PagePausing - 1, T or Y if user wishes a pause at end of screen
+;              ScreenLength - Number of lines on user's screen
+;            ScreenClearing - 1, T or Y if screen clearing mode is on
+;                  Security - The user's security level / access level
+;                      City - City the user is calling from
+;                      Node - Node number user is connected to
+;                 SysopName - Full name of the sysop
+;            SysopFirstName - The sysop's first name(s)
+;             SysopLastName - The sysop's last name
+;                SystemName - Name of the BBS
+;
+;
+; Same format as DORINFO?.DEF
+; Remove semicolons to use example!
+;
+;CustomFileName    EXAMPLE.DEF                     
+;CustomFileLine    SystemName
+;CustomFileLine    SysopFirstName
+;CustomFileLine    SysopLastName
+;CustomFileLine    ComPort
+;CustomFileLine    ModemBPS
+;CustomFileLine    Ignore
+;CustomFileLine    UserFirstName
+;CustomFileLine    UserLastName
+;CustomFileLine    City
+;CustomFileLine    ANSI
+;CustomFileLine    Security
+;CustomFileLine    MinutesLeft
+;
+;------------------------------------------------------------------------------
diff --git a/src/doors/ny2008/sample.lst b/src/doors/ny2008/sample.lst
new file mode 100644
index 0000000000000000000000000000000000000000..ecfeb324fc4c95ad6984703070355d3a9d69cf6a
--- /dev/null
+++ b/src/doors/ny2008/sample.lst
@@ -0,0 +1,17 @@
+;SAMPLE Node List File ... 
+;
+;If you are the "operator" bbs, edit this file, and name it NYNODE.LST, other
+;wise you should automatically recieve this file from the "operator"
+;
+;This is how a node list should look like .... You can have comments in the
+;node list if you wish ...
+;
+LinkWith        1:111/1
+LinkName        BBS Name Here
+LinkLocation    Location Of the BBS
+
+LinkWith        2:222/2
+LinkName        Cool BBS
+LinkLocation    Anytown, AA
+
+
diff --git a/src/doors/ny2008/sfight.rip b/src/doors/ny2008/sfight.rip
new file mode 100644
index 0000000000000000000000000000000000000000..966f426e142533f195bc48914e132cc99fa0b6c7
--- /dev/null
+++ b/src/doors/ny2008/sfight.rip
@@ -0,0 +1,7 @@
+!|*|1K|Y00000100|1B000002027402080F0F080700000807000000|1U041IHD7D0000
+!|1B000002030002080F0F080700000807000000
+!|1U0B3A7M3K2400<>Look For Ass To Kick<>L|1U0B427M4C2000<>Heal Wounds<>H
+!|1U0B4V7M552H00<>Your Stats<>Y|1U0B5P7M5Z2C00<>Take s Drug<>T
+!|1U0B6I7M6S2A00<>Return To Central Park<>Q|W0|c0C|Y06000200
+!|@7Y36Hitpoints: `h|@7Y45Fights Left: `f|@7Y57Points: `p|@7Z6AMoney: `m|c01
+!|Y06000500|@0716Street Fights|c0A|=00000001|L072WHB2W|#|#|#
\ No newline at end of file
diff --git a/src/doors/ny2008/src/Makefile b/src/doors/ny2008/src/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..f6d491235c397333632986ec559b941a21f8d9e0
--- /dev/null
+++ b/src/doors/ny2008/src/Makefile
@@ -0,0 +1,65 @@
+CC	= gcc
+CXX	= g++
+UIFC_SRC	=	../../../uifc
+XPDEV_SRC	=	../../../xpdev
+ODOOR_SRC	=	../../../odoors
+CCFLAGS += -O2
+CCFLAGS += -g
+CCFLAGS += -I${ODOOR_SRC} -L${ODOOR_SRC} -I${XPDEV_SRC} -I${UIFC_SRC}
+# Needed for struct alignment!
+CCFLAGS += -fshort-enums
+
+all : ny2008 aedit nyibbs nyedit medit
+
+filewrap.o:
+	$(CC) $(CCFLAGS) -c ${XPDEV_SRC}/filewrap.c
+
+dirwrap.o:
+	$(CC) $(CCFLAGS) -c ${XPDEV_SRC}/dirwrap.c
+
+genwrap.o:
+	$(CC) $(CCFLAGS) -c ${XPDEV_SRC}/genwrap.c
+
+ciowrap.o:
+	$(CC) $(CCFLAGS) -c ${UIFC_SRC}/ciowrap.c
+
+fights.o : fights.cpp fights.h ny2008.h
+	$(CXX) $(CCFLAGS) -c fights.cpp
+
+ibbsny.o : ibbsny.cpp ibbsny.h ny2008.h
+	$(CXX) $(CCFLAGS) -c ibbsny.cpp
+
+igmsup.o : igmsup.cpp ny2008.h
+	$(CXX) $(CCFLAGS) -c igmsup.cpp
+
+second.o : second.cpp ny2008.h
+	$(CXX) $(CCFLAGS) -c second.cpp
+
+chatadd.o : chatadd.cpp ny2008.h
+	$(CXX) $(CCFLAGS) -c chatadd.cpp
+
+ny2008.o : ny2008.cpp
+	$(CXX) $(CCFLAGS) -c ny2008.cpp
+
+ny2008 : ny2008.o ibbsny.o second.o igmsup.o ibbsny.o fights.o dirwrap.o filewrap.o genwrap.o ciowrap.o chatadd.o
+	$(CXX) $(CCFLAGS) ciowrap.o ny2008.o chatadd.o dirwrap.o filewrap.o genwrap.o fights.o ibbsny.o igmsup.o second.o -lcurses -lODoors -lm -o ../ny2008
+
+aedit : aedit.cpp
+	$(CXX) $(CCFLAGS) aedit.cpp -o ../aedit
+
+medit : medit.cpp
+	$(CXX) $(CCFLAGS) medit.cpp -o ../medit
+
+nyibbs : nyibbs.cpp ibbsny.o filewrap.o genwrap.o dirwrap.o
+	$(CXX) $(CCFLAGS) nyibbs.cpp ibbsny.o filewrap.o genwrap.o dirwrap.o -o ../nyibbs
+
+nyedit : nyedit.cpp nyedit.h filewrap.o genwrap.o dirwrap.o ciowrap.o
+	$(CXX) $(CCFLAGS) nyedit.cpp filewrap.o genwrap.o dirwrap.o ciowrap.o -lcurses -lODoors -lm -o ../nyedit
+
+clean :
+	rm -f *.o
+	rm -f ../ny2008
+	rm -f ../medit
+	rm -f ../aedit
+	rm -f ../nyibbs
+	rm -f ../nyedit
diff --git a/src/doors/ny2008/src/aedit.cpp b/src/doors/ny2008/src/aedit.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..7676b3b751d5c27a724e7a9f043aa79cfbeceb71
--- /dev/null
+++ b/src/doors/ny2008/src/aedit.cpp
@@ -0,0 +1,92 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include <OpenDoor.h>	// WORD, DWORD, INT16, and INT32
+
+#include "filename.h"
+#include "structs.h"
+
+#define LEVELS 21
+
+void dump(void);
+
+void
+main(void)
+{
+  FILE *justfile;
+  enemy erec;
+  enemy_idx eidx;
+  char key;
+  INT16 num=0;
+  INT16 lvl=0;
+  INT16 cnt;
+  char nnm[36];
+//  system("ren "ENEMY_FILENAME" nyenmb.dat");
+//  system("ren "ENEMY_INDEX" nyenmb.idx");
+    system("del "ENEMY_FILENAME);
+    system("del "ENEMY_INDEX);
+
+  eidx.first_enemy[0]=0;
+  do {
+//    printf("\nA-Add N-Next level Q-Quit>");
+    scanf("%c",&key);
+    dump();
+
+    if (key=='A' || key=='a') {
+  //    printf("Name of the sucker:");
+      cnt=0;
+      do {
+	scanf("%c",&key);
+	erec.name[cnt]=key;
+	cnt++;
+      } while (key!='\n' && key!='\r' && cnt<36);
+      erec.name[cnt-1]=0;
+      if (key!='\n' && key!='\r') dump();
+
+    //  printf("Hitpoints:");
+      scanf("%ld",&erec.hitpoints);
+      dump();
+
+    //  printf("Strength:");
+      scanf("%ld",&erec.strength);
+      dump();
+
+    //  printf("Defense:");
+      scanf("%ld",&erec.defense);
+      dump();
+
+    //  printf("Arm:");
+      scanf("%d",&erec.arm);
+
+      dump();
+
+      justfile=fopen(ENEMY_FILENAME,"a+b");
+   //   printf("Atpos: %d\n\n",ftell(justfile)/sizeof(enemy));
+      fwrite(&erec,sizeof(enemy),1,justfile);
+      fclose(justfile);
+
+      num++;
+    } else if (key=='N' || key=='n') {
+      eidx.last_enemy[lvl]=num;
+      lvl++;
+      eidx.first_enemy[lvl]=num;
+    }
+  } while (key!='q' && key!='Q');
+  eidx.last_enemy[lvl]=(--num);
+  justfile=fopen(ENEMY_INDEX,"wb");
+  fwrite(&eidx,sizeof(enemy_idx),1,justfile);
+  fclose(justfile);
+  printf("\nDone!");
+}
+
+void
+dump(void)
+{
+  char key;
+  do {
+    scanf("%c",&key);
+  } while (key!='\n');
+}
+
+
diff --git a/src/doors/ny2008/src/chatadd.cpp b/src/doors/ny2008/src/chatadd.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8f21b71344b4e61fe0272a7b725e5300b7fde4ad
--- /dev/null
+++ b/src/doors/ny2008/src/chatadd.cpp
@@ -0,0 +1,305 @@
+#include "ny2008.h"
+
+//void ny_clr_scr(void);
+void chat_new_line(void);
+extern INT16 rip;
+extern unsigned _stklen;
+				    /* FULL-SCREEN CHAT CUSTOMIZATION OPTIONS */
+
+char window_colour[2]={0x0b,0x0c};        /* Text colour used for each person */
+char bar_colour=0x70;                      /* Colour of window seperation bar */
+char top_line[2]={1,13};       /* Specifies location of each window on screen */
+char bottom_line[2]={11,23};          /* Line number of bottom of each window */
+char bar_line=12;                     /* Line number of window seperation bar */
+char scroll_distance=9;            /* Distance to scroll window when required */
+char cursor_window;                     /* FULL-SCREEN CHAT INTERNAL VARIABLES */
+char current_word[2][81];
+INT16 word_length[2];
+INT16 cursor_col[2];
+INT16 cursor_line[2];
+unsigned char key;
+INT16 old_chat_key;
+INT16 command[2]={FALSE,FALSE}; /*no commands being used*/
+
+						 /* FULL-SCREEN CHAT FUNCTION */
+void fullscreen_chat(void)
+   {
+   cursor_window=0;                                /* Reset working variables */
+   word_length[0]=word_length[1]=0;
+   cursor_col[0]=cursor_col[1]=1;
+   cursor_line[0]=top_line[0];
+   cursor_line[1]=top_line[1];
+
+
+
+
+			  /* If ANSI or AVATAR graphics mode is not available */
+   if(!od_control.user_ansi && !od_control.user_avatar)
+      {
+      od_chat();                /* Then use OpenDoor's line chat mode instead */
+      return;
+      }
+
+   old_chat_key=od_control.key_chat;       /* Prevent internal chat mode from */
+   od_control.key_chat=0;                                    /* being invoked */
+						      /* DRAW THE CHAT SCREEN */
+   od_set_attrib(window_colour[0]);
+   ny_clr_scr();                                          /* Clear the screen */
+
+//   char numstr[100];
+
+   if(rip==FALSE) {
+     od_set_cursor(bar_line,1);                   /* Draw window seperation bar */
+     od_set_attrib(bar_colour);
+     od_clr_line();
+     od_printf("  `black white`Top : `blue white`%s  `black white`Bottom : `blue white`%s  `red white`'/' = Command",
+	     od_control.user_name,
+	     od_control.sysop_name);
+   } else {
+     od_printf("`black black`");
+
+     od_disp_str("\n\r!|*|1K|w0000270N12|Y00000100|1B00000202ZK02080F0F080700000807000000\n\r");
+     od_disp_str("!|1UDK4CHK4M0000<>Command<>^M/|1B000002027402080F0F080700000807000000\n\r");
+     od_disp_str("!|1U044CD44M0000|W0|c09|Y00000100|@0D4E");
+     od_printf("Top : %s  Bottom : %s|#|#|#\n\r  \b\b",od_control.user_name,od_control.sysop_name);
+     gotoxy(1,bar_line);                   /* Draw window seperation bar */
+     textbackground(WHITE);
+     clreol();
+     textcolor(BLACK);
+     cprintf("  Top : ");
+     textcolor(BLUE);
+     cprintf("%s  ",od_control.user_name);
+     textcolor(BLACK);
+     cprintf("Bottom : ");
+     textcolor(BLUE);
+     cprintf("%s  ",od_control.sysop_name);
+     textcolor(RED);
+     cprintf("'/' = Command");
+   }
+
+   od_set_cursor(top_line[0],1);     /* Locate cursor where typing will begin */
+   od_set_attrib(window_colour[0]);            /* Set appropriate text colour */
+
+							    /* MAIN CHAT LOOP */
+   for(;;)                              /* (Repeats for each character typed) */
+      {
+      key=(char)od_get_key(TRUE);         /* Get next keystroke from keyboard */
+
+						     /* CHECK FOR SYSOP ABORT */
+      if(key==27 && od_control.od_last_input==1)    /* If sysop pressed [ESC] */
+	 {
+	 od_set_attrib(0x07);                         /* Reset display colour */
+	 ny_clr_scr();                                    /* Clear the screen */
+	 od_control.key_chat=old_chat_key;    /* Re-enable internal chat mode */
+
+	 return;                                     /* Exit full-screen chat */
+	 }
+
+						      /* CHECK FOR NEW TYPIST */
+      if(od_control.od_last_input!=cursor_window) /* If new person typing now */
+	 {                             /* Switch cursor to appropriate window */
+	 cursor_window=od_control.od_last_input;        /* Set current typist */
+
+						 /* Move cursor to new window */
+	 od_set_cursor(cursor_line[cursor_window],cursor_col[cursor_window]);
+
+	 od_set_attrib(window_colour[cursor_window]);   /* Change text colour */
+	 }
+
+
+      if(command[od_control.od_last_input]==TRUE) 		         /* if user enabled the command mode */
+	 {
+	 if (key=='L' || key=='l') {
+	    if (od_control.od_last_input==1) {
+	      printf("\r");
+	      printf("                                                           \r");
+	      od_printf("`bright green`%s `dark green`laughs...",od_control.sysop_name);
+	      chat_new_line();                                /* Move to next line */
+	      command[1]=FALSE;
+	    } else {
+	      od_disp("\r",1,FALSE);
+	      od_disp("                                                           \r",60,FALSE);
+	      od_printf("`bright green`%s `dark green`laughs...",od_control.user_name);
+	      chat_new_line();                                /* Move to next line */
+	      command[0]=FALSE;
+	    }
+	    key=0;
+	 }
+	 else if (key=='S' || key=='s') {
+	    if (od_control.od_last_input==1) {
+	      printf("\r");
+	      printf("                                                           \r");
+	      od_printf("`bright green`%s `dark green`sighs...",od_control.sysop_name);
+	      chat_new_line();                                /* Move to next line */
+	      command[1]=FALSE;
+	    } else {
+	      od_disp("\r",1,FALSE);
+	      od_disp("                                                           \r",60,FALSE);
+	      od_printf("`bright green`%s `dark green`sighs...",od_control.user_name);
+	      chat_new_line();                                /* Move to next line */
+	      command[0]=FALSE;
+	    }
+	    key=0;
+	 }
+	 else if (key=='W' || key=='w') {
+	    if (od_control.od_last_input==1) {
+	      printf("\r");
+	      printf("                                                           \r");
+	      od_printf("`bright green`%s `dark green`winks at `bright green`%s`dark green`...",od_control.sysop_name,od_control.user_name);
+	      chat_new_line();                                /* Move to next line */
+	      command[1]=FALSE;
+	    } else {
+	      od_disp("\r",1,FALSE);
+	      od_disp("                                                           \r",60,FALSE);
+	      od_printf("`bright green`%s `dark green`winks at `bright green`%s`dark green`...",od_control.user_name,od_control.sysop_name);
+	      chat_new_line();                                /* Move to next line */
+	      command[0]=FALSE;
+	    }
+	    key=0;
+	 }
+	 else if (key=='C' || key=='c') {
+	    if (od_control.od_last_input==1) {
+	      printf("\r");
+	      printf("                                                           \r");
+	      od_printf("`bright green`%s `dark green`is crying...",od_control.sysop_name);
+	      chat_new_line();                                /* Move to next line */
+	      command[1]=FALSE;
+	    } else {
+	      od_disp("\r",1,FALSE);
+	      od_disp("                                                           \r",60,FALSE);
+	      od_printf("`bright green`%s `dark green`is crying...",od_control.user_name);
+	      chat_new_line();                                /* Move to next line */
+	      command[0]=FALSE;
+	    }
+	    key=0;
+	 }
+	 else {
+	    if (od_control.od_last_input==1) {
+	      cprintf("\r");
+	      cprintf("                                                           \r");
+	      command[1]=FALSE;
+	    } else {
+	      od_disp("\r",1,FALSE);
+	      od_disp("                                                           \r",60,FALSE);
+	      command[0]=FALSE;
+	    }
+	    key=0;
+	 }
+	 od_set_attrib(window_colour[cursor_window]);   /* Change text colour */
+      }
+
+
+      else if (key=='/') 		         /* if user enabled the command mode */
+	 {
+	 if(cursor_col[cursor_window] == 1)       /* only if at left of screen */
+	 {
+	    if (od_control.od_last_input==1) {
+	      textcolor(WHITE);
+	      textbackground(BLACK);
+	      cprintf("Do what: (L=Laugh, S=Sigh, W=Wink, C=Cry, Other=Continue) >");
+	      command[1]=TRUE;
+	    } else {
+	      if(rip==FALSE)
+		od_disp("Do what: (L=Laugh, S=Sigh, W=Wink, C=Cry, Other=Continue) >",59,FALSE);
+	      else
+		od_disp("\r!|10000((*Command::L@Laugh,S@Sigh,W@Wink,C@Cry,^M@Continue))|#|#|#\n\r",69,FALSE);
+	      command[0]=TRUE;
+	    }
+	    key=0;
+	 }
+      }
+
+      if(key==13 || key==10)            /* IF USER PRESSED [ENTER] / [RETURN] */
+	 {
+	 word_length[cursor_window]=0;       /* Enter constitutes end of word */
+
+	 chat_new_line();                                /* Move to next line */
+	 }
+
+      else if(key==8)                            /* IF USER PRESS [BACKSPACE] */
+	 {
+	 if(cursor_col[cursor_window] > 1)        /* If not at left of screen */
+	    {
+	    --cursor_col[cursor_window];     /* Move cursor back on character */
+	    if(word_length[cursor_window] > 0) --word_length[cursor_window];
+	    od_printf("\b \b");           /* Erase last character from screen */
+	    }
+	 }
+
+
+      else if(key==32)                             /* IF USER PRESSED [SPACE] */
+	 {
+	 word_length[cursor_window]=0;     /* [Space] constitutes end of word */
+
+	 if(cursor_col[cursor_window]==79)               /* If at end of line */
+	    chat_new_line();                      /* Move cursor to next line */
+	 else                                        /* If not at end of line */
+	    {
+	    ++cursor_col[cursor_window];         /* Increment cursor position */
+	    od_putch(32);                                  /* Display a space */
+	    }
+         }
+
+
+      else if(key>32)                  /* IF USER TYPED A PRINTABLE CHARACTER */
+	 {                                  /* PERFORM WORD WRAP IF NECESSARY */
+	 if(cursor_col[cursor_window]==79)     /* If cursor is at end of line */
+            {
+						/* If there is a word to wrap */
+	    if(word_length[cursor_window]>0 && word_length[cursor_window]<78)
+	       {
+					  /* Move cursor to beginning of word */
+               od_set_cursor(cursor_line[cursor_window],
+			  cursor_col[cursor_window]-word_length[cursor_window]);
+
+	       od_clr_line();                 /* Erase word from current line */
+
+               chat_new_line();                   /* Move cursor to next line */
+
+							    /* Redisplay word */
+	       od_disp(current_word[cursor_window],word_length[cursor_window],
+									  TRUE);
+	       cursor_col[cursor_window]+=word_length[cursor_window];
+	       }
+
+	    else                             /* If there is no word to "wrap" */
+	       {
+               chat_new_line();                   /* Move cursor to next line */
+               word_length[cursor_window]=0;              /* Start a new word */
+               }
+            }
+
+					     /* ADD CHARACTER TO CURRENT WORD */
+			       /* If there is room for more character in word */
+	 if(strlen(current_word[cursor_window])<79)      /* Add new character */
+	    current_word[cursor_window][word_length[cursor_window]++]=key;
+
+					     /* DISPLAY NEWLY TYPED CHARACTER */
+	 ++cursor_col[cursor_window];
+	 od_putch(key);
+	 }
+      }
+   }
+
+
+
+	       /* FUNCTION USED BY FULL-SCREEN CHAT TO START A NEW INPUT LINE */
+void chat_new_line(void)
+   {                                      /* If cursor is at bottom of window */
+   if(cursor_line[cursor_window]==bottom_line[cursor_window])
+      {                                /* Scroll window up one line on screen */
+      od_scroll(1,top_line[cursor_window],79, bottom_line[cursor_window],
+		scroll_distance, 0);
+      cursor_line[cursor_window]-=(scroll_distance - 1);
+      }
+
+   else                               /* If cursor is not at bottom of window */
+      {
+      ++cursor_line[cursor_window];              /* Move cursor down one line */
+      }
+
+                                          /* Move cursor's position on screen */
+   od_set_cursor(cursor_line[cursor_window],cursor_col[cursor_window]=1);
+
+   od_set_attrib(window_colour[cursor_window]);         /* Change text colour */
+   }
diff --git a/src/doors/ny2008/src/const.h b/src/doors/ny2008/src/const.h
new file mode 100644
index 0000000000000000000000000000000000000000..a508e0f041e9a25f3b69b5d5b3e823d7d0358fa7
--- /dev/null
+++ b/src/doors/ny2008/src/const.h
@@ -0,0 +1,27 @@
+#ifndef _CONST_H_
+#define _CONST_H_
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#define MAX_USERS               30000
+#define FILE_ACCESS_MAX_WAIT    40
+#define LEVELS                  21
+#define PROG_NAME_CHARS    35
+#define PATH_CHARS         80
+#define FILENAME_CHARS     12
+#define MESSAGE_SUBJECT    "##NY2008 v0.10 IBBS Door Message"
+#define MESSAGE_PID        "\1PID: ODIBMS 1\r"
+#define MAX_LINE_LENGTH    70
+#define MESSAGE_HEADER     "$"
+#define MESSAGE_FOOTER     "$"
+#define DELIMITER_CHAR     '$'
+#define NODE_ADDRESS_CHARS 23
+#define SYSTEM_NAME_CHARS  40
+#define LOCATION_CHARS     40
+
+#endif
diff --git a/src/doors/ny2008/src/fights.cpp b/src/doors/ny2008/src/fights.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c5ec3f5b72fa2d84803db7d11ca714e4377823bf
--- /dev/null
+++ b/src/doors/ny2008/src/fights.cpp
@@ -0,0 +1,5311 @@
+
+#include "ny2008.h"
+#include "fights.h"
+
+extern unsigned _stklen;
+
+INT32 menu_index[END];
+//extern INT16 fast_mail;
+extern INT16 no_rip_m;
+extern INT16 expert;
+extern INT16 single_node;
+extern char c_dir_g;
+extern INT16 no_forrest_IGM;
+
+extern INT16 busted_ch_bank;
+extern INT16 busted_ch_food;
+extern INT16 busted_ch_rape;
+extern INT16 busted_ch_beggar;
+extern INT16 busted_ch_car;
+extern INT16 busted_ch_school;
+extern INT16 busted_ch_window;
+extern INT16 busted_ch_poison;
+extern INT16 busted_ch_bomb;
+extern INT16 success_ch_bank;
+extern INT16 success_ch_food;
+extern INT16 success_ch_rape;
+extern INT16 success_ch_beggar;
+extern INT16 success_ch_car;
+extern INT16 success_ch_school;
+extern INT16 success_ch_window;
+extern INT16 success_ch_poison;
+extern INT16 success_ch_bomb;
+extern INT16 clean_mode;
+extern INT16 nCurrentUserNumber;
+extern user_rec cur_user;
+extern enemy enemy_rec;
+extern char uname[36];
+extern INT16 do_maint;
+extern char str[15];
+extern INT16 expert;
+extern INT16 rip;
+extern char *t_buffer;
+extern char *ver;
+extern char *verinfo;
+extern INT16 gamedisk,flagdisk;
+extern char gamedir[MAX_PATH],flagdir[MAX_PATH];
+extern char c_dir_g;
+extern INT16 no_wrt_sts;
+extern INT16 no_kernel;
+
+
+//extern struct door_info;
+
+
+/*
+void	fight_ops(void);
+char	fight();
+void	attack_ops(void);
+char	attack();
+INT16     attack_points();
+INT16	monster_hit();
+INT16	xp_random();
+void	attack_sequence();
+  */
+
+void any_attack_ops(user_rec *user_on, char fight_name[], char en_name[], INT32 en_hitpoints, INT32 en_strength, INT32 en_defense, weapon en_arm)
+{
+	INT32 hit_s; //the attacking stregth
+	INT32 def_s;
+	INT32 en_hit_s;
+	INT32 en_def_s;
+
+	FILE *justfile;
+	//enemy_idx eidx;
+       //	INT16 first,last;//,moneis;
+	INT32 intval;
+       //	enemy erec;
+	char key;
+
+	wrt_sts();
+
+	od_printf("\n\r\n");
+
+	ny_clr_scr();
+
+
+	ny_line(201,0,0);
+//	You meet
+	ny_disp_emu(en_name);
+	ny_line(202,0,2);
+//	 ...
+	ny_line(203,0,0);
+//	H`4e got a bad lokin' `0");
+	print_arm(en_arm);
+
+
+//	INT32 enhitp;
+//	enhitp=en_hitpoints;
+
+	do {
+
+	  bam_af:
+
+//	  ny_line(204,3,2);
+//	  ny_disp_emu("\n\r\n\n\r`@S`4treet `@F`4ight\n\r\n`0");
+	  od_disp_str("\n\n\n\r");
+	  ny_disp_emu(fight_name);
+	  od_disp_str("\n\n\r");
+	  od_set_attrib(0x0a);
+	  ny_disp_emu(en_name);
+	  ny_line(205,0,0);
+//	  ny_disp_emu("'s `@H`4itpoints:");
+	  od_printf("%s",D_Num(en_hitpoints));
+	  ny_line(206,1,0);
+//	  ny_disp_emu("\n\r`@Y`4er `@H`4itpoints: ");
+	  od_printf("%s\n\r\n",D_Num(user_on->hitpoints));
+/*	  ny_disp_emu("\n\r\n`@[A] `4- `@A`4ttack\n\r");
+	  ny_disp_emu("`@[T] `4- `@T`4ake `@D`4rug `@A`4nd `@A`4ttack\n\r");
+	  ny_disp_emu("`@[G] `4- `@G`4et `@O`4utta `@H`4ere\n\r");
+	  ny_disp_emu("`@[Y] `4- `@Y`4er `@S`4tats\n\r");*/
+	  ny_send_menu(ATTACK,"");
+	  ny_line(207,1,0);
+	  //ny_disp_emu("\n\r`@W`4hat ya gonna do? (`@[A] T G Y`4)");
+
+	  key=od_get_answer("ATKPRGY\n\r");
+	  if (key=='\n' || key=='\r') key='A';
+
+	  od_putch(key);
+
+	  if(key=='R' && user_on->rocks==0) {
+	    ny_line(445,2,1);
+	    WaitForEnter();
+	    goto bam_af;
+	  }
+
+
+	  if (key == 'T') {  // Take drugs
+	    take_drug();
+	    no_rip_m=0;
+	    key='A';
+	  }
+	  if (key=='A' || key=='K' || key=='P' || key=='R') {
+	    // when atacking
+//	    randomize();
+	    if(key=='K') {
+	      hit_s=xp_random(150 - user_on->kick_ability);
+	      if(hit_s<35) {
+		hit_s = (INT32)user_on->strength * (pow((user_on->level/2)+2,1.2)*6.0*(user_on->kick_ability/100.0)) * (double)((xp_random(80)+90)/100.0);
+		ny_line(439,2,0);
+	      } else {
+		hit_s=0;
+		ny_line(440,2,0);
+	      }
+	    } else if(key=='P') {
+	      hit_s=xp_random(140 - user_on->punch_ability);
+	      if(hit_s<35) {
+		hit_s = (INT32)user_on->strength * (pow((user_on->level/2)+1,1.2)*6.0*(user_on->punch_ability/90.0)) * (double)((xp_random(80)+90)/100.0);
+		ny_line(441,2,0);
+	      } else {
+		hit_s=0;
+		ny_line(442,2,0);
+	      }
+	    } else if(key=='R') {
+	      hit_s=xp_random(145 - user_on->throwing_ability);
+	      user_on->rocks--;
+	      if(hit_s<35) {
+		hit_s = (INT32)user_on->strength * (pow((user_on->level/2)+2,1.2)*6.0*(user_on->throwing_ability/110.0)) * (double)((xp_random(80)+90)/100.0);
+		ny_line(443,2,0);
+	      } else {
+		hit_s=0;
+		ny_line(444,2,0);
+	      }
+	    }
+
+	    attack_again_a:;
+	    if(key=='A')
+	      hit_s = (INT32)user_on->strength * (what_arm_force(user_on->arm)) * (double)((xp_random(80)+90)/100.0);
+	    // If he is on drugs
+	    if(user_on->drug_high > 0)
+	      hit_s = (hit_s * what_drug_force_a(user_on->drug,user_on->drug_high));
+
+//	    hit_s*=pow(1.1,user_on->level);
+
+	    hit_s*=(100.0-(user_on->since_got_laid*2))/100.0;
+	    if (user_on->drug>=COKE) hit_s-=xp_random(user_on->drug_days_since * pow((double)user_on->drug_addiction,1.2))/60;
+	    if (hit_s<0) hit_s=0;
+
+	    en_hit_s = en_strength * (what_arm_force(en_arm)) * (double)((xp_random(75)+60)/100.0);
+
+	    def_s = user_on->defense * what_drug_force_d(user_on->drug,user_on->drug_high) * (double)((xp_random(80)+140)/100.0);
+	    def_s*=pow(1.2,user_on->level);
+	    def_s*=(100.0-(user_on->since_got_laid*2))/100.0;
+	    if (user_on->drug>=COKE) def_s-=xp_random(user_on->drug_days_since * pow(user_on->drug_addiction,1.2))/60;
+	    if (def_s<0) def_s=0;
+
+	    en_def_s = en_defense * (double)((xp_random(75)+50)/100.0);
+
+	    def_s/=2;
+	    en_def_s/=2;
+
+	    en_hit_s-=def_s;
+	    if (en_hit_s<0) en_hit_s=0;
+
+	    hit_s-=en_def_s;
+	    if (hit_s<0) hit_s=0;
+
+	    if (hit_s==0 && en_hit_s==0 && key=='A') goto attack_again_a;
+
+	    en_hitpoints-=hit_s;
+
+
+	    ny_line(208,2,0);
+//	    od_printf("\n\r\n`bright red`Y`red`a kick `bright green`");
+	    ny_disp_emu(en_name);
+	    ny_line(209,0,0);
+//	    od_printf("'s `red`ass fer `bright green`
+	    od_printf(D_Num(hit_s));
+	    ny_line(210,0,0);
+//	    %s `red`damage",D_Num(hit_s));
+
+
+	    if (en_hitpoints>0) {
+
+	      ny_disp_emu("\n\r\n`0");
+	      ny_disp_emu(en_name);
+
+	      ny_line(211,0,0);
+	      //od_printf(" `red`kicks yer ass fer `bright green`
+	      od_printf(D_Num(en_hit_s));
+	      ny_line(210,0,0);
+	      user_on->hitpoints-=en_hit_s;
+	      wrt_sts();
+	      if (user_on->hitpoints<=0) {
+		od_printf("\n\r\n");
+		ny_send_menu(ASS_KICKED,"");
+/*		od_printf("You had yer ass kicked ... oh well that happens\n\rCome back tomorrow to get revenge ...\n\r");
+		od_printf("You lost all the money on ya...");
+		od_printf("\n\rAnd 2%c of yer points\n\r",37);*/
+		news_post(user_on->say_loose,user_on->name,en_name,5);
+		user_on->money=0;
+		user_on->alive=UNCONCIOUS;
+		points_loose(user_on->points*.02);
+
+		WaitForEnter();
+		od_exit(10,FALSE);
+	      }
+
+	    }
+	  } else if (key=='G') {
+	    intval=xp_random(2);
+	    if (intval==0) {
+
+	      ny_line(212,2,1);
+	      //od_printf("\n\r\n`bright red`Y`red`a got away ...\n\r");
+
+	      if(!rip)
+		WaitForEnter();
+	      else
+		od_get_answer("\n\r");
+	      return;
+	    } else {
+
+	      ny_line(213,2,1);
+	      //od_printf("\n\r\n`bright red`Y`red`e couldn't find a way outta this ...\n\r");
+
+//	      randomize();
+	      en_hit_s = en_strength * (what_arm_force(en_arm)) * (double)((xp_random(75)+75)/100.0);
+	      def_s = user_on->defense * what_drug_force_d(user_on->drug,user_on->drug_high) * (double)((xp_random(80)+140)/100.0);
+	      def_s*=pow(1.2,user_on->level);
+	      def_s*=(100.0-(user_on->since_got_laid*2))/100.0;
+	      if (user_on->drug>=COKE) def_s-=xp_random(user_on->drug_days_since * pow(user_on->drug_addiction,1.2))/60;
+	      if (def_s<0) def_s=0;
+	      def_s/=2;
+	      en_hit_s-=def_s;
+	      if (en_hit_s<0) en_hit_s=0;
+
+
+	      ny_disp_emu("\n\r\n`0");
+	      ny_disp_emu(en_name);
+	      ny_line(211,0,0);
+	      //od_printf(" `red`kicks yer ass fer `bright green`
+	      od_printf(D_Num(en_hit_s));
+	      ny_line(210,0,0);
+
+	      user_on->hitpoints-=en_hit_s;
+	      wrt_sts();
+	      if (user_on->hitpoints<=0) {
+		//od_printf("\n\r\n`bright`");
+		od_printf("\n\r\n");
+		ny_send_menu(ASS_KICKED,"");
+
+		/*od_printf("You had yer ass kicked ... oh well that happens\n\rCome back tomorrow to get revenge ...\n\r");
+		od_printf("You lost all the money on ya...");
+		od_printf("\n\rAnd 2%c of yer points\n\r",37);*/
+
+
+		news_post(user_on->say_loose,user_on->name,en_name,5);
+		user_on->alive=UNCONCIOUS;
+		user_on->money=0;
+		points_loose(user_on->points*.02);
+		//wrt_sts();
+		WaitForEnter();
+		od_exit(10,FALSE);
+	      }
+
+	    }
+	  } else {
+	    DisplayStats();
+	    WaitForEnter();
+	  }
+	} while (en_hitpoints>0);
+//	od_printf("\n\r\n%ld\n\r\n",intval);
+//	intval=(INT32)enhitp*.2+ randomf((INT32)enhitp*.2);
+//	od_printf("\n\r\n%ld\n\r\n",intval);
+/*	intval=((INT32)user_on->level*.55 + 1)*((INT32)enhitp*.5+ randomf((INT32)enhitp*.5))+(INT32)(3*(user_on->level+1));
+	if ((INT32)intval<(INT32)enhitp) intval=(INT32)enhitp;
+	money_plus((DWORD)intval);
+	wrt_sts();*/
+
+
+	ny_line(214,2,0);
+//	od_printf("\n\r\n`bright red`Y`red`ou kicked `bright green`");
+	ny_disp_emu(en_name);
+	ny_line(215,0,1);
+//	od_printf("'s `red`ass ...\n\r\n");
+//	ny_line(216,0,0);
+//	od_printf("`bright red`Y`red`a find `bright red`
+//	od_printf(D_Num(intval));
+//	ny_line(217,0,0);
+//	`red` bucks ",D_Num(intval));
+//	intval=randomf((user_on->level+1)*12)+3;
+//	od_printf(D_Num((DWORD)intval * (DWORD)DrgPtsCoef()));
+//	ny_line(218,0,1);
+//	`red` points!\n\r",D_Num((DWOPRD)intval * (DWORD)DrgPtsCoef()));
+//	points_raise(intval);
+
+	WaitForEnter();
+} // end of function attack_ops
+
+/*char
+fight(INT16 exp)
+{
+	char allowed[]="LHYTQ?\n\r";
+
+	char key;  // Menu choice
+
+
+	od_clear_keybuffer();
+
+       if(no_rip_m!=1){
+	od_printf("\n\r\n");
+	if (exp!=2 && exp!=3) ny_clr_scr();            // Prepare virgin screen
+
+	if ((exp==2 || exp==3) && rip==FALSE) {
+//	  ny_dispod_printf("\n\r`bright red`S`red`treet `bright red`F`red`ights\n\r");
+	  ny_line(353,0,1);
+	  //ny_disp_emu("\n\r`@S`4treet `@F`4ights\n\r`0");
+	  od_printf(allowed);
+	  ny_line(36,0,0);
+	  od_printf("%d ",od_control.caller_timelimit);
+	  ny_line(37,0,0);
+
+	  //od_printf("`bright green`%s`bright blue`E`blue`nter `bright blue`Y`blue`er `bright blue`C`blue`ommand (%d mins)`bright blue`>",allowed,od_control.caller_timelimit);
+	  if(rip) od_disp_str("\n\r!|10000$HKEYON$|#|#|#\n\r");
+	  key=ny_get_answer(allowed);
+	  if(rip) od_disp_str("\n\r!|10000$HKEYOFF$|#|#|#\n\r");
+	} else {// if((key = od_hotkey_menu("SFIGHT", allowed, TRUE)) == 0) {
+
+	// Print menu and command line
+	if(!rip) {
+	  ny_line(353,1,2);
+	  //ny_disp_emu("\n\r`@S`4treet `@F`4ights\n\r\n");
+	  disp_fig_stats();
+	}
+	key=ny_send_menu(S_FIG,allowed);
+
+
+
+/*	od_printf("`green`-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\r");
+
+	key=od_get_key(FALSE);
+	if (key>='a' && key<='z') key-=32;
+	if (key!=0 && strchr(allowed,key)!=NULL) goto s_f_after;
+	od_printf("`bright blue`So you wanna kick some ass ....\n\r\n");
+	key=od_get_key(FALSE);
+	if (key>='a' && key<='z') key-=32;
+	if (key!=0 && strchr(allowed,key)!=NULL) goto s_f_after;
+	od_printf("     `bright red`L`red` - Look for Ass to kick  `bright red`H`red` - Heal wounds\n\r");
+	key=od_get_key(FALSE);
+	if (key>='a' && key<='z') key-=32;
+	if (key!=0 && strchr(allowed,key)!=NULL) goto s_f_after;
+	od_printf("     `bright red`Y`red` - Your Stats            `bright red`T`red` - Take a drug\n\r");
+	key=od_get_key(FALSE);
+	if (key>='a' && key<='z') key-=32;
+	if (key!=0 && strchr(allowed,key)!=NULL) goto s_f_after;
+	od_printf("     `bright red`Q`red` - Return to Central Park\n\r\n");
+	key=od_get_key(FALSE);
+	if (key>='a' && key<='z') key-=32;
+	if (key!=0 && strchr(allowed,key)!=NULL) goto s_f_after;-/
+
+//	ny_disp_emu("`9E`1nter `9Y`1er `9C`1ommand (`9");
+ //	od_printf("%d ",od_control.caller_timelimit);
+   //	ny_disp_emu("`1mins)`9>");
+	if(!rip){
+	  ny_line(36,0,0);
+	  od_printf("%d ",od_control.caller_timelimit);
+	  ny_line(37,0,0);
+	}
+
+//	s_f_after:;
+
+	if (key==0) {
+	  if(rip) od_disp_str("\n\r!|10000$HKEYON$|#|#|#\n\r");
+	  key = ny_get_answer(allowed);
+	  if(rip) od_disp_str("\n\r!|10000$HKEYOFF$|#|#|#\n\r");
+	}
+	}
+
+       } else {
+	no_rip_m=0;
+	if(rip) od_disp_str("\n\r!|10000$HKEYON$|#|#|#\n\r");
+	key=ny_get_answer(allowed);
+	if(rip) od_disp_str("\n\r!|10000$HKEYOFF$|#|#|#\n\r");
+       }
+
+	// If enter or line feed, quit the menu -- default choice
+	if (key=='\n' || key=='\r') key='Q';
+
+	// Print the choice
+	if(!rip) od_putch(key);
+	if(expert==1) expert=3;
+
+	// return the choice
+	return key;
+} // End of fight menu function
+*/
+
+
+
+
+
+void
+fight_ops(user_rec *cur_user)  //This function operates the fights with monsters
+{
+
+	char key;  // Menu choice
+	INT16 intval;
+
+	//user_rec cur_user; // The User Record Variable
+	//cur_user *user_on;  // declare allias for the user record
+
+	do {
+		//key = fight(expert);  //Getting the result of menu choice
+		key=callmenu("LHYTQ?\n\r",S_FIG,353,TRUE);
+		while (key=='?') {
+		  expert+=10;
+		  key=callmenu("LHYTQ?\n\r",S_FIG,353,TRUE);
+		  expert-=10;
+		}
+
+
+
+		if (key == 'L') {
+		  attack_ops(cur_user);
+		} // End of if look
+		else if (key == 'T') {  // Take drugs
+		  take_drug();
+		} // End of take drug
+		else if (key == 'H') {
+		ny_line(199,2,0);
+		if(rip)
+		  od_get_answer("\n\r");
+		//od_printf("\n\r\n`bright red`Y`red`a enter the hospital ...\n\r");
+		heal_wounds();
+		} // End of healing
+		else if (key == 'Y') {
+		DisplayStats();
+		WaitForEnter();
+		} // End of viewing the stats
+
+	} while (key != 'Q');   // Do until quit encountered
+}   // end of fight_ops function
+
+
+
+void attack_ops(user_rec *user_on)
+{
+	INT32 hit_s; //the attacking stregth
+	INT32 def_s;
+	INT32 en_hit_s;
+	INT32 en_def_s;
+
+	FILE *justfile;
+	//enemy_idx eidx;
+	INT16 first,last;//,moneis;
+	INT32 intval;
+	enemy erec;
+	char key;
+
+	if (user_on->turns <= 0) {
+
+	  ny_line(200,2,1);
+	  //od_printf("\n\r\n`bright red`Y`red`a ain't got no fights left ... come back tomorrow\n\r");
+
+
+	  if(!rip)
+	    WaitForEnter();
+	  else {
+	    od_get_answer("\n\r");
+	    no_rip_m=1;
+	  }
+	  return;
+	}
+
+	if(expert==3) expert=1;
+
+	intval=event_gen(user_on);
+	if (intval==1){
+	  if(rip) no_rip_m=1;
+	  return;
+	}
+	if (intval==2) {
+	  if(rip) no_rip_m=1;
+	  user_on->turns--;
+	  return;
+	}
+
+	user_on->turns--;
+	wrt_sts();
+
+	//readin the index
+	ch_game_d();
+	justfile=ShareFileOpen(ENEMY_INDEX,"rb");
+	fseek(justfile,(INT32)user_on->level*2,SEEK_SET);
+	ny_fread(&first,2,1,justfile);
+	fseek(justfile,(INT32)user_on->level*2 + 42,SEEK_SET);
+	ny_fread(&last,2,1,justfile);
+
+	fclose(justfile);
+
+	intval=xp_random(last-first+1)+first;
+
+	justfile=ShareFileOpen(ENEMY_FILENAME,"rb");
+	fseek(justfile,(INT32)intval*sizeof(enemy),SEEK_SET);
+	ny_fread(&erec,sizeof(enemy),1,justfile);
+	fclose(justfile);
+
+	od_printf("\n\r\n");
+
+	ny_clr_scr();
+
+
+	ny_line(201,0,0);
+//	You meet
+	ny_disp_emu(erec.name);
+	ny_line(202,0,2);
+//	 ...
+	ny_line(203,0,0);
+//	H`4e got a bad lokin' `0");
+	print_arm(erec.arm);
+
+
+	INT32 enhitp;
+	enhitp=erec.hitpoints;
+
+	do {
+
+	  bam_nf:
+
+	  ny_line(204,3,2);
+//	  ny_disp_emu("\n\r\n\n\r`@S`4treet `@F`4ight\n\r\n`0");
+	  ny_disp_emu(erec.name);
+	  ny_line(205,0,0);
+//	  ny_disp_emu("'s `@H`4itpoints:");
+	  od_printf("%s",D_Num(erec.hitpoints));
+	  ny_line(206,1,0);
+//	  ny_disp_emu("\n\r`@Y`4er `@H`4itpoints: ");
+	  od_printf("%s\n\r\n",D_Num(user_on->hitpoints));
+/*	  ny_disp_emu("\n\r\n`@[A] `4- `@A`4ttack\n\r");
+	  ny_disp_emu("`@[T] `4- `@T`4ake `@D`4rug `@A`4nd `@A`4ttack\n\r");
+	  ny_disp_emu("`@[G] `4- `@G`4et `@O`4utta `@H`4ere\n\r");
+	  ny_disp_emu("`@[Y] `4- `@Y`4er `@S`4tats\n\r");*/
+	  ny_send_menu(ATTACK,"");
+	  ny_line(207,1,0);
+	  //ny_disp_emu("\n\r`@W`4hat ya gonna do? (`@[A] T G Y`4)");
+
+	  key=od_get_answer("ATKPRGY\n\r");
+	  if (key=='\n' || key=='\r') key='A';
+
+	  od_putch(key);
+
+	  if(key=='R' && user_on->rocks==0) {
+	    ny_line(445,2,1);
+	    WaitForEnter();
+	    goto bam_nf;
+	  }
+
+
+	  if (key == 'T') {  // Take drugs
+	    take_drug();
+	    no_rip_m=0;
+	    key='A';
+	  }
+	  if (key=='A' || key=='K' || key=='P' || key=='R') {
+	    // when atacking
+//	    randomize();
+	    if(key=='K') {
+	      hit_s=xp_random(150 - user_on->kick_ability);
+	      if(hit_s<35) {
+		hit_s = (INT32)user_on->strength * (pow((user_on->level/2)+2,1.2)*6.0*(user_on->kick_ability/100.0)) * (double)((xp_random(80)+90)/100.0);
+		ny_line(439,2,0);
+	      } else {
+		hit_s=0;
+		ny_line(440,2,0);
+	      }
+	    } else if(key=='P') {
+	      hit_s=xp_random(140 - user_on->punch_ability);
+	      if(hit_s<35) {
+		hit_s = (INT32)user_on->strength * (pow((user_on->level/2)+1,1.2)*6.0*(user_on->punch_ability/90.0)) * (double)((xp_random(80)+90)/100.0);
+		ny_line(441,2,0);
+	      } else {
+		hit_s=0;
+		ny_line(442,2,0);
+	      }
+	    } else if(key=='R') {
+	      hit_s=xp_random(145 - user_on->throwing_ability);
+	      user_on->rocks--;
+	      if(hit_s<35) {
+		hit_s = (INT32)user_on->strength * (pow((user_on->level/2)+2,1.2)*6.0*(user_on->throwing_ability/110.0)) * (double)((xp_random(80)+90)/100.0);
+		ny_line(443,2,0);
+	      } else {
+		hit_s=0;
+		ny_line(444,2,0);
+	      }
+	    }
+
+	    attack_again_s:;
+	    if(key=='A')
+	      hit_s = (INT32)user_on->strength * (what_arm_force(user_on->arm)) * (double)((xp_random(80)+90)/100.0);
+	    // If he is on drugs
+	    if(user_on->drug_high > 0)
+	      hit_s = (hit_s * what_drug_force_a(user_on->drug,user_on->drug_high));
+
+//	    hit_s*=pow(1.1,user_on->level);
+
+	    hit_s*=(100.0-(user_on->since_got_laid*2))/100.0;
+	    if (user_on->drug>=COKE) hit_s-=xp_random(user_on->drug_days_since * pow((double)user_on->drug_addiction,1.2))/60;
+	    if (hit_s<0) hit_s=0;
+
+	    en_hit_s = erec.strength * (what_arm_force(erec.arm)) * (double)((xp_random(75)+60)/100.0);
+
+	    def_s = user_on->defense * what_drug_force_d(user_on->drug,user_on->drug_high) * (double)((xp_random(80)+140)/100.0);
+	    def_s*=pow(1.2,user_on->level);
+	    def_s*=(100.0-(user_on->since_got_laid*2))/100.0;
+	    if (user_on->drug>=COKE) def_s-=xp_random(user_on->drug_days_since * pow(user_on->drug_addiction,1.2))/60;
+	    if (def_s<0) def_s=0;
+
+	    en_def_s = erec.defense * (double)((xp_random(75)+50)/100.0);
+
+	    def_s/=2;
+	    en_def_s/=2;
+
+	    en_hit_s-=def_s;
+	    if (en_hit_s<0) en_hit_s=0;
+
+	    hit_s-=en_def_s;
+	    if (hit_s<0) hit_s=0;
+
+	    if (hit_s==0 && en_hit_s==0 && key=='A') goto attack_again_s;
+
+	    erec.hitpoints-=hit_s;
+
+
+	    ny_line(208,2,0);
+//	    od_printf("\n\r\n`bright red`Y`red`a kick `bright green`");
+	    ny_disp_emu(erec.name);
+	    ny_line(209,0,0);
+//	    od_printf("'s `red`ass fer `bright green`
+	    od_printf(D_Num(hit_s));
+	    ny_line(210,0,0);
+//	    %s `red`damage",D_Num(hit_s));
+
+
+	    if (erec.hitpoints>0) {
+
+	      ny_disp_emu("\n\r\n`0");
+	      ny_disp_emu(erec.name);
+
+	      ny_line(211,0,0);
+	      //od_printf(" `red`kicks yer ass fer `bright green`
+	      od_printf(D_Num(en_hit_s));
+	      ny_line(210,0,0);
+	      user_on->hitpoints-=en_hit_s;
+	      wrt_sts();
+	      if (user_on->hitpoints<=0) {
+		od_printf("\n\r\n");
+		ny_send_menu(ASS_KICKED,"");
+/*		od_printf("You had yer ass kicked ... oh well that happens\n\rCome back tomorrow to get revenge ...\n\r");
+		od_printf("You lost all the money on ya...");
+		od_printf("\n\rAnd 2%c of yer points\n\r",37);*/
+		news_post(user_on->say_loose,user_on->name,erec.name,5);
+		user_on->money=0;
+		user_on->alive=UNCONCIOUS;
+		points_loose(user_on->points*.02);
+
+		WaitForEnter();
+		od_exit(10,FALSE);
+	      }
+
+	    }
+	  } else if (key=='G') {
+	    intval=xp_random(2);
+	    if (intval==0) {
+
+	      ny_line(212,2,1);
+	      //od_printf("\n\r\n`bright red`Y`red`a got away ...\n\r");
+
+	      if(!rip)
+		WaitForEnter();
+	      else
+		od_get_answer("\n\r");
+	      return;
+	    } else {
+
+	      ny_line(213,2,1);
+	      //od_printf("\n\r\n`bright red`Y`red`e couldn't find a way outta this ...\n\r");
+
+//	      randomize();
+	      en_hit_s = erec.strength * (what_arm_force(erec.arm)) * (double)((xp_random(75)+75)/100.0);
+	      def_s = user_on->defense * what_drug_force_d(user_on->drug,user_on->drug_high) * (double)((xp_random(80)+140)/100.0);
+	      def_s*=pow(1.2,user_on->level);
+	      def_s*=(100.0-(user_on->since_got_laid*2))/100.0;
+	      if (user_on->drug>=COKE) def_s-=xp_random(user_on->drug_days_since * pow(user_on->drug_addiction,1.2))/60;
+	      if (def_s<0) def_s=0;
+	      def_s/=2;
+	      en_hit_s-=def_s;
+	      if (en_hit_s<0) en_hit_s=0;
+
+
+	      ny_disp_emu("\n\r\n`0");
+	      ny_disp_emu(erec.name);
+	      ny_line(211,0,0);
+	      //od_printf(" `red`kicks yer ass fer `bright green`
+	      od_printf(D_Num(en_hit_s));
+	      ny_line(210,0,0);
+
+	      user_on->hitpoints-=en_hit_s;
+	      wrt_sts();
+	      if (user_on->hitpoints<=0) {
+		//od_printf("\n\r\n`bright`");
+		od_printf("\n\r\n");
+		ny_send_menu(ASS_KICKED,"");
+
+		/*od_printf("You had yer ass kicked ... oh well that happens\n\rCome back tomorrow to get revenge ...\n\r");
+		od_printf("You lost all the money on ya...");
+		od_printf("\n\rAnd 2%c of yer points\n\r",37);*/
+
+
+		news_post(user_on->say_loose,user_on->name,erec.name,5);
+		user_on->alive=UNCONCIOUS;
+		user_on->money=0;
+		points_loose(user_on->points*.02);
+		//wrt_sts();
+		WaitForEnter();
+		od_exit(10,FALSE);
+	      }
+
+	    }
+	  } else {
+	    DisplayStats();
+	    WaitForEnter();
+	  }
+	} while (erec.hitpoints>0);
+//	od_printf("\n\r\n%ld\n\r\n",intval);
+//	intval=(INT32)enhitp*.2+ randomf((INT32)enhitp*.2);
+//	od_printf("\n\r\n%ld\n\r\n",intval);
+	intval=((INT32)user_on->level*.55 + 1)*((INT32)enhitp*.5+ randomf((INT32)enhitp*.5))+(INT32)(3*(user_on->level+1));
+	if ((INT32)intval<(INT32)enhitp) intval=(INT32)enhitp;
+	money_plus((DWORD)intval);
+	wrt_sts();
+
+
+	ny_line(214,2,0);
+//	od_printf("\n\r\n`bright red`Y`red`ou kicked `bright green`");
+	ny_disp_emu(erec.name);
+	ny_line(215,0,2);
+//	od_printf("'s `red`ass ...\n\r\n");
+	ny_line(216,0,0);
+//	od_printf("`bright red`Y`red`a find `bright red`
+	od_printf(D_Num(intval));
+	ny_line(217,0,0);
+//	`red` bucks ",D_Num(intval));
+	intval=randomf((user_on->level+1)*12)+3;
+	od_printf(D_Num((DWORD)intval * (DWORD)DrgPtsCoef()));
+	ny_line(218,0,1);
+//	`red` points!\n\r",D_Num((DWORD)intval * (DWORD)DrgPtsCoef()));
+	points_raise(intval);
+
+	WaitForEnter();
+} // end of function attack_ops
+
+void
+fgc(INT16 *enm_num, INT16 *user_num)
+{
+  char numstr[21];
+  INT16 intval;
+//  ffblk ffblk;
+  FILE *justfile;
+
+  sprintf(numstr,"u%07d.fgc",*user_num);
+  if (fexist(numstr)) {
+    justfile=ShareFileOpen(numstr,"rb");
+    ny_fread(enm_num,2,1,justfile);
+    fclose(justfile);
+  }
+}
+
+
+void
+sfflg(INT16 user_num,char numstr[], INT16 enm_num, user_rec *erec)
+{
+  ch_flag_d();
+  FILE *justfile;
+
+  sprintf(numstr,"u%07d.fgg",user_num); //set fight flag
+  justfile = ShareFileOpen(numstr, "wb");
+  fclose(justfile);
+
+  //readin the enemy record
+  sprintf(numstr,"u%07d.sts",enm_num);
+  justfile=ShareFileOpen(numstr,"rb");
+  ny_fread(erec,sizeof(user_rec),1,justfile);
+  fclose(justfile);
+}
+
+INT16
+fig_m(user_rec *erec, user_rec *user_on, INT16 *enm_num, INT16 *user_num)
+{
+char key;
+DWORD intval;
+char numstr[25];
+char numstr2[25];
+FILE *justfile;
+INT32 hit_s,def_s,en_hit_s;
+time_t t,t2;
+
+
+
+    do {
+
+      bam_ofm:
+      ny_line(221,3,0);
+//      od_printf("\n\r\n\n\r`bright red`O`red`nline `bright red`P`red`layer `bright red`F`red`ight");
+      ny_disp_emu("\n\r\n`0");
+      ny_disp_emu(erec->name);
+      ny_line(205,0,0);
+//      od_printf("'s `bright red`H`red`itpoints: %s",
+      od_printf(D_Num(erec->hitpoints));
+      ny_line(206,1,0);
+//      od_printf("\n\r`bright red`Y`red`er `bright red`H`red`itpoints: %s",
+	od_printf(D_Num(user_on->hitpoints));
+      od_printf("\n\r\n");
+/*      od_printf("\n\r\n`bright red`[A] `red`- `bright red`A`red`ttack\n\r");
+      od_printf("`bright red`[T] `red`- `bright red`T`red`ake `bright red`D`red`rug `bright red`A`red`nd `bright red`A`red`ttack\n\r");
+      od_printf("`bright red`[G] `red`- `bright red`G`red`et `bright red`O`red`utta `bright red`H`red`ere\n\r");
+      od_printf("`bright red`[Y] `red`- `bright red`Y`red`er `bright red`S`red`tats\n\r");
+      od_printf("\n\r`bright red`W`red`hat ya gonna do? (`bright red`[A] G Y`red`)");*/
+      ny_send_menu(ATTACK,"");
+      ny_line(207,1,0);
+//      ny_disp_emu("\n\r`@W`4hat ya gonna do? (`@[A] T G Y`4)");
+
+
+      key=od_get_answer("ATKPRGY\n\r");
+      if (key=='\n' || key=='\r') key='A';
+      od_putch(key);
+      fgc(enm_num,user_num);
+      if (key=='Y') {
+	DisplayStats();
+	ny_line(1,1,0);
+	od_get_answer("\n\r");
+      }
+    } while (key=='Y');
+
+    if(key=='R' && user_on->rocks==0) {
+     ny_line(445,2,1);
+     ny_line(1,1,0);
+     od_get_answer("\n\r");
+     goto bam_ofm;
+   }
+
+
+   if (key == 'T') {  // Take drugs
+     take_drug();
+     no_rip_m=0;
+     key='A';
+   }
+   if (key=='A' || key=='K' || key=='P' || key=='R') {
+     // when atacking
+//   randomize();
+     if(key=='K') {
+       hit_s=xp_random(150 - user_on->kick_ability);
+       if(hit_s<35) {
+	 hit_s = (INT32)user_on->strength * (pow((user_on->level/2)+2,1.2)*6.0*(user_on->kick_ability/100.0)) * (double)((xp_random(80)+90)/100.0);
+	 ny_line(439,2,0);
+       } else {
+	 hit_s=0;
+	 ny_line(440,2,0);
+       }
+     } else if(key=='P') {
+       hit_s=xp_random(140 - user_on->punch_ability);
+       if(hit_s<35) {
+	 hit_s = (INT32)user_on->strength * (pow((user_on->level/2)+2,1.2)*6.0*(user_on->punch_ability/90.0)) * (double)((xp_random(80)+90)/100.0);
+	 ny_line(441,2,0);
+       } else {
+	 hit_s=0;
+	 ny_line(442,2,0);
+       }
+     } else if(key=='R') {
+       hit_s=xp_random(145 - user_on->throwing_ability);
+       user_on->rocks--;
+       if(hit_s<35) {
+	 hit_s = (INT32)user_on->strength * (pow((user_on->level/2)+2,1.2)*6.0*(user_on->throwing_ability/110.0)) * (double)((xp_random(80)+90)/100.0);
+	 ny_line(443,2,0);
+       } else {
+	 hit_s=0;
+	 ny_line(444,2,0);
+       }
+     }
+
+
+    /*if (key == 'T') {  // Take drugs
+      take_drug();
+      no_rip_m=0;
+      key='A';
+    }
+    if (key=='A') {*/
+      // when atacking
+//      randomize();
+      if(key=='A')
+	hit_s = user_on->strength * (what_arm_force(user_on->arm)) * (double)((xp_random(80)+80)/100.0);
+    // If he is on drugs
+      if(user_on->drug_high > 0)
+	hit_s = (hit_s * what_drug_force_a(user_on->drug,user_on->drug_high));
+
+//      hit_s*=pow(1.1,user_on->level);
+
+      hit_s*=(100.0-(user_on->since_got_laid*2))/100.0;
+      if (user_on->drug>=COKE) hit_s-=xp_random(user_on->drug_days_since * pow((double)user_on->drug_addiction,1.2))/60;
+      if (hit_s<0) hit_s=0;
+
+      def_s = user_on->defense * what_drug_force_d(user_on->drug,user_on->drug_high) * (double)((xp_random(80)+140)/100.0);
+      def_s*=pow(1.2,user_on->level);
+      def_s*=(100.0-(user_on->since_got_laid*2))/100.0;
+      if (user_on->drug>=COKE) def_s-=xp_random(user_on->drug_days_since * pow(user_on->drug_addiction,1.2))/60;
+      if (def_s<0) def_s=0;
+
+      def_s/=2;
+
+      sprintf(numstr,"u%07d.atk",*enm_num);
+      justfile = ShareFileOpen(numstr, "wb");
+      ny_fwrite(&hit_s,4,1,justfile);
+      fclose(justfile);
+      sprintf(numstr,"u%07d.atk",*enm_num);
+      sprintf(numstr2,"u%07d.on",*enm_num);
+      ny_line(222,2,1);
+      //od_printf("\n\r\n`bright red`W`red`aiting....\n\r");
+      t=time(NULL);
+      t2=t;
+
+      while (fexist(numstr) && fexist(numstr2)){
+	fgc(enm_num,user_num);
+	sprintf(numstr,"u%07d.atk",*enm_num);
+	sprintf(numstr2,"u%07d.on",*enm_num);
+	while(t==t2) {
+	  t=time(NULL);
+	  od_kernal();
+	}
+	t2=t;
+	od_kernal();
+      }
+
+      if (!fexist(numstr2)) {
+
+	ny_line(223,2,1);
+	if(rip) od_get_answer("\n\r");
+	ny_line(224,0,1);
+	//od_printf("\n\r\n`bright red`Y`red`er enemy droped carrier on ya!\n\r`bright red`G`red`o and kill him offline\n\r");
+
+	ny_remove(numstr);
+	//sprintf(numstr,"del u%07d.atk",*enm_num);
+	//system(numstr);
+	sprintf(numstr,"u%07d.fgg",*user_num);
+	ny_remove(numstr);
+	if(!rip) ny_line(1,1,0);
+	od_get_answer("\n\r");
+	return TRUE;
+      }
+
+      intval=erec->hitpoints;
+
+      sprintf(numstr,"u%07d.sts",*enm_num);
+      justfile=ShareFileOpen(numstr,"rb");
+      ny_fread(erec,sizeof(user_rec),1,justfile);
+      fclose(justfile);
+
+      intval -= erec->hitpoints;
+
+      fgc(enm_num,user_num);
+
+
+      ny_line(208,2,0);
+      //od_printf("\n\r\n`bright red`Y`red`a kick `bright green`");
+      ny_disp_emu(erec->name);
+      ny_line(209,0,0);
+      od_printf(D_Num(intval));
+      ny_line(210,0,0);
+
+     } else if (key=='G') {
+       intval=xp_random(2);
+       if (intval==0) {
+
+	 ny_line(212,2,1);
+  //	 od_printf("\n\r\n`bright red`Y`red`a got away ...\n\r");
+
+	 sprintf(numstr,"u%07d.atk",*enm_num);
+	 justfile = ShareFileOpen(numstr, "wb");
+	 intval=-1; //user got away
+	 ny_fwrite(&intval,4,1,justfile);
+	 fclose(justfile);
+	 sprintf(numstr,"u%07d.fgg",*user_num);
+	 ny_remove(numstr);
+	 if(!rip) ny_line(1,1,0);
+	 od_get_answer("\n\r");
+	 return TRUE;
+       } else {
+
+	 ny_line(213,2,1);
+//	 od_printf("\n\r\n`bright red`Y`red`e couldn't find a way outta this ...\n\r");
+
+	 sprintf(numstr,"u%07d.atk",*enm_num);
+	 justfile = ShareFileOpen(numstr, "wb");
+	 intval=-2; ///user couldn't get away
+	 ny_fwrite(&intval,4,1,justfile);
+	 fclose(justfile);
+	 sprintf(numstr,"u%07d.atk",*enm_num);
+	 sprintf(numstr2,"u%07d.on",*enm_num);
+
+	 ny_line(222,2,1);
+	 //od_printf("\n\r\n`bright red`W`red`aiting....\n\r");
+
+	 t=time(NULL);
+	 t2=t;
+	 while (fexist(numstr) && fexist(numstr2)){
+	   fgc(enm_num,user_num);
+	   sprintf(numstr,"u%07d.atk",*enm_num);
+	   sprintf(numstr2,"u%07d.on",*enm_num);
+	   while(t==t2) {
+	     t=time(NULL);
+	     od_kernal();
+	   }
+	   t2=t;
+	   od_kernal();
+	 }
+
+	 if (!fexist(numstr2)) {
+
+	   ny_line(223,2,1);
+	   if(rip) od_get_answer("\n\r");
+	   ny_line(224,0,1);
+	   //od_printf("\n\r\n`bright red`Y`red`er enemy droped carrier on ya!\n\r`bright red`G`red`o and kill him offline\n\r");
+
+//	   sprintf(numstr,"del u%07d.atk",enm_num);
+//	   system(numstr);
+	   ny_remove(numstr);
+	   sprintf(numstr,"u%07d.fgg",*user_num);
+	   ny_remove(numstr);
+	   if(!rip) ny_line(1,1,0);
+	   od_get_answer("\n\r");
+	   return TRUE;
+	 }
+       }
+     }
+     return FALSE;
+
+}
+
+INT16
+o_checks(INT16 *enm_num,INT16 *user_num, user_rec *user_on, user_rec *erec)
+{
+  DWORD intval;
+  FILE *justfile;
+  char numstr[25];
+  char numstr2[25];
+  INT16 rape;
+  INT32 hit_s,def_s,en_hit_s;
+  time_t t,t2;
+  char key;
+  mail_idx_type mail_idx;
+
+
+      sprintf(numstr,"u%07d.atk",*user_num);
+
+      ny_line(225,2,1);
+//      od_printf("\n\r\n`bright red`W`red`aiting fer enemy response....\n\r");
+
+
+      t=time(NULL);
+      t2=t;
+      sprintf(numstr2,"u%07d.on",*enm_num);
+      while (!fexist(numstr) && fexist(numstr2)) {
+	fgc(enm_num,user_num);
+	sprintf(numstr2,"u%07d.on",*enm_num);
+	sprintf(numstr,"u%07d.atk",*user_num);
+	while(t==t2) {
+	  t=time(NULL);
+	  od_kernal();
+	}
+	t2=t;
+	od_kernal();
+      }
+      fgc(enm_num,user_num);
+      if (!fexist(numstr2)) {
+
+	ny_line(223,2,1);
+	if(rip) od_get_answer("\n\r");
+	ny_line(224,0,1);
+//	od_printf("\n\r\n`bright red`Y`red`er enemy droped carrier on ya!\n\r`bright red`G`red`o and kill him offline\n\r");
+
+	sprintf(numstr,"u%07d.fgg",*user_num);
+	ny_remove(numstr);
+	if(!rip)
+	  ny_line(1,1,0);
+	od_get_answer("\n\r");
+	return TRUE;
+      }
+
+      //read atack file
+      sprintf(numstr,"u%07d.atk",*user_num);
+      justfile = ShareFileOpen(numstr, "rb");
+      ny_fread(&en_hit_s,4,1,justfile);
+      fclose(justfile);
+
+      if (en_hit_s==-1) {
+
+	ny_line(226,2,1);
+//	od_printf("\n\r\n`bright red`Y`red`er enemy ran away in fear...\n\r");
+
+	ny_remove(numstr);
+	sprintf(numstr,"u%07d.fgg",*user_num);
+	ny_remove(numstr);
+	//sprintf(numstr,"del u%07d.atk",*user_num);
+	//system(numstr); //see above!
+	if(!rip)
+	  ny_line(1,1,0);
+	od_get_answer("\n\r");
+	return TRUE;
+      }
+      if (en_hit_s==-9) {
+
+	ny_line(227,2,2);
+//	od_printf("\n\r\n`bright red`Y`red`a `bright white`WON`red`!\n\r\n");
+	sprintf(numstr,"u%07d.atk",*user_num);
+	justfile = ShareFileOpen(numstr, "rb");
+
+	ny_fread(&en_hit_s,4,1,justfile);
+	ny_fread(&intval,4,1,justfile);
+
+	fclose(justfile);
+
+	money_plus(intval);
+
+	ny_line(216,0,0);
+//	od_printf("`bright red`Y`red`a find `bright red`
+	od_printf(D_Num(intval));
+	ny_line(217,0,0);
+	intval=.08*erec->points;
+	od_printf(D_Num((DWORD)intval * (DWORD)DrgPtsCoef()));
+	ny_line(218,0,1);
+	points_raise(intval);
+
+	ny_kernel();
+
+
+	//no_kernel=TRUE;
+	wrt_sts();
+	//no_kernel=FALSE;
+
+	if (erec->arm>user_on->arm) {
+
+	  ny_line(228,2,0);
+//	  od_printf("\n\r\n`bright red`D`red`o ya wanna swap weapons with`bright green` ");
+	  if(!rip)
+	    ny_disp_emu(erec->name);
+	  else
+	    od_disp_str(ny_un_emu(erec->name,numstr));
+	  ny_line(79,0,0);
+	  //ny_disp_emu("`4? (`@Y`4/`@N`4)");
+
+	  key=od_get_answer("YN");
+	  if(!rip)
+	    od_printf("%c\n\r",key);
+	  else
+	    od_disp_str("\n\r");
+
+	  if (key=='Y') {
+
+	    weapon tarm;
+
+	    tarm=erec->arm;
+	    erec->arm=user_on->arm;
+	    user_on->arm=tarm;
+	    sprintf(numstr,"u%07d.on",*enm_num);
+	    if (fexist(numstr)) {
+	      sprintf(numstr,"u%07d.swp",*enm_num);
+	      justfile=ShareFileOpen(numstr,"wb");
+	      ny_fwrite(&(erec->arm),2,1,justfile);
+	      fclose(justfile);
+	    } else {
+	      tarm=erec->arm;
+	      ch_game_d();
+	      justfile=ShareFileOpen(USER_FILENAME,"r+b");
+	      fseek(justfile,*enm_num * sizeof(user_rec),SEEK_SET);
+	      ny_fread(erec,sizeof(user_rec),1,justfile);
+	      erec->arm=tarm;
+	      fseek(justfile,*enm_num * sizeof(user_rec),SEEK_SET);
+	      ny_fwrite(erec,sizeof(user_rec),1,justfile);
+	      fclose(justfile);
+	      ch_flag_d();
+	    }
+
+	    ny_line(229,2,0);
+//	    od_printf("\n\r`bright red`D`red`one! `bright red`Y`red`ou now got the `bright green`");
+
+	    print_arm(user_on->arm);
+	    if(rip) {
+	      od_disp_str("::^M@OK))|#|#|#\n\r\n");
+	      od_get_answer("\n\r");
+	    }
+	    od_printf("\n\r\n");
+
+	  }
+	}
+
+	if (erec->sex!=user_on->sex && clean_mode==FALSE && user_on->sex_today>0) {
+
+	  ny_line(230,2,0);
+//	  od_printf("\n\r\n`bright red`D`red`o ya wanna rape `bright green`");
+	  if(!rip)
+	    ny_disp_emu(erec->name);
+	  else
+	    od_disp_str(ny_un_emu(erec->name,numstr));
+	  ny_line(79,0,0);
+//	  ny_disp_emu("`4? (`@Y`4/`@N`4)");
+
+	  key=od_get_answer("YN");
+	  if(!rip)
+	    od_printf("%c\n\r",key);
+	  else
+	    od_disp_str("\n\r");
+	  if (key=='Y') {
+	    if (user_on->sex_today<=0) {
+
+	      ny_line(118,2,1);
+	      //od_printf("\n\r\n`bright white`You already used up all your sex turns today ...\n\r");
+
+	      if(rip)
+		od_get_answer("\n\r");
+	      sprintf(numstr,"u%07d.on",*enm_num);
+	      if (fexist(numstr)) {
+		sprintf(numstr,"u%07d.kik",*enm_num);
+		justfile=ShareFileOpen(numstr,"wb");
+		rape=-1;
+		ny_fwrite(&rape,2,2,justfile);
+		fclose(justfile);
+	      }
+//	      WaitForEnter();
+	    } else {
+	      sprintf(numstr,"u%07d.on",*enm_num);
+	      if (fexist(numstr)) {
+		sprintf(numstr,"u%07d.kik",*enm_num);
+		justfile=ShareFileOpen(numstr,"wb");
+		ny_fwrite(&user_on->std,2,1,justfile);
+		ny_fwrite(&user_on->std_percent,2,1,justfile);
+		fclose(justfile);
+	      } else {
+		strcpy(mail_idx.recver,erec->name);
+		strcpy(mail_idx.sender,user_on->name);
+		strcpy(mail_idx.recverI,erec->bbsname);
+		strcpy(mail_idx.senderI,user_on->bbsname);
+		mail_idx.flirt=1000;
+		mail_idx.deleted=FALSE;
+		mail_idx.location=0;
+		mail_idx.length=0;
+		mail_idx.afterquote=0;
+		mail_idx.ill=user_on->std;
+		mail_idx.inf=user_on->std_percent;
+		mail_idx.sender_sex=user_on->sex;
+		ch_game_d();
+		justfile=ShareFileOpen(MAIL_INDEX,"a+b");
+		ny_fwrite(&mail_idx,sizeof(mail_idx_type),1,justfile);
+		fclose(justfile);
+		ch_flag_d();
+	      }
+	      user_on->since_got_laid=0;
+	      user_on->sex_today--;
+	      ny_line(339,1,0);
+	      if(rip)
+		ny_disp_emu(erec->name);
+	      else
+		od_disp_str(ny_un_emu(erec->name,numstr));
+	      ny_line(340,0,1);
+	      if(rip)
+		od_get_answer("\n\r");
+	      illness(erec->std,erec->std_percent);
+	      points_raise((INT32)35*(user_on->level+1));
+
+//	      char omg[51];
+
+	     // sprintf(omg,"%s raped you after beating you ...",user_on->name);
+	    }
+	  } else {
+	    sprintf(numstr,"u%07d.on",*enm_num);
+	    if (fexist(numstr)) {
+	      sprintf(numstr,"u%07d.kik",*enm_num);
+	      justfile=ShareFileOpen(numstr,"wb");
+	      rape=-1;
+	      ny_fwrite(&rape,2,2,justfile);
+	      fclose(justfile);
+	    }
+	  }
+	}
+
+	sprintf(numstr,"u%07d.fgg",*user_num);
+	ny_remove(numstr);
+
+	sprintf(numstr,"u%07d.atk",*user_num);
+	ny_remove(numstr);
+
+	wrt_sts();
+
+	if(!rip) {
+	  ny_line(1,1,0);
+	  od_get_answer("\n\r");
+	}
+	return TRUE;
+      }
+      if (en_hit_s!=-2) {
+	en_hit_s-=def_s;
+	if (en_hit_s<0) en_hit_s=0;
+
+	user_on->hitpoints-=en_hit_s;
+	wrt_sts();
+
+
+	ny_disp_emu("\n\r\n`0");
+	ny_disp_emu(erec->name);
+	ny_line(211,0,0);
+//	od_printf(" `red`kicks yer ass fer `bright green`
+	od_printf(D_Num(en_hit_s));
+	ny_line(210,0,0);
+
+
+	if (user_on->hitpoints <= 0) {
+	  sprintf(numstr,"u%07d.atk",*user_num);
+	  ny_remove(numstr);
+	  sprintf(numstr,"u%07d.atk",*enm_num);
+	  justfile = ShareFileOpen(numstr, "wb");
+	  intval=-9; //user lost
+	  ny_fwrite(&intval,4,1,justfile);
+	  intval=user_on->money; //users money
+	  ny_fwrite(&intval,4,1,justfile);
+	  fclose(justfile);
+
+	  od_printf("\n\r\n");
+	  ny_send_menu(ASS_KICKED_O,"");
+/*	  od_printf("\n\r\n`bright red`Y`red`a `bright white`LOST`red`!!!!\n\r");
+	  od_printf("`bright red`C`red`ome back tomorrow to get revenge\n\r");
+	  od_printf("`bright red`8%c`red` of yer points lost\n\r",37);*/
+
+	  user_on->alive=UNCONCIOUS;
+	  user_on->money=0;
+	  points_loose(user_on->points*.08);
+	  //wrt_sts();
+
+	  if (erec->sex!=user_on->sex) {
+	    sprintf(numstr,"u%07d.kik",*user_num);
+	    sprintf(numstr2,"u%07d.on",*enm_num);
+
+	    ny_line(225,2,1);
+//	    od_printf("\n\r\n`bright red`W`red`aiting fer enemy response....\n\r");
+
+	    t=time(NULL);
+	    t2=t;
+	    while (!fexist(numstr) && fexist(numstr2)) {
+	      fgc(enm_num,user_num);
+	      sprintf(numstr2,"u%07d.on",*enm_num);
+	      sprintf(numstr,"u%07d.kik",*user_num);
+	      while(t==t2) {
+		t=time(NULL);
+		od_kernal();
+	      }
+	      t2=t;
+	      od_kernal();
+	    }
+	    if (fexist(numstr)) {
+	      INT16 ill;
+	      INT16 inf;
+
+	      justfile=ShareFileOpen(numstr,"rb");
+	      ny_fread(&ill,2,1,justfile);
+	      ny_fread(&inf,2,1,justfile);
+	      fclose(justfile);
+
+	      ny_remove(numstr);
+	      //sprintf(numstr,"del u%07d.kik",*user_num);
+	      //system(numstr);
+
+	      if (ill!=1) {
+		illness((desease)ill,inf);
+
+
+		ny_disp_emu("\n\r`0");
+		ny_disp_emu(erec->name);
+		ny_line(232,0,1);
+//		od_printf(" `red`raped ya!\n\r");
+
+	      }
+	    }
+	  }
+
+
+	  fig_ker();
+	  if(!rip)
+	    ny_line(1,1,0);
+	  od_get_answer("\n\r");
+
+	  od_exit(10,FALSE);
+	}
+
+	sprintf(numstr,"u%07d.atk",*user_num);
+	ny_remove(numstr);
+      } else {
+
+	od_printf("\n\r\n`0");
+	ny_disp_emu(erec->name);
+	ny_line(231,2,0);
+//	od_printf("\n\r\n`bright green`%s`red` tried to get away but could not ...");
+
+      }
+      return FALSE;
+}
+
+
+
+void
+online_fight_a(INT16 *user_num, user_rec *user_on, INT16 enm_num)
+{
+//  mail_idx_type mail_idx;
+  char numstr[25];
+  char numstr2[25];
+//  DWORD intval;
+  INT16 rape;
+  user_rec erec;
+//  ffblk ffblk;
+  FILE *justfile;
+  char key;
+//  long hit_s,def_s,en_hit_s;
+//  time_t t,t2;
+
+  sfflg(*user_num,numstr,enm_num,&erec);
+
+/*  ch_flag_d();
+
+  sprintf(numstr,"u%07d.fgg",*user_num); //set fight flag
+  justfile = ShareFileOpen(numstr, "wb");
+  fclose(justfile);
+
+  //readin the enemy record
+  sprintf(numstr,"u%07d.sts",enm_num);
+  justfile=ShareFileOpen(numstr,"rb");
+  ny_fread(&erec,sizeof(user_rec),1,justfile);
+  fclose(justfile);*/
+
+  sprintf(numstr,"u%07d.chl",enm_num); //set fight flag
+  justfile = ShareFileOpen(numstr, "wb");
+  ny_fwrite(user_num,2,1,justfile);
+  fclose(justfile);
+  sprintf(numstr2,"u%07d.on",enm_num);
+
+  ny_line(219,2,1);
+//  od_printf("\n\r\n`bright red`L`red`ookin fer yer enemy ....\n\r");
+
+  key=od_get_key(FALSE);
+  while ((fexist(numstr)) && (fexist(numstr2)) && key!='S' && key!='s') {
+    key=od_get_key(FALSE);
+    fgc(&enm_num,user_num);
+//    sprintf(numstr2,"u%07d.on",enm_num);
+//    sprintf(numstr,"u%07d.chl",enm_num);
+    od_kernal();
+    sleep(0);
+  }
+
+  if (!fexist(numstr2)) {
+
+    ny_line(220,2,1);
+    //od_printf("\n\r\n`bright red`U`red`ser is not online anymore!\n\r");
+
+//    sprintf(numstr,"del u%07d.chl",enm_num);
+//    system(numstr);
+    ny_remove(numstr);
+    sprintf(numstr,"u%07d.fgg",enm_num);
+    ny_remove(numstr);
+    if(!rip)
+      ny_line(1,1,0);
+    od_get_answer("\n\r");
+    return;
+  }
+
+  if (key=='S' || key=='s') {
+
+    ny_line(337,2,1);
+    //You stopped looking ...
+
+    //sprintf(numstr,"del u%07d.chl",enm_num);
+    //system(numstr);
+    ny_remove(numstr);
+    sprintf(numstr,"u%07d.fgg",enm_num);
+    ny_remove(numstr);
+    if(!rip)
+      WaitForEnter();
+    else
+      od_get_answer("\n\r");
+    return;
+  }
+
+
+
+  do {
+    if(fig_m(&erec,user_on,&enm_num,user_num)) return;
+    if(o_checks(&enm_num,user_num,user_on,&erec)) return;
+/*   do {
+
+    bam_of1:
+    ny_line(221,3,0);
+//    od_printf("\n\r\n\n\r`bright red`O`red`nline `bright red`P`red`layer `bright red`F`red`ight");
+    ny_disp_emu("\n\r\n`0");
+    ny_disp_emu(erec.name);
+    ny_line(205,0,0);
+//    od_printf("'s `bright red`H`red`itpoints: `0
+    od_printf(D_Num(erec.hitpoints));
+    ny_line(206,1,0);
+//    od_printf("\n\r`bright red`Y`red`er `bright red`H`red`itpoints:
+    od_printf("%s\n\r\n",D_Num(user_on->hitpoints));
+/*    od_printf("\n\r\n`bright red`[A] `red`- `bright red`A`red`ttack\n\r");
+    od_printf("`bright red`[T] `red`- `bright red`T`red`ake `bright red`D`red`rug `bright red`A`red`nd `bright red`A`red`ttack\n\r");
+    od_printf("`bright red`[G] `red`- `bright red`G`red`et `bright red`O`red`utta `bright red`H`red`ere\n\r");
+    od_printf("`bright red`[Y] `red`- `bright red`Y`red`er `bright red`S`red`tats\n\r");
+    od_printf("\n\r`bright red`W`red`hat ya gonna do? (`bright red`[A] G Y`red`)");     -/
+    ny_send_menu(ATTACK,"");
+    ny_line(207,1,0);
+    //ny_disp_emu("\n\r`@W`4hat ya gonna do? (`@[A] T G Y`4)");
+
+
+    key=od_get_answer("ATKPRGY\n\r");
+    if (key=='\n' || key=='\r') key='A';
+    od_putch(key);
+    fgc(&enm_num,user_num);
+    if (key=='Y') {
+      DisplayStats();
+      WaitForEnter();
+    }
+   } while (key=='Y');
+
+   if(key=='R' && user_on->rocks==0) {
+     ny_line(445,2,1);
+     WaitForEnter();
+     goto bam_of1;
+   }
+
+
+   if (key == 'T') {  // Take drugs
+     take_drug();
+     no_rip_m=0;
+     key='A';
+   }*/
+   /*if (key=='A' || key=='K' || key=='P' || key=='R') {
+     // when atacking
+//   randomize();
+     if(key=='K') {
+       hit_s=xp_random(150 - user_on->kick_ability);
+       if(hit_s<35) {
+	 hit_s = (INT32)user_on->strength * (pow((user_on->level/2)+2,1.2)*6.0*(user_on->kick_ability/100.0)) * (double)((xp_random(80)+90)/100.0);
+	 ny_line(439,2,0);
+       } else {
+	 hit_s=0;
+	 ny_line(440,2,0);
+       }
+     } else if(key=='P') {
+       hit_s=xp_random(140 - user_on->punch_ability);
+       if(hit_s<35) {
+	 hit_s = (INT32)user_on->strength * (pow((user_on->level/2)+2,1.2)*6.0*(user_on->punch_ability/90.0)) * (double)((xp_random(80)+90)/100.0);
+	 ny_line(441,2,0);
+       } else {
+	 hit_s=0;
+	 ny_line(442,2,0);
+       }
+     } else if(key=='R') {
+       hit_s=xp_random(145 - user_on->throwing_ability);
+       user_on->rocks--;
+       if(hit_s<35) {
+	 hit_s = (INT32)user_on->strength * (pow((user_on->level/2)+2,1.2)*6.0*(user_on->throwing_ability/110.0)) * (double)((xp_random(80)+90)/100.0);
+	 ny_line(443,2,0);
+       } else {
+	 hit_s=0;
+	 ny_line(444,2,0);
+       }
+     }
+
+  /*  if (key == 'T') {  // Take drugs
+      take_drug();
+      no_rip_m=0;
+      key='A';
+    }
+    if (key=='A') {-/
+      // when atacking
+//      randomize();
+      if(key=='A')
+	hit_s = user_on->strength * (what_arm_force(user_on->arm)) * (double)((xp_random(80)+80)/100.0);
+    // If he is on drugs
+      if(user_on->drug_high > 0)
+	hit_s = (hit_s * what_drug_force_a(user_on->drug,user_on->drug_high));
+
+//      hit_s*=pow(1.1,user_on->level);
+
+      hit_s*=(100.0-(user_on->since_got_laid*2))/100.0;
+      if (user_on->drug>=COKE) hit_s-=xp_random(user_on->drug_days_since * pow((double)user_on->drug_addiction,1.2))/60;
+      if (hit_s<0) hit_s=0;
+
+      def_s = user_on->defense * what_drug_force_d(user_on->drug,user_on->drug_high) * (double)((xp_random(80)+140)/100.0);
+      def_s*=pow(1.2,user_on->level);
+      def_s*=(100.0-(user_on->since_got_laid*2))/100.0;
+      if (user_on->drug>=COKE) def_s-=xp_random(user_on->drug_days_since * pow(user_on->drug_addiction,1.2))/60;
+      if (def_s<0) def_s=0;
+
+      def_s/=2;
+
+      sprintf(numstr,"u%07d.atk",enm_num);
+      justfile = ShareFileOpen(numstr, "wb");
+      ny_fwrite(&hit_s,4,1,justfile);
+      fclose(justfile);
+      sprintf(numstr,"u%07d.atk",enm_num);
+      sprintf(numstr2,"u%07d.on",enm_num);
+      ny_line(222,2,1);
+//      od_printf("\n\r\n`bright red`W`red`aiting....\n\r");
+      t=time(NULL);
+      t2=t;
+
+      while ((fexist(numstr)) && (fexist(numstr2))){
+	fgc(&enm_num,user_num);
+	sprintf(numstr,"u%07d.atk",enm_num);
+	sprintf(numstr2,"u%07d.on",enm_num);
+	while(t==t2) {
+	  t=time(NULL);
+	  od_kernal();
+	}
+	t2=t;
+	od_kernal();
+      }
+
+      if (!fexist(numstr2)) {
+
+	ny_line(223,2,1);
+	if(rip) od_get_answer("\n\r");
+	ny_line(224,0,1);
+//	od_printf("\n\r\n`bright red`Y`red`er enemy droped carrier on ya!\n\r`bright red`G`red`o and kill him offline\n\r");
+
+	//sprintf(numstr,"del u%07d.atk",enm_num);
+	//system(numstr);
+	ny_remove(numstr);
+	sprintf(numstr,"u%07d.fgg",*user_num);
+	ny_remove(numstr);
+	if(!rip) ny_line(1,1,0);
+	od_get_answer("\n\r");
+	return;
+      }
+
+      intval=erec.hitpoints;
+
+      sprintf(numstr,"u%07d.sts",enm_num);
+      justfile=ShareFileOpen(numstr,"rb");
+      ny_fread(&erec,sizeof(user_rec),1,justfile);
+      fclose(justfile);
+
+      intval -= erec.hitpoints;
+
+      fgc(&enm_num,user_num);
+
+
+      ny_line(208,2,0);
+//      od_printf("\n\r\n`bright red`Y`red`a kick `bright green`");
+      ny_disp_emu(erec.name);
+      ny_line(209,0,0);
+      //od_printf("'s `red`ass fer `bright green`%d `red`damage",
+      od_printf(D_Num(intval));
+      ny_line(210,0,0);
+
+
+     } else if (key=='G') {
+       intval=xp_random(2);
+       if (intval==0) {
+
+	 ny_line(212,2,1);
+	 //od_printf("\n\r\n`bright red`Y`red`a got away ...\n\r");
+
+	 sprintf(numstr,"u%07d.atk",enm_num);
+	 justfile = ShareFileOpen(numstr, "wb");
+	 intval=-1; //user got away
+	 ny_fwrite(&intval,4,1,justfile);
+	 fclose(justfile);
+	 sprintf(numstr,"u%07d.fgg",*user_num);
+	 ny_remove(numstr);
+	 if(!rip)
+	   WaitForEnter();
+	 else
+	   od_get_answer("\n\r");
+	 return;
+       } else {
+
+	 ny_line(213,2,1);
+//	 od_printf("\n\r\n`bright red`Y`red`e couldn't find a way outta this ...\n\r");
+
+	 sprintf(numstr,"u%07d.atk",enm_num);
+	 justfile = ShareFileOpen(numstr, "wb");
+	 intval=-2; ///user couldn't get away
+	 ny_fwrite(&intval,4,1,justfile);
+	 fclose(justfile);
+	 sprintf(numstr,"u%07d.atk",enm_num);
+	 sprintf(numstr2,"u%07d.on",enm_num);
+	 ny_line(222,2,1);
+
+	 t=time(NULL);
+	 t2=t;
+
+	 //od_printf("\n\r\n`bright red`W`red`aiting....\n\r");
+	 while ((fexist(numstr)) && (fexist(numstr2))){
+	   fgc(&enm_num,user_num);
+	   sprintf(numstr,"u%07d.atk",enm_num);
+	   sprintf(numstr2,"u%07d.on",enm_num);
+	   while(t==t2) {
+	     t=time(NULL);
+	     od_kernal();
+	   }
+	   t2=t;
+
+	   od_kernal();
+	 }
+
+	 if (!fexist(numstr2)) {
+
+	   ny_line(223,2,1);
+	   if(rip) od_get_answer("\n\r");
+	   ny_line(224,0,1);
+	   //od_printf("\n\r\n`bright red`Y`red`er enemy droped carrier on ya!\n\r`bright red`G`red`o and kill him offline\n\r");
+
+//	   sprintf(numstr,"del u%07d.atk",enm_num);
+//	   system(numstr);
+	   ny_remove(numstr);
+	   sprintf(numstr,"u%07d.fgg",*user_num);
+	   ny_remove(numstr);
+	   if(!rip)
+	     WaitForEnter();
+	   else
+	     od_get_answer("\n\r");
+	   return;
+	 }
+       }
+     }*/// else {
+      // DisplayStats();
+     //}
+
+/*      sprintf(numstr,"u%07d.atk",*user_num);
+
+      ny_line(225,2,1);
+//      od_printf("\n\r\n`bright red`W`red`aiting fer enemy response....\n\r");
+
+
+      t=time(NULL);
+      t2=t;
+      while (!fexist(numstr) && fexist(numstr2)) {
+	fgc(&enm_num,user_num);
+	sprintf(numstr2,"u%07d.on",enm_num);
+	sprintf(numstr,"u%07d.atk",*user_num);
+	while(t==t2) {
+	  t=time(NULL);
+	  od_kernal();
+	}
+	t2=t;
+	od_kernal();
+      }
+      fgc(&enm_num,user_num);
+      if (!fexist(numstr2)) {
+
+	ny_line(223,2,1);
+	if(rip) od_get_answer("\n\r");
+	ny_line(224,0,1);
+//	od_printf("\n\r\n`bright red`Y`red`er enemy droped carrier on ya!\n\r`bright red`G`red`o and kill him offline\n\r");
+
+	sprintf(numstr,"u%07d.fgg",*user_num);
+	ny_remove(numstr);
+	if(!rip)
+	  WaitForEnter();
+	else
+	  od_get_answer("\n\r");
+	return;
+      }
+
+      //read atack file
+      sprintf(numstr,"u%07d.atk",*user_num);
+      justfile = ShareFileOpen(numstr, "rb");
+      ny_fread(&en_hit_s,4,1,justfile);
+      fclose(justfile);
+
+      if (en_hit_s==-1) {
+
+	ny_line(226,2,1);
+//	od_printf("\n\r\n`bright red`Y`red`er enemy ran away in fear...\n\r");
+
+	ny_remove(numstr);
+	sprintf(numstr,"u%07d.fgg",*user_num);
+	ny_remove(numstr);
+	//sprintf(numstr,"del u%07d.atk",*user_num);
+	//system(numstr); //see above!
+	if(!rip)
+	  WaitForEnter();
+	else
+	  od_get_answer("\n\r");
+	return;
+      }
+      if (en_hit_s==-9) {
+
+	ny_line(227,2,2);
+//	od_printf("\n\r\n`bright red`Y`red`a `bright white`WON`red`!\n\r\n");
+	sprintf(numstr,"u%07d.atk",*user_num);
+	justfile = ShareFileOpen(numstr, "rb");
+
+	ny_fread(&en_hit_s,4,1,justfile);
+	ny_fread(&intval,4,1,justfile);
+
+	fclose(justfile);
+
+	money_plus(intval);
+
+	ny_line(216,0,0);
+//	od_printf("`bright red`Y`red`a find `bright red`
+	od_printf(D_Num(intval));
+	ny_line(217,0,0);
+	intval=.08*erec.points;
+	od_printf(D_Num((DWORD)intval * (DWORD)DrgPtsCoef()));
+	ny_line(218,0,1);
+	points_raise(intval);
+
+	ny_kernel();
+
+
+	//no_kernel=TRUE;
+	wrt_sts();
+	//no_kernel=FALSE;
+
+	if (erec.arm>user_on->arm) {
+
+	  ny_line(228,2,0);
+//	  od_printf("\n\r\n`bright red`D`red`o ya wanna swap weapons with`bright green` ");
+	  if(!rip)
+	    ny_disp_emu(erec.name);
+	  else
+	    od_disp_str(ny_un_emu(erec.name,numstr));
+	  ny_line(79,0,0);
+	  //ny_disp_emu("`4? (`@Y`4/`@N`4)");
+
+	  key=od_get_answer("YN");
+	  if(!rip)
+	    od_printf("%c\n\r",key);
+	  else
+	    od_disp_str("\n\r");
+
+	  if (key=='Y') {
+
+	    weapon tarm;
+
+	    tarm=erec.arm;
+	    erec.arm=user_on->arm;
+	    user_on->arm=tarm;
+	    sprintf(numstr,"u%07d.on",enm_num);
+	    if (fexist(numstr)) {
+	      sprintf(numstr,"u%07d.swp",enm_num);
+	      justfile=ShareFileOpen(numstr,"wb");
+	      ny_fwrite(&erec.arm,2,1,justfile);
+	      fclose(justfile);
+	    } else {
+	      tarm=erec.arm;
+	      ch_game_d();
+	      justfile=ShareFileOpen(USER_FILENAME,"r+b");
+	      fseek(justfile,enm_num*sizeof(user_rec),SEEK_SET);
+	      ny_fread(&erec,sizeof(user_rec),1,justfile);
+	      erec.arm=tarm;
+	      fseek(justfile,enm_num*sizeof(user_rec),SEEK_SET);
+	      ny_fwrite(&erec,sizeof(user_rec),1,justfile);
+	      fclose(justfile);
+	      ch_flag_d();
+	    }
+
+	    ny_line(229,2,0);
+//	    od_printf("\n\r`bright red`D`red`one! `bright red`Y`red`ou now got the `bright green`");
+
+	    print_arm(user_on->arm);
+	    if(rip) {
+	      od_disp_str("::^M@OK))|#|#|#\n\r\n");
+	      od_get_answer("\n\r");
+	    }
+	    od_printf("\n\r\n");
+
+	  }
+	}
+
+	if (erec.sex!=user_on->sex && clean_mode==FALSE && user_on->sex_today>0) {
+
+	  ny_line(230,2,0);
+//	  od_printf("\n\r\n`bright red`D`red`o ya wanna rape `bright green`");
+	  if(!rip)
+	    ny_disp_emu(erec.name);
+	  else
+	    od_disp_str(ny_un_emu(erec.name,numstr));
+	  ny_line(79,0,0);
+//	  ny_disp_emu("`4? (`@Y`4/`@N`4)");
+
+	  key=od_get_answer("YN");
+	  if(!rip)
+	    od_printf("%c\n\r",key);
+	  else
+	    od_disp_str("\n\r");
+	  if (key=='Y') {
+	    if (user_on->sex_today<=0) {
+
+	      ny_line(118,2,1);
+	      //od_printf("\n\r\n`bright white`You already used up all your sex turns today ...\n\r");
+
+	      if(rip)
+		od_get_answer("\n\r");
+	      sprintf(numstr,"u%07d.on",enm_num);
+	      if (fexist(numstr)) {
+		sprintf(numstr,"u%07d.kik",enm_num);
+		justfile=ShareFileOpen(numstr,"wb");
+		rape=-1;
+		ny_fwrite(&rape,2,2,justfile);
+		fclose(justfile);
+	      }
+//	      WaitForEnter();
+	    } else {
+	      sprintf(numstr,"u%07d.on",enm_num);
+	      if (fexist(numstr)) {
+		sprintf(numstr,"u%07d.kik",enm_num);
+		justfile=ShareFileOpen(numstr,"wb");
+		ny_fwrite(&user_on->std,2,1,justfile);
+		ny_fwrite(&user_on->std_percent,2,1,justfile);
+		fclose(justfile);
+	      } else {
+		strcpy(mail_idx.recver,erec.name);
+		strcpy(mail_idx.sender,user_on->name);
+		strcpy(mail_idx.recverI,erec.bbsname);
+		strcpy(mail_idx.senderI,user_on->bbsname);
+		mail_idx.flirt=1000;
+		mail_idx.deleted=FALSE;
+		mail_idx.location=0;
+		mail_idx.length=0;
+		mail_idx.afterquote=0;
+		mail_idx.ill=user_on->std;
+		mail_idx.inf=user_on->std_percent;
+		mail_idx.sender_sex=user_on->sex;
+		ch_game_d();
+		justfile=ShareFileOpen(MAIL_INDEX,"a+b");
+		ny_fwrite(&mail_idx,sizeof(mail_idx_type),1,justfile);
+		fclose(justfile);
+		ch_flag_d();
+	      }
+	      user_on->since_got_laid=0;
+	      user_on->sex_today--;
+	      ny_line(339,1,0);
+	      if(rip)
+		ny_disp_emu(erec.name);
+	      else
+		od_disp_str(ny_un_emu(erec.name,numstr));
+	      ny_line(340,0,1);
+	      if(rip)
+		od_get_answer("\n\r");
+	      illness(erec.std,erec.std_percent);
+	      points_raise((INT32)35*(user_on->level+1));
+
+//	      char omg[51];
+
+	     // sprintf(omg,"%s raped you after beating you ...",user_on->name);
+	    }
+	  } else {
+	    sprintf(numstr,"u%07d.on",enm_num);
+	    if (fexist(numstr)) {
+	      sprintf(numstr,"u%07d.kik",enm_num);
+	      justfile=ShareFileOpen(numstr,"wb");
+	      rape=-1;
+	      ny_fwrite(&rape,2,2,justfile);
+	      fclose(justfile);
+	    }
+	  }
+	}
+
+	sprintf(numstr,"u%07d.fgg",*user_num);
+	ny_remove(numstr);
+
+	sprintf(numstr,"u%07d.atk",*user_num);
+	ny_remove(numstr);
+
+	wrt_sts();
+
+	if(!rip) WaitForEnter();
+	return;
+      }
+      if (en_hit_s!=-2) {
+	en_hit_s-=def_s;
+	if (en_hit_s<0) en_hit_s=0;
+
+	user_on->hitpoints-=en_hit_s;
+	wrt_sts();
+
+
+	ny_disp_emu("\n\r\n`0");
+	ny_disp_emu(erec.name);
+	ny_line(211,0,0);
+//	od_printf(" `red`kicks yer ass fer `bright green`
+	od_printf(D_Num(en_hit_s));
+	ny_line(210,0,0);
+
+
+	if (user_on->hitpoints <= 0) {
+	  sprintf(numstr,"u%07d.atk",*user_num);
+	  ny_remove(numstr);
+	  sprintf(numstr,"u%07d.atk",enm_num);
+	  justfile = ShareFileOpen(numstr, "wb");
+	  intval=-9; //user lost
+	  ny_fwrite(&intval,4,1,justfile);
+	  intval=user_on->money; //users money
+	  ny_fwrite(&intval,4,1,justfile);
+	  fclose(justfile);
+
+	  od_printf("\n\r\n");
+	  ny_send_menu(ASS_KICKED_O,"");
+/*	  od_printf("\n\r\n`bright red`Y`red`a `bright white`LOST`red`!!!!\n\r");
+	  od_printf("`bright red`C`red`ome back tomorrow to get revenge\n\r");
+	  od_printf("`bright red`8%c`red` of yer points lost\n\r",37);-/
+
+	  user_on->alive=UNCONCIOUS;
+	  user_on->money=0;
+	  points_loose(user_on->points*.08);
+	  //wrt_sts();
+
+	  if (erec.sex!=user_on->sex) {
+	    sprintf(numstr,"u%07d.kik",*user_num);
+	    sprintf(numstr2,"u%07d.on",enm_num);
+
+	    ny_line(225,2,1);
+//	    od_printf("\n\r\n`bright red`W`red`aiting fer enemy response....\n\r");
+
+	    t=time(NULL);
+	    t2=t;
+	    while (!fexist(numstr) && fexist(numstr2)) {
+	      fgc(&enm_num,user_num);
+	      sprintf(numstr2,"u%07d.on",enm_num);
+	      sprintf(numstr,"u%07d.kik",*user_num);
+	      while(t==t2) {
+		t=time(NULL);
+		od_kernal();
+	      }
+	      t2=t;
+	      od_kernal();
+	    }
+	    if (fexist(numstr)) {
+	      INT16 ill;
+	      INT16 inf;
+
+	      justfile=ShareFileOpen(numstr,"rb");
+	      ny_fread(&ill,2,1,justfile);
+	      ny_fread(&inf,2,1,justfile);
+	      fclose(justfile);
+
+	      ny_remove(numstr);
+	      //sprintf(numstr,"del u%07d.kik",*user_num);
+	      //system(numstr);
+
+	      if (ill!=1) {
+		illness((desease)ill,inf);
+
+
+		ny_disp_emu("\n\r`0");
+		ny_disp_emu(erec.name);
+		ny_line(232,0,1);
+//		od_printf(" `red`raped ya!\n\r");
+
+	      }
+	    }
+	  }
+
+
+	  fig_ker();
+	  WaitForEnter();
+	  od_exit(10,FALSE);
+	}
+
+	sprintf(numstr,"u%07d.atk",*user_num);
+	ny_remove(numstr);
+      } else {
+
+	od_printf("\n\r\n`0");
+	ny_disp_emu(erec.name);
+	ny_line(231,2,0);
+//	od_printf("\n\r\n`bright green`%s`red` tried to get away but could not ...");
+
+      }*/
+
+  } while (1);
+}
+
+
+
+
+void
+online_fight(INT16 *user_num, user_rec *user_on, INT16 enm_num)
+{
+//  mail_idx_type mail_idx;
+//  INT16 rape;
+  char numstr[25];
+//  char numstr2[25];
+//  DWORD intval;
+  user_rec erec;
+//  ffblk ffblk;
+//  FILE *justfile;
+//  char key;
+//  long hit_s,def_s,en_hit_s;
+//  time_t t,t2;
+
+  sfflg(*user_num,numstr,enm_num,&erec);
+
+  ny_disp_emu("\n\r\n`@");
+  ny_disp_emu(erec.name);
+  ny_line(294,0,1);
+
+  sprintf(numstr,"u%07d.chl",*user_num);
+  ny_remove(numstr);
+  do {
+    if(o_checks(&enm_num,user_num,user_on,&erec)) return;
+    if(fig_m(&erec,user_on,&enm_num,user_num)) return;
+
+
+  /*    sprintf(numstr,"u%07d.atk",*user_num);
+      sprintf(numstr2,"u%07d.on",enm_num);
+
+      ny_line(225,2,1);
+//      od_printf("\n\r\n`bright red`W`red`aiting fer enemy response....\n\r");
+
+      t=time(NULL);
+      t2=t;
+      while (!fexist(numstr) && fexist(numstr2)) {
+	fgc(&enm_num,user_num);
+	sprintf(numstr2,"u%07d.on",enm_num);
+	sprintf(numstr,"u%07d.atk",*user_num);
+	while(t==t2) {
+	  t=time(NULL);
+	  od_kernal();
+	}
+	t2=t;
+	od_kernal();
+      }
+
+//      fgc(&enm_num,user_num);
+      if (!fexist(numstr2)) {
+
+	ny_line(223,2,1);
+	if(rip) od_get_answer("\n\r");
+	ny_line(224,0,1);
+  //	od_printf("\n\r\n`bright red`Y`red`er enemy droped carrier on ya!\n\r`bright red`G`red`o and kill him offline\n\r");
+
+	sprintf(numstr,"u%07d.fgg",*user_num);
+	ny_remove(numstr);
+	if(!rip) ny_line(1,1,0);
+	od_get_answer("\n\r");
+	return;
+      }
+
+      //read atack file
+      sprintf(numstr,"u%07d.atk",*user_num);
+      justfile = ShareFileOpen(numstr, "rb");
+      ny_fread(&en_hit_s,4,1,justfile);
+      fclose(justfile);
+
+      if (en_hit_s==-1) {
+
+	ny_line(226,2,1);
+//	od_printf("\n\r\n`bright red`Y`red`er enemy ran away in fear...\n\r");
+
+	sprintf(numstr,"u%07d.fgg",*user_num);
+	ny_remove(numstr);
+	sprintf(numstr,"u%07d.atk",*user_num);
+	ny_remove(numstr);
+	if(!rip) ny_line(1,1,0);
+	od_get_answer("\n\r");
+	return;
+      }
+      if (en_hit_s==-9) {
+
+	ny_line(227,2,2);
+//	od_printf("\n\r\n`bright red`Y`red`a `bright white`WON`red`!\n\r\n");
+	sprintf(numstr,"u%07d.atk",*user_num);
+	justfile = ShareFileOpen(numstr, "rb");
+	ny_fread(&en_hit_s,4,1,justfile);
+	ny_fread(&intval,4,1,justfile);
+	fclose(justfile);
+	money_plus(intval);
+	ny_line(216,0,0);
+	od_printf(D_Num(intval));
+	intval=.08*erec.points;
+	ny_line(217,0,0);
+	od_printf(D_Num((DWORD)intval * (DWORD)DrgPtsCoef()));
+	ny_line(218,0,1);
+	points_raise(intval);
+
+	wrt_sts();
+	if (erec.arm>user_on->arm) {
+
+	  ny_line(228,2,0);
+//	  od_printf("\n\r\n`bright red`D`red`o ya wanna swap weapons with`bright green` ");
+	  ny_disp_emu(erec.name);
+	  ny_line(79,0,0);
+	  //ny_disp_emu("`4? (`@Y`4/`@N`4)");
+
+	  key=od_get_answer("YN");
+	  if(!rip)
+	    od_printf("%c\n\r",key);
+	  else
+	    od_disp_str("\n\r");
+	  if (key=='Y') {
+
+	    weapon tarm;
+
+	    tarm=erec.arm;
+	    erec.arm=user_on->arm;
+	    user_on->arm=tarm;
+	    sprintf(numstr,"u%07d.on",enm_num);
+	    if (fexist(numstr)) {
+	      sprintf(numstr,"u%07d.swp",enm_num);
+	      justfile=ShareFileOpen(numstr,"wb");
+	      ny_fwrite(&erec.arm,2,1,justfile);
+	      fclose(justfile);
+	    } else {
+	      tarm=erec.arm;
+	      ch_game_d();
+	      justfile=ShareFileOpen(USER_FILENAME,"r+b");
+	      fseek(justfile,enm_num*sizeof(user_rec),SEEK_SET);
+	      ny_fread(&erec,sizeof(user_rec),1,justfile);
+	      erec.arm=tarm;
+	      fseek(justfile,enm_num*sizeof(user_rec),SEEK_SET);
+	      ny_fwrite(&erec,sizeof(user_rec),1,justfile);
+	      fclose(justfile);
+	      ch_flag_d();
+	    }
+
+	    ny_line(229,2,0);
+//	    od_printf("\n\r`bright red`D`red`one! `bright red`Y`red`ou now got the `bright green`");
+
+	    print_arm(user_on->arm);
+	    if(rip) {
+	      od_disp_str("::^M@OK))|#|#|#\n\r\n");
+	      od_get_answer("\n\r");
+	    }
+	    od_printf("\n\r\n");
+
+	  }
+	}
+
+	if (erec.sex!=user_on->sex && clean_mode==FALSE && user_on->sex_today>0) {
+
+	  ny_line(230,2,0);
+//	  od_printf("\n\r\n`bright red`D`red`o ya wanna rape `bright green`");
+	  ny_disp_emu(erec.name);
+	  ny_line(79,0,0);
+//	  ny_disp_emu("`4? (`@Y`4/`@N`4)");
+
+	  key=od_get_answer("YN");
+	  if(!rip)
+	    od_printf("%c\n\r",key);
+	  else
+	    od_disp_str("\n\r");
+	  if (key=='Y') {
+	    if (user_on->sex_today<=0) {
+
+	      ny_line(118,2,1);
+//	      od_printf("\n\r\n`bright white`You already used up all your sex turns today ...\n\r");
+
+	      if(rip)
+		od_get_answer("\n\r");
+	      sprintf(numstr,"u%07d.on",enm_num);
+	      if (fexist(numstr)) {
+		sprintf(numstr,"u%07d.kik",enm_num);
+		justfile=ShareFileOpen(numstr,"wb");
+		rape=-1;
+		ny_fwrite(&rape,2,2,justfile);
+		fclose(justfile);
+	      }
+//	      WaitForEnter();
+	    } else {
+	      sprintf(numstr,"u%07d.on",enm_num);
+	      if (fexist(numstr)) {
+		sprintf(numstr,"u%07d.kik",enm_num);
+		justfile=ShareFileOpen(numstr,"wb");
+		ny_fwrite(&user_on->std,2,1,justfile);
+		ny_fwrite(&user_on->std_percent,2,1,justfile);
+		fclose(justfile);
+	      } else {
+		strcpy(mail_idx.recver,erec.name);
+		strcpy(mail_idx.sender,user_on->name);
+		strcpy(mail_idx.recverI,erec.bbsname);
+		strcpy(mail_idx.senderI,user_on->bbsname);
+		mail_idx.flirt=1000;
+		mail_idx.deleted=FALSE;
+		mail_idx.location=0;
+		mail_idx.length=0;
+		mail_idx.afterquote=0;
+		mail_idx.ill=user_on->std;
+		mail_idx.inf=user_on->std_percent;
+		mail_idx.sender_sex=user_on->sex;
+		ch_game_d();
+		justfile=ShareFileOpen(MAIL_INDEX,"a+b");
+		ny_fwrite(&mail_idx,sizeof(mail_idx_type),1,justfile);
+		fclose(justfile);
+		ch_flag_d();
+	      }
+
+	      user_on->since_got_laid=0;
+	      user_on->sex_today--;
+	      ny_line(339,1,0);
+	      if(!rip)
+		ny_disp_emu(erec.name);
+	      else
+		od_disp_str(ny_un_emu(erec.name,numstr));
+	      ny_line(340,0,1);
+	      if(rip)
+		od_get_answer("\n\r");
+
+	      illness(erec.std,erec.std_percent);
+	      points_raise((INT32)35*(user_on->level+1));
+	    }
+	  } else {
+	    sprintf(numstr,"u%07d.on",enm_num);
+	    if (fexist(numstr)) {
+	      sprintf(numstr,"u%07d.kik",enm_num);
+	      justfile=ShareFileOpen(numstr,"wb");
+	      rape=-1;
+	      ny_fwrite(&rape,2,2,justfile);
+	      fclose(justfile);
+	    }
+	  }
+	}
+	sprintf(numstr,"u%07d.fgg",*user_num);
+	ny_remove(numstr);
+	sprintf(numstr,"u%07d.atk",*user_num);
+	ny_remove(numstr);
+	if(!rip) {
+	  ny_line(1,1,0);
+	  od_get_answer("\n\r");
+	}
+	return;
+      }
+      if (en_hit_s!=-2) {
+	en_hit_s-=def_s;
+	if (en_hit_s<0) en_hit_s=0;
+
+	user_on->hitpoints-=en_hit_s;
+	wrt_sts();
+
+
+	ny_disp_emu("\n\r\n`0");
+	ny_disp_emu(erec.name);
+	ny_line(211,0,0);
+	od_printf(D_Num(en_hit_s));
+	ny_line(210,0,0);
+
+
+	if (user_on->hitpoints <= 0) {
+	  sprintf(numstr,"u%07d.atk",*user_num);
+	  ny_remove(numstr);
+	  sprintf(numstr,"u%07d.atk",enm_num);
+	  justfile = ShareFileOpen(numstr, "wb");
+	  intval=-9; //user lost
+	  ny_fwrite(&intval,4,1,justfile);
+	  intval=user_on->money; //users money
+	  ny_fwrite(&intval,4,1,justfile);
+	  fclose(justfile);
+
+	  od_printf("\n\r\n");
+	  ny_send_menu(ASS_KICKED_O,"");
+	  /*`bright red`Y`red`a `bright white`LOST`red`!!!!\n\r");
+	  od_printf("`bright red`C`red`ome back tomorrow to get revenge\n\r");
+	  od_printf("`bright red`8%c`red` of yer points lost\n\r",37);-/
+
+	  user_on->alive=UNCONCIOUS;
+	  user_on->money=0;
+	  points_loose(user_on->points*.08);
+	  //wrt_sts();
+
+
+
+	  if (erec.sex!=user_on->sex) {
+	    sprintf(numstr,"u%07d.kik",*user_num);
+	    sprintf(numstr2,"u%07d.on",enm_num);
+
+	    ny_line(225,2,1);
+//	    od_printf("\n\r\n`bright red`W`red`aiting fer enemy response....\n\r");
+
+	    t=time(NULL);
+	    t2=t;
+	    while (!fexist(numstr) && fexist(numstr2)) {
+	      fgc(&enm_num,user_num);
+	      sprintf(numstr2,"u%07d.on",enm_num);
+	      sprintf(numstr,"u%07d.kik",*user_num);
+	      while(t==t2) {
+		t=time(NULL);
+		od_kernal();
+	      }
+	      t2=t;
+	      od_kernal();
+	    }
+	    if (fexist(numstr)) {
+	      INT16 ill;
+	      INT16 inf;
+
+	      justfile=ShareFileOpen(numstr,"rb");
+	      ny_fread(&ill,2,1,justfile);
+	      ny_fread(&inf,2,1,justfile);
+	      fclose(justfile);
+
+	      sprintf(numstr,"u%07d.kik",*user_num);
+	      ny_remove(numstr);
+
+	      if (ill!=-1) {
+		illness((desease)ill,inf);
+
+		ny_disp_emu("\n\r`0");
+		ny_disp_emu(erec.name);
+		ny_line(232,0,1);
+//		od_printf(" `red`raped ya!\n\r");
+
+	      }
+	    }
+	  }
+	  ny_line(1,1,0);
+	  od_get_answer("\n\r");
+	  od_exit(10,FALSE);
+	}
+
+	sprintf(numstr,"u%07d.atk",*user_num);
+	ny_remove(numstr);
+      } else {
+
+	od_printf("\n\r\n`0");
+	ny_disp_emu(erec.name);
+	ny_line(231,0,0);
+//	od_printf("\n\r\n`bright green`%s`red` tried to get away but could not ...");
+
+      }*/
+
+
+    /*do {
+
+      bam_of2:
+      ny_line(221,3,0);
+//      od_printf("\n\r\n\n\r`bright red`O`red`nline `bright red`P`red`layer `bright red`F`red`ight");
+      ny_disp_emu("\n\r\n`0");
+      ny_disp_emu(erec.name);
+      ny_line(205,0,0);
+//      od_printf("'s `bright red`H`red`itpoints: %s",
+      od_printf(D_Num(erec.hitpoints));
+      ny_line(206,1,0);
+//      od_printf("\n\r`bright red`Y`red`er `bright red`H`red`itpoints: %s",
+	od_printf(D_Num(user_on->hitpoints));
+      od_printf("\n\r\n");
+/*      od_printf("\n\r\n`bright red`[A] `red`- `bright red`A`red`ttack\n\r");
+      od_printf("`bright red`[T] `red`- `bright red`T`red`ake `bright red`D`red`rug `bright red`A`red`nd `bright red`A`red`ttack\n\r");
+      od_printf("`bright red`[G] `red`- `bright red`G`red`et `bright red`O`red`utta `bright red`H`red`ere\n\r");
+      od_printf("`bright red`[Y] `red`- `bright red`Y`red`er `bright red`S`red`tats\n\r");
+      od_printf("\n\r`bright red`W`red`hat ya gonna do? (`bright red`[A] G Y`red`)");-/
+      ny_send_menu(ATTACK,"");
+      ny_line(207,1,0);
+//      ny_disp_emu("\n\r`@W`4hat ya gonna do? (`@[A] T G Y`4)");
+
+
+      key=od_get_answer("ATKPRGY\n\r");
+      if (key=='\n' || key=='\r') key='A';
+      od_putch(key);
+      fgc(&enm_num,user_num);
+      if (key=='Y') {
+	DisplayStats();
+	ny_line(1,1,0);
+	od_get_answer("\n\r");
+      }
+    } while (key=='Y');
+
+    if(key=='R' && user_on->rocks==0) {
+     ny_line(445,2,1);
+     WaitForEnter();
+     goto bam_of2;
+   }
+
+
+   if (key == 'T') {  // Take drugs
+     take_drug();
+     no_rip_m=0;
+     key='A';
+   }
+   if (key=='A' || key=='K' || key=='P' || key=='R') {
+     // when atacking
+//   randomize();
+     if(key=='K') {
+       hit_s=xp_random(150 - user_on->kick_ability);
+       if(hit_s<35) {
+	 hit_s = (INT32)user_on->strength * (pow((user_on->level/2)+2,1.2)*6.0*(user_on->kick_ability/100.0)) * (double)((xp_random(80)+90)/100.0);
+	 ny_line(439,2,0);
+       } else {
+	 hit_s=0;
+	 ny_line(440,2,0);
+       }
+     } else if(key=='P') {
+       hit_s=xp_random(140 - user_on->punch_ability);
+       if(hit_s<35) {
+	 hit_s = (INT32)user_on->strength * (pow((user_on->level/2)+2,1.2)*6.0*(user_on->punch_ability/90.0)) * (double)((xp_random(80)+90)/100.0);
+	 ny_line(441,2,0);
+       } else {
+	 hit_s=0;
+	 ny_line(442,2,0);
+       }
+     } else if(key=='R') {
+       hit_s=xp_random(145 - user_on->throwing_ability);
+       user_on->rocks--;
+       if(hit_s<35) {
+	 hit_s = (INT32)user_on->strength * (pow((user_on->level/2)+2,1.2)*6.0*(user_on->throwing_ability/110.0)) * (double)((xp_random(80)+90)/100.0);
+	 ny_line(443,2,0);
+       } else {
+	 hit_s=0;
+	 ny_line(444,2,0);
+       }
+     }
+
+
+    /*if (key == 'T') {  // Take drugs
+      take_drug();
+      no_rip_m=0;
+      key='A';
+    }
+    if (key=='A') {-/
+      // when atacking
+//      randomize();
+      if(key=='A')
+	hit_s = user_on->strength * (what_arm_force(user_on->arm)) * (double)((xp_random(80)+80)/100.0);
+    // If he is on drugs
+      if(user_on->drug_high > 0)
+	hit_s = (hit_s * what_drug_force_a(user_on->drug,user_on->drug_high));
+
+//      hit_s*=pow(1.1,user_on->level);
+
+      hit_s*=(100.0-(user_on->since_got_laid*2))/100.0;
+      if (user_on->drug>=COKE) hit_s-=xp_random(user_on->drug_days_since * pow((double)user_on->drug_addiction,1.2))/60;
+      if (hit_s<0) hit_s=0;
+
+      def_s = user_on->defense * what_drug_force_d(user_on->drug,user_on->drug_high) * (double)((xp_random(80)+140)/100.0);
+      def_s*=pow(1.2,user_on->level);
+      def_s*=(100.0-(user_on->since_got_laid*2))/100.0;
+      if (user_on->drug>=COKE) def_s-=xp_random(user_on->drug_days_since * pow(user_on->drug_addiction,1.2))/60;
+      if (def_s<0) def_s=0;
+
+      def_s/=2;
+
+      sprintf(numstr,"u%07d.atk",enm_num);
+      justfile = ShareFileOpen(numstr, "wb");
+      ny_fwrite(&hit_s,4,1,justfile);
+      fclose(justfile);
+      sprintf(numstr,"u%07d.atk",enm_num);
+      sprintf(numstr2,"u%07d.on",enm_num);
+      ny_line(222,2,1);
+      //od_printf("\n\r\n`bright red`W`red`aiting....\n\r");
+      t=time(NULL);
+      t2=t;
+
+      while ((fexist(numstr)) && (fexist(numstr2))){
+	fgc(&enm_num,user_num);
+	sprintf(numstr,"u%07d.atk",enm_num);
+	sprintf(numstr2,"u%07d.on",enm_num);
+	while(t==t2) {
+	  t=time(NULL);
+	  od_kernal();
+	}
+	t2=t;
+	od_kernal();
+      }
+
+      if (!fexist(numstr2)) {
+
+	ny_line(223,2,1);
+	if(rip) od_get_answer("\n\r");
+	ny_line(224,0,1);
+	//od_printf("\n\r\n`bright red`Y`red`er enemy droped carrier on ya!\n\r`bright red`G`red`o and kill him offline\n\r");
+
+	ny_remove(numstr);
+	//sprintf(numstr,"del u%07d.atk",enm_num);
+	//system(numstr);
+	sprintf(numstr,"u%07d.fgg",*user_num);
+	ny_remove(numstr);
+	if(!rip) ny_line(1,1,0);
+	od_get_answer("\n\r");
+	return;
+      }
+
+      intval=erec.hitpoints;
+
+      sprintf(numstr,"u%07d.sts",enm_num);
+      justfile=ShareFileOpen(numstr,"rb");
+      ny_fread(&erec,sizeof(user_rec),1,justfile);
+      fclose(justfile);
+
+      intval -= erec.hitpoints;
+
+      fgc(&enm_num,user_num);
+
+
+      ny_line(208,2,0);
+      //od_printf("\n\r\n`bright red`Y`red`a kick `bright green`");
+      ny_disp_emu(erec.name);
+      ny_line(209,0,0);
+      od_printf(D_Num(intval));
+      ny_line(210,0,0);
+
+     } else if (key=='G') {
+       intval=xp_random(2);
+       if (intval==0) {
+
+	 ny_line(212,2,1);
+  //	 od_printf("\n\r\n`bright red`Y`red`a got away ...\n\r");
+
+	 sprintf(numstr,"u%07d.atk",enm_num);
+	 justfile = ShareFileOpen(numstr, "wb");
+	 intval=-1; //user got away
+	 ny_fwrite(&intval,4,1,justfile);
+	 fclose(justfile);
+	 sprintf(numstr,"u%07d.fgg",*user_num);
+	 ny_remove(numstr);
+	 if(!rip) ny_line(1,1,0);
+	 od_get_answer("\n\r");
+	 return;
+       } else {
+
+	 ny_line(213,2,1);
+//	 od_printf("\n\r\n`bright red`Y`red`e couldn't find a way outta this ...\n\r");
+
+	 sprintf(numstr,"u%07d.atk",enm_num);
+	 justfile = ShareFileOpen(numstr, "wb");
+	 intval=-2; ///user couldn't get away
+	 ny_fwrite(&intval,4,1,justfile);
+	 fclose(justfile);
+	 sprintf(numstr,"u%07d.atk",enm_num);
+	 sprintf(numstr2,"u%07d.on",enm_num);
+
+	 ny_line(222,2,1);
+	 //od_printf("\n\r\n`bright red`W`red`aiting....\n\r");
+
+	 t=time(NULL);
+	 t2=t;
+	 while ((fexist(numstr)) && (fexist(numstr2))){
+	   fgc(&enm_num,user_num);
+	   sprintf(numstr,"u%07d.atk",enm_num);
+	   sprintf(numstr2,"u%07d.on",enm_num);
+	   while(t==t2) {
+	     t=time(NULL);
+	     od_kernal();
+	   }
+	   t2=t;
+	   od_kernal();
+	 }
+
+	 if (!fexist(numstr2)) {
+
+	   ny_line(223,2,1);
+	   if(rip) od_get_answer("\n\r");
+	   ny_line(224,0,1);
+	   //od_printf("\n\r\n`bright red`Y`red`er enemy droped carrier on ya!\n\r`bright red`G`red`o and kill him offline\n\r");
+
+//	   sprintf(numstr,"del u%07d.atk",enm_num);
+//	   system(numstr);
+	   ny_remove(numstr);
+	   sprintf(numstr,"u%07d.fgg",*user_num);
+	   ny_remove(numstr);
+	   if(!rip) ny_line(1,1,0);
+	   od_get_answer("\n\r");
+	   return;
+	 }
+       }
+     }*/// else {
+      // DisplayStats();
+     //}
+  } while (1);
+}
+
+
+
+
+
+void
+p_fight_ops(user_rec *cur_user,INT16 *user_num)  //This function operates the fights with players
+{
+
+	char key;  // Menu choice
+
+	//user_rec cur_user; // The User Record Variable
+	//cur_user *user_on;  // declare allias for the user record
+
+	do {
+		//key = p_fight(expert);  //Getting the result of menu choice
+		key=callmenu("KYLHTQ?\n\r",P_FIG,354,TRUE);
+		while (key=='?') {
+		  expert+=10;
+		  key=callmenu("KYLHTQ?\n\r",P_FIG,354,TRUE);
+		  expert-=10;
+		}
+
+		if (key == 'K') {
+		  p_attack_ops(cur_user,user_num);
+		} // End of if look
+		else if (key == 'T') {  // Take drugs
+		  take_drug();
+		} // End of take drug
+		else if (key == 'H') {
+		  ny_line(199,2,0);
+//		  od_printf("\n\r\n`bright red`Y`red`a enter the hospital ...\n\r");
+		  if(rip) od_get_answer("\n\r");
+		  heal_wounds();
+		} // End of healing
+		else if (key == 'Y') {
+		  DisplayStats();
+		  WaitForEnter();
+		} // End of viewing the stats
+		else if (key=='L') {
+		  ListPlayersA();
+		}
+
+	} while (key != 'Q');   // Do until quit encountered
+}   // end of fight_ops function
+
+
+
+
+void p_attack_ops(user_rec *user_on,INT16 *nCurrentUserNumber)
+{
+  INT32 hit_s; //the attacking stregth
+  INT32 def_s;
+  INT32 en_hit_s;
+  INT32 en_def_s;
+//  ffblk ffblk;
+  char hand[25];
+  char numstr[25];
+  INT16 unum,ret;
+  FILE *justfile;
+  FILE *scr_file;
+  //enemy_idx eidx;
+  INT32 intval,first,last,moneis;
+  scr_rec urec;
+  user_rec erec;
+  mail_idx_type mail_idx;
+//	enemy erec;
+  char key;
+
+  if(rip) {
+    od_disp_str("\n\r");
+    od_send_file("texti.rip");
+  }
+
+
+  ny_line(233,2,0);
+//  od_printf("\n\r\n`bright red`W`red`ho ya don't like (`bright red`full`red` or `bright red`partial`red` name):`bright green`");
+
+  od_input_str(hand,24,' ',255);
+  ny_un_emu(hand);
+  od_printf("\n\r");
+  unum=0;
+  ret=1;
+  if (hand[0]!=0) {
+    do {
+      ch_game_d();
+      justfile=ShareFileOpen(SCR_FILENAME,"rb");
+      fseek(justfile,sizeof(scr_rec) * (INT32)unum,SEEK_SET);
+      do {
+	ret=ny_fread(&urec,sizeof(scr_rec),1,justfile);
+	od_kernal();
+      } while ( ((unum++)==user_on->rank ||
+		 strzcmp(hand,ny_un_emu(urec.name,numstr)) ||
+		 urec.alive!=ALIVE) &&
+	       ret==1);
+      fclose(justfile);
+    } while (ret==1 && askifuser(urec.name)==FALSE);
+  }
+  if (ret!=1) {
+
+    ny_line(133,1,1);
+    //od_printf("\n\r`bright red`G`red`ot no idea who you mean ...");
+
+    if(!rip)
+      WaitForEnter();
+    else
+      od_get_answer("\n\r");
+    return;
+  } else if (single_node==FALSE && urec.online==TRUE) {
+    ch_flag_d();
+    sprintf(numstr,"u%07d.fgg",urec.user_num);
+    if (fexist(numstr)) {
+      justfile=ShareFileOpen(numstr,"rb");
+      ny_fread(&intval,2,1,justfile);
+      fclose(justfile);
+      sprintf(numstr,"u%07d.on",intval);
+      if (fexist(numstr)) {
+
+	ny_line(234,2,1);
+//      od_printf("\n\r\n`bright red`T`red`he user is already being fought!\n\r");
+
+	if(!rip)
+	  WaitForEnter();
+	else
+	  od_get_answer("\n\r");
+	return;
+      } else {
+	sprintf(numstr,"u%07d.fgg",urec.user_num);
+	ny_remove(numstr);
+      }
+    }
+    if(expert==3) expert=1;
+    online_fight_a(nCurrentUserNumber,user_on,urec.user_num);
+    return;
+  } else if (hand[0]==0) return;
+
+  if (user_on->turns <= 0) {
+
+    ny_line(200,2,1);
+    //od_printf("\n\r\n`bright red`Y`red`a ain't got no fights left ... come back tomorrow\n\r");
+
+    if(!rip)
+      WaitForEnter();
+    else
+      od_get_answer("\n\r");
+    return;
+  }
+
+  if(expert==3) expert=1;
+
+  if(single_node==FALSE) {
+    ch_flag_d();
+    sprintf(numstr,"u%07d.bfa",urec.user_num);
+    if (fexist(numstr)) {
+      justfile=ShareFileOpen(numstr,"rb");
+      ny_fread(&intval,2,1,justfile);
+      fclose(justfile);
+      sprintf(numstr,"u%07d.on",intval);
+      if (fexist(numstr)) {
+
+	ny_line(234,2,1);
+//      od_printf("\n\r\n`bright red`T`red`he user is already being fought!\n\r");
+
+	if(!rip)
+	  WaitForEnter();
+	else
+	  od_get_answer("\n\r");
+	return;
+      } else {
+	sprintf(numstr,"u%07d.bfa",urec.user_num);
+	ny_remove(numstr);
+      }
+    }
+
+    ch_game_d();
+    sprintf(numstr,"u%07d.inf",urec.user_num);
+    if (fexist(numstr)) {
+
+      ny_line(235,2,1);
+//    od_printf("\n\r\n`bright red`T`red`he player is somewhere where you can' find him!\n\r");
+//    od_printf(" `red`(Other stuff)\n\r");
+
+      if(!rip)
+	WaitForEnter();
+      else
+	od_get_answer("\n\r");
+      return;
+    }
+    ch_flag_d();
+
+    sprintf(numstr,"u%07d.bfo",*nCurrentUserNumber);
+    justfile = ShareFileOpen(numstr, "wb");
+    ny_fwrite(&urec.user_num,2,1,justfile);
+    fclose(justfile);
+
+    sprintf(numstr,"u%07d.bfa",urec.user_num);
+    justfile = ShareFileOpen(numstr, "wb");
+    ny_fwrite(nCurrentUserNumber,2,1,justfile);
+    fclose(justfile);
+  }
+
+  //readin the enemy record
+  ch_game_d();
+  justfile=ShareFileOpen(USER_FILENAME,"rb");
+  fseek(justfile,(INT32)urec.user_num * sizeof(user_rec),SEEK_SET);
+  ny_fread(&erec,sizeof(user_rec),1,justfile);
+  fclose(justfile);
+
+  // WaitForEnter();
+
+  if (erec.rest_where==MOTEL) {
+    intval=100*pow(1.4,(double)user_on->level+1);
+
+    ny_line(236,2,0);
+//    od_printf("\n\r\n`bright red`I`red`t will cost ya `bright green`
+    od_printf(D_Num(intval));
+    ny_line(237,0,0);
+//    `red` to get keys to his room ... Do it?(`bright red`Y`red`/`bright red`N`red`)",intval);
+
+    key=ny_get_answer("YN");
+    if(!rip)
+      od_printf("%c\n\r",key);
+    else
+      od_disp_str("\n\r");
+
+    if (key=='N') {
+      if(single_node==FALSE) {
+	ch_flag_d();
+	sprintf(numstr,"u%07d.bfa",urec.user_num);
+	ny_remove(numstr);
+	sprintf(numstr,"u%07d.bfo",*nCurrentUserNumber);
+//	if (fexist(numstr)) {
+	ny_remove(numstr);
+//	  sprintf(numstr,"del u%07d.bfo",*nCurrentUserNumber);
+//	  system(numstr);
+//	}
+      }
+      return;
+    }
+
+    if (user_on->money < intval) {
+
+      ny_line(238,2,1);
+//      od_printf("\n\r\n`bright white`Not nuff money man ...\n\r");
+
+      if(single_node==FALSE) {
+	ch_flag_d();
+	sprintf(numstr,"u%07d.bfa",urec.user_num);
+	ny_remove(numstr);
+	sprintf(numstr,"u%07d.bfo",*nCurrentUserNumber);
+//	if (fexist(numstr)) {
+	ny_remove(numstr);
+//	  sprintf(numstr,"del u%07d.bfo",*nCurrentUserNumber);
+//	  system(numstr);
+  //	}
+      }
+      if(!rip)
+	WaitForEnter();
+      else
+	od_get_answer("\n\r");
+      return;
+    }
+    money_minus(intval);
+  } else if (erec.rest_where==REG_HOTEL) {
+    intval=300*pow(1.4,(double)user_on->level+1);
+
+    ny_line(236,2,0);
+    od_printf(D_Num(intval));
+    ny_line(237,0,0);
+    //od_printf("\n\r\n`bright red`I`red`t will cost ya `bright green`%d`red` to get keys to his room ... Do it?(`bright red`Y`red`/`bright red`N`red`)",intval);
+
+
+    key=ny_get_answer("YN");
+    if(!rip)
+      od_printf("%c\n\r",key);
+    else
+      od_disp_str("\n\r");
+
+    if (key=='N') {
+      if(single_node==FALSE) {
+	ch_flag_d();
+	sprintf(numstr,"u%07d.bfa",urec.user_num);
+	ny_remove(numstr);
+	sprintf(numstr,"u%07d.bfo",*nCurrentUserNumber);
+//	if (fexist(numstr)) {
+	ny_remove(numstr);
+//	  sprintf(numstr,"del u%07d.bfo",*nCurrentUserNumber);
+//	  system(numstr);
+//	}
+      }
+      return;
+    }
+
+    if (user_on->money < intval) {
+
+      ny_line(238,2,1);
+      //od_printf("\n\r\n`bright white`Not nuff money man ...\n\r");
+
+      if(single_node==FALSE) {
+	ch_flag_d();
+	sprintf(numstr,"u%07d.bfa",urec.user_num);
+	ny_remove(numstr);
+	sprintf(numstr,"u%07d.bfo",*nCurrentUserNumber);
+//	if (fexist(numstr)) {
+	ny_remove(numstr);
+//	  sprintf(numstr,"del u%07d.bfo",*nCurrentUserNumber);
+//	  system(numstr);
+  //	}
+      }
+      if(!rip)
+	WaitForEnter();
+      else
+	od_get_answer("\n\r");
+      return;
+    }
+    money_minus(intval);
+  } else if (erec.rest_where==EXP_HOTEL) {
+    intval=700*pow(1.4,(double)user_on->level+1);
+
+    ny_line(236,2,0);
+    od_printf(D_Num(intval));
+    ny_line(237,0,0);
+
+    //od_printf("\n\r\n`bright red`I`red`t will cost ya `bright green`%d`red` to get keys to his room ... Do it?(`bright red`Y`red`/`bright red`N`red`)",intval);
+
+    key=ny_get_answer("YN");
+    if(!rip)
+      od_printf("%c\n\r",key);
+    else
+      od_disp_str("\n\r");
+
+    if (key=='N') {
+      if(single_node==FALSE) {
+	ch_flag_d();
+	sprintf(numstr,"u%07d.bfa",urec.user_num);
+	ny_remove(numstr);
+	sprintf(numstr,"u%07d.bfo",*nCurrentUserNumber);
+//	if (fexist(numstr)) {
+	ny_remove(numstr);
+//	  sprintf(numstr,"del u%07d.bfo",*nCurrentUserNumber);
+//	  system(numstr);
+      //	}
+      }
+      return;
+    }
+
+    if (user_on->money < intval) {
+
+      //od_printf("\n\r\n`bright white`Not nuff money man ...\n\r");
+
+      if(single_node==FALSE) {
+	ch_flag_d();
+	sprintf(numstr,"u%07d.bfa",urec.user_num);
+	ny_remove(numstr);
+	sprintf(numstr,"u%07d.bfo",*nCurrentUserNumber);
+//	if (fexist(numstr)) {
+	  ny_remove(numstr);
+//	  sprintf(numstr,"del u%07d.bfo",*nCurrentUserNumber);
+//	  system(numstr);
+ //	}
+      }
+      if(!rip)
+	WaitForEnter();
+      else
+	od_get_answer("\n\r");
+      return;
+    }
+    money_minus(intval);
+  }
+  user_on->turns--;
+
+  //  WaitForEnter();
+  wrt_sts();
+  //  WaitForEnter();
+
+	  od_printf("\n\r\n");
+	  ny_clr_scr();
+
+
+	  ny_line(201,0,0);
+//	  od_printf("`bright red`Y`red`ou meet `bright green`");
+	  ny_disp_emu(erec.name);
+	  ny_line(202,0,2);
+//	  od_printf(" `red`...\n\r\n");
+	  ny_line(203,0,0);
+//	  od_printf("`bright red`H`red`e got a bad lokin' `bright green`");
+	  print_arm(erec.arm);
+	  ny_line(239,2,0);
+//	  od_printf("\n\r\n`bright red`S`red`till wanna do it?(`bright red`Y`red`/`bright red`N`red`)");
+
+	  key=ny_get_answer("YN");
+	  od_printf("%c\n\r",key);
+
+	  if (key=='N') {
+	    if(single_node==FALSE) {
+	      ch_flag_d();
+	      sprintf(numstr,"u%07d.bfa",urec.user_num);
+	      ny_remove(numstr);
+	      sprintf(numstr,"u%07d.bfo",*nCurrentUserNumber);
+//	      if (fexist(numstr)) {
+	      ny_remove(numstr);
+//		sprintf(numstr,"del u%07d.bfo",*nCurrentUserNumber);
+//		system(numstr);
+  //	      }
+	    }
+	    return;
+	  }
+
+
+	  do {
+
+	    bam_pf:
+	    ny_line(240,3,0);
+//	    od_printf("\n\r\n\n\r`bright red`P`red`layer `bright red`F`red`ight");
+	    ny_disp_emu("\n\r\n`0");
+	    ny_disp_emu(erec.name);
+	    ny_line(205,0,0);
+	    od_printf(D_Num(erec.hitpoints));
+	    ny_line(206,1,0);
+	    od_printf("%s\n\r\n",D_Num(user_on->hitpoints));
+/*	    od_printf("\n\r\n`bright red`[A] `red`- `bright red`A`red`ttack\n\r");
+	    od_printf("`bright red`[T] `red`- `bright red`T`red`ake `bright red`D`red`rug `bright red`A`red`nd `bright red`A`red`ttack\n\r");
+	    od_printf("`bright red`[G] `red`- `bright red`G`red`et `bright red`O`red`utta `bright red`H`red`ere\n\r");
+	    od_printf("`bright red`[Y] `red`- `bright red`Y`red`er `bright red`S`red`tats\n\r");
+	    od_printf("\n\r`bright red`W`red`hat ya gonna do? (`bright red`[A] G Y`red`)");*/
+	    ny_send_menu(ATTACK,"");
+	    ny_line(207,1,0);
+//	    ny_disp_emu("\n\r`@W`4hat ya gonna do? (`@[A] T G Y`4)");
+
+
+	    key=od_get_answer("ATKPRGY\n\r");
+	    if (key=='\n' || key=='\r') key='A';
+
+	    od_putch(key);
+
+	    if(key=='R' && user_on->rocks==0) {
+	      ny_line(445,2,1);
+	      WaitForEnter();
+	      goto bam_pf;
+	    }
+
+
+	    if (key == 'T') {  // Take drugs
+	      take_drug();
+	      no_rip_m=0;
+	      key='A';
+	    }
+	    if (key=='A' || key=='K' || key=='P' || key=='R') {
+	    // when atacking
+//	      randomize();
+	      if(key=='K') {
+		hit_s=xp_random(150 - user_on->kick_ability);
+		if(hit_s<35) {
+		  hit_s = (INT32)user_on->strength * (pow((user_on->level/2)+2,1.2)*6.0*(user_on->kick_ability/100.0)) * (double)((xp_random(80)+90)/100.0);
+		  ny_line(439,2,0);
+		} else {
+		  hit_s=0;
+		  ny_line(440,2,0);
+		}
+	      } else if(key=='P') {
+		hit_s=xp_random(140 - user_on->punch_ability);
+		if(hit_s<35) {
+		  hit_s = (INT32)user_on->strength * (pow((user_on->level/2)+2,1.2)*6.0*(user_on->punch_ability/90.0)) * (double)((xp_random(80)+90)/100.0);
+		  ny_line(441,2,0);
+		} else {
+		  hit_s=0;
+		  ny_line(442,2,0);
+		}
+	      } else if(key=='R') {
+		hit_s=xp_random(145 - user_on->throwing_ability);
+		user_on->rocks--;
+		if(hit_s<35) {
+		  hit_s = (INT32)user_on->strength * (pow((user_on->level/2)+2,1.2)*6.0*(user_on->throwing_ability/110.0)) * (double)((xp_random(80)+90)/100.0);
+		  ny_line(443,2,0);
+		} else {
+		  hit_s=0;
+		  ny_line(444,2,0);
+		}
+	     }
+
+	    /*if (key == 'T') {  // Take drugs
+	      take_drug();
+	      no_rip_m=0;
+	      key='A';
+	    }
+	    if (key=='A') {*/
+	      // when atacking
+//	      randomize();
+	    attack_again_p:
+	    if(key=='A')
+	      hit_s = user_on->strength * (what_arm_force(user_on->arm)) * (double)((xp_random(80)+80)/100.0);
+	    // If he is on drugs
+	    if(user_on->drug_high > 0)
+	      hit_s = (hit_s * what_drug_force_a(user_on->drug,user_on->drug_high));
+
+//	    hit_s*=pow(1.1,user_on->level);
+
+	    hit_s*=(100.0-(user_on->since_got_laid*2))/100.0;
+	    if (user_on->drug>=COKE) hit_s-=xp_random(user_on->drug_days_since * pow((double)user_on->drug_addiction,1.2))/60;
+	    if (hit_s<0) hit_s=0;
+
+	    en_hit_s = erec.strength * (what_arm_force(erec.arm)) * (double)((xp_random(70)+60)/100.0);
+//	    en_hit_s*=pow(1.1,erec.level);
+
+	    en_hit_s*=(100.0-(erec.since_got_laid*2))/100.0;
+	    if (erec.drug>=COKE) en_hit_s-=xp_random(erec.drug_days_since * pow((double)erec.drug_addiction,1.2))/60;
+	    if (en_hit_s<0) en_hit_s=0;
+
+	    def_s = user_on->defense * what_drug_force_d(user_on->drug,user_on->drug_high) * (double)((xp_random(80)+140)/100.0);
+	    def_s*=pow(1.2,user_on->level);
+	    def_s*=(100.0-(user_on->since_got_laid*2))/100.0;
+	    if (user_on->drug>=COKE) def_s-=xp_random(user_on->drug_days_since * pow(user_on->drug_addiction,1.2))/60;
+	    if (def_s<0) def_s=0;
+
+	    en_def_s = erec.defense * (double)((xp_random(80)+120)/100.0);
+	    en_def_s*=pow(1.2,erec.level);
+	    en_def_s*=(100.0-(erec.since_got_laid*2))/100.0;
+	    if (erec.drug>=COKE) en_def_s-=xp_random(erec.drug_days_since * pow(erec.drug_addiction,1.2))/60;
+	    if (en_def_s<0) en_def_s=0;
+
+	    def_s/=2;
+	    en_def_s/=2;
+
+	    en_hit_s-=def_s;
+	    if (en_hit_s<0) en_hit_s=0;
+
+	    hit_s-=en_def_s;
+	    if (hit_s<0) hit_s=0;
+
+	    if (hit_s==0 && en_hit_s==0 && key=='A') goto attack_again_p;
+
+	    erec.hitpoints-=hit_s;
+
+
+	    ny_line(208,2,0);
+//	    od_printf("\n\r\n`bright red`Y`red`a kick `bright green`");
+	    ny_disp_emu(erec.name);
+	    ny_line(209,0,0);
+	    od_printf(D_Num(hit_s));
+	    ny_line(210,0,0);
+
+
+	    if (erec.hitpoints>0) {
+
+	      ny_disp_emu("\n\r\n`0");
+	      ny_disp_emu(erec.name);
+	      ny_line(211,0,0);
+	      od_printf(D_Num(en_hit_s));
+	      ny_line(210,0,0);
+
+
+	      user_on->hitpoints-=en_hit_s;
+	      wrt_sts();
+	      if (user_on->hitpoints<=0) {
+
+		od_printf("\n\r\n");
+		ny_send_menu(ASS_KICKED_P,"");
+//		od_printf("\n\r\n`bright white`You had yer ass kicked ... oh well that happens\n\rCome back tomorrow to get revenge ...\n\rYa lost 8%c of yer points\n\r",37);
+
+		news_post(user_on->say_loose,user_on->name,erec.name,5);
+		user_on->alive=UNCONCIOUS;
+		user_on->money=0;
+		points_loose(user_on->points*.08);
+		//wrt_sts();
+		if(single_node==FALSE) {
+		  ch_flag_d();
+		  sprintf(numstr,"u%07d.bfa",urec.user_num);
+		  ny_remove(numstr);
+		  sprintf(numstr,"u%07d.bfo",*nCurrentUserNumber);
+//		  if (fexist(numstr)) {
+		  ny_remove(numstr);
+//		    sprintf(numstr,"del u%07d.bfo",*nCurrentUserNumber);
+//		    system(numstr);
+  //		  }
+		}
+		WaitForEnter();
+		od_exit(10,FALSE);
+	      }
+	    }
+	  } else if (key=='G') {
+	    intval=xp_random(2);
+	    if (intval==0) {
+
+	      ny_line(212,2,1);
+	      //od_printf("\n\r\n`bright red`Y`red`a got away ...\n\r");
+
+	      if(single_node==FALSE) {
+		ch_flag_d();
+		sprintf(numstr,"u%07d.bfa",urec.user_num);
+		ny_remove(numstr);
+		sprintf(numstr,"u%07d.bfo",*nCurrentUserNumber);
+//		if (fexist(numstr)) {
+		ny_remove(numstr);
+//		  sprintf(numstr,"del u%07d.bfo",*nCurrentUserNumber);
+//		  system(numstr);
+		//}
+	      }
+	      if(!rip)
+		WaitForEnter();
+	      else
+		od_get_answer("\n\r");
+	      return;
+	    } else {
+
+	      ny_line(213,2,1);
+//	      od_printf("\n\r\n`bright red`Y`red`e couldn't find a way outta this ...\n\r");
+
+//	      randomize();
+	      en_hit_s = erec.strength * (what_arm_force(erec.arm)) * (double)((xp_random(80)+80)/100.0);
+//	      en_hit_s*=pow(1.1,erec.level);
+
+	      en_hit_s*=(100.0-(erec.since_got_laid*2))/100.0;
+	      if (erec.drug>=COKE) en_hit_s-=xp_random(erec.drug_days_since * pow((double)erec.drug_addiction,1.2))/60;
+	      if (en_hit_s<0) en_hit_s=0;
+
+	      def_s = user_on->defense * what_drug_force_d(user_on->drug,user_on->drug_high) * (double)((xp_random(80)+140)/100.0);
+	      def_s*=pow(1.2,user_on->level);
+	      def_s*=(100.0-(user_on->since_got_laid*2))/100.0;
+	      if (user_on->drug>=COKE) def_s-=xp_random(user_on->drug_days_since * pow(user_on->drug_addiction,1.2))/60;
+	      if (def_s<0) def_s=0;
+
+	      def_s/=2;
+	      en_hit_s-=def_s;
+	      if (en_hit_s<0) en_hit_s=0;
+
+	      ny_disp_emu("\n\r\n`0");
+	      ny_disp_emu(erec.name);
+	      ny_line(211,0,0);
+	      od_printf(D_Num(en_hit_s));
+	      ny_line(210,0,0);
+
+
+	      user_on->hitpoints-=en_hit_s;
+	      wrt_sts();
+	      if (user_on->hitpoints<=0) {
+
+		od_printf("\n\r\n");
+		ny_send_menu(ASS_KICKED_P,"");
+
+		//od_printf("\n\r\n`bright white`You had yer ass kicked ... oh well that happens\n\rCome back tomorrow to get revenge ...\n\rYa lost 8%c of yer points\n\r",37);
+
+		news_post(user_on->say_loose,user_on->name,erec.name,5);
+		user_on->alive=UNCONCIOUS;
+		user_on->money=0;
+		points_loose(user_on->points*.08);
+		//wrt_sts();
+		if(single_node==FALSE) {
+		  ch_flag_d();
+		  sprintf(numstr,"u%07d.bfa",urec.user_num);
+		  ny_remove(numstr);
+		  sprintf(numstr,"u%07d.bfo",*nCurrentUserNumber);
+//		  if (fexist(numstr)) {
+		  ny_remove(numstr);
+//		    sprintf(numstr,"del u%07d.bfo",*nCurrentUserNumber);
+//		    system(numstr);
+		  //}
+		}
+		WaitForEnter();
+		od_exit(10,FALSE);
+	      }
+	    }
+	  } else {
+	    DisplayStats();
+	    WaitForEnter();
+	  }
+	} while (erec.hitpoints>0);
+
+
+	ny_line(214,2,0);
+	//od_printf("\n\r\n`bright red`Y`red`ou kicked `bright green`");
+	ny_disp_emu(erec.name);
+	ny_line(215,0,2);
+	//od_printf("'s `red`ass ...\n\r\n");
+	money_plus(erec.money);
+	ny_line(216,0,0);
+	od_printf(D_Num(erec.money));
+	intval=.08*erec.points;
+	ny_line(217,0,0);
+	od_printf(D_Num((DWORD)intval * (DWORD)DrgPtsCoef()));
+	ny_line(218,0,1);
+
+	points_raise(intval);
+
+
+
+
+	erec.money=0;
+
+	erec.alive=UNCONCIOUS;
+	urec.alive=UNCONCIOUS;
+
+	if (erec.arm>user_on->arm) {
+
+	  ny_line(228,2,0);
+  //	  od_printf("\n\r\n`bright red`D`red`o ya wanna swap weapons with`bright green` ");
+	  if(!rip)
+	    ny_disp_emu(erec.name);
+	  else
+	    od_disp_str(ny_un_emu(erec.name,numstr));
+	  ny_line(79,0,0);
+//	  ny_disp_emu("`4? (`@Y`4/`@N`4)");
+
+	  key=od_get_answer("YN");
+	  if(!rip)
+	    od_printf("%c\n\r",key);
+	  else
+	    od_disp_str("\n\r");
+	  if (key=='Y') {
+
+	    weapon tarm;
+
+	    tarm=erec.arm;
+	    erec.arm=user_on->arm;
+	    user_on->arm=tarm;
+
+	    ny_line(229,1,0);
+//	    od_printf("\n\r`bright red`D`red`one! `bright red`Y`red`ou now got the `bright green`");
+
+	    print_arm(user_on->arm);
+	    if(rip) {
+	      od_disp_str("::^M@OK))|#|#|#\n\r\n");
+	      od_get_answer("\n\r");
+	    }
+	    od_printf("\n\r\n");
+	  }
+	}
+
+
+
+
+/*	strcpy(urec.name,user_on.name);
+	rec.nation=cur_user.nation;
+	rec.level=cur_user.level;
+	rec.points=cur_user.points;
+	rec.alive=cur_user.alive;
+	rec.sex=cur_user.sex;
+	rec.user_num=nCurrentUserNumber;
+	rec.online=TRUE;*/
+
+	if(single_node==FALSE) {
+	  ch_flag_d();
+	  sprintf(numstr,"u%07d.bfo",*nCurrentUserNumber);
+
+	  if (fexist(numstr)) {
+	    justfile=ShareFileOpen(numstr,"rb");
+	    ny_fread(&urec.user_num,2,1,justfile);
+	    fclose(justfile);
+
+	    ny_remove(numstr);
+
+//	    sprintf(numstr,"del u%07d.bfo",*nCurrentUserNumber);
+//	    system(numstr);
+	  }
+	}
+
+	erec.points*=.92;
+	urec.points*=.92;
+
+	SortScrFileB(urec.user_num);
+
+	user_rec serec;
+
+	ch_game_d();
+
+	justfile=ShareFileOpen(USER_FILENAME,"rb");
+	fseek(justfile,(INT32)urec.user_num*sizeof(user_rec),SEEK_SET);
+	ny_fread(&serec,sizeof(user_rec),1,justfile);
+	fclose(justfile);
+
+
+	scr_file=ShareFileOpen(SCR_FILENAME,"r+b");
+	fseek(scr_file, (INT32)serec.rank * sizeof(scr_rec), SEEK_SET);
+	ny_fwrite(&urec, sizeof(scr_rec), 1, scr_file);
+	fclose(scr_file);
+
+	erec.rank=serec.rank;
+
+
+
+	justfile=ShareFileOpen(USER_FILENAME,"r+b");
+	fseek(justfile,(INT32)urec.user_num*sizeof(user_rec),SEEK_SET);
+	ny_fwrite(&erec,sizeof(user_rec),1,justfile);
+	fclose(justfile);
+
+
+//
+//	od_printf("\n\r\n`bright red`Y`red`ou kicked `bright green`%s's `red`ass ...\n\r",erec.name);
+//
+
+	strcpy(mail_idx.recver,erec.name);
+	strcpy(mail_idx.sender,user_on->name);
+	strcpy(mail_idx.recverI,erec.bbsname);
+	strcpy(mail_idx.senderI,user_on->bbsname);
+	mail_idx.flirt=1001;
+	mail_idx.deleted=FALSE;
+	mail_idx.location=0;
+	mail_idx.length=0;
+	mail_idx.afterquote=0;
+	mail_idx.ill=user_on->std;
+	mail_idx.inf=user_on->std_percent;
+	mail_idx.sender_sex=user_on->sex;
+	ch_game_d();
+
+	justfile=ShareFileOpen(MAIL_INDEX,"a+b");
+	ny_fwrite(&mail_idx,sizeof(mail_idx_type),1,justfile);
+	fclose(justfile);
+
+
+
+	if (erec.sex!=user_on->sex && clean_mode==FALSE && user_on->sex_today>0) {
+
+	  ny_line(230,2,0);
+//	  od_printf("\n\r\n`bright red`D`red`o ya wanna rape `bright green`");
+	  ny_disp_emu(erec.name);
+	  ny_line(79,0,0);
+//	  ny_disp_emu("`4? (`@Y`4/`@N`4)");
+
+	  key=od_get_answer("YN");
+	  if(!rip)
+	    od_printf("%c\n\r",key);
+	  else
+	    od_disp_str("\n\r");
+	  if (key=='Y') {
+	    if (user_on->sex_today<=0) {
+
+	      ny_line(118,2,1);
+//	      od_printf("\n\r\n`bright white`You already used up all your sex turns today ...\n\r");
+
+	    } else {
+	      strcpy(mail_idx.recver,erec.name);
+	      strcpy(mail_idx.sender,user_on->name);
+	      strcpy(mail_idx.recverI,erec.bbsname);
+	      strcpy(mail_idx.senderI,user_on->bbsname);
+	      mail_idx.flirt=1000;
+	      mail_idx.deleted=FALSE;
+	      mail_idx.location=0;
+	      mail_idx.length=0;
+	      mail_idx.afterquote=0;
+	      mail_idx.ill=user_on->std;
+	      mail_idx.inf=user_on->std_percent;
+	      mail_idx.sender_sex=user_on->sex;
+	      ch_game_d();
+	      justfile=ShareFileOpen(MAIL_INDEX,"a+b");
+	      ny_fwrite(&mail_idx,sizeof(mail_idx_type),1,justfile);
+	      fclose(justfile);
+	      user_on->sex_today--;
+	      user_on->since_got_laid=0;
+	      ny_line(339,1,0);
+	      if(rip)
+		ny_disp_emu(erec.name);
+	      else
+		od_disp_str(ny_un_emu(erec.name,numstr));
+	      ny_line(340,0,1);
+	      if(rip)
+		od_get_answer("\n\r");
+
+	      illness(erec.std,erec.std_percent);
+	      points_raise((INT32)35*(user_on->level+1));
+
+	    }
+	  }
+	}
+
+	news_post(user_on->say_win,user_on->name,erec.name,4);
+	if(single_node==FALSE) {
+	  ch_flag_d();
+
+	  sprintf(numstr,"u%07d.bfa",urec.user_num);
+	  ny_remove(numstr);
+
+
+	  sprintf(numstr,"u%07d.bfo",*nCurrentUserNumber);
+	  ny_remove(numstr);
+	}
+
+	if(!rip) WaitForEnter();
+} // end of function p_attack_ops
+
+void evil_ops(user_rec *cur_user)
+{
+  char key;
+  INT32 chance,intval;
+
+  do {
+    key=callmenu("SBPDRWQ?\n\r",EVIL_STUFF,355,FALSE);
+    while (key=='?') {
+      expert+=10;
+      key=callmenu("SBPDRWQ?\n\r",EVIL_STUFF,355,FALSE);
+      expert-=10;
+    }
+
+    if (key=='S') {  //steel money from beggars
+      if(rip) no_rip_m=1;
+
+      ny_line(241,2,1);
+//      od_printf("\n\r\n`bright red`Y`red`ou find some blind beggar and try to take some of his money...\n\r");
+
+      if(!rip)
+	WaitForEnter();
+      else
+	od_get_answer("\n\r");
+      chance=xp_random(100);
+      if (chance<=busted_ch_beggar) {
+
+	od_printf("\n\r\n");
+	ny_send_menu(BUSTED,"");
+	//od_printf("\n\r\n`bright white`BUSTED!!!! .... well the police beat the hell out of you .....");
+	//od_printf("\n\rWhy don't you try again tomorrow...\n\r");
+	//od_printf("Ya lost 2%c of yer points!\n\r",37);
+
+	cur_user->alive=UNCONCIOUS;
+	points_loose(cur_user->points*.02);
+	news_post("stealing from beggars",cur_user->name,"",2);
+	if(!rip)
+	  WaitForEnter();
+	else
+	  od_get_answer("\n\r");
+	od_exit(10,FALSE);
+      } else {
+	chance=xp_random(100);
+	if (chance<=success_ch_beggar) {
+	  intval=xp_random((cur_user->level+1)*30);
+
+	  ny_line(242,2,0);
+//	  od_printf("\n\r\n`bright red`Y`red`ou just stole
+	  od_printf(D_Num(intval));
+	  ny_line(243,0,1);
+//	  from the poor bastard, good job...\n\r",intval);
+
+	  money_plus(intval);
+	  points_raise((INT32)20*cur_user->level+15);
+	  if(!rip)
+	    WaitForEnter();
+	  else
+	    od_get_answer("\n\r");
+	} else {
+
+	  ny_line(244,2,1);
+	  //od_printf("\n\r\n`bright red`T`red`he poor bastard was broke...\n\r");
+
+	  if(!rip)
+	    WaitForEnter();
+	  else
+	    od_get_answer("\n\r");
+	}
+      }
+    }
+    if (key=='D') {  //destroy a car
+      if(rip) no_rip_m=1;
+
+      ny_line(184,2,1);
+      //od_printf("\n\r\n`bright red`Y`red`ou find a nice car...\n\r");
+
+      if(!rip)
+	WaitForEnter();
+      else
+	od_get_answer("\n\r");
+      chance=xp_random(100);
+      if (chance<=busted_ch_car) {
+
+	od_printf("\n\r\n");
+	ny_send_menu(BUSTED,"");
+	//od_printf("\n\r\n`bright white`BUSTED!!!! .... well the police beat the hell out of you .....");
+	//od_printf("\n\rWhy don't you try again tomorrow...\n\r");
+	//od_printf("Ya lost 2%c of yer points!\n\r",37);
+
+	cur_user->alive=UNCONCIOUS;
+	points_loose(cur_user->points*.02);
+	news_post("busting up a car",cur_user->name,"",2);
+	if(!rip)
+	  WaitForEnter();
+	else
+	  od_get_answer("\n\r");
+	od_exit(10,FALSE);
+      } else {
+	chance=xp_random(100);
+	if(chance<=success_ch_car) {
+
+	  ny_line(192,2,1);
+//	  od_printf("\n\r\n`bright red`Y`red`ou totally smashed that car .... a very nice job...\n\r");
+	  if(rip) od_get_answer("\n\r");
+	  ny_line(117,0,0);
+	  od_printf("%s",D_Num((INT32)(25*cur_user->level+25) * (INT32)DrgPtsCoef()));
+
+	  points_raise((INT32)25*cur_user->level+25);
+	  if(!rip) {
+	    WaitForEnter();
+	    od_disp_str("\n\r");
+	  } else {
+	    od_disp_str("::^M@OK))|#|#|#\n\r");
+	    od_get_answer("\n\r");
+	  }
+	} else {
+
+	  ny_line(406,2,1);
+
+	  if(!rip)
+	    WaitForEnter();
+	  else
+	    od_get_answer("\n\r");
+	}
+      }
+    }
+    if (key=='B') {  //burn a school down
+      if(rip) no_rip_m=1;
+
+      ny_line(245,2,1);
+//      od_printf("\n\r\n`bright red`Y`red`ou find a school...that's the easy part...\n\r");
+
+      if(!rip)
+	WaitForEnter();
+      else
+	od_get_answer("\n\r");
+      chance=xp_random(100);
+      if (chance<=busted_ch_school) {
+
+	od_printf("\n\r\n");
+	ny_send_menu(BUSTED,"");
+	//od_printf("\n\r\n`bright white`BUSTED!!!! .... well the police beat the hell out of you .....");
+	//od_printf("\n\rWhy don't you try again tomorrow...\n\r");
+	//od_printf("Ya lost 2%c of yer points!\n\r",37);
+
+	cur_user->alive=UNCONCIOUS;
+	points_loose(cur_user->points*.02);
+	news_post("burning down a school",cur_user->name,"",2);
+	if(!rip)
+	  WaitForEnter();
+	else
+	  od_get_answer("\n\r");
+	od_exit(10,FALSE);
+      } else {
+	chance=xp_random(100);
+	if (chance<=success_ch_school) {
+
+	  ny_line(246,2,1);
+	  if(rip) od_get_answer("\n\r");
+//	  od_printf("\n\r\n`bright red`I`red`t looks lovely as the school buildings crumble into ashes ...\n\r");
+	  ny_line(117,0,0);
+	  od_printf("%s",D_Num((INT32)(50*cur_user->level+40) * (INT32)DrgPtsCoef()));
+
+	  points_raise((INT32)50*cur_user->level+40);
+	  news_post("`@A`4 school burned to ashes ... `%Police `4say clear case of arsen","","",0);
+	  if(!rip) {
+	    od_disp_str("\n\r");
+	    WaitForEnter();
+	  } else {
+	    od_disp_str("::^M@OK))|#|#|#\n\r");
+	    od_get_answer("\n\r");
+	  }
+	} else {
+
+	  ny_line(247,2,1);
+	  //od_printf("\n\r\n`bright red`S`red`chools don't burn very well... all matches are gone...\n\r");
+
+	  if(!rip)
+	    WaitForEnter();
+	  else
+	    od_get_answer("\n\r");
+	}
+      }
+    }
+    if (key=='R') {  //break a window
+      if(rip) no_rip_m=1;
+
+      ny_line(248,2,1);
+      //od_printf("\n\r\n`bright red`Y`red`ou pick up a rock and...\n\r");
+
+      if(!rip)
+	WaitForEnter();
+      else
+	od_get_answer("\n\r");
+      chance=xp_random(100);
+      if (chance<=busted_ch_window) {
+
+	od_printf("\n\r\n");
+	ny_send_menu(BUSTED,"");
+	//od_printf("\n\r\n`bright white`BUSTED!!!! .... well the police beat the hell out of you .....");
+	//od_printf("\n\rWhy don't you try again tomorrow...\n\r");
+	//od_printf("Ya lost 2%c of yer points!\n\r",37);
+
+	cur_user->alive=UNCONCIOUS;
+	points_loose(cur_user->points*.02);
+	news_post("breaking windows",cur_user->name,"",2);
+	if(!rip)
+	  WaitForEnter();
+	else
+	  od_get_answer("\n\r");
+	od_exit(10,FALSE);
+      } else {
+	chance=xp_random(100);
+	if(chance<=success_ch_window) {
+
+	  ny_line(249,2,1);
+	  if(rip) od_get_answer("\n\r");
+//	  od_printf("\n\r\n`bright red`B`red`reaking glass sounds so good...\n\r");
+	  ny_line(117,0,0);
+	  od_printf("%s",D_Num((INT32)(8*cur_user->level+8) * (INT32)DrgPtsCoef()));
+
+	  points_raise((INT32)8 * cur_user->level + 8);
+	  if(!rip) {
+	    od_disp_str("\n\r");
+	    WaitForEnter();
+	  } else {
+	    od_disp_str("::^M@OK))|#|#|#\n\r");
+	    od_get_answer("\n\r");
+	  }
+	} else {
+
+	  ny_line(407,2,1);
+
+	  if(!rip)
+	    WaitForEnter();
+	  else
+	    od_get_answer("\n\r");
+	}
+      }
+    }
+    if (key=='P') {  //poison
+      if(rip) no_rip_m=1;
+      intval=pow(1.6,cur_user->level) * 500;
+
+      ny_line(250,2,0);
+      od_printf(D_Num(intval));
+//      od_printf("\n\r\n`bright red`P`red`oisoning water will cost ya `bright red`%s`red` ... Do it(`bright red`Y`red`/`bright red`N`red`)",D_Num(intval));
+      ny_line(251,0,0);
+
+      key=ny_get_answer("YN");
+      if(!rip) od_putch(key);
+      if (key=='Y' && cur_user->poison<=0) {
+	ny_line(182,2,1);
+	if(!rip)
+	  WaitForEnter();
+	else
+	  od_get_answer("\n\r");
+      } else if (key=='Y') {
+	if (cur_user->money < intval) {
+
+	  ny_line(252,2,1);
+//	  od_printf("\n\r\n`bright red`Y`red`a cant afford it man...\n\r");
+
+	  if(!rip)
+	    WaitForEnter();
+	  else
+	    od_get_answer("\n\r");
+	} else {
+	  money_minus(intval);
+
+	  ny_line(253,2,1);
+	  //od_printf("\n\r\n`bright red`Y`red`ou buy enough poison and dump it into the water...\n\r");
+
+	  cur_user->poison--;
+	  if(!rip)
+	    WaitForEnter();
+	  else
+	    od_get_answer("\n\r");
+	  chance=xp_random(100);
+	  if (chance<=busted_ch_poison) {
+
+	    od_printf("\n\r\n");
+	    ny_send_menu(BUSTED,"");
+	    //od_printf("\n\r\n`bright white`BUSTED!!!! .... well the police beat the hell out of you .....");
+	    //od_printf("\n\rWhy don't you try again tomorrow...\n\r");
+	    //od_printf("Ya lost 2%c of yer points!\n\r",37);
+
+	    cur_user->alive=UNCONCIOUS;
+	    points_loose(cur_user->points*.02);
+	    news_post("poisoning water",cur_user->name,"",2);
+	    if(!rip)
+	      WaitForEnter();
+	    else
+	      od_get_answer("\n\r");
+	    od_exit(10,FALSE);
+	  } else {
+	    chance=xp_random(100);
+	    if (chance<=success_ch_poison) {
+
+	      ny_line(254,2,1);
+	      if(rip) od_get_answer("\n\r");
+	      //od_printf("\n\r\n`bright red`W`red`ow lotsa dead folks ... It worked ...\n\r");
+	      ny_line(117,0,0);
+	      od_printf("%s",D_Num((INT32)(80*cur_user->level+60) * (INT32)DrgPtsCoef()));
+
+	      points_raise((INT32)80*cur_user->level+60);
+	      news_post("`@W`4ater was poisoned today ... `%nobody was caught","","",0);
+	      if(!rip) {
+		od_disp_str("\n\r");
+		WaitForEnter();
+	      } else {
+		od_disp_str("::^M@OK))|#|#|#\n\r");
+		od_get_answer("\n\r");
+	      }
+	    } else {
+
+	      ny_line(255,2,1);
+	      //od_printf("\n\r\n`bright red`T`red`he poison didn't work ... The guy ripped you off ...\n\r");
+
+	      if(!rip)
+		WaitForEnter();
+	      else
+		od_get_answer("\n\r");
+	    }
+	  }
+	}
+      }
+    }
+    if (key=='U') {  //UNHQ bombing
+      if(rip) no_rip_m=1;
+      intval=pow(1.6,cur_user->level) * 1000;
+
+      ny_line(256,2,0);
+      od_printf(D_Num(intval));
+      ny_line(251,0,0);
+//      od_printf("\n\r\n`bright red`E`red`xplosives will cost ya `bright red`%s`red` ... Do it(`bright red`Y`red`/`bright red`N`red`)",D_Num(intval));
+
+      key=ny_get_answer("YN");
+      if(!rip) od_putch(key);
+      if (key=='Y' && cur_user->unhq<=0) {
+	ny_line(181,2,1);
+	if(!rip)
+	  WaitForEnter();
+	else
+	  od_get_answer("\n\r");
+      } else if (key=='Y') {
+	if (cur_user->money < intval) {
+
+	  ny_line(252,2,1);
+	  //od_printf("\n\r\n`bright red`Y`red`a cant afford it man...\n\r");
+
+	  if(!rip)
+	    WaitForEnter();
+	  else
+	    od_get_answer("\n\r");
+	} else {
+	  money_minus(intval);
+
+	  ny_line(257,2,1);
+//	  od_printf("\n\r\n`bright red`Y`red`ou buy nuff explosives and ...\n\r");
+
+	  cur_user->unhq--;
+	  if(!rip)
+	    WaitForEnter();
+	  else
+	    od_get_answer("\n\r");
+	  chance=xp_random(100);
+	  if (chance<=busted_ch_bomb) {
+
+	    od_printf("\n\r\n");
+	    ny_send_menu(BUSTED,"");
+	    //od_printf("\n\r\n`bright white`BUSTED!!!! .... well the police beat the hell out of you .....");
+	    //od_printf("\n\rWhy don't you try again tomorrow...\n\r");
+	    //od_printf("Ya lost 2%c of yer points!\n\r",37);
+
+	    cur_user->alive=UNCONCIOUS;
+	    points_loose(cur_user->points*.02);
+	    news_post("United Nations HQ bombing",cur_user->name,"",2);
+	    if(!rip)
+	      WaitForEnter();
+	    else
+	      od_get_answer("\n\r");
+	    od_exit(10,FALSE);
+	  } else {
+	    chance=xp_random(100);
+	    if (chance<=success_ch_bomb) {
+
+	      ny_line(258,2,1);
+	      if(rip) od_get_answer("\n\r");
+//	      od_printf("\n\r\n`bright red`W`red`ow ... it didn't fall but almost ...\n\r");
+	      ny_line(117,0,0);
+	      od_printf("%s",D_Num((INT32)(120*cur_user->level+100) * (INT32)DrgPtsCoef()));
+
+	      points_raise((INT32)120*cur_user->level+100);
+	      news_post("`%United Nations HQ`4 was `%bombed `4today ... 10 suspects brought in","","",0);
+	      if(!rip) {
+		od_disp_str("\n\r");
+		WaitForEnter();
+	      } else {
+		od_disp_str("::^M@OK))|#|#|#\n\r");
+		od_get_answer("\n\r");
+	      }
+	    } else {
+
+	      ny_line(259,2,1);
+	      //od_printf("\n\r\n`bright red`T`red`he police found yer explosives ... Bad Luck ...\n\r");
+	      news_post("`@E`4xplosives found in the `%United Nations HQ `4today ...","","",0);
+
+	      if(!rip)
+		WaitForEnter();
+	      else
+		od_get_answer("\n\r");
+	    }
+	  }
+	}
+      }
+    }
+  } while (key!='Q');
+} // end of function evil ops
+
+
+void
+copfight_ops(user_rec *cur_user)  //This function operates the fights with monsters
+{
+
+	char key;  // Menu choice
+
+	do {
+
+		key=callmenu("LYHTQ?\n\r",C_FIG,356,TRUE);
+//		key = copfight(expert);  //Getting the result of menu choice
+		while (key=='?') {
+		  expert+=10;
+		  key=callmenu("LYHTQ?\n\r",C_FIG,356,TRUE);
+		  expert-=10;
+		}
+
+		if (key == 'L') {
+		  copattack_ops(cur_user);
+		} // End of if look
+		else if (key == 'T') {  // Take drugs
+		  take_drug();
+		} // End of take drug
+		else if (key == 'H') {
+		ny_line(199,2,0);
+		//Ya enter the hospital ...
+		if(rip) od_get_answer("\n\r");
+		heal_wounds();
+		} // End of healing
+		else if (key == 'Y') {
+		DisplayStats();
+		WaitForEnter();
+		} // End of viewing the stats
+
+	} while (key != 'Q');   // Do until quit encountered
+}   // end of fight_ops function
+
+
+
+void
+print_cop(INT16 num)
+{
+  od_set_attrib(0x0a);
+  if (num==0)
+    od_printf("Museum Nightguard");
+  else if (num==1)
+    od_printf("School Security Guy");
+  else if (num==2)
+    od_printf("Old Sergant");
+  else if (num==3)
+    od_printf("Regular Street Cop");
+  else if (num==4)
+    od_printf("Motocycle Cop");
+  else if (num==5)
+    od_printf("Detective");
+  else if (num==6)
+    od_printf("Gang Unit Member");
+  else if (num==7)
+    od_printf("Special Assigment Member");
+  else if (num==8)
+    od_printf("Anti Terrorist Unit Guy");
+  else if (num==9)
+    od_printf("SuperCop");
+}
+
+
+
+char
+cop_list(void)
+{
+  char key;
+
+  if(!rip){
+    od_printf("\n\r\n");
+
+    ny_clr_scr();
+
+
+    ny_send_menu(COPS,"");
+  }
+
+/*  od_printf("`bright red`W`red`hich one ya wanna attack:\n\r\n");
+  od_printf("`bright white`0`red`. `bright green`Museum Nightguard\n\r");
+  od_printf("`bright white`1`red`. `bright green`School Security Guy\n\r");
+  od_printf("`bright white`2`red`. `bright green`Old Sergant\n\r");
+  od_printf("`bright white`3`red`. `bright green`Regular Street Cop\n\r");
+  od_printf("`bright white`4`red`. `bright green`Motocycle Cop\n\r");
+  od_printf("`bright white`5`red`. `bright green`Detective\n\r");
+  od_printf("`bright white`6`red`. `bright green`Gang Unit Member\n\r");
+  od_printf("`bright white`7`red`. `bright green`Special Assigment Member\n\r");
+  od_printf("`bright white`8`red`. `bright green`Anti Terrorist Unit Guy\n\r");
+  od_printf("`bright white`9`red`. `bright green`SuperCop\n\r\n");*/
+  ny_line(260,0,0);
+  //ny_disp_emu("`@S`4ooo... (`@0`4-`@9 [Q]`4=quit)");
+
+  key=ny_get_answer("0123456789Q\n\r");
+  if (key=='\n' || key=='\r') key='Q';
+
+  if(!rip) od_putch(key);
+
+  return key;
+}
+
+void copattack_ops(user_rec *user_on)
+{
+  char key;
+  INT16 num;
+  INT32 intval,hitpoints,strength,defense;
+  INT32 hit_s,en_hit_s,def_s,en_def_s;
+
+  if (user_on->turns<=0) {
+
+    ny_line(200,2,1);
+    //od_printf("\n\r\n`bright red`You got no fights left today ...\n\r");
+
+    if(!rip)
+      WaitForEnter();
+    else
+      od_get_answer("\n\r");
+    return;
+  }
+
+  if(expert==3) expert=1;
+
+  intval=event_gen(user_on);
+  if (intval==1) {
+    if(rip) no_rip_m=1;
+    return;
+  }
+  if (intval==2) {
+    if(rip) no_rip_m=1;
+    user_on->turns--;
+    return;
+  }
+
+
+  key=cop_list();
+
+  if (key=='Q') {
+    if(rip) no_rip_m=1;
+    return;
+  }
+
+  num= key - 48;
+
+  if ( (num*2) > user_on->level) {
+
+    ny_line(261,2,1);
+    //od_printf("\n\r\n`bright white`You cannot attack this cop in your level...\n\r");
+
+    if(!rip)
+      WaitForEnter();
+    else {
+      od_get_answer("\n\r");
+      no_rip_m=1;
+    }
+    return;
+  }
+
+  od_printf("\n\r\n");
+  ny_clr_scr();
+
+
+
+  ny_line(201,0,0);
+//  od_printf("`bright red`Y`red`ou find ");
+  print_cop(num);
+  ny_line(202,0,2);
+
+  ny_line(203,0,0);
+//  od_printf("`bright red`H`red`e got a bad lokin' `bright green`");
+  print_arm((weapon)num);
+
+
+  hitpoints=xp_random(pow(1.7,(double)num*2+1)*10 )+pow(1.7,(double)num*2+1)*10;
+  strength=xp_random(pow(1.3,(double)num*2+1)*4)+pow(1.3,(double)num*2+1)*1.8;
+  defense=xp_random(pow(1.3,(double)num*2+1)*4)+pow(1.3,(double)num*2+1)*1.8;
+
+  INT32 enhitp;
+  enhitp=hitpoints;
+
+  user_on->turns--;
+  wrt_sts();
+
+  do {
+
+    bam_cf:
+    ny_line(262,3,2);
+//    od_printf("\n\r\n\n\r`bright red`C`red`op `bright red`F`red`ight");
+//    od_printf("\n\r\n");
+    print_cop(num);
+    ny_line(205,0,0);
+    od_printf(D_Num(hitpoints));
+    ny_line(206,1,0);
+    od_printf("%s\n\r\n",D_Num(user_on->hitpoints));
+/*    od_printf("\n\r\n`bright red`[A] `red`- `bright red`A`red`ttack\n\r");
+    od_printf("`bright red`[T] `red`- `bright red`T`red`ake `bright red`D`red`rug `bright red`A`red`nd `bright red`A`red`ttack\n\r");
+    od_printf("`bright red`[G] `red`- `bright red`G`red`et `bright red`O`red`utta `bright red`H`red`ere\n\r");
+    od_printf("`bright red`[Y] `red`- `bright red`Y`red`er `bright red`S`red`tats\n\r");
+    od_printf("\n\r`bright red`W`red`hat ya gonna do? (`bright red`[A] G Y`red`)");*/
+    ny_send_menu(ATTACK,"");
+    ny_line(207,1,0);
+//    ny_disp_emu("\n\r`@W`4hat ya gonna do? (`@[A] T G Y`4)");
+
+
+    key=od_get_answer("ATKPRGY\n\r");
+    if (key=='\n' || key=='\r') key='A';
+
+    od_putch(key);
+
+	    if(key=='R' && user_on->rocks==0) {
+	      ny_line(445,2,1);
+	      WaitForEnter();
+	      goto bam_cf;
+	    }
+
+
+	    if (key == 'T') {  // Take drugs
+	      take_drug();
+	      no_rip_m=0;
+	      key='A';
+	    }
+	    if (key=='A' || key=='K' || key=='P' || key=='R') {
+	    // when atacking
+//	      randomize();
+	      if(key=='K') {
+		hit_s=xp_random(150 - user_on->kick_ability);
+		if(hit_s<35) {
+		  hit_s = (INT32)user_on->strength * (pow((user_on->level/2)+2,1.2)*6.0*(user_on->kick_ability/100.0)) * (double)((xp_random(80)+90)/100.0);
+		  ny_line(439,2,0);
+		} else {
+		  hit_s=0;
+		  ny_line(440,2,0);
+		}
+	      } else if(key=='P') {
+		hit_s=xp_random(140 - user_on->punch_ability);
+		if(hit_s<35) {
+		  hit_s = (INT32)user_on->strength * (pow((user_on->level/2)+2,1.2)*6.0*(user_on->punch_ability/90.0)) * (double)((xp_random(80)+90)/100.0);
+		  ny_line(441,2,0);
+		} else {
+		  hit_s=0;
+		  ny_line(442,2,0);
+		}
+	      } else if(key=='R') {
+		hit_s=xp_random(145 - user_on->throwing_ability);
+		user_on->rocks--;
+		if(hit_s<35) {
+		  hit_s = (INT32)user_on->strength * (pow((user_on->level/2)+2,1.2)*6.0*(user_on->throwing_ability/110.0)) * (double)((xp_random(80)+90)/100.0);
+		  ny_line(443,2,0);
+		} else {
+		  hit_s=0;
+		  ny_line(444,2,0);
+		}
+	     }
+
+
+    /*if (key == 'T') {  // Take drugs
+      take_drug();
+      no_rip_m=0;
+      key='A';
+    }
+    if (key=='A') {*/
+      // when atacking
+
+//      randomize();
+      attack_again_c:;
+      if(key=='A')
+	hit_s = user_on->strength * (what_arm_force(user_on->arm)) * (double)((xp_random(80)+80)/100.0);
+      // If he is on drugs
+      if(user_on->drug_high > 0)
+	hit_s = (hit_s * what_drug_force_a(user_on->drug,user_on->drug_high));
+
+//      hit_s*=pow(1.1,user_on->level);
+
+      hit_s*=(100.0-(user_on->since_got_laid*2))/100.0;
+      if (user_on->drug>=COKE) hit_s-=xp_random(user_on->drug_days_since * pow((double)user_on->drug_addiction,1.2))/60;
+      if (hit_s<0) hit_s=0;
+
+      en_hit_s = strength * (what_arm_force((weapon)num)) * (double)((xp_random(75)+75)/100.0);
+
+      def_s = user_on->defense * what_drug_force_d(user_on->drug,user_on->drug_high) * (double)((xp_random(80)+140)/100.0);
+      def_s*=pow(1.2,user_on->level);
+      def_s*=(100.0 - (user_on->since_got_laid*2))/100.0;
+      if (user_on->drug>=COKE) def_s-=xp_random(user_on->drug_days_since * pow(user_on->drug_addiction,1.2))/60;
+      if (def_s<0) def_s=0;
+
+      en_def_s = defense * (double)((xp_random(80)+50)/100.0);
+
+      def_s/=2;
+      en_def_s/=2;
+
+      en_hit_s-=def_s;
+      if (en_hit_s<0) en_hit_s=0;
+
+      hit_s-=en_def_s;
+      if (hit_s<0) hit_s=0;
+
+      if (hit_s==0 && en_hit_s==0 && key=='A') goto attack_again_c;
+
+      hitpoints-=hit_s;
+
+
+      ny_line(208,2,0);
+//      od_printf("\n\r\n`bright red`Y`red`a kick ");
+      print_cop(num);
+      ny_line(209,0,0);
+      od_printf(D_Num(hit_s));
+      ny_line(210,0,0);
+
+
+      if (hitpoints>0) {
+
+	od_printf("\n\r\n");
+	print_cop(num);
+	ny_line(211,0,0);
+	od_printf(D_Num(en_hit_s));
+	ny_line(210,0,0);
+	user_on->hitpoints-=en_hit_s;
+	wrt_sts();
+	if (user_on->hitpoints<=0) {
+	  od_printf("\n\r\n");
+	  ny_send_menu(ASS_KICKED,"");
+
+/*	  od_printf("\n\r\n`bright white`You had yer ass kicked ... oh well that happens\n\r");
+	  od_printf("Come back tomorrow to get revenge ...\n\r");
+	  od_printf("You lost all the money on ya...\n\r");
+	  od_printf("And 2%c of yer points\n\r",37);*/
+
+	  news_post(user_on->say_loose,user_on->name,"A Cop",5);
+	  user_on->money=0;
+	  user_on->alive=UNCONCIOUS;
+	  points_loose(user_on->points*.02);
+	  //wrt_sts();
+	  WaitForEnter();
+	  od_exit(10,FALSE);
+	}
+
+      }
+    } else if (key=='G') {
+      intval=xp_random(2);
+      if (intval==0) {
+
+	ny_line(212,2,1);
+	//od_printf("\n\r\n`bright red`Y`red`a got away ...\n\r");
+
+	if(!rip)
+	  WaitForEnter();
+	else
+	  od_get_answer("\n\r");
+	return;
+      } else {
+
+	ny_line(213,2,1);
+	//od_printf("\n\r\n`bright red`Y`red`e couldn't find a way outta this ...\n\r");
+
+//	randomize();
+	en_hit_s = strength * (what_arm_force((weapon)num)) * (double)((xp_random(75)+75)/100.0);
+	def_s = user_on->defense * what_drug_force_d(user_on->drug,user_on->drug_high) * (double)((xp_random(80)+140)/100.0);
+	def_s*=pow(1.2,user_on->level);
+	def_s*=(100.0-(user_on->since_got_laid*2))/100.0;
+	if (user_on->drug>=COKE) def_s-=xp_random(user_on->drug_days_since * pow(user_on->drug_addiction,1.2))/60;
+	if (def_s<0) def_s=0;
+	def_s/=2;
+	en_hit_s-=def_s;
+	if (en_hit_s<0) en_hit_s=0;
+
+
+	od_printf("\n\r\n");
+	print_cop(num);
+	ny_line(211,0,0);
+	od_printf(D_Num(en_hit_s));
+	ny_line(210,0,0);
+
+
+	user_on->hitpoints-=en_hit_s;
+	if (user_on->hitpoints<=0) {
+
+	  od_printf("\n\r\n");
+	  ny_send_menu(ASS_KICKED,"");
+
+	  /*od_printf("\n\r\n`bright white`You had yer ass kicked ... oh well that happens\n\r");
+	  od_printf("Come back tomorrow to get revenge ...\n\r");
+	  od_printf("You lost all the money on ya...\n\r");
+	  od_printf("And 2%c of yer points\n\r",37);*/
+	  news_post(user_on->say_loose,user_on->name,"A Cop",5);
+	  user_on->alive=UNCONCIOUS;
+	  user_on->money=0;
+	  points_loose(user_on->points*.02);
+//	  wrt_sts();
+
+	  WaitForEnter();
+	  od_exit(10,FALSE);
+	}
+      }
+    } else {
+      DisplayStats();
+      WaitForEnter();
+    }
+  } while (hitpoints>0);
+
+  //points_raise((DWORD)xp_random(((num+1)*2)*12)+3);
+  intval=(num+1)*(1.1)*(randomf(enhitp*.5)+enhitp*.5)+(4*(num+1));
+  if (intval<enhitp) intval=enhitp;
+  money_plus(intval);
+
+  //od_printf("\n\r%lu",user_on->money);
+  //money_plus((user_on->level+1)*xp_random((enhitp*2))+(20*(user_on->level+1)));
+  //od_printf("\n\r%lu",user_on->money);
+  //user_on->money+=xp_random((enhitp*(1.05+(.15/((user_on->level+1)/5.0)))))+(18*(user_on->level+1));
+  //user_on->money+=xp_random((enhitp*(.75+(.75/(user_on->level+1)))))+(18*(user_on->level+1));
+
+  ny_line(214,2,0);
+  //od_printf("\n\r\n`bright red`Y`red`ou kicked ");
+  print_cop(num);
+//  od_printf("'s `red`ass ...\n\r\n");
+  ny_line(215,0,2);
+  ny_line(216,0,0);
+  od_printf(D_Num(intval));
+  ny_line(217,0,0);
+  intval=xp_random(((num+1)*2)*12)+3;
+  od_printf(D_Num((DWORD)intval * (DWORD)DrgPtsCoef()));
+  ny_line(218,0,1);
+  points_raise(intval);
+
+  WaitForEnter();
+
+
+} // End of function cop attack ops
+
+double
+what_drug_force_a(drug_type droga,INT16 high) // Gives the factor for drug in use for attack
+{
+  if(droga == POT) return (1.0-(high/800.0));
+  else if(droga == HASH) return (1.0-(high/650.0));
+  else if(droga == LSD) return (1.0-(high/500.0));
+  else if(droga == COKE) return ((.5*(high/100.0))+1);
+  else if(droga == PCP) return ((high/100.0)+1);
+  else return 1;
+} // End of function what drug force a
+
+double
+what_drug_force_d(drug_type droga,INT16 high) // Gives the factor for drug in use fer defense
+{
+  if(droga == POT) return (1.0-(high/800.0));
+  else if(droga == HASH) return (1.0-(high/650.0));
+  else if(droga == LSD) return (1.0-(high/500.0));
+  else if(droga == COKE) return (.5*(high/100.0)+1);
+  else if(droga == PCP) return 1;
+  else return ((high/100.0)+1);
+} // End of function what drug force d
+
+
+double what_arm_force(weapon zbran) // Gives the multiplication of strengh in from weapon
+{
+
+if(zbran == HANDS) return 1.0;
+else if(zbran == PEPPER) return 1.5;
+else if(zbran == SHARP_STICK) return 1.6;
+else if(zbran == SCREWDRIVER) return 1.7;
+else if(zbran == KNIFE) return 2.0;
+else if(zbran == HAMMER) return 3.0;
+else if(zbran == CHAIN) return 4.0;
+else if(zbran == LEAD_PIPE) return 5.5;
+else if(zbran == GUN) return 7.0;
+else if(zbran == COLT) return 8.5;
+else if(zbran == RIFLE) return 11.0;
+else if(zbran == ELEPHANT_GUN) return 13.3;
+else if(zbran == LASER_GUN) return 16.0;
+else if(zbran == NAILGUN) return 19.0;
+else if(zbran == SHOTGUN) return 25.0;
+else if(zbran == ASSAULT_RIFLE) return 33.3;
+else if(zbran == MACHINEGUN) return 40.0;
+else if(zbran == PROTON_GUN) return 54.0;
+else if(zbran == GRANADE_LAUNCHER) return 70.0;
+else if(zbran == NEUTRON_PHASER) return 95.0;
+else if(zbran == BLASTER) return 120.0;
+else if(zbran == ULTRASOUND_GUN) return 127.0;
+else return 1.0;
+
+} // End of function what arm force
+
+INT16
+event_gen(user_rec *user_on)
+{
+  INT16 chance;
+  INT32 intval;
+  char key;
+//  char numstr[14];
+//  ffblk ff;
+
+  //randomize();
+
+  ch_game_d();
+  if(no_forrest_IGM==FALSE) {
+//    ch_game_d();
+    intval=xp_random(9);
+    if (intval>1) {
+      //no event
+      return 0;
+    } else if (intval==0) {
+      //find an igm
+      forrest_IGM();
+      return 1;
+    }
+  } else {
+//    ch_game_d();
+    intval=xp_random(7);
+    if (intval>0) {
+      //no event
+      return 0;
+    }
+  }
+
+  intval=xp_random(6)+1;
+
+  if(intval==1) {
+
+    od_printf("\n\r\n");
+    if(!rip) ny_clr_scr();
+    ny_line(183,0,2);
+    //od_printf("`bright`Stuff happens......\n\r\n");
+    if(rip) od_get_answer("\n\r");
+    ny_line(186,0,1);
+//    od_printf("`bright red`Y`red`a find an open car ...\n\r");
+    if(rip) od_get_answer("\n\r");
+    ny_line(187,0,1);
+//    od_printf("`bright red`T`red`here is money inside ...\n\r");
+    if(rip) od_get_answer("\n\r");
+    ny_line(188,0,0);
+//    od_printf("`bright red`T`red`ake the money? (`bright red`Y`red`/`bright red`N`red`)");
+
+    key=ny_get_answer("YN");
+
+    if(!rip)
+      od_printf("%c\n\r\n",key);
+    else
+      od_disp_str("\n\n\r");
+    if (key=='N') {
+	ny_line(189,0,1);
+//      od_printf("`bright red`Y`red`a consider the risks and decide it ain't a good idea\n\r");
+
+      if(!rip)
+	WaitForEnter();
+      else
+	od_get_answer("\n\r");
+      return 1;
+    }
+
+    intval=xp_random(3);
+    if (intval==0) {
+
+      ny_line(190,0,1);
+      if(rip) od_get_answer("\n\r");
+//      od_printf("`bright red`W`red`ow, the guy that owns the car came back and kicked yer ass!\n\r");
+      ny_line(191,0,1);
+      //      od_printf("`bright red`Y`red`a lost almost all yer hitpoints and 1/2 the money on ya!\n\r");
+
+      money_minus(.5*user_on->money);
+      user_on->hitpoints=1;
+      wrt_sts();
+      if(!rip)
+	WaitForEnter();
+      else
+	od_get_answer("\n\r");
+      return 1;
+    }
+
+    intval=randomf(40*pow(1.5,(double)user_on->level));
+    ny_line(263,0,0);
+//    od_printf("`bright red`W`red`ow ya got `bright red`
+    od_printf(D_Num(intval));
+    ny_line(264,0,1);
+//    `red` from that car ...\n\r",D_Num(intval));
+
+    money_plus(intval);
+    points_raise((10 * user_on->level) + 10);
+    if(!rip)
+      WaitForEnter();
+    else
+      od_get_answer("\n\r");
+    return 1;
+  }
+  if(intval==2) {
+
+    od_printf("\n\r\n");
+    if(!rip) ny_clr_scr();
+    ny_line(183,0,2);
+    if(rip) od_get_answer("\n\r");
+//    od_printf("`bright`Stuff happens......\n\r\n");
+    ny_line(184,0,1);
+    if(rip) od_get_answer("\n\r");
+//    od_printf("`bright red`Y`red`a find a rich new car ...\n\r");
+    ny_line(185,0,0);
+//    od_printf("`bright red`S`red`mash it? (`bright red`Y`red`/`bright red`N`red`)");
+
+    key=ny_get_answer("YN");
+
+    if(!rip)
+      od_printf("%c\n\r\n",key);
+    else
+      od_disp_str("\n\r");
+    if (key=='N') {
+      ny_line(189,0,1);
+//      od_printf("`bright red`Y`red`a consider the risks and decide it ain't a good idea\n\r");
+
+      if(!rip)
+	WaitForEnter();
+      else
+	od_get_answer("\n\r");
+      return 1;
+    }
+
+    chance=xp_random(100);
+    if (chance<=busted_ch_car) {
+
+      ny_send_menu(BUSTED,"");
+      //BUSTED!!!! .... well the police beat the hell out of you .....
+      //Why don't you try again tomorrow...
+      //Ya lost 2% of yer points!
+
+      user_on->alive=UNCONCIOUS;
+      points_loose(user_on->points*.02);
+      news_post("busting up a car",user_on->name,"",2);
+      if(!rip)
+	WaitForEnter();
+      else
+	od_get_answer("\n\r");
+      od_exit(10,FALSE);
+    } else {
+      chance=xp_random(100);
+      if(chance<=success_ch_car) {
+
+	ny_line(192,0,1);
+	if(rip) od_get_answer("\n\r");
+	//od_printf("\n\r\n`bright red`Y`red`ou totally smashed that car .... a very nice job...\n\r");
+	ny_line(117,0,0);
+	od_printf("%s",D_Num((INT32)(25*user_on->level+25) * (INT32)DrgPtsCoef()));
+
+	points_raise((INT32)25 * user_on->level+25);
+	if(!rip) {
+	  od_disp_str("\n\r");
+	  WaitForEnter();
+	} else {
+	  od_disp_str("::^M@OK))|#|#|#\n\r");
+	  od_get_answer("\n\r");
+	}
+	return 1;
+      } else {
+
+	ny_line(406,0,1);
+
+	if(!rip)
+	  WaitForEnter();
+	else
+	  od_get_answer("\n\r");
+	return 1;
+      }
+    }
+  }
+  if(intval==3) {
+
+    od_printf("\n\r\n");
+    if(!rip) ny_clr_scr();
+    ny_line(183,0,2);
+    if(rip) od_get_answer("\n\r");
+    //od_printf("`bright`Stuff happens......\n\r\n");
+    ny_line(193,0,1);
+    if(rip) od_get_answer("\n\r");
+//    od_printf("`bright red`Y`red`a find a bunch of hippies ...\n\r");
+    ny_line(194,0,1);
+    if(rip) od_get_answer("\n\r");
+//    od_printf("`bright red`Y`red`a smoke some dope with them ...\n\r");
+    ny_line(195,0,1);
+    if(rip) od_get_answer("\n\r");
+//    od_printf("`bright red`T`red`hey give ya hit of yer favorite drug ...\n\r");
+    ny_line(196,0,1);
+    //    od_printf("`bright red`A`red`nd yer hitpoints max out!\n\r");
+
+    if (user_on->drug_hits<32767) user_on->drug_hits++;
+    user_on->hitpoints=user_on->maxhitpoints;
+    points_raise((10 * user_on->level) + 10);
+    if(!rip)
+      WaitForEnter();
+    else
+      od_get_answer("\n\r");
+    return 1;
+  }
+  if(intval==4) {
+
+    od_printf("\n\r\n");
+    if(!rip) ny_clr_scr();
+    intval=randomf(pow(1.5,(user_on->level+1))*10);
+    ny_line(183,0,2);
+    if(rip) od_get_answer("\n\r");
+    //od_printf("`bright`Stuff happens......\n\r\n");
+    ny_line(265,0,0);
+    od_printf(D_Num(intval));
+    ny_line(266,0,1);
+
+    money_plus(intval);
+    if(!rip)
+      WaitForEnter();
+    else
+      od_get_answer("\n\r");
+    return 1;
+  }
+  if(intval==5) {
+
+    od_printf("\n\r\n");
+    if(!rip) ny_clr_scr();
+    intval=xp_random(10 * (user_on->level+1))+2;
+    ny_line(183,0,2);
+    if(rip) od_get_answer("\n\r");
+    //od_printf("`bright`Stuff happens......\n\r\n");
+    ny_line(197,0,1);
+    if(rip) od_get_answer("\n\r");
+//    od_printf("`bright red`Y`red`a fell inside a hole ...\n\r");
+    ny_line(198,0,1);
+    //od_printf("`bright red`Y`red`a lost 1/3 of yer hitpoints ...\n\r");
+
+    user_on->hitpoints*=2.0/3.0;
+    wrt_sts();
+    if(!rip)
+      WaitForEnter();
+    else
+      od_get_answer("\n\r");
+    return 1;
+  }
+  if(intval==6) {
+    od_printf("\n\r\n");
+    if(!rip) ny_clr_scr();
+    intval=xp_random(14)+2;
+    if((intval + user_on->rocks) > 250) intval=250 - user_on->rocks;
+    ny_line(183,0,2);
+    //Stuff happens...
+    if(rip)
+      od_get_answer("\n\r");
+    ny_line(265,0,0);
+    od_printf("%d",intval);
+    ny_line(438,0,1);
+
+    user_on->rocks+=intval;
+
+    if(!rip)
+      WaitForEnter();
+    else
+      od_get_answer("\n\r");
+
+    return 1;
+  }
+
+  return 0;
+}
+
+
+INT16
+len_format(char str[])
+{
+  INT16 len,
+      cnt;
+
+  len=0;
+  cnt=0;
+
+  while(str[cnt]!=0) {
+    if(str[cnt]!='`') {
+      cnt++;
+      len++;
+    } else {
+      if(str[++cnt]!=0)
+	cnt++;
+    }
+  }
+  return len;
+}
+
+void
+ny_send_file(char filename[])
+{
+  char line[124];
+  FILE *phile;
+  INT16 cnt;
+  INT16 nonstop=FALSE;
+  char key;
+  char *keyp;
+
+  phile=ShareFileOpen(filename,"rb");
+
+  cnt=2;
+
+  while (fgets(line,120,phile)!=NULL) {
+    if((keyp=strchr(line,'\r'))!=NULL) {
+      *keyp='\r';
+      *(keyp+1)='\n';
+      *(keyp+2)='\0';
+    }
+    ny_disp_emu(line);
+    if (nonstop==FALSE) {
+      cnt++;
+      if(len_format(line)>80)
+	cnt++;
+
+      if (cnt>od_control.user_screen_length) {
+
+	ny_disp_emu("`%More (Y/n/=)");
+	key=ny_get_answer("YN=\n\r");
+	od_printf("\r            \r");
+	if(key=='N') {
+	  fclose(phile);
+	  return;
+	}
+	if(key=='=')
+	  nonstop=TRUE;
+
+	cnt=2;
+	//od_printf("\n\r");
+      }
+    }
+  }
+  fclose(phile);
+//  WaitForEnter();
+}
+
+
+void
+ny_get_index(void)
+{
+  char line[124];
+  FILE *phile;
+  char numstr[26];
+
+  ch_game_d();
+
+  if(rip) {
+   if(clean_mode==FALSE)
+     phile=ShareFileOpen("menus.rip","rb");
+   else
+     phile=ShareFileOpen("menusc.rip","rb");
+  } else {
+    if(clean_mode==FALSE)
+      phile=ShareFileOpen("menus.dat","rb");
+    //  else if(clean_mode==666)
+    //    phile=ShareFileOpen("MENUSXD.DAT","rb");
+    else
+      phile=ShareFileOpen("menusc.dat","rb");
+  }
+
+  while (fgets(line,120,phile)!=NULL) {
+    sscanf(line,"%s",numstr);
+
+    if(strcmp(numstr,"@CENTRAL_PARK")==0)
+      menu_index[(INT16)CENTRAL_PARK]=ftell(phile);
+    else if(strcmp(numstr,"@CENTRAL_PARK_IB")==0)
+      menu_index[(INT16)CENTRAL_PARK_IB]=ftell(phile);
+    else if(strcmp(numstr,"@EVIL_STUFF")==0)
+      menu_index[(INT16)EVIL_STUFF]=ftell(phile);
+    else if(strcmp(numstr,"@BANK")==0)
+      menu_index[(INT16)BANK]=ftell(phile);
+    else if(strcmp(numstr,"@HEALING")==0)
+      menu_index[(INT16)HEALING]=ftell(phile);
+    else if(strcmp(numstr,"@FOOD")==0)
+      menu_index[(INT16)FOOD]=ftell(phile);
+    else if(strcmp(numstr,"@DRUGS")==0)
+      menu_index[(INT16)DRUGS]=ftell(phile);
+    else if(strcmp(numstr,"@ARMS")==0)
+      menu_index[(INT16)ARMS]=ftell(phile);
+    else if(strcmp(numstr,"@SEX")==0)
+      menu_index[(INT16)SEX]=ftell(phile);
+    else if(strcmp(numstr,"@MAIL")==0)
+      menu_index[(INT16)MAIL]=ftell(phile);
+    else if(strcmp(numstr,"@REST")==0)
+      menu_index[(INT16)REST]=ftell(phile);
+    else if(strcmp(numstr,"@P_FIG")==0)
+      menu_index[(INT16)P_FIG]=ftell(phile);
+    else if(strcmp(numstr,"@C_FIG")==0)
+      menu_index[(INT16)C_FIG]=ftell(phile);
+    else if(strcmp(numstr,"@S_FIG")==0)
+      menu_index[(INT16)S_FIG]=ftell(phile);
+    else if(strcmp(numstr,"@ENTRY_1")==0)
+      menu_index[(INT16)ENTRY_1]=ftell(phile);
+    else if(strcmp(numstr,"@ENTRY_2")==0)
+      menu_index[(INT16)ENTRY_2]=ftell(phile);
+    else if(strcmp(numstr,"@ONLINE")==0)
+      menu_index[(INT16)ONLINE]=ftell(phile);
+    else if(strcmp(numstr,"@NEWZ")==0)
+      menu_index[(INT16)NEWZ]=ftell(phile);
+    else if(strcmp(numstr,"@LIST")==0)
+      menu_index[(INT16)LIST]=ftell(phile);
+    else if(strcmp(numstr,"@CONSIOUS")==0)
+      menu_index[(INT16)CONSIOUS]=ftell(phile);
+    else if(strcmp(numstr,"@ATTACK")==0)
+      menu_index[(INT16)ATTACK]=ftell(phile);
+    else if(strcmp(numstr,"@WIN")==0)
+      menu_index[(INT16)WIN]=ftell(phile);
+    else if(strcmp(numstr,"@MAINT_RUN")==0)
+      menu_index[(INT16)MAINT_RUN]=ftell(phile);
+    else if(strcmp(numstr,"@WEAPONS")==0)
+      menu_index[(INT16)WEAPONS]=ftell(phile);
+    else if(strcmp(numstr,"@COPS")==0)
+      menu_index[(INT16)COPS]=ftell(phile);
+    else if(strcmp(numstr,"@NEW")==0)
+      menu_index[(INT16)NEW]=ftell(phile);
+    else if(strcmp(numstr,"@NATION")==0)
+      menu_index[(INT16)NATION]=ftell(phile);
+//    else if(strcmp(numstr,"@BLUE_LINE")==0)
+//      menu_index[(INT16)BLUE_LINE]=ftell(phile);
+    else if(strcmp(numstr,"@OTHER")==0)
+      menu_index[(INT16)OTHER]=ftell(phile);
+//    else if(strcmp(numstr,"@DEAD_OUT")==0)
+//      menu_index[(INT16)DEAD_OUT]=ftell(phile);
+//    else if(strcmp(numstr,"@BEATEN_OUT")==0)
+//      menu_index[(INT16)BEATEN_OUT]=ftell(phile);
+//    else if(strcmp(numstr,"@FOUGHT_OUT")==0)
+//      menu_index[(INT16)FOUGHT_OUT]=ftell(phile);
+//    else if(strcmp(numstr,"@WAKE_UP")==0)
+//      menu_index[(INT16)WAKE_UP]=ftell(phile);
+//    else if(strcmp(numstr,"@BEEN_ALIVE")==0)
+//      menu_index[(INT16)BEEN_ALIVE]=ftell(phile);
+    else if(strcmp(numstr,"@NEW_NAME")==0)
+      menu_index[(INT16)NEW_NAME]=ftell(phile);
+    else if(strcmp(numstr,"@NEW_WIN")==0)
+      menu_index[(INT16)NEW_WIN]=ftell(phile);
+    else if(strcmp(numstr,"@NEW_LOOSE")==0)
+      menu_index[(INT16)NEW_LOOSE]=ftell(phile);
+    else if(strcmp(numstr,"@TEN_BEST")==0)
+      menu_index[(INT16)TEN_BEST]=ftell(phile);
+    else if(strcmp(numstr,"@BUSTED")==0)
+      menu_index[(INT16)BUSTED]=ftell(phile);
+    else if(strcmp(numstr,"@ASS_KICKED")==0)
+      menu_index[(INT16)ASS_KICKED]=ftell(phile);
+    else if(strcmp(numstr,"@ASS_KICKED_P")==0)
+      menu_index[(INT16)ASS_KICKED_P]=ftell(phile);
+    else if(strcmp(numstr,"@ASS_KICKED_O")==0)
+      menu_index[(INT16)ASS_KICKED_O]=ftell(phile);
+    else if(strcmp(numstr,"@COLORS_HELP")==0)
+      menu_index[(INT16)COLORS_HELP]=ftell(phile);
+    else if(strcmp(numstr,"@CH_DRUG")==0)
+      menu_index[(INT16)CH_DRUG]=ftell(phile);
+    else if(strcmp(numstr,"@LIST_IB_SYS")==0)
+      menu_index[(INT16)LIST_IB_SYS]=ftell(phile);
+    else if(strcmp(numstr,"@IBBS_MENU")==0)
+      menu_index[(INT16)IBBS_MENU]=ftell(phile);
+    else if(strcmp(numstr,"@HITMEN")==0)
+      menu_index[(INT16)HITMEN]=ftell(phile);
+    else if(strcmp(numstr,"@TEN_BEST_IBBS")==0)
+      menu_index[(INT16)TEN_BEST_IBBS]=ftell(phile);
+  }
+  fclose(phile);
+}
+
+
+
+
+char
+ny_send_menu(menu_t menu,char allowed[],INT16 onscreen)
+{
+  char line[124];
+  FILE *phile;
+  INT16 cnt;
+  INT16 nonstop=FALSE;
+  char key=0;
+  char *keyp;
+  char c_dir;
+  char menu_type;
+
+  menu_type=0;
+
+  c_dir=c_dir_g;
+
+  if(c_dir==1) ch_game_d();
+
+  if(rip) {
+   if(clean_mode==FALSE)
+     phile=ShareFileOpen("menus.rip","rb");
+   else
+     phile=ShareFileOpen("menusc.rip","rb");
+  } else {
+    if(clean_mode==FALSE)
+      phile=ShareFileOpen("menus.dat","rb");
+    //  else if(clean_mode==666)
+    //    phile=ShareFileOpen("MENUSXD.DAT","rb");
+    else
+      phile=ShareFileOpen("menusc.dat","rb");
+  }
+
+  fseek(phile,menu_index[(INT16)menu],SEEK_SET);
+
+  cnt=2+onscreen;
+
+  while (fgets(line,120,phile)!=NULL && line[0]!='@') {
+   if((cnt-onscreen)==2 && rip && line[0]=='$' && line[1]=='R' && line[2]=='I' && line[3]=='P' && line[4]=='$') {
+    menu_type=1;
+    od_disp_str("\n\r");
+   } else {
+    if(!rip) {
+      key=od_get_key(FALSE);
+      if (key>='a' && key<='z') key-=32;
+      if (key!=0 && strchr(allowed,key)!=NULL) {
+	fclose(phile);
+	if(c_dir==1) ch_flag_d();
+	return key;
+      }
+    }
+
+    if((keyp=strchr(line,'\r'))!=NULL) {
+      *keyp='\r';
+      *(keyp+1)='\n';
+      *(keyp+2)='\0';
+    }
+
+    if(line[0]=='\0')
+      od_printf("\n\r");
+    else
+      if(menu_type==0)
+	ny_disp_emu(line);
+      else
+	nyr_disp_emu(line);
+
+    if (nonstop==FALSE && menu_type==0) {
+      cnt++;
+      if(len_format(line)>80)
+	cnt++;
+
+      if (cnt>od_control.user_screen_length) {
+
+	ny_disp_emu("`%More (Y/n/=)");
+	key=ny_get_answer("YN=\n\r");
+	od_printf("\r            \r");
+	if(key=='N') {
+	  fclose(phile);
+	  if(c_dir==1) ch_flag_d();
+	  return 0;
+	}
+	if(key=='=')
+	  nonstop=TRUE;
+
+	cnt=2;
+
+      }
+    }
+   }
+  }
+  fclose(phile);
+  if(c_dir==1) ch_flag_d();
+  return 0;
+}
+
+INT32 fpoint[15];
+
+void
+ny_stat_line(INT16 line,INT16 before,INT16 after)
+{
+  char c_dir;
+  INT16 cnt;
+  static char *lines[44];
+  FILE *phile;
+  char string[302];
+//  char *keyp;
+  INT16 x;
+
+  if(line==-1) {
+   c_dir=c_dir_g;
+
+   if(c_dir==1) ch_game_d();
+
+   if(rip) {
+    if(clean_mode==FALSE)
+      phile=ShareFileOpen("lines.rip","rb");
+//  else if(clean_mode==666)
+//    phile=ShareFileOpen("LINESXD.RIP","rb");
+    else
+      phile=ShareFileOpen("linesc.rip","rb");
+   } else {
+    if(clean_mode==FALSE)
+      phile=ShareFileOpen("lines.dat","rb");
+//  else if(clean_mode==666)
+//    phile=ShareFileOpen("LINESXD.DAT","rb");
+    else
+      phile=ShareFileOpen("linesc.dat","rb");
+   }
+    ny_read_stat_line(38,string,phile);
+    lines[0]=(char *)malloc(strlen(string)+1);
+    strcpy(lines[0],string);
+    ny_read_stat_line(362,string,phile);
+    lines[1]=(char *)malloc(strlen(string)+1);
+    strcpy(lines[1],string);
+    ny_read_stat_line(363,string,phile);
+    lines[2]=(char *)malloc(strlen(string)+1);
+    strcpy(lines[2],string);
+
+    ny_read_stat_line(364,string,phile);
+    lines[3]=(char *)malloc(strlen(string)+1);
+    strcpy(lines[3],string);
+
+    ny_read_stat_line(365,string,phile);
+    lines[4]=(char *)malloc(strlen(string)+1);
+    strcpy(lines[4],string);
+
+    ny_read_stat_line(366,string,phile);
+    lines[5]=(char *)malloc(strlen(string)+1);
+    strcpy(lines[5],string);
+
+    ny_read_stat_line(399,string,phile);
+    lines[6]=(char *)malloc(strlen(string)+1);
+    strcpy(lines[6],string);
+
+    ny_read_stat_line(39,string,phile);
+    lines[7]=(char *)malloc(strlen(string)+1);
+    strcpy(lines[7],string);
+
+    ny_read_stat_line(367,string,phile);
+    lines[8]=(char *)malloc(strlen(string)+1);
+    strcpy(lines[8],string);
+
+    ny_read_stat_line(368,string,phile);
+    lines[9]=(char *)malloc(strlen(string)+1);
+    strcpy(lines[9],string);
+
+    ny_read_stat_line(270,string,phile);
+    lines[10]=(char *)malloc(strlen(string)+1);
+    strcpy(lines[10],string);
+
+    ny_read_stat_line(369,string,phile);
+    lines[11]=(char *)malloc(strlen(string)+1);
+    strcpy(lines[11],string);
+
+    ny_read_stat_line(370,string,phile);
+    lines[12]=(char *)malloc(strlen(string)+1);
+    strcpy(lines[12],string);
+
+    ny_read_stat_line(371,string,phile);
+    lines[13]=(char *)malloc(strlen(string)+1);
+    strcpy(lines[13],string);
+
+    for(x=271;x<286;x++) {
+      ny_read_stat_line(x,string,phile);
+      lines[x-257]=(char *)malloc(strlen(string)+1);
+      strcpy(lines[x-257],string);
+    }
+    ny_read_stat_line(433,string,phile);
+    lines[29]=(char *)malloc(strlen(string)+1);
+    strcpy(lines[29],string);
+
+    ny_read_stat_line(434,string,phile);
+    lines[30]=(char *)malloc(strlen(string)+1);
+    strcpy(lines[30],string);
+
+    ny_read_stat_line(435,string,phile);
+    lines[31]=(char *)malloc(strlen(string)+1);
+    strcpy(lines[31],string);
+
+    ny_read_stat_line(436,string,phile);
+    lines[32]=(char *)malloc(strlen(string)+1);
+    strcpy(lines[32],string);
+
+    for(x=286;x<292;x++) {
+      ny_read_stat_line(x,string,phile);
+      lines[x-253]=(char *)malloc(strlen(string)+1);
+      strcpy(lines[x-253],string);
+    }
+    ny_read_stat_line(372,string,phile);
+    lines[39]=(char *)malloc(strlen(string)+1);
+    strcpy(lines[39],string);
+
+    ny_read_stat_line(373,string,phile);
+    lines[40]=(char *)malloc(strlen(string)+1);
+    strcpy(lines[40],string);
+
+    ny_read_stat_line(374,string,phile);
+    lines[41]=(char *)malloc(strlen(string)+1);
+    strcpy(lines[41],string);
+
+    ny_read_stat_line(292,string,phile);
+    lines[42]=(char *)malloc(strlen(string)+1);
+    strcpy(lines[42],string);
+
+    ny_read_stat_line(293,string,phile);
+    lines[43]=(char *)malloc(strlen(string)+1);
+    strcpy(lines[43],string);
+
+//    printf("\n%d\n\r",lines[42]);
+//    printf("\n%s\n\r",lines[42]);
+
+    fclose(phile);
+    if(c_dir==1) ch_flag_d();
+//    od_get_answer("K");
+    return;
+  }
+  for(cnt=0;cnt<before;cnt++)
+    od_printf("\n\r");
+
+  ny_disp_emu((char *)lines[line]);
+//  printf("\n%s|%d\n\r",lines[0],line);
+  //od_putch('|');
+
+  for(cnt=0;cnt<after;cnt++)
+    od_printf("\n\r");
+}
+
+
+void
+ny_read_stat_line(INT16 line,char *string, FILE *phile)
+{
+  INT16 cnt2,cnt;
+//  FILE *phile;
+  char *keyp;
+
+    cnt2=line/50;
+    line-=50*cnt2;
+    fseek(phile,fpoint[cnt2],SEEK_SET);
+    if(cnt2>0) fgets(string,300,phile);
+    for(cnt=0;cnt<line;cnt++)
+      fgets(string,300,phile);
+
+    if((keyp=strchr(string,'\r'))!=NULL)
+      *keyp='\0';
+
+//    printf("\n%d\n\r",*string);
+//    printf("\n%s",string);
+//    scanf("%c",keyp);
+}
+
+void
+ny_line(INT16 line,INT16 before,INT16 after)
+{
+  char lines[302];
+  FILE *phile;
+  INT16 cnt,cnt2;
+  char *keyp;
+//  static long fpoint[10];
+  char c_dir;
+
+  c_dir=c_dir_g;
+
+  if(c_dir==1) ch_game_d();
+
+  if(rip) {
+    if(clean_mode==FALSE)
+      phile=ShareFileOpen("lines.rip","rb");
+//  else if(clean_mode==666)
+//    phile=ShareFileOpen("LINESXD.RIP","rb");
+    else
+      phile=ShareFileOpen("linesc.rip","rb");
+  } else {
+    if(clean_mode==FALSE)
+      phile=ShareFileOpen("lines.dat","rb");
+//  else if(clean_mode==666)
+//    phile=ShareFileOpen("LINESXD.DAT","rb");
+    else
+      phile=ShareFileOpen("linesc.dat","rb");
+  }
+
+
+  if(line == -1) {
+    cnt2=1;
+    fpoint[0]=0;
+    while (fgets(lines,300,phile)!=NULL) {
+      for(cnt=1;fgets(lines,300,phile)!=NULL && cnt<49;cnt++)
+      fpoint[cnt2]=ftell(phile);
+      cnt2++;
+    }
+    fclose(phile);
+    if(c_dir==1) ch_flag_d();
+    return;
+  }
+
+  cnt2=line/50;
+
+  line-=50*cnt2;
+
+//  line++;
+
+  fseek(phile,fpoint[cnt2],SEEK_SET);
+
+  if(cnt2>0) fgets(lines,300,phile);
+  for(cnt=0;cnt<line;cnt++)
+    fgets(lines,300,phile);
+
+  fclose(phile);
+
+  if((keyp=strchr(lines,'\r'))!=NULL)
+    *keyp='\0';
+
+  for(cnt=0;cnt<before;cnt++)
+    od_printf("\n\r");
+
+/*  if(before==0 && rip==TRUE && lines[0]=='!')
+    od_printf("\n\r");*/
+
+
+  ny_disp_emu(lines);
+
+  for(cnt=0;cnt<after;cnt++)
+    od_printf("\n\r");
+
+/*  if(after==0 && rip==TRUE && lines[0]=='!')
+    od_printf("\n\r");*/
+
+  if(c_dir==1) ch_flag_d();
+  return;
+}
diff --git a/src/doors/ny2008/src/fights.h b/src/doors/ny2008/src/fights.h
new file mode 100644
index 0000000000000000000000000000000000000000..7c46f7eaec391f2fd86edf2446687a2c1f33f3de
--- /dev/null
+++ b/src/doors/ny2008/src/fights.h
@@ -0,0 +1,37 @@
+#include <OpenDoor.h>
+
+void	fight_ops(user_rec *cur_user);
+//char	fight(INT16 expert);
+void	attack_ops(user_rec *user_on);
+void	p_attack_ops(user_rec *user_on, INT16 *nCurrentUserNumber);
+void	p_fight_ops(user_rec *cur_user,INT16 *user_num);
+//char	p_fight(INT16 expert);
+void    online_fight_a(INT16 *user_num, user_rec *user_on, INT16 enm_num);
+void    online_fight(INT16 *user_num, user_rec *user_on, INT16 enm_num);
+void    fgc(INT16 *enm_num, INT16 *user_num);
+INT16	event_gen(user_rec *user_on);
+INT16	len_format(char str[]);
+void	ny_send_file(char filename[]);
+char	ny_send_menu(menu_t menu,char allowed[],INT16 onscreen=0);
+void	ny_get_index(void);
+void	ny_line(INT16 line,INT16 before,INT16 after);
+void    any_attack_ops(user_rec *user_on, char fight_name[], char en_name[], INT32 en_hitpoints, INT32 en_strength, INT32 en_defense, weapon en_arm);
+
+
+
+//char	attack();
+//INT16     attack_points();
+//INT16	monster_hit();
+//INT16	random(); in ny2008.h and .cpp
+//void	attack_sequence();
+double  what_arm_force(weapon zbran);
+double  what_drug_force_a(drug_type droga,INT16 high);
+double  what_drug_force_d(drug_type droga,INT16 high);
+void	copfight_ops(user_rec *cur_user);
+//char	copfight(INT16 expert);
+void	copattack_ops(user_rec *user_on);
+//char    copattack();
+char 	cop_list(void);
+void	print_cop(INT16 num);
+//char	evil(INT16 expert);
+void	evil_ops(user_rec *cur_user);
diff --git a/src/doors/ny2008/src/filename.h b/src/doors/ny2008/src/filename.h
new file mode 100644
index 0000000000000000000000000000000000000000..7505f91763cb3d6467cd5f6705b157b86d33cc2a
--- /dev/null
+++ b/src/doors/ny2008/src/filename.h
@@ -0,0 +1,40 @@
+#define USER_FILENAME           "ny2008.usr"
+#define USER_BACK_FILENAME      "nybak.usr"
+#define SCR_FILENAME            "ny2008.scr"
+#define KEY_FILENAME            "nyreg.key"
+#define CFG_FILENAME            "ny2008.cfg"
+#define MAIL_FILENAME           "ny2008.msg"
+#define MAIL_INDEX              "ny2008.msx"
+#define MAIL_BACKUP_FILENAME	"nyback.msg"
+#define MAIL_BACKUP_INDEX		"nyback.msx"
+#define ENEMY_FILENAME          "nyenm.dat"
+#define ENEMY_INDEX             "nyenm.idx"
+#define BADWORDS_FILENAME		"badwords.txt"
+#define MAINTFLAG_FILENAME		"maint.run"
+#define LASTMAINT_FILENAME		"nylast.mnt"
+#define GAMEDAY_FILENAME		"nygame.day"
+#define TODNEWS_FILENAME		"nynews.tod"
+#define YESNEWS_FILENAME		"nynews.yes"
+#define IBBS_MAIL_INDEX			"nyibbs.min"
+#define IBBS_BACKUP_MAIL_INDEX	"nyibback.min"
+#ifdef __unix__
+#define TRDMAINT_FILENAME		"3rdmnt.sh"
+#else
+#define TRDMAINT_FILENAME		"3rdmnt.bat"
+#endif
+#define TRDMAINT_LIST_FILENAME	"3rdmnt.inf"
+#define TRDPARTY_FILENAME		"3rdparty.dat"
+#define TRDEVENT_FILENAME		"3rdevent.dat"
+#define BESTTEN_FILENAME		"nybest.ten"
+#define IBBS_BESTTEN_FILENAME	"nyibbest,ten"
+#define SENTLIST_FILENAME		"sentlist.pl"
+#define SENTBESTTEN_FILENAME    "sentbest.ten"
+#define IBBSSPY_FILENAME        "nyibbs.spy"
+#define IBBSSPY_TEMPFILENAME    "nyibbs.spy"
+#define NODELIST_FILENAME		"nynode.lst"
+#define DELUSER_FILENAME		"nyuser.del"
+#define ANSI_SCORES_FILENAME    "nyscores.ans"
+#define ASCII_SCORES_FILENAME   "nyscores.asc"
+#define SBYDB_PREFIX			"nyspydb"
+#define SBYDBT_PREFIX			"nyspydbt"
+#define TEMP_EXTENSION			".tmp"
diff --git a/src/doors/ny2008/src/ibbsny.cpp b/src/doors/ny2008/src/ibbsny.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..32e70d9ef9feb80efa31e0da578f84a364e80025
--- /dev/null
+++ b/src/doors/ny2008/src/ibbsny.cpp
@@ -0,0 +1,1575 @@
+//
+#include <assert.h>
+#include <ctype.h>
+#include <string.h>
+#include <time.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#include <OpenDoor.h>	/* Must be before the various wrappers */
+
+#include <dirwrap.h>
+#include <genwrap.h>
+
+#include "ny2008.h"
+//
+#include "ibbsny.h"
+extern unsigned _stklen;
+
+INT16             ibbsi = FALSE;
+
+INT16             ibbsi_operator = FALSE;
+
+INT16             ibbsi_game_num = 0;
+
+char            bbs_namei[37];
+
+
+char            aszShortMonthName[12][4] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
+"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
+
+
+/*
+   tBool DirExists(const char *pszDirName) { char szDirFileName[PATH_CHARS +
+   1]; struct ffblk DirEntry; //   if(pszDirName==NULL) return(FALSE); //
+   if(strlen(pszDirName)>PATH_CHARS) return(FALSE); assert(pszDirName !=
+   NULL); assert(strlen(pszDirName) <= PATH_CHARS); strcpy(szDirFileName,
+   pszDirName); /* Remove any trailing backslash from directory name -/
+   en(szDirFileName) - 1] == '\\') { szDirFileName[strlen(szDirFileName) - 1]
+   = '\0'; } /* Return true iff file exists and it is a directory -/
+   rFileName, &DirEntry, FA_ARCH|FA_DIREC) == 0 && (DirEntry.ff_attrib &
+   FA_DIREC)); }
+*/
+
+void            MakeFilename(const char *pszPath, const char *pszFilename, char *pszOut)
+{
+    /* Validate parameters in debug mode */
+    //assert(pszPath != NULL);
+    //assert(pszFilename != NULL);
+    //assert(pszOut != NULL);
+    //assert(pszPath != pszOut);
+    //assert(pszFilename != pszOut);
+
+    /* Copy path to output filename */
+    strcpy(pszOut, pszPath);
+
+    /* Ensure there is a trailing backslash */
+    if (pszOut[strlen(pszOut) - 1] != '\\') {
+	strcat(pszOut, "\\");
+    }
+    /* Append base filename */
+    strcat(pszOut, pszFilename);
+}
+
+tIBResult       IBSendAll(tIBInfo * pInfo, char *pBuffer, INT16 nBufferSize)
+{
+    tIBResult       ToReturn;
+    INT16             iCurrentSystem;
+
+    if (pBuffer == NULL)
+	return (eBadParameter);
+
+    /* Validate information structure */
+    ToReturn = ValidateInfoStruct(pInfo);
+    if (ToReturn != eSuccess)
+	return (ToReturn);
+
+    if (pInfo->paOtherSystem == NULL && pInfo->nTotalSystems != 0) {
+	return (eBadParameter);
+    }
+    /* Loop for each system in other systems array */
+    for (iCurrentSystem = 0; iCurrentSystem < pInfo->nTotalSystems;
+	 ++iCurrentSystem) {
+	/* Send information to that system */
+	if (strcmp(pInfo->paOtherSystem[iCurrentSystem].szAddress, pInfo->szThisNodeAddress) != 0) {
+	    ToReturn = IBSend(pInfo, pInfo->paOtherSystem[iCurrentSystem].szAddress,
+			      pBuffer, nBufferSize);
+	    if (ToReturn != eSuccess)
+		return (ToReturn);
+	}
+    }
+    return (eSuccess);
+}
+
+tIBResult       IBSend(tIBInfo * pInfo, char *pszDestNode, char *pBuffer,
+		                       INT16 nBufferSize)
+{
+    tIBResult       ToReturn;
+    tMessageHeader  MessageHeader;
+    time_t          lnSecondsSince1970;
+    struct tm      *pTimeInfo;
+
+    char            szTOPT[13];
+
+    char            szFMPT[13];
+
+    char            szINTL[43];
+
+    char            szMSGID[42];
+
+    INT16             nKludgeSize;
+
+    INT16             nTextSize;
+
+    char           *pszMessageText;
+
+    tFidoNode       DestNode;
+    tFidoNode       OrigNode;
+
+    if (pszDestNode == NULL)
+	return (eBadParameter);
+    if (pBuffer == NULL)
+	return (eBadParameter);
+
+    /* Validate information structure */
+    ToReturn = ValidateInfoStruct(pInfo);
+    if (ToReturn != eSuccess)
+	return (ToReturn);
+
+    /* Get destination node address from string */
+    ConvertStringToAddress(&DestNode, pszDestNode);
+
+    /* Get origin address from string */
+    ConvertStringToAddress(&OrigNode, pInfo->szThisNodeAddress);
+
+    /* Construct message header */
+    /* Construct to, from and subject information */
+    strcpy(MessageHeader.szFromUserName, pInfo->szProgName);
+    strcpy(MessageHeader.szToUserName, "@NY");
+    strcat(MessageHeader.szToUserName, pszDestNode);
+    strcpy(MessageHeader.szSubject, MESSAGE_SUBJECT);
+
+    /* Construct date and time information */
+    lnSecondsSince1970 = time(NULL);
+    pTimeInfo = localtime(&lnSecondsSince1970);
+    sprintf(MessageHeader.szDateTime, "%02.2d %s %02.2d  %02.2d:%02.2d:%02.2d",
+	    pTimeInfo->tm_mday,
+	    aszShortMonthName[pTimeInfo->tm_mon],
+	    pTimeInfo->tm_year,
+	    pTimeInfo->tm_hour,
+	    pTimeInfo->tm_min,
+	    pTimeInfo->tm_sec);
+
+    /* Construct misc. information */
+    MessageHeader.wTimesRead = 0;
+    MessageHeader.wCost = 0;
+    MessageHeader.wReplyTo = 0;
+    MessageHeader.wNextReply = 0;
+
+    /* Construct destination address */
+    MessageHeader.wDestZone = DestNode.wZone;
+    MessageHeader.wDestNet = DestNode.wNet;
+    MessageHeader.wDestNode = DestNode.wNode;
+    MessageHeader.wDestPoint = DestNode.wPoint;
+
+    /* Construct origin address */
+    MessageHeader.wOrigZone = OrigNode.wZone;
+    MessageHeader.wOrigNet = OrigNode.wNet;
+    MessageHeader.wOrigNode = OrigNode.wNode;
+    MessageHeader.wOrigPoint = OrigNode.wPoint;
+
+    /* Construct message attributes */
+    MessageHeader.wAttribute = ATTRIB_PRIVATE | ATTRIB_LOCAL;
+    if (pInfo->bCrash)
+	MessageHeader.wAttribute |= ATTRIB_CRASH;
+    if (pInfo->bHold)
+	MessageHeader.wAttribute |= ATTRIB_HOLD;
+    if (pInfo->bEraseOnSend)
+	MessageHeader.wAttribute |= ATTRIB_KILL_SENT;
+
+    /* Create message control (kludge) lines */
+    /* Create TOPT kludge line if destination point is non-zero */
+    if (DestNode.wPoint != 0) {
+	sprintf(szTOPT, "\1TOPT %u\r", DestNode.wPoint);
+    }
+    else {
+	strcpy(szTOPT, "");
+    }
+    /* Create FMPT kludge line if origin point is non-zero */
+    if (OrigNode.wPoint != 0) {
+	sprintf(szFMPT, "\1FMPT %u\r", OrigNode.wPoint);
+    }
+    else {
+	strcpy(szFMPT, "");
+    }
+
+    /*
+       Create INTL kludge line if origin and destination zone addresses
+       differ
+    */
+    if (DestNode.wZone != OrigNode.wZone) {
+	sprintf(szINTL, "\1INTL %u:%u/%u %u:%u/%u\r",
+		DestNode.wZone,
+		DestNode.wNet,
+		DestNode.wNode,
+		OrigNode.wZone,
+		OrigNode.wNet,
+		OrigNode.wNode);
+    }
+    else {
+	strcpy(szINTL, "");
+    }
+    /* Create MSGID kludge line, including point if non-zero */
+    if (OrigNode.wPoint != 0) {
+	sprintf(szMSGID, "\1MSGID: %u:%u/%u.%u %lx\r",
+		OrigNode.wZone,
+		OrigNode.wNet,
+		OrigNode.wNode,
+		OrigNode.wPoint,
+		GetNextMSGID());
+    }
+    else {
+	sprintf(szMSGID, "\1MSGID: %u:%u/%u %lx\r",
+		OrigNode.wZone,
+		OrigNode.wNet,
+		OrigNode.wNode,
+		GetNextMSGID());
+    }
+    /* Determine total size of kludge lines */
+    nKludgeSize = strlen(szTOPT)
+	+ strlen(szFMPT)
+	+ strlen(szINTL)
+	+ strlen(szMSGID)
+	+ strlen(MESSAGE_PID);
+
+    /* Determine total size of message text */
+    nTextSize = GetMaximumEncodedLength(nBufferSize)
+	+ strlen(MESSAGE_HEADER)
+	+ nKludgeSize
+	+ strlen(MESSAGE_FOOTER)
+	+ 1;
+
+    /* Attempt to allocate space for message text */
+    if ((pszMessageText = (char *)malloc(nTextSize)) == NULL) {
+	return (eNoMemory);
+    }
+    /* Construct message text */
+    strcpy(pszMessageText, szTOPT);
+    strcat(pszMessageText, szFMPT);
+    strcat(pszMessageText, szINTL);
+    strcat(pszMessageText, szMSGID);
+    strcat(pszMessageText, MESSAGE_PID);
+    strcat(pszMessageText, MESSAGE_HEADER);
+    EncodeBuffer(pszMessageText + strlen(pszMessageText), pBuffer, nBufferSize);
+    strcat(pszMessageText, MESSAGE_FOOTER);
+
+    /* Attempt to send the message */
+    if (CreateMessage(pInfo->szNetmailDir, &MessageHeader, pszMessageText)) {
+	ToReturn = eSuccess;
+    }
+    else {
+	ToReturn = eGeneralFailure;
+    }
+    /* Deallocate message text buffer */
+    free(pszMessageText);
+
+    /* Return appropriate value */
+    return (ToReturn);
+}
+
+tIBResult       IBSendMail(tIBInfo * pInfo, ibbs_mail_type * ibmail)
+{
+    tIBResult       ToReturn;
+    tMessageHeader  MessageHeader;
+    time_t          lnSecondsSince1970;
+    struct tm      *pTimeInfo;
+
+    char            szTOPT[13];
+
+    char            szFMPT[13];
+
+    char            szINTL[43];
+
+    char            szMSGID[42];
+
+    INT16             nKludgeSize;
+
+    INT16             nTextSize;
+
+    char           *pszMessageText;
+
+    tFidoNode       DestNode;
+    tFidoNode       OrigNode;
+
+    if (ibmail->node_r == NULL)
+	return (eBadParameter);
+    if (ibmail == NULL)
+	return (eBadParameter);
+
+    /* Validate information structure */
+    ToReturn = ValidateInfoStruct(pInfo);
+    if (ToReturn != eSuccess)
+	return (ToReturn);
+
+    /* Get destination node address from string */
+    ConvertStringToAddress(&DestNode, ibmail->node_r);
+
+    /* Get origin address from string */
+    ConvertStringToAddress(&OrigNode, pInfo->szThisNodeAddress);
+
+    /* Construct message header */
+    /* Construct to, from and subject information */
+    strcpy(MessageHeader.szFromUserName, pInfo->szProgName);
+    strcpy(MessageHeader.szToUserName, "@NY");
+    strcat(MessageHeader.szToUserName, ibmail->node_r);
+    strcpy(MessageHeader.szSubject, MESSAGE_SUBJECT);
+
+    /* Construct date and time information */
+    lnSecondsSince1970 = time(NULL);
+    pTimeInfo = localtime(&lnSecondsSince1970);
+    sprintf(MessageHeader.szDateTime, "%02.2d %s %02.2d  %02.2d:%02.2d:%02.2d",
+	    pTimeInfo->tm_mday,
+	    aszShortMonthName[pTimeInfo->tm_mon],
+	    pTimeInfo->tm_year,
+	    pTimeInfo->tm_hour,
+	    pTimeInfo->tm_min,
+	    pTimeInfo->tm_sec);
+
+    /* Construct misc. information */
+    MessageHeader.wTimesRead = 0;
+    MessageHeader.wCost = 0;
+    MessageHeader.wReplyTo = 0;
+    MessageHeader.wNextReply = 0;
+
+    /* Construct destination address */
+    MessageHeader.wDestZone = DestNode.wZone;
+    MessageHeader.wDestNet = DestNode.wNet;
+    MessageHeader.wDestNode = DestNode.wNode;
+    MessageHeader.wDestPoint = DestNode.wPoint;
+
+    /* Construct origin address */
+    MessageHeader.wOrigZone = OrigNode.wZone;
+    MessageHeader.wOrigNet = OrigNode.wNet;
+    MessageHeader.wOrigNode = OrigNode.wNode;
+    MessageHeader.wOrigPoint = OrigNode.wPoint;
+
+    /* Construct message attributes */
+    MessageHeader.wAttribute = ATTRIB_PRIVATE | ATTRIB_LOCAL;
+    if (pInfo->bCrash)
+	MessageHeader.wAttribute |= ATTRIB_CRASH;
+    if (pInfo->bHold)
+	MessageHeader.wAttribute |= ATTRIB_HOLD;
+    if (pInfo->bEraseOnSend)
+	MessageHeader.wAttribute |= ATTRIB_KILL_SENT;
+
+    /* Create message control (kludge) lines */
+    /* Create TOPT kludge line if destination point is non-zero */
+    if (DestNode.wPoint != 0) {
+	sprintf(szTOPT, "\1TOPT %u\r", DestNode.wPoint);
+    }
+    else {
+	strcpy(szTOPT, "");
+    }
+    /* Create FMPT kludge line if origin point is non-zero */
+    if (OrigNode.wPoint != 0) {
+	sprintf(szFMPT, "\1FMPT %u\r", OrigNode.wPoint);
+    }
+    else {
+	strcpy(szFMPT, "");
+    }
+
+    /*
+       Create INTL kludge line if origin and destination zone addresses
+       differ
+    */
+    if (DestNode.wZone != OrigNode.wZone) {
+	sprintf(szINTL, "\1INTL %u:%u/%u %u:%u/%u\r",
+		DestNode.wZone,
+		DestNode.wNet,
+		DestNode.wNode,
+		OrigNode.wZone,
+		OrigNode.wNet,
+		OrigNode.wNode);
+    }
+    else {
+	strcpy(szINTL, "");
+    }
+    /* Create MSGID kludge line, including point if non-zero */
+    if (OrigNode.wPoint != 0) {
+	sprintf(szMSGID, "\1MSGID: %u:%u/%u.%u %lx\r",
+		OrigNode.wZone,
+		OrigNode.wNet,
+		OrigNode.wNode,
+		OrigNode.wPoint,
+		GetNextMSGID());
+    }
+    else {
+	sprintf(szMSGID, "\1MSGID: %u:%u/%u %lx\r",
+		OrigNode.wZone,
+		OrigNode.wNet,
+		OrigNode.wNode,
+		GetNextMSGID());
+    }
+    /* Determine total size of kludge lines */
+    nKludgeSize = strlen(szTOPT)
+	+ strlen(szFMPT)
+	+ strlen(szINTL)
+	+ strlen(szMSGID)
+	+ strlen(MESSAGE_PID);
+
+    /* Determine total size of message text */
+    nTextSize = sizeof(ibbs_mail_type) * 2 + 4 * 20 + 1
+	+ strlen(MESSAGE_HEADER)
+	+ nKludgeSize
+	+ strlen(MESSAGE_FOOTER)
+	+ 1;
+
+    /* Attempt to allocate space for message text */
+    if ((pszMessageText = (char *)malloc(nTextSize)) == NULL) {
+	return (eNoMemory);
+    }
+    /* Construct message text */
+    strcpy(pszMessageText, szTOPT);
+    strcat(pszMessageText, szFMPT);
+    strcat(pszMessageText, szINTL);
+    strcat(pszMessageText, szMSGID);
+    strcat(pszMessageText, MESSAGE_PID);
+    strcat(pszMessageText, MESSAGE_HEADER);
+
+    EncodeMail(pszMessageText + strlen(pszMessageText), ibmail);
+    //EncodeBuffer(pszMessageText + strlen(pszMessageText), pBuffer, nBufferSize);
+    strcat(pszMessageText, MESSAGE_FOOTER);
+
+    /* Attempt to send the message */
+    if (CreateMessage(pInfo->szNetmailDir, &MessageHeader, pszMessageText)) {
+	ToReturn = eSuccess;
+    }
+    else {
+	ToReturn = eGeneralFailure;
+    }
+
+    /* Deallocate message text buffer */
+    free(pszMessageText);
+
+    /* Return appropriate value */
+    return (ToReturn);
+}
+
+
+INT16             GetMaximumEncodedLength(INT16 nUnEncodedLength)
+{
+    INT16             nEncodedLength;
+
+    /* The current encoding algorithm uses two characters to represent   */
+    /* each byte of data, plus 1 byte per MAX_LINE_LENGTH characters for */
+    /* the carriage return character.                                    */
+    nEncodedLength = nUnEncodedLength * 2;
+
+    return (nEncodedLength + (nEncodedLength / MAX_LINE_LENGTH - 1) + 1);
+}
+
+void            EncodeBuffer(char *pszDest, const char *pBuffer, INT16 nBufferSize)
+{
+    INT16             iSourceLocation;
+
+    INT16             nOutputChars = 0;
+
+    char           *pcDest = pszDest;
+
+    const char     *pcSource = (char *)pBuffer;
+
+    /* Loop for each byte of the source buffer */
+    for (iSourceLocation = 0; iSourceLocation < nBufferSize; ++iSourceLocation) {
+	/* First character contains bits 0 - 5, with 01 in upper two bits */
+	*pcDest++ = (*pcSource & 0x3f) | 0x40;
+	/* Second character contains bits 6 & 7 in positions 4 & 5. Upper */
+	/* two bits are 01, and all remaining bits are 0. */
+	*pcDest++ = ((*pcSource & 0xc0) >> 2) | 0x40;
+
+	/* Output carriage return when needed */
+	if ((nOutputChars += 2) >= MAX_LINE_LENGTH - 1) {
+	    nOutputChars = 0;
+	    *pcDest++ = '\r';
+	}
+	/* Increment source pointer */
+	++pcSource;
+    }
+    /* Add one last carriage return, regardless of what has come before */
+    *pcDest++ = '\r';
+
+    /* Terminate output string */
+    *pcDest++ = '\0';
+}
+
+void            EncodeMail(char *pszDest, ibbs_mail_type * ibmail)
+{
+    char           *pcDest = pszDest;
+
+    INT16             x, l, ln;
+
+    char            temp[25];
+
+    l = strlen(ibmail->sender);
+    for (x = 0; x < l; x++) {
+	sprintf(pcDest, "%02X", (INT16)ibmail->sender[x]);
+	pcDest += 2;
+    }
+    *pcDest = '\n';
+    pcDest++;
+
+    l = strlen(ibmail->senderI);
+    for (x = 0; x < l; x++) {
+	sprintf(pcDest, "%02X", (INT16)ibmail->senderI[x]);
+	pcDest += 2;
+    }
+    *pcDest = '\n';
+    pcDest++;
+
+    sprintf(pcDest, "%X", (INT16)ibmail->sender_sex);
+    pcDest += strlen(pcDest);
+
+    *pcDest = '\n';
+    pcDest++;
+
+    l = strlen(ibmail->node_s);
+    for (x = 0; x < l; x++) {
+	sprintf(pcDest, "%02X", (INT16)ibmail->node_s[x]);
+	pcDest += 2;
+    }
+    *pcDest = '\n';
+    pcDest++;
+
+    l = strlen(ibmail->node_r);
+    for (x = 0; x < l; x++) {
+	sprintf(pcDest, "%02X", (INT16)ibmail->node_r[x]);
+	pcDest += 2;
+    }
+    *pcDest = '\n';
+    pcDest++;
+
+    l = strlen(ibmail->recver);
+    for (x = 0; x < l; x++) {
+	sprintf(pcDest, "%02X", (INT16)ibmail->recver[x]);
+	pcDest += 2;
+    }
+    *pcDest = '\n';
+    pcDest++;
+
+    l = strlen(ibmail->recverI);
+    for (x = 0; x < l; x++) {
+	sprintf(pcDest, "%02X", (INT16)ibmail->recverI[x]);
+	pcDest += 2;
+    }
+    *pcDest = '\n';
+    pcDest++;
+
+    sprintf(pcDest, "%X", (INT16)ibmail->quote_length);
+    pcDest += strlen(pcDest);
+
+    *pcDest = '\n';
+    pcDest++;
+
+    sprintf(pcDest, "%X", (INT16)ibmail->length);
+    pcDest += strlen(pcDest);
+
+    *pcDest = '\n';
+    pcDest++;
+
+    sprintf(pcDest, "%X", (INT16)ibmail->flirt);
+    pcDest += strlen(pcDest);
+
+    *pcDest = '\n';
+    pcDest++;
+
+    sprintf(pcDest, "%X", (INT16)ibmail->ill);
+    pcDest += strlen(pcDest);
+
+    *pcDest = '\n';
+    pcDest++;
+
+    sprintf(pcDest, "%X", (INT16)ibmail->inf);
+    pcDest += strlen(pcDest);
+
+    *pcDest = '\n';
+    pcDest++;
+
+    for (ln = 0; ln < (ibmail->length + ibmail->quote_length) && ln < 20; ln++) {
+	l = strlen(ibmail->lines[ln]);
+	if (l == 0) {
+	    *pcDest = '0';
+	    pcDest++;
+	    *pcDest = '0';
+	    pcDest++;
+	}
+	for (x = 0; x < l && x < 20; x++) {
+	    sprintf(pcDest, "%02X", (INT16)ibmail->lines[ln][x]);
+	    pcDest += 2;
+	}
+	*pcDest = '\n';
+	pcDest++;
+
+	if (l <= 20) {
+	    *pcDest = '0';
+	    pcDest++;
+	    *pcDest = '0';
+	    pcDest++;
+	}
+	for (x = 20; x < l && x < 40; x++) {
+	    sprintf(pcDest, "%02X", (INT16)ibmail->lines[ln][x]);
+	    pcDest += 2;
+	}
+	*pcDest = '\n';
+	pcDest++;
+
+	if (l <= 40) {
+	    *pcDest = '0';
+	    pcDest++;
+	    *pcDest = '0';
+	    pcDest++;
+	}
+	for (x = 40; x < l && x < 60; x++) {
+	    sprintf(pcDest, "%02X", (INT16)ibmail->lines[ln][x]);
+	    pcDest += 2;
+	}
+	*pcDest = '\n';
+	pcDest++;
+
+	if (l <= 60) {
+	    *pcDest = '0';
+	    pcDest++;
+	    *pcDest = '0';
+	    pcDest++;
+	}
+	for (x = 60; x < l; x++) {
+	    sprintf(pcDest, "%02X", (INT16)ibmail->lines[ln][x]);
+	    pcDest += 2;
+	}
+	*pcDest = '\n';
+	pcDest++;
+    }
+    *pcDest = '\0';
+}
+
+/*
+   void DecodeBuffer(const char *pszSource, void *pDestBuffer, int
+   nBufferSize) { const char *pcSource = pszSource; char *pcDest = (char
+   )pDestBuffer; int iDestLocation; tBool bFirstOfByte = TRUE; /* Search for
+   beginning of buffer delimiter char, returning if not found -/
+   hile(*pcSource && *pcSource != DELIMITER_CHAR) ++pcSource; if(!*pcSource)
+   return; /* Move pointer to first char after delimiter char -/ ++pcSource;
+   /* Loop until destination buffer is full, delimiter char is encountered,
+   -/ or end of source buffer is encountered -/ iDestLocation = 0; tLocation
+   < nBufferSize && *pcSource && *pcSource != DELIMITER_CHAR) { If this is a
+   valid data character -/ if(*pcSource >= 0x40 && *pcSource <= 0x7e) { /* If
+   this is first character of byte -/ if(bFirstOfByte) { cDest = *pcSource &
+   0x3f; /* Toggle bFirstOfByte -/ bFirstOfByte = FALSE; } else /*
+   if(!bFirstOfByte) -/ { pcDest |= (*pcSource & 0x30) << 2; /* Increment
+   destination -/ ++iDestLocation; ++pcDest; /* Toggle bFirstOfByte -/
+   bFirstOfByte = TRUE; } } /* Increment source byte pointer -/ ++pcSource; }
+   }
+*/
+void            DecodeMail(const char *pszSource, ibbs_mail_type * ibmail)
+{
+    const char     *pcSource = pszSource;
+
+    INT16             x, ln, t;
+
+    char            tmp[80];
+
+    //, key;
+
+    //tmp[2] = 0;
+    x = 0;
+
+    //printf("1\n");
+    //scanf("%c", &key);
+    while (*pcSource && *pcSource != DELIMITER_CHAR)
+	++pcSource;
+    if (!(*pcSource))
+	return;
+    //printf("2\n");
+    //scanf("%c", &key);
+    pcSource++;
+
+    //printf("3\n");
+    //scanf("%c", &key);
+    while (*pcSource <= ' ')
+	pcSource++;
+
+    //printf("4\n");
+    //scanf("%c", &key);
+    while (*pcSource > ' ') {
+	tmp[0] = *pcSource;
+	tmp[1] = *(pcSource + 1);
+	tmp[2] = 0;
+	sscanf(tmp, "%X", &t);
+	ibmail->sender[x] = t;
+	pcSource += 2;
+	x++;
+    }
+    ibmail->sender[x] = 0;
+
+    //printf("5\n");
+    //scanf("%c", &key);
+    while (*pcSource <= ' ')
+	pcSource++;
+
+    //tmp[2] = 0;
+    x = 0;
+    while (*pcSource > ' ') {
+	tmp[0] = *pcSource;
+	tmp[1] = *(pcSource + 1);
+	tmp[2] = 0;
+	sscanf(tmp, "%X", &t);
+	ibmail->senderI[x] = t;
+	pcSource += 2;
+	x++;
+    }
+    //printf("6\n");
+    //scanf("%c", &key);
+    ibmail->senderI[x] = 0;
+
+    while (*pcSource <= ' ')
+	pcSource++;
+
+    sscanf(pcSource, "%s", &tmp);
+    pcSource += strlen(tmp);
+    sscanf(tmp, "%X", &t);
+    ibmail->sender_sex = (sex_type) t;
+
+    while (*pcSource <= ' ')
+	pcSource++;
+
+    tmp[2] = 0;
+    x = 0;
+    while (*pcSource > ' ') {
+	tmp[0] = *pcSource;
+	tmp[1] = *(pcSource + 1);
+	sscanf(tmp, "%X", &t);
+	ibmail->node_s[x] = t;
+	pcSource += 2;
+	x++;
+    }
+    ibmail->node_s[x] = 0;
+    //printf("[%s]", ibmail->node_s);
+    //debug
+	// printf("7\n");
+    //scanf("%c", &key);
+
+    while (*pcSource <= ' ')
+	pcSource++;
+
+    tmp[2] = 0;
+    x = 0;
+    while (*pcSource > ' ') {
+	tmp[0] = *pcSource;
+	tmp[1] = *(pcSource + 1);
+	sscanf(tmp, "%X", &t);
+	ibmail->node_r[x] = t;
+	pcSource += 2;
+	x++;
+    }
+    ibmail->node_r[x] = 0;
+    //printf("[%s]", ibmail->node_r);
+    //debug
+	while (*pcSource <= ' ')
+	pcSource++;
+
+    tmp[2] = 0;
+    x = 0;
+    while (*pcSource > ' ') {
+	tmp[0] = *pcSource;
+	tmp[1] = *(pcSource + 1);
+	sscanf(tmp, "%X", &t);
+	ibmail->recver[x] = t;
+	pcSource += 2;
+	x++;
+    }
+    ibmail->recver[x] = 0;
+    while (*pcSource <= ' ')
+	pcSource++;
+
+    tmp[2] = 0;
+    x = 0;
+    while (*pcSource > ' ') {
+	tmp[0] = *pcSource;
+	tmp[1] = *(pcSource + 1);
+	sscanf(tmp, "%X", &t);
+	ibmail->recverI[x] = t;
+	pcSource += 2;
+	x++;
+    }
+    ibmail->recverI[x] = 0;
+    while (*pcSource <= ' ')
+	pcSource++;
+
+    sscanf(pcSource, "%s", &tmp);
+    pcSource += strlen(tmp);
+    sscanf(tmp, "%X", &t);
+    ibmail->quote_length = t;
+    //printf("[QL%d]", (INT16)ibmail->quote_length);
+    //debug
+	while (*pcSource <= ' ')
+	pcSource++;
+
+    sscanf(pcSource, "%s", &tmp);
+    pcSource += strlen(tmp);
+    sscanf(tmp, "%X", &t);
+    ibmail->length = t;
+    //printf("[L%d]", (INT16)ibmail->length);
+    //debug
+	while (*pcSource <= ' ')
+	pcSource++;
+
+    sscanf(pcSource, "%s", &tmp);
+    pcSource += strlen(tmp);
+    sscanf(tmp, "%X", &t);
+    ibmail->flirt = t;
+    //printf("[F%d][%s]", (INT16)ibmail->flirt, tmp);
+    //debug
+	while (*pcSource <= ' ')
+	pcSource++;
+
+    sscanf(pcSource, "%s", &tmp);
+    pcSource += strlen(tmp);
+    sscanf(tmp, "%X", &t);
+    ibmail->ill = (desease) t;
+    //printf("[D%d]", (INT16)ibmail->ill);
+    //debug
+	while (*pcSource <= ' ')
+	pcSource++;
+
+    sscanf(pcSource, "%s", &tmp);
+    pcSource += strlen(tmp);
+    sscanf(tmp, "%X", &t);
+    ibmail->inf = t;
+    //printf("[INF%d]\n", (INT16)ibmail->inf);
+    //debug
+	while (*pcSource <= ' ')
+	pcSource++;
+
+    //printf("8\n");
+    //scanf("%c", &key);
+
+    for (ln = 0; ln < (ibmail->length + ibmail->quote_length) && ln < 20; ln++) {
+	tmp[2] = 0;
+	x = 0;
+	while (*pcSource > ' ') {
+	    tmp[0] = *pcSource;
+	    tmp[1] = *(pcSource + 1);
+	    sscanf(tmp, "%X", &t);
+	    (ibmail->lines)[ln][x] = t;
+	    pcSource += 2;
+	    x++;
+	    if (x > 80)
+		break;
+	}
+	while (*pcSource <= ' ')
+	    pcSource++;
+
+	while (*pcSource > ' ') {
+	    tmp[0] = *pcSource;
+	    tmp[1] = *(pcSource + 1);
+	    sscanf(tmp, "%X", &t);
+	    (ibmail->lines)[ln][x] = t;
+	    pcSource += 2;
+	    x++;
+	    if (x > 80)
+		break;
+	}
+	while (*pcSource <= ' ')
+	    pcSource++;
+
+	while (*pcSource > ' ') {
+	    tmp[0] = *pcSource;
+	    tmp[1] = *(pcSource + 1);
+	    sscanf(tmp, "%X", &t);
+	    (ibmail->lines)[ln][x] = t;
+	    pcSource += 2;
+	    x++;
+	    if (x > 80)
+		break;
+	}
+	while (*pcSource <= ' ')
+	    pcSource++;
+
+	while (*pcSource > ' ') {
+	    tmp[0] = *pcSource;
+	    tmp[1] = *(pcSource + 1);
+	    sscanf(tmp, "%X", &t);
+	    (ibmail->lines)[ln][x] = t;
+	    pcSource += 2;
+	    x++;
+	    if (x > 80)
+		break;
+	}
+	(ibmail->lines)[ln][x] = 0;
+	while (*pcSource <= ' ')
+	    pcSource++;
+    }
+    //printf("9\n");
+    //scanf("%c", &key);
+    //return;
+}
+
+
+/*
+   INT16 DecodeBufferR(const char *pszSource, void *pDestBuffer) { const char
+   pcSource = pszSource; char *pcDest = (char *)pDestBuffer; char size[2];
+   INT16 iDestLocation; int nBufferSize=0; tBool bFirstOfByte = TRUE; /* Search
+   for beginning of buffer delimiter char, returning if not found -/
+   hile(*pcSource && *pcSource != DELIMITER_CHAR) ++pcSource; if(!*pcSource)
+   return(0); /* Move pointer to first char after delimiter char -/
+   ++pcSource; /* Loop until destination buffer is full, delimiter char is
+   encountered, -/ or end of source buffer is encountered -/ iDestLocation =
+   0; tLocation < (nBufferSize+2) && *pcSource && *pcSource !=
+   DELIMITER_CHAR) /* If this is a valid data character -/ if(*pcSource >=
+   0x40 && pcSource <= 0x7e) { /* If this is first character of byte -/
+   fByte) { if(iDestLocation<2) size[iDestLocation] = *pcSource & 0x3f; se
+   pcDest = *pcSource & 0x3f; /* Toggle bFirstOfByte -/ bFirstOfByte = FALSE;
+   } else /* if(!bFirstOfByte) -/ { if(iDestLocation<2) size[iDestLocation]
+   |= (*pcSource & 0x30) << 2; else { pcDest |= (*pcSource & 0x30) << 2;
+   Dest; } /* Increment destination -/ ++iDestLocation; /* Toggle
+   bFirstOfByte -/ bFirstOfByte = TRUE; } if(iDestLocation==2) {
+   BufferSize=*(INT16 *)size; pDestBuffer=malloc(nBufferSize); } } /* Increment
+   source byte pointer -/ ++pcSource; } return(nBufferSize); }
+*/
+
+DWORD           GetNextMSGID(void)
+{
+    /* MSGID should be unique for every message, for as long as possible.   */
+    /* This technique adds the current time, in seconds since midnight on   */
+    /* January 1st, 1970 to a psuedo-random number. The random generator    */
+    /* is not seeded, as the application may have already seeded it for its */
+    /* own purposes. Even if not seeded, the inclusion of the current time  */
+    /* will cause the MSGID to almost always be different.                  */
+    return ((DWORD)time(NULL) + (DWORD)rand());
+}
+
+tBool           CreateMessage(char *pszMessageDir, tMessageHeader * pHeader,
+			                      char *pszText)
+{
+    DWORD           lwNewMsgNum;
+
+    /* Get new message number */
+    lwNewMsgNum = GetFirstUnusedMsgNum(pszMessageDir);
+
+    /* Use WriteMessage() to create new message */
+    return (WriteMessage(pszMessageDir, lwNewMsgNum, pHeader, pszText));
+}
+
+void            GetMessageFilename(char *pszMessageDir, DWORD lwMessageNum,
+				                   char *pszOut)
+{
+    char            szFileName[FILENAME_CHARS + 1];
+
+    sprintf(szFileName, "%ld.msg", lwMessageNum);
+    MakeFilename(pszMessageDir, szFileName, pszOut);
+}
+
+tBool           WriteMessage(char *pszMessageDir, DWORD lwMessageNum,
+		                    tMessageHeader * pHeader, char *pszText)
+{
+    char            szFileName[PATH_CHARS + FILENAME_CHARS + 2];
+
+    INT16             hFile;
+
+    size_t          nTextSize;
+
+    /* Get fully qualified filename of message to write */
+    GetMessageFilename(pszMessageDir, lwMessageNum, szFileName);
+
+    /* Open message file */
+    hFile = sopen(szFileName, O_WRONLY | O_BINARY | O_CREAT, SH_DENYRW,
+		  S_IREAD | S_IWRITE);
+
+    /* If open failed, return FALSE */
+    if (hFile == -1)
+	return (FALSE);
+
+    /* Attempt to write header */
+    if (write(hFile, pHeader, sizeof(tMessageHeader)) != sizeof(tMessageHeader)) {
+	/* On failure, close file, erase file, and return FALSE */
+	close(hFile);
+	unlink(szFileName);
+	return (FALSE);
+    }
+    /* Determine size of message text, including string terminator */
+    nTextSize = strlen(pszText) + 1;
+
+    /* Attempt to write message text */
+    if (write(hFile, pszText, nTextSize) != nTextSize) {
+	/* On failure, close file, erase file, and return FALSE */
+	close(hFile);
+	unlink(szFileName);
+	return (FALSE);
+    }
+    /* Close message file */
+    close(hFile);
+
+    /* Return with success */
+    return (TRUE);
+}
+
+tBool           ReadMessage(char *pszMessageDir, DWORD lwMessageNum,
+		                  tMessageHeader * pHeader, char **ppszText)
+{
+    char            szFileName[PATH_CHARS + FILENAME_CHARS + 2];
+
+    INT16             hFile;
+
+    size_t          nTextSize;
+
+    /* Get fully qualified filename of message to read */
+    GetMessageFilename(pszMessageDir, lwMessageNum, szFileName);
+
+    /* Open message file */
+    hFile = sopen(szFileName, O_RDONLY | O_BINARY, SH_DENYWR);
+
+    /* If open failed, return FALSE */
+    if (hFile == -1)
+	return (FALSE);
+
+    /* Determine size of message body */
+    nTextSize = (size_t) filelength(hFile) - sizeof(tMessageHeader);
+
+    /* Attempt to allocate space for message body, plus character for added */
+    /* string terminator.                                                   */
+    if ((*ppszText = (char *)malloc(nTextSize + 1)) == NULL) {
+	/* On failure, close file and return FALSE */
+	close(hFile);
+	return (FALSE);
+    }
+    /* Attempt to read header */
+    if (read(hFile, pHeader, sizeof(tMessageHeader)) != sizeof(tMessageHeader)) {
+	/* On failure, close file, deallocate message buffer and return FALSE */
+	close(hFile);
+	free(*ppszText);
+	return (FALSE);
+    }
+    /* Attempt to read message text */
+    if (read(hFile, *ppszText, nTextSize) != nTextSize) {
+	/* On failure, close file, deallocate message buffer and return FALSE */
+	close(hFile);
+	free(*ppszText);
+	return (FALSE);
+    }
+    /* Ensure that message buffer is NULL-terminated */
+    (*ppszText)[nTextSize + 1] = '\0';
+
+    /* Close message file */
+    close(hFile);
+
+    /* Return with success */
+    return (TRUE);
+}
+
+DWORD           GetFirstUnusedMsgNum(char *pszMessageDir)
+{
+    DWORD           lwHighestMsgNum = 0;
+
+    DWORD           lwCurrentMsgNum;
+
+    glob_t          DirEntry;
+    char            szFileName[PATH_CHARS + FILENAME_CHARS + 2];
+
+    char          **fname;
+
+    MakeFilename(pszMessageDir, "*.msg", szFileName);
+
+    if (glob(szFileName, GLOB_NOSORT, NULL, &DirEntry) == 0) {
+	for (fname = DirEntry.gl_pathv; *fname != NULL; fname++) {
+	    lwCurrentMsgNum = atol(*fname);
+	    if (lwCurrentMsgNum > lwHighestMsgNum) {
+		lwHighestMsgNum = lwCurrentMsgNum;
+	    }
+	}
+	globfree(&DirEntry);
+    }
+    return (lwHighestMsgNum + 1);
+}
+
+tIBResult       ValidateInfoStruct(tIBInfo * pInfo)
+{
+    if (pInfo == NULL)
+	return (eBadParameter);
+
+    //if (!DirExists(pInfo->szNetmailDir))
+	return (eMissingDir);
+
+    if (strlen(pInfo->szProgName) == 0)
+	return (eBadParameter);
+
+    return (eSuccess);
+}
+
+
+/*
+   tIBResult IBGet(tIBInfo *pInfo, void *pBuffer, INT16 nMaxBufferSize) { esult
+   ToReturn; struct ffblk DirEntry; DWORD lwCurrentMsgNum; ader
+   MessageHeader; char szFileName[PATH_CHARS + FILENAME_CHARS + 2]; r
+   pszText; tFidoNode ThisNode,OtherNode; /* Validate information structure
+   -/ ToReturn = ValidateInfoStruct(pInfo); f(ToReturn != eSuccess)
+   return(ToReturn); /* Get this node's address from string -/
+   ConvertStringToAddress(&ThisNode, pInfo->szThisNodeAddress);
+   MakeFilename(pInfo->szNetmailDir, "*.msg", szFileName); /* Seach through
+   each message file in the netmail directory, in no -/ /* particular order.
+   -/ first(szFileName, &DirEntry, FA_ARCH) == 0) { do { lwCurrentMsgNum =
+   atol(DirEntry.ff_name); /* If able to read message -/
+   if(ReadMessage(pInfo->szNetmailDir, lwCurrentMsgNum, &MessageHeader,
+   &pszText)) { /* od_printf("\n\rREAD THROUGH MESSAGE\n\r");
+   der.szToUserName); od_printf("|%s|\n\r",pInfo->szProgName);
+   :",MessageHeader.wDestZone); od_printf("%d/",MessageHeader.wDestNet);
+   printf("%d.",MessageHeader.wDestNode); estPoint); od_get_answer("1");
+*/
+
+/*
+   If message is for us, and hasn't be read yet -/
+   herNode,&MessageHeader.szToUserName[3]);
+   if(strcmp(MessageHeader.szFromUserName, pInfo->szProgName) == 0 &&
+   (ThisNode.wZone == OtherNode.wZone || OtherNode.wZone==0 ||
+   ThisNode.wZone==0) && ThisNode.wNet == OtherNode.wNet && ThisNode.wNode ==
+   OtherNode.wNode && ThisNode.wPoint == OtherNode.wPoint &&
+   !(MessageHeader.wAttribute & ATTRIB_RECEIVED)) { /*
+   od_printf("\n\rUNREAD AND FOR US\n\r"); od_get_answer("1");
+*/
+
+/*
+   Decode message text, placing information in buffer -/ , pBuffer,
+   nMaxBufferSize); /* If received messages should be deleted -/
+   if(pInfo->bEraseOnReceive) { Determine filename of message to erase -/
+   tmailDir, lwCurrentMsgNum, szFileName); /* Attempt to erase file -/
+   if(unlink(szFileName) == -1) { ToReturn = eGeneralFailure; } else {
+   ToReturn = eSuccess; } } /* If received messages should not be deleted -/
+   else /* if(!pInfo->bEraseOnReceive) -/ { /* Mark message as read -/
+   r.wAttribute |= ATTRIB_RECEIVED; ++MessageHeader.wTimesRead; /* Attempt to
+   rewrite message -/ if(!WriteMessage(pInfo->szNetmailDir, lwCurrentMsgNum,
+   &MessageHeader, pszText)) { ToReturn = eGeneralFailure; } else { ToReturn
+   = eSuccess; } } /* Deallocate message text buffer -/ free(pszText); /*
+   Return appropriate value -/ return(ToReturn); } free(pszText); } }
+   while(findnext(&DirEntry) == 0); } /* If no new messages were found -/
+   return(eNoMoreMessages); }
+*/
+tIBResult       IBGetMail(tIBInfo * pInfo, ibbs_mail_type * ibmail)
+{
+    tIBResult       ToReturn;
+    glob_t          DirEntry;
+    DWORD           lwCurrentMsgNum;
+
+    tMessageHeader  MessageHeader;
+    char            szFileName[PATH_CHARS + FILENAME_CHARS + 2];
+
+    char           *pszText;
+
+    //, key;
+    tFidoNode       ThisNode, OtherNode;
+    char          **fname;
+
+    //printf("1\n");
+    /* Validate information structure */
+    ToReturn = ValidateInfoStruct(pInfo);
+    //printf("2\n");
+    if (ToReturn != eSuccess)
+	return (ToReturn);
+    //printf("3\n");
+
+    /* Get this node's address from string */
+    ConvertStringToAddress(&ThisNode, pInfo->szThisNodeAddress);
+    //printf("4\n");
+
+    MakeFilename(pInfo->szNetmailDir, "*.msg", szFileName);
+    //printf("5\n");
+
+    /* Search through each message file in the netmail directory, in no */
+    /* particular order.                                                */
+    //if (findfirst(szFileName, &DirEntry, FA_ARCH) == 0)
+	if (glob(szFileName, 0, NULL, &DirEntry) == 0) {
+	    //printf("6\n");
+	    for (fname = DirEntry.gl_pathv; *fname != NULL; fname++) {
+		lwCurrentMsgNum = atol(*fname);
+
+		/* If able to read message */
+		if (ReadMessage(pInfo->szNetmailDir, lwCurrentMsgNum, &MessageHeader,
+				&pszText)) {
+		    /* If message is for us, and hasn't be read yet */
+		    ConvertStringToAddress(&OtherNode, &MessageHeader.szToUserName[3]);
+		    //printf("7\n");
+
+		    if (stricmp(MessageHeader.szFromUserName, pInfo->szProgName) == 0
+			&& (ThisNode.wZone == OtherNode.wZone || OtherNode.wZone == 0 || ThisNode.wZone == 0)
+			&& ThisNode.wNet == OtherNode.wNet
+			&& ThisNode.wNode == OtherNode.wNode
+			&& ThisNode.wPoint == OtherNode.wPoint
+			&& !(MessageHeader.wAttribute & ATTRIB_RECEIVED)) {
+			/* Decode message text, placing information in buffer */
+			//printf("8\n");
+			DecodeMail(pszText, ibmail);
+			//printf("*\n");
+			//scanf("%c", &key);
+
+			/* If received messages should be deleted */
+			if (pInfo->bEraseOnReceive) {
+			    /* Determine filename of message to erase */
+			    GetMessageFilename(pInfo->szNetmailDir, lwCurrentMsgNum,
+					       szFileName);
+
+			    /* Attempt to erase file */
+			    if (unlink(szFileName) == -1) {
+				ToReturn = eGeneralFailure;
+			    }
+			    else {
+				ToReturn = eSuccess;
+			    }
+			}
+			/* If received messages should not be deleted */
+			else {	/* if(!pInfo->bEraseOnReceive) */
+			    /* Mark message as read */
+			    MessageHeader.wAttribute |= ATTRIB_RECEIVED;
+			    ++MessageHeader.wTimesRead;
+
+			    /* Attempt to rewrite message */
+			    if (!WriteMessage(pInfo->szNetmailDir, lwCurrentMsgNum,
+					      &MessageHeader, pszText)) {
+				ToReturn = eGeneralFailure;
+			    }
+			    else {
+				ToReturn = eSuccess;
+			    }
+			}
+			/* Deallocate message text buffer */
+			free(pszText);
+
+			/* Return appropriate value */
+			globfree(&DirEntry);
+			return (ToReturn);
+		    }
+		    free(pszText);
+		}
+	    };
+	    globfree(&DirEntry);
+	}
+    //printf("10\n");
+    /* If no new messages were found */
+    return (eNoMoreMessages);
+
+}
+
+
+/*
+   tIBResult IBGetR(tIBInfo *pInfo, void *pBuffer, INT16 *nBufferLen) { ult
+   ToReturn; struct ffblk DirEntry; DWORD lwCurrentMsgNum; er MessageHeader;
+   char szFileName[PATH_CHARS + FILENAME_CHARS + 2]; char pszText; tFidoNode
+   ThisNode,OtherNode; /* Validate information structure -/ ToReturn =
+   ValidateInfoStruct(pInfo); f(ToReturn != eSuccess) return(ToReturn); /*
+   Get this node's address from string -/ ConvertStringToAddress(&ThisNode,
+   pInfo->szThisNodeAddress); MakeFilename(pInfo->szNetmailDir, "*.msg",
+   szFileName); /* Seach through each message file in the netmail directory,
+   in no -/ /* particular order.
+   -/ first(szFileName, &DirEntry, FA_ARCH) == 0) { do { lwCurrentMsgNum =
+   atol(DirEntry.ff_name); /* If able to read message -/
+   if(ReadMessage(pInfo->szNetmailDir, lwCurrentMsgNum, &MessageHeader,
+   &pszText)) { herNode,&MessageHeader.szToUserName[3]);
+   if(strcmp(MessageHeader.szFromUserName, pInfo->szProgName) == 0 &&
+   (ThisNode.wZone == OtherNode.wZone || OtherNode.wZone==0 ||
+   ThisNode.wZone==0) && ThisNode.wNet == OtherNode.wNet && ThisNode.wNode ==
+   OtherNode.wNode && ThisNode.wPoint == OtherNode.wPoint &&
+   !(MessageHeader.wAttribute & ATTRIB_RECEIVED)) { /* Decode message text,
+   placing information in buffer -/ nBufferLen=DecodeBufferR(pszText,
+   pBuffer); /* If received messages should be deleted -/
+   if(pInfo->bEraseOnReceive) { Determine filename of message to erase -/
+   tmailDir, lwCurrentMsgNum, szFileName); /* Attempt to erase file -/
+   if(unlink(szFileName) == -1) { ToReturn = eGeneralFailure; } else {
+   ToReturn = eSuccess; } } /* If received messages should not be deleted -/
+   else /* if(!pInfo->bEraseOnReceive) -/ { /* Mark message as read -/
+   r.wAttribute |= ATTRIB_RECEIVED; ++MessageHeader.wTimesRead; /* Attempt to
+   rewrite message -/ if(!WriteMessage(pInfo->szNetmailDir, lwCurrentMsgNum,
+   &MessageHeader, pszText)) { ToReturn = eGeneralFailure; } else { ToReturn
+   = eSuccess; } } /* Deallocate message text buffer -/ free(pszText); /*
+   Return appropriate value -/ return(ToReturn); } free(pszText); } }
+   while(findnext(&DirEntry) == 0); } /* If no new messages were found -/
+   return(eNoMoreMessages); }
+*/
+
+void            ConvertAddressToString(char *pszDest, const tFidoNode * pNode)
+{
+    if (pNode->wZone == 0) {
+	if (pNode->wPoint == 0) {
+	    sprintf(pszDest, "%u/%u", pNode->wNet, pNode->wNode);
+	}
+	else {
+	    sprintf(pszDest, "%u/%u.%u", pNode->wNet, pNode->wNode, pNode->wPoint);
+	}
+    }
+    else {
+	if (pNode->wPoint == 0) {
+	    sprintf(pszDest, "%u:%u/%u", pNode->wZone, pNode->wNet, pNode->wNode);
+	}
+	else {
+	    sprintf(pszDest, "%u:%u/%u.%u", pNode->wZone, pNode->wNet, pNode->wNode, pNode->wPoint);
+	}
+    }
+}
+
+void            ConvertStringToAddress(tFidoNode * pNode, const char *pszSource)
+{
+    pNode->wZone = 0;
+    pNode->wNet = 0;
+    pNode->wNode = 0;
+    pNode->wPoint = 0;
+    if (strchr(pszSource, ':') == NULL) {
+	sscanf(pszSource, "%u/%u.%u", &(pNode->wNet), &(pNode->wNode), &(pNode->wPoint));
+    }
+    else {
+	sscanf(pszSource, "%u:%u/%u.%u", &(pNode->wZone), &(pNode->wNet), &(pNode->wNode), &(pNode->wPoint));
+    }
+}
+
+#define NUM_KEYWORDS       14
+#define KEYWORD_ADDRESS    0
+#define KEYWORD_USER_NAME  1
+#define KEYWORD_MAIL_DIR   2
+#define KEYWORD_CRASH      3
+#define KEYWORD_HOLD       4
+#define KEYWORD_KILL_SENT  5
+#define KEYWORD_KILL_RCVD  6
+#define KEYWORD_LINK_WITH  7
+#define KEYWORD_LINK_NAME  8
+#define KEYWORD_LINK_LOC   9
+#define KEYWORD_IBBS       10
+#define KEYWORD_IBBS_OP    11
+#define KEYWORD_IBBS_GN    12
+#define KEYWORD_BBS_NAME   13
+
+char           *apszKeyWord[NUM_KEYWORDS] = {"SystemAddress",
+    "UserName",
+    "NetmailDir",
+    "Crash",
+    "Hold",
+    "EraseOnSend",
+    "EraseOnReceive",
+    "LinkWith",
+    "LinkName",
+    "LinkLocation",
+    "InterBBS",
+    "InterBBSOperator",
+    "InterBBSGameNumber",
+"SystemName"};
+
+tIBResult       IBReadConfig(tIBInfo * pInfo, char *pszConfigFile)
+{
+    /* Set default values for pInfo settings */
+
+    /*
+       pInfo->nTotalSystems = 0; pInfo->paOtherSystem = NULL;
+    */
+    /* Process configuration file */
+    if (!ProcessConfigFile(pszConfigFile, NUM_KEYWORDS, apszKeyWord,
+			   ProcessConfigLine, (void *)pInfo)) {
+	return (eFileOpenError);
+    }
+    /* else */
+    return (eSuccess);
+}
+
+void            ProcessConfigLine(INT16 nKeyword, char *pszParameter, void *pCallbackData)
+{
+    tIBInfo        *pInfo = (tIBInfo *) pCallbackData;
+    tOtherNode     *paNewNodeArray;
+
+    switch (nKeyword) {
+	case KEYWORD_IBBS:
+	    ibbsi = TRUE;
+	    break;
+
+	case KEYWORD_IBBS_OP:
+	    ibbsi_operator = TRUE;
+	    break;
+
+	case KEYWORD_IBBS_GN:
+	    sscanf(pszParameter, "%d", &ibbsi_game_num);
+	    break;
+
+	case KEYWORD_BBS_NAME:
+	    strncpy(bbs_namei, pszParameter, 36);
+	    //printf("*|%s|", bbs_namei);
+	    break;
+
+	case KEYWORD_ADDRESS:
+	    strncpy(pInfo->szThisNodeAddress, pszParameter, NODE_ADDRESS_CHARS);
+	    pInfo->szThisNodeAddress[NODE_ADDRESS_CHARS] = '\0';
+	    break;
+
+	case KEYWORD_USER_NAME:
+	    strncpy(pInfo->szProgName, pszParameter, PROG_NAME_CHARS);
+	    pInfo->szProgName[PROG_NAME_CHARS] = '\0';
+	    break;
+
+	case KEYWORD_MAIL_DIR:
+	    strncpy(pInfo->szNetmailDir, pszParameter, PATH_CHARS);
+	    pInfo->szNetmailDir[PATH_CHARS] = '\0';
+	    break;
+
+	case KEYWORD_CRASH:
+	    if (stricmp(pszParameter, "Yes") == 0) {
+		pInfo->bCrash = TRUE;
+	    }
+	    else if (stricmp(pszParameter, "No") == 0) {
+		pInfo->bCrash = FALSE;
+	    }
+	    break;
+
+	case KEYWORD_HOLD:
+	    if (stricmp(pszParameter, "Yes") == 0) {
+		pInfo->bHold = TRUE;
+	    }
+	    else if (stricmp(pszParameter, "No") == 0) {
+		pInfo->bHold = FALSE;
+	    }
+	    break;
+
+	case KEYWORD_KILL_SENT:
+	    if (stricmp(pszParameter, "Yes") == 0) {
+		pInfo->bEraseOnSend = TRUE;
+	    }
+	    else if (stricmp(pszParameter, "No") == 0) {
+		pInfo->bEraseOnSend = FALSE;
+	    }
+	    break;
+
+	case KEYWORD_KILL_RCVD:
+	    if (stricmp(pszParameter, "Yes") == 0) {
+		pInfo->bEraseOnReceive = TRUE;
+	    }
+	    else if (stricmp(pszParameter, "No") == 0) {
+		pInfo->bEraseOnReceive = FALSE;
+	    }
+	    break;
+
+	case KEYWORD_LINK_WITH:
+	    if (pInfo->nTotalSystems == 0) {
+		pInfo->paOtherSystem = (tOtherNode *) malloc(sizeof(tOtherNode));
+		if (pInfo->paOtherSystem == NULL) {
+		    break;
+		}
+	    }
+	    else {
+		if ((paNewNodeArray = (tOtherNode *) malloc(sizeof(tOtherNode) *
+				     (pInfo->nTotalSystems + 1))) == NULL) {
+		    break;
+		}
+		memcpy(paNewNodeArray, pInfo->paOtherSystem, sizeof(tOtherNode) *
+		       pInfo->nTotalSystems);
+
+		free(pInfo->paOtherSystem);
+
+		pInfo->paOtherSystem = paNewNodeArray;
+	    }
+	    strncpy(pInfo->paOtherSystem[pInfo->nTotalSystems].szAddress,
+		    pszParameter, NODE_ADDRESS_CHARS);
+	    pInfo->paOtherSystem[pInfo->nTotalSystems].
+		szAddress[NODE_ADDRESS_CHARS] = '\0';
+	    ++pInfo->nTotalSystems;
+	    break;
+
+	case KEYWORD_LINK_NAME:
+	    if (pInfo->nTotalSystems != 0) {
+		strncpy(pInfo->paOtherSystem[pInfo->nTotalSystems - 1].szSystemName,
+			pszParameter, SYSTEM_NAME_CHARS);
+		pInfo->paOtherSystem[pInfo->nTotalSystems - 1].
+		    szSystemName[SYSTEM_NAME_CHARS] = '\0';
+	    }
+	    break;
+
+	case KEYWORD_LINK_LOC:
+	    if (pInfo->nTotalSystems != 0) {
+		strncpy(pInfo->paOtherSystem[pInfo->nTotalSystems - 1].szLocation,
+			pszParameter, LOCATION_CHARS);
+		pInfo->paOtherSystem[pInfo->nTotalSystems - 1].
+		    szLocation[LOCATION_CHARS] = '\0';
+	    }
+	    break;
+    }
+}
+
+/* Configuration file reader settings */
+#define CONFIG_LINE_SIZE 128
+#define MAX_TOKEN_CHARS 32
+tBool           ProcessConfigFile(char *pszFileName, INT16 nKeyWords, char **papszKeyWord,
+				                  void (*pfCallBack) (INT16, char *, void *), void *pCallBackData)
+{
+    FILE           *pfConfigFile;
+    char            szConfigLine[CONFIG_LINE_SIZE + 1];
+
+    char           *pcCurrentPos;
+
+    WORD    uCount;
+
+    char            szToken[MAX_TOKEN_CHARS + 1];
+
+    INT16             iKeyWord;
+
+    /* Attempt to open configuration file */
+    if ((pfConfigFile = fopen(pszFileName, "rt")) == NULL) {
+	return (FALSE);
+    }
+    /* While not at end of file */
+    while (!feof(pfConfigFile)) {
+	/* Get the next line */
+	if (fgets(szConfigLine, CONFIG_LINE_SIZE + 1, pfConfigFile) == NULL)
+	    break;
+
+	/* Ignore all of line after comments or CR/LF char */
+	pcCurrentPos = (char *)szConfigLine;
+	while (*pcCurrentPos) {
+	    if (*pcCurrentPos == '\n' || *pcCurrentPos == '\r' || *pcCurrentPos == ';') {
+		*pcCurrentPos = '\0';
+		break;
+	    }
+	    ++pcCurrentPos;
+	}
+	/* Search for beginning of first token on line */
+	pcCurrentPos = (char *)szConfigLine;
+	while (*pcCurrentPos && isspace(*pcCurrentPos))
+	    ++pcCurrentPos;
+
+	/* If no token was found, proceed to process the next line */
+	if (!*pcCurrentPos)
+	    continue;
+
+	/* Get first token from line */
+	uCount = 0;
+	while (*pcCurrentPos && !isspace(*pcCurrentPos)) {
+	    if (uCount < MAX_TOKEN_CHARS)
+		szToken[uCount++] = *pcCurrentPos;
+	    ++pcCurrentPos;
+	}
+	if (uCount <= MAX_TOKEN_CHARS)
+	    szToken[uCount] = '\0';
+	else
+	    szToken[MAX_TOKEN_CHARS] = '\0';
+
+	/* Find beginning of configuration option parameters */
+	while (*pcCurrentPos && isspace(*pcCurrentPos))
+	    ++pcCurrentPos;
+
+	/* Trim trailing spaces from setting string */
+	for (uCount = strlen(pcCurrentPos) - 1; uCount > 0; --uCount) {
+	    if (isspace(pcCurrentPos[uCount])) {
+		pcCurrentPos[uCount] = '\0';
+	    }
+	    else {
+		break;
+	    }
+	}
+	/* Loop through list of keywords */
+	for (iKeyWord = 0; iKeyWord < nKeyWords; ++iKeyWord) {
+	    //printf("|%s|", papszKeyWord[iKeyWord]);
+	    //printf("|>%d=%d<|\n", iKeyWord, KEYWORD_BBS_NAME);
+
+	    /* If keyword matches */
+	    if (stricmp(szToken, papszKeyWord[iKeyWord]) == 0) {
+		//printf("|%s|", szToken);
+		//printf("|>%d=%d<|", iKeyWord, KEYWORD_BBS_NAME);
+		/* Call keyword processing callback function */
+		(*pfCallBack) (iKeyWord, pcCurrentPos, pCallBackData);
+	    }
+	}
+    }
+    /* Close the configuration file */
+    fclose(pfConfigFile);
+
+    /* Return with success */
+    return (TRUE);
+}
diff --git a/src/doors/ny2008/src/ibbsny.h b/src/doors/ny2008/src/ibbsny.h
new file mode 100644
index 0000000000000000000000000000000000000000..f2e6b3a529a9eda4cf98cb1d613e1036e18acddd
--- /dev/null
+++ b/src/doors/ny2008/src/ibbsny.h
@@ -0,0 +1,89 @@
+#ifndef INTERBBS_H
+#define INTERBBS_H
+
+/******************************************************************************/
+/*						   Configuration Constants							  */
+/******************************************************************************/
+/*#define PROG_NAME_CHARS    35
+#define PATH_CHARS         80
+#define FILENAME_CHARS     12
+#define MESSAGE_SUBJECT    "##NY2008 v0.10 IBBS Door Message"
+#define MESSAGE_PID        "\1PID: ODIBMS 1\r"
+#define MAX_LINE_LENGTH    70
+#define MESSAGE_HEADER     "$"
+#define MESSAGE_FOOTER     "$"
+#define DELIMITER_CHAR     '$'
+#define NODE_ADDRESS_CHARS 23
+#define SYSTEM_NAME_CHARS  40
+#define LOCATION_CHARS     40*/
+
+/******************************************************************************/
+/*								  Data Types								  */
+/******************************************************************************/
+
+#ifndef tBool
+typedef INT16 tBool;
+#endif
+#include "const.h"
+
+#include "structs.h"
+
+/******************************************************************************/
+/*                         InterBBS API Functions                             */
+/******************************************************************************/
+tIBResult IBSend(tIBInfo *pInfo, char *pszDestNode, char *pBuffer,
+		 INT16 nBufferSize);
+
+tIBResult IBSendAll(tIBInfo *pInfo, char *pBuffer, INT16 nBufferSize);
+//tIBResult IBGet(tIBInfo *pInfo, void *pBuffer, INT16 nMaxBufferSize);
+tIBResult IBSendMail(tIBInfo *pInfo, ibbs_mail_type *ibmail);
+tIBResult IBGetMail(tIBInfo *pInfo, ibbs_mail_type *ibmail);
+//tIBResult IBGetR(tIBInfo *pInfo, void *pBuffer,INT16 *nBufferLen);
+tIBResult IBReadConfig(tIBInfo *pInfo, char *pszConfigFile);
+
+
+/******************************************************************************/
+/*							 Private Declarations							  */
+/******************************************************************************/
+#define ATTRIB_PRIVATE		0x0001
+#define ATTRIB_CRASH		0x0002
+#define ATTRIB_RECEIVED 	0x0004
+#define ATTRIB_SENT 		0x0008
+#define ATTRIB_FILE_ATTACH	0x0010
+#define ATTRIB_IN_TRANSIT	0x0020
+#define ATTRIB_ORPHAN		0x0040
+#define ATTRIB_KILL_SENT	0x0080
+#define ATTRIB_LOCAL		0x0100
+#define ATTRIB_HOLD 		0x0200
+#define ATTRIB_FILE_REQUEST 0x0800
+#define ATTRIB_RECEIPT_REQ	0x1000
+#define ATTRIB_IS_RECEIPT	0x2000
+#define ATTRIB_AUDIT_REQ	0x4000
+#define ATTRIB_FILE_UPDATE	0x8000
+
+//tBool DirExists(const char *pszDirName);
+void MakeFilename(const char *pszPath, const char *pszFilename, char *pszOut);
+tIBResult ValidateInfoStruct(tIBInfo *pInfo);
+tBool CreateMessage(char *pszMessageDir, tMessageHeader *pHeader,
+					char *pszText);
+DWORD GetFirstUnusedMsgNum(char *pszMessageDir);
+void GetMessageFilename(char *pszMessageDir, DWORD lwMessageNum,
+						char *pszOut);
+tBool WriteMessage(char *pszMessageDir, DWORD lwMessageNum,
+				   tMessageHeader *pHeader, char *pszText);
+tBool ReadMessage(char *pszMessageDir, DWORD lwMessageNum,
+				  tMessageHeader *pHeader, char **ppszText);
+DWORD GetNextMSGID(void);
+INT16 GetMaximumEncodedLength(INT16 nUnEncodedLength);
+void EncodeBuffer(char *pszDest, const char *pBuffer, INT16 nBufferSize);
+//void DecodeBuffer(const char *pszSource, void *pDestBuffer, INT16 nBufferSize);
+void EncodeMail(char *pszDest, ibbs_mail_type *ibmail);
+void DecodeMail(const char *pcSource, ibbs_mail_type *ibmail);
+//int DecodeBufferR(const char *pszSource, void *pDestBuffer);
+void ConvertAddressToString(char *pszDest, const tFidoNode *pNode);
+void ConvertStringToAddress(tFidoNode *pNode, const char *pszSource);
+tBool ProcessConfigFile(char *pszFileName, INT16 nKeyWords, char **papszKeyWord,
+		  void (*pfCallBack)(INT16, char *, void *), void *pCallBackData);
+void ProcessConfigLine(INT16 nKeyword, char *pszParameter, void *pCallbackData);
+
+#endif
diff --git a/src/doors/ny2008/src/igmsup.cpp b/src/doors/ny2008/src/igmsup.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..44468e57b2a24a2287a6b83027a53b7e28527376
--- /dev/null
+++ b/src/doors/ny2008/src/igmsup.cpp
@@ -0,0 +1,924 @@
+// include the header
+#include "ny2008.h"
+
+// include prototypes for fights
+#include "fights.h"
+
+extern unsigned _stklen;
+
+// price arrays
+extern INT16 no_rip_m;
+extern long gun_price[A_BOMB+1];
+extern INT16 	drug_price[HEROIN+1];
+//extern INT16 fast_mail;
+INT16 no_forrest_IGM=FALSE;
+
+// Declare global variables
+extern INT16 nCurrentUserNumber,max_fights,max_drug_hits,condom_price,delete_after;
+extern INT16 bank_interest;
+extern char ansi_name[61],ascii_name[61];
+extern INT16 do_scr_files;
+extern user_rec cur_user;
+extern enemy enemy_rec;
+extern char uname[36];
+extern char rec_credit[36];
+extern INT16 do_maint;
+extern char str[15];
+extern INT16 expert;
+extern INT16 rip;
+extern char maint_exec[61];
+extern char *t_buffer;
+extern INT16 single_node;
+extern char *ver;
+extern char *verinfo;
+extern INT16 gamedisk,flagdisk;
+extern char gamedir[MAX_PATH],flagdir[MAX_PATH];
+extern char c_dir_g;
+extern INT16 clean_mode;
+
+extern INT16 busted_ch_bank;
+extern INT16 busted_ch_food;
+extern INT16 busted_ch_rape;
+extern INT16 busted_ch_beggar;
+extern INT16 busted_ch_car;
+extern INT16 busted_ch_school;
+extern INT16 busted_ch_window;
+extern INT16 busted_ch_poison;
+extern INT16 busted_ch_bomb;
+extern INT16 success_ch_bank;
+extern INT16 success_ch_food;
+extern INT16 success_ch_rape;
+extern INT16 success_ch_beggar;
+extern INT16 success_ch_car;
+extern INT16 success_ch_school;
+extern INT16 success_ch_window;
+extern INT16 success_ch_poison;
+extern INT16 success_ch_bomb;
+
+void
+read_IGMs(void)
+{
+  FILE *tparty;
+  FILE *menuthing;
+  INT16 ok,x2,x3;
+  char *key, kkk;
+  INT16 intval;
+  char numstr[14];
+  char exenam[251];
+  char temp[31];
+
+/*  printf("\n}{Stack Length=%u}{\n",_stklen);
+  scanf("%c",&kkk);*/
+
+//  od_printf("\r\n\nreading...\n\n");
+
+//  printf("\n\r15\n\r");
+
+  ch_game_d();
+//  printf("\n\r16\n\r");
+  tparty=ShareFileOpen(TRDPARTY_FILENAME,"rt");
+//  printf("\n\r17\n\r");
+  if(tparty==NULL) {
+//    no_forrest_IGM=TRUE;
+    return;
+  }
+//  printf("\n\r18\n\r");
+  ch_flag_d();
+  sprintf(numstr,"mnu%d.dat",od_control.od_node);
+  menuthing=ShareFileOpen(numstr,"wb");
+  ch_game_d();
+
+  ok=0;
+  while(tparty!=NULL && ok!=2 && fgets(temp,30,tparty)!=NULL) {
+//    od_printf("\n\n1111...\n\n");
+    ok=0;
+    if((key=strchr(temp,'\n'))!=0)
+      *key=0;
+    else
+      while (kkk!='\n') fscanf(tparty,"%c",&kkk);
+    if((key=strchr(temp,';'))!=0)
+      *key=0;
+    if (temp[0]!=0) {
+//      od_printf("\n\n2222...\n\n");
+      while (ok==0) {
+	if (fgets(exenam,250,tparty)!=NULL) {
+	  if((key=strchr(exenam,'\n'))!=0)
+	    *key=0;
+	  else
+	    while (kkk!='\n') fscanf(tparty,"%c",&kkk);
+	  if((key=strchr(exenam,';'))!=0)
+	    *key=0;
+	  if (exenam[0]!=0) ok=1;
+	  if((key=strchr(exenam,'{'))!=0) {
+	    for(x2=0;x2<=30 && *(key+x2+1)!='}' && *(key+x2+1)!=0;x2++) {
+	      numstr[x2]= *(key+x2+1);
+	      od_kernel();
+	    }
+	    numstr[x2]=0;
+	    x3=x2;
+	    x2++;
+	    if(*(key+x2)==0) *(key+x2+1)=0;
+	    while(*(key+x2+1)!=0) {
+	      *(key+x2-x3-1)= *(key+x2+1);
+	      x2++;
+	      od_kernel();
+	    }
+	    *(key+x2-x3-1)=0;
+	    sscanf(numstr,"%d",&intval);
+	    if(od_control.user_security<intval) ok=3;
+	  }
+	} else {
+	  ok=2;
+	}
+      }
+//      od_printf("\n\n1111 <%d>...\n\n",ok);
+      if (ok==1) {
+//	od_printf("\n\n4444...\n\n");
+	ny_fwrite(temp,31,1,menuthing);
+	ny_fwrite(exenam,251,1,menuthing);
+      }
+    }
+  }
+//  WaitForEnter();
+  fclose(tparty);
+  fclose(menuthing);
+}
+
+
+void
+read_fight_IGMs(void)
+{
+  FILE *tparty;
+  FILE *menuthing;
+  INT16 ok,x2,x3;
+  char *key, kkk;
+  INT16 intval;
+  char numstr[14];
+  char exenam[251];
+  char temp[31];
+
+//  od_printf("\r\n\nreading...\n\n");
+
+//  printf("\n\r20\n\r");
+  ch_game_d();
+//  printf("\n\r21\n\r");
+  tparty=ShareFileOpen(TRDEVENT_FILENAME,"rt");
+//  printf("\n\r22\n\r");
+  if(tparty==NULL) {
+    no_forrest_IGM=TRUE;
+    return;
+  }
+//  printf("\n\r23\n\r");
+  ch_flag_d();
+  sprintf(numstr,"fev%d.dat",od_control.od_node);
+  menuthing=ShareFileOpen(numstr,"wb");
+  ch_game_d();
+
+  ok=0;
+  while(tparty!=NULL && ok!=2 && fgets(temp,30,tparty)!=NULL) {
+//    od_printf("\n\n1111...\n\n");
+    ok=0;
+    if((key=strchr(temp,'\n'))!=0)
+      *key=0;
+    else
+      while (kkk!='\n') fscanf(tparty,"%c",&kkk);
+    if((key=strchr(temp,';'))!=0)
+      *key=0;
+    if (temp[0]!=0) {
+//      od_printf("\n\n2222...\n\n");
+      while (ok==0) {
+	if (fgets(exenam,250,tparty)!=NULL) {
+	  if((key=strchr(exenam,'\n'))!=0)
+	    *key=0;
+	  else
+	    while (kkk!='\n') fscanf(tparty,"%c",&kkk);
+	  if((key=strchr(exenam,';'))!=0)
+	    *key=0;
+	  if (exenam[0]!=0) ok=1;
+	  if((key=strchr(exenam,'{'))!=0) {
+	    for(x2=0;x2<=30 && *(key+x2+1)!='}' && *(key+x2+1)!=0;x2++) {
+	      numstr[x2]= *(key+x2+1);
+	      od_kernel();
+	    }
+	    numstr[x2]=0;
+	    x3=x2;
+	    x2++;
+	    if(*(key+x2)==0) *(key+x2+1)=0;
+	    while(*(key+x2+1)!=0) {
+	      *(key+x2-x3-1)= *(key+x2+1);
+	      x2++;
+	      od_kernel();
+	    }
+	    *(key+x2-x3-1)=0;
+	    sscanf(numstr,"%d",&intval);
+	    if(od_control.user_security<intval) ok=3;
+	  }
+	} else {
+	  ok=2;
+	}
+      }
+//      od_printf("\n\n1111 <%d>...\n\n",ok);
+      if (ok==1) {
+//	od_printf("\n\n4444...\n\n");
+	ny_fwrite(temp,31,1,menuthing);
+	ny_fwrite(exenam,251,1,menuthing);
+      }
+    }
+  }
+//  WaitForEnter();
+  fclose(tparty);
+  fclose(menuthing);
+}
+
+
+
+void
+IGM(char exenamr[])
+{
+	char temp[31];
+	INT16 x,x1,found_file;
+//	FILE *tparty;
+	FILE *menuthing;
+//	char kkk;
+//	char *key;
+	INT32 intval;
+	char numstr[14];
+	char exenam[251];
+	INT32 maxnum;
+	INT16 ok;
+	static long where=0;
+
+	all_over_igm:;
+	//od_control.od_ker_exec=NULL;
+	od_clear_keybuffer();
+	od_printf("\n\r\n");
+	if (expert!=2 && expert!=3) ny_clr_scr();
+
+	if (expert==2 || expert==3) {
+	  ny_line(351,0,1);
+//	  od_printf("\n\r`bright red`O`red`ther `bright red`S`red`tuff\n\r");
+	  ny_line(352,0,1);
+//	  od_printf("`bright green`? = list  Q = Quit\n\r`bright blue`E`blue`nter `bright blue`Y`blue`er `bright blue`C`blue`ommand (%d mins)`bright blue`>",od_control.caller_timelimit);
+	  ny_line(36,0,0);
+	  od_printf("%d ",od_control.caller_timelimit);
+	  ny_line(37,0,0);
+	  maxnum=20;
+	  ch_flag_d();
+	  sprintf(numstr,"mnu%d.dat",od_control.od_node);
+	  menuthing=ShareFileOpen(numstr,"rb");
+	  if((where+(282*20))>=filelength(fileno(menuthing))) {
+	    maxnum=(filelength(fileno(menuthing))-where)/(INT32)282;
+	  } else {
+	    ok=1;
+	  }
+	  fclose(menuthing);
+	  ch_game_d();
+	} else {
+	  list_igm:;
+	  found_file=FALSE;
+	  if(od_send_file("other") == TRUE) found_file=TRUE;
+	  //od_control.od_ker_exec=NULL;
+	  //od_send_file("igm");
+	  if(found_file==FALSE)
+	    ny_send_menu(OTHER,"");
+
+/*	  ny_disp_emu("\n\r`@O`red`ther `bright red`S`red`tuff\n\r\n");
+	  od_printf("`green`-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\r");
+	  od_printf("`bright blue`You go and look for something less boring ...\n\r\n");*/
+
+	  ch_flag_d();
+	  sprintf(numstr,"mnu%d.dat",od_control.od_node);
+	  menuthing=ShareFileOpen(numstr,"rb");
+	  ch_game_d();
+
+	  if(found_file==FALSE) {
+	    fseek(menuthing,where,SEEK_SET);
+	    x=1;
+	    while(menuthing!=NULL && x<=20 && ny_fread(temp,31,1,menuthing)!=NULL) {
+	      ny_fread(exenam,251,1,menuthing);
+	      if(found_file==FALSE) {
+		od_printf(" `bright red`%-2d`red` - ",x);
+		ny_disp_emu(temp,30);
+		od_printf("  ");
+		if ((INT16)(x/2) * 2 == x )
+		  od_printf("\n\r");
+	      }
+	      x++;
+	    }
+	    maxnum=x-1;
+	    if ((INT16)(x/2) * 2 == x )
+	      od_printf("\n\r");
+	    if (x==1)
+	      ny_line(178,0,1);
+	    od_printf("\n\r");
+	    if(where>0) ny_line(409,0,0);
+	    ok=0;
+	    if(filelength(fileno(menuthing))>ftell(menuthing)) {
+	      ny_line(410,0,0);
+	      ok=1;
+	    }
+	    ny_line(179,0,2);
+	  } else {
+	    maxnum=filelength(fileno(menuthing))/(INT32)282;
+	    od_printf("\n\r");
+	  }
+	  fclose(menuthing);
+
+	  ny_line(36,0,0);
+	  od_printf("%d ",od_control.caller_timelimit);
+	  ny_line(37,0,0);
+	}
+	//od_control.od_ker_exec=ny_kernel;
+
+	x1=0;
+	do {
+	  if(x1==0)
+	    numstr[0]=ny_get_answer("0123456789QPN?\b\n\r");
+	  else
+	    numstr[x1]=ny_get_answer("0123456789\b\n\r");
+	  x1++;
+	  if(numstr[x1-1]=='\b') {
+	    if(x1>1) {
+	      od_printf("\b \b");
+	      x1-=2;
+	    } else {                                    	      x1--;
+	    }
+	  } else {
+	    if(numstr[x1-1]!='\r')
+	      od_putch(numstr[x1-1]);
+	  }
+	} while(numstr[x1-1]!='\n' &&
+		numstr[x1-1]!='\r' &&
+		numstr[0]!='Q' &&
+		numstr[0]!='P' &&
+		numstr[0]!='N' &&
+		numstr[0]!='?' &&
+		x1<10);
+
+//	printf("%ld",maxnum);
+
+	numstr[x1]=0;
+//
+//	printf("\n%s",numstr);
+
+//	od_input_str(numstr,2,' ',127);
+	if(expert==1) expert=3;
+	if (numstr[0]==0) {
+	  exenamr[0]=0;
+	  return;
+	}
+	if (numstr[0]=='?') {
+	  od_printf("\n\r\n");
+	  ny_clr_scr();
+	  goto list_igm;
+	}
+	if (numstr[0]=='Q') {
+	  exenamr[0]=0;
+	  return;
+	}
+
+	if (found_file==FALSE &&
+	    ok==1 &&
+	    numstr[0]=='N') {
+	  if(expert==3) expert=1;
+	  where+=282*20;
+	  goto all_over_igm;
+	}
+	if (found_file==FALSE &&
+	    where>0 &&
+	    numstr[0]=='P') {
+	  if(expert==3) expert=1;
+	  where-=282*20;
+	  goto all_over_igm;
+	}
+
+	sscanf(numstr,"%ld",&intval);
+
+	if (intval==0 || intval>maxnum) {
+	  goto all_over_igm;
+	}
+
+
+	ch_flag_d();
+	sprintf(numstr,"mnu%d.dat",od_control.od_node);
+	menuthing=ShareFileOpen(numstr,"rb");
+	ch_game_d();
+
+	fseek(menuthing,where+((intval-1)*282)+31,SEEK_SET);
+	ny_fread(exenamr,251,1,menuthing);
+//	printf("%s",exenamr);
+	fclose(menuthing);
+
+	return;
+}
+
+
+
+void
+forrest_IGM()
+{
+	char exenamr[251];
+	char temp[31];
+	char key;
+	FILE *menuthing;
+	INT16 intval;
+	char numstr[14];
+	INT32 maxnum;
+	//od_control.od_ker_exec=NULL;
+	no_rip_m=0;
+	od_clear_keybuffer();
+	od_printf("\n\r\n");
+	ny_clr_scr();
+	ch_flag_d();
+	sprintf(numstr,"fev%d.dat",od_control.od_node);
+	menuthing=ShareFileOpen(numstr,"rb");
+	maxnum=filelength(fileno(menuthing))/(INT32)282;
+	intval=xp_random((INT16)maxnum);
+	fseek(menuthing,intval*282,SEEK_SET);
+	ny_fread(temp,31,1,menuthing);
+	ny_fread(exenamr,251,1,menuthing);
+	fclose(menuthing);
+	ch_game_d();
+
+	if(rip==FALSE) {
+	  ny_line(411,0,2);
+	  ny_disp_emu(temp);
+	} else {
+	  ny_line(411,1,0);
+	  od_disp_str(ny_un_emu(temp));
+	  od_disp_str("::^M@OK))|#|#|#\n\r");
+	  od_get_answer("\n\r");
+	}
+	ny_line(412,2,0);
+	key=ny_get_answer("YN");
+	if(rip==FALSE)
+	  od_printf("%c\n\r\n",key);
+	else
+	  od_disp_str("\n\r\n");
+
+
+	if(key=='Y')
+	  call_IGM(exenamr);
+
+	return;
+}
+
+
+
+
+      //	od_putch(key);
+
+      //	return(key);
+
+
+void
+IGM_ops(void)
+{
+  char exenam[251];
+  do {
+    ch_game_d();
+    IGM(exenam);
+    if(exenam[0]!=0)
+      call_IGM(exenam);
+  } while(exenam[0]!=0);
+
+}
+
+void
+CreateDropFile(INT16 all)
+{
+  char numstr[25];
+  FILE *justfile;
+
+  if(all==TRUE)
+    sprintf(numstr,"u%07d.inf",nCurrentUserNumber);
+  else
+    strcpy(numstr,TRDMAINT_LIST_FILENAME);
+  justfile=ShareFileOpen(numstr,"w+t");
+  fprintf(justfile,"%s\n",od_control.info_path);
+  fprintf(justfile,"%d\n",od_control.caller_timelimit);
+  fprintf(justfile,"%d\n",od_control.port);
+  fprintf(justfile,"%lu\n",od_control.baud);
+  if(od_control.user_avatar!=FALSE) {
+    fprintf(justfile,"AVATAR");
+  } else if(od_control.user_ansi!=FALSE || rip==TRUE) {
+    fprintf(justfile,"ANSI");
+  } else {
+    fprintf(justfile,"ASCII");
+  }
+  fprintf(justfile,"\n%s\n",od_control.user_location);
+  if(od_control.od_com_method==COM_FOSSIL)
+    fprintf(justfile,"FOSSIL\n");
+  else {
+    fprintf(justfile,"NOFOSSIL\n");
+    fprintf(justfile,"%d\n",od_control.od_com_address); //
+    fprintf(justfile,"%d\n",(INT16)od_control.od_com_irq);
+    if (od_control.od_com_no_fifo==TRUE)
+      fprintf(justfile,"NOFIFO\n");
+    else
+      fprintf(justfile,"FIFO\n");
+    fprintf(justfile,"%d\n",(INT16)od_control.od_com_fifo_trigger);
+    fprintf(justfile,"%u\n",(INT16)od_control.od_com_rx_buf);
+    fprintf(justfile,"%u\n",(INT16)od_control.od_com_tx_buf);
+  }
+  fclose(justfile);
+
+ if(all==TRUE) {
+  sprintf(numstr,"n%07d.sts",od_control.od_node);
+  justfile=ShareFileOpen(numstr,"wb");
+  ny_fwrite(&cur_user,sizeof(user_rec),1,justfile);
+  fclose(justfile);
+
+  sprintf(numstr,"n%07d.stt",od_control.od_node);
+  justfile=ShareFileOpen(numstr,"wt");
+
+  fprintf(justfile,"%s\n",cur_user.bbsname);     //the BBS name of the user
+  fprintf(justfile,"%s\n",cur_user.name);        //the name of the character
+  fprintf(justfile,"%s\n",cur_user.say_win);     //what the user says when he wins
+  fprintf(justfile,"%s\n",cur_user.say_loose);   // "    "    "   "    "   "  looses
+  fprintf(justfile,"%d\n",cur_user.rank);	         //user rank
+  fprintf(justfile,"%d\n",cur_user.days_not_on);     //days the user has been inactive
+  fprintf(justfile,"%d\n",cur_user.strength);        //attacking strenght of the user
+  fprintf(justfile,"%d\n",cur_user.defense);         //defensive strenght
+  fprintf(justfile,"%d\n",cur_user.condoms);         //condoms user has
+  fprintf(justfile,"%d\n",cur_user.since_got_laid);  //days since the user last got laid
+  fprintf(justfile,"%d\n",cur_user.drug_hits);       //the hist that the user has
+  fprintf(justfile,"%d\n",cur_user.drug_days_since); //if addicted how long the user
+					 //has not used the drug
+  fprintf(justfile,"%ld\n",cur_user.hitpoints);       //users hitpoints
+  fprintf(justfile,"%ld\n",cur_user.maxhitpoints);    //maximum of the users hitpoints
+  fprintf(justfile,"%lu\n",cur_user.points);          //users points
+  fprintf(justfile,"%lu\n",cur_user.money);           //money in hand
+  fprintf(justfile,"%lu\n",cur_user.bank);            //money in bank
+  fprintf(justfile,"%d\n",(INT16)cur_user.level);           //user level
+  fprintf(justfile,"%d\n",(INT16)cur_user.turns);           //fight the user has left today
+  fprintf(justfile,"%d\n",(INT16)cur_user.hunger);          // % of hunger
+  fprintf(justfile,"%d\n",(INT16)cur_user.sex_today);       //sex turns left today
+  fprintf(justfile,"%d\n",(INT16)cur_user.std_percent);     // % of current std
+  fprintf(justfile,"%d\n",(INT16)cur_user.drug_addiction);  // % of drug addiction
+  fprintf(justfile,"%d\n",(INT16)cur_user.drug_high);       // % of how "high" the player is
+  fprintf(justfile,"%d\n",(INT16)cur_user.hotel_paid_fer);  //for how many more days the hotel
+					 //is paid for
+  fprintf(justfile,"%d\n",(INT16)cur_user.days_in_hospital);//how many days has the use been
+					 //in hospital
+
+  if(cur_user.alive==ALIVE)
+    fprintf(justfile,"ALIVE\n");
+  else
+    fprintf(justfile,"UNCONSIOUS\n");
+  if(cur_user.sex==MALE)
+    fprintf(justfile,"M\n");
+  else
+    fprintf(justfile,"F\n");
+
+  if(cur_user.nation==PUNK)
+    fprintf(justfile,"PUNK\n");
+  else if(cur_user.nation==HEADBANGER)
+    fprintf(justfile,"HEADBANGER\n");
+  else if(cur_user.nation==BIG_FAT_DUDE)
+    fprintf(justfile,"BIG FAT DUDE\n");
+  else if(cur_user.nation==CRACK_ADDICT)
+    fprintf(justfile,"CRACK ADDICT\n");
+  else
+    fprintf(justfile,"HIPPIE\n");
+  fprintf(justfile,"%d\n",(INT16)cur_user.arm);
+  if(cur_user.std==CRAPS)
+    fprintf(justfile,"CRAPS\n");
+  else if(cur_user.std==HERPES)
+    fprintf(justfile,"HERPES\n");
+  else if(cur_user.std==SYPHILIS)
+    fprintf(justfile,"SYPHILIS\n");
+  else if(cur_user.std==AIDS)
+    fprintf(justfile,"AIDS\n");
+  else
+    fprintf(justfile,"NONE\n");
+
+  if(cur_user.drug==POT)
+    fprintf(justfile,"POT\n");
+  else if(cur_user.drug==HASH)
+    fprintf(justfile,"HASH\n");
+  else if(cur_user.drug==LSD)
+    fprintf(justfile,"LSD\n");
+  else if(cur_user.drug==COKE)
+    fprintf(justfile,"COKE\n");
+  else if(cur_user.drug==PCP)
+    fprintf(justfile,"PCP\n");
+  else
+    fprintf(justfile,"HEROIN\n");
+
+
+  if(cur_user.rest_where==NOWHERE)
+    fprintf(justfile,"NOWHERE\n");
+  else if(cur_user.rest_where==MOTEL)
+    fprintf(justfile,"MOTEL\n");
+  else if(cur_user.rest_where==REG_HOTEL)
+    fprintf(justfile,"REGULAR HOTEL\n");
+  else
+    fprintf(justfile,"EXPENSIVE HOTEL\n");
+
+  fprintf(justfile,"%d\n",(INT16)cur_user.unhq);
+  fprintf(justfile,"%d\n",(INT16)cur_user.poison);
+  fprintf(justfile,"%d\n",(INT16)cur_user.rocks);
+  fprintf(justfile,"%d\n",(INT16)cur_user.throwing_ability);
+  fprintf(justfile,"%d\n",(INT16)cur_user.punch_ability);
+  fprintf(justfile,"%d\n",(INT16)cur_user.kick_ability);
+  fprintf(justfile,"%d\n",(INT16)cur_user.InterBBSMoves);
+
+/*reserved for future use 3 bytes reset to 0
+	char		res1;
+	INT16		res2;*/
+
+  fclose(justfile);
+ }
+}
+
+void
+call_IGM(char exenam[])
+{
+//  char exenam[251];
+  char exenam2[81];
+  char numstr[40];
+  char bbs_name[40];
+  FILE *justfile;
+  DWORD p_before;
+  DWORD p_diff;
+  INT16 x,x2;
+  char *key;
+//  ffblk ffblk;
+  INT16 intval;
+  INT16 rankt,inact;
+
+
+
+      ny_line(180,2,1);
+      p_before=cur_user.points;
+      CreateDropFile(TRUE);
+      if(exenam[0]=='*') {
+	for(x=1;exenam[x]!=0;x++) {
+	  exenam[x-1]=exenam[x];
+	}
+	exenam[x-1]=0;
+
+	for(x=0;exenam[x]!=' '&& exenam[x]!=0 && x<251;x++) {
+	  exenam2[x]=exenam[x];
+	}
+	exenam2[x]=0;
+
+	for(;exenam2[x]!='\\' && x>=0;x--);
+
+	exenam2[x+1]=0;
+	if(x>2)
+	  exenam2[x]=0;
+
+	if(exenam2[0]!=0) {
+#ifndef __unix__
+	  if(exenam2[0]>='a' && exenam2[0]<='z')
+	    setdisk(exenam2[0] - 'a');
+	  else
+	    setdisk(exenam2[0] - 'A');
+#endif
+	  chdir(exenam2);
+	}
+      }
+      sprintf(numstr," -U%d -N%d",nCurrentUserNumber,od_control.od_node);
+      strcat(exenam,numstr);
+      if (od_control.baud==0) strcat(exenam," -L");
+      //od_control.od_ker_exec=NULL;
+      rankt=cur_user.rank;
+      inact=cur_user.days_not_on;
+      strcpy(bbs_name,cur_user.bbsname);
+      od_spawn(exenam);
+      od_control.od_update_status_now=TRUE;
+      sprintf(numstr,"n%07d.sts",od_control.od_node);
+      c_dir_g=1;
+      ch_game_d();
+
+      if(fexist(numstr)) {
+	justfile=ShareFileOpen(numstr,"rb");
+	ny_fread(&cur_user,sizeof(user_rec),1,justfile);
+	fclose(justfile);
+	ny_remove(numstr);
+	cur_user.rank=rankt;
+	cur_user.days_not_on=inact;
+	strcpy(cur_user.bbsname,bbs_name);
+	wrt_sts();
+      } else {
+	sprintf(numstr,"n%07d.stt",od_control.od_node);
+	if(fexist(numstr)) {
+	  justfile=ShareFileOpen(numstr,"rb");
+
+ /*	  fgets(cur_user.bbsname,36,justfile);     //the BBS name of the user
+	  cur_user.bbsname[35]=0;
+	  if((key=strchr(cur_user.bbsname,'\n'))!=NULL)
+	    *key=0;
+	  if((key=strchr(cur_user.bbsname,'\r'))!=NULL)
+	    *key=0;*/
+
+	  fgets(bbs_name,36,justfile); /*BBS name not read in no more*/
+
+	  fgets(cur_user.name,25,justfile);     //the BBS name of the user
+	  cur_user.name[24]=0;
+	  if((key=strchr(cur_user.name,'\n'))!=NULL)
+	    *key=0;
+	  if((key=strchr(cur_user.name,'\r'))!=NULL)
+	    *key=0;
+
+
+	  fgets(cur_user.say_win,41,justfile);     //the BBS name of the user
+	  cur_user.say_win[40]=0;
+	  if((key=strchr(cur_user.say_win,'\n'))!=NULL)
+	    *key=0;
+	  if((key=strchr(cur_user.say_win,'\r'))!=NULL)
+	    *key=0;
+
+
+	  fgets(cur_user.say_loose,41,justfile);     //the BBS name of the user
+	  cur_user.say_loose[40]=0;
+	  if((key=strchr(cur_user.say_loose,'\n'))!=NULL)
+	    *key=0;
+	  if((key=strchr(cur_user.say_loose,'\r'))!=NULL)
+	    *key=0;
+
+
+	  fgets(numstr,30,justfile);
+	  //sscanf(numstr,"%d",&cur_user.rank);	         //user rank
+	  fgets(numstr,30,justfile);
+	  //sscanf(numstr,"%d",&cur_user.days_not_on);     //days the user has been inactive
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%d",&cur_user.strength);        //attacking strenght of the user
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%d",&cur_user.defense);         //defensive strenght
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%d",&cur_user.condoms);         //condoms user has
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%d",&cur_user.since_got_laid);  //days since the user last got laid
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%d",&cur_user.drug_hits);       //the hist that the user has
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%d",&cur_user.drug_days_since); //if addicted how long the user
+					 //has not used the drug
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%ld",&cur_user.hitpoints);       //users hitpoints
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%ld",&cur_user.maxhitpoints);    //maximum of the users hitpoints
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%lu",&cur_user.points);          //users points
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%lu",&cur_user.money);           //money in hand
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%lu",&cur_user.bank);            //money in bank
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%d",&intval);
+	  cur_user.level=intval;           //user level
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%d",&intval);
+	  cur_user.turns=intval;           //fight the user has left today
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%d",&intval);
+	  cur_user.hunger=intval;          // % of hunger
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%d",&intval);
+	  cur_user.sex_today=intval;       //sex turns left today
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%d",&intval);
+	  cur_user.std_percent=intval;     // % of current std
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%d",&intval);
+	  cur_user.drug_addiction=intval;  // % of drug addiction
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%d",&intval);
+	  cur_user.drug_high=intval;       // % of how "high" the player is
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%d",&intval);
+	  cur_user.hotel_paid_fer=intval;  //for how many more days the hotel
+					 //is paid for
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%d",&intval);
+	  cur_user.days_in_hospital=intval;//how many days has the use been
+						 //in hospital
+
+	  fgets(numstr,30,justfile);
+	  if(strzcmp("ALIVE",numstr)==0)
+	    cur_user.alive=ALIVE;
+	  else if(strzcmp("DEAD",numstr)==0)
+	    cur_user.alive=DEAD;
+	  else if(strzcmp("UNCONSIOUS",numstr)==0)
+	    cur_user.alive=UNCONCIOUS;
+
+
+	  fgets(numstr,30,justfile);
+	  if(strzcmp("M",numstr)==0)
+	    cur_user.sex=MALE;
+	  else if(strzcmp("F",numstr)==0)
+	    cur_user.sex=FEMALE;
+
+
+	  fgets(numstr,30,justfile);
+	  if(strzcmp("PUNK",numstr)==0)
+	    cur_user.nation=PUNK;
+	  else if(strzcmp("HEADBANGER",numstr)==0)
+	    cur_user.nation=HEADBANGER;
+	  else if(strzcmp("BIG FAT DUDE",numstr)==0)
+	    cur_user.nation=BIG_FAT_DUDE;
+	  else if(strzcmp("CRACK ADDICT",numstr)==0)
+	    cur_user.nation=CRACK_ADDICT;
+	  else if(strzcmp("HIPPIE",numstr)==0)
+	    cur_user.nation=HIPPIE;
+
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%d",&intval);
+	  cur_user.arm=(weapon)intval;
+
+
+	  fgets(numstr,30,justfile);
+	  if(strzcmp("CRAPS",numstr)==0)
+	    cur_user.std=CRAPS;
+	  else if(strzcmp("HERPES",numstr)==0)
+	    cur_user.std=HERPES;
+	  else if(strzcmp("SYPHILIS",numstr)==0)
+	    cur_user.std=SYPHILIS;
+	  else if(strzcmp("AIDS",numstr)==0)
+	    cur_user.std=AIDS;
+	  else if(strzcmp("NONE",numstr)==0)
+	    cur_user.std=NONE;
+
+
+	  fgets(numstr,30,justfile);
+	  if(strzcmp("POT",numstr)==0)
+	    cur_user.drug=POT;
+	  else if(strzcmp("HASH",numstr)==0)
+	    cur_user.drug=HASH;
+	  else if(strzcmp("LSD",numstr)==0)
+	    cur_user.drug=LSD;
+	  else if(strzcmp("COKE",numstr)==0)
+	    cur_user.drug=COKE;
+	  else if(strzcmp("PCP",numstr)==0)
+	    cur_user.drug=PCP;
+	  else if(strzcmp("HEROIN",numstr)==0)
+	    cur_user.drug=HEROIN;
+
+
+
+	  fgets(numstr,30,justfile);
+	  if(strzcmp("MOTEL",numstr)==0)
+	    cur_user.rest_where=MOTEL;
+	  else if(strzcmp("REGULAR HOTEL",numstr)==0)
+	    cur_user.rest_where=REG_HOTEL;
+	  else if(strzcmp("EXPENSIVE HOTEL",numstr)==0)
+	    cur_user.rest_where=EXP_HOTEL;
+	  else if(strzcmp("NOWHERE",numstr)==0)
+	    cur_user.rest_where=NOWHERE;
+
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%d",&intval);
+	  cur_user.unhq=intval;
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%d",&intval);
+	  cur_user.poison=intval;
+
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%d",&intval);
+	  cur_user.rocks=intval;
+
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%d",&intval);
+	  cur_user.throwing_ability=intval;
+
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%d",&intval);
+	  cur_user.punch_ability=intval;
+
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%d",&intval);
+	  cur_user.kick_ability=intval;
+
+	  fgets(numstr,30,justfile);
+	  sscanf(numstr,"%d",&intval);
+	  cur_user.InterBBSMoves=intval;
+
+	  fclose(justfile);
+
+	  sprintf(numstr,"n%07d.stt",od_control.od_node);
+	  ny_remove(numstr);
+	}
+      }
+
+      sprintf(numstr,"u%07d.inf",nCurrentUserNumber);
+      ny_remove(numstr);
+      if(p_before>cur_user.points) {
+	p_diff=p_before-cur_user.points;
+	cur_user.points=p_before;
+	points_loose(p_diff);
+      } else if (p_before<cur_user.points) {
+	p_diff=cur_user.points-p_before;
+	cur_user.points=p_before;
+	points_raise(p_diff);
+      }
+      wrt_sts();
+      if(cur_user.alive!=DEAD && cur_user.drug_addiction>=100) Die(1);
+      if(cur_user.alive!=DEAD && cur_user.hunger>=100) Die(2);
+      if(cur_user.alive!=DEAD && cur_user.std_percent>=100) Die(3);
+      ny_kernel();
+      //od_control.od_ker_exec=ny_kernel;
+      if (cur_user.alive!=ALIVE) od_exit(10,FALSE);
+}
diff --git a/src/doors/ny2008/src/interbbs.cpp b/src/doors/ny2008/src/interbbs.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..374f2bbbd33dcc71e6c3d72ee650de53333ce77c
--- /dev/null
+++ b/src/doors/ny2008/src/interbbs.cpp
@@ -0,0 +1,1752 @@
+#include <assert.h>
+#include <ctype.h>
+#include <string.h>
+#include <dir.h>
+#include <time.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <io.h>
+#include <dos.h>
+#include <fcntl.h>
+#include <sys\stat.h>
+
+#include "\tc\ny2008.h"
+//#include "\ibbs\interbbs.h"
+extern unsigned _stklen;
+
+
+char aszShortMonthName[12][4] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
+				 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
+
+tBool DirExists(const char *pszDirName)
+   {
+   char szDirFileName[PATH_CHARS + 1];
+   struct ffblk DirEntry;
+
+//   if(pszDirName==NULL) return(FALSE);
+//   if(strlen(pszDirName)>PATH_CHARS) return(FALSE);
+   assert(pszDirName != NULL);
+   assert(strlen(pszDirName) <= PATH_CHARS);
+
+   strcpy(szDirFileName, pszDirName);
+
+   /* Remove any trailing backslash from directory name */
+   if(szDirFileName[strlen(szDirFileName) - 1] == '\\')
+      {
+      szDirFileName[strlen(szDirFileName) - 1] = '\0';
+      }
+
+   /* Return true iff file exists and it is a directory */
+   return(findfirst(szDirFileName, &DirEntry, FA_ARCH|FA_DIREC) == 0 &&
+	     (DirEntry.ff_attrib & FA_DIREC));
+   }
+
+
+void MakeFilename(const char *pszPath, const char *pszFilename, char *pszOut)
+   {
+   /* Validate parameters in debug mode */
+   assert(pszPath != NULL);
+   assert(pszFilename != NULL);
+   assert(pszOut != NULL);
+   assert(pszPath != pszOut);
+   assert(pszFilename != pszOut);
+
+   /* Copy path to output filename */
+   strcpy(pszOut, pszPath);
+
+   /* Ensure there is a trailing backslash */
+   if(pszOut[strlen(pszOut) - 1] != '\\')
+      {
+      strcat(pszOut, "\\");
+      }
+
+   /* Append base filename */
+   strcat(pszOut, pszFilename);
+   }
+
+
+tIBResult IBSendAll(tIBInfo *pInfo, void *pBuffer, INT16 nBufferSize)
+   {
+   tIBResult ToReturn;
+   INT16 iCurrentSystem;
+
+   if(pBuffer == NULL) return(eBadParameter);
+
+   /* Validate information structure */
+   ToReturn = ValidateInfoStruct(pInfo);
+   if(ToReturn != eSuccess) return(ToReturn);
+
+   if(pInfo->paOtherSystem == NULL && pInfo->nTotalSystems != 0)
+      {
+      return(eBadParameter);
+      }
+
+   /* Loop for each system in other systems array */
+   for(iCurrentSystem = 0; iCurrentSystem < pInfo->nTotalSystems;
+    ++iCurrentSystem)
+      {
+      /* Send information to that system */
+      if(strcmp(pInfo->paOtherSystem[iCurrentSystem].szAddress,pInfo->szThisNodeAddress)!=0)
+	{
+	ToReturn = IBSend(pInfo, pInfo->paOtherSystem[iCurrentSystem].szAddress,
+			pBuffer, nBufferSize);
+	if(ToReturn != eSuccess) return(ToReturn);
+	}
+      }
+
+   return(eSuccess);
+   }
+
+
+tIBResult IBSend(tIBInfo *pInfo, char *pszDestNode, void *pBuffer,
+		 INT16 nBufferSize)
+   {
+   tIBResult ToReturn;
+   tMessageHeader MessageHeader;
+   time_t lnSecondsSince1970;
+   struct tm *pTimeInfo;
+   char szTOPT[13];
+   char szFMPT[13];
+   char szINTL[43];
+   char szMSGID[42];
+   INT16 nKludgeSize;
+   INT16 nTextSize;
+   char *pszMessageText;
+   tFidoNode DestNode;
+   tFidoNode OrigNode;
+
+   if(pszDestNode == NULL) return(eBadParameter);
+   if(pBuffer == NULL) return(eBadParameter);
+
+   /* Validate information structure */
+   ToReturn = ValidateInfoStruct(pInfo);
+   if(ToReturn != eSuccess) return(ToReturn);
+
+   /* Get destination node address from string */
+   ConvertStringToAddress(&DestNode, pszDestNode);
+
+   /* Get origin address from string */
+   ConvertStringToAddress(&OrigNode, pInfo->szThisNodeAddress);
+
+   /* Construct message header */
+   /* Construct to, from and subject information */
+   strcpy(MessageHeader.szFromUserName, pInfo->szProgName);
+   strcpy(MessageHeader.szToUserName, "@NY");
+   strcat(MessageHeader.szToUserName, pszDestNode);
+   strcpy(MessageHeader.szSubject, MESSAGE_SUBJECT);
+
+   /* Construct date and time information */
+   lnSecondsSince1970 = time(NULL);
+   pTimeInfo = localtime(&lnSecondsSince1970);
+   sprintf(MessageHeader.szDateTime, "%02.2d %s %02.2d  %02.2d:%02.2d:%02.2d",
+           pTimeInfo->tm_mday,
+	   aszShortMonthName[pTimeInfo->tm_mon],
+	   pTimeInfo->tm_year,
+           pTimeInfo->tm_hour,
+           pTimeInfo->tm_min,
+           pTimeInfo->tm_sec);
+
+   /* Construct misc. information */
+   MessageHeader.wTimesRead = 0;
+   MessageHeader.wCost = 0;
+   MessageHeader.wReplyTo = 0;
+   MessageHeader.wNextReply = 0;
+
+   /* Construct destination address */
+   MessageHeader.wDestZone = DestNode.wZone;
+   MessageHeader.wDestNet = DestNode.wNet;
+   MessageHeader.wDestNode = DestNode.wNode;
+   MessageHeader.wDestPoint = DestNode.wPoint;
+
+   /* Construct origin address */
+   MessageHeader.wOrigZone = OrigNode.wZone;
+   MessageHeader.wOrigNet = OrigNode.wNet;
+   MessageHeader.wOrigNode = OrigNode.wNode;
+   MessageHeader.wOrigPoint = OrigNode.wPoint;
+
+   /* Construct message attributes */
+   MessageHeader.wAttribute = ATTRIB_PRIVATE | ATTRIB_LOCAL;
+   if(pInfo->bCrash) MessageHeader.wAttribute |= ATTRIB_CRASH;
+   if(pInfo->bHold) MessageHeader.wAttribute |= ATTRIB_HOLD;
+   if(pInfo->bEraseOnSend) MessageHeader.wAttribute |= ATTRIB_KILL_SENT;
+
+   /* Create message control (kludge) lines */
+   /* Create TOPT kludge line if destination point is non-zero */
+   if(DestNode.wPoint != 0)
+      {
+     sprintf(szTOPT, "\1TOPT %u\r", DestNode.wPoint);
+      }
+   else
+      {
+      strcpy(szTOPT, "");
+      }
+
+   /* Create FMPT kludge line if origin point is non-zero */
+   if(OrigNode.wPoint != 0)
+      {
+      sprintf(szFMPT, "\1FMPT %u\r", OrigNode.wPoint);
+      }
+   else
+      {
+      strcpy(szFMPT, "");
+      }
+
+   /* Create INTL kludge line if origin and destination zone addresses differ */
+   if(DestNode.wZone != OrigNode.wZone)
+      {
+      sprintf(szINTL, "\1INTL %u:%u/%u %u:%u/%u\r",
+	      DestNode.wZone,
+	      DestNode.wNet,
+              DestNode.wNode,
+	      OrigNode.wZone,
+              OrigNode.wNet,
+	      OrigNode.wNode);
+      }
+   else
+      {
+      strcpy(szINTL, "");
+      }
+
+   /* Create MSGID kludge line, including point if non-zero */
+   if(OrigNode.wPoint != 0)
+      {
+      sprintf(szMSGID, "\1MSGID: %u:%u/%u.%u %lx\r",
+	      OrigNode.wZone,
+              OrigNode.wNet,
+	      OrigNode.wNode,
+              OrigNode.wPoint,
+              GetNextMSGID());
+      }
+   else
+      {
+      sprintf(szMSGID, "\1MSGID: %u:%u/%u %lx\r",
+	      OrigNode.wZone,
+              OrigNode.wNet,
+              OrigNode.wNode,
+              GetNextMSGID());
+      }
+
+   /* Determine total size of kludge lines */
+   nKludgeSize = strlen(szTOPT)
+                + strlen(szFMPT)
+                + strlen(szINTL)
+		+ strlen(szMSGID)
+                + strlen(MESSAGE_PID);
+
+   /* Determine total size of message text */
+   nTextSize = GetMaximumEncodedLength(nBufferSize)
+              + strlen(MESSAGE_HEADER)
+              + nKludgeSize
+	      + strlen(MESSAGE_FOOTER)
+              + 1;
+
+   /* Attempt to allocate space for message text */
+   if((pszMessageText = (char *)malloc(nTextSize)) == NULL)
+      {
+      return(eNoMemory);
+      }
+
+   /* Construct message text */
+   strcpy(pszMessageText, szTOPT);
+   strcat(pszMessageText, szFMPT);
+   strcat(pszMessageText, szINTL);
+   strcat(pszMessageText, szMSGID);
+   strcat(pszMessageText, MESSAGE_PID);
+   strcat(pszMessageText, MESSAGE_HEADER);
+   EncodeBuffer(pszMessageText + strlen(pszMessageText), pBuffer, nBufferSize);
+   strcat(pszMessageText, MESSAGE_FOOTER);
+
+   /* Attempt to send the message */
+   if(CreateMessage(pInfo->szNetmailDir, &MessageHeader, pszMessageText))
+      {
+      ToReturn = eSuccess;
+      }
+   else
+      {
+      ToReturn = eGeneralFailure;
+      }
+
+   /* Deallocate message text buffer */
+   free(pszMessageText);
+
+   /* Return appropriate value */
+   return(ToReturn);
+   }
+
+tIBResult IBSendMail(tIBInfo *pInfo, ibbs_mail_type *ibmail)
+   {
+   tIBResult ToReturn;
+   tMessageHeader MessageHeader;
+   time_t lnSecondsSince1970;
+   struct tm *pTimeInfo;
+   char szTOPT[13];
+   char szFMPT[13];
+   char szINTL[43];
+   char szMSGID[42];
+   INT16 nKludgeSize;
+   INT16 nTextSize;
+   char *pszMessageText;
+   tFidoNode DestNode;
+   tFidoNode OrigNode;
+
+   if(ibmail->node_r == NULL) return(eBadParameter);
+   if(ibmail == NULL) return(eBadParameter);
+
+   /* Validate information structure */
+   ToReturn = ValidateInfoStruct(pInfo);
+   if(ToReturn != eSuccess) return(ToReturn);
+
+   /* Get destination node address from string */
+   ConvertStringToAddress(&DestNode, ibmail->node_r);
+
+   /* Get origin address from string */
+   ConvertStringToAddress(&OrigNode, pInfo->szThisNodeAddress);
+
+
+   /* Construct message header */
+   /* Construct to, from and subject information */
+   strcpy(MessageHeader.szFromUserName, pInfo->szProgName);
+   strcpy(MessageHeader.szToUserName, "@NY");
+   strcat(MessageHeader.szToUserName, ibmail->node_r);
+   strcpy(MessageHeader.szSubject, MESSAGE_SUBJECT);
+
+
+   /* Construct date and time information */
+   lnSecondsSince1970 = time(NULL);
+   pTimeInfo = localtime(&lnSecondsSince1970);
+   sprintf(MessageHeader.szDateTime, "%02.2d %s %02.2d  %02.2d:%02.2d:%02.2d",
+	   pTimeInfo->tm_mday,
+	   aszShortMonthName[pTimeInfo->tm_mon],
+	   pTimeInfo->tm_year,
+	   pTimeInfo->tm_hour,
+	   pTimeInfo->tm_min,
+	   pTimeInfo->tm_sec);
+
+   /* Construct misc. information */
+   MessageHeader.wTimesRead = 0;
+   MessageHeader.wCost = 0;
+   MessageHeader.wReplyTo = 0;
+   MessageHeader.wNextReply = 0;
+
+   /* Construct destination address */
+   MessageHeader.wDestZone = DestNode.wZone;
+   MessageHeader.wDestNet = DestNode.wNet;
+   MessageHeader.wDestNode = DestNode.wNode;
+   MessageHeader.wDestPoint = DestNode.wPoint;
+
+   /* Construct origin address */
+   MessageHeader.wOrigZone = OrigNode.wZone;
+   MessageHeader.wOrigNet = OrigNode.wNet;
+   MessageHeader.wOrigNode = OrigNode.wNode;
+   MessageHeader.wOrigPoint = OrigNode.wPoint;
+
+   /* Construct message attributes */
+   MessageHeader.wAttribute = ATTRIB_PRIVATE | ATTRIB_LOCAL;
+   if(pInfo->bCrash) MessageHeader.wAttribute |= ATTRIB_CRASH;
+   if(pInfo->bHold) MessageHeader.wAttribute |= ATTRIB_HOLD;
+   if(pInfo->bEraseOnSend) MessageHeader.wAttribute |= ATTRIB_KILL_SENT;
+
+
+   /* Create message control (kludge) lines */
+   /* Create TOPT kludge line if destination point is non-zero */
+   if(DestNode.wPoint != 0)
+      {
+     sprintf(szTOPT, "\1TOPT %u\r", DestNode.wPoint);
+      }
+   else
+      {
+      strcpy(szTOPT, "");
+      }
+
+   /* Create FMPT kludge line if origin point is non-zero */
+   if(OrigNode.wPoint != 0)
+      {
+      sprintf(szFMPT, "\1FMPT %u\r", OrigNode.wPoint);
+      }
+   else
+      {
+      strcpy(szFMPT, "");
+      }
+
+   /* Create INTL kludge line if origin and destination zone addresses differ */
+   if(DestNode.wZone != OrigNode.wZone)
+      {
+      sprintf(szINTL, "\1INTL %u:%u/%u %u:%u/%u\r",
+	      DestNode.wZone,
+	      DestNode.wNet,
+	      DestNode.wNode,
+	      OrigNode.wZone,
+	      OrigNode.wNet,
+	      OrigNode.wNode);
+      }
+   else
+      {
+      strcpy(szINTL, "");
+      }
+
+   /* Create MSGID kludge line, including point if non-zero */
+   if(OrigNode.wPoint != 0)
+      {
+      sprintf(szMSGID, "\1MSGID: %u:%u/%u.%u %lx\r",
+	      OrigNode.wZone,
+	      OrigNode.wNet,
+	      OrigNode.wNode,
+	      OrigNode.wPoint,
+	      GetNextMSGID());
+      }
+   else
+      {
+      sprintf(szMSGID, "\1MSGID: %u:%u/%u %lx\r",
+	      OrigNode.wZone,
+	      OrigNode.wNet,
+	      OrigNode.wNode,
+	      GetNextMSGID());
+      }
+
+   /* Determine total size of kludge lines */
+   nKludgeSize = strlen(szTOPT)
+		+ strlen(szFMPT)
+		+ strlen(szINTL)
+		+ strlen(szMSGID)
+		+ strlen(MESSAGE_PID);
+
+
+   /* Determine total size of message text */
+   nTextSize = sizeof(ibbs_mail_type) * 2 + 4 * 20 + 1
+	      + strlen(MESSAGE_HEADER)
+	      + nKludgeSize
+	      + strlen(MESSAGE_FOOTER)
+	      + 1;
+
+
+   /* Attempt to allocate space for message text */
+   if((pszMessageText = (char *)malloc(nTextSize)) == NULL)
+      {
+      return(eNoMemory);
+      }
+
+   /* Construct message text */
+   strcpy(pszMessageText, szTOPT);
+   strcat(pszMessageText, szFMPT);
+   strcat(pszMessageText, szINTL);
+   strcat(pszMessageText, szMSGID);
+   strcat(pszMessageText, MESSAGE_PID);
+   strcat(pszMessageText, MESSAGE_HEADER);
+
+
+   EncodeMail(pszMessageText + strlen(pszMessageText),ibmail);
+//   EncodeBuffer(pszMessageText + strlen(pszMessageText), pBuffer, nBufferSize);
+   strcat(pszMessageText, MESSAGE_FOOTER);
+
+
+   /* Attempt to send the message */
+   if(CreateMessage(pInfo->szNetmailDir, &MessageHeader, pszMessageText))
+      {
+      ToReturn = eSuccess;
+      }
+   else
+      {
+      ToReturn = eGeneralFailure;
+      }
+
+
+   /* Deallocate message text buffer */
+   free(pszMessageText);
+
+
+   /* Return appropriate value */
+   return(ToReturn);
+   }
+
+
+
+INT16 GetMaximumEncodedLength(INT16 nUnEncodedLength)
+   {
+   INT16 nEncodedLength;
+
+   /* The current encoding algorithm uses two characters to represent   */
+   /* each byte of data, plus 1 byte per MAX_LINE_LENGTH characters for */
+   /* the carriage return character.                                    */
+
+   nEncodedLength = nUnEncodedLength * 2;
+
+   return(nEncodedLength + (nEncodedLength / MAX_LINE_LENGTH - 1) + 1);
+   }
+
+
+void EncodeBuffer(char *pszDest, const void *pBuffer, INT16 nBufferSize)
+   {
+   INT16 iSourceLocation;
+   INT16 nOutputChars = 0;
+   char *pcDest = pszDest;
+   const char *pcSource = (char *)pBuffer;
+
+   /* Loop for each byte of the source buffer */
+   for(iSourceLocation = 0; iSourceLocation < nBufferSize; ++iSourceLocation)
+      {
+      /* First character contains bits 0 - 5, with 01 in upper two bits */
+      *pcDest++ = (*pcSource & 0x3f) | 0x40;
+      /* Second character contains bits 6 & 7 in positions 4 & 5. Upper */
+      /* two bits are 01, and all remaining bits are 0. */
+      *pcDest++ = ((*pcSource & 0xc0) >> 2) | 0x40;
+
+      /* Output carriage return when needed */
+      if((nOutputChars += 2) >= MAX_LINE_LENGTH - 1)
+         {
+	 nOutputChars = 0;
+	 *pcDest++ = '\r';
+	 }
+
+      /* Increment source pointer */
+      ++pcSource;
+      }
+
+   /* Add one last carriage return, regardless of what has come before */
+   *pcDest++ = '\r';
+
+   /* Terminate output string */
+   *pcDest++ = '\0';
+   }
+
+void EncodeMail(char *pszDest,ibbs_mail_type *ibmail)
+{
+   char *pcDest = pszDest;
+   INT16 x,l,ln;
+
+   l=strlen(ibmail->sender);
+   for(x=0;x<l;x++) {
+     sprintf(pcDest,"%X",(INT16)ibmail->sender[x]);
+     pcDest+=2;
+   }
+   *pcDest='\n';
+   pcDest++;
+
+   l=strlen(ibmail->senderI);
+   for(x=0;x<l;x++) {
+     sprintf(pcDest,"%X",(INT16)ibmail->senderI[x]);
+     pcDest+=2;
+   }
+   *pcDest='\n';
+   pcDest++;
+
+   sprintf(pcDest,"%X",(INT16)ibmail->sender_sex);
+   pcDest++;
+
+   *pcDest='\n';
+   pcDest++;
+
+   l=strlen(ibmail->node_s);
+   for(x=0;x<l;x++) {
+     sprintf(pcDest,"%X",(INT16)ibmail->node_s[x]);
+     pcDest+=2;
+   }
+   *pcDest='\n';
+   pcDest++;
+
+   l=strlen(ibmail->node_r);
+   for(x=0;x<l;x++) {
+     sprintf(pcDest,"%X",(INT16)ibmail->node_r[x]);
+     pcDest+=2;
+   }
+   *pcDest='\n';
+   pcDest++;
+
+   l=strlen(ibmail->recver);
+   for(x=0;x<l;x++) {
+     sprintf(pcDest,"%X",(INT16)ibmail->recver[x]);
+     pcDest+=2;
+   }
+   *pcDest='\n';
+   pcDest++;
+
+   l=strlen(ibmail->recverI);
+   for(x=0;x<l;x++) {
+     sprintf(pcDest,"%X",(INT16)ibmail->recverI[x]);
+     pcDest+=2;
+   }
+   *pcDest='\n';
+   pcDest++;
+
+   sprintf(pcDest,"%X",(INT16)ibmail->quote_length);
+   pcDest++;
+
+   *pcDest='\n';
+   pcDest++;
+
+   sprintf(pcDest,"%X",(INT16)ibmail->length);
+   pcDest++;
+
+   *pcDest='\n';
+   pcDest++;
+
+   sprintf(pcDest,"%X",(INT16)ibmail->flirt);
+   pcDest++;
+
+   *pcDest='\n';
+   pcDest++;
+
+
+   sprintf(pcDest,"%X",(INT16)ibmail->ill);
+   pcDest++;
+
+   *pcDest='\n';
+   pcDest++;
+
+   sprintf(pcDest,"%X",(INT16)ibmail->inf);
+   pcDest++;
+
+   *pcDest='\n';
+   pcDest++;
+
+   for(ln=0;ln<(ibmail->length + ibmail->quote_length) && ln<20;ln++) {
+     l=strlen(ibmail->lines[ln]);
+     for(x=0;x<l && x<20 ;x++) {
+       sprintf(pcDest,"%X",(INT16)ibmail->lines[ln][x]);
+       pcDest+=2;
+     }
+
+     *pcDest='\n';
+     pcDest++;
+
+     if(l<=20) {
+       *pcDest='0';
+       pcDest++;
+       *pcDest='0';
+       pcDest++;
+     }
+
+     for(x=20;x<l && x<40;x++) {
+       sprintf(pcDest,"%X",(INT16)ibmail->lines[ln][x]);
+       pcDest+=2;
+     }
+     *pcDest='\n';
+     pcDest++;
+
+     if(l<=40) {
+       *pcDest='0';
+       pcDest++;
+       *pcDest='0';
+       pcDest++;
+     }
+
+     for(x=40;x<l && x<60;x++) {
+       sprintf(pcDest,"%X",(INT16)ibmail->lines[ln][x]);
+       pcDest+=2;
+     }
+
+     *pcDest='\n';
+     pcDest++;
+
+
+     if(l<=60) {
+       *pcDest='0';
+       pcDest++;
+       *pcDest='0';
+       pcDest++;
+     }
+     for(x=60;x<l;x++) {
+       sprintf(pcDest,"%X",(INT16)ibmail->lines[ln][x]);
+       pcDest+=2;
+     }
+     *pcDest='\n';
+     pcDest++;
+   }
+   *pcDest = '\0';
+}
+
+
+void DecodeBuffer(const char *pszSource, void *pDestBuffer, INT16 nBufferSize)
+   {
+   const char *pcSource = pszSource;
+   char *pcDest = (char *)pDestBuffer;
+   INT16 iDestLocation;
+   tBool bFirstOfByte = TRUE;
+
+   /* Search for beginning of buffer delimiter char, returning if not found */
+   while(*pcSource && *pcSource != DELIMITER_CHAR) ++pcSource;
+   if(!*pcSource) return;
+
+   /* Move pointer to first char after delimiter char */
+   ++pcSource;
+
+   /* Loop until destination buffer is full, delimiter char is encountered, */
+   /* or end of source buffer is encountered */
+   iDestLocation = 0;
+   while(iDestLocation < nBufferSize && *pcSource
+    && *pcSource != DELIMITER_CHAR)
+      {
+      /* If this is a valid data character */
+      if(*pcSource >= 0x40 && *pcSource <= 0x7e)
+	 {
+	 /* If this is first character of byte */
+	 if(bFirstOfByte)
+	    {
+            *pcDest = *pcSource & 0x3f;
+
+	    /* Toggle bFirstOfByte */
+            bFirstOfByte = FALSE;
+	    }
+         else /* if(!bFirstOfByte) */
+            {
+            *pcDest |= (*pcSource & 0x30) << 2;
+
+	    /* Increment destination */
+	    ++iDestLocation;
+	    ++pcDest;
+
+	    /* Toggle bFirstOfByte */
+	    bFirstOfByte = TRUE;
+	    }
+	 }
+
+      /* Increment source byte pointer */
+      ++pcSource;
+      }
+   }
+
+void DecodeMail(const char *pszSource, ibbs_mail_type *ibmail)
+{
+   const char *pcSource = pszSource;
+   INT16 x,ln,t;
+   char tmp[5];
+
+   tmp[2]=0;
+   x=0;
+
+   while(*pcSource && *pcSource != DELIMITER_CHAR) ++pcSource;
+   if(!*pcSource) return;
+
+   pcSource++;
+
+   while(*pcSource<=' ')
+     pcSource++;
+
+   while(*pcSource>' ') {
+     tmp[0]=*pcSource;
+     tmp[1]=*(pcSource+1);
+     sscanf(tmp,"%X",&t);
+     ibmail->sender[x]=t;
+     pcSource+=2;
+     x++;
+   }
+   ibmail->sender[x]=0;
+
+   while(*pcSource<=' ')
+     pcSource++;
+
+   tmp[2]=0;
+   x=0;
+   while(*pcSource>' ') {
+     tmp[0]=*pcSource;
+     tmp[1]=*(pcSource+1);
+     sscanf(tmp,"%X",&t);
+     ibmail->senderI[x]=t;
+     pcSource+=2;
+     x++;
+   }
+   ibmail->senderI[x]=0;
+
+   while(*pcSource<=' ')
+     pcSource++;
+
+   sscanf(pcSource,"%s",&tmp);
+   pcSource+=strlen(tmp);
+   sscanf(tmp,"%X",&t);
+   ibmail->sender_sex=(sex_type)t;
+
+   while(*pcSource<=' ')
+     pcSource++;
+
+   tmp[2]=0;
+   x=0;
+   while(*pcSource>' ') {
+     tmp[0]=*pcSource;
+     tmp[1]=*(pcSource+1);
+     sscanf(tmp,"%X",&t);
+     ibmail->node_s[x]=t;
+     pcSource+=2;
+     x++;
+   }
+   ibmail->node_s[x]=0;
+
+   while(*pcSource<=' ')
+     pcSource++;
+
+   tmp[2]=0;
+   x=0;
+   while(*pcSource>' ') {
+     tmp[0]=*pcSource;
+     tmp[1]=*(pcSource+1);
+     sscanf(tmp,"%X",&t);
+     ibmail->node_r[x]=t;
+     pcSource+=2;
+     x++;
+   }
+   ibmail->node_r[x]=0;
+
+   while(*pcSource<=' ')
+     pcSource++;
+
+   tmp[2]=0;
+   x=0;
+   while(*pcSource>' ') {
+     tmp[0]=*pcSource;
+     tmp[1]=*(pcSource+1);
+     sscanf(tmp,"%X",&t);
+     ibmail->recver[x]=t;
+     pcSource+=2;
+     x++;
+   }
+   ibmail->recver[x]=0;
+   while(*pcSource<=' ')
+     pcSource++;
+
+   tmp[2]=0;
+   x=0;
+   while(*pcSource>' ') {
+     tmp[0]=*pcSource;
+     tmp[1]=*(pcSource+1);
+     sscanf(tmp,"%X",&t);
+     ibmail->recverI[x]=t;
+     pcSource+=2;
+     x++;
+   }
+   ibmail->recverI[x]=0;
+   while(*pcSource<=' ')
+     pcSource++;
+
+   sscanf(pcSource,"%s",&tmp);
+   pcSource+=strlen(tmp);
+   sscanf(tmp,"%X",&t);
+   ibmail->quote_length=t;
+
+   while(*pcSource<=' ')
+     pcSource++;
+
+   sscanf(pcSource,"%s",&tmp);
+   pcSource+=strlen(tmp);
+   sscanf(tmp,"%X",&t);
+   ibmail->length=t;
+
+   while(*pcSource<=' ')
+     pcSource++;
+
+   sscanf(pcSource,"%s",&tmp);
+   pcSource+=strlen(tmp);
+   sscanf(tmp,"%X",&t);
+   ibmail->flirt=t;
+
+   while(*pcSource<=' ')
+     pcSource++;
+
+
+   sscanf(pcSource,"%s",&tmp);
+   pcSource+=strlen(tmp);
+   sscanf(tmp,"%X",&t);
+   ibmail->ill=(desease)t;
+
+   while(*pcSource<=' ')
+     pcSource++;
+
+   sscanf(pcSource,"%s",&tmp);
+   pcSource+=strlen(tmp);
+   sscanf(tmp,"%X",&t);
+   ibmail->inf=t;
+
+   while(*pcSource<=' ')
+     pcSource++;
+
+   for(ln=0;ln<(ibmail->length + ibmail->quote_length) && ln<20;ln++) {
+     tmp[2]=0;
+     x=0;
+     while(*pcSource>' ') {
+       tmp[0]=*pcSource;
+       tmp[1]=*(pcSource+1);
+       sscanf(tmp,"%X",&t);
+       (ibmail->lines)[ln][x]=t;
+       pcSource+=2;
+       x++;
+       if(x>80) break;
+     }
+     while(*pcSource<=' ')
+       pcSource++;
+
+     while(*pcSource>' ') {
+       tmp[0]=*pcSource;
+       tmp[1]=*(pcSource+1);
+       sscanf(tmp,"%X",&t);
+       (ibmail->lines)[ln][x]=t;
+       pcSource+=2;
+       x++;
+       if(x>80) break;
+     }
+
+     while(*pcSource<=' ')
+       pcSource++;
+
+     while(*pcSource>' ') {
+       tmp[0]=*pcSource;
+       tmp[1]=*(pcSource+1);
+       sscanf(tmp,"%X",&t);
+       (ibmail->lines)[ln][x]=t;
+       pcSource+=2;
+       x++;
+       if(x>80) break;
+     }
+     while(*pcSource<=' ')
+       pcSource++;
+
+     while(*pcSource>' ') {
+       tmp[0]=*pcSource;
+       tmp[1]=*(pcSource+1);
+       sscanf(tmp,"%X",&t);
+       (ibmail->lines)[ln][x]=t;
+       pcSource+=2;
+       x++;
+       if(x>80) break;
+     }
+     (ibmail->lines)[ln][x]=0;
+     while(*pcSource<=' ')
+       pcSource++;
+   }
+}
+
+
+INT16 DecodeBufferR(const char *pszSource, void *pDestBuffer)
+   {
+   const char *pcSource = pszSource;
+   char *pcDest = (char *)pDestBuffer;
+   char *size[2];
+   INT16 iDestLocation;
+   INT16 nBufferSize=0;
+   tBool bFirstOfByte = TRUE;
+
+   /* Search for beginning of buffer delimiter char, returning if not found */
+   while(*pcSource && *pcSource != DELIMITER_CHAR) ++pcSource;
+   if(!*pcSource) return(0);
+
+   /* Move pointer to first char after delimiter char */
+   ++pcSource;
+
+   /* Loop until destination buffer is full, delimiter char is encountered, */
+   /* or end of source buffer is encountered */
+   iDestLocation = 0;
+   while(iDestLocation < (nBufferSize+2) && *pcSource
+    && *pcSource != DELIMITER_CHAR)
+      {
+      /* If this is a valid data character */
+      if(*pcSource >= 0x40 && *pcSource <= 0x7e)
+	 {
+	 /* If this is first character of byte */
+	 if(bFirstOfByte)
+	    {
+	    if(iDestLocation<2)
+	      *size[iDestLocation] = *pcSource & 0x3f;
+	    else
+	      *pcDest = *pcSource & 0x3f;
+
+	    /* Toggle bFirstOfByte */
+	    bFirstOfByte = FALSE;
+	    }
+	 else /* if(!bFirstOfByte) */
+	    {
+	    if(iDestLocation<2)
+	      *size[iDestLocation] |= (*pcSource & 0x30) << 2;
+	    else
+	      {
+	      *pcDest |= (*pcSource & 0x30) << 2;
+	      ++pcDest;
+	      }
+
+	    /* Increment destination */
+	    ++iDestLocation;
+
+	    /* Toggle bFirstOfByte */
+	    bFirstOfByte = TRUE;
+	    }
+	 if(iDestLocation==2)
+	   {
+	   nBufferSize=*(INT16 *)size;
+	   pDestBuffer=malloc(nBufferSize);
+	   }
+	 }
+      /* Increment source byte pointer */
+      ++pcSource;
+      }
+   return(nBufferSize);
+   }
+
+
+
+DWORD GetNextMSGID(void)
+   {
+   /* MSGID should be unique for every message, for as long as possible.   */
+   /* This technique adds the current time, in seconds since midnight on   */
+   /* January 1st, 1970 to a psuedo-random number. The random generator    */
+   /* is not seeded, as the application may have already seeded it for its */
+   /* own purposes. Even if not seeded, the inclusion of the current time  */
+   /* will cause the MSGID to almost always be different.                  */
+   return((DWORD)time(NULL) + (DWORD)rand());
+   }
+
+
+tBool CreateMessage(char *pszMessageDir, tMessageHeader *pHeader,
+		    char *pszText)
+   {
+   DWORD lwNewMsgNum;
+
+   /* Get new message number */
+   lwNewMsgNum = GetFirstUnusedMsgNum(pszMessageDir);
+
+   /* Use WriteMessage() to create new message */
+   return(WriteMessage(pszMessageDir, lwNewMsgNum, pHeader, pszText));
+   }
+
+
+void GetMessageFilename(char *pszMessageDir, DWORD lwMessageNum,
+			char *pszOut)
+   {
+   char szFileName[FILENAME_CHARS + 1];
+
+   sprintf(szFileName, "%ld.msg", lwMessageNum);
+   MakeFilename(pszMessageDir, szFileName, pszOut);
+   }
+
+
+tBool WriteMessage(char *pszMessageDir, DWORD lwMessageNum,
+		   tMessageHeader *pHeader, char *pszText)
+   {
+   char szFileName[PATH_CHARS + FILENAME_CHARS + 2];
+   INT16 hFile;
+   size_t nTextSize;
+
+   /* Get fully qualified filename of message to write */
+   GetMessageFilename(pszMessageDir, lwMessageNum, szFileName);
+
+   /* Open message file */
+   hFile = open(szFileName, O_WRONLY|O_BINARY|O_CREAT|O_DENYALL,
+                S_IREAD|S_IWRITE);
+
+   /* If open failed, return FALSE */
+   if(hFile == -1) return(FALSE);
+
+   /* Attempt to write header */
+   if(write(hFile, pHeader, sizeof(tMessageHeader)) != sizeof(tMessageHeader))
+      {
+      /* On failure, close file, erase file, and return FALSE */
+      close(hFile);
+      unlink(szFileName);
+      return(FALSE);
+      }
+
+   /* Determine size of message text, including string terminator */
+   nTextSize = strlen(pszText) + 1;
+
+   /* Attempt to write message text */
+   if(write(hFile, pszText, nTextSize) != nTextSize)
+      {
+      /* On failure, close file, erase file, and return FALSE */
+      close(hFile);
+      unlink(szFileName);
+      return(FALSE);
+      }
+
+   /* Close message file */
+   close(hFile);
+
+   /* Return with success */
+   return(TRUE);
+   }
+
+
+tBool ReadMessage(char *pszMessageDir, DWORD lwMessageNum,
+                  tMessageHeader *pHeader, char **ppszText)
+   {
+   char szFileName[PATH_CHARS + FILENAME_CHARS + 2];
+   INT16 hFile;
+   size_t nTextSize;
+
+   /* Get fully qualified filename of message to read */
+   GetMessageFilename(pszMessageDir, lwMessageNum, szFileName);
+
+   /* Open message file */
+   hFile = open(szFileName, O_RDONLY|O_BINARY|O_DENYWRITE);
+
+   /* If open failed, return FALSE */
+   if(hFile == -1) return(FALSE);
+
+   /* Determine size of message body */
+   nTextSize = (size_t)filelength(hFile) - sizeof(tMessageHeader);
+
+   /* Attempt to allocate space for message body, plus character for added */
+   /* string terminator.                                                   */
+   if((*ppszText = (char *)malloc(nTextSize + 1)) == NULL)
+      {
+      /* On failure, close file and return FALSE */
+      close(hFile);
+      return(FALSE);
+      }
+
+   /* Attempt to read header */
+   if(read(hFile, pHeader, sizeof(tMessageHeader)) != sizeof(tMessageHeader))
+      {
+      /* On failure, close file, deallocate message buffer and return FALSE */
+      close(hFile);
+      free(*ppszText);
+      return(FALSE);
+      }
+
+   /* Attempt to read message text */
+   if(read(hFile, *ppszText, nTextSize) != nTextSize)
+      {
+      /* On failure, close file, deallocate message buffer and return FALSE */
+      close(hFile);
+      free(*ppszText);
+      return(FALSE);
+      }
+
+   /* Ensure that message buffer is NULL-terminated */
+   (*ppszText)[nTextSize + 1] = '\0';
+
+   /* Close message file */
+   close(hFile);
+
+   /* Return with success */
+   return(TRUE);
+   }
+
+
+DWORD GetFirstUnusedMsgNum(char *pszMessageDir)
+   {
+   DWORD lwHighestMsgNum = 0;
+   DWORD lwCurrentMsgNum;
+   struct ffblk DirEntry;
+   char szFileName[PATH_CHARS + FILENAME_CHARS + 2];
+
+   MakeFilename(pszMessageDir, "*.msg", szFileName);
+
+   if(findfirst(szFileName, &DirEntry, FA_ARCH) == 0)
+      {
+      do
+	 {
+	 lwCurrentMsgNum = atol(DirEntry.ff_name);
+	 if(lwCurrentMsgNum > lwHighestMsgNum)
+	    {
+	    lwHighestMsgNum = lwCurrentMsgNum;
+	    }
+	 } while(findnext(&DirEntry) == 0);
+      }
+
+   return(lwHighestMsgNum + 1);
+   }
+
+
+tIBResult ValidateInfoStruct(tIBInfo *pInfo)
+   {
+   if(pInfo == NULL) return(eBadParameter);
+
+   if(!DirExists(pInfo->szNetmailDir)) return(eMissingDir);
+
+   od_printf("E");
+   od_get_answer("1");
+
+   if(strlen(pInfo->szProgName) == 0) return(eBadParameter);
+
+   od_printf("F");
+   od_get_answer("1");
+
+
+   return(eSuccess);
+   }
+
+
+tIBResult IBGet(tIBInfo *pInfo, void *pBuffer, INT16 nMaxBufferSize)
+   {
+   tIBResult ToReturn;
+   struct ffblk DirEntry;
+   DWORD lwCurrentMsgNum;
+   tMessageHeader MessageHeader;
+   char szFileName[PATH_CHARS + FILENAME_CHARS + 2];
+   char *pszText;
+   tFidoNode ThisNode,OtherNode;
+
+   /* Validate information structure */
+   ToReturn = ValidateInfoStruct(pInfo);
+   if(ToReturn != eSuccess) return(ToReturn);
+
+   /* Get this node's address from string */
+   ConvertStringToAddress(&ThisNode, pInfo->szThisNodeAddress);
+
+   MakeFilename(pInfo->szNetmailDir, "*.msg", szFileName);
+
+   /* Seach through each message file in the netmail directory, in no */
+   /* particular order.                                               */
+   if(findfirst(szFileName, &DirEntry, FA_ARCH) == 0)
+      {
+      do
+	 {
+	 lwCurrentMsgNum = atol(DirEntry.ff_name);
+
+	 /* If able to read message */
+	 if(ReadMessage(pInfo->szNetmailDir, lwCurrentMsgNum, &MessageHeader,
+	    &pszText))
+	    {
+/*	    od_printf("\n\rREAD THROUGH MESSAGE\n\r");
+	    od_printf("|%s|\n\r",MessageHeader.szToUserName);
+	    od_printf("|%s|\n\r",pInfo->szProgName);
+	    od_printf("%d:",MessageHeader.wDestZone);
+	    od_printf("%d/",MessageHeader.wDestNet);
+	    od_printf("%d.",MessageHeader.wDestNode);
+	    od_printf("%d\n\r",MessageHeader.wDestPoint);
+
+	    od_get_answer("1");*/
+	    /* If message is for us, and hasn't be read yet */
+	    ConvertStringToAddress(&OtherNode,&MessageHeader.szToUserName[3]);
+
+	    if(strcmp(MessageHeader.szFromUserName, pInfo->szProgName) == 0
+	       && (ThisNode.wZone == OtherNode.wZone || OtherNode.wZone==0 || ThisNode.wZone==0)
+	       && ThisNode.wNet == OtherNode.wNet
+	       && ThisNode.wNode == OtherNode.wNode
+	       && ThisNode.wPoint == OtherNode.wPoint
+	       && !(MessageHeader.wAttribute & ATTRIB_RECEIVED))
+	       {
+
+/*	       od_printf("\n\rUNREAD AND FOR US\n\r");
+	       od_get_answer("1");*/
+
+	       /* Decode message text, placing information in buffer */
+	       DecodeBuffer(pszText, pBuffer, nMaxBufferSize);
+
+	       /* If received messages should be deleted */
+	       if(pInfo->bEraseOnReceive)
+		  {
+		  /* Determine filename of message to erase */
+		  GetMessageFilename(pInfo->szNetmailDir, lwCurrentMsgNum,
+				     szFileName);
+
+		  /* Attempt to erase file */
+		  if(unlink(szFileName) == -1)
+		     {
+		     ToReturn = eGeneralFailure;
+		     }
+		  else
+		     {
+		     ToReturn = eSuccess;
+		     }
+		  }
+
+	       /* If received messages should not be deleted */
+	       else /* if(!pInfo->bEraseOnReceive) */
+		  {
+		  /* Mark message as read */
+		  MessageHeader.wAttribute |= ATTRIB_RECEIVED;
+		  ++MessageHeader.wTimesRead;
+
+		  /* Attempt to rewrite message */
+		  if(!WriteMessage(pInfo->szNetmailDir, lwCurrentMsgNum,
+		   &MessageHeader, pszText))
+		     {
+		     ToReturn = eGeneralFailure;
+		     }
+		  else
+		     {
+		     ToReturn = eSuccess;
+		     }
+		  }
+
+	       /* Deallocate message text buffer */
+	       free(pszText);
+
+	       /* Return appropriate value */
+	       return(ToReturn);
+	       }
+	    free(pszText);
+	    }
+	 } while(findnext(&DirEntry) == 0);
+      }
+
+   /* If no new messages were found */
+   return(eNoMoreMessages);
+   }
+
+tIBResult IBGetMail(tIBInfo *pInfo, ibbs_mail_type *ibmail)
+   {
+   tIBResult ToReturn;
+   struct ffblk DirEntry;
+   DWORD lwCurrentMsgNum;
+   tMessageHeader MessageHeader;
+   char szFileName[PATH_CHARS + FILENAME_CHARS + 2];
+   char *pszText;
+   tFidoNode ThisNode,OtherNode;
+
+   /* Validate information structure */
+   ToReturn = ValidateInfoStruct(pInfo);
+   if(ToReturn != eSuccess) return(ToReturn);
+
+   /* Get this node's address from string */
+   ConvertStringToAddress(&ThisNode, pInfo->szThisNodeAddress);
+
+   MakeFilename(pInfo->szNetmailDir, "*.msg", szFileName);
+
+   /* Seach through each message file in the netmail directory, in no */
+   /* particular order.                                               */
+   if(findfirst(szFileName, &DirEntry, FA_ARCH) == 0)
+      {
+      do
+	 {
+	 lwCurrentMsgNum = atol(DirEntry.ff_name);
+
+	 /* If able to read message */
+	 if(ReadMessage(pInfo->szNetmailDir, lwCurrentMsgNum, &MessageHeader,
+	    &pszText))
+	    {
+	    /* If message is for us, and hasn't be read yet */
+	    ConvertStringToAddress(&OtherNode,&MessageHeader.szToUserName[3]);
+
+	    if(strcmp(MessageHeader.szFromUserName, pInfo->szProgName) == 0
+	       && (ThisNode.wZone == OtherNode.wZone || OtherNode.wZone==0 || ThisNode.wZone==0)
+	       && ThisNode.wNet == OtherNode.wNet
+	       && ThisNode.wNode == OtherNode.wNode
+	       && ThisNode.wPoint == OtherNode.wPoint
+	       && !(MessageHeader.wAttribute & ATTRIB_RECEIVED))
+	       {
+	       /* Decode message text, placing information in buffer */
+	       DecodeMail(pszText, ibmail);
+
+	       /* If received messages should be deleted */
+	       if(pInfo->bEraseOnReceive)
+		  {
+		  /* Determine filename of message to erase */
+		  GetMessageFilename(pInfo->szNetmailDir, lwCurrentMsgNum,
+				     szFileName);
+
+		  /* Attempt to erase file */
+		  if(unlink(szFileName) == -1)
+		     {
+		     ToReturn = eGeneralFailure;
+		     }
+		  else
+		     {
+		     ToReturn = eSuccess;
+		     }
+		  }
+
+	       /* If received messages should not be deleted */
+	       else /* if(!pInfo->bEraseOnReceive) */
+		  {
+		  /* Mark message as read */
+		  MessageHeader.wAttribute |= ATTRIB_RECEIVED;
+		  ++MessageHeader.wTimesRead;
+
+		  /* Attempt to rewrite message */
+		  if(!WriteMessage(pInfo->szNetmailDir, lwCurrentMsgNum,
+		   &MessageHeader, pszText))
+		     {
+		     ToReturn = eGeneralFailure;
+		     }
+		  else
+		     {
+		     ToReturn = eSuccess;
+		     }
+		  }
+
+	       /* Deallocate message text buffer */
+	       free(pszText);
+
+	       /* Return appropriate value */
+	       return(ToReturn);
+	       }
+	    free(pszText);
+	    }
+	 } while(findnext(&DirEntry) == 0);
+      }
+
+   /* If no new messages were found */
+   return(eNoMoreMessages);
+   }
+
+
+tIBResult IBGetR(tIBInfo *pInfo, void *pBuffer, INT16 *nBufferLen)
+   {
+   tIBResult ToReturn;
+   struct ffblk DirEntry;
+   DWORD lwCurrentMsgNum;
+   tMessageHeader MessageHeader;
+   char szFileName[PATH_CHARS + FILENAME_CHARS + 2];
+   char *pszText;
+   tFidoNode ThisNode,OtherNode;
+
+   /* Validate information structure */
+   ToReturn = ValidateInfoStruct(pInfo);
+   if(ToReturn != eSuccess) return(ToReturn);
+
+   /* Get this node's address from string */
+   ConvertStringToAddress(&ThisNode, pInfo->szThisNodeAddress);
+
+   MakeFilename(pInfo->szNetmailDir, "*.msg", szFileName);
+
+   /* Seach through each message file in the netmail directory, in no */
+   /* particular order.                                               */
+   if(findfirst(szFileName, &DirEntry, FA_ARCH) == 0)
+      {
+      do
+         {
+	 lwCurrentMsgNum = atol(DirEntry.ff_name);
+
+         /* If able to read message */
+         if(ReadMessage(pInfo->szNetmailDir, lwCurrentMsgNum, &MessageHeader,
+            &pszText))
+	    {
+	    ConvertStringToAddress(&OtherNode,&MessageHeader.szToUserName[3]);
+
+	    if(strcmp(MessageHeader.szFromUserName, pInfo->szProgName) == 0
+	       && (ThisNode.wZone == OtherNode.wZone || OtherNode.wZone==0 || ThisNode.wZone==0)
+	       && ThisNode.wNet == OtherNode.wNet
+	       && ThisNode.wNode == OtherNode.wNode
+	       && ThisNode.wPoint == OtherNode.wPoint
+	       && !(MessageHeader.wAttribute & ATTRIB_RECEIVED))
+	       {
+	       /* Decode message text, placing information in buffer */
+	       *nBufferLen=DecodeBufferR(pszText, pBuffer);
+
+               /* If received messages should be deleted */
+	       if(pInfo->bEraseOnReceive)
+                  {
+                  /* Determine filename of message to erase */
+                  GetMessageFilename(pInfo->szNetmailDir, lwCurrentMsgNum,
+                                     szFileName);
+
+                  /* Attempt to erase file */
+		  if(unlink(szFileName) == -1)
+                     {
+                     ToReturn = eGeneralFailure;
+                     }
+                  else
+                     {
+                     ToReturn = eSuccess;
+                     }
+                  }
+
+	       /* If received messages should not be deleted */
+               else /* if(!pInfo->bEraseOnReceive) */
+                  {
+                  /* Mark message as read */
+                  MessageHeader.wAttribute |= ATTRIB_RECEIVED;
+                  ++MessageHeader.wTimesRead;
+
+                  /* Attempt to rewrite message */
+                  if(!WriteMessage(pInfo->szNetmailDir, lwCurrentMsgNum,
+                   &MessageHeader, pszText))
+		     {
+                     ToReturn = eGeneralFailure;
+                     }
+                  else
+                     {
+                     ToReturn = eSuccess;
+                     }
+                  }
+
+               /* Deallocate message text buffer */
+	       free(pszText);
+
+               /* Return appropriate value */
+               return(ToReturn);
+               }
+            free(pszText);
+            }
+         } while(findnext(&DirEntry) == 0);
+      }
+
+   /* If no new messages were found */
+   return(eNoMoreMessages);
+   }
+
+
+void
+ConvertAddressToString(char *pszDest, const tFidoNode *pNode)
+{
+  if(pNode->wZone == 0) {
+    if(pNode->wPoint == 0) {
+      sprintf(pszDest, "%u/%u", pNode->wNet, pNode->wNode);
+    } else {
+      sprintf(pszDest, "%u/%u.%u", pNode->wNet, pNode->wNode,pNode->wPoint);
+    }
+  } else {
+    if(pNode->wPoint == 0) {
+      sprintf(pszDest, "%u:%u/%u", pNode->wZone, pNode->wNet, pNode->wNode);
+    } else {
+      sprintf(pszDest, "%u:%u/%u.%u", pNode->wZone, pNode->wNet, pNode->wNode,pNode->wPoint);
+    }
+  }
+}
+
+
+void
+ConvertStringToAddress(tFidoNode *pNode, const char *pszSource)
+{
+  pNode->wZone = 0;
+  pNode->wNet = 0;
+  pNode->wNode = 0;
+  pNode->wPoint = 0;
+  if(strchr(pszSource,':')==NULL) {
+    sscanf(pszSource, "%u/%u.%u", &(pNode->wNet),&(pNode->wNode), &(pNode->wPoint));
+  } else {
+    sscanf(pszSource, "%u:%u/%u.%u", &(pNode->wZone), &(pNode->wNet),&(pNode->wNode), &(pNode->wPoint));
+  }
+}
+
+
+#define NUM_KEYWORDS       10
+
+#define KEYWORD_ADDRESS    0
+#define KEYWORD_USER_NAME  1
+#define KEYWORD_MAIL_DIR   2
+#define KEYWORD_CRASH      3
+#define KEYWORD_HOLD       4
+#define KEYWORD_KILL_SENT  5
+#define KEYWORD_KILL_RCVD  6
+#define KEYWORD_LINK_WITH  7
+#define KEYWORD_LINK_NAME  8
+#define KEYWORD_LINK_LOC   9
+
+char *apszKeyWord[NUM_KEYWORDS] = {"SystemAddress",
+                                   "UserName",
+                                   "NetmailDir",
+                                   "Crash",
+				   "Hold",
+				   "EraseOnSend",
+				   "EraseOnReceive",
+				   "LinkWith",
+				   "LinkName",
+				   "LinkLocation"};
+
+tIBResult IBReadConfig(tIBInfo *pInfo, char *pszConfigFile)
+   {
+   /* Set default values for pInfo settings */
+/*   pInfo->nTotalSystems = 0;
+   pInfo->paOtherSystem = NULL;*/
+
+   /* Process configuration file */
+   if(!ProcessConfigFile(pszConfigFile, NUM_KEYWORDS, apszKeyWord,
+			 ProcessConfigLine, (void *)pInfo))
+      {
+      return(eFileOpenError);
+      }
+
+   /* else */
+   return(eSuccess);
+   }
+
+
+void ProcessConfigLine(INT16 nKeyword, char *pszParameter, void *pCallbackData)
+   {
+   tIBInfo *pInfo = (tIBInfo *)pCallbackData;
+   tOtherNode *paNewNodeArray;
+
+   switch(nKeyword)
+      {
+      case KEYWORD_ADDRESS:
+         strncpy(pInfo->szThisNodeAddress, pszParameter, NODE_ADDRESS_CHARS);
+         pInfo->szThisNodeAddress[NODE_ADDRESS_CHARS] = '\0';
+	 break;
+
+      case KEYWORD_USER_NAME:
+         strncpy(pInfo->szProgName, pszParameter, PROG_NAME_CHARS);
+         pInfo->szProgName[PROG_NAME_CHARS] = '\0';
+         break;
+
+      case KEYWORD_MAIL_DIR:
+         strncpy(pInfo->szNetmailDir, pszParameter, PATH_CHARS);
+         pInfo->szNetmailDir[PATH_CHARS] = '\0';
+	 break;
+
+      case KEYWORD_CRASH:
+         if(stricmp(pszParameter, "Yes") == 0)
+            {
+            pInfo->bCrash = TRUE;
+            }
+         else if(stricmp(pszParameter, "No") == 0)
+            {
+            pInfo->bCrash = FALSE;
+	    }
+         break;
+
+      case KEYWORD_HOLD:
+         if(stricmp(pszParameter, "Yes") == 0)
+            {
+            pInfo->bHold = TRUE;
+            }
+         else if(stricmp(pszParameter, "No") == 0)
+            {
+	    pInfo->bHold = FALSE;
+            }
+	 break;
+
+      case KEYWORD_KILL_SENT:
+         if(stricmp(pszParameter, "Yes") == 0)
+            {
+            pInfo->bEraseOnSend = TRUE;
+            }
+         else if(stricmp(pszParameter, "No") == 0)
+	    {
+            pInfo->bEraseOnSend = FALSE;
+	    }
+         break;
+
+      case KEYWORD_KILL_RCVD:
+         if(stricmp(pszParameter, "Yes") == 0)
+            {
+            pInfo->bEraseOnReceive = TRUE;
+            }
+	 else if(stricmp(pszParameter, "No") == 0)
+            {
+	    pInfo->bEraseOnReceive = FALSE;
+            }
+         break;
+
+      case KEYWORD_LINK_WITH:
+         if(pInfo->nTotalSystems == 0)
+            {
+	    pInfo->paOtherSystem = (tOtherNode *)malloc(sizeof(tOtherNode));
+	    if(pInfo->paOtherSystem == NULL)
+               {
+	       break;
+               }
+            }
+         else
+            {
+	    if((paNewNodeArray = (tOtherNode *)malloc(sizeof(tOtherNode) *
+             (pInfo->nTotalSystems + 1))) == NULL)
+               {
+	       break;
+               }
+
+            memcpy(paNewNodeArray, pInfo->paOtherSystem, sizeof(tOtherNode) *
+               pInfo->nTotalSystems);
+
+            free(pInfo->paOtherSystem);
+
+            pInfo->paOtherSystem = paNewNodeArray;
+            }
+
+         strncpy(pInfo->paOtherSystem[pInfo->nTotalSystems].szAddress,
+		 pszParameter, NODE_ADDRESS_CHARS);
+         pInfo->paOtherSystem[pInfo->nTotalSystems].
+            szAddress[NODE_ADDRESS_CHARS] = '\0';
+         ++pInfo->nTotalSystems;
+         break;
+
+      case KEYWORD_LINK_NAME:
+         if(pInfo->nTotalSystems != 0)
+	    {
+            strncpy(pInfo->paOtherSystem[pInfo->nTotalSystems - 1].szSystemName,
+		    pszParameter, SYSTEM_NAME_CHARS);
+            pInfo->paOtherSystem[pInfo->nTotalSystems - 1].
+               szSystemName[SYSTEM_NAME_CHARS] = '\0';
+            }
+         break;
+
+      case KEYWORD_LINK_LOC:
+         if(pInfo->nTotalSystems != 0)
+	    {
+            strncpy(pInfo->paOtherSystem[pInfo->nTotalSystems - 1].szLocation,
+		    pszParameter, LOCATION_CHARS);
+            pInfo->paOtherSystem[pInfo->nTotalSystems - 1].
+               szLocation[LOCATION_CHARS] = '\0';
+            }
+         break;
+      }
+   }
+
+
+/* Configuration file reader settings */
+#define CONFIG_LINE_SIZE 128
+#define MAX_TOKEN_CHARS 32
+
+tBool ProcessConfigFile(char *pszFileName, INT16 nKeyWords, char **papszKeyWord,
+                  void (*pfCallBack)(INT16, char *, void *), void *pCallBackData)
+   {
+   FILE *pfConfigFile;
+   char szConfigLine[CONFIG_LINE_SIZE + 1];
+   char *pcCurrentPos;
+   WORD uCount;
+   char szToken[MAX_TOKEN_CHARS + 1];
+   INT16 iKeyWord;
+
+   /* Attempt to open configuration file */
+   if((pfConfigFile = fopen(pszFileName, "rt")) == NULL)
+      {
+      return(FALSE);
+      }
+
+   /* While not at end of file */
+   while(!feof(pfConfigFile))
+      {
+      /* Get the next line */
+      if(fgets(szConfigLine, CONFIG_LINE_SIZE + 1 ,pfConfigFile) == NULL) break;
+
+      /* Ignore all of line after comments or CR/LF char */
+      pcCurrentPos=(char *)szConfigLine;
+      while(*pcCurrentPos)
+	 {
+         if(*pcCurrentPos=='\n' || *pcCurrentPos=='\r' || *pcCurrentPos==';')
+	    {
+            *pcCurrentPos='\0';
+            break;
+            }
+         ++pcCurrentPos;
+         }
+
+      /* Search for beginning of first token on line */
+      pcCurrentPos=(char *)szConfigLine;
+      while(*pcCurrentPos && isspace(*pcCurrentPos)) ++pcCurrentPos;
+
+      /* If no token was found, proceed to process the next line */
+      if(!*pcCurrentPos) continue;
+
+      /* Get first token from line */
+      uCount=0;
+      while(*pcCurrentPos && !isspace(*pcCurrentPos))
+         {
+	 if(uCount<MAX_TOKEN_CHARS) szToken[uCount++]=*pcCurrentPos;
+         ++pcCurrentPos;
+	 }
+      if(uCount<=MAX_TOKEN_CHARS)
+         szToken[uCount]='\0';
+      else
+         szToken[MAX_TOKEN_CHARS]='\0';
+
+      /* Find beginning of configuration option parameters */
+      while(*pcCurrentPos && isspace(*pcCurrentPos)) ++pcCurrentPos;
+
+       /* Trim trailing spaces from setting string */
+      for(uCount=strlen(pcCurrentPos)-1;uCount>0;--uCount)
+         {
+         if(isspace(pcCurrentPos[uCount]))
+            {
+            pcCurrentPos[uCount]='\0';
+            }
+         else
+            {
+	    break;
+            }
+	 }
+
+      /* Loop through list of keywords */
+      for(iKeyWord = 0; iKeyWord < nKeyWords; ++iKeyWord)
+         {
+         /* If keyword matches */
+         if(stricmp(szToken, papszKeyWord[iKeyWord]) == 0)
+            {
+	    /* Call keyword processing callback function */
+            (*pfCallBack)(iKeyWord, pcCurrentPos, pCallBackData);
+	    }
+         }
+      }
+
+   /* Close the configuration file */
+   fclose(pfConfigFile);
+
+   /* Return with success */
+   return(TRUE);
+   }
diff --git a/src/doors/ny2008/src/jackpot/Makefile b/src/doors/ny2008/src/jackpot/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..60476f0db4af7efb52346ec384a4b0d8d3092a38
--- /dev/null
+++ b/src/doors/ny2008/src/jackpot/Makefile
@@ -0,0 +1,25 @@
+CC	= gcc
+CXX	= g++
+UIFC_SRC	=	../../../../uifc
+XPDEV_SRC	=	../../../../xpdev
+ODOOR_SRC	=	../../../../odoors
+CCFLAGS += -O2
+CCFLAGS += -g
+CCFLAGS += -I${ODOOR_SRC} -L${ODOOR_SRC} -I${XPDEV_SRC} -I${UIFC_SRC}
+# Needed for struct alignment!
+CCFLAGS += -fshort-enums
+
+all : jackpot
+
+jackpot : jackpot.cpp jackpot.h dirwrap.o genwrap.o
+	$(CXX) $(CCFLAGS) jackpot.cpp dirwrap.o genwrap.o -o ../../jackpot -lODoors
+
+dirwrap.o:
+	$(CC) $(CCFLAGS) -c ${XPDEV_SRC}/dirwrap.c
+
+genwrap.o:
+	$(CC) $(CCFLAGS) -c ${XPDEV_SRC}/genwrap.c
+
+clean:
+	rm -f ../../jackpot
+	rm -f *.o
diff --git a/src/doors/ny2008/src/jackpot/file_id.diz b/src/doors/ny2008/src/jackpot/file_id.diz
new file mode 100644
index 0000000000000000000000000000000000000000..57569b2559926c1e6e63f7d6ef666c6b04992ef6
--- /dev/null
+++ b/src/doors/ny2008/src/jackpot/file_id.diz
@@ -0,0 +1,3 @@
+New York 2008 Jackpot IGM source code.
+IGM for New York wb7 and up!
+In C++ and Opendoors 5.0
diff --git a/src/doors/ny2008/src/jackpot/jackpot.cpp b/src/doors/ny2008/src/jackpot/jackpot.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..69e48fcc3f7d09254f94d34a3ab72ec4801e619a
--- /dev/null
+++ b/src/doors/ny2008/src/jackpot/jackpot.cpp
@@ -0,0 +1,592 @@
+//Include the header file
+#include "jackpot.h"
+
+//fuction prototypes
+DWORD get_val(DWORD def, DWORD max);
+  //ny2008 value entering system
+
+void strzcpy(char dest[],const char src[], INT16 beg,INT16 end);
+  //copy characters from a middle of a string
+
+char *ny_un_emu(const char line[],char out[]);
+  //remove color codes from line[] and out put to out[]
+
+int main(int argc,char *argv[]);
+  // main fuction
+
+int main(int argc,char *argv[])
+{
+  FILE *file_handle;          //file handle
+  char key;                   //single character for menu choice
+  char *char_in_string;       //character pointer used in terminating strings
+  WORD money;         //money that was bet
+  DWORD jackpot;      //the jackpot
+  user_rec urec;              //user record
+  WORD chance;        //the chance variable ... will store a random num
+  WORD max_bet;       //maximum bet
+  WORD set_ch=20000;  //average winable jackpot
+  INT16 intval;                 //temporary int variable
+  char tmp_str_1[61],tmp_str_2[35];//temporary strings
+  char dfile1[74],dfile2[74]; //dropfile names
+  INT16 ans_t,avt_t;            //ANSI?,AVATAR? Boolean values
+  INT16 x,x2;                   //for loop counters
+  char path[60];              //path to drop files
+  INT16 user_num;               //user number
+
+
+  //registration (enter you opendoors reg key here)
+  strcpy(od_registered_to,"Nobody");
+  od_registration_key=0000000000000;
+
+  //do not use direct video writes
+  // directvideo=0;
+
+  //include config file
+  od_control.od_config_file = INCLUDE_CONFIG_FILE;
+  od_control.od_config_filename = "jackpot.cfg";
+
+  //include multiple personality system
+  od_control.od_mps=INCLUDE_MPS;
+  od_control.od_nocopyright=TRUE;
+
+  //there was not enough arguments passed
+  if(argc<4) {
+    printf("\n\r\n\rJACKPOT:Not enough arguments\n\r\n\r");
+    exit(12);
+  }
+
+  //argument #1 is the path to the drop files
+  strcpy(path,argv[1]);
+
+  //get the second argument
+  x=2;
+
+  //read all arguments and act accordingly
+  do {
+
+    //game is local (NY2008's generic argument)
+    if (strnicmp(argv[x],"-L",2)==0) {
+      od_control.od_force_local=TRUE;
+
+    //node number (NY2008's generic argument)
+    } else if (strnicmp(argv[x],"-N",2)==0) {
+      strzcpy(tmp_str_1,argv[x],2,59);
+      sscanf(tmp_str_1,"%d",&intval);
+      od_control.od_node=intval;
+
+    //average jackpot winable size
+    } else if (strnicmp(argv[x],"-J",2)==0) {
+      strzcpy(tmp_str_1,argv[x],2,59);
+      sscanf(tmp_str_1,"%u",&set_ch);
+
+    // user number (NY2008's generic argument)
+    } else if (strnicmp(argv[x],"-U",2)==0) {
+      strzcpy(tmp_str_1,argv[x],2,59);
+      sscanf(tmp_str_1,"%d",&user_num);
+
+    //use direct writes
+    } else if (strnicmp(argv[x],"-DV",3)==0) {
+      // directvideo=1;
+
+    //use a different .CFG file
+    } else if (strnicmp(argv[x],"-C",2)==0) {
+      strzcpy(od_control.od_config_filename,argv[x],2,59);
+    }
+
+  //loop for all arguments
+  } while ((++x)<=argc);
+
+  //do not read any drop files (will be read manually this is for odoors)
+  od_control.od_disable|=DIS_INFOFILE;
+
+  //get length of path and check weather it includes a trailing slash
+  // if not then add it
+  x=strlen(path);
+  if (path[x-1]!='\\') {
+    path[x]='\\';
+    path[x+1]=0;
+  }
+
+  //create drop file names
+  sprintf(dfile1,"%su%07d.inf",path,user_num);
+  sprintf(dfile2,"%sn%07d.sts",path,od_control.od_node);
+
+  //if one or both are not found exit
+  if(!fexist(dfile1) && !fexist(dfile2)) {
+    printf("\n\r\n\rJACKPOT:Game drop file(s) not found!\n\r\n\r");
+    exit(12);
+  }
+
+  //open .inf file
+  file_handle=fopen(dfile1,"rt");
+
+  //get first line (bbs dropfile path)
+  fgets(od_control.info_path,59,file_handle);
+  //get rid of the \n char in the string and make it 0
+  if((char_in_string=strchr(od_control.info_path,'\n'))!=0)
+    *char_in_string=0;
+
+  //get second line (time limit)
+  fgets(tmp_str_1,30,file_handle);
+  //read in the value
+  sscanf(tmp_str_1,"%d",&od_control.caller_timelimit);
+
+  //comport
+  fgets(tmp_str_1,30,file_handle);
+  sscanf(tmp_str_1,"%d",&od_control.port);
+
+  //baud rate
+  fgets(tmp_str_1,30,file_handle);
+  sscanf(tmp_str_1,"%lu",&od_control.baud);
+
+  //terminal emulation
+  fgets(tmp_str_1,30,file_handle);
+  //get rid of the \n char in the string and make it 0
+  if((char_in_string=strchr(tmp_str_1,'\n'))!=0)
+    *char_in_string=0;
+
+  //set avt_t and ans_t according to tmp_str_1
+  //ansi
+  if(strcmp(tmp_str_1,"ANSI")==0) {
+    ans_t=TRUE;
+    avt_t=FALSE;
+  //avatar
+  } else if(strcmp(tmp_str_1,"AVATAR")==0) {
+    ans_t=TRUE;
+    avt_t=TRUE;
+  //ascii
+  } else {
+    ans_t=FALSE;
+    avt_t=FALSE;
+  }
+
+  //get players location
+  fgets(od_control.user_location,25,file_handle);
+  //get rid of the \n char in the string and make it 0
+  if((char_in_string=strchr(od_control.user_location,'\n'))!=0)
+    *char_in_string=0;
+
+  //is fossil used?
+  fgets(tmp_str_1,30,file_handle);
+  //get rid of the \n char in the string and make it 0
+  if((char_in_string=strchr(tmp_str_1,'\n'))!=0)
+    *char_in_string=0;
+
+  //fossil used
+  if(strcmp(tmp_str_1,"FOSSIL")==0) {
+    od_control.od_com_method=COM_FOSSIL;
+
+  //fossil not used read the comm settings
+  } else {
+    od_control.od_com_method=COM_INTERNAL;
+
+    //get com address
+    fgets(tmp_str_1,30,file_handle);
+    sscanf(tmp_str_1,"%d",&od_control.od_com_address);
+
+    //get irq
+    fgets(tmp_str_1,30,file_handle);
+    sscanf(tmp_str_1,"%d",&intval);
+    od_control.od_com_irq=intval;
+
+    //use FIFO?
+    fgets(tmp_str_1,30,file_handle);
+    //get rid of the \n char in the string and make it 0
+    if((char_in_string=strchr(tmp_str_1,'\n'))!=0)
+      *char_in_string=0;
+
+    //no fifo
+    if(strcmp(tmp_str_1,"NOFIFO")==0)
+      od_control.od_com_no_fifo=TRUE;
+
+    //use fifo
+    else
+      od_control.od_com_no_fifo=FALSE;
+
+    //fifo trigger size
+    fgets(tmp_str_1,30,file_handle);
+    sscanf(tmp_str_1,"%d",&intval);
+    od_control.od_com_fifo_trigger=intval;
+
+    //recieve buffer
+    fgets(tmp_str_1,30,file_handle);
+    sscanf(tmp_str_1,"%u",&od_control.od_com_rx_buf);
+
+    //transmit buffer
+    fgets(tmp_str_1,30,file_handle);
+    sscanf(tmp_str_1,"%u",&od_control.od_com_tx_buf);
+  }
+
+  //close the .inf file
+  fclose(file_handle);
+
+  //open the .sts file
+  file_handle=fopen(dfile2,"rb");
+
+  //read in the user record
+  fread(&urec,sizeof(user_rec),1,file_handle);
+
+  //close the .sts file
+  fclose(file_handle);
+
+  //destroy emulation codes and put it in tmp_str_2
+  ny_un_emu(urec.name,tmp_str_2);
+
+  //store this in user name so that the handle will display first and
+  //bbsname second. If you read any bbs drop files be sure to change it
+  //back before you exit.
+  sprintf(tmp_str_1,"%s (%s)",tmp_str_2,urec.bbsname);
+  strcpy(od_control.user_name,tmp_str_1);
+
+  //display the copyright message (it won't really show but it will be there)
+  od_printf("`bright`New York 2008 Jackpot IGM, FREEWARE!\n\r(c) Copyright 1995, George Lebl - All rights Reserved\n\r");
+
+  //se the ansi and avatar values
+  od_control.user_ansi=ans_t;
+  od_control.user_avatar=avt_t;
+
+  //check if another node is using the IGM
+  if(!fexist("jackpot.usd")) {
+    file_handle=fopen("jackpot.usd","wt");
+    fclose(file_handle);
+
+  //if it is exit
+  } else {
+    od_printf("\n\r`bright red`T`red`he IGM is used by another node!\n\r`bright red`T`red`his IGM is not multinode capable!\n\r`bright red`C`red`ome back later!\n\r\n\r`bright red`Smack [Enter] to countinue:");
+    od_get_answer("\n\r");
+    od_exit(10,FALSE);
+  }
+
+  //check if the dat file is there
+  //if not create it and make the jackpot 100
+  if(!fexist("jackpot.dat")) {
+    jackpot=100;
+    file_handle=fopen("jackpot.dat","wt");
+    fprintf(file_handle,"100");
+    fclose(file_handle);
+
+  //if yes read in the value
+  } else {
+    file_handle=fopen("jackpot.dat","rt");
+    fscanf(file_handle,"%lu",&jackpot);
+    fclose(file_handle);
+  }
+
+  //this is where the main menu is drawn
+  main_menu:
+
+  //if the user would not have clear clearing it will push the menu a bit down
+  od_printf("\n\r\n\r");
+
+  //clear screen
+  od_clr_scr();
+
+  //display the menu
+  od_printf("`bright red`J`red`ackpot IGM for `bright green`NY2008`red`!\n\r\n\r");
+  od_printf("`bright white`The jackpot is: `flashing bright red`%lu\n\r\n\r",jackpot);
+  od_printf("`bright red`B `red`- `bright red`B`red`et\n\r");
+  od_printf("`bright red`Q `red`- `bright red`Q`red`uit\n\r\n\r");
+  od_printf("`bright blue`E`blue`nter `bright blue`Y`blue`er `bright blue`C`blue`ommand (`bright blue`%d `blue`mins)`bright blue`>`bright`",od_control.caller_timelimit);
+
+  //get the user response
+  key=od_get_answer("BQ");
+
+  //display it
+  od_putch(key);
+
+  //if user chose to quit .. quit
+  if(key=='Q') {
+    od_printf("\n\r\n\r`bright red`L`red`eaving the `flashing bright red`JACKPOT\n\r\n\r");
+
+    //the game is not used anymore
+    remove("jackpot.usd");
+    od_exit(10,FALSE);
+
+  //if user is betting
+  } else {
+
+    //warn about no money
+    if(urec.money==0)
+      od_printf("\n\r\n\r`bright red`Y`red`a ain't got no money on hand!");
+
+    //because the highest bet is half the average jackpot win size
+    //make it that unless the user's got less money
+    if(urec.money>(INT16)(set_ch/2))
+      chance=(INT16)(set_ch/2);
+    else
+      chance=urec.money;
+
+    //display prompt
+    od_printf("\n\r\n\r`bright green`H`green`ow much`green` (`bright blue`Enter`green`=`bright green`[0]`green`, `bright blue`M`green`=max `bright green`%u`green`):",chance);
+
+    //use the ny value entering system to get the value
+    money=get_val(0,chance);
+
+    //if user bet 0 goto mainmenu
+    if(money==0) goto main_menu;
+
+    //seed the random number generator
+#ifdef ODPLAT_NIX
+    srandomdev();
+#else
+    randomize();
+#endif
+
+    //make it look like there's something going on
+    od_printf("\n\r\n\r`bright red`I`red`t's turning - `bright`");
+
+    //turn around 3 digit numbers for a while
+    for(x=0;x<20;x++) {
+      od_printf("%3d\b\b\b",xp_random(1000));
+      for(x2=0;x2<200;x2++)
+	od_kernel();
+    }
+
+    // add the money betted to jackpot
+    jackpot+=money;
+
+    //take off users money that he bet
+    urec.money-=money;
+
+    //set the chance of winning
+    chance=(WORD)xp_random(set_ch/2) * 2;
+
+    //check if user won
+    if(chance<money) {
+
+      //put WON over the 3 digit numbers
+      od_printf("WON");
+
+      //take a 10% tax
+      jackpot=(jackpot*90)/100;
+
+      //display that user had won
+      od_printf("\n\r\n\r`bright red`Y`red`ou have won %lu!\n\r`bright red`Y`red`ou had to pay 10\% tax though!",jackpot);
+
+  /*****this routine adds money but checks for overflow*****/
+  /**/    DWORD med;                                     /**/
+  /**/                                                   /**/
+  /**/    med=ULONG_MAX-jackpot;                         /**/
+  /**/    if (med<=urec.money)                           /**/
+  /**/      urec.money=ULONG_MAX;                        /**/
+  /**/    else                                           /**/
+  /**/      urec.money+=jackpot;                         /**/
+  /*********************************************************/
+
+      //display the enter prompt
+      od_printf("\n\r\n\r`bright red`Smack [Enter] to continue:");
+
+      //wait for enter
+      od_get_answer("\n\r");
+
+      //open the jackpot dat file
+      file_handle=fopen("jackpot.dat","wt");
+
+      //put a hundred in
+      fprintf(file_handle,"100");
+
+      //close the file
+      fclose(file_handle);
+
+      //display leaving message
+      od_printf("\n\r\n\r`bright red`L`red`eaving the `flashing bright red`JACKPOT\n\r\n\r");
+
+      //others can use the igm
+      remove("jackpot.usd");
+
+      //write out the user record into the .sts file for NY2008 to read
+      file_handle=fopen(dfile2,"wb");
+      fwrite(&urec,sizeof(user_rec),1,file_handle);
+      fclose(file_handle);
+
+      //exit
+      od_exit(10,FALSE);
+
+    //if user lost
+    } else {
+
+      //put LOST over the 3 digit numbers
+      od_printf("LOST");
+
+      //display message
+      od_printf("\n\r\n\r`bright red`Y`red`ou have `bright`LOST!");
+      od_printf("\n\r\n\r`bright red`Smack [Enter] to continue:");
+
+      //wait for enter
+      od_get_answer("\n\r");
+
+      //write the jackpot into the data file
+      file_handle=fopen("jackpot.dat","wt");
+      fprintf(file_handle,"%lu",jackpot);
+      fclose(file_handle);
+
+      //exitting message
+      od_printf("\n\r\n\r`bright red`L`red`eaving the `flashing bright red`JACKPOT\n\r\n\r");
+
+      //others can use the igm
+      remove("jackpot.usd");
+
+      //write out the .sts for ny2008 to read
+      file_handle=fopen(dfile2,"wb");
+      fwrite(&urec,sizeof(user_rec),1,file_handle);
+      fclose(file_handle);
+
+      //exit
+      od_exit(10,FALSE);
+    }
+  }
+  return(0);
+}
+
+DWORD    //value input system
+get_val(DWORD def, DWORD max)
+{
+//this function gets a number from the user just like ny2008 does
+//max is the maximim value user can enter
+//def is the default value if user presses enter
+
+  char input_s[30];         //input string
+  DWORD intval=0;   //temp value
+  INT16 cnt=0;                //loop counter
+
+
+  Again:                    //do again if neccesary
+
+  //set input string to spaces
+  memset(input_s,' ',strlen(input_s));
+
+  //get first digit
+  input_s[0]= od_get_answer("0123456789M\n\r");
+
+  //user wants maximum
+  if (input_s[0]=='M') {
+    od_printf("%lu\n\r",max);
+    return(max);
+  }
+
+  //user wants default
+  else if (input_s[0]=='\n' || input_s[0]=='\r') {
+    od_printf("%lu\n\r",def);
+    return(def);
+  }
+
+  //print out the digit
+  od_printf("%c",input_s[0]);
+
+  //get all other digits
+  cnt=0;
+  while (1) {
+    //only 30 digits allowed
+    if (cnt<29)
+      cnt++;
+    else
+      od_printf("\b");
+
+    //get a digit
+    input_s[cnt]=od_get_answer("0123456789\n\r\b");
+
+    //if enter that is the value we want
+    if (input_s[cnt]=='\n' || input_s[cnt]=='\r') {
+      input_s[cnt]=' ';
+      sscanf(input_s,"%lu",&intval);
+
+      //the value entered was more than the max value so truncate it
+      if (intval>max) {
+	do {
+	  od_printf("\b \b");
+	  cnt--;
+	} while (cnt>0);
+	intval=max;
+	od_printf("%lu",max);
+      }
+
+      //print an enter
+      od_printf("\n\r");
+
+      //get out of the loop
+      break;
+    }
+
+    //print the digit
+    od_printf("%c",input_s[cnt]);
+
+    //it was backspace
+    if (input_s[cnt]=='\b') {
+      od_printf(" \b");
+      input_s[cnt]=' ';
+      cnt--;
+      input_s[cnt]=' ';
+      cnt--;
+      if (cnt == -1) break;
+    }
+  }
+  //if all deleted goto the beginning
+  if (cnt == -1) goto Again;
+
+  //return the value
+  return(intval);
+}
+
+/*copy end chars beginning from beg to dest*/
+/*similiar to strncpy*/
+void
+strzcpy(char dest[],const char src[], INT16 beg,INT16 end)
+{
+//dest is the source, src is the cource
+
+  INT16 cnt=0; //loop counter
+
+  //begin loop
+  do {
+    //copy
+    dest[cnt]=src[beg];
+    beg++;
+    cnt++;
+  //until end characters are copied
+  } while (cnt<=end && src[cnt]!=0);
+
+  //end the string
+  dest[cnt]=0;
+}
+
+//remove the ny color codes from a string
+char
+*ny_un_emu(const char line[],char out[])
+{
+//line is input, out is output
+
+  INT16 cnt;   //real pos
+  INT16 len;   //pos in out
+
+  len=0; //set out pos to 0
+
+  //loop for every char in line
+  for(cnt=0;line[cnt]!=0;cnt++) {
+
+    //if '`' found remove color code
+    if(line[cnt]=='`') {
+      cnt++;
+
+      //end of string
+      if(line[cnt]==0) {
+	out[len]=0;
+	return(out);
+      //not a color code but a single '`'
+      } else if(line[cnt]=='`') {
+	out[len]='`';
+	len++;
+      }
+
+    //'`' not found
+    } else {
+      out[len]=line[cnt];
+      len++;
+    }
+  }
+
+  //end the string
+  out[len]=0;
+
+  //return the pointer to out
+  return(out);
+}
diff --git a/src/doors/ny2008/src/jackpot/jackpot.h b/src/doors/ny2008/src/jackpot/jackpot.h
new file mode 100644
index 0000000000000000000000000000000000000000..382ae98c6979c2dd8b1cfbdfce31cb8375fe2e71
--- /dev/null
+++ b/src/doors/ny2008/src/jackpot/jackpot.h
@@ -0,0 +1,14 @@
+#include <OpenDoor.h>     // Must be included in all doors with odoors
+#include <stdio.h>        //library include files
+#include <string.h>
+#include <stdlib.h>
+#include <dirwrap.h>
+#include <genwrap.h>
+#ifdef ODPLAT_NIX
+#include <ciowrap.h>
+#else
+#include <conio.h>
+#endif
+#include <limits.h>
+
+#include "../structs.h"
diff --git a/src/doors/ny2008/src/jackpot/read.me b/src/doors/ny2008/src/jackpot/read.me
new file mode 100644
index 0000000000000000000000000000000000000000..f22abdbe5c71cb9acb114ba9d16c49656cb0d5c7
--- /dev/null
+++ b/src/doors/ny2008/src/jackpot/read.me
@@ -0,0 +1,15 @@
+This is the source for Jackpot IGM for New York 2008 wb7 and up.
+
+Written using Turbo C/C++ 3.0 and Opendoors 5.0
+
+To compile compile the jackpot.cpp and link it with the odoor?.lib
+
+I wrote this IGM to show you how such an IGM is done, so use any part of this 
+code freely without no charge. Also I'm not responsible for anything it does.
+That's just some disclaimer bullshit. Hey I don't want anything from you so
+make an IGM and sell it or make it free or whatever ya want to do with it, but
+you should register Open Doors!
+
+Have phun....
+
+Franz
diff --git a/src/doors/ny2008/src/medit.cpp b/src/doors/ny2008/src/medit.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..544e2bb872968c9321fb4789806fd04806d0f0fa
--- /dev/null
+++ b/src/doors/ny2008/src/medit.cpp
@@ -0,0 +1,162 @@
+#include <stdio.h>
+#include <string.h>
+
+#include "const.h"
+#include "structs.h"
+#include "filename.h"
+
+void dump(void);
+
+void
+main(void)
+{
+  FILE *justfile;
+  enemy erec;
+  enemy_idx eidx;
+  char key;
+  INT16 num,cnt;
+  char nnm[36];
+
+  do {
+    printf("\n\nA-Add V-View E-Edit Q-Quit >");
+    scanf("%c",&key);
+    dump();
+
+    if (key=='A' || key=='a') {
+      printf("Name of the sucker:");
+      cnt=0;
+      do {
+	scanf("%c",&key);
+	erec.name[cnt]=key;
+	cnt++;
+      } while (key!='\n' && key!='\r' && cnt<36);
+      erec.name[cnt-1]=0;
+
+
+      if (key!='\n' && key!='\r') dump();
+
+      printf("Hitpoints:");
+      scanf("%d",&erec.hitpoints);
+      dump();
+
+      printf("Strength:");
+      scanf("%d",&erec.strength);
+      dump();
+
+      printf("Defense:");
+      scanf("%d",&erec.defense);
+      dump();
+
+      printf("Arm:");
+      scanf("%d",&erec.arm);
+
+      dump();
+
+      justfile=fopen(ENEMY_FILENAME,"a+b");
+      printf("Atpos: %d\n\n",ftell(justfile)/sizeof(enemy));
+      fwrite(&erec,sizeof(enemy),1,justfile);
+      fclose(justfile);
+    }
+    else if (key=='V' || key=='v') {
+      printf("\nView which record:");
+      scanf("%d",&num);
+      dump();
+
+      justfile=fopen(ENEMY_FILENAME,"rb");
+      fseek(justfile,num*sizeof(enemy),SEEK_SET);
+      fread(&erec,sizeof(enemy),1,justfile);
+      fclose(justfile);
+
+      printf("Name of the sucker: %s\n",erec.name);
+      printf("Hitpoints: %d\n",erec.hitpoints);
+      printf("Strength: %d\n",erec.strength);
+      printf("Defense: %d\n",erec.defense);
+      printf("Arm: %d\n",erec.arm);
+
+    }
+    else if (key=='E' || key=='e') {
+
+      printf("\nEdit which record:");
+      scanf("%d",&num);
+
+      dump();
+
+      justfile=fopen(ENEMY_FILENAME,"rb");
+      fseek(justfile,num*sizeof(enemy),SEEK_SET);
+      fread(&erec,sizeof(enemy),1,justfile);
+      fclose(justfile);
+
+      printf("Name of the sucker: %s\n",erec.name);
+      printf("Hitpoints: %d\n",erec.hitpoints);
+      printf("Strength: %d\n",erec.strength);
+      printf("Defense: %d\n",erec.defense);
+      printf("Arm: %d\n",erec.arm);
+
+      printf("\nName of the sucker:");
+      cnt=0;
+      do {
+	scanf("%c",&key);
+	erec.name[cnt]=key;
+	cnt++;
+      } while (key!='\n' && key!='\r' && cnt<36);
+      erec.name[cnt-1]=0;
+
+      if (key!='\n' && key!='\r') dump();
+
+      printf("Hitpoints:");
+      scanf("%d",&erec.hitpoints);
+      dump();
+
+      printf("Strength:");
+      scanf("%d",&erec.strength);
+      dump();
+
+      printf("Defense:");
+      scanf("%d",&erec.defense);
+      dump();
+
+      printf("Arm:");
+      scanf("%d",&erec.arm);
+
+      dump();
+
+      justfile=fopen(ENEMY_FILENAME,"r+b");
+      fseek(justfile,num*sizeof(enemy),SEEK_SET);
+      fwrite(&erec,sizeof(enemy),1,justfile);
+      fclose(justfile);
+    }
+
+  } while (key!='q' && key!='Q');
+
+  printf("\n\nRebuild the idx file? yn >");
+  scanf("%c",&key);
+  dump();
+
+  if (key=='y' || key=='Y') {
+    justfile=fopen(ENEMY_INDEX,"rb");
+    fread(&eidx,sizeof(enemy_idx),1,justfile);
+    fclose(justfile);
+    for (num=0;num<=20;num++) {
+      printf("input first enemy for level %d, was %d :",num,eidx.first_enemy[num]);
+      scanf("%d",&eidx.first_enemy[num]);
+      printf("input last enemy for level %d, was %d :",num,eidx.last_enemy[num]);
+      scanf("%d",&eidx.last_enemy[num]);
+      dump();
+    }
+    justfile=fopen(ENEMY_INDEX,"wb");
+    fwrite(&eidx,sizeof(enemy_idx),1,justfile);
+    fclose(justfile);
+  }
+  printf("\nDone!");
+}
+
+void
+dump(void)
+{
+  char key;
+  do {
+    scanf("%c",&key);
+  } while (key!='\n');
+}
+
+
diff --git a/src/doors/ny2008/src/ny2008.cpp b/src/doors/ny2008/src/ny2008.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..fdce112bd6ab3deffc62b84d08c323008fa48e21
--- /dev/null
+++ b/src/doors/ny2008/src/ny2008.cpp
@@ -0,0 +1,6187 @@
+//                        0 - Critical Door error (no fossil, etc.)
+//                        1 - Carrier lost, user off-line
+//                        2 - Sysop terminated call, user off-line
+//                        3 - User time used up, user STILL ON-LINE
+//                        4 - Keyboard inactivity timeout, user off-line
+//                       10 - User chose to return to BBS
+//                       11 - User chose to logoff, user off-line
+//                       12 - Critical NY2008 error
+
+
+// include the header
+#include "ny2008.h"
+
+// include prototypes for fights
+#include "fights.h"
+
+extern unsigned _stklen=20000U;
+
+// price arrays
+INT32    gun_price[ULTRASOUND_GUN+1] =  {
+				0,
+			       70,
+			     1500,
+			     7000,
+			    30000,
+			   130000,
+			   500000,
+			  2000000,
+			  8000000,
+			 30000000,
+			130000000,
+			500000000,
+			      300,
+			      600,
+			     3000,
+			    12000,
+			    70000,
+			   300000,
+			   900000,
+			  5500000,
+			 15000000,
+			 80000000,
+			150000000};
+INT16     drug_price[HEROIN+1] = {10, 25,  50, 100, 150, 150};
+
+
+
+// Declare global variables
+INT16 nCurrentUserNumber;
+INT16 forced_maint=FALSE;
+INT16 temp_len_stor;
+INT16 temp_rip_stor;
+INT16 temp_ans_stor;
+INT16 temp_avt_stor;
+user_rec cur_user;
+enemy enemy_rec;
+char uname[36];
+INT16 do_maint=TRUE;
+char str[15];
+INT16 reg_check=345;
+INT16 expert=1;
+INT16 no_rip_m=0;
+INT16 rip=FALSE;
+char *t_buffer=NULL;
+INT16 registered=786;
+char *ver="1.01";
+char *verinfo="";
+INT16 gamedisk,flagdisk=-1;
+INT16 *regptr;
+char gamedir[MAX_PATH],flagdir[MAX_PATH];
+char c_dir_g=0;
+INT16 no_wrt_sts=FALSE;
+INT16 no_kernel=TRUE;
+INT16 no_slices=FALSE;
+INT16 autodetect=TRUE;
+INT16 max_fights=20;
+INT16 max_drug_hits=32767;
+INT16 condom_price=5;
+INT16 delete_after=15;
+INT16 bank_interest=5;
+char ansi_name[MAX_PATH]=ANSI_SCORES_FILENAME;
+char ascii_name[MAX_PATH]=ASCII_SCORES_FILENAME;
+INT16 do_scr_files=TRUE;
+char rec_credit[36];
+char maint_exec[MAX_PATH]="";
+INT16 single_node=FALSE;
+INT16 clean_mode=FALSE;
+
+char *badwords[50];
+INT16 badwordscnt=0;
+INT16 dobad=FALSE;
+
+INT16 check_o_nodes=2;
+
+    INT16 busted_ch_bank   =33;
+    INT16 busted_ch_food   =33;
+    INT16 busted_ch_rape   =33;
+    INT16 busted_ch_beggar =20;
+    INT16 busted_ch_car    =33;
+    INT16 busted_ch_school =33;
+    INT16 busted_ch_window =20;
+    INT16 busted_ch_poison =25;
+    INT16 busted_ch_bomb   =25;
+    INT16 success_ch_bank  =50;
+    INT16 success_ch_food  =50;
+    INT16 success_ch_rape  =50;
+    INT16 success_ch_beggar=50;
+    INT16 success_ch_car   =65;
+    INT16 success_ch_school=50;
+    INT16 success_ch_window=95;
+    INT16 success_ch_poison=33;
+    INT16 success_ch_bomb  =33;
+
+char oneframe=FALSE;
+INT16 reset=FALSE;
+INT16 noevents=TRUE;
+INT16 time_slice_value=1500;
+
+tIBInfo IBBSInfo;
+INT16 ibbs=FALSE;
+INT16 ibbs_send_nodelist=FALSE;
+INT16 ibbs_maint_i=FALSE;
+INT16 ibbs_maint_o=FALSE;
+INT16 ibbs_i_mail=FALSE;
+INT16 ibbs_operator=FALSE;
+INT16 ibbs_game_num=0;
+
+glob_t fff;
+glob_t ff;
+char	**fname;
+
+/*
+ * Date Stuff for *nix
+ */
+#ifdef __unix__
+#include <time.h>
+struct date {
+  INT16 da_year;
+  char  da_day;
+  char  da_mon;
+};
+
+void getdate(struct date *nyd)  {
+  time_t tim;
+  struct tm *dte;
+
+  tim=time(NULL);
+  dte=localtime(&tim);
+  nyd->da_year=dte->tm_year+1900;
+  nyd->da_day=dte->tm_mday;
+  nyd->da_mon=dte->tm_mon+1;
+}
+#endif
+
+
+void
+time_slice(void)
+{
+#if 0	/* ToDo */
+  asm {
+    mov ax,time_slice_value
+    INT16 15
+  }
+#else
+  od_sleep(1);
+#endif
+}
+
+INT16
+copyfile(char *file1,char *file2)
+{
+  FILE *f1,*f2;
+  char *buffer;
+  INT32 len1,where,x,y;
+
+
+  f1=ShareFileOpen(file1,"rb");
+  if(f1==NULL) return 0;
+  f2=ShareFileOpenAR(file2,"wb");
+  if(f2==NULL) {
+    fclose(f1);
+    return 0;
+  }
+
+  buffer=(char *)malloc(10000);
+
+  len1=filelength(fileno(f1));
+  x=len1/10000;
+
+  for(y=0;y<x;y++) {
+    ny_fread(buffer,10000,1,f1);
+    ny_fwrite(buffer,10000,1,f2);
+  }
+
+  y=len1-(x*10000);
+
+  if(y>0) {
+    ny_fread(buffer,y,1,f1);
+    ny_fwrite(buffer,y,1,f2);
+  }
+
+  fclose(f1);
+  fclose(f2);
+  free(buffer);
+
+  return 1;
+}
+
+void fullscreen_chat(void);
+
+void
+ny_chat(void)
+{
+  scr_save();
+  od_control.od_chat_active=FALSE;
+  fullscreen_chat();
+  scr_res();
+}
+
+void
+NoDropFile(void)
+{
+  printf("\nNew York 2008 %s %s - No dropfile found!\n",ver,verinfo);
+  printf("To start in Local mode type:\nNY2008 -L\n");
+  exit(10);
+}
+
+void
+trim(char *numstr)
+{
+  INT16 x;
+  for(x=strlen(numstr)-1;numstr[x]==' ' && x>=0;x--) od_kernal;
+  numstr[x+1]=0;
+  strrev(numstr);
+  for(x=strlen(numstr)-1;numstr[x]==' ' && x>=0;x--) od_kernal;
+  numstr[x+1]=0;
+  strrev(numstr);
+}
+
+void
+loadbadwords(void)
+{
+  FILE *fp;
+
+  char *temp;
+
+  badwordscnt=0;
+
+  fp=ShareFileOpenAR(BADWORDS_FILENAME,"rt");
+
+  INT32 len=filelength(fileno(fp));
+
+  if(len>4000) {
+    ny_disp_emu("\n\r\n`%BADWORDS FILE TOO BIG!\n\r\n");
+    fclose(fp);
+    return;
+  }
+
+  temp=(char *)malloc(len+1);
+  if(temp==0) {
+    ny_disp_emu("\n\r\n`%Not Enough memory for BADWORDS.TXT\n\r\n");
+    fclose(fp);
+    return;
+  }
+
+  for(INT16 x=0;fscanf(fp,"%s",temp)!=EOF;x++) {
+
+    badwords[x]=(char *)malloc(strlen(temp)+1);
+    if(badwords[x]==0) {
+      ny_disp_emu("\n\r\n`%Not Enough memory for BADWORDS.TXT\n\r\n");
+      fclose(fp);
+      free(temp);
+      return;
+    }
+    strupr(temp);
+    strcpy(badwords[x],temp);
+    badwordscnt=x+1;
+  }
+
+  free(temp);
+  fclose(fp);
+}
+
+INT16
+main(int argc,char *argv[])
+{
+  FILE *justfile,*njustfile;
+  char key;
+  WORD uintval;
+  char numstr[26];
+  scr_rec srec;
+  INT16 cnt,intval,x;
+  scr_rec rec;
+  date today;
+  date lastday;
+
+    //put your opendoors reg here
+    strcpy(od_registered_to,"Your Name");
+    od_registration_key=00000000;
+
+#ifdef __unix__
+  srandomdev();
+#else
+  randomize();
+#endif
+
+  od_control.od_no_file_func=NoDropFile;
+  od_control.od_disable = DIS_BPS_SETTING | DIS_NAME_PROMPT;
+
+  od_control.od_num_keys=1;
+  od_control.od_hot_key[0]=26624;
+  od_control.od_hot_function[0]=UserStatus;
+
+  od_control.od_default_rip_win=TRUE;
+
+  od_add_personality("NY2008",1,23,ny_pers);
+
+  od_control.od_default_personality=ny_pers;
+
+  regptr=&registered;
+
+//  directvideo=0;
+
+  strcpy(od_control.od_prog_name,"New York 2008");
+
+  rec_credit[0]=0;
+
+  od_control.od_config_function = CustomConfigFunction;
+  if(fexist(CFG_FILENAME))
+    od_control.od_config_file = INCLUDE_CONFIG_FILE;
+  else
+    od_control.od_config_file = NO_CONFIG_FILE;
+  od_control.od_config_filename = CFG_FILENAME;
+
+  od_control.od_mps=INCLUDE_MPS;
+  od_control.od_nocopyright=TRUE;
+  od_control.od_cbefore_chat=ny_chat;
+  od_control.od_cbefore_shell=scr_save;
+  od_control.od_cafter_shell=scr_res;
+
+
+  cnt=1;
+  if(argc>1) {
+    do {
+      if (strnicmp(argv[cnt],"RESET",5)==0) {
+	od_control.od_force_local=TRUE;
+	reset=TRUE;
+      } else if (strnicmp(argv[cnt],"-IBBSM",6)==0) {
+	ibbs_i_mail=TRUE;
+	od_control.od_force_local=TRUE;
+      } else if (strnicmp(argv[cnt],"-RIP",4)==0) {
+	rip=166;
+      } else if (strnicmp(argv[cnt],"-L",2)==0) {
+	od_control.od_force_local=TRUE;
+	initciowrap(COLOR_MODE);
+	clrscr();
+	textbackground(LIGHTCYAN);
+	textcolor(BLUE);
+	gotoxy(1,7);
+	cprintf("�����������������������������������������������������������������������������ͻ");
+	gotoxy(1,8);
+	cprintf("� New York 2008 v%-5s %-20s                                   �",ver,verinfo);
+	gotoxy(1,9);
+	cprintf("� Starting in local mode input your name: ����������������������������������� �");
+	gotoxy(1,10);
+	cprintf("�����������������������������������������������������������������������������ͼ");
+	gotoxy(43,9);
+
+	INT16 cntv=0;
+	intval=TRUE;
+	do {
+	  if(cntv>=35) {
+	    cntv=34;
+	    putch('\b');
+	    key=getch();
+	    if(key=='\n' || key=='\r')
+	      cntv=35;
+	  } else {
+	    key=getch();
+	  }
+
+	  if(key==27) {
+	    gotoxy(1,9);
+	    cprintf("� Starting in local mode input your name: � Canceled ... �������������������� �");
+	    gotoxy(1,12);
+	    exit(10);
+	  }
+
+	  if(intval==TRUE) {
+	    if (key>='a' && key<='z')
+	      key-=32;
+	    intval=FALSE;
+	  } else if(intval==FALSE) {
+	    if (key>='A' && key<='Z')
+	      key+=32;
+	  }
+	  if(key==' ') {
+	    putch('�');
+	    key=0;
+	    intval=TRUE;
+	  } else if(key=='\b') {
+	    if(cntv==0) {
+	      intval=TRUE;
+	      key=0;
+	      cntv--;
+	    } else {
+	      cntv-=2;
+	      if(cntv>=0 && od_control.user_name[cntv]==' ')
+		intval=TRUE;
+	      if(cntv==32)
+		cprintf("\b��\b\b");
+	      else
+		cprintf("\b�\b");
+	      key=0;
+	    }
+	  }
+
+	  if(key!=0) {
+	    od_control.user_name[cntv]=key;
+	    putch(key);
+	  }
+	  cntv++;
+	} while (key!='\n' && key!='\r');
+	od_control.user_name[cntv-1]=0;
+
+	trim(od_control.user_name);
+
+      } else if (strnicmp(argv[cnt],"-NAD",4)==0) {
+	autodetect=FALSE;
+      } else if (strnicmp(argv[cnt],"-P",2)==0) {
+	strzcpy(od_control.info_path,argv[cnt],2,61);
+      } else if (strnicmp(argv[cnt],"-RDBPS",6)==0) {
+	od_control.od_disable &=~ DIS_BPS_SETTING;
+      } else if (strnicmp(argv[cnt],"-CL",3)==0) {
+	clean_mode=TRUE;
+/*      } else if (strnicmp(argv[cnt],"-DV",3)==0) {
+	directvideo=1; */
+      } else if (strnicmp(argv[cnt],"-NM",3)==0) {
+	do_maint=FALSE;
+      } else if (strnicmp(argv[cnt],"-CR",3)==0) {
+	od_control.od_force_local=TRUE;
+	od_init();
+	od_control.od_status_on=FALSE;
+	od_set_statusline(STATUS_NONE);
+	getcwd(gamedir,MAX_PATH);
+	gamedisk=gamedir[0] - 'A';
+	strzcpy(gamedir,gamedir,2,MAX_PATH);
+	if(flagdisk==-1) {
+	  flagdisk=gamedisk;
+	  strcpy(flagdir,gamedir);
+	}
+	ch_game_d();
+	registered=TRUE;
+      /*        if (fexist(KEY_FILENAME)) {
+	  strcpy(numstr,od_control.system_name);
+	  get_bbsname(numstr);
+	  registered=seereg(numstr);
+	}*/
+	ny_line(-1,0,0);
+	CrashRecovery();
+	od_exit(10,FALSE);
+      } else if (strnicmp(argv[cnt],"-MM",3)==0) {
+	od_control.od_force_local=TRUE;
+	od_init();
+	od_control.od_status_on=FALSE;
+	od_set_statusline(STATUS_NONE);
+	getcwd(gamedir,MAX_PATH);
+	gamedisk=gamedir[0] - 'A';
+	strzcpy(gamedir,gamedir,2,MAX_PATH);
+	if(flagdisk==-1) {
+	  flagdisk=gamedisk;
+	  strcpy(flagdir,gamedir);
+	}
+	ch_game_d();
+	registered=TRUE;
+/*      if (fexist(KEY_FILENAME)) {
+	  strcpy(numstr,od_control.system_name);
+	  get_bbsname(numstr);
+	  registered=seereg(numstr);
+	}*/
+	ny_line(-1,0,0);
+	forced_maint=TRUE;
+	Maintanance();
+	od_exit(10,FALSE);
+
+      } else if (strnicmp(argv[cnt],"-M",2)==0) {
+	od_control.od_force_local=TRUE;
+	od_init();
+	od_control.od_status_on=FALSE;
+	od_set_statusline(STATUS_NONE);
+	getcwd(gamedir,MAX_PATH);
+	gamedisk=gamedir[0] - 'A';
+	strzcpy(gamedir,gamedir,2,MAX_PATH);
+	if(flagdisk==-1) {
+	  flagdisk=gamedisk;
+	  strcpy(flagdir,gamedir);
+	}
+	ch_game_d();
+	registered=TRUE;
+/*      if (fexist(KEY_FILENAME)) {
+	  strcpy(numstr,od_control.system_name);
+	  get_bbsname(numstr);
+	  registered=seereg(numstr);
+	}*/
+	ny_line(-1,0,0);
+	Maintanance();
+	od_exit(10,FALSE);
+      } else if (strnicmp(argv[cnt],"-N",2)==0) {
+	strzcpy(numstr,argv[cnt],2,59);
+	sscanf(numstr,"%d",&intval);
+	od_control.od_node=intval;
+      } else if (strnicmp(argv[cnt],"-C",2)==0) {
+	strzcpy(od_control.od_config_filename,argv[cnt],2,59);
+	od_control.od_config_file = INCLUDE_CONFIG_FILE;
+      }
+    } while ((++cnt)<argc);
+  }
+
+  nCurrentUserNumber=MAX_USERS+1;
+
+  od_init();
+  if(!od_control.od_force_local)
+    od_control.od_clear_on_exit=FALSE;
+
+  getcwd(gamedir,MAX_PATH);
+  gamedisk=gamedir[0] - 'A';
+  strzcpy(gamedir,gamedir,2,MAX_PATH);
+  if(flagdisk==-1) {
+    flagdisk=gamedisk;
+    strcpy(flagdir,gamedir);
+  }
+
+
+  od_control.od_disable |= DIS_INFOFILE;
+
+  if(no_slices==FALSE)
+    od_control.od_ker_exec=time_slice;
+  else
+    od_control.od_ker_exec=NULL;
+
+  if(od_control.user_screen_length<2)
+    od_control.user_screen_length=24;
+
+  od_control.od_help_text2=(char *)"  New York 2008 v1.01 (c) 1995-97 George Lebl   Alt-[F1]=NY2008 Status Bar    ";
+
+  temp_rip_stor=od_control.user_rip;
+  temp_ans_stor=od_control.user_ansi;
+  temp_avt_stor=od_control.user_avatar;
+
+  if(rip!=166) {
+    if(autodetect==TRUE)
+    od_autodetect(DETECT_NORMAL);
+
+    rip=od_control.user_rip;
+    if(rip) {
+      temp_len_stor=od_control.user_screen_length;
+      od_control.user_screen_length=35;
+    }
+  } else {
+    rip=TRUE;
+    od_control.user_rip=TRUE;
+    temp_len_stor=od_control.user_screen_length;
+    od_control.user_screen_length=35;
+  }
+
+  char *InComing;
+  char *OutGoing;
+  ibbs_mail_type ibmail;
+
+  registered=TRUE;
+/*  if (fexist(KEY_FILENAME)) {
+    strcpy(numstr,od_control.system_name);
+    get_bbsname(numstr);
+    registered=seereg(numstr);
+  }*/
+
+  if(!registered)
+    ibbs=FALSE;
+
+  if(ibbs==TRUE) {
+    ch_game_d();
+    INT16 xx;
+    strcpy(IBBSInfo.szThisNodeAddress, "0:000/000");
+    sprintf(IBBSInfo.szProgName, "#@NYG#%05d IBBS",ibbs_game_num);
+    strcpy(IBBSInfo.szNetmailDir, "C:/FD/NETMAIL");
+    IBBSInfo.bCrash = FALSE;
+    IBBSInfo.bHold = FALSE;
+    IBBSInfo.bEraseOnSend = TRUE;
+    IBBSInfo.bEraseOnReceive = TRUE;
+    IBBSInfo.nTotalSystems = 0;
+    IBBSInfo.paOtherSystem = NULL;
+    IBReadConfig(&IBBSInfo, "INTERBBS.CFG");
+    IBReadConfig(&IBBSInfo, NODELIST_FILENAME);
+
+    char szDirFileName[PATH_CHARS + 1];
+
+   if(IBBSInfo.szNetmailDir==NULL || strlen(IBBSInfo.szNetmailDir)>PATH_CHARS) {
+     od_printf("\n\r\nNETMAIL DIR NOT FOUND\n\r\n");
+     od_exit(10,FALSE);
+   }
+
+   strcpy(szDirFileName, IBBSInfo.szNetmailDir);
+
+   /* Remove any trailing backslash from directory name */
+   if(szDirFileName[strlen(szDirFileName) - 1] == '\\')
+     szDirFileName[strlen(szDirFileName) - 1] = '\0';
+
+
+   /* Return true iff file exists and it is a directory */
+   if(!fexist(szDirFileName) || !isdir(szDirFileName)) {
+     od_printf("\n\r\nNETMAIL DIR NOT FOUND\n\r\n");
+     od_exit(10,FALSE);
+   }
+
+    if(IBBSInfo.nTotalSystems>255)
+      IBBSInfo.nTotalSystems=255;
+
+    if(ibbs_i_mail) {
+      ny_disp_emu("\n\r`0##> Getting InterBBS Mail\n\r");
+      sprintf(IBBSInfo.szProgName, "#@NYG#%05d MAIL",ibbs_game_num);
+
+      justfile=ShareFileOpen(IBBS_MAIL_INDEX,"a+b");
+      while(IBGetMail(&IBBSInfo,&ibmail) == eSuccess) {
+
+	if(strcmp(ibmail.node_r,IBBSInfo.szThisNodeAddress)==0)
+	  ny_fwrite(&ibmail,sizeof(ibbs_mail_type),1,justfile);
+      }
+      fclose(justfile);
+    }
+  }
+
+  if(rip) {
+    od_control.user_ansi=TRUE;
+    od_disp_str("\n\r!|*|10000$SBAROFF$$HKEYOFF$|#|#|#\n\r");
+    od_control.od_no_time=(char *)"\n\r!|10000((Sorry, you have used up all your time for today::@OK))|#|#|#\n\r";
+    od_control.od_time_warning=(char *)"\n\r!|10000((Warning, only %d minute(s) remaining today!::@OK))|#|#|#\n\r";
+    od_control.od_inactivity_warning=(char *)"\n\r!|10000((Warning, inactivity timeout in %d minute(s)!::@OK))|#|#|#\n\r";
+    od_control.od_inactivity_timeout=(char *)"\n\r!|10000((Inactivity Timeout!::@OK))|#|#|#\n\r";
+  }
+
+
+  if(reset==TRUE) {
+    od_control.od_status_on=FALSE;
+    od_set_statusline(STATUS_NONE);
+    od_clr_scr();
+    ny_disp_emu("`@N`4ew `@Y`4ork `@2008 `%RESET `@U`4tility");
+    ny_disp_emu("\n\n\r`2Not all options may aply to you. If you are not in an `0InterBBS`2 game");
+    ny_disp_emu("\n\rand just wish to `0RESET`2 your game choose 1.");
+
+    ny_disp_emu("\n\n\r`%1 `4- `@R`4eset `@T`4he `@G`4ame `@O`4nly `2(You will stay in an InterBBS game)");
+    ny_disp_emu("\n\r`%2 `4- `@G`4et `@O`4ut `@O`4f `@InterBBS `2(The game will `0NOT `2be RESET)");
+    ny_disp_emu("\n\r`%Q `4- `@Q`4uit `@T`4his `2(No RESETs)");
+
+    ny_disp_emu("\n\n\r`@Y`4our `@C`4hoice: `0");
+    key=od_get_answer("12Q");
+    od_printf("%c",(char)key);
+    if(key=='1') {
+      ny_disp_emu("\n\n\r`@T`4he current game `%WILL `4be lost`%!");
+      ny_disp_emu("\n\n\r`@A`4re you sure you want to `%RESET `4(`@Y`4/`@N`4):");
+      key=od_get_answer("YN");
+
+      od_printf("%c\n\n\r",(char)key);
+
+      if(key=='Y') {
+	ny_disp_emu("`%Ignore any error messages following this\n\n\r");
+	ch_flag_d();
+
+	ny_remove("u00?????.*");
+	ny_remove("mnu*.dat");
+	ny_remove("evt*.dat");
+	ny_remove("n00?????.*");
+	ny_remove(MAINTFLAG_FILENAME);
+
+	ch_game_d();
+
+	ny_remove(USER_FILENAME);
+	ny_remove(SCR_FILENAME);
+	ny_remove(LASTMAINT_FILENAME);
+	ny_remove(GAMEDAY_FILENAME);
+	ny_remove(MAIL_FILENAME);
+	ny_remove(MAIL_INDEX);
+	ny_remove(SENTBESTTEN_FILENAME);
+	ny_remove(SENTLIST_FILENAME);
+      }
+    } else if(key=='2') {
+      ny_disp_emu("\n\n\r`@Y`4ou will be taken out of this InterBBS game!");
+      ny_disp_emu("\n\r`@M`4ake sure the operator bbs of this game has taken you out of the nodelist!");
+      ny_disp_emu("\n\r`@A`4nd turn the InterBBS keyword off in your .cfg file!");
+      ny_disp_emu("\n\n\r`@A`4re you sure you want to `%Get Local Only? `4(`@Y`4/`@N`4):");
+      key=od_get_answer("YN");
+
+      od_printf("%c\n\n\r",(char)key);
+
+      if(key=='Y') {
+	ny_disp_emu("`%Ignore any error messages following this\n\n\r");
+	ch_game_d();
+
+	ny_remove(NODELIST_FILENAME);
+	ny_remove(SBYDB_PREFIX".*");
+	ny_remove(IBBSSPY_FILENAME);
+	ny_remove(IBBSSPY_TEMPFILENAME);
+	ny_remove(IBBS_MAIL_INDEX);
+	ny_remove(IBBS_BESTTEN_FILENAME);
+	ny_remove(SBYDBT_PREFIX".*");
+	ny_remove(SENTBESTTEN_FILENAME);
+	ny_remove(SENTLIST_FILENAME);
+      }
+    }
+    od_exit(10,FALSE);
+  }
+
+  registered=TRUE;
+/*  if (fexist(KEY_FILENAME)) {
+    strcpy(numstr,od_control.system_name);
+    get_bbsname(numstr);
+    registered=seereg(numstr);
+  }*/
+
+  ny_line(-1,0,0);
+  ny_stat_line(-1,0,0);
+
+  //load bad wordlist
+  if(fexist(BADWORDS_FILENAME)) {
+    loadbadwords();
+    dobad=TRUE;
+  }
+
+//  char test1[]="shit man this fucking thing is fucking done !assfucked";
+//  dobadwords(test1);
+//  od_printf("\n\r\n%s\n\r\n",test1);
+//  WaitForEnter();
+
+  ny_line(267,1,0);
+
+  if (rip==FALSE) {
+    ny_line(268,1,0);
+    //(Xpert mode recomended for slow modems)
+    ny_line(269,1,0);
+    //Wanna start in Xpert, Regular or Novice mode (X/[R]/N)
+    key=od_get_answer("XRN\n\r");
+    if (key=='\n' || key=='\r') key='R';
+    if (key=='N') expert=0;
+    if (key=='R') expert=1;
+    if (key=='X') expert=2;
+    od_printf("%c\n\r\n\r",key);
+
+    if(*regptr==TRUE && reg_check==784)
+      od_exit(10,TRUE);
+
+
+    if (expert<2) {
+      ny_clr_scr();
+      od_send_file("intro");
+      ny_line(1,1,0);
+      //Smack [ENTER] to go on.
+      od_get_answer("\n\r");
+    }
+  } else {
+    expert=0;
+    od_printf("\n\r\n\r");
+    ny_clr_scr();
+    od_send_file("intro");
+    ny_line(1,1,0);
+    od_get_answer("\n\r");
+  }
+  if(rip) ny_clr_scr();
+  ny_line(2,2,1);
+  //Getting the menu text file pointers...
+  ny_get_index();
+
+  if(*regptr==TRUE && reg_check==784)
+    od_exit(10,TRUE);
+
+
+  if(ibbs)
+    DisplayBestIB();
+  else
+    DisplayBest();
+
+  if (registered==FALSE) {
+    max_fights       =20;
+    delete_after     =15;
+    busted_ch_bank   =33;
+    busted_ch_food   =33;
+    busted_ch_rape   =33;
+    busted_ch_beggar =20;
+    busted_ch_car    =33;
+    busted_ch_school =33;
+    busted_ch_window =20;
+    busted_ch_poison =25;
+    busted_ch_bomb   =25;
+    success_ch_bank  =50;
+    success_ch_food  =50;
+    success_ch_rape  =50;
+    success_ch_beggar=50;
+    success_ch_car   =65;
+    success_ch_school=50;
+    success_ch_window=95;
+    success_ch_poison=33;
+    success_ch_bomb  =33;
+  }
+
+
+  ch_flag_d();
+  if (single_node==FALSE && fexist(MAINTFLAG_FILENAME)) {
+    od_printf("\n\r\n\r");
+    if(rip) ny_clr_scr();
+    ny_send_menu(MAINT_RUN,"");
+/*    od_printf("\n\r\n\r`bright red`W`red`ell the mantanace is running on some other node so please come");
+    od_printf("back later, or\n\rif it is a one node bbs or the sysop's running the maintanance in the nightly\n\rbatch file ");
+    od_printf("then he should delete the MAINT.RUN flag file....");*/
+    WaitForEnter();
+    od_exit(10,FALSE);
+  }
+//  if (single_node==TRUE && fexist(".RUN")) {
+
+
+  ch_game_d();
+  if (!fexist(USER_FILENAME)) { // player first in play run maint after he logs in
+    if(!ReadOrAddCurrentUser())
+    {
+      /* If unable to obtain a user record for the current user, then exit */
+      /* the door after displaying an error message.                       */
+      if(rip) ny_clr_scr();
+      od_printf("Unable to access user file. File may be locked or full.\n\r");
+      WaitForEnter();
+      od_exit(1, FALSE);
+    }
+
+  //  strcpy(uname,od_control.user_name);
+  //  sprintf(od_control.user_name,"%s (%s)",cur_user.name,uname);
+  strcpy(rec.name,cur_user.name);
+  rec.nation=cur_user.nation;
+  rec.level=cur_user.level;
+  rec.points=cur_user.points;
+  rec.alive=cur_user.alive;
+  rec.sex=cur_user.sex;
+  rec.user_num=nCurrentUserNumber;
+  rec.online=FALSE;
+
+  ch_game_d();
+  justfile=ShareFileOpen(SCR_FILENAME,"wb");
+  ny_fwrite(&rec, sizeof(scr_rec), 1, justfile);
+  fclose(justfile);
+
+  date today;
+
+	getdate(&today);
+
+	  ch_game_d();
+	  justfile=ShareFileOpen(LASTMAINT_FILENAME,"wb");
+	  ny_fwrite(&today, sizeof(date), 1, justfile);
+	  fclose(justfile);
+	  justfile=ShareFileOpen(GAMEDAY_FILENAME,"wb");
+	  intval=1;
+	  ny_fwrite(&intval,2,1,justfile);
+	  fclose(justfile);
+
+
+  } else {
+    /*Run Maintanance if it hasn't been run yet...*/
+    if (do_maint==TRUE) {
+      od_control.od_disable |= DIS_CARRIERDETECT;
+//      od_set_statusline(STATUS_NONE);
+      Maintanance();
+//      od_set_statusline(STATUS_NORMAL);
+      od_control.od_disable &=~ DIS_CARRIERDETECT;
+      if(!ReadOrAddCurrentUser())
+      {
+	/* If unable to obtain a user record for the current user, then exit */
+	/* the door after displaying an error message.                       */
+	if(rip) ny_clr_scr();
+	od_printf("Unable to access user file. File may be locked or full.\n\r");
+	WaitForEnter();
+	od_exit(1, FALSE);
+      }
+    } else {
+      if(!ReadOrAddCurrentUser())
+      {
+	/* If unable to obtain a user record for the current user, then exit */
+	/* the door after displaying an error message.                       */
+	if(rip) ny_clr_scr();
+	od_printf("Unable to access user file. File may be locked or full.\n\r");
+	WaitForEnter();
+	od_exit(1, FALSE);
+      }
+      ch_game_d();
+      if (fexist(LASTMAINT_FILENAME)) {
+	justfile = ShareFileOpen(LASTMAINT_FILENAME, "rb");
+	ny_fread(&lastday, sizeof(date), 1, justfile);
+	fclose(justfile);
+	if (lastday.da_year!=today.da_year || lastday.da_mon!=today.da_mon || lastday.da_day!=today.da_day) {
+	  ch_flag_d();
+	  sprintf(numstr,"u%07d.tdp",nCurrentUserNumber);
+	  if(!fexist(numstr)) {
+	    cur_user.days_not_on++;
+
+	    getdate(&today);
+
+	    justfile=ShareFileOpen(numstr,"wb");
+	    ny_fwrite(&today,sizeof(date),1,justfile);
+	    fclose(justfile);
+	  } else {
+	    justfile=ShareFileOpen(numstr,"rb");
+	    ny_fread(&lastday,sizeof(date),1,justfile);
+	    fclose(justfile);
+
+	    getdate(&today);
+
+	    if (lastday.da_year!=today.da_year || lastday.da_mon!=today.da_mon || lastday.da_day!=today.da_day) {
+	      cur_user.days_not_on++;
+	      justfile=ShareFileOpen(numstr,"wb");
+	      ny_fwrite(&today,sizeof(date),1,justfile);
+	      fclose(justfile);
+	    }
+	  }
+	}
+      } else {
+	ch_flag_d();
+	sprintf(numstr,"u%07d.tdp",nCurrentUserNumber);
+	if(!fexist(numstr)) {
+	  cur_user.days_not_on++;
+  /*      justfile=ShareFileOpen(numstr,"w");
+	  fclose(justfile);*/
+
+	  getdate(&today);
+
+	  justfile=ShareFileOpen(numstr,"wb");
+	  ny_fwrite(&today,sizeof(date),1,justfile);
+	  fclose(justfile);
+	} else {
+	  justfile=ShareFileOpen(numstr,"rb");
+	  ny_fread(&lastday,sizeof(date),1,justfile);
+	  fclose(justfile);
+
+	  getdate(&today);
+
+	  if (lastday.da_year!=today.da_year || lastday.da_mon!=today.da_mon || lastday.da_day!=today.da_day) {
+	    cur_user.days_not_on++;
+	    justfile=ShareFileOpen(numstr,"wb");
+	    ny_fwrite(&today,sizeof(date),1,justfile);
+	    fclose(justfile);
+	  }
+	}
+      }
+    }
+
+    if(*regptr==TRUE && reg_check==784)
+      od_exit(10,TRUE);
+
+
+    if (single_node==FALSE) {
+      ch_flag_d();
+      sprintf(numstr, "u%07d.bfa",nCurrentUserNumber);
+      if (fexist(numstr)) {
+	justfile=ShareFileOpen(numstr,"rb");
+	ny_fread(&intval,2,1,justfile);
+	fclose(justfile);
+	sprintf(numstr,"u%07d.on",intval);
+	if (fexist(numstr)) {
+	  ny_line(402,2,1);
+	  if(!rip)
+	    WaitForEnter();
+	  else
+	    od_get_answer("\n\r");
+	  od_exit(10,FALSE);
+	} else {
+	  sprintf(numstr,"u%07d.bfa",nCurrentUserNumber);
+	  ny_remove(numstr);
+	}
+      }
+    }
+  }
+
+  //reset users flags
+  ch_game_d();
+  sprintf(numstr,"u%07d.inf",nCurrentUserNumber);
+  if (fexist(numstr))
+    ny_remove(numstr);
+  sprintf(numstr,"n%07d.sts",od_control.od_node);
+  if (fexist(numstr))
+    ny_remove(numstr);
+  sprintf(numstr,"n%07d.stt",od_control.od_node);
+  if (fexist(numstr))
+    ny_remove(numstr);
+
+
+  od_control.od_before_exit=exit_ops;
+  no_kernel=FALSE;
+
+  strcpy(uname,od_control.user_name);
+  sprintf(od_control.user_name,"%s (%s)",ny_un_emu(cur_user.name,numstr),uname);
+  od_control.od_update_status_now=TRUE;
+  od_kernal();
+
+//  od_set_statusline(STATUS_NONE);
+//  od_set_statusline(STATUS_NORMAL);
+
+
+  do {
+    switch(key=entry_menu())    // Get user's choice
+    {
+      case 'N':
+	newz_ops();
+	break;
+
+      case 'E':          // If user hit E key
+
+	if(*regptr==TRUE && reg_check==784)
+	  od_exit(10,TRUE);
+
+	/*user wuz disabled today so come back tomorrow*/
+	if (cur_user.days_not_on==0 && cur_user.alive==UNCONCIOUS) {
+	  ny_line(401,2,1);
+//        od_printf("\n\r\n\r`bright`You heffta wait until tomorrow to play again!\n\r");
+	  if(!rip)
+	    WaitForEnter();
+	  else
+	    od_get_answer("\n\r");
+	  od_exit(10,FALSE);
+	}
+
+	/*user died today*/
+	if (cur_user.alive==DEAD) {
+	  ny_line(400,2,1);
+//        od_printf("\n\r\n\r`bright`Dead people are not allowed to play, come back tomorrow to start over!\n\r");
+	  if(!rip)
+	    WaitForEnter();
+	  else
+	    od_get_answer("\n\r");
+	  od_exit(10,FALSE);
+	}
+
+	/*user not played today so perform his daily functions*/
+	if (cur_user.days_not_on>0) {
+	  cur_user.hitpoints=cur_user.maxhitpoints;
+	  cur_user.InterBBSMoves=2;
+	  cur_user.unhq=1;
+	  cur_user.poison=1;
+	  cur_user.drug_high=0;
+	  cur_user.turns=max_fights;
+	  if (cur_user.std_percent>4)
+	    cur_user.std_percent-=4;
+	  else {
+	    cur_user.std_percent=0;
+	    cur_user.std=NONE;
+	  }
+
+	  if(cur_user.std>AIDS) cur_user.std=AIDS;
+//        if(cur_user.std<NONE) cur_user.std=NONE;
+	  cur_user.hunger+=10;
+	  cur_user.sex_today=cur_user.level+1;
+	  cur_user.since_got_laid++;
+	  if (cur_user.hunger>100) cur_user.hunger=100;
+	  if (cur_user.drug_addiction>10) {
+	    cur_user.drug_addiction-=10;
+	    cur_user.drug_days_since++;
+	  } else {
+	    cur_user.drug_addiction=0;
+	    cur_user.drug_days_since=0;
+	  }
+
+//        od_printf("debug5");
+	  //cur_user.std_percent-=10;
+	  //if (cur_user.std_percent<=0) cur_user.std_percent=0;
+	  /*user wuz beaten  last time, get him back on street*/
+	  if (cur_user.alive==UNCONCIOUS) {
+
+//          od_printf("\n\r\n\r");
+//          ny_send_menu(WAKE_UP,"");
+
+//           od_printf("debug6");
+
+	    ny_line(403,1,1);
+//          od_printf("\n\r\n\r`bright red`Y`red`er feeling better as you wake up from a comma...\n\r\n\r");
+	    cur_user.alive=ALIVE;
+	    if(!rip)
+	      WaitForEnter();
+	    else
+	      od_get_answer("\n\r");
+	  } else if (cur_user.days_not_on>0) { //user gets 10 points for not getting his ass kicked
+	    ny_line(398,1,1);
+//          od_printf("\n\r\n\r`bright red`Y`red`ou get 10 points for not having yer ass kicked...\n\r\n\r");
+	    points_raise((DWORD)10);
+	    if(!rip)
+	      WaitForEnter();
+	    else
+	      od_get_answer("\n\r");
+
+	  }
+
+	}
+
+	/*reset days not on variable....so user won't get deleted*/
+	cur_user.days_not_on=0;
+
+	if(*regptr==TRUE && reg_check==784)
+	  od_exit(10,TRUE);
+
+	if (single_node==FALSE) {
+	  /*create status file for user*/
+	  ch_flag_d();
+	  sprintf(numstr,"u%07d.sts",nCurrentUserNumber);
+	  justfile = ShareFileOpen(numstr, "wb");
+	  ny_fwrite(&cur_user,sizeof(user_rec),1,justfile);
+	  fclose(justfile);
+
+	  /*send message to all online users*/
+	  if (glob("u???????.on",0,NULL,&ff)==0) {
+	    for(fname=ff.gl_pathv;*fname != NULL;fname++) {
+	      strcpy(numstr,*fname);
+	      numstr[10]='m';
+	      numstr[11]='g';
+	      numstr[12]=0;
+	      justfile=ShareFileOpen(numstr,"a+b");
+	      numstr[0]=27;
+	      numstr[1]=10;
+	      ny_fwrite(&numstr,51,1,justfile);
+	      ny_fwrite(&cur_user.name,25,1,justfile);
+	      fclose(justfile);
+	    }
+		globfree(&ff);
+	  }
+	  /*User is now on-line!*/
+	  sprintf(numstr,"u%07d.on",nCurrentUserNumber);
+	  justfile = ShareFileOpen(numstr, "a+b");
+	  fclose(justfile);
+
+	}/* else {
+	  justfile = ShareFileOpen("INUSE.FLG", "a+b");
+	  fclose(justfile);
+	}  */
+
+	/*enable online flag in the scr file*/
+//      ch_game_d();
+	points_raise(0);
+	/*justfile = ShareFileOpen(SCR_FILENAME,"r+b");
+	fseek(justfile, (INT32)cur_user.rank * sizeof(scr_rec),SEEK_SET);
+	ny_fread(&srec,sizeof(scr_rec),1,justfile);
+	srec.online=TRUE;
+	fseek(justfile, (INT32)cur_user.rank * sizeof(scr_rec),SEEK_SET);
+	ny_fwrite(&srec,sizeof(scr_rec),1,justfile);
+	fclose(justfile);*/
+
+	/*reset days not on variable....so user won't get deleted*/
+	cur_user.days_not_on=0;
+
+	/*store cur parms.....*/
+	wrt_sts();
+
+	oneframe=TRUE;
+	/*display users stats*/
+	if(rip) {
+	  od_disp_str("\n\r");
+	  od_send_file("frame.rip");
+	  od_send_file("frame1.rip");
+	}
+	DisplayStats();
+	WaitForEnter();
+
+	/*display who's online*/
+	WhosOnline();
+
+	/*display newzfiles*/
+	newz_ops();
+
+	oneframe=FALSE;
+
+	if(reg_check==784 && *regptr==TRUE)
+	  registered=FALSE;
+
+	/*mail read....*/
+       //       od_printf("\n\r\n\r`bright red`R`red`ead yer mail ...(`bright red`[Y]`red`/`bright red`N`red`)");
+      //        key=ny_get_answer("YN\n\r");
+//      if (key=='\n' || key=='\r') key='Y';
+//      od_printf("%c\n\r",key);
+//      if (key=='Y')
+
+	ny_line(3,2,1);
+//      printf("\n\r1\n\r");
+//      od_printf("\n\r\n\r`bright red`R`red`eading mail...\n\r");
+	read_mail();
+	if(ibbs) read_ibmail();
+
+//      printf("\n\r13\n\r");
+
+	/*here goes the streets of ny*/
+	EnterStreet();
+
+	/*quit game after returning from there*/
+	key='Q';
+	break;
+
+      case 'L':
+	ListPlayers();
+	break;
+      case 'Y':
+	DisplayStats();
+	WaitForEnter();
+	break;
+    }                            // Loop until quit to BBS
+  } while(key!='Q');
+
+  od_exit(10,FALSE);              // Again OpenDoors does the rest
+
+  return 0;
+}
+
+
+void
+UserStatus(void)
+{
+  od_set_personality("NY2008");
+}
+
+void
+set_wildcat(void)
+{
+  od_set_personality("Wildcat");
+}
+
+void
+ny_pers(unsigned char message)
+{
+#ifndef ODPLAT_NIX
+  INT16 x,y;
+  char numstr[25];
+
+
+  if(message==PEROP_INITIALIZE) {
+//    od_set_personality("Standard");
+    od_control.key_status[0]=15104;
+    od_control.key_status[1]=15360;
+    od_control.key_status[2]=15616;
+    od_control.key_status[3]=15872;
+    od_control.key_status[4]=16128;
+    od_control.key_status[5]=16384;
+    od_control.key_status[6]=17152;
+    od_control.key_status[7]=17408;
+    od_control.od_hot_key[0]=16640;
+    od_control.od_hot_function[0]=set_wildcat;
+    od_control.key_chat=11776;
+    od_control.key_dosshell=9216;
+    od_control.key_drop2bbs=8192;
+    od_control.key_hangup=8960;
+    od_control.key_keyboardoff=9472;
+    od_control.key_lesstime=20480;
+    od_control.key_lockout=9728;
+    od_control.key_moretime=18432;
+    od_control.key_sysopnext=12544;
+  } else if(message==PEROP_DEINITIALIZE) {
+    od_control.od_hot_key[0]=26624;
+    od_control.od_hot_function[0]=UserStatus;
+  } else if(message==PEROP_DISPLAY1 || message==PEROP_UPDATE1) {
+    x=wherex();
+    y=wherey();
+    textbackground(BLUE);
+
+    textcolor(LIGHTRED);
+
+    gotoxy(1,24);
+    clreol();
+    ny_un_emu(cur_user.name,numstr);
+    cprintf("  %-46s",numstr);
+    textcolor(WHITE);
+    cprintf(" New York 2008 ");
+
+    textcolor(LIGHTBLUE);
+    cprintf(" by Franz  ");
+
+    textcolor(BLACK);
+    cprintf("%s\n\r",ver);
+
+    clreol();
+    textcolor(LIGHTBLUE);
+    cprintf("                [F2]=Player Status [F3]=Personalities [F9]=Help");
+    gotoxy(x,y);
+
+  } else if(message==PEROP_DISPLAY2 || message==PEROP_UPDATE2) {
+    x=wherex();
+    y=wherey();
+    textbackground(BLUE);
+    textcolor(WHITE);
+
+    gotoxy(1,24);
+    clreol();
+    ny_un_emu(cur_user.name,numstr);
+    textcolor(LIGHTRED);
+    cprintf(" %-25s ",numstr);
+    textcolor(WHITE);
+    cprintf("Level: ");
+    textcolor(LIGHTRED);
+    cprintf("%-2d   ",(INT16)cur_user.level);
+
+    textcolor(LIGHTBLUE);
+    switch(cur_user.nation) {
+      case HEADBANGER:
+	cprintf("Headbanger     "); break;
+      case HIPPIE:
+	cprintf("Hippie         "); break;
+      case BIG_FAT_DUDE:
+	cprintf("Big Fat Dude   "); break;
+      case CRACK_ADDICT:
+	cprintf("Crack Addict   "); break;
+      case PUNK:
+	cprintf("Punk           "); break;
+    }
+
+    textcolor(WHITE);
+    cprintf("Sex: ");
+    textcolor(LIGHTRED);
+    if(cur_user.sex==MALE)
+      cprintf("Male");
+    else
+      cprintf("Female");
+
+    cprintf("\n\r");
+
+    clreol();
+    textcolor(WHITE);
+    cprintf(" Points: ");
+    textcolor(LIGHTRED);
+    cprintf("%-16s  ",D_Num(cur_user.points));
+    textcolor(WHITE);
+    cprintf("Money: ");
+    textcolor(LIGHTRED);
+    cprintf("%-16s",D_Num(cur_user.money));
+
+    gotoxy(x,y);
+  } else if(message==PEROP_DISPLAY3 || message==PEROP_UPDATE3) {
+    x=wherex();
+    y=wherey();
+    textbackground(BLUE);
+    textcolor(WHITE);
+
+    gotoxy(1,24);
+    clreol();
+    cprintf("  These are the personalities NY2008 supports:\n\r");
+
+    clreol();
+    textcolor(LIGHTBLUE);
+    cprintf("  [F4]=Opendoors Standard [F5]=PCBoard [F6]=Remote Access [F7]=Wildcat ");
+    gotoxy(x,y);
+  } else if(message==PEROP_DISPLAY4) {
+    od_set_personality("Standard");
+  } else if(message==PEROP_DISPLAY5) {
+    od_set_personality("PCBoard");
+  } else if(message==PEROP_DISPLAY6) {
+    od_set_personality("RemoteAccess");
+  } else if(message==PEROP_DISPLAY7 || message==PEROP_UPDATE7) {
+    x=wherex();
+    y=wherey();
+    textbackground(BLUE);
+    textcolor(WHITE);
+
+    gotoxy(1,24);
+    clreol();
+    cprintf("%s",od_control.od_help_text);
+
+    clreol();
+    textcolor(LIGHTBLUE);
+    cprintf("  [F1]=Main Status Bar [F2]=User Stats [F3]=Personalities");
+
+    gotoxy(x,y);
+  }
+#endif
+}
+
+void
+dump(void)
+{
+  char key;
+  do {
+    scanf("%c",&key);
+  } while (key!='\n');
+}
+
+
+void
+get_bbsname(char bbsname[])
+{
+  INT16 cnt=0;
+  char out[36];
+  INT16 cnto=0;
+
+  while (bbsname[cnt]!=0 && cnto<35) {
+    if (bbsname[cnt]>='a' && bbsname[cnt]<='z') bbsname[cnt]-=32;
+
+    if (bbsname[cnt]>='A' && bbsname[cnt]<='Z') {
+      out[cnto]=bbsname[cnt];
+      cnto++;
+    }
+
+    cnt++;
+  }
+  out[cnto]=0;
+  strcpy(bbsname,out);
+}
+
+
+
+INT16
+seereg(char bbsname[])
+{
+  return TRUE;
+/*  FILE *justfile;
+  char string4[]="PICATAKY";
+  char kod[26];
+  char string[26] = "ABECEDA";
+  INT16 intval;
+  INT16 cnt;
+  INT16 bbsc;
+  INT16 which;
+  INT16 temp,temp2;
+  INT16 ass=0;
+  char string3[]="HLEDA";
+  char string2[]="KURVA";
+
+  ass++;
+
+  strcat(string,string2);
+
+  ass++;
+
+  ch_game_d();
+
+  ass++;
+
+  justfile=ShareFileOpen(KEY_FILENAME,"rb");
+
+  ass++;
+
+  ny_fread(kod,26,1,justfile);
+
+  if(string[6]=='$') {
+    printf("hehe");
+    od_exit(15,TRUE);
+  }
+
+  ass++;
+
+  fclose(justfile);
+
+  ass++;
+
+  strcat(string,string3);
+
+  string3[0]='j';
+
+  ass++;
+
+  string2[2]='#';
+
+  sscanf(kod,"%02d",&intval);
+
+  ass++;
+
+  strcat(string,string4);
+
+
+  if (intval!=strlen(bbsname)) {
+    string[5]=0;
+    ass=0;
+    string[2]='%';
+    string2[2]='k';
+    string3[4]=3;
+    ass=string[8]+string2[3];
+    ass=string[5] * string[3] * string[2];
+    goto ending;
+  }
+
+  ass++;
+
+  intval = kod[0] - '0';
+
+  ass++;
+
+  bbsc=0;
+
+  ass++;
+
+  which=0;
+
+  ass++;
+
+  for (cnt=2;cnt<25;cnt++) {
+    if (bbsname[bbsc]==0) bbsc=0;
+
+    if(string[4]=='(')
+      string[4]='5';
+
+
+    temp2=string[cnt]+intval+bbsname[bbsc];
+
+//    if (kod[cnt]>'Z') kod[cnt]-=('Z'-'A');
+    temp =  (temp2-'A')/('Z'-'A');
+
+    temp2 = temp2 - (('Z'-'A') * temp);
+
+    if(ass!=12) {
+      ass=-8;
+      string[333]=0;
+      string2[333]=0;
+      ass=0;
+      goto ending;
+    }
+
+    if (kod[cnt]!=temp2) {
+      ass=0;
+      string2[2]=2;
+      string3[2]=2;
+      goto ending;
+    }
+
+    if (which==0)
+      which =1;
+    else
+      which =0;
+
+    if(string2[4]=='(')
+      string2[4]='5';
+
+    intval = kod[which] - '0';
+    bbsc++;
+  }
+
+  ass++;
+
+  ending:
+
+  if (ass==13)
+    ass=TRUE;
+
+  if(ass==0)
+    reg_check=784;
+
+  return ass;*/
+}
+
+
+
+
+
+
+/*copy end chars  beginning from beg to dest*/
+/*similiar to strncpy*/
+void
+strzcpy(char dest[],const char src[], INT16 beg,INT16 end)
+{
+  INT16 cnt=0;
+  do
+    dest[cnt++]=src[beg++];
+  while (cnt<=end && src[cnt]!=0);
+  dest[cnt]='\0';
+}
+
+
+
+
+
+void
+ny_kernel(void)
+{
+  if(no_kernel || single_node)
+    return;
+
+  od_kernal();
+
+  no_kernel=TRUE;
+
+  char c_dir;
+//  ffblk ff;
+
+
+  c_dir=c_dir_g;
+
+// if (single_node==FALSE) {
+  ch_flag_d();
+
+//  bdosptr(0x4E,(void *)&ff,0);
+  //fexist(MAINTFLAG_FILENAME)
+  if (fexist(MAINTFLAG_FILENAME)) {
+    FILE *justfile;
+    static char numstr[35],numstr2[14];
+    INT16 intval,
+	INT16used,
+	battled_user = -1;
+
+  //if(0) {
+/* This is terrible - ToDo */
+#ifndef ODPLAT_NIX
+    fcloseall();
+#endif
+    scr_save();
+    od_control.od_disable |= DIS_CARRIERDETECT;
+    ny_line(4,2,0);
+    //Please wait while maintanance runs on another node...
+
+    while (fexist(MAINTFLAG_FILENAME)) {
+      od_kernal();
+      od_sleep(1);
+    }
+
+    ny_line(5,1,1);
+//    od_printf("\n\rThanks For Waiting....\n\r");
+
+    cur_user.days_not_on=1;
+    if (cur_user.rest_where!=NOWHERE) {
+      if (cur_user.hotel_paid_fer>0) cur_user.hotel_paid_fer--;
+      if (cur_user.hotel_paid_fer==0) {
+	ny_line(6,1,1);
+//      od_printf("\n\r`bright`You were kicked out of the hotel\n\r");
+	cur_user.rest_where=NOWHERE;
+      }
+    }
+
+    sprintf(numstr,"u%07d.bfo",nCurrentUserNumber);
+    if (fexist(numstr)) {
+      justfile=ShareFileOpen(numstr,"rb");
+      ny_fread(&battled_user,2,1,justfile);
+      fclose(justfile);
+      ny_remove(numstr);
+    }
+
+    sprintf(numstr,"u%07d.cng",nCurrentUserNumber);
+    if (fexist(numstr)) {
+      justfile=ShareFileOpen(numstr,"rb");
+      ny_fread(&intval,2,1,justfile);
+      fclose(justfile);
+
+      sprintf(numstr,"u%07d.fgg",nCurrentUserNumber);
+      if (fexist(numstr)) {
+
+	sprintf(numstr,"u%07d.fgg",intval);
+	justfile = ShareFileOpen(numstr,"wb");
+	fclose(justfile);
+	sprintf(numstr,"u%07d.atk",nCurrentUserNumber);
+	sprintf(numstr2,"u%07d.atk",intval);
+	rename(numstr,numstr2);
+      }
+
+      sprintf(numstr,"u%07d.chl",nCurrentUserNumber);
+      sprintf(numstr2,"u%07d.chl",intval);
+      rename(numstr,numstr2);
+
+      /*clean up*/
+      sprintf(numstr,"u%07d.*",nCurrentUserNumber);
+      ny_remove(numstr);
+
+      sprintf(numstr,"u%07d.fgc",nCurrentUserNumber);
+      justfile = ShareFileOpen(numstr, "wb");
+      ny_fwrite(&intval,2,1,justfile);
+      fclose(justfile);
+
+      nCurrentUserNumber=intval;
+
+      /* tady se musi zmenit vsechnt flagy......*/
+      sprintf(numstr,"u%07d.sts",nCurrentUserNumber);
+      justfile = ShareFileOpen(numstr, "wb");
+      ny_fwrite(&cur_user,sizeof(user_rec),1,justfile);
+      fclose(justfile);
+
+
+      sprintf(numstr,"u%07d.on",nCurrentUserNumber);
+      justfile = ShareFileOpen(numstr, "a+b");
+      fclose(justfile);
+
+    }
+    if(battled_user>=0) {
+      sprintf(numstr,"u%07d.bfa",battled_user);
+      justfile=ShareFileOpen(numstr,"wb");
+      ny_fwrite(&nCurrentUserNumber,2,1,justfile);
+      fclose(justfile);
+      sprintf(numstr,"u%07d.bfo",nCurrentUserNumber);
+      justfile=ShareFileOpen(numstr,"wb");
+      ny_fwrite(&battled_user,2,1,justfile);
+      fclose(justfile);
+
+    }
+
+    // user is in a battle with an offline user
+    //    wrt_sts();
+    od_control.od_disable &=~ DIS_CARRIERDETECT;
+    sprintf(numstr,"u%07d.rnk",nCurrentUserNumber);
+    if (fexist(numstr)) {
+      justfile=ShareFileOpen(numstr,"rb");
+      ny_fread(&cur_user.rank,2,1,justfile);
+      fclose(justfile);
+      ny_remove(numstr);
+//       sprintf(numstr,"del u%07d.rnk",nCurrentUserNumber);
+//       system(numstr);
+//      wrt_sts();
+    }
+    if(no_wrt_sts==FALSE) {
+//      intval=no_kernel;
+//      no_kernel=FALSE;
+      wrt_sts();
+//      no_kernel=intval;
+    }
+
+    scr_res();
+  }
+
+  if(c_dir==0) ch_game_d();
+
+  no_kernel=FALSE;
+}
+
+
+void    //the lower kernel .... can use inputs and only done when
+fig_ker(void) //waiting for user not in middle of calcs or whatever
+{             //used for fights and messages and online sex
+  od_kernal();
+
+  if(no_kernel || single_node)
+    return;
+
+  char c_dir;
+
+  char numstr[21],omg[51],nam[25],type = 0;
+  FILE *justfile;
+  INT16 intval;
+
+  ny_kernel();
+
+  no_kernel=TRUE;
+  c_dir=c_dir_g;
+
+ //if (single_node==FALSE) {
+  //if u get an online message
+  ch_flag_d();
+  sprintf(numstr,"u%07d.omg",nCurrentUserNumber);
+  if (fexist(numstr)) {
+
+    if(!rip) scr_save(); //try to store the screen
+    //if(rip) ny_clr_scr();
+    if(!rip) ny_line(7,2,1);
+//    od_printf("\n\r\n\r`bright`You get a message!\n\r");
+    justfile=ShareFileOpen(numstr,"rb");
+    do {
+      intval=ny_fread(&omg,51,1,justfile);
+      ny_fread(&nam,25,1,justfile);
+
+      if(omg[0]==27 && intval==1 ) {
+	if(rip) {
+	  ny_line(7,2,1);
+	  od_get_answer("\n\r");
+	}
+	if(omg[1]<10) {
+	  type=1;
+
+	  if(!rip) {
+	    ny_disp_emu("`0");
+	    ny_disp_emu(nam);
+	  } else {
+	    ny_un_emu(nam);
+	    od_printf("\n\r!|10000((%s",nam);
+	  }
+
+	  ny_line(357 + omg[1],0,1);
+	  if(rip) od_get_answer("\n\r");
+
+
+	} else {
+
+	  type=2;
+	  if(!rip) {
+	    ny_disp_emu("`0");
+	    ny_disp_emu(nam);
+	  } else {
+	    ny_un_emu(nam);
+	    od_printf("\n\r!|10000((%s",nam);
+	  }
+	  ny_line(360 + omg[1]-10,0,1);
+	  if(rip) od_get_answer("\n\r");
+
+	}
+      } else {
+
+	if (intval==1) {
+	  if(rip) {
+	    scr_save();
+	    od_disp_str("\n\r");
+	    od_send_file("texti.rip");
+	    ny_disp_emu("`%You get a message!\n\r");
+	  }
+
+	  ny_disp_emu("`0");
+	  ny_disp_emu(omg);
+	  if (nam[0]!=0) {
+	    ny_line(8,0,0);
+//          ny_disp_emu("   `9F`1rom: `@");
+	    ny_disp_emu(nam);
+	    od_printf("\n\r");
+	  }
+	}
+
+      }
+    } while (intval==1);
+    fclose(justfile);
+    ny_remove(numstr);
+    //sprintf(numstr,"del u%07d.omg",nCurrentUserNumber);
+    //system(numstr);
+
+    if(type==1) {
+      ny_line(359,0,0);
+      type=od_get_answer("YN\n\r");
+      if(type=='\n' || type=='\r') type='Y';
+      if(!rip)
+	od_printf("%c\n\r",type);
+      else
+	od_disp_str("\n\r");
+      if(type=='Y')
+	read_mail();
+      ch_flag_d();
+    } else if(rip==FALSE || type==0) {
+      ny_line(1,1,0);
+      od_kernal();
+      od_get_answer("\n\r");
+    }
+
+    if(rip==FALSE || type==0) scr_res(); //try to restore the screen
+  }
+
+  ch_flag_d();
+  sprintf(numstr,"u%07d.chl",nCurrentUserNumber);
+  if (fexist(numstr)) {
+    justfile=ShareFileOpen(numstr,"rb");
+    ny_fread(&intval,2,1,justfile);
+    fclose(justfile);
+    scr_save(); //try to store the screen
+    online_fight(&nCurrentUserNumber,&cur_user,intval);
+    scr_res(); //try to restore the screen
+  }
+
+  if(c_dir==0) ch_game_d();
+  no_kernel=FALSE;
+}
+
+
+
+INT32
+randomf(INT32 max)
+{
+  INT32 fin,
+       ovrflw;
+
+//  randomize();
+
+  fin=xp_random(32767) * xp_random(32767);
+
+  if (fin<0) fin *= -1;
+
+  ovrflw=fin/max;
+
+  fin=fin-(ovrflw*max);
+
+  return fin;
+}
+
+
+void //write current user stats to temp file
+wrt_sts(void)
+{
+  char  numstr[20];
+  FILE *justfile;
+  FILE *scr_file;
+  scr_rec rec;
+  char c_dir;
+//  ffblk ffblk;
+
+  c_dir=c_dir_g;
+
+  if(c_dir==1) ch_game_d();
+
+  no_wrt_sts=TRUE;
+  ny_kernel();
+  no_wrt_sts=FALSE;
+
+  od_control.od_disable |= DIS_CARRIERDETECT;
+
+  if(cur_user.std>AIDS) cur_user.std=AIDS;
+//  if(cur_user.std<NONE) cur_user.std=NONE;
+
+
+  if(cur_user.alive==UNCONCIOUS) cur_user.days_in_hospital=0;
+
+  if (single_node==FALSE) {
+    ch_flag_d();
+    sprintf(numstr,"u%07d.rnk",nCurrentUserNumber);
+    if (fexist(numstr)) {
+      justfile=ShareFileOpen(numstr,"rb");
+      ny_fread(&cur_user.rank,2,1,justfile);
+      fclose(justfile);
+      ny_remove(numstr);
+//      sprintf(numstr,"del u%07d.rnk",nCurrentUserNumber);
+//      system(numstr);
+    }
+    sprintf(numstr,"u%07d.sts",nCurrentUserNumber);
+    justfile = ShareFileOpen(numstr, "w+b");
+    ny_fwrite(&cur_user,sizeof(user_rec),1,justfile);
+    fclose(justfile);
+  } else {
+    ch_game_d();
+    WriteCurrentUser();
+//    justfile = fopen(USER_FILENAME, "r+b");
+//    fseek(justfile,nCurrentUserNumber * sizeof(user_rec),SEEK_SET);
+//    fwrite(&cur_user,sizeof(user_rec),1,justfile);
+//    fclose(justfile);
+  }
+  strcpy(rec.name,cur_user.name);
+  rec.nation=cur_user.nation;
+  rec.level=cur_user.level;
+  rec.points=cur_user.points;
+  rec.alive=cur_user.alive;
+  rec.sex=cur_user.sex;
+  rec.user_num=nCurrentUserNumber;
+  rec.online=TRUE;
+
+  ch_game_d();
+  scr_file=ShareFileOpen(SCR_FILENAME,"r+b");
+  fseek(scr_file, (INT32)cur_user.rank * sizeof(scr_rec), SEEK_SET);
+  ny_fwrite(&rec, sizeof(scr_rec), 1, scr_file);
+  fclose(scr_file);
+
+  od_control.od_disable &=~ DIS_CARRIERDETECT;
+  if(c_dir==1)
+    ch_flag_d();
+  else
+    ch_game_d();
+}
+
+
+
+
+void
+exit_ops(void)
+{
+	FILE* justfile;
+	char numstr[20];
+	scr_rec srec;
+//      ffblk ffblk;
+	INT16 intval;
+
+	wrt_sts();
+
+	if(rip) {
+	  ny_clr_scr();
+	  od_disp_str("\n\r!|10000$SBARON$$HKEYON$|#|#|#\n\r");
+	  od_control.user_screen_length=temp_len_stor;
+	  od_control.user_rip=temp_rip_stor;
+	  od_control.user_ansi=temp_avt_stor;
+	  od_control.user_avatar=temp_ans_stor;
+	}
+
+	if (cur_user.hunger>=100) { //user died of hunger today
+	  cur_user.hunger=0;
+	  Die(2);
+	}
+
+
+	/*Print return message*/
+
+	if (registered) {
+	  ny_disp_emu("\n\r\n\r`@R`4eturning you to `@");
+	  ny_disp_emu(od_control.system_name);
+	  ny_disp_emu("`4...");
+	} else {
+	  ny_disp_emu("\n\r\n\r`@R`4eturning you to `%UNREGISTERED BBS`4...\n\r");
+	}
+
+	//od_set_statusline(STATUS_NONE);
+
+	strcpy(od_control.user_name,uname);
+
+		/*user offline, delete temp files and flags*/
+	ch_flag_d();
+	sprintf(numstr,"mnu%d.dat",od_control.od_node);
+	ny_remove(numstr);
+	sprintf(numstr,"fev%d.dat",od_control.od_node);
+	ny_remove(numstr);
+
+	sprintf(numstr,"u%07d.bfo",nCurrentUserNumber);
+	if (fexist(numstr)) {
+	  justfile=ShareFileOpen(numstr,"rb");
+	  ny_fread(&intval,2,1,justfile);
+	  fclose(justfile);
+	  sprintf(numstr,"u%07d.bfa",intval);
+	  ny_remove(numstr);
+	}
+
+	sprintf(numstr,"u%07d.swp",nCurrentUserNumber);
+	if (fexist(numstr)) {
+	  justfile=ShareFileOpen(numstr,"rb");
+	  ny_fread(&cur_user.arm,2,1,justfile);
+	  fclose(justfile);
+	  ny_remove(numstr);
+	}
+
+	sprintf(numstr,"u%07d.*",nCurrentUserNumber);
+	if (fexist(numstr)) {
+	//  sprintf(numstr,"u%07d.*",nCurrentUserNumber);
+	  ny_remove(numstr);
+	}
+
+	/*write stats to usr file*/
+	WriteCurrentUser();
+
+
+	if(single_node==FALSE) {
+	  ch_flag_d();
+	  /*send message to all online users*/
+	  if (glob("u???????.on",0,NULL,&ff)==0) {
+	    for(fname=ff.gl_pathv;*fname != NULL;fname++) {
+	      strcpy(numstr,*fname);
+	      numstr[10]='m';
+	      numstr[11]='g';
+	      numstr[12]=0;
+	      justfile=ShareFileOpen(numstr,"a+b");
+	      numstr[0]=27;
+	      numstr[1]=11;
+	      ny_fwrite(&numstr,51,1,justfile);
+	      ny_fwrite(&cur_user.name,25,1,justfile);
+	      fclose(justfile);
+	    }
+		globfree(&ff);
+	  }
+	}
+	strcpy(srec.name,cur_user.name);
+	srec.nation=cur_user.nation;
+	srec.level=cur_user.level;
+	srec.points=cur_user.points;
+	srec.alive=cur_user.alive;
+	srec.sex=cur_user.sex;
+	srec.user_num=nCurrentUserNumber;
+	srec.online=FALSE;
+
+	/*disable online flag in the scr file*/
+	ch_game_d();
+	justfile = ShareFileOpen(SCR_FILENAME,"r+b");
+	fseek(justfile, (INT32)cur_user.rank * sizeof(scr_rec),SEEK_SET);
+	ny_fwrite(&srec,sizeof(scr_rec),1,justfile);
+	fclose(justfile);
+
+	/*create score files*/
+	if (do_scr_files==TRUE) {
+	  ny_line(9,2,0);
+	  MakeFiles();
+	  ny_line(10,0,1);
+	}
+
+	for(INT16 i=0;i<badwordscnt;i++)
+	  free(badwords[i]);
+}
+
+
+
+void
+Maintanance(void)
+{
+	FILE *fpUserFile;
+	FILE *scr_file;
+	FILE *justfile;
+	FILE *njustfile;
+	FILE *delfile;
+	char numstr[45],numstr2[14];
+	scr_rec scr_user;
+	user_rec urec;
+	INT16 intval;
+	INT16 user_num=0;
+	INT16 user_num_w=0;
+	date    today,
+		lastday;
+//      struct ffblk ffblk;
+
+
+  if(registered==FALSE) bank_interest=0;
+
+  if(rip) ny_clr_scr();
+
+  ny_line(11,2,1);
+//  od_printf("\n\r\n\r`cyan`### Checking for maintanance running\n\r");
+
+  ch_flag_d();
+  if (!fexist(MAINTFLAG_FILENAME)) {
+
+	no_kernel=TRUE;
+
+
+	if(forced_maint==FALSE) {
+	  ny_line(12,0,1);
+//        od_printf("### Checking for last maintanance\n\r");
+
+	  getdate(&today);
+
+	  ch_game_d();
+	  if (fexist(LASTMAINT_FILENAME)) {
+	    fpUserFile = ShareFileOpen(LASTMAINT_FILENAME, "r+b");
+	    ny_fread(&lastday, sizeof(date), 1, fpUserFile);
+	    if (lastday.da_year==today.da_year && lastday.da_mon==today.da_mon && lastday.da_day==today.da_day) {
+	      fclose(fpUserFile);
+	      return;
+	    }
+
+/*        if (do_maint==FALSE) {
+	    sprintf(numstr,"u%07d.nmt",nCurrentUserNumber);
+	    if(!fexist(numstr))
+	      cur_user.days_not_on++;
+	    fclose(fpUserFile);
+	    return;
+	  }*/
+	    ch_flag_d();
+	    justfile = ShareFileOpen(MAINTFLAG_FILENAME, "a+b");
+	    fclose(justfile);
+	    fseek(fpUserFile, (INT32)0, SEEK_SET);
+	    ny_fwrite(&today, sizeof(date), 1, fpUserFile);
+	    fclose(fpUserFile);
+	  } else {
+/*        if (do_maint==FALSE) {
+	    cur_user.days_not_on+=1;
+	    return;
+	  }*/
+	    ch_flag_d();
+	    justfile = ShareFileOpen(MAINTFLAG_FILENAME, "wb");
+	    fclose(justfile);
+	    ch_game_d();
+	    fpUserFile = ShareFileOpen(LASTMAINT_FILENAME, "wb");
+	    ny_fwrite(&today, sizeof(date), 1, fpUserFile);
+	    fclose(fpUserFile);
+	  }
+	} else {
+	  ch_flag_d();
+	  justfile = ShareFileOpen(MAINTFLAG_FILENAME, "a+b");
+	  fclose(justfile);
+	  getdate(&today);
+	  ch_game_d();
+	  fpUserFile = ShareFileOpen(LASTMAINT_FILENAME, "wb");
+	  ny_fwrite(&today, sizeof(date), 1, fpUserFile);
+	  fclose(fpUserFile);
+	}
+	ch_game_d();
+	if (fexist(GAMEDAY_FILENAME)) {
+	  justfile=ShareFileOpen(GAMEDAY_FILENAME,"r+b");
+	  ny_fread(&intval,2,1,justfile);
+	  intval++;
+	  fseek(justfile,0,SEEK_SET);
+	  ny_fwrite(&intval,2,1,justfile);
+	  fclose(justfile);
+	} else {
+	  ch_game_d();
+	  justfile=ShareFileOpen(GAMEDAY_FILENAME,"wb");
+	  intval=1;
+	  ny_fwrite(&intval,2,1,justfile);
+	  fclose(justfile);
+	}
+
+	ny_line(13,0,1);
+//      od_printf("### Running daily maintance\n\r");
+	//get rid of all the played today files ....
+	ch_flag_d();
+	if(fexist("*.tdp"))
+	  ny_remove("*.tdp");
+
+	ch_game_d();
+	if (fexist(YESNEWS_FILENAME)) ny_remove(YESNEWS_FILENAME);
+	if (fexist(TODNEWS_FILENAME)) copyfile(TODNEWS_FILENAME,YESNEWS_FILENAME);
+//        ny_remove(TODNEWS_FILENAME);
+  //    }
+	fpUserFile = ShareFileOpen(TODNEWS_FILENAME, "w+b");
+	fclose(fpUserFile);
+	fpUserFile = ShareFileOpen(YESNEWS_FILENAME, "a+b");
+	fclose(fpUserFile);
+
+
+	/* Begin with the current user record number set to 0. */
+	user_num = 0;
+	user_num_w = 0;
+
+	/*delete all change files cuz they're not needed and will mess up*/
+	ch_flag_d();
+	if (fexist("*.cng")) ny_remove("*.cng");
+
+	/*if fast_mail_index founddelete it*/
+//      if (fexist("fastmail.idx")) ny_remove("fastmail.idx");
+
+	/*delete scores index file*/
+	ch_game_d();
+    //  if (fexist(SCR_FILENAME)) ny_remove(SCR_FILENAME);
+
+//      if (fexist(USER_BACK_FILENAME)) ny_remove(USER_BACK_FILENAME);
+	copyfile(USER_FILENAME,USER_BACK_FILENAME);
+  //    ny_remove(USER_FILENAME);
+	scr_file = ShareFileOpen(SCR_FILENAME, "wb");
+	justfile = ShareFileOpen(USER_BACK_FILENAME, "rb");
+	fpUserFile = ShareFileOpen(USER_FILENAME, "wb");
+
+	/* Loop for each record in the file */
+	ny_line(14,0,1);
+//      od_printf("### Packing and updating user file and creating scorefile\n\r");
+	while(ny_fread(&urec, sizeof(user_rec), 1, justfile) == 1)
+		{
+		  if (((++urec.days_not_on)<=delete_after) && urec.alive!=DEAD) {
+		    urec.rank=user_num_w;
+
+		    urec.bank *= 1.0+ (bank_interest/100.0);
+
+		    if (urec.alive==UNCONCIOUS && (urec.days_in_hospital++)>=2 ) {
+		      urec.alive=ALIVE;
+		      urec.hitpoints=urec.maxhitpoints;
+		      urec.days_in_hospital=0;
+		      od_printf("### %s kicked out of the hospital\n\r",ny_un_emu(urec.name,numstr));
+		    }
+		    if (urec.rest_where!=NOWHERE) {
+		      if (urec.hotel_paid_fer==0) {
+			urec.rest_where=NOWHERE;
+			od_printf("### %s was kicked out of the hotel\n\r",ny_un_emu(urec.name,numstr));
+		      } else {
+			urec.hotel_paid_fer--;
+		      }
+		    }
+		    fseek(fpUserFile, (INT32)user_num_w * sizeof(user_rec), SEEK_SET);
+		    ny_fwrite(&urec, sizeof(user_rec), 1, fpUserFile);
+		    //check if on-line
+		    if (single_node==FALSE) {
+		      ch_flag_d();
+		      sprintf(numstr, "u%07d.bfa",user_num); //user in a battle
+		      if (fexist(numstr)) {
+			if (user_num!=user_num_w) {
+			  njustfile = ShareFileOpen(numstr, "rb");
+			  ny_fread(&intval,2,1,njustfile);
+			  fclose(njustfile);
+			  ny_remove(numstr);
+			  sprintf(numstr, "u%07d.bfo",intval);
+			  njustfile = ShareFileOpen(numstr, "wb");
+			  ny_fwrite(&user_num_w,2,1,njustfile);
+			  fclose(njustfile);
+			  //sprintf(numstr, "del u%07d.bfa",user_num);
+			  //system(numstr); //see above!
+			}
+		      }
+		      sprintf(numstr,"u%07d.on",user_num);
+		      if (fexist(numstr)) {
+			scr_user.online=TRUE;
+			sprintf(numstr,"u%07d.sts",user_num);
+			njustfile = ShareFileOpen(numstr, "r+b");
+			ny_fread(&urec,sizeof(user_rec),1,njustfile);
+			fclose(njustfile);
+			if (user_num!=user_num_w) {
+			  ch_game_d();
+			  sprintf(numstr,"u%07d.inf",user_num);
+			  if (fexist(numstr)) {
+			    sprintf(numstr,"u%07d.inf",user_num);
+			    sprintf(numstr2,"u%07d.inf",user_num_w);
+			    rename(numstr,numstr2);
+			  }
+			  ch_flag_d();
+			  sprintf(numstr,"u%07d.cng",user_num);
+			  njustfile = ShareFileOpen(numstr, "a+b");
+			  ny_fwrite(&user_num_w,2,1,njustfile);
+			  fclose(njustfile);
+			}
+		      } else {
+			scr_user.online=FALSE;
+		      }
+		    } else {
+		      scr_user.online=FALSE;
+		    }
+
+
+
+		    strcpy(scr_user.name,urec.name);
+		    scr_user.nation=urec.nation;
+		    scr_user.level=urec.level;
+		    scr_user.points=urec.points;
+		    scr_user.alive=urec.alive;
+		    scr_user.sex=urec.sex;
+		    scr_user.user_num=user_num_w;
+
+
+		    ny_fwrite(&scr_user, sizeof(scr_rec), 1, scr_file);
+
+		    user_num_w++;
+		  } else {
+		    od_printf("### Deleting (%s)\n\r",ny_un_emu(urec.name,numstr));
+		    ny_remove(SENTLIST_FILENAME);
+		    /*ch_game_d();
+		    delfile=ShareFileOpen(DELUSER_FILENAME,"a+b");
+		    ny_fwrite(&urec.bbsname,36,1,delfile);
+		    fclose(delfile);*/
+		  }
+
+		  /* Move user record number to next user record. */
+		  user_num++;
+		}
+	fclose(fpUserFile);
+	fclose(justfile);
+	fclose(scr_file);
+	ny_line(15,0,1);
+//      od_printf("### User file done...\n\r");
+	ny_line(16,0,1);
+//      od_printf("### Sorting SCR file...\n\r");
+	SortScrFile(-1,user_num_w);
+	if (single_node==FALSE) ChangeOnlineRanks();
+	ny_line(17,0,1);
+//      od_printf("### Checking for mail index file...\n\r");
+	ch_game_d();
+	if (fexist(MAIL_INDEX)) {
+
+	  mail_idx_type mail_idx;
+//        long fileposr,fileposw;
+	  INT32 mlinew,mliner;
+	  INT32 cnt;
+	  char line[80];
+	  FILE *rdonly1;
+	  FILE *rdonly2;
+	  ch_game_d();
+	  //if (fexist(DELUSER_FILENAME)) {
+	    cnt=0;
+	    ny_line(18,0,1);
+//          od_printf("### Packing mail index file...\n\r");
+	    justfile=ShareFileOpen(MAIL_INDEX,"r+b");
+	    fpUserFile=ShareFileOpen(USER_FILENAME,"rb");
+	    ny_line(19,0,1);
+//          od_printf("### Deleting messages for dead users...\n\r");
+	    while (ny_fread(&mail_idx,sizeof(mail_idx_type),1,justfile)==1) {
+	      fseek(fpUserFile,(INT32)0,SEEK_SET);
+	      mail_idx.deleted=TRUE;
+	      while(ny_fread(&urec,sizeof(user_rec),1,fpUserFile)==1) {
+		if (strcmp(urec.bbsname,mail_idx.recverI)==0) {
+		  mail_idx.deleted=FALSE;
+		  break;
+		}
+	      }
+	      if(mail_idx.deleted==TRUE) {
+		fseek(justfile,(INT32)cnt*sizeof(mail_idx_type),SEEK_SET);
+		ny_fwrite(&mail_idx,sizeof(mail_idx_type),1,justfile);
+	      }
+	      cnt++;
+	    }
+	    fclose(justfile);
+	    fclose(fpUserFile);
+	    //ny_remove(DELUSER_FILENAME);
+	  //}
+	  ch_game_d();
+	  copyfile(MAIL_INDEX,MAIL_BACKUP_INDEX);
+	  copyfile(MAIL_FILENAME,MAIL_BACKUP_FILENAME);
+//        ny_remove(MAIL_INDEX);
+  //      ny_remove(MAIL_FILENAME);
+
+	  rdonly1=ShareFileOpen(MAIL_BACKUP_INDEX,"rb");
+	  rdonly2=ShareFileOpen(MAIL_BACKUP_FILENAME,"rb");
+	  justfile=ShareFileOpen(MAIL_INDEX,"wb");
+	  njustfile=ShareFileOpen(MAIL_FILENAME,"wb");
+	  mlinew=0;
+	  mliner=0;
+//        fileposr=0;
+//        fileposw=0;
+	  ny_line(20,0,1);
+//        od_printf("### Deleting read messages...\n\r");
+	  while (ny_fread(&mail_idx,sizeof(mail_idx_type),1,rdonly1)==1) {
+	    if (mail_idx.deleted==FALSE) {
+	      mail_idx.location=mlinew;
+//            fseek(justfile,fileposw,SEEK_SET);
+	      ny_fwrite(&mail_idx,sizeof(mail_idx_type),1,justfile);
+	      cnt=0;
+
+	      fseek(rdonly2,mliner*80,SEEK_SET);
+	      while (cnt<mail_idx.length) {
+		ny_fread(&line,80,1,rdonly2);
+//              fseek(njustfile,mlinew,SEEK_SET);
+		ny_fwrite(&line,80,1,njustfile);
+		cnt++;
+	      }
+	      mlinew+=mail_idx.length;
+//            fileposw+=sizeof(mail_idx_type);
+	    }// else {
+	    //  od_printf(".");
+	    //}
+	    mliner+=mail_idx.length;
+//          fileposr+=sizeof(mail_idx_type);
+//          fseek(justfile,fileposr,SEEK_SET);
+	  }
+	  fclose(justfile);
+	  fclose(njustfile);
+	  fclose(rdonly1);
+	  fclose(rdonly2);
+	  //od_printf("\n\r");
+	  ny_line(21,0,1);
+//        od_printf("### Mail file done...\n\r");
+	}
+	if (fexist(IBBS_MAIL_INDEX)) {
+	  ibbs_mail_type ibmail;
+//        long fileposr,fileposw;
+//        long mlinew,mliner;
+	  INT32 cnt;
+//        char line[80];
+	  FILE *rdonly1;
+//        FILE *rdonly2;
+	  ch_game_d();
+	  //if (fexist(DELUSER_FILENAME)) {
+	    cnt=0;
+	    ny_line(447,0,1);
+//          od_printf("### Packing IBBS mail index file...\n\r");
+	    justfile=ShareFileOpen(IBBS_MAIL_INDEX,"r+b");
+	    fpUserFile=ShareFileOpen(USER_FILENAME,"rb");
+	    ny_line(19,0,1);
+//          od_printf("### Deleting messages for dead users...\n\r");
+	    while (ny_fread(&ibmail,sizeof(ibbs_mail_type),1,justfile)==1) {
+	      fseek(fpUserFile,(INT32)0,SEEK_SET);
+	      ibmail.deleted=TRUE;
+	      while(ny_fread(&urec,sizeof(user_rec),1,fpUserFile)==1) {
+		if (strcmp(urec.bbsname,ibmail.recverI)==0) {
+		  ibmail.deleted=FALSE;
+		  break;
+		}
+	      }
+	      if(ibmail.deleted==TRUE) {
+		fseek(justfile,(INT32)cnt*sizeof(ibbs_mail_type),SEEK_SET);
+		ny_fwrite(&ibmail,sizeof(ibbs_mail_type),1,justfile);
+	      }
+	      cnt++;
+	    }
+	    fclose(justfile);
+	    fclose(fpUserFile);
+	    //ny_remove(DELUSER_FILENAME);
+	  //}
+	  ch_game_d();
+	  copyfile(IBBS_MAIL_INDEX,IBBS_BACKUP_MAIL_INDEX);
+//        ny_remove(IBBS_MAIL_INDEX);
+
+	  rdonly1=ShareFileOpen(IBBS_BACKUP_MAIL_INDEX,"rb");
+	  justfile=ShareFileOpen(IBBS_MAIL_INDEX,"wb");
+	  ny_line(20,0,1);
+//        od_printf("### Deleting read messages...\n\r");
+	  while (ny_fread(&ibmail,sizeof(ibbs_mail_type),1,rdonly1)==1) {
+	    if (ibmail.deleted==FALSE) {
+
+	      ny_fwrite(&ibmail,sizeof(ibbs_mail_type),1,justfile);
+	    }
+	  }
+	  fclose(justfile);
+	  fclose(rdonly1);
+	  ny_line(21,0,1);
+//        od_printf("### Mail file done...\n\r");
+	}
+
+
+	ny_line(22,0,1);
+//      od_printf("### Cleaning up...\n\r");
+	ch_game_d();
+	if (maint_exec[0]!=0) {
+	  ny_line(23,0,1);
+//        od_printf("### Executing custom maintanance program\n\r");
+	  od_spawn(maint_exec);
+	}
+	if (fexist(TRDMAINT_FILENAME)) {
+	  ny_line(23,0,1);
+//        od_printf("### Executing custom maintanance program\n\r");
+	  CreateDropFile(FALSE);
+	  od_spawn(TRDMAINT_FILENAME);
+	  ny_remove(TRDMAINT_LIST_FILENAME);
+	}
+
+	ch_flag_d();
+	ny_remove(MAINTFLAG_FILENAME);
+	no_kernel=FALSE;
+	ny_remove("nyerr~~~.~~~");
+  }
+}
+
+
+
+
+void
+ChangeOnlineRanks(void)
+{
+  if (glob("u???????.on",0,NULL,&ff)) {
+    FILE *justfile;
+    char numstr[20];
+    INT16 intval;
+    user_rec urec;
+    ch_flag_d();
+    for(fname=ff.gl_pathv;*fname != NULL;fname++) {
+      strcpy(numstr,*fname);
+      numstr[0]='0';
+      numstr[8]=0;
+      sscanf(numstr,"%d",&intval);
+      ch_game_d();
+      justfile=ShareFileOpen(USER_FILENAME,"rb");
+      fseek(justfile,(INT32)intval*sizeof(user_rec),SEEK_SET);
+      ny_fread(&urec,sizeof(user_rec),1,justfile);
+      fclose(justfile);
+      strcpy(numstr,*fname);
+      numstr[9]='r';
+      numstr[10]='n';
+      numstr[11]='k';
+      numstr[12]=0;
+      ch_flag_d();
+      justfile=ShareFileOpen(numstr,"wb");
+      ny_fwrite(&urec.rank,2,1,justfile);
+      fclose(justfile);
+
+    }
+  }
+}
+
+
+
+void
+CrashRecovery(void)
+{
+  FILE *fpUserFile;
+  FILE *scr_file;
+  FILE *justfile;
+  FILE *bakfile;
+  char numstr[36];
+  scr_rec scr_user;
+  user_rec urec;
+  INT16 intval;
+  INT16 user_num=0;
+//  struct ffblk ffblk;
+
+  no_kernel=TRUE;
+
+  ny_line(24,0,1);
+//  od_printf("`cyan`### Running Crash Recovery\n\r");
+
+  /* Begin with the current user record number set to 0. */
+  user_num = 0;
+
+  /*delete scores index file*/
+  ch_game_d();
+  if (fexist(SCR_FILENAME)) ny_remove(SCR_FILENAME);
+
+  /*delete maintanance running flag file*/
+  ch_flag_d();
+  if (fexist(MAINTFLAG_FILENAME)) ny_remove(MAINTFLAG_FILENAME);
+  /*delete all change files cuz they're not needed and will mess up*/
+  if (fexist("*.cng")) ny_remove("*.cng");
+
+  ch_game_d();
+  scr_file = ShareFileOpen(SCR_FILENAME, "wb");
+  copyfile(USER_FILENAME,USER_BACK_FILENAME);
+//  ny_remove(USER_FILENAME);
+  fpUserFile = ShareFileOpen(USER_FILENAME, "wb");
+  bakfile = ShareFileOpen(USER_BACK_FILENAME, "rb");
+
+  /* Loop for each record in the file */
+  ny_line(25,0,1);
+//  od_printf("### Updating (no maintanance) user file and creating scorefile\n\r");
+  ch_flag_d();
+  while(ny_fread(&urec, sizeof(user_rec), 1, bakfile) == 1 && user_num<=MAX_USERS) {
+//    ch_flag_d();
+    sprintf(numstr, "u%07d.on",user_num);
+    if (fexist(numstr)) {
+      sprintf(numstr, "u%07d.sts",user_num);
+      if (fexist(numstr)) {
+	justfile = ShareFileOpen(numstr, "rb");
+	if(ny_fread(&urec, sizeof(user_rec), 1, justfile)!=1) {
+	  fseek(bakfile, (INT32)user_num * sizeof(user_rec), SEEK_SET);
+	  ny_fread(&urec, sizeof(user_rec), 1, bakfile);
+	}
+	fclose(justfile);
+      }
+    }
+    sprintf(numstr, "u%07d.*",user_num);
+    if (fexist(numstr)) {
+//      ny_remove(numstr);
+      sprintf(numstr, "u%07d.*",user_num);
+      ny_remove(numstr);
+    }
+    urec.rank=user_num;
+//    fseek(fpUserFile, (INT32)user_num * sizeof(user_rec), SEEK_SET);
+    ny_fwrite(&urec, sizeof(user_rec), 1, fpUserFile);
+
+    //offline records all
+    scr_user.online=FALSE;
+    strcpy(scr_user.name,urec.name);
+    scr_user.nation=urec.nation;
+    scr_user.level=urec.level;
+    scr_user.points=urec.points;
+    scr_user.alive=urec.alive;
+    scr_user.sex=urec.sex;
+    scr_user.user_num=user_num;
+    ny_fwrite(&scr_user, sizeof(scr_rec), 1, scr_file);
+
+    /* Move user record number to next user record. */
+    user_num++;
+  }
+  fclose(fpUserFile);
+  fclose(scr_file);
+  fclose(bakfile);
+  ny_line(26,0,1);
+//  od_printf("### User file done...\n\r");
+  ny_line(27,0,1);
+//  od_printf("### Sorting new SCR file...\n\r");
+  SortScrFile(-1,user_num);
+  ny_remove("mnu*.dat");
+  ny_remove("fev*.dat");
+  ny_remove("n???????.sts");
+  ny_remove("n???????.stt");
+//  ny_remove("nyerr~~~.~~~");
+  no_kernel=FALSE;
+}
+
+
+
+
+void
+SortScrFile(INT16 usr,INT16 max) // pebble sorting of scorefile
+{
+  FILE *justfile;
+  FILE *scr_file;
+  FILE *fpUserFile;
+  FILE *njustfile;
+  INT16 crnt1,crnt2,cnt,sorted;
+  scr_rec rec[2];
+  user_rec urec;
+  char numstr[20];
+//  ffblk ffblk;
+
+  if (usr==-1) {
+    ch_game_d();
+    scr_file=ShareFileOpenAR(SCR_FILENAME,"r+b");
+    fpUserFile=ShareFileOpenAR(USER_FILENAME,"r+b");
+    do {
+      cnt=1;
+      sorted=TRUE;
+
+
+      while (cnt<max) {
+	fseek(scr_file, (INT32)(cnt-1) * sizeof(scr_rec), SEEK_SET);
+	ny_fread(&rec[0], sizeof(scr_rec), 1, scr_file);
+
+
+	fseek(scr_file, (INT32)cnt * sizeof(scr_rec), SEEK_SET);
+	if (ny_fread(&rec[1], sizeof(scr_rec), 1, scr_file)!=1) {
+/* This is terrible - ToDo */
+#ifndef ODPLAT_NIX
+	  fcloseall();
+#endif
+	  return;
+	}
+
+	if (rec[0].points<rec[1].points) { // switch records
+
+	  sorted=FALSE; // run another round
+	  fseek(fpUserFile, (INT32)rec[0].user_num * sizeof(user_rec), SEEK_SET);
+	  ny_fread(&urec,sizeof(user_rec),1,fpUserFile);
+	  urec.rank=cnt;
+
+	  fseek(fpUserFile, (INT32)rec[0].user_num * sizeof(user_rec), SEEK_SET);
+	  ny_fwrite(&urec,sizeof(user_rec),1,fpUserFile);
+
+	  fseek(fpUserFile, (INT32)rec[1].user_num * sizeof(user_rec), SEEK_SET);
+	  ny_fread(&urec,sizeof(user_rec),1,fpUserFile);
+	  urec.rank=cnt-1;
+
+	  fseek(fpUserFile, (INT32)rec[1].user_num * sizeof(user_rec), SEEK_SET);
+	  ny_fwrite(&urec,sizeof(user_rec),1,fpUserFile);
+
+	  do fseek(scr_file, (INT32)(cnt-1) * sizeof(scr_rec), SEEK_SET);
+	  while (ny_fwrite(&rec[1],sizeof(scr_rec),1,scr_file)!=1);
+
+	  do fseek(scr_file, (INT32)cnt * sizeof(scr_rec), SEEK_SET);
+	  while (ny_fwrite(&rec[0],sizeof(scr_rec),1,scr_file)!=1);
+
+	}
+	cnt++;
+      }
+      fseek(fpUserFile, (INT32)0, SEEK_SET);
+      fseek(scr_file, (INT32)0, SEEK_SET);
+      max--;
+    } while (sorted==FALSE);
+    fclose(scr_file);
+    fclose(fpUserFile);
+
+  } else { // sort in a certain user either current or an offline user
+    ch_game_d();
+   // if(no_kernel==TRUE) {
+      scr_file=ShareFileOpenAR(SCR_FILENAME,"r+b");
+      fpUserFile=ShareFileOpenAR(USER_FILENAME,"r+b");
+/*    } else {
+      no_kernel=TRUE;
+      scr_file=ShareFileOpenAR(SCR_FILENAME,"r+b");
+      fpUserFile=ShareFileOpenAR(USER_FILENAME,"r+b");
+      no_kernel=FALSE;
+    }*/
+
+    if (usr==nCurrentUserNumber) {
+      cnt=cur_user.rank;
+    } else {
+      fseek(fpUserFile, (INT32)usr * sizeof(user_rec), SEEK_SET);
+      ny_fread(&urec, sizeof(user_rec), 1, fpUserFile);
+      cnt=urec.rank;
+    }
+    //od_printf("\n\r\n\r%d\n\r\n\r",cnt);
+
+    crnt1=0;
+    crnt2=1;
+
+    strcpy(rec[crnt1].name,cur_user.name);
+    rec[crnt1].nation=cur_user.nation;
+    rec[crnt1].level=cur_user.level;
+    rec[crnt1].points=cur_user.points;
+    rec[crnt1].alive=cur_user.alive;
+    rec[crnt1].sex=cur_user.sex;
+    rec[crnt1].user_num=nCurrentUserNumber;
+    rec[crnt1].online=TRUE;
+
+    fseek(scr_file, (INT32)cur_user.rank * sizeof(scr_rec), SEEK_SET);
+    ny_fwrite(&rec[crnt1], sizeof(scr_rec), 1, scr_file);
+
+    if (cnt>0) {
+      ch_flag_d();
+      do {
+	sorted=TRUE;
+
+	fseek(scr_file, (INT32)(cnt-1) * sizeof(scr_rec), SEEK_SET);
+	ny_fread(&rec[crnt1], sizeof(scr_rec), 1, scr_file);
+
+	fseek(scr_file, (INT32)cnt * sizeof(scr_rec), SEEK_SET);
+	ny_fread(&rec[crnt2], sizeof(scr_rec), 1, scr_file);
+
+	if (rec[crnt1].points<rec[crnt2].points) { // switch records
+
+	  sorted=FALSE; // run another round
+
+	  sprintf(numstr,"u%07d.on",rec[crnt1].user_num);
+	  if (single_node==FALSE && fexist(numstr)) {
+	    sprintf(numstr,"u%07d.rnk",rec[crnt1].user_num);
+	    njustfile = ShareFileOpen(numstr, "wb");
+	    ny_fwrite(&cnt,2,1,njustfile);
+	    fclose(njustfile);
+	  } else {
+	    fseek(fpUserFile, (INT32)rec[crnt1].user_num * sizeof(user_rec), SEEK_SET);
+	    ny_fread(&urec,sizeof(user_rec),1,fpUserFile);
+	    urec.rank=cnt;
+	    fseek(fpUserFile, (INT32)rec[crnt1].user_num * sizeof(user_rec), SEEK_SET);
+	    ny_fwrite(&urec,sizeof(user_rec),1,fpUserFile);
+	  }
+
+	  if (usr==nCurrentUserNumber) {
+	    cur_user.rank=cnt-1;
+	  } else {
+	    sprintf(numstr,"u%07d.on",rec[crnt2].user_num);
+	    if (single_node==FALSE && fexist(numstr)) {
+	      sprintf(numstr,"u%07d.rnk",rec[crnt2].user_num);
+	      njustfile = ShareFileOpen(numstr, "wb");
+	      cnt--;
+	      ny_fwrite(&cnt,2,1,njustfile);
+	      cnt++;
+	      fclose(njustfile);
+	    } else {
+	      fseek(fpUserFile, (INT32)rec[crnt2].user_num * sizeof(user_rec), SEEK_SET);
+	      ny_fread(&urec,sizeof(user_rec),1,fpUserFile);
+	      urec.rank=cnt-1;
+	      fseek(fpUserFile, (INT32)rec[crnt2].user_num * sizeof(user_rec), SEEK_SET);
+	      ny_fwrite(&urec,sizeof(user_rec),1,fpUserFile);
+	    }
+	  }
+
+	  fseek(scr_file, (INT32)(cnt-1) * sizeof(scr_rec), SEEK_SET);
+	  ny_fwrite(&rec[crnt2],sizeof(scr_rec),1,scr_file);
+	  fseek(scr_file, (INT32)cnt * sizeof(scr_rec), SEEK_SET);
+	  ny_fwrite(&rec[crnt1],sizeof(scr_rec),1,scr_file);
+
+	}
+	cnt--;
+      } while (sorted==FALSE && cnt>0);
+    }
+
+    fclose(scr_file);
+    fclose(fpUserFile);
+  }
+}
+
+
+
+void
+SortScrFileB(INT16 usr) // pebble sorting of scorefile
+{
+  FILE *justfile;
+  FILE *scr_file;
+  FILE *fpUserFile;
+  FILE *njustfile;
+  INT16 crnt1,crnt2,cnt,sorted,cont;
+  scr_rec rec[2];
+  user_rec urec;
+  char numstr[20];
+//  ffblk ffblk;
+
+ // sort in a certain user either current or an offline user
+    ch_game_d();
+    scr_file=ShareFileOpenAR(SCR_FILENAME,"r+b");
+    fpUserFile=ShareFileOpenAR(USER_FILENAME,"r+b");
+    if (usr==nCurrentUserNumber) {
+      cnt=cur_user.rank;
+    } else {
+      fseek(fpUserFile, (INT32)usr * sizeof(user_rec), SEEK_SET);
+      ny_fread(&urec, sizeof(user_rec), 1, fpUserFile);
+      cnt=urec.rank;
+    }
+    //od_printf("\n\r\n\r%d\n\r\n\r",cnt);
+
+    crnt1=0;
+    crnt2=1;
+
+    strcpy(rec[crnt1].name,cur_user.name);
+    rec[crnt1].nation=cur_user.nation;
+    rec[crnt1].level=cur_user.level;
+    rec[crnt1].points=cur_user.points;
+    rec[crnt1].alive=cur_user.alive;
+    rec[crnt1].sex=cur_user.sex;
+    rec[crnt1].user_num=nCurrentUserNumber;
+    rec[crnt1].online=TRUE;
+
+
+    fseek(scr_file, (INT32)cur_user.rank * sizeof(scr_rec), SEEK_SET);
+    ny_fwrite(&rec[crnt1], sizeof(scr_rec), 1, scr_file);
+    cont=filelength(fileno(scr_file))/sizeof(scr_rec);
+
+    if (cnt<(cont-1)) {
+      ch_flag_d();
+      do {
+	sorted=TRUE;
+
+	fseek(scr_file, (INT32)(cnt+1) * sizeof(scr_rec), SEEK_SET);
+	ny_fread(&rec[crnt1], sizeof(scr_rec), 1, scr_file);
+
+	fseek(scr_file, (INT32)cnt * sizeof(scr_rec), SEEK_SET);
+	ny_fread(&rec[crnt2], sizeof(scr_rec), 1, scr_file);
+	if (rec[crnt1].points>rec[crnt2].points) { // switch records
+
+	  sorted=FALSE; // run another round
+
+	  sprintf(numstr,"u%07d.on",rec[crnt1].user_num);
+	  if (single_node==FALSE && fexist(numstr)) {
+	    sprintf(numstr,"u%07d.rnk",rec[crnt1].user_num);
+	    njustfile = ShareFileOpen(numstr, "wb");
+	    ny_fwrite(&cnt,2,1,njustfile);
+	    fclose(njustfile);
+	  } else {
+	    fseek(fpUserFile, (INT32)rec[crnt1].user_num * sizeof(user_rec), SEEK_SET);
+	    ny_fread(&urec,sizeof(user_rec),1,fpUserFile);
+	    urec.rank=cnt;
+	    fseek(fpUserFile, (INT32)rec[crnt1].user_num * sizeof(user_rec), SEEK_SET);
+	    ny_fwrite(&urec,sizeof(user_rec),1,fpUserFile);
+	  }
+
+	  if (usr==nCurrentUserNumber) {
+	    cur_user.rank=cnt+1;
+	  } else {
+	    sprintf(numstr,"u%07d.on",rec[crnt2].user_num);
+	    if (single_node==FALSE && fexist(numstr)) {
+	      sprintf(numstr,"u%07d.rnk",rec[crnt2].user_num);
+	      njustfile = ShareFileOpen(numstr, "wb");
+	      cnt++;
+	      ny_fwrite(&cnt,2,1,njustfile);
+	      cnt--;
+	      fclose(njustfile);
+	    } else {
+	      fseek(fpUserFile, (INT32)rec[crnt2].user_num * sizeof(user_rec), SEEK_SET);
+	      ny_fread(&urec,sizeof(user_rec),1,fpUserFile);
+	      urec.rank=cnt+1;
+	      fseek(fpUserFile, (INT32)rec[crnt2].user_num * sizeof(user_rec), SEEK_SET);
+	      ny_fwrite(&urec,sizeof(user_rec),1,fpUserFile);
+	    }
+	  }
+
+	  fseek(scr_file, (INT32)(cnt+1) * sizeof(scr_rec), SEEK_SET);
+	  ny_fwrite(&rec[crnt2],sizeof(scr_rec),1,scr_file);
+	  fseek(scr_file, (INT32)cnt * sizeof(scr_rec), SEEK_SET);
+	  ny_fwrite(&rec[crnt1],sizeof(scr_rec),1,scr_file);
+
+	}
+	cnt++;
+      } while (sorted==FALSE && cnt<(cont-1));
+    }
+    fclose(scr_file);
+    fclose(fpUserFile);
+
+}
+
+
+
+void
+change_info(void)
+{
+  char key;
+  char numstr[25],numstr2[25],numstr3[25];
+
+
+  do {
+    od_printf("\n\r\n\r");
+    ny_clr_scr();
+
+    ny_line(28,0,2);
+//    ny_disp_emu("`@C`4hange `@Y`4er `@I`4nfo\n\r\n\r");
+    ny_line(29,0,0);
+//    ny_disp_emu("`%1 `4- `@Y`4er name: `0");
+    ny_disp_emu(cur_user.name);
+    ny_line(30,1,0);
+//    ny_disp_emu("\n\r`%2 `4- `@W`4hen you win ya say: `0");
+    ny_disp_emu(cur_user.say_win);
+    ny_line(31,1,0);
+//    ny_disp_emu("\n\r`%3 `4- `@W`4hen you loose ya say: `0");
+    ny_disp_emu(cur_user.say_loose);
+    ny_line(32,1,1);
+//    ny_disp_emu("\n\r`%Q `4- `@R`4eturn to Central Park\n\r");
+
+    ny_line(33,1,0);
+//    ny_disp_emu("\n\r`9W`1hich ya wanna change? (`91`1,`92`1,`93`1,`9Q`1`)");
+
+    key=ny_get_answer("123Q");
+
+    od_printf("%c\n\r\n\r",key);
+    if (key=='1') {
+      do {
+
+	od_printf("\n\r");
+	if(rip) od_send_file("texti.rip");
+	ny_send_menu(NEW_NAME,"");
+//      ny_disp_emu("\n\r`@I`4nput yer new name: (`@ENTER`4=abort\n\r|------------------------|\n\r`0");
+
+	od_input_str(numstr,24,' ',255);
+      } while (numstr[0]!=0 && stricmp(ny_un_emu(numstr,numstr2),ny_un_emu(cur_user.name,numstr3))!=0 && CheckForHandle(numstr)!=FALSE);
+      trim(numstr);
+      if (numstr[0]!=0) {
+	strcpy(cur_user.name,numstr);
+	wrt_sts();
+	sprintf(od_control.user_name,"%s (%s)",ny_un_emu(cur_user.name,numstr),uname);
+	ibbs_act_rec act_rec;
+	act_rec.action=0;
+	strcpy(act_rec.name_sI,cur_user.bbsname);
+	strcpy(act_rec.name_s,cur_user.name);
+	if(ibbs) IBSendAll(&IBBSInfo,(char *)&act_rec,sizeof(ibbs_act_rec));
+	od_control.od_update_status_now=TRUE;
+      }
+    } if (key=='2') {
+
+      od_printf("\n\r");
+      if(rip) od_send_file("texti.rip");
+      ny_send_menu(NEW_WIN,"");
+//      ny_disp_emu("\n\r`@W`4hat do you say when you win:\n\r|--------------------------------------|\n\r`0");
+
+      od_input_str(cur_user.say_win,40,' ',255);
+      wrt_sts();
+    } else if (key=='3') {
+
+      od_printf("\n\r");
+      if(rip) od_send_file("texti.rip");
+      ny_send_menu(NEW_LOOSE,"");
+
+//      od_printf("\n\r\n\r`@W`4hat do you say when you get yer ass kicked:\n\r|--------------------------------------|`0\n\r");
+
+      od_input_str(cur_user.say_loose,40,' ',255);
+      wrt_sts();
+    }
+  } while (key!='Q');
+}
+
+
+
+char entry_menu(void)
+   {
+   char key;
+   char allowed[]="ELYNQ\n\r";
+   FILE *justfile;
+   INT16 intval;
+   static int unreg_sign=TRUE;
+   char numstr[100];
+
+
+   key=0;
+
+
+
+   od_clear_keybuffer();               // Clear any pending keys in buffer
+   od_printf("\n\r\n\r");
+   ny_clr_scr();                       // Clear screen
+
+   ny_send_menu(ENTRY_1,"");
+
+/*   ny_disp_emu("\n\r`@N`4ew `@Y`4ork `@2008\n\r\n\r");
+//   ny_kernel();
+   ny_disp_emu("`2By `0Franz\n\r\n\r");//`bright green`Doom`green` helped\n\r\n\r");
+//   ny_kernel();
+   ny_disp_emu("`4Version `@0.01 `%BETA 9\n\r");
+//   ny_kernel();
+   ny_disp_emu("`1Copyright 1995, George Lebl\n\r");*/
+
+  if(!rip) {
+   //od_printf("`blue`Thx fer the help Martin ...\n\r");
+   if(clean_mode==TRUE)
+     ny_disp_emu("`@C`4lean mode `@ON\n\r");
+//   else if(clean_mode==666)
+//     ny_disp_emu("`@X`4tra Fucking Dirty mode `@ON\n\r");
+   if (registered==TRUE) {
+     ny_disp_emu("`@FREEWARE");
+/*     ny_disp_emu("`@REGISTERED `4to ");
+     ny_disp_emu(od_control.system_name);
+     if(rec_credit[0]!=0) {
+       ny_disp_emu("`@!\n\r");
+       ny_line(405,0,0);//`@T`4hanks to `0");
+       ny_disp_emu(rec_credit);
+     } */
+     ny_disp_emu("`@!\n\r");
+   } else {
+     if(unreg_sign==TRUE) {
+       ny_disp_emu("`%UNREGISTERED!\n\rPausing For 5 Seconds `#.");
+       unreg_sign=FALSE;
+       sleep(1);
+       ny_kernel();
+       od_printf(".");
+       sleep(1);
+       ny_kernel();
+       od_printf(".");
+       sleep(1);
+       ny_kernel();
+       od_printf(".");
+       sleep(1);
+       ny_kernel();
+       od_printf(".");
+       ny_kernel();
+       sleep(1);
+       od_printf("\r");
+     } else {
+       ny_disp_emu("`%UNREGISTERED!\n\r");
+       ny_line(404,0,1);
+     }
+   }
+   ny_kernel();
+   ch_game_d();
+   justfile=ShareFileOpen(GAMEDAY_FILENAME,"rb");
+   ny_fread(&intval,2,1,justfile);
+   fclose(justfile);
+   ny_line(34,0,0);
+//   ny_disp_emu("`$T`6his game has been running for `0");
+   od_printf("%d",intval);
+   ny_line(35,0,1);
+//   ny_disp_emu("`6 days!\n\r");
+
+   key=ny_send_menu(ENTRY_2,allowed);
+  }
+
+  if(!rip) {
+    ny_line(36,0,0);
+    //Enter Yer Command (
+    od_printf("%d ",od_control.caller_timelimit);
+    ny_line(37,0,0);
+  }
+//   ny_disp_emu("`1mins)`9>");
+//   entry_after:;
+
+
+   if(key==0) {
+     if(rip) od_disp_str("\n\r!|10000$HKEYON$|#|#|#\n\r");
+     key= ny_get_answer(allowed);
+     if(rip) od_disp_str("\n\r!|10000$HKEYOFF$|#|#|#\n\r");
+   }
+   if(!rip)
+     od_printf("%c\n\r",key);
+   else
+     od_disp_str("\n\r");
+
+   return key;
+   }
+
+
+
+
+
+
+
+
+
+
+
+/*user stats display*/
+void
+DisplayStats(void)
+{
+  INT16 intval;
+
+  ny_kernel();
+  wrt_sts(); //just in case write the stats file
+
+  if(oneframe==FALSE || rip==FALSE) {
+    od_printf("\n\r\n\r");
+    ny_clr_scr();
+    if(rip) od_send_file("frame1.rip");
+  } else {
+    od_disp_str("\n\r!|e|#|#|#\n\r  \b\b");
+  }
+  //ny_line(38,0,0);
+  ny_stat_line(0,0,0);
+//  ny_disp_emu("`%S`!t`9ats `%F`!o`9r `%L`!e`9vel `%");
+  od_printf("%d ",(INT16)cur_user.level);
+  switch (cur_user.nation) {
+    case HEADBANGER: ny_stat_line(1,0,0); break;
+    case HIPPIE: ny_stat_line(2,0,0); break;
+    case BIG_FAT_DUDE: ny_stat_line(3,0,0); break;
+    case CRACK_ADDICT: ny_stat_line(4,0,0); break;
+    case PUNK: ny_stat_line(5,0,0); break;
+  }
+  ny_disp_emu(" `@");
+  ny_disp_emu(cur_user.name);
+//  od_printf("\n\r");
+//  ny_send_menu(BLUE_LINE,"");
+//  ny_line(399,1,1);
+  ny_stat_line(6,1,1);
+ // ny_disp_emu("\n\r`1-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\r");
+  //ny_line(39,0,0);
+  ny_stat_line(7,0,0);
+//  ny_disp_emu("`@S`4ex: `0");
+  if (cur_user.sex==MALE)
+    ny_stat_line(8,0,0);
+  else
+    ny_stat_line(9,0,0);
+
+  od_repeat(' ',29);
+  //ny_line(270,0,0);
+  ny_stat_line(10,0,0);
+  //ny_disp_emu("`@S`4tatus: `@");
+  if (cur_user.alive==ALIVE)
+    //ny_line(369,0,1);
+    ny_stat_line(11,0,1);
+    //ny_disp_emu("`0A`2live\n\r");
+  else if (cur_user.alive==DEAD)
+    //ny_line(370,0,1);
+    ny_stat_line(12,0,1);
+    //ny_disp_emu("DEAD\n\r");
+  else
+    //ny_line(371,0,1);
+    ny_stat_line(13,0,1);
+    //ny_disp_emu("UNCONSIOUS\n\r");
+  //ny_line(271,0,0);
+  ny_stat_line(14,0,0);
+//  od_printf("`bright red`P`red`oints: `bright green`
+  od_printf("%-16s",D_Num(cur_user.points));
+  od_repeat(' ',16);
+  //ny_line(272,0,0);
+  ny_stat_line(15,0,0);
+//  od_printf("`bright red`M`red`oney `bright red`I`red`n `bright red`H`red`and: `bright green`
+  od_printf("%s\n\r",D_Num(cur_user.money));
+  //ny_line(273,0,0);
+  ny_stat_line(16,0,0);
+//  od_printf("`bright red`F`red`ights: `bright green`
+  od_printf("%-3d", (INT16)cur_user.turns);
+  od_repeat(' ',29);
+  //ny_line(274,0,0);
+  ny_stat_line(17,0,0);
+//  od_printf("`bright red`M`red`oney `bright red`I`red`n `bright red`B`red`ank: `bright green`
+  od_printf("%s\n\r",D_Num(cur_user.bank));
+  //ny_line(275,0,0);
+  ny_stat_line(18,0,0);
+//  od_printf("`bright red`H`red`it `bright red`P`red`oints: `bright green`
+  od_printf("%s ",D_Num(cur_user.hitpoints));
+  intval=strlen(str);
+  //ny_line(276,0,0);
+  ny_stat_line(19,0,0);
+//  od_printf("`bright red`o`red`f `bright green`
+  od_printf("%-9s", D_Num(cur_user.maxhitpoints));
+  od_repeat(' ',40-intval-25);
+  //ny_line(277,0,0);
+  ny_stat_line(20,0,0);
+//  od_printf("`bright red`H`red`ungry: `bright green`
+  od_printf("%d%c\n\r", (INT16)cur_user.hunger,37);
+  //ny_line(278,0,0);
+  ny_stat_line(21,0,0);
+//  ny_disp_emu("`@A`4rm: ");
+  print_arm(cur_user.arm);
+  //ny_line(279,1,0);
+  ny_stat_line(22,1,0);
+//  ny_disp_emu("\n\r`@W`4inning `@S`4entence: `0");
+  ny_disp_emu(cur_user.say_win);
+  //ny_line(280,1,0);
+  ny_stat_line(23,1,0);
+//  ny_disp_emu("\n\r`@L`4oosing `@S`4entence: `0");
+  ny_disp_emu(cur_user.say_loose);
+  //ny_line(281,1,0);
+  ny_stat_line(24,1,0);
+//  od_printf("\n\r`bright red`D`red`ays `bright red`S`red`ince `bright red`G`red`ot `bright red`L`red`aid: `bright green`
+  od_printf("%-4d", (INT16)cur_user.since_got_laid);
+  od_repeat(' ',15);
+  //ny_line(282,0,0);
+  ny_stat_line(25,0,0);
+//  ny_disp_emu("`@S`4TD: `0");
+  print_disease(cur_user.std);
+  //ny_line(283,1,0);
+  ny_stat_line(26,1,0);
+//  od_printf("\n\r`bright red`S`red`ex `bright red`T`red`urns `bright red`L`red`eft: `bright green`
+  od_printf("%-4d", (INT16)cur_user.sex_today);
+  od_repeat(' ',20);
+  //ny_line(284,0,0);
+  ny_stat_line(27,0,0);
+//  od_printf("`bright red`I`red`nfected: `bright green`
+  od_printf("%d%c\n\r", (INT16)cur_user.std_percent,37);
+  //ny_line(285,0,0);
+  ny_stat_line(28,0,0);
+//  od_printf("`bright red`C`red`ondoms: `bright green`
+  od_printf("%d\n\r", (INT16)cur_user.condoms);
+  //ny_line(433,0,0);
+  ny_stat_line(29,0,0);
+  od_printf("%d\n\r", (INT16)cur_user.rocks);
+  //ny_line(434,0,0);
+  ny_stat_line(30,0,0);
+  od_printf("%d ", (INT16)cur_user.throwing_ability);
+  //ny_line(435,0,0);
+  ny_stat_line(31,0,0);
+  od_printf("%d ", (INT16)cur_user.kick_ability);
+  //ny_line(436,0,0);
+  ny_stat_line(32,0,0);
+  od_printf("%d\n\r", (INT16)cur_user.punch_ability);
+  //ny_line(286,0,0);
+  ny_stat_line(33,0,0);
+//  ny_disp_emu("`@D`4rug: `0");
+  print_drug(cur_user.drug);
+  //ny_line(287,1,0);
+  ny_stat_line(34,1,0);
+//  od_printf("\n\r`bright red`H`red`its: `bright green`
+  od_printf("%-6d\n\r",(INT16)cur_user.drug_hits);
+  //ny_line(288,0,0);
+  ny_stat_line(35,0,0);
+//  od_printf("`bright red`H`red`igh: `bright green`
+  od_printf("%d%c\n\r",(INT16)cur_user.drug_high,37);
+  if (cur_user.drug>=COKE) {
+    //ny_line(289,0,0);
+    ny_stat_line(36,0,0);
+//    od_printf("`bright red`A`red`ddicted: `bright green`
+    od_printf("%d%c\n\r", (INT16)cur_user.drug_addiction,37);
+    if (cur_user.drug_addiction>0) {
+      //ny_line(290,0,0);
+      ny_stat_line(37,0,0);
+      //od_printf("`bright red`D`red`ays `bright red`S`red`ince `bright red`L`red`ast `bright red`H`red`it: `bright green`
+      od_printf("%d\n\r",(INT16)cur_user.drug_days_since);
+    }
+  }
+  if(cur_user.rest_where!=NOWHERE) {
+    //ny_line(291,0,0);
+    ny_stat_line(38,0,0);
+  //  ny_disp_emu("`@S`4taying `@a`4t: `0");
+    if (cur_user.rest_where==MOTEL)ny_stat_line(39,0,0);// ny_line(372,0,0); //ny_disp_emu("C`2heap `0M`2otel");
+    else if (cur_user.rest_where==REG_HOTEL) ny_stat_line(40,0,0); //ny_line(373,0,0);//ny_disp_emu("R`2egular `0H`2otel");
+    else if (cur_user.rest_where==EXP_HOTEL) ny_stat_line(41,0,0);//ny_line(374,0,0);//ny_disp_emu("E`2xpensive `0H`2otel");
+    //ny_line(292,0,0);
+    ny_stat_line(42,0,0);
+//    ny_disp_emu(" `@F`4or `0");
+    od_printf("%d",(INT16)cur_user.hotel_paid_fer);
+    //ny_line(293,0,1);
+    ny_stat_line(43,0,1);
+//    ny_disp_emu("`@ D`4ays\n\r");
+  }
+//  ny_send_menu(BLUE_LINE,"");
+  //ny_line(399,0,1);
+  ny_stat_line(6,0,1);
+//  ny_disp_emu("`1-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
+
+//  WaitForEnter();
+}
+
+
+
+
+
+
+void   //die of 1=drugs 2=hunger 3=std 4=suicide
+Die(INT16 diecode)
+{
+  cur_user.alive=DEAD;
+  wrt_sts();
+
+  od_printf("\n\r\n\r");
+  ny_clr_scr();
+  ny_line(40,0,2);
+//  ny_disp_emu("\n\r\n\r`@W`4ell it's end of the road for ya....yer `%DEAD`4!");
+  ny_line(41,0,0);
+//  ny_disp_emu("\n\r\n\r`0Y`2ou died of: `0");
+  switch (diecode) {
+    case 1:
+      ny_line(42,0,2);
+      ny_line(43,0,0);
+  //    ny_disp_emu("Drug Overdose\n\r\n\r`@Y`4a should consider cutting down on those drugs next time...");
+      news_post("died of drug overdose",cur_user.name,"",3);
+      break;
+    case 2:
+      ny_line(44,0,2);
+      ny_line(45,0,0);
+//    ny_disp_emu("Hunger\n\r\n\r`@Y`4a should consider eating more next time...");
+      news_post("died of hunger",cur_user.name,"",3);
+      break;
+    case 3:
+      ny_line(46,0,2);
+      if(cur_user.sex==MALE)
+	ny_line(47,0,0);
+      else
+	ny_line(48,0,0);
+
+      news_post("died of sexual desease",cur_user.name,"",3);
+      break;
+
+    case 4:
+      ny_line(49,0,2);
+      ny_line(50,0,0);
+  //    ny_disp_emu("Suicide\n\r\n\r`@Y`4a should talk to somebody before you get that down ...next time...");
+      news_post("comitted suicide",cur_user.name,"",3);
+      break;
+  }
+
+  ny_line(51,2,1);
+//  od_printf("\n\r\n\r`bright`But you can still start all over tomorrow and be the best!\n\r");
+  WaitForEnter();
+  od_exit(10,FALSE);
+}
+
+
+
+void
+print_drug(drug_type drug)
+{
+  switch(drug) {
+    case POT: ny_line(375,0,0); break;     // Pot
+    case HASH: ny_line(376,0,0); break;    // Hash
+    case LSD: ny_line(377,0,0); break;     // LSD
+    case COKE: ny_line(378,0,0); break;    // Coke
+    case PCP: ny_line(379,0,0); break;     // PCP
+    case HEROIN: ny_line(380,0,0); break;  // Heroin
+  }
+}
+
+
+void
+print_disease(desease ill)
+{
+  switch (ill) {
+    case NONE: ny_line(381,0,0); break;              // Healthy
+    case CRAPS: ny_line(382,0,0); break;             // Crabs
+    case HERPES: ny_line(383,0,0); break;            // Herpes
+    case SYPHILIS: ny_line(384,0,0); break;          // Syphilis
+    case AIDS: ny_line(385,0,0); break;              // AIDS
+  }
+}
+
+
+
+
+void
+print_arm(weapon arm)
+{
+  switch (arm) {
+    case HANDS: ny_line(386,0,0); break;
+    case PEPPER: ny_line(387,0,0); break;
+    case SHARP_STICK: ny_line(471,0,0); break;
+    case SCREWDRIVER: ny_line(472,0,0); break;
+    case KNIFE: ny_line(388,0,0); break;
+    case HAMMER: ny_line(473,0,0); break;
+    case CHAIN: ny_line(389,0,0); break;
+    case LEAD_PIPE: ny_line(474,0,0); break;
+    case GUN: ny_line(390,0,0); break;
+    case COLT: ny_line(475,0,0); break;
+    case RIFLE: ny_line(391,0,0); break;
+    case ELEPHANT_GUN: ny_line(476,0,0); break;
+    case LASER_GUN: ny_line(392,0,0); break;
+    case NAILGUN: ny_line(477,0,0); break;
+    case SHOTGUN: ny_line(393,0,0); break;
+    case ASSAULT_RIFLE: ny_line(478,0,0); break;
+    case MACHINEGUN: ny_line(394,0,0); break;
+    case PROTON_GUN: ny_line(479,0,0); break;
+    case GRANADE_LAUNCHER: ny_line(395,0,0); break;
+    case NEUTRON_PHASER: ny_line(480,0,0); break;
+    case BLASTER: ny_line(396,0,0); break;
+    case ULTRASOUND_GUN: ny_line(481,0,0); break;
+    case A_BOMB: ny_line(397,0,0); break;
+  }
+}
+
+/*current player listing*/
+void
+MakeFiles(void)
+	{
+	FILE *scr_file;
+	FILE *ascii_file;
+	FILE *ansi_file;
+	scr_rec user_scr;
+	INT32 filepos;
+	INT16 cnt;
+
+	//od_printf("\n\r\n\r");
+	//ny_clr_scr();
+	ch_game_d();
+	ansi_file=ShareFileOpen(ansi_name,"w");
+	ascii_file=ShareFileOpen(ascii_name,"w");
+	fprintf(ansi_file,"Player Listing For New York 2008\n\n");
+	fprintf(ascii_file,"Player Listing For New York 2008\n\n");
+	fprintf(ansi_file,"-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
+	fprintf(ascii_file,"-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
+	if ((scr_file=ShareFileOpen(SCR_FILENAME,"rb"))!=NULL) {
+	  cnt=1;
+	  fprintf(ansi_file,"Rank: Lvl: Name:                     Points:              S: T:\n");
+	  fprintf(ascii_file,"Rank: Lvl: Name:                     Points:              S: T:\n");
+	  while (ny_fread(&user_scr, sizeof(scr_rec), 1, scr_file) == 1) {
+	    fprintf(ansi_file,"%-5d %-2d   ",cnt,user_scr.level);
+	    fprintf(ascii_file,"%-5d %-2d   ",cnt,user_scr.level);
+	    ny_disp_emu_file(ansi_file,ascii_file,user_scr.name,25);
+	    fprintf(ansi_file," %-20s ",D_Num(user_scr.points));
+	    fprintf(ascii_file," %-20s ",D_Num(user_scr.points));
+	    if (user_scr.sex==MALE) {
+	      fprintf(ansi_file,"M  ");
+	      fprintf(ascii_file,"M  ");
+	    } else {
+	      fprintf(ansi_file,"F  ");
+	      fprintf(ascii_file,"F  ");
+	    }
+
+	    switch(user_scr.nation) {
+	      case HEADBANGER:
+		fprintf(ansi_file,"HEADBANGER    ");
+		fprintf(ascii_file,"HEADBANGER   ");
+		break;
+	      case HIPPIE:
+		fprintf(ansi_file,"HIPPIE       ");
+		fprintf(ascii_file,"HIPPIE       ");
+		break;
+	      case BIG_FAT_DUDE:
+		fprintf(ansi_file,"BIG FAT DUDE ");
+		fprintf(ascii_file,"BIG FAT DUDE ");
+		break;
+	      case CRACK_ADDICT:
+		fprintf(ansi_file,"CRACK ADDICT ");
+		fprintf(ascii_file,"CRACK ADDICT ");
+		break;
+	      case PUNK:
+		fprintf(ansi_file,"PUNK         ");
+		fprintf(ascii_file,"PUNK         ");
+		break;
+	    }
+
+	    fprintf(ansi_file,"\n");
+	    fprintf(ascii_file,"\n");
+	    cnt++;
+	  }
+	  fclose(scr_file);
+	  fclose(ansi_file);
+	  fclose(ascii_file);
+
+	}
+}
+
+
+void
+PlInfo(scr_rec *user_scr, INT16 cnt)
+{
+	    od_printf("`bright blue`%-5d `bright green`%-2d   `bright red`",cnt,user_scr->level);
+	    ny_disp_emu(user_scr->name,25);
+	    od_set_attrib(0x0a);
+	    od_printf(" %-20s ",D_Num(user_scr->points));
+	    if (user_scr->sex==MALE) ny_disp_emu("`$M  "); else ny_disp_emu("`$F  ");
+	    od_set_attrib(0x09);
+	    switch (user_scr->nation) {
+	      case HEADBANGER:   od_disp_str("HEADBANGER   "); break;
+	      case HIPPIE:       od_disp_str("HIPPIE       "); break;
+	      case BIG_FAT_DUDE: od_disp_str("BIG FAT DUDE "); break;
+	      case CRACK_ADDICT: od_disp_str("CRACK ADDICT "); break;
+	      case PUNK:         od_disp_str("PUNK         "); break;
+	    }
+	    if (user_scr->online==TRUE) ny_disp_emu("`%ON");
+	    od_disp_str("\n\r");
+}
+
+
+
+/*current player listing*/
+void
+ListPlayers(void)
+	{
+	FILE *scr_file;
+	scr_rec user_scr;
+	INT32 filepos;
+	INT16 cnt,cnt2;
+	char key;
+	INT16 nonstop=FALSE;
+
+	od_printf("\n\r\n\r");
+	ny_clr_scr();
+
+
+	if(rip) {
+	  od_send_file("frame.rip");
+	  od_send_file("frame3.rip");
+	}
+
+
+	cnt=1;
+	cnt2=5;
+	ny_send_menu(LIST,"");
+/*      od_printf("`bright green`P`green`layer `bright green`L`green`isting `bright green`F`green`or `bright red`N`red`ew `bright red`Y`red`ork `bright red`2008\n\r\n\r");
+	od_printf("`green`-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\r");
+	od_printf("`cyan`Rank: Lvl: Name:                     Points:              S: T:\n\r");*/
+	ch_game_d();
+	if ((scr_file=ShareFileOpen(SCR_FILENAME,"rb"))!=NULL) {
+	  //cnt=1;
+	  while (ny_fread(&user_scr, sizeof(scr_rec), 1, scr_file) == 1) {
+	    PlInfo(&user_scr,cnt);
+
+	    cnt++;
+	    cnt2++;
+	    if (nonstop==FALSE && cnt2%od_control.user_screen_length==0) {
+	      filepos=ftell(scr_file);
+	      fclose(scr_file);
+
+	      ny_disp_emu("`%More (Y/n/=)");
+	      key=ny_get_answer("YN=\n\r");
+	      od_disp_str("\r            \r");
+	      //if(key=='\n' || key=='\r') key='Y';
+	      //od_putch(key);
+	      cnt2=1;
+	      if(key=='N')
+		return;
+	      else if(key=='=')
+		nonstop=TRUE;
+
+
+	      //od_printf("\n\r");
+	      scr_file=ShareFileOpen(SCR_FILENAME,"rb");
+	      fseek(scr_file,filepos,SEEK_SET);
+	    }
+	  }
+	  fclose(scr_file);
+
+	  if(rip) od_send_file("frame1.rip");
+	  WaitForEnter();
+	}
+}
+
+
+/*current player listing of a certain sex*/
+void
+ListPlayersS(sex_type psex)
+	{
+	FILE *scr_file;
+	scr_rec user_scr;
+	INT32 filepos;
+	INT16 cnt,rnk;
+	INT16 nonstop=FALSE;
+	char key;
+
+	od_printf("\n\r\n\r");
+	ny_clr_scr();
+
+	if(rip) {
+	  od_send_file("frame.rip");
+	  od_send_file("frame3.rip");
+	}
+	ny_send_menu(LIST,"");
+/*      od_printf("`bright green`P`green`layer `bright green`L`green`isting `bright green`F`green`or `bright red`N`red`ew `bright red`Y`red`ork `bright red`2008\n\r\n\r");
+	od_printf("`green`-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\r");
+	od_printf("`cyan`Rank: Lvl: Name:                     Points:              S: T:\n\r");*/
+	ch_game_d();
+	if ((scr_file=ShareFileOpen(SCR_FILENAME,"rb"))!=NULL) {
+	  cnt=5;
+	  rnk=1;
+
+	  while (ny_fread(&user_scr, sizeof(scr_rec), 1, scr_file) == 1) {
+	    if (user_scr.sex==psex) {
+	      PlInfo(&user_scr,cnt);
+
+	      cnt++;
+	      if (nonstop==FALSE && cnt%od_control.user_screen_length==0) {
+		filepos=ftell(scr_file);
+		fclose(scr_file);
+
+
+		ny_disp_emu("`%More (Y/n/=)");
+		key=ny_get_answer("YN=\n\r");
+		od_disp_str("\r            \r");
+		//if(key=='\n' || key=='\r') key='Y';
+		//od_putch(key);
+		cnt=1;
+		if(key=='N')
+		  return;
+		else if(key=='=')
+		  nonstop=TRUE;
+
+//              WaitForEnter();
+
+		//od_printf("\n\r");
+		scr_file=ShareFileOpen(SCR_FILENAME,"rb");
+		fseek(scr_file,filepos,SEEK_SET);
+	      }
+	    }
+	    rnk++;
+	  }
+	  fclose(scr_file);
+
+	  if(rip) od_send_file("frame1.rip");
+	  WaitForEnter();
+	}
+}
+
+
+
+
+/*current alive player listing*/
+void
+ListPlayersA()
+	{
+	FILE *scr_file;
+	scr_rec user_scr;
+	INT32 filepos;
+	INT16 cnt,rnk;
+	INT16 nonstop=FALSE;
+	char key;
+
+
+	od_printf("\n\r\n\r");
+	ny_clr_scr();
+	if(rip) od_send_file("frame.rip");
+	if(rip) od_send_file("frame3.rip");
+	ny_send_menu(CONSIOUS,"");
+/*      od_printf("`bright green`C`green`onsious `bright green`P`green`layer `bright green`L`green`isting `bright green`F`green`or `bright red`N`red`ew `bright red`Y`red`ork `bright red`2008\n\r\n\r");
+	od_printf("`green`-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\r");
+	od_printf("`cyan`Rank: Lvl: Name:                     Points:              S: T:\n\r");*/
+	ch_game_d();
+	if ((scr_file=ShareFileOpen(SCR_FILENAME,"rb"))!=NULL) {
+	  cnt=5;
+	  rnk=1;
+	  while (ny_fread(&user_scr, sizeof(scr_rec), 1, scr_file) == 1) {
+	    if (user_scr.alive==ALIVE) {
+
+	      PlInfo(&user_scr,cnt);
+
+
+	      cnt++;
+	      if (nonstop==FALSE && cnt%od_control.user_screen_length==0) {
+		filepos=ftell(scr_file);
+		fclose(scr_file);
+
+		ny_disp_emu("`%More (Y/n/=)");
+		key=ny_get_answer("YN=\n\r");
+		od_printf("\r            \r");
+		//if(key=='\n' || key=='\r') key='Y';
+		//od_putch(key);
+		cnt=1;
+		if(key=='N')
+		  return;
+		else if(key=='=')
+		  nonstop=TRUE;
+
+//              WaitForEnter();
+
+		//od_printf("\n\r\n\r");
+		scr_file=ShareFileOpen(SCR_FILENAME,"rb");
+		fseek(scr_file,filepos,SEEK_SET);
+	      }
+	    }
+	    rnk++;
+	  }
+	  fclose(scr_file);
+
+	  if(rip) od_send_file("frame1.rip");
+	  WaitForEnter();
+	}
+}
+
+
+
+
+
+/*online player listing*/
+void
+WhosOnline(void)
+{
+  FILE *scr_file;
+  scr_rec user_scr;
+  INT32 filepos;
+  INT16 cnt,rnk;
+  INT16 nonstop=FALSE;
+  char key;
+
+
+  if(oneframe==FALSE || rip==FALSE) {
+    od_printf("\n\r\n");
+    ny_clr_scr();
+    if(rip) od_send_file("frame.rip");
+    if(rip) od_send_file("frame3.rip");
+  } else {
+    od_disp_str("\n\r!|e\n\r");
+    od_send_file("frame3.rip");
+  }
+
+  ny_send_menu(ONLINE,"");
+
+/*  od_printf("`bright green`O`green`nline `bright green`P`green`layer `bright green`L`green`isting `bright green`F`green`or `bright red`N`red`ew `bright red`Y`red`ork `bright red`2008\n\r\n\r");
+  od_printf("`green`-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\r");
+  od_printf("`cyan`Rank: Lvl: Name:                     Points:              S: T:\n\r");*/
+  ch_game_d();
+  if ((scr_file=ShareFileOpen(SCR_FILENAME,"rb"))!=NULL) {
+    cnt=5;
+    rnk=1;
+    while (ny_fread(&user_scr, sizeof(scr_rec), 1, scr_file) == 1) {
+      if (user_scr.online==TRUE) {
+	PlInfo(&user_scr,cnt);
+
+	cnt++;
+	if (nonstop==FALSE && cnt%od_control.user_screen_length==0) {
+	  filepos=ftell(scr_file);
+	  fclose(scr_file);
+
+	  ny_disp_emu("`%More (Y/n/=)");
+	  key=ny_get_answer("YN=\n\r");
+	  od_printf("\r            \r");
+	  //if(key=='\n' || key=='\r') key='Y';
+	  //od_putch(key);
+	  cnt=1;
+	  if(key=='N')
+	    return;
+	  else if(key=='=')
+	    nonstop=TRUE;
+
+//        WaitForEnter();
+
+	  //od_printf("\n\r");
+	  scr_file=ShareFileOpen(SCR_FILENAME,"rb");
+	  fseek(scr_file,filepos,SEEK_SET);
+	}
+      }
+      rnk++;
+    }
+    fclose(scr_file);
+
+    if(rip) od_send_file("frame1.rip");
+    WaitForEnter();
+  }
+}
+
+
+void
+EnterStreet(void)
+	{
+	char key;
+//      int intval;
+
+//      printf("\n\r14\n\r");
+	read_IGMs();
+//      printf("\n\r20\n\r");
+	read_fight_IGMs();
+//      printf("\n\rEND DEBUG!\n\r");
+	noevents=FALSE;
+
+	//if conversion from v0.05a or lower
+	if(cur_user.throwing_ability==0) {
+	  cur_user.rocks=2;
+	  switch(cur_user.nation) {
+	    case HEADBANGER:
+	      cur_user.throwing_ability=10 + (cur_user.level*1.33);
+	      cur_user.punch_ability=10 + (cur_user.level*1.33);
+	      cur_user.kick_ability=20 + (cur_user.level*1.33);
+	      break;
+	    case HIPPIE:
+	      cur_user.throwing_ability=20 + (cur_user.level*1.33);
+	      cur_user.punch_ability=10 + (cur_user.level*1.33);
+	      cur_user.kick_ability=10 + (cur_user.level*1.33);
+	      break;
+	    case BIG_FAT_DUDE:
+	      cur_user.throwing_ability=4 + (cur_user.level*1.33);
+	      cur_user.punch_ability=18 + (cur_user.level*1.33);
+	      cur_user.kick_ability=18 + (cur_user.level*1.33);
+	      break;
+	    case CRACK_ADDICT:
+	      cur_user.throwing_ability=14 + (cur_user.level*1.33);
+	      cur_user.punch_ability=13 + (cur_user.level*1.33);
+	      cur_user.kick_ability=13 + (cur_user.level*1.33);
+	      break;
+	    case PUNK:
+	      cur_user.throwing_ability=11 + (cur_user.level*1.33);
+	      cur_user.punch_ability=20 + (cur_user.level*1.33);
+	      cur_user.kick_ability=11 + (cur_user.level*1.33);
+	      break;
+	  }
+	}
+
+	if (cur_user.hunger==100) {   //user dying of hunger
+	  od_printf("\n\r\n\r");
+	  ny_clr_scr();
+	  //if(rip) od_send_file("frame.rip");
+
+	  //od_printf("`bright red`B`red`oy yer dying of hunger... If you don't eat today yer gonna die!\n\r");
+	  ny_line(53,0,1);
+//        ny_disp_emu("`@B`4oy yer dying of hunger... If you don't eat today yer gonna die!\n\r");
+
+	  if(!rip)
+	    WaitForEnter();
+	  else
+	    od_get_answer("\n\r");
+	  food_ops();
+	  }
+
+	else if (cur_user.hunger>=50) {  //user 50% or more hungry....cmon eat
+	  od_printf("\n\r\n\r");
+	  ny_clr_scr();
+
+	  //if(rip) od_send_file("frame.rip");
+//        od_printf("`bright red`B`red`oy yer hungry....you should eat something not to starve...\n\r");
+	  ny_line(52,0,1);
+//        ny_disp_emu("`@B`4oy yer hungry....you should eat something not to starve...\n\r");
+
+	  if(!rip)
+	    WaitForEnter();
+	  else
+	    od_get_answer("\n\r");
+	  food_ops();
+	  }
+
+	if(expert==3) expert=1;
+	do {
+		//key=central_park(); //display menu and get the key pressed
+		if(!ibbs)
+		  key=callmenu("SCPFDAGUMIXEBHYWLRNOKQ!?\n\r",CENTRAL_PARK,342,FALSE);
+		else
+		  key=callmenu("SCPFDAGUMIXEBHYWLRNO*KQ!?\n\r",CENTRAL_PARK_IB,342,FALSE);
+		while (expert>0 && key=='?') {
+		  expert+=20;
+		  if(!ibbs)
+		    key=callmenu("SCPFDAGUMIXEBHYWLRNOKQ!?\n\r",CENTRAL_PARK,342,FALSE);
+		  else
+		    key=callmenu("SCPFDAGUMIXEBHYWLRNO*KQ!?\n\r",CENTRAL_PARK_IB,342,FALSE);
+		  expert-=20;
+		}
+
+		//go to the right ops function
+		switch (key) {
+		  case 'D':               //buy sell use drugs
+		    if(expert==3) expert=1;
+		    drug_ops();
+		    if(expert==3) expert=1;
+		    break;
+		  case 'B':        //money and stuff...bank...
+		    if(expert==3) expert=1;
+		    money_ops();
+		    if(expert==3) expert=1;
+		    break;
+		  case 'R':         //rest somewhere.....
+		    if(expert==3) expert=1;
+		    rest_ops();
+		    if(expert==3) expert=1;
+		    break;
+		  case 'Y':       // display user stats
+		    DisplayStats();
+		    WaitForEnter();
+		    break;
+		  case 'L':         // list active players
+		    ListPlayers();
+		    break;
+		  case 'O':         // IGM (other stuff)
+		    if(expert==3) expert=1;
+		    IGM_ops();
+		    if(expert==3) expert=1;
+		    break;
+		  case 'M':         /// mail
+		    if(expert==3) expert=1;
+		    mail_ops();
+		    if(expert==3) expert=1;
+		    break;
+		  case 'W':         // Who's Online
+		    WhosOnline();
+		    break;
+		  case 'G':         // get laid.....
+		    if(expert==3) expert=1;
+		    get_laid_ops();
+		    if(expert==3) expert=1;
+		    break;
+		  case 'F':          // eat some food
+		    if(expert==3) expert=1;
+		    food_ops();
+		    if(expert==3) expert=1;
+		    break;
+		  case 'A':          //weapon store
+		    if(expert==3) expert=1;
+		    guns_ops();
+		    if(expert==3) expert=1;
+		    break;
+		  case '*':
+		    if (ibbs) {          //InterBBS
+		      if(expert==3) expert=1;
+		      ibbs_ops();
+		      if(expert==3) expert=1;
+		    }
+		    break;
+		  case 'H':         //healing (drug rehab, heal woulnds, cure std's)
+		    if(expert==3) expert=1;
+		    healing_ops();
+		    if(expert==3) expert=1;
+		    break;
+		  case 'E':
+		    if(expert==3) expert=1;
+		    evil_ops(&cur_user);
+		    if(expert==3) expert=1;
+		    break;
+		  case 'S':             //street fights
+		    if(expert==3) expert=1;
+		    fight_ops(&cur_user);
+		    if(expert==3) expert=1;
+		    break;
+		  case 'K':             //suicide
+		    ny_line(54,2,0);
+		    key=ny_get_answer("YN");
+		    if(!rip)
+		      od_printf("%c\n\r",key);
+		    else if(key=='Y') {
+		      od_disp_str("\n\r!|10000((*REALLY want to DIE?::y@Yes,n@No))|#|#|#\n\r");
+		      key=od_get_answer("YN");
+		    }
+		    if (key=='Y')
+		      Die(4);
+		    else if(rip)
+		      no_rip_m=1;
+		    break;
+		  case 'I':
+		    if(registered==FALSE) {
+		      ny_disp_emu("`%\n\r\n\rUNREGISTERED!!!\n\r\n\rCannot do this!!!\n\r");
+		      WaitForEnter();
+		    } else {
+		      if(expert==3) expert=1;
+		      change_info();
+		      if(expert==3) expert=1;
+		    }
+		    break;
+		case '!':               //instructions
+		  od_printf("\n\r\n\r");
+		  ny_clr_scr();
+		  ch_game_d();
+		  if(rip) od_send_file("frame.rip");
+		  if(rip) od_send_file("frame3.rip");
+		  if(clean_mode==TRUE)
+		    ny_send_file("nyinstrc.asc");
+		  else
+		    ny_send_file("nyinstr.asc");
+		  if(rip) od_send_file("frame1.rip");
+		  WaitForEnter();
+		  break;
+		case 'C': // copfights
+		  if(registered==FALSE) {
+		    ny_disp_emu("`%\n\r\n\rUNREGISTERED!!!\n\r\n\rCannot do this!!!\n\r");
+		    WaitForEnter();
+		  } else {
+		    if(expert==3) expert=1;
+		    copfight_ops(&cur_user);
+		    if(expert==3) expert=1;
+		  }
+		  break;
+		case 'P': // Player fights
+		  if(expert==3) expert=1;
+		  p_fight_ops(&cur_user,&nCurrentUserNumber);
+		  if(expert==3) expert=1;
+		  break;
+		case 'N':  //newz
+		  newz_ops();
+		  break;
+		case 'X':
+		  if(expert==3) expert=1;
+		  if(rip) {
+		    expert=0;
+		  } else {
+		    expert+=1;//expert;
+		    if(expert>2) expert=0;
+		    if (expert==2) { //expert
+		      ny_line(55,2,1);
+		    } else if(expert==1) { //regular
+		      ny_line(56,2,1);
+		    } else { //novice
+		      ny_line(341,2,1);
+		    }
+		    WaitForEnter();
+		  }
+		  break;
+		case 'Q':
+		  ny_line(57,2,0);
+		  key=ny_get_answer("YN");
+		  if(!rip)
+		    od_printf("%c\n\r",key);
+		  else
+		    od_disp_str("\n\r");
+		  if (key=='Y')
+		    key='Q';
+		  else if(!rip)
+		    no_rip_m=1;
+		  break;
+		case 'U':           //use a-bomb to win game
+		  //only if user got one
+		  if (cur_user.arm!=A_BOMB) {
+		    ny_line(58,2,1);
+		    if(!rip)
+		      WaitForEnter();
+		    else {
+		      od_get_answer("\n\r");
+		      no_rip_m=1;
+		    }
+		  } else {
+		    ny_line(59,2,0);
+//                  od_printf("`bright red`\n\r\n\rR`red`eally do it? (`bright red`Y`red`/`bright red`N`red`)");
+		    key=ny_get_answer("YN");
+		    if(!rip)
+		      od_printf("%c\n\r",key);
+		    else
+		      od_disp_str("\n\r");
+		    if (key=='Y') {
+		      cur_user.alive=DEAD;
+		      wrt_sts();
+		      od_printf("\n\r\n\r");
+		      ny_clr_scr();
+		      od_send_file("win");
+		      ny_line(1,1,0);
+		      od_get_answer("\n\r");
+
+		      od_printf("\n\r\n\r");
+		      ny_clr_scr();
+
+		      ny_line(295,2,0);
+//                    od_printf("\n\r\n\r`bright`YOU WON THE GAME!!!!! With
+		      od_printf(D_Num(cur_user.points));
+		      ny_line(296,0,2);
+		      ny_send_menu(WIN,"");
+		  /*  od_printf("\n\r\n\r\n\r`white`Of course blowing up New York with an A-Bomb did wonders to your body\n\r");
+		      od_printf("basically what I'm saying you died... but you completed yer mission ...\n\r");
+		      od_printf("just think of all the people that died with you ...\n\r\n\r");*/
+		      news_post("`%WON `4THE GAME .... `@LOOSERS ....",cur_user.name,"",3);
+		      AddBestPlayer();
+		      if(ibbs)
+			AddBestPlayerIB();
+		      ny_line(1,1,0);
+		      od_get_answer("\n\r");
+		      od_exit(10,FALSE);
+		    }
+		  }
+		  break;
+	     }
+	  } while (key!='Q');
+}
+
+
+
+
+char *D_Num(INT16 num)
+{
+  char temp[8];
+  INT16 cnt,cnt2,len,sign=0;
+  if (num<0) {
+    sign=1;
+    str[0]='-';
+  }
+
+  sprintf(temp,"%d",num);
+
+  len=strlen(temp);
+
+  if (len<=4) {
+    strcpy(str,temp);
+    return str;
+  }
+
+  cnt2=sign;
+  for(cnt=sign;cnt<len-1;cnt++) {
+    str[cnt2]=temp[cnt];
+    if ( ( (INT16)((len-cnt-.00099)/3) *3) == (len-cnt-1) ) {
+      cnt2++;
+      str[cnt2]=',';
+    }
+    cnt2++;
+  }
+  str[cnt2]=temp[cnt];
+  str[cnt2+1]=0;
+  return str;
+}
+
+
+
+char *D_Num(INT32 num)
+{
+  char temp[15];
+  INT16 cnt,cnt2,len,sign=0;
+  if (num<0) {
+    sign=1;
+    str[0]='-';
+  }
+
+  sprintf(temp,"%ld",num);
+
+  len=strlen(temp);
+
+  if (len<=4) {
+    strcpy(str,temp);
+    return str;
+  }
+
+  cnt2=sign;
+  for(cnt=sign;cnt<len-1;cnt++) {
+    str[cnt2]=temp[cnt];
+    if ( ((INT16)((len-cnt-.00099)/3)*3) == (len-cnt-1) ) {
+      cnt2++;
+      str[cnt2]=',';
+    }
+    cnt2++;
+  }
+  str[cnt2]=temp[cnt];
+  str[cnt2+1]=0;
+
+  return str;
+}
+
+char *D_Num(DWORD num)
+{
+  char temp[14];
+  INT16 cnt,cnt2,len;
+
+  sprintf(temp,"%lu",num);
+
+  len=strlen(temp);
+
+  if (len<=4) {
+    strcpy(str,temp);
+    return str;
+  }
+
+  cnt2=0;
+  for(cnt=0;cnt<len-1;cnt++) {
+    str[cnt2]=temp[cnt];
+    if ( ((INT16)((len-cnt-.00099)/3)*3) == (len-cnt-1) ) {
+      cnt2++;
+      str[cnt2]=',';
+    }
+    cnt2++;
+  }
+  str[cnt2]=temp[cnt];
+  str[cnt2+1]=0;
+
+  return str;
+}
+
+
+
+
+
+
+void
+points_raise(DWORD raise)
+{       // when is time for next level      0   1    2    3    4    5    6     7     8     9     10    11    12    13    14    15    16    17     18     19      //20
+	DWORD level_seal[LEVELS] = {500,1020,2100,3700,6100,9100,12820,17300,22580,28700,35700,43620,52500,62380,73300,85300,98420,112700,128180,144900};//,162900};
+	char c_dir,key;
+
+	c_dir=c_dir_g;
+
+	cur_user.points+=raise * DrgPtsCoef();
+
+
+	if(cur_user.points>30000 && registered==FALSE) {
+	  if(rip) {
+	    scr_save();
+	    ny_clr_scr();
+	    od_send_file("frame.rip");
+	    od_send_file("frame1.rip");
+	  }
+
+	  ny_disp_emu("`%\n\r\n\rUNREGISTERED!!!\n\r\n\r");
+	  ny_disp_emu("You reached 30,000 points, and this game is `$UNREGISTERED`%!\n\r");
+	  ny_disp_emu("This nag screen will appear to you every time your points raise\n\r");
+	  ny_disp_emu("And you can't get into level 10, until the game is registered\n\r");
+	  ny_disp_emu("Otherwise nothing will happen, please tell the sysop to register the game!\n\r");
+	  WaitForEnter();
+	  if(rip)
+	    scr_res();
+	}
+
+
+	if(registered==FALSE && cur_user.level>9)
+	  cur_user.level=9;
+
+
+
+	while (cur_user.level<20 && level_seal[cur_user.level]<=cur_user.points) {
+	//while ( (pow( 10,((double)cur_user.level+1)/2) ) * 25 )<=cur_user.points) {
+	  if(cur_user.level>=9 && registered==FALSE) break;
+
+	  cur_user.level++;
+	  switch(cur_user.nation) {
+	    case HEADBANGER:
+	      cur_user.strength=(5 * pow(1.3,cur_user.level)+.5);
+	      cur_user.defense=(4 * pow(1.3,cur_user.level)+.5);
+	      break;
+	    case HIPPIE:
+	      cur_user.strength=(4 * pow(1.3,cur_user.level)+.5);
+	      cur_user.defense=(4 * pow(1.3,cur_user.level)+.5);
+	      break;
+	    case BIG_FAT_DUDE:
+	      cur_user.strength=(3 * pow(1.3,cur_user.level)+.5);
+	      cur_user.defense=(6 * pow(1.3,cur_user.level)+.5);
+	      break;
+	    case CRACK_ADDICT:
+	      cur_user.strength=(4 * pow(1.3,cur_user.level)+.5);
+	      cur_user.defense=(5 * pow(1.3,cur_user.level)+.5);
+	      break;
+	    case PUNK:
+	      cur_user.strength=(6 * pow(1.3,cur_user.level)+.5);
+	      cur_user.defense=(3 * pow(1.3,cur_user.level)+.5);
+	      break;
+	  }
+	  cur_user.hitpoints+=.7 * cur_user.maxhitpoints;
+	  cur_user.maxhitpoints=(15 * pow(1.7,cur_user.level)+.5);
+
+	  ny_line(60,2,0);
+	  //Yer level has been raised to level
+	  if(!rip) {
+	    od_printf("%d`red`!\n\r",(INT16)cur_user.level);
+	    ny_line(437,1,0);
+	    key=od_get_answer("TKP");
+	    od_printf("%c\n\r",key);
+	  } else {
+	    od_printf("%d\\!::^M",(INT16)cur_user.level);
+	    od_putch('@');
+	    od_printf("OK))|#|#|#\n\r");
+	    od_get_answer("\n\r");
+	    ny_line(437,1,1);
+	    key=od_get_answer("TKP");
+	  }
+	  switch(key) {
+	    case 'T':
+	      cur_user.throwing_ability+=4; break;
+	    case 'K':
+	      cur_user.kick_ability+=4; break;
+	    case 'P':
+	      cur_user.punch_ability+=4; break;
+	  }
+
+	  cur_user.sex_today++;
+	}
+
+
+	wrt_sts();
+
+	SortScrFile(nCurrentUserNumber,0);
+
+	if(c_dir==0)
+	  ch_game_d();
+	else
+	  ch_flag_d();
+
+	od_control.od_update_status_now=TRUE;
+}
+
+
+void
+points_loose(DWORD lost)
+{
+	char c_dir;
+
+	c_dir=c_dir_g;
+	if (cur_user.points<lost)
+	  cur_user.points=0;
+	else
+	  cur_user.points-=lost;
+
+	wrt_sts();
+	SortScrFileB(nCurrentUserNumber);
+	if(c_dir==0)
+	  ch_game_d();
+	else
+	  ch_flag_d();
+	od_control.od_update_status_now=TRUE;
+}
+
+
+double
+DrgPtsCoef(void)
+{
+  if (cur_user.nation!=HIPPIE) {
+    if (cur_user.drug==POT) return (cur_user.drug_high/1000.0) + 1.0;
+    if (cur_user.drug==HASH) return (cur_user.drug_high/500.0) + 1.0;
+    if (cur_user.drug==LSD) return (cur_user.drug_high/250.0) + 1.0;
+    return 1.0;
+  }
+  if (cur_user.drug==POT) return (cur_user.drug_high/900.0) + 1.0;
+  if (cur_user.drug==HASH) return (cur_user.drug_high/450.0) + 1.0;
+  if (cur_user.drug==LSD) return (cur_user.drug_high/225.0) + 1.0;
+  return 1.01;
+
+}
+
+char
+callmenu(char allowed[],menu_t menu,INT16 menu_line,char figst)
+{
+  char key;
+
+  od_clear_keybuffer();
+
+  if(no_rip_m!=1 || !rip) {
+
+    od_printf("\n\r\n\r");
+    if (expert!=2 && expert!=3) ny_clr_scr();
+
+    if (expert==2 || expert==3) {
+      ny_line(menu_line,0,1);
+      od_printf(allowed);
+      ny_line(36,0,0);
+      od_printf("%d ",od_control.caller_timelimit);
+      ny_line(37,0,0);
+      //od_printf("`bright green`%s`bright blue`E`blue`nter `bright blue`Y`blue`er `bright blue`C`blue`ommand (%d mins)`bright blue`>",allowed,od_control.caller_timelimit);
+      if(rip) od_disp_str("\n\r!|10000$HKEYON$|#|#|#\n\r");
+      key=ny_get_answer(allowed);
+      if(rip) od_disp_str("\n\r!|10000$HKEYOFF$|#|#|#\n\r");
+    } else {
+      if(figst && !rip) {
+	ny_line(menu_line,0,2);
+	disp_fig_stats();
+      }
+      key=ny_send_menu(menu,allowed);
+
+      if(!rip) {
+	ny_line(36,0,0);
+	od_printf("%d ",od_control.caller_timelimit);
+	ny_line(37,0,0);
+      }
+
+      if (key==0) {
+	if(rip) od_disp_str("\n\r!|10000$HKEYON$|#|#|#\n\r");
+	key= ny_get_answer(allowed);
+	if(rip) od_disp_str("\n\r!|10000$HKEYOFF$|#|#|#\n\r");
+      }
+
+    }
+  } else {
+    no_rip_m=0;
+    od_disp_str("\n\r!|10000$HKEYON$|#|#|#\n\r");
+    key=ny_get_answer(allowed);
+    od_disp_str("\n\r!|10000$HKEYOFF$|#|#|#\n\r");
+  }
+  if (menu!=CENTRAL_PARK && menu!=CENTRAL_PARK_IB && (key=='\n' || key=='\r')) key='Q';
+  if(!rip) od_putch(key);
+  if(expert==1) expert=3;
+  return key;
+}
+
+
+
+
+void
+rest_ops(void)
+{
+	char key,s_key;
+	DWORD intval;
+	DWORD max;
+
+	do {
+	  key=callmenu("CERYQ?\n\r",REST,343,FALSE);
+	  while (expert>0 && key=='?') {
+	    expert+=10;
+	    key=callmenu("CERYQ?\n\r",REST,343,FALSE);
+	    expert-=10;
+	  }
+
+
+	  if (key=='Y') {
+	    DisplayStats();
+	    WaitForEnter();
+	  }
+	  else if (key=='C') {
+	    if (cur_user.rest_where!=NOWHERE && cur_user.rest_where!=MOTEL) {
+
+	      ny_line(61,2,0);
+//            od_printf("\n\r\n\r`bright red`Y`red`er already staying at: `bright green`");
+	      //if (cur_user.rest_where==MOTEL) od_printf("C`green`heap `bright green`M`green`otel");
+	      if(!rip) {
+		if (cur_user.rest_where==REG_HOTEL) od_printf("R`green`egular `bright green`H`green`otel");
+		else if (cur_user.rest_where==EXP_HOTEL) od_printf("E`green`xpensive `bright green`H`green`otel");
+	      } else {
+		if (cur_user.rest_where==REG_HOTEL) od_printf(" Regular Hotel::@OK))|#|#|#\n\r");
+		else if (cur_user.rest_where==EXP_HOTEL) od_printf(" Expensive Hotel::@OK))|#|#|#\n\r");
+	      }
+
+	      ny_line(62,2,0);
+//            od_printf("\n\r`bright red`W`red`anna check outta there (no money back)? (`bright red`Y`red`/`bright red`N`red`)");
+
+	      s_key=ny_get_answer("YN");
+	      od_putch(s_key);
+	      if (s_key=='Y') goto Cheap_motel_ok;
+	      if(rip) no_rip_m=1;
+	    } else {
+Cheap_motel_ok:;
+	      intval=(cur_user.level*20)+20;
+
+	      ny_line(297,2,0);
+	      //od_printf("\n\r\n\r`bright red`I`red`t will cost ya `bright red`
+	      od_printf(D_Num(intval));
+	      ny_line(298,0,0);
+//            `red` per day.",intval);// still wanna do it(`bright red`Y`red`/`bright red`N`red`)",intval);
+	      max=cur_user.money/intval;
+	      if (max>255) max=255;
+	      if(rip)
+		od_get_answer("\n\r");
+	      ny_line(299,2,0);
+//            od_printf("\n\r`bright red`Y`red`ou can afford `bright red`
+	      od_printf(D_Num(max));
+	      ny_line(300,0,2);
+	      if(rip) {
+		od_get_answer("\n\r");
+  //          `red` days!\n\r",D_Num(max));
+		od_send_file("input.rip");
+	      }
+	      ny_line(301,0,0);
+	      //od_printf("`bright green`H`green`ow mady days ya wanna stay here? (`bright blue`Enter`green`=`bright green`[0]`green`, `bright blue`M`green`=max `bright green`
+	      od_printf(D_Num(max));
+	      ny_disp_emu("`2):");
+
+	      max=get_val((DWORD)0,(DWORD)max);
+	      if (max==0) {
+		//if (intval>cur_user.money) {
+		//  if (cur_user.rest_where==NOWHERE) {
+		//    od_printf("`bright red`Y`red`a cant afford that...\n\r");
+		//  } else {
+
+		if (cur_user.rest_where!=NOWHERE) {
+		  ny_line(63,1,0);
+		  //od_printf("`bright red`Y`red`e're still staying at: ");
+		  if(!rip) {
+		    if (cur_user.rest_where==MOTEL) od_printf("C`green`heap `bright green`M`green`otel");
+		    else if (cur_user.rest_where==REG_HOTEL) od_printf("R`green`egular `bright green`H`green`otel");
+		    else if (cur_user.rest_where==EXP_HOTEL) od_printf("E`green`xpensive `bright green`H`green`otel");
+		  } else {
+		    if (cur_user.rest_where==MOTEL) od_printf("Cheap Motel::@OK))|#|#|#");
+		    else if (cur_user.rest_where==REG_HOTEL) od_printf(" Regular Hotel::@OK))|#|#|#\n\r");
+		    else if (cur_user.rest_where==EXP_HOTEL) od_printf(" Expensive Hotel::@OK))|#|#|#\n\r");
+		  }
+
+		  od_printf("\n\r");
+		  if (rip==FALSE) WaitForEnter();
+		}
+	      } else {
+
+		ny_line(64,1,1);
+		//od_printf("`bright red`O`red`k dude you got it...\n\r");
+		money_minus(intval*max);
+		if (cur_user.rest_where==MOTEL)
+		  cur_user.hotel_paid_fer+=max;
+		else
+		  cur_user.hotel_paid_fer=max;
+		cur_user.rest_where=MOTEL;
+
+		od_exit(10,FALSE);
+	      }
+	    }
+	  }
+	  else if (key=='R') {
+	    if (cur_user.rest_where!=NOWHERE && cur_user.rest_where!=REG_HOTEL) {
+
+	      ny_line(61,2,0);
+	      //od_printf("\n\r\n\r`bright red`Y`red`er already staying at: ");
+	      if(!rip) {
+		if (cur_user.rest_where==MOTEL) od_printf("C`green`heap `bright green`M`green`otel");
+		else if (cur_user.rest_where==EXP_HOTEL) od_printf("E`green`xpensive `bright green`H`green`otel");
+	      } else {
+		if (cur_user.rest_where==MOTEL) od_printf("Cheap Motel::@OK))|#|#|#");
+		else if (cur_user.rest_where==EXP_HOTEL) od_printf(" Expensive Hotel::@OK))|#|#|#\n\r");
+	      }
+	      ny_line(62,2,0);
+	      //od_printf(" `bright red`W`red`anna check outta there (no money back)? (`bright red`Y`red`/`bright red`N`red`)");
+
+	      s_key=ny_get_answer("YN");
+	      od_putch(s_key);
+	      if (s_key=='Y') goto Reg_hotel_ok;
+	      if(rip) no_rip_m=1;
+	    } else {
+Reg_hotel_ok:;
+	      intval=(cur_user.level*40)+40;
+
+	      ny_line(297,2,0);
+	      od_printf(D_Num(intval));
+	      ny_line(298,0,0);
+//            od_printf("\n\r\n\r`bright red`I`red`t will cost ya `bright red`%d`red` per day.",intval);// still wanna do it(`bright red`Y`red`/`bright red`N`red`)",intval);
+	      max=cur_user.money/intval;
+	      if(rip)
+		od_get_answer("\n\r");
+	      if (max>255) max=255;
+	      ny_line(299,2,0);
+	      od_printf(D_Num(max));
+	      ny_line(300,0,2);
+//            od_printf("\n\r`bright red`Y`red`ou can afford `bright red`%s`red` days!\n\r",D_Num(max));
+	      if(rip) {
+		od_get_answer("\n\r");
+		od_send_file("input.rip");
+	      }
+	      ny_line(301,0,0);
+	      od_printf(D_Num(max));
+	      ny_disp_emu("`2):");
+	      //od_printf("`bright green`H`green`ow mady days ya wanna stay here? (`bright blue`Enter`green`=`bright green`[0]`green`, `bright blue`M`green`=max `bright green`%d`green`):",max);
+
+	      max=get_val((DWORD)0,(DWORD)max);
+	      if (max==0) {
+		//if (intval>cur_user.money) {
+		//  if (cur_user.rest_where==NOWHERE) {
+		//    od_printf("`bright red`Y`red`a cant afford that...\n\r");
+		//  } else {
+
+		if (cur_user.rest_where!=NOWHERE) {
+		  ny_line(63,1,0);
+		  //od_printf("`bright red`Y`red`e're still staying at: ");
+		  if(!rip) {
+		    if (cur_user.rest_where==MOTEL) od_printf("C`green`heap `bright green`M`green`otel");
+		    else if (cur_user.rest_where==REG_HOTEL) od_printf("R`green`egular `bright green`H`green`otel");
+		    else if (cur_user.rest_where==EXP_HOTEL) od_printf("E`green`xpensive `bright green`H`green`otel");
+		  } else {
+		    if (cur_user.rest_where==MOTEL) od_printf("Cheap Motel::@OK))|#|#|#");
+		    else if (cur_user.rest_where==REG_HOTEL) od_printf(" Regular Hotel::@OK))|#|#|#\n\r");
+		    else if (cur_user.rest_where==EXP_HOTEL) od_printf(" Expensive Hotel::@OK))|#|#|#\n\r");
+		  }
+
+
+		  od_printf("\n\r");
+		  if (rip==FALSE) WaitForEnter();
+		}
+	      } else {
+
+		ny_line(64,1,1);
+		//od_printf("`bright red`O`red`k dude you got it...\n\r");
+		money_minus(intval*max);
+		if (cur_user.rest_where==REG_HOTEL)
+		  cur_user.hotel_paid_fer+=max;
+		else
+		  cur_user.hotel_paid_fer=max;
+		//cur_user.rest_where=REG_HOTEL;
+		//cur_user.hotel_paid_fer=max;
+		od_exit(10,FALSE);
+	      }
+	    }
+	  }
+	  else if (key=='E') {
+	    if (cur_user.rest_where!=NOWHERE && cur_user.rest_where!=EXP_HOTEL) {
+
+	      ny_line(61,2,0);
+	      //od_printf("\n\r\n\r`bright red`Y`red`er already staying at: ");
+	      if(!rip) {
+		if (cur_user.rest_where==MOTEL) od_printf("C`green`heap `bright green`M`green`otel");
+		else if (cur_user.rest_where==REG_HOTEL) od_printf("R`green`egular `bright green`H`green`otel");
+	      } else {
+		if (cur_user.rest_where==MOTEL) od_printf("Cheap Motel::@OK))|#|#|#");
+		else if (cur_user.rest_where==REG_HOTEL) od_printf(" Regular Hotel::@OK))|#|#|#\n\r");
+	      }
+	      ny_line(62,2,0);
+	      //od_printf(" `bright red`W`red`anna check outta there (no money back)? (`bright red`Y`red`/`bright red`N`red`)");
+
+	      s_key=ny_get_answer("YN");
+	      od_putch(s_key);
+	      if (s_key=='Y') goto Exp_hotel_ok;
+	      if(rip) no_rip_m=1;
+	    } else {
+Exp_hotel_ok:;
+	      intval=(cur_user.level*110)+110;
+
+	      ny_line(297,2,0);
+	      od_printf(D_Num(intval));
+	      ny_line(298,0,0);
+	      //od_printf("\n\r\n\r`bright red`I`red`t will cost ya `bright red`%d`red` per day.",intval);// still wanna do it(`bright red`Y`red`/`bright red`N`red`)",intval);
+	      max=cur_user.money/intval;
+	      if(rip)
+		od_get_answer("\n\r");
+	      if (max>255) max=255;
+	      ny_line(299,2,0);
+	      od_printf(D_Num(max));
+	      ny_line(300,0,2);
+	      if(rip) {
+		od_get_answer("\n\r");
+	      //od_printf("\n\r`bright red`Y`red`ou can afford `bright red`%s`red` days!\n\r",D_Num(max));
+		od_send_file("input.rip");
+	      }
+
+	      ny_line(301,0,0);
+	      od_printf(D_Num(max));
+	      ny_disp_emu("`2):");
+	      //od_printf("`bright green`H`green`ow mady days ya wanna stay here? (`bright blue`Enter`green`=`bright green`[0]`green`, `bright blue`M`green`=max `bright green`%d`green`):",max);
+
+	      max=get_val((DWORD)0,(DWORD)max);
+	      if (max==0) {
+		//if (intval>cur_user.money) {
+		//  if (cur_user.rest_where==NOWHERE) {
+		//    od_printf("`bright red`Y`red`a cant afford that...\n\r");
+		//  } else {
+
+		if (cur_user.rest_where!=NOWHERE) {
+		  ny_line(63,1,0);
+		  //od_printf("`bright red`Y`red`e're still staying at: ");
+		  if(!rip) {
+		    if (cur_user.rest_where==MOTEL) od_printf("C`green`heap `bright green`M`green`otel");
+		    else if (cur_user.rest_where==REG_HOTEL) od_printf("R`green`egular `bright green`H`green`otel");
+		    else if (cur_user.rest_where==EXP_HOTEL) od_printf("E`green`xpensive `bright green`H`green`otel");
+		  } else {
+		    if (cur_user.rest_where==MOTEL) od_printf("Cheap Motel::@OK))|#|#|#");
+		    else if (cur_user.rest_where==REG_HOTEL) od_printf(" Regular Hotel::@OK))|#|#|#\n\r");
+		    else if (cur_user.rest_where==EXP_HOTEL) od_printf(" Expensive Hotel::@OK))|#|#|#\n\r");
+		  }
+		  od_printf("\n\r");
+
+		  if (rip==FALSE) WaitForEnter();
+		}
+	      } else {
+
+		ny_line(64,1,1);
+		//od_printf("`bright red`O`red`k dude you got it...\n\r");
+		money_minus(intval*max);
+		if (cur_user.rest_where==EXP_HOTEL)
+		  cur_user.hotel_paid_fer+=max;
+		else
+		  cur_user.hotel_paid_fer=max;
+		//cur_user.rest_where=EXP_HOTEL;
+		//cur_user.hotel_paid_fer=max;
+		od_exit(10,FALSE);
+	      }
+	    }
+	  }
+	} while (key!='Q');
+}
+
+
+
+void
+DisplayBest(void)
+{
+//  ffblk ffblk;
+  best_rec_type best_rec;
+  FILE *justfile;
+  INT16 cnt;
+
+  ch_game_d();
+  if (fexist(BESTTEN_FILENAME)) {
+    justfile=ShareFileOpen(BESTTEN_FILENAME,"rb");
+    od_printf("\n\r\n\r");
+    ny_clr_scr();
+    if(rip) od_send_file("frame.rip");
+    if(rip) od_send_file("frame1.rip");
+    ny_send_menu(TEN_BEST,"");
+    cnt=1;
+/*    od_printf("\n\r`bright red`T`red`en `bright red`B`red`est ... `bright red`W`red`inners\n\r\n\r");
+    od_printf("`bright blue`-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\r");
+    od_printf("`cyan`Rank:    Name:                     Points:");*/
+    while(ny_fread(&best_rec,sizeof(best_rec),1,justfile)==1) {
+      od_printf("`bright red`%-2d       `bright green`",cnt);
+      ny_disp_emu(best_rec.name,25);
+      od_printf(" `bright red`%s\n\r",D_Num(best_rec.points));
+      cnt++;
+    }
+//    od_printf("\n\r");
+    ny_line(399,0,1);
+    //ny_send_menu(BLUE_LINE,"");
+    //od_printf("\n\r`bright blue`-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\r");
+    fclose(justfile);
+    ny_line(1,1,0);
+//    ny_disp_emu("\n\r`@Smack [ENTER] to go on.");
+    od_get_answer("\n\r");
+  }
+}
+
+void
+DisplayBestIB(void)
+{
+//  ffblk ffblk;
+  ibbs_best_rec_type best_rec;
+  FILE *justfile;
+  INT16 cnt;
+
+  ch_game_d();
+  if (fexist(IBBS_BESTTEN_FILENAME)) {
+    justfile=ShareFileOpen(IBBS_BESTTEN_FILENAME,"rb");
+    od_printf("\n\r\n\r");
+    ny_clr_scr();
+    if(rip) od_send_file("frame.rip");
+    if(rip) od_send_file("frame1.rip");
+    ny_send_menu(TEN_BEST_IBBS,"");
+    cnt=1;
+/*    od_printf("\n\r`bright red`T`red`en `bright red`B`red`est ... `bright red`W`red`inners\n\r\n\r");
+    od_printf("`bright blue`-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\r");
+    od_printf("`cyan`Rank:    Name:                     Points:");*/
+    while(ny_fread(&best_rec,sizeof(best_rec),1,justfile)==1) {
+      //findmeagain
+//      od_printf("`bright red`%-2d       `bright green`",cnt);
+      od_set_attrib(0x0a);
+      ny_disp_emu(best_rec.name,25);
+      od_printf(" `bright red`%-13s ",D_Num(best_rec.points));
+      od_set_attrib(0x02);
+      ny_disp_emu(LocationOf(best_rec.location));
+      od_disp_str("\n\r");
+      cnt++;
+    }
+//    od_printf("\n\r");
+    ny_line(399,0,1);
+    //ny_send_menu(BLUE_LINE,"");
+    //od_printf("\n\r`bright blue`-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\r");
+    fclose(justfile);
+    ny_line(1,1,0);
+//    ny_disp_emu("\n\r`@Smack [ENTER] to go on.");
+    od_get_answer("\n\r");
+  }
+}
+
+
+
+void
+AddBestPlayer(void)
+{
+//  ffblk ffblk;
+  best_rec_type best_rec,best_rec2;
+  FILE *justfile;
+  INT16 cnt=0,len_of_list;
+  strcpy(best_rec2.name,cur_user.name);
+  best_rec2.points=cur_user.points;
+
+  ch_game_d();
+
+  ny_remove(SENTBESTTEN_FILENAME);
+
+  if (fexist(BESTTEN_FILENAME)) {
+    justfile=ShareFileOpen(BESTTEN_FILENAME,"r+b");
+    len_of_list=filelength(fileno(justfile))/sizeof(best_rec_type) +1;
+    if (len_of_list>10) len_of_list=10;
+
+    while (cnt<10 && ny_fread(&best_rec,sizeof(best_rec_type),1,justfile)==1) {
+      if (cur_user.points>=best_rec.points) {
+	//fseek(justfile,(INT32)cnt*sizeof(best_rec_type),SEEK_SET);
+	//ny_fwrite(&best_rec2,sizeof(best_rec_type),1,justfile);
+	strcpy(best_rec.name,best_rec2.name);
+	best_rec.points=best_rec2.points;
+	//cnt++;
+	while (cnt<len_of_list) {
+	  fseek(justfile,(INT32)cnt*sizeof(best_rec_type),SEEK_SET);
+	  ny_fread(&best_rec2,sizeof(best_rec_type),1,justfile);
+	  fseek(justfile,(INT32)cnt*sizeof(best_rec_type),SEEK_SET);
+	  ny_fwrite(&best_rec,sizeof(best_rec_type),1,justfile);
+	  strcpy(best_rec.name,best_rec2.name);
+	  best_rec.points=best_rec2.points;
+	  cnt++;
+	}
+	fclose(justfile);
+
+	if(ibbs==FALSE) {
+	  ny_line(302,2,1);
+	  //od_printf("\n\r\n\r`bright red`Y`red`ou made the `bright`BEST`red` list.\n\r");
+
+//        WaitForEnter();
+	  if(rip)
+	    od_get_answer("\n\r");
+	}
+	return;
+      }
+      cnt++;
+    }
+    fclose(justfile);
+    if (cnt<10) {
+      justfile=ShareFileOpen(BESTTEN_FILENAME,"a+b");
+      ny_fwrite(&best_rec2,sizeof(best_rec_type),1,justfile);
+      fclose(justfile);
+
+      if(ibbs==FALSE) {
+	ny_line(302,2,1);
+	//od_printf("\n\r\n\r`bright red`Y`red`ou made the `bright`BEST`red` list.\n\r");
+
+	if(rip)
+	  od_get_answer("\n\r");
+      }
+      return;
+    } else {
+
+      if(ibbs==FALSE) {
+	ny_line(303,2,1);
+	//od_printf("\n\r\n\r`bright red`Y`red`ou didn't make the `bright`BEST`red` list.\n\r`bright red`T`red`here were better.\n\r");
+
+  //    WaitForEnter();
+	if(rip)
+	  od_get_answer("\n\r");
+      }
+      return;
+    }
+  }
+  justfile=ShareFileOpen(BESTTEN_FILENAME,"wb");
+  ny_fwrite(&best_rec2,sizeof(best_rec_type),1,justfile);
+  fclose(justfile);
+
+  if(ibbs==FALSE) {
+    ny_line(302,2,1);
+//    od_printf("\n\r\n\r`bright red`Y`red`ou made the `bright`BEST`red` list.\n\r
+    if(rip)
+      od_get_answer("\n\r");
+    ny_line(304,0,1);
+    if(rip)
+      od_get_answer("\n\r");
+  }
+  //`bright red`A`red`ctually ya were the first to do it.\n\r");
+
+ // WaitForEnter();
+  return;
+}
+
+void
+AddBestPlayerIB(void)
+{
+//  ffblk ffblk;
+  ibbs_best_rec_type best_rec,best_rec2;
+  FILE *justfile;
+  INT16 cnt=0,len_of_list;
+  strcpy(best_rec2.name,cur_user.name);
+  strcpy(best_rec.location,IBBSInfo.szThisNodeAddress);
+  best_rec2.points=cur_user.points;
+
+
+  ch_game_d();
+  if (fexist(IBBS_BESTTEN_FILENAME)) {
+    justfile=ShareFileOpen(IBBS_BESTTEN_FILENAME,"r+b");
+    len_of_list=filelength(fileno(justfile))/sizeof(ibbs_best_rec_type) +1;
+    if (len_of_list>10) len_of_list=10;
+
+    /*check if the same record exists*/
+    while (cnt<10 && ny_fread(&best_rec,sizeof(ibbs_best_rec_type),1,justfile)==1) {
+      if (cur_user.points==best_rec.points &&
+	  strcmp(best_rec.location,IBBSInfo.szThisNodeAddress)==0 &&
+	  strcmp(best_rec.name,cur_user.name)==0) {
+	/*if it already exists quit this function*/
+	fclose(justfile);
+	return;
+      }
+    }
+
+    /*rewind the file to beginning*/
+    fseek(justfile,0,SEEK_SET);
+
+    while (cnt<10 && ny_fread(&best_rec,sizeof(ibbs_best_rec_type),1,justfile)==1) {
+      if (cur_user.points>=best_rec.points) {
+	//fseek(justfile,(INT32)cnt*sizeof(best_rec_type),SEEK_SET);
+	//ny_fwrite(&best_rec2,sizeof(best_rec_type),1,justfile);
+	strcpy(best_rec.location,best_rec2.location);
+	strcpy(best_rec.name,best_rec2.name);
+	best_rec.points=best_rec2.points;
+	//cnt++;
+	while (cnt<len_of_list) {
+	  fseek(justfile,(INT32)cnt*sizeof(ibbs_best_rec_type),SEEK_SET);
+	  ny_fread(&best_rec2,sizeof(ibbs_best_rec_type),1,justfile);
+	  fseek(justfile,(INT32)cnt*sizeof(ibbs_best_rec_type),SEEK_SET);
+	  ny_fwrite(&best_rec,sizeof(ibbs_best_rec_type),1,justfile);
+	  strcpy(best_rec.location,best_rec2.location);
+	  strcpy(best_rec.name,best_rec2.name);
+	  best_rec.points=best_rec2.points;
+	  cnt++;
+	}
+	fclose(justfile);
+
+	ny_line(302,2,1);
+	//od_printf("\n\r\n\r`bright red`Y`red`ou made the `bright`BEST`red` list.\n\r");
+
+//      WaitForEnter();
+	if(rip)
+	  od_get_answer("\n\r");
+	return;
+      }
+      cnt++;
+    }
+    fclose(justfile);
+    if (cnt<10) {
+      justfile=ShareFileOpen(IBBS_BESTTEN_FILENAME,"a+b");
+      ny_fwrite(&best_rec2,sizeof(ibbs_best_rec_type),1,justfile);
+      fclose(justfile);
+
+      ny_line(302,2,1);
+      //od_printf("\n\r\n\r`bright red`Y`red`ou made the `bright`BEST`red` list.\n\r");
+
+      if(rip)
+	od_get_answer("\n\r");
+      return;
+    } else {
+
+      ny_line(303,2,1);
+      //od_printf("\n\r\n\r`bright red`Y`red`ou didn't make the `bright`BEST`red` list.\n\r`bright red`T`red`here were better.\n\r");
+
+  //  WaitForEnter();
+      if(rip)
+	od_get_answer("\n\r");
+      return;
+    }
+  }
+  justfile=ShareFileOpen(IBBS_BESTTEN_FILENAME,"wb");
+  ny_fwrite(&best_rec2,sizeof(ibbs_best_rec_type),1,justfile);
+  fclose(justfile);
+
+  ny_line(302,2,1);
+//  od_printf("\n\r\n\r`bright red`Y`red`ou made the `bright`BEST`red` list.\n\r
+  if(rip)
+    od_get_answer("\n\r");
+  ny_line(304,0,1);
+  if(rip)
+    od_get_answer("\n\r");
+  //`bright red`A`red`ctually ya were the first to do it.\n\r");
+
+ // WaitForEnter();
+  return;
+}
+
+
+void
+AddBestPlayerInIB(char *name,DWORD points)
+{
+//  ffblk ffblk;
+  best_rec_type best_rec,best_rec2;
+  FILE *justfile;
+  INT16 cnt=0,len_of_list;
+  strcpy(best_rec2.name,name);
+  best_rec2.points=points;
+
+
+  ch_game_d();
+  if (fexist(IBBS_BESTTEN_FILENAME)) {
+    justfile=ShareFileOpen(IBBS_BESTTEN_FILENAME,"r+b");
+    len_of_list=filelength(fileno(justfile))/sizeof(best_rec_type) +1;
+    if (len_of_list>10) len_of_list=10;
+
+
+
+    while (cnt<10 && ny_fread(&best_rec,sizeof(best_rec_type),1,justfile)==1) {
+
+      if (points>=best_rec.points) {
+	//fseek(justfile,(INT32)cnt*sizeof(best_rec_type),SEEK_SET);
+	//ny_fwrite(&best_rec2,sizeof(best_rec_type),1,justfile);
+	strcpy(best_rec.name,best_rec2.name);
+	best_rec.points=best_rec2.points;
+	//cnt++;
+	while (cnt<len_of_list) {
+	  fseek(justfile,(INT32)cnt*sizeof(best_rec_type),SEEK_SET);
+	  ny_fread(&best_rec2,sizeof(best_rec_type),1,justfile);
+	  fseek(justfile,(INT32)cnt*sizeof(best_rec_type),SEEK_SET);
+	  ny_fwrite(&best_rec,sizeof(best_rec_type),1,justfile);
+	  strcpy(best_rec.name,best_rec2.name);
+	  best_rec.points=best_rec2.points;
+	  cnt++;
+	}
+	fclose(justfile);
+
+	if(ibbs_maint_i==FALSE) {
+	  ny_line(302,2,1);
+	  //od_printf("\n\r\n\r`bright red`Y`red`ou made the `bright`BEST`red` list.\n\r");
+
+//        WaitForEnter();
+	  if(rip)
+	    od_get_answer("\n\r");
+	}
+	return;
+      }
+      cnt++;
+
+    }
+
+    fclose(justfile);
+    if (cnt<10) {
+      justfile=ShareFileOpen(IBBS_BESTTEN_FILENAME,"a+b");
+      ny_fwrite(&best_rec2,sizeof(best_rec_type),1,justfile);
+      fclose(justfile);
+
+      if(ibbs_maint_i==FALSE) {
+	ny_line(302,2,1);
+	//od_printf("\n\r\n\r`bright red`Y`red`ou made the `bright`BEST`red` list.\n\r");
+
+	if(rip)
+	  od_get_answer("\n\r");
+      }
+      return;
+    } else {
+
+      if(ibbs_maint_i==FALSE) {
+	ny_line(303,2,1);
+	//od_printf("\n\r\n\r`bright red`Y`red`ou didn't make the `bright`BEST`red` list.\n\r`bright red`T`red`here were better.\n\r");
+
+  //    WaitForEnter();
+	if(rip)
+	  od_get_answer("\n\r");
+      }
+      return;
+    }
+  }
+  justfile=ShareFileOpen(IBBS_BESTTEN_FILENAME,"wb");
+  ny_fwrite(&best_rec2,sizeof(best_rec_type),1,justfile);
+  fclose(justfile);
+
+  if(ibbs_maint_i==FALSE) {
+    ny_line(302,2,1);
+//    od_printf("\n\r\n\r`bright red`Y`red`ou made the `bright`BEST`red` list.\n\r
+    if(rip)
+      od_get_answer("\n\r");
+    ny_line(304,0,1);
+    //Actually ya were the first to do it.
+    if(rip)
+      od_get_answer("\n\r");
+   }
+  return;
+}
+
+
+INT16
+strzcmp(char str1[], char str2[])
+{
+  char temp1[40],
+       temp2[40];
+
+  strcpy(temp1,str1);
+  strcpy(temp2,str2);
+  strlwr(temp1);
+  strlwr(temp2);
+
+//  if (strstr(temp1,temp2)!=NULL) return 0; //found
+  if (strstr(temp2,temp1)!=NULL) return 0;
+
+  return 1;
+}
+
+
+
+void
+mail_ops(void)
+{
+	char key;
+	char hand[25];
+	char omg[51];
+	char numstr[26];
+	char line[80],ovr[80];
+	FILE *justfile;
+	FILE *msg_file;
+	scr_rec urec;
+	user_rec u2rec;
+	INT16 unum,ret,cnt;
+	mail_idx_type mail_idx;
+	INT32 fillen;
+
+	ovr[0]=0;
+	line[0]=0;
+
+	do {
+	  key=callmenu("SAROCQ?\n\r",MAIL,344,FALSE);
+	  while (expert>0 && key=='?') {
+	    expert+=10;
+	    key=callmenu("SAROCQ?\n\r",MAIL,344,FALSE);
+	    expert-=10;
+	  }
+
+
+	  if (key=='Y') {
+	    DisplayStats();
+	    WaitForEnter();
+	  } else if (key=='C') {
+
+	    od_printf("\n\r\n\r");
+	    if(rip) {
+	      od_send_file("frame.rip");
+	      od_send_file("frame1.rip");
+	    }
+	    ny_send_menu(COLORS_HELP,"");
+/*          od_printf("\n\r\n\r`bright red`S`red`o ya'd like to use colors, huh?\n\r\n\r");
+	    od_printf("`bright red`W`red`ell its easy. `bright red`T`red`hey can be used in mail and the stuff you say.\n\r\n\r");
+	    od_printf("`bright red`Y`red`ou simply type the `bright`");
+	    od_putch('`');
+	    od_printf("`red` character and one of the following:\n\r");
+	    ny_disp_emu("`11`22`33`44`55`66`77`88`99`00`!!`@@`##`$$`%%");
+	    od_printf("\n\r\n\r`bright`");
+	    od_putch('`');
+	    od_printf("$Colors ");
+	    od_putch('`');
+	    od_printf("0RULE\n\r\n\rWould look like:\n\r\n\r");
+	    ny_disp_emu("`$Colors `0RULE");
+	    ny_disp_emu("\n\r\n\r`@N`4OTE: `@S`4ame as in `@LORD\n\r");*/
+
+	    WaitForEnter();
+
+	  } else if (key=='S') {
+
+	    mail_idx.flirt=0;
+
+	    if(rip) od_send_file("tframe2.rip");
+	    ny_line(305,2,0);
+	    //od_printf("\n\r\n\r`bright red`W`red`ho's mailbox do ya wanna fill (`bright red`full`red` or `bright red`partial`red` name):`bright green`");
+
+	    od_input_str(hand,24,' ',255);
+	    ny_un_emu(hand);
+	    //od_printf("\n\r");
+	    unum=0;
+	    ret=1;
+	    if (hand[0]!=0) {
+	      do {
+		ch_game_d();
+		justfile=ShareFileOpen(SCR_FILENAME,"rb");
+		fseek(justfile,sizeof(scr_rec) * (INT32)unum,SEEK_SET);
+		do {
+		  ret=ny_fread(&urec,sizeof(scr_rec),1,justfile);
+		  unum++;
+		} while ((strzcmp(hand,ny_un_emu(urec.name,numstr)) || urec.user_num==nCurrentUserNumber) && ret==1);
+		fclose(justfile);
+	      } while (ret==1 && askifuser(urec.name)==FALSE);
+	    }
+	    if (ret!=1) {
+
+	      ny_line(133,1,1);
+//            od_printf("\n\r`bright red`G`red`ot no idea who you mean ...");
+
+	      if(!rip)
+		WaitForEnter();
+	      else
+		od_get_answer("\n\r");
+	    } else if (hand[0]!=0) {
+	      if (urec.sex!=cur_user.sex && cur_user.sex_today>0) {
+
+		ny_line(306,1,0);
+//              ny_disp_emu("\n\r`@A`4sk `@");
+		if(!rip)
+		  ny_disp_emu(urec.name);
+		else
+		  od_disp_str(ny_un_emu(urec.name,numstr));
+		ny_line(307,0,0);
+//              ny_disp_emu("`4 to have sex with you?(`@Y`4/`@N`4)");
+
+		key=ny_get_answer("YN");
+		if(!rip)
+		  od_printf("%c\n\r",key);
+		else
+		  od_disp_str("\n\r");
+		if (key=='Y') {
+		  if (cur_user.sex_today<=0) {
+
+		    ny_line(118,1,1);
+		    //od_printf("\n\r\n\r`bright`You already used up all your sex turns today ...\n\r");
+
+		    if(!rip)
+		      WaitForEnter();
+		    else
+		      od_get_answer("\n\r");
+		    od_printf("\n\r");
+		  } else {
+		    mail_idx.flirt=1;
+		    cur_user.sex_today--;
+		  }
+		}
+	      }
+	      ch_game_d();
+	      justfile=ShareFileOpen(USER_FILENAME,"rb");
+	      fseek(justfile,sizeof(user_rec) * (INT32)urec.user_num,SEEK_SET);
+	      ny_fread(&u2rec,sizeof(user_rec),1,justfile);
+	      fclose(justfile);
+
+	      ny_line(308,1,1);
+	      //od_printf("\n\r`bright red`O`red`k type yer message now (`bright red`/s`red`=save `bright red`/a`red`=abort):\n\r");
+
+	      ch_flag_d();
+	      sprintf(numstr,"u%07d.tmg", nCurrentUserNumber);
+	      justfile=ShareFileOpen(numstr,"wb");
+	      cnt= -1;
+	      do {
+		cnt++;
+		get_line(ovr,line,ovr,TRUE);
+		ny_fwrite(&line,80,1,justfile);
+	      } while ((line[0]!='/' && (line[1]!='s' || line[1]!='S')) && (line[0]!='/' && (line[1]!='a' || line[1]!='A')));
+	      fclose(justfile);
+
+	      if ((line[1]=='s' || line[1]=='S') && (cnt>0 || mail_idx.flirt==1)) {
+		ny_line(135,0,1);
+		//od_printf("\b\b`bright red`S`red`aving...\n\r");
+		mail_idx.length=cnt;
+		strcpy(mail_idx.sender,cur_user.name);
+		strcpy(mail_idx.senderI,cur_user.bbsname);
+		strcpy(mail_idx.recver,urec.name);
+		strcpy(mail_idx.recverI,u2rec.bbsname);
+		mail_idx.afterquote=0;
+		mail_idx.deleted=FALSE;
+		mail_idx.sender_sex=cur_user.sex;
+		mail_idx.ill=cur_user.std;
+		mail_idx.inf=cur_user.std_percent;
+		ch_flag_d();
+		justfile=ShareFileOpen(numstr,"rb");
+		ch_game_d();
+		msg_file=ShareFileOpen(MAIL_FILENAME,"a+b");
+		fillen=filelength(fileno(msg_file));
+		fillen/=80;
+		mail_idx.location=fillen;
+		while ((cnt--)>0) {
+		  ny_fread(&line,80,1,justfile);
+		  ny_fwrite(&line,80,1,msg_file);
+		}
+		fclose(msg_file);
+		fclose(justfile);
+		//sprintf(numstr,"del u%07d.tmg");
+		//system(numstr);
+		ch_flag_d();
+		ny_remove(numstr);
+		ch_game_d();
+		msg_file=ShareFileOpen(MAIL_INDEX,"a+b");
+		ny_fwrite(&mail_idx,sizeof(mail_idx_type),1,msg_file);
+		fclose(msg_file);
+		if(single_node==FALSE && urec.online==TRUE) {
+		  ch_flag_d();
+		  sprintf(numstr,"u%07d.omg",urec.user_num);
+		  omg[0]=27;
+		  omg[1]=0;
+		  justfile=ShareFileOpen(numstr,"a+b");
+		  ny_fwrite(&omg,51,1,justfile);
+		  ny_fwrite(&cur_user.name,25,1,justfile);
+		  fclose(justfile);
+		}
+	      } else {
+		ny_line(136,0,1);
+//              od_printf("\b\b`bright red`A`red`borted...\n\r");
+	      //sprintf(numstr,"del u%07d.tmg");
+	      //system(numstr);
+		if(mail_idx.flirt==1) cur_user.sex_today++;
+		ch_flag_d();
+		ny_remove(numstr);
+	      }
+	      if(!rip)
+		WaitForEnter();
+	      else
+		od_get_answer("\n\r");
+	    }
+	  } else if (key=='R') {
+	    read_mail();
+	    if(ibbs)read_ibmail();
+	  } else if (key=='A') {
+
+	    if(rip) od_send_file("texti.rip");
+	    ny_line(309,2,1);
+  //        od_printf("\n\r\n\r`bright red`S`red`ay what:\n\r");
+	    ny_line(310,0,1);
+  //        od_printf("|-----------------------------------------------------------------------------|\n\r`bright green`");
+
+	    od_input_str(line,79,' ',255);
+	    if(line[0]!=0) {
+	      if(dobad)
+		dobadwords(line);
+	      news_post(line,cur_user.name,"",1);
+	      ny_line(311,2,1);
+//            od_printf("\n\r\n\r`bright red`P`red`osted...\n\r");
+	      if(!rip)
+		WaitForEnter();
+	      else
+		od_get_answer("\n\r");
+	    }
+	  } else if (key=='O') {
+	   if (single_node==TRUE) {
+	    //This is a Single Node only Game!!!!
+	    ny_line(338,2,1);
+	    if(!rip)
+	      WaitForEnter();
+	    else
+	      od_get_answer("\n\r");
+	   } else {
+
+	    if(rip) od_send_file("texti.rip");
+	    ny_line(312,2,0);
+	    //Who do ya want to bother (full or partial):
+
+	    od_input_str(hand,24,' ',255);
+	    ny_un_emu(hand);
+	    od_printf("\n\r");
+	    unum=0;
+	    if (hand[0]!=0) {
+	      do {
+		ch_game_d();
+		justfile=ShareFileOpen(SCR_FILENAME,"rb");
+		fseek(justfile,sizeof(scr_rec) * (INT32)unum,SEEK_SET);
+ask_online_again:;
+		do {
+		  ret=ny_fread(&urec,sizeof(scr_rec),1,justfile);
+		  unum++;
+		} while (strzcmp(hand,ny_un_emu(urec.name,numstr)) && ret==1);
+		if (urec.online==FALSE && ret==1) goto ask_online_again;
+		fclose(justfile);
+	      } while (ret==1 && askifuser(urec.name)==FALSE);
+	    }
+	    unum--;
+	    if (ret!=1) {
+
+	      ny_line(133,0,1);
+	      //Got no idea who you mean ...
+
+	      if(!rip)
+		WaitForEnter();
+	      else
+		od_get_answer("\n\r");
+	    } else if (hand[0]!=0) {
+
+	      ny_line(313,2,0);
+	      ny_line(314,1,1);
+	      //Ok type what u wanna say now:
+	      //+------------------------------------------------+
+
+	      od_input_str(omg,50,' ',255);
+	      if(dobad)
+		dobadwords(omg);
+
+	      ch_flag_d();
+	      sprintf(numstr,"u%07d.omg",urec.user_num);
+	      justfile=ShareFileOpen(numstr,"a+b");
+	      ny_fwrite(&omg,51,1,justfile);
+	      ny_fwrite(&cur_user.name,25,1,justfile);
+	      fclose(justfile);
+	      ny_line(315,2,1);
+	      //Sent!
+	      if(!rip)
+		WaitForEnter();
+	      else
+		od_get_answer("\n\r");
+	    }
+	   }
+	  }
+	} while (key!='Q');
+}
+
+
+
+
+
+
+
+void
+read_mail(void)
+{
+  FILE *justfile;
+  FILE *njustfile;
+  INT32 fillen;
+  INT32 filepos;
+  mail_idx_type mail_idx;
+  INT16 intval;
+  char numstr[36];
+  char key;
+  char ovr[80],line[80];
+  INT16 cnt,cnt2;
+  INT16 nonstop;
+  user_rec urec;
+  char omg[2];
+  INT16 unum;
+  DWORD mon, med;
+
+  filepos=0;
+
+  if(rip) od_send_file("tframe1.rip");
+
+  do {
+    ch_game_d();
+    justfile=ShareFileOpen(MAIL_INDEX,"rb");
+    fseek(justfile,filepos,SEEK_SET);
+    intval=ny_fread(&mail_idx,sizeof(mail_idx_type),1,justfile);
+
+    ny_line(316,2,0);
+    //Searching ...
+    while (intval==1 && (strcmp(mail_idx.recverI,cur_user.bbsname)!=0 || mail_idx.deleted==TRUE))
+      intval=ny_fread(&mail_idx,sizeof(mail_idx_type),1,justfile);
+    filepos=ftell(justfile);
+    fclose(justfile);
+    if (intval==1) {
+      nonstop=FALSE;
+
+      ny_line(317,2,0);
+      //Mail from:
+      ny_disp_emu(mail_idx.sender);
+      ny_line(318,0,0);
+      //To:
+      ny_disp_emu(mail_idx.recver);
+      od_printf("\n\r");
+      cnt=0;
+      cnt2=2;
+      if (mail_idx.flirt<=998) {
+	ch_game_d();
+	justfile=ShareFileOpen(MAIL_FILENAME,"rb");
+	fseek(justfile,(INT32)mail_idx.location * 80,SEEK_SET);
+	od_printf("`green`");
+	while (cnt<mail_idx.length) {
+	  ny_fread(&line,80,1,justfile);
+	  if (cnt<mail_idx.afterquote) {
+	    ny_disp_emu("`9>`2");
+	    ny_disp_emu(line);
+	    od_printf("\n\r");
+	  } else {
+	    od_set_attrib(0x0a); //bright green
+	    ny_disp_emu(line);
+	    od_printf("\n\r");
+	  }
+	  cnt++;
+	  cnt2++;
+	  if (nonstop==FALSE && cnt2%od_control.user_screen_length==0) {
+	    fclose(justfile);
+
+	    ny_disp_emu("`%More (Y/n/=)");
+	    key=ny_get_answer("YN=\n\r");
+	    ny_disp_emu("\r            \r");
+	    cnt2=1;
+	    if(key=='N')
+	      return;
+	    else if(key=='=')
+	      nonstop=TRUE;
+
+	    ch_game_d();
+	    justfile=ShareFileOpen(MAIL_FILENAME,"rb");
+	    fseek(justfile,(INT32)(mail_idx.location+cnt) * 80,SEEK_SET);
+	  }
+	}
+	fclose(justfile);
+
+	if (mail_idx.flirt==1) {
+
+	  ny_disp_emu("\n\r`@");
+	  ny_disp_emu(mail_idx.sender);
+	  ny_line(319,0,0);
+	  //wants to have sex with ya Ok?
+	  ny_line(320,1,0);
+	  //[O]=OK (sex) R=reply D=delete I=ignore >
+
+	  key=ny_get_answer("ORDI\n\r");
+	  if (key=='\n' || key=='\r') key='O';
+	} else {
+
+	  ny_line(321,1,0);
+	  //R=reply [D]=delete I=ignore >
+
+	  key=ny_get_answer("RDI\n\r");
+	  if (key=='\n' || key=='\r') key='D';
+	}
+	od_printf("%c\n\r",key);
+      } else if (mail_idx.flirt==999) {
+
+	ny_disp_emu("\n\r`@");
+	ny_disp_emu(mail_idx.sender);
+	ny_line(322,0,1);
+	//agreed and had sex with ya ...
+
+	cur_user.since_got_laid=0;
+	points_raise((INT32)50*(cur_user.level+1));
+	illness(mail_idx.ill,mail_idx.inf);
+	ch_game_d();
+	justfile=ShareFileOpen(MAIL_INDEX,"r+b");
+	fseek(justfile,filepos-sizeof(mail_idx_type),SEEK_SET);
+	mail_idx.deleted=TRUE;
+	ny_fwrite(&mail_idx,sizeof(mail_idx_type),1,justfile);
+	fclose(justfile);
+	WaitForEnter();
+	key=-1;
+      } else if (mail_idx.flirt==1000) {
+
+	ny_disp_emu("\n\r`@");
+	ny_disp_emu(mail_idx.sender);
+	ny_line(323,0,1);
+	//raped you!!
+
+	illness(mail_idx.ill,mail_idx.inf);
+	ch_game_d();
+	justfile=ShareFileOpen(MAIL_INDEX,"r+b");
+	fseek(justfile,filepos-sizeof(mail_idx_type),SEEK_SET);
+	mail_idx.deleted=TRUE;
+	ny_fwrite(&mail_idx,sizeof(mail_idx_type),1,justfile);
+	fclose(justfile);
+	WaitForEnter();
+	key=-1;
+      } else if (mail_idx.flirt==1001) {
+
+	ny_disp_emu("\n\r`@");
+	ny_disp_emu(mail_idx.sender);
+	ny_line(324,0,1);
+	//defeated you!!
+
+	ch_game_d();
+	justfile=ShareFileOpen(MAIL_INDEX,"r+b");
+	fseek(justfile,filepos-sizeof(mail_idx_type),SEEK_SET);
+	mail_idx.deleted=TRUE;
+	ny_fwrite(&mail_idx,sizeof(mail_idx_type),1,justfile);
+	fclose(justfile);
+	WaitForEnter();
+	key=-1;
+      } else if (mail_idx.flirt==1002) {
+	ch_game_d();
+	justfile=ShareFileOpen(MAIL_FILENAME,"rb");
+	fseek(justfile,(INT32)mail_idx.location * 80,SEEK_SET);
+	fread(&mon,sizeof(DWORD),1,justfile);
+	fclose(justfile);
+
+
+	med=ULONG_MAX-mon;
+	if (med<=cur_user.money)
+	  mon=med;
+
+
+	ny_disp_emu("\n\r`@");
+	ny_disp_emu(mail_idx.sender);
+	ny_line(419,0,0);
+	od_printf("%s",D_Num(mon));
+	ny_line(420,0,1);
+
+	cur_user.money+=mon;
+
+	wrt_sts();
+
+	justfile=ShareFileOpen(MAIL_INDEX,"r+b");
+	fseek(justfile,filepos-sizeof(mail_idx_type),SEEK_SET);
+	mail_idx.deleted=TRUE;
+	ny_fwrite(&mail_idx,sizeof(mail_idx_type),1,justfile);
+	fclose(justfile);
+	WaitForEnter();
+	key=-1;
+      }
+
+      if (key=='D' || key=='R') {
+	if (key=='D')
+	  ny_line(325,1,2);
+	  //Deleting...
+	ch_game_d();
+	justfile=ShareFileOpen(MAIL_INDEX,"r+b");
+	fseek(justfile,filepos-sizeof(mail_idx_type),SEEK_SET);
+	mail_idx.deleted=TRUE;
+	ny_fwrite(&mail_idx,sizeof(mail_idx_type),1,justfile);
+	fclose(justfile);
+	if(key=='D' && rip==TRUE)
+	  od_get_answer("\n\r");
+      }
+      if (key=='O') {
+	/*sex with playeres goes here*/
+	if (cur_user.sex_today<=0) {
+
+	  ny_line(118,1,1);
+	  //You already used up all your sex turns today ...
+	  ny_line(326,0,1);
+	  //Try again tomorrow....
+
+	  WaitForEnter();
+	} else {
+	  ch_game_d();
+	  justfile=ShareFileOpen(MAIL_INDEX,"r+b");
+	  fseek(justfile,filepos-sizeof(mail_idx_type),SEEK_SET);
+	  mail_idx.deleted=TRUE;
+	  ny_fwrite(&mail_idx,sizeof(mail_idx_type),1,justfile);
+	  fclose(justfile);
+
+	  ny_line(327,2,0);
+	  //You just had sex with
+	  ny_disp_emu(mail_idx.sender);
+	  ny_disp_emu("`4 ...\n\r");
+
+	  cur_user.since_got_laid=0;
+	  cur_user.sex_today--;
+	  points_raise((INT32)50*(cur_user.level+1));
+
+	  desease ill;
+	  INT16 inf;
+
+	  inf=mail_idx.inf;
+	  ill=mail_idx.ill;
+
+	  strcpy(mail_idx.recver,mail_idx.sender);
+	  strcpy(mail_idx.sender,cur_user.name);
+	  strcpy(mail_idx.recverI,mail_idx.senderI);
+	  strcpy(mail_idx.senderI,cur_user.bbsname);
+	  mail_idx.flirt=999;
+	  mail_idx.deleted=FALSE;
+	  mail_idx.location=0;
+	  mail_idx.length=0;
+	  mail_idx.afterquote=0;
+	  mail_idx.ill=cur_user.std;
+	  mail_idx.inf=cur_user.std_percent;
+	  mail_idx.sender_sex=cur_user.sex;
+	  ch_game_d();
+	  justfile=ShareFileOpen(MAIL_INDEX,"a+b");
+	  ny_fwrite(&mail_idx,sizeof(mail_idx_type),1,justfile);
+	  fclose(justfile);
+	  if(single_node==FALSE) {
+
+	    unum=0;
+
+	    ch_game_d();
+	    justfile=ShareFileOpen(USER_FILENAME,"rb");
+	    while(ny_fread(&urec,sizeof(user_rec),1,justfile)==1) {
+	      if(strcmp(urec.bbsname,mail_idx.recverI)==0) {
+		fclose(justfile);
+		ch_flag_d();
+		sprintf(numstr,"u%07d.on",unum);
+		if(fexist(numstr)) {
+		  sprintf(numstr,"u%07d.omg",unum);
+		  omg[0]=27;
+		  omg[1]=1;
+		  justfile=ShareFileOpen(numstr,"a+b");
+		  ny_fwrite(&omg,51,1,justfile);
+		  ny_fwrite(&cur_user.name,25,1,justfile);
+		  fclose(justfile);
+		}
+		goto found_the_guy;
+	      }
+	      unum++;
+	    }
+	    fclose(justfile);
+	    found_the_guy:;
+	  }
+	  illness(ill,inf);
+	  WaitForEnter();
+	}
+      }
+      if (key=='R') {
+	mail_idx.flirt=0;
+	if (mail_idx.sender_sex!=cur_user.sex && cur_user.sex_today>0) {
+
+	  ny_line(328,1,0);
+	  //Ask
+	  if(!rip)
+	    ny_disp_emu(mail_idx.sender);
+	  else
+	    od_disp_str(ny_un_emu(mail_idx.sender,numstr));
+	  ny_line(329,0,0);
+	  //to have sex with you?(Y/N)
+
+	  key=ny_get_answer("YN");
+	  if(!rip)
+	    od_printf("%c\n\r",key);
+	  else
+	    od_disp_str("\n\r");
+	  if (key=='Y') {
+	    if (cur_user.sex_today<=0) {
+
+	      ny_line(118,1,1);
+	      //You already used up all your sex turns today ...
+
+	      WaitForEnter();
+	      od_printf("\n\r");
+	    } else {
+	      mail_idx.flirt=1;
+	      cur_user.sex_today--;
+	    }
+	  }
+	}
+
+	ny_line(330,1,0);
+	//Quote message? (Y/N)
+
+	key=ny_get_answer("YN");
+	if(!rip)
+	  od_printf("%c\n\r",key);
+	else
+	  od_disp_str("\n\r");
+	ch_flag_d();
+	sprintf(numstr,"u%07d.tmg",nCurrentUserNumber);
+	njustfile=ShareFileOpen(numstr,"wb");
+
+	ny_line(308,1,1);
+	//Ok type yer message now (/s=save /a=abort):
+	if (key=='N') {
+	  mail_idx.afterquote=0;
+	} else {
+	  ch_game_d();
+	  justfile=ShareFileOpen(MAIL_FILENAME,"rb");
+	  cnt= mail_idx.afterquote;
+	  fseek(justfile,(INT32)(mail_idx.location+cnt) * 80,SEEK_SET);
+	  while (cnt<mail_idx.length) {
+	    ny_fread(&line,80,1,justfile);
+	    ny_fwrite(&line,80,1,njustfile);
+	    ny_disp_emu("`9>`2");
+	    ny_disp_emu(line);
+	    ny_disp_emu("\n\r");
+	    cnt++;
+	  }
+	  fclose(justfile);
+	  mail_idx.afterquote=cnt-mail_idx.afterquote;
+	}
+
+	cnt=-1;
+	ovr[0]=0;
+	do {
+	  cnt++;
+	  get_line(ovr,line,ovr,TRUE);
+	  ny_fwrite(&line,80,1,njustfile);
+	} while ((line[0]!='/' && line[1]!='S') && (line[0]!='/' && line[1]!='A'));
+	fclose(njustfile);
+	if (line[1]=='s' || line[1]=='S') {
+	  ny_line(135,0,1);
+//        od_printf("\b\b`bright red`S`red`aving...\n\r");
+	  cnt+=mail_idx.afterquote;
+	  mail_idx.length=cnt;
+	  strcpy(mail_idx.recver,mail_idx.sender);
+	  strcpy(mail_idx.sender,cur_user.name);
+	  strcpy(mail_idx.recverI,mail_idx.senderI);
+	  strcpy(mail_idx.senderI,cur_user.bbsname);
+	  mail_idx.deleted=FALSE;
+	  mail_idx.sender_sex=cur_user.sex;
+	  mail_idx.ill=cur_user.std;
+	  mail_idx.inf=cur_user.std_percent;
+	  ch_flag_d();
+	  njustfile=ShareFileOpen(numstr,"rb");
+	  ch_game_d();
+	  justfile=ShareFileOpen(MAIL_FILENAME,"a+b");
+	  fillen=filelength(fileno(justfile));
+	  fillen/=80;
+	  mail_idx.location=fillen;
+	  while ((cnt--)>0) {
+	    ny_fread(&line,80,1,njustfile);
+	    ny_fwrite(&line,80,1,justfile);
+	  }
+	  fclose(justfile);
+	  fclose(njustfile);
+	  //sprintf(numstr,"del u%07d.tmg");
+	  //system(numstr);
+	  ch_flag_d();
+	  ny_remove(numstr);
+	  ch_game_d();
+	  justfile=ShareFileOpen(MAIL_INDEX,"a+b");
+	  ny_fwrite(&mail_idx,sizeof(mail_idx_type),1,justfile);
+	  fclose(justfile);
+
+	  if(single_node==FALSE) {
+//          scr_rec srec;
+
+	    unum=0;
+
+	    ch_game_d();
+	    justfile=ShareFileOpen(USER_FILENAME,"rb");
+	    while(ny_fread(&urec,sizeof(user_rec),1,justfile)==1) {
+	      if(strcmp(urec.bbsname,mail_idx.recverI)==0) {
+		fclose(justfile);
+		ch_flag_d();
+		sprintf(numstr,"u%07d.on",unum);
+		if(fexist(numstr)) {
+		  sprintf(numstr,"u%07d.omg",unum);
+		  omg[0]=27;
+		  omg[1]=1;
+		  justfile=ShareFileOpen(numstr,"a+b");
+		  ny_fwrite(&omg,51,1,justfile);
+		  ny_fwrite(&cur_user.name,25,1,justfile);
+		  fclose(justfile);
+		}
+		goto found_the_guy_2;
+	      }
+	      unum++;
+	    }
+	    fclose(justfile);
+	    found_the_guy_2:;
+	  }
+	} else {
+	  ny_line(136,0,1);
+	  //od_printf("\b\b`bright red`A`red`borted...\n\r");
+	  //sprintf(numstr,"del u%07d.tmg");
+	  //system(numstr);
+	  ch_flag_d();
+	  ny_remove(numstr);
+	  if(mail_idx.flirt==1) cur_user.sex_today++;
+	}
+	if(!rip)
+	  WaitForEnter();
+	else
+	  od_get_answer("\n\r");
+      }
+    }
+  } while (intval==1);
+//  printf("\n\r12\n\r");
+}
+
+char
+*LocationOf(char *address) {
+  INT16 iCurrentSystem;
+  if(IBBSInfo.paOtherSystem == NULL && IBBSInfo.nTotalSystems != 0)
+    return NULL;
+  for(iCurrentSystem = 0; iCurrentSystem < IBBSInfo.nTotalSystems;++iCurrentSystem) {
+    if(strcmp(IBBSInfo.paOtherSystem[iCurrentSystem].szAddress,address)==0) {
+      return IBBSInfo.paOtherSystem[iCurrentSystem].szSystemName;
+    }
+  }
+  return NULL;
+}
+
+void
+read_ibmail(void)
+{
+  FILE *justfile;
+//  FILE *njustfile;
+//  long fillen;
+  INT32 filepos;
+  ibbs_mail_type ibmail;
+  INT16 intval;
+  char numstr[36];
+  char key;
+  char ovr[80];//,line[80];
+  INT16 cnt;//,cnt2;
+  //char turnround[4]={'-','\\','|','/'};
+//  int nonstop;
+//  user_rec urec;
+//  char omg[2];
+//  int unum;
+//  ffblk ffblk;
+  INT16 num;
+  DWORD mon, med;
+
+  filepos=0;
+
+//  if(rip) od_send_file("tframe1.rip");
+
+  ch_game_d();
+  if(!fexist(IBBS_MAIL_INDEX))
+    return;
+
+  do {
+    ch_game_d();
+    justfile=ShareFileOpen(IBBS_MAIL_INDEX,"rb");
+    fseek(justfile,filepos,SEEK_SET);
+    intval=ny_fread(&ibmail,sizeof(ibbs_mail_type),1,justfile);
+    ny_line(316,2,0);
+    while (intval==1 && (strcmp(ibmail.recverI,cur_user.bbsname)!=0 || ibmail.deleted==TRUE))
+      intval=ny_fread(&ibmail,sizeof(ibbs_mail_type),1,justfile);
+    filepos=ftell(justfile);
+    fclose(justfile);
+    if (intval==1) {
+//      nonstop=FALSE;
+      ny_line(317,2,0);
+      ny_disp_emu(ibmail.sender);
+      od_printf(" `dark green`(%s)",LocationOf(ibmail.node_s));
+      ny_line(318,0,0);
+      //ny_disp_emu("  `@T`4o: `0");
+      ny_disp_emu(ibmail.recver);
+      od_printf("\n\r");
+      cnt=0;
+//      cnt2=2;
+      if (ibmail.flirt<=998) {
+	od_printf("`green`");
+	while (cnt<ibmail.quote_length && cnt<10) {
+	  ny_disp_emu("`9>`2");
+	  ny_disp_emu(ibmail.lines[cnt]);
+	  od_printf("\n\r");
+	  cnt++;
+	}
+	cnt=0;
+	while (cnt<ibmail.length && cnt<10) {
+	  //od_printf("`bright green`");
+	  od_set_attrib(0x0a);
+	  ny_disp_emu(ibmail.lines[cnt+ibmail.quote_length]);
+	  od_printf("\n\r");
+	  cnt++;
+	}
+	if (ibmail.flirt==1) {
+
+	  ny_disp_emu("\n\r`@");
+	  ny_disp_emu(ibmail.sender);
+	  //      od_printf("\n\r`bright red`%s`red`
+	  ny_line(319,0,0);
+//        wants to have sex with ya Ok?",mail_idx.sender);
+	  ny_line(320,1,0);
+	  //od_printf("\n\r`bright blue`[O]`red`=OK (sex) `bright blue`R`red`=reply `bright blue`D`red`=delete `bright blue`I`red`=ignore `bright blue`>"); //S`red`=stop `bright blue` >");
+
+	  key=ny_get_answer("ORDI\n\r");
+	  if (key=='\n' || key=='\r') key='O';
+	} else {
+
+	  ny_line(321,1,0);
+//        od_printf("\n\r`bright blue`R`red`=reply `bright blue`[D]`red`=delete `bright blue`I`red`=ignore `bright blue`>"); //S`red`=stop `bright blue`>");
+
+	  key=ny_get_answer("RDI\n\r");
+	  if (key=='\n' || key=='\r') key='D';
+	}
+	od_printf("%c\n\r",key);
+      } else if (ibmail.flirt==999) {
+
+	ny_disp_emu("\n\r`@");
+	ny_disp_emu(ibmail.sender);
+	od_printf(" `dark green`(%s)",LocationOf(ibmail.node_s));
+	ny_line(322,0,1);
+//      ny_disp_emu("`4 agreed and had sex with ya ...\n\r");
+
+	cur_user.since_got_laid=0;
+	points_raise((INT32)50*(cur_user.level+1));
+	illness(ibmail.ill,ibmail.inf);
+	ch_game_d();
+	justfile=ShareFileOpen(IBBS_MAIL_INDEX,"r+b");
+	fseek(justfile,filepos-sizeof(ibbs_mail_type),SEEK_SET);
+	ibmail.deleted=TRUE;
+	ny_fwrite(&ibmail,sizeof(ibbs_mail_type),1,justfile);
+	fclose(justfile);
+	WaitForEnter();
+      } else if (ibmail.flirt==1003) {
+
+	if(xp_random(2)==0) {
+	  if(xp_random(2)==0) {
+	    ny_disp_emu("\n\r`@");
+	    ny_disp_emu(ibmail.sender);
+	    od_printf(" `dark green`(%s)",LocationOf(ibmail.node_s));
+	    ny_line(458,0,1);
+	  } else {
+	    ny_line(459,1,1);
+	  }
+	  illness(ibmail.ill,ibmail.inf);
+	} else {
+	  ny_line(460,1,1);
+	}
+	ch_game_d();
+	justfile=ShareFileOpen(IBBS_MAIL_INDEX,"r+b");
+	fseek(justfile,filepos-sizeof(ibbs_mail_type),SEEK_SET);
+	ibmail.deleted=TRUE;
+	ny_fwrite(&ibmail,sizeof(ibbs_mail_type),1,justfile);
+	fclose(justfile);
+	WaitForEnter();
+      } else if (ibmail.flirt==1005) {
+
+	if(xp_random(3)==0) {
+	  if(xp_random(2)==0) {
+	    ny_disp_emu("\n\r`@");
+	    ny_disp_emu(ibmail.sender);
+	    od_printf(" `dark green`(%s)",LocationOf(ibmail.node_s));
+	    ny_line(463,0,1);
+	  } else {
+	    ny_line(464,1,1);
+	  }
+//        illness(ibmail.ill,ibmail.inf);
+	  cur_user.hitpoints*=2.0/3.0;;
+	  ny_line(466,1,1);
+	} else {
+	  ny_line(465,1,1);
+	}
+	ch_game_d();
+	justfile=ShareFileOpen(IBBS_MAIL_INDEX,"r+b");
+	fseek(justfile,filepos-sizeof(ibbs_mail_type),SEEK_SET);
+	ibmail.deleted=TRUE;
+	ny_fwrite(&ibmail,sizeof(ibbs_mail_type),1,justfile);
+	fclose(justfile);
+	WaitForEnter();
+      } else if (ibmail.flirt==1004) {
+	ny_disp_emu("\n\r`@");
+	ny_disp_emu(ibmail.sender);
+	od_printf(" `dark green`(%s)",LocationOf(ibmail.node_s));
+	ny_line(461,0,2);
+	ny_line(462,0,1);
+
+	WaitForEnter();
+
+	ch_game_d();
+	justfile=ShareFileOpen(IBBS_MAIL_INDEX,"r+b");
+	fseek(justfile,filepos-sizeof(ibbs_mail_type),SEEK_SET);
+	ibmail.deleted=TRUE;
+	ny_fwrite(&ibmail,sizeof(ibbs_mail_type),1,justfile);
+	fclose(justfile);
+	num=*(INT16 *)ibmail.lines[0];
+
+	any_attack_ops(&cur_user,"`@H`4ired `@H`4itman `@F`4ight",ibmail.lines[1],
+	(INT32)xp_random(pow(1.72,(double)cur_user.level+1)*10)+pow(1.7,(double)cur_user.level+1)*10,
+	(INT32)xp_random(pow(1.31,(double)cur_user.level+1)*4)+pow(1.3,(double)cur_user.level+1)*(18.0+num)/10.0,
+	(INT32)xp_random(pow(1.31,(double)cur_user.level+1)*4)+pow(1.3,(double)cur_user.level+1)*(18.0+num)/10.0,
+	(weapon)cur_user.level);
+
+      } else if (ibmail.flirt==1002) {
+	mon=*((DWORD *)ibmail.lines[0]);
+
+	med=ULONG_MAX-mon;
+	if (med<=cur_user.money)
+	  mon=med;
+
+	ny_disp_emu("\n\r`@");
+	ny_disp_emu(ibmail.sender);
+	od_printf(" `dark green`(%s)",LocationOf(ibmail.node_s));
+	ny_line(419,0,0);
+	od_printf("%s",D_Num(mon));
+	ny_line(420,0,1);
+
+	cur_user.money+=mon;
+
+	wrt_sts();
+
+	justfile=ShareFileOpen(IBBS_MAIL_INDEX,"r+b");
+	fseek(justfile,filepos-sizeof(ibbs_mail_type),SEEK_SET);
+	ibmail.deleted=TRUE;
+	ny_fwrite(&ibmail,sizeof(ibbs_mail_type),1,justfile);
+	fclose(justfile);
+	WaitForEnter();
+      }
+
+//    if (key=='S') break;
+      if (key=='D' || key=='R') {
+	if (key=='D')
+	  ny_line(325,1,2); //od_printf("\n\r`bright red`D`red`eleting...\n\r\n\r");
+	ch_game_d();
+	justfile=ShareFileOpen(IBBS_MAIL_INDEX,"r+b");
+	fseek(justfile,filepos-sizeof(ibbs_mail_type),SEEK_SET);
+	ibmail.deleted=TRUE;
+//      od_printf("}>}%d{<{",(INT16)ibmail.deleted);
+//      filepos=0;
+	ny_fwrite(&ibmail,sizeof(ibbs_mail_type),1,justfile);
+	fclose(justfile);
+
+	if(key=='D' && rip==TRUE)
+	  od_get_answer("\n\r");
+      }
+      if (key=='O') {
+	/*sex with playeres goes here*/
+	if (cur_user.sex_today<=0) {
+
+	  ny_line(118,1,1);
+	  //od_printf("\n\r\n\r`bright`You already used up all your sex turns today ...\n\r");
+	  ny_line(326,0,1);
+	  //od_printf("\n\rTry again tomorrow....\n\r");
+
+	  WaitForEnter();
+	} else {
+	  ch_game_d();
+	  justfile=ShareFileOpen(IBBS_MAIL_INDEX,"r+b");
+	  fseek(justfile,filepos-sizeof(ibbs_mail_type),SEEK_SET);
+	  ibmail.deleted=TRUE;
+	  ny_fwrite(&ibmail,sizeof(ibbs_mail_type),1,justfile);
+	  fclose(justfile);
+
+	  ny_line(327,2,0);
+	  //od_printf("\n\r\n\r`bright red`Y`red`ou just had sex with `bright red`
+	  ny_disp_emu(ibmail.sender);
+	  od_printf(" `dark green`(%s)",LocationOf(ibmail.node_s));
+	  ny_disp_emu("`4 ...\n\r");
+
+	  cur_user.since_got_laid=0;
+	  cur_user.sex_today--;
+	  points_raise((INT32)50*(cur_user.level+1));
+
+	  desease ill;
+	  INT16 inf;
+
+	  inf=ibmail.inf;
+	  ill=ibmail.ill;
+
+	  strcpy(ibmail.recver,ibmail.sender);
+	  strcpy(ibmail.sender,cur_user.name);
+	  strcpy(ibmail.node_r,ibmail.node_s);
+	  strcpy(ibmail.node_s,IBBSInfo.szThisNodeAddress);
+	  strcpy(ibmail.recverI,ibmail.senderI);
+	  strcpy(ibmail.senderI,cur_user.bbsname);
+	  ibmail.flirt=999;
+	  ibmail.deleted=FALSE;
+//        ibmail.location=0;
+	  ibmail.length=0;
+	  ibmail.quote_length=0;
+	  ibmail.ill=cur_user.std;
+	  ibmail.inf=cur_user.std_percent;
+	  ibmail.sender_sex=cur_user.sex;
+	  sprintf(IBBSInfo.szProgName, "#@NYG#%05d MAIL",ibbs_game_num);
+	  IBSendMail(&IBBSInfo,&ibmail);
+	  //IBSend(&IBBSInfo,ibmail.node_r,&ibmail,sizeof(ibbs_mail_type)-(20*81));
+	  illness(ill,inf);
+	  WaitForEnter();
+	}
+      }
+      if (key=='R') {
+	ibmail.flirt=0;
+	if (ibmail.sender_sex!=cur_user.sex && cur_user.sex_today>0) {
+
+	  ny_line(328,1,0);
+//        od_printf("\n\r`bright red`A`red`sk `bright red`
+	  if(!rip)
+	    ny_disp_emu(ibmail.sender);
+	  else
+	    od_disp_str(ny_un_emu(ibmail.sender,numstr));
+	  ny_line(329,0,0);
+	  //`red` to have sex with you?(`bright red`Y`red`/`bright red`N`red`)",mail_idx.sender);
+
+	  key=ny_get_answer("YN");
+	  if(!rip)
+	    od_printf("%c\n\r",key);
+	  else
+	    od_disp_str("\n\r");
+	  if (key=='Y') {
+	    if (cur_user.sex_today<=0) {
+
+	      ny_line(118,1,1);
+	      //od_printf("\n\r\n\r`bright`You already used up all your sex turns today ...\n\r");
+
+	      WaitForEnter();
+	      od_printf("\n\r");
+	    } else {
+	      ibmail.flirt=1;
+	      cur_user.sex_today--;
+	    }
+	  }
+	}
+
+	ny_line(330,1,0);
+	//od_printf("\n\r`bright red`Q`red`uote message? (`bright red`Y`red`/`bright red`N`red`)");
+
+	key=ny_get_answer("YN");
+	if(!rip)
+	  od_printf("%c\n\r",key);
+	else
+	  od_disp_str("\n\r");
+
+	if(key=='Y') {
+	  if(ibmail.quote_length>0) {
+	    for(cnt=0;cnt<ibmail.length;cnt++)
+	      strcpy(ibmail.lines[cnt],ibmail.lines[cnt+ibmail.quote_length]);
+	    ibmail.quote_length=ibmail.length;
+	  } else {
+	    ibmail.quote_length=ibmail.length;
+	  }
+	  while (cnt<ibmail.length) {
+	    ny_disp_emu("`9>`2");
+	    ny_disp_emu(ibmail.lines[cnt]);
+	    ny_disp_emu("\n\r");
+	    cnt++;
+	  }
+	} else {
+	  ibmail.quote_length=0;
+	}
+	ny_line(446,1,1);
+	//od_printf("\n\r`bright red`O`red`k type yer message now (`bright red`/s`red`=save `bright red`/a`red`=abort):\n\r");
+	cnt=-1;
+	ovr[0]=0;
+	do {
+	  cnt++;
+	  if(cnt<9)
+	    get_line(ovr,ibmail.lines[cnt+ibmail.quote_length],ovr,TRUE);
+	  else
+	    get_line(ovr,ibmail.lines[cnt+ibmail.quote_length],ovr,FALSE);
+	} while ((ibmail.lines[cnt+ibmail.quote_length][0]!='/' &&
+		  ibmail.lines[cnt+ibmail.quote_length][1]!='S') &&
+		 (ibmail.lines[cnt+ibmail.quote_length][0]!='/' &&
+		  ibmail.lines[cnt+ibmail.quote_length][1]!='A') &&
+		 cnt<9);
+
+	if (ibmail.lines[cnt+ibmail.quote_length][1]=='s' || ibmail.lines[cnt+ibmail.quote_length][1]=='S' || cnt==9) {
+	  ny_line(135,0,1);
+//        od_printf("\b\b`bright red`S`red`aving...\n\r");
+	  //cnt+=mail_idx.afterquote;
+	  ibmail.length=cnt;
+	  strcpy(ibmail.recver,ibmail.sender);
+	  strcpy(ibmail.sender,cur_user.name);
+	  strcpy(ibmail.node_r,ibmail.node_s);
+	  strcpy(ibmail.node_s,IBBSInfo.szThisNodeAddress);
+	  strcpy(ibmail.recverI,ibmail.senderI);
+	  strcpy(ibmail.senderI,cur_user.bbsname);
+	  ibmail.deleted=FALSE;
+	  ibmail.sender_sex=cur_user.sex;
+	  ibmail.ill=cur_user.std;
+	  ibmail.inf=cur_user.std_percent;
+	  sprintf(IBBSInfo.szProgName, "#@NYG#%05d MAIL",ibbs_game_num);
+	  IBSendMail(&IBBSInfo,&ibmail);
+	  //IBSend(&IBBSInfo,ibmail.node_r,&ibmail,sizeof(ibbs_mail_type)-((20-ibmail.length-ibmail.quote_length)*81));
+//        od_printf(">>%s<<",ibmail.node_r);
+	} else {
+	  ny_line(136,0,1);
+	  if(ibmail.flirt==1) cur_user.sex_today++;
+	}
+	if(!rip)
+	  WaitForEnter();
+	else
+	  od_get_answer("\n\r");
+      }
+    }
+  } while (intval==1);
+}
+
+void
+dobadwords(char *s)
+{
+  if(!dobad || badwordscnt==0)
+    return;
+
+  char badchars[]="@!#$&?@%*";
+  INT16 c;
+  INT16 len=strlen(s);
+  INT16 tryagain=FALSE;
+
+  char *sm=(char *)malloc(len+1);
+  if(sm==0)
+    return;
+
+  char *p,*pm;
+
+  do {
+    strcpy(sm,s);
+    strupr(sm);
+    tryagain=FALSE;
+
+    for(INT16 i=0;i<badwordscnt;i++) {
+      od_kernal();
+      p=sm;
+      while((p=strstr(p,badwords[i]))!=0) {
+	od_kernal();
+	if(p==sm || *(p-1)<'A' || *(p-1)>'Z') {
+	  c=0;
+	  pm=(p-sm+s);
+	  while(*pm!=0 && c<strlen(badwords[i])) {
+	    *pm=badchars[xp_random(9)];
+	    pm++;
+	    c++;
+	  }
+	  tryagain=TRUE;
+	}
+	if(++p=='\0')
+	  break;
+      }
+    }
+  } while(tryagain);
+  free(sm);
+}
diff --git a/src/doors/ny2008/src/ny2008.h b/src/doors/ny2008/src/ny2008.h
new file mode 100644
index 0000000000000000000000000000000000000000..acf2b967a4bffa9275a59feacce980da92fe7ac3
--- /dev/null
+++ b/src/doors/ny2008/src/ny2008.h
@@ -0,0 +1,234 @@
+//                        0 - Critical Door error (no fossil, etc.)
+//                        1 - Carrier lost, user off-line
+//                        2 - Sysop terminated call, user off-line
+//                        3 - User time used up, user STILL ON-LINE
+//                        4 - Keyboard inactivity timeout, user off-line
+//                       10 - User chose to return to BBS
+//                       11 - User chose to logoff, user off-line
+//                       12 - Critical RAVote error
+
+#ifndef __unix__
+#include <process.h>
+#include <dos.h>
+#endif
+#include <math.h>
+#include <dirent.h>
+
+#ifdef __TURBOC__
+#include <dir.h>
+#endif
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <errno.h>
+#include <ctype.h>
+
+/* OpenDoors *MUST* be included first */
+#ifndef __BEEN_HERE__
+
+//I never did an OS2 port .. although i started on it
+#ifndef __OS2__
+#include <OpenDoor.h>                   // Must be included in all doors
+#else
+#include <OpenDoor.h>                   // Must be included in all doors
+#endif
+
+#endif
+#define __BEEN_HERE__
+
+#if !defined(__unix__) && !defined(_WIN32)
+#include <share.h>
+#include <conio.h>
+#include <io.h>
+#else
+#include <dirwrap.h>
+#include <genwrap.h>
+#include <filewrap.h>
+#include <ciowrap.h>
+#endif
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#ifdef __TURBOC__
+#include <locking.h>
+#endif
+
+#ifdef __WATCOMC__
+#include <malloc.h>
+#endif
+
+
+#include <limits.h>
+
+#include "filename.h"
+#include "ibbsny.h"
+#include "structs.h"
+#include "const.h"
+
+/*#define NO_MAIL_FLAG          0x0001
+#define NY2008_FALG2          0x0002
+#define NY2008_FALG3          0x0004
+#define NY2008_FALG4          0x0008
+#define NY2008_FALG5          0x0010
+#define NY2008_FALG6          0x0020*/
+
+
+int     main(int argc,char *argv[]);    // Function prototype declarations
+char    entry_menu(void);               // Menu draw...
+//char    central_park(void);
+//char    drugs(void);
+//char    money(void);
+//char    evil_stuff(void);
+//char    food(void);
+//char    guns(void);
+//char    get_laid(void);
+//char    healing(void);
+//char    mail(void);
+
+char    callmenu(char allowed[],menu_t menu,INT16 menu_line,char figst);
+void DisplayBestIB(void);
+
+void    read_IGMs(void);
+
+DWORD   get_val(DWORD def,DWORD max);
+void    EnterStreet(void);
+void    ListPlayers(void);
+void    ListPlayersA(void);
+void    ListPlayersS(sex_type psex);
+void    DisplayStats(void);
+void    Maintanance(void);
+void    drug_ops(void);
+void    money_ops(void);
+void    get_laid_ops(void);
+void    food_ops(void);
+void    guns_ops(void);
+void    healing_ops(void);
+void    newz_ops(void);
+void    mail_ops(void);
+void    wrt_sts(void);
+void    exit_ops(void);
+void    SortScrFile(INT16 usr, INT16 max);
+void    ChangeOnlineRanks(void);
+void    WhosOnline(void);
+INT16     askifuser(char handle[25]);
+char    ny_get_answer(char *string);
+void    fig_ker(void);
+void    trim(char *numstr);
+
+void    dobadwords(char *s);
+
+void    print_drug(drug_type drug);
+//void  print_drug(drug_type drug,INT16 len);
+
+void    print_arm(weapon arm);
+
+void    points_raise(DWORD raise);
+INT16     CheckForHandle(char handle[25]);
+void    Die(INT16 diecode); //die of reason 1=drugs 2=hunger 3=std
+void    ny_kernel(void);
+//char    rest(void);
+void    rest_ops(void);
+void    get_line(char beg[],char line[],char ovr[],INT16 wrap);
+void    read_mail(void);
+void    illness(void);
+void    illness(desease ill, INT16 inf, INT16 rape=FALSE);
+void    news_post(char line[], char name1[], char name2[], INT16 flag);
+void    print_disease(desease ill);
+INT16     seereg(char bbsname[]);
+void    get_bbsname(char bbsname[]);
+//void  cap_names(char name[]);
+void    change_info(void);
+void    dump(void);
+INT16     strzcmp(char str1[], char str2[]);
+void    del(char *file);
+//void	checknodes(void);
+
+void WaitForEnter(void);
+INT16 ReadOrAddCurrentUser(void);
+void WriteCurrentUser(void);
+INT32 randomf(INT32 max);
+//FILE *ExculsiveFileOpen(char *pszFileName, char *pszMode);
+FILE *ShareFileOpen(char *pszFileName, char *pszMode);
+size_t ny_fread(void *ptr, size_t size, size_t n, FILE*stream);
+size_t ny_fwrite(const void *ptr, size_t size, size_t n, FILE*stream);
+void CustomConfigFunction(char *pszKeyword, char *pszOptions);
+void strzcpy(char dest[],const char src[], INT16 beg,INT16 end);
+double DrgPtsCoef(void);
+void DisplayBest(void);
+void AddBestPlayer(void);
+void MakeFiles(void);
+char *D_Num(INT16 num);
+char *D_Num(INT32 num);
+char *D_Num(DWORD num);
+void heal_wounds(void);
+void take_drug(void);
+void money_plus(DWORD howmuch);
+void money_minus(DWORD howmuch);
+void disp_fig_stats(void);
+void SortScrFileB(INT16 usr);
+void points_loose(DWORD lost);
+void CrashRecovery(void);
+void IGM(char exenam[]);
+void IGM_ops(void);
+void CreateDropFile(INT16 all);
+void ny_disp_emu(char line[]);
+void nyr_disp_emu(char line[]);
+void ny_clr_scr();
+//void print_gun_prices(void);
+void ny_disp_emu(char line[],INT16 min);
+void ny_disp_emu_file(FILE *ans_phile,FILE *asc_phile,char line[],INT16 min);
+char *ny_un_emu(char line[]);
+char *ny_un_emu(char line[],char out[]);
+void scr_save(void);
+void scr_res(void);
+void ch_game_d(void);
+void ch_flag_d(void);
+//void strim(char s[]);
+void forrest_IGM(void);
+void call_IGM(char exenamr[]);
+void read_fight_IGMs(void);
+FILE *ShareFileOpenAR(char *pszFileName, char *pszMode);
+void UserStatus(void);
+void ny_pers(unsigned char message);
+void time_slice(void);
+INT16 copyfile(char *file1,char *file2);
+INT16 ny_remove(char *pszFileName);
+void game_events(void);
+void ny_stat_line(INT16 line,INT16 before,INT16 after);
+void ny_read_stat_line(INT16 line,char *string, FILE *phile);
+void read_ibmail(void);
+char *LocationOf(char *address);
+INT16 ibbs_bbs_list(void);
+void ibbs_bbs_name(INT16 bbs,INT16 sex,INT16 nochoice,char nameI[],INT16 *dbn,INT16 *pn);
+//char ibbs_m(void);
+void ibbs_ops(void);
+void AddBestPlayerIB(void);
+void AddBestPlayerInIB(char *name, DWORD points);
+/*int findf(char *pathname, struct ffblk *ffblk, INT16 attrib);
+INT16 fnext(struct ffblk *ffblk);
+INT16 strwcmp(char *format,char *string);*/
+
+/*typedef struct {
+	INT16             first_enemy[LEVELS],
+			last_enemy[LEVELS];
+	} enemy_idx;*/
+
+
+/*typedef struct {
+	char    sender[25];
+	char    senderI[36];
+	sex_type sender_sex;
+	char    node_s[NODE_ADDRESS_CHARS + 1];
+	char    node_r[NODE_ADDRESS_CHARS + 1];
+	char    recver[25];
+	char    recverI[36];
+	INT16     quote_length;
+	INT16     length;
+	INT16     flirt;
+	desease ill;
+	INT16     inf;
+	INT16     deleted;
+	} ibbs_mail_idx_type;*/
+
diff --git a/src/doors/ny2008/src/ny2008.prj b/src/doors/ny2008/src/ny2008.prj
new file mode 100644
index 0000000000000000000000000000000000000000..627c7d0b9c4ca69f5678fdc97fa4dcd22e946fdb
Binary files /dev/null and b/src/doors/ny2008/src/ny2008.prj differ
diff --git a/src/doors/ny2008/src/nyedit.cpp b/src/doors/ny2008/src/nyedit.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..bd0bfe4530d156982283c3e669b85ee85be7f232
--- /dev/null
+++ b/src/doors/ny2008/src/nyedit.cpp
@@ -0,0 +1,1800 @@
+//                        0 - Critical Door error (no fossil, etc.)
+//                        1 - Carrier lost, user off-line
+//                        2 - Sysop terminated call, user off-line
+//                        3 - User time used up, user STILL ON-LINE
+//                        4 - Keyboard inactivity timeout, user off-line
+//                       10 - User chose to return to BBS
+//                       11 - User chose to logoff, user off-line
+//                       12 - Critical RAVote error
+
+
+// include the header
+#include "nyedit.h"
+
+
+// Declare global variables
+user_rec cur_user;
+char str[25];
+INT16 single_node=FALSE;
+INT16 gamedisk,flagdisk=-1;
+char gamedir[MAX_PATH],flagdir[MAX_PATH];
+char c_dir_g=0;
+INT16 user_num=0;
+INT16 time_slice_value=1500;
+
+void
+time_slice(void)
+{
+#if 0
+  asm {
+    mov ax,time_slice_value
+    INT16 15
+  }
+#else
+  od_sleep(1);
+#endif
+}
+
+void
+NoDropFile(void)
+{
+  printf("\nNew York 2008 Player Editor - No dropfile found!\n");
+  printf("To start in Local mode type:\nNYEDIT -L\n");
+  exit(10);
+}
+
+int main(int argc,char *argv[])
+{
+  FILE *justfile;
+  char key,s_key;
+  WORD uintval;
+  DWORD points;
+  char numstr[41];
+  scr_rec srec;
+  INT16 cnt;
+  INT16 cntv,intval;
+//  user_rec cur_user;
+
+    //your opendoors reg here
+/*    strcpy(od_control.od_registered_to,"[UNREGISTERED]");
+    od_control.od_registration_key=00000000000000000000000000000000; */
+
+//  directvideo=0;
+
+//  od_control.od_clear_on_exit=FALSE;
+  od_control.od_no_file_func=NoDropFile;
+  od_control.od_disable |= DIS_BPS_SETTING;
+  od_control.od_disable |= DIS_NAME_PROMPT;
+
+//  od_control.od_config_function = CustomConfigFunction;
+  //od_control.od_config_file = INCLUDE_CONFIG_FILE;
+  //od_control.od_config_filename = "NYEDIT.CFG";
+
+
+  od_control.od_config_function = CustomConfigFunction;
+  if(fexist(CFG_FILENAME))
+    od_control.od_config_file = INCLUDE_CONFIG_FILE;
+  else
+    od_control.od_config_file = NO_CONFIG_FILE;
+  od_control.od_config_filename = CFG_FILENAME;
+
+  od_control.od_mps=INCLUDE_MPS;
+  od_control.od_nocopyright=TRUE;
+
+  if(time_slice_value>0)
+    od_control.od_ker_exec=time_slice;
+
+  cnt=1;
+  if(argc>1) {
+    do {
+      if (strnicmp(argv[cnt],"-L",2)==0) {
+	od_control.od_force_local=TRUE;
+	initciowrap(COLOR_MODE);
+	clrscr();
+	textbackground(LIGHTCYAN);
+	textcolor(BLUE);
+	gotoxy(1,7);
+	cprintf("�����������������������������������������������������������������������������ͻ");
+	gotoxy(1,8);
+	cprintf("� New York 2008 Player Editor                                                 �");
+	gotoxy(1,9);
+	cprintf("� Starting in local mode input your name: ����������������������������������� �");
+	gotoxy(1,10);
+	cprintf("�����������������������������������������������������������������������������ͼ");
+	gotoxy(43,9);
+//      for(x=0;x<35;x++)
+//        putch('�');
+
+//      cprintf(" �\b\b");
+
+//      for(x=0;x<35;x++)
+//        putch('\b');
+
+
+	INT16 cntv=0;
+	intval=TRUE;
+	do {
+	  if(cntv>=35) {
+	    cntv=34;
+	    putch('\b');
+	    key=getch();
+	    if(key=='\n' || key=='\r')
+	      cntv=35;
+	  } else {
+	    key=getch();
+	  }
+
+	  if(key==27) {
+	    gotoxy(1,9);
+	    cprintf("� Starting in local mode input your name: � Canceled ... �������������������� �");
+	    gotoxy(1,12);
+	    exit(10);
+	  }
+
+	  if(intval==TRUE) {
+	    if (key>='a' && key<='z')
+	      key-=32;
+	    intval=FALSE;
+	  } else if(intval==FALSE) {
+	    if (key>='A' && key<='Z')
+	      key+=32;
+	  }
+	  if(key==' ') {
+	    putch('�');
+	    key=0;
+	    intval=TRUE;
+	  } else if(key=='\b') {
+	    if(cntv==0) {
+	      intval=TRUE;
+	      key=0;
+	      cntv--;
+	    } else {
+	      cntv-=2;
+	      if(cntv>=0 && od_control.user_name[cntv]==' ')
+		intval=TRUE;
+	      if(cntv==32)
+		cprintf("\b��\b\b");
+	      else
+		cprintf("\b�\b");
+	      key=0;
+	    }
+	  }
+
+	  if(key!=0) {
+	    od_control.user_name[cntv]=key;
+	    putch(key);
+	  }
+	  cntv++;
+	} while (key!='\n' && key!='\r');
+	od_control.user_name[cntv-1]=0;
+      } else if (strnicmp(argv[cnt],"-P",2)==0) {
+	strzcpy(od_control.info_path,argv[cnt],2,59);
+      } else if (strnicmp(argv[cnt],"-RDBPS",6)==0) {
+	od_control.od_disable &=~ DIS_BPS_SETTING;
+      } else if (strnicmp(argv[cnt],"-N",2)==0) {
+	strzcpy(numstr,argv[cnt],2,59);
+	sscanf(numstr,"%d",&intval);
+	od_control.od_node=intval;
+/*      } else if (strnicmp(argv[cnt],"-DV",3)==0) {
+	directvideo=1; */
+      } else if (strnicmp(argv[cnt],"-C",2)==0) {
+	strzcpy(od_control.od_config_filename,argv[cnt],2,59);
+	od_control.od_config_file = INCLUDE_CONFIG_FILE;
+      }
+/* Was <= argc */
+    } while ((++cnt)<argc);
+  }
+
+  od_printf("`bright`New York 2008 Player Editor Copyright 1995, George Lebl - All rights Reserved\n\r");
+  if(!od_control.od_force_local)
+    od_control.od_clear_on_exit=FALSE;
+  od_control.od_disable |= DIS_INFOFILE;
+  if(od_control.user_rip==TRUE) {
+    od_control.user_rip=FALSE;
+    od_control.user_ansi=TRUE;
+  }
+  getcwd(gamedir,MAX_PATH);
+  gamedisk=gamedir[0] - 'A';
+  strzcpy(gamedir,gamedir,2,MAX_PATH);
+  if(flagdisk==-1) {
+    flagdisk=gamedisk;
+    strcpy(flagdir,gamedir);
+  }
+//  od_control.od_ker_exec=ny_kernel;
+  od_control.od_help_text2=(char *)"  New York 2008 Player Editor (c) Copyright 1995 George Lebl                  ";
+  ch_flag_d();
+  if (fexist(MAINTFLAG_FILENAME)) {
+    od_printf("\n\r\n\r`bright red`W`red`ell the mantanace is running on some other node so please come");
+    od_printf("back later, or if this is a single node bbs, notify the sysop because");
+    od_printf("then he should delete the MAINT.RUN flag file....");
+    WaitForEnter();
+    od_exit(10,FALSE);
+  }
+
+  ch_game_d();
+  if (!fexist(USER_FILENAME)) {
+    od_printf("\n\r`bright`NO user File!!!!\n\r");
+    od_exit(10,FALSE);
+  }
+
+/*  if (fexist(KEY_FILENAME)) {
+    strcpy(numstr,od_control.system_name);
+    get_bbsname(numstr);
+    if(seereg(numstr)==FALSE) {
+      od_printf("\n\r\n\r`bright`UNREGISTERED... EDITOR DISABLED!!\n\r");
+      od_printf("\r\n`white`NOTE: If you have registered the game but the editor still\r\n");
+      od_printf("says it's unregistered, make sure it is reading the configuration\r\n");
+      od_printf("files the game is reading. Use the -C option, or make sure your\r\n");
+      od_printf("name and bbs name are in a file called NY2008.CFG!\n\r");
+
+      WaitForEnter();
+      od_exit(10,FALSE);
+    }
+  } else {
+    od_printf("\n\r\n\r`bright`UNREGISTERED... EDITOR DISABLED!!\n\r");
+    od_printf("\r\n`white`NOTE: If you have registered the game but the editor still\r\n");
+    od_printf("says it's unregistered, make sure it is reading the configuration\r\n");
+    od_printf("files the game is reading. Use the -C option, or make sure your\r\n");
+    od_printf("name and bbs name are in a file called NY2008.CFG!\n\r");
+    WaitForEnter();
+    od_exit(10,FALSE);
+  }
+   */
+
+  do {
+    ch_game_d();
+    justfile = ShareFileOpen(USER_FILENAME, "rb");
+
+     /* If unable to access the user file, display an error message and */
+     /* return.                                                         */
+     if(justfile == NULL)
+     {
+	od_printf("Unable to access the user file.\n\r");
+	WaitForEnter();
+	od_exit(10,FALSE);
+     }
+
+     /* Move to appropriate location in user file for the current user's */
+     /* record. */
+     fseek(justfile, (INT32)user_num * sizeof(user_rec), SEEK_SET);
+
+     /* read record from file. */
+     if (ny_fread(&cur_user, sizeof(user_rec), 1, justfile) != 1)
+     {
+       user_num--;
+     }
+
+     /* Close the user file to allow other nodes to access it again. */
+     fclose(justfile);
+
+
+
+    switch(key=entry_menu())    // Get user's choice
+    {
+      case '[':
+	user_num--;
+	if (user_num<0) user_num=0;
+	break;
+
+      case ']':
+	user_num++;
+	break;
+
+      case '4':
+	if(cur_user.sex==MALE)
+	  cur_user.sex=FEMALE;
+	else
+	  cur_user.sex=MALE;
+	WriteCurrentUser(user_num);
+	break;
+
+      case '5':
+	od_printf("\n\n\r`bright`Display Level/Minimum Points Table? (Y/N):");
+	s_key=od_get_answer("YN");
+	od_printf("%c\n\r",s_key);
+	if(s_key=='Y') {
+	  od_printf("\n\n\r`bright`Level:               Min Points:`cyan`\n\r");
+	  od_printf("0                    0\n\r");
+	  od_printf("1                    500           `bright red`This table shows the minimum\n\r`cyan`");
+	  od_printf("2                    1020          `bright red`points required to get into\n\r`cyan`");
+	  od_printf("3                    2100          `bright red`a level. This editor will\n\r`cyan`");
+	  od_printf("4                    3700          `bright red`calculate the minimum level\n\r`cyan`");
+	  od_printf("5                    6100          `bright red`for the points entered.`cyan`\n\r");
+	  od_printf("6                    9100\n\r");
+	  od_printf("7                    12820\n\r");
+	  od_printf("8                    17300\n\r");
+	  od_printf("9                    22580\n\r");
+	  od_printf("10                   28700\n\r");
+	  od_printf("11                   35700\n\r");
+	  od_printf("12                   43620\n\r");
+	  od_printf("13                   52500\n\r");
+	  od_printf("14                   62380\n\r");
+	  od_printf("15                   73300\n\r");
+	  od_printf("16                   85300\n\r");
+	  od_printf("17                   98420\n\r");
+	  od_printf("18                   112700\n\r");
+	  od_printf("19                   128180\n\r");
+	  od_printf("20                   144900");
+	}
+
+	od_printf("\n\r`bright`Enter amount of points, ENTER to abort:");
+	od_input_str(numstr,25,'0','9');
+	if (numstr[0]!=0){
+	  sscanf(numstr,"%lu",&points);
+	  if(points>cur_user.points) {
+	    set_points(points);
+	    WriteCurrentUser(user_num);
+	    SortScrFile(user_num);
+	  } else if(points<cur_user.points) {
+	    set_points(points);
+	    WriteCurrentUser(user_num);
+	    SortScrFileB(user_num);
+	  }
+	}
+	break;
+
+
+      case 'M':
+	od_printf("\n\r\n\r`bright`Enter amount of money at hand, ENTER to abort:");
+	od_input_str(numstr,25,'0','9');
+	if (numstr[0]!=0){
+	  sscanf(numstr,"%lu",&cur_user.money);
+	  WriteCurrentUser(user_num);
+	}
+	break;
+
+      case 'N':
+	od_printf("\n\r\n\r`bright`Enter amount of money in bank, ENTER to abort:");
+	od_input_str(numstr,25,'0','9');
+	if (numstr[0]!=0){
+	  sscanf(numstr,"%lu",&cur_user.bank);
+	  WriteCurrentUser(user_num);
+	}
+	break;
+
+      case '1':
+//        od_control.od_ker_exec=NULL;
+	  od_printf("\n\r\n\r`bright`Enter the new identity:\n\r\n\r");
+	  od_printf("`bright green`1`green`. `bright green`H`green`eadbanger\n\r");
+	  od_printf("`bright green`2`green`. `bright green`H`green`ippie\n\r");
+	  od_printf("`bright green`3`green`. `bright green`B`green`ig `bright green`F`green`at `bright green`D`green`ude\n\r");
+	  od_printf("`bright green`4`green`. `bright green`C`green`rack `bright green`A`green`ddict\n\r");
+	  od_printf("`bright green`5`green`. `bright green`P`green`unk\n\r\n\r");
+	  od_printf("`bright`ENTER to cancel:");
+//        od_control.od_ker_exec=ny_kernel;
+	  s_key=od_get_answer("12345\n\r");
+	  od_printf("%c\n\r\n\r",key);
+
+	  if (s_key=='1') cur_user.nation = HEADBANGER;
+	   else if (s_key=='2') cur_user.nation = HIPPIE;
+	   else if (s_key=='3') cur_user.nation = BIG_FAT_DUDE;
+	   else if (s_key=='4') cur_user.nation = CRACK_ADDICT;
+	   else if (s_key=='5') cur_user.nation = PUNK;
+	  else break;
+	  set_points(cur_user.points);
+	  WriteCurrentUser(user_num);
+	  break;
+
+
+      case '6':
+//      od_control.od_ker_exec=NULL;
+	od_printf("\n\r\n\r`bright`Enter fights left, ENTER to abort:");
+//      od_control.od_ker_exec=ny_kernel;
+	od_input_str(numstr,25,'0','9');
+	if (numstr[0]!=0){
+	  sscanf(numstr,"%d",&cur_user.turns);
+	  WriteCurrentUser(user_num);
+	}
+	break;
+
+      case '7':
+	od_printf("\n\r\n\r`bright`Enter hitpoints, ENTER to abort:");
+	od_input_str(numstr,25,'0','9');
+	if (numstr[0]!=0){
+	  sscanf(numstr,"%ld",&cur_user.hitpoints);
+
+	}
+	od_printf("\n\r\n\r`bright`Enter maximum hitpoints, ENTER to abort:");
+	od_input_str(numstr,25,'0','9');
+	if (numstr[0]!=0){
+	  sscanf(numstr,"%ld",&cur_user.maxhitpoints);
+	}
+	if(cur_user.maxhitpoints<1) cur_user.maxhitpoints=1;
+	if(cur_user.hitpoints<0) cur_user.hitpoints=0;
+	if(cur_user.hitpoints>cur_user.maxhitpoints) cur_user.hitpoints=cur_user.maxhitpoints;
+	WriteCurrentUser(user_num);
+	break;
+
+
+      case 'H':
+	od_printf("\n\r\n\r`bright`Enter the drug high, ENTER to abort:");
+	od_input_str(numstr,25,'0','9');
+	if (numstr[0]!=0){
+	  sscanf(numstr,"%d",&intval);
+	  if(intval>100) intval=100;
+	  if(intval<0) intval=0;
+	  cur_user.drug_high=intval;
+	  WriteCurrentUser(user_num);
+	}
+	break;
+
+      case 'O':
+	od_printf("\n\r\n\r`bright`Enter hunger, ENTER to abort:");
+	od_input_str(numstr,25,'0','9');
+	if (numstr[0]!=0){
+	  sscanf(numstr,"%d",&intval);
+	  if(intval>100) intval=100;
+	  if(intval<0) intval=0;
+	  cur_user.hunger=intval;
+	  WriteCurrentUser(user_num);
+	}
+	break;
+
+      case 'R':
+	if (cur_user.std!=NONE) {
+	  od_printf("\n\r\n\r`bright`Enter the infection, ENTER to abort:");
+	  od_input_str(numstr,25,'0','9');
+	  if (numstr[0]!=0){
+	    sscanf(numstr,"%d",&intval);
+	    if(intval>100) intval=100;
+	    if(intval<0) intval=0;
+	    cur_user.std_percent=intval;
+	    WriteCurrentUser(user_num);
+	  }
+	} else {
+	  od_printf("\n\r\n\r`bright`Player is healthy!");
+	  WaitForEnter();
+	}
+	break;
+
+
+
+      case '8':
+//          od_control.od_ker_exec=NULL;
+
+	    od_printf("\n\r\n\r`bright`Which weapon:\n\r\n\r");
+	    ny_disp_emu("`%X`2. `0H`2ands\n\r");
+	    ny_disp_emu("`%A`2. `0P`2epper `0S`2pray\n\r");
+	    ny_disp_emu("`%B`2. `0S`2harp `0S`2tick\n\r");
+	    ny_disp_emu("`%C`2. `0S`2crewdriver\n\r");
+	    ny_disp_emu("`%D`2. `0K`2nife\n\r");
+	    ny_disp_emu("`%E`2. `0H`2ammer\n\r");
+	    ny_disp_emu("`%F`2. `0C`2hain\n\r");
+	    ny_disp_emu("`%G`2. `0L`2ead `0P`2ipe\n\r");
+	    ny_disp_emu("`%H`2. `0G`2un\n\r");
+	    ny_disp_emu("`%I`2. `0C`2olt\n\r");
+	    ny_disp_emu("`%J`2. `0R`2ifle\n\r");
+	    ny_disp_emu("`%K`2. `0E`2lephant `0G`2un\n\r");
+	    ny_disp_emu("`%L`2. `0L`2aser `0G`2un\n\r");
+	    ny_disp_emu("`%M`2. `0N`2ail `0G`2un\n\r");
+	    ny_disp_emu("`%N`2. `0S`2hotgun\n\r");
+	    ny_disp_emu("`%O`2. `0A`2ssault Rifle\n\r");
+	    ny_disp_emu("`%P`2. `0M`2achine `0G`2un\n\r");
+	    ny_disp_emu("`%Q`2. `0P`2roton `0G`2un\n\r");
+	    ny_disp_emu("`%R`2. `0G`2ranade `0L`2auncher\n\r");
+	    WaitForEnter();
+	    ny_disp_emu("\n\r\n`%S`2. `0N`2eutron `0P`2haser\n\r");
+	    ny_disp_emu("`%T`2. `0B`2laster\n\r");
+	    ny_disp_emu("`%U`2. `0U`2ltrasound `0G`2un\n\r");
+	    ny_disp_emu("`%V`2. `0A`2tomic `0B`2omb\n\r");
+
+	    od_printf("\n\r`bright`Which one? ENTER to abort:");
+//          od_control.od_ker_exec=ny_kernel;
+	    s_key=od_get_answer("XABCDEFGHIJKLMNOPQRSTUV\n\r");
+	    od_printf("%c",s_key);
+
+	    if (s_key=='A') cur_user.arm=PEPPER;
+	    else if (s_key=='B') cur_user.arm=SHARP_STICK;
+	    else if (s_key=='C') cur_user.arm=SCREWDRIVER;
+	    else if (s_key=='D') cur_user.arm=KNIFE;
+	    else if (s_key=='E') cur_user.arm=HAMMER;
+	    else if (s_key=='F') cur_user.arm=CHAIN;
+	    else if (s_key=='G') cur_user.arm=LEAD_PIPE;
+	    else if (s_key=='H') cur_user.arm=GUN;
+	    else if (s_key=='I') cur_user.arm=COLT;
+	    else if (s_key=='J') cur_user.arm=RIFLE;
+	    else if (s_key=='K') cur_user.arm=ELEPHANT_GUN;
+	    else if (s_key=='L') cur_user.arm=LASER_GUN;
+	    else if (s_key=='M') cur_user.arm=NAILGUN;
+	    else if (s_key=='N') cur_user.arm=SHOTGUN;
+	    else if (s_key=='O') cur_user.arm=ASSAULT_RIFLE;
+	    else if (s_key=='P') cur_user.arm=MACHINEGUN;
+	    else if (s_key=='Q') cur_user.arm=PROTON_GUN;
+	    else if (s_key=='R') cur_user.arm=GRANADE_LAUNCHER;
+	    else if (s_key=='S') cur_user.arm=NEUTRON_PHASER;
+	    else if (s_key=='T') cur_user.arm=BLASTER;
+	    else if (s_key=='U') cur_user.arm=ULTRASOUND_GUN;
+	    else if (s_key=='V') cur_user.arm=A_BOMB;
+	    else if (s_key=='X') cur_user.arm=HANDS;
+	    else break;
+	    WriteCurrentUser(user_num);
+	    break;
+
+      case 'I':
+	if (cur_user.drug>=COKE) {
+	  od_printf("\n\r\n\r`bright`Enter the drug addiction, ENTER to abort:");
+	  od_input_str(numstr,25,'0','9');
+	  if (numstr[0]!=0){
+	    sscanf(numstr,"%d",&intval);
+	    if(intval>100) intval=100;
+	    if(intval<0) intval=0;
+	    cur_user.drug_addiction=intval;
+	    WriteCurrentUser(user_num);
+	  }
+	} else {
+	  od_printf("\n\r\n\r`bright`Player not using addictive drug!");
+	  WaitForEnter();
+	}
+	break;
+
+      case 'J':
+	if (cur_user.drug>=COKE) {
+	  od_printf("\n\r\n\r`bright`Enter the days since last hit, ENTER to abort:");
+	  od_input_str(numstr,25,'0','9');
+	  if (numstr[0]!=0){
+	    sscanf(numstr,"%d",&intval);
+	    if(intval<0) intval=0;
+	    cur_user.drug_days_since=intval;
+	    WriteCurrentUser(user_num);
+	  }
+	} else {
+	  od_printf("\n\r\n\r`bright`Player not using addictive drug!");
+	  WaitForEnter();
+	}
+	break;
+
+
+      case 'A':
+	od_printf("\n\r\n\r`bright`Enter days since laid, ENTER to abort:");
+	od_input_str(numstr,25,'0','9');
+	if (numstr[0]!=0){
+	  sscanf(numstr,"%d",&cur_user.since_got_laid);
+	  if(cur_user.since_got_laid<0) cur_user.since_got_laid=0;
+	  WriteCurrentUser(user_num);
+	}
+	break;
+
+      case 'B':
+	od_printf("\n\r\n\r`bright`Enter sex turns left, ENTER to abort:");
+	od_input_str(numstr,25,'0','9');
+	if (numstr[0]!=0){
+	  sscanf(numstr,"%d",&intval);
+	  if(intval>255) intval=255;
+	  if(intval<0) intval=0;
+	  cur_user.sex_today=intval;
+	  WriteCurrentUser(user_num);
+	}
+	break;
+
+      case 'C':
+	od_printf("\n\r\n\r`bright`Enter # of condoms, ENTER to abort:");
+	od_input_str(numstr,25,'0','9');
+	if (numstr[0]!=0){
+	  sscanf(numstr,"%d",&cur_user.condoms);
+	  if(cur_user.condoms<0) cur_user.condoms=0;
+	  WriteCurrentUser(user_num);
+	}
+	break;
+
+      case 'D':
+	od_printf("\n\r\n\r`bright`Enter # of rocks, ENTER to abort:");
+	od_input_str(numstr,25,'0','9');
+	if (numstr[0]!=0){
+	  sscanf(numstr,"%d",&cur_user.rocks);
+//        if(cur_user.rocks<0) cur_user.rocks=0;
+	  WriteCurrentUser(user_num);
+	}
+	break;
+
+      case 'E':
+	od_printf("\n\r\n\r`bright`Enter the Throwing Ability (0-100), ENTER to abort:");
+	od_input_str(numstr,25,'0','9');
+	if (numstr[0]!=0) {
+	  sscanf(numstr,"%d",&intval);
+	  cur_user.throwing_ability=intval;
+//        if(cur_user.throwing_ability<0) cur_user.throwing_ability=0;
+	  if(cur_user.throwing_ability>100) cur_user.throwing_ability=100;
+	  WriteCurrentUser(user_num);
+	}
+	od_printf("\n\r\n\r`bright`Enter the Kicking Ability (0-100), ENTER to abort:");
+	od_input_str(numstr,25,'0','9');
+	if (numstr[0]!=0){
+	  sscanf(numstr,"%d",&intval);
+	  cur_user.kick_ability=intval;
+//        if(cur_user.kick_ability<0) cur_user.kick_ability=0;
+	  if(cur_user.kick_ability>100) cur_user.kick_ability=100;
+	  WriteCurrentUser(user_num);
+	}
+	od_printf("\n\r\n\r`bright`Enter the Punching Ability (0-100), ENTER to abort:");
+	od_input_str(numstr,25,'0','9');
+	if (numstr[0]!=0){
+	  sscanf(numstr,"%d",&intval);
+	  cur_user.punch_ability=intval;
+//        if(cur_user.punch_ability<0) cur_user.punch_ability=0;
+	  if(cur_user.punch_ability>100) cur_user.punch_ability=100;
+	  WriteCurrentUser(user_num);
+	}
+
+	break;
+
+
+
+      case 'G':
+	od_printf("\n\r\n\r`bright`Enter # of drug hits, ENTER to abort:");
+	od_input_str(numstr,25,'0','9');
+	if (numstr[0]!=0){
+	  sscanf(numstr,"%d",&cur_user.drug_hits);
+	  if(cur_user.drug_hits<0) cur_user.drug_hits=0;
+	  WriteCurrentUser(user_num);
+	}
+	break;
+
+
+
+
+      case '3':
+	od_printf("\n\r\n\r`bright`Input the new USER BBS name, ENTER to abort:");
+	cntv=0;
+	intval=TRUE;
+	do {
+	  //scanf("%c",&key);
+	  s_key=od_get_key(TRUE);
+	  if(intval==TRUE) {
+	    if (s_key>='a' && s_key<='z')
+	      s_key-=32;
+	    intval=FALSE;
+	  } else if(intval==FALSE) {
+	    if (s_key>='A' && s_key<='Z')
+	      s_key+=32;
+	  }
+	  if(s_key==' ')
+	    intval=TRUE;
+	  else if(s_key=='\b') {
+	    if(cntv==0) {
+	      intval=TRUE;
+	      s_key=0;
+	    } else {
+	      cntv-=2;
+	      if(cntv>=0 && numstr[cntv]==' ')
+		intval=TRUE;
+	      od_printf("\b \b");
+	      s_key=0;
+	    }
+	  }
+
+	  if(s_key!=0) {
+	    numstr[cntv]=s_key;
+	    od_putch(s_key);
+	  }
+	  cntv++;
+	} while (s_key!='\n' && s_key!='\r' && cntv<35);
+	numstr[cntv-1]=0;
+	if (s_key!='\n' && s_key!='\r') dump();
+	if (numstr[0]!=0){
+	  strcpy(cur_user.bbsname,numstr);
+	  WriteCurrentUser(user_num);
+	}
+	/*od_input_str(numstr,35,' ',255);
+	if (numstr[0]!=0) {
+	  cap_names(numstr);
+	  strcpy(cur_user.bbsname,numstr);
+
+	} */
+	break;
+
+      case '2':
+	od_printf("\n\r\n\r`bright`Input the new name, ENTER to abort:");
+	od_input_str(numstr,25,' ',255);
+	if (numstr[0]!=0){
+	  strcpy(cur_user.name,numstr);
+	  WriteCurrentUser(user_num);
+	}
+	break;
+      case '9':
+//      od_control.od_ker_exec=NULL;
+	od_printf("\n\r`bright red`W`red`hat does the player say when he wins:\n\r|--------------------------------------|\n\r`bright green`");
+//      od_control.od_ker_exec=ny_kernel;
+	od_input_str(numstr,40,' ',255);
+	if (numstr[0]!=0) {
+	  strcpy(cur_user.say_win,numstr);
+	  WriteCurrentUser(user_num);
+	}
+	break;
+
+      case '0':
+//      od_control.od_ker_exec=NULL;
+	od_printf("\n\r`bright red`W`red`hat does the player say when he looses:\n\r|--------------------------------------|\n\r`bright green`");
+//      od_control.od_ker_exec=ny_kernel;
+	od_input_str(numstr,40,' ',255);
+	if (numstr[0]!=0) {
+	  strcpy(cur_user.say_loose,numstr);
+	  WriteCurrentUser(user_num);
+	}
+	break;
+
+      case 'P':
+//      od_control.od_ker_exec=NULL;
+	od_printf("\n\r\n\r`bright`1. `bright green`H`green`ealthy\n\r");
+	od_printf("`bright`2. `bright green`C`green`raps\n\r");
+	od_printf("`bright`3. `bright green`H`green`erpes\n\r");
+	od_printf("`bright`4. `bright green`S`green`yphilis\n\r");
+	od_printf("`bright`5. `bright green`A`green`IDS\n\r\n\r");
+	od_printf("`bright`Enter the disease, ENTER to abort:");
+//      od_control.od_ker_exec=ny_kernel;
+	s_key=od_get_answer("12345\n\r");
+	od_putch(s_key);
+	if (s_key=='1') cur_user.std=NONE;
+	else if (s_key=='2') cur_user.std=CRAPS;
+	else if (s_key=='3') cur_user.std=HERPES;
+	else if (s_key=='4') cur_user.std=SYPHILIS;
+	else if (s_key=='5') cur_user.std=AIDS;
+	else break;
+	WriteCurrentUser(user_num);
+	break;
+
+
+      case 'K':
+//      od_control.od_ker_exec=NULL;
+	od_printf("\n\r\n\r`bright`1. `bright green`N`green`owhere\n\r");
+	od_printf("`bright`2. `bright green`C`green`heap `bright green`M`green`otel\n\r");
+	od_printf("`bright`3. `bright green`R`green`egular `bright green`H`green`otel\n\r");
+	od_printf("`bright`4. `bright green`E`green`xpensive `bright green`H`green`otel\n\r\n\r");
+	od_printf("`bright`Where is the user staying, ENTER to abort:");
+//      od_control.od_ker_exec=ny_kernel;
+	s_key=od_get_answer("1234\n\r");
+	od_putch(s_key);
+	if (s_key=='1') cur_user.rest_where=NOWHERE;
+	else if (s_key=='2') cur_user.rest_where=MOTEL;
+	else if (s_key=='3') cur_user.rest_where=REG_HOTEL;
+	else if (s_key=='4') cur_user.rest_where=EXP_HOTEL;
+	else break;
+	if(cur_user.rest_where==NOWHERE) {
+	  cur_user.hotel_paid_fer=0;
+	} else {
+	  od_printf("\n\r\n\r`bright`How long is it paid for, ENTER to abort:");
+	  od_input_str(numstr,25,'0','9');
+	  if (numstr[0]!=0){
+	    sscanf(numstr,"%d",&intval);
+	    if(intval>255) intval=255;
+	    if(intval<0) intval=0;
+	    cur_user.hotel_paid_fer=intval;
+	  }
+	}
+	WriteCurrentUser(user_num);
+	break;
+      case 'F':
+//      od_control.od_ker_exec=NULL;
+	od_printf("\n\r\n\r`bright`1. `bright green`P`green`ot\n\r");
+	od_printf("`bright`2. `bright green`H`green`ash\n\r");
+	od_printf("`bright`3. `bright green`L`green`SD\n\r");
+	od_printf("`bright`4. `bright green`C`green`oke\n\r");
+	od_printf("`bright`5. `bright green`P`green`CP\n\r");
+	od_printf("`bright`6. `bright green`H`green`eroin\n\r");
+	od_printf("\n\r`bright`Select drug, ENTER to abort:");
+//      od_control.od_ker_exec=ny_kernel;
+	s_key=od_get_answer("123456\n\r");
+	od_putch(s_key);
+	if (s_key=='1') cur_user.drug=POT;
+	else if (s_key=='2') cur_user.drug=HASH;
+	else if (s_key=='3') cur_user.drug=LSD;
+	else if (s_key=='4') cur_user.drug=COKE;
+	else if (s_key=='5') cur_user.drug=PCP;
+	else if (s_key=='6') cur_user.drug=HEROIN;
+	else break;
+	if (cur_user.drug<COKE) {
+	  cur_user.drug_addiction=0;
+	  cur_user.drug_days_since=0;
+	}
+	WriteCurrentUser(user_num);
+	break;
+
+/*      case '#':
+	printf("\n\nPoints: ");
+	scanf("%lu",&cur_user.points);
+	scanf("%c",&key);
+	printf("\n\nWeapon: ");
+	scanf("%d",&cur_user.arm);
+	scanf("%c",&key);
+	WriteCurrentUser(user_num);
+	break;
+
+      case 'R':
+	od_printf("\n\r\n\r`bright`Revive Player?:");
+	key=od_get_answer("YN");
+	if (key=='Y') {
+	  cur_user.alive=ALIVE;
+	  cur_user.hitpoints=cur_user.maxhitpoints;
+	  WriteCurrentUser(user_num);
+	}
+	break;*/
+
+      case 'L':
+	if(cur_user.alive==ALIVE)
+	  cur_user.alive=UNCONCIOUS;
+	else
+	  cur_user.alive=ALIVE;
+	WriteCurrentUser(user_num);
+	break;
+
+      case '*':
+	od_printf("\n\r\n\r`bright`New day for Player?(Y/N):");
+	key=od_get_answer("YN");
+	if (key=='Y') {
+	  cur_user.days_not_on=1;
+	  WriteCurrentUser(user_num);
+	}
+	break;
+
+      case 'X':
+	od_printf("\n\r\n\r`bright`KILL Player?(Y/N):");
+	key=od_get_answer("YN");
+	if (key=='Y') {
+	  cur_user.alive=DEAD;
+	  WriteCurrentUser(user_num);
+	}
+	break;
+    }                            // Loop until quit to BBS
+
+  } while(key!='Q');
+
+  od_exit(10,FALSE);              // Again OpenDoors does the rest
+
+  return(0);
+}
+
+char *D_Num(INT16 num)
+{
+  char temp[8];
+  INT16 cnt,cnt2,len,sign=0;
+  if (num<0) {
+    sign=1;
+    str[0]='-';
+  }
+
+  sprintf(temp,"%d",num);
+
+  len=strlen(temp);
+
+  if (len<=4) {
+    strcpy(str,temp);
+    return str;
+  }
+
+  cnt2=sign;
+  for(cnt=sign;cnt<len-1;cnt++) {
+    str[cnt2]=temp[cnt];
+    if ( ( (INT16)((len-cnt-.00099)/3) *3) == (len-cnt-1) ) {
+      cnt2++;
+      str[cnt2]=',';
+    }
+    cnt2++;
+  }
+  str[cnt2]=temp[cnt];
+  str[cnt2+1]=0;
+  return str;
+}
+
+
+
+char *D_Num(INT32 num)
+{
+  char temp[15];
+  INT16 cnt,cnt2,len,sign=0;
+  if (num<0) {
+    sign=1;
+    str[0]='-';
+  }
+
+  sprintf(temp,"%ld",num);
+
+  len=strlen(temp);
+
+  if (len<=4) {
+    strcpy(str,temp);
+    return str;
+  }
+
+  cnt2=sign;
+  for(cnt=sign;cnt<len-1;cnt++) {
+    str[cnt2]=temp[cnt];
+    if ( ((INT16)((len-cnt-.00099)/3)*3) == (len-cnt-1) ) {
+      cnt2++;
+      str[cnt2]=',';
+    }
+    cnt2++;
+  }
+  str[cnt2]=temp[cnt];
+  str[cnt2+1]=0;
+
+  return str;
+}
+
+char *D_Num(DWORD num)
+{
+  char temp[14];
+  INT16 cnt,cnt2,len;
+
+  sprintf(temp,"%lu",num);
+
+  len=strlen(temp);
+
+  if (len<=4) {
+    strcpy(str,temp);
+    return str;
+  }
+
+  cnt2=0;
+  for(cnt=0;cnt<len-1;cnt++) {
+    str[cnt2]=temp[cnt];
+    if ( ((INT16)((len-cnt-.00099)/3)*3) == (len-cnt-1) ) {
+      cnt2++;
+      str[cnt2]=',';
+    }
+    cnt2++;
+  }
+  str[cnt2]=temp[cnt];
+  str[cnt2+1]=0;
+
+  return str;
+}
+
+
+void
+dump(void)
+{
+  char key;
+  do {
+    scanf("%c",&key);
+  } while (key!='\n');
+}
+
+
+void
+cap_names(char name[])
+{
+  INT16 cnt=0;
+  INT16 cap=TRUE;
+
+  while (name[cnt]!=0) {
+    if (cap==TRUE) {
+      if (name[cnt]>='a' && name[cnt]<='z')
+	name[cnt]-=32;
+    } else {
+      if (name[cnt]>='A' && name[cnt]<='Z')
+	name[cnt]+=32;
+    }
+
+    cnt++;
+
+    if (name[cnt-1]==' ')
+      cap=TRUE;
+    else
+      cap=FALSE;
+
+  }
+}
+
+
+
+/*copy end chars  beginning from beg to dest*/
+/*podobny strncpy*/
+void
+strzcpy(char dest[],const char src[], INT16 beg,INT16 end)
+{
+  INT16 cnt=0;
+  do {
+    dest[cnt]=src[beg];
+    beg++;
+    cnt++;
+  } while (cnt<=end && src[cnt]!=0);
+  dest[cnt]=0;
+}
+
+
+
+
+
+void
+ny_kernel(void)
+{
+
+  ch_flag_d();
+  if (fexist(MAINTFLAG_FILENAME)) {
+/* This is ugly - ToDo */
+#ifndef ODPLAT_NIX
+    fcloseall();
+#endif
+//    od_control.od_disable|=DIS_CARRIERDETECT;
+    od_printf("\n\r\n\r`bright`Please wait while maintanance runs on another node....");
+
+    while (fexist(MAINTFLAG_FILENAME)) ;
+
+    od_printf("\n\rThanks For Waiting....\n\r");
+
+//    od_control.od_disable&=~DIS_CARRIERDETECT;
+  }
+  ch_game_d();
+}
+
+
+
+
+
+char entry_menu(void)
+   {
+   char key;
+   char numstr[15];
+
+   od_clear_keybuffer();               // Clear any pending keys in buffer
+   od_clr_scr();                       // Clear screen
+
+   DisplayStats();
+
+   ch_flag_d();
+   sprintf(numstr,"u%07d.on",user_num);
+//   od_control.od_ker_exec=NULL;
+   if(fexist(numstr)) {
+     od_printf("`bright`]`red`/`bright`[`red` - Next/Previous  `bright`Q`red` - Quit\n\r");
+     od_printf("`bright`This user is online and cannot be editted!");
+     key= od_get_answer("[]Q");
+//     od_control.od_ker_exec=ny_kernel;
+   } else {
+     od_printf("`bright`]`red`/`bright`[`red` - Next/Previous `bright`X`red` - Delete `bright`*`red` - New Day `bright``red` `bright`Q`red` - Quit\n\r");
+     od_printf("`bright red`P`red`ress the number/letter corresponding to what you want to change: ");
+     //od_printf("`bright`R`red` - Revive Player `bright`D`red` - Delete`bright`
+     // Q - Quit:");
+//     od_control.od_ker_exec=ny_kernel;
+     key= od_get_answer("1234567890ABCDEFGHIJKLMNOPR[]XQ*");
+   }
+   return(key);
+}
+
+/*user stats display*/
+void
+DisplayStats(void)
+{
+  INT16 intval;
+
+  ny_kernel();
+//  od_control.od_ker_exec=NULL;
+  od_printf("\n\r\n\r");
+  od_clr_scr();
+  od_printf("`bright`S`cyan`t`bright blue`ats `bright`F`cyan`o`bright blue`r `bright`L`cyan`e`bright blue`vel `white`%d `bright`1. ",(INT16)cur_user.level);
+  if (cur_user.nation==HEADBANGER)
+    od_printf("`bright green`H`green`eadbanger");
+  else if (cur_user.nation==HIPPIE)
+    od_printf("`bright green`H`green`ippie");
+  else if (cur_user.nation==BIG_FAT_DUDE)
+    od_printf("`bright green`B`green`ig `bright green`F`green`at `bright green`D`green`ude");
+  else if (cur_user.nation==CRACK_ADDICT)
+    od_printf("`bright green`C`green`rack `bright green`A`green`ddict");
+  else if (cur_user.nation==PUNK)
+    od_printf("`bright green`P`green`unk");
+  od_printf(" `bright`2. `bright red`");
+  ny_disp_emu(cur_user.name);
+  od_printf("\n\r`bright`3. `white`User name:`bright`%s\n\r",cur_user.bbsname);
+//  od_printf("`blue`-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\r");
+  if (cur_user.sex==MALE)
+    od_printf("`bright`4. `bright red`S`red`ex: `bright green`M`green`ale  ");
+  else
+    od_printf("`bright`4. `bright red`S`red`ex: `bright green`F`green`emale");
+  od_repeat(' ',29);
+  if (cur_user.alive==ALIVE)
+    od_printf("`bright`L. `bright red`S`red`tatus: `bright green`A`green`live\n\r");
+  else if (cur_user.alive==DEAD)
+    od_printf("`bright`L. `bright red`S`red`tatus: `bright red`DEAD\n\r");
+  else
+    od_printf("`bright`L. `bright red`S`red`tatus: `bright red`UNCONSIOUS\n\r");
+  od_printf("`bright`5. `bright red`P`red`oints: `bright green`%-16s",D_Num(cur_user.points));
+  od_repeat(' ',16);
+  od_printf("`bright`M. `bright red`M`red`oney `bright red`I`red`n `bright red`H`red`and: `bright green`%s\n\r",D_Num(cur_user.money));
+  od_printf("`bright`6. `bright red`F`red`ights: `bright green`%-3d", (INT16)cur_user.turns);
+  od_repeat(' ',29);
+  od_printf("`bright`N. `bright red`M`red`oney `bright red`I`red`n `bright red`B`red`ank: `bright green`%s\n\r",D_Num(cur_user.bank));
+  od_printf("`bright`7. `bright red`H`red`it `bright red`P`red`oints: `bright green`%s ",D_Num(cur_user.hitpoints));
+  intval=strlen(str);
+  od_printf("`bright red`o`red`f `bright green`%-9s", D_Num(cur_user.maxhitpoints));
+  od_repeat(' ',40-intval-25);
+  od_printf("`bright`O. `bright red`H`red`ungry: `bright green`%d%c\n\r", (INT16)cur_user.hunger,37);
+  od_printf("`bright`8. `bright red`A`red`rm: ");
+  print_arm(cur_user.arm);
+  od_printf("\n\r`bright`9. `bright red`W`red`inning `bright red`S`red`entence: `bright green`");
+  ny_disp_emu(cur_user.say_win);
+  od_printf("\n\r");
+  od_printf("`bright`0. `bright red`L`red`oosing `bright red`S`red`entence: `bright green`");
+  ny_disp_emu(cur_user.say_loose);
+  od_printf("\n\r");
+  od_printf("`bright`A. `bright red`D`red`ays `bright red`S`red`ince `bright red`G`red`ot `bright red`L`red`aid: `bright green`%-4d", cur_user.since_got_laid);
+  od_repeat(' ',15);
+  od_printf("`bright`P. `bright red`S`red`TD: `bright green`");
+  print_disease(cur_user.std);
+  od_printf("\n\r`bright`B. `bright red`S`red`ex `bright red`T`red`urns `bright red`L`red`eft: `bright green`%-4d",(INT16) cur_user.sex_today);
+  od_repeat(' ',20);
+  od_printf("`bright`R. `bright red`I`red`nfected: `bright green`%d%c\n\r",(INT16) cur_user.std_percent,37);
+  od_printf("`bright`C. `bright red`C`red`ondoms: `bright green`%d\n\r", cur_user.condoms);
+  od_printf("`bright`D. `bright red`R`red`ocks: `bright green`%d\n\r", (INT16)cur_user.rocks);
+  od_printf("`bright`E. `bright red`A`red`bilities: `bright red`T`red`hrowing:`bright green`%d ", (INT16)cur_user.throwing_ability);
+  od_printf("`bright red`K`red`icking: `bright green`%d ", (INT16)cur_user.kick_ability);
+  od_printf("`bright red`P`red`unching: `bright green`%d\n\r", (INT16)cur_user.punch_ability);
+  od_printf("`bright`F. `bright red`D`red`rug: `bright green`");
+  print_drug(cur_user.drug);
+  od_printf("\n\r`bright`G. `bright red`H`red`its: `bright green`%-6d\n\r",cur_user.drug_hits);
+  od_printf("`bright`H. `bright red`H`red`igh: `bright green`%d%c\n\r",(INT16)cur_user.drug_high,37);
+  od_printf("`bright`I. `bright red`A`red`ddicted: `bright green`%d%c\n\r",(INT16)cur_user.drug_addiction,37);
+  od_printf("`bright`J. `bright red`D`red`ays `bright red`S`red`ince `bright red`L`red`ast `bright red`H`red`it: `bright green`%d\n\r",cur_user.drug_days_since);
+  if (cur_user.rest_where==NOWHERE) od_printf("`bright`K. `bright red`S`red`taying `bright red`a`red`t: `bright green`N`green`owhere");
+  else if (cur_user.rest_where==MOTEL) od_printf("`bright`K. `bright red`S`red`taying `bright red`a`red`t: `bright green`C`green`heap `bright green`M`green`otel");
+  else if (cur_user.rest_where==REG_HOTEL) od_printf("`bright`K. `bright red`S`red`taying `bright red`a`red`t: `bright green`R`green`egular `bright green`H`green`otel");
+  else if (cur_user.rest_where==EXP_HOTEL) od_printf("`bright`K. `bright red`S`red`taying `bright red`a`red`t: `bright green`E`green`xpensive `bright green`H`green`otel");
+  od_printf(" `bright red`F`red`or `bright green`%d`bright red` D`red`ays\n\r",(INT16)cur_user.hotel_paid_fer);
+  od_printf("`blue`-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\r");
+//  od_control.od_ker_exec=ny_kernel;
+ // WaitForEnter();
+}
+
+
+void
+print_drug(drug_type drug)
+{
+	od_printf("`bright green`");
+	if (drug==POT) od_printf("P`green`ot");
+	else if (drug==HASH) od_printf("H`green`ash");
+	else if (drug==LSD) od_printf("L`green`SD");
+	else if (drug==COKE) od_printf("C`green`oke");
+	else if (drug==PCP) od_printf("P`green`CP");
+	else if (drug==HEROIN) od_printf("H`green`eroin");
+}
+
+
+void
+set_points(DWORD raise)
+{       // when is time for next level      0   1    2    3    4    5    6     7     8     9     10    11    12    13    14    15    16    17     18     19      //20
+	DWORD level_seal[LEVELS] = {500,1020,2100,3700,6100,9100,12820,17300,22580,28700,35700,43620,52500,62380,73300,85300,98420,112700,128180,144900};//,162900};
+     /* char c_dir;
+
+	c_dir=c_dir_g;*/
+
+
+	cur_user.level=0;
+	cur_user.points=raise;
+	while (cur_user.level<20 && level_seal[cur_user.level]<=cur_user.points) {
+	//while ( (pow( 10,((double)cur_user.level+1)/2) ) * 25 )<=cur_user.points) {
+	  cur_user.level++;
+	  if (cur_user.nation==HEADBANGER) {
+	    cur_user.strength=(5 * pow(1.3,cur_user.level)+.5);
+	    cur_user.defense=(4 * pow(1.3,cur_user.level)+.5);
+	  } else if (cur_user.nation==HIPPIE) {
+	    cur_user.strength=(4 * pow(1.3,cur_user.level)+.5);
+	    cur_user.defense=(4 * pow(1.3,cur_user.level)+.5);
+	  } else if (cur_user.nation==BIG_FAT_DUDE) {
+	    cur_user.strength=(3 * pow(1.3,cur_user.level)+.5);
+	    cur_user.defense=(6 * pow(1.3,cur_user.level)+.5);
+	  } else if (cur_user.nation==CRACK_ADDICT) {
+	    cur_user.strength=(4 * pow(1.3,cur_user.level)+.5);
+	    cur_user.defense=(5 * pow(1.3,cur_user.level)+.5);
+	  }
+	  else if (cur_user.nation==PUNK) {
+	    cur_user.strength=(6 * pow(1.3,cur_user.level)+.5);
+	    cur_user.defense=(3 * pow(1.3,cur_user.level)+.5);
+	  }
+	  cur_user.hitpoints+=.7 * cur_user.maxhitpoints;
+	  cur_user.maxhitpoints=(15 * pow(1.7,cur_user.level)+.5);
+	}
+   //   wrt_sts();
+}
+
+void
+SortScrFile(INT16 usr) // pebble sorting of scorefile
+{
+  FILE *justfile;
+  FILE *scr_file;
+  FILE *fpUserFile;
+  FILE *njustfile;
+  INT16 crnt1,crnt2,cnt,sorted;
+  scr_rec rec[2];
+  user_rec urec;
+  char numstr[20];
+
+    ch_game_d();
+    scr_file=ShareFileOpen(SCR_FILENAME,"r+b");
+    fpUserFile=ShareFileOpen(USER_FILENAME,"r+b");
+    if (usr==user_num) {
+      cnt=cur_user.rank;
+    } else {
+      fseek(fpUserFile, (INT32)usr * sizeof(user_rec), SEEK_SET);
+      ny_fread(&urec, sizeof(user_rec), 1, fpUserFile);
+      cnt=urec.rank;
+    }
+
+    //od_printf("\n\r\n\r%d\n\r\n\r",cnt);
+
+    crnt1=0;
+    crnt2=1;
+
+    strcpy(rec[crnt1].name,cur_user.name);
+    rec[crnt1].nation=cur_user.nation;
+    rec[crnt1].level=cur_user.level;
+    rec[crnt1].points=cur_user.points;
+    rec[crnt1].alive=cur_user.alive;
+    rec[crnt1].sex=cur_user.sex;
+    rec[crnt1].user_num=user_num;
+    rec[crnt1].online=TRUE;
+
+
+    fseek(scr_file, (INT32)cur_user.rank * sizeof(scr_rec), SEEK_SET);
+    ny_fwrite(&rec[crnt1], sizeof(scr_rec), 1, scr_file);
+
+    if (cnt>0) {
+      ch_flag_d();
+      do {
+	sorted=TRUE;
+
+	fseek(scr_file, (INT32)(cnt-1) * sizeof(scr_rec), SEEK_SET);
+	ny_fread(&rec[crnt1], sizeof(scr_rec), 1, scr_file);
+
+	fseek(scr_file, (INT32)cnt * sizeof(scr_rec), SEEK_SET);
+	ny_fread(&rec[crnt2], sizeof(scr_rec), 1, scr_file);
+	if (rec[crnt1].points<rec[crnt2].points) { // switch records
+
+	  sorted=FALSE; // run another round
+
+	  sprintf(numstr,"u%07d.on",rec[crnt1].user_num);
+	  if (single_node==FALSE && fexist(numstr)) {
+	    sprintf(numstr,"u%07d.rnk",rec[crnt1].user_num);
+	    njustfile = ShareFileOpen(numstr, "wb");
+	    ny_fwrite(&cnt,2,1,njustfile);
+	    fclose(njustfile);
+	  } else {
+	    fseek(fpUserFile, (INT32)rec[crnt1].user_num * sizeof(user_rec), SEEK_SET);
+	    ny_fread(&urec,sizeof(user_rec),1,fpUserFile);
+	    urec.rank=cnt;
+	    fseek(fpUserFile, (INT32)rec[crnt1].user_num * sizeof(user_rec), SEEK_SET);
+	    ny_fwrite(&urec,sizeof(user_rec),1,fpUserFile);
+	  }
+
+	  if (usr==user_num) {
+	    cur_user.rank=cnt-1;
+	  } else {
+	    sprintf(numstr,"u%07d.on",rec[crnt2].user_num);
+	    if (single_node==FALSE && fexist(numstr)) {
+	      sprintf(numstr,"u%07d.rnk",rec[crnt2].user_num);
+	      njustfile = ShareFileOpen(numstr, "wb");
+	      cnt--;
+	      ny_fwrite(&cnt,2,1,njustfile);
+	      cnt++;
+	      fclose(njustfile);
+	    } else {
+	      fseek(fpUserFile, (INT32)rec[crnt2].user_num * sizeof(user_rec), SEEK_SET);
+	      ny_fread(&urec,sizeof(user_rec),1,fpUserFile);
+	      urec.rank=cnt-1;
+	      fseek(fpUserFile, (INT32)rec[crnt2].user_num * sizeof(user_rec), SEEK_SET);
+	      ny_fwrite(&urec,sizeof(user_rec),1,fpUserFile);
+	    }
+	  }
+
+	  fseek(scr_file, (INT32)(cnt-1) * sizeof(scr_rec), SEEK_SET);
+	  ny_fwrite(&rec[crnt2],sizeof(scr_rec),1,scr_file);
+	  fseek(scr_file, (INT32)cnt * sizeof(scr_rec), SEEK_SET);
+	  ny_fwrite(&rec[crnt1],sizeof(scr_rec),1,scr_file);
+
+	}
+	cnt--;
+      } while (sorted==FALSE && cnt>0);
+    }
+    fclose(scr_file);
+    fclose(fpUserFile);
+
+}
+
+
+
+void
+SortScrFileB(INT16 usr) // pebble sorting of scorefile
+{
+  FILE *justfile;
+  FILE *scr_file;
+  FILE *fpUserFile;
+  FILE *njustfile;
+  INT16 crnt1,crnt2,cnt,sorted,cont;
+  scr_rec rec[2];
+  user_rec urec;
+  char numstr[20];
+
+ // sort in a certain user either current or an offline user
+    ch_game_d();
+    scr_file=ShareFileOpen(SCR_FILENAME,"r+b");
+    fpUserFile=ShareFileOpen(USER_FILENAME,"r+b");
+    if (usr==user_num) {
+      cnt=cur_user.rank;
+    } else {
+      fseek(fpUserFile, (INT32)usr * sizeof(user_rec), SEEK_SET);
+      ny_fread(&urec, sizeof(user_rec), 1, fpUserFile);
+      cnt=urec.rank;
+    }
+    //od_printf("\n\r\n\r%d\n\r\n\r",cnt);
+
+    crnt1=0;
+    crnt2=1;
+
+    strcpy(rec[crnt1].name,cur_user.name);
+    rec[crnt1].nation=cur_user.nation;
+    rec[crnt1].level=cur_user.level;
+    rec[crnt1].points=cur_user.points;
+    rec[crnt1].alive=cur_user.alive;
+    rec[crnt1].sex=cur_user.sex;
+    rec[crnt1].user_num=user_num;
+    rec[crnt1].online=TRUE;
+
+
+    fseek(scr_file, (INT32)cur_user.rank * sizeof(scr_rec), SEEK_SET);
+    ny_fwrite(&rec[crnt1], sizeof(scr_rec), 1, scr_file);
+    cont=filelength(fileno(scr_file))/sizeof(scr_rec);
+
+    if (cnt<(cont-1)) {
+      ch_flag_d();
+      do {
+	sorted=TRUE;
+
+	fseek(scr_file, (INT32)(cnt+1) * sizeof(scr_rec), SEEK_SET);
+	ny_fread(&rec[crnt1], sizeof(scr_rec), 1, scr_file);
+
+	fseek(scr_file, (INT32)cnt * sizeof(scr_rec), SEEK_SET);
+	ny_fread(&rec[crnt2], sizeof(scr_rec), 1, scr_file);
+	if (rec[crnt1].points>rec[crnt2].points) { // switch records
+
+	  sorted=FALSE; // run another round
+
+	  sprintf(numstr,"u%07d.on",rec[crnt1].user_num);
+	  if (single_node==FALSE && fexist(numstr)) {
+	    sprintf(numstr,"u%07d.rnk",rec[crnt1].user_num);
+	    njustfile = ShareFileOpen(numstr, "wb");
+	    ny_fwrite(&cnt,2,1,njustfile);
+	    fclose(njustfile);
+	  } else {
+	    fseek(fpUserFile, (INT32)rec[crnt1].user_num * sizeof(user_rec), SEEK_SET);
+	    ny_fread(&urec,sizeof(user_rec),1,fpUserFile);
+	    urec.rank=cnt;
+	    fseek(fpUserFile, (INT32)rec[crnt1].user_num * sizeof(user_rec), SEEK_SET);
+	    ny_fwrite(&urec,sizeof(user_rec),1,fpUserFile);
+	  }
+
+	  if (usr==user_num) {
+	    cur_user.rank=cnt+1;
+	  } else {
+	    sprintf(numstr,"u%07d.on",rec[crnt2].user_num);
+	    if (single_node==FALSE && fexist(numstr)) {
+	      sprintf(numstr,"u%07d.rnk",rec[crnt2].user_num);
+	      njustfile = ShareFileOpen(numstr, "wb");
+	      cnt++;
+	      ny_fwrite(&cnt,2,1,njustfile);
+	      cnt--;
+	      fclose(njustfile);
+	    } else {
+	      fseek(fpUserFile, (INT32)rec[crnt2].user_num * sizeof(user_rec), SEEK_SET);
+	      ny_fread(&urec,sizeof(user_rec),1,fpUserFile);
+	      urec.rank=cnt+1;
+	      fseek(fpUserFile, (INT32)rec[crnt2].user_num * sizeof(user_rec), SEEK_SET);
+	      ny_fwrite(&urec,sizeof(user_rec),1,fpUserFile);
+	    }
+	  }
+
+	  fseek(scr_file, (INT32)(cnt+1) * sizeof(scr_rec), SEEK_SET);
+	  ny_fwrite(&rec[crnt2],sizeof(scr_rec),1,scr_file);
+	  fseek(scr_file, (INT32)cnt * sizeof(scr_rec), SEEK_SET);
+	  ny_fwrite(&rec[crnt1],sizeof(scr_rec),1,scr_file);
+
+	}
+	cnt++;
+      } while (sorted==FALSE && cnt<(cont-1));
+    }
+    fclose(scr_file);
+    fclose(fpUserFile);
+
+}
+
+void
+print_disease(desease ill)
+{
+	od_printf("`bright green`");
+	if (ill==NONE) od_printf("H`green`ealthy");
+	else if (ill==CRAPS) od_printf("C`green`rabs");
+	else if (ill==HERPES) od_printf("H`green`erpes");
+	else if (ill==SYPHILIS) od_printf("S`green`yphilis");
+	else if (ill==AIDS) od_printf("A`green`IDS");
+}
+
+
+
+
+void
+print_arm(weapon arm)
+{
+	if (arm==HANDS)
+	   od_printf("`bright green`H`green`ands");
+	else if (arm==PEPPER)
+	   od_printf("`bright green`P`green`epper `bright green`S`green`pray");
+	else if (arm==KNIFE)
+	   od_printf("`bright green`K`green`nife");
+	else if (arm==CHAIN)
+	   od_printf("`bright green`C`green`hain");
+	else if (arm==GUN)
+	   od_printf("`bright green`G`green`un");
+	else if (arm==RIFLE)
+	   od_printf("`bright green`R`green`ifle");
+	else if (arm==LASER_GUN)
+	   od_printf("`bright green`L`green`aser `bright green`G`green`un");
+	else if (arm==SHOTGUN)
+	   od_printf("`bright green`S`green`hotgun");
+	else if (arm==MACHINEGUN)
+	   od_printf("`bright green`M`green`achine `bright green`G`green`un");
+	else if (arm==GRANADE_LAUNCHER)
+	   od_printf("`bright green`G`green`ranade `bright green`L`green`auncher");
+	else if (arm==BLASTER)
+	   od_printf("`bright green`B`green`laster");
+	else if (arm==A_BOMB)
+	   ny_disp_emu("`0A`2tomic `0B`2omb");
+	else if (arm==SHARP_STICK)
+	   ny_disp_emu("`0S`2harp `0S`2tick");
+	else if (arm==SCREWDRIVER)
+	   ny_disp_emu("`0S`2crewdriver");
+	else if (arm==HAMMER)
+	   ny_disp_emu("`0H`2ammer");
+	else if (arm==LEAD_PIPE)
+	   ny_disp_emu("`0L`2ead `0P`2ipe");
+	else if (arm==COLT)
+	   ny_disp_emu("`0C`2olt");
+	else if (arm==ELEPHANT_GUN)
+	   ny_disp_emu("`0E`2lephant `0G`2un");
+	else if (arm==NAILGUN)
+	   ny_disp_emu("`0N`2ail `0G`2un");
+	else if (arm==ASSAULT_RIFLE)
+	   ny_disp_emu("`0A`2ssault `0R`2ifle");
+	else if (arm==PROTON_GUN)
+	   ny_disp_emu("`0P`2roton `0G`2un");
+	else if (arm==NEUTRON_PHASER)
+	   ny_disp_emu("`0N`2Neutron `0P`2haser");
+	else if (arm==ULTRASOUND_GUN)
+	   ny_disp_emu("`0U`2ltrasound `0G`2un");
+
+}
+
+
+/* The WriteCurrentUser() function is called to save the information on the */
+/* user who is currently using the door, to the ny2008.USR file.            */
+void WriteCurrentUser(INT16 user_num)
+{
+   FILE *fpUserFile;
+   ny_kernel();
+
+   /* Attempt to open the user file for exclusize access by this node.     */
+   /* This function will wait up to the pre-set amount of time (as defined */
+   /* near the beginning of this file) for access to the user file.        */
+   ch_game_d();
+   fpUserFile = ShareFileOpen(USER_FILENAME, "r+b");
+
+   /* If unable to access the user file, display an error message and */
+   /* return.                                                         */
+   if(fpUserFile == NULL)
+   {
+      od_printf("Unable to access the user file.\n\r");
+      WaitForEnter();
+      return;
+   }
+
+   /* Move to appropriate location in user file for the current user's */
+   /* record. */
+   fseek(fpUserFile, (INT32)user_num * sizeof(user_rec), SEEK_SET);
+
+   /* Write the new record to the file. */
+   if(ny_fwrite(&cur_user, sizeof(user_rec), 1, fpUserFile) == 0)
+   {
+      /* If unable to write the record, display an error message. */
+      fclose(fpUserFile);
+      od_printf("Unable to update user record file.\n\r");
+      WaitForEnter();
+      return;
+   }
+
+   /* Close the user file to allow other nodes to access it again. */
+   fclose(fpUserFile);
+}
+
+
+
+
+
+
+
+/* This function opens the specified file in the specified mode for         */
+/* exculsive access by this node; while the file is open, other nodes will  */
+/* be unable to open the file. This function will wait for up to the number */
+/* of seconds set by FILE_ACCESS_MAX_WAIT, which is defined near the        */
+/* beginning of this file.                                                  */
+//FILE *ExculsiveFileOpen(char *pszFileName, char *pszMode)
+//{
+//   FILE *fpFile = NULL;
+//   time_t StartTime = time(NULL);
+
+   /* Attempt to open the file while there is still time remaining. */
+//   while((fpFile = fopen(pszFileName, pszMode)) == NULL
+//      && errno == EACCES
+//      && difftime(time(NULL), StartTime) < FILE_ACCESS_MAX_WAIT)
+//   {
+      /* If we were unable to open the file, call od_kernal, so that    */
+      /* OpenDoors can continue to respond to sysop function keys, loss */
+      /* of connection, etc.                                            */
+ //     od_kernal();
+ //  }
+
+   /* Return FILE pointer for opened file, if any. */
+//   return(fpFile);
+//}
+
+/* The WaitForEnter() function is used to create custom prompt */
+
+void WaitForEnter(void)
+{
+   /* Display prompt. */
+   od_printf("\n\r`bright red`Smack [ENTER] to go on.");
+
+   /* Wait for a Carriage Return or Line Feed character from the user. */
+   od_get_answer("\n\r");
+}
+
+
+
+
+/* CustomConfigFunction() is called by OpenDoors to process custom */
+/* configuration file keywords that                                */
+void CustomConfigFunction(char *pszKeyword, char *pszOptions)
+{
+  if(stricmp(pszKeyword, "SingleNodeOnly") == 0)
+  {
+    single_node=TRUE;
+  }
+  else if(stricmp(pszKeyword, "FlagDirectory") == 0)
+  {
+    strupr(pszOptions);
+
+    flagdisk=(*pszOptions) - 'A';
+
+    strzcpy(flagdir,pszOptions,2,MAX_PATH);
+  }
+  else if(stricmp(pszKeyword, "PollingValue") == 0)
+  {
+    if(time_slice_value!=0)
+      sscanf(pszOptions,"%d",&time_slice_value);
+  }
+  else if(stricmp(pszKeyword, "NoMultitasker") == 0)
+  {
+    time_slice_value=0;
+  }
+}
+
+
+void
+ny_disp_emu(char line[])
+{
+  INT16 cnt;
+
+  for(cnt=0;line[cnt]!=0;cnt++) {
+    if(line[cnt]=='`') {
+      cnt++;
+      if(line[cnt]==0)
+	return;
+      else if(line[cnt]=='0')
+	od_printf("`bright green`");
+      else if(line[cnt]=='1')
+	od_printf("`blue`");
+      else if(line[cnt]=='2')
+	od_printf("`green`");
+      else if(line[cnt]=='3')
+	od_printf("`cyan`");
+      else if(line[cnt]=='4')
+	od_printf("`red`");
+      else if(line[cnt]=='5')
+	od_printf("`magenta`");
+      else if(line[cnt]=='6')
+	od_printf("`brown`");
+      else if(line[cnt]=='7')
+	od_printf("`white`");
+      else if(line[cnt]=='8')
+	od_printf("`bright black`");
+      else if(line[cnt]=='9')
+	od_printf("`bright blue`");
+      else if(line[cnt]=='!')
+	od_printf("`bright cyan`");
+      else if(line[cnt]=='@')
+	od_printf("`bright red`");
+      else if(line[cnt]=='#')
+	od_printf("`bright magenta`");
+      else if(line[cnt]=='$')
+	od_printf("`bright yellow`");
+      else if(line[cnt]=='%')
+	od_printf("`bright`");
+    } else {
+      od_putch(line[cnt]);
+    }
+  }
+}
+
+
+void
+get_bbsname(char bbsname[])
+{
+  INT16 cnt=0;
+  char out[36];
+  INT16 cnto=0;
+
+  while (bbsname[cnt]!=0 && cnto<35) {
+    if (bbsname[cnt]>='a' && bbsname[cnt]<='z') bbsname[cnt]-=32;
+
+    if (bbsname[cnt]>='A' && bbsname[cnt]<='Z') {
+      out[cnto]=bbsname[cnt];
+      cnto++;
+    }
+
+    cnt++;
+  }
+  out[cnto]=0;
+  strcpy(bbsname,out);
+}
+
+
+INT16
+seereg(char bbsname[])
+{
+  return TRUE;
+/*  FILE *justfile;
+
+  char kod[26];
+  char string[26] = "ABECEDAKURVAHLEDAPICATAKY";
+  INT16 intval;
+  INT16 cnt;
+  INT16 bbsc;
+  INT16 which;
+  INT16 temp,temp2;
+
+  ch_game_d();
+  justfile=ShareFileOpen(KEY_FILENAME,"rb");
+
+  ny_fread(kod,26,1,justfile);
+
+  fclose(justfile);
+
+
+  sscanf(kod,"%02d",&intval);
+
+  if (intval!=strlen(bbsname)) {
+    return(0);
+  }
+
+  intval = kod[0] - '0';
+
+  bbsc=0;
+
+  which=0;
+
+  for (cnt=2;cnt<25;cnt++) {
+    if (bbsname[bbsc]==0) bbsc=0;
+
+    temp2=string[cnt]+intval+bbsname[bbsc];
+
+//    if (kod[cnt]>'Z') kod[cnt]-=('Z'-'A');
+    temp =  (temp2-'A')/('Z'-'A');
+
+    temp2 = temp2 - (('Z'-'A') * temp);
+
+    if (kod[cnt]!=temp2) {
+      return(0);
+    }
+
+    if (which==0)
+      which =1;
+    else
+      which =0;
+
+    intval = kod[which] - '0';
+    bbsc++;
+  }
+
+  return(TRUE);*/
+}
+
+size_t
+ny_fwrite(const void *ptr, size_t size, size_t n, FILE *stream)
+{
+  size_t status;
+  INT32 offset;
+  offset=ftell(stream);
+
+  if(single_node==FALSE && filelength(fileno(stream))>=offset+(size*n)) {
+    //offset=ftell(stream);
+
+    lock(fileno(stream),offset,size * n);
+    status=fwrite(ptr,size,n,stream);
+    unlock(fileno(stream),offset,size * n);
+  } else {
+    status=fwrite(ptr,size,n,stream);
+  }
+  return(status);
+}
+
+
+size_t
+ny_fread(void *ptr, size_t size, size_t n, FILE *stream)
+{
+  size_t status;
+  INT32 offset;
+
+  if(single_node==FALSE && filelength(fileno(stream))>=offset+(size*n)) {
+    offset=ftell(stream);
+
+    lock(fileno(stream),offset,size * n);
+    status=fread(ptr,size,n,stream);
+    unlock(fileno(stream),offset,size * n);
+  } else {
+    status=fread(ptr,size,n,stream);
+  }
+  return(status);
+}
+
+
+
+
+/* This function opens the specified file in the specified mode for         */
+/* share access by this node; while the file is open, other nodes will      */
+/* be able to open the file. This function will wait for up to the number   */
+/* of seconds set by FILE_ACCESS_MAX_WAIT, which is defined near the        */
+/* beginning of this file.                                                  */
+FILE *ShareFileOpen(char *pszFileName, char *pszMode)
+{
+   FILE *fpFile = NULL;
+   time_t StartTime = time(NULL);
+
+   /* Attempt to open the file while there is still time remaining. */
+   ny_kernel();
+   if(single_node==FALSE) {
+     while((fpFile = _fsopen(pszFileName, pszMode,SH_DENYNO)) == NULL
+	&& errno == EACCES
+	&& difftime(time(NULL), StartTime) < FILE_ACCESS_MAX_WAIT)
+     {
+      /* If we were unable to open the file, call od_kernal, so that    */
+      /* OpenDoors can continue to respond to sysop function keys, loss */
+      /* of connection, etc.                                            */
+	od_kernal();
+     }
+   } else {
+     fpFile = fopen(pszFileName, pszMode);
+   }
+
+   if(fpFile==NULL)
+	fpFile=fopen("cruft.tmp","w+");
+
+   /* Return FILE pointer for opened file, if any. */
+   return(fpFile);
+}
+
+void
+ch_game_d(void)
+{
+ if(c_dir_g==1) {
+#ifndef __unix__
+   setdisk(gamedisk);
+#endif
+   chdir(gamedir);
+   c_dir_g=0;
+ }
+}
+
+void
+ch_flag_d(void)
+{
+ if(c_dir_g==0) {
+#ifndef __unix__
+   setdisk(flagdisk);
+#endif
+   chdir(flagdir);
+   c_dir_g=1;
+ }
+}
diff --git a/src/doors/ny2008/src/nyedit.h b/src/doors/ny2008/src/nyedit.h
new file mode 100644
index 0000000000000000000000000000000000000000..f4119e3fcf6775ff3f2a8e5d6d5ec0061ba650f7
--- /dev/null
+++ b/src/doors/ny2008/src/nyedit.h
@@ -0,0 +1,64 @@
+//                        0 - Critical Door error (no fossil, etc.)
+//                        1 - Carrier lost, user off-line
+//                        2 - Sysop terminated call, user off-line
+//                        3 - User time used up, user STILL ON-LINE
+//                        4 - Keyboard inactivity timeout, user off-line
+//                       10 - User chose to return to BBS
+//                       11 - User chose to logoff, user off-line
+//                       12 - Critical RAVote error
+
+
+//#include <process.h>
+#include <math.h>
+//#include <dos.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <errno.h>
+//#include <ctype.h>
+//#include <share.h>
+//#include <locking.h>
+//#include <fcntl.h>
+//#include <sys\stat.h>
+
+#include <OpenDoor.h>                   // Must be included in all doors
+#include <dirwrap.h>
+#include <ciowrap.h>
+#include <filewrap.h>
+#include <genwrap.h>
+
+#include "filename.h"
+#include "const.h"
+#include "structs.h"
+
+int    	main(int argc,char *argv[]);    // Function prototype declarations
+
+char   	entry_menu(void);               // Menu draw...
+void	DisplayStats(void);
+void	print_drug(drug_type drug);
+void	print_arm(weapon arm);
+void    ny_kernel(void);
+void	print_disease(desease ill);
+
+void WaitForEnter(void);
+void WriteCurrentUser(INT16 user_num);
+//FILE *ExculsiveFileOpen(char *pszFileName, char *pszMode);
+void CustomConfigFunction(char *pszKeyword, char *pszOptions);
+void strzcpy(char dest[],const char src[], INT16 beg,INT16 end);
+void	cap_names(char name[]);
+void	dump(void);
+void    ny_disp_emu(char line[]);
+void	get_bbsname(char bbsname[]);
+INT16	seereg(char bbsname[]);
+FILE *ShareFileOpen(char *pszFileName, char *pszMode);
+size_t ny_fread(void *ptr, size_t size, size_t n, FILE*stream);
+size_t ny_fwrite(const void *ptr, size_t size, size_t n, FILE*stream);
+//void ChangeOnlineRanks(void);
+void SortScrFile(INT16 usr);
+void SortScrFileB(INT16 usr);
+void ch_game_d(void);
+void ch_flag_d(void);
+void set_points(DWORD raise);
+
+#include "structs.h"
diff --git a/src/doors/ny2008/src/nyedit.prj b/src/doors/ny2008/src/nyedit.prj
new file mode 100644
index 0000000000000000000000000000000000000000..7fcc19f80fffa50a9ac7705517a39ba38554158c
Binary files /dev/null and b/src/doors/ny2008/src/nyedit.prj differ
diff --git a/src/doors/ny2008/src/nyibbs.cpp b/src/doors/ny2008/src/nyibbs.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..36023ce1a3cf1c672b1f81142969191e44450603
--- /dev/null
+++ b/src/doors/ny2008/src/nyibbs.cpp
@@ -0,0 +1,1774 @@
+#include "ny2008.h"
+
+tIBInfo         IBBSInfo;
+extern INT16      ibbsi;
+extern INT16      ibbsi_operator;
+extern INT16      ibbsi_game_num;
+extern char     bbs_namei[];
+INT16             ibbs_send_nodelist = FALSE;
+INT16             ibbs_maint_i = FALSE;
+INT16             ibbs_maint_o = FALSE;
+//int           ibbs_i_mail = FALSE;
+//int           ibbs_operator = FALSE;
+//int           ibbs_game_num = 0;
+glob_t          fff;
+glob_t          ff;
+char		**fname;
+//int           time_slice_value = 1500;
+char           *ver = "0.10";
+
+//this is this module version which is 0.10 beta2
+char           *verinfo = "BETA 2";
+//char          no_slices = FALSE;
+char            single_node = FALSE;
+
+/*
+   void time_slice(void) { asm { mov ax,time_slice_value int 15 } }
+*/
+
+char
+               *LocationOf(char *address)
+{
+    INT16             iCurrentSystem;
+
+    if (IBBSInfo.paOtherSystem == NULL && IBBSInfo.nTotalSystems != 0)
+	return (NULL);
+    for (iCurrentSystem = 0; iCurrentSystem < IBBSInfo.nTotalSystems; ++iCurrentSystem) {
+	if (strcmp(IBBSInfo.paOtherSystem[iCurrentSystem].szAddress, address) == 0) {
+	    return (IBBSInfo.paOtherSystem[iCurrentSystem].szSystemName);
+	}
+    }
+    return (NULL);
+}
+
+
+
+void            AddBestPlayerInIB(char *name, DWORD points, char location[])
+{
+    //ffblk ffblk;
+    ibbs_best_rec_type best_rec, best_rec2;
+    FILE           *justfile;
+    INT16             cnt = 0, len_of_list;
+
+    strcpy(best_rec2.name, name);
+    strcpy(best_rec2.location, location);
+    best_rec2.points = points;
+
+
+    //ch_game_d();
+    if (fexist(IBBS_BESTTEN_FILENAME)) {
+	justfile = ShareFileOpen(IBBS_BESTTEN_FILENAME, "r+b");
+	len_of_list = filelength(fileno(justfile)) / sizeof(ibbs_best_rec_type) + 1;
+	if (len_of_list > 10)
+	    len_of_list = 10;
+
+	/* check if the same record exists */
+	while (cnt < 10 && ny_fread(&best_rec, sizeof(ibbs_best_rec_type), 1, justfile) == 1) {
+	    //printf("[%ld=%ld],", best_rec.points, points);
+	    //printf("[%s=%s],", best_rec.location, location);
+	    //printf("[%s=%s]\n", best_rec.name, name);
+	    if (points == best_rec.points &&
+		strcmp(best_rec.location, location) == 0 &&
+		strcmp(best_rec.name, name) == 0) {
+		/* if it already exists quit this function */
+		fclose(justfile);
+		return;
+	    }
+	}
+
+	/* rewind the file to beginning */
+	fseek(justfile, 0, SEEK_SET);
+
+	while (cnt < 10 && ny_fread(&best_rec, sizeof(ibbs_best_rec_type), 1, justfile) == 1) {
+
+	    if (points >= best_rec.points) {
+		//fseek(justfile, (INT32)cnt * sizeof(ibbs_best_rec_type), SEEK_SET);
+		//ny_fwrite(&best_rec2, sizeof(ibbs_best_rec_type), 1, justfile);
+		strcpy(best_rec.name, best_rec2.name);
+		strcpy(best_rec.location, best_rec2.location);
+		best_rec.points = best_rec2.points;
+		//cnt++;
+		while (cnt < len_of_list) {
+		    fseek(justfile, (INT32)cnt * sizeof(ibbs_best_rec_type), SEEK_SET);
+		    ny_fread(&best_rec2, sizeof(ibbs_best_rec_type), 1, justfile);
+		    fseek(justfile, (INT32)cnt * sizeof(ibbs_best_rec_type), SEEK_SET);
+		    ny_fwrite(&best_rec, sizeof(ibbs_best_rec_type), 1, justfile);
+		    strcpy(best_rec.name, best_rec2.name);
+		    strcpy(best_rec.location, best_rec2.location);
+		    best_rec.points = best_rec2.points;
+		    cnt++;
+		}
+		fclose(justfile);
+		//od_control.od_ker_exec = NULL;
+		return;
+	    }
+	    cnt++;
+
+	}
+
+	fclose(justfile);
+	if (cnt < 10) {
+	    justfile = ShareFileOpen(IBBS_BESTTEN_FILENAME, "a+b");
+	    ny_fwrite(&best_rec2, sizeof(ibbs_best_rec_type), 1, justfile);
+	    fclose(justfile);
+	    //od_control.od_ker_exec = NULL;
+	    return;
+	}
+	else {
+	    //od_control.od_ker_exec = NULL;
+	    return;
+	}
+    }
+    justfile = ShareFileOpen(IBBS_BESTTEN_FILENAME, "wb");
+    ny_fwrite(&best_rec2, sizeof(ibbs_best_rec_type), 1, justfile);
+    fclose(justfile);
+    //od_control.od_ker_exec = NULL;
+    return;
+}
+
+
+
+void            get_bbsname(char bbsname[])
+{
+    INT16             cnt = 0;
+    char            out[36];
+    INT16             cnto = 0;
+
+    while (bbsname[cnt] != 0 && cnto < 35) {
+	if (bbsname[cnt] >= 'a' && bbsname[cnt] <= 'z')
+	    bbsname[cnt] -= 32;
+
+	if (bbsname[cnt] >= 'A' && bbsname[cnt] <= 'Z') {
+	    out[cnto] = bbsname[cnt];
+	    cnto++;
+	}
+
+	cnt++;
+    }
+    out[cnto] = 0;
+    strcpy(bbsname, out);
+}
+
+INT16             seereg(char bbsname[])
+{
+    return TRUE;
+
+    /*
+       FILE *justfile;
+    
+    char kod[26]; char string[26] = "ABECEDAKURVAHLEDAPICATAKY"; int intval;
+       INT16 cnt; int bbsc; int which; int temp,temp2;
+    
+    //  ch_game_d(); justfile=ShareFileOpen(KEY_FILENAME,"rb");
+    
+    ny_fread(kod,26,1,justfile);
+    
+    fclose(justfile);
+    
+    
+    sscanf(kod,"%02d",&intval);
+    
+    if (intval!=strlen(bbsname)) { return(0); }
+    
+    intval = kod[0] - '0';
+    
+    bbsc=0;
+    
+    which=0;
+    
+    for (cnt=2;cnt<25;cnt++) { if (bbsname[bbsc]==0) bbsc=0;
+    
+    temp2=string[cnt]+intval+bbsname[bbsc];
+    
+    //    if (kod[cnt]>'Z') kod[cnt]-=('Z'-'A'); temp =
+       (temp2-'A')/('Z'-'A');
+    
+    temp2 = temp2 - (('Z'-'A') * temp);
+    
+    if (kod[cnt]!=temp2) { return(0); }
+    
+    if (which==0) which =1; else which =0;
+    
+    intval = kod[which] - '0'; bbsc++; }
+    
+    return(TRUE);
+    */
+}
+
+void            DecodeBuffer(const char *pszSource, char *pDestBuffer, INT16 nBufferSize, INT16 skip)
+{
+    const char     *pcSource = pszSource;
+    char           *pcDest = (char *)pDestBuffer;
+    INT16             iDestLocation;
+    tBool           bFirstOfByte = TRUE;
+
+    /* Search for beginning of buffer delimiter char, returning if not found */
+    while (*pcSource && *pcSource != DELIMITER_CHAR)
+	++pcSource;
+    if (!*pcSource)
+	return;
+
+    /* Move pointer to first char after delimiter char */
+    ++pcSource;
+    if (skip)
+	pcSource += 4;
+
+    /* Loop until destination buffer is full, delimiter char is encountered, */
+    /* or end of source buffer is encountered */
+    iDestLocation = 0;
+    while (iDestLocation < nBufferSize && *pcSource
+	   && *pcSource != DELIMITER_CHAR) {
+	/* If this is a valid data character */
+	if (*pcSource >= 0x40 && *pcSource <= 0x7e) {
+	    /* If this is first character of byte */
+	    if (bFirstOfByte) {
+		*pcDest = *pcSource & 0x3f;
+
+		/* Toggle bFirstOfByte */
+		bFirstOfByte = FALSE;
+	    }
+	    else {		/* if(!bFirstOfByte) */
+		*pcDest |= (*pcSource & 0x30) << 2;
+
+		/* Increment destination */
+		++iDestLocation;
+		++pcDest;
+
+		/* Toggle bFirstOfByte */
+		bFirstOfByte = TRUE;
+	    }
+	}
+
+	/* Increment source byte pointer */
+	++pcSource;
+    }
+}
+
+INT16             ReadLen(const char *pszSource)
+{
+    const char     *pcSource = pszSource;
+    //char         *pcDest;
+
+    //= (char *)pDestBuffer;
+    char            size[2];
+    //int           iDestLocation;
+    INT16             nBufferSize = 2;
+    //tBool         bFirstOfByte = TRUE;
+
+    /* Search for beginning of buffer delimiter char, returning if not found */
+    while (*pcSource && *pcSource != DELIMITER_CHAR)
+	++pcSource;
+    if (!*pcSource)
+	return (0);
+
+    /* Move pointer to first char after delimiter char */
+    ++pcSource;
+
+    size[0] = *pcSource & 0x3f;
+    pcSource++;
+    size[0] |= (*pcSource & 0x30) << 2;
+    pcSource++;
+    size[1] = *pcSource & 0x3f;
+    pcSource++;
+    size[1] |= (*pcSource & 0x30) << 2;
+    pcSource++;
+
+    nBufferSize = *(INT16 *)size;
+    //printf("&&&& %d &&&&\n", nBufferSize);
+    return (nBufferSize);
+}
+
+
+/*
+   void DecodeBufferR(const char *pszSource, INT16 *pDestBuffer, int
+   nBufferSize) { const char *pcSource = pszSource; char *pcDest = (char
+   *)pDestBuffer; //  char size[2]; int iDestLocation; //  int nBufferSize=2;
+   tBool bFirstOfByte = TRUE;
+
+/* Search for beginning of buffer delimiter char, returning if not found -/
+   while(*pcSource && *pcSource != DELIMITER_CHAR) ++pcSource; if(!*pcSource)
+   return(0);
+
+/* Move pointer to first char after delimiter char -/ ++pcSource;
+
+/*  size[0] = *pcSource & 0x3f; pcSource++; size[0] |= (*pcSource & 0x30) <<
+   2; pcSource++; size[1] = *pcSource & 0x3f; pcSource++; size[1] |=
+   (*pcSource & 0x30) << 2; pcSource++;
+
+nBufferSize=*(INT16 *)size; printf("&&&& %d &&&&\n",nBufferSize);
+   pDestBuffer=(INT16)malloc(nBufferSize); pcDest = (char *)(*pDestBuffer);
+*/
+
+/*
+   Loop until destination buffer is full, delimiter char is encountered, -/ /*
+   or end of source buffer is encountered -/ iDestLocation = 0;
+
+while(iDestLocation < nBufferSize && *pcSource && *pcSource !=
+   DELIMITER_CHAR) { /* If this is a valid data character -/ if(*pcSource >=
+   0x40 && *pcSource <= 0x7e) { /* If this is first character of byte -/
+   if(bFirstOfByte) { //      if(iDestLocation<2) { //        size =
+   *pcSource & 0x3f; //        printf("#4#"); //      } else pcDest =
+   *pcSource & 0x3f;
+
+/* Toggle bFirstOfByte -/ bFirstOfByte = FALSE; } else { /* if(!bFirstOfByte)
+   -/ //      if(iDestLocation<2) { //        size |= (*pcSource & 0x30) <<
+   2; //        printf("#5#"); //      } else { pcDest |= (*pcSource & 0x30)
+   << 2; ++pcDest; printf("%c",*pcDest); //      }
+
+/* Increment destination -/ ++iDestLocation;
+
+/* Toggle bFirstOfByte -/ bFirstOfByte = TRUE; } //  printf("#5#"); //
+   if(iDestLocation==2) { //      } } /* Increment source byte pointer -/
+   ++pcSource; } return(nBufferSize); }
+*/
+
+tIBResult       IBGet(tIBInfo * pInfo, char *pBuffer, INT16 nMaxBufferSize)
+{
+    tIBResult       ToReturn;
+    glob_t          DirEntry;
+    DWORD           lwCurrentMsgNum;
+    tMessageHeader  MessageHeader;
+    char            szFileName[PATH_CHARS + FILENAME_CHARS + 2];
+    char           *pszText;
+    tFidoNode       ThisNode, OtherNode;
+    char          **ffname;
+
+    /* Validate information structure */
+    ToReturn = ValidateInfoStruct(pInfo);
+    if (ToReturn != eSuccess)
+	return (ToReturn);
+
+    /* Get this node's address from string */
+    ConvertStringToAddress(&ThisNode, pInfo->szThisNodeAddress);
+
+    MakeFilename(pInfo->szNetmailDir, "*.msg", szFileName);
+
+    /* Seach through each message file in the netmail directory, in no */
+    /* particular order.                                               */
+    if (glob(szFileName, 0, NULL, &DirEntry) == 0) {
+	for(ffname=DirEntry.gl_pathv;*ffname != NULL;ffname++) {
+	    lwCurrentMsgNum = atol(*ffname);
+
+	    /* If able to read message */
+	    if (ReadMessage(pInfo->szNetmailDir, lwCurrentMsgNum, &MessageHeader,
+			    &pszText)) {
+
+		/*
+		   od_printf("\nREAD THROUGH MESSAGE\n");
+		   od_printf("|%s|\n\r",MessageHeader.szToUserName);
+		   od_printf("|%s|\n\r",pInfo->szProgName);
+		   od_printf("%d:",MessageHeader.wDestZone);
+		   od_printf("%d/",MessageHeader.wDestNet);
+		   od_printf("%d.",MessageHeader.wDestNode);
+		   od_printf("%d\n\r",MessageHeader.wDestPoint);
+		
+		od_get_answer("1");
+		*/
+		/* If message is for us, and hasn't be read yet */
+		ConvertStringToAddress(&OtherNode, &MessageHeader.szToUserName[3]);
+
+		if (stricmp(MessageHeader.szFromUserName, pInfo->szProgName) == 0
+		    && (ThisNode.wZone == OtherNode.wZone || OtherNode.wZone == 0 || ThisNode.wZone == 0)
+		    && ThisNode.wNet == OtherNode.wNet
+		    && ThisNode.wNode == OtherNode.wNode
+		    && ThisNode.wPoint == OtherNode.wPoint
+		    && !(MessageHeader.wAttribute & ATTRIB_RECEIVED)) {
+
+		    /*
+		       od_printf("\n\rUNREAD AND FOR US\n\r");
+		       od_get_answer("1");
+		    */
+
+		    /* Decode message text, placing information in buffer */
+		    DecodeBuffer(pszText, pBuffer, nMaxBufferSize, FALSE);
+
+		    /* If received messages should be deleted */
+		    if (pInfo->bEraseOnReceive) {
+			/* Determine filename of message to erase */
+			GetMessageFilename(pInfo->szNetmailDir, lwCurrentMsgNum,
+					   szFileName);
+
+			/* Attempt to erase file */
+			if (unlink(szFileName) == -1) {
+			    ToReturn = eGeneralFailure;
+			}
+			else {
+			    ToReturn = eSuccess;
+			}
+		    }
+
+		    /* If received messages should not be deleted */
+		    else {	/* if(!pInfo->bEraseOnReceive) */
+			/* Mark message as read */
+			MessageHeader.wAttribute |= ATTRIB_RECEIVED;
+			++MessageHeader.wTimesRead;
+
+			/* Attempt to rewrite message */
+			if (!WriteMessage(pInfo->szNetmailDir, lwCurrentMsgNum,
+					  &MessageHeader, pszText)) {
+			    ToReturn = eGeneralFailure;
+			}
+			else {
+			    ToReturn = eSuccess;
+			}
+		    }
+
+		    /* Deallocate message text buffer */
+		    free(pszText);
+
+		    /* Return appropriate value */
+		    globfree(&DirEntry);
+		    return (ToReturn);
+		}
+		free(pszText);
+	    }
+	}
+	globfree(&DirEntry);
+    }
+
+    /* If no new messages were found */
+    return (eNoMoreMessages);
+}
+
+tIBResult       IBGetLen(tIBInfo * pInfo, long *msgnum, INT16 *nBufferLen)
+{
+    tIBResult       ToReturn;
+    glob_t          DirEntry;
+    DWORD           lwCurrentMsgNum;
+    tMessageHeader  MessageHeader;
+    char            szFileName[PATH_CHARS + FILENAME_CHARS + 2];
+    char           *pszText;
+    tFidoNode       ThisNode, OtherNode;
+    //int           n;
+    char	  **ffname;
+
+    /* Validate information structure */
+    ToReturn = ValidateInfoStruct(pInfo);
+    if (ToReturn != eSuccess)
+	return (ToReturn);
+
+    /* Get this node's address from string */
+    ConvertStringToAddress(&ThisNode, pInfo->szThisNodeAddress);
+
+    MakeFilename(pInfo->szNetmailDir, "*.msg", szFileName);
+
+    /* Seach through each message file in the netmail directory, in no */
+    /* particular order.                                               */
+    if (glob(szFileName, 0, NULL, &DirEntry) == 0) {
+	for(ffname=DirEntry.gl_pathv;*fname != NULL;fname++) {
+	    lwCurrentMsgNum = atol(*ffname);
+	    *msgnum = lwCurrentMsgNum;
+
+	    /* If able to read message */
+	    if (ReadMessage(pInfo->szNetmailDir, lwCurrentMsgNum, &MessageHeader,
+			    &pszText)) {
+		ConvertStringToAddress(&OtherNode, &MessageHeader.szToUserName[3]);
+
+		if (stricmp(MessageHeader.szFromUserName, pInfo->szProgName) == 0
+		    && (ThisNode.wZone == OtherNode.wZone || OtherNode.wZone == 0 || ThisNode.wZone == 0)
+		    && ThisNode.wNet == OtherNode.wNet
+		    && ThisNode.wNode == OtherNode.wNode
+		    && ThisNode.wPoint == OtherNode.wPoint
+		    && !(MessageHeader.wAttribute & ATTRIB_RECEIVED)) {
+
+		    /* Decode message text, placing information in buffer */
+		    *nBufferLen = ReadLen(pszText);
+
+		    free(pszText);
+
+		    /* Return appropriate value */
+		    globfree(&DirEntry);
+		    return (ToReturn);
+		}
+		free(pszText);
+	    }
+	}
+	globfree(&DirEntry);
+    }
+
+    /* If no new messages were found */
+    return (eNoMoreMessages);
+}
+
+INT16             IBGetR(tIBInfo * pInfo, char *pBuffer, INT16 nBufferLen, long lwCurrentMsgNum)
+{
+    //tIBResult     ToReturn;
+    //struct ffblk  DirEntry;
+    //DWORD         lwCurrentMsgNum;
+    tMessageHeader  MessageHeader;
+    char            szFileName[PATH_CHARS + FILENAME_CHARS + 2];
+    //char          numstr[FILENAME_CHARS + 2];
+    char           *pszText;
+
+    //tFidoNode ThisNode, OtherNode;
+    //int           n;
+
+    /* Validate information structure */
+    //ToReturn = ValidateInfoStruct(pInfo);
+    //if (ToReturn != eSuccess)	return (ToReturn);
+
+    /* Get this node's address from string */
+    //ConvertStringToAddress(&ThisNode, pInfo->szThisNodeAddress);
+
+    //sprintf(numstr, "%d.msg", msgnum);
+
+    //MakeFilename(pInfo->szNetmailDir, numstr, szFileName);
+
+    /* Seach through each message file in the netmail directory, in no */
+    /* particular order.                                               */
+    //if (fexist(szFileName))
+	//{
+	//printf("@5@");
+	//do
+	    //{
+	    //lwCurrentMsgNum = atol(DirEntry.ff_name);
+
+	    //printf("\n%s\n", DirEntry.ff_name);
+
+	    /* If able to read message */
+	    if (ReadMessage(pInfo->szNetmailDir, lwCurrentMsgNum, &MessageHeader, &pszText)) {
+
+		/*
+		   ConvertStringToAddress(&OtherNode,&MessageHeader.szToUserNa
+		   me[3]);
+		
+		printf("@6@");
+		
+		if(strcmp(MessageHeader.szFromUserName, pInfo->szProgName) ==
+		   0 && (ThisNode.wZone == OtherNode.wZone ||
+		   OtherNode.wZone==0 || ThisNode.wZone==0) && ThisNode.wNet
+		   == OtherNode.wNet && ThisNode.wNode == OtherNode.wNode &&
+		   ThisNode.wPoint == OtherNode.wPoint &&
+		   !(MessageHeader.wAttribute & ATTRIB_RECEIVED)) {
+		   printf("@7@");
+		*/
+		/* Decode message text, placing information in buffer */
+		DecodeBuffer(pszText, pBuffer, nBufferLen, TRUE);
+		//*nBufferLen = DecodeBufferR(pszText, pBuffer);
+
+		/* If received messages should be deleted */
+		if (pInfo->bEraseOnReceive) {
+		    /* Determine filename of message to erase */
+		    GetMessageFilename(pInfo->szNetmailDir, lwCurrentMsgNum, szFileName);
+
+		    /* Attempt to erase file */
+		    if (unlink(szFileName) == -1) {
+			free(pszText);
+			return (FALSE);
+			//ToReturn = eGeneralFailure;
+		    } //
+		    else {
+			//ToReturn = eSuccess;
+			//
+		    }
+		}
+		else {		/* If received messages should not be deleted */
+		    /* if(!pInfo->bEraseOnReceive) */
+		    /* Mark message as read */
+		    MessageHeader.wAttribute |= ATTRIB_RECEIVED;
+		    ++MessageHeader.wTimesRead;
+
+		    /* Attempt to rewrite message */
+		    if (!WriteMessage(pInfo->szNetmailDir, lwCurrentMsgNum, &MessageHeader, pszText)) {
+			free(pszText);
+			return (FALSE);
+			//ToReturn = eGeneralFailure;
+		    } //
+		    else {
+			//ToReturn = eSuccess;
+			//
+		    }
+		}
+
+		/* Deallocate message text buffer */
+		free(pszText);
+
+		/* Return appropriate value */
+		return (TRUE);
+	    }
+	    //free(pszText);
+
+	    //} while (findnext(&DirEntry) == 0);
+	//}
+    //printf("@10@");
+
+    /* If no new messages were found */
+    return (FALSE);
+}
+
+/* refreshes the ib best list according to local best list */
+void            RefreshBest(void)
+{
+    best_rec_type   best_rec;
+    FILE           *justfile;
+
+    /* if best list exists */
+    if (fexist(BESTTEN_FILENAME)) {
+	/* open for reading */
+	justfile = ShareFileOpen(BESTTEN_FILENAME, "rb");
+	while (ny_fread(&best_rec, sizeof(best_rec), 1, justfile) == 1) {
+	    AddBestPlayerInIB(best_rec.name, best_rec.points, IBBSInfo.szThisNodeAddress);
+	}
+	fclose(justfile);
+    }
+}
+
+
+
+INT16             main(INT16 argc, char *argv[])
+{
+    FILE           *justfile, *njustfile;
+    //char          key;
+    //WORD  uintval;
+    char            numstr[26];
+
+    //scr_rec srec;
+    INT16             cnt, x;
+
+    //, intval, x;
+    INT16             n;
+    //struct ffblk  ffblk;
+
+    //scr_rec rec;
+    //date today;
+    //date lastday;
+    //char         *temp;
+
+
+    //don 't believe it' s needed here no opendoors stuff used
+	// strcpy(od_registered_to, "Your Name");
+    //od_registration_key = 00000000000000L;
+
+#ifdef __unix__
+    srandomdev();
+#else
+    randomize();
+#endif
+
+    //od_control.od_disable = DIS_NAME_PROMPT;
+
+/*    directvideo = 0; */
+
+    //strcpy(od_control.od_prog_name, "New York 2008 IBBS MODULE");
+
+    //od_control.od_config_function = CustomConfigFunction;
+
+    //od_control.od_mps = INCLUDE_MPS;
+    //od_control.od_nocopyright = TRUE;
+    //od_control.od_help_text2 = (char *)"  New York 2008 v0.01 WIDE BETA 3 (c) Copyright 1995 George Lebl               ";
+
+    /*
+       od_control.od_cbefore_chat=ny_chat; //
+       od_control.od_cafter_chat=scr_res;
+       od_control.od_cbefore_shell=scr_save;
+       od_control.od_cafter_shell=scr_res;
+    */
+
+
+    if (fexist(CFG_FILENAME)) {
+	//printf("&|%s|&", bbs_namei);
+	IBReadConfig(&IBBSInfo, CFG_FILENAME);
+	//printf("&|%s|&", bbs_namei);
+    }
+
+    //printf("|%s|", bbs_namei);
+
+
+    cnt = 1;
+    if (argc > 1) {
+	do {
+	    if (strnicmp(argv[cnt], "-IBBSI", 6) == 0) {
+		ibbs_maint_i = TRUE;
+	    }
+	    else if (strnicmp(argv[cnt], "-IBBSO", 6) == 0) {
+		ibbs_maint_o = TRUE;
+	    }
+	    else if (strnicmp(argv[cnt], "-SENDNODELIST", 13) == 0) {
+		ibbs_send_nodelist = TRUE;
+	    }
+	    else if (strnicmp(argv[cnt], "-C", 2) == 0) {
+		if (fexist(&argv[cnt][2]))
+		    IBReadConfig(&IBBSInfo, &argv[cnt][2]);
+
+		//strzcpy(od_control.od_config_filename, argv[cnt], 2, 59);
+		//od_control.od_config_file = INCLUDE_CONFIG_FILE;
+	    }
+	} while ((++cnt) < argc);
+    }
+
+    //od_control.od_force_local = TRUE;
+    //od_init();
+
+    //if (no_slices == FALSE)
+	//od_control.od_ker_exec = time_slice;
+    //    else
+	//od_control.od_ker_exec = NULL;
+
+    //if (od_control.user_screen_length < 2)
+	//od_control.user_screen_length = 24;
+
+    //od_control.od_help_text2 = (char *)"  New York 2008 v0.10 InterBBS Module (c) 1996 George Lebl                    ";
+
+    char           *InComing;
+    char           *OutGoing;
+    INT16             found = FALSE;
+
+    //ibbs_bbs_rec_type ibbest;
+    ibbs_bbs_spy_rec bbs_spy_rec;
+    ibbs_mail_type  ibmail;
+    user_rec        urec_i;
+    ibbs_bbs_rec    bbs_rec;
+    ibbs_scr_rec    ibscr_rec;
+    FILE           *jfile;
+    ibbs_scr_rec    ibscr_rec2;
+    best_rec_type   best_rec;
+    ibbs_act_rec    act_rec;
+    ibbs_scr_spy_rec scr_spy_rec;
+    INT16             pack_spy = FALSE;
+    INT32            msgnum;
+    INT16             bufferlen;
+
+    /*
+       //  if (fexist(KEY_FILENAME)) { strcpy(numstr,bbs_namei); //
+       printf("|%s|",bbs_namei); get_bbsname(numstr); //
+       printf("|%s|",numstr); if(seereg(numstr)==FALSE) {
+       printf("\nUNREGISTERED... InterBBS DISABLED!!\n"); exit(10); }
+    */
+
+    /*
+       } else { printf("\nUNREGISTERED... InterBBS DISABLED!!\n"); exit(10);
+       }
+    */
+
+    if (ibbsi == TRUE) {
+	//ch_game_d();
+	INT16             xx;
+
+	strcpy(IBBSInfo.szThisNodeAddress, "0:000/000");
+	sprintf(IBBSInfo.szProgName, "#@NYG#%05d IBBS", ibbsi_game_num);
+	strcpy(IBBSInfo.szNetmailDir, "C:/FD/NETMAIL");
+	IBBSInfo.bCrash = FALSE;
+	IBBSInfo.bHold = FALSE;
+	IBBSInfo.bEraseOnSend = TRUE;
+	IBBSInfo.bEraseOnReceive = TRUE;
+	IBBSInfo.nTotalSystems = 0;
+	IBBSInfo.paOtherSystem = NULL;
+	IBReadConfig(&IBBSInfo, "INTERBBS.CFG");
+	IBReadConfig(&IBBSInfo, NODELIST_FILENAME);
+
+
+	char            szDirFileName[PATH_CHARS + 1];
+
+	if (IBBSInfo.szNetmailDir == NULL || strlen(IBBSInfo.szNetmailDir) > PATH_CHARS) {
+	    printf("\n\nNETMAIL DIR NOT FOUND\n\n");
+	    exit(10);
+	}
+
+	//assert(IBBSInfo.szNetmailDir != NULL);
+	//assert(strlen(IBBSInfo.szNetmailDir) <= PATH_CHARS);
+
+	strcpy(szDirFileName, IBBSInfo.szNetmailDir);
+
+	//Remove any trailing backslash from directory name
+	    if (szDirFileName[strlen(szDirFileName) - 1] == '\\')
+	    szDirFileName[strlen(szDirFileName) - 1] = '\0';
+
+
+	//Return true iff file exists and it is a directory
+	    if (!fexist(szDirFileName) || !isdir(szDirFileName)) {
+	    printf("\n\nNETMAIL DIR NOT FOUND\n\n");
+	    exit(10);
+	}
+
+	if (IBBSInfo.nTotalSystems > 255)
+	    IBBSInfo.nTotalSystems = 255;
+
+	if (ibbs_maint_i) {
+	    printf("\n##> Getting InterBBS Mail\n");
+	    sprintf(IBBSInfo.szProgName, "#@NYG#%05d MAIL", ibbsi_game_num);
+
+	    justfile = ShareFileOpen(IBBS_MAIL_INDEX, "a+b");
+	    //while (IBGet(&IBBSInfo, &ibmail, sizeof(ibbs_mail_type)) == eSuccess) {
+
+		/*
+		   for(x=0;x<(sizeof(ibbs_mail_type));x++) (((char
+		   *)&ibmail)+x)=0;
+		*/
+		while (IBGetMail(&IBBSInfo, &ibmail) == eSuccess) {
+
+		    /*
+		       printf(">>>(%s|",ibmail.sender);
+		       printf("%s|",ibmail.senderI);
+		       printf("%s|",ibmail.node_s);
+		       printf("%s|",ibmail.node_r);
+		       printf("%s|",ibmail.recver);
+		       printf("%s)<<<\n\n",ibmail.recverI);
+		    */
+
+		    if (strcmp(ibmail.node_r, IBBSInfo.szThisNodeAddress) == 0)
+			ny_fwrite(&ibmail, sizeof(ibbs_mail_type), 1, justfile);
+		}
+		fclose(justfile);
+	    }
+
+	    if (ibbs_send_nodelist && ibbsi_operator) {
+		//od_control.od_status_on = FALSE;
+		//od_set_statusline(STATUS_NONE);
+		printf("\n##> Sending Node List\n");
+		sprintf(IBBSInfo.szProgName, "#@NYG#%05d NODELIST", ibbsi_game_num);
+		//if (IBBSInfo.nTotalSystems <= 20)
+		    OutGoing = (char *)malloc(sizeof(tOtherNode) * IBBSInfo.nTotalSystems + 1);
+		*OutGoing = (char)IBBSInfo.nTotalSystems;
+		memcpy(OutGoing + 1, (char *)IBBSInfo.paOtherSystem, sizeof(tOtherNode) * IBBSInfo.nTotalSystems);
+		if (IBSendAll(&IBBSInfo, OutGoing, sizeof(tOtherNode) * IBBSInfo.nTotalSystems + 1) != eSuccess) {
+		    printf("\n\nINTERBBS ERROR:Can't send the NODELIST!!!\n\n");
+		    sleep(4);
+		}
+
+		free(OutGoing);
+	    }
+	    if (ibbs_maint_i) {
+		//od_control.od_status_on = FALSE;
+		//od_set_statusline(STATUS_NONE);
+		printf("\n##> Refreshing Local Best List (if there is one)\n");
+
+		RefreshBest();
+
+		printf("\n##> Processing Incoming Information\n");
+
+		if (ibbsi_operator == FALSE) {
+		    sprintf(IBBSInfo.szProgName, "#@NYG#%05d NODELIST", ibbsi_game_num);
+		    InComing = (char *)malloc(sizeof(tOtherNode) * 258);
+		    if (InComing == NULL) {
+			printf("\n\nINTERBBS ERROR:Not Enough Memory to process!\n");
+			sleep(4);
+			exit(12);
+		    }
+		    while (IBGet(&IBBSInfo, InComing, sizeof(tOtherNode) * 258) == eSuccess) {
+			IBBSInfo.nTotalSystems = *InComing;
+			InComing++;
+			free(IBBSInfo.paOtherSystem);
+			IBBSInfo.paOtherSystem = (tOtherNode *) malloc(sizeof(tOtherNode) * IBBSInfo.nTotalSystems);
+			memcpy((char *)IBBSInfo.paOtherSystem, InComing, sizeof(tOtherNode) * IBBSInfo.nTotalSystems);
+			//free(InComing);
+			justfile = ShareFileOpenAR(NODELIST_FILENAME, "wt");
+			fprintf(justfile, ";Only the central system operator should change this node list!\n");
+			for (x = 0; x < IBBSInfo.nTotalSystems; x++) {
+			    fprintf(justfile, "LinkWith        %s\n", ((tOtherNode *) InComing)[x].szAddress);
+			    fprintf(justfile, "LinkName        %s\n", ((tOtherNode *) InComing)[x].szSystemName);
+			    fprintf(justfile, "LinkLocation    %s\n\n", ((tOtherNode *) InComing)[x].szLocation);
+			}
+			fclose(justfile);
+			InComing--;
+		    }
+		    free(InComing);
+		}
+		//od_printf("1");
+		//od_get_answer("1");
+
+		sprintf(IBBSInfo.szProgName, "#@NYG#%05d LISTREQ", ibbsi_game_num);
+
+		InComing = (char *)malloc(NODE_ADDRESS_CHARS + 1);
+
+		while (IBGet(&IBBSInfo, InComing, NODE_ADDRESS_CHARS + 1) == eSuccess) {
+		    if (strcmp(InComing, IBBSInfo.szThisNodeAddress) != 0) {
+			sprintf(IBBSInfo.szProgName, "#@NYG#%05d NAMELIST", ibbsi_game_num);
+			justfile = ShareFileOpen(USER_FILENAME, "rb");
+			cnt = filelength(fileno(justfile)) / sizeof(user_rec);
+			OutGoing = (char *)malloc(((25 + 36 + 1) * cnt) + NODE_ADDRESS_CHARS + 4);
+			OutGoing += 2;
+			x = 0;
+			while (ny_fread(&urec_i, sizeof(user_rec), 1, justfile) == 1) {
+			    strcpy(OutGoing + 1 + ((25 + 36 + 1) * x), urec_i.name);
+			    strcpy(OutGoing + 1 + ((25 + 36 + 1) * x) + 25, urec_i.bbsname);
+			    *(OutGoing + (25 + 36 + 1) * (x + 1)) = (char)urec_i.sex;
+			    x++;
+			}
+			strcpy(OutGoing + 1 + ((25 + 36 + 1) * cnt), IBBSInfo.szThisNodeAddress);
+			if (x > 0) {
+			    *OutGoing = cnt;
+			    OutGoing -= 2;
+			    *(INT16 *)OutGoing = ((25 + 36 + 1) * cnt) + NODE_ADDRESS_CHARS + 2;
+			    IBSend(&IBBSInfo, InComing, OutGoing, ((25 + 36 + 1) * cnt) + NODE_ADDRESS_CHARS + 4);
+			}
+			else {
+			    OutGoing -= 2;
+			}
+			fclose(justfile);
+			free(OutGoing);
+			sprintf(IBBSInfo.szProgName, "#@NYG#%05d LISTREQ", ibbsi_game_num);
+		    }
+		}
+		free(InComing);
+		//free(OutGoing);
+
+		//od_printf("2");
+		//od_get_answer("1");
+
+		sprintf(IBBSInfo.szProgName, "#@NYG#%05d NEWS", ibbsi_game_num);
+
+		newzfile_t newzfile;
+
+		while (IBGet(&IBBSInfo, (char *)&newzfile, sizeof(newzfile)) == eSuccess) {
+		    //ch_game_d();
+		    justfile = ShareFileOpen(TODNEWS_FILENAME, "a+b");
+		    ny_fwrite(&newzfile, sizeof(newzfile), 1, justfile);
+		    fclose(justfile);
+		}
+
+		sprintf(IBBSInfo.szProgName, "#@NYG#%05d BBSINFO", ibbsi_game_num);
+
+		//od_printf("1");
+		//od_get_answer("1");
+		while (IBGet(&IBBSInfo, (char *)&bbs_rec, sizeof(bbs_rec)) == eSuccess) {
+		    //od_printf("2");
+		    //od_get_answer("1");
+		    justfile = ShareFileOpen(IBBSSPY_FILENAME, "r+b");
+		    //fseek(justfile, 0, SEEK_SET);
+		    if (justfile == NULL) {
+			justfile = ShareFileOpen(IBBSSPY_FILENAME, "wb");
+			bbs_spy_rec.player_list = 0;
+			bbs_spy_rec.players = 0;
+			strcpy(bbs_spy_rec.node, bbs_rec.node);
+			bbs_spy_rec.hi_points = bbs_rec.hi_points;
+			ny_fwrite(&bbs_spy_rec, sizeof(ibbs_bbs_spy_rec), 1, justfile);
+			fclose(justfile);
+		    }
+		    else {
+			xx = 0;
+			found = FALSE;
+			while (ny_fread(&bbs_spy_rec, sizeof(ibbs_bbs_spy_rec), 1, justfile) == 1) {
+			    if (strcmp(bbs_rec.node, bbs_spy_rec.node) == 0) {
+				bbs_spy_rec.hi_points = bbs_rec.hi_points;
+				fseek(justfile, (INT32)xx * sizeof(ibbs_bbs_spy_rec), SEEK_SET);
+				ny_fwrite(&bbs_spy_rec, sizeof(ibbs_bbs_spy_rec), 1, justfile);
+				found = TRUE;
+				break;
+			    }
+			    xx++;
+			    fseek(justfile, (INT32)xx * sizeof(ibbs_bbs_spy_rec), SEEK_SET);
+			}
+			fclose(justfile);
+			//od_printf("3");
+			//od_get_answer("1");
+			if (found == FALSE) {
+			    justfile = ShareFileOpen(IBBSSPY_FILENAME, "ab");
+			    bbs_spy_rec.player_list = 0;
+			    bbs_spy_rec.players = 0;
+			    strcpy(bbs_spy_rec.node, bbs_rec.node);
+			    bbs_spy_rec.hi_points = bbs_rec.hi_points;
+			    ny_fwrite(&bbs_spy_rec, sizeof(ibbs_bbs_spy_rec), 1, justfile);
+			    fclose(justfile);
+			}
+		    }
+		}
+		//od_printf("4");
+		//od_get_answer("1");
+
+		sprintf(IBBSInfo.szProgName, "#@NYG#%05d NAMELIST", ibbsi_game_num);
+
+		//InComing = (char *)malloc(((25 + 36 + 1) * 10) + NODE_ADDRESS_CHARS + 2);
+
+		while (IBGetLen(&IBBSInfo, &msgnum, &bufferlen) == eSuccess) {
+		    InComing = (char *)malloc(bufferlen);
+		    IBGetR(&IBBSInfo, InComing, bufferlen, msgnum);
+
+		    cnt = *InComing;
+
+		    //printf("\nPlayers in the list: |%d|\n", cnt);
+		    //od_get_answer("1");
+		    justfile = ShareFileOpen(IBBSSPY_FILENAME, "r+b");
+		    //fseek(justfile, 0, SEEK_SET);
+		    //printf("3");
+		    xx = 0;
+		    //printf("4");
+
+		    //printf("\n*|N#%s|\n", InComing + 1);
+		    //+((25 + 36 + 1) * cnt));
+		    //printf("*|N#%s|\n", InComing + 26);
+		    //+((25 + 36 + 1) * (cnt - 1)));
+		    //od_get_answer("1");
+
+		    while (ny_fread(&bbs_spy_rec, sizeof(ibbs_bbs_spy_rec), 1, justfile) == 1) {
+			//printf("5");
+			if (strcmp(InComing + 1 + ((25 + 36 + 1) * cnt), bbs_spy_rec.node) == 0) {
+			    //printf("6");
+			    if (bbs_spy_rec.player_list != 0) {
+				//printf("7");
+				sprintf(numstr, SBYDBT_PREFIX".%03d", bbs_spy_rec.player_list);
+				njustfile = ShareFileOpen(numstr, "wb");
+				for (x = 0; x < cnt; x++) {
+				    strcpy(ibscr_rec.name, InComing + 1 + ((25 + 36 + 1) * x));
+				    strcpy(ibscr_rec.nameI, InComing + 1 + ((25 + 36 + 1) * x) + 25);
+				    ibscr_rec.sex = *(sex_type *) (InComing + (25 + 36 + 1) * (x + 1));
+				    //printf("\n+|%s|%s|%d|\n", ibscr_rec.name, ibscr_rec.nameI, (INT16)ibscr_rec.sex);
+				    //od_get_answer("1");
+
+				    ibscr_rec.level = -1;
+				    ny_fwrite(&ibscr_rec, sizeof(ibbs_scr_rec), 1, njustfile);
+				}
+				//printf("8");
+				fclose(njustfile);
+				//printf("9");
+			    }
+			    else {
+				bbs_spy_rec.player_list = 0;
+				do {
+				    bbs_spy_rec.player_list++;
+				    sprintf(numstr, SBYDB_PREFIX".%03d", bbs_spy_rec.player_list);
+				} while (fexist(numstr));
+				njustfile = ShareFileOpen(numstr, "wb");
+				fclose(njustfile);
+				sprintf(numstr, SBYDBT_PREFIX".%03d", bbs_spy_rec.player_list);
+				njustfile = ShareFileOpen(numstr, "wb");
+				for (x = 0; x < *InComing; x++) {
+				    strcpy(ibscr_rec.name, InComing + 1 + ((25 + 36 + 1) * x));
+				    strcpy(ibscr_rec.nameI, InComing + 1 + ((25 + 36 + 1) * x) + 25);
+				    ibscr_rec.level = -1;
+				    ibscr_rec.sex = *(sex_type *) (InComing + (25 + 36 + 1) * (x + 1));
+				    //od_printf("++|%s|%s|%d|", ibscr_rec.name, ibscr_rec.nameI, (INT16)ibscr_rec.sex);
+				    //od_get_answer("1");
+
+				    ny_fwrite(&ibscr_rec, sizeof(ibbs_scr_rec), 1, njustfile);
+				}
+				//printf("A");
+				fclose(njustfile);
+				//printf("B");
+				fseek(justfile, (INT32)xx * sizeof(ibbs_bbs_spy_rec), SEEK_SET);
+				//printf("C");
+				ny_fwrite(&bbs_spy_rec, sizeof(ibbs_bbs_spy_rec), 1, justfile);
+			    }
+			    break;
+			}
+			xx++;
+			fseek(justfile, (INT32)xx * sizeof(ibbs_bbs_spy_rec), SEEK_SET);
+			//printf("D");
+		    }
+		    fclose(justfile);
+		    //printf("E");
+		    free(InComing);
+		    //printf("\nKKK\n");
+		    //printf("F");
+		}
+		//free(InComing);
+		//printf("G");
+
+
+		//od_printf("6");
+		//od_get_answer("1");
+		//printf("H");
+
+		if(glob(SBYDBT_PREFIX".*", 0, NULL, &ff)==0) {
+			for(fname=ff.gl_pathv;*fname!=NULL;fname++) {
+			    //printf("I");
+
+			    sscanf(*fname, SBYDBT_PREFIX".%d", &cnt);
+			    sprintf(numstr, SBYDB_PREFIX".%03d", cnt);
+			    copyfile(numstr, SBYDB_PREFIX""TEMP_EXTENSION);
+			    ny_remove(numstr);
+
+			    //printf("J");
+			    jfile = ShareFileOpen(*fname, "rb");
+			    //printf("K");
+
+			    while (ny_fread(&ibscr_rec, sizeof(ibbs_scr_rec), 1, jfile) == 1) {
+				//printf("L");
+
+				njustfile = ShareFileOpen(SBYDB_PREFIX""TEMP_EXTENSION, "r+b");
+				justfile = ShareFileOpen(numstr, "a+b");
+				found = FALSE;
+				//printf("M");
+				x = 0;
+
+				while (ny_fread(&ibscr_rec2, sizeof(ibbs_scr_rec), 1, njustfile) == 1) {
+
+				    //printf("N");
+				    if (strcmp(ibscr_rec.nameI, ibscr_rec2.nameI) == 0) {
+					if (ibscr_rec2.level != -66) {
+					    strcpy(ibscr_rec2.name, ibscr_rec.name);
+					    ibscr_rec2.sex = ibscr_rec.sex;
+					    ny_fwrite(&ibscr_rec, sizeof(ibbs_scr_rec), 1, justfile);
+					    fseek(njustfile, (INT32)x * sizeof(ibbs_scr_rec), SEEK_SET);
+					    ibscr_rec2.level = -66;
+					    ny_fwrite(&ibscr_rec2, sizeof(ibbs_scr_rec), 1, njustfile);
+					}
+					found = TRUE;
+					break;
+				    }
+				    //printf("O");
+				    x++;
+				    fseek(njustfile, (INT32)x * sizeof(ibbs_scr_rec), SEEK_SET);
+				}
+				//printf("P");
+				if (found == FALSE)
+				    ny_fwrite(&ibscr_rec, sizeof(ibbs_scr_rec), 1, justfile);
+				fclose(njustfile);
+				fclose(justfile);
+
+				//printf("Q");
+
+			    }
+			    //printf("R");
+			    fclose(jfile);
+
+			    ny_remove(*fname);
+			    ny_remove(SBYDB_PREFIX""TEMP_EXTENSION);
+			    //printf("S");
+			    justfile = ShareFileOpen(IBBSSPY_FILENAME, "r+b");
+			    //fseek(justfile, 0, SEEK_SET);
+			    xx = 0;
+			    while (ny_fread(&bbs_spy_rec, sizeof(ibbs_bbs_spy_rec), 1, justfile) == 1) {
+				if (bbs_spy_rec.player_list == cnt && cnt != 0) {
+				    sprintf(numstr, SBYDB_PREFIX".%03d", bbs_spy_rec.player_list);
+				    njustfile = ShareFileOpen(numstr, "rb");
+				    bbs_spy_rec.players = filelength(fileno(njustfile)) / sizeof(ibbs_scr_rec);
+				    fclose(njustfile);
+
+				    fseek(justfile, (INT32)xx * sizeof(ibbs_bbs_spy_rec), SEEK_SET);
+				    ny_fwrite(&bbs_spy_rec, sizeof(ibbs_bbs_spy_rec), 1, justfile);
+				    break;
+				}
+				xx++;
+				fseek(justfile, (INT32)xx * sizeof(ibbs_bbs_spy_rec), SEEK_SET);
+			    }
+			    fclose(justfile);
+			    //printf("T");
+			}
+			globfree(&ff);
+		}
+		//printf("U");
+
+		//od_printf("7");
+		//od_get_answer("1");
+
+		sprintf(IBBSInfo.szProgName, "#@NYG#%05d TENBEST", ibbsi_game_num);
+		//free(InComing);
+		InComing = (char *)malloc(NODE_ADDRESS_CHARS + 2 + (10 * sizeof(bbs_rec)));
+		while (IBGet(&IBBSInfo, InComing, NODE_ADDRESS_CHARS + 2 + (10 * sizeof(bbs_rec))) == eSuccess) {
+		    x = *InComing;
+		    //OutGoing++;
+		    //strcpy(OutGoing, IBBSInfo.szThisNodeAddress);
+		    //od_printf("A");
+		    //od_get_answer("1");
+
+
+
+		    InComing += NODE_ADDRESS_CHARS + 2;
+		    for (cnt = 0; cnt < x; cnt++) {
+			//od_printf("B");
+			//od_get_answer("1");
+			//printf("???%s???%ld???\n", ((best_rec_type *) (InComing + (cnt * sizeof(best_rec))))->name, ((best_rec_type *) (InComing + (cnt * sizeof(best_rec))))->points);
+			AddBestPlayerInIB(((best_rec_type *) (InComing + (cnt * sizeof(best_rec))))->name, ((best_rec_type *) (InComing + (cnt * sizeof(best_rec))))->points, InComing - NODE_ADDRESS_CHARS - 1);
+		    }
+		    //od_printf("C");
+		    //od_get_answer("1");
+
+		    InComing -= NODE_ADDRESS_CHARS + 2;
+		}
+		free(InComing);
+
+		sprintf(IBBSInfo.szProgName, "#@NYG#%05d ACTIONS", ibbsi_game_num);
+
+		//od_printf("8");
+		//od_get_answer("1");
+
+		while (IBGet(&IBBSInfo, (char *)&act_rec, sizeof(ibbs_act_rec)) == eSuccess) {
+		    if (act_rec.action == 0) {
+			justfile = ShareFileOpen(IBBSSPY_FILENAME, "rb");
+			if (justfile != NULL) {
+			    while (ny_fread(&bbs_spy_rec, sizeof(ibbs_bbs_spy_rec), 1, justfile) == 1) {
+				if (strcmp(bbs_spy_rec.node, act_rec.node_s) == 0) {
+				    if (bbs_spy_rec.player_list == 0) {
+					if (strcmp(act_rec.node_s, IBBSInfo.szThisNodeAddress) != 0) {
+					    sprintf(IBBSInfo.szProgName, "#@NYG#%05d LISTREQ", ibbsi_game_num);
+					    IBSend(&IBBSInfo, act_rec.node_s, IBBSInfo.szThisNodeAddress, NODE_ADDRESS_CHARS + 1);
+					    sprintf(IBBSInfo.szProgName, "#@NYG#%05d ACTIONS", ibbsi_game_num);
+					}
+					break;
+				    }
+				    else {
+					sprintf(numstr, SBYDB_PREFIX".%03d", bbs_spy_rec.player_list);
+					fclose(justfile);
+					justfile = ShareFileOpen(numstr, "r+b");
+					x = 0;
+					while (ny_fread(&ibscr_rec, sizeof(ibbs_scr_rec), 1, justfile) == 1) {
+					    if (strcmp(ibscr_rec.nameI, act_rec.name_sI) == 0) {
+						strcpy(ibscr_rec.name, act_rec.name_s);
+						fseek(justfile, (INT32)x * sizeof(ibbs_scr_rec), SEEK_SET);
+						ny_fwrite(&ibscr_rec, sizeof(ibbs_scr_rec), 1, justfile);
+						break;
+					    }
+					    x++;
+					    fseek(justfile, (INT32)x * sizeof(ibbs_scr_rec), SEEK_SET);
+					}
+					break;
+
+				    }
+				}
+			    }
+			    fclose(justfile);
+			}
+			else {
+			    if (strcmp(act_rec.node_s, IBBSInfo.szThisNodeAddress) != 0) {
+				sprintf(IBBSInfo.szProgName, "#@NYG#%05d LISTREQ", ibbsi_game_num);
+				IBSend(&IBBSInfo, act_rec.node_s, IBBSInfo.szThisNodeAddress, NODE_ADDRESS_CHARS + 1);
+				sprintf(IBBSInfo.szProgName, "#@NYG#%05d ACTIONS", ibbsi_game_num);
+			    }
+			}
+		    }
+		    else if (act_rec.action == 1) {
+			justfile = ShareFileOpen(USER_FILENAME, "rb");
+			scr_spy_rec.nameI[0] = 0;
+			while (ny_fread(&urec_i, sizeof(user_rec), 1, justfile) == 1) {
+			    if (strcmp(urec_i.bbsname, act_rec.name_rI) == 0) {
+				strcpy(scr_spy_rec.name, urec_i.name);
+				strcpy(scr_spy_rec.nameI, urec_i.bbsname);
+				scr_spy_rec.nation = urec_i.nation;
+				scr_spy_rec.level = urec_i.level;
+				scr_spy_rec.points = urec_i.points;
+				scr_spy_rec.sex = urec_i.sex;
+				strcpy(scr_spy_rec.node, IBBSInfo.szThisNodeAddress);
+				break;
+			    }
+			}
+			fclose(justfile);
+			if (scr_spy_rec.nameI[0] != 0) {
+			    sprintf(IBBSInfo.szProgName, "#@NYG#%05d SPYINFO", ibbsi_game_num);
+			    IBSend(&IBBSInfo, act_rec.node_s, (char *)&scr_spy_rec, sizeof(ibbs_scr_spy_rec));
+			    sprintf(IBBSInfo.szProgName, "#@NYG#%05d ACTIONS", ibbsi_game_num);
+			}
+		    }
+		}
+
+		//od_printf("9");
+		//od_get_answer("1");
+
+		sprintf(IBBSInfo.szProgName, "#@NYG#%05d SPYINFO", ibbsi_game_num);
+		while (IBGet(&IBBSInfo, (char *)&scr_spy_rec, sizeof(ibbs_scr_spy_rec)) == eSuccess) {
+		    //od_printf("*");
+		    //od_get_answer("1");
+
+		    justfile = ShareFileOpen(IBBSSPY_FILENAME, "rb");
+		    if (justfile != NULL) {
+			while (ny_fread(&bbs_spy_rec, sizeof(ibbs_bbs_spy_rec), 1, justfile) == 1) {
+			    if (strcmp(bbs_spy_rec.node, scr_spy_rec.node) == 0 && bbs_spy_rec.player_list != 0) {
+				sprintf(numstr, SBYDB_PREFIX".%03d", bbs_spy_rec.player_list);
+				fclose(justfile);
+				justfile = ShareFileOpen(numstr, "r+b");
+				x = 0;
+				while (ny_fread(&ibscr_rec, sizeof(ibbs_scr_rec), 1, justfile) == 1) {
+				    if (strcmp(ibscr_rec.nameI, scr_spy_rec.nameI) == 0) {
+					strcpy(ibscr_rec.name, scr_spy_rec.name);
+					ibscr_rec.nation = scr_spy_rec.nation;
+					ibscr_rec.level = scr_spy_rec.level;
+					ibscr_rec.points = scr_spy_rec.points;
+					ibscr_rec.sex = scr_spy_rec.sex;
+					fseek(justfile, (INT32)x * sizeof(ibbs_scr_rec), SEEK_SET);
+					ny_fwrite(&ibscr_rec, sizeof(ibbs_scr_rec), 1, justfile);
+					break;
+				    }
+				    x++;
+				    fseek(justfile, (INT32)x * sizeof(ibbs_scr_rec), SEEK_SET);
+				}
+				break;
+			    }
+			}
+			fclose(justfile);
+		    }
+		}
+		//printf("~~~");
+		//od_printf("10");
+		//od_get_answer("1");
+	    }
+	    if (ibbs_maint_o) {
+		//od_control.od_status_on = FALSE;
+		//od_set_statusline(STATUS_NONE);
+		printf("\n##> Processing Outgoing Information\n");
+
+		sprintf(IBBSInfo.szProgName, "#@NYG#%05d BBSINFO", ibbsi_game_num);
+		strcpy(bbs_rec.node, IBBSInfo.szThisNodeAddress);
+
+		justfile = ShareFileOpen(USER_FILENAME, "rb");
+		bbs_rec.hi_points = 0;
+		cnt = 0;
+		while (ny_fread(&urec_i, sizeof(user_rec), 1, justfile) == 1) {
+		    if (urec_i.points > bbs_rec.hi_points)
+			bbs_rec.hi_points = urec_i.points;
+		}
+		fclose(justfile);
+
+		if (IBSendAll(&IBBSInfo, (char *)&bbs_rec, sizeof(ibbs_bbs_rec)) != eSuccess) {
+		    printf("\n\nINTERBBS ERROR:Can't send the BBSINFO!!!\n\n");
+		    sleep(4);
+		}
+
+		if (!fexist(SENTLIST_FILENAME)) {
+		    //OutGoing = (char *)malloc(((25 + 36) * 10) + NODE_ADDRESS_CHARS + 2);
+
+		    sprintf(IBBSInfo.szProgName, "#@NYG#%05d NAMELIST", ibbsi_game_num);
+		    justfile = ShareFileOpen(USER_FILENAME, "rb");
+		    cnt = filelength(fileno(justfile)) / sizeof(user_rec);
+		    //printf("\n& Len of file: %ld  len of user_rec : %ld", (INT32)filelength(fileno(justfile)), (INT32)sizeof(user_rec));
+		    OutGoing = (char *)malloc(((25 + 36 + 1) * cnt) + NODE_ADDRESS_CHARS + 4);
+		    OutGoing += 2;
+		    x = 0;
+		    //strcpy(OutGoing + 1 + ((25 + 36 + 1) * cnt), IBBSInfo.szThisNodeAddress);
+		    while (ny_fread(&urec_i, sizeof(user_rec), 1, justfile) == 1) {
+			strcpy((OutGoing + 1 + ((25 + 36 + 1) * x)), urec_i.name);
+			//printf("\n[%d] - {%s} - |%s|", x, (OutGoing + 1 + ((25 + 36 + 1) * x)), urec_i.name);
+			strcpy(OutGoing + 1 + ((25 + 36 + 1) * x) + 25, urec_i.bbsname);
+			//printf("\n[%d] - {%s} - |%s|", x, (OutGoing + 1 + ((25 + 36 + 1) * x) + 25), urec_i.bbsname);
+			*(OutGoing + (25 + 36 + 1) * (x + 1)) = (char)urec_i.sex;
+			//printf("\n[%d] - {%s} - |%s|", x, (OutGoing + 1 + ((25 + 36 + 1) * x)), urec_i.name);
+			x++;
+		    }
+		    strcpy(OutGoing + 1 + ((25 + 36 + 1) * cnt), IBBSInfo.szThisNodeAddress);
+		    if (x > 0) {
+			*OutGoing = cnt;
+			//printf("\nPlayers on the list: {%d}\n", cnt);
+			OutGoing -= 2;
+			*(INT16 *)OutGoing = ((25 + 36 + 1) * cnt) + NODE_ADDRESS_CHARS + 2;
+			IBSendAll(&IBBSInfo, OutGoing, ((25 + 36 + 1) * cnt) + NODE_ADDRESS_CHARS + 4);
+		    }
+		    else {
+			OutGoing -= 2;
+		    }
+		    fclose(justfile);
+		    free(OutGoing);
+		    justfile = ShareFileOpen(SENTLIST_FILENAME, "wb");
+		    fclose(justfile);
+		}
+
+		if (!fexist(SENTBESTTEN_FILENAME)) {
+		    justfile = ShareFileOpen(BESTTEN_FILENAME, "rb");
+		    if (justfile != NULL) {
+			//best_rec_type best_rec;
+
+			sprintf(IBBSInfo.szProgName, "#@NYG#%05d TENBEST", ibbsi_game_num);
+			OutGoing = (char *)malloc(NODE_ADDRESS_CHARS + 2 + (10 * sizeof(best_rec)));
+			OutGoing++;
+			strcpy(OutGoing, IBBSInfo.szThisNodeAddress);
+			OutGoing += NODE_ADDRESS_CHARS + 1;
+			x = 0;
+			while (ny_fread(&best_rec, sizeof(best_rec), 1, justfile) == 1) {
+			    memcpy((OutGoing + (x * sizeof(best_rec))), &best_rec, sizeof(best_rec));
+			    x++;
+			}
+			fclose(justfile);
+			OutGoing -= NODE_ADDRESS_CHARS + 2;
+			*OutGoing = (char)x;
+			if (IBSendAll(&IBBSInfo, OutGoing, NODE_ADDRESS_CHARS + 2 + (10 * sizeof(best_rec))) != eSuccess) {
+			    printf("\n\nINTERBBS ERROR:Can't send the TEN BEST LIST!!!\n\n");
+			    sleep(4);
+			}
+			free(OutGoing);
+			justfile = ShareFileOpen(SENTBESTTEN_FILENAME, "wb");
+			fclose(justfile);
+		    }
+		}
+		sprintf(IBBSInfo.szProgName, "#@NYG#%05d LISTREQ", ibbsi_game_num);
+
+		if (!fexist(IBBSSPY_FILENAME)) {
+		    IBSendAll(&IBBSInfo, IBBSInfo.szThisNodeAddress, NODE_ADDRESS_CHARS + 1);
+		    justfile = ShareFileOpen(IBBSSPY_FILENAME, "wb");
+		    for (x = 0; x < IBBSInfo.nTotalSystems; x++) {
+			if (strcmp(IBBSInfo.paOtherSystem[x].szAddress, IBBSInfo.szThisNodeAddress) != 0) {
+			    strcpy(bbs_spy_rec.node, IBBSInfo.paOtherSystem[x].szAddress);
+			    bbs_spy_rec.hi_points = 0;
+			    bbs_spy_rec.players = 0;
+			    bbs_spy_rec.player_list = 0;
+			    ny_fwrite(&bbs_spy_rec, sizeof(ibbs_bbs_spy_rec), 1, justfile);
+			}
+		    }
+		    fclose(justfile);
+		}
+		else {
+		    justfile = ShareFileOpen(IBBSSPY_FILENAME, "r+b");
+		    //fseek(justfile, 0, SEEK_SET);
+
+		    pack_spy = FALSE;
+		    xx = 0;
+		    while (ny_fread(&bbs_spy_rec, sizeof(ibbs_bbs_spy_rec), 1, justfile) == 1) {
+			found = FALSE;
+			for (x = 0; x < IBBSInfo.nTotalSystems; x++) {
+			    if (strcmp(IBBSInfo.paOtherSystem[x].szAddress, bbs_spy_rec.node) == 0) {
+				found = TRUE;
+				break;
+			    }
+			}
+			if (found == FALSE) {
+			    bbs_spy_rec.node[0] = 0;
+			    fseek(justfile, (INT32)xx * sizeof(ibbs_bbs_spy_rec), SEEK_SET);
+			    ny_fwrite(&bbs_spy_rec, sizeof(ibbs_bbs_spy_rec), 1, justfile);
+
+			    pack_spy = TRUE;
+			}
+			xx++;
+			fseek(justfile, (INT32)xx * sizeof(ibbs_bbs_spy_rec), SEEK_SET);
+		    }
+		    fclose(justfile);
+
+		    if (pack_spy == TRUE) {
+			copyfile(IBBSSPY_FILENAME, IBBSSPY_TEMPFILENAME);
+			justfile = ShareFileOpen(IBBSSPY_TEMPFILENAME, "rb");
+			njustfile = ShareFileOpen(IBBSSPY_FILENAME, "wb");
+			while (ny_fread(&bbs_spy_rec, sizeof(ibbs_bbs_spy_rec), 1, justfile) == 1) {
+			    if (bbs_spy_rec.node[0] != 0) {
+				ny_fwrite(&bbs_spy_rec, sizeof(ibbs_bbs_spy_rec), 1, njustfile);
+			    }
+			    else if (bbs_spy_rec.player_list != 0) {
+				sprintf(numstr, SBYDB_PREFIX".%03d", bbs_spy_rec.player_list);
+				ny_remove(numstr);
+			    }
+			}
+			fclose(justfile);
+			fclose(njustfile);
+			ny_remove(IBBSSPY_TEMPFILENAME);
+		    }
+
+		    for (x = 0; x < IBBSInfo.nTotalSystems; x++) {
+			found = FALSE;
+			justfile = ShareFileOpen(IBBSSPY_FILENAME, "rb");
+			while (ny_fread(&bbs_spy_rec, sizeof(ibbs_bbs_spy_rec), 1, justfile) == 1) {
+			    if (strcmp(bbs_spy_rec.node, IBBSInfo.paOtherSystem[x].szAddress) == 0) {
+				found = TRUE;
+				if (bbs_spy_rec.player_list == 0 && strcmp(bbs_spy_rec.node, IBBSInfo.szThisNodeAddress) != 0)
+				    IBSend(&IBBSInfo, bbs_spy_rec.node, IBBSInfo.szThisNodeAddress, NODE_ADDRESS_CHARS + 1);
+				break;
+			    }
+			}
+			fclose(justfile);
+			if (found == FALSE) {
+			    justfile = ShareFileOpen(IBBSSPY_FILENAME, "a+b");
+			    strcpy(bbs_spy_rec.node, IBBSInfo.paOtherSystem[x].szAddress);
+			    bbs_spy_rec.hi_points = 0;
+			    bbs_spy_rec.players = 0;
+			    bbs_spy_rec.player_list = 0;
+			    ny_fwrite(&bbs_spy_rec, sizeof(ibbs_bbs_spy_rec), 1, justfile);
+			    fclose(justfile);
+			    if (strcmp(bbs_spy_rec.node, IBBSInfo.szThisNodeAddress) != 0)
+				IBSend(&IBBSInfo, bbs_spy_rec.node, IBBSInfo.szThisNodeAddress, NODE_ADDRESS_CHARS + 1);
+			}
+		    }
+		}
+		copyfile(IBBSSPY_FILENAME, IBBSSPY_TEMPFILENAME);
+		justfile = ShareFileOpen(IBBSSPY_TEMPFILENAME, "rb");
+		njustfile = ShareFileOpen(IBBSSPY_FILENAME, "wb");
+		while (ny_fread(&bbs_spy_rec, sizeof(ibbs_bbs_spy_rec), 1, justfile) == 1) {
+		    for (x = 0; x < IBBSInfo.nTotalSystems; x++) {
+			if (strcmp(bbs_spy_rec.node, IBBSInfo.paOtherSystem[x].szAddress) == 0) {
+			    ny_fwrite(&bbs_spy_rec, sizeof(ibbs_bbs_spy_rec), 1, njustfile);
+			    break;
+			}
+		    }
+		}
+		fclose(njustfile);
+		fclose(justfile);
+		ny_remove(IBBSSPY_TEMPFILENAME);
+	    }
+	}
+	//printf("&&&");
+	exit(10);
+	//printf("***");
+	return (0);
+    }
+
+
+    size_t
+	ny_fwrite(const void *ptr, size_t size, size_t n, FILE * stream){
+	size_t          status;
+	INT32            offset;
+
+	offset = ftell(stream);
+
+	if (single_node == FALSE && filelength(fileno(stream)) >= offset + (size * n)) {
+	    //offset = ftell(stream);
+
+	    lock(fileno(stream), offset, size * n);
+	    status = fwrite(ptr, size, n, stream);
+	    unlock(fileno(stream), offset, size * n);
+	}
+	else {
+	    status = fwrite(ptr, size, n, stream);
+	}
+	//if (no_slices == FALSE)
+	    //time_slice();
+	return (status);
+    }
+
+
+    size_t
+	ny_fread(void *ptr, size_t size, size_t n, FILE * stream){
+	size_t          status;
+	INT32            offset;
+
+	offset = ftell(stream);
+
+	if (single_node == FALSE && filelength(fileno(stream)) >= offset + (size * n)) {
+	    offset = ftell(stream);
+
+	    lock(fileno(stream), offset, size * n);
+	    status = fread(ptr, size, n, stream);
+	    unlock(fileno(stream), offset, size * n);
+	}
+	else {
+	    status = fread(ptr, size, n, stream);
+	}
+	//if (no_slices == FALSE)
+	    //time_slice();
+	return (status);
+    }
+
+    FILE           *ShareFileOpen(char *pszFileName, char *pszMode){
+	FILE           *fpFile = NULL;
+	time_t          StartTime = time(NULL);
+	              //char numstr[14];
+	              //ffblk ffblk;
+	              //ny_kernel();
+
+
+	/* Attempt to open the file while there is still time remaining. */
+	if              (single_node == FALSE) {
+
+	    /*
+	       if(no_kernel==FALSE) { ny_kernel();
+	       sprintf(numstr,"u%07d.rnk",nCurrentUserNumber); if
+	       (fexist(numstr)) { no_kernel=TRUE;
+	       fpFile=ShareFileOpen(numstr,"rb");
+	       ny_fread(&cur_user.rank,2,1,fpFile); no_kernel=FALSE;
+	       fclose(fpFile); ny_remove(numstr); wrt_sts(); } }
+	    */
+
+	    while ((fpFile = _fsopen(pszFileName, pszMode, SH_DENYNO)) == NULL
+		   && errno == EACCES
+		&& difftime(time(NULL), StartTime) < FILE_ACCESS_MAX_WAIT) {
+
+		/*
+		   If we were unable to open the file, call od_kernal, so
+		   that
+		*/
+
+		/*
+		   OpenDoors can continue to respond to sysop function keys,
+		   loss
+		*/
+		/* of connection, etc.                                            */
+		//od_kernal();
+	    }
+	}
+	else {
+	    fpFile = fopen(pszFileName, pszMode);
+	}
+
+	if(fpFile==NULL)
+		fpFile=fopen("cruft.tmp","w+");
+
+	/* Return FILE pointer for opened file, if any. */
+	return (fpFile);
+    }
+
+    FILE           *ShareFileOpenAR(char *pszFileName, char *pszMode){
+	FILE           *fpFile = NULL;
+	time_t          StartTime = time(NULL);
+	              //char numstr[14];
+	              //ffblk ffblk;
+	              //ny_kernel();
+
+
+	/* Attempt to open the file while there is still time remaining. */
+
+	if              (single_node == FALSE) {
+
+	    /*
+	       if(no_kernel==FALSE) { ny_kernel();
+	       sprintf(numstr,"u%07d.rnk",nCurrentUserNumber); if
+	       (fexist(numstr)) { no_kernel=TRUE;
+	       fpFile=ShareFileOpen(numstr,"rb");
+	       ny_fread(&cur_user.rank,2,1,fpFile); no_kernel=FALSE;
+	       fclose(fpFile); ny_remove(numstr); wrt_sts(); } }
+	    */
+
+	    while ((fpFile = fopen(pszFileName, pszMode)) == NULL
+		   && errno == EACCES
+		&& difftime(time(NULL), StartTime) < FILE_ACCESS_MAX_WAIT) {
+
+		/*
+		   If we were unable to open the file, call od_kernal, so
+		   that
+		*/
+
+		/*
+		   OpenDoors can continue to respond to sysop function keys,
+		   loss
+		*/
+		/* of connection, etc.                                            */
+		//od_kernal();
+	    }
+	}
+	else {
+	    fpFile = fopen(pszFileName, pszMode);
+
+	}
+
+	if(fpFile==NULL)
+		fpFile=fopen("cruft.tmp","w+");
+
+	/* Return FILE pointer for opened file, if any. */
+	return (fpFile);
+    }
+
+
+    INT16
+                    ny_remove(char *pszFileName){
+	//FILE * fpFile = NULL;
+	time_t          StartTime;
+	              //char numstr[80];
+	              //ffblk ffblk;
+	              //ny_kernel();
+
+	if              (!glob(pszFileName, 0, NULL, &fff))
+	                    return (0);
+
+	for(fname=fff.gl_pathv;*fname!=NULL;fname++) {
+	    StartTime = time(NULL);
+	    /* Attempt to open the file while there is still time remaining. */
+	    if (single_node == FALSE) {
+		while (remove(*fname) == -1
+		       && errno == EACCES
+		&& difftime(time(NULL), StartTime) < FILE_ACCESS_MAX_WAIT) {
+
+		    /*
+		       If we were unable to open the file, call od_kernal, so
+		       that
+		    */
+
+		    /*
+		       OpenDoors can continue to respond to sysop function
+		       keys, loss
+		    */
+		    /* of connection, etc.                                            */
+		    //od_kernal();
+		}
+	    }
+	    else {
+		remove(*fname);
+	    }
+	}
+	globfree(&fff);
+	return (1);
+    }
+
+
+
+    /* The WaitForEnter() function is used to create custom prompt */
+    //void
+                  //WaitForEnter(void)
+                  //{
+	/* Display prompt. */
+	//od_control.od_ker_exec = NULL;
+	//ny_line(1, 1, 0);
+	//ny_disp_emu("\n\r`@Smack [ENTER] to go on.");
+
+	//od_control.od_ker_exec = ny_kernel;
+
+	/* Wait for a Carriage Return or Line Feed character from the user. */
+	//od_get_answer("\n\r");
+
+	//debug
+	// od_printf("%d\n\r", nCurrentUserNumber);
+	//ny_get_answer("\n\r");
+	//    }
+
+
+    /*
+       void ny_disp_emu(char line[]) { int cnt;
+    
+    for(cnt=0;line[cnt]!=0;cnt++) { if(line[cnt]=='`') { cnt++;
+    
+    if(line[cnt]==0) return; else if(line[cnt]=='`') od_putch('`'); else
+       if(line[cnt]=='v') od_printf(ver); else if(line[cnt]=='w')
+       od_printf(verinfo); else if(line[cnt]=='0') od_set_attrib(0x0a); else
+       if(line[cnt]=='1') od_set_attrib(0x01); else if(line[cnt]=='2')
+       od_set_attrib(0x02); else if(line[cnt]=='3') od_set_attrib(0x03); else
+       if(line[cnt]=='4') od_set_attrib(0x04); else if(line[cnt]=='5')
+       od_set_attrib(0x05); else if(line[cnt]=='6') od_set_attrib(0x06); else
+       if(line[cnt]=='7') od_set_attrib(0x07); else if(line[cnt]=='8')
+       od_set_attrib(0x08); else if(line[cnt]=='9') od_set_attrib(0x09); else
+       if(line[cnt]=='!') od_set_attrib(0x0b); else if(line[cnt]=='@')
+       od_set_attrib(0x0c); else if(line[cnt]=='#') od_set_attrib(0x0d); else
+       if(line[cnt]=='$') od_set_attrib(0x0e); else if(line[cnt]=='%')
+       od_set_attrib(0x0f);
+    
+    } else if (line[cnt]==9) { od_printf("        "); } else {
+       od_putch(line[cnt]); } } od_kernal(); }
+    */
+
+    INT16
+                    copyfile(char *file1, char *file2){
+	FILE           *f1, *f2;
+	char           *buffer;
+	INT32            len1, x, y;
+	              //where, x, y;
+
+
+	                f1 = ShareFileOpen(file1, "rb");
+	if              (f1 == NULL)
+	                    return (0);
+	                f2 = ShareFileOpenAR(file2, "wb");
+	if              (f2 == NULL) {
+	    fclose(f1);
+	    return (0);
+	}
+
+	                buffer = (char *)malloc(10000);
+
+	len1 = filelength(fileno(f1));
+	x = len1 / 10000;
+
+	for (y = 0; y < x; y++) {
+	    ny_fread(buffer, 10000, 1, f1);
+	    ny_fwrite(buffer, 10000, 1, f2);
+	}
+
+	y = len1 - (x * 10000);
+
+	if (y > 0) {
+	    ny_fread(buffer, y, 1, f1);
+	    ny_fwrite(buffer, y, 1, f2);
+	}
+
+	fclose(f1);
+	fclose(f2);
+	free(buffer);
+
+	return (1);
+    }
+
+
+    /* CustomConfigFunction() is called by OpenDoors to process custom */
+    /* configuration file keywords that                                */
+
+    /*
+       void CustomConfigFunction(char *pszKeyword, char *pszOptions) {
+       if(stricmp(pszKeyword, "SingleNodeOnly") == 0) { single_node=TRUE; }
+       else if(stricmp(pszKeyword, "NoMultitasker") == 0) { no_slices=TRUE; }
+       else if(stricmp(pszKeyword, "PollingValue") == 0) {
+       sscanf(pszOptions,"%d",&time_slice_value); if (time_slice_value<0)
+       time_slice_value=0; if (time_slice_value>2000) time_slice_value=2000;
+       } else if(stricmp(pszKeyword, "InterBBS") == 0) { ibbs=TRUE; } else
+       if(stricmp(pszKeyword, "InterBBSOperator") == 0) { ibbs_operator=TRUE;
+       } else if(stricmp(pszKeyword, "InterBBSGameNumber") == 0) {
+       sscanf(pszOptions,"%d",&ibbs_game_num); } }
+    */
+
+    void
+                    strzcpy(char dest[], const char src[], INT16 beg, INT16 end){
+	INT16             cnt = 0;
+	do {
+	    dest[cnt] = src[beg];
+	    beg++;
+	    cnt++;
+	} while         (cnt <= end && src[cnt] != 0);
+
+	dest[cnt] = 0;
+    }
diff --git a/src/doors/ny2008/src/nyibbs.prj b/src/doors/ny2008/src/nyibbs.prj
new file mode 100644
index 0000000000000000000000000000000000000000..2f66539e6a512fc33de80558a9859b117354fcc8
Binary files /dev/null and b/src/doors/ny2008/src/nyibbs.prj differ
diff --git a/src/doors/ny2008/src/second.cpp b/src/doors/ny2008/src/second.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..2542d0ecdd0e04be25b72692d82a096e816893e9
--- /dev/null
+++ b/src/doors/ny2008/src/second.cpp
@@ -0,0 +1,4564 @@
+// include the header
+#include "ny2008.h"
+
+// include prototypes for fights
+#include "fights.h"
+
+extern unsigned _stklen;
+extern glob_t fff;
+
+extern char oneframe;
+extern INT16 noevents;
+extern INT16 time_slice_value;
+extern INT16 no_rip_m;
+
+extern INT16 dobad;
+
+extern tIBInfo IBBSInfo;
+extern INT16 ibbs;
+extern INT16 ibbs_send_nodelist;
+extern INT16 ibbs_maint_i;
+extern INT16 ibbs_maint_o;
+extern INT16 ibbs_operator;
+extern INT16 ibbs_game_num;
+
+
+// price arrays
+extern long gun_price[A_BOMB+1];
+extern INT16 	drug_price[HEROIN+1];
+extern INT16 no_kernel;
+extern INT16 ibbs;
+extern INT16 ibbs_operator;
+extern INT16 ibbs_game_num;
+
+// Declare global variables
+extern INT16 nCurrentUserNumber,max_fights,max_drug_hits,condom_price,delete_after;
+extern INT16 bank_interest;
+extern char ansi_name[61],ascii_name[61];
+extern INT16 do_scr_files;
+extern user_rec cur_user;
+extern enemy enemy_rec;
+extern INT16 registered;
+extern char uname[36];
+extern char rec_credit[36];
+extern INT16 do_maint;
+extern char str[15];
+extern INT16 expert;
+extern INT16 rip;
+extern char maint_exec[61];
+extern char *t_buffer;
+char *t_buffer1;
+char savelevel=0;
+extern INT16 single_node;
+extern char *ver;
+extern char *verinfo;
+extern INT16 gamedisk,flagdisk;
+extern char gamedir[MAX_PATH],flagdir[MAX_PATH];
+extern char c_dir_g;
+extern INT16 clean_mode;
+
+extern INT16 busted_ch_bank;
+extern INT16 busted_ch_food;
+extern INT16 busted_ch_rape;
+extern INT16 busted_ch_beggar;
+extern INT16 busted_ch_car;
+extern INT16 busted_ch_school;
+extern INT16 busted_ch_window;
+extern INT16 busted_ch_poison;
+extern INT16 busted_ch_bomb;
+extern INT16 success_ch_bank;
+extern INT16 success_ch_food;
+extern INT16 success_ch_rape;
+extern INT16 success_ch_beggar;
+extern INT16 success_ch_car;
+extern INT16 success_ch_school;
+extern INT16 success_ch_window;
+extern INT16 success_ch_poison;
+extern INT16 success_ch_bomb;
+
+extern INT16 check_o_nodes;
+extern INT16 no_slices;
+
+
+
+void
+get_line(char beg[],char line[], char ovr[],INT16 wrap)
+{
+  char key;
+  INT16 cnt,cnt2;
+  INT16 intval;
+
+  cnt=0;
+  cnt2=0;
+  cnt=strlen(beg);
+  od_printf("`bright green`%s",beg);
+
+  sprintf(line,"%s",beg);
+
+  ovr[0]=0;
+
+  do {
+    key=od_get_key(TRUE);
+    if (key!='\b') {
+      if (cnt==0 && key=='/') {
+	ny_line(331,0,0);
+	//Command (S A C=continue)
+	key=od_get_answer("SAC");
+	od_putch(key);
+	if (key=='S') {
+	  line[0]='/';
+	  line[1]='S';
+	  line[2]=0;
+	  od_printf("\n\r");
+	  return;
+	} else if (key=='A') {
+	  line[0]='/';
+	  line[1]='A';
+	  line[2]=0;
+	  od_printf("\n\r");
+	  return;
+	} else {
+	  cnt=0;
+	  od_printf("\r                          \r`bright green`");
+	}
+      } else if (key!='\n' && key!='\r') {
+	if(wrap==TRUE || cnt<77) {
+	  line[cnt]=key;
+	  cnt++;
+	  od_putch(key);
+	} else {
+	  line[cnt]=key;
+	  od_putch(key);
+	  od_putch('\b');
+	}
+      } else {
+	od_printf("\n\r");
+	line[cnt]=0;
+	cnt=0;
+      }
+    } else {
+      if (cnt>0) cnt--;
+      od_printf("\b \b");
+    }
+
+  } while (cnt<78 && key!='\n' && key!='\r');
+
+  if (cnt>=78) {
+    while (line[cnt]!=' ' && cnt>0) {
+      cnt--;
+      od_printf("\b");
+    }
+    if (cnt==0) {
+      cnt=78;
+    } else {
+      cnt++;
+      od_clr_line();
+    }
+    od_printf("\n\r");
+    while (cnt<78) {
+      ovr[cnt2]=line[cnt];
+      line[cnt]=0;
+      cnt2++;
+      cnt++;
+    }
+    line[78]=0;
+    ovr[cnt2]=0;
+  }
+  if(dobad)
+    dobadwords(line);
+}
+
+
+
+
+
+
+INT16
+askifuser(char handle[25])
+{
+  char key;
+  char numstr[26];
+
+
+  ny_line(332,1,0);
+  //Did ya mean
+  if(!rip)
+    ny_disp_emu(handle);
+  else
+    od_disp_str(ny_un_emu(handle,numstr));
+  ny_line(79,0,0);
+  //? (Y/N)
+
+  key=ny_get_answer("YN");
+  if(!rip)
+    od_printf("%c\n\r",key);
+  else
+    od_disp_str("\n\r");
+  if (key=='Y')
+    return TRUE;
+  return FALSE;
+}
+
+
+
+
+
+void
+newz_ops(void)
+{
+	char key,key_s;
+	FILE *justfile;
+	INT16 cnt;
+	INT32 filepos;
+//	ffblk ffblk;
+	INT16 nonstop=FALSE;
+	newzfile_t	newzfile;
+
+	key='T';
+
+	ch_game_d();
+	if (!fexist(YESNEWS_FILENAME) || !fexist(TODNEWS_FILENAME)) {
+	  justfile=ShareFileOpen(TODNEWS_FILENAME,"r+b");
+	  fclose(justfile);
+	  justfile=ShareFileOpen(YESNEWS_FILENAME,"r+b");
+	  fclose(justfile);
+	}
+
+	if(rip==TRUE && oneframe==FALSE) {
+	  od_disp_str("\n\r");
+	  od_send_file("frame.rip");
+	}
+
+	do {
+
+	  if(rip) {
+	    od_disp_str("\n\r!|e|#|#|#\n\r");
+	    od_send_file("frame3.rip");
+	  } else {
+	    od_printf("\n\r\n");
+	    ny_clr_scr();
+	  }
+
+	  cnt=4;
+	  ny_send_menu(NEWZ,"");
+	  //The New York Times
+	  //-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+	  ny_kernel();
+
+	  if (key=='T') justfile=ShareFileOpen(TODNEWS_FILENAME,"rb");
+	  else justfile=ShareFileOpen(YESNEWS_FILENAME,"rb");
+
+	  if(filelength(fileno(justfile))<sizeof(newzfile) && key=='T') {
+	    ny_line(413,1,1);
+	    fclose(justfile);
+	    justfile=ShareFileOpen(TODNEWS_FILENAME,"wb");
+	    fclose(justfile);
+	  } else if(filelength(fileno(justfile))<sizeof(newzfile)) {
+	    ny_line(414,1,1);
+	    fclose(justfile);
+	    justfile=ShareFileOpen(YESNEWS_FILENAME,"wb");
+	    fclose(justfile);
+	  } else {
+	    while (ny_fread(&newzfile,sizeof(newzfile),1,justfile)==1) {
+	      cnt+=2;
+	      if (newzfile.flag==0) {
+		ny_disp_emu("\n\r`@");
+		ny_disp_emu(newzfile.tagline);
+		od_printf("\n\r");
+	      } else if (newzfile.flag==1) {
+		ny_disp_emu("\n\r`2");
+		ny_disp_emu(newzfile.tagline);
+		ny_disp_emu("\n\r`0                                                     ");
+		ny_disp_emu(newzfile.name);
+		od_printf("\n\r");
+		cnt++;
+	      } else if (newzfile.flag==6) {
+		ny_disp_emu("\n\r`2");
+		ny_disp_emu(newzfile.tagline);
+		ny_disp_emu("\n\r`0            ");
+		ny_disp_emu(newzfile.name);
+		ny_disp_emu(" `2from `0");
+		ny_disp_emu(newzfile.name2);
+		od_printf("\n\r");
+		cnt++;
+	      } else if (newzfile.flag==2) {
+		ny_disp_emu("\n\r`0");
+		ny_disp_emu(newzfile.name);
+		ny_disp_emu("`4 got `@BUSTED`4 today for `@");
+		ny_disp_emu(newzfile.tagline);
+		od_printf("\n\r");
+	      } else if (newzfile.flag==3) {
+		ny_disp_emu("\n\r`0");
+		ny_disp_emu(newzfile.name);
+		ny_disp_emu("`4 ");
+		ny_disp_emu(newzfile.tagline);
+		od_printf("\n\r");
+	      } else if (newzfile.flag==4) {
+		ny_disp_emu("\n\r`0");
+		ny_disp_emu(newzfile.name);
+		ny_disp_emu("`9 beat up `0");
+		ny_disp_emu(newzfile.name2);
+		ny_disp_emu("\n\r`3\"");
+		ny_disp_emu(newzfile.tagline);
+		ny_disp_emu("`3\" `@S`4creams `0");
+		ny_disp_emu(newzfile.name);
+		od_printf("\n\r");
+		cnt++;
+	      } else if (newzfile.flag==5) {
+		ny_disp_emu("\n\r`0");
+		ny_disp_emu(newzfile.name);
+		ny_disp_emu("`9 was beat up by `0");
+		ny_disp_emu(newzfile.name2);
+		ny_disp_emu("\n\r`3\"");
+		ny_disp_emu(newzfile.tagline);
+		ny_disp_emu("`3\" `@W`4hispers `0");
+		ny_disp_emu(newzfile.name);
+		ny_disp_emu(" `@I`4n `@P`4ain\n\r");
+		cnt++;
+	      }
+
+	      if (nonstop==FALSE && (cnt+1)>=od_control.user_screen_length) {
+		cnt=0;
+		filepos=ftell(justfile);
+		fclose(justfile);
+		ny_disp_emu("`%More (Y/n/=)");
+		key_s=ny_get_answer("YN=\n\r");
+		od_printf("\r            \r");
+		//if(key_s=='\n' || key_s=='\r') key_s='Y';
+		//od_putch(key_s);
+		if(key_s=='N')
+		  return;
+		else if(key_s=='=')
+		  nonstop=TRUE;
+
+//	        WaitForEnter();
+
+
+		//od_printf("\n\r");
+		if (key=='T') justfile=ShareFileOpen(TODNEWS_FILENAME,"rb");
+		else justfile=ShareFileOpen(YESNEWS_FILENAME,"rb");
+		fseek(justfile,filepos,SEEK_SET);
+
+	      }
+	    }
+	    fclose(justfile);
+	  }
+	  if(rip) od_send_file("frame2.rip");
+	  ny_line(65,1,0);
+	  //T - Todays Newz Y - Yesterdays Newz [Q] - Quit
+
+	  key=ny_get_answer("TYQ\n\r");
+	  if (key=='\n' || key=='\r') key='Q';
+	  od_putch(key);
+	} while (key!='Q');
+
+}
+
+
+
+
+
+void
+news_post(char line[], char name1[], char name2[], INT16 flag)
+{
+	FILE *justfile;
+	char c_dir;
+
+	c_dir=c_dir_g;
+
+	ch_game_d();
+	justfile=ShareFileOpen(TODNEWS_FILENAME,"a+b");
+	ny_fwrite(line,80,1,justfile);
+	ny_fwrite(name1,25,1,justfile);
+	ny_fwrite(name2,36,1,justfile);
+	ny_fwrite(&flag,2,1,justfile);
+	fclose(justfile);
+
+	if(c_dir==1) ch_flag_d();
+}
+
+
+void
+guns_ops(void)
+{
+	char key,
+	     s_key;
+	DWORD max;
+	weapon choice;
+
+	do {
+	  key = callmenu("BSYLQ?\n\r",ARMS,345,FALSE);
+	  while (expert>0 && key=='?') {
+	    expert+=10;
+	    key=callmenu("BSYLQ?\n\r",ARMS,345,FALSE);
+	    expert-=10;
+	  }
+
+
+	  if (key=='Y') {
+	    DisplayStats();
+	    WaitForEnter();
+	    }
+	  else if (key=='L') {           // list prices
+
+	    if(rip) ny_clr_scr();
+	    ny_line(66,2,2);
+	    //Here's what i got:
+	    ny_send_menu(WEAPONS,"",2);
+
+	    WaitForEnter();
+	  }
+
+	  else if (key=='B') {           // buy weapon
+
+	    if(rip) ny_clr_scr();
+	    ny_line(67,2,2);
+	    //Choose yer new weapon:
+	    ny_send_menu(WEAPONS,"",2);
+	    ny_line(333,1,0);
+	    //Which one? You got
+	    od_printf(D_Num(cur_user.money));
+	    ny_line(334,0,0);
+	    //to spend. (A-W, Enter=[Q]=Quit)
+
+	    s_key=ny_get_answer("ABCDEFGHIJKLMNOPRSTUVWQ\n\r");
+	    if (s_key=='\n' || s_key=='\r') s_key='Q';
+	    od_putch(s_key);
+	    if(!registered && s_key!='Q' && s_key>'J') {
+	      ny_disp_emu("`%\n\r\nUNREGISTERED!!!\n\r\nCannot do this!!!\n\r");
+	      WaitForEnter();
+	      s_key='Q';
+	    }
+	    if (s_key!='Q') {
+	      if (s_key=='A') choice=PEPPER;
+	      else if (s_key=='B') choice=SHARP_STICK;
+	      else if (s_key=='C') choice=SCREWDRIVER;
+	      else if (s_key=='D') choice=KNIFE;
+	      else if (s_key=='E') choice=HAMMER;
+	      else if (s_key=='F') choice=CHAIN;
+	      else if (s_key=='G') choice=LEAD_PIPE;
+	      else if (s_key=='H') choice=GUN;
+	      else if (s_key=='I') choice=COLT;
+	      else if (s_key=='J') choice=RIFLE;
+	      else if (s_key=='K') choice=ELEPHANT_GUN;
+	      else if (s_key=='L') choice=LASER_GUN;
+	      else if (s_key=='M') choice=NAILGUN;
+	      else if (s_key=='N') choice=SHOTGUN;
+	      else if (s_key=='O') choice=ASSAULT_RIFLE;
+	      else if (s_key=='P') choice=MACHINEGUN;
+	      else if (s_key=='R') choice=PROTON_GUN;
+	      else if (s_key=='S') choice=GRANADE_LAUNCHER;
+	      else if (s_key=='T') choice=NEUTRON_PHASER;
+	      else if (s_key=='U') choice=BLASTER;
+	      else if (s_key=='V') choice=ULTRASOUND_GUN;
+	      else if (s_key=='W') {
+		choice=A_BOMB;
+		if (cur_user.level<20) {
+		  ny_line(408,2,1);
+		  if(!rip)
+		    WaitForEnter();
+		  else
+		    od_get_answer("\n\r");
+		  goto not_old_enuf;
+		}
+
+		ny_line(68,2,1);
+		//If you buy an A-Bomb you will have to fight with hands again, but who want's to
+		ny_line(69,0,1);
+		//fight if you can finish what you came here for ...
+
+		WaitForEnter();
+	      }
+	      if (cur_user.arm!=HANDS) {
+
+		ny_line(70,2,0);
+		//Ya'll heffta sell yer
+		print_arm(cur_user.arm);
+		ny_line(335,0,0);
+		//for
+		od_printf(D_Num(gun_price[cur_user.arm]/2));
+		ny_line(336,0,0);
+		//, OK?(Y/N)
+
+		s_key=ny_get_answer("YN");
+		if(!rip) od_putch(s_key);
+		if (s_key=='Y') {
+		  money_plus(gun_price[cur_user.arm]/2);
+		  cur_user.arm=HANDS;
+		  wrt_sts();
+
+		  ny_line(71,2,0);
+		  //Sold
+		  if(rip)
+		    od_get_answer("\n\r");
+
+		  ny_kernel();
+
+		} else choice=HANDS;
+	      }
+	      if (gun_price[choice]>cur_user.money && choice!=HANDS) {
+
+		ny_line(72,2,1);
+		//Ya ain't got nuf money bro...
+
+		if(!rip)
+		  WaitForEnter();
+		else
+		  od_get_answer("\n\r");
+	      } else if (choice!=HANDS) {
+
+		ny_line(73,2,0);
+		//Buy a
+		print_arm(choice);
+		ny_line(335,0,0);
+		//for
+		od_printf(D_Num(gun_price[choice]));
+		ny_line(336,0,0);
+		//?(Y/N)
+
+		s_key=ny_get_answer("YN");
+		if(!rip) od_putch(s_key);
+		if (s_key=='Y') {
+		  cur_user.arm=choice;
+		  money_minus(gun_price[choice]);
+		  wrt_sts();
+
+		  ny_line(74,2,0);
+		  //Ya now got the
+		  print_arm(choice);
+		  ny_line(75,0,1);
+		  //so go destroy something...
+
+		  if(!rip)
+		    WaitForEnter();
+		  else
+		    od_get_answer("\n\r");
+
+		}
+	      }
+not_old_enuf:;
+	    }
+	  }
+	  else if (key=='S') {   // Sell guns
+	    if(rip) no_rip_m=1;
+	    if (cur_user.arm==HANDS) {
+
+	      ny_line(76,2,1);
+	      //You ain't got nothing to sell!
+
+	      if(!rip)
+		WaitForEnter();
+	      else
+	       od_get_answer("\n\r");
+	    } else {
+
+	      ny_line(77,2,0);
+	      //Sell yer
+	      print_arm(cur_user.arm);
+	      ny_line(78,0,0);
+	      //for
+	      od_printf(D_Num(gun_price[cur_user.arm]/2));
+	      ny_line(79,0,0);
+	      //?(Y/N)
+
+	      s_key=ny_get_answer("YN");
+	      if(!rip) od_putch(s_key);
+	      if (s_key=='Y') {
+		money_plus(gun_price[cur_user.arm]/2);
+		cur_user.arm=HANDS;
+		wrt_sts();
+		ny_line(71,1,1);
+		//Sold
+		if(!rip)
+		  WaitForEnter();
+		else
+		  od_get_answer("\n\r");
+	      }
+	    }
+	  }
+	} while (key!='Q');
+}
+
+void
+take_drug(void)
+{
+  if(rip) no_rip_m=1;
+  if (cur_user.drug_hits<=0) {   // check if got some drugs
+    ny_line(80,2,1);
+    //You got no hits man...
+    if(!rip)
+      WaitForEnter();
+    else
+      od_get_answer("\n\r");
+  }
+  else if (cur_user.drug_high==100) {
+    ny_line(81,2,1);
+    //Yer already 100% stoned!
+    if(!rip)
+      WaitForEnter();
+    else
+      od_get_answer("\n\r");
+  }
+  else { // ok to take a drug
+    ny_line(82,2,1);
+    //You take a hit of yer favorite drug...
+    if(rip)
+      od_get_answer("\n\r");
+    cur_user.drug_hits--;       //decrease user hits
+    points_raise((DWORD)(12*(cur_user.drug+1))); //raise points for taking drugs
+    cur_user.drug_high+=25;   //25% more high
+    if (cur_user.drug_high>100) cur_user.drug_high=100;
+    ny_line(83,0,0);
+    //You are now
+    od_printf("%d",(INT16)cur_user.drug_high,37);
+    ny_line(84,0,1);
+    if(rip)
+      od_get_answer("\n\r");
+    //% high
+    wrt_sts();
+    if (cur_user.drug>=COKE) {
+      cur_user.drug_addiction+=10;
+      cur_user.drug_days_since=0;
+      wrt_sts();
+      if (cur_user.drug_addiction>=100) { //overdosed
+	cur_user.drug_addiction=100;
+	Die(1);
+      }
+      ny_line(85,0,1);
+      //Yer drug addiction went up by 10%
+      if(rip)
+	od_get_answer("\n\r");
+    }
+    if(!rip) WaitForEnter();
+  }
+}
+
+
+
+
+
+
+
+void
+healing_ops(void)
+{
+	char key,
+	     s_key;
+	INT16  hit_diff,
+	     howmuch;
+	INT32 intval;
+
+	/*drug rehab prices for different levels*/
+				    /* 0  1   2   3   4   5   6   7   8   9   10  11   12   13   14   15   16   17   18   19   20*/
+	//int drug_rehab_price[LEVELS] ={80,110,150,270,360,420,530,620,750,890,950,1100,1410,1730,2050,2600,3700,4800,6310,8130,10000};
+
+	do {
+	  key = callmenu("HDCYQ?\n\r",HEALING,346,FALSE);
+	  while (expert>0 && key=='?') {
+	    expert+=10;
+	    key=callmenu("HDCYQ?\n\r",HEALING,346,FALSE);
+	    expert-=10;
+	  }
+
+
+	  if (key=='Y') {
+	    DisplayStats();
+	    WaitForEnter();
+	  } else if (key=='H') {
+	    heal_wounds();
+	  } else if (key=='C') {
+	    INT16 std_diff;
+
+	    if (cur_user.std==NONE) {
+
+	      ny_line(86,2,1);
+	      //Yer not infected ... (yet) ...
+
+	      if(!rip)
+		WaitForEnter();
+	      else {
+		od_get_answer("\n\r");
+		no_rip_m=1;
+	      }
+	    } else {
+	      std_diff=cur_user.std_percent;
+	      intval=pow(1.6,cur_user.level)*cur_user.std;
+
+	      ny_line(87,2,0);
+	      //It costs
+	      od_printf(D_Num(intval));//%s
+	      ny_line(88,0,0);
+	      // to cure 1%
+	      if(rip)
+		od_get_answer("\n\r");
+
+	      ny_line(89,1,0);
+	      //You can heal
+	      od_printf(D_Num(std_diff));//%s
+	      ny_line(90,0,0);
+	      //% for
+	      od_printf(D_Num(std_diff*intval));
+	      if(rip) {
+		od_disp_str("::^M@OK))|#|#|#\n\r");
+		od_get_answer("\n\r");
+	      }
+
+	      if ((std_diff*intval)>cur_user.money) {
+		std_diff=cur_user.money/(intval);
+		ny_line(91,1,0);
+		//You can only afford to cure
+		od_printf("%s`red`%c!",D_Num(std_diff),37);
+		if(rip) {
+		  od_disp_str("::^M@OK))|#|#|#\n\r");
+		  od_get_answer("\n\r");
+		}
+	      }
+	      if(rip) {
+		od_send_file("input.rip");
+	      }
+
+	      ny_line(92,2,0);
+	      //So how much ya want healed (Enter=[
+	      od_printf(D_Num(std_diff));
+	      ny_line(93,0,0);
+	      //], M=max
+	      od_printf(D_Num(std_diff));
+	      ny_disp_emu("`2):");
+
+	      howmuch=get_val((DWORD)std_diff,(DWORD)std_diff);
+	      cur_user.std_percent-=howmuch;
+	      money_minus(howmuch * (cur_user.level+1) * cur_user.std);
+	      if(!rip) {
+		ny_disp_emu("\n\r`@");
+	      } else {
+		ny_disp_emu("\n\r!|10000");
+	      }
+	      od_printf(D_Num(howmuch));
+
+	      ny_line(94,0,1);
+	      //% cured!
+
+	      wrt_sts();
+
+	      if(!rip)
+		WaitForEnter();
+	      else
+		od_get_answer("\n\r");
+	    }
+	  }
+
+	  else if (key=='D') {
+	    if(rip) no_rip_m=1;
+	    if (cur_user.drug<COKE || cur_user.drug_addiction==0) {
+
+	      ny_line(95,2,1);
+	      //Yer not addicted or anything...
+
+	      if(!rip)
+		WaitForEnter();
+	      else
+		od_get_answer("\n\r");
+	    } else {
+
+	     ny_line(96,2,0);
+
+	     od_printf(D_Num((DWORD)(500*pow(1.9,cur_user.level))));
+	     ny_line(97,0,0);
+	     // for loosing 1/3 of addiction, do it (Y/N)
+
+	      s_key=ny_get_answer("YN");
+	      od_putch(s_key);
+	      if (s_key=='Y') {
+		if (cur_user.money<500*pow(1.9,cur_user.level)) {
+
+		  ny_line(98,2,1);
+
+//		  od_printf("\n\r\n`bright`You can't afford it!\n\r");
+		  if(!rip)
+		    WaitForEnter();
+		  else
+		    od_get_answer("\n\r");
+		} else {
+		  money_minus(500*pow(1.9,cur_user.level));
+		  cur_user.drug_addiction=cur_user.drug_addiction*2/3;
+		  wrt_sts();
+		  news_post("was in drug rehab today",cur_user.name,"",3);
+
+		  ny_line(99,2,1);
+
+//		  od_printf("\n\r\n`bright green`Y`green`ou feel so much better......\n\r");
+		  if(!rip)
+		    WaitForEnter();
+		  else
+		    od_get_answer("\n\r");
+		}
+	      }
+	    }
+	  }
+	} while (key!='Q');
+}
+
+void
+heal_wounds()
+{
+  INT32 hit_diff;
+  DWORD howmuch;
+
+  if (cur_user.hitpoints==cur_user.maxhitpoints) {
+
+    ny_line(100,2,1);
+//    od_printf("\n\r\n`bright red`Y`red`er not hurt ... (yet) ...\n\r");
+
+    if(!rip)
+      WaitForEnter();
+    else {
+      od_get_answer("\n\r");
+      no_rip_m=1;
+    }
+    return;
+  }
+  hit_diff=cur_user.maxhitpoints-cur_user.hitpoints;
+
+  ny_line(101,2,0);
+  //od_printf("\n\r\n`bright red`Y`red`ou can heal `bright red`
+  od_printf(D_Num(hit_diff));
+  ny_line(78,0,0);
+//  od_printf(" for `bright red`
+  od_printf(D_Num(hit_diff*(INT32)(cur_user.level/2.0 + 1)));
+  if(rip) {
+    od_disp_str("::^M@OK))|#|#|#\n\t");
+    od_get_answer("\n\r");
+  }
+
+  if ((INT32)(hit_diff * (INT16)(cur_user.level/2.0 + 1))>cur_user.money) {
+    hit_diff=cur_user.money/(INT16)(cur_user.level/2.0 + 1);
+    ny_line(102,1,0);
+    //od_printf("\n\r`bright red`Y`red`ou can only afford to heal `bright red`
+    od_printf(D_Num(hit_diff));
+    ny_line(103,0,0);
+    if(rip)
+      od_get_answer("\n\r");
+    //`red` hitpoints!
+  }
+  if(rip) {
+    od_send_file("input.rip");
+  }
+
+  ny_line(104,2,0);
+//  od_printf("\n\r\n`bright green`S`green`o how much ya want healed (`bright blue`Enter`green`=`bright green`[
+  od_printf(D_Num(hit_diff));
+  ny_line(93,0,0);
+  //]`datk geen`, `bright blue`M`green`=max `bright green`%s`green`):",D_Num(hit_diff),str);
+  od_printf(D_Num(hit_diff));
+  ny_disp_emu("`2):");
+
+  howmuch=get_val((DWORD)hit_diff,(DWORD)hit_diff);
+  cur_user.hitpoints+=howmuch;
+  money_minus(howmuch * (INT16)(cur_user.level/2.0 + 1));
+
+  if(!rip)
+    ny_disp_emu("\n\r`@");
+  else
+    od_disp_str("\n\r!|10000((*");
+  od_printf(D_Num(howmuch));
+  ny_line(105,0,1);
+//   H`red`itpoints were healed!\n\r",D_Num(howmuch));
+
+  wrt_sts();
+  if(!rip)
+    WaitForEnter();
+  else
+    od_get_answer("\n\r");
+
+}
+
+
+void
+food_ops(void)
+{
+	char key,
+	     s_key;
+	INT32 longval,intval;
+	INT16 chance;
+
+	do {
+		key=callmenu("GESYQ?\n\r",FOOD,347,FALSE);
+		while (expert>0 && key=='?') {
+		  expert+=10;
+		  key=callmenu("GESYQ?\n\r",FOOD,347,FALSE);
+		  expert-=10;
+		}
+
+
+		if (key=='Y') {
+			DisplayStats();
+			WaitForEnter();
+		}
+		else if (key=='G') {
+		  if(rip) no_rip_m=1;
+		  if (cur_user.hunger==0) {
+
+		    ny_line(106,2,1);
+//		    od_printf("\n\r\n`bright green`Y`green`er not hungry....\n\r");
+
+		    if(!rip)
+		      WaitForEnter();
+		    else
+		      od_get_answer("\n\r");
+		  } else {
+		    intval=80 + (50*pow(1.4,(double)cur_user.level));
+
+		    ny_line(107,2,0);
+		    //od_printf("\n\r\n`bright green`A`green`s you enter a restaurant you look at the prices...`bright green`
+		    od_printf(D_Num(intval));
+		    ny_line(108,0,0);
+
+		    //`green` ..., do it (`bright green`Y`green`/`bright green`N`green`)",D_Num(intval));
+		    s_key=ny_get_answer("YN");
+		    if(!rip) od_putch(s_key);
+		    if (s_key=='Y') {
+		      if (cur_user.money<intval) {
+
+			ny_line(109,2,1);
+
+			//od_printf("\n\r\n`bright`Well you ain't got enuf cash for that....\n\r");
+			if(!rip)
+			  WaitForEnter();
+			else
+			  od_get_answer("\n\r");
+		      } else {
+			money_minus(intval);
+			cur_user.hitpoints=cur_user.maxhitpoints;
+			if (cur_user.hunger>=30)
+			  cur_user.hunger-=30;
+			else
+			  cur_user.hunger=0;
+			wrt_sts();
+			ny_line(110,2,1);
+			//od_printf("\n\r\n`bright red`Y`red`ou feel so refreshed yer hitpoints maxed out....\n\r");
+			if(!rip)
+			  WaitForEnter();
+			else
+			  od_get_answer("\n\r");
+		      }
+		    }
+		  }
+		}
+		else if (key=='E') {
+		  if(rip) no_rip_m=1;
+		  if (cur_user.hunger==0) {
+		    ny_line(106,2,1);
+//		    od_printf("\n\r\n`bright green`Y`green`er not hungry....\n\r");
+		    if(!rip)
+		      WaitForEnter();
+		    else
+		      od_get_answer("\n\r");
+		  } else {
+		    ny_line(111,2,1);
+		    if(rip)
+		      od_get_answer("\n\r");
+		    ny_line(112,0,1);
+		    //od_printf("\n\r\n`bright red`T`red`hough not feeling that hungry anymore, you feel a bit worse and\n\rloose 1/3 of yer hitpoints...\n\r");
+		    cur_user.hitpoints=cur_user.hitpoints*2/3;
+		    if (cur_user.hunger>=25)
+		      cur_user.hunger-=25;
+		    else
+		      cur_user.hunger=0;
+
+		    wrt_sts();
+		    if(!rip)
+		      WaitForEnter();
+		    else
+		      od_get_answer("\n\r");
+		  }
+		}
+		else if (key=='S') {
+		  if(rip) no_rip_m=1;
+		  if (cur_user.level==0) {
+
+		    ny_line(113,2,1);
+//		    od_printf("\n\r\n`bright`Level 0 players can't steal....\n\r");
+
+		    if(!rip)
+		      WaitForEnter();
+		    else
+		      od_get_answer("\n\r");
+		  } else {
+
+		    ny_line(114,2,1);
+		    //od_printf("\n\r\n`bright red`Y`red`ou try to steel some food from a supermarket...\n\r");
+
+		    if(!rip)
+		      WaitForEnter();
+		    else
+		      od_get_answer("\n\r");
+		    chance=xp_random(100);
+		    if (chance<=busted_ch_food) {
+
+		      od_printf("\n\r\n");
+		      ny_send_menu(BUSTED,"");
+
+//		      od_printf("\n\r\n`bright`BUSTED!!!! .... well the police beat the hell out of you .....\n\rWhy don't you try again tomorrow...\n\r");
+//		      od_printf("Ya lost 2%c of yer points!\n\r",37);
+		      cur_user.alive=UNCONCIOUS;
+		      points_loose(cur_user.points*.02);
+		      news_post("stealing food",cur_user.name,"",2);
+		      if(!rip)
+			WaitForEnter();
+		      else
+			od_get_answer("\n\r");
+		      od_exit(10,FALSE);
+		    } else {
+		      chance=xp_random(100);
+		      if (chance<=success_ch_food) {
+			intval=xp_random(cur_user.hunger+2);
+			if (cur_user.hunger<intval) intval= cur_user.hunger;
+
+			ny_line(115,2,0);
+			//od_printf("\n\r\n`bright red`Y`red`ou just stole enough so yer hunger went down by %d
+			od_printf("%d%c",intval,37);
+
+			cur_user.hunger-=intval;
+			points_raise((INT32)25*cur_user.level);
+			if(!rip) {
+			  od_disp_str("...\n\r");
+			  WaitForEnter();
+			} else {
+			  od_disp_str("::^M@OK))|#|#|#\n\r");
+			  od_get_answer("\n\r");
+			}
+		      } else {
+			intval=2 * cur_user.level * DrgPtsCoef();
+
+			ny_line(116,2,1);
+			if(rip)
+			  od_get_answer("\n\r");
+
+			ny_line(117,0,0);
+//		        od_printf("\n\r\n`bright red`Y`red`ou did not manage to steal anything but did not get busted...\n\r`bright red`Y`red`our points went up by %s\n\r",D_Num(intval));
+			od_printf("%s",D_Num(intval));
+
+			points_raise((INT32)13*cur_user.level);
+			if(!rip) {
+			  od_disp_str("\n\r");
+			  WaitForEnter();
+			} else {
+			  od_disp_str("::^M@OK))|#|#|#\n\r");
+			  od_get_answer("\n\r");
+			}
+		      }
+		    }
+		  }
+		}
+	} while (key!='Q');
+}
+
+
+void
+get_laid_ops(void)
+{
+	char key;
+	INT32 longval;
+	INT32 intval;
+	INT16 chance;
+	char hand[25];
+	char numstr[26];
+	char line[80],ovr[80];
+	FILE *justfile;
+	FILE *msg_file;
+	scr_rec urec;
+	INT16 unum,ret,cnt;
+	mail_idx_type mail_idx;
+	INT32 fillen;
+
+
+	do {
+		key=callmenu("GSBYRPMQ?\n\r",SEX,348,FALSE);
+		while (expert>0 && key=='?') {
+		  expert+=10;
+		  key=callmenu("GSBYRPMQ?\n\r",SEX,348,FALSE);
+		  expert-=10;
+		}
+
+
+		if (key=='Y') {
+			DisplayStats();
+			WaitForEnter();
+			}
+		else if (key=='R') {
+		  if(rip) no_rip_m=1;
+		  if (cur_user.sex_today<=0) {
+
+		    ny_line(118,2,1);
+//		    od_printf("\n\r\n`bright`You already used up all your sex turns today ...\n\r");
+
+		    if(!rip)
+		      WaitForEnter();
+		    else
+		      od_get_answer("\n\r");
+		  } else {
+
+		    ny_line(119,2,1);
+//		    od_printf("\n\r\n`bright red`Y`red`ou look for a victim...\n\r");
+
+		    if(!rip)
+		      WaitForEnter();
+		    else
+		      od_get_answer("\n\r");
+		    chance=xp_random(100);
+		    if (chance<=busted_ch_rape) {
+
+		      od_printf("\n\r\n");
+		      ny_send_menu(BUSTED,"");
+		      //od_printf("\n\r\n`bright`BUSTED!!!! .... well the police beat the hell out of you .....\n\rWhy don't you try again tomorrow...\n\r");
+		      //od_printf("Ya lost 2%c of yer points!\n\r",37);
+
+		      cur_user.alive=UNCONCIOUS;
+		      points_loose(cur_user.points*.02);
+		      news_post("rape",cur_user.name,"",2);
+		      if(!rip)
+			WaitForEnter();
+		      else
+			od_get_answer("\n\r");
+		      od_exit(10,FALSE);
+		    } else {
+		      chance=xp_random(100);
+		      if (chance<=success_ch_rape) {
+
+			if (cur_user.sex==MALE) ny_line(120,2,1);// od_printf("\n\r\n`bright red`Y`red`ou raped some lady and ran away ... `bright red`G`red`ood job ...\n\r");
+			else ny_line(121,2,1); //od_printf("\n\r\n`bright red`Y`red`ou raped some guy and ran away ... `bright red`G`red`ood job ...\n\r");
+
+			cur_user.since_got_laid=0;
+			cur_user.sex_today--;
+			illness();
+			points_raise((INT32)40*(cur_user.level+1));
+			if(!rip)
+			  WaitForEnter();
+			else
+			  od_get_answer("\n\r");
+		      } else {
+
+			ny_line(122,2,1);
+//		        od_printf("\n\r\n`bright red`Y`red`ou couldn't find any victim...\n\r");
+
+			cur_user.sex_today--;
+			wrt_sts();
+			if(!rip)
+			  WaitForEnter();
+			else
+			  od_get_answer("\n\r");
+		      }
+		    }
+		  }
+		}
+		else if (key=='G') {
+		  if(rip) no_rip_m=1;
+		  if (cur_user.sex_today<=0) {
+
+		    ny_line(118,2,1);
+//		    od_printf("\n\r\n`bright`You already used up all your sex turns today ...\n\r");
+
+		    if(!rip)
+		      WaitForEnter();
+		    else
+		      od_get_answer("\n\r");
+		  } else {
+		    chance=xp_random(22);
+		    if (chance<=cur_user.level) {
+
+		      if (cur_user.sex==MALE) ny_line(123,2,1);// od_printf("\n\r\n`bright red`Y`red`ou scored a pretty nice chick ... `bright red`G`red`ood job ...\n\r");
+		      else ny_line(124,2,1); //od_printf("\n\r\n`bright red`Y`red`ou scored some cool guy ... `bright red`G`red`ood job ...\n\r");
+
+		      cur_user.since_got_laid=0;
+		      cur_user.sex_today--;
+		      illness();
+		      points_raise((INT32)50*(cur_user.level+1));
+		      if(!rip)
+			WaitForEnter();
+		      else
+			od_get_answer("\n\r");
+
+		    } else {
+
+		      ny_line(125,2,1);
+//		      od_printf("\n\r\n`bright red`Y`red`ou couldn't find anybody who'd like you...\n\r");
+		      if(rip)
+			od_get_answer("\n\r");
+
+		      ny_line(126,0,1);
+//		      od_printf("`bright red`T`red`he sex turns went down anyway...\n\r");
+
+		      cur_user.sex_today--;
+		      wrt_sts;
+		      if(!rip)
+			WaitForEnter();
+		      else
+			od_get_answer("\n\r");
+		    }
+		  }
+		}
+
+		else if (key=='P') {
+		  if(rip) no_rip_m=1;
+		  if (cur_user.sex_today<=0) {
+
+		    ny_line(118,2,1);
+//		    od_printf("\n\r\n`bright`You already used up all your sex turns today ...\n\r");
+
+		    if(!rip)
+		      WaitForEnter();
+		    else
+		      od_get_answer("\n\r");
+
+		  } else {
+		    intval=75+(50*cur_user.level);
+
+		    ny_line(127,2,0);
+		    //od_printf("\n\r\n`bright red`Y`red`ou can get a hooker fer
+		    od_printf(D_Num(intval));
+		    ny_line(128,0,0);
+		    // ... (`bright red`Y`red`/`bright red`N`red`)",D_Num(intval));
+
+		    key=ny_get_answer("YN");
+		    if(!rip)
+		      od_printf("%c\n\r\n",key);
+		    else
+		      od_disp_str("\n\r");
+		    if (key=='Y') {
+		      if(intval>cur_user.money) {
+
+			ny_line(252,0,1);
+			//you can afford it man
+
+			if(!rip)
+			  WaitForEnter();
+			else
+			  od_get_answer("\n\r");
+		      } else {
+
+			ny_line(129,0,1);
+//		        od_printf("`bright red`O`red`k there you go...\n\r");
+
+			cur_user.since_got_laid=0;
+			cur_user.sex_today--;
+			money_minus(intval);
+			illness();
+			points_raise((INT32)25*(cur_user.level+1));
+			if(!rip)
+			  WaitForEnter();
+			else
+			  od_get_answer("\n\r");
+		      }
+		    }
+		  }
+		}
+		else if (key=='S') {
+		  if (cur_user.sex_today<=0) {
+
+		    ny_line(118,2,1);
+//		    od_printf("\n\r\n`bright`You already used up all your sex turns today ...\n\r");
+
+		    if(!rip)
+		      WaitForEnter();
+		    else {
+		      od_get_answer("\n\r");
+		      no_rip_m=1;
+		    }
+
+		  } else {
+
+		    if (cur_user.sex==MALE) ny_line(130,2,0); //od_printf("\n\r\n`bright red`Y`red`ou wanna list all the female players (`bright red`Y`red`/`bright red`N`red`)");
+		    else ny_line(131,2,0); //od_printf("\n\r\n`bright red`Y`red`ou wanna list all the male players (`bright red`Y`red`/`bright red`N`red`)");
+
+		    key=ny_get_answer("YN");
+		    if(!rip)
+		      od_printf("%c\n\r",key);
+		    else
+		      od_disp_str("\n\r  \b\b");
+		    if (key=='Y') {
+		      if (cur_user.sex==MALE) ListPlayersS(FEMALE); else ListPlayersS(MALE);
+		      od_printf("\n\r");
+		    }
+		    if(rip) od_send_file("tframe3.rip");
+
+		    ny_line(132,1,0);
+//		    od_printf("\n\r\n`bright red`W`red`ho ya wanna screw (`bright red`full`red` or `bright red`partial`red` name):`bright green`");
+
+		    od_input_str(hand,24,' ',255);
+		    ny_un_emu(hand);
+		    //od_printf("\n\r");
+		    unum=0;
+		    ret=1;
+		    if (hand[0]!=0) {
+		      do {
+			ch_game_d();
+			justfile=ShareFileOpen(SCR_FILENAME,"rb");
+			fseek(justfile,sizeof(scr_rec) * (INT32)unum,SEEK_SET);
+			do {
+			  ret=ny_fread(&urec,sizeof(scr_rec),1,justfile);
+			  unum++;
+			  //time_slice();
+			} while ((strzcmp(hand,ny_un_emu(urec.name,numstr)) || urec.sex==cur_user.sex) && ret==1);
+			fclose(justfile);
+		      } while (ret==1 && askifuser(urec.name)==FALSE);
+		    }
+		    if (ret!=1) {
+
+		      ny_line(133,1,1);
+		      if(rip)
+			od_get_answer("\n\r");
+
+		      //od_printf("\n\r`bright red`G`red`ot no idea who you mean ...");
+
+		    //  WaitForEnter();
+		    } else if (hand[0]!=0) {
+
+		      user_rec u2rec;
+
+		      ch_game_d();
+		      justfile=ShareFileOpen(USER_FILENAME,"rb");
+		      fseek(justfile,sizeof(user_rec) * (INT32)urec.user_num,SEEK_SET);
+		      ny_fread(&u2rec,sizeof(user_rec),1,justfile);
+		      fclose(justfile);
+
+		      ny_line(134,1,1);
+//		      od_printf("\n\r`bright red`H`red`ow you gonna ask? (`bright red`/s`red`=save `bright red`/a`red`=abort):\n\r");
+
+		      ch_flag_d();
+		      sprintf(numstr,"u%07d.tmg",nCurrentUserNumber);
+		      justfile=ShareFileOpen(numstr,"wb");
+		      cnt= -1;
+		      ovr[0]=0;
+		      do {
+			cnt++;
+			get_line(ovr,line,ovr,TRUE);
+			ny_fwrite(&line,80,1,justfile);
+		      } while ((line[0]!='/' && (line[1]!='s' || line[1]!='S')) && (line[0]!='/' && (line[1]!='a' || line[1]!='A')));
+		      fclose(justfile);
+		      if (line[1]=='s' || line[1]=='S') {
+			ny_line(135,0,1);
+//			od_printf("`bright red`S`red`aving...\n\r");
+			mail_idx.length=cnt;
+			strcpy(mail_idx.sender,cur_user.name);
+			strcpy(mail_idx.recver,urec.name);
+			strcpy(mail_idx.senderI,cur_user.bbsname);
+			strcpy(mail_idx.recverI,u2rec.bbsname);
+			mail_idx.afterquote=0;
+			mail_idx.deleted=FALSE;
+			mail_idx.sender_sex=cur_user.sex;
+			mail_idx.flirt=1;
+			mail_idx.ill=cur_user.std;
+			mail_idx.inf=cur_user.std_percent;
+			ch_flag_d();
+			justfile=ShareFileOpen(numstr,"rb");
+			ch_game_d();
+			msg_file=ShareFileOpen(MAIL_FILENAME,"a+b");
+			fillen=filelength(fileno(msg_file));
+			fillen/=80;
+			mail_idx.location=fillen;
+			while ((cnt--)>0) {
+			  ny_fread(&line,80,1,justfile);
+			  ny_fwrite(&line,80,1,msg_file);
+			  //time_slice();
+			}
+			fclose(msg_file);
+			fclose(justfile);
+			ch_flag_d();
+			ny_remove(numstr);
+//			sprintf(numstr,"del u%07d.tmg");
+//			system(numstr);
+			ch_game_d();
+			msg_file=ShareFileOpen(MAIL_INDEX,"a+b");
+			ny_fwrite(&mail_idx,sizeof(mail_idx_type),1,msg_file);
+			fclose(msg_file);
+			cur_user.sex_today--;
+			if(single_node==FALSE && urec.online==TRUE) {
+			  ch_flag_d();
+			  sprintf(numstr,"u%07d.omg",urec.user_num);
+			  char omg[2];
+			  omg[0]=27;
+			  omg[1]=0;
+			  justfile=ShareFileOpen(numstr,"a+b");
+			  ny_fwrite(&omg,51,1,justfile);
+			  ny_fwrite(&cur_user.name,25,1,justfile);
+			  fclose(justfile);
+			}
+			if(rip)
+			  od_get_answer("\n\r");
+		      } else {
+			ny_line(136,0,1);
+			if(rip)
+			  od_get_answer("\n\r");
+
+			//od_printf("\b\b`bright red`A`red`borted...\n\r");
+			//sprintf(numstr,"del u%07d.tmg");
+			//system(numstr);
+			ch_flag_d();
+			ny_remove(numstr);
+		      }
+		    }
+		    if(!rip) WaitForEnter();
+		  }
+		}
+
+		else if (key=='M') {
+		  if(registered==FALSE) {
+		    ny_disp_emu("`%\n\r\nUNREGISTERED!!!\n\r\nCannot do this!!!\n\r");
+		    WaitForEnter();
+		  } else if (cur_user.sex_today<=0) {
+		    if(rip) no_rip_m=1;
+
+		    ny_line(118,2,1);
+		    //od_printf("\n\r\n`bright`You already used up all your sex turns today ...\n\r");
+
+		    if(!rip)
+		      WaitForEnter();
+		    else
+		      od_get_answer("\n\r");
+
+		  } else {
+		    if(rip) no_rip_m=1;
+
+		    ny_line(137,2,1);
+		    if(rip)
+		      od_get_answer("\n\r");
+//		    od_printf("\n\r\n`bright red`W`red`ell it aint the real thing, but at least you don't feel\n\r");
+		    ny_line(138,0,1);
+  //		    od_printf("that you didn't have REAL sex in such a long time, and you can't get sick\n\rlike this.\n\r");
+
+		    cur_user.since_got_laid/=2;
+		    cur_user.sex_today--;
+		    points_raise((INT32)12*(cur_user.level+1));
+		    if(!rip)
+		      WaitForEnter();
+		    else
+		      od_get_answer("\n\r");
+		  }
+		}
+		else if (key=='B') {
+		  if(registered==FALSE) {
+		    ny_disp_emu("`%\n\r\nUNREGISTERED!!!\n\r\nCannot do this!!!\n\r");
+		    WaitForEnter();
+		  } else {
+
+		    ny_line(139,2,0);
+		    //od_printf("\n\r\n`bright green`Y`green`ou got `bright green`
+		    od_printf("%d",cur_user.condoms);
+		    ny_line(140,0,2);
+//		    `green` condoms.\n\r\n
+		    if(rip)
+		      od_get_answer("\n\r");
+
+		    if(rip) {
+		      od_send_file("input.rip");
+		    }
+
+		    longval=cur_user.money/condom_price;
+		    if (longval+cur_user.condoms>INT_MAX) longval=INT_MAX-cur_user.condoms;
+		    ny_line(141,0,0);
+		    //od_printf("`bright green`H`green`ow much ya want? (`bright blue`Enter`green`=`bright green`[0]`green`, `bright blue`M`green`=max `bright green`
+		    od_printf(D_Num(longval));
+		    ny_disp_emu("`2):");
+
+		    intval = get_val((DWORD)0,(DWORD)longval);
+		    cur_user.condoms+=intval;
+		    money_minus(intval * condom_price);
+		    wrt_sts();
+
+		    ny_line(142,1,0);
+		    //od_printf("\n\r`bright red`O`red`k you now got `bright red`
+		    od_printf("%d",cur_user.condoms);
+		    ny_line(143,0,1);
+
+		    if(!rip)
+		      WaitForEnter();
+		    else
+		      od_get_answer("\n\r");
+		  }
+		}
+
+	} while (key!='Q');
+}
+
+
+void
+disp_fig_stats(void)
+{
+	od_printf("`cyan`Hitpoints: `bright green`%s  ",D_Num(cur_user.hitpoints));
+	od_printf("`cyan`Fights Left: `bright green`%d  ",(INT16)cur_user.turns);
+	od_printf("`cyan`Points: `bright green`%s  ",D_Num(cur_user.points));
+	od_printf("`cyan`Money: `bright green`%s\n\r",D_Num(cur_user.money));
+}
+
+
+
+
+
+void
+illness(void)  // std's and stuff
+{
+  INT16 intval;
+  desease ill;
+
+  ill = (desease)(xp_random(AIDS-cur_user.std+2)+cur_user.std-1);
+  if (ill>AIDS) ill=AIDS;
+
+  if (ill>=cur_user.std && ill!=NONE) {
+    cur_user.std=ill;
+    if (cur_user.condoms>0) {
+
+      ny_line(144,1,1);
+//      od_printf("\n\r`bright red`Y`red`ou used a condom and got only 1/2 infected...\n\r");
+
+      if(rip)
+	od_get_answer("\n\r");
+      cur_user.condoms--;
+      cur_user.std_percent+=ill*2;
+    } else {
+      cur_user.std_percent+=ill*4;
+    }
+
+    ny_line(145,1,0);
+    //od_printf("\n\r`bright red`Y`red`ou are now `bright green`
+    od_printf("%d",(INT16)cur_user.std_percent);
+    ny_line(146,0,0);
+//    `red`%c infected with `brigh green`",(INT16)cur_user.std_percent,37);
+    print_disease(ill);
+    wrt_sts();
+    if(rip) {
+      od_disp_str("::^M@OK))|#|#|#\n\r");
+      od_get_answer("\n\r");
+    } else
+      od_printf("\n\r");
+
+
+    if (cur_user.std_percent>=100) {
+      if(!rip) WaitForEnter();
+      Die(3);
+    }
+  }
+}
+
+
+
+
+
+void
+illness(desease ill, INT16 inf, INT16 rape)  // std's and stuff from players
+{
+//  printf("\n\n%d\n\n",inf);
+//  WaitForEnter();
+
+  if(ill>AIDS) ill=AIDS;
+  if(cur_user.std>AIDS) cur_user.std=AIDS;
+  if (ill>=cur_user.std && ill!=NONE) {
+    cur_user.std=ill;
+    if (cur_user.condoms>0 && rape==FALSE) {
+      if(inf<4) inf=4;
+
+      ny_line(144,1,1);
+//      od_printf("\n\r`bright red`Y`red`ou used a condom and got only 1/2 infected...\n\r");
+
+      if(rip)
+	od_get_answer("\n\r");
+      cur_user.condoms--;
+      cur_user.std_percent+=inf/4;
+    } else {
+      if(inf<2) inf=2;
+      cur_user.std_percent+=inf/2;
+    }
+
+
+    //od_printf("\n\r`bright red`Y`red`ou are now `bright green`%d`red`%c infected with `brigh green`",(INT16)cur_user.std_percent,37);
+    ny_line(145,1,0);
+    od_printf("%d",(INT16)cur_user.std_percent,37);
+    ny_line(146,0,0);
+    print_disease(ill);
+    wrt_sts();
+    if(rip) {
+      od_disp_str("::^M@OK))|#|#|#\n\r");
+      od_get_answer("\n\r");
+    } else
+      od_printf("\n\r");
+
+
+    if (cur_user.std_percent>=100) {
+      if(!rip) WaitForEnter();
+      Die(3);
+    }
+  }
+}
+
+
+
+void
+money_ops(void)
+{
+	char key;
+	DWORD intval;
+	INT16 chance;
+	DWORD med;
+	char hand[25];
+	char omg[51];
+	char numstr[26];
+	char line[80];
+	FILE *justfile;
+	FILE *msg_file;
+	scr_rec urec;
+	user_rec u2rec;
+	INT16 unum,ret;
+	mail_idx_type mail_idx;
+	INT32 fillen;
+
+
+	do {
+	    key=callmenu("DWGSYQ?\n\r",BANK,349,FALSE);
+	    while (expert>0 && key=='?') {
+	      expert+=10;
+	      key=callmenu("DWGSYQ?\n\r",BANK,349,FALSE);
+	      expert-=10;
+	    }
+
+	    if(key == 'S') {
+	      if(rip) od_send_file("texti.rip");
+	      ny_line(416,2,0);
+	      od_input_str(hand,24,' ',255);
+	      ny_un_emu(hand);
+	      unum=0;
+	      ret=1;
+	      if (hand[0]!=0) {
+		do {
+		  ch_game_d();
+		  justfile=ShareFileOpen(SCR_FILENAME,"rb");
+		  fseek(justfile,sizeof(scr_rec) * (INT32)unum,SEEK_SET);
+		  do {
+		    ret=ny_fread(&urec,sizeof(scr_rec),1,justfile);
+		    unum++;
+		    //time_slice();
+		  } while ((strzcmp(hand,ny_un_emu(urec.name,numstr)) || urec.user_num==nCurrentUserNumber) && ret==1);
+		  fclose(justfile);
+		} while (ret==1 && askifuser(urec.name)==FALSE);
+	      }
+	      if (ret!=1) {
+		ny_line(133,1,1);
+		if(!rip)
+		  WaitForEnter();
+		else
+		  od_get_answer("\n\r");
+	      } else if (hand[0]!=0) {
+		ch_game_d();
+		justfile=ShareFileOpen(USER_FILENAME,"rb");
+		fseek(justfile,sizeof(user_rec) * (INT32)urec.user_num,SEEK_SET);
+		ny_fread(&u2rec,sizeof(user_rec),1,justfile);
+		fclose(justfile);
+		if(rip) {
+		  od_send_file("input.rip");
+		}
+		ny_line(417,1,0);
+		od_printf(D_Num(cur_user.money));
+		ny_disp_emu("`2):");
+		intval=get_val((DWORD)0,cur_user.money);
+		if (intval>0) {
+		  cur_user.money-=intval;
+		  wrt_sts();
+		  ny_line(418,1,1);
+		  mail_idx.flirt=1002;
+		  mail_idx.length=1;
+		  strcpy(mail_idx.sender,cur_user.name);
+		  strcpy(mail_idx.senderI,cur_user.bbsname);
+		  strcpy(mail_idx.recver,urec.name);
+		  strcpy(mail_idx.recverI,u2rec.bbsname);
+		  mail_idx.afterquote=0;
+		  mail_idx.deleted=FALSE;
+		  mail_idx.sender_sex=cur_user.sex;
+		  mail_idx.ill=cur_user.std;
+		  mail_idx.inf=cur_user.std_percent;
+		  ch_game_d();
+		  msg_file=ShareFileOpen(MAIL_FILENAME,"a+b");
+		  fillen=filelength(fileno(msg_file));
+		  fillen/=80;
+		  mail_idx.location=fillen;
+		  ny_fwrite(&intval,80,1,msg_file);
+		  fclose(msg_file);
+		  msg_file=ShareFileOpen(MAIL_INDEX,"a+b");
+		  ny_fwrite(&mail_idx,sizeof(mail_idx_type),1,msg_file);
+		  fclose(msg_file);
+		  if(single_node==FALSE && urec.online==TRUE) {
+		    ch_flag_d();
+		    sprintf(numstr,"u%07d.omg",urec.user_num);
+		    omg[0]=27;
+		    omg[1]=0;
+		    justfile=ShareFileOpen(numstr,"a+b");
+		    ny_fwrite(&omg,51,1,justfile);
+		    ny_fwrite(&cur_user.name,25,1,justfile);
+		    fclose(justfile);
+		  }
+		  if(!rip)
+		    WaitForEnter();
+		  else
+		    od_get_answer("\n\r");
+		}
+	      }
+	    } else if (key == 'D') { //deposit in bank
+
+	       med=ULONG_MAX-cur_user.money;
+	       if (med<=cur_user.bank)
+		 intval=med;
+	       else
+		 intval=cur_user.money;
+
+	       if(rip) {
+		 od_send_file("input.rip");
+	       }
+
+	       ny_line(147,2,0);
+	       //od_printf("\n\r\n`bright green`H`green`ow much ya want to deposit? (`bright blue`Enter`green`=`bright green`[0]`green`, `bright blue`M`green`=max `bright green`
+	       od_printf(D_Num(intval));
+	       ny_disp_emu("`2):");
+
+
+	       intval=get_val((DWORD)0,intval);
+	       cur_user.money-=intval;
+	       cur_user.bank+=intval;
+	       wrt_sts();
+
+	       ny_line(148,1,0);
+	       //od_printf("\n\r`bright red`Y`red`ou got `bright red`
+	       od_printf(D_Num(cur_user.bank));
+	       ny_line(149,0,1);
+	       //`red` in the bank...\n\r",D_Num(cur_user.bank));
+
+	       if(!rip)
+		 WaitForEnter();
+	       else
+		 od_get_answer("\n\r");
+	    }
+	    else if (key=='W') { ///widthraw from bank
+
+	       med=ULONG_MAX-cur_user.bank;
+	       if (med<=cur_user.money)
+		 intval=med;
+	       else
+		 intval=cur_user.bank;
+	       if(rip) {
+		 od_send_file("input.rip");
+	       }
+
+	       ny_line(150,2,0);
+	       //od_printf("\n\r\n`bright green`H`green`ow much ya want to widthraw? (`bright blue`Enter`green`=`bright green`[0]`green`, `bright blue`M`green`=max `bright green`
+	       od_printf(D_Num(intval));
+	       ny_disp_emu("`2):");
+
+	       intval=get_val((DWORD)0,intval);
+	       cur_user.bank-=intval;
+	       cur_user.money+=intval;
+	       wrt_sts();
+
+	       ny_line(148,1,0);
+	       //od_printf("\n\r`bright red`Y`red`ou got `bright red`
+	       od_printf(D_Num(cur_user.money));
+	       ny_line(151,0,1);
+	       //`red` on ya...\n\r",D_Num(cur_user.money));
+
+	       if(!rip)
+		 WaitForEnter();
+	       else
+		 od_get_answer("\n\r");
+	    }
+	    else if (key=='Y') {   //display stats
+		DisplayStats();
+		WaitForEnter();
+	    }
+	    else if (key=='G') {  //steal money
+		if(rip) no_rip_m=1;
+		if (cur_user.level==0) {
+
+		  ny_line(113,2,1);
+		  //od_printf("\n\r\n`bright`Level 0 players can't steall....\n\r");
+
+		  if(!rip)
+		    WaitForEnter();
+		  else
+		    od_get_answer("\n\r");
+		} else {
+
+		  ny_line(152,2,1);
+		  //od_printf("\n\r\n`bright red`Y`red`ou try to steel some money from the bank...\n\r");
+
+		  if(!rip)
+		    WaitForEnter();
+		  else
+		    od_get_answer("\n\r");
+		  chance=xp_random(100);
+		  if (chance<=busted_ch_bank) {
+
+		    od_printf("\n\r\n");
+		    ny_send_menu(BUSTED,"");
+		    //od_printf("\n\r\n`bright`BUSTED!!!! .... well the police beat the hell out of you .....\n\rWhy don't you try again tomorrow...\n\r");
+		    //od_printf("Ya lost 2%c of yer points!\n\r",37);
+
+		    cur_user.alive=UNCONCIOUS;
+		    points_loose(cur_user.points*.02);
+		    news_post("robbing bank",cur_user.name,"",2);
+		    if(!rip)
+		      WaitForEnter();
+		    else
+		      od_get_answer("\n\r");
+		    od_exit(10,FALSE);
+		  } else {
+		    chance=xp_random(100);
+		    if (chance<=success_ch_bank) {
+		      intval=xp_random(cur_user.level*700);
+
+		      ny_line(153,2,0);
+		      //od_printf("\n\r\n`bright red`Y`red`ou just stole
+		      od_printf(D_Num(intval));
+		      ny_line(154,0,1);
+		      // without getting busted, good job...\n\r",intval);
+
+		      money_plus(intval);
+		      points_raise((INT32)55*cur_user.level);
+		      if(!rip)
+			WaitForEnter();
+		      else
+			od_get_answer("\n\r");
+		    } else {
+		      intval=5*cur_user.level*DrgPtsCoef();
+
+		      ny_line(155,2,1);
+		      if(rip)
+			od_get_answer("\n\r");
+		      //od_printf("\n\r\n`bright red`Y`red`ou did not manage to steal anything but did not get busted...\n\r`bright red`Y`red`our points went up by
+		      ny_line(117,0,0);
+		      od_printf("%s\n\r",D_Num(intval));
+
+		      points_raise((INT32)20*cur_user.level);
+		      if(!rip)
+			WaitForEnter();
+		      else
+			od_get_answer("\n\r");
+		    }
+		  }
+		}
+	    }
+	} while (key!='Q');
+}
+
+void
+drug_ops(void)
+{
+	char s_key,
+	     t_key,
+	     f_key,
+	     inputs[25];
+	INT32  max,
+	     quant;
+
+			do {
+			  s_key=callmenu("BSUYCQ?\n\r",DRUGS,350,FALSE);
+			  while (expert>0 && s_key=='?') {
+			    expert+=10;
+			    s_key=callmenu("BSUYCQ?\n\r",DRUGS,350,FALSE);
+			    expert-=10;
+			  }
+
+			  if (s_key=='Y') {
+			    DisplayStats();
+			    WaitForEnter();
+			    }
+			  else if (s_key=='B') {           // buy drugs
+
+			    ny_line(156,2,0);
+			    //od_printf("\n\r\n`bright green`Y`green`er drug of choice is: `bright green`");
+			    print_drug(cur_user.drug);
+			    if(rip) {
+			      od_disp_str("::^M@OK))|#|#|#\n\r");
+			      od_get_answer("\n\r");
+			    }
+
+
+			    ny_line(157,2,0);
+			    //od_printf("\n\r\n`bright green`T`green`he price is `bright green`
+			    od_printf("%s",D_Num((INT32)(drug_price[cur_user.drug]*(cur_user.level+1))));
+			    if(!rip)
+			      od_printf("\n\r\n");
+			    else {
+			      od_disp_str("::^M@OK))|#|#|#\n\r");
+			      od_get_answer("\n\r");
+			    }
+			    max=cur_user.money/(drug_price[cur_user.drug]*(cur_user.level+1));
+			    if ((max+cur_user.drug_hits)>INT_MAX) max=INT_MAX-cur_user.drug_hits;
+			    if ((cur_user.drug_hits+max)>max_drug_hits) max=max_drug_hits-cur_user.drug_hits;
+			    if(rip) {
+			      od_send_file("input.rip");
+			    }
+			    ny_line(158,0,0);
+			    //od_printf("`bright green`H`green`ow much ya want? (`bright blue`Enter`green`=`bright green`[0]`green`, `bright blue`M`green`=max `bright green`
+			    od_printf("%d",max);
+			    ny_disp_emu("`2):");
+
+
+			    quant=get_val((DWORD)0,(DWORD)max);
+
+			    cur_user.drug_hits+=quant;
+			    money_minus(quant*(drug_price[cur_user.drug]*(cur_user.level+1)));
+//			    points_raise((DWORD)2*(cur_user.level+1));
+
+			    ny_line(159,1,0);
+//			    od_printf("\n\r`bright red`O`red`k you now have `bright red`
+			    od_printf("%d",cur_user.drug_hits);
+			    ny_line(160,0,1);
+			    //`red` hits!\n\r",cur_user.drug_hits);
+
+			    if(!rip)
+			      WaitForEnter();
+			    else
+			      od_get_answer("\n\r");
+			    }
+			  else if (s_key=='S') {   // Sell drugs
+
+			    ny_line(156,2,0);
+			    //od_printf("\n\r\n`bright green`Y`green`er drug of choice is: `bright green`");
+			    print_drug(cur_user.drug);
+
+			    if(rip) {
+			      od_disp_str("::^M@OK))|#|#|#\n\r");
+			      od_get_answer("\n\r");
+			    }
+
+			    ny_line(161,2,0);
+			    //od_printf("\n\r\n`bright green`Y`green`a can sell it for `bright green`
+			    od_printf("%s",D_Num((INT32)(drug_price[cur_user.drug]*(cur_user.level+1))/2));
+			    if(!rip)
+			      od_printf("\n\r\n");
+			    else {
+			      od_disp_str("::^M@OK))|#|#|#\n\r");
+			      od_get_answer("\n\r");
+			    }
+
+			    max=cur_user.drug_hits;
+
+			    if(rip) {
+			      od_send_file("input.rip");
+			    }
+
+
+			    ny_line(162,0,0);
+			    //od_printf("`bright green`H`green`ow much ya wanna sell? (`bright blue`Enter`green`=`bright green`[0]`green`, `bright blue`M`green`=max `bright green`
+			    od_printf("%d",max);
+			    ny_disp_emu("`2):");
+
+
+			    quant=get_val((DWORD)0,(DWORD)max);
+
+			    cur_user.drug_hits-=quant;
+			    money_plus(quant*((drug_price[cur_user.drug]*(cur_user.level+1))/2));
+//			    points_raise((DWORD)quant*(cur_user.level+1));
+
+			    ny_line(159,1,0);
+			    od_printf("%d",cur_user.drug_hits);
+			    ny_line(160,0,1);
+			    //od_printf("\n\r`bright red`O`red`k you now have `bright red`%d`red` hits!\n\r",cur_user.drug_hits);
+
+			    if(!rip)
+			      WaitForEnter();
+			    else
+			      od_get_answer("\n\r");
+			    }
+			  else if (s_key=='C') {      //change drug
+			    if(rip) no_rip_m=1;
+			    if (cur_user.drug>=COKE && cur_user.drug_addiction>0) {
+
+			      ny_line(163,2,1);
+			      //od_printf("\n\r\n`bright`You are addicted to another drug.... First you heffta get off of that...\n\r");
+
+			      if(!rip)
+				WaitForEnter();
+			      else
+				od_get_answer("\n\r");
+			    } else if (cur_user.drug_high>0) {
+			      ny_line(415,2,1);
+			      if(!rip)
+				WaitForEnter();
+			      else
+				od_get_answer("\n\r");
+			    } else {
+
+			      //if(rip) ny_clr_scr();
+			      ny_line(164,2,2);
+			      //od_printf("\n\r\n`bright red`W`red`hich drug you wanna switch to...\n\r\n`bright green`");
+			      if(!rip) ny_send_menu(CH_DRUG,"");
+/*			      if (cur_user.drug!=POT) od_printf("1`green`. `bright green`P`green`ot\n\r");
+			      if (cur_user.drug!=HASH) od_printf("`bright green`2`green`. `bright green`H`green`ash\n\r");
+			      if (cur_user.drug!=LSD) od_printf("`bright green`3`green`. `bright green`L`green`SD\n\r");
+			      if (cur_user.drug!=COKE) od_printf("`bright green`4`green`. `bright green`C`green`oke\n\r");
+			      if (cur_user.drug!=PCP) od_printf("`bright green`5`green`. `bright green`P`green`CP\n\r");
+			      if (cur_user.drug!=HEROIN) od_printf("`bright green`6`green`. `bright green`H`green`eroin\n\r\n");*/
+
+			      if(!rip) ny_line(165,0,0);
+			      //od_printf("`bright red`S`red`o....(`bright green`[0]`red`=quit):");
+
+			      no_kernel=TRUE;
+			      t_key=ny_get_answer("0123456\n\r");
+			      no_kernel=FALSE;
+			      if (t_key=='\n' || t_key=='\r') t_key='0';
+			      if(!rip) od_putch(t_key);
+			      if (t_key!='0') {
+
+				if(cur_user.drug_hits>0) {
+				  ny_line(166,2,0);
+
+				  //od_printf("`bright red`Y`red`ou'll heffta sell all the hits of yer old drug! Do it?(`bright red`Y`red`/`bright red`N`red`)");
+
+				  f_key=ny_get_answer("YN");
+				  if(!rip) od_putch(f_key);
+				} else {
+				  f_key='Y';
+				}
+				if (f_key!='N') {
+				  money_plus(cur_user.drug_hits*(drug_price[cur_user.drug]*(cur_user.level+1)));
+				  cur_user.drug_hits=0;
+
+				  ny_line(167,2,0);
+				  //od_printf("`bright red`Y`red`er drug of choice set to: `bright green`");
+				  if (t_key=='1') print_drug(cur_user.drug=POT);
+				  else if (t_key=='2') print_drug(cur_user.drug=HASH);
+				  else if (t_key=='3') print_drug(cur_user.drug=LSD);
+				  else if (t_key=='4') print_drug(cur_user.drug=COKE);
+				  else if (t_key=='5') print_drug(cur_user.drug=PCP);
+				  else if (t_key=='6') print_drug(cur_user.drug=HEROIN);
+
+				  wrt_sts();
+				  if(!rip) {
+				    od_printf("\n\r");
+				    WaitForEnter();
+				  } else {
+				    od_disp_str("::^M@OK))|#|#|#\n\r");
+				    od_get_answer("\n\r");
+				  }
+			      /*	} else {
+				  od_printf("\n\r");
+				  WaitForEnter();*/
+				}
+			      }
+			     }
+			    }
+			    else if (s_key=='U') {             //use drugs
+			      take_drug();
+			    }
+			  } while (s_key!='Q');
+}
+
+
+
+
+void
+money_plus(DWORD howmuch)
+{
+  DWORD med;
+
+  med=ULONG_MAX-howmuch;
+  if (med<=cur_user.money)
+    cur_user.money=ULONG_MAX;
+  else
+    cur_user.money+=howmuch;
+  od_control.od_update_status_now=TRUE;
+}
+
+
+
+
+
+void
+money_minus(DWORD howmuch)
+{
+  if (howmuch>=cur_user.money)
+    cur_user.money=0;
+  else
+    cur_user.money-=howmuch;
+  od_control.od_update_status_now=TRUE;
+}
+
+
+char
+ny_get_answer(char *string)
+{
+  INT16 len, cnt=0;
+  time_t t,t2;
+  char key,doker=TRUE;
+
+
+  len=strlen(string);
+  t=time(NULL);
+  t2=t;
+  if(strcmp(string,"YN")!=0 && no_kernel==FALSE) {
+    game_events();
+    doker=TRUE;
+    fig_ker();
+  } else
+    doker=FALSE;
+
+  while (1) {
+    key=od_get_key(FALSE);
+    while (key==NULL) {
+      t=time(NULL);
+      if(t>=t2+check_o_nodes) {
+	if(doker)
+	  fig_ker();
+	t2=t;
+      }
+
+	key=od_get_key(FALSE);
+	od_sleep(0);
+    }
+    cnt=-1;
+    while (cnt++<len) {
+      if (string[cnt]==key) {
+	if(doker)
+	  fig_ker();
+	return key;
+      }
+    }
+    cnt=-1;
+    if (key>='a' && key<='z') key-=32;
+    while (cnt++<len) {
+      if (string[cnt]==key) {
+	if(doker)
+	  fig_ker();
+	return key;
+      }
+    }
+  }
+}
+
+void
+game_events(void)
+{
+  INT16 intval;
+  INT32 intval2;
+  char key;
+
+  if(noevents) return;
+
+  intval=xp_random(100);
+
+  if(intval!=50)
+    return;
+
+  if(!rip)
+    scr_save();
+
+  od_printf("\n\r\n\r");
+  if(!rip) ny_clr_scr();
+
+  intval=xp_random(4)+1;
+  ny_line(183,0,2);
+  if(rip)
+    od_get_answer("\n\r");
+
+  if(intval==1) {
+    if(rip) {
+      od_disp_str("\n\r!|10000((*Ya hear a voice ...::^M@OK))|#|#|#\n\r");
+      od_get_answer("\n\r");
+    }
+    if(registered==FALSE) {
+      ny_line(421,0,1);
+    } else {
+      intval=xp_random(3)+1;
+      ny_line(421+intval,0,1);
+    }
+    if(!rip)
+      WaitForEnter();
+    else
+      od_get_answer("\n\r");
+  } else if(intval==2) {
+    ny_line(184,0,1);
+//    od_printf("`bright red`Y`red`a find a rich new car ...\n\r");
+    if(rip)
+      od_get_answer("\n\r");
+    ny_line(185,0,0);
+//    od_printf("`bright red`S`red`mash it? (`bright red`Y`red`/`bright red`N`red`)");
+
+    key=ny_get_answer("YN");
+
+    if(!rip)
+      od_printf("%c\n\r\n",key);
+    else
+      od_disp_str("\n\r");
+    if (key=='N') {
+      ny_line(189,0,1);
+//      od_printf("`bright red`Y`red`a consider the risks and decide it ain't a good idea\n\r");
+
+      if(!rip)
+	WaitForEnter();
+      else
+	od_get_answer("\n\r");
+      goto donewith;
+    }
+
+    intval=xp_random(100);
+    if (intval<=busted_ch_car) {
+
+//      od_printf("\n\r\n");
+      ny_send_menu(BUSTED,"");
+      //od_printf("\n\r\n`bright white`BUSTED!!!! .... well the police beat the hell out of you .....");
+      //od_printf("\n\rWhy don't you try again tomorrow...\n\r");
+      //od_printf("Ya lost 2%c of yer points!\n\r",37);
+
+      cur_user.alive=UNCONCIOUS;
+      points_loose(cur_user.points*.02);
+      news_post("busting up a car",cur_user.name,"",2);
+      if(!rip)
+	WaitForEnter();
+      else
+	od_get_answer("\n\r");
+      od_exit(10,FALSE);
+    } else {
+      intval=xp_random(100);
+      if(intval<=success_ch_car) {
+
+	ny_line(192,0,1);
+	//od_printf("\n\r\n`bright red`Y`red`ou totally smashed that car .... a very nice job...\n\r");
+	if(rip)
+	  od_get_answer("\n\r");
+	ny_line(117,0,0);
+	od_printf("%s",D_Num((INT32)(25*cur_user.level+25) * (INT32)DrgPtsCoef()));
+
+	points_raise((INT32)25 * cur_user.level+25);
+	if(!rip) {
+	  od_disp_str("\n\r");
+	  WaitForEnter();
+	} else {
+	  od_disp_str("::^M@OK))|#|#|#\n\r");
+	  od_get_answer("\n\r");
+	}
+	goto donewith;
+      } else {
+
+	ny_line(406,0,1);
+
+	if(!rip)
+	  WaitForEnter();
+	else
+	  od_get_answer("\n\r");
+	goto donewith;
+      }
+    }
+  } else if(intval==3) {
+    ny_line(425,0,0);
+    key=ny_get_answer("YN");
+    if(!rip)
+      od_printf("%c\n\r\n",key);
+    else
+      od_disp_str("\n\r");
+    if(key=='Y') {
+      intval=xp_random(2)+1;
+      if(intval==1) {
+	intval2=randomf(40*pow(1.5,(double)cur_user.level));
+	ny_line(426,0,0);
+	od_printf(D_Num(intval));
+	ny_line(427,0,0);
+	key=ny_get_answer("YN");
+	if(!rip)
+	  od_printf("%c\n\r\n",key);
+	else
+	  od_disp_str("\n\r");
+	if (key=='N') {
+	  ny_line(189,0,1);
+	  if(!rip)
+	    WaitForEnter();
+	  else
+	    od_get_answer("\n\r");
+	  goto donewith;
+	}
+	intval=xp_random(3);
+	if (intval==0) {
+	  ny_line(430,0,1);
+	  if(rip)
+	    od_get_answer("\n\r");
+	  ny_line(431,0,1);
+	  money_minus(cur_user.money);
+	  cur_user.hitpoints=1;
+	  wrt_sts();
+	  if(!rip)
+	    WaitForEnter();
+	  else
+	    od_get_answer("\n\r");
+	  goto donewith;
+	}
+	ny_line(429,0,1);
+	money_plus(intval2);
+	points_raise((10 * cur_user.level) + 10);
+	if(!rip)
+	  WaitForEnter();
+	else
+	  od_get_answer("\n\r");
+      } else {
+	ny_line(428,0,0);
+	key=ny_get_answer("YN");
+	if(!rip)
+	  od_printf("%c\n\r\n",key);
+	else
+	  od_disp_str("\n\r");
+	if (key=='N') {
+	  ny_line(189,0,1);
+	  if(!rip)
+	    WaitForEnter();
+	  else
+	    od_get_answer("\n\r");
+	  goto donewith;
+	}
+	intval=xp_random(5);
+	if (intval==0) {
+	  ny_line(430,0,1);
+	  if(rip)
+	    od_get_answer("\n\r");
+	  ny_line(431,0,1);
+	  money_minus(cur_user.money);
+	  cur_user.hitpoints=1;
+	  wrt_sts();
+	  if(!rip)
+	    WaitForEnter();
+	  else
+	    od_get_answer("\n\r");
+	  goto donewith;
+	}
+	ny_line(429,0,1);
+	if (cur_user.drug_hits<32767) cur_user.drug_hits++;
+	points_raise((5 * cur_user.level) + 5);
+	if(!rip)
+	  WaitForEnter();
+	else
+	  od_get_answer("\n\r");
+      }
+    }
+  } else {
+    ny_line(432,0,1);
+    if (cur_user.condoms<32767) cur_user.condoms++;
+    if(!rip)
+      WaitForEnter();
+    else
+      od_get_answer("\n\r");
+  }
+  donewith:
+  if(!rip) scr_res();
+}
+
+DWORD    //value input system
+get_val(DWORD def, DWORD max)
+{
+	char input_s[30];
+	DWORD intval=0;
+	INT16 cnt=0;
+
+
+	uplneZnova:;
+	sprintf(input_s,"%29.29s","");
+//	strset(input_s,' ');
+	input_s[0]= od_get_answer("0123456789M>\n\r");
+	if (input_s[0]=='M' || input_s[0]=='>') {
+	  od_printf("%lu\n\r",max);
+	  return max;
+	} else if (input_s[0]=='\n' || input_s[0]=='\r') {
+	  od_printf("%lu\n\r",def);
+	  return def;
+	}
+	od_printf("%c",input_s[0]);
+
+	cnt=0;
+	while (1) {
+	  if (cnt<29) cnt++; else od_printf("\b");
+	  input_s[cnt]=od_get_answer("0123456789>\n\r\b");
+	  if(input_s[cnt]=='>') {
+	    return max;
+	  } else if (input_s[cnt]=='\n' || input_s[cnt]=='\r') {
+	     input_s[cnt]=' ';
+	     sscanf(input_s,"%lu",&intval);
+	     if (intval>max) {
+	     do {od_printf("\b \b"); cnt--;} while (cnt>0);
+	     intval=max;
+	     od_printf("%lu",max);}
+	     od_printf("\n\r");
+	     break;
+	  }
+	  od_printf("%c",input_s[cnt]);
+	  if (input_s[cnt]=='\b') {
+	    od_printf(" \b");
+	    input_s[cnt]=' ';
+	    cnt--;
+	    input_s[cnt]=' ';
+	    cnt--;
+	    if (cnt == -1) break;
+	    }
+	  }
+	if (cnt == -1) goto uplneZnova;
+	return intval;
+}
+
+
+
+
+
+INT16
+CheckForHandle(char handle[25])
+{
+  FILE *fpUserFile;
+  INT16	user_num,
+	ret_val;
+  char numstr[25],numstr2[25];
+  user_rec urec;
+  scr_rec srec;
+
+  ny_un_emu(handle,numstr);
+  ret_val=FALSE;
+  ch_game_d();
+  fpUserFile = ShareFileOpen(SCR_FILENAME, "rb");
+  if(fpUserFile == NULL) {
+    fpUserFile = ShareFileOpen(USER_FILENAME, "rb");
+    if(fpUserFile == NULL) {
+
+      if(rip) ny_clr_scr();
+      od_printf("\n\r\nUnable to access the user files ... Exitting ...");
+      //
+      od_exit(12,FALSE);
+    }
+    /* Begin with the current user record number set to 0. */
+    user_num = 0;
+    /* Loop for each record in the file */
+    while(ny_fread(&urec, sizeof(user_rec), 1, fpUserFile) == 1) {
+      /* If name in record matches the current user name ... */
+      if(stricmp(ny_un_emu(urec.name,numstr2), numstr) == 0) {
+	/* ... then record that we have found the user's record, */
+	ret_val = TRUE;
+	ny_line(168,1,1);
+//	od_printf("\n\r\n`bright`Sorry that name is already in use ... choose a different one...\n\r");
+	if(!rip)
+	  WaitForEnter();
+	else
+	  od_get_answer("\n\r");
+	/* and exit the loop. */
+	break;
+      }
+      /* Move user record number to next user record. */
+      user_num++;
+//      time_slice();
+    }
+    fclose(fpUserFile);
+    return ret_val;
+  } else {
+    /* Begin with the current user record number set to 0. */
+    user_num = 0;
+    /* Loop for each record in the file */
+    while(ny_fread(&srec, sizeof(scr_rec), 1, fpUserFile) == 1) {
+      /* If name in record matches the current user name ... */
+      if(stricmp(ny_un_emu(srec.name,numstr2), numstr) == 0) {
+	/* ... then record that we have found the user's record, */
+	ret_val = TRUE;
+	ny_line(168,1,1);
+//	od_printf("\n\r\n`bright`Sorry that name is already in use ... choose a different one...\n\r");
+	if(!rip)
+	  WaitForEnter();
+	else
+	  od_get_answer("\n\r");
+	/* and exit the loop. */
+	break;
+      }
+      /* Move user record number to next user record. */
+      user_num++;
+    }
+    fclose(fpUserFile);
+    return ret_val;
+
+
+  }
+}
+
+
+
+
+
+
+/* The ReadOrAddCurrentUser() function is used by NY2008 to search the    */
+/* NY2008 user file for the record containing information on the user who */
+/* is currently using the door. If this is the first time that the user   */
+/* has used this door, then their record will not exist in the user file. */
+/* In this case, this function will add a new record for the current      */
+/* user. This function returns TRUE on success, or FALSE on failure.      */
+INT16 ReadOrAddCurrentUser(void)
+{
+   FILE *fpUserFile;
+   FILE *scr_file;
+   INT16 bGotUser = FALSE;
+//   ffblk ffblk;
+   char key;
+   char handle[25];
+   scr_rec scr_user;
+
+   /* Attempt to open the user file for exclusize access by this node.     */
+   /* This function will wait up to the pre-set amount of time (as defined */
+   /* near the beginning of this file) for access to the user file.        */
+
+ nCurrentUserNumber=0;
+ ch_game_d();
+ if (fexist(USER_FILENAME)) {
+   fpUserFile = ShareFileOpen(USER_FILENAME, "a+b");
+
+
+   /* If unable to open user file, return with failure. */
+   if(fpUserFile == NULL)
+      return FALSE;
+
+   /* Begin with the current user record number set to 0. */
+   fseek(fpUserFile, (INT32)0, SEEK_SET);
+ //  nCurrentUserNumber = 0; nahore se to ted dela^^^^^
+
+   /* Loop for each record in the file */
+   while(ny_fread(&cur_user, sizeof(user_rec), 1, fpUserFile) == 1)
+   {
+      /* If name in record matches the current user name ... */
+      if(strcmp(cur_user.bbsname, od_control.user_name) == 0)
+      {
+	 /* ... then record that we have found the user's record, */
+	 bGotUser = TRUE;
+
+	 /* and exit the loop. */
+	 break;
+      }
+
+      /* Move user record number to next user record. */
+      nCurrentUserNumber++;
+      od_kernal();
+   }
+
+   /* Close the user file to allow other nodes to access it. */
+   fclose(fpUserFile);
+ } //else {
+
+// }
+   /* If the user was not found in the file, attempt to add them as a */
+   /* new user if the user file is not already full.                  */
+   if(!bGotUser && nCurrentUserNumber < MAX_USERS)
+   {
+      od_printf("\n\r\n");
+      ny_clr_scr();
+//
+      ny_send_menu(NEW,"");
+
+/*      od_printf("\n\r`bright red`W`red`elcome `bright red`T`red`o `bright red`N`red`ew `bright red`Y`red`ork `bright red`2008\n\r\n");
+      od_printf("`bright green`T`green`his game is quite self explanatory... `bright green`T`green`hough here is yer mission...\n\r");
+      od_printf("`bright green`Y`green`ou are the child of terrorism, your grandfathers could only dream of what you\n\rare about to do ");
+      od_printf("...`bright green`B`green`low up `bright red`N`red`ew `bright red`Y`red`ork `green`... \n\r");
+      od_printf("`bright green`F`green`or this you will need an `bright green`ATOMIC BOMB`green`...\n\r\n");
+      od_printf("`bright`THIS IS THE BETA VERSION (still might have bugs I guess)... \n\r");
+      od_printf("`bright red`H`red`ere are a few tips: (read the instructions anywayz!)\n\r");
+      od_printf("`bright red`I`red`f you get drug addiction of an addictive drug to 100%c you die and heffta start\n\r",37);
+      od_printf("over. `bright red`S`red`ame with hunger and sexual deseases ... so watch those percentages.\n\r");
+      od_printf("`bright red`A`red`lso read instructions on the efects of drugs ...\n\r");
+      od_printf("`bright red`O`red`ne more tip, if you don't have sex fer a while, your attack\n\r");
+      od_printf("force goes down. `bright red`K`red`eep it in mind!\n\r");
+      od_printf("`bright red`C`red`olors can be used in messages and in the stuff you say or namez!\n\r\n");*/
+
+
+
+      ny_line(169,0,0);
+//      ny_disp_emu("`9T`1his game contains violence, sex, drugs... `9Y`1a sure ya can handle that?(`9Y`1/`9N`1)");
+//
+      key=ny_get_answer("YN");
+      od_putch(key);
+      if (key=='N') {
+	 if(!rip) ny_clr_scr();
+	 ny_line(170,2,2);
+	 //od_printf("\n\r`bright red`N`red`ot everybody was born with a vicious mind....\n\r");
+	 od_exit(10,FALSE);
+	 }
+AskAgain:;
+
+      do {
+
+	  od_printf("\n\r\n");
+	  ny_clr_scr();
+	  if(rip) od_send_file("texti.rip");
+	  ny_line(171,1,2);
+//	  od_printf("\n\r`bright red`N`red`ow that we got through that, I'll heffta ask ya a few questions...\n\r\n");
+	  ny_line(172,0,0);
+	  //od_printf("`bright green`W`green`hat is yer name: ");
+//
+	  od_input_str(handle,24,' ',255);
+	  trim(handle);
+
+//	  WaitForEnter();
+
+      } while ((nCurrentUserNumber!=0 && CheckForHandle(handle)!=FALSE) || handle[0]==0);
+
+
+
+//	  WaitForEnter();
+
+	  strcpy(cur_user.name, handle);
+//
+
+//	  WaitForEnter();
+//
+	  ny_line(173,1,0);
+//
+//	  od_printf("\n\r\n`bright red`W`red`hat is your sex (`bright red`M`red`/`bright red`F`red`):");
+
+//	  WaitForEnter();
+
+
+	  key=od_get_answer("MF");
+//
+	  if(!rip)
+	    od_printf("%c\n\r\n",key);
+	  else
+	    od_disp_str("\n\r");
+//
+
+	  if (key=='M') cur_user.sex = MALE; else cur_user.sex = FEMALE;
+
+	  if(!rip) ny_send_menu(NATION,"");
+/*	  od_printf("\n\r\n`bright red`W`red`hat are you....\n\r\n");
+	  od_printf("`bright green`1`green`. `bright green`H`green`eadbanger\n\r");
+	  od_printf("`bright green`2`green`. `bright green`H`green`ippie\n\r");
+	  od_printf("`bright green`3`green`. `bright green`B`green`ig `bright green`F`green`at `bright green`D`green`ude\n\r");
+	  od_printf("`bright green`4`green`. `bright green`C`green`rack `bright green`A`green`ddict\n\r");
+	  od_printf("`bright green`5`green`. `bright green`P`green`unk\n\r\n");*/
+	  ny_line(174,0,0);
+	  //od_printf("`bright red`W`red`ell? :");
+	  //
+	  key=od_get_answer("12345");
+	  //
+	  if(!rip)
+	    od_printf("%c\n\r\n",key);
+	  else
+	    od_disp_str("\n\r\n");
+	  //
+
+	  switch(key) {
+	    case '1':
+	      cur_user.nation = HEADBANGER; break;
+	    case '2':
+	      cur_user.nation = HIPPIE; break;
+	    case '3':
+	      cur_user.nation = BIG_FAT_DUDE; break;
+	    case '4':
+	      cur_user.nation = CRACK_ADDICT; break;
+	    case '5':
+	      cur_user.nation = PUNK; break;
+	  }
+
+	  ny_send_menu(NEW_WIN,"");
+	  //What do you say when you win:
+	  //|--------------------------------------|
+	  od_input_str(cur_user.say_win,40,' ',255);
+
+	  od_printf("\n\r\n");
+	  ny_send_menu(NEW_LOOSE,"");
+	  //What do you say when you get yer ass kicked:
+	  //|--------------------------------------|
+	  od_input_str(cur_user.say_loose,40,' ',255);
+
+
+	  ny_line(175,2,0);
+//	  od_printf("\n\r\n`bright blue`D`blue`id ya enter all that stuff correctly?(`bright blue`Y`blue`/`bright blue`N`blue`)");
+	  key=ny_get_answer("YN");
+	  if(!rip) od_putch(key);
+	  if (key=='N') goto AskAgain;
+
+	strcpy(cur_user.bbsname, od_control.user_name);
+
+/*tady se potrebuje initializovat user*/
+//
+	ny_line(176,2,2);
+//	od_printf("`bright blue`\n\r\nResetting User Record....\n\r\n");
+
+	cur_user.level=0;
+	cur_user.points=0;
+	cur_user.alive=ALIVE;
+	cur_user.turns=max_fights;
+	cur_user.hunger=0;
+	cur_user.hitpoints=cur_user.maxhitpoints=15;
+
+	if (cur_user.nation==HEADBANGER){
+	  cur_user.strength=5;
+	  cur_user.defense=4;
+	  cur_user.throwing_ability=10;
+	  cur_user.punch_ability=10;
+	  cur_user.kick_ability=20;
+	} else if (cur_user.nation==HIPPIE) {
+	  cur_user.strength=4;
+	  cur_user.defense=4;
+	  cur_user.throwing_ability=20;
+	  cur_user.punch_ability=10;
+	  cur_user.kick_ability=10;
+	} else if (cur_user.nation==BIG_FAT_DUDE) {
+	  cur_user.strength=3;
+	  cur_user.defense=6;
+	  cur_user.throwing_ability=4;
+	  cur_user.punch_ability=18;
+	  cur_user.kick_ability=18;
+	} else if (cur_user.nation==CRACK_ADDICT){
+	  cur_user.strength=4;
+	  cur_user.defense=5;
+	  cur_user.throwing_ability=14;
+	  cur_user.punch_ability=13;
+	  cur_user.kick_ability=13;
+	} else if (cur_user.nation==PUNK) {
+	  cur_user.strength=6;
+	  cur_user.defense=3;
+	  cur_user.throwing_ability=11;
+	  cur_user.punch_ability=20;
+	  cur_user.kick_ability=11;
+	}
+
+	cur_user.days_not_on=0;
+	cur_user.money=75;
+	cur_user.bank=0;
+	cur_user.arm=HANDS;
+	cur_user.condoms=0;
+	cur_user.since_got_laid=0;
+	cur_user.sex_today=1;
+	cur_user.std=NONE;
+	cur_user.std_percent=0;
+	cur_user.drug=POT;
+	cur_user.drug_hits=0;
+	cur_user.drug_addiction=0;
+	cur_user.drug_high=0;
+	cur_user.drug_days_since=0;
+	cur_user.rank=nCurrentUserNumber;
+	cur_user.rest_where=NOWHERE;
+	cur_user.hotel_paid_fer=0;
+	cur_user.days_in_hospital=0;
+	cur_user.rocks=0;
+	cur_user.InterBBSMoves=2;
+	cur_user.res1=0;
+	cur_user.res2=0;
+//	cur_user.res3=0;
+//	cur_user.res4=0;
+
+	strcpy(scr_user.name,cur_user.name);
+	scr_user.nation=cur_user.nation;
+	scr_user.level=0;
+	scr_user.points=0;
+	scr_user.alive=ALIVE;
+	scr_user.sex=cur_user.sex;
+	scr_user.user_num=nCurrentUserNumber;
+
+
+      ny_line(177,0,2);
+      //od_printf("`bright blue`\n\r\nWriting to user file....\n\r\n");
+//      if (bGotUser && cur_user.alive==DEAD && do_maint==FALSE)
+      ch_game_d();
+      fpUserFile = ShareFileOpen(USER_FILENAME, "a+b");
+      scr_file = ShareFileOpen(SCR_FILENAME, "a+b");
+
+
+
+      /* Write the new record to the file. */
+      if(ny_fwrite(&cur_user, sizeof(user_rec), 1, fpUserFile) == 1)
+      {
+	 /* If write succeeded, record that we now have a valid user record. */
+	 bGotUser = TRUE;
+      }
+      ny_fwrite(&scr_user, sizeof(scr_rec), 1, scr_file);
+      fclose(scr_file);
+      fclose(fpUserFile);
+      ny_remove(SENTLIST_FILENAME);
+   }
+
+   /* Return, indciating whether or not a valid user record now exists for */
+   /* the user that is currently online.                                   */
+   return bGotUser;
+}
+
+
+
+/* The WriteCurrentUser() function is called to save the information on the */
+/* user who is currently using the door, to the ny2008.USR file.            */
+void WriteCurrentUser(void)
+{
+   FILE *fpUserFile;
+
+   /* Attempt to open the user file for exclusize access by this node.     */
+   /* This function will wait up to the pre-set amount of time (as defined */
+   /* near the beginning of this file) for access to the user file.        */
+   ch_game_d();
+   fpUserFile = ShareFileOpen(USER_FILENAME, "r+b");
+
+   /* If unable to access the user file, display an error message and */
+   /* return.                                                         */
+   if(fpUserFile == NULL)
+   {
+      if(rip) ny_clr_scr();
+      od_printf("Unable to access the user file.\n\r");
+      WaitForEnter();
+      return;
+   }
+
+   /* Move to appropriate location in user file for the current user's */
+   /* record. */
+   fseek(fpUserFile, (INT32)nCurrentUserNumber * sizeof(user_rec), SEEK_SET);
+
+   /* Write the new record to the file. */
+   if(ny_fwrite(&cur_user, sizeof(user_rec), 1, fpUserFile) == 0)
+   {
+      /* If unable to write the record, display an error message. */
+      fclose(fpUserFile);
+      if(rip) ny_clr_scr();
+      od_printf("Unable to update your user record file.\n\r");
+      WaitForEnter();
+      return;
+   }
+
+   /* Close the user file to allow other nodes to access it again. */
+   fclose(fpUserFile);
+}
+
+size_t
+ny_fwrite(const void *ptr, size_t size, size_t n, FILE *stream)
+{
+  size_t status;
+  INT32 offset;
+  offset=ftell(stream);
+
+  if(single_node==FALSE && filelength(fileno(stream))>=offset+(size*n)) {
+    //offset=ftell(stream);
+
+    lock(fileno(stream),offset,size * n);
+    status=fwrite(ptr,size,n,stream);
+    unlock(fileno(stream),offset,size * n);
+  } else {
+    status=fwrite(ptr,size,n,stream);
+  }
+  if(!no_slices)
+    time_slice();
+  return status;
+}
+
+
+size_t
+ny_fread(void *ptr, size_t size, size_t n, FILE *stream)
+{
+  size_t status;
+  INT32 offset;
+
+  if(single_node==FALSE && filelength(fileno(stream))>=offset+(size*n)) {
+    offset=ftell(stream);
+
+    lock(fileno(stream),offset,size * n);
+    status=fread(ptr,size,n,stream);
+    unlock(fileno(stream),offset,size * n);
+  } else {
+    status=fread(ptr,size,n,stream);
+  }
+  if(!no_slices)
+    time_slice();
+  return status;
+}
+
+/* This function opens the specified file in the specified mode for         */
+/* share access by this node; while the file is open, other nodes will      */
+/* be able to open the file. This function will wait for up to the number   */
+/* of seconds set by FILE_ACCESS_MAX_WAIT, which is defined near the        */
+/* beginning of this file.                                                  */
+FILE *ShareFileOpen(char *pszFileName, char *pszMode)
+{
+   FILE *fpFile = NULL;
+   time_t StartTime = time(NULL);
+   char numstr[14];
+//   ffblk ffblk;
+//   ny_kernel();
+
+
+   /* Attempt to open the file while there is still time remaining. */
+   if(single_node==FALSE) {
+     if(no_kernel==FALSE) {
+       ny_kernel();
+       sprintf(numstr,"u%07d.rnk",nCurrentUserNumber);
+       if (fexist(numstr)) {
+	 no_kernel=TRUE;
+	 fpFile=ShareFileOpen(numstr,"rb");
+	 ny_fread(&cur_user.rank,2,1,fpFile);
+	 no_kernel=FALSE;
+	 fclose(fpFile);
+	 ny_remove(numstr);
+	 wrt_sts();
+       }
+     }
+
+     while((fpFile = _fsopen(pszFileName, pszMode,SH_DENYNO)) == NULL
+	&& errno == EACCES
+	&& difftime(time(NULL), StartTime) < FILE_ACCESS_MAX_WAIT)
+     {
+      /* If we were unable to open the file, call od_kernal, so that    */
+      /* OpenDoors can continue to respond to sysop function keys, loss */
+      /* of connection, etc.                                            */
+	od_kernal();
+     }
+   } else {
+     fpFile = fopen(pszFileName, pszMode);
+   }
+
+   if(fpFile==NULL)
+      fpFile=fopen("cruft.tmp","w+");
+
+   /* Return FILE pointer for opened file, if any. */
+   return fpFile;
+}
+
+
+FILE *ShareFileOpenAR(char *pszFileName, char *pszMode)
+{
+   FILE *fpFile = NULL;
+   time_t StartTime = time(NULL);
+   char numstr[14];
+//   ffblk ffblk;
+//   ny_kernel();
+
+
+   /* Attempt to open the file while there is still time remaining. */
+
+   if(single_node==FALSE) {
+
+     if(no_kernel==FALSE) {
+       ny_kernel();
+       sprintf(numstr,"u%07d.rnk",nCurrentUserNumber);
+       if (fexist(numstr)) {
+	 no_kernel=TRUE;
+	 fpFile=ShareFileOpen(numstr,"rb");
+	 ny_fread(&cur_user.rank,2,1,fpFile);
+	 no_kernel=FALSE;
+	 fclose(fpFile);
+	 ny_remove(numstr);
+	 wrt_sts();
+       }
+     }
+
+     while((fpFile = fopen(pszFileName, pszMode)) == NULL
+	&& errno == EACCES
+	&& difftime(time(NULL), StartTime) < FILE_ACCESS_MAX_WAIT)
+     {
+      /* If we were unable to open the file, call od_kernal, so that    */
+      /* OpenDoors can continue to respond to sysop function keys, loss */
+      /* of connection, etc.                                            */
+	od_kernal();
+     }
+   } else {
+     fpFile = fopen(pszFileName, pszMode);
+
+   }
+
+   if(fpFile==NULL)
+      fpFile=fopen("cruft.tmp","w+");
+
+   /* Return FILE pointer for opened file, if any. */
+   return fpFile;
+}
+
+
+INT16
+ny_remove(char *pszFileName)
+{
+//   FILE *fpFile = NULL;
+   time_t StartTime;
+//   char numstr[80];
+//   ffblk ffblk;
+//   ny_kernel();
+	char **fname;
+
+/*  if(findfirst(pszFileName,&fff,0)!=0) return 0; */
+  if(glob(pszFileName,0,NULL,&fff)!=0) return 0;
+
+  for(fname=fff.gl_pathv;*fname!=NULL;fname++) {
+   StartTime = time(NULL);
+   /* Attempt to open the file while there is still time remaining. */
+   if(single_node==FALSE) {
+     while(remove(*fname) == -1
+	&& errno == EACCES
+	&& difftime(time(NULL), StartTime) < FILE_ACCESS_MAX_WAIT)
+     {
+      /* If we were unable to open the file, call od_kernal, so that    */
+      /* OpenDoors can continue to respond to sysop function keys, loss */
+      /* of connection, etc.                                            */
+	od_kernal();
+     }
+   } else {
+     remove(*fname);
+   }
+  };
+
+  return 1;
+}
+
+
+
+/* The WaitForEnter() function is used to create custom prompt */
+void
+WaitForEnter(void)
+{
+   /* Display prompt. */
+
+   ny_line(1,1,0);
+//   ny_disp_emu("\n\r`@Smack [ENTER] to go on.");
+
+
+
+   /* Wait for a Carriage Return or Line Feed character from the user. */
+   ny_get_answer("\n\r");
+
+   //debug
+//   od_printf("%d\n\r",nCurrentUserNumber);
+//   ny_get_answer("\n\r");
+}
+
+
+
+
+/* CustomConfigFunction() is called by OpenDoors to process custom */
+/* configuration file keywords that                                */
+void CustomConfigFunction(char *pszKeyword, char *pszOptions)
+{
+  if(stricmp(pszKeyword, "BustedChanceBank") == 0)
+  {
+    sscanf(pszOptions,"%d",&busted_ch_bank);
+    if (busted_ch_bank<1) busted_ch_bank=1;
+    if (busted_ch_bank>90) busted_ch_bank=90;
+  }
+  else if(stricmp(pszKeyword, "BustedChanceFood") == 0)
+  {
+    sscanf(pszOptions,"%d",&busted_ch_food);
+    if (busted_ch_food<1) busted_ch_food=1;
+    if (busted_ch_food>90) busted_ch_food=90;
+  }
+  else if(stricmp(pszKeyword, "BustedChanceRape") == 0)
+  {
+    sscanf(pszOptions,"%d",&busted_ch_rape);
+    if (busted_ch_rape<1) busted_ch_rape=1;
+    if (busted_ch_rape>90) busted_ch_rape=90;
+  }
+  else if(stricmp(pszKeyword, "BustedChanceBeggar") == 0)
+  {
+    sscanf(pszOptions,"%d",&busted_ch_beggar);
+    if (busted_ch_beggar<1) busted_ch_beggar=1;
+    if (busted_ch_beggar>90) busted_ch_beggar=90;
+  }
+  else if(stricmp(pszKeyword, "BustedChanceCar") == 0)
+  {
+    sscanf(pszOptions,"%d",&busted_ch_car);
+    if (busted_ch_car<1) busted_ch_car=1;
+    if (busted_ch_car>90) busted_ch_car=90;
+  }
+  else if(stricmp(pszKeyword, "BustedChanceSchool") == 0)
+  {
+    sscanf(pszOptions,"%d",&busted_ch_school);
+    if (busted_ch_school<1) busted_ch_school=1;
+    if (busted_ch_school>90) busted_ch_school=90;
+  }
+  else if(stricmp(pszKeyword, "BustedChanceWindow") == 0)
+  {
+    sscanf(pszOptions,"%d",&busted_ch_window);
+    if (busted_ch_window<1) busted_ch_window=1;
+    if (busted_ch_window>90) busted_ch_window=90;
+  }
+  else if(stricmp(pszKeyword, "BustedChancePoison") == 0)
+  {
+    sscanf(pszOptions,"%d",&busted_ch_poison);
+    if (busted_ch_poison<1) busted_ch_poison=1;
+    if (busted_ch_poison>90) busted_ch_poison=90;
+  }
+  else if(stricmp(pszKeyword, "BustedChanceBomb") == 0)
+  {
+    sscanf(pszOptions,"%d",&busted_ch_bomb);
+    if (busted_ch_bomb<1) busted_ch_bomb=1;
+    if (busted_ch_bomb>90) busted_ch_bomb=90;
+  }
+  else if(stricmp(pszKeyword, "SuccessChanceBank") == 0)
+  {
+    sscanf(pszOptions,"%d",&success_ch_bank);
+    if (success_ch_bank<1) success_ch_bank=1;
+    if (success_ch_bank>100) success_ch_bank=100;
+  }
+  else if(stricmp(pszKeyword, "SuccessChanceFood") == 0)
+  {
+    sscanf(pszOptions,"%d",&success_ch_food);
+    if (success_ch_food<1) success_ch_food=1;
+    if (success_ch_food>100) success_ch_food=100;
+  }
+  else if(stricmp(pszKeyword, "SuccessChanceRape") == 0)
+  {
+    sscanf(pszOptions,"%d",&success_ch_rape);
+    if (success_ch_rape<1) success_ch_rape=1;
+    if (success_ch_rape>100) success_ch_rape=100;
+  }
+  else if(stricmp(pszKeyword, "SuccessChanceBeggar") == 0)
+  {
+    sscanf(pszOptions,"%d",&success_ch_beggar);
+    if (success_ch_beggar<1) success_ch_beggar=1;
+    if (success_ch_beggar>100) success_ch_beggar=100;
+  }
+  else if(stricmp(pszKeyword, "SuccessChanceCar") == 0)
+  {
+    sscanf(pszOptions,"%d",&success_ch_car);
+    if (success_ch_car<1) success_ch_car=1;
+    if (success_ch_car>100) success_ch_car=100;
+  }
+  else if(stricmp(pszKeyword, "SuccessChanceSchool") == 0)
+  {
+    sscanf(pszOptions,"%d",&success_ch_school);
+    if (success_ch_school<1) success_ch_school=1;
+    if (success_ch_school>100) success_ch_school=100;
+  }
+  else if(stricmp(pszKeyword, "SuccessChanceWindow") == 0)
+  {
+    sscanf(pszOptions,"%d",&success_ch_window);
+    if (success_ch_window<1) success_ch_window=1;
+    if (success_ch_window>100) success_ch_window=100;
+  }
+  else if(stricmp(pszKeyword, "SuccessChancePoison") == 0)
+  {
+    sscanf(pszOptions,"%d",&success_ch_poison);
+    if (success_ch_poison<1) success_ch_poison=1;
+    if (success_ch_poison>100) success_ch_poison=100;
+  }
+  else if(stricmp(pszKeyword, "SuccessChanceBomb") == 0)
+  {
+    sscanf(pszOptions,"%d",&success_ch_bomb);
+    if (success_ch_bomb<1) success_ch_bomb=1;
+    if (success_ch_bomb>100) success_ch_bomb=100;
+  }
+  else if(stricmp(pszKeyword, "FightsPerDay") == 0)
+  {
+    sscanf(pszOptions,"%d",&max_fights);
+    if (max_fights<0) max_fights=0;
+    if (max_fights>800) max_fights=800;
+  }
+  else if(stricmp(pszKeyword, "MaintExec") == 0)
+  {
+    strcpy(maint_exec,pszOptions);
+  }
+  else if(stricmp(pszKeyword, "RegCreditTo") == 0)
+  {
+    strncpy(rec_credit,pszOptions,35);
+  }
+  else if(stricmp(pszKeyword, "SingleNodeOnly") == 0)
+  {
+    single_node=TRUE;
+  }
+  else if(stricmp(pszKeyword, "NoMultitasker") == 0)
+  {
+    no_slices=TRUE;
+  }
+  else if(stricmp(pszKeyword, "DeleteAfter") == 0)
+  {
+    sscanf(pszOptions,"%d",&delete_after);
+    if (delete_after<5) delete_after=5;
+    if (delete_after>800) delete_after=800;
+  }
+  else if(stricmp(pszKeyword, "PollingValue") == 0)
+  {
+    sscanf(pszOptions,"%d",&time_slice_value);
+    if (time_slice_value<0) time_slice_value=0;
+    if (time_slice_value>2000) time_slice_value=2000;
+  }
+  else if(stricmp(pszKeyword, "CheckFlagsEvery") == 0)
+  {
+    sscanf(pszOptions,"%d",&check_o_nodes);
+    if (check_o_nodes<1) check_o_nodes=1;
+    if (check_o_nodes>60) check_o_nodes=60;
+  }
+    else if(stricmp(pszKeyword, "BankInterest") == 0)
+  {
+    sscanf(pszOptions,"%d",&bank_interest);
+    if (bank_interest<0) bank_interest=0;
+    if (bank_interest>100) bank_interest=100;
+  }
+  else if(stricmp(pszKeyword, "AnsiScores") == 0)
+  {
+    strcpy(ansi_name,pszOptions);
+  }
+  else if(stricmp(pszKeyword, "AsciiScores") == 0)
+  {
+    strcpy(ascii_name,pszOptions);
+  }
+  else if(stricmp(pszKeyword, "NoScoreFiles") == 0)
+  {
+    do_scr_files=FALSE;
+  }
+  else if(stricmp(pszKeyword, "FlagDirectory") == 0)
+  {
+    strupr(pszOptions);
+
+    flagdisk=(*pszOptions) - 'A';
+
+    strzcpy(flagdir,pszOptions,2,MAX_PATH);
+  }
+  else if(stricmp(pszKeyword, "InterBBS") == 0)
+  {
+    ibbs=TRUE;
+  }
+  else if(stricmp(pszKeyword, "InterBBSOperator") == 0)
+  {
+    ibbs_operator=TRUE;
+  }
+  else if(stricmp(pszKeyword, "InterBBSGameNumber") == 0)
+  {
+    sscanf(pszOptions,"%d",&ibbs_game_num);
+  }
+
+}
+
+void
+nyr_disp_emu(char line[])
+{
+  INT16 cnt,intval;
+  FILE *justfile;
+
+  for(cnt=0;line[cnt]!=0;cnt++) {
+    if(line[cnt]=='`') {
+      cnt++;
+      if(line[cnt]==0)
+	return;
+      else if(line[cnt]=='`')
+	od_putch('`');
+      else if(line[cnt]=='v')
+	od_printf(ver);
+      else if(line[cnt]=='w')
+	od_printf(verinfo);
+      else if(line[cnt]=='r') {
+	if(registered==TRUE) {
+	  od_printf("%ce%cistere%c to %s",'R','g','d',od_control.system_name);
+	} else {
+	  od_printf("%cN%cE%cISTERE%c",'U','R','G','D');
+	}
+      } else if(line[cnt]=='d') {
+	ch_game_d();
+	justfile=ShareFileOpen(GAMEDAY_FILENAME,"rb");
+	ny_fread(&intval,2,1,justfile);
+	fclose(justfile);
+	od_printf("%d",intval);
+      } else if(line[cnt]=='h')
+	od_printf("%s",D_Num(cur_user.hitpoints));
+      else if(line[cnt]=='m')
+	od_printf("%s",D_Num(cur_user.money));
+      else if(line[cnt]=='f')
+	od_printf("%d",(INT16)cur_user.turns);
+      else if(line[cnt]=='p')
+	od_printf("%s",D_Num(cur_user.points));
+    } else if (line[cnt]==9) {
+      od_printf("        ");
+    } else {
+      od_putch(line[cnt]);
+    }
+  }
+}
+
+
+
+void
+ny_disp_emu(char line[])
+{
+  INT16 cnt;
+//  if(rip) {
+//    od_control.user_rip=FALSE;
+
+  for(cnt=0;line[cnt]!=0;cnt++) {
+    if(line[cnt]=='`') {
+      cnt++;
+      if(!rip) {
+	if(line[cnt]==0)
+	  return;
+	else if(line[cnt]=='`')
+	  od_putch('`');
+	else if(line[cnt]=='v')
+	  od_printf(ver);
+	else if(line[cnt]=='w')
+	  od_printf(verinfo);
+	else if(line[cnt]=='0')
+	  od_set_attrib(0x0a);
+	else if(line[cnt]=='1')
+	  od_set_attrib(0x01);
+	else if(line[cnt]=='2')
+	  od_set_attrib(0x02);
+	else if(line[cnt]=='3')
+	  od_set_attrib(0x03);
+	else if(line[cnt]=='4')
+	  od_set_attrib(0x04);
+	else if(line[cnt]=='5')
+	  od_set_attrib(0x05);
+	else if(line[cnt]=='6')
+	  od_set_attrib(0x06);
+	else if(line[cnt]=='7')
+	  od_set_attrib(0x07);
+	else if(line[cnt]=='8')
+	  od_set_attrib(0x08);
+	else if(line[cnt]=='9')
+	  od_set_attrib(0x09);
+	else if(line[cnt]=='!')
+	  od_set_attrib(0x0b);
+	else if(line[cnt]=='@')
+	  od_set_attrib(0x0c);
+	else if(line[cnt]=='#')
+	  od_set_attrib(0x0d);
+	else if(line[cnt]=='$')
+	  od_set_attrib(0x0e);
+	else if(line[cnt]=='%')
+	  od_set_attrib(0x0f);
+      } else {
+	if(line[cnt]==0)
+	  return;
+	else if(line[cnt]=='`')
+	  od_putch('`');
+	else if(line[cnt]=='v')
+	  od_printf(ver);
+	else if(line[cnt]=='w')
+	  od_printf(verinfo);
+	else if(line[cnt]=='0')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='1')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='2')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='3')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='4')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='5')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='6')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='7')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='8')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='9')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='!')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='@')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='#')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='$')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='%')
+	  od_disp_emu("",TRUE);
+      }
+    } else if (line[cnt]==9) {
+      od_printf("        ");
+    } else {
+      od_putch(line[cnt]);
+    }
+  }
+//  if(rip) od_control.user_rip=TRUE;
+  od_kernal();
+}
+
+
+void
+ny_disp_emu(char line[],INT16 min)
+{
+  INT16 cnt;
+  INT16 len;
+
+  len=0;
+
+  //od_control.user_rip=FALSE;
+
+  for(cnt=0;line[cnt]!=0 && len<min;cnt++) {
+    if(line[cnt]=='`') {
+      cnt++;
+      if(!rip) {
+	if(line[cnt]==0)
+	  return;
+	else if(line[cnt]=='`') {
+	  od_putch('`');
+	  len++;
+	} else if(line[cnt]=='v') {
+	  od_printf(ver);
+	  len+=(strlen(ver) - 1);
+	} else if(line[cnt]=='w') {
+	  od_printf(verinfo);
+	  len+=(strlen(verinfo) - 1);
+	} else if(line[cnt]=='0')
+	  od_set_attrib(0x0a);
+	else if(line[cnt]=='1')
+	  od_set_attrib(0x01);
+	else if(line[cnt]=='2')
+	  od_set_attrib(0x02);
+	else if(line[cnt]=='3')
+	  od_set_attrib(0x03);
+	else if(line[cnt]=='4')
+	  od_set_attrib(0x04);
+	else if(line[cnt]=='5')
+	  od_set_attrib(0x05);
+	else if(line[cnt]=='6')
+	  od_set_attrib(0x06);
+	else if(line[cnt]=='7')
+	  od_set_attrib(0x07);
+	else if(line[cnt]=='8')
+	  od_set_attrib(0x08);
+	else if(line[cnt]=='9')
+	  od_set_attrib(0x09);
+	else if(line[cnt]=='!')
+	  od_set_attrib(0x0b);
+	else if(line[cnt]=='@')
+	  od_set_attrib(0x0c);
+	else if(line[cnt]=='#')
+	  od_set_attrib(0x0d);
+	else if(line[cnt]=='$')
+	  od_set_attrib(0x0e);
+	else if(line[cnt]=='%')
+	  od_set_attrib(0x0f);
+      } else {
+	if(line[cnt]==0)
+	  return;
+	else if(line[cnt]=='`') {
+	  od_putch('`');
+	  len++;
+	} else if(line[cnt]=='v') {
+	  od_printf(ver);
+	  len+=(strlen(ver) - 1);
+	} else if(line[cnt]=='w') {
+	  od_printf(verinfo);
+	  len+=(strlen(verinfo) - 1);
+	} else if(line[cnt]=='0')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='1')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='2')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='3')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='4')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='5')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='6')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='7')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='8')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='9')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='!')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='@')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='#')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='$')
+	  od_disp_emu("",TRUE);
+	else if(line[cnt]=='%')
+	  od_disp_emu("",TRUE);
+      }
+    } else if (line[cnt]==9) {
+      len+=8;
+      if (min-len>=8)
+	od_printf("        ");
+      else
+	od_repeat(' ',min-len);
+    } else {
+      len++;
+      od_putch(line[cnt]);
+    }
+  }
+//  if(rip) od_control.user_rip=TRUE;
+  od_repeat(' ',min-len);
+}
+
+
+char
+*ny_un_emu(char line[])
+{
+  INT16 cnt;
+  INT16 len;
+  char *out;
+
+  len=strlen(line);
+
+  out=(char *)malloc(len);
+
+  len=0;
+
+  for(cnt=0;line[cnt]!=0;cnt++) {
+    if(line[cnt]=='`') {
+      cnt++;
+      if(line[cnt]==0) {
+	out[len]=0;
+	return out;
+      } else if(line[cnt]=='`') {
+	out[len]='`';
+	len++;
+      } else if(line[cnt]=='v') {
+	out[len]=0;
+	strcat(out,ver);
+	len+=strlen(ver);
+      } else if(line[cnt]=='w') {
+	out[len]=0;
+	strcat(out,verinfo);
+	len+=strlen(verinfo);
+      }
+
+    } else {
+      out[len]=line[cnt];
+      len++;
+    }
+  }
+  out[len]=0;
+  strcpy(line,out);
+  free(out);
+  return line;
+}
+
+char
+*ny_un_emu(char line[],char out[])
+{
+  INT16 cnt;
+  INT16 len;
+
+  len=0;
+
+  for(cnt=0;line[cnt]!=0;cnt++) {
+    if(line[cnt]=='`') {
+      cnt++;
+      if(line[cnt]==0) {
+	out[len]=0;
+	return out;
+      } else if(line[cnt]=='`') {
+	out[len]='`';
+	len++;
+      } else if(line[cnt]=='v') {
+	out[len]=0;
+	strcat(out,ver);
+	len+=strlen(ver);
+      } else if(line[cnt]=='w') {
+	out[len]=0;
+	strcat(out,verinfo);
+	len+=strlen(verinfo);
+      }
+
+    } else {
+      out[len]=line[cnt];
+      len++;
+    }
+  }
+  out[len]=0;
+  return out;
+}
+
+
+void
+ny_disp_emu_file(FILE *ans_phile,FILE *asc_phile,char line[],INT16 min)
+{
+  INT16 cnt;
+  INT16 len;
+
+  len=0;
+
+  for(cnt=0;line[cnt]!=0 && len<min;cnt++) {
+    if(line[cnt]=='`') {
+      cnt++;
+      if(line[cnt]==0) {
+	while(min>len) {
+	  fprintf(asc_phile," ");
+	  fprintf(ans_phile," ");
+	  len++;
+	}
+	return;
+      } else if(line[cnt]=='`') {
+	fprintf(asc_phile,"`");
+	fprintf(ans_phile,"`");
+      } else if(line[cnt]=='v') {
+	fprintf(asc_phile,ver);
+	fprintf(ans_phile,ver);
+	len+=(strlen(ver) - 1);
+      } else if(line[cnt]=='w') {
+	fprintf(asc_phile,verinfo);
+	fprintf(ans_phile,verinfo);
+	len+=(strlen(verinfo) - 1);
+      } else if(line[cnt]=='0')
+	fprintf(ans_phile,"");
+      else if(line[cnt]=='1')
+	fprintf(ans_phile,"");
+      else if(line[cnt]=='2')
+	fprintf(ans_phile,"");
+      else if(line[cnt]=='3')
+	fprintf(ans_phile,"");
+      else if(line[cnt]=='4')
+	fprintf(ans_phile,"");
+      else if(line[cnt]=='5')
+	fprintf(ans_phile,"");
+      else if(line[cnt]=='6')
+	fprintf(ans_phile,"");
+      else if(line[cnt]=='7')
+	fprintf(ans_phile,"");
+      else if(line[cnt]=='8')
+	fprintf(ans_phile,"");
+      else if(line[cnt]=='9')
+	fprintf(ans_phile,"");
+      else if(line[cnt]=='!')
+	fprintf(ans_phile,"");
+      else if(line[cnt]=='@')
+	fprintf(ans_phile,"");
+      else if(line[cnt]=='#')
+	fprintf(ans_phile,"");
+      else if(line[cnt]=='$')
+	fprintf(ans_phile,"");
+      else if(line[cnt]=='%')
+	fprintf(ans_phile,"");
+    } else {
+      len++;
+      fprintf(asc_phile,"%c",line[cnt]);
+      fprintf(ans_phile,"%c",line[cnt]);
+    }
+  }
+  while(min>len) {
+    fprintf(asc_phile," ");
+    fprintf(ans_phile," ");
+    len++;
+  }
+}
+
+void
+scr_save(void)
+{
+  if(savelevel==0) {
+    if(rip) {
+      od_disp_str("\n\r!|10000$SAVEALL$|#|#|#\n\r");
+    } else {
+      t_buffer=(char *)malloc(4004);
+      if(t_buffer!=NULL)
+	od_save_screen(t_buffer);
+    }
+    savelevel=1;
+  } else if(savelevel==1) {
+    if(rip) {
+      od_disp_str("\n\r!|10000$SAVE0$|#|#|#\n\r");
+    } else {
+      t_buffer1=(char *)malloc(4004);
+      if(t_buffer1!=NULL)
+	od_save_screen(t_buffer1);
+    }
+    savelevel=2;
+  } else {
+    savelevel++;
+  }
+}
+
+void
+scr_res(void)
+{
+  if(savelevel==1) {
+    if(rip) {
+      od_disp_str("\n\r!|10000$RESTOREALL$|#|#|#\n\r  \b\b");
+    } else {
+      if(t_buffer!=NULL) {
+	od_restore_screen(t_buffer);
+	free(t_buffer);
+      }
+    }
+    savelevel=0;
+  } else if(savelevel==2) {
+    if(rip) {
+      od_disp_str("\n\r!|10000$RESTORE0$|#|#|#\n\r  \b\b");
+    } else {
+      if(t_buffer1!=NULL) {
+	od_restore_screen(t_buffer1);
+	free(t_buffer1);
+      }
+    }
+    savelevel=1;
+  } else if(savelevel>2) {
+    savelevel--;
+  }
+}
+
+void
+ch_game_d(void)
+{
+ if(c_dir_g==1) {
+#ifndef __unix__
+   setdisk(gamedisk);
+#endif
+   chdir(gamedir);
+   c_dir_g=0;
+ }
+}
+
+void
+ch_flag_d(void)
+{
+ if(c_dir_g==0) {
+#ifndef __unix__
+   setdisk(flagdisk);
+#endif
+   chdir(flagdir);
+   c_dir_g=1;
+ }
+}
+
+
+void
+ny_clr_scr(void)
+{
+ if(rip) {
+   od_control.user_rip=FALSE;
+   od_disp_str("\n\r!|*|#|#|#\n\r");
+   od_clr_scr();
+   od_control.user_rip=TRUE;
+   od_printf("\r\r");
+   od_kernal();
+ } else {
+   od_clr_scr();
+ }
+// if(rip) od_disp_str("\n\r\n\r");
+}
+
+INT16
+ibbs_bbs_list(void)
+{
+  INT16 cnt,cnt2,mine;
+  INT16 nonstop=FALSE;
+  char numstr[4],key;
+
+  if(ibbs==FALSE || IBBSInfo.paOtherSystem==NULL || IBBSInfo.nTotalSystems==0)
+    return -1;
+
+  if(rip) {
+    od_send_file("frame.rip");
+    od_send_file("frame3.rip");
+  } else {
+    od_disp_str("\n\r\n\r");
+    ny_clr_scr();
+  }
+
+  ny_send_menu(LIST_IB_SYS,"");
+
+  cnt2=5;
+  for(cnt=0;cnt<IBBSInfo.nTotalSystems;cnt++) {
+    if(strcmp(IBBSInfo.szThisNodeAddress,IBBSInfo.paOtherSystem[cnt].szAddress)==0) {
+      mine=cnt;
+    } else {
+      od_printf("`bright`%d - `bright green`%s `dark green`%.32s\n\r",cnt,IBBSInfo.paOtherSystem[cnt].szSystemName,IBBSInfo.paOtherSystem[cnt].szLocation);
+      cnt2++;
+      if (nonstop==FALSE && cnt2%od_control.user_screen_length==0) {
+	ny_disp_emu("`%More (Y/n/=)");
+	key=ny_get_answer("YN=\n\r");
+	od_printf("\r            \r");
+	cnt2=2;
+	if(key=='N')
+	  break;
+	else if(key=='=')
+	  nonstop=TRUE;
+      }
+    }
+  }
+
+  if(rip) od_send_file("frame.rip");
+
+  do {
+    ny_line(448,1,0);
+    od_input_str(numstr,3,'0','9');
+    if(numstr[0]==0)
+      return -1;
+    sscanf(numstr,"%d",&cnt);
+    od_disp_str("\n\r");
+  } while(cnt>=IBBSInfo.nTotalSystems || cnt==mine);
+
+  return cnt;
+}
+
+void
+ibbs_bbs_scores(void)
+{
+  INT16 cnt,cnt2;
+  INT16 nonstop=FALSE;
+  ibbs_bbs_spy_rec bbs_spy_rec;
+  scr_rec srec;
+  INT32 filepos;
+  FILE *justfile,*jfile;
+  char key;
+
+  if(ibbs==FALSE || IBBSInfo.paOtherSystem==NULL || IBBSInfo.nTotalSystems==0)
+    return;
+
+
+  justfile=ShareFileOpen(IBBSSPY_FILENAME,"rb");
+  if(justfile==NULL) {
+    ny_line(450,2,1);
+    WaitForEnter();
+    return;
+  }
+
+  if(rip) {
+    od_send_file("frame.rip");
+    od_send_file("frame3.rip");
+  } else {
+    od_disp_str("\n\r\n\r");
+    ny_clr_scr();
+  }
+
+  ny_send_menu(LIST_IB_SYS,"");
+  ny_line(453,0,1);
+
+  cnt2=5;
+  while(ny_fread(&bbs_spy_rec,sizeof(ibbs_bbs_spy_rec),1,justfile)==1) {
+    for(cnt=0;cnt<IBBSInfo.nTotalSystems;cnt++) {
+      if(strcmp(bbs_spy_rec.node,IBBSInfo.paOtherSystem[cnt].szAddress)==0) {
+	if(strcmp(bbs_spy_rec.node,IBBSInfo.szThisNodeAddress)==0) {
+	  jfile=ShareFileOpen(SCR_FILENAME,"rb");
+	  ny_fread(&srec,sizeof(scr_rec),1,jfile);
+	  fclose(jfile);
+	  od_printf("`bright green`%-40s `dark green`%s\n\r",IBBSInfo.paOtherSystem[cnt].szSystemName,D_Num(srec.points));
+	} else {
+	  od_printf("`bright green`%-40s `dark green`%s\n\r",IBBSInfo.paOtherSystem[cnt].szSystemName,D_Num(bbs_spy_rec.hi_points));
+	  break;
+	}
+      }
+    }
+    cnt2++;
+    if (nonstop==FALSE && cnt2%od_control.user_screen_length==0) {
+      filepos=ftell(justfile);
+      fclose(justfile);
+      ny_disp_emu("`%More (Y/n/=)");
+      key=ny_get_answer("YN=\n\r");
+      od_printf("\r            \r");
+      cnt2=1;
+      justfile=ShareFileOpen(IBBSSPY_FILENAME,"rb");
+      fseek(justfile,filepos,SEEK_SET);
+      if(key=='N')
+	break;
+      else if(key=='=')
+	nonstop=TRUE;
+    }
+  }
+  fclose(justfile);
+  if(rip) od_send_file("frame1.rip");
+  WaitForEnter();
+}
+
+
+void
+ibbs_bbs_name(INT16 bbs,INT16 sex,INT16 nochoice,char nameI[],INT16 *dbn,INT16 *pn)
+{
+  FILE *justfile;
+  ibbs_bbs_spy_rec bbs_spy_rec;
+  ibbs_scr_rec ibscr_rec;
+  INT16 cnt,nonstop=FALSE;
+  INT16 cnt2;
+  char numstr[26];
+  INT32 filepos;
+  char key;
+  nameI[0]=0;
+
+  *dbn=0;
+  *pn=-1;
+
+  justfile=ShareFileOpen(IBBSSPY_FILENAME,"rb");
+  if(justfile==NULL) {
+    ny_line(450,0,1);
+    WaitForEnter();
+    return;
+  }
+
+  if(rip) {
+    od_send_file("frame.rip");
+    od_send_file("frame3.rip");
+  } else {
+    od_disp_str("\n\r\n\r");
+    ny_clr_scr();
+  }
+
+  ny_line(452,1,0);
+  od_disp_str(IBBSInfo.paOtherSystem[bbs].szSystemName);
+  ny_line(451,2,1);
+
+  while(ny_fread(&bbs_spy_rec,sizeof(ibbs_bbs_spy_rec),1,justfile)==1) {
+    if(strcmp(IBBSInfo.paOtherSystem[bbs].szAddress,bbs_spy_rec.node)==0) {
+      if(bbs_spy_rec.player_list!=0) {
+	sprintf(numstr,SBYDB_PREFIX".%03d",bbs_spy_rec.player_list);
+	*dbn=bbs_spy_rec.player_list;
+	break;
+      } else {
+	ny_line(450,0,1);
+	WaitForEnter();
+	return;
+      }
+    }
+  }
+  fclose(justfile);
+
+  justfile=ShareFileOpen(numstr,"rb");
+  cnt2=4;
+
+  if(nochoice) {
+    ny_line(457,0,1);
+    cnt2++;
+  }
+
+  cnt=0;
+  while(ny_fread(&ibscr_rec,sizeof(ibbs_scr_rec),1,justfile)==1) {
+    if(sex==0 || (sex==1 && ibscr_rec.sex==FEMALE) || (sex==2 && ibscr_rec.sex==MALE)) {
+      if(nochoice==FALSE) {
+	od_printf("`bright`%d - `bright red`",cnt);
+	ny_disp_emu(ibscr_rec.name);
+	od_disp_str("\n\r");
+      } else {
+	if(ibscr_rec.level>=0) {
+	  od_set_attrib(0x0a);
+	  od_printf("%-2d   `bright red`",ibscr_rec.level);
+	  ny_disp_emu(ibscr_rec.name,25);
+	  od_set_attrib(0x0a);
+	  od_printf(" %-20s ",D_Num(ibscr_rec.points));
+	  if (ibscr_rec.sex==MALE) ny_disp_emu("`$M  "); else ny_disp_emu("`$F  ");
+	  od_set_attrib(0x09);
+	  switch(ibscr_rec.nation) {
+	    case HEADBANGER:
+	      od_printf("HEADBANGER   "); break;
+	    case HIPPIE:
+	      od_printf("HIPPIE       "); break;
+	    case BIG_FAT_DUDE:
+	      od_printf("BIG FAT DUDE "); break;
+	    case CRACK_ADDICT:
+	      od_printf("CRACK ADDICT "); break;
+	    case PUNK:
+	      od_printf("PUNK         "); break;
+	  }
+	} else {
+	  ny_disp_emu("`@     ");
+	  ny_disp_emu(ibscr_rec.name,25);
+	  ny_disp_emu(" `%No Spy Info Available");
+	}
+	od_disp_str("\n\r");
+      }
+      cnt2++;
+      if (nonstop==FALSE && cnt2%od_control.user_screen_length==0) {
+	filepos=ftell(justfile);
+	fclose(justfile);
+	ny_disp_emu("`%More (Y/n/=)");
+	key=ny_get_answer("YN=\n\r");
+	od_printf("\r            \r");
+	cnt2=2;
+	justfile=ShareFileOpen(numstr,"rb");
+	fseek(justfile,filepos,SEEK_SET);
+	if(key=='N')
+	  break;
+	else if(key=='=')
+	  nonstop=TRUE;
+      }
+    }
+    cnt++;
+  }
+  fclose(justfile);
+
+  if(nochoice==FALSE) {
+    if(rip) od_send_file("frame.rip");
+    do {
+      ny_line(449,1,0);
+      od_input_str(numstr,3,'0','9');
+      if(numstr[0]==0)
+	return;
+      sscanf(numstr,"%d",&cnt);
+      od_disp_str("\n\r");
+      if(sex>0 && cnt<bbs_spy_rec.players) {
+	justfile=ShareFileOpen(numstr,"rb");
+	fseek(justfile,cnt*sizeof(ibbs_scr_rec),SEEK_SET);
+	ny_fread(&ibscr_rec,sizeof(ibbs_scr_rec),1,justfile);
+	strcpy(nameI,ibscr_rec.nameI);
+	fclose(justfile);
+	if(sex==1 && ibscr_rec.sex==MALE)
+	  cnt=bbs_spy_rec.players;
+	else if(sex==2 && ibscr_rec.sex==FEMALE)
+	  cnt=bbs_spy_rec.players;
+      }
+    } while(cnt>=bbs_spy_rec.players);
+    justfile=ShareFileOpen(numstr,"rb");
+    fseek(justfile,cnt*sizeof(ibbs_scr_rec),SEEK_SET);
+    ny_fread(&ibscr_rec,sizeof(ibbs_scr_rec),1,justfile);
+    strcpy(nameI,ibscr_rec.nameI);
+    fclose(justfile);
+    *pn=cnt;
+  } else {
+    if(rip) od_send_file("frame1.rip");
+    WaitForEnter();
+  }
+}
+
+void
+ibbs_ops(void)
+{
+	char key;
+	char hand[36];
+	char omg[51];
+	char numstr[26];
+//	char node_r[NODE_ADDRESS_CHARS + 1];
+	char line[80],ovr[80];
+	FILE *justfile;
+	FILE *msg_file;
+	scr_rec urec;
+	user_rec u2rec;
+	INT16 unum,ret,cnt;
+	ibbs_mail_type ibmail;
+	ibbs_scr_rec ibscr_rec;
+	INT32 fillen;
+	INT16 dbn,pn,intval;
+	ibbs_act_rec act_rec;
+	DWORD money;
+//	desease ill;
+	newzfile_t	newzfile;
+
+	ovr[0]=0;
+	line[0]=0;
+
+	do {
+	  key=callmenu("LSMBHIPDXAYQ?\n\r",IBBS_MENU,454,FALSE);
+	  while (expert>0 && key=='?') {
+	    expert+=10;
+	    key=callmenu("LSMBHIPDXAYQ?\n\r",IBBS_MENU,454,FALSE);
+	    expert-=10;
+	  }
+
+	  if (key=='P') {
+	    if(cur_user.InterBBSMoves<=0) {
+	      ny_line(455,2,1);
+	      if(rip) {
+		od_get_answer("\n\r");
+		no_rip_m=1;
+	      } else
+		WaitForEnter();
+	    } else {
+	      wrt_sts();
+	      intval=ibbs_bbs_list();
+	      if(intval>-1) {
+		ibbs_bbs_name(intval,0,FALSE,hand,&dbn,&pn);
+		if(hand[0]!=0) {
+		  cur_user.InterBBSMoves--;
+		  sprintf(numstr,SBYDB_PREFIX".%03d",dbn);
+		  justfile=ShareFileOpen(numstr,"rb");
+		  fseek(justfile,pn*sizeof(ibbs_scr_rec),SEEK_SET);
+		  ny_fread(&ibscr_rec,sizeof(ibbs_scr_rec),1,justfile);
+		  fclose(justfile);
+
+		  strcpy(act_rec.name_rI,ibscr_rec.nameI);
+		  strcpy(act_rec.name_sI,cur_user.bbsname);
+		  strcpy(act_rec.node_s,IBBSInfo.szThisNodeAddress);
+		  act_rec.action=1;
+		  sprintf(IBBSInfo.szProgName, "#@NYG#%05d ACTIONS",ibbs_game_num);
+		  IBSend(&IBBSInfo,IBBSInfo.paOtherSystem[intval].szAddress,(char *)&act_rec,sizeof(ibbs_act_rec));
+		  ny_line(456,0,1);
+		  if(rip)
+		    od_get_answer("\n\r");
+		  else
+		    WaitForEnter();
+		}
+	      }
+	    }
+	  } else if (key=='Y') {
+	    DisplayStats();
+	    WaitForEnter();
+	  } else if (key=='L') {
+	    ibbs_bbs_scores();
+	  } else if (key=='S') {
+	    intval=ibbs_bbs_list();
+	    if(intval>-1) {
+	      ibbs_bbs_name(intval,0,FALSE,hand,&dbn,&pn);
+	      if(hand[0]!=0) {
+		sprintf(numstr,SBYDB_PREFIX".%03d",dbn);
+		justfile=ShareFileOpen(numstr,"rb");
+		fseek(justfile,pn*sizeof(ibbs_scr_rec),SEEK_SET);
+		ny_fread(&ibscr_rec,sizeof(ibbs_scr_rec),1,justfile);
+		fclose(justfile);
+
+		ibmail.flirt=0;
+		if (ibscr_rec.sex!=cur_user.sex && cur_user.sex_today>0) {
+
+		  ny_line(328,1,0);
+//	          od_printf("\n\r`bright red`A`red`sk `bright red`
+		  if(!rip)
+		    ny_disp_emu(ibscr_rec.name);
+		  else
+		    od_disp_str(ny_un_emu(ibscr_rec.name,numstr));
+		  ny_line(329,0,0);
+		    //`red` to have sex with you?(`bright red`Y`red`/`bright red`N`red`)",mail_idx.sender);
+
+		  key=ny_get_answer("YN");
+		  if(!rip)
+		    od_printf("%c\n\r",key);
+		  else
+		    od_disp_str("\n\r");
+		  if (key=='Y') {
+		    if (cur_user.sex_today<=0) {
+
+		      ny_line(118,1,1);
+		      //od_printf("\n\r\n\r`bright`You already used up all your sex turns today ...\n\r");
+
+		      WaitForEnter();
+		      od_printf("\n\r");
+		    } else {
+		      ibmail.flirt=1;
+		      cur_user.sex_today--;
+		    }
+		  }
+		}
+
+	      /*
+		ny_line(330,1,0);
+		//od_printf("\n\r`bright red`Q`red`uote message? (`bright red`Y`red`/`bright red`N`red`)");
+
+		key=ny_get_answer("YN");
+		if(!rip)
+		  od_printf("%c\n\r",key);
+		else
+		  od_disp_str("\n\r");
+
+		if(key=='Y') {
+		  ibmail.quote_length=ibmail.length;
+		  for(cnt=0;cnt<10;cnt++)
+		    strcpy(ibmail.quote_lines[cnt],ibmail.lines[cnt]);
+		} else {
+		  ibmail.quote_length=0;
+		}*/
+		ibmail.quote_length=0;
+		ny_line(446,1,1);
+		//od_printf("\n\r`bright red`O`red`k type yer message now (`bright red`/s`red`=save `bright red`/a`red`=abort):\n\r");
+		cnt=-1;
+		ovr[0]=0;
+		do {
+		  cnt++;
+		  if(cnt<9) {
+		    get_line(ovr,ibmail.lines[cnt],ovr,TRUE);
+		  } else {
+		    get_line(ovr,ibmail.lines[cnt],ovr,FALSE);
+		    cnt++;
+		  }
+		} while ((ibmail.lines[cnt][0]!='/' && ibmail.lines[cnt][1]!='S') && (ibmail.lines[cnt][0]!='/' && ibmail.lines[cnt][1]!='A') && cnt<9);
+
+		if (ibmail.lines[cnt][1]=='s' || ibmail.lines[cnt][1]=='S' || cnt==9) {
+		  ny_line(135,0,1);
+//	          od_printf("\b\b`bright red`S`red`aving...\n\r");
+		  //cnt+=mail_idx.afterquote;
+		  ibmail.length=cnt;
+		  strcpy(ibmail.recver,ibscr_rec.name);
+		  strcpy(ibmail.sender,cur_user.name);
+		  strcpy(ibmail.node_r,IBBSInfo.paOtherSystem[intval].szAddress);
+		  strcpy(ibmail.node_s,IBBSInfo.szThisNodeAddress);
+		  strcpy(ibmail.recverI,ibscr_rec.nameI);
+		  strcpy(ibmail.senderI,cur_user.bbsname);
+		  ibmail.deleted=FALSE;
+		  ibmail.sender_sex=cur_user.sex;
+		  ibmail.ill=cur_user.std;
+		  ibmail.inf=cur_user.std_percent;
+		  sprintf(IBBSInfo.szProgName, "#@NYG#%05d MAIL",ibbs_game_num);
+
+		  IBSendMail(&IBBSInfo,&ibmail);
+
+		  //IBSend(&IBBSInfo,IBBSInfo.paOtherSystem[intval].szAddress,&ibmail,sizeof(ibbs_mail_type)-((20-ibmail.length)*81));
+
+
+		} else {
+		  ny_line(136,0,1);
+		  if(ibmail.flirt==1) cur_user.sex_today++;
+		}
+
+		if(!rip)
+		  WaitForEnter();
+		else
+		  od_get_answer("\n\r");
+	      }
+	    }
+	  } else if (key=='X') {
+	    intval=ibbs_bbs_list();
+	    if(intval>-1) {
+	      if(cur_user.sex==MALE)
+		ibbs_bbs_name(intval,1,FALSE,hand,&dbn,&pn);
+	      else
+		ibbs_bbs_name(intval,2,FALSE,hand,&dbn,&pn);
+
+	      if(hand[0]!=0) {
+		sprintf(numstr,SBYDB_PREFIX".%03d",dbn);
+		justfile=ShareFileOpen(numstr,"rb");
+		fseek(justfile,pn*sizeof(ibbs_scr_rec),SEEK_SET);
+		ny_fread(&ibscr_rec,sizeof(ibbs_scr_rec),1,justfile);
+		fclose(justfile);
+
+		ibmail.flirt=0;
+		if (ibscr_rec.sex!=cur_user.sex && cur_user.sex_today>0) {
+		  ibmail.flirt=1;
+		  cur_user.sex_today--;
+		  ibmail.quote_length=0;
+		  ny_line(134,1,1);
+
+		  cnt=-1;
+		  ovr[0]=0;
+		  do {
+		    cnt++;
+		    if(cnt<9) {
+		      get_line(ovr,ibmail.lines[cnt],ovr,TRUE);
+		    } else {
+		      get_line(ovr,ibmail.lines[cnt],ovr,FALSE);
+		      cnt++;
+		    }
+		  } while ((ibmail.lines[cnt][0]!='/' && ibmail.lines[cnt][1]!='S') && (ibmail.lines[cnt][0]!='/' && ibmail.lines[cnt][1]!='A') && cnt<9);
+
+		  if (ibmail.lines[cnt][1]=='s' || ibmail.lines[cnt][1]=='S' || cnt==9) {
+		    ny_line(135,0,1);
+//	            od_printf("\b\b`bright red`S`red`aving...\n\r");
+		    //cnt+=mail_idx.afterquote;
+		    ibmail.length=cnt;
+		    strcpy(ibmail.recver,ibscr_rec.name);
+		    strcpy(ibmail.sender,cur_user.name);
+		    strcpy(ibmail.node_r,IBBSInfo.paOtherSystem[intval].szAddress);
+		    strcpy(ibmail.node_s,IBBSInfo.szThisNodeAddress);
+		    strcpy(ibmail.recverI,ibscr_rec.nameI);
+		    strcpy(ibmail.senderI,cur_user.bbsname);
+		    ibmail.deleted=FALSE;
+		    ibmail.sender_sex=cur_user.sex;
+		    ibmail.ill=cur_user.std;
+		    ibmail.inf=cur_user.std_percent;
+		    sprintf(IBBSInfo.szProgName, "#@NYG#%05d MAIL",ibbs_game_num);
+
+		    IBSendMail(&IBBSInfo,&ibmail);
+
+		    //IBSend(&IBBSInfo,IBBSInfo.paOtherSystem[intval].szAddress,&ibmail,sizeof(ibbs_mail_type)-((20-ibmail.length)*81));
+
+
+		  } else {
+		    ny_line(136,0,1);
+		    cur_user.sex_today++;
+		  }
+
+		  if(!rip)
+		    WaitForEnter();
+		  else
+		    od_get_answer("\n\r");
+		} else if (cur_user.sex_today<=0) {
+
+		  ny_line(118,1,1);
+		  //od_printf("\n\r\n\r`bright`You already used up all your sex turns today ...\n\r");
+
+		  WaitForEnter();
+		  od_printf("\n\r");
+		}
+	      }
+	    }
+	  } else if (key=='M') {
+	    if(cur_user.InterBBSMoves<=0) {
+	      ny_line(455,2,1);
+	      if(rip) {
+	       od_get_answer("\n\r");
+	       no_rip_m=1;
+	      } else
+		WaitForEnter();
+	    } else {
+	      intval=ibbs_bbs_list();
+	      if(intval>-1) {
+		ibbs_bbs_name(intval,0,FALSE,hand,&dbn,&pn);
+		if(hand[0]!=0) {
+		  cur_user.InterBBSMoves--;
+		  sprintf(numstr,SBYDB_PREFIX".%03d",dbn);
+		  justfile=ShareFileOpen(numstr,"rb");
+		  fseek(justfile,pn*sizeof(ibbs_scr_rec),SEEK_SET);
+		  ny_fread(&ibscr_rec,sizeof(ibbs_scr_rec),1,justfile);
+		  fclose(justfile);
+
+		  ibmail.flirt=1002;
+		  ibmail.quote_length=0;
+
+		  if(rip) {
+		    od_send_file("input.rip");
+		    od_disp_str("\n\r");
+		  }
+		  ny_line(417,0,0);
+		  od_printf(D_Num(cur_user.money));
+		  ny_disp_emu("`2):");
+		  money=get_val((DWORD)0,cur_user.money);
+
+		  *(DWORD *)ibmail.lines[0]=money;
+
+		  if(money!=0) {
+
+		    ny_line(135,1,1);
+//	            od_printf("\b\b`bright red`S`red`aving...\n\r");
+		    //cnt+=mail_idx.afterquote;
+		    ibmail.length=1;
+		    strcpy(ibmail.recver,ibscr_rec.name);
+		    strcpy(ibmail.sender,cur_user.name);
+		    strcpy(ibmail.node_r,IBBSInfo.paOtherSystem[intval].szAddress);
+		    strcpy(ibmail.node_s,IBBSInfo.szThisNodeAddress);
+		    strcpy(ibmail.recverI,ibscr_rec.nameI);
+		    strcpy(ibmail.senderI,cur_user.bbsname);
+		    ibmail.deleted=FALSE;
+		    ibmail.sender_sex=cur_user.sex;
+		    ibmail.ill=cur_user.std;
+		    ibmail.inf=cur_user.std_percent;
+		    sprintf(IBBSInfo.szProgName, "#@NYG#%05d MAIL",ibbs_game_num);
+
+		    IBSendMail(&IBBSInfo,&ibmail);
+
+		    //IBSend(&IBBSInfo,IBBSInfo.paOtherSystem[intval].szAddress,&ibmail,sizeof(ibbs_mail_type)-((20-ibmail.length)*81));
+
+		    if(!rip)
+		      WaitForEnter();
+		    else
+		      od_get_answer("\n\r");
+		  } else {
+		    cur_user.InterBBSMoves++;
+		  }
+		}
+	      }
+	    }
+	  } else if (key=='A') {
+
+	    if(rip) od_send_file("texti.rip");
+	    ny_line(309,2,1);
+	    //Say what:
+	    ny_line(310,0,1);
+	    //|-----------------------------------------------------------------------------|
+
+	    od_input_str(line,79,' ',255);
+	    if(line[0]!=0) {
+	      if(dobad)
+		dobadwords(line);
+	      news_post(line,cur_user.name,"",1);
+	      strcpy(newzfile.tagline,line);
+	      strcpy(newzfile.name,cur_user.name);
+	      strncpy(newzfile.name2,LocationOf(IBBSInfo.szThisNodeAddress),35);
+	      newzfile.name2[35]=0;
+	      newzfile.flag=6;
+	      sprintf(IBBSInfo.szProgName, "#@NYG#%05d NEWS",ibbs_game_num);
+	      IBSendAll(&IBBSInfo,(char *)&newzfile,sizeof(newzfile));
+	      ny_line(311,2,1);
+	      //Posted...
+	      if(!rip)
+		WaitForEnter();
+	      else
+		od_get_answer("\n\r");
+	    }
+	  } else if (key=='B') {
+	    if(cur_user.InterBBSMoves<=0) {
+	      ny_line(455,2,1);
+	      if(rip) {
+		od_get_answer("\n\r");
+		no_rip_m=1;
+	      } else
+		WaitForEnter();
+	    } else {
+	      money=15 + (15*pow(1.7,(double)cur_user.level));
+	      ny_line(467,2,0);
+	      od_printf("%s",D_Num(money));
+	      ny_line(468,0,0);
+	      key=ny_get_answer("YN");
+	      if(key=='Y') {
+		if(money>cur_user.money) {
+		  ny_line(252,2,1);
+		  if(!rip)
+		    WaitForEnter();
+		  else
+		    od_get_answer("\n\r");
+		} else {
+		  intval=ibbs_bbs_list();
+		  if(intval>-1) {
+		    ibbs_bbs_name(intval,0,FALSE,hand,&dbn,&pn);
+		    if(hand[0]!=0) {
+		      cur_user.InterBBSMoves--;
+		      money_minus(money);
+		      sprintf(numstr,SBYDB_PREFIX".%03d",dbn);
+		      justfile=ShareFileOpen(numstr,"rb");
+		      fseek(justfile,pn*sizeof(ibbs_scr_rec),SEEK_SET);
+		      ny_fread(&ibscr_rec,sizeof(ibbs_scr_rec),1,justfile);
+		      fclose(justfile);
+
+		      ibmail.flirt=1005;
+		      ibmail.quote_length=0;
+
+		      ny_line(135,0,1);
+//	              od_printf("\b\b`bright red`S`red`aving...\n\r");
+		      //cnt+=mail_idx.afterquote;
+		      ibmail.length=1;
+		      strcpy(ibmail.recver,ibscr_rec.name);
+		      strcpy(ibmail.sender,cur_user.name);
+		      strcpy(ibmail.node_r,IBBSInfo.paOtherSystem[intval].szAddress);
+		      strcpy(ibmail.node_s,IBBSInfo.szThisNodeAddress);
+		      strcpy(ibmail.recverI,ibscr_rec.nameI);
+		      strcpy(ibmail.senderI,cur_user.bbsname);
+		      ibmail.deleted=FALSE;
+		      ibmail.sender_sex=cur_user.sex;
+		      ibmail.ill=cur_user.std;
+		      ibmail.inf=cur_user.std_percent;
+		      sprintf(IBBSInfo.szProgName, "#@NYG#%05d MAIL",ibbs_game_num);
+
+		      IBSendMail(&IBBSInfo,&ibmail);
+
+		      //IBSend(&IBBSInfo,IBBSInfo.paOtherSystem[intval].szAddress,&ibmail,sizeof(ibbs_mail_type)-((20-ibmail.length)*81));
+
+		      if(!rip)
+			WaitForEnter();
+		      else
+			od_get_answer("\n\r");
+		    }
+		  }
+		}
+	      }
+	    }
+	  } else if (key=='H') {
+	    if(cur_user.InterBBSMoves<=0) {
+	      ny_line(455,2,1);
+	      if(rip) {
+		od_get_answer("\n\r");
+		no_rip_m=1;
+	      } else
+		WaitForEnter();
+	    } else {
+
+	      od_disp_str("\n\n\r");
+
+	      if(!rip)
+		ny_send_menu(HITMEN,"");
+
+	      ny_line(470,0,0);
+
+	      no_kernel=TRUE;
+	      key=ny_get_answer("123456Q");
+	      no_kernel=FALSE;
+	      if(key!='Q') {
+		intval=key-'1'+1;
+		money=(15 + (15*pow(1.7,(double)cur_user.level))) * intval;
+		ny_line(469,2,0);
+		od_printf("%s",D_Num(money));
+		ny_line(468,0,0);
+		key=ny_get_answer("YN");
+	      }
+	      if(key=='Y') {
+		if(money>cur_user.money) {
+		  ny_line(252,2,1);
+		  if(!rip)
+		    WaitForEnter();
+		  else
+		    od_get_answer("\n\r");
+		} else {
+		  *(INT16 *)ibmail.lines[0]=intval-1;
+		  if(intval==1) strcpy(ibmail.lines[1],"George");
+		  else if(intval==2) strcpy(ibmail.lines[1],"Gang Member");
+		  else if(intval==3) strcpy(ibmail.lines[1],"Mafia Guy");
+		  else if(intval==4) strcpy(ibmail.lines[1],"Lloyd The Bloody");
+		  else if(intval==5) strcpy(ibmail.lines[1],"David Koresh");
+		  else if(intval==6) strcpy(ibmail.lines[1],"Masked Fella");
+		  intval=ibbs_bbs_list();
+		  if(intval>-1) {
+		    ibbs_bbs_name(intval,0,FALSE,hand,&dbn,&pn);
+		    if(hand[0]!=0) {
+		      cur_user.InterBBSMoves--;
+		      money_minus(money);
+		      sprintf(numstr,SBYDB_PREFIX".%03d",dbn);
+		      justfile=ShareFileOpen(numstr,"rb");
+		      fseek(justfile,pn*sizeof(ibbs_scr_rec),SEEK_SET);
+		      ny_fread(&ibscr_rec,sizeof(ibbs_scr_rec),1,justfile);
+		      fclose(justfile);
+
+		      ibmail.flirt=1004;
+		      ibmail.quote_length=0;
+
+		      ny_line(135,2,1);
+//	              od_printf("\b\b`bright red`S`red`aving...\n\r");
+		      //cnt+=mail_idx.afterquote;
+		      ibmail.length=2;
+		      strcpy(ibmail.recver,ibscr_rec.name);
+		      strcpy(ibmail.sender,cur_user.name);
+		      strcpy(ibmail.node_r,IBBSInfo.paOtherSystem[intval].szAddress);
+		      strcpy(ibmail.node_s,IBBSInfo.szThisNodeAddress);
+		      strcpy(ibmail.recverI,ibscr_rec.nameI);
+		      strcpy(ibmail.senderI,cur_user.bbsname);
+		      ibmail.deleted=FALSE;
+		      ibmail.sender_sex=cur_user.sex;
+		      ibmail.ill=cur_user.std;
+		      ibmail.inf=cur_user.std_percent;
+		      sprintf(IBBSInfo.szProgName, "#@NYG#%05d MAIL",ibbs_game_num);
+
+		      IBSendMail(&IBBSInfo,&ibmail);
+
+		      //IBSend(&IBBSInfo,IBBSInfo.paOtherSystem[intval].szAddress,&ibmail,sizeof(ibbs_mail_type)-((20-ibmail.length)*81));
+
+		      if(!rip)
+			WaitForEnter();
+		      else
+			od_get_answer("\n\r");
+		    }
+		  }
+		}
+	      }
+	    }
+	  } else if (key=='I') {
+	    if(cur_user.InterBBSMoves<=0) {
+	      ny_line(455,2,1);
+	      if(rip) {
+		od_get_answer("\n\r");
+		no_rip_m=1;
+	      } else
+		WaitForEnter();
+	    } else {
+	      money=15 + (15*pow(1.7,(double)cur_user.level));
+	      ny_line(471,2,0);
+	      od_printf("%s",D_Num(money));
+	      ny_line(468,0,0);
+	      key=ny_get_answer("YN");
+	      if(key=='Y') {
+		if(money>cur_user.money) {
+		  ny_line(252,2,1);
+		  if(!rip)
+		    WaitForEnter();
+		  else
+		    od_get_answer("\n\r");
+		} else {
+		  intval=ibbs_bbs_list();
+		  if(intval>-1) {
+		    ibbs_bbs_name(intval,0,FALSE,hand,&dbn,&pn);
+		    if(hand[0]!=0) {
+		      cur_user.InterBBSMoves--;
+		      money_minus(money);
+		      sprintf(numstr,SBYDB_PREFIX".%03d",dbn);
+		      justfile=ShareFileOpen(numstr,"rb");
+		      fseek(justfile,pn*sizeof(ibbs_scr_rec),SEEK_SET);
+		      ny_fread(&ibscr_rec,sizeof(ibbs_scr_rec),1,justfile);
+		      fclose(justfile);
+
+		      ibmail.flirt=1003;
+		      ibmail.quote_length=0;
+
+		      ny_line(135,2,1);
+//	              od_printf("\b\b`bright red`S`red`aving...\n\r");
+		      //cnt+=mail_idx.afterquote;
+		      ibmail.length=1;
+		      strcpy(ibmail.recver,ibscr_rec.name);
+		      strcpy(ibmail.sender,cur_user.name);
+		      strcpy(ibmail.node_r,IBBSInfo.paOtherSystem[intval].szAddress);
+		      strcpy(ibmail.node_s,IBBSInfo.szThisNodeAddress);
+		      strcpy(ibmail.recverI,ibscr_rec.nameI);
+		      strcpy(ibmail.senderI,cur_user.bbsname);
+		      ibmail.deleted=FALSE;
+		      ibmail.sender_sex=cur_user.sex;
+		      ibmail.ill=(desease)(xp_random((INT16)AIDS)+1);
+		      ibmail.inf=xp_random(10)+2;
+		      sprintf(IBBSInfo.szProgName, "#@NYG#%05d MAIL",ibbs_game_num);
+
+		      IBSendMail(&IBBSInfo,&ibmail);
+
+		      //IBSend(&IBBSInfo,IBBSInfo.paOtherSystem[intval].szAddress,&ibmail,sizeof(ibbs_mail_type)-((20-ibmail.length)*81));
+
+		      if(!rip)
+			WaitForEnter();
+		      else
+			od_get_answer("\n\r");
+		    }
+		  }
+		}
+	      }
+	    }
+	  } else if (key=='D') {
+	    intval=ibbs_bbs_list();
+	    if(intval>-1) {
+	      ibbs_bbs_name(intval,0,TRUE,hand,&dbn,&pn);
+	    }
+	  }
+	} while (key!='Q');
+}
diff --git a/src/doors/ny2008/src/structs.h b/src/doors/ny2008/src/structs.h
new file mode 100644
index 0000000000000000000000000000000000000000..09d22961dbef81126467b4eb71477215c74eff63
--- /dev/null
+++ b/src/doors/ny2008/src/structs.h
@@ -0,0 +1,540 @@
+#ifndef _STRUCTS_H_
+#define _STRUCTS_H_
+
+#include "OpenDoor.h"
+#include "const.h"
+
+#ifndef tBool
+typedef INT16 tBool;
+#endif
+
+typedef enum
+   {
+   eSuccess,
+   eNoMoreMessages,
+   eGeneralFailure,
+   eBadParameter,
+   eNoMemory,
+   eMissingDir,
+   eFileOpenError
+   } tIBResult;
+
+typedef enum {HANDS,
+	      PEPPER,
+	      KNIFE,
+	      CHAIN,
+	      GUN,
+	      RIFLE,
+	      LASER_GUN,
+	      SHOTGUN,
+	      MACHINEGUN,
+	      GRANADE_LAUNCHER,
+	      BLASTER,
+	      A_BOMB,
+	      SHARP_STICK,
+	      SCREWDRIVER,
+	      HAMMER,
+	      LEAD_PIPE,
+	      COLT,
+	      ELEPHANT_GUN,
+	      NAILGUN,
+	      ASSAULT_RIFLE,
+	      PROTON_GUN,
+	      NEUTRON_PHASER,
+	      ULTRASOUND_GUN} weapon;
+typedef enum {POT,HASH,LSD,COKE,PCP,HEROIN} drug_type;
+typedef enum {MALE,FEMALE} sex_type;
+typedef enum {HEADBANGER,HIPPIE,BIG_FAT_DUDE,CRACK_ADDICT,PUNK} guy_type;
+typedef enum {NONE,CRAPS,HERPES,SYPHILIS,AIDS} desease;
+typedef enum {ALIVE,UNCONCIOUS,DEAD} guy_status;
+typedef enum {NOWHERE,MOTEL,REG_HOTEL,EXP_HOTEL} hotel_type;
+typedef enum {CENTRAL_PARK,CENTRAL_PARK_IB,EVIL_STUFF,BANK,HEALING,FOOD,
+	      DRUGS,ARMS,SEX,MAIL,REST,P_FIG,C_FIG,S_FIG,ENTRY_1,ENTRY_2,
+	      ONLINE,NEWZ,LIST,CONSIOUS,ATTACK,WIN,MAINT_RUN,WEAPONS,COPS,
+	      NEW,NATION,OTHER,NEW_NAME,NEW_WIN,NEW_LOOSE,TEN_BEST,BUSTED,
+	      ASS_KICKED,ASS_KICKED_P,ASS_KICKED_O,COLORS_HELP,CH_DRUG,
+	      LIST_IB_SYS,IBBS_MENU,HITMEN,TEN_BEST_IBBS,END} menu_t;
+
+#if defined(_WIN32) || defined(__BORLANDC__)
+        #define PRAGMA_PACK
+#endif
+
+#if defined(PRAGMA_PACK)
+        #define _PACK
+#else
+        #define _PACK __attribute__ ((packed))
+#endif
+
+#if defined(PRAGMA_PACK)
+        #pragma pack(push,1)    /* Disk image structures must be packed */
+#endif
+
+typedef struct _PACK
+   {
+   char szAddress[NODE_ADDRESS_CHARS + 1];
+   char szSystemName[SYSTEM_NAME_CHARS + 1];
+   char szLocation[LOCATION_CHARS + 1];
+   } tOtherNode;
+
+typedef struct _PACK
+   {
+   char szThisNodeAddress[NODE_ADDRESS_CHARS + 1];
+   char szProgName[PROG_NAME_CHARS + 1];
+   char szNetmailDir[PATH_CHARS + 1];
+   tBool bCrash;
+   tBool bHold;
+   tBool bEraseOnSend;
+   tBool bEraseOnReceive;
+   INT16 nTotalSystems;
+   tOtherNode *paOtherSystem;
+   } tIBInfo;
+
+typedef struct _PACK
+   {
+   char szFromUserName[36];
+   char szToUserName[36];
+   char szSubject[72];
+   char szDateTime[20]; 		/* "DD Mon YY  HH:MM:SS" */
+   WORD wTimesRead;
+   WORD wDestNode;
+   WORD wOrigNode;
+   WORD wCost;					/* Lowest unit of originator's currency */
+   WORD wOrigNet;
+   WORD wDestNet;
+   WORD wDestZone;
+   WORD wOrigZone;
+   WORD wDestPoint;
+   WORD wOrigPoint;
+   WORD wReplyTo;
+   WORD wAttribute;
+   WORD wNextReply;
+   } tMessageHeader;
+
+typedef struct _PACK
+   {
+   WORD wZone;
+   WORD wNet;
+   WORD wNode;
+   WORD wPoint;
+   } tFidoNode;
+
+typedef struct _PACK {
+	char    sender[25];
+	char    senderI[36];
+	sex_type sender_sex;
+	char    n1;
+	char    recver[25];
+	char    recverI[36];
+	INT32   location;
+	INT16   afterquote;
+	INT16   length;
+	INT16   flirt;
+	desease ill;
+	char    n2;
+	INT16   inf;
+	INT16   deleted;
+	} mail_idx_type;
+
+//defined in interbbs.h changed enum to char (as ibbs_mail_type_1)
+typedef struct _PACK {
+	char    sender[25];
+	char    senderI[36];
+	sex_type sender_sex;
+	char    node_s[NODE_ADDRESS_CHARS + 1];
+	char    node_r[NODE_ADDRESS_CHARS + 1];
+	char    recver[25];
+	char    recverI[36];
+	char    quote_length;
+	char    length;
+	INT16   flirt;
+	desease ill;
+	INT16   inf;
+	char    deleted;
+	char	lines[20][81];
+//	char	quote_lines[10][81];
+	} ibbs_mail_type;
+
+
+typedef struct _PACK {
+	char            name[25];
+	guy_type        nation;
+	char            n1;
+	INT16           level;
+	DWORD           points;
+	guy_status      alive;
+	char            n2;
+	sex_type        sex;
+	char            n3;
+	INT16           user_num,
+			online;
+	} scr_rec;
+
+typedef struct _PACK {
+	char            name[25];
+	char            nameI[36];
+	guy_type        nation;
+	INT16           level;
+	DWORD           points;
+	sex_type        sex;
+	} ibbs_scr_rec;
+
+typedef struct _PACK {
+	char            name[25];
+	char            nameI[36];
+	guy_type        nation;
+	INT16           level;
+	DWORD           points;
+	sex_type        sex;
+	char    	node[NODE_ADDRESS_CHARS + 1];
+	} ibbs_scr_spy_rec;
+
+
+
+
+typedef struct _PACK {
+	char    	node[NODE_ADDRESS_CHARS + 1];
+	DWORD           hi_points;
+	} ibbs_bbs_rec;
+
+typedef struct _PACK {
+	char    	node[NODE_ADDRESS_CHARS + 1];
+	DWORD           hi_points;
+	INT16		players;
+	INT16		player_list; //number of file with player list
+	} ibbs_bbs_spy_rec;
+
+
+typedef struct _PACK {
+	INT16		action;
+	char            name_s[25];
+	char            name_sI[36];
+	char            name_r[25];
+	char            name_rI[36];
+	char		node_s[NODE_ADDRESS_CHARS + 1];
+       //	DWORD   money;
+	char		data[10];
+	} ibbs_act_rec;
+
+	/*actions:
+	  0=name change name_sI change to name_s
+	  1=spy on name_rI
+	*/
+
+
+typedef struct _PACK {
+	char            name[25];
+	DWORD           points;
+	} best_rec_type;
+
+typedef struct _PACK {
+	char            name[25];
+	DWORD           points;
+	char 		location[NODE_ADDRESS_CHARS + 1];
+	} ibbs_best_rec_type;
+
+
+typedef struct _PACK {
+	char            name[36];
+	INT32           hitpoints,
+			strength,
+			defense;
+	weapon          arm;
+	char            n1;
+	} enemy;
+
+typedef struct _PACK {
+        char            tagline[80], name[25], name2[36];
+        INT16             flag;
+       } newzfile_t;
+                // flag settings//
+                // 0 - system news
+                // 1 - user announcment (name)
+                // 2 - user BUSTED (name) for (tagline)
+                // 3 - user newz (name)
+                // 4 - user kicked ass (name kicked name2's ass)
+                // 5 - user had his ass kicked (name was beat by name2)
+                // 6 - user announcment (name from name2(cut down to 35 chars))
+
+//Player User File structure (beta6+)
+typedef struct _PACK {
+	//character fields
+	char            bbsname[36],     //the BBS name of the user
+			name[25],        //the name of the character
+			say_win[41],     //what the user says when he wins
+			say_loose[41];   // "    "    "   "    "   "  looses
+	//integer records
+	INT16           rank,            //user rank
+			days_not_on,     //days the user gas been inactive
+			strength,        //attacking strenght of the user
+			defense,         //defensive strenght
+			condoms,         //condoms user has
+			since_got_laid,  //days since the user last got laid
+			drug_hits,       //the hist that the user has
+			drug_days_since; //if addicted how long the user
+					 //has not used the drug
+
+	//long type records
+	INT32           hitpoints,       //users hitpoints
+			maxhitpoints;    //maximum of the users hitpoints
+
+	//DWORD type record
+	DWORD           points,          //users points
+			money,           //money in hand
+			bank;            //money in bank
+
+	//unsigned char type records used as values
+	unsigned char   level,           //user level
+			turns,           //fight the user has left today
+			hunger,          // % of hunger
+			sex_today,       //sex turns left today
+			std_percent,     // % of current std
+			drug_addiction,  // % of drug addiction
+			drug_high,       // % of how "high" the player is
+			hotel_paid_fer,  //for how many more days the hotel
+					 //is paid for
+			days_in_hospital;//how many days has the use been
+					 //in hospital
+
+	/*enumerated types stored as char!!! (not int)*/
+	guy_status      alive;           //user: alive, unconsious, or dead
+	sex_type        sex;             //user sex: Male, Female
+	guy_type        nation;          //what is he:
+					 //punk, headbanger ...
+	weapon          arm;             //players weapon
+	desease         std;             //current player std
+	drug_type       drug;            //current player drug type
+	hotel_type      rest_where;      //where the user is staying lately
+
+	/*added values BETA 9*/
+	char            unhq;            //# of unhq bombings allowed per day
+					 //default=1
+	char            poison;          //number of poisoning of watr allowed
+					 //per day, default=1
+	/*added values v0.10*/
+	unsigned char   rocks,           //Rocks, usable in fights
+			throwing_ability,//Throwing ability 0-100
+			punch_ability,   //Punching ability 0-100
+			kick_ability;    //Kicking ability 0-100
+	char            InterBBSMoves;
+
+/*reserved for future use 3 bytes reset to 0*/
+	char            res1;
+	INT16		res2;
+      } user_rec;
+
+/*
+typedef struct _PACK {
+	char            bbsname[36],
+			name[25];
+	guy_type        nation;
+	INT16           level,
+			rank;
+	DWORD           points,
+			money,
+			bank;
+	guy_status      alive;
+	INT16           days_not_on;
+	sex_type        sex;
+	char            say_win[41],
+			say_loose[41];
+	INT16           turns,
+			hunger,
+			strength,
+			defense;
+	INT32           hitpoints,
+			maxhitpoints;
+	weapon          arm;
+	INT16           condoms;
+	INT16           since_got_laid;
+	INT16           sex_today;
+	desease         std;
+	INT16           std_percent;
+	drug_type       drug;
+	INT16           drug_hits,
+			drug_addiction,
+			drug_high,
+			drug_days_since;
+	hotel_type      rest_where;
+	unsigned char   hotel_paid_fer,
+			days_in_hospital;
+	INT16           res1,
+			res2,
+			res3,
+			res4,
+			res5;
+	} user_rec;*/
+
+typedef struct _PACK {
+	INT16		first_enemy[LEVELS],
+			last_enemy[LEVELS];
+	} enemy_idx;
+
+#if 0
+/* From nyedit.h */
+
+
+
+
+
+//Player User File structure (beta6+)
+typedef struct _PACK {
+	//character files
+	char		bbsname[36],     //the BBS name of the user
+			name[25],        //the name of the character
+			say_win[41],     //what the user says when he wins
+			say_loose[41];   // "    "    "   "    "   "  looses
+	//integer records
+	INT16		rank,	         //user rank
+			days_not_on,     //days the user has been inactive
+			strength,        //attacking strenght of the user
+			defense,         //defensive strenght
+			condoms,         //condoms user has
+			since_got_laid,  //days since the user last got laid
+			drug_hits,       //the hist that the user has
+			drug_days_since; //if addicted how long the user
+					 //has not used the drug
+
+	//long type records
+	INT32		hitpoints,       //users hitpoints
+			maxhitpoints;    //maximum of the users hitpoints
+
+	//DWORD type record
+	DWORD           points,          //users points
+			money,           //money in hand
+			bank;            //money in bank
+
+	//unsigned char type records used as values
+	unsigned char	level,           //user level
+			turns,           //fight the user has left today
+			hunger,          // % of hunger
+			sex_today,       //sex turns left today
+			std_percent,     // % of current std
+			drug_addiction,  // % of drug addiction
+			drug_high,       // % of how "high" the player is
+			hotel_paid_fer,  //for how many more days the hotel
+					 //is paid for
+			days_in_hospital;//how many days has the use been
+					 //in hospital
+
+	/*enumerated types stored as char!!! (not int)*/
+	guy_status	alive;           //user: alive, unconsious, or dead
+	sex_type	sex;             //user sex: Male, Female
+	guy_type	nation;          //what is he:
+					 //punk, headbanger ...
+	weapon		arm;	         //players weapon
+	desease		std;		 //current player std
+	drug_type	drug;            //current player drug type
+	hotel_type	rest_where;      //where the user is staying lately
+
+	/*added values BETA 9*/
+	char		unhq;		 //# of unhq bombings allowed per day
+					 //default=1
+	char		poison;		 //number of poisoning of watr allowed
+					 //per day, default=1
+
+	/*added values v0.10*/
+	unsigned char   rocks,           //Rocks, usable in fights
+			throwing_ability,//Throwing ability 0-100
+			punch_ability,   //Punching ability 0-100
+			kick_ability;    //Kicking ability 0-100
+
+/*reserved for future use 4 bytes reset to 0*/
+	INT16		res1,
+			res2;
+	} user_rec;
+
+
+/*typedef struct _PACK {
+	char		bbsname[36],
+			name[25];
+	guy_type	nation;
+	INT16		level,
+			rank;
+	INT32           points,
+			money,
+			bank;
+	guy_status	alive;
+	INT16		days_not_on;
+	sex_type	sex;
+	char		say_win[41],
+			say_loose[41];
+	INT16		turns,
+			hunger,
+			strength,
+			defense;
+	INT32		hitpoints,
+			maxhitpoints;
+	weapon		arm;
+	INT16		condoms;
+	INT16		since_got_laid;
+	INT16		sex_today;
+	desease		std;
+	INT16		std_percent;
+	drug_type	drug;
+	INT16		drug_hits,
+			drug_addiction,
+			drug_high,
+			drug_days_since;
+	hotel_type	rest_where;
+	unsigned char	hotel_paid_fer,
+			days_in_hospital;
+	} user_rec;*/
+
+typedef struct _PACK {
+	char		name[25];
+	guy_type	nation;
+	char		n1;
+	INT16		level;
+	DWORD           points;
+	guy_status	alive;
+	char		n2;
+	sex_type	sex;
+	char		n3;
+	INT16		user_num,
+			online;
+	} scr_rec;
+
+//typedef enum                {HANDS,PEPPER,KNIFE,CHAIN,GUN,RIFLE,LASER_GUN,SHOTGUN,MACHINEGUN,GRANADE_LAUNCHER,BLASTER,A_BOMB} weapon;
+typedef enum {HANDS,
+	      PEPPER,
+	      KNIFE,
+	      CHAIN,
+	      GUN,
+	      RIFLE,
+	      LASER_GUN,
+	      SHOTGUN,
+	      MACHINEGUN,
+	      GRANADE_LAUNCHER,
+	      BLASTER,
+	      A_BOMB,
+	      SHARP_STICK,
+	      SCREWDRIVER,
+	      HAMMER,
+	      LEAD_PIPE,
+	      COLT,
+	      ELEPHANT_GUN,
+	      NAILGUN,
+	      ASSAULT_RIFLE,
+	      PROTON_GUN,
+	      NEUTRON_PHASER,
+	      ULTRASOUND_GUN} weapon;
+
+/*DWORD 	gun_price[A_BOMB+1]={0,    50,    100,  200,  500,1000, 2000,     5000,   10000,     20000,           50000,  250000};
+*/
+typedef enum                 {POT,HASH,LSD,COKE,PCP,HEROIN} drug_type;
+/*int 	drug_price[HEROIN+1]={10, 25,  50, 100, 150,200};
+*/
+typedef enum {MALE,FEMALE} sex_type;
+typedef enum {HEADBANGER,HIPPIE,BIG_FAT_DUDE,CRACK_ADDICT,PUNK} guy_type;
+typedef enum {NONE,CRAPS,HERPES,SYPHILIS,AIDS} desease;
+typedef enum {ALIVE,UNCONCIOUS,DEAD} guy_status;
+typedef enum {NOWHERE,MOTEL,REG_HOTEL,EXP_HOTEL} hotel_type;
+
+
+#endif
+
+#if defined(PRAGMA_PACK)
+#pragma pack(pop)               /* original packing */
+#endif
+
+#endif
diff --git a/src/doors/ny2008/struct.doc b/src/doors/ny2008/struct.doc
new file mode 100644
index 0000000000000000000000000000000000000000..ac7aee33b31341421900be2900cbcc7e2795946e
--- /dev/null
+++ b/src/doors/ny2008/struct.doc
@@ -0,0 +1,281 @@
+NY2008 (update 5)
+
+!!!
+NOTE: When I added new weapons i have added them after the old ones to keep
+compatibility with the older versions
+!!!
+NOTE2: This file contains the structures of version 0.10 no InterBBS structs
+though
+!!!
+NOTE3:I found out about a misspelling which is CRAPS is supposed to be CRABS,
+it's still CRAPS in the datafiles (the text dropfile and the enum types), but
+be sure it's crabs when you display it to the user.
+!!!
+
+These are the 'C' structures used in user files, .sts file and mail, and newz:
+
+Also here is a description how they work and stuff like that ... READ ALL!!
+
+NOTE: all numbers of records are 0 based ... 0=1st record, user number 0 is
+the first in the file, enemy number 0 is the first in the file .... this is
+done for easy seeking of records .... to get the pointer to the beginning of
+record 34 in the user file do:
+
+  fseek(fpUserFile,34 * sizeof(user_rec),SEEK_SET);
+
+
+
+These are the enumerated types:
+(!!!!!!be sure to store them as *UNSIGNED CHARACTERS* not int!!!!!)
+(or you can use character values directly to write to the user file,
+ here's how that would work: first choice=0, second=1 ... e.g. POT=0, HASH=1)
+
+typedef enum {HANDS,PEPPER,KNIFE,CHAIN,GUN,RIFLE,LASER_GUN,SHOTGUN,
+              MACHINEGUN,GRANADE_LAUNCHER,BLASTER,A_BOMB
+              SHARPSTICK,SCREWDRIVER,HAMMER,LEAD_PIPE,COLT,
+              ELEPHANT_GUN,NAILGUN,ASSAULT_RIFLE,PROTON_GUN,
+              NEUTRON_PHASER,ULTRASOUND_GUN} weapon;
+typedef enum {POT,HASH,LSD,COKE,PCP,HEROIN} drug_type;
+typedef enum {MALE,FEMALE} sex_type;
+typedef enum {HEADBANGER,HIPPIE,BIG_FAT_DUDE,CRACK_ADDICT,PUNK} guy_type;
+typedef enum {NONE,CRAPS,HERPES,SYPHILIS,AIDS} desease;
+typedef enum {ALIVE,UNCONCIOUS,DEAD} guy_status;
+typedef enum {NOWHERE,MOTEL,REG_HOTEL,EXP_HOTEL} hotel_type;
+
+
+And here is the structure of the user file (and the .sts file):
+(you should not use the user file in the IGM, but this structure is written
+ to the temporary file .sts which you should read and modify upon exit)
+
+NOTE: With BETA 9 the name of the .sts file changed to
+n<zero padded node number>.sts (the old style .sts files exist but changing
+them will not make any difference. They are there only for crash recovery
+purposes)
+
+NOTE: All the strings are null terminated, if you are using pascal, use a
+conversion routine! if you are just creating IGM it is probably better
+to use the text character information file, the .stt file, read the
+3rdparty.doc for more info.
+
+NOTE: Editting hitpoints and strenghts is only temporary so not recomended,
+these are reset to defaults each time the user rise a level ... this will
+be redone sometime in the future, but not yet ... (i strongly recomend
+against doing that, and under no circumstances do not make hitpoints
+larger that maxhitpoints, or make max hitpoints smaller!)
+
+NOTE: Read the SCORE FILE INFO further on, on modifying this file!!!
+
+//Player User File structure (v0.10+ format)
+typedef struct {
+	//character records
+	char            bbsname[36],     //the BBS name of the user
+			name[25],        //the name of the character
+			say_win[41],     //what the user says when he wins
+			say_loose[41];   // "    "    "   "    "   "  looses
+	//integer records
+	int             rank,            //user rank (read score file info
+					 //in this document!!!)
+			days_not_on,     //days the user has been inactive
+			strength,        //attacking strenght of the user
+			defense,         //defensive strenght
+			condoms,         //condoms user has
+			since_got_laid,  //days since the user last got laid
+			drug_hits,       //the hits of drug that the user has
+			drug_days_since; //if addicted how long the user
+					 //has not used the drug
+
+	//long type records
+	long            hitpoints,       //users hitpoints
+			maxhitpoints;    //maximum of the users hitpoints
+
+	//unsigned long type records
+	unsigned long   points,          //users points
+			money,           //money in hand
+			bank;            //money in bank
+
+	//unsigned char type records used as values
+	unsigned char   level,           //user level
+			turns,           //fights the user has left today
+			hunger,          // % of hunger
+			sex_today,       //sex turns left today
+			std_percent,     // % of current std
+			drug_addiction,  // % of drug addiction
+			drug_high,       // % of how "high" the player is
+			hotel_paid_fer,  //for how many more days the hotel
+					 //is paid for
+			days_in_hospital;//how many days has the use been
+					 //in hospital
+
+	/*enumerated types stored as unsigned chars!!! (not int)*/
+	guy_status      alive;           //user: alive, unconsious, or dead
+	sex_type        sex;             //user sex: Male, Female
+	guy_type        nation;          //what is he:
+					 //punk, headbanger ...
+	weapon          arm;             //players weapon
+	desease         std;             //current player std
+	drug_type       drug;            //current player drug type
+	hotel_type      rest_where;      //where the user is staying lately
+
+	/*added values BETA 9*/
+	char            wtc;             //# of wtc bombings allowed per day
+					 //default=1
+	char            poison;          //number of poisoning of water allowed
+					 //per day, default=1
+
+	/*added values v0.10*/
+	unsigned char   rocks,           //Rocks, usable in fights
+			throwing_ability,//Throwing ability 0-100
+			punch_ability,   //Punching ability 0-100
+			kick_ability;    //Kicking ability 0-100
+        char            InterBBSMoves;   //InterBBS Moves left today
+
+/*reserved for future use 3 bytes reset to 0*/
+	char            res1;
+	int		res2;
+      } user_rec;
+
+Here is the mail header file NY2008.MSX structure:
+
+typedef struct {
+	char    sender[25];    //sender character name
+	char    senderI[36];   //sender bbsname
+	sex_type sender_sex;   //sender sex
+	char    n1;            //unused!
+	char    recver[25];    //receiver character name
+	char    recverI[36];   //receiver bbs name, used for searching mail
+	long    location;      //position of the message text in the
+			       //NY2008.MSG file
+	int     afterquote;    //how many lines are a quote
+	int     length;        //how long is the post
+	int     flirt;         //flirt flag used for other flags too:
+			       //0=no flag normal mail
+			       //1=sender wants sex
+			       //999=positive reply to flirt 1 (no mail body)
+			       //1000=receiver was raped (no mail body)
+			       //1001=receiver was defeated (no mail body)
+			       //1002=receiver got some money (the amount
+			       //stored as text in a one line msg body)
+	desease ill;           //sender's illness (std)
+	char    n2;            //unused!
+	int     inf;           //sender's infection percent (std_percent)
+	int     deleted;       //is this mail deleted (TRUE,FALSE)
+	} mail_idx_type;
+
+Here is how the NY2008.MSG works:
+
+location record points to the line where message starts in NY2008.MSG
+
+A line (any length is stored as an 80 byte character field) so the position
+of a message body is location*80. And just read an 80 character string, (79
+characters and a NULL terminating character) each record is 80 char long and
+the terminating NULL character is anywhere in this field. If the NULL character
+is the first character, it's a blank line!
+
+All the other records are in lines as the units, (not bytes) too so if length
+is 3 the message is 3 lines long.
+
+And online messages. To send an online message, add to or if it does not
+exist create a file called "U00<user number>.OMG", and store two, null
+terminated strings in it, one of them is 51 characters long (including the
+NULL character) and that is the message, the one that follows is the name
+of the sender which is 25 characters long. Do not delete this file, and if
+it exists add to it, so no messages are lost, in C use the "a+b" mode.
+The game will erase it when the user recieves the messages. Do not
+send online messages in the SingleNode mode, they would not work.
+
+NOTE the .OMG file has to be in the flag directory to be read.
+
+
+Here is the newz structure:
+files are : NYNEWS.YES for yesterday's news
+	    NYNEWS.TOD for today's news
+
+struct {
+  char  tagline[80],
+	name[25],
+	name2[36];
+  int   flag;
+} newzfile;
+// flag settings//
+// 0 - system news (tagline)
+// 1 - user announcment (name) anounces (tagline)
+// 2 - user BUSTED (name) for (tagline)
+// 3 - user newz (name) (tagline)
+// 4 - user kicked ass (name) kicked (name2)'s ass
+// 5 - user had his ass kicked (name) was beat by (name2)
+
+
+And here are the enemy file structures .... (street fights)
+
+typedef struct {
+	char            name[36];   //name of the enemy
+	long            hitpoints,  //it's hitpoints
+			strength,   //enemy offensive strength
+			defense;    //users defensive strength
+	weapon          arm;        //users weapon
+	char            n1;         //not used
+	} enemy;
+
+This is an enemy record in the enemy file "NYENM.DAT", here is how the
+level indexing works ("NYENM.IDX"):
+
+the file "NYENM.IDX" consists of two arrays:
+
+int first[21];
+int last[21];
+
+(In this order!)
+
+The first array contains the number of the first monster (the number of the
+record in the enemy file 0=1st) to choose randomly from. last is the last
+enemy that can be used for that particular level.
+
+Example:
+
+user is in level 5 and first[5]=50 and last[5]=60, which means:
+create a random number between 50 and 60 and that is the enemy the user
+will fight.
+
+
+SCORE FILE INFO!!!!! READ BEFORE DOING ANYTHING!!!!!
+
+This is the score file .... it is created every night during the
+maintanance. ("NY2008.SCR") (It is used for lot of stuff so don't mess
+it up !!!)
+
+DO NOT TOUCH this file in your IGMs, I included the structure so that
+if you are going to change points of players or add players or NPCs
+outside of NY2008 (not in an IGM), so you can add them to the scr file
+and SORT it.
+
+Also if you sort the score file, you have to change the rank variables
+in the user file. And vice versa, if you change the order of the user
+file, you have to change the user_num variables in the scr structure ...
+
+Remember there is no temporary file for this structure and it is writen
+to all the time so the scores are up to date ... it is also used for user
+searching. Changing users properties here will have little effect.
+I strongly recomend not messing with the usr and scr files if any users are
+online. If you do, to change a rank of a user that is online send him a
+rank flag file (binary) ("U00?????.RNK"). dump the integer value of his new
+rank to this file. the proccess looks for these files and will process them
+as soon as it can ... (user num and alive numbers might change during the
+maintanance ... packing) .. this file should be treated as read only and if
+you read from it while people are online then close it as soon as you can,
+so other nodes can read it ... (or write - the game does)
+
+typedef struct {
+	char            name[25]; //character's name
+	guy_type        nation;   //what is the character
+	char            n1;       //not used
+	int             level;    //his level
+	unsigned long   points;   //points
+	guy_status      alive;    //alive, unconsious or dead
+	char            n2;       //not used
+	sex_type        sex;      //users sex
+	char            n3;       //not used
+	int             user_num, // user's number in the usr file
+			online;   //TRUE or FALSE ... is the user online.
+	} scr_rec;
+
+
diff --git a/src/doors/ny2008/sysop.doc b/src/doors/ny2008/sysop.doc
new file mode 100644
index 0000000000000000000000000000000000000000..14fa4fadcdc640fb9151e42259abeebe3a317dd1
--- /dev/null
+++ b/src/doors/ny2008/sysop.doc
@@ -0,0 +1,553 @@
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+New York 2008 Sysop Documentation
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+   ---   ---   ---   ---   ---   ---   ---   ---   ---   ---   ---   ---
+   If you only want to try the game, type NY2008 -L at the command line!
+   ---   ---   ---   ---   ---   ---   ---   ---   ---   ---   ---   ---
+
+ ***************************************************************************
+ WARNING! This game might contain material some people might find offensive,
+ please review the game if you are not sure. You might edit the language 
+ file if you wish, "LINES.DAT" and "MENUS.DAT". (Never offended me! It's 
+ quite clean as for my personal opinion)
+
+ "LINESC.DAT" and "MENUSC.DAT" are the clean version files.
+ ***************************************************************************
+
+ IGM DEVELOPERS READ IGMOFFER.DOC!
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+Welcome to New York 2008 version 0.13
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+Read WHATSNEW.DOC for new stuff in this version!
+
+ALSO READ THE READ.ME FILE FOR IMPORTANT INFO!!!!
+
+[----------------------------------------------------------------------------]
+[ NOTE: I included file called NY2008.ANS (and a smaller .ASC) to include in ]
+[ your logon proccess if you wish.                                           ]
+[----------------------------------------------------------------------------]
+
+||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+ Inter-BBS now available, READ INTERBBS.DOC on how to set up an InterBBS game
+||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+WHAT IS IT?:
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+NY2008 is a fully multi-node aware RPG door game, which includes on-line
+fights and, on-line messages. Also the game includes all essential parts of
+an RPG game, being similiar to some other popular doors, like LORD or USURPER.
+The purpose of the player is to blow up New York and get rid of it's evil ways
+for this the players need an Atomic Bomb. Try the game out with the -L option.
+This game can run in ASCII, ANSI, AVATAR or RIP. It also allows InterBBS
+gameplay, read INTERBBS.DOC to read how to set up an InterBBS game.
+
+There is a clean mode in now with the -CL option. (I don't recomend it!)
+
+No reset is neccessary, the game assumes it's a new game if the user files 
+are missing.
+
+If you want to change some of the language, edit files LINES.DAT and MENUS.DAT!
+(or LINESC.DAT and MENUSC.DAT for clean mode)
+RIP stuff is in MENUS.RIP, MENUSC.RIP, LINES.RIP and LINESC.RIP.
+
+I have tested NY2008 to work under OS/2 and DOS, many people are running
+Win95 without any problems. Even WinNT is able to run NY2008.
+
+Also it seems NY2008 to be running stable under Linux and DOSEMU ... I have 
+tested Linux 2.1.15 and DOSEMU 0.64.2 . I do not know how stable it is for
+long term running such as a bbs ... but I think it should work allright.
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+UPGRADING:
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+from ALL versions:
+==================
+Just unzip the archive into yer directory. Check for new stuff in the
+SAMPLE.CFG file so that you can edit your .CFG file. It is not necessary to
+use the SAMPLE.CFG file, but It might have new stuff in it. Also check out
+SAMPLEIB.CFG fo the InterBBS setup file. If you wish to have interbbs
+you will have to copy SAMPLEIB.CFG to INTERBBS.CFG and edit it with your info
+READ INTERBBS.DOC for more info on InterBBS.
+
+There is no conversion neccessary from v0.10 since I used reserved fields.
+so just unzip the archive into the game dir ...
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+INSTALATION:
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+Well to get you up and running fast, let's get to the instalation. Copy all
+files into a directory (e.g. C:\NY2008) and edit the SAMPLE.CFG file to your
+systems specifications and then save it as NY2008.CFG. It has been known to
+cause problems, if you edit the comm parameters in the .cfg file, I recomend
+leaving them commented out if your bbs software can pass those to the program.
+They are there for the purpose if some bbs didn't pass these.
+
+The game will read NY2008.CFG unless otherwise specified, so make sure that
+NY2008.CFG file exists. If it does not exist, it will use default settings,
+but I'm sure you wanna change some of them.
+
+If your bbs software cannot pass the comport information through the door
+file, then edit the comport options in the .CFG file. If you run a multiple
+nodes on such a system create more .CFG files (e.g. NY1.CFG, NY2.CFG) edit
+these ... (You have to put all the settins in both af them!) and start the
+NY2008.exe with the -C option (e.g. NY2008.EXE -Cny1.cfg)
+
+If you have a bbs software that passes the comport information leave the
+comport settings in the .CFG file commented out. Even on a multinode system.
+!!Unless you use non-standard IRQ's, read in the problems section!)
+
+The game does not need to be reset ... if all system files are missing it
+tells the program to start over. If you ever need a reset run:
+
+  NY2008 RESET
+
+which will erase all user information. If you are running interbbs game
+you can use this command to, reset the game and stay in the interbbs game or
+kill all interbbs info but not reset the game.
+
+If you specified different door directories in .cfg file than the one that
+the bbs is run on, just run:
+
+  NY2008 -C<config file to use> RESET
+
+NOTE: the file of winners will not be deleted on reset to keep records
+NOTE2: reset only works locally!
+
+The game does not need to be reset at all for that matter, every time
+somebody wins he is just ereased so others can continue to play and this
+person may start over. So the game is more or less continuous.
+
+Take a look at the EXAMPLE.BAT to see an example batch file to run the game.
+
+The game now does not read in the bps rate if you are using fossil. Use the
+-RDBPS option to force reading in the bps rate (only if you have trouble!)
+
+If you run Wildcat then if the game don't work, try editting .CFG files for 
+each node (they'll be same escept for BBSName and Node fields) and then call
+the game like:
+
+NY2008 -CNY3.CFG
+
+That is assuming you made a .cfg file named ny3.cfg, try using the command
+line parameters as explained in example.bat first. This is the more 
+difficult solution and you should use it only if your system gets confused
+by long command lines.
+
+If you run with multinode stuff enabled:
+I recomend running "NY2008 -CR" everynight when nobody is online as this
+should solve flag problems if there are any ... (If program terminated and
+did not erase them)
+
+If You want to set up and InterBBS game read INTERBBS.DOC
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+Bad Words
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+New York now supports filtering mail and posts for bad words.
+
+If New York finds a file called BADWORDS.TXT it will read the words in it,
+and use them as filter. It replaces bad words with characters such as $@#!
+It takes the word case-insensitively and tries to match it to the beginnings 
+of words.
+
+Lets say your BADWORDS.TXT looks like:
+
+TRAIN TREE
+
+then when the user types something like this:
+
+The train hit the tree tore off some treebark and the tree was an appletree.
+
+It will be replaced by something like
+
+The !@$!@ hit the @#$! tore off some $#@!bark and the @#$@ was an appletree.
+
+Notice that treebark has the tree-part censored out and note that
+appletree was not touched.
+
+Be careful with what you put in the badwords.txt since lets say you put in
+ass, then all words that start with ass will have the ass part censored out
+which is not good.
+
+You have a limit of 50 words.
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+Personalities
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+NY2008 can behave like (status line and sysop keys):
+
+ NY2008 (behaves as the Standard, but the status line has player stats)
+ Standard Opendoors Door (Similiar to to RA 1.11)
+ Wildcat
+ Remote Access (Looks like 2.0x)
+ PCBoard
+
+You can switch to the NY2008 personality anytime by pressing Alt-[F1] in the
+game. From this personality you can go to any other personality. Or you can
+set the default personality in the .CFG file.
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+Clean Mode
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+USE OF CLEAN MODE TAKES AWAY SOME CHOICES FROM THE PLAYER, WHICH ARE VERY
+MUCH PART OF THE GAME, LIKE RAPES, HOOKERS AND MORE ... I DO NOT
+RECOMMEND USING THE CELAN MODE, BUT IF YOU JUST REALLY DON'T LIKE THAT STUFF
+THERE YA GO.
+
+I don't think it's neccessary as the game is quite clean, and adding this
+will prolly not making it as fun and also taking away some choices for the
+player.
+
+At requests I added clean mode. I cleand up the lines.dat and menus.dat files
+and saved them as linesc.dat and menusc.dat. Use the -CL option to enable
+clean mode. Rape and getting hookers was taken out in the clean mode.
+
+If you have any ideas what not to put in the clean mode and/or how to change
+it, please let me know!!!!
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+Adding IGM's
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+You can add In Game Modules to NY2008 as they become available. You can an
+infinite number of IGM's.
+
+You can also add IGM's as fight events. you add the igm's to the file 
+3rdevent.dat the same way you add them to 3rdparty.dat. If you want all the
+IGMs you have in the other stuff menu available as fight events just copy
+the 3rdparty.dat file into the 3rdevent.dat file!
+
+To add IGM's follow the instructions of the IGM author. If the IGM does not
+have an installation program that adds it to the 3rdparty.dat file, you have
+to add it yourself, it is done like this: (you add two lines for each IGM)
+(there can be comments - lines starting with ";" or blank lines in the
+3rdparty.dat file now)
+
+How to put entries into the 3rdparty.dat file (and 3rdevent.dat).
+
+This will run CASINO.EXE with the game dir as it's working dir:
+
+`@C`4asino
+C:\BBS\NY2008\CASINO\CASINO.EXE C:\BBS\NY2008\
+
+This will run CASINO.EXE with c:\bbs\ny2008\casino as it's working dir:
+NOTE: The "*" must be THE VERY FIRST character on the command line!
+
+`@C`4asino
+*C:\BBS\NY2008\CASINO\CASINO.EXE C:\BBS\NY2008\
+
+This will show CASINO.EXE IGM only to users with security higher or equal
+to 50 (lower cannot run it):
+
+`@C`4asino
+{50}C:\BBS\NY2008\CASINO\CASINO.EXE C:\BBS\NY2008\
+
+NOTE: the brackets can be placed anywhere in the command line:
+
+`@C`4asino
+C:\BBS\NY2008\CASINO\CASINO.EXE C:\BBS\NY2008\ {50}
+
+or:
+
+`@C`4asino
+C:\BBS\NY2008\CASINO\CASINO.EXE {50} C:\BBS\NY2008\
+
+are equivalent!
+
+You can also have your personalized ANSI, ASCII and AVATAR IGM menu, just
+create OTHER.ANS, OTHER.ASC and OTHER.AVT and put it into the game dir. You
+don't have to make all of them .ANS and .ASC will suffice but creating .AVT
+version makes it faster! (if the player has that terminal emulation!)
+
+NOTE: Probably the IGM will need the path to the dropfiles that ny2008 creates.
+The node number and user number will be passed to the program by generic
+arguments so you don't have to worry about it.
+
+NOTE2: The name of the IGM should only be under 30 characters long.
+(including color codes)
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+Drop Files
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+NY2008 Recognizes these dropfiles (you can configure your own drop file
+in the .cfg file. See the ny2008.cfg file for complete details.
+
+NY2008 does not need to know the name of the drop file as it will find the one
+it thinks is the best, if you want to specify exactly which drop file to use
+put it's name in the path either in the .cfg file or with the -P option!
+
+
++--------------------------+----------------------------------------+
+| FILE FORMAT              | EXAMPLE BBS SYSTEMS                    |
++--------------------------+----------------------------------------+
+| CHAIN.TXT                | WWIV                                   |
++--------------------------+----------------------------------------+
+| DORINFO1.DEF             | RBBS-PC                                |
++--------------------------+----------------------------------------+
+| DORINFO1.DEF             | QuickBBS                               |
+|      &                   | Remote Access (versions 0.01-0.04)     |
+| EXITINFO.BBS (Std. Ver.) |                                        |
++--------------------------+----------------------------------------+
+| DOOR.SYS (DoorWay Style) | Remote Access                          |
++--------------------------+----------------------------------------+
+| DOOR.SYS (PCB/GAP Style) | PC-Board                               |
+|                          | GAP                                    |
++--------------------------+----------------------------------------+
+| DOOR.SYS (WildCat Style) | Wildcat 3.00 and above                 |
+|                          | Telegard                               |
++--------------------------+----------------------------------------+
+| SFDOORS.DAT              | Spitfire                               |
+|                          | TriTel                                 |
++--------------------------+----------------------------------------+
+| CALLINFO.BBS             | WildCat 2.xx                           |
++--------------------------+----------------------------------------+
+| DORINFO1.DEF             | Remote Access (versions 1.00 and later)|
+|      &                   |                                        |
+| EXITINFO.BBS (Ext. Ver.) |                                        |
++--------------------------+----------------------------------------+
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+Maintanance
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+There are two ways to run the maintanance:
+
+SMART MAINTANANCE: First time the game is played in a day. This way users
+  will not get deleted if nobody plays that day does not count.
+
+REGULAR MAINTANANCE: Maintanance has to be run from a batch file.
+  While this otion is not so useful on a small system or if the game is
+  not used too often.
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+SMART MAINTANANCE: This is the default so you do not have to worry about
+  anything.
+
+  but I recomend running "NY2008 -CR" in your nightly maintanance file if
+  you run with the multinode support turned on. Make sure nobody is in the
+  game while this runs ... it would mess their game up.
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+REGULAR MAINTANANCE: Will not cause problems if others are on at the time of
+  maintanance (e.g. Somebody logged on just before midnight and another player
+  after midnight). Although this is acounted for I recomend using regular
+  maintanance in cases this happens too often.
+
+  To run regular maintanance, run the game with the -NM option so that if you
+  call maintanance at say 3:00AM the game knows not to run the maintanance
+  earlier. Then call the game with the -M option to run maintanance only. This
+  option will not send anything to the remote system. New day WILL start at
+  midnight no matter what time the maintanance is run, be sure to run it every
+  day though ....
+
+  I also recomend running crash recovery nightly, but that's optional, if you
+  run the crash recovery do not use any other options, same as with -M option.
+  Make sure nobody can be online when you run the crash recovery.
+  NOTE: Crash recovery WILL NOT run the maintanance so you will have to run:
+
+  cd\doors\ny2008
+  NY2008 -CR
+  NY2008 -M
+  cd\bbs
+
+You can also run the FORCED maintanance, but it is not recomended for regular
+use. I added it since some of you requested so that you can try the game out
+locally, without having to wait a day each time. Running the FORCED
+maintanance basically sets a new day to the game. IT IS NOT RECOMENDED TO RUN
+FORCED MAINTANANCE AT ALL SO YOU DON'T MESS UP THE GAME.
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+RUNNING STUFF IN MAINTANANCE
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+NY2008 has the option to run an external program after it's nightly
+maintanance, just create 3rdmnt.bat and put whatever you want in there and
+it will run it after every maintanance. Do not make your maintanance too
+long since on most systems maintanance usually takes place when the first
+user gets online.
+
+This is good for some IGMs. Ones that need to run something everyday.
+
+If you want to send remote output, there is a "3rdmnt.inf" file created,
+it has the same format as the IGM dropfile, so look at that in the
+3rdparty.doc file
+
+You could also use the old style, and use the option in the .cfg file, but
+no "3rdmnt.inf" is created for that one and I recomend strongly against it
+since the above way is just a better way to do it, and more flexible.
+
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+COMMAND LINE
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+Options For NY2008.EXE:
+
+  -C   =   Run the game with config file differen from NY2008.CFG
+	   (e.g. -Cnyalt.cfg = run NY2008 with the NYALT.CFG file)
+
+  -L   =   Force local operation. Does not read the drop file and asks for
+	   your name. (press enter on the name prompt for quick sysop logon)
+
+  -P   =   Use drop file in dir specified after this option. You can also
+	   specify a drop file to use. (e.g. -Pc:\ra\doorinfo1.def)
+
+  -N   =   Which node is this game running on. (e.g. -N2 for node 2)
+	   can be from 1 to 255.
+
+  -NM  =   Do not run the maintanance. The game will be aware it is a new
+	   day, but the data files are left alone. (See above)
+
+  -M   =   Run maintanance only, runs only in local mode, used to run
+	   maintanance from the nightly batchfile. It will only run if it has
+	   not been run that day before. (See above)
+
+  -MM  =   Run Maintanance whatever the day. FORCED maintanance. Use of this
+	   is not recommended uless under speacial circumstances. Use -CR
+	   after a crash. Use -MM only if you WANT TO SET A NEW DAY FOR ALL
+	   PLAYERS!!! NOT RECOMMENDED IN NORMAL GAMES!
+
+  -DV  =   Use direct video writes. Might be faster local display but can
+	   cause problems in multitasking enviroments.
+
+  -CR  =   Crash recovery. Turn all online flags off and read in all the
+	   temporary files so that users will not loose what they got when
+	   the crash occured. Also will read in the ny2008.usr file and
+	   create new score file!
+	   WARNING!!! BE SURE NOBODY IS REALLY ONLINE!!!!!
+
+  -CL  =   Clean mode. I don't recommend it, but if you really think the
+	   regular ver is offending, use it then. Give me any ideas of
+	   what should still be changed in the clean mode.
+
+ RESET =   Use this to reset the game (read above), can be used with options
+	   (-C,-DV). It can also take the bbs off a interbbs game without
+	   reseting the game
+
+-RDBPS =   Force the game to read the BPS setting for the .cfg file or the
+	   drop file. Use this if you have trouble. Only if fossil is used!
+
+ -NAD  =   Do not use auto terminal detection. This is used if you have
+	   trouble with the autodetection algorythm. It used to be default,
+	   but since RIP was added I made autodetection the default mode.
+
+ -RIP  =   Force RIP. Even if the users terminal isn't RIP.
+
+
+Options for NYIBBS.EXE (-C also works here):
+
+-IBBSI =   Proccess Incoming information in an InterBBS game, read
+	   INTERBBS.DOC fro more info.
+
+-IBBSO =   Proccess and send out Outgoing information in an InterBBS game,
+	   read INTERBBS.DOC fro more info.
+
+-SENDNODELIST = If you are the "operator" system of an InterBBS game, you can
+		use this to send out an updated or new nodelist to all the
+		bbses in the nodelist, read INTERBBS.DOC fro more info.
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+That's IT!!!
+
+You've done it ....
+
+run NY2008 -L to test it local, and enjoy the game
+
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+NY 2008 Player Editor!
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+Now a full blown editor lets you edit practically every aspect of the
+character.
+
+This editor is remote aware so it uses the same command line arguments,
+(not the maintanance ones of course but it supports -C,-L,-P,-DV,-N ...)
+The typical command line would be "NYEDIT -L" since I suppose you will do
+most the editting, but you also might give the co-sysops the oportunity to
+do some editting. The editor does not require ANSI graphics! (but it will
+sure look better in ANSI, and also supports AVATAR!)
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+PROBLEMS
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+These are the problems I know about, if you run into a problem installing the
+game, try looking in some other doors docs if you can find an answer there, or
+contact me or somebody who has more experience (Me of course being the
+smartest:)
+  
+  If your remote users get garbage, that's probably because your bbs is
+  locked at a different baud from the door, check these settings. Try
+  fiddeling around with the settings. Sometimes this happens if the port isn't
+  locked properly. Try disabeling the communication options in the .cfg file
+  if your bbs can pass them, to be sure that they are the same. And try
+  to use DOOR.SYS if you can as it passes more info to the door! Also check
+  your modem manual for the lock rates, usually it is 19600 for 14400 modem
+  etc... It might be different and causing problems. If you use a fossil, be
+  sure it's locked right. Some dropfiles pass the connect rate and not the 
+  locked rate, in this case if you don't have DOOR.SYS, just make your own
+  dropfile in the .CFG file, one which passes the locked rate or have NY2008
+  ignore the baud rate in the drop file and pass it in the .CFG file.
+
+  If you use Fossil and non-standard IRQ's you may have to create individual
+  *.cfg files for each node (see INSTALATION) and in those you have to
+  specify the IRQ number and the other com stuff. This is a problem in the
+  comm drivers I use, but you can easily work it out like this. Also
+  it may work without the workaround, but it might not.
+
+  If your user file or your messages get erased during or after maintanance,
+  each maintanance creates backup files of both the mail and the users.
+  "nybak.usr", "nyback.msx" and "nyback.msg" are backups created before
+  maintanance or crash recovery of "ny2008.usr", "ny2008.msx" and "ny2008.msg".
+  If you want too keep permanent backup these are the files to backup. If
+  you put them back into the directory and want the game to read them run
+  "ny2008 -cr" to read them in. (they have to be named "ny2008.*" not
+  "nybak.*"!)
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+SUGGESTIONS?
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+Do you want to see something in the game that's not there ... just contact me
+and tell it to me and if I find it usefull or fun I'll add it ...
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+WHAT'S TO COME
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+Here is what I'm planning on doing in the game:
+
+dunno .... have not thought about anything new ...
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+REGISTRATION
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+IT'S FREE ... public domain ... do what you want with it, hack it crack it,
+... use it ... give it to friends ... frankly I don't care ....
+
+Send me internet e-mail to:
+
+jirka@5z.com
+
+or see my home page at:
+
+http://www.5z.com/franz
+
+or mail me at:
+
+  George Lebl
+  6161 Arnoldson Ct.
+  San Diego, CA 92122
+  USA
diff --git a/src/doors/ny2008/test.rip b/src/doors/ny2008/test.rip
new file mode 100644
index 0000000000000000000000000000000000000000..9dd2305aec4a258d39f76b2d92ba9befd4a19fcd
--- /dev/null
+++ b/src/doors/ny2008/test.rip
@@ -0,0 +1,2 @@
+!|*|1K|Y00000100|1B00000202ZK02080F0F080700000807000000
+!|1U4D4E9C5S0000<>shit<>s|#|#|#
\ No newline at end of file
diff --git a/src/doors/ny2008/texti.rip b/src/doors/ny2008/texti.rip
new file mode 100644
index 0000000000000000000000000000000000000000..9716de6a047820b41c9cc9e6d9ebc2ebda5fe3f1
--- /dev/null
+++ b/src/doors/ny2008/texti.rip
@@ -0,0 +1,2 @@
+!|w030C2E0N11|Y00000100|1B00000000LC0200000F080700000007000000
+!|1U022EHP5S0000|1B00000000LC020000080F0000000000000000|1U0B2MHG5L0000|#|#|#
diff --git a/src/doors/ny2008/tframe1.rip b/src/doors/ny2008/tframe1.rip
new file mode 100644
index 0000000000000000000000000000000000000000..310ba4291435b85958d5353da01b1ad7308073f0
--- /dev/null
+++ b/src/doors/ny2008/tframe1.rip
@@ -0,0 +1,2 @@
+!|*|1K|w0007271610|Y01000400|1B000002027402080F0F080700000807000000
+!|1U0404HN1F0000<>Reading Mail|#|#|#
diff --git a/src/doors/ny2008/tframe2.rip b/src/doors/ny2008/tframe2.rip
new file mode 100644
index 0000000000000000000000000000000000000000..39b26e80215d79baafd577afac3c32fbd4bd0ba7
--- /dev/null
+++ b/src/doors/ny2008/tframe2.rip
@@ -0,0 +1,2 @@
+!|*|1K|w0007271610|Y01000400|1B000002027402080F0F080700000807000000
+!|1U0404HN1F0000<>Writing Mail|#|#|#
diff --git a/src/doors/ny2008/tframe3.rip b/src/doors/ny2008/tframe3.rip
new file mode 100644
index 0000000000000000000000000000000000000000..6c455e1175530fb87d2ee36414a85e91bcd91002
--- /dev/null
+++ b/src/doors/ny2008/tframe3.rip
@@ -0,0 +1,2 @@
+!|*|1K|w0007271610|Y01000400|1B000002027402080F0F080700000807000000
+!|1U0404HN1F0000<>Score Other Players|#|#|#
diff --git a/src/doors/ny2008/whatsnew.doc b/src/doors/ny2008/whatsnew.doc
new file mode 100644
index 0000000000000000000000000000000000000000..0ba40c2ddd61f7ad00c226ddbae68fccf7774a1e
--- /dev/null
+++ b/src/doors/ny2008/whatsnew.doc
@@ -0,0 +1,702 @@
+-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+New York 2008 What's New File
+-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+What's NEW in these versions ... stuff to check out ...
+
+Features:
+Totally new stuff that's added to the game.
+
+Bugs:
+Descriptions of bugs that were fixed in this version.
+
+CheatFix:
+Fixed something that allowed cheating!
+
+Known maybe-bugs:
+Might be just system specific bugs, and I could not duplicate them
+although I tried. If you find these, send me EXACT description of what
+is happening!
+
+Docs Changes:
+Important changes to the docs
+
+-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+The 1.?? series releases
+-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+v1.00 (FINAL FREE RELEASE)
+==========================
+
+Features:
+
+- No changes since 0.13
+- FREEWARE, Public Domain!
+
+-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+The 0.1? series releases
+-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+v0.13 (minor release NEVER RELEASED!)
+=====================================
+
+Features:
+
+- Bad words support. Will replace bad words with #@!$#% (read sysop.doc)
+- Chat wink bug fixed
+- Minor cosmetic changes to nyedit.exe.
+- Few NEW enemies.
+- A little bit of code clean up and performance increase (slight)
+
+Docs Changes:
+
+- New York 2008 Now published by PraetorSoft (Franz's company)
+- Partenrs for Peace is back online so this is the official USA
+  distro site again!
+
+v0.12 (bugfix release)
+======================
+
+Bugs:
+
+- The weapons selecting bug was fixed, moved weapons up so that there is
+  no "Q" conflict in selecting.
+- The menus*.* lines*.* files updated.
+- Mail reading bug fixed, man this was a tough one to find.
+
+Docs Changes:
+
+- No old addresses anymore in the contact.doc/register.doc
+
+v0.11 (major release)
+=====================
+
+Features:
+
+- 11 New weapons added!
+- NYEDIT updated because of this!
+- This is the 0.1? final release!
+
+Bugs:
+
+- Stack size was increased to 20k since I received several errors which looked
+  like stack overflow
+- Several missplelings in the game itself were fixed.
+
+Docs Changes:
+
+- Cosmetic and spelling errors fixed in the manuals
+- Distro site list has been updated.
+- New addresses in the contact.doc/register.doc
+
+v0.10 WIDE BETA 1
+=================
+
+This is basically the beta 3 release I have had little time to work on it,
+but the game itself seems to be stable. The InterBBS is having problems but
+with a limited beta sites I have not gotten enough feedback ... only from
+one site on which it didn't work.
+
+Features:
+
+- InterBBS play, read INTERBBS.DOC for more info on how to participate in
+  an InterBBS game. It works only with registered sysops. You can now
+  interact with other BBSes, through fido type mail networks. I will work on
+  an Internet options, though it might not be hard to set it up even now.
+  Local IBBS games can also be set up, with fake node numbers (1:1/1 ...)
+- There are one new command line option linked to the InterBBS, -IBBSM,
+  see INTERBBS.DOC for more info!
+- NYIBBS.EXE is added for the interbbs processing, Look at INTERBBS.DOC for
+  info.
+- RIP is here ... that's the major improvement in this version! 
+- Two screen saving levels now, if a person is given an online message or
+  something similiar happens, the screen is saved and then restored ... same
+  as with chat. Now you can chat AND the user can be in a screen saving event
+  all at the same time ... won't corrupt screen if more then two levels are
+  entered.
+- Few new enemies. Not many but a few.
+- Full screen chat mode much like KewlChat 1.2, even supports RIP(remote
+  graphics only though, locally it looks like ANSI)!...
+- Three abilities throwing,punching,kicking. For throwing the player needs
+  a rock. This can only be found in one of the events. The initial abilities
+  for exeisting users are set to be distributed evenly (since they already
+  had level raises and existing users also get 2 rocks free). Each level
+  raise the user can pick one ability to increase by 4. These abilities
+  can be used in all fights!
+- User File structure changed, but used the reserved bits so no is conversion
+  neccessary. Existing users will get default values of the abilities.
+- User Stats is much faster, but it takes a bit more memory.
+- Removed the -AD command line option. Auto terminal detection is now the
+  default.
+- Added -NAD command line option. Disables the auto terminal detection.
+- Added -RIP switch, forces RIP even if the user does not have RIP.
+- Messed with the Maintanance, it will be a little slower, but safer for mail.
+- The editor now edits all the new values (the abilities)
+- Added -MM argument. Forces maintanance even if it was run that day already,
+  does not check! Will force a new day on all players! Use only if you know
+  what you are doing. Good if you want to test the game, or if you are just
+  trying the game and want to test it as a several days game ...
+- When local mode is invoked with the -l option a better display and
+  prompt is used.
+- There are two main menus in the menu files, it's the one iwth the interbbs
+  option. And there is also the interbbs menu.
+- Compiled with a new version of OpenDoors (v6.00)
+- The struct.doc file updated to display the new file structure.
+- 3rdparty.doc updated.
+- The IGMs can now read/write the new values into the text character file.
+- Sex turns not being decremented on user rapes bug fixed.
+- Recompiled the Editor, and made a few fixes made it faster and safer.
+- When no dropfile found the game displays it's own no dropfile msg instead of
+  default opendoors one.
+- Screen not cleared on exit if the login was not with the "-L" argument.
+- Optimized menus, saved 10k
+- Optimized online fights, saved 8k
+- New trimming routine.
+- User names from the local login prompt are now trimmed of uneccessary
+  spaces.
+
+Bugs:
+- Fixed a file finding and opening bug ...
+- Fixed a stack overflow bug which i'm not sure if it occured in v0.05 ...
+- Fixed a bug not deleting all dead user's messages ... Revamped the deleting
+  part completely, making it a tiny bit slower, but MUCH MUCH safer.
+- Small Local name input bug fixed. (local logon)
+- Several display bugs fixed!
+- "?" didn't work in drugs menu.
+- Craps is spelled Crabs ...:) sorry bout this. file structures not changed
+  because of this though
+- The idle time time slicing now actually really works ... so multitasker
+  support is now much much better then before.
+- The "-p" command line argument now works right for NYEDIT
+- Online fights should now cause more problems if an online message is sent to
+  that node!
+
+v0.10 BETA 1-3 (The above is a compilation of the new features in those
+releases The Wide BETA 1 is the BETA 3 release basicaly)
+
+-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+The 0.0? series releases
+-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+v0.06 (alpha release of v0.10 on my bbs only!)
+==============================================
+
+Look at v0.10 for features ... 0.06 was the marking for all the v0.10 alpha
+versions, since they were on my bbs only. 0.06 did not have the complete
+feature list. Was never released on any BBS but mine.
+
+v0.05a (very minor release)
+===========================
+
+Features:
+- The game can now autodetect the terminal emulation type, just use the
+  -AD command line option.
+
+v0.05 (Minor Release)
+=====================
+
+Features:
+- Created my own copyfile and delete routines so the game does not call dos
+  anymore (xcept to run IGMs).
+- New in game events that happen practically anywhere in the game. They
+  happen sparsely though.
+- The polling value can now be edited. So you can fine-tune your multitasker!
+  Make sure you use the new .cfg file! or copy the "PollingValue" keyword into 
+  your .cfg file if you wish to change it!
+
+Bugs:
+- The you are being fought by another node bug fixed, finally!
+
+v0.04 (Minor Release)
+=====================
+
+Features:
+- Better slice releasing under multitaskers. THX DINK! You can turn off the
+  time slicing in the .cfg file if you wish.
+- Does not ask if the player wants to have sex with a user of if he wants to
+  rape if he already used up all his sex turns.
+- If a user does not have any hits of his drug it does not tell him he has to
+  sell it.
+- Checks for flags during fights only every second, not all the time!
+
+Bugs:
+- If user said no to "you'll have to sell all yer hits of your currnt drug"
+  it changed the drug anywayz.
+- Very minor display bugs fixed.
+- Again a fix in the file checking during idle, it didn't check untill a
+  key was pressed!
+
+CheatFixes:
+- Well since there are a lot of people running older versions I'm not telling!
+  It was strange but only worked for higher level users!
+
+v0.03c (Bugfixes only)
+======================
+
+Bugs:
+- Command line reading bug fixed! The one with the -p argument. This one
+  was a hard to find but I GOT IT!
+
+v0.03b (Bugfixes only)
+======================
+
+Bugs:
+- Overflow in Evil Stuff fixed.
+- User being fought bug fixed (multinode only).
+- Current Player being fought bug fixed (multinode only).
+- Not checking for online messages durning idle bug fixed (multinode only).
+
+v0.03a (VERY minor release)
+===========================
+
+Features:
+- Send money through mail option added (in bank)! This added 4 lines to the
+  lines.dat file.
+- Finally made the menu capitalization constant and went and capitalized all
+  menu items (menus.dat).
+- Very small display changes in a few places.
+
+Bugs:
+- Few misspellings and linguistic errors fixed.
+
+v0.03 (Minor Release)
+======================
+
+Features:
+- NY2008.CFG was renamed to SAMPLE.CFG to avoid overwriting during unzip.
+  (if you have not had ny2008 instaled before, copy this file to NY2008.CFG!)
+- New, more user friendly, registration program, same name, REGISTER.EXE
+- Editor now includes Levels/Minimum Points table when you enter points
+- The NYEDIT.EXE is smaller about 35k or so!
+- New command line parameter, RESET, which will reset the game, instead of
+  the old RESET.BAT! (works with multiple game setups and you can include a
+  .CFG file using the "-C" parameter.
+- It is now faster in multitasking enviroment since it does not check for
+  flags that often during idle anymore.
+- Added "CheckFlagsEvery" keyword to SAMPLE.CFG file so you can edit exactly
+  how often does NY2008 check for other nodes messages during idle. Read
+  the SAMPLE.CFG file for more info!
+- No-Self-Mail checking finally works ...
+- Message automatically aborted if nothing in the body and user does not want
+  to have sex.
+- "Nothing happened" displayed if newzfiles not found or found empty
+  (this added 2 lines to lines.dat, and linesc.dat)
+- The bps rate is not read in, if a fossil is used. This should solve some
+  communication problems.
+- "-RDBPS" comand line option added. Makes the game read the locked bps!
+  use only if you have problems
+- Users can't change their drug when they're high. they gotta sober up first!
+  (1 more line in lines.dat (and linesc.dat) file)
+- If a player looses in an offline player fight he looses all his money on
+  hand
+
+Bugs:
+- An overflow bug fixed when buying drugs when the user had a LOT of money.
+  (It would mess up the users money and points)
+- Offline player fight bug fixed if maintanance ran on another node.
+- RIP users should be allright now (used to be some display garbage).
+- Also RIP users might have gotten ASCII not ANSI... I fixed that too
+- [F9] did not work if Standard personality was chosen in the .cfg file
+- In editor, when entering points only numbers can be entered.
+- In editor, a small statusline display bug fixed.
+- Few misspellings fixed.
+- Alt keys did not work if NY2008 personality was chozen in the .cfg file.
+- A lot of display bugs fixed (it just looks a bit better now).
+
+Known maybe-bugs:
+- A user got "agreed and had sex with you" from a male player, I could not
+  duplicate it. Only one system reported it. Strange. I looked through all
+  parts that posted messages and all parts that recieved and could not find
+  something that would put a had sex with you flag on ... I think it must
+  have gotten corrupted somehow from defeated you message ...
+- "You are being fought node" bug still not caught, if it is a bug. It looks
+  like the flag might be left in place after an error or a sys-crash. It
+  might not be a bug and might not even be caused by the game. If you
+  turn of multinode support or run crash recovery during maintanance each
+  day it should not ever come up anywayz. (I'm strongly convinced it is not
+  a bug but something that happened with my board)
+  (NOTE: Fixed in v0.05)
+
+v0.02 (Minor Release)
+=====================
+
+Features:
+- IGMs can be in fights as events. Just add the IGM's you want to be available
+  as fight events into a file called '3RDEVENT.DAT'. The format is the same as
+  '3RDPARTY.DAT'.
+- New IGM Installation program that implements the fight event igms. It's in
+  the main archive in (NY_IGMIN.ZIP, same as before).
+- Franz's Bar has a minor release, with afew bugfixes and the new installation
+  program (NY_BAR12.ZIP).
+- The checking for flags is faster, so the game should be a bit faster now.
+- The "1 File Copied" message is not displayed localy anymore.
+- Personalities can be changed even when a user is online.
+- New personality called "NY2008" which will display player status, like points
+  and money. From this status line you can switch to any other personality.
+  If you want "NY2008" personality online press Alt-[F1].
+
+Bugs:
+- Mail name searching bug fixed!
+- If user has enough money to buy an A-Bomb but isn't level 20, it tells him
+  before it kicks him back to menu.
+- A bug in IGM prompt fixed, nothing major.
+- Few small display bugs fixed
+
+v0.01 (Major Release)
+=====================
+
+Features:
+- The maintanance should now take about 2,000,000,000 messages without
+  crashing (theoretically).
+- Can have infinite number of IGMs now. If you use the OTHER.ANS, .ASC, .AVT
+  screen to override the default display, only one screen is used so the
+  numbers of the IGM in the 3rdparty.dat is the number to enter to run the
+  igm, if other.a?? is not used it's allways 1-20 on infinite number of pages.
+- IGM display faster due to pre-formatting the 3rdparty.dat each play into
+  a temporary binary file which is read from the disk to save memory.
+- "Q", "?" are now hotkeyd in IGM menu, along with the new Next and Previous
+  commands (only active when there is more than 20 igms).
+- Rank number and inactivity days are no longer read from igm dropfiles,
+  to prevent errors.
+- New text file character information dropfile for IGM's so that the non-C
+  programmers can make IGM's easier. (read 3rdparty.doc for more info!)
+- If 3rdmnt.bat is found in the game dir it will be executed after the
+  nightly maintanance if you need to run something everynight.
+- If the screen length is not read properly it's reset to 24 lines
+- Custom Installation Program is included in the main archive
+- Franz's Bar and Jackpot IGM's have 1.1 releases (NY_BAR11.ZIP and NY_JP11.ZIP)
+- New IGM called Shoot Em is released! (NY_SHOOT.ZIP)
+
+Bugs:
+- Few Display bugs fixed.
+- Few misspellings fixed.
+
+-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+These were the WIDE BETA public releases
+-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+WIDE BETA 9
+===========
+
+Features:
+- Killed the turning cursor on the mail search thing ... I put it in there
+  partly cuz it looked good but it slowed the mail search down about 60 to
+  100 timez! So I took it out <G> Sorry that was in there and ya had to put
+  up with it but that just happens. Now it just says "Searching ..." and
+  that's it.
+
+Bugs:
+- If a player hangs up in player fight the player that is fought was, not
+  let in again, it's fixed now.
+- Few minor display bugs fixed.
+
+WIDE BETA 8
+===========
+
+Features:
+- Clean mode, will make the game "CLEAN". You cannot rape and language has
+  been cleaned up ... though I think it's pretty clean to begin with. If you
+  want to change something else in clean mode .... let me know and I'll do
+  it fer ya.
+- On exit from IGM it now checks the deadly percentages and if user hasn't
+  been killed properly in the igm it will kill him with the usual die message.
+- New users can no longer input a name that is already used but capitalized.
+  (e.g. Franz and fRanz are now considered same in the new user name scan, and
+  also if user changes his name)
+- Users can no longer send mail to themselves.
+- Brought down the executable size 50k (from 308k to 258k)
+- Also look for the BAR igm (NY_BAR.ZIP) it should be available at the same
+  time as this version.
+
+Bugs:
+- Duplicate name checking bug fixed. (sometimez said it was duplicate even
+  when it wasn't)
+- Change info now really checks for duplicate namez. (I hate bugs)
+- Two carrige returns in (.asc,.ans) scorefiles bug fixed
+- A small display bug in Evil Stuff fixed.
+- Few misspellings fixed.
+
+WIDE BETA 7
+===========
+
+Features:
+- In adding the command line to the 3rdparty.dat file you can add '*' in
+  front and it will use the exe file name's dir instead the game dir.
+  (has to be the first character on the line)
+- You can restrict players ability to get into IGM's by security level.
+  Do this by putting '{<minimum security level>}' into the command line of
+  the IGM.
+- You can have a custom display of available IGM's by creating a file
+  called OTHER.ASC, OTHER.ANS and OTHER.AVT (you don't have to make all of
+  them, but they will be displayed to user if available and his termonal
+  allows).
+- The drop files for IGM's format has changed a bit .... there are two more
+  fields, terminal emulation and user location! Sorry about this! It will be
+  easy to change that and since I don't think there's a single IGM out there
+  except the one I just wrote I don't think it will affect anything.
+- I made an IGM! It's a very simple JACKPOT IGM and the filename is
+  NY_JPIGM.ZIP (I will release the source soon ... I have to clean it up
+  first.)
+
+WIDE BETA 6
+===========
+
+Features:
+- You can now edit the chances of being busted and succssesfull for every
+  offense in the .cfg file. of course you can only do that if you registered.
+- You can now be unsuccessfull smashing up a car and breaking a window.
+  I have changed the default chances accordingly.
+
+Bugs:
+- Few minor display bugs fixed.
+- The 3rdparty.dat could not be read sometimes.
+- Slow other stuff display bug fixed.
+- Fixed dos calls bug created in wb5 that didn't clean up after players by
+  deleting the flag files.
+
+WIDE BETA 5
+===========
+
+Features:
+- Moved a few lines from menus.dat into the lines.dat and added one or two
+- Made some dos calls slightly faster.
+- Changed the Initial screen a bit.
+
+Bugs:
+- Fixed a bug deleting dead user messages
+- Fixed a few display bugs
+
+WIDE BETA 4
+===========
+
+Features:
+- You can steal more from the bank
+- Curing STD's is now a bit cheaper, especially for higher levels
+
+Bugs:
+- File locking bug fixed, which may have been causing the user file deletes
+- Few display bugs fixed
+- Online flag before user was online bug fixed
+- Few editor bugs fixed
+- Free hookers bug fixed
+
+WIDE BETA 3
+===========
+
+Features:
+- Menu titles are now in the LINES.DAT file.
+- And a few more things in the LINES.DAT file
+- Added and updated stuff in the MENUS.DAT file.
+- Changed the expert mode to help level toggle, it can now be expert, regular
+  and novice, novice is what regular was before, and expert mode did not
+  change. The regular mode will display the menu when you first enter it but
+  not after that.
+- Color instructions.
+- Expert mode now does not clear screen when the prompt is displayed.
+- Online users notified of new mail!
+- FlagDirectory option added to the .cfg file.
+- Online players notified if a new player comes online or leaves.
+- Bank Interest is now a registered only feature, and can be editted in the
+  .cfg file.
+- Complete CHARACTER EDITTING in the NYEDIT.EXE player editor. (of course
+  if you didn't register yet ... ya can't really use it ....)
+
+Bugs:
+- Mail Sex bug fixed which caused infection to overflow if it was sent as
+  regular mail.
+- The unregistered pause is not repeated if user presses enter.
+- When sex mail is aborted it no longer subtract the sex turns.
+- An online message overload during too many messages bug fixed.
+- Online fight weapon swap bug fixed.
+- Few minor display bugs fixed.
+- Few misspellings fixed.
+
+WIDE BETA 2
+===========
+
+Features:
+- If a user initiated an online fight, he can stop looking for the player.
+  (this is in case a player stays online after a crash)
+- The game now uses file locking, instead of the old system. This should
+  fix the file sharing error bugs. All the files are open in share mode and
+  the access is locked just before and just after reading/writing.
+- SingleNodeOnly mode added to the .CFG file for single node bbses.
+  (this disables online fights and messages, temporary files and speeds up
+  the game, read the .CFG file!)
+- More Prompt now included when reading long messages.
+- You can give credit to a user that paid for the registration in the .cfg file
+- Screen is saved and then restored after dos shell.
+- Few messages added.
+
+Bugs:
+- File error in mail fixed, a file stayed open.
+- Display problem with the ` character fixed, this was in the colors help.
+- Online message bug, sent to wrong people, fixed
+- Few online fight bugs fixed.
+- IGM menu display bug fixed.
+- Two User Listing display bugs fixed.
+- Several double display bugs fixed.
+- Language file reading bug fixed, displayed wrong lines sometimes.
+- Few misspellings fixed.
+
+WIDE BETA
+=========
+
+Features:
+- Made the stuff displayed from textfiles to be faster.
+- Added about 40 more lines to the LINES.DAT file
+- Changed some file opening techniques so that more nodes can read
+  the same file at a time but only one can have read/write access
+- More prompt is now displayed if user list or newz is longer than a page
+- Screen is saved (if enough memory exists) before and after chat, online
+  fights and online messages.
+- More prompts are erased after a key is hit.
+
+Bugs:
+- Few mail display bugs fixed.
+- New day every play if -NM option was enabled before maintanance bug fixed.
+- More prompt file display bug fixed.
+- Few more minor bugs fixed.
+
+-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+These were the BETA versions only tested on selected sitez
+-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+BETA 9
+======
+
+Features:
+- Changed the .STS fileNAME format for IGM's.
+  (uses node # instead of user #)
+- Non addictive drugs now lower attack strength.
+- Colors in the instruction file.
+- Colors can be used in namez!!!
+- Take Drug added to the attack menu.
+- Two new events in the street.
+- In evil stuff the game now displays the number of points earned.
+- Will now support colors in enemy names ... when i make the enemy editor.
+- Reduced point values in evil stuff.
+- WTC bombing and Poisoning of water can only be done once a day now.
+- They're also more expensive to do but easier to succeed.
+- This also changed the file structures, but no need for a conversion!
+  (I used up 2 bytes of the reserved space in the file structure)
+- Menus and larger texts are now stored in the MENUS.DAT and can be editted.
+- Most of the textlines are in the LINES.DAT.
+  (contains practically all the text used)
+- This saved 23k of memory! (from 283k to 260k exe file)
+- Changed the gun prices.
+- Users now get a bit less money for fights.
+- Healing is cheaper.
+- Reworked the enemy files.
+
+Bugs:
+- The Crash Recovery system bug fixed ... (very dangerous one too)
+- Players unavailable for fight bug fixed.
+- Hotels display bug fixed.
+- Two nodes fighting the same player bug fixed.
+- Online Fight overflow and display bugs fixed.
+- Fight hitforce overflow bug fixed.
+- Few minor bugs fixed.
+- Few misspellings fixed.
+
+BETA 8
+======
+
+Features:
+- IGM support is now complete (read 3rdparty.doc and struct.doc)
+- Money in bank gets now 5% interest a day.
+- COLORS are in!!! Same codes as in LORD. They work in mail and stuff the
+  player says when he's beaten, or won, also in newz (not in names).
+- Weapon price listing option added.
+- Game now displays what you get after a kill.
+- Re-wrote the attacking mechanism (for better I hope)
+- Curing STD's now cheaper.
+
+Bugs:
+- Best score bug fixed.
+- Blank disease bug fixed.
+- Hippie event now works.
+- Several display bugs fixed.
+- Lotsa other bugs fixed.
+
+BETA 7
+======
+
+Bugs:
+- Infection overflow bug fixed (was lethal to players!)
+- Few other overflow bugs fixed.
+- Users getting kicked out of hotel every day bug fixed.
+- Users getting kicked out of hospital all the time bug fixed.
+- Lotsa other bugs fixed usually connected with the new stuff from BETA 6.
+
+
+BETA 6
+======
+
+Features:
+- Faster consious player display.
+- Faster heal wounds display.
+- New user file structure, though adding 12 bytes per user, 10 of which
+  are reserved, I compressed all other records so that it is now 6 bytes
+  shoreter per user than in the beta 1 format.
+- Hotel is now paid for days not until next play.
+- The kicking out of hospital is always two days after you got yer ass kicked,
+  not like in beta 5 when after 2 days of inactivity you were kicked out every
+  day.
+- Started implementing IGMs (far from done yet)
+- Drugs get more expensive, at a slow rate, int different levels.
+- Regular mode is now the default choice in the startup menu.
+- Added Street fight events, three now implemented.
+- Added Crash recovery to get all online flags and temporary files and flags
+  outta there and read in temp user files: -CR option on the command line.
+
+Bugs:
+- Few minor bugs and misspellings fixed.
+- BBS name display bug fixed in the editor.
+
+BETA 5
+======
+
+Features:
+- Expert mode!
+- Faster display of instructions.
+- Quit is the default action in news.
+- Game is now RIP ready but still does not support RIP.
+- The maintanance now doesn't run the first day since there is no need to.
+
+Bugs:
+- Nasty user adding bug.
+- Few minor bugs and misspellings fixed.
+
+BETA 4
+======
+
+Bugs:
+- Whoops .... if an user beat user he got 80% of his points instead of 8%.
+- Few minor bugs fixed.
+
+BETA 3
+======
+
+Bugs:
+- Should not break down if user hangs up during maintanance.
+- When a user is beat on the street the game should not hang anymore.
+- Few other minor bugs fixed.
+
+
+BETA 2
+======
+
+New Features:
+- Faster display!
+- Better UserStats display
+- Hotkeyed menu displays
+
+Bugs:
+- Online Fight rape bug fixed
+- Editor display bug fixed
+
+-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+Since the ALPHA versions were not released at all, except my bbs I did not
+include a what's new file.
+-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
diff --git a/src/doors/ny2008/win.ans b/src/doors/ny2008/win.ans
new file mode 100644
index 0000000000000000000000000000000000000000..26694a7bcb013538c4acdf52111660a0cc4edcca
--- /dev/null
+++ b/src/doors/ny2008/win.ans
@@ -0,0 +1,21 @@
+[?7h���������������
+����������������������������������
+���������������������������������������������
+�������������������������������������������������
+�������������������������������������������������� 
+������������������������������������������� 
+���������������������������۱ 
+�������������������۱ 
+��������������������� 
+��������۲����������� 
+�����������۲����������������� 
+���������                 ������������� 
+���������                 ����������������� 
+������������    �������������۲���������������������������� 
+������������    �������������۲���������������������������� 
+�����������������������������۲���������������������������� 
+����������������������������������������������������������� 
+����������������������������������������������������������� 
+����������������������������������������������������������� 
+����������������������������������������������������������� 
+����������������������������������������������������������� 
diff --git a/src/doors/ny2008/win.avt b/src/doors/ny2008/win.avt
new file mode 100644
index 0000000000000000000000000000000000000000..bb61ebb86b13d227ae51347066279031463e64c9
--- /dev/null
+++ b/src/doors/ny2008/win.avt
@@ -0,0 +1,26 @@
+ N�
+ N���
+ N��
+��
�	
+ 	N�
�	��
�	
+ 
+N����
+�
 ~ 
+ N����� �x� 
+ N��������� ��x۱ 
+ N��� ��x��۱ 
+ N��������� ���x� 
+ �� N������۲��� ���x� 
+ ���� N�������������� 
+���x� 
+ ���� 	����� ����� 
+���x� 
+ ��� 	��� ����� �������x� 
+ ����� ��������N������������	������x� 
+ ����� ��������N������������	������x� 
+ ���������������N�����������	������x� 
+ ����������������N�����������������������x� 
+ ���������������������������������������x� 
+ ���������������������������������������x� 
+ ���������������������������������������x� 
+ ���������������������������������������x� 
\ No newline at end of file