date and time created 88/10/19 19:55:11 by bostic
[unix-history] / usr / src / games / phantasia / convert.c
CommitLineData
0007a5ff
KB
1/*
2 * Convert Phantasia 3.3.1 and 3.3.1+ characs file format to 3.3.2
3 *
4 */
5
6#include "include.h"
7#include "oldplayer.h"
8
9struct oldplayer Oldplayer; /* old format structure */
10struct player Newplayer; /* new format structure */
11
12char Oldpfile[] = DEST/characs"; /* old format file */
13char Newpfile[] = DEST/newcharacs"; /* new format file */
14
15/************************************************************************
16/
17/ FUNCTION NAME: main()
18/
19/ FUNCTION: convert old Phantasia player file to new format
20/
21/ AUTHOR: C. Robertson, 9/1/85 E. A. Estes, 3/12/86
22/
23/ ARGUMENTS: none
24/
25/ RETURN VALUE: none
26/
27/ MODULES CALLED: time(), exit(), fread(), fopen(), srandom(), floor(),
28/ random(), strcmp(), fwrite(), strcpy(), fclose(), fprintf()
29/
30/ GLOBAL INPUTS: _iob[], Oldplayer, Newplayer
31/
32/ GLOBAL OUTPUTS: Oldplayer, Newplayer
33/
34/ DESCRIPTION:
35/ Read in old player structures and write out to new file in
36/ new format.
37/ Old player file is unmodified.
38/ New file is "DEST/newcharacs".
39/ #define PHANTPLUS to convert from 3.3.1+.
40/
41/************************************************************************/
42
43main()
44{
45FILE *oldcharac, *newcharac; /* to open old and new files */
46
47 if ((oldcharac = fopen(Oldpfile, "r")) == NULL)
48 {
49 fprintf(stderr, "Cannot open original character file!\n");
50 exit(1);
51 }
52
53 if ((newcharac = fopen(Newpfile, "w")) == NULL)
54 {
55 fprintf(stderr, "Cannot create new character file!\n");
56 exit(1);
57 }
58
59 srandom((unsigned) time((long *) NULL)); /* prime random numbers */
60
61 while (fread((char *) &Oldplayer, sizeof(struct oldplayer), 1, oldcharac) == 1)
62 /* read and convert old structures into new */
63 {
64 Newplayer.p_experience = Oldplayer.o_experience;
65 Newplayer.p_level = (double) Oldplayer.o_level;
66 Newplayer.p_strength = Oldplayer.o_strength;
67 Newplayer.p_sword = Oldplayer.o_sword;
68 Newplayer.p_might = 0.0; /* game will calculate */
69 Newplayer.p_energy = Oldplayer.o_energy;
70 Newplayer.p_maxenergy = Oldplayer.o_maxenergy;
71 Newplayer.p_shield = Oldplayer.o_shield;
72 Newplayer.p_quickness = (double) Oldplayer.o_quickness;
73 Newplayer.p_quksilver = (double) Oldplayer.o_quksilver;
74 Newplayer.p_speed = 0.0; /* game will calculate */
75 Newplayer.p_magiclvl = Oldplayer.o_magiclvl;
76 Newplayer.p_mana = Oldplayer.o_mana;
77 Newplayer.p_brains = Oldplayer.o_brains;
78 Newplayer.p_poison = Oldplayer.o_poison;
79 Newplayer.p_gold = Oldplayer.o_gold;
80 Newplayer.p_gems = Oldplayer.o_gems;
81 Newplayer.p_sin = Oldplayer.o_sin;
82 Newplayer.p_x = Oldplayer.o_x;
83 Newplayer.p_y = Oldplayer.o_y;
84 Newplayer.p_1scratch = Oldplayer.o_1scratch;
85 Newplayer.p_2scratch = Oldplayer.o_2scratch;
86
87 Newplayer.p_ring.ring_type = Oldplayer.o_ring.ring_type;
88 Newplayer.p_ring.ring_duration = Oldplayer.o_ring.ring_duration;
89 Newplayer.p_ring.ring_inuse = FALSE;
90
91 Newplayer.p_age = (long) Oldplayer.o_degenerated * N_AGE;
92
93 Newplayer.p_degenerated = Oldplayer.o_degenerated + 1;
94
95 /* convert character type into character type and special type */
96
97 if (Oldplayer.o_type < 0)
98 /* player with crown */
99 Oldplayer.o_type = -Oldplayer.o_type;
100
101 if (Oldplayer.o_type == 99)
102 /* valar */
103 {
104 Newplayer.p_specialtype = SC_VALAR;
105 Newplayer.p_type = (short) ROLL(C_MAGIC, C_EXPER - C_MAGIC + 1);
106 Newplayer.p_lives = Oldplayer.o_ring.ring_duration;
107 }
108 else if (Oldplayer.o_type == 90)
109 /* ex-valar */
110 {
111 Newplayer.p_specialtype = SC_EXVALAR;
112 Newplayer.p_type = (short) ROLL(C_MAGIC, C_EXPER - C_MAGIC + 1);
113 Newplayer.p_lives = 0;
114 }
115 else if (Oldplayer.o_type > 20)
116 /* council of wise */
117 {
118 Newplayer.p_specialtype = SC_COUNCIL;
119 Newplayer.p_type = Oldplayer.o_type - 20;
120 Newplayer.p_lives = Oldplayer.o_ring.ring_duration;
121 }
122 else if (Oldplayer.o_type > 10)
123 /* king */
124 {
125 Newplayer.p_specialtype = SC_KING;
126 Newplayer.p_type = Oldplayer.o_type - 10;
127 Newplayer.p_lives = 0;
128 }
129 else
130 /* normal player */
131 {
132 Newplayer.p_specialtype = SC_NONE;
133 Newplayer.p_type = Oldplayer.o_type;
134 Newplayer.p_lives = 0;
135 }
136
137 Newplayer.p_lives = 0;
138 Newplayer.p_crowns = Oldplayer.o_crowns;
139 Newplayer.p_charms = Oldplayer.o_charms;
140 Newplayer.p_amulets = Oldplayer.o_amulets;
141 Newplayer.p_holywater = Oldplayer.o_holywater;
142 Newplayer.p_lastused = Oldplayer.o_lastused;
143
144 /* convert status and name into status */
145
146 Newplayer.p_status = Oldplayer.o_status + S_OFF;
147 if (strcmp(Oldplayer.m_name, "<null>") == 0)
148 /* unused recored */
149 Newplayer.p_status = S_NOTUSED;
150 if (Oldplayer.o_quickness < 0)
151 /* hung up player */
152 {
153 Newplayer.p_quickness = (double) Oldplayer.o_tampered;
154 Oldplayer.o_tampered = T_OFF;
155 Newplayer.p_status = S_HUNGUP;
156 }
157
158 Newplayer.p_tampered = Oldplayer.o_tampered + T_OFF;
159 Newplayer.p_istat = I_OFF;
160
161 Newplayer.p_palantir = Oldplayer.o_palantir;
162 Newplayer.p_blessing = Oldplayer.o_blessing;
163 Newplayer.p_virgin = Oldplayer.o_virgin;
164 Newplayer.p_blindness = Oldplayer.o_blindness;
165
166 strcpy(Newplayer.p_name, Oldplayer.o_name);
167 strcpy(Newplayer.p_password, Oldplayer.o_password);
168 strcpy(Newplayer.p_login, Oldplayer.o_login);
169
170 /* write new structure */
171 fwrite((char *) &Newplayer, sizeof(Newplayer), 1, newcharac);
172 }
173
174 fclose(oldcharac); /* close files */
175 fclose(newcharac);
176
177 exit(0);
178}
179/*\f*/
180/************************************************************************
181/
182/ FUNCTION NAME: drandom()
183/
184/ FUNCTION: return a random number between 0.0 < 1.0
185/
186/ AUTHOR: E. A. Estes, 2/7/86
187/
188/ ARGUMENTS: none
189/
190/ RETURN VALUE: random number
191/
192/ MODULES CALLED: random()
193/
194/ GLOBAL INPUTS: none
195/
196/ GLOBAL OUTPUTS: none
197/
198/ DESCRIPTION:
199/ Return a random number.
200/
201/************************************************************************/
202
203double
204drandom()
205{
206 if (sizeof(int) != 2)
207 return((double) (random() & 0x7fff) / 32768.0);
208 else
209 return((double) random() / 32768.0);
210}