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[40m[2J[0;1mɻ��ͻ� ��[8C�[8C� � �[7C�[10C� +[36m����ͼȻ�ɼ [37m�[7C� �[15C� �[6C� [30m�[9C[37m� � � +[0;36m�ȼ��� �ʼ[6C[1;37m� �[11C� �[14C�[5C�[6C� ���[7C� +[34m�[7C[37m� � ��ͻ � �[11C� � �[5C�[5C�[6C��[5C� +[6C�[6C[36m��ͼ�ͼ�ɼ[8C[37m� �[17C[47m [11C[40m�� + � �[6C[0;36m� � ̹ [1;37m� � �ͻ �ͻ�ͻ�ͻ �[5C[30m�[47m� [2C[37;40m� �[12C� +[5C�[9C[34m� [37m� � [34m�Ȼ[8C[36m�ͼ � �� �� [37m� [30m��[47m۱ [14C[37;40m� + �[7C�[5C� �[5C[0mÿ [1m� [0;36m�����ͼ�ͼ�ͼ[6C[1;30m��[47m��۱ [1C[37;40m�[6C�[7C� +[7C� �[6C� [0m���´ ô [1m� � � � �[0;30m�[1m�������[47m� [40m + [0;34m��[9C[1;37m�[7C[0m���Ŵ ô �� [1m� �[6C[0;30mֽ[1m�������[47m� [2C[37;40m� � � + [0;34m���� [1;37m�[11C[0m���Ŵ ô[1m� [0m�[34m����[1;44m����[5C[37;40m� [0;30m�[1;37m�[0;30m|[1m�������[47m� [4C[37;40m�[12C� + [0;34m���� [1;37m�[6C[0;34m�����[44m [40m�[1;44m����[2C[37;40m� [0;30m�||[1m�������[47m� [9C[37;40m� � +[0;34m������[9C���[44m [40m�[1;44m����[4C[37;40m� [0;34m����[1;30m�������[47m� [1C[37;40m�����[36m������[0;36m������� +[34m������[33m������ [1;37m� [0;34m����[1;44m����[2C[37;40m� [0;34m����[1;44m����[0;33m����������[34m��[1;30m�������[47m� [1C[37;40m� [31mB[0;31my +[34m������[33m������ [34m����[1;44m����[7C[0;34m����[1;44m����[0;33m����������[34m��[1;30m�������[47m� [1C[37;40m� +[0;34m������[33m�����[1;30m�����[0;34m����[1;44m����[30;40m� [37m� [0;34m����[1;44m����[0;33m����������[34m��[1;30m�������[47m� [1C[36;40m� [31mF[0;31mranz +[34m������[33m����[1;30m������[0;34m����[1;44m����[30;40m�� ���[0;34m����[1;44m����[30;40m�������[0;33m���[34m��[1;30m�������[47m� [1C[36;40m� +[0;34m������[33m����[1;30m������[0;34m����[1;44m����[30;40m��[0;33m��[1;30m���[0;34m����[1;44m����[30;40m�������[0;33m���[34m��[1;30m�������[47m� [1C[36;40m� +[0;34m������[33m����[1;30m������[0;34m����[1;44m����[30;40m��[0;33m��[1;30m���[0;34m����[1;44m����[30;40m�������[0;33m���[34m��[1;30m�������[47m� [1C[0;36m�[6C[34m([1mc[0;34m) [1m1995 +[0;34m������[33m����[1;30m������[0;34m����[1;44m����[30;40m��[0;33m��[1;30m���[0;34m����[1;44m����[30;40m�������[0;33m���[34m��[1;30m�������[47m� [1C[0;36m� +[34m������[33m����[1;30m������[0;34m����[1;44m����[30;40m��[0;33m��[1;30m���[0;34m����[1;44m����[30;40m�������[0;33m���[34m��[1;30m�������[47m� [1C[0;36m���[0m 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[40m[2J[0;1mɻ��ͻ� ��[8C�[8C� � �[7C�[10C� +[36m����ͼȻ�ɼ [37m�[7C�[31mI[0;31ms [1mI[0;31mnstalled[7C[1;37m�[9C[30m�[9C[37m�[5C� � +[0;36m�ȼ��� �ʼ[6C[1;37m� �[11C� [31mO[0;31mn [1mT[0;31mhis [1;37m� �[5C�[6C� ���[7C� +[34m�[7C[37m� � ��ͻ � �[11C� �[31mS[0;31mystem [1;37m�[5C�[6C��[5C� +[6C�[6C[36m��ͼ�ͼ�ɼ[8C[37m� �[17C[47m [11C[40m�� + � �[6C[0;36m� � ̹ [1;37m� � �ͻ �ͻ�ͻ�ͻ �[5C[30m�[47m� [2C[37;40m� �[12C� +[5C�[9C[34m� [37m� � [34m�Ȼ[8C[36m�ͼ � �� �� [37m� [30m��[47m۱ [14C[37;40m� + �[7C�[5C� �[5C[0mÿ [1m� [0;36m�����ͼ�ͼ�ͼ[6C[1;30m��[47m��۱ [1C[37;40m�[6C�[7C� +[7C� �[6C� [0m���´ ô [1m� �[5C[34mv0.11 [37m� [30m�������[47m� [40m + [0;34m��[9C[1;37m�[7C[0m���Ŵ ô �� [1m� �[8C[30m�������[47m� [2C[37;40m� � � + [0;34m���� [1;37m�[11C[0m���Ŵ ô[1m� [0m�[34m����[1;44m����[5C[37;40m� � [30m�������[47m� [4C[37;40m�[12C� + [0;34m���� [1;37m�[6C[0;34m�����[44m [40m�[1;44m����[2C[37;40m�[7C[30m�������[47m� [9C[37;40m� � +[0;34m������[9C���[44m [40m�[1;44m����[4C[37;40m� [0;34m����[1;30m�������[47m� [1C[37;40m�����[36m������[0;36m������� +[34m������[33m������ [1;37m� [0;34m����[1;44m����[2C[37;40m� [0;34m����[1;44m����[0;33m����������[34m��[1;30m�������[47m� [1C[37;40m� [31mB[0;31my +[34m������[33m������ [34m����[1;44m����[7C[0;34m����[1;44m����[0;33m����������[34m��[1;30m�������[47m� [1C[37;40m� +[0;34m������[33m�����[1;30m�����[0;34m����[1;44m����[30;40m� [37m� [0;34m����[1;44m����[0;33m����������[34m��[1;30m�������[47m� [1C[36;40m� [31mF[0;31mranz +[34m������[33m����[1;30m������[0;34m����[1;44m����[30;40m�� ���[0;34m����[1;44m����[30;40m�������[0;33m���[34m��[1;30m�������[47m� [1C[36;40m� +[0;34m������[33m����[1;30m������[0;34m����[1;44m����[30;40m��[0;33m��[1;30m���[0;34m����[1;44m����[30;40m�������[0;33m���[34m��[1;30m�������[47m� [1C[36;40m� +[0;34m������[33m����[1;30m������[0;34m����[1;44m����[30;40m��[0;33m��[1;30m���[0;34m����[1;44m����[30;40m�������[0;33m���[34m��[1;30m�������[47m� [1C[0;36m�[6C[34m([1mc[0;34m) [1m1995 +[0;34m������[33m����[1;30m������[0;34m����[1;44m����[30;40m��[0;33m��[1;30m���[0;34m����[1;44m����[30;40m�������[0;33m���[34m��[1;30m�������[47m� [1C[0;36m� +[34m������[33m����[1;30m������[0;34m����[1;44m����[30;40m��[0;33m��[1;30m���[0;34m����[1;44m����[30;40m�������[0;33m���[34m��[1;30m�������[47m� [1C[0;36m���[0m 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 @@ +[0;1;32mP[0;32mlayer [1;32mL[0;32misting [1;32mF[0;32mor [1;31mN[0;31mew [1;31mY[0;31mork [1;31m2008 + +[0;32m-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +[1;36mRank: Lvl: Name: Points: S: T: +[1;34m1 [1;32m0 [1;31mDeuce [1;32m11 [1;33mM [1;34mHEADBANGER 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=®istered; + +// 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,"[0;1;32mP[0;32mlayer [1;32mL[0;32misting [1;32mF[0;32mor [1;31mN[0;31mew [1;31mY[0;31mork [1;31m2008\n\n"); + fprintf(ascii_file,"Player Listing For New York 2008\n\n"); + fprintf(ansi_file,"[0;32m-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n"); + fprintf(ascii_file,"-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n"); + if ((scr_file=ShareFileOpen(SCR_FILENAME,"rb"))!=NULL) { + cnt=1; + fprintf(ansi_file,"[1;36mRank: 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,"[1;34m%-5d [1;32m%-2d [1;31m",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," [1;32m%-20s ",D_Num(user_scr.points)); + fprintf(ascii_file," %-20s ",D_Num(user_scr.points)); + if (user_scr.sex==MALE) { + fprintf(ansi_file,"[1;33mM "); + fprintf(ascii_file,"M "); + } else { + fprintf(ansi_file,"[1;33mF "); + fprintf(ascii_file,"F "); + } + + switch(user_scr.nation) { + case HEADBANGER: + fprintf(ansi_file,"[1;34mHEADBANGER "); + fprintf(ascii_file,"HEADBANGER "); + break; + case HIPPIE: + fprintf(ansi_file,"[1;34mHIPPIE "); + fprintf(ascii_file,"HIPPIE "); + break; + case BIG_FAT_DUDE: + fprintf(ansi_file,"[1;34mBIG FAT DUDE "); + fprintf(ascii_file,"BIG FAT DUDE "); + break; + case CRACK_ADDICT: + fprintf(ansi_file,"[1;34mCRACK ADDICT "); + fprintf(ascii_file,"CRACK ADDICT "); + break; + case PUNK: + fprintf(ansi_file,"[1;34mPUNK "); + 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("[1;32m",TRUE); + else if(line[cnt]=='1') + od_disp_emu("[0;34m",TRUE); + else if(line[cnt]=='2') + od_disp_emu("[0;32m",TRUE); + else if(line[cnt]=='3') + od_disp_emu("[0;36m",TRUE); + else if(line[cnt]=='4') + od_disp_emu("[0;31m",TRUE); + else if(line[cnt]=='5') + od_disp_emu("[0;35m",TRUE); + else if(line[cnt]=='6') + od_disp_emu("[0;33m",TRUE); + else if(line[cnt]=='7') + od_disp_emu("[0;37m",TRUE); + else if(line[cnt]=='8') + od_disp_emu("[1;30m",TRUE); + else if(line[cnt]=='9') + od_disp_emu("[1;34m",TRUE); + else if(line[cnt]=='!') + od_disp_emu("[1;36m",TRUE); + else if(line[cnt]=='@') + od_disp_emu("[1;31m",TRUE); + else if(line[cnt]=='#') + od_disp_emu("[1;35m",TRUE); + else if(line[cnt]=='$') + od_disp_emu("[1;33m",TRUE); + else if(line[cnt]=='%') + od_disp_emu("[1;37m",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("[1;32m",TRUE); + else if(line[cnt]=='1') + od_disp_emu("[0;34m",TRUE); + else if(line[cnt]=='2') + od_disp_emu("[0;32m",TRUE); + else if(line[cnt]=='3') + od_disp_emu("[0;36m",TRUE); + else if(line[cnt]=='4') + od_disp_emu("[0;31m",TRUE); + else if(line[cnt]=='5') + od_disp_emu("[0;35m",TRUE); + else if(line[cnt]=='6') + od_disp_emu("[0;33m",TRUE); + else if(line[cnt]=='7') + od_disp_emu("[0;37m",TRUE); + else if(line[cnt]=='8') + od_disp_emu("[1;30m",TRUE); + else if(line[cnt]=='9') + od_disp_emu("[1;34m",TRUE); + else if(line[cnt]=='!') + od_disp_emu("[1;36m",TRUE); + else if(line[cnt]=='@') + od_disp_emu("[1;31m",TRUE); + else if(line[cnt]=='#') + od_disp_emu("[1;35m",TRUE); + else if(line[cnt]=='$') + od_disp_emu("[1;33m",TRUE); + else if(line[cnt]=='%') + od_disp_emu("[1;37m",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,"[1;32m"); + else if(line[cnt]=='1') + fprintf(ans_phile,"[0;34m"); + else if(line[cnt]=='2') + fprintf(ans_phile,"[0;32m"); + else if(line[cnt]=='3') + fprintf(ans_phile,"[0;36m"); + else if(line[cnt]=='4') + fprintf(ans_phile,"[0;31m"); + else if(line[cnt]=='5') + fprintf(ans_phile,"[0;35m"); + else if(line[cnt]=='6') + fprintf(ans_phile,"[0;33m"); + else if(line[cnt]=='7') + fprintf(ans_phile,"[0;37m"); + else if(line[cnt]=='8') + fprintf(ans_phile,"[1;30m"); + else if(line[cnt]=='9') + fprintf(ans_phile,"[1;34m"); + else if(line[cnt]=='!') + fprintf(ans_phile,"[1;36m"); + else if(line[cnt]=='@') + fprintf(ans_phile,"[1;31m"); + else if(line[cnt]=='#') + fprintf(ans_phile,"[1;35m"); + else if(line[cnt]=='$') + fprintf(ans_phile,"[1;33m"); + else if(line[cnt]=='%') + fprintf(ans_phile,"[1;37m"); + } 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[40m[2J[23C[0;1;33;41m���������������[40m +[17C[41m����������������������������������[40m +[11C[41m���������������������������������������������[40m +[9C[41m�������������������������������������������������[40m +[10C[41m��������������������������������������������������[1C[47m [40m +[15C[41m�����������������������������������������[4C[30;40m�[47m� [40m +[23C[33;41m�������������������������[11C[30;40m��[47m۱ [40m +[27C[33;41m���������������[16C[30;40m��[47m��۱ [40m +[28C[33;41m�������������[16C[30;40m�������[47m� [40m +[8C[0;34m��[19C[1;33;41m������۲���[17C[30;40m�������[47m� [40m +[7C[0;34m����[18C[1;33;41m�������۲�[0;34m����[1;44m����[10C[30;40m�������[47m� [40m +[7C[0;34m����[9C�����[44m [40m�[1;44m����[10C[30;40m�������[47m� [40m +[6C[0;34m������[9C���[44m [40m�[1;44m����[7C[0;34m����[1;30m�������[47m� [40m +[6C[0;34m������[33m������ [34m����[1;44m����[33;41m�����۲[0;34m����[1;44m����[0;33m����������[34m��[1;30m�������[47m� [40m +[6C[0;34m������[33m������ [34m����[1;44m����[33;41m�����۲[0;34m����[1;44m����[0;33m����������[34m��[1;30m�������[47m� [40m +[6C[0;34m������[33m�����[1;30m�����[0;34m����[1;44m����[30;40m�[33;41m����۲[0;34m����[1;44m����[0;33m����������[34m��[1;30m�������[47m� [40m +[6C[0;34m������[33m����[1;30m������[0;34m����[1;44m����[30;40m��[33;41m��[30;40m���[0;34m����[1;44m����[30;40m�������[0;33m���[34m��[1;30m�������[47m� [40m +[6C[0;34m������[33m����[1;30m������[0;34m����[1;44m����[30;40m��[0;33m��[1;30m���[0;34m����[1;44m����[30;40m�������[0;33m���[34m��[1;30m�������[47m� [40m +[6C[0;34m������[33m����[1;30m������[0;34m����[1;44m����[30;40m��[0;33m��[1;30m���[0;34m����[1;44m����[30;40m�������[0;33m���[34m��[1;30m�������[47m� [40m +[6C[0;34m������[33m����[1;30m������[0;34m����[1;44m����[30;40m��[0;33m��[1;30m���[0;34m����[1;44m����[30;40m�������[0;33m���[34m��[1;30m�������[47m� [40m +[6C[0;34m������[33m����[1;30m������[0;34m����[1;44m����[30;40m��[0;33m��[1;30m���[0;34m����[1;44m����[30;40m�������[0;33m���[34m��[1;30m�������[47m� [0m 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