diff --git a/src/scripts/game/Battle.ts b/src/scripts/game/Battle.ts index c44eb85..d2852cb 100644 --- a/src/scripts/game/Battle.ts +++ b/src/scripts/game/Battle.ts @@ -53,7 +53,7 @@ module SpaceTac.Game { // Sort by throw result play_order.sort(function (ship1: Ship, ship2: Ship) { - return (ship2.initative_throw - ship1.initative_throw); + return (ship2.initiative.current - ship1.initiative.current); }); this.play_order = play_order; } diff --git a/src/scripts/game/Ship.ts b/src/scripts/game/Ship.ts index 6f29cad..fe3ceae 100644 --- a/src/scripts/game/Ship.ts +++ b/src/scripts/game/Ship.ts @@ -25,11 +25,8 @@ module SpaceTac.Game { // Facing direction in the arena arena_angle: number; - // Current initiative level (high numbers will allow this ship to play sooner) - initiative_level: number; - - // Last initiative throw - initative_throw: number; + // Initiative (high numbers will allow this ship to play sooner) + initiative: Attribute; // Current number of action points ap_current: Attribute; @@ -54,7 +51,8 @@ module SpaceTac.Game { this.attributes = new AttributeCollection(); this.fleet = fleet; this.name = name; - this.initiative_level = 1; + this.initiative = this.newAttribute(AttributeCode.Initiative); + this.initiative.setMaximal(1); this.ap_current = this.newAttribute(AttributeCode.AP); this.ap_initial = this.newAttribute(AttributeCode.AP_Initial); this.ap_recover = this.newAttribute(AttributeCode.AP_Recovery); @@ -90,7 +88,7 @@ module SpaceTac.Game { // Make an initiative throw, to resolve play order in a battle throwInitiative(gen: RandomGenerator): void { - this.initative_throw = gen.throw(this.initiative_level); + this.initiative.set(gen.throw(this.initiative.maximal)); } // Return the player owning this ship @@ -227,6 +225,7 @@ module SpaceTac.Game { this.collectEffects("attrmax").forEach((effect: AttributeMaxEffect) => { new_attrs.addValue(effect.attrcode, effect.value); }); + this.initiative.setMaximal(new_attrs.getValue(AttributeCode.Initiative)); this.ap_current.setMaximal(new_attrs.getValue(AttributeCode.AP)); // Compute new current values for attributes diff --git a/src/scripts/game/equipments/BasicPowerCore.ts b/src/scripts/game/equipments/BasicPowerCore.ts index 3df4f7e..7b8c450 100644 --- a/src/scripts/game/equipments/BasicPowerCore.ts +++ b/src/scripts/game/equipments/BasicPowerCore.ts @@ -9,6 +9,7 @@ module SpaceTac.Game.Equipments { this.min_level = new IntegerRange(1, 1); + this.addPermanentAttributeMaxEffect(AttributeCode.Initiative, 1); this.addPermanentAttributeMaxEffect(AttributeCode.AP, 8); this.addPermanentAttributeValueEffect(AttributeCode.AP_Initial, 5); this.addPermanentAttributeValueEffect(AttributeCode.AP_Recovery, 4); diff --git a/src/scripts/game/equipments/ConventionalEngine.ts b/src/scripts/game/equipments/ConventionalEngine.ts index f527f16..1c9402f 100644 --- a/src/scripts/game/equipments/ConventionalEngine.ts +++ b/src/scripts/game/equipments/ConventionalEngine.ts @@ -9,6 +9,7 @@ module SpaceTac.Game.Equipments { super(SlotType.Engine, "Conventional Engine"); this.min_level = new IntegerRange(1, 1); + this.addPermanentAttributeMaxEffect(AttributeCode.Initiative, 1); } protected getActionForEquipment(equipment: Equipment): BaseAction { diff --git a/src/scripts/game/specs/Battle.spec.ts b/src/scripts/game/specs/Battle.spec.ts index 9c48215..31c8464 100644 --- a/src/scripts/game/specs/Battle.spec.ts +++ b/src/scripts/game/specs/Battle.spec.ts @@ -9,15 +9,15 @@ module SpaceTac.Game { var fleet2 = new Fleet(null); var ship1 = new Ship(fleet1, "F1S1"); - ship1.initiative_level = 2; + ship1.initiative.setMaximal(2); var ship2 = new Ship(fleet1, "F1S2"); - ship2.initiative_level = 4; + ship2.initiative.setMaximal(4); var ship3 = new Ship(fleet1, "F1S3"); - ship3.initiative_level = 1; + ship3.initiative.setMaximal(1); var ship4 = new Ship(fleet2, "F2S1"); - ship4.initiative_level = 8; + ship4.initiative.setMaximal(8); var ship5 = new Ship(fleet2, "F2S2"); - ship5.initiative_level = 2; + ship5.initiative.setMaximal(2); var battle = new Battle(fleet1, fleet2); expect(battle.play_order.length).toBe(0);