* Convert Phantasia 3.3.1 and 3.3.1+ characs file format to 3.3.2
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: convert old Phantasia player file to new format
/ AUTHOR: C. Robertson, 9/1/85 E. A. Estes, 3/12/86
/ MODULES CALLED: time(), exit(), fread(), fopen(), srandom(), floor(),
/ random(), strcmp(), fwrite(), strcpy(), fclose(), fprintf()
/ GLOBAL INPUTS: _iob[], Oldplayer, Newplayer
/ GLOBAL OUTPUTS: Oldplayer, Newplayer
/ Read in old player structures and write out to new file in
/ Old player file is unmodified.
/ New file is "DEST/newcharacs".
/ #define PHANTPLUS to convert from 3.3.1+.
/************************************************************************/
FILE *oldcharac
, *newcharac
; /* to open old and new files */
if ((oldcharac
= fopen(Oldpfile
, "r")) == NULL
)
fprintf(stderr
, "Cannot open original character file!\n");
if ((newcharac
= fopen(Newpfile
, "w")) == NULL
)
fprintf(stderr
, "Cannot create new character file!\n");
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)
Oldplayer
.o_type
= -Oldplayer
.o_type
;
if (Oldplayer
.o_type
== 99)
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)
Newplayer
.p_specialtype
= SC_EXVALAR
;
Newplayer
.p_type
= (short) ROLL(C_MAGIC
, C_EXPER
- C_MAGIC
+ 1);
else if (Oldplayer
.o_type
> 20)
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)
Newplayer
.p_specialtype
= SC_KING
;
Newplayer
.p_type
= Oldplayer
.o_type
- 10;
Newplayer
.p_specialtype
= SC_NONE
;
Newplayer
.p_type
= Oldplayer
.o_type
;
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)
Newplayer
.p_status
= S_NOTUSED
;
if (Oldplayer
.o_quickness
< 0)
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 */
/************************************************************************
/ FUNCTION NAME: drandom()
/ FUNCTION: return a random number between 0.0 < 1.0
/ AUTHOR: E. A. Estes, 2/7/86
/ RETURN VALUE: random number
/ MODULES CALLED: random()
/ Return a random number.
/************************************************************************/
return((double) (random() & 0x7fff) / 32768.0);
return((double) random() / 32768.0);