RH |
$SAVE_VERSION = 1; // XXX ¶
|
||
RH |
$REPLAY_VERSION = 1; // XXX ¶
|
||
RH |
var obj = this.map._actionableAtter(id, 0, 0, 0) ⋯
|
||
RH |
var players = ['', 'red', 'blue', 'tan', 'green', 'orange', 'purple', 'teal', 'pink'] ⋯
|
||
RH |
state: this.rpc._createCombatState(combat, this.player), ⋯
|
||
RH |
return this.rpc._controlCreature(this.combat, creature) ⋯
|
||
RH |
state: this.rpc._createCombatState(combat, this.player), ⋯
|
||
RH |
move this and other constants to _opt ⋯
|
||
RH |
to databank? ⋯
|
||
RH |
artifact ID ⋯
|
||
RH |
return this._pathFind._neighboursOf([ ⋯
|
||
RH |
sound = 'ATK2' // XXX exceptions to file names should be defined in databank, not in code ¶
|
||
RH |
var def = def || 'CSGRCK' // XXX ¶
|
||
RH |
var def = def || 'SGEXPL' // XXX ¶
|
||
RH |
var sound = sound || 'WALLHIT' // XXX ¶
|
||
RH |
var def = def || 'C09SPW0' // XXX ¶
|
||
RH |
var sound = sound || 'GOODMRLE' // XXX ¶
|
||
RH |
var def = def || 'C14SPE0' // XXX ¶
|
||
RH |
var sound = sound || 'BADMRLE' // XXX ¶
|
||
RH |
var def = def || 'C09SPA0' // XXX ¶
|
||
RH |
var sound = sound || 'GOODLUCK' // XXX ¶
|
||
RH |
var def = def || 'SP12_' // XXX ¶
|
||
RH |
var sound = sound || 'REGENER' // XXX ¶
|
||
RH |
var distance = pathFind._heuristic(path[pathIndex - 1], path[pathIndex]) ⋯
|
||
RH |
'SP09_' ⋯
|
||
RH |
var ai = !angle ? 1 : angle <= 27 ? 2 : angle <= 45 ? 3 : angle <= 72 ? 4 : 5 ⋯
|
||
RH |
bottom: 560, // XXX ¶
|
||
RH |
if (pos[0] == 12 && pos[1] == 10) { // XXX ¶
|
||
RH |
if (cur[0] == 9 && cur[1] == 5) { // XXX ¶
|
||
RH |
} else if (walls.length && ((cur[0] == 10 && cur[1] == 5) || (cur[0] == 12 && cur[1] == 10)) && this.cmap._opt.mouseSide == 'bl') { // XXX ¶
|
||
RH |
switch (cr.get('special')) { // XXX ¶
|
||
RH |
var REPLAY_VERSION = 1 // XXX ¶
|
||
RH |
case 7: // XXX 7 ¶
|
||
RH |
var msg = _.format(this.cx.s('map', '%s, you only have %d days left to capture a town or you will be banished from this land.'), this.rules.databank.players.atCoords(this.pl.get('player'), 0, 0, 'name', 0), 7 - now) // XXX ¶
|
||
RH |
7 hardcoded; to databank? ⋯
|
||
RH |
var el = box._inlineBox().appendTo(box.el) // XXX ¶
|
||
RH |
while (slot < 7 && slot < sub.size().x && sub.anyAtCoords(slot, 0, 0, 0) && sub.atCoords(slot, 0, 0, 'creature', 0) != this.creature()) { ⋯
|
||
RH |
var el = box._inlineBox().appendTo(box.el) // XXX ¶
|
||
RH |
var el = box._inlineBox().appendTo(box.el) // XXX ¶
|
||
RH |
// Determined empirically. XXX to databank? ¶
|
||
RH |
garList._store.release() // XXX; also grep for other /\._store\./ occurrences ¶
|
||
RH |
var backgrounds = ['TPTHBKCS', 'TPTHBKRM', 'TPTHBKTW', 'TPTHBKIN', ⋯
|
||
RH |
while (slot < 7 && slot < sub.size().x && sub.anyAtCoords(slot, 0, 0, 0) && sub.atCoords(slot, 0, 0, 'creature', 0) != this.creature()) { ⋯
|
||
RH |
duplicates elsewhere; move "trophy exclusion list" to databank ⋯
|
||
RH |
move limit to databank ⋯
|
||
RH |
_.times(5, function (level) { // XXX ¶
|
||
RH |
var windows = ['TPMAGECS', 'TPMAGERM', 'TPMAGETW', 'TPMAGEIN', ⋯
|
||
RH |
var byLevel = [0, 0, 0, 0, 0, 0] // XXX ¶
|
||
RH |
opt.slider = {height: 7} // XXX ¶
|
||
RH |
box._markUp_BonusesImages(null, box.el, {bonuses: {heroes: {0: {artifacts: [this.get('artifact')]}}}}) ⋯
|
||
RH |
icon detection logic is similar to H3.DOM.MainMenu's ⋯
|
||
RH |
vehicle characteristics ⋯
|
||
RH |
if (this.get('player').heroes.length >= 8) { // XXX limit ¶
|
||
RH |
hardcoded class ID ⋯
|
||
RH |
this.rules._erect(town.get('id'), [args.building], calc._buildings._calc.get('affectors')) // XXX ¶
|
||
RH |
var max = doCalc(Calculator.Effect.GenericNumber, c.cx.map.constants.effect.target.spellMastery) >= c.cx.map.constants.spell.mastery.advanced ? 5 : 4 ⋯
|
||
RH |
51 case c.rules.artifactSlotsID.warMachine1: ⋯
|
||
RH |
var spots = [10, 10, 9, 9, 8, null, 8, 9, 9, 10, 10] // XXX ¶
|
||
RH |
var sx = creature.get('x') - 1 // XXX ¶
|
||
RH |
return o.value = Math.max(10, o.subCalc('knowledge').calc.updateIfNeeded().get('value') * 10) // XXX consts ¶
|
||
RH |
prop + (level + 1 < 10 ? 'L' : 'H'), // XXX 10 ¶
|
||
RH |
var markets = 5 // Trading Post; XXX to databank ¶
|
||
RH |
var rates = [ // XXX to databank ¶
|
||
RH |
strings here and above ⋯
|
||
RH |
var obj = this.map._actionableAtter(_.sample(pool), 0, 0, 0) ⋯
|
||
RH |
gar.extendTo(7-1) // XXX ¶
|
||
RH |
if (slot >= 7) { // XXX ¶
|
||
RH |
if (skills.length < 8) { // XXX ¶
|
||
RH |
while (potential.length < 2) { // XXX ¶
|
||
RH |
this.rpc.do_heroLevelSkill({hero: hero.get('id'), skill: potential[0].skill}) ⋯
|
||
RH |
_.times(5 /*XXX*/, function (level) { ¶
|
||
RH |
taken from SoD editor's help ⋯
|
||
RH |
var size = 2 // XXX to databank ¶
|
||
RH |
to databank? Determined empirically. ⋯
|
||
RH |
if (now == 7) { // XXX ¶
|
||
RH |
!!self.rpc._endTurn(self.cx, self.map.players.nested(lastPlayer)) ⋯
|
||
RH |
sub.extendTo(7 - 1) // XXX ¶
|
||
RH |
var slots = placement == 'middle' ? 5 : 7 ⋯
|
||
RH |
sub.extendTo(7-1) // XXX ¶
|
||
RH |
if (slot >= 7 /*XXX*/) { return true } ¶
|
||
RH |
schema: store._schema == superStore._subSchemas[prop] ? null : store._schema, ⋯
|
||
RH |
var maxSlots = 7 // XXX ¶
|
||
RH |
gar.extendTo(7-1) // XXX ¶
|
||
RH |
if (slot >= 7) { // XXX ¶
|
||
RH |
public $won = false; // false; 0/1/2 loss/victory/both (XXX to const?) ¶
|
||
RH |
make these indexes consts (same for $animation) ⋯
|
||
RH |
consts ⋯
|
||
RH |
//> creature_hitChance array associative type => int % multiplier `- for wall attacks (hurl/ram); 0 = chance of a strike doing no damage, 1 = hitting another wall (ignored if there're none or if 'ram'; if picked, a wall is chosen from all alive walls' combined creature_hitChance 2 chances), 2 = hitting the user-specified wall (XXX to const?) ¶
|
||
RH |
slot ⋯
|
||
RH |
practically, this stuff should be part of the databank; extract gameplay-specific rules to a separate CSS file included from the databank */ ¶
|