Esempio n. 1
0
int main(void) {
	dogma_context_t *ctxA, *ctxB, *ctxC;
	dogma_key_t slots[30];
	double v;

	dogma_init();
	dogma_init_context(&ctxA);
	dogma_init_context(&ctxB);
	dogma_init_context(&ctxC);

	/* In this test, we have a Rifter with one autocannon and tracking
	 * enhancers. It is being targeted by another Rifter, and a
	 * Scimitar each with the maximum number of tracking links. */

	dogma_set_ship(ctxA, TYPE_Rifter);
	dogma_add_module_sc(ctxA, TYPE_125mmGatlingAutoCannonII, &slots[0], DOGMA_STATE_Active, TYPE_BarrageS);
	dogma_add_module_s(ctxA, TYPE_TrackingEnhancerII, &slots[1], DOGMA_STATE_Online);
	dogma_add_module_s(ctxA, TYPE_TrackingEnhancerII, &slots[2], DOGMA_STATE_Online);
	dogma_add_module_s(ctxA, TYPE_TrackingEnhancerII, &slots[3], DOGMA_STATE_Online);

	/* Source: Pyfa-42efa48 (Jun 13 2013) */

	dogma_get_module_attribute(ctxA, slots[0], ATT_TrackingSpeed, &v);
	assertf(0.671744203407, v, 0.0000000000005);

	dogma_set_ship(ctxB, TYPE_Rifter);
	dogma_add_module_s(ctxB, TYPE_RemoteTrackingComputerII, &slots[10], DOGMA_STATE_Active);
	dogma_add_module_s(ctxB, TYPE_RemoteTrackingComputerII, &slots[11], DOGMA_STATE_Active);
	dogma_add_module_s(ctxB, TYPE_RemoteTrackingComputerII, &slots[12], DOGMA_STATE_Active);
	dogma_target(ctxB, (dogma_location_t){ .type = DOGMA_LOC_Module, .module_index = slots[10] }, ctxA);
Esempio n. 2
0
int main(void) {
	double v;

	dogma_init();
	dogma_init_context(&ctx);

	/* Source: Pyfa-a4d72ca (Oct 7 2013) */

	/* Let's test a whole implant set (which has bonuses affecting the
	 * set as a whole), and see how it reacts with stacking penalized
	 * modules. */

	dogma_add_implant(ctx, TYPE_HighgradeCrystalAlpha, &impslot0);
	dogma_add_implant(ctx, TYPE_HighgradeCrystalBeta, &impslot1);
	dogma_add_implant(ctx, TYPE_HighgradeCrystalGamma, &impslot2);
	dogma_add_implant(ctx, TYPE_HighgradeCrystalDelta, &impslot3);
	dogma_add_implant(ctx, TYPE_HighgradeCrystalEpsilon, &impslot4);
	dogma_add_implant(ctx, TYPE_HighgradeCrystalOmega, &impslot5);

	dogma_set_ship(ctx, TYPE_Venture);
	dogma_add_module(ctx, TYPE_SmallShieldBoosterII, &slot0);
	dogma_add_module(ctx, TYPE_ShieldBoostAmplifierII, &slot1);
	dogma_add_module(ctx, TYPE_ShieldBoostAmplifierII, &slot2);
	dogma_set_module_state(ctx, slot0, DOGMA_STATE_Active);
	dogma_set_module_state(ctx, slot1, DOGMA_STATE_Online);
	dogma_set_module_state(ctx, slot2, DOGMA_STATE_Online);

	dogma_get_module_attribute(ctx, slot0, ATT_ShieldBonus, &v);
	assertf(96.0105996145, v, 0.0000000005);

	dogma_free_context(ctx);
	dogma_init_context(&ctx);

	/* Source: Pyfa-42efa48 (Jun 13 2013) */
	/* Source: EFT 2.19.1 */

	/* Some sources say the Snake set is stacking penalized. This is
	 * not the case (unless both Pyfa and EFT are wrong). */

	dogma_add_implant(ctx, TYPE_HighgradeSnakeAlpha, &impslot0);
	dogma_add_implant(ctx, TYPE_HighgradeSnakeBeta, &impslot1);
	dogma_add_implant(ctx, TYPE_HighgradeSnakeGamma, &impslot2);
	dogma_add_implant(ctx, TYPE_HighgradeSnakeDelta, &impslot3);
	dogma_add_implant(ctx, TYPE_HighgradeSnakeEpsilon, &impslot4);
	dogma_add_implant(ctx, TYPE_HighgradeSnakeOmega, &impslot5);

	dogma_set_ship(ctx, TYPE_Venture);
	dogma_add_module(ctx, TYPE_OverdriveInjectorSystemII, &slot0);
	dogma_add_module(ctx, TYPE_SmallPolycarbonEngineHousingI, &slot1);
	dogma_add_module(ctx, TYPE_SmallPolycarbonEngineHousingI, &slot2);
	dogma_add_module(ctx, TYPE_SmallPolycarbonEngineHousingI, &slot3);
	dogma_set_module_state(ctx, slot0, DOGMA_STATE_Online);
	dogma_set_module_state(ctx, slot1, DOGMA_STATE_Online);
	dogma_set_module_state(ctx, slot2, DOGMA_STATE_Online);
	dogma_set_module_state(ctx, slot3, DOGMA_STATE_Online);

	dogma_get_ship_attribute(ctx, ATT_MaxVelocity, &v);
	assertf(644.929066501, v, 0.0000000005);

	dogma_free_context(ctx);
	dogma_init_context(&ctx);

	/* Source: EFT 2.20.3 */

	dogma_add_implant(ctx, TYPE_StrongBluePillBooster, &impslot0);

	dogma_set_ship(ctx, TYPE_Venture);
	dogma_add_module(ctx, TYPE_SmallShieldBoosterII, &slot0);
	dogma_set_module_state(ctx, slot0, DOGMA_STATE_Active);

	const dogma_location_t imploc0 = {
		.type = DOGMA_LOC_Implant,
		.implant_index = impslot0,
	};

	dogma_get_chance_based_effect_chance(ctx, imploc0, EFFECT_BoosterShieldCapacityPenalty, &v);
	assertf(0.3, v, 0.05);
	dogma_get_chance_based_effect_chance(ctx, imploc0, EFFECT_BoosterCapacitorCapacityPenalty, &v);
	assertf(0.3, v, 0.05);

	dogma_get_module_attribute(ctx, slot0, ATT_ShieldBonus, &v);
	assertf(45.5, v, 0.5);
	dogma_get_ship_attribute(ctx, ATT_ShieldCapacity, &v);
	assertf(281.25, v, 0.005);
	dogma_get_ship_attribute(ctx, ATT_CapacitorCapacity, &v);
	assertf(312.5, v, 0.05);

	dogma_toggle_chance_based_effect(ctx, imploc0, EFFECT_BoosterShieldCapacityPenalty, true);

	dogma_get_module_attribute(ctx, slot0, ATT_ShieldBonus, &v);
	assertf(45.5, v, 0.5);
	dogma_get_ship_attribute(ctx, ATT_ShieldCapacity, &v);
	assertf(217.96875, v, 0.000005);
	dogma_get_ship_attribute(ctx, ATT_CapacitorCapacity, &v);
	assertf(312.5, v, 0.05);

	dogma_toggle_chance_based_effect(ctx, imploc0, EFFECT_BoosterCapacitorCapacityPenalty, true);

	dogma_get_module_attribute(ctx, slot0, ATT_ShieldBonus, &v);
	assertf(45.5, v, 0.5);
	dogma_get_ship_attribute(ctx, ATT_ShieldCapacity, &v);
	assertf(217.96875, v, 0.000005);
	dogma_get_ship_attribute(ctx, ATT_CapacitorCapacity, &v);
	assertf(242.1875, v, 0.00005);

	dogma_toggle_chance_based_effect(ctx, imploc0, EFFECT_BoosterShieldCapacityPenalty, false);

	dogma_get_module_attribute(ctx, slot0, ATT_ShieldBonus, &v);
	assertf(45.5, v, 0.5);
	dogma_get_ship_attribute(ctx, ATT_ShieldCapacity, &v);
	assertf(281.25, v, 0.005);
	dogma_get_ship_attribute(ctx, ATT_CapacitorCapacity, &v);
	assertf(242.1875, v, 0.00005);

	dogma_toggle_chance_based_effect(ctx, imploc0, EFFECT_BoosterCapacitorCapacityPenalty, false);

	dogma_get_module_attribute(ctx, slot0, ATT_ShieldBonus, &v);
	assertf(45.5, v, 0.5);
	dogma_get_ship_attribute(ctx, ATT_ShieldCapacity, &v);
	assertf(281.25, v, 0.005);
	dogma_get_ship_attribute(ctx, ATT_CapacitorCapacity, &v);
	assertf(312.5, v, 0.05);

	dogma_free_context(ctx);
	return 0;
}