@@ -193,12 +193,15 @@ void CSpeedKernel::ComputeShipData()
193193 MaxShields[MAX_PLAYERS_PER_TEAM ][ATTER ][T_SS ] = 200 ;
194194 MaxShields[MAX_PLAYERS_PER_TEAM ][ATTER ][T_KOLO ] = 100 ;
195195 MaxShields[MAX_PLAYERS_PER_TEAM ][ATTER ][T_REC ] = 10 ;
196- MaxShields[MAX_PLAYERS_PER_TEAM ][ATTER ][T_SPIO ] = 0 .01f ;
196+ MaxShields[MAX_PLAYERS_PER_TEAM ][ATTER ][T_SPIO ] = 0 .01f ; // Strange
197197 MaxShields[MAX_PLAYERS_PER_TEAM ][ATTER ][T_BOMBER ] = 500 ;
198198 MaxShields[MAX_PLAYERS_PER_TEAM ][ATTER ][T_SAT ] = 1 ;
199199 MaxShields[MAX_PLAYERS_PER_TEAM ][ATTER ][T_ZER ] = 500 ;
200200 MaxShields[MAX_PLAYERS_PER_TEAM ][ATTER ][T_TS ] = 50000 ;
201201 MaxShields[MAX_PLAYERS_PER_TEAM ][ATTER ][T_IC ] = 400 ;
202+ MaxShields[MAX_PLAYERS_PER_TEAM ][ATTER ][T_CRA ] = 1 ;
203+ MaxShields[MAX_PLAYERS_PER_TEAM ][ATTER ][T_REAP ] = 700 ;
204+ MaxShields[MAX_PLAYERS_PER_TEAM ][ATTER ][T_PF ] = 100 ;
202205 MaxShields[MAX_PLAYERS_PER_TEAM ][ATTER ][T_RAK ] = 20 ;
203206 MaxShields[MAX_PLAYERS_PER_TEAM ][ATTER ][T_LL ] = 25 ;
204207 MaxShields[MAX_PLAYERS_PER_TEAM ][ATTER ][T_SL ] = 100 ;
@@ -216,12 +219,15 @@ void CSpeedKernel::ComputeShipData()
216219 Dams[MAX_PLAYERS_PER_TEAM ][ATTER ][T_SS ] = 1000 ;
217220 Dams[MAX_PLAYERS_PER_TEAM ][ATTER ][T_KOLO ] = 50 ;
218221 Dams[MAX_PLAYERS_PER_TEAM ][ATTER ][T_REC ] = 1 ;
219- Dams[MAX_PLAYERS_PER_TEAM ][ATTER ][T_SPIO ] = 0 .01f ;
222+ Dams[MAX_PLAYERS_PER_TEAM ][ATTER ][T_SPIO ] = 0 .01f ; // Strange
220223 Dams[MAX_PLAYERS_PER_TEAM ][ATTER ][T_BOMBER ] = 1000 ;
221224 Dams[MAX_PLAYERS_PER_TEAM ][ATTER ][T_SAT ] = 1 ;
222225 Dams[MAX_PLAYERS_PER_TEAM ][ATTER ][T_ZER ] = 2000 ;
223226 Dams[MAX_PLAYERS_PER_TEAM ][ATTER ][T_TS ] = 200000 ;
224227 Dams[MAX_PLAYERS_PER_TEAM ][ATTER ][T_IC ] = 700 ;
228+ Dams[MAX_PLAYERS_PER_TEAM ][ATTER ][T_CRA ] = 1 ;
229+ Dams[MAX_PLAYERS_PER_TEAM ][ATTER ][T_REAP ] = 2800 ;
230+ Dams[MAX_PLAYERS_PER_TEAM ][ATTER ][T_PF ] = 200 ;
225231 Dams[MAX_PLAYERS_PER_TEAM ][ATTER ][T_RAK ] = 80 ;
226232 Dams[MAX_PLAYERS_PER_TEAM ][ATTER ][T_LL ] = 100 ;
227233 Dams[MAX_PLAYERS_PER_TEAM ][ATTER ][T_SL ] = 250 ;
@@ -273,7 +279,9 @@ void CSpeedKernel::ComputeShipData()
273279 {
274280 LadeKaps[i] = 0 ;
275281 Verbrauch[i] = 0 ;
276- BaseSpeed[i] = 0 ;
282+ for (int engine = 0 ; engine < TW_MAX ; engine++) {
283+ BaseSpeed[engine][i] = 0 ;
284+ }
277285 }
278286 // ship capacity
279287 LadeKaps[T_KT ] = 5000 ;
@@ -290,6 +298,8 @@ void CSpeedKernel::ComputeShipData()
290298 LadeKaps[T_ZER ] = 2000 ;
291299 LadeKaps[T_TS ] = 1000000 ;
292300 LadeKaps[T_IC ] = 750 ;
301+ LadeKaps[T_REAP ] = 10000 ;
302+ LadeKaps[T_PF ] = 10000 ;
293303
294304 // consumption
295305 Verbrauch[T_KT ] = 10 ;
@@ -301,27 +311,40 @@ void CSpeedKernel::ComputeShipData()
301311 Verbrauch[T_KOLO ] = 1000 ;
302312 Verbrauch[T_REC ] = 300 ;
303313 Verbrauch[T_SPIO ] = 1 ;
304- Verbrauch[T_BOMBER ] = 1000 ;
314+ Verbrauch[T_BOMBER ] = 700 ;
305315 Verbrauch[T_ZER ] = 1000 ;
306316 Verbrauch[T_TS ] = 1 ;
307317 Verbrauch[T_IC ] = 250 ;
318+ Verbrauch[T_REAP ] = 1100 ;
319+ Verbrauch[T_PF ] = 300 ;
308320
309321 // speed
310- BaseSpeed[T_KT ] = 5000 ;
311- BaseSpeed[T_GT ] = 7500 ;
312- BaseSpeed[T_LJ ] = 12500 ;
313- BaseSpeed[T_SJ ] = 10000 ;
314- BaseSpeed[T_KREUZER ] = 15000 ;
315- BaseSpeed[T_SS ] = 10000 ;
316- BaseSpeed[T_KOLO ] = 2500 ;
317- BaseSpeed[T_REC ] = 2000 ;
318- BaseSpeed[T_SPIO ] = 100000000 ;
319- BaseSpeed[T_BOMBER ] = 4000 ;
320- BaseSpeed[T_ZER ] = 5000 ;
321- BaseSpeed[T_TS ] = 100 ;
322- BaseSpeed[T_IC ] = 10000 ;
322+ // The base speed for each engine type is specified, as ships can be equipped with different types from some time.
323+ // If the engine cannot be used by the ship in any way, 0 is specified (initialized above)
324+
325+ BaseSpeed[TW_VERBRENNUNG ][T_KT ] = 5000 ;
326+ BaseSpeed[TW_IMPULS ][T_KT ] = 10000 ;
327+ BaseSpeed[TW_VERBRENNUNG ][T_GT ] = 7500 ;
328+ BaseSpeed[TW_VERBRENNUNG ][T_LJ ] = 12500 ;
329+ BaseSpeed[TW_VERBRENNUNG ][T_SJ ] = 10000 ;
330+ BaseSpeed[TW_HYPERRAUM ][T_KREUZER ] = 15000 ;
331+ BaseSpeed[TW_HYPERRAUM ][T_SS ] = 10000 ;
332+ BaseSpeed[TW_IMPULS ][T_KOLO ] = 2500 ;
333+ BaseSpeed[TW_VERBRENNUNG ][T_REC ] = 300 ;
334+ BaseSpeed[TW_IMPULS ][T_REC ] = 600 ;
335+ BaseSpeed[TW_HYPERRAUM ][T_REC ] = 900 ;
336+ BaseSpeed[TW_VERBRENNUNG ][T_SPIO ] = 100000000 ;
337+ BaseSpeed[TW_IMPULS ][T_BOMBER ] = 4000 ;
338+ BaseSpeed[TW_HYPERRAUM ][T_BOMBER ] = 5000 ;
339+ BaseSpeed[TW_HYPERRAUM ][T_ZER ] = 5000 ;
340+ BaseSpeed[TW_HYPERRAUM ][T_TS ] = 100 ;
341+ BaseSpeed[TW_HYPERRAUM ][T_IC ] = 10000 ;
342+ BaseSpeed[TW_HYPERRAUM ][T_REAP ] = 7000 ;
343+ BaseSpeed[TW_HYPERRAUM ][T_PF ] = 12000 ;
323344 }
324345
346+ // Base Engine. For some ships, the engine can be changed when a certain level is reached. The best engine is always used (see GetShipSpeed)
347+
325348 Triebwerke[T_KT ] = TW_VERBRENNUNG ;
326349 Triebwerke[T_GT ] = TW_VERBRENNUNG ;
327350 Triebwerke[T_LJ ] = TW_VERBRENNUNG ;
@@ -335,6 +358,8 @@ void CSpeedKernel::ComputeShipData()
335358 Triebwerke[T_ZER ] = TW_HYPERRAUM ;
336359 Triebwerke[T_TS ] = TW_HYPERRAUM ;
337360 Triebwerke[T_IC ] = TW_HYPERRAUM ;
361+ Triebwerke[T_REAP ] = TW_HYPERRAUM ;
362+ Triebwerke[T_PF ] = TW_HYPERRAUM ;
338363}
339364
340365// inits random number generator
@@ -400,17 +425,20 @@ DWORD CSpeedKernel::ComputeFlyTime(const PlaniPos& b, const PlaniPos& e, int Fle
400425
401426int CSpeedKernel::GetShipSpeed (ITEM_TYPE Ship, int FleetID)
402427{
403- int basesp = BaseSpeed[Ship];
404428 int engine = Triebwerke[Ship];
405- if (Ship == T_KT && m_TechsTW[FleetID][engine + 1 ] >= 5 ) {
406- basesp *= 2 ;
407- engine += 1 ;
429+ if (Ship == T_KT && m_TechsTW[FleetID][TW_IMPULS ] >= 5 ) {
430+ engine = TW_IMPULS ;
431+ }
432+ if (Ship == T_BOMBER && m_TechsTW[FleetID][TW_HYPERRAUM ] >= 8 ) {
433+ engine = TW_HYPERRAUM ;
408434 }
409- if (Ship == T_BOMBER && m_TechsTW[FleetID][engine + 1 ] >= 8 ) {
410- basesp = 5000 ;
411- engine += 1 ;
435+ if (Ship == T_REC && m_TechsTW[FleetID][TW_IMPULS ] >= 17 ) {
436+ engine = TW_IMPULS ;
412437 }
413- return basesp * (1 + (float )m_TechsTW[FleetID][engine] * (engine + 1 ) / 10 .0f );
438+ if (Ship == T_REC && m_TechsTW[FleetID][TW_HYPERRAUM ] >= 15 ) {
439+ engine = TW_HYPERRAUM ;
440+ }
441+ return BaseSpeed[engine][Ship] * (1 + (float )m_TechsTW[FleetID][engine] * (engine + 1 ) / 10 .0f );
414442}
415443
416444int CSpeedKernel::GetFleetSpeed (int FleetID, const vector<SItem>& vFleet)
@@ -932,7 +960,7 @@ bool CSpeedKernel::LoadRFFile(char *RFFile) {
932960
933961bool CSpeedKernel::LoadShipData (char *SDFile) {
934962 // load shield, damage, cost (life)
935- genstring s;
963+ genstring s, eng ;
936964 long i, num;
937965 if (!SDFile)
938966 return false ;
@@ -956,9 +984,13 @@ bool CSpeedKernel::LoadShipData(char *SDFile) {
956984 // capacity
957985 if (iniFile.GetLong (num, _T (" Capacity" ), m_IniFleetNames[i]))
958986 LadeKaps[i] = num;
959- // base speed
960- if (iniFile.GetLong (num, _T (" BaseSpeed" ), m_IniFleetNames[i]))
961- BaseSpeed[i] = num;
987+ // base speed for each type of engine
988+ if (iniFile.GetStr (eng, _T (" BaseSpeed" ), m_IniFleetNames[i])) {
989+ auto engines = StringToRes (eng); // use StringToRes method to get a triplet
990+ BaseSpeed[TW_VERBRENNUNG ][i] = engines.met ;
991+ BaseSpeed[TW_IMPULS ][i] = engines.kris ;
992+ BaseSpeed[TW_HYPERRAUM ][i] = engines.deut ;
993+ }
962994 }
963995 }
964996
0 commit comments