|
|
1.1 root 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: /**/
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.