Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics

Cosmo Myzrail Gorynych

A member registered Jul 03, 2016 · View creator page →

Creator of

Recent community posts

Shift+Tab and Tab work in the current editor as well. Or do you mean beautifiers or such? These are currently absent.

But what is worth, I'm already adding monaco editor to ct.js (: maybe will release a new version with it these weekends.

What do you mean?? 🤔

(2 edits)

Ok, I couldn't get the reactor. Maybe because the game has bugged.

But anyways, let's review the game.

  • Cursor snapping to interactive objects is too strong, and it becomes unusable with a number of objects closely put together. I would instead remove the snapping at all to give the precision to players.
  • There are just a few words in this alpha, which is not enough to be interesting, at least in my opinion.
  • 80% of the game is walking from one location to another. Booooriiiing.
  • You cannot scan the player's character, meaning that
    you can't tie it to any word, and thus "you" and "me" can only be typed manually. This is against the mechanic with "patterns".
  • Some words (plant, home, thanks (?)) cannot be translated in a bot's interface but appear in the speech bubbles, which is counterintuitive and seems wrong as if a player did something wrong. ("Did I need to talk to another person? Is it a wrong plant??") A home does not form a "pattern" but has a word, a plant, a tubed fungus form two of them but have one word.
  • In the contrast, you don't have a word for a "stone", when the game describes it in the way that it seems that it must have been used as a verb (e.g. "to block") and a number of nouns ("stone", "obstacle"). This gives a lot of ambiguity in the early game as a non-connecting puzzle piece. It made me think that a woodcutter needed a stone as a bridge (and I lost it as it sank in a river. I had to restart the game. Then it sank in the textures).
  • You ask for totems and axes but not for parts.
  • WTF a joggler with "You be yes" is ever supposed to mean?
  • "you give me totem ?" doesn't work, "you give totem ?" works, "you give me axe ?" works. I may have written imprecisely but in a real world, all three sentences are valid.

So, to sum up, if you create a game about linguistics, make a game about it. Otherwise it is not a linguistic puzzle. Currently, there are inconsistencies all around, and these are not the ones relevant to the chosen theme.

Other minor things:

  • Prayers slowly step back to the water and start sinking as you make numerous attempts to steal the reactor.
  • The shaman walks in place after uncertain conditions.
  • It is dangerously easy to lose items in water, or by sinking in ground.
  • Two aliens say "give" relative to the stick even when you've already taken and moved it away.

How do I switch the reactor with a totem? I gave the glowing statue to the shaman, but guys in the square wouldn't give me the reactor

Use this.tex = 'SamAnimated'; inside your type's code to apply the created sprite.

This should have been posted earlier, but

ct.js now has a tutorial on how to create a fully-working platformer.

You can't, at least for now, but ct.js surely supports touch controls, including creating on-screen keys with ct.vkeys module.

I filed an issue so the demos will be updated in future.

I've played the old version with an arena, and I'm glad that you decided to continue the game. It has potential, and I think that it can be a commercial success as well.

Please, don't use the proprietary .rar format. No one uses it on Linux or MacOS. Better use .zip, which is a cross-platform one, or 7zip if you want better compression (it is even better than in winrar).

А вот я как раз сегодня писал в дискорде про интерфейс в коте :ь

Твои мысли хорошие, и такой подход хорошо обкатан в 3д индустрии, а именно в Unreal Engine. Для меня там подход — священный грааль. В UE выделенный редактор интерфейса и можно визуально верстать его так, каким он будет в игре. Только я вот думаю хотя бы для начала делать не выделенный, а рассматривать каждый Макет как отдельную комнату, потом делал ct.rooms.spawn('UI'). Так я делал в Among the Wolves, и получилось дёшево и сердито — в редакторе визуально делаю интерфейс, и вроде как и особо ничего сверху разрабатывать не пришлось. В последнем макете редактора комнат это называется "связанные комнаты". АПИ примерно как у тебя и будет, думаю.
Крч поживём — увидим; там много всего завязано друг на друге, многие оптимальные решения придётся искать опытным путём.

Касательно паузы, можно и сейчас всё паузить и продолжать работать с интерфейсом: туториал в доках

Seems like a memory leak, but I haven't investigated it yet.


(1 edit)

Could you provide screenshots, steps-to-reproduce, error messages (if such), and estimates of how many cards and labels there are in your project? I will need it all to reproduce and fix the bug.

And what's your use case for such amount?  A list of labels that don't fit into a screen is something exotic for me.

(1 edit)
I'll make sure they go to a bright future, full of happy developers and good games *:・゚✧

Может быть 👀 Поживём — увидим, но я настроен оптимистично!

That's a good thought! I added an issue and will come to this task soon.

Just in case, docs are open for contributions on GitHub. If you have time, you can add helpful tips or tutorials by yourself — it's not that hard, from the technical point of view.

Да, нужно использовать Pixi.js. Обычно для неизменных фигур пишется в Create комнаты или объекта.

Вот пример всяких полигонов, простых фигур. Первые две строки не нужны (это и так делает кт), а вместо app.stage пиши this. Можно так прикрепить графику к комнате, если код в неё класть, либо к копии, если писать в типе. Слой, соответственно, в последнем случае будет как у копии. Если прикреплять к комнате, то можно написать graphics.depth = 100; — графика тогда будет на 100-м слое.

Полная дока по методам рисования PIXI здесь.

А вообще, в любой непонятной ситуации используй текстурки =)

Создание текста, хелсбаров, кнопок по 9-patch бегло описано в гайде по миграции с нулевой версии.

Скоро будет 👍 Вещь нужная, но и других дел тоже хватает. Примерное время выполнения сказать не могу. В бэклоге это #75.

ATM ct.js is based on Chomium 70. It fully supports ES6, with a decent support for ES2016+.

Create an "include" folder inside your project's one so they get copied to the exported project, and use the available js APIs or libraries for reading from it. I recommend the standard fetch API (e.g. see this particular StackOverflow answer).

Reading and writing files is out of ct.js' scope, because this functionality exists in any js environment, in one way or another.

I admit that sometimes the code completion is just out of place. It also doesn't provide code completion for enabled mods (e.g. this.ctype and all the methods), though it is to be solved soon 👌

I've just dug into our current code editor and enabled local code completions (meaning that it will propose the names you used in the same document). I also added to the built-in autocompletion list (please let me know if you find other lost parameters). You can build a copy of ct.js by yourself or wait for the next release.

Для записи видео и не только рекомендую использовать OBS.

Фуллскрин, видать, в дебаггере включается от дочернего окна. На лине такого поведения вообще нет, но сделал пару фиксов и проверю сегодня-завтра их на винде.

3D-примитивы в Pixi отсутствуют и оттого в коте не появится. Вообще, плохая практика — делать из кота клизму.

Документация о камере. Несколько видов/сплитскрин в ближайшее время не планируется.

Кт с файлами не работает, это всё внешние API. Поэтому:

  • для создания сохранений нужно использовать локальное хранилище (дока в коте).
  • для десктопных приложений можно использовать методы node.js. В обычном браузере такие не работают.
  • для статичных файлов нужно использовать fetch и, например, складывать эти файлы в папку include в проекте. Такое активно использовалось в Shifted, например, чтобы загружать фотографии.

Такс, по поводу пункта третьего, у тебя какая ось? О_о а лучше, скинь видосик, ибо дебаггер никуда лезть в фуллскрин не должен сам.

6) можно, скопируй папку cache с одного кота в другого.

8) там не 3д модельки, наверное, а просто плоские спрайты в 3д. Хотя мне самому эту тему поизучать надо...

9) Можно, но нужно очень заморочиться. Библиотеки можно вставлять через настройки -> скрипты, а вот дальше никаких готовых указаний по внедрению прямо в кт нет. Как-то так.

I think that it would be better to improve the current editor; adding bridges to vscode or such is a dead matter, being workflow-unfriendly and a way to crappy half-finished frameworks.

What issues do you face while using the default ct.js editor?  What is missing? What could be better? When do you feel that you need VSCode/Atom? This may be limited not to code editor but to ct.js in general.

1. Зарегал как #103, но, т.к. сейчас полно других дел, решится проблема не скоро.

2. А мне удобно :ь тут, я думаю, проблема вкусов и привычки ¯\_(ツ)_/¯

3. Такс, а как ты в фулскрин заходишь? Если через ct.fullscreen, то подразумевается, что разраб сам должен сделать выход из фуллскрина, хотя хоткей в дебаггере в таком случае тоже будет полезен.

4. Аналогично  первому, #104

5.  СКОРО. Пока что экспериментирую с этим в другом проекте. Есть задача #74.

6. Ну тут было выбрано меньшее из зол. Для упаковки игровых проектов под все платформы нужно более 500 мбайт для дебаг-версий, ~420 мбайт для релиз-версий. Скачивать их нужно отдельно, итого + гиг загрузки. Когда сам котэ весит до 130 мбайт для каждой платформы, добавлять гиг зависимостей в релиз — оверкил. Мб человек выпускает только браузерные игры и ему эти пакеты вообще не нужны. Приятнее качать, в любом случае, только 130 мбайт.

Чтобы было всё готовое, достаточно один раз успешно запаковать любую игру под все платформы, для дебаг-версии игр и релизной. Тогда все эти пакеты закэшируются и будут храниться локально, а следующие упаковки будут проходить молниеносно быстро для всех проектов.

7. #43. Эта задача решится раньше других.

8. В дев-ветке кота уже есть поддержка Pixi v5 (графического движка), и в нём поддержка 3д встроенная. После следующего релиза можно будет самостоятельно допилить напильником и сделать 2д в 3д, а далее планируются тулсы для поддержки 2д в 3д из коробки. Но в любом случае, дальше стилистики Don't Starve — проекции спрайтов в 3д-мире — ct.js не пойдёт. Pixi, думаю, тоже. Для рили 3д игр рекомендую Unity  для мелких игр и Unreal Engine для относительно серьёзных проектов.

9. Для компиляции игр в .exe и используется упаковка для ПК. Если нужно прям один файлик, можно воспользоваться Enigma Virtual Box.


The roadmap is now at our dev board at GitHub.


Привет! Рад, что тебе котэ привносит столько радости (:

Сам кот давным-давно создавался как альтернатива YoYo Game Maker; мотивом создать его была ценовая политика и ряд ограничений в их двиге, поэтому да, между ними много общего.

А вот автодополнение ещё пилить и пилить — оно ещё не знает про существование функций в модулях.

That's actually pretty good for a "useless simulation"!

+1 for more levels/raising difficulties.

A marvellous experience! Though I ragequitted after failing the final boss :\ It is still cool tho. Diamond is da best.

I also think that the shop/lab screen is broken. When I hit V (exit the shop), it asks "Buy item", in the same manner as C (actually buy an item), and I exited a shop full of spheres four times or so, missing really viable powerups.

Golf with hedgehogs! neat

Broken :\ The character shrinks to a point after first fire, making them practically invisible and useless.

Translations for Cosmic Everyday can be created with my tool JSONBabel as well. It requires no installation and runs in your browser: (open)

The workflow is pretty similar. Open JsonBabel, and import "En - English (English).json" file from "Cosmic Everyday/data/i18n" folder. Next, create a new file and call it as "{Language Code} - {Native name} ({English Name}).json", e.g. "Pt-BR - Portugues Brasileiro (Brasilian Portuguese).json".

The process of translation is similar to BabelEdit or other translation platforms. I hope you will figure out how to work with it (:

When you are finished, either export the whole project and put your translation from the downloaded archive to "Cosmic Everyday/data/i18n" folder, or export the file separately from the right side panel and put it in the same panel. On the next launch, Cosmic Everyday will discover your translation file and you will be able to use it. Don't forget to post your translation for others at Discord!

Whoopsie, someone didn't subscribe to forum updates.

In v1, you can delete notebooks at their settings, in the bottom of the modal.

In v0, you could delete notebooks at the home screen, though jumbles are undeleteble, yep.


var degrees = ct.u.pointDirection(this.x, this.y, player);

It should be:

var degrees = ct.u.pointDirection(this.x, this.y, player.x, player.u);


var player = ct.types.list["Player"][0];
It should go before

you use player variable for homing code.


if (player) {
    return player.x, player.y;
This does nothing and is not needed (:


It depends on your graphics and animation style whether or not you need skeletal animation, but disposable magic doesn't use such. It has a separate set of sprites with staffs and hands drawn on them.

For v1, you will need to create a simple sprite and attach it to your character:

this.wand = new PIXI.Sprite(ct.res.getTexture("MagicWand", 0)); // here we create a Sprite with a specified texture
this.addChild(this.wand); // here we attach it to our copy
this.wand.y = -20; //use this to align it properly
// Then, to actually rotate your wand:
var degrees = ct.u.pdn(this.x, this.y, ct.mouse.x, ct.mouse.y);
this.wand.rotation = degrees * Math.PI / -180; // PIXI uses radians when ct.js uses degrees, so here is how to convert one into another as well

Edit texture's anchor in ct.js "Textures" tab so it aligns properly while rotating. To spawn projectiles at the tip of your wand, you will need a bit of trigonometry. ct.u.ldx and ct.u.ldy will project a given length to a given direction, so you will use something like that:

var fireball = ct.types.copy('Fireball', this.x + ct.u.ldx(64, degree), this.y + ct.u.ldy(64, degree));

Those errors are not quite related to Cosmic Everyday itself but to Chromium. Seems that Chromium catches and resolves such errors but still logs them to stderr. I have much more warnings and errors on my laptop 😅

I'm glad that the button solved your issue ^-^

The solution depends on your exact use case. Considering you are not working with homing asteroids, you probably want to get info about collisions:

var collided =, this.x, this.y, 'Player');
if (collided) {
    console.log(collided.x, collided.y);

But if you do need to get info about "Player" anytime, anywhere, then use ct.types.list:

var player = ct.types.list["Player"][0]; // assuming you have just one player pawn
if (player) {
    console.log(player.x, player.y);

And for multiple copies:

var players = ct.types.list["Player"]; // assuming you have numerous pawns
for (const player of players) {     console.log(player.x, player.y); }

Try going to settings — rediscover lost notebooks.

Ну что ж так сразу "слишком старая версия", пятый пикси вышел в этом месяце — руки ещё не дошли всё обновить :D Так да, про все изменения с 4й до 5й версии пикси в курсе.

Те же самые комьюнити-фильтры можно достать в гитхабе и для четвёртой версии. Вот дерево от январского релиза, например.

(1 edit)

Привет :) Рад, что тебе нравится двиг!

Я пока лично не занимался фильтрами и шейдерами в кт, но такой функционал есть в Pixi.js — графическом движке, на котором крутится кт. Поэтому в самом кт всё реализуемо тоже. Есть ряд готовых фильтров:

Блюр применяется довольно просто:

var blurFilter = new PIXI.filters.BlurFilter();
blurFilter.blur = 10;
this.filters = [blurFilter];

Похожим образом настраивается шум. Антиалясинг не требует настройки вообще, а вот смещению и альфа-маске понадобится текстурка. Текстурки можно получить с помощью ct.res.getTexture:

var displacement = new PIXI.Sprite(ct.res.getTexture('BG_Sand', 0));
var displacementFilter = new PIXI.filters.DisplacementFilter(displacement);
displacementFilter.padding = 10;
displacementFilter.scale.x = 30;
displacementFilter.scale.y = 30;
this.filters = [displacementFilter];

Тут важно при изменении списка шейдеров именно переназначать список фильтров у копий и не использовать методы массивов push и ushift — иначе не обновится в игре. Если нужно обновить существующий фильтр, то нужно менять его параметры (тут напр. blur).

Для создания своих же шейдеров понадобится владение WebGL. Если оно есть, то вот пример, как применить эти шейдеры. А если нет, то вебгл и написание шейдеров покруче простого колор грейдинга — сложная, продвинутая технарская тема по обработке изображений. Туториалы по вебгл в инете в изобилии, к счастью.

The second challenge map can can be easily passed if you focus on the exit, so that you can jump into the projected exit in the bottom-left corner.

Otherwise, impressive job!