summaryrefslogtreecommitdiffstats
path: root/games/phantasia/convert.c
diff options
context:
space:
mode:
authorjkh <jkh@FreeBSD.org>1994-09-04 04:03:31 +0000
committerjkh <jkh@FreeBSD.org>1994-09-04 04:03:31 +0000
commitd8a265c292730d37ead16d6333be10451286af8a (patch)
treecb4c99719941e9adcca318e58d903337a369d49f /games/phantasia/convert.c
downloadFreeBSD-src-d8a265c292730d37ead16d6333be10451286af8a.zip
FreeBSD-src-d8a265c292730d37ead16d6333be10451286af8a.tar.gz
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
Diffstat (limited to 'games/phantasia/convert.c')
-rw-r--r--games/phantasia/convert.c210
1 files changed, 210 insertions, 0 deletions
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, "<null>") == 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);
+}
OpenPOWER on IntegriCloud