void dumpPlanetType (FILE *out, int index, const PlanetFrame *planetType) { int i; fprintf (out, "%s\n" "\tType: %s\n" "\tColor: %s\n" "\tSurface generation algoritm: %s\n" "\tTectonics: %s\n" "\tAtmosphere: %s\n" "\tDensity: %s\n" "\tElements:\n", planetTypeString (index), worldSizeString (PLANSIZE (planetType->Type)), bodyColorString (PLANCOLOR (planetType->Type)), worldGenAlgoString (PLANALGO (planetType->Type)), tectonicsString (planetType->BaseTectonics), atmosphereString (HINIBBLE (planetType->AtmoAndDensity)), densityString (LONIBBLE (planetType->AtmoAndDensity)) ); for (i = 0; i < NUM_USEFUL_ELEMENTS; i++) { const ELEMENT_ENTRY *entry; entry = &planetType->UsefulElements[i]; if (entry->Density == 0) continue; fprintf(out, "\t\t0 to %d %s-quality (+%d) deposits of %s (%s)\n", DEPOSIT_QUANTITY (entry->Density), depositQualityString (DEPOSIT_QUALITY (entry->Density)), DEPOSIT_QUALITY (entry->Density) * 5, GAME_STRING (ELEMENTS_STRING_BASE + entry->ElementType), GAME_STRING (CARGO_STRING_BASE + 2 + ElementCategory ( entry->ElementType)) ); } fprintf (out, "\n"); }
static COUNT CalcMineralDeposits (SYSTEM_INFO *SysInfoPtr, COUNT which_deposit) { BYTE j; COUNT num_deposits; const ELEMENT_ENTRY *eptr; eptr = &SysInfoPtr->PlanetInfo.PlanDataPtr->UsefulElements[0]; num_deposits = 0; j = NUM_USEFUL_ELEMENTS; do { BYTE num_possible; num_possible = (BYTE)((BYTE)TFB_Random () % (DEPOSIT_QUANTITY (eptr->Density) + 1)); while (num_possible--) { #define MEDIUM_DEPOSIT_THRESHOLD 150 #define LARGE_DEPOSIT_THRESHOLD 225 DWORD rand_val; UWORD loword, hiword; COUNT deposit_quality_fine, deposit_quality_gross; // JMS: For making the mineral blip smaller in case it is partially scavenged. SDWORD temp_deposit_quality; deposit_quality_fine = ((COUNT)TFB_Random () % 100) + ( DEPOSIT_QUALITY (eptr->Density) + SysInfoPtr->StarSize ) * 50; // BW: Check whether we're in the NE quadrant if ((GLOBAL_SIS (log_x) > UNIVERSE_TO_LOGX(5000)) && (GLOBAL_SIS (log_y) < UNIVERSE_TO_LOGY(6000))) { deposit_quality_fine = (COUNT)(deposit_quality_fine * DEPLETION_RATE); } // JMS: This makes the mineral blip smaller in case it is partially scavenged. temp_deposit_quality = deposit_quality_fine - (SysInfoPtr->PlanetInfo.PartiallyScavengedList[MINERAL_SCAN][which_deposit] * 10); if (temp_deposit_quality < 0) temp_deposit_quality = 0; if (deposit_quality_fine < MEDIUM_DEPOSIT_THRESHOLD) deposit_quality_gross = 0; else if (deposit_quality_fine < LARGE_DEPOSIT_THRESHOLD) deposit_quality_gross = 1; else deposit_quality_gross = 2; rand_val = TFB_Random (); loword = LOWORD (rand_val); hiword = HIWORD (rand_val); if (RESOLUTION_FACTOR == 0) SysInfoPtr->PlanetInfo.CurPt.x = (LOBYTE (loword) % (MAP_WIDTH - (8 << 1))) + 8; else SysInfoPtr->PlanetInfo.CurPt.x = loword % (MAP_WIDTH - (8 << 1)) + 8; // JMS_GFX: Replaced previous line with this line (BYTE was too small for 640x480 maps.) if (RESOLUTION_FACTOR == 0) SysInfoPtr->PlanetInfo.CurPt.y = (HIBYTE (loword) % (MAP_HEIGHT - (8 << 1))) + 8; else SysInfoPtr->PlanetInfo.CurPt.y = hiword % (MAP_HEIGHT - (8 << 1)) + 8; // JMS_GFX: Replaced previous line with this line (BYTE was too small for 1280x960 maps.) SysInfoPtr->PlanetInfo.CurDensity = MAKE_WORD (deposit_quality_gross, deposit_quality_fine / 10 + 1); SysInfoPtr->PlanetInfo.CurType = eptr->ElementType; #ifdef DEBUG_SURFACE log_add (log_Debug, "\t\t%d units of %Fs", SysInfoPtr->PlanetInfo.CurDensity, Elements[eptr->ElementType].name); #endif /* DEBUG_SURFACE */ if ((num_deposits >= which_deposit && !(SysInfoPtr->PlanetInfo.ScanRetrieveMask[MINERAL_SCAN] & (1L << num_deposits))) || ++num_deposits == sizeof (DWORD) * 8) goto ExitCalcMinerals; } ++eptr; } while (--j); ExitCalcMinerals: return (num_deposits); }