Screeps: World

Screeps: World

Not enough ratings
Guia de Screeps en español
By Jabon
Esta es una guía en español para Screeps.
   
Award
Favorite
Favorited
Unfavorite
Introducción
Esta pretende ser una guía de Screeps para no iniciados en el juego.

Screeps es un juego que consiste en crear colonias y automatizarlas y se caracteriza principalmente porque el jugador es quien programa el comportamiento de las crituras y estructuras que componen las colonias. Para ello se utiliza Javascript.

Si no estás familiarizado con el juego, es muy recomendable que sigas el tutorial que se te ofrece al principio, aunque el código que utiliza el tutorial no es tan recomendable jeje.

Al principio se nos pedirá que nos establezcamos en una habitacion (o "Room") y será donde tendremos nuestra primera colonia. Con el tiempo podremos ir creando otras colonias en otras rooms.

CPU
El juego se desarrolla por turnos, o ticks, y un tick dura lo que se tarda en ejecutar el código de todos los jugadores que habitan en el mundo en el que jugamos (nuestro "Shard").

Cuando empecemos a jugar tendremos un límite de CPU que podremos utilizar. 1CPU equivale a 1ms de tiempo de ejecución. En los Shards 1 y 2 tenemos un limite de CPU de 10, pero comprando una suscripción podemos aumentarlo hasta 100.

Incluso existe la posibilidad de repartir nuestro límite de CPU entre varios Shards si queremos tener presencia en más de uno.

En el Shard 3, creado recientemente, todos los jugadores tienen un límite de 20 CPU sin posibilidad de aumentarlo. La duración de los ticks o turnos va a depender de la cantidad de jugadores presentes en el Shard en el que juguemos y esta suele oscilar entre 2 y 5 segundos (me lo acabo de inventar, pero por ahí va).

No está de más decir que cuanto más eficiente sea tu código, más habitaciones podrás gestionar.
Consejos sobre uso de CPU
En este apartado quiero hacer hincapié en la optimización del uso de CPU y daros algunos consejos.

Como he comentado anteriormente es muy importante que nuestro código sea eficiente en cuanto al uso de CPU ya que esto nos va a permitir controlar más rooms y también que nuestros creeps hagan más cosas.

Aquí van algunos consejos:

Guarda en memoria todo lo que puedas: Cada vez que buscamos algo en el juego, como estructuras dañadas, torretas, spawns, energy sources, etc... estamos consumiendo una gran cantidad de tiempo de ejecución. El uso de la memoria nos permite guardar estas búsquedas para utilizar los resultados más tarde.
Cabe mencionar que no debemos guardar en la memoria las estructuras enteras: para eso están las IDs.

A continuación podéis ver un ejemplo en el que buscamos las torres presentes en una habitación. Para no tener que buscarlas en cada tick, las buscamos una vez y las guardamos en la memoria.


Una ve encontradas, podremos usar la información guardada para referirnos a nuestras torres:


De esta forma, buscaríamos las torres una sola vez, ahorrando una cantidad considerable de cpu y de ahí en adelante usaríamos la información almacenada en la memoria para referirnos a ellas. Si una torre es destruida por un enemigo o por nosotros mismos, o si teníamos X torres y ahora tenemos más, tendremos que actualizar la información contenida en la memoria.

Usa una máquina de estados para tus creeps: Nuestros creeps deberán evaluar un montón de condiciones para decidir qué deben hacer en cada momento, pero no es eficiente que en cada tick evalúen todas esas condiciones. Algo muy recomendable es crear una máquina de estados.

Aquí va un ejemplo:

Tenemos un creep cuya tarea es transportar energía continuamente de un punto a otro. Para ello podríamos hacer algo así:


En el ejemplo anterior, nuestro creep va a evaluar cada condición durante cada tick de su ciclo de vida para saber qué tiene que hacer, pero esto no es eficiente.

Una forma mejor de hacerlo sería la siguiente:

De esta forma nuestro creep solo va a ejecutar el código necesario en función de su estado. Además nuestro código va a ser más fácil de mantener y de leer y nos va a ser mucho más fácil reutilizar código entre diferentes roles.

Memoria
La memoria es una parte muy importante de Screeps. Cada vez que transcurre un tick del juego, los valores de todas las variables de nuestro código vuelven a sus valores iniciales. La memoria, por tanto, nos permite conservar información entre ticks.

Solo los creeps, las banderas y las habitaciones tienen memoria (si queremos almacenar información sobre nuestras estructuras, lo haremos en la memoria de la habitación), y todos los jugadores disponen de un total de 2048 Bytes de memoria para almacenar lo que consideren oportuno.

Por ejemplo, pongamos que tenemos un minero (un creep cuya única tarea es extraer energía de un energy source). Escribimos un fragmento de código que se encarga de decirle a nuestro minero dónde debe ir a extraer la energia. Nuestro minero ya sabe dónde ir y se pone en camino recorriendo un cuadradito. Pero al comienzo del siguiente tick debemos volver a ejecutar ese código para decirle dónde ir y que se mueva otro cuadradito, y así sucesivamente hasta que llegue a su destino. Una forma más eficiente de hacer esta tarea sería decidir dónde ha de ir y almacenar su destino en la memoria. De esta manera, cada tick solo deberemos decirle al creep que vaya a "creep.memory.destino" ahorrando así tiempo de ejecución y por tanto CPU.
Recursos
En el juego manejaremos diferentes recursos:
  • Energia: será nuestro recurso principal, y lo utilizaremos para pagar el coste de creación de los bichos, estructuras, etc... A medida que vayamos extrayendo energía nuestro GCL aumentará, lo que nos permitirá ir expandiendo nuestro imperio a otras rooms. Además, cada habitación (no todas, pero casi) tiene una estructura llamada "controller" a la que deberemos inyectar energía para aumentar su nivel. A medida que el nivel de nuestro controller vaya aumentando iremos desbloqueando nuevas estructuras para nuestra colonia.
  • Minerales: Existen diferentes tipos de minerales en el juego y al principio no se usan. Empiezan a adquirir importancia en fases más avanzadas del juego. Hay unos minerales básicos que pueden ser combinados para convertirlos en "aleaciones" más complejas. Se utilizan para crear bombas, para mejorar a los bichos y hacerlos más eficaces, resistentes...
  • Créditos: En Screeps hay un sistema de mercado que permite comerciar nuestros excedentes de recursos e intercambiarlos por créditos. Esos créditos, a su vez, pueden ser utilizados para comprar otros recursos que necesitemos.
Criaturas
En Screeps serán las criaturas (creeps) que creemos quienes velarán porque nuestra colonia funcione correctamente. Los creeps serán los encargados de construir y reparar las estructuras, de extraer la energía y los minerales, de atacar a los intrusos/enemigos, de curar a los heridos, de aumentar el nivel del controller, etc....

A diferencia de practicamente todos los juegos que conocemos, en Screeps no hay creeps predefinidos (arquero, minero, healer...). Por el contrario somos nosotros quienes decidimos cómo van a ser los creeps definiendo su cuerpo o "body", que está compuesto de partes. Cada parte tiene un coste en energía que tendremos que pagar para poder crear el creep, y el body de los creeps tiene un límite de 50 partes.
  • Partes:
    • CARRY: Las partes carry son las que dan a los creeps la capacidad de transportar cosas (energía y minerales). Cada parte CARRY da al creep la capacidad de transporta 50 uds. que podremos aumentar añadiendo más partes.
    • MOVE: Los creeps necesitan partes MOVE para poder moverse. Además, el resto de partes generan "fatiga", por lo que si queremos que nuestro creep se mueva un cuadradito por tick, no bastará con una sola parte MOVE, sino que tendremos que ajustar el número de partes MOVE en función de la cantidad de partes totales que compongan el body del creep.
    • WORK: Las partes WORK son las que permiten a nuestros creeps trabajar, como no podía ser de otra manera. Trabajar incluye extraer energía, extraer minerales, inyectar energía al controller, construir y reparar.
    • ATTACK y RANGED_ATTACK: Como parece obvio, estas partes permiten a los creeps dañar a otras estructuras y a otros creeps. El ataque a melé es más dañino que el ataque a distancia, pero también requiere que estemos más cerca del objetivo.
    • HEAL: Esta parte tiene como único fin curar a otros creeps (recordar que para reparar las estructuras se usan partes WORK). Cuantas más partes HEAL, más curará nuestro creep.
    • TOUGH: Las partes TOUGH son lo más parecido que hay en Screeps a una armadura. Solo tienen un coste en energía de 10 por parte y hace que cualquiera que quiera dañar a nuestros creeps, tenga que dañar primero todas las partes TOUGH antes de empezar a dañar otras partes más críticas.
      Aqui quiero hacer un inciso: Al definir el body de un creep, lo haremos más o menos así:

      creepBody = [TOUGH, WORK, CARRY, MOVE];

      De esta manera, cuando sea atacado, le irán dañando las partes de izquierda a derecha.
      Pero si lo hiciéramos al revés:

      creepBody = [MOVE, CARRY, WORK, TOUGH];

      ...sería inútil, ya que la primera parte que perderia nuestro creep sería la parte MOVE, quedando varado e indefenso al tiempo que la parte TOUGH no tendría ningun efecto real. Para un creep mas grande, una buena configuración podría ser la siguiente:

      creepBody = [TOUGH, TOUGH, TOUGH, CARRY, MOVE, CARRY, MOVE, CARRY, MOVE, CARRY, MOVE];

      En este ejemplo, el creep podría transportar un total de 200 Uds de recursos. Al tener el mismo número de partes MOVE y CARRY, nunca tendría fatiga, por lo que podría desplazarse a razon de 1 cuadradito por turno (Podría tener fatiga si se desplaza por pantanos, de los que no he hablado). Y de la forma que están dispuestas las partes TOUGH, sí que actuarían de armadura.

  • Roles: Cuando vayamos definiendo nuestros creeps, lo haremos pensando en el rol que van a desempeñar. Cada jugador decide qué roles van a tener sus creeps. Por ejemplo, hay quien juega con un rol que extrae energía y cuando el creep está lleno la transporta a su destino y hay quien prefiere crear simplemente un minero (sin partes CARRY) que se encarga de extraer la energía y dejarla caer al suelo y luego otro rol que se encarga de recoger esa energía y transportarla (sin partes WORK). ¿Qué es mejor? Es una cuestión de gustos, y de cómo decidas plantear tu estrategia. Y lo mismo se puede aplicar a cualquier rol que puedas imaginar.
Debéis tener presente en todo momento que la eficacia es crucial y la razón principal es el consumo de CPU. Cuanto menos CPU usemos, más rooms podremos gestionar. Hay que tener en cuenta también que aunque parezca que dos creeps son más eficaces que uno, también consumirán el doble de CPU, por lo que en general, casi siempre va a ser más conveniente crear los creeps más grandes que podamos "pagar" y la menor cantidad de ellos que sea posible.
Estructuras
  • Spawn: Al crear una colonia, lo primero que construiremos será un spawn. Esta estructura es la encargada de crear los creeps. Cada creep tardará en construirse 3 * body.length ticks (Es decir, si el body de nuestro creep tiene 4 partes, tardará 12 ticks en crearse). Los spawns tienen, además, una capacidad de 300 de energía.
  • Extension: Las extensiones permiten aumentar la energía de la que disponemos en nuestra colonia. Cada una tiene una capacidad de 50 de energía.
  • Tower: Las torres son nuestras estructuras principales de defensa. Son capaces de atacar, pero también son capaces de curar a nuestros creeps cuando estén heridos. En ambos casos su eficacia disminuye a medida que aumenta la distancia al objetivo.
  • Container: Los contenedores son estructuras de almacenaje (capacidad 2000). Tienen el inconveniente de que con el tiempo hay que repararlos. Podremos tener un total de 5. Además, nuestros creeps pueden circular por encima de los containers mientras que el resto de estructuras supondrán una barrera para ellos sobre la que no podrán pasar.
  • Storage: A diferencia de los containers, solo podremos tener un storage en cada colonia, pero su capacidad de almacenaje es de 1 millón. Al igual que los containers, los storages pueden almacenar energía y minerales al mismo tiempo.
  • Link: Los links tienen una capacidad de almacenaje de 800 (solo energía) y se utilizan para enviar su contenido instantáneamente a otro link. Al desbloquearlos solo podremos construir dos, pero a medida que nuestro controller aumente su nivel podremos construir más, hasta un máximo de 6 por colonia.
  • Terminal: Los terminales, solo uno por colonia, nos permiten transferir recursos de una habitacion a otra a cambio de un coste de energía proporcional a la distancia entre las habitaciones. Además nos permiten acceder al Market, mediante el cual podremos convertir los recursos que vendamos en créditos, que a su vez nos permitirán comprar recursos a otros jugadores.
  • Nuker: El nuker es la estructura en la que podremos fabricar y desde la que podremos lanzar bombas. No entro en más detalles porque desde que construyas tu primera colonia hasta que puedas construir un nuker van a pasar varias semanas, y para entonces tú mism@ te habrás informado.
  • Observer: En Screeps, nuestro código solo puede obtener información de aquellas habitaciones en las que tengamos presencia (estructuras o creeps). El observer es la estructura encargada de solucionar ese inconveniente, aunque al igual que el nuker, la desbloquearemos al cabo de unas semanas de juego.
  • Lab: Los laboratorios son las estructuras en las que combinaremos unos minerales con otros para crear aleaciones. Cada mineral o aleación nos servirá para mejorar (boostear) a nuestros creeps consiguiendo diferentes efectos (más resistencia, curar más, hacer más daño, etc...)
  • Power Spawn: Es como un spawn normal, pero solo crea creeps mejorados a costa de minerales.
  • Mineral Extractor: Esta estructura nos permite extraer los minerales presentes en una habitación. Se debe construir sobre el yacimiento de mineral. Cada vez que extraemos minerales de un mineral source, deberemos esperar un periodo corto de tiempo hasta que podamos volver a extraer, por lo que muchos jugadores optan por utilizar creeps con una cantidad enorme de partes WORK, y así aprovechar al máximo la tarea de extracción.
  • Roads: Son simplemente caminos, o carreteras. En creep que se desplaza por una carretera generará la mitad de fatiga al moverse, por lo que si construimos carreteras podremos ahorrar partes MOVE en nuestros creeps. Al igual que los containers se degradan con el tiempo y con el uso, por lo que habrá que repararlas periódicamente.
  • Walls: Simplemente son muros, que nos permitirán crear barreras para impedir el paso de los creeps (tanto amigos como enemigos).
  • Ramparts: Son parecidos a los muros. Una diferencia es que los Ramparts se degradan con el tiempo, como las carreteras y los containers, pero por el contrario los ramparts permiten el paso a nuestros creeps y no a los enemigos y se pueden construir encima de otras estructuras. Al igual que ocurre con los muros, al construir un rampart, este tendrá solo 1 de resistencia y si decidimos repararlo podremos ir aumentándola hasta convertirlo en algo realmene difícil de destruir.
Otros componentes de Screeps
En esta sección voy a incluir otras cosas que están presentes en Screeps pero que no entran en ninguna de las categorías anteriores.

  • Flags: La primera cosa que quiero mencionar son las banderas. En Screeps, tenemos la posibilidad de poner banderas allá donde queramos, hasta un máximo de 10,000. Las banderas permiten marcar un punto concreto y solo son visibles para el jugador que las pone. Existe una variedad de colores disponibles y cada bandera tendrá un color primario y un color secundario, lo que aumenta la cantidad de combinaciones de colores de que disponemos. Ademas, las banderas tienen memoria, al igual que los creeps y a diferencia de las estructuras. Sus usos son casi ilimitados, todo dependerá de tu imaginación.
  • Energy Sources: Son los puntos de los que extraeremos nuestra energía. En las habitaciones neutrales, los energy sources tienen un máximo de 1500 de energía, pero cuando un jugador reclama o reserva el controlador de la habitacion, la cantidad de energía que proporcionan aumenta hasta 3000. Un caso particular son las habitaciones centrales, que tienen un máximo de 4000 de energía. Cada habitación puede tener entre 1 y 2 energy sources (las habitaciones marginales no tienen energy source).
  • Mineral Source: De aquí es de donde extraremos los minerales construyendo sobre ellos un extractor. Cada mineral source proporcionará un mineral diferente y tendrá una densidad de mineral concreta. Una vez vacío, al igual que los energy sources, habrá que esperar un tiempo hasta que su contenido se restablezca.
  • Controller: De esta "estructura" ya hablé anteriormente. Que una habitación tenga un Room Controller es un requisito indispensable para que la podamos convertir en una de nuestras colonias. Utilizando un creep con al menos una parte CLAIM, podremos reclamar el room controller lo que nos dará la "propiedad" de la habitación (si el controller es neutral, con una parte CLAIM será suficiente y solo tardaremos un tick en hacerlo nuestro). Si por el contrario queremos utilizar esa habitación únicamente para extraer energía y llevarla a una de nuestras colonias, podemos Reservar el controlador en lugar de Reclamarlo. Para ello también necesitaremos un creep con al menos una parte CLAIM. Al reservar el controlador aumentaremos la duración de la reserva en 1 por cada parte CLAIM que tenga el creep (por cada tick), pero hay que tener en cuenta que el tiempo de reserva también disminuye a razón de 1 por tick, por lo que si nuestro creep solo tiene una parte CLAIM por mucho rato que lo tengamos reservando el controller, nunca lo vamos a reservar para más de 1 tick. Sin embargo, si usamos un creep que tenga 2 partes CLAIM, conseguiremos que cada tick que pase la duración de la reserva aumente en 1, hasta un máximo de 5000 ticks.
    Si lo que hemos decidido hacer es reclamarlo, obtendremos como decíamos la propiedad de la habitación y el controller pasará a tener nivel 1. A base de inyectar energía en el controlador con uno o más creeps con una o más partes WORK iremos subiendo el nivel del controller, desbloqueando así nuevas estructuras en cada nivel.
Recursos Externos
La comunidad de Screeps es grande, muy grande. Y por la naturaleza misma del juego, muchos de los jugadores son verdaderos sabios (no solo son frikis, sino que muchos de ellos son además excelentes programadores).

En la mayoría de juegos PvP de hoy en día, y esto no es más que una opinión personal y subjetiva, existe una gran competitividad y el perfil medio del jugador es, en ocasiones, bastante desagradable. En Screeps, sin embargo y pese a que tod@s somos "enemigos", se respira un ambiente bastante fraternal donde los jugadores más experimentados suelen estar siempre ahí para ayudar a los novatos con sus dudas, estrategias, etc...

Los dos recursos externos que más vamos a utilizar en Screeps son su API[docs.screeps.com] y su foro[screeps.com], aunque otros foros como StackOverflow[stackoverflow.com] también nos pueden proporcionar información muy útil para el juego en un momento dado.

En los documentos de Screeps[docs.screeps.com], donde está incluida la API[docs.screeps.com] encontraremos la descripción del juego y estarán explicados todos los aspectos de este (mucho mejor de lo que lo he hecho yo y más a fondo, pero en inglés).

Screeps también nos ofrece la posibilidad de montar nuestro propio servidor local, bien sea para hacer pruebas de código, para jugar con amig@s, o simplemente porque preferimos jugar así y estar más tranquil@s. Para ello, podremos usar el propio cliente del juego, que incluye un servidor local (que no va demasiado bien) o lo que todo el mundo os va a recomendar: Montar nuestro propio servidor local sobre Ubuntu usando MongoDB y Redis.[docs.screeps.com]
En Git Hub y otras webs análogas existen multitud de herramientas desarrolladas por los usuarios de Screeps que también podremos utilizar.

Dejo a continuación otros enlaces externos que pueden seros de utilidad:

Screeps World[screepsworld.com]: Aqui encontraréis mucha información útil sobre Screeps como por ejemplo:
  • Cómo hacer una máquina de estados en Screeps
  • Cómo configurar Grafana[grafana.com]
  • Cómo usar el Market de Screeps
  • Formas de diseñar colonias eficientes
  • ...

Emojis[www.emojicopy.com]: Aquí podréis encontrar multitud de emojis con los que vuestros creeps podrán comunicarse con vosotros.

Lodash[lodash.com]: Esta librería os facilitará mucho la vida al programar en Screeps. Está incluida y lista para usar en el juego sin que tengáis que hacer nada.

Slack[screeps.slack.com]: Slack es un chat que podréis utilizar para preguntar dudas a otros jugadores directamente, sin necesidad de pasar por el foro y esperar respuesta. Además también podréis encontrar alianzas.

Por último, os dejo el enlace a mi propio repositorio de Screeps en Git Hub en el que están los archivos de mi código. Antes de que los miréis deciros dos cosas: La primera es que como programador soy más novato que muchos de vosotros y por otro lado deciros que no debéis abrumaros por la cantidad de archivos que componen mi repositorio (o cualquier otro), ya que este va creciendo con el tiempo. Empiezas creando unos pocos archivos y a medida que avanzas en el juego, desbloqueas estructuras, creas nuevos roles para tus bichos, etc...va creciendo casi sin darte cuenta.

https://github.com/TrueCalfa/screeps
Y para terminar...
Por último quería expresar aquí mis pensamientos finales.

Primero decir que espero que esta guía pueda ser de utilidad para muchos de vosotros que, o bien ya tenéis el juego pero no sabéis por dónde empezar o bien estáis pensando en comprarlo pero no sabéis muy bien de qué va.

Si ya eres un jugador experimentado, o al menos iniciado, es muy probable que la guía te parezca insuficiente y tengas más cosas que aportar, en cuyo caso te animo a que añadas a esta guía el contenido que te parezca oportuno. Para ello ponte en contacto conmigo y te hago colaborador.

Un saludo a tod@s!!
4 Comments
mjamett Jul 9, 2023 @ 6:16pm 
Muchas gracias por este recurso!!!
Pinkfloydd8 Apr 23, 2021 @ 7:14am 
genio!
De los poquísimos recursos en español que hay
Matarife Nov 19, 2019 @ 10:39am 
Muchas gracias por este tutorial
Hikari Kiba Dec 19, 2018 @ 7:51pm 
Se agradece el esfuerzo de trasmitir el conocimiento :)
Yo estoy viendo retomarlo y armar mis Screeps con Typescript. Pero requiere mucho tiempo jeje
Suerte con lo tuyo