[JS game] Screeps

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 08-09 15:03

Douweegbertje

Wat kinderachtig.. godverdomme

Topicstarter
Screeps

[YouTube: https://www.youtube.com/watch?v=0li717xmsEk]

Inleiding

Screeps is een strategische MMO waarbij de speler door middel van Javascript code alles moet aansturen. Het spel is gemaakt door Artem Chivchalov, in tegenstelling van de vermelding door Tweakers in het nieuwsbericht wel een bekende programmeur met name in de AngularJS wereld.

In tegenstelling wat iedereen verwachte is het spel niet in zijn geheel 'live' gegaan op 20 november 2014, maar is er een 'singleplayer' live gezet. Hier is het nu mogelijk om de tutorial te doorlopen, survival mode te spelen en een custom mode is beschikbaar om o.a. je code te testen.

Daarnaast is er een indiegogo project gestart om geld te werven voor de uiteindelijke launch.

Indiegogo project

Er loopt dus op dit moment een project op indiegogo indiegogo waarbij er een goal van $20.000 is vast gezet. De campagne sluit op 30 december, al lijkt het er op dat dit spel hoe dan ook doorgaat ongeacht of het bedrag is opgehaald. Middels de contributie via de project kunnen spelers in feite een goedkoper 'maand abonnement' verkrijgen voor het spel. Na de campagne is het nog steeds mogelijk om dit te verkrijgen, alleen dan een stukje duurder. Verder is het mogelijk om "Early preview access" te verkrijgen.

Bij de $30.000 zal de game-engine opensource worden, waarbij je dan op je lokale machine simulaties kan draaien middels een Node.js package.

Code

Een 'worker' creëren'
JavaScript:
1
Game.spawns.Spawn1.createCreep( [Game.WORK, Game.CARRY, Game.MOVE], 'Worker1' );


Een 'guard' creëren'
JavaScript:
1
Game.spawns.Spawn1.createCreep( [Game.TOUGH, Game.ATTACK, Game.MOVE, Game.MOVE], 'Guard1' );



Een 'builder' creëren'
JavaScript:
1
Game.spawns.Spawn1.createCreep( [ Game.WORK, Game.WORK, Game.WORK, Game.CARRY, Game.MOVE], 'Builder1' );

Links

Ik zal later de topicstart nog wat gaan uitbreiden mits er meer mensen dit gaan spelen etc.

Acties:
  • 0 Henk 'm!

  • The Milkman
  • Registratie: Maart 2004
  • Laatst online: 24-06 21:51

The Milkman

█████░░░░░ 50%

Fantastisch!
Ben nu even bezig, maar wat leuk zeg! API maar even goed eigen maken voor Januari! :):):)

𓆑 𓆑 𓆑 𓆑 𓆑 𓆑


Acties:
  • 0 Henk 'm!

  • mrmartijn
  • Registratie: Augustus 2010
  • Laatst online: 04-07 13:21
Wel een beetje vervelend dat de console geen tab completion heeft.

http://blog.brixit.nl - Programming, electronics and guitars. http://debestesupermarktpizza.nl - pizza


Acties:
  • 0 Henk 'm!

  • The Milkman
  • Registratie: Maart 2004
  • Laatst online: 24-06 21:51

The Milkman

█████░░░░░ 50%

mrmartijn schreef op vrijdag 21 november 2014 @ 00:33:
Wel een beetje vervelend dat de console geen tab completion heeft.
En geen repeat-history...

𓆑 𓆑 𓆑 𓆑 𓆑 𓆑


Acties:
  • 0 Henk 'm!

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 08-09 15:03

Douweegbertje

Wat kinderachtig.. godverdomme

Topicstarter
Nja, ik zou sowieso niet daar in gaan lopen scripten :+ Los van dat je dan eigenlijk in 'prod' omgeving werkt, is het sowieso wel handig om iets 'nets' te werken ;)
Ik heb zelf alleen wat problemen met een for loop. Op de één of andere manier gaat hij dan op zijn bek.

Acties:
  • 0 Henk 'm!

  • The Milkman
  • Registratie: Maart 2004
  • Laatst online: 24-06 21:51

The Milkman

█████░░░░░ 50%

Mij lukt het niet om functietjes te maken. Gewoon een korte alias om snel een creep aan te maken, die ik al vooraf gedefinieerd heb.

𓆑 𓆑 𓆑 𓆑 𓆑 𓆑


Acties:
  • 0 Henk 'm!

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 08-09 15:03

Douweegbertje

Wat kinderachtig.. godverdomme

Topicstarter
Nja, gewoon even kijken naar de foutmelding; bijv. je spawn is al bezig, of de naam bestaat al ;)

Acties:
  • 0 Henk 'm!

  • _Moe_
  • Registratie: Mei 2006
  • Laatst online: 04-08 14:45
Zal me dan ook maar eens even inlezen ;)

RTFM!


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Het ziet er grappig uit, wat ik echter niet zo snel zie is hoe je globale game state op kan slaan. Je kunt wel data in memory van een creep zetten, maar het zou ook handig zijn als je wat meer globale state op kan slaan. Je kunt natuurlijk wel flags planten, en dan iets in de name encoden, maar dat lijkt mij ook niet echt ideaal.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Soundless
  • Registratie: November 2008
  • Laatst online: 24-07 14:19
Globale gamestate? Snap even niet wat je bedoelt

Je kan de memory trouwens ook direct opvragen met het Memory.creeps object. Je hoeft het dus niet perse via bv een creep op te vragen met creep.memory

[ Voor 83% gewijzigd door Soundless op 21-11-2014 11:23 ]


Acties:
  • 0 Henk 'm!

  • eL_Jay
  • Registratie: December 2010
  • Laatst online: 14-02-2023
Erg jammer van het verdienmodel, anders was dit een insta-buy geweest.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Soundless schreef op vrijdag 21 november 2014 @ 11:21:
Globale gamestate? Snap even niet wat je bedoelt
Stel dat ik een learning algoritme wil maken die ook statistics bijhoudt over tegenstanders bijvoorbeeld. Dat kan je natuurlijk lokaal binnen de memory van een creep doen, maar ik zou het liever globaal doen.
Je kan de memory trouwens ook direct opvragen met het Memory.creeps object. Je hoeft het dus niet perse via bv een creep op te vragen met creep.memory
Dat is waarschijnlijk wel het antwoord wat ik zoek, want waarschijnlijk kan je buiten Memory.creeps ook gewoon andere state in dat Memory object stoppen, maar het Memory object staat ook niet in de docs ;)

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
eL_Jay schreef op vrijdag 21 november 2014 @ 11:26:
Erg jammer van het verdienmodel, anders was dit een insta-buy geweest.
Wat is er jammer aan het verdienmodel? Ik vindt het vrij logisch dat het gewoon een abo vorm is, immers moeten de servers ook gewoon betaald worden. De prijzen die ik nu zie zijn ook niet van dien aard dat het niet meer leuk is.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Soundless
  • Registratie: November 2008
  • Laatst online: 24-07 14:19
Woy schreef op vrijdag 21 november 2014 @ 11:44:
[...]

Stel dat ik een learning algoritme wil maken die ook statistics bijhoudt over tegenstanders bijvoorbeeld. Dat kan je natuurlijk lokaal binnen de memory van een creep doen, maar ik zou het liever globaal doen.

[...]

Dat is waarschijnlijk wel het antwoord wat ik zoek, want waarschijnlijk kan je buiten Memory.creeps ook gewoon andere state in dat Memory object stoppen, maar het Memory object staat ook niet in de docs ;)
Het Memory object is gewoon een js object (ze noemen het een JSON object maar dat is dus gewoon js...) Zie:
Each player has access to the global object Memory in which he/she may store any information in the JSON format. All the changes written in it are automatically stored and passed from tick to tick, allowing you memorize the setting, your own decisions, and temporary data.

Acties:
  • 0 Henk 'm!

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 08-09 15:03

Douweegbertje

Wat kinderachtig.. godverdomme

Topicstarter
Woy schreef op vrijdag 21 november 2014 @ 11:44:
[...]

Stel dat ik een learning algoritme wil maken die ook statistics bijhoudt over tegenstanders bijvoorbeeld. Dat kan je natuurlijk lokaal binnen de memory van een creep doen, maar ik zou het liever globaal doen.

[...]

Dat is waarschijnlijk wel het antwoord wat ik zoek, want waarschijnlijk kan je buiten Memory.creeps ook gewoon andere state in dat Memory object stoppen, maar het Memory object staat ook niet in de docs ;)
Er staan wel wat meer dingen niet in de docs. Zo zie ik nog geen mogelijkheden om structures aan te maken via code. Dat kan volgens mij alleen via 'klikken'... In elk geval kun je Memory gewoon gebruiken als 'object'. Dit is ook uit te lezen in je UI -> Memory. In feite is het global.


Zelf heb ik wel wat 'min puntjes' .

- Kan geen structures aan maken (ze zeggen dat dit nog wel komt).
- Je script draait 'raar'. In feite moet je de basis van een script vergeten. Immers normaal execute je 'op volgorde' , dat is nu -niet- het geval. Het "laatste" wat in je script staat, wordt als eerste uitgevoerd. Je zal dus in je script moeten checken of je x- al gaat uitvoeren, zodat je de volgende 'on hold' zet.
- Game state veranderd niet direct. Stel creep1 gaat dood, en is ook dood, dan is de naam nog niet direct beschikbaar, pas een paar ticks verder.. In feite als je namen herbruikt (zoals ik doe..) dan spawn je niet direct nadat een creep dood is gegaan.

Acties:
  • 0 Henk 'm!

  • Soundless
  • Registratie: November 2008
  • Laatst online: 24-07 14:19
Douweegbertje schreef op vrijdag 21 november 2014 @ 17:16:
[...]

...
- Je script draait 'raar'. In feite moet je de basis van een script vergeten. Immers normaal execute je 'op volgorde' , dat is nu -niet- het geval. Het "laatste" wat in je script staat, wordt als eerste uitgevoerd. Je zal dus in je script moeten checken of je x- al gaat uitvoeren, zodat je de volgende 'on hold' zet.
...
Kun je dit nog even toelichten? Ik begrijp niet helemaal wat je bedoelt.

Ik krijg nu ook constant de melding 'CPU limit reached'.
Zelfs enemies kunnen niet bewegen...

Acties:
  • 0 Henk 'm!

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 08-09 15:03

Douweegbertje

Wat kinderachtig.. godverdomme

Topicstarter
Soundless schreef op vrijdag 21 november 2014 @ 17:22:
[...]

Kun je dit nog even toelichten? Ik begrijp niet helemaal wat je bedoelt.

Ik krijg nu ook constant de melding 'CPU limit reached'.
Zelfs enemies kunnen niet bewegen...
First of all, It was kinda weird to 'script' in this game because unlike a 'normal' Javascript script, the way things get executed are different. We all know that in scripts, the first thing, gets executed first. So if I have:

JavaScript:
1
2
Game.spawns.Spawn1.createCreep( [Game.WORK, Game.WORK, Game.CARRY, Game.MOVE], 'worker1');
Game.spawns.Spawn1.createCreep( [ Game.TOUGH, Game.TOUGH, Game.MOVE, Game.HEAL], 'healer1');

You would assume worker 1 would get created. That is not true. Healer1 gets created. It would be usefull to enlighten people about the way scripts get executed. Now above example is mainly simple, but in my case I had a bunch of statements and it took me a while to figure this out.


Goed, had al het één en ander gepost op SO :p
Voor de CPU, het zal nu denk ik wel druk zijn. Gelukkig heb ik gister gespeelt, maar ik moet zeggen dat het toch wel redelijk lastig is!

Ik heb nu in elk geval het volgende al gemaakt:

Wat vechtunits, inclusief healer die volgt en blijft healen, werk units die resources halen en een builder. Verder een manier om te zorgen dat creeps die dood zijn gegaan opnieuw aangemaakt worden onder de zelfde naam (creeps gaan na x- seconden dood). Dus ik zal nooit creep12098120918 krijgen.
En dat de workers naar de dichtstbijzijnde source gaan t.o.v. de base.


edit;

Oh, en "CPU limit reached" is eigenlijk 9 van de 10x een bug in je code, waardoor de 'server' iets raars doet en eigenlijk zegt"fuck you".

[ Voor 4% gewijzigd door Douweegbertje op 21-11-2014 18:59 ]


Acties:
  • 0 Henk 'm!

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 08-09 15:03

Douweegbertje

Wat kinderachtig.. godverdomme

Topicstarter
Ik denk dat ik misschien maar wacht tot het iets stabieler gaat worden. Niet normaal hoeveel de enemy gaat spawnen en hoe buggy de tegenstander soms is. In feite als jij af wacht, dan doen hun dat ook. Als je dan bijv. van één wave één creep over laat, dan gaat de enemy AI op zijn bek en krijg je dus af en toe dit:

Afbeeldingslocatie: http://i.imgur.com/A0jWrfn.png

Nja zie ook bijv. de body van sommige. Gaat natuurlijk nergens over.

Acties:
  • 0 Henk 'm!

  • Anima-t3d
  • Registratie: Oktober 2013
  • Laatst online: 15-03 14:15
Handige code snippets (maken gebruik van lodash module):
JavaScript:
1
2
3
4
var _ = require('lodash');
function countSpecificCreeps(role){
    return _.size(_.filter(Memory.creeps, { 'role': role }));
}


Kan handig zijn bij het aanmaken van een creep:

JavaScript:
1
2
Game.spawns[spawn].createCreep([Game.WORK,Game.CARRY,Game.MOVE],
"Havester"+countSpecificCreeps('harvester'),{role:"harvester"});


Als jouw spawn vol staat met creeps kan er geen meer bijgemaakt worden? De code hieronder zorgt dat de creep naar de dichtsbijzijnde flag gaat.
JavaScript:
1
2
3
4
5
var _ = require('lodash');
var target = creep.pos.findNearest(Game.FLAGS);
if(_.size(target)>0) {
    creep.moveTo(target);
}

Hier is de officiele github repo met snippets

Iemand een idee hoe memory opgeschoond kan worden/wordt? Ik heb 173 creeps in memory staan, maar schat dat ik er maar rond de 50 effectief nog in leven heb?

Acties:
  • 0 Henk 'm!

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 08-09 15:03

Douweegbertje

Wat kinderachtig.. godverdomme

Topicstarter
nja afhankelijk hoe je te werk gaat kun je dat natuurlijk checken.
Ik reuse bijv. mijn memory, door dezelfde creeps aan te maken, maar je zou ook een loop kunnen gebruiken om oude uit het memory te halen. Eigenlijk vrij simpel met


JavaScript:
1
2
3
4
5
6
for (var i = 0; i < Object.keys(Memory.creeps).length; i++) {
    var name = Object.keys(Memory.creeps)[i];
    if(!Game.creeps[name])
        {
           //creep bestaat niet, creeer hem opnieuw of verwijder hem uit het memory..
        }

[ Voor 34% gewijzigd door Douweegbertje op 22-11-2014 15:36 ]


Acties:
  • 0 Henk 'm!

  • Anima-t3d
  • Registratie: Oktober 2013
  • Laatst online: 15-03 14:15
Anima-t3d schreef op zaterdag 22 november 2014 @ 14:51:

Iemand een idee hoe memory opgeschoond kan worden/wordt? Ik heb 173 creeps in memory staan, maar schat dat ik er maar rond de 50 effectief nog in leven heb?
Blijkbaar gebeurd dit als je veel creeps klaar zet om te spawnen, maar aangezien het LiFo is ga je een queue hebben die tilt slaat, na 3 skips. Bijvoorbeeld als je volgens jouw logica zowel een guard, harvester en healer laat spawen. Dan wordt de laatste in de spawnlijst het eerste aangemaakt (zoals ook al vermeld staat in een eerdere post). Echter als je bij volgende spawnbeurt opnieuw alle 3 wilt laten spawnen heb je in de queue al 2 guards, 2 harvesters en nu nog 1 healer (indien deze laatst stond en dus wel effectief aangemaakt werd). Ook nu weer wordt de healer aangemaakt, volgende beurt heb je dan 3 guards, 3 harvesters en 1 healer die gemaakt moeten worden. Zo gaat dit verder en heb je dus een lijst met creeps die nooit gemaakt zijn.

Ik wou een creep "build" meegeven aan een functie om in die functie een creep te maken, maar dat gaat niet? Ofwel krijg ik juiste bodyparts, maar geen naam en geen memory meegegeven OFWEL gewoon niet eens juiste bodyparts en wordt er dus niks aangemaakt. Ik wou namelijk een soort van factoryfunctie maken waaraan je de creep instellingen meegeeft om die daarin te maken.

JavaScript:
1
2
3
4
function queueCreep(creep){
        var spawn ="Spawn1";
        Game.spawns[spawn].createCreep(creep);
}


Geen van beide hieronder werkt:
JavaScript:
1
2
3
4
5
6
var creep = [
            [Game.WORK,Game.CARRY,Game.MOVE],
            "Havester",
            {role:"harvester"}
        ];
queueCreep(creep); //Geeft juiste body, geen naam en geen memory

JavaScript:
1
2
3
4
5
6
var creep = {
            body:[Game.WORK,Game.CARRY,Game.MOVE],
            name:"Havester",
            memory:{role:"harvester"}
        };
queueCreep(creep); //Geeft -10 -->Game.ERR_INVALID_ARGS     Body is not properly described.

Iemand een idee wat ik fout doe of hoe ik dit moet aanpakken? Ik geef voorkeur aan een selfmanaged queue i.p.v. alles rechtstreeks door te sturen en dan dus kans hebben dat je phantom creeps in het geheugen hebt steken.

Acties:
  • 0 Henk 'm!

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 08-09 15:03

Douweegbertje

Wat kinderachtig.. godverdomme

Topicstarter
De site is down, maar ik ben er vrij zeker van dat createCreep geen paramter 'memory' heeft. Dus haal even dat stukje eruit:
memory:{role:"harvester"}
Gebruik gewoon een aparte regel voor

JavaScript:
1
Memory.creeps[creepName].role = 'harvester';



Ikzelf gebruik gewoon een functie die kijkt of je in de huidige tick iets kan aanmaken. Vars mogen duidelijk zijn, maar in elk geval zet ik creating bij een succesvolle createCreep call, en waiting als bijv. je nog te weinig resources hebt.

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function canCreate()
{
    if(creating == 1)
    {
        return false;
    }
    else if ( waiting == 1)
    {
        return false;
    }
    else if(Game.spawns.Spawn1.spawning == null)
    {
        return true;
    }
    else
    {
        return false;
    }
}

Acties:
  • 0 Henk 'm!

  • kutagh
  • Registratie: Augustus 2009
  • Nu online
Zelf heb ik een module voor het spawnen van een creep, met een object voor de verschillende creeps die ik kan aanmaken, a la

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
module.exports.creepTypes = {
    noExtensions: {
        harvester: {
            bodyparts: [
                Game.WORK,
                Game.CARRY,
                Game.MOVE,
                Game.MOVE
            ],
            args: { 
                role: 'harvester'
            }
        },
[...]

(opgesplitst in bepaalde groepen van hoeveel extensies ik heb).

De rest van de code die een creep spawnt, roept vervolgens onderstaande functie aan met 1 van de creeps die gedefineerd staat:
JavaScript:
1
2
3
4
5
6
7
8
9
var _ = require('lodash');
module.exports.spawn = function(creepType, base) {
    base = base || _.sample(Game.spawns) || "none";
    if(base === "none") { 
        console.log("You don't have a base to spawn with!");
        return; 
    }
    base.createCreep(creepType.bodyparts, undefined, creepType.args);
}


Zelf maak ik geen gebruik van de naam parameter, door die undefined te laten wordt er random een naam toegekend.
Wat betreft het voorkomen van opvullen van memory, roep ik binnen een if functies aan die bepalen of er een creep met rol x moet worden gebouwd, zo ja roept ie de spawn functie aan en returnt ie true, anders false, a la:
JavaScript:
1
2
3
4
5
6
7
    if( decideToBuildGuards(base) ||
        decideToBuildHarvesters(base) ||
        decideToBuildBuilders(base) ||
        decideToBuildTransfers(base, extensions, transfers)
    ) {
        return;
    }

Acties:
  • 0 Henk 'm!

  • DirkZzZ
  • Registratie: September 2007
  • Laatst online: 04-09 10:02
Het zal misschieen domme vraag zijn, maar ik ben een beetje aan het spelen maar kan nergens terug vinden wat ik nou met de energy moet nadat deze is gemined? :+

Acties:
  • 0 Henk 'm!

  • Qzar
  • Registratie: December 2009
  • Laatst online: 10-09 14:18
DirkZzZ schreef op zondag 23 november 2014 @ 16:10:
Het zal misschieen domme vraag zijn, maar ik ben een beetje aan het spelen maar kan nergens terug vinden wat ik nou met de energy moet nadat deze is gemined? :+
De energy moet je naar je spawn brengen zodat je nieuwe creeps kan maken.

Acties:
  • 0 Henk 'm!

  • DirkZzZ
  • Registratie: September 2007
  • Laatst online: 04-09 10:02
Qzar schreef op zondag 23 november 2014 @ 16:11:
[...]


De energy moet je naar je spawn brengen zodat je nieuwe creeps kan maken.
Ah klinkt wel heel logisch, dus een moveTo naar een spawnlocation, en dan de energy transferen dus?

Acties:
  • 0 Henk 'm!

  • Qzar
  • Registratie: December 2009
  • Laatst online: 10-09 14:18
DirkZzZ schreef op zondag 23 november 2014 @ 16:15:
[...]


Ah klinkt wel heel logisch, dus een moveTo naar een spawnlocation, en dan de energy transferen dus?
Precies, het is handig om de tutorial een keer te volgen daar zitten al deze stappen in verwerkt.

Acties:
  • 0 Henk 'm!

  • eL_Jay
  • Registratie: December 2010
  • Laatst online: 14-02-2023
Woy schreef op vrijdag 21 november 2014 @ 11:45:
[...]

Wat is er jammer aan het verdienmodel? Ik vindt het vrij logisch dat het gewoon een abo vorm is, immers moeten de servers ook gewoon betaald worden. De prijzen die ik nu zie zijn ook niet van dien aard dat het niet meer leuk is.
Prijzen zijn op zich oke, alleen een abonnementsvorm is niets voor mij. Betaal liever 1x 10 a 20 euro en dan klaar ermee.

Acties:
  • 0 Henk 'm!

  • Tazz@NL
  • Registratie: Augustus 2002
  • Laatst online: 15-05 09:16
Heeft iemand hier tips hoe ik makkelijk de source kan exporteren/importeren?

Ik gebruik namelijk verschillende pc's om de game te programmeren. Ik heb één source locatie, maar ik blijf aan het knippen en plakken...

Acties:
  • 0 Henk 'm!

  • Jegorex
  • Registratie: April 2004
  • Laatst online: 03-09 23:24
Tazz@NL schreef op maandag 24 november 2014 @ 14:26:
Heeft iemand hier tips hoe ik makkelijk de source kan exporteren/importeren?

Ik gebruik namelijk verschillende pc's om de game te programmeren. Ik heb één source locatie, maar ik blijf aan het knippen en plakken...
Iets als GIT of SVN?
Misschien een beetje overkill voor dit.

[ Voor 5% gewijzigd door Jegorex op 24-11-2014 15:53 ]


Acties:
  • 0 Henk 'm!

  • Tazz@NL
  • Registratie: Augustus 2002
  • Laatst online: 15-05 09:16
Jegorex schreef op maandag 24 november 2014 @ 15:53:
[...]

Iets als GIT of SVN?
Misschien een beetje overkill voor dit.
Het gaat me niet zozeer om sourcebeheer, maar om een manier om de sources in en uit screeps.com te krijgen.

Acties:
  • 0 Henk 'm!

  • kutagh
  • Registratie: Augustus 2009
  • Nu online
Tsja, als je moeilijk durft te doen om een tool hiervoor te ontwikkelen:
Screeps slaat je source bestanden op in je local storage, in chrome & Windows 7:
code:
1
%AppData%/Local/Google/Chrome/User Data/Default/Local Storage/http_screeps.com_0.localstorage

Dit is een sqlite3 database bestand, met 1 tabel ItemTable, kolommen key/value. Je moet kolom users.code hebben, dat is een array van javascript objecten, die als keys o.a. modules heeft. Modules is dan ook een javascript object met als keys de module naam en als value de inhoud van de module, met o.a. tab, return carriage en newline tekens als \t, \r en \n

Je zou dus een tool kunnen schrijven die als git hook wordt aangeroepen, de source inleest en die in de sqlite database schrijft van je local storage.

Acties:
  • 0 Henk 'm!

  • rharmsen
  • Registratie: Januari 2008
  • Laatst online: 12-05 11:31
Doe ik iets verkeerd of is de simulator http://www.screeps.com/g/#!/sim heel erg traag als er eenmaal een tiental enemies zijn? (Een seconde in simulatie duurt dan niet 1 seconde maar bijna 10).

Ik draai het in Google Chrome en heb een laptop met:
- 2.0ghz quardcore i7
- 12gb ram
- ssd

Acties:
  • 0 Henk 'm!

  • rty
  • Registratie: November 2011
  • Niet online

rty

Ik heb nu 1 creep rondlopen en het is erg traag. Ik vermoed dat de server het wat moeilijk heeft.

Acties:
  • 0 Henk 'm!

  • Qzar
  • Registratie: December 2009
  • Laatst online: 10-09 14:18
Er is zojuist een update geweest via indiegogo:
Friends,

People ask us a lot of questions, and we decided to address some of them in this update. The main question is: what will happen if the campaign doesn't reach the goal? As we have already said, we need this campaign to make sure that we'll be able to finish everything in due time, which means enough financial resources for full-time work on the project. The promised MMO part will be launched in any case. However, Screeps does not have financing at all – it is an indy project of a couple of people working in their free time. So we can't guarantee that we'll be able to launch the Early Preview in January. We will do our best, but still can't guarantee. This is what will happen in case we won't reach the target. On the other hand, we guarantee the January timeline in case of reaching it.

We hear a lot of concerns about workability, performance, usability, etc. of the current demo version of the game. Please keep in mind that this is only a demo, not a ready game. Certainly, the ready game, when it's launched, will have a player profile, saving your code to the server, GitHub integration, etc, and computations will be done on the server rather than your browser, which will boost performancce.

By the way, we are working on certain improvements right now. For example, today we launched an update that boosted performance considerably which allowed to raise the maximum execution speed to 500%. Besides, this update fixes a lot of bugs and adds some features that you requested like up/down buttons in the console and switching tabs in the editor on Alt+1, Alt+2, Alt+3. Soon we hope to add zooming of the game window and a pop-up mode of the code editor in a separate window which will make control more convenient.

We added a new $300 perk to the campaign which allows you to design your own room for your open world. You will have exclusive right to build your spawns in this room. It doesn't mean that they will be indestructible, so you won't get significance advantage, but no one will be able to build spawns until you stop playing. So you will be able to leave a major trace in the history of Screeps.
Thank you very much for your support! We are really impressed by the results you get as you master the game. For example, there is an interesting community on Reddit already, and one may find lots of really intelligent scripts on GitHub. It all shows that Screeps has bright future. Let's create it together! Please spread the word to your friends and colleagues.

  • Anima-t3d
  • Registratie: Oktober 2013
  • Laatst online: 15-03 14:15
Tazz@NL schreef op maandag 24 november 2014 @ 14:26:
Heeft iemand hier tips hoe ik makkelijk de source kan exporteren/importeren?
...
Er is een tool voor source syncing van local files met game en ook git integratie.
Lees er hier meer over op reddit
Hier de gist _/-\o_
I wrote a script which will automatically sync your local filesystem to
Screep's internal editor. Save `sync.js` and put it where you want to
work on your Screeps code. Now go into that directory and create a
`main.js` with your Screeps code. Every file that you create on your
filesystem will be a Screeps module. Be careful because the script will
wipe out everything you have written in the Screeps editor; it uses your
filesystem as the single point of authority!


From that working directory now run (in terminal) `node sync` which will
create an HTTP server on port 9090. On the command line it'll dump out
some code that you need to copy and paste into your browser's Javascript
debug console.
This is the bootstrap process which links your browser to
the Node server.

After that Node will watch for changes to your code on the local
filesystem and push them to the Screeps instance as needed. It will also
listen for console messages from Screeps and log it to the terminal, so
you can close the Screeps console panel entirely!
Hier een userscriptje voor het bootstrappen + andere extra's (ctrl+s voor save en geluid) _/-\o_
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// ==UserScript==
// @name Screeps Enhancements Suite
// @version 0.5
// @description A collection of Screeps enhancements by various authors
// @match http://screeps.com/g/*
// ==/UserScript==
/* Sync bootstrap
* @author NewLlama (https://gist.github.com/laverdet/b67db14ccc8520abea2c)
*/
var sync = function() {
var sync = document.createElement('script');
sync.src = 'http://localhost:9090/inject';
document.body.appendChild(sync);
};
/* CTRL-S Commit
* @author andyleap (https://gist.github.com/andyleap/2378fc4ef8c1410da446)
*/
var ctrl_s_commit = function() {
...
};
/* Console sounds
* @author fikal (https://github.com/fikal/screeps_userscripts/blob/master/screeps_sound.txt)
* @author Tribuadore Change method of remembering last message and added setSound
*/
var console_sounds = function() {
...
}
// Delay injections until the user enters the game proper
var waitForGameConsole = function() {
if (!$('.console-messages-list').length) return setTimeout(waitForGameConsole, 1000);
sync();
ctrl_s_commit();
console_sounds();
console.log('Screeps Enhancements Suite v0.5');
};
waitForGameConsole();

Acties:
  • 0 Henk 'm!

  • TheDevilOnLine
  • Registratie: December 2012
  • Laatst online: 06-06 22:54
Voor de mensen die graag in Survival mode zo ver mogelijk willen komen, dit is de code waar je tegen vecht.

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//main
var _ = require('lodash'), healer = require('healer'), findAttack = require('findAttack');
for (var i in Game.creeps) {
    var creep = Game.creeps[i];
    if (creep.getActiveBodyparts('heal') > 0) {
        healer(creep);
    } else if (/Defend/.test(creep.name)) {
        findAttack(Game.creeps[i], false, true);
    } else if (/Siege/.test(creep.name)) {
        findAttack(Game.creeps[i], true);
    } else {
        findAttack(Game.creeps[i], false);
    }
}

//healer
module.exports = function (creep) {
    var target = creep.pos.findNearest(Game.MY_CREEPS, {filter: function (i) {
        return i != creep && i.hits < i.hitsMax;
    }});
    if (!target) {
        target = creep.pos.findNearest(Game.MY_CREEPS, {filter: function (i) {
            return i != creep;
        }});
    }
    if (!target) {
        return;
    }
    if (target.hits == target.hitsMax || creep.heal(target) != Game.OK) {
        creep.moveTo(target);
    }
    if (creep.getActiveBodyparts(Game.RANGED_ATTACK)) {
        var targets = creep.pos.findInRange(Game.HOSTILE_CREEPS, 3);
        if (targets.length) {
            creep.rangedAttack(targets[0]);
        } else {
            targets = creep.pos.findInRange(Game.HOSTILE_SPAWNS, 3);
            if (targets.length) {
                creep.rangedAttack(targets[0]);
            }
        }
    }
}

//findAttack
module.exports = function (creep, ignoreCreeps, defend) {
    function find(opts) {
        opts = opts || {};
        opts.filter = function (i) {
            return i.pos.inRangeTo(creep, 7);
        };
        var target;
        if (!ignoreCreeps) {
            target = creep.pos.findNearest(Game.HOSTILE_CREEPS, opts);
        }
        if (!target) {
            opts.filter = null;
            target = creep.pos.findNearest(Game.HOSTILE_SPAWNS, opts);
        }
        if (target) {
            creep.moveTo(target, opts);
        }
        return target;
    }

    var target, healers = creep.room.find(Game.MY_CREEPS, {filter: function (i) {
        return i.getActiveBodyparts('heal') > 0;
    }});
    if (defend) {
        var siege = creep.room.find(Game.MY_CREEPS, {filter: function (i) {
            return /Siege/.test(i.name);
        }});
        if (siege.length > 0) {
            target = siege[0];
            creep.moveTo(target);
        }
    }
    if (!target && creep.hits < creep.hitsMax / 2 && healers.length > 0) {
        target = creep.pos.findNearest(Game.MY_CREEPS, {filter: function (i) {
            return i.getActiveBodyparts('heal') > 0;
        }});
        if (!target || creep.moveTo(target) != Game.OK) {
            target = null;
        }
    }
    if (!target) {
        target = find();
        if (!target) {
            target = find({ignoreDestructibleStructures: true});
        }
        if (!target) {
            return;
        }
        creep.attack(target);
    }
    if (creep.getActiveBodyparts(Game.RANGED_ATTACK)) {
        var targets = creep.pos.findInRange(Game.HOSTILE_CREEPS, 3);
        if (targets.length) {
            creep.rangedAttack(targets[0]);
        } else {
            targets = creep.pos.findInRange(Game.HOSTILE_SPAWNS, 3);
            if (targets.length) {
                creep.rangedAttack(targets[0]);
            }
        }
    }
}

Acties:
  • 0 Henk 'm!

Verwijderd

mijn resolutie is veel te klein voor dit spel ik kan niks lezen :( 1366x768

Acties:
  • 0 Henk 'm!

  • TheDevilOnLine
  • Registratie: December 2012
  • Laatst online: 06-06 22:54
Er staan wel wat meer dingen niet in de docs. Zo zie ik nog geen mogelijkheden om structures aan te maken via code. Dat kan volgens mij alleen via 'klikken'...
Dit is recent toegevoegd. Zie http://screeps.com/docs/changelog.php voor meer info

Acties:
  • 0 Henk 'm!

  • Qzar
  • Registratie: December 2009
  • Laatst online: 10-09 14:18
Het MMO gedeelte van deze game is inmiddels live voor indiegogo funders. Zijn er al tweakers aan het spelen?

Acties:
  • 0 Henk 'm!

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 08-09 15:03

Douweegbertje

Wat kinderachtig.. godverdomme

Topicstarter
Ik heb het eigenlijk (tijdelijk) opgegeven vanwege de missende functionaliteiten en af en toe buggy zooi. In elk geval ziet het er al een stukje beter uit dus wellicht dat ik binnenkort weer eens ga bekijken.

Acties:
  • 0 Henk 'm!

  • Qzar
  • Registratie: December 2009
  • Laatst online: 10-09 14:18
Ik moet zeggen dat de game inmiddels redelijk stabiel draait en je nog maar weinig last hebt van bugs. Ze hebben aangegeven dat volgens de huidige planning de early preview tot eind juni draait, wellicht vanaf Juli dus een open beta.

Acties:
  • 0 Henk 'm!

  • Toolmaker
  • Registratie: April 2004
  • Laatst online: 09-06 16:59
Heh, ik ben Qzar(STB)'s buur in de early access preview en ik kan bevestigen dat de meeste bugs er wel uit zijn.

Wat nog wel beetje een issue is path finding: deze is vrij volatiel en CPU gebruik voor hetzelfde pad kan soms enorm fluctueren. Ik heb momenteel 20 creeps rondlopen, 300 CPU en ik krijg soms absurd hoog CPU-gebruik of dat ie zelfs helemaal uit zijn CPU loopt, en dat terwijl mijn CPU meestal tussen de 20 ~ 35 fluctueert. Nog steeds vrij hoog voor de hoeveelheid creeps die ik heb rondlopen dus mogelijk rammelt er nog wat aan mijn scripts.

Acties:
  • 0 Henk 'm!

  • Qzar
  • Registratie: December 2009
  • Laatst online: 10-09 14:18
De early preview is geeindigd en komende woensdag is de public launch: http://support.screeps.co...nch-publicly-on-August-12.

Acties:
  • 0 Henk 'm!

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 08-09 15:03

Douweegbertje

Wat kinderachtig.. godverdomme

Topicstarter
Ik vind het pay concept erg tegenvallen.. niet eens veel zin om er mee aan de slag te gaan eigenlijk :/

Acties:
  • 0 Henk 'm!

  • Qzar
  • Registratie: December 2009
  • Laatst online: 10-09 14:18
Douweegbertje schreef op maandag 10 augustus 2015 @ 21:25:
Ik vind het pay concept erg tegenvallen.. niet eens veel zin om er mee aan de slag te gaan eigenlijk :/
Klopt, hier is erg veel kritiek op. Voor zo'n soort spel is $5 per maand wel erg veel, er zou sowieso een f2p moeten zijn met beperkte CPU capaciteit. Nu is alleen de simulator f2p, maar het MMO gedeelte is juist interessant. Ik ben benieuwd hoeveel spelers er morgen zijn bij de launch...

Edit: De CPU limieten zijn aangepast, d.m.v. twitter promo is het nu mogelijk om gratis te spelen in de MMO modus.

[ Voor 10% gewijzigd door Qzar op 11-08-2015 22:36 ]


Acties:
  • 0 Henk 'm!

  • Meekoh
  • Registratie: April 2005
  • Laatst online: 10-09 17:31
Even een vette Kick. O-)
Onlangs was er op IndieGogo een campagin om de server van screeps OpenSource te maken
Hierbij wordt ook een steam client ontwikkeld zodat je de game niet in een browser hoeft te spelen.
Meer info hier.

Heb zelf de campaign gebackt (was maar $8), dus zal wel even wat ervaringen posten als ik de server ergens heb draaien tzt.
Ik en veel vrienden van mij vonden het spel namelijk best leuk, alleen we wilden niet betalen maandelijks hiervoor. Nu hebben we zelf allemaal wel een servertje ergens draaien, dus die kosten maken we al. Dus straks onze eigen Screeps Server erop en gaan met die banaan _/-\o_

Computer says no

Pagina: 1