LogicBattle::isEndConditionMatched, transcribed: the battle is over when end_counter is positive, when either king is dead, when tick/20 seconds reach MatchLength + OvertimeSeconds, or - once past MatchLength - when the crowns differ. the divisor is the 0x66666667/2^35 multiply in the client, which is a divide by twenty, so the battle runs at 20 ticks a second. crowns come from LogicSummoner::getStars: three when the enemy king is down, otherwise two minus the enemy princess towers still standing, which is exactly what leader_towers holds. BattleRegistry keeps the LogicGameMode we built for each account and advances it on the tick the client reports in its turn message, so the server now tracks the clock, the crowns and whether the battle is over, and drops the session when the player goes home. the two isSummoner guards in the overtime branch are left out: they only fire for an object that is not a summoner, which a king tower always is.
35 lines
1.4 KiB
Rust
35 lines
1.4 KiB
Rust
mod logic_battle;
|
|
mod logic_battle_event;
|
|
mod logic_character;
|
|
mod logic_component;
|
|
mod logic_game_mode;
|
|
mod logic_game_object;
|
|
mod logic_game_object_manager;
|
|
mod logic_game_object_ref;
|
|
mod logic_tilemap;
|
|
mod logic_time;
|
|
mod logic_tutorial_manager;
|
|
mod verify;
|
|
pub use logic_battle::{
|
|
LogicBattle, BATTLE_INT_ARRAY, BATTLE_TICKS_PER_SECOND, BATTLE_TRAILING_INTS, BATTLE_TYPE_NPC,
|
|
BATTLE_TYPE_PVP, BATTLE_TYPE_REPLAY, CROWNS_FOR_LEADER, LEADER_TOWER_COUNT,
|
|
};
|
|
pub use logic_character::{
|
|
LogicCharacter, LogicSummoner, LogicSummonerDeck, DEFAULT_SIZE, DIRECTION_BOTTOM, DIRECTION_TOP,
|
|
};
|
|
pub use logic_component::{
|
|
LogicCharacterBuffComponent, LogicCombatComponent, LogicComponent, LogicHitpointComponent,
|
|
COMPONENT_BUFF, COMPONENT_COMBAT, COMPONENT_HITPOINT, COMPONENT_MOVEMENT,
|
|
};
|
|
pub use logic_battle_event::LogicBattleEvent;
|
|
pub use logic_game_mode::{LogicGameMode, SECTION_BATTLE, SECTION_TUTORIAL};
|
|
pub use logic_game_object::{
|
|
LogicGameObject, LogicGameObjectEntry, LogicObjectBody, LogicVector2, CHARACTER_OBJECT_TYPE,
|
|
COMPONENT_PASSES, OBJECT_TYPE_COUNT,
|
|
};
|
|
pub use logic_game_object_manager::LogicGameObjectManager;
|
|
pub use logic_game_object_ref::LogicGameObjectRef;
|
|
pub use logic_tilemap::{LogicTilemap, OBJECT_KING_TOWER, OBJECT_PRINCESS_TOWER, SUBTILE_UNITS};
|
|
pub use logic_time::LogicTime;
|
|
pub use logic_tutorial_manager::LogicTutorialManager;
|
|
pub use verify::{verify_snapshot, SnapshotReport};
|