static void LoadStarDesc (STAR_DESC *SDPtr, DECODE_REF fh) { cread_16s(fh, &SDPtr->star_pt.x); cread_16s(fh, &SDPtr->star_pt.y); cread_8 (fh, &SDPtr->Type); cread_8 (fh, &SDPtr->Index); cread_8 (fh, &SDPtr->Prefix); cread_8 (fh, &SDPtr->Postfix); }
static void LoadEncounter (ENCOUNTER *EncounterPtr, DECODE_REF fh) { COUNT i; cread_ptr (fh); /* useless ptr; HENCOUNTER pred */ EncounterPtr->pred = 0; cread_ptr (fh); /* useless ptr; HENCOUNTER succ */ EncounterPtr->succ = 0; cread_ptr (fh); /* useless ptr; HELEMENT hElement */ EncounterPtr->hElement = 0; cread_16s (fh, &EncounterPtr->transition_state); cread_16s (fh, &EncounterPtr->origin.x); cread_16s (fh, &EncounterPtr->origin.y); cread_16 (fh, &EncounterPtr->radius); // STAR_DESC fields cread_16s (fh, &EncounterPtr->SD.star_pt.x); cread_16s (fh, &EncounterPtr->SD.star_pt.y); cread_8 (fh, &EncounterPtr->SD.Type); cread_8 (fh, &EncounterPtr->SD.Index); cread_16 (fh, NULL); /* alignment padding */ // Load each entry in the BRIEF_SHIP_INFO array for (i = 0; i < MAX_HYPER_SHIPS; i++) { BRIEF_SHIP_INFO *ShipInfo = &EncounterPtr->ShipList[i]; BYTE tmpb; cread_16 (fh, NULL); /* useless; was SHIP_INFO.ship_flags */ cread_8 (fh, &ShipInfo->race_id); cread_8 (fh, NULL); /* useless; was SHIP_INFO.var2 */ // XXX: reading crew as BYTE to maintain savegame compatibility cread_8 (fh, &tmpb); ShipInfo->crew_level = tmpb; cread_8 (fh, &tmpb); ShipInfo->max_crew = tmpb; cread_8 (fh, NULL); /* useless; was SHIP_INFO.energy_level */ cread_8 (fh, &ShipInfo->max_energy); cread_16 (fh, NULL); /* useless; was SHIP_INFO.loc.x */ cread_16 (fh, NULL); /* useless; was SHIP_INFO.loc.y */ cread_32 (fh, NULL); /* useless val; STRING race_strings */ cread_ptr (fh); /* useless ptr; FRAME icons */ cread_ptr (fh); /* useless ptr; FRAME melee_icon */ } // Load the stuff after the BRIEF_SHIP_INFO array cread_32s (fh, &EncounterPtr->log_x); cread_32s (fh, &EncounterPtr->log_y); // JMS: Let's make savegames work even between different resolution modes. EncounterPtr->log_x <<= RESOLUTION_FACTOR; EncounterPtr->log_y <<= RESOLUTION_FACTOR; }
static void LoadClockState (CLOCK_STATE *ClockPtr, DECODE_REF fh) { cread_8 (fh, &ClockPtr->day_index); cread_8 (fh, &ClockPtr->month_index); cread_16 (fh, &ClockPtr->year_index); cread_16s (fh, &ClockPtr->tick_count); cread_16s (fh, &ClockPtr->day_in_ticks); cread_ptr (fh); /* not loading ptr; Semaphore clock_sem */ cread_ptr (fh); /* not loading ptr; Task clock_task */ cread_32 (fh, NULL); /* not loading; DWORD TimeCounter */ DummyLoadQueue (&ClockPtr->event_q, fh); }
static void LoadGroupQueue (DECODE_REF fh, QUEUE *pQueue) { COUNT num_links; cread_16 (fh, &num_links); while (num_links--) { HIPGROUP hGroup; IP_GROUP *GroupPtr; BYTE tmpb; cread_16 (fh, NULL); /* unused; was race_id */ hGroup = BuildGroup (pQueue, 0); GroupPtr = LockIpGroup (pQueue, hGroup); cread_16 (fh, NULL); /* unused; was which_side */ cread_8 (fh, NULL); /* unused; was captains_name_index */ cread_8 (fh, NULL); /* padding; for savegame compat */ cread_16 (fh, &GroupPtr->group_counter); cread_8 (fh, &GroupPtr->race_id); cread_8 (fh, &tmpb); /* was var2 */ GroupPtr->sys_loc = LONIBBLE (tmpb); GroupPtr->task = HINIBBLE (tmpb); cread_8 (fh, &GroupPtr->in_system); /* was crew_level */ cread_8 (fh, NULL); /* unused; was max_crew */ cread_8 (fh, &tmpb); /* was energy_level */ GroupPtr->dest_loc = LONIBBLE (tmpb); GroupPtr->orbit_pos = HINIBBLE (tmpb); cread_8 (fh, &GroupPtr->group_id); /* was max_energy */ cread_16s(fh, &GroupPtr->loc.x); cread_16s(fh, &GroupPtr->loc.y); UnlockIpGroup (pQueue, hGroup); } }
static void LoadRaceQueue (DECODE_REF fh, QUEUE *pQueue) { COUNT num_links; cread_16 (fh, &num_links); while (num_links--) { HFLEETINFO hStarShip; FLEET_INFO *FleetPtr; COUNT Index; BYTE tmpb; cread_16 (fh, &Index); hStarShip = GetStarShipFromIndex (pQueue, Index); FleetPtr = LockFleetInfo (pQueue, hStarShip); // Read FLEET_INFO elements cread_16 (fh, &FleetPtr->allied_state); cread_8 (fh, &FleetPtr->days_left); cread_8 (fh, &FleetPtr->growth_fract); cread_8 (fh, &tmpb); FleetPtr->crew_level = tmpb; cread_8 (fh, &tmpb); FleetPtr->max_crew = tmpb; cread_8 (fh, &FleetPtr->growth); cread_8 (fh, &FleetPtr->max_energy); cread_16s(fh, &FleetPtr->loc.x); cread_16s(fh, &FleetPtr->loc.y); cread_16 (fh, &FleetPtr->actual_strength); cread_16 (fh, &FleetPtr->known_strength); cread_16s(fh, &FleetPtr->known_loc.x); cread_16s(fh, &FleetPtr->known_loc.y); cread_8 (fh, &FleetPtr->growth_err_term); cread_8 (fh, &FleetPtr->func_index); cread_16s(fh, &FleetPtr->dest_loc.x); cread_16s(fh, &FleetPtr->dest_loc.y); cread_16 (fh, NULL); /* alignment padding */ UnlockFleetInfo (pQueue, hStarShip); } }
static void LoadGameState (GAME_STATE *GSPtr, DECODE_REF fh) { BYTE dummy8; BYTE res_scale; // JMS cread_8 (fh, &dummy8); /* obsolete */ cread_16 (fh, &GSPtr->glob_flags); cread_8 (fh, &GSPtr->CrewCost); cread_8 (fh, &GSPtr->FuelCost); cread_a8 (fh, GSPtr->ModuleCost, NUM_MODULES); cread_a8 (fh, GSPtr->ElementWorth, NUM_ELEMENT_CATEGORIES); cread_ptr (fh); /* not loading ptr; PRIMITIVE *DisplayArray */ cread_16 (fh, &GSPtr->CurrentActivity); // JMS if (LOBYTE (GSPtr->CurrentActivity) != IN_INTERPLANETARY) res_scale = RESOLUTION_FACTOR; else res_scale = 0; cread_16 (fh, NULL); /* CLOCK_STATE alignment padding */ LoadClockState (&GSPtr->GameClock, fh); cread_16s (fh, &GSPtr->autopilot.x); cread_16s (fh, &GSPtr->autopilot.y); cread_16s (fh, &GSPtr->ip_location.x); cread_16s (fh, &GSPtr->ip_location.y); /* STAMP ShipStamp */ cread_16s (fh, &GSPtr->ShipStamp.origin.x); cread_16s (fh, &GSPtr->ShipStamp.origin.y); cread_16 (fh, &GSPtr->ShipFacing); cread_8 (fh, &GSPtr->ip_planet); cread_8 (fh, &GSPtr->in_orbit); GSPtr->ShipStamp.origin.x <<= RESOLUTION_FACTOR; // JMS: Let's make savegames work even between different resolution modes. GSPtr->ShipStamp.origin.y <<= RESOLUTION_FACTOR; // JMS: Let's make savegames work even between different resolution modes. /* VELOCITY_DESC velocity */ cread_16 (fh, &GSPtr->velocity.TravelAngle); cread_16s (fh, &GSPtr->velocity.vector.width); cread_16s (fh, &GSPtr->velocity.vector.height); cread_16s (fh, &GSPtr->velocity.fract.width); cread_16s (fh, &GSPtr->velocity.fract.height); cread_16s (fh, &GSPtr->velocity.error.width); cread_16s (fh, &GSPtr->velocity.error.height); cread_16s (fh, &GSPtr->velocity.incr.width); cread_16s (fh, &GSPtr->velocity.incr.height); cread_16 (fh, NULL); /* VELOCITY_DESC padding */ GSPtr->velocity.vector.width <<= res_scale; // JMS: Let's make savegames work even between different resolution modes. GSPtr->velocity.vector.height <<= res_scale; // JMS: Let's make savegames work even between different resolution modes. GSPtr->velocity.fract.width <<= res_scale; // JMS: Let's make savegames work even between different resolution modes. GSPtr->velocity.fract.height <<= res_scale; // JMS: Let's make savegames work even between different resolution modes. GSPtr->velocity.error.width <<= res_scale; // JMS: Let's make savegames work even between different resolution modes. GSPtr->velocity.error.height <<= res_scale; // JMS: Let's make savegames work even between different resolution modes. GSPtr->velocity.incr.width <<= res_scale; // JMS: Let's make savegames work even between different resolution modes. GSPtr->velocity.incr.height <<= res_scale; // JMS: Let's make savegames work even between different resolution modes. cread_32 (fh, &GSPtr->BattleGroupRef); DummyLoadQueue (&GSPtr->avail_race_q, fh); DummyLoadQueue (&GSPtr->npc_built_ship_q, fh); // Not loading ip_group_q, was not there originally DummyLoadQueue (&GSPtr->encounter_q, fh); DummyLoadQueue (&GSPtr->built_ship_q, fh); cread_a8 (fh, GSPtr->GameState, sizeof (GSPtr->GameState)); //assert (sizeof (GSPtr->GameState) % 4 == 3); cread_8 (fh, NULL); /* GAME_STATE alignment padding */ }