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 } 211