From d8a265c292730d37ead16d6333be10451286af8a Mon Sep 17 00:00:00 2001 From: jkh Date: Sun, 4 Sep 1994 04:03:31 +0000 Subject: Bring in the 4.4 Lite games directory, modulo man page changes and segregation of the x11 based games. I'm not going to tag the originals with bsd_44_lite and do this in two stages since it's just not worth it for this collection, and I've got directory renames to deal with that way. Bleah. Submitted by: jkh --- games/phantasia/convert.c | 210 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 games/phantasia/convert.c (limited to 'games/phantasia/convert.c') diff --git a/games/phantasia/convert.c b/games/phantasia/convert.c new file mode 100644 index 0000000..f46343f --- /dev/null +++ b/games/phantasia/convert.c @@ -0,0 +1,210 @@ +/* + * Convert Phantasia 3.3.1 and 3.3.1+ characs file format to 3.3.2 + * + */ + +#include "include.h" +#include "oldplayer.h" + +struct oldplayer Oldplayer; /* old format structure */ +struct player Newplayer; /* new format structure */ + +char Oldpfile[] = DEST/characs"; /* old format file */ +char Newpfile[] = DEST/newcharacs"; /* new format file */ + +/************************************************************************ +/ +/ FUNCTION NAME: main() +/ +/ FUNCTION: convert old Phantasia player file to new format +/ +/ AUTHOR: C. Robertson, 9/1/85 E. A. Estes, 3/12/86 +/ +/ ARGUMENTS: none +/ +/ RETURN VALUE: none +/ +/ MODULES CALLED: time(), exit(), fread(), fopen(), srandom(), floor(), +/ random(), strcmp(), fwrite(), strcpy(), fclose(), fprintf() +/ +/ GLOBAL INPUTS: _iob[], Oldplayer, Newplayer +/ +/ GLOBAL OUTPUTS: Oldplayer, Newplayer +/ +/ DESCRIPTION: +/ Read in old player structures and write out to new file in +/ new format. +/ Old player file is unmodified. +/ New file is "DEST/newcharacs". +/ #define PHANTPLUS to convert from 3.3.1+. +/ +/************************************************************************/ + +main() +{ +FILE *oldcharac, *newcharac; /* to open old and new files */ + + if ((oldcharac = fopen(Oldpfile, "r")) == NULL) + { + fprintf(stderr, "Cannot open original character file!\n"); + exit(1); + } + + if ((newcharac = fopen(Newpfile, "w")) == NULL) + { + fprintf(stderr, "Cannot create new character file!\n"); + exit(1); + } + + srandom((unsigned) time((long *) NULL)); /* prime random numbers */ + + while (fread((char *) &Oldplayer, sizeof(struct oldplayer), 1, oldcharac) == 1) + /* read and convert old structures into new */ + { + Newplayer.p_experience = Oldplayer.o_experience; + Newplayer.p_level = (double) Oldplayer.o_level; + Newplayer.p_strength = Oldplayer.o_strength; + Newplayer.p_sword = Oldplayer.o_sword; + Newplayer.p_might = 0.0; /* game will calculate */ + Newplayer.p_energy = Oldplayer.o_energy; + Newplayer.p_maxenergy = Oldplayer.o_maxenergy; + Newplayer.p_shield = Oldplayer.o_shield; + Newplayer.p_quickness = (double) Oldplayer.o_quickness; + Newplayer.p_quksilver = (double) Oldplayer.o_quksilver; + Newplayer.p_speed = 0.0; /* game will calculate */ + Newplayer.p_magiclvl = Oldplayer.o_magiclvl; + Newplayer.p_mana = Oldplayer.o_mana; + Newplayer.p_brains = Oldplayer.o_brains; + Newplayer.p_poison = Oldplayer.o_poison; + Newplayer.p_gold = Oldplayer.o_gold; + Newplayer.p_gems = Oldplayer.o_gems; + Newplayer.p_sin = Oldplayer.o_sin; + Newplayer.p_x = Oldplayer.o_x; + Newplayer.p_y = Oldplayer.o_y; + Newplayer.p_1scratch = Oldplayer.o_1scratch; + Newplayer.p_2scratch = Oldplayer.o_2scratch; + + Newplayer.p_ring.ring_type = Oldplayer.o_ring.ring_type; + Newplayer.p_ring.ring_duration = Oldplayer.o_ring.ring_duration; + Newplayer.p_ring.ring_inuse = FALSE; + + Newplayer.p_age = (long) Oldplayer.o_degenerated * N_AGE; + + Newplayer.p_degenerated = Oldplayer.o_degenerated + 1; + + /* convert character type into character type and special type */ + + if (Oldplayer.o_type < 0) + /* player with crown */ + Oldplayer.o_type = -Oldplayer.o_type; + + if (Oldplayer.o_type == 99) + /* valar */ + { + Newplayer.p_specialtype = SC_VALAR; + Newplayer.p_type = (short) ROLL(C_MAGIC, C_EXPER - C_MAGIC + 1); + Newplayer.p_lives = Oldplayer.o_ring.ring_duration; + } + else if (Oldplayer.o_type == 90) + /* ex-valar */ + { + Newplayer.p_specialtype = SC_EXVALAR; + Newplayer.p_type = (short) ROLL(C_MAGIC, C_EXPER - C_MAGIC + 1); + Newplayer.p_lives = 0; + } + else if (Oldplayer.o_type > 20) + /* council of wise */ + { + Newplayer.p_specialtype = SC_COUNCIL; + Newplayer.p_type = Oldplayer.o_type - 20; + Newplayer.p_lives = Oldplayer.o_ring.ring_duration; + } + else if (Oldplayer.o_type > 10) + /* king */ + { + Newplayer.p_specialtype = SC_KING; + Newplayer.p_type = Oldplayer.o_type - 10; + Newplayer.p_lives = 0; + } + else + /* normal player */ + { + Newplayer.p_specialtype = SC_NONE; + Newplayer.p_type = Oldplayer.o_type; + Newplayer.p_lives = 0; + } + + Newplayer.p_lives = 0; + Newplayer.p_crowns = Oldplayer.o_crowns; + Newplayer.p_charms = Oldplayer.o_charms; + Newplayer.p_amulets = Oldplayer.o_amulets; + Newplayer.p_holywater = Oldplayer.o_holywater; + Newplayer.p_lastused = Oldplayer.o_lastused; + + /* convert status and name into status */ + + Newplayer.p_status = Oldplayer.o_status + S_OFF; + if (strcmp(Oldplayer.m_name, "") == 0) + /* unused recored */ + Newplayer.p_status = S_NOTUSED; + if (Oldplayer.o_quickness < 0) + /* hung up player */ + { + Newplayer.p_quickness = (double) Oldplayer.o_tampered; + Oldplayer.o_tampered = T_OFF; + Newplayer.p_status = S_HUNGUP; + } + + Newplayer.p_tampered = Oldplayer.o_tampered + T_OFF; + Newplayer.p_istat = I_OFF; + + Newplayer.p_palantir = Oldplayer.o_palantir; + Newplayer.p_blessing = Oldplayer.o_blessing; + Newplayer.p_virgin = Oldplayer.o_virgin; + Newplayer.p_blindness = Oldplayer.o_blindness; + + strcpy(Newplayer.p_name, Oldplayer.o_name); + strcpy(Newplayer.p_password, Oldplayer.o_password); + strcpy(Newplayer.p_login, Oldplayer.o_login); + + /* write new structure */ + fwrite((char *) &Newplayer, sizeof(Newplayer), 1, newcharac); + } + + fclose(oldcharac); /* close files */ + fclose(newcharac); + + exit(0); +} +/* */ +/************************************************************************ +/ +/ FUNCTION NAME: drandom() +/ +/ FUNCTION: return a random number between 0.0 < 1.0 +/ +/ AUTHOR: E. A. Estes, 2/7/86 +/ +/ ARGUMENTS: none +/ +/ RETURN VALUE: random number +/ +/ MODULES CALLED: random() +/ +/ GLOBAL INPUTS: none +/ +/ GLOBAL OUTPUTS: none +/ +/ DESCRIPTION: +/ Return a random number. +/ +/************************************************************************/ + +double +drandom() +{ + if (sizeof(int) != 2) + return((double) (random() & 0x7fff) / 32768.0); + else + return((double) random() / 32768.0); +} -- cgit v1.1