Skip to content

Commit 24c0cd2

Browse files
committed
переделал расчёты базовой скорости (учитывается каждый тип двигателя)
1 parent 59d4a08 commit 24c0cd2

6 files changed

Lines changed: 191 additions & 59 deletions

File tree

SpeedKernel/SKernel_Misc.cpp

Lines changed: 61 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -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

401426
int 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

416444
int CSpeedKernel::GetFleetSpeed(int FleetID, const vector<SItem>& vFleet)
@@ -932,7 +960,7 @@ bool CSpeedKernel::LoadRFFile(char *RFFile) {
932960

933961
bool 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

SpeedKernel/SKernel_Result.cpp

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -674,7 +674,14 @@ void CSpeedKernel::ComputeBattleResult()
674674
vRec.push_back(SItem(T_REC, 1, pl));
675675
m_Result.RecFlyTime[pl] = ComputeFlyTime(m_OwnPos[pl], m_Result.Position, pl, vRec);
676676
// fuel for recyclers
677-
float rec_bsp = BaseSpeed[T_REC] * (1 + (float)m_TechsTW[pl][Triebwerke[T_REC]] * (Triebwerke[T_REC] + 1) / 10.0f);
677+
int rec_engine = Triebwerke[T_REC];
678+
if (m_TechsTW[pl][TW_IMPULS] >= 17) {
679+
rec_engine = TW_IMPULS;
680+
}
681+
if (m_TechsTW[pl][TW_HYPERRAUM] >= 15) {
682+
rec_engine = TW_HYPERRAUM;
683+
}
684+
float rec_bsp = BaseSpeed[rec_engine][T_REC] * (1 + (float)m_TechsTW[pl][rec_engine] * (rec_engine + 1) / 10.0f);
678685
float rec_sp = 35000.f / (m_Result.RecFlyTime[pl] - 10) * sqrt(dist * 10 / rec_bsp);
679686
m_Result.RecFuel[pl] = m_Result.NumRecs * Verbrauch[T_REC] * (rec_sp / 10.0f + 1) * (rec_sp / 10.0f + 1) * dist / 35000.0f + 1;
680687

@@ -690,22 +697,28 @@ void CSpeedKernel::ComputeBattleResult()
690697
{
691698
if(m_NumSetShipsAtt[i].OwnerID == pl) {
692699
int type = m_NumSetShipsAtt[i].Type;
693-
float basesp = BaseSpeed[type];
694700
int engine = Triebwerke[type];
695701
int iConsumpt = Verbrauch[type];
696-
if(type == T_KT && m_TechsTW[pl][engine + 1] >= 5)
697-
{
698-
basesp *= 2;
699-
engine += 1;
700-
iConsumpt *= 2;
702+
int cons_factor = 1;
703+
if(type == T_KT && m_TechsTW[pl][TW_IMPULS] >= 5) {
704+
engine = TW_IMPULS;
705+
cons_factor = 2;
706+
}
707+
if(type == T_BOMBER && m_TechsTW[pl][TW_HYPERRAUM] >= 8) {
708+
engine = TW_HYPERRAUM;
709+
// For some reason, the bomber's consumption does not change when the engine is changed.
710+
}
711+
if (type == T_REC && m_TechsTW[pl][TW_IMPULS] >= 17) {
712+
engine = TW_IMPULS;
713+
cons_factor = 2;
701714
}
702-
if(type == T_BOMBER && m_TechsTW[pl][engine + 1] >= 8) {
703-
basesp = 5000;
704-
engine += 1;
715+
if (type == T_REC && m_TechsTW[pl][TW_HYPERRAUM] >= 15) {
716+
engine = TW_HYPERRAUM;
717+
cons_factor = 3;
705718
}
706-
basesp *= (1 + (float)m_TechsTW[pl][engine] * (engine + 1) / 10.0f);
719+
float basesp = BaseSpeed[engine][type] * (1 + (float)m_TechsTW[pl][engine] * (engine + 1) / 10.0f);
707720
float sp = 35000.f / (uiTime - 10) * sqrt(dist * 10 / basesp);
708-
gesverb += m_NumSetShipsAtt[i].Num * iConsumpt * (sp / 10.0f + 1) * (sp / 10.0f + 1);
721+
gesverb += m_NumSetShipsAtt[i].Num * iConsumpt * cons_factor * (sp / 10.0f + 1) * (sp / 10.0f + 1);
709722
}
710723
}
711724
m_Result.SpritVerbrauch += gesverb * dist / 35000.0f + 1;

SpeedKernel/SKernel_Structs.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ enum TRIEBWERK {
119119
TW_VERBRENNUNG = 0, /*!< Combustion Engine */
120120
TW_IMPULS, /*!< Impulse Engine */
121121
TW_HYPERRAUM, /*!< Hyperspace Engine */
122+
TW_MAX,
122123
};
123124

124125
/*!

SpeedKernel/SpeedKernel.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -541,7 +541,7 @@ class SPEEDKERNEL_API CSpeedKernel
541541

542542
ShipTechs m_TechsAtt[MAX_PLAYERS_PER_TEAM];
543543
ShipTechs m_TechsDef[MAX_PLAYERS_PER_TEAM];
544-
int m_TechsTW[MAX_PLAYERS_PER_TEAM][3];
544+
int m_TechsTW[MAX_PLAYERS_PER_TEAM][TW_MAX];
545545

546546
// fleet speed (100% = 10)
547547
int m_Speed[MAX_PLAYERS_PER_TEAM];
@@ -565,7 +565,7 @@ class SPEEDKERNEL_API CSpeedKernel
565565
WORD Verbrauch[T_END];
566566
// ship engines
567567
TRIEBWERK Triebwerke[T_END];
568-
int BaseSpeed[T_END];
568+
int BaseSpeed[TW_MAX][T_END];
569569
};
570570

571571
string wchar_to_utf8(wstring str);

0 commit comments

Comments
 (0)