Ticket #2160: Regicide_v0.2.patch

File Regicide_v0.2.patch, 4.0 KB (added by Sandarac, 8 years ago)

Regicide (with heroes) step 1. Reviewed and given the OK by elexis.

  • binaries/data/mods/public/maps/scripts/Regicide.js

     
     1Trigger.prototype.CheckRegicideDefeat = function(data)
     2{
     3    if (data.entity == this.heroes[data.from])
     4        TriggerHelper.DefeatPlayer(data.from);
     5};
     6
     7Trigger.prototype.InitRegicideGame = function(msg)
     8{
     9    let cmpTemplateManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TemplateManager);
     10    let heroTemplates = cmpTemplateManager.FindAllTemplates(false).filter(temp => temp.indexOf("_hero_") != -1 && temp.indexOf("campaigns") == -1);
     11
     12    for (let i = 1; i < TriggerHelper.GetNumberOfPlayers(); ++i)
     13    {
     14        let cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
     15        let playerEntities = cmpRangeManager.GetEntitiesByPlayer(i);
     16        let spawnPoints = playerEntities.filter(p => TriggerHelper.EntityHasClass(p, "CivilCentre"));
     17
     18        if (!spawnPoints.length)
     19            spawnPoints = playerEntities.filter(p => TriggerHelper.EntityHasClass(p, "Ship"));
     20
     21        if (!spawnPoints.length)
     22            spawnPoints = playerEntities;
     23
     24        let cmpPlayer = QueryPlayerIDInterface(i);
     25        let civHeros = heroTemplates.filter(hero => hero.indexOf(cmpPlayer.GetCiv()) != -1);
     26
     27        this.heroes[i] = TriggerHelper.SpawnUnits(spawnPoints[0], civHeros[Math.floor(Math.random() * civHeros.length)], 1, i);
     28
     29        if (!this.heroes[i].length)
     30            error("Couldn't spawn hero for player " + i);
     31
     32        if (TriggerHelper.EntityHasClass(spawnPoints[0], "Ship"))
     33        {
     34            let cmpUnitAI = Engine.QueryInterface(this.heroes[i], IID_UnitAI);
     35            cmpUnitAI.Garrison(spawnPoints[0]);
     36        }
     37    }
     38};
     39
     40let cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger);
     41cmpTrigger.heroes = [];
     42cmpTrigger.DoAfterDelay(0, "InitRegicideGame", {});
     43
     44cmpTrigger.RegisterTrigger("OnOwnershipChanged", "CheckRegicideDefeat", { "enabled": true });
  • binaries/data/mods/public/maps/scripts/TriggerHelper.js

     
    2222};
    2323
    2424/**
    25  * Can be used to "force" a building to spawn a group of entities.
    26  * Only works for buildings that can already train units.
     25 * Can be used to "force" a building/unit to spawn a group of entities.
    2726 * @param source Entity id of the point where they will be spawned from
    2827 * @param template Name of the template
    2928 * @param count Number of units to spawn
  • binaries/data/mods/public/simulation/data/settings/victory_conditions/regicide.json

     
     1{
     2    "TranslatedKeys": ["Title", "Description"],
     3    "Data":
     4    {
     5        "Title": "Regicide",
     6        "Description": "Keep your Hero alive to win",
     7        "Scripts":
     8        [
     9            "scripts/TriggerHelper.js",
     10            "scripts/ConquestCommon.js",
     11            "scripts/Conquest.js",
     12            "scripts/Regicide.js"
     13        ]
     14    }
     15}
  • source/tools/atlas/AtlasUI/ScenarioEditor/Sections/Map/Map.cpp

     
    1 /* Copyright (C) 2015 Wildfire Games.
     1/* Copyright (C) 2016 Wildfire Games.
    22 * This file is part of 0 A.D.
    33 *
    44 * 0 A.D. is free software: you can redistribute it and/or modify
     
    148148    gameTypes.Add(_T("conquest_units"));
    149149    gameTypes.Add(_T("wonder"));
    150150    gameTypes.Add(_T("endless"));
     151    gameTypes.Add(_T("regicide"));
    151152
    152153    wxFlexGridSizer* gridSizer = new wxFlexGridSizer(2, 5, 5);
    153154    gridSizer->AddGrowableCol(1);