Commit | Line | Data |
---|---|---|
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 | ||
9 | struct oldplayer Oldplayer; /* old format structure */ | |
10 | struct player Newplayer; /* new format structure */ | |
11 | ||
12 | char Oldpfile[] = DEST/characs"; /* old format file */ | |
13 | char 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 | ||
43 | main() | |
44 | { | |
45 | FILE *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 | ||
203 | double | |
204 | drandom() | |
205 | { | |
206 | if (sizeof(int) != 2) | |
207 | return((double) (random() & 0x7fff) / 32768.0); | |
208 | else | |
209 | return((double) random() / 32768.0); | |
210 | } |