Jump to content

Wijitmaker

WFG Retired
  • Posts

    9.663
  • Joined

  • Last visited

  • Days Won

    9

Posts posted by Wijitmaker

  1. bah.. I tried too, something is wrong. Here is some html code:


    <table>
    <tr>
    <td><b> English</b></td>
    <td><b> Iberians</b></td>
    <td><b> Britons</b></td>
    <td><b> Gauls</b></td>
    <td><b> Latin</b></td>
    <td><b> Dacian</b></td>
    <td><b> Persian</b></td>
    </tr>
    <tr>
    <td> Yes?</td>
    <td> Bai</td>
    <td> ie</td>
    <td> Ie</td>
    <td> Quid?</td>
    <td> Da?</td>
    <td> Baleh, Areh</td>
    </tr>
    <tr>
    <td> My Lord?</td>
    <td> erregela</td>
    <td> oes</td>
    <td> Oes</td>
    <td> Domine?</td>
    <td> Tarabostes?</td>
    <td> Sarvareh man, GhorbAn</td>
    </tr>
    <tr>
    <td> How may I serve you?</td>
    <td> sakatu</td>
    <td> Beth ga I wneud ichi</td>
    <td> Ydy</td>
    <td> Quomodo serviam te?</td>
    <td> @#$% pot sa va servesc?</td>
    <td> Che khedmati mitavAnam bekonam</td>
    </tr>
    <tr>
    <td> As you wish</td>
    <td> zure desira</td>
    <td> fel mynnwch chi</td>
    <td> </td>
    <td> </td>
    <td> @#$% doriti!</td>
    <td> Anche shomA bekhAhid</td>
    </tr>
    <tr>
    <td> I'm coming</td>
    <td> irten</td>
    <td> Rydw I'n dod</td>
    <td> </td>
    <td> </td>
    <td> Vin!</td>
    <td> Man dAram miAm</td>
    </tr>
    <tr>
    <td> On my way</td>
    <td> porturatu</td>
    <td> Ar fy fforth</td>
    <td> </td>
    <td> </td>
    <td> Sint pe drum!</td>
    <td> Dar raham</td>
    </tr>
    <tr>
    <td> Attack!</td>
    <td> oldar</td>
    <td> Ymosodwch</td>
    <td> Rhuthro</td>
    <td> Cape!</td>
    <td> Atacati</td>
    <td> Hamleh</td>
    </tr>
    <tr>
    <td> For my family!</td>
    <td> familia</td>
    <td> Am fy nheulu</td>
    <td> Cyrchu</td>
    <td> Pro familia mea</td>
    <td> Pentru patrie!</td>
    <td> BarAyeh khAnevAdeham</td>
    </tr>
    <tr>
    <td> Build</td>
    <td> horma egin</td>
    <td> Adeiladwch</td>
    <td> Adeiladu</td>
    <td> construo</td>
    <td> Construiesc</td>
    <td> Saakhtan</td>
    </tr>
    <tr>
    <td> Farm</td>
    <td> nekazaritzako</td>
    <td> ffarmiwch</td>
    <td> Amaethu</td>
    <td> exaro</td>
    <td> Gospodarie</td>
    <td> Mazraeh</td>
    </tr>
    <tr>
    <td> Mine or Dig</td>
    <td> meatze</td>
    <td> Cloddiwch</td>
    <td> Cloddio</td>
    <td> effodio</td>
    <td> Sapam Tarabostes</td>
    <td> Madan</td>
    </tr>
    <tr>
    <td> Chop</td>
    <td> trontza-zerra</td>
    <td> Torriwch</td>
    <td> Malu</td>
    <td> infindo</td>
    <td> Lemne Tarabostes!</td>
    <td> Choob boridan</td>
    </tr>
    <tr>
    <td> Gather</td>
    <td> kobratu</td>
    <td> Aeddfedwch</td>
    <td> Casglu</td>
    <td> recolligo</td>
    <td> Recoltam Tarabostes!</td>
    <td> Jam kardan</td>
    </tr>
    <tr>
    <td> Herd</td>
    <td> ardi-azienda</td>
    <td> Ymgynnullwch</td>
    <td> Ymgynnull</td>
    <td> recolligo</td>
    <td> Nii boala!</td>
    <td> Galleh dari</td>
    </tr>
    <tr>
    <td> Fish</td>
    <td> hiruhortz</td>
    <td> Pysgotwch</td>
    <td> Pysgota</td>
    <td> expiscor</td>
    <td> Pescuim Tarabostes</td>
    <td> Mahi giri</td>
    </tr>
    <tr>
    <td> Repair</td>
    <td> konponketa</td>
    <td> Trwsiwch</td>
    <td> Trwsio</td>
    <td> redintegro</td>
    <td> Reparam, Tarabostes!</td>
    <td> Tamir</td>
    </tr>
    <tr>
    <td> Hunt</td>
    <td> buztanzuri</td>
    <td> Helwch</td>
    <td> Hela</td>
    <td> venor</td>
    <td> Vinam Tarabostes</td>
    <td> Shekar</td>
    </tr>
    <tr>
    <td> Your Orders?</td>
    <td> zure ordena</td>
    <td> Eich Archebion?</td>
    <td> </td>
    <td> Quid volitis?</td>
    <td> Oronati Tarabostes!</td>
    <td> Be farmAn shomA</td>
    </tr>
    <tr>
    <td> Ready, Sir</td>
    <td> prest</td>
    <td> Yn barod</td>
    <td> </td>
    <td> procinctu, domine</td>
    <td> Bineinteles</td>
    <td> AmAdeh, Sarvar</td>
    </tr>
    <tr>
    <td> My Liege?</td>
    <td> intsusa</td>
    <td> Fy Arglwyd</td>
    <td> </td>
    <td> Socius meus?</td>
    <td> Asn Razas?</td>
    <td> arbAbeh man</td>
    </tr>
    <tr>
    <td> By your Command</td>
    <td> komando</td>
    <td> Fel eich gorchymyn</td>
    <td> </td>
    <td> </td>
    <td> La ordin Tarabostes!</td>
    <td> Goosh be farmAnam</td>
    </tr>
    <tr>
    <td> Yes, my Lord</td>
    <td> Bai erregela</td>
    <td> </td>
    <td> </td>
    <td> Cic volitis</td>
    <td> </td>
    <td> Baleh Sarvareh man</td>
    </tr>
    <tr>
    <td> As you wish</td>
    <td> zure desira</td>
    <td> </td>
    <td> </td>
    <td> Quid, faciam?</td>
    <td> Inainte catre inamic</td>
    <td> Anche shomA bekhahid</td>
    </tr>
    <tr>
    <td> Cities will Fall!</td>
    <td> hiri-erorketa</td>
    <td> Cwmpan/syrthian dinasoedd</td>
    <td> Urbes caderunt</td>
    <td> Orasul se va preda!</td>
    <td> SharhA khrarAb khAhand shod</td>
    </tr>
    <tr>
    <td> War Cry!</td>
    <td> </td>
    <td> </td>
    <td> </td>
    <td> </td>
    <td> Uraaaaaaaa...</td>
    <td> </td>
    </tr>
    <tr>
    <td> To victory!</td>
    <td> irabazi!</td>
    <td> I fuddugoliath</td>
    <td> </td>
    <td> Ad victoriam!</td>
    <td> Vom invinge!</td>
    <td> Be suyeh piruzi</td>
    </tr>
    <tr>
    <td> Yes, great one?</td>
    <td> handi?</td>
    <td> Ie, Un Mawr</td>
    <td> </td>
    <td> Quid, domine maxime?</td>
    <td> Da, bostes</td>
    <td> Ari mardeh bozorg</td>
    </tr>
    <tr>
    <td> Your wish?</td>
    <td> zure desira</td>
    <td> Eich dymudiad?</td>
    <td> </td>
    <td> Quid, faciam?</td>
    <td> Dorinta voastra?</td>
    <td> Arezuyeh shomA</td>
    </tr>
    <tr>
    <td> By the Gods</td>
    <td> jainkozko ordena</td>
    <td> Gan y duwiau</td>
    <td> </td>
    <td> Per Deos</td>
    <td> Pe toti zeii</td>
    <td> Be omideh khodA</td>
    </tr>
    <tr>
    <td> Heal</td>
    <td> sendatu</td>
    <td> Iachwch</td>
    <td> mendio</td>
    <td> medicor</td>
    <td> Vindeca</td>
    <td> Shafa</td>
    </tr>
    <tr>
    <td> At your service</td>
    <td> zure sakatu</td>
    <td> At eich gwasanaethu</td>
    <td> </td>
    <td> sicut volutis</td>
    <td> La ordin Tarabostes</td>
    <td> Dar khedmateh shomA hastam</td>
    </tr>
    <tr>
    <td> Orders, Sir</td>
    <td> ordena</td>
    <td> Arbhebion</td>
    <td> </td>
    <td> </td>
    <td> Ordonati Tarabostes</td>
    <td> Gush be farmAnam, Sarvaram</td>
    </tr>
    <tr>
    <td> Ready</td>
    <td> prest</td>
    <td> Yn barod</td>
    <td> </td>
    <td> procinctu</td>
    <td> Sintem gata sa murim</td>
    <td> AmAdeh</td>
    </tr>
    <tr>
    <td> Move out!</td>
    <td> eraman zutabea</td>
    <td> Symudwch allan</td>
    <td> </td>
    <td> exite</td>
    <td> Miscate soldat</td>
    <td> Harekat</td>
    </tr>
    <tr>
    <td> March!</td>
    <td> marxa</td>
    <td> Ymdeithiwch</td>
    <td> </td>
    <td> incedite</td>
    <td> Inainte mars!</td>
    <td> Ghadam ro</td>
    </tr>
    <tr>
    <td> With my honour</td>
    <td> gogorrak</td>
    <td> Gan fy anrydedd</td>
    <td> </td>
    <td> </td>
    <td> Pe onoarea mea!</td>
    <td> BA eftekhAr</td>
    </tr>
    <tr>
    <td> Engage!</td>
    <td> engranatu</td>
    <td> dyweddio</td>
    <td> </td>
    <td> </td>
    <td> Pe ei fratilor</td>
    <td> Nabard</td>
    </tr>
    <tr>
    <td> Attack!</td>
    <td> oldar</td>
    <td> cyrchu</td>
    <td> rhuthro</td>
    <td> capite oppugno</td>
    <td> Atacati!</td>
    <td> Hamleh</td>
    </tr>
    <tr>
    <td> Formation</td>
    <td> eraketa</td>
    <td> Trefniant</td>
    <td> </td>
    <td> cuincunx</td>
    <td> Stringeti randurile</td>
    <td> Meydan</td>
    </tr>
    <tr>
    <td> Hold your position!</td>
    <td> ixte</td>
    <td> Sefyllwch yn eich lleodd</td>
    <td> </td>
    <td> ad loces</td>
    <td> Pastrati pozitia</td>
    <td> Istadan dar jA</td>
    </tr>
    <tr>
    <td> Retreat!</td>
    <td> ihes egin</td>
    <td> Enciliwch</td>
    <td> cylio</td>
    <td> recedite</td>
    <td> Retragerea!</td>
    <td> Aghab neshini</td>
    </tr>
    <tr>
    <td> Surround them!</td>
    <td> harrapaketa</td>
    <td> Amgylwch</td>
    <td> </td>
    <td> </td>
    <td> Inconjuratii!</td>
    <td> Mohasereh konid AnhA rA</td>
    </tr>
    <tr>
    <td> Advance!</td>
    <td> aurrerakin</td>
    <td> Ymlaen at gelynion</td>
    <td> symud ymlaen</td>
    <td> ite ad inimicum</td>
    <td> Avansati!</td>
    <td> Pishravi</td>
    </tr>
    <tr>
    <td> Battle cry</td>
    <td> </td>
    <td> </td>
    <td> </td>
    <td> </td>
    <td> "wolf howling"</td>
    <td> Be suyeh doshman</td>
    </tr>
    </table>
    <table><tr>
    <td><b> English</b></td>
    <td><b> Greeks</b></td>
    <td><b> Carthaginians</b></td>
    <td><b> Parthians</b></td>
    <td><b> Goths</b></td>
    <td><b> Huns</b></td>
    <td><b> Macedonians</b></td>
    <td><b> Old English</b></td>
    </tr>
    <tr>
    <td> Yes?</td>
    <td> Ti estì?</td>
    <td> Ken?</td>
    <td> NA</td>
    <td> jái</td>
    <td> NA</td>
    <td> same as greek</td>
    <td> Giese?</td>
    </tr>
    <tr>
    <td> My Lord?</td>
    <td> Dèspotes mu</td>
    <td> Adoní?</td>
    <td> </td>
    <td> fráuja</td>
    <td> </td>
    <td> different</td>
    <td> Min hlaforde</td>
    </tr>
    <tr>
    <td> How may I serve you?</td>
    <td> Pos dynamai therapèuein</td>
    <td> Keitsád ashartekhá?</td>
    <td> </td>
    <td> skalkinôn</td>
    <td> </td>
    <td> pronuciation</td>
    <td> Ic eom þin cnapan</td>
    </tr>
    <tr>
    <td> As you wish</td>
    <td> os epithymèis</td>
    <td> Kirtsonkhá</td>
    <td> </td>
    <td> gaírnjan</td>
    <td> </td>
    <td> </td>
    <td> Ic eom þin cnapan</td>
    </tr>
    <tr>
    <td> I'm coming</td>
    <td> trècho</td>
    <td> Hinéni</td>
    <td> </td>
    <td> silba aljaþ</td>
    <td> </td>
    <td> </td>
    <td> Ic fare</td>
    </tr>
    <tr>
    <td> On my way</td>
    <td> </td>
    <td> Bedarkí</td>
    <td> </td>
    <td> wagjan</td>
    <td> </td>
    <td> </td>
    <td> min hlaforde</td>
    </tr>
    <tr>
    <td> Attack!</td>
    <td> eisbàlomen</td>
    <td> Atkíf!</td>
    <td> </td>
    <td> slahan</td>
    <td> </td>
    <td> </td>
    <td> Acwellan!</td>
    </tr>
    <tr>
    <td> For my family!</td>
    <td> pro ten patrìda mu</td>
    <td> Lemishpakhtí!</td>
    <td> </td>
    <td> silba fadreins</td>
    <td> </td>
    <td> </td>
    <td> Forelosan!</td>
    </tr>
    <tr>
    <td> Build</td>
    <td> tèucho</td>
    <td> Evnéh</td>
    <td> </td>
    <td> timrjan</td>
    <td> </td>
    <td> </td>
    <td> Betimbran</td>
    </tr>
    <tr>
    <td> Farm</td>
    <td> Georgèo</td>
    <td> Ezra'</td>
    <td> </td>
    <td> atisk</td>
    <td> </td>
    <td> </td>
    <td> Ierthling</td>
    </tr>
    <tr>
    <td> Mine or Dig</td>
    <td> skàpto</td>
    <td> Akhapór</td>
    <td> </td>
    <td> uf-graban</td>
    <td> </td>
    <td> </td>
    <td> Delfan</td>
    </tr>
    <tr>
    <td> Chop</td>
    <td> kòpto</td>
    <td> Ekrót</td>
    <td> </td>
    <td> asts</td>
    <td> </td>
    <td> </td>
    <td> Holtan?</td>
    </tr>
    <tr>
    <td> Gather</td>
    <td> syllègo</td>
    <td> Eqtóf</td>
    <td> </td>
    <td> lisan</td>
    <td> </td>
    <td> </td>
    <td> Gaðerian</td>
    </tr>
    <tr>
    <td> Herd</td>
    <td> nèmo</td>
    <td> Er'eh</td>
    <td> </td>
    <td> haírdeis</td>
    <td> </td>
    <td> </td>
    <td> Sceaphierde</td>
    </tr>
    <tr>
    <td> Fish</td>
    <td> ìchthys</td>
    <td> Adoog</td>
    <td> </td>
    <td> fiskôn</td>
    <td> </td>
    <td> </td>
    <td> Fiscere</td>
    </tr>
    <tr>
    <td> Repair</td>
    <td> siachno</td>
    <td> Atah-kén</td>
    <td> </td>
    <td> midumônds</td>
    <td> </td>
    <td> </td>
    <td> Widusmid</td>
    </tr>
    <tr>
    <td> Hunt</td>
    <td> kynegetèo</td>
    <td> Atsood</td>
    <td> </td>
    <td> fôdeins</td>
    <td> </td>
    <td> </td>
    <td> Huntian</td>
    </tr>
    <tr>
    <td> Your Orders?</td>
    <td> pos kelèueis?</td>
    <td> Hora'otéikha?</td>
    <td> </td>
    <td> izwar háitan</td>
    <td> </td>
    <td> </td>
    <td> þin beode?</td>
    </tr>
    <tr>
    <td> Ready, Sir</td>
    <td> </td>
    <td> Mukhán, adoní</td>
    <td> </td>
    <td> faúr-stasseis</td>
    <td> </td>
    <td> </td>
    <td> Giese?</td>
    </tr>
    <tr>
    <td> My Liege?</td>
    <td> etòimos, o stratège</td>
    <td> Mefaqdí?</td>
    <td> </td>
    <td> silba fráujinônds</td>
    <td> </td>
    <td> </td>
    <td> Min hlaforde</td>
    </tr>
    <tr>
    <td> By your Command</td>
    <td> òsper àrcheis èsto</td>
    <td> lehora'atkhá</td>
    <td> </td>
    <td> izwar faúr-biudan</td>
    <td> </td>
    <td> </td>
    <td> Giese!</td>
    </tr>
    <tr>
    <td> Yes my Lord</td>
    <td> pany ge, kyrie mu</td>
    <td> ken, adoní</td>
    <td> </td>
    <td> fráuja</td>
    <td> </td>
    <td> </td>
    <td> Ic eom þin cnapan</td>
    </tr>
    <tr>
    <td> As you wish</td>
    <td> pràsso</td>
    <td> Kirtsonkhá</td>
    <td> </td>
    <td> ga-láistjan</td>
    <td> </td>
    <td> </td>
    <td> Ic fare abhebban</td>
    </tr>
    <tr>
    <td> Cities will Fall!</td>
    <td> </td>
    <td> 'arím tipólnah </td>
    <td> </td>
    <td> Acwellan!</td>
    <td> </td>
    <td> </td>
    <td> </td>
    </tr>
    <tr>
    <td> War cry!</td>
    <td> alalài</td>
    <td> </td>
    <td> </td>
    <td> </td>
    <td> </td>
    <td> </td>
    <td> Forelosan!</td>
    </tr>
    <tr>
    <td> To victory!</td>
    <td> Zeus sotèr kài nìke</td>
    <td> Lanitsakhón!</td>
    <td> </td>
    <td> haírus</td>
    <td> </td>
    <td> </td>
    <td> Forht min miht! or Ic bere deaþ!</td>
    </tr>
    <tr>
    <td> Yes, great one?</td>
    <td> prostàxe</td>
    <td> Ken, adoní?</td>
    <td> </td>
    <td> blôtinassus</td>
    <td> </td>
    <td> </td>
    <td> Min hlaforde?</td>
    </tr>
    <tr>
    <td> Your wish?</td>
    <td> </td>
    <td> Retsonkhá?</td>
    <td> </td>
    <td> izwar gaírnjan</td>
    <td> </td>
    <td> </td>
    <td> Giese?</td>
    </tr>
    <tr>
    <td> By the Gods</td>
    <td> ma tus theùs</td>
    <td> Beshém ha'elím</td>
    <td> </td>
    <td> áihtrôn</td>
    <td> </td>
    <td> </td>
    <td> </td>
    </tr>
    <tr>
    <td> Heal</td>
    <td> iàomai</td>
    <td> Arah-péh</td>
    <td> </td>
    <td> lêkinôn</td>
    <td> </td>
    <td> </td>
    <td> </td>
    </tr>
    <tr>
    <td> At your service</td>
    <td> ypo tu prostàgmatos su</td>
    <td> Lesherutkhá</td>
    <td> </td>
    <td> izwar driugan</td>
    <td> </td>
    <td> </td>
    <td> þin beode?</td>
    </tr>
    <tr>
    <td> Orders, Sir</td>
    <td> prostàxe, kyrie</td>
    <td> Hora'ot, adoní</td>
    <td> </td>
    <td> ana-biudan</td>
    <td> </td>
    <td> </td>
    <td> </td>
    </tr>
    <tr>
    <td> Ready</td>
    <td> ètoimos dià ten màchen</td>
    <td> mukhán</td>
    <td> </td>
    <td> manwus</td>
    <td> </td>
    <td> </td>
    <td> </td>
    </tr>
    <tr>
    <td> Move out!</td>
    <td> ypakùo</td>
    <td> Etseh!</td>
    <td> </td>
    <td> draúhtinôn</td>
    <td> </td>
    <td> </td>
    <td> </td>
    </tr>
    <tr>
    <td> March!</td>
    <td> porèuomai</td>
    <td> Ets'ód!</td>
    <td> </td>
    <td> £arbôn</td>
    <td> </td>
    <td> </td>
    <td> </td>
    </tr>
    <tr>
    <td> With my honour</td>
    <td> </td>
    <td> Bikhvodí</td>
    <td> </td>
    <td> môdags</td>
    <td> </td>
    <td> </td>
    <td> </td>
    </tr>
    <tr>
    <td> Engage!</td>
    <td> èis ten màchen</td>
    <td> Efgósh!</td>
    <td> </td>
    <td> du-at-sniwan</td>
    <td> </td>
    <td> </td>
    <td> </td>
    </tr>
    <tr>
    <td> Attack!</td>
    <td> prosbàlomen</td>
    <td> Etkóf!</td>
    <td> </td>
    <td> dis-taíran</td>
    <td> </td>
    <td> </td>
    <td> </td>
    </tr>
    <tr>
    <td> Formation</td>
    <td> tàxis</td>
    <td> utzbáh</td>
    <td> </td>
    <td> laígaíôn</td>
    <td> </td>
    <td> </td>
    <td> </td>
    </tr>
    <tr>
    <td> Hold your position!</td>
    <td> katàschete ten tàxin</td>
    <td> Imdu bamqomót!</td>
    <td> </td>
    <td> izwar uf-haban</td>
    <td> </td>
    <td> </td>
    <td> </td>
    </tr>
    <tr>
    <td> Retreat!</td>
    <td> hypochorèsis</td>
    <td> Nisgú!</td>
    <td> </td>
    <td> haúrnjan</td>
    <td> </td>
    <td> </td>
    <td> </td>
    </tr>
    <tr>
    <td> Surround them!</td>
    <td> amfibàlete autùs</td>
    <td> Haqifúhum!</td>
    <td> </td>
    <td> fra-hinþan</td>
    <td> </td>
    <td> </td>
    <td> </td>
    </tr>
    <tr>
    <td> Advance!</td>
    <td> katà ton èchthron</td>
    <td> hitqadmú!</td>
    <td> </td>
    <td> gaggan</td>
    <td> </td>
    <td> </td>
    <td> </td>
    </tr>
    <tr>
    <td> Battle cry</td>
    <td> alalài, alalalài!</td>
    <td> akharái!</td>
    <td> </td>
    <td> </td>
    <td> </td>
    <td> </td>
    <td> Forht min miht! or Ic bere deaþ!</td>
    </tr>
    </table>

  2. In early design documents - the female citizens of the celts were the only females capable of fighting to defend themselves vs the behavior of the other civs. Celtic females were also not capturable. The other civ's female citizens would automatically flee to the nearest civil center and garrison themselves when an enemy came within their LOS. If a female citizen could be isolated to where no other male units were in their capture aura, their capture timer would begin and if the enemy was persistent their allegiance would change after X number of seconds.

  3. Aye, it looks like the texture needs to be player-colorized by an artist, or removed as a variant from the actor file. The white (limed) hair means it is an advanced unit. Helmeted celts are elite - or at least they used to be set up this way.

    OT - zoot, what is going on with your mini-map?

  4. Have the 0AD developers ever considered implementing terrain bonuses and penalties? Unit stats like speed, defence, attack range, health, stamina or perhaps even line of sight could be influenced by the terrain. I think roads would have more purpose if 0AD had such a system, allowing players to flatten the land and create an unhindered path to travel along through the rougher areas.

    I believe the game engine already does have the capability: http://www.wildfiregames.com/forum/index.php?showtopic=12878

  5. I believe that is how we originally set up the plan for the architecture of how entities would be structured. That page your looking at was all prior to the simulation rewrite that Philip made several years ago. Most everything that was in the old simulation engine is present today, but some of it hasn't been restored yet. I don't believe that the events you see at the bottom of that "example" at the top of the page was ever fully implemented. It was conceived of by a former instrumental programming lead - Stuart Walpole (aka Acumen). Here is his original spec:

    INTRODUCTION

    We want to hardcode the bare minimum of game logic into the engine. In designing these XML attributes, we strive to keep it flexible so that designers can easily adjust the nature and behaviour of the game's units and other objects with minimal bugging of overworked programmers.

    However, trying to create an XML attribute for every contingency that could ever be required ("BelchesGreenFire=true") is an exercise in futility.

    The event/action model uses the flexibility of JavaScript to embed script commands/functions/calls directly into the XML of a game object (entity, cliff, water, terrain, tech, actor, etc), which is then executed when a specific event occurs for an instance of this entity.

    This allows custom logic to be written for an entity and encapsulated with its data, instead of having a special XML attribute that flags some logic which we assume to be "handled elsewhere".

    Like the GUI, these commands could also call a function written in another file (good for reuse of code) or an engine function.

    DANGER, WILL ROBINSON!

    Before we describe how events can be used, a couple of warnings:

    - Allowing script-based game logic gives modders and developers great power.. But that same power could be used to make 0 A.D. a hacker's paradise. We need to ensure that each player's data in a multiplayer game is sufficiently validated so that a player can't alter the script of his local version to give himself an unfair advantage (eg give himself resources every tick). Client/server architecture, out-of-sync checks, hashing, checksums, we need to use any means necessary to ensure modders have the freedom to adapt game data, while ensuring that players must have the same data version in order to play together.

    - Script code isn't as fast as engine code, so lots of resource-intensive script logic could slow the game down. Time will tell exactly how much we can get away with it. But initially, at least, we want to script almost everything. JavaScript at least makes a token effort to efficiency; if the same script is used multiple times, it only has to be parsed and compiled to bytecode once. There are two ways that we can take advantage of this feature to reduce the overhead:


      a] Wrap logic in a function wherever possible and call that, so that it can be called by other entities if needed.
      b] Entities can inherit attributes from each other, including event logic. For example, the behaviour for unit upgrading could be written once, in the generic-citizen-soldier entity. All Citizen Soldiers could then inherit from this entity, gaining the upgrade script automatically. See the XML Header Overview for more info.

    - Events should generally be used for one-offs (eg raising/lowering of sails) or complicated exceptions (eg auras). For example, it isn't worth scripting the upgrade system into each Citizen Soldier's XML because so many units make use of it ... that would probably double the size of the entity files. Even wrapped in a function, it means more repetition of the same commands, which all have to be parsed and processed.

    CODE SYNTAX

    The syntax for an entity event is almost exactly the same as that for a GUI event (eg if this button object is clicked, perform this sequence of instructions):


    <event on=<EventName> ![CDATA[
    <JS Commands>
    ]]></event>

    CODE EXAMPLE


    // When the player "kills" the chest,
    <event on="Death" ![CDATA[
    // Do a special death animation of the chest opening and coins spiralling into the air.
    this.SetAnimation("open_chest",10);
    // Transfer the resources it is carrying to the player's Resource Pool.
    GiveResources(player, this.supply.type, this.supply.value);
    ]]></event>

    EVENTS

    Events are the conditions under which effects occur. An event is true when an entity enters a certain state. Generally the event jumps in just before the actual event takes place. For example, logic written for the Death event occurs just before the unit is about to die.

    This list will grow as we implement and hammer down the details of game logic (eg formations, repairing, town bell, AI) ... It's easy for programmers to add additional events, but remember to minimise the amount of script that needs to be executed every frame. For example, it's less costly to check XYZBegin and XYZCancel than check XYZ every frame.

    All the relevant data for an event will be copied to a special 'ev' object, allowing easy passing of event information to a script (i.e., for TakesDamage, there'd be ev.inflictor, ev.damage.crush, ev.damage.pierce, ev.range and so on).

    Currently planned events are:

    • AuraComplete: When an entity has remained in aura radius for the length of time specified by Aura.Time.
    • AuraEnter: When an entity enters the aura radius of this entity.
    • AuraLeave: When an entity leaves the aura radius of this entity.
    • CreateBegin: Occurs when creation (training/building/researching) of this entity has started.
    • CreateCancel: Occurs when creation (training/building/researching) of this entity has been cancelled by the user.
    • CreateComplete: Occurs when creation (training/building/researching) of this entity has finished.
    • Death: Occurs immediately before the entity is destroyed.
    • GarrisonEmpty: Occurs when all garrison slots are empty.
    • GarrisonEnter: Occurs when an entity is garrisoned in this entity.
    • GarrisonExit: Occurs when an entity is ungarrisoned from this entity.
    • GarrisonFull: Occurs when all garrison slots are occupied.
    • SocketEnter: Occurs when an entity occupies a socket (prop point) in this entity.
    • SocketEmpty: Occurs when all sockets are empty.
    • SocketExit: Occurs when an entity occupies a socket (prop point) in this entity.
    • SocketFull: Occurs when all sockets are occupied.
    • SupplyEmpty: Occurs when all Supply has been gathered from an entity.
    • SupplyFull: Occurs when an entity has reached its maximum Supply.
    • HoverStart: Occurs when the player places the cursor over the entity.
    • HoverStop: Occurs when the player moves the cursor off of the entity.
    • MouseDown: Occurs when the player clicks on the entity.
    • MouseUp: Occurs when the player releases the mouse button, or moves the cursor off the entity.
    • Initialise: Occurs when the entity first enters the world.
    • LOSEnter: When an entity enters the sight radius of this entity.
    • LOSLeave: When an entity leaves the sight radius of this entity.
    • OrderBegin: Occurs when the entity has been given a command and is about to start carrying it out.
    • OrderCancel: Occurs when the user cancels the order.
    • OrderComplete: Occurs when the entity has finished an order.
    • Tick: Occurs every simulation frame; currently 10 Hz unless this framerate cannot be achieved. JavaScript isn't particularly efficient, so while this is a very powerful feature, it's almost always better to add an additional event to this list than constantly scan for a condition.
    • WalkOver: Occurs when an entity moves over the surface of it. Typically only used by terrains.

    Here is something Philip wrote in the archives a long time ago - so maybe they did exist?:

    As a (probably inaccurate) rough overview of what I think needs to be done:

    template_entity_script.js:

    Add a function entity_event_heal, similar to entity_event_gather but without the resources or destruction - probably just something like "evt.target.traits.health.curr += this.actions.heal.amount". (Or do a 'console.write("It works!")' first, so you can tell when everything else is working.)

    ((The entity documentation says resources should be deducted when healing; but I think it'd be best to ignore that until the basics are working.))

    template_entity_full.xml:

    Add <Event On="Heal" Function="entity_event_heal"/> line so it knows what function to call in response to the 'heal' event.

    EventHandlers.h/cpp:

    Add a CEventHeal, similar to CEventGather.

    EntityStateProcessing.cpp:

    Add CEntity::processHeal and CEntity::processHealNoPathing, similar to CEntity::processGather[NoPathing].

    Plus associated bits - ORDER_HEAL in EntityOrders.h, and a "SEntityAction m_heal" in Entity.h. And the "actions.heal.amount" property (as used by the JS) needs to be loaded from the XML - add an AddProperty in CEntity::CEntity (similar to where it loads gather/attack speeds, though healing only needs a single 'amount' (er... 'speed'?) property).

    Entity.cpp:

    (around line 330) Call processHeal[NoPathing], similar to processGather[NoPathing].

    I can't currently see anything else that needs to be done, although I imagine I've missed some things and lots of details (like how a player actually selects the 'heal' action)... Anyway, I think it's very similar to the existing code for 'gather' and also partly 'attack', since they are all one-entity-walks-up-to-other-entity-and-alters-its-stats-periodically kinds of things, so much of the code can be copied from there.

    Incidentally, the above description has a worringly low ratio of English words to code identifier names and acronyms. Hopefully it's a little less confusing after looking at the relevant bits of code, but I'll be happy to offer any possible assistance in trying to work out what it all means (or at least make up something that sounds convincing, since I don't myself know how it all works tongue.gif)

    More stuff from Andrew (aka pyrolink)"

    Feel free to add to or correct this.

    EventHandlers.h/.cpp

    Entity.h - SEntityAction, processor

    Entity.cpp - update() switch statement processor, addproperty, order()

    switch statement

    EntityOrders.h

    EventTypes.h

    template_entity_full.XML

    template_entity_script.js

    AllNetMessages.h

    NetMessage.cpp

    GameSetup.cpp

    Simulation.cpp

    BaseEntity.h/.cpp

    1. Create the network message class

    * in AllNetMessages.h, add an enum value just before

    NMT_COMMAND_LAST

    * add a message class - use one of the existing command

    messages as a template, and change the fields as appropriate

    2. Export the message ID to Javascript by adding a line in

    CNetMessage::ScriptingInit

    3. Add a message parser in CNetMessage::CommandFromJSArgs. If the

    message is like the other message types listed there, i.e. it only has a target entity or a target position as the message data, just use the PositionMessage or EntityMessage macros.

    4. Add a switch case in CSimulation::TranslateMessage to map the

    network message (NMT_Heal) to an entity order (ORDER_HEAL).

    This routine also uses macros similar to the CommandFromJSArgs macros.

    An entity is essentially any interactive being in the game. For example, resources, units, buildings, are all entities. Entity.h contains the CEntity, which is made up of the things that constitute a particular entity. The first thing you'll need to know is that SEntityAction is a structure which defines the parameters of an action, such as speed, minimum range, and maximum range. These are loaded through an AddProperty() call in the constructor in Entity.cpp. EntityOrders.h contains a list of orders for an entity to process. No Pathing means that the unit has reached its destination and no longer needs to find a path. I'm not certain where these orders are given from. The entity's update function (defined in Entity.cpp) finds the correct processing function depending on the order type. If the function returns false, the update function returns and does not process any more orders. A processing function (prototype) needs to be added to Entity.h. These are defined in EntityStateProcessing.cpp.

    The basic processing function will call processContactAction(). This function will attempt to find a path (if needed) to the target (which would be what the player right clicked, e.g. for gathering it would be the resource). One of the parameters to the processContactAction is an order, or more precisely transistion order. This is the order that will be processed when the entity reaches the position. If you'll recall, "NoPathing" means that the unit has reached its destination and no longer needs to pathfind. When this message is processed, it will call process<whatever action>NoPathing(). In this function, processContactActionNoPathing() is called, but first, an event must be defined.

    Events are linked with the JS (JavaScript) interface, which I'm not exactly sure how it works. EventTypes.h contains the types of events, as well as the strings corresponding to them. EventHandlers.h / .cpp are the objects created in the NoPathing processing functions. You'll notice that in the constructor for each event, it calls CScriptEvent() with an event type, and a string. CScriptEvent() seems to create an event that is part of the JS code. Inside the EventHandler, it assigns the relevant variables, and then calls AddLocalProperty(), which apparently makes it visible to that JS code. So now you have an event sitting around, somewhere. When processContactActionNoPathing() gets called, if the entity is in range (that is, it hasn't moved since it was), the event that we created will be sent to the JS handling code through dispatch event().

    Now where is this JS handling done? It takes place in template_entity_script.js. How does it know what to call? In template_entity_full.xml, there are statements like: <Event On="PrepareOrder" Function="entity_event_prepareorder" />. The function defined in the Function = part of which ever statement like the above that has the On equal to the first argument to the CScriptEvent() call (the string of text) will be called. That sounded complex, but it isn't. Basically if On= CScriptEvent() 's first parameter, it calls the corresponding function.

    For information on entity traits such as health, player resources, and so on, go here: http://www.wildfiregames.com/users/code/wi...itle=XML.Entity

  6. Entities are basically, If I understood right, the attributes of the actor.

    Actor is just the visual representation. An Entity is actually the game_object of the actor.

    I believe the definitions at the top of these pages are still valid:

    http://trac.wildfire...wiki/XML.Entity

    http://trac.wildfire.../wiki/XML.Actor

    IMHO, Groups and variants are much easier to conceptualize (at least for me) in Actor Editor rather than raw code... because it is difficult to wrap your brain around the subsets of various combinations of groups and variants. Check it out if you haven't already done so.

  7. Just had a chance to update SVN and try this out - here are the errors I'm getting on some older hardware:


    ERROR: CRenderer::EndFrame: GL errors occurred
    ERROR: Failed to link program 'shaders/glsl/model_common.vs'+'shaders/glsl/model_common.fs': Fragment info ------------- 0(61) : error C5041: cannot locate suitable resource to bind parameter "v_eyeVec"
    ERROR: Failed to compile vertex program 'shaders/arb/overlayline.vp' (line 1):

    Here are my old system specs:

    OS : WinXP SP 3 (5.1.2600)

    CPU : x86, AMD Athlon 64 FX-55 Processor (1x1x1), 2.61 GHz

    Memory : 3072 MiB; 1765 MiB free

    Graphics Card : NVIDIA GeForce 7950 GT;

    OpenGL Drivers : 2.1.2; nvoglnt.dll (6.14.13.0124)

    Video Mode : 1920x1080:32

  8. About the multiple meshes in the DAE, the problem wasn't because there were too many objects, but too many meshes. Meshes like the ones that seem to be what are supposed to be prop points (the cubes that you can't select in Blender). I'm not sure how those got in there, or how to remove them, but in the other DAEs I exported from Enrique's blend, it didn't have any extra meshes, but FCollada (I think) caught some exception while loading it.

    Yeah, those cube meshes were supposed to be prop points. How do you guys do prop points in Blender? Whatever you do for prop points... could you do it for that model and replace those cube boxes? 3ds max uses something they call "helper objects" that I use, I'm not sure what the equivalent would be. They box meshes should be select-able if you toggle something on the right side blender by the visibility stuff. It is important to keep their positions, parent child relationship, and name.

  9. This should be possible right now by the config in the actor. For example, right now when a citizen soldier goes to a tree to chop wood, they drop the sword and shield and switch to an axe. What you are wanting to do should be pretty easy - just would need a hook to utilize the variant name.

    See here: http://trac.wildfiregames.com/browser/ps/trunk/binaries/data/mods/public/art/actors/units/celts/infantry_javelinist_a.xml

    I'm not sure if this would help, but you could bring in different props in an "animation" with the events of an actor - this is used on archers and javelists. See here: http://trac.wildfiregames.com/browser/ps/trunk/binaries/data/mods/public/art/actors/units/celts/infantry_javelinist_b.xml

    If you would like to do something like visible city phases - I would think that you could do it similar to units and how they upgrade through experience - basic, advanced, elite.

    It would require 3 separate actors though.

  10. IIRC our quotes.txt is just some old (year 2006) copy of this wikipedia page: List of Latin phrases (full), there is even a couple of numbered links inside ([1], [2]), so it looks like it was intended as temporary placeholder (we can ask Jason btw, since it was his commit). Before there were quotes from this page, which are even more placeholder-like.

    Yep, what is currently being displayed was intended to just be a place holder.
×
×
  • Create New...