Inject custom C++ code into GameMaker Studio 2 YYC builds

Overview

YYC Boost

Inject custom C++ code into GameMaker Studio 2 YYC builds!

License

WARNING: This tool is currently in an early stage of development and it is not guaranteed to work in all projects/cases! Use at your own risk! Currently only the Windows YYC target is supported!

Table of Contents

Features

Multithreading

Run functions in a separate thread!

yyc_run_in_thread(function () {
    while (true)
    {
        show_debug_message("This does not block the main thread!");
    }
});

Task system

Utilize multithreading for parallel tasks! Includes fallback for VM.

var _sleepTask = function (_arg) {
    var _ms = _arg[0];
    var _message = _arg[1];
    var _t = current_time;
    while (current_time - _t < _ms) {}
    show_debug_message(_message);
};

// Create standalone tasks:
new YYC_Task(_sleepTask, [1000, "Standalone task done!"]).Run();

// Or groups of tasks:
new YYC_GroupTask([
    new YYC_Task(_sleepTask, [1000, "Task 1 done!"]),
    new YYC_Task(_sleepTask, [2000, "Task 2 done!"]),
    new YYC_Task(_sleepTask, [3000, "Task 3 done!"]),
], _sleepTask, [1000, "Group 1 done!"]).Run();

C++ types of local variables

Define C++ type of a var to save memory and increase performance!

#macro COUNT 10000
var _t;

_t = get_timer();
for (var i = 0; i < COUNT; ++i) {}
show_debug_message(get_timer() - _t);

// This loop runs faster compared to when a regular var is used
_t = get_timer();
for (var j/*:int*/= 0; j < COUNT; ++j) {}
show_debug_message(get_timer() - _t);

C++ code injection

Replace function with a custom C++ code!

/// @desc Returns 1 when YYC Boost is used, otherwise 0.
function is_cpp()
{
    /*cpp
    _result = 1;
    return _result;
    */
    return 0;
}

Documentation

Online documentation for the latest release of YYC Boost is available here.

Building from source code

Requires Python 3!

git clone https://github.com/kraifpatrik/YYCBoost
cd .\YYCBoost\YYCBoost_CLI\
python.exe -m venv env
.\env\Scripts\activate
pip.exe install -r requirements.txt
python.exe setup.py

This will create a directory YYCBoost\YYCBoost_CLI\dist with yycboost.exe.

Support the project

If you like YYC Boost and you would like to support its further development, you can donate to paypal.me/kraifpatrik or purchase the asset from the Marketplace.

Links

You might also like...
Game code for Evennia servers designed for use with ALPACASclient.
Game code for Evennia servers designed for use with ALPACASclient.

ALPACASgame Game code for Evennia servers designed for use with ALPACASclient. This code is meant to be a type of "compatability layer" between the AL

Simple implementation of the classic Snake Game in under 100 lines of code
Simple implementation of the classic Snake Game in under 100 lines of code

Snake_Game Simple python implementation of the classic Snake Game in under 100 lines of code. Printscreen of the game: Imported Libraries: random; pyg

Game of life, with python code.

Game of Life The Game of Life, also known simply as Life, is a cellular automaton. It is a zero-player game, meaning that its evolution is determined

Découvrez CubeCraft Launcher, une application uniquement codé en Python et en Batch
Découvrez CubeCraft Launcher, une application uniquement codé en Python et en Batch

Découvrez CubeCraft Launcher, une application uniquement codé en Python et en Batch. Grâce à son interface graphique facile et intuitive, vous pouvez vous retrouver facilement.

A hangman game that I created. Thanks to Data Flair for giving me the code!

Hangman A hangman game that I created. Thanks to Data Flair for giving me the code! Run python3 hangman.py in a terminal if you have Python 3. Please

The repository that hosts the code that teaches a reinforcement learning - based bot to play 2048

The repository that hosts the code that teaches a reinforcement learning - based bot (based on policy gradients method) to play 2048

General Crossy Road Game using Python code

Python-Game General Crossy Road Game using Python code Using code such as function and while using turtle, I was able to recreate a beginner version o

Python code that gives the fastest path from point a to point b of a chess horse

PERSONAL-PROJECTS CARLOS MAGALLANES-ARANDA'S PERSONAL PROJECTS kchess.py is the code. its input is the start and the end. EXMPLE - a1 d5 its output is

Code for an arcade pop-a-shot style basketball game on Raspberry Pi

Basketball-Game Code for an arcade pop-a-shot style basketball game on Raspberry Pi, made over the course of winter break 2022. How To Run: Running th

Comments
  • Options to support improved automation

    Options to support improved automation

    As commissioned by Johnathan Fowler, I have added several features to the command-line tool to support usage of YYCBoost in a completely automatic fashion via GameMaker build hook scripts. I present the results of my work so far, so that you may incorporate it into the main project if you see fit to do so.

    These changes are motivated by the fact that, as YYCBoost worked before these changes, it was occasionally necessary to manually clean and recompile the project and restart YYCBoost. I have not fixed the root cause of these errors, but instead implemented support for a workaround wherein, upon each build of a project:

    1. The project build cache is cleared,
    2. The project is built once without any YYCBoost extension, and
    3. The project is built a second time with YYCBoost running in the background to produce the final result.

    We found step 2 to be necessary because, on some machines it was tested on, there was a race between the compiler and YYCBoost in modifying the project files that regularly resulted in build errors or the project being built without extensions.

    The exact changes introduced in this pull request are:

    • Added new command-line arguments /help, /background, /close, /auto, -buildpath, -pidfile, -timeout, -logfile, and -threads, as described in the new /help output:
      Usage: yycboost.exe [/?] [/b] [/c] [/a] [-bp=PATH] [-pf[=PATH]] [-t=SECONDS] [-j=COUNT] [-l=PATH] [CPP_DIR]
      
      Options:
        /?, /help             Show information about command-line arguments.
        /b, /background       Create a background process that is detached from the current terminal (if any) and allows the
                              calling process to continue immediately instead of blocking until finished. Implies "/auto".
        /c, /close            Signal an existing instance of YYCBoost to exit, by deleting the file given by the "-pidfile"
                              option, or, if that option is absent, the default PID file location. Do not perform any code
                              injection and immediately exit after this.
        /a, /auto             Use default values rather than prompting the user for any input.
        -bp, -buildpath=PATH
                              The path of the "build.bff" file corresponding to the target. If not specified, the user is
                              prompted to enter a path on the terminal, unless "/auto" is set, in which case the default
                              value of "%LocalAppData%\GameMakerStudio2\GMS2TEMP\build.bff" is used.
        -pf, -pidfile[=PATH]
                              Creates a text file at "PATH" containing the main process ID of YYCBoost and watches it for
                              changes: if the file is deleted, moved, or its contents changed, this acts as a termination
                              signal and causes the present instance to exit; otherwise, YYCboost deletes the PID file when
                              exiting normally. If "PATH" exists, YYCBoost overwrites it. If "-pidfile" is given without a
                              "PATH" argument, then it defaults to "yycboost.pid" in the current user's home directory (on
                              Windows: %UserProfile%).
        -t, -timeout=SECONDS
                              Close after this many seconds, or stay open until explicitly closed if SECONDS is 0. If not
                              specified, defaults to 300 if "/background" is set, or otherwise to 0.
        -j, -threads=COUNT
                              The number of CPU cores to use. If not specified, defaults to the total number of cores on the
                              system.
        -l, -logfile=PATH
                              Print status messages to PATH rather than to stdout/err. This is useful for debugging while
                              the "/background" option is active.
      
      Positional arguments:
        CPP_DIR               Load cache directory from command line (no injection, only cleanup, handy for GMS1.4) [Note:
                              this option doesn't appear to do anything useful; it has been kept for backward compatibility,
                              but may be removed in the future. The "cache directory" referred to here is the project-
                              specific directory for .gml.cpp files, for example "%LocalAppData%\GameMakerStudio2\Cache\GMS2
                              CACHE\YYCBoost_2083F10D\YYCBoost\Default\Scripts\llvm-win"; if this argument is present, then
                              the "build.bff" file is not loaded and its path need not be given.]
      
    • Added build hook scripts pre_run_step.bat, post_run_step.bat, and pre_package_step.bat under the example Game Maker project that automatically run YYCBoost when the project is built, using the workflow described above.

    All changes are backward compatible, so any previous usage of the command-line tool should continue to work as it did before. I have not updated the documentation under docs_src to reflect any of these changes, so, if these changes are accepted, that might be called for in the future.

    While modifying the Python code for the YYCBoost utility, I found some parts of the code that didn't make sense to me and appeared to possibly be dead code, but I left them as they were so as to avoid making unnecessary changes, and only annotated them with # TODO: lines to suggest reviewing them in the future.

    opened by joodicator 0
Releases(0.1.1)
Projeto Flappy Bird temática doom, projeto python e pygame

Doom-Bird Tecnologias usadas Requisitos para inicializar o jogo: Python faça o download em: https://www.python.org/downloads/ Após instalar o Python d

João Guilherme 1 Dec 08, 2021
A Gomoku game GUI using pygame where the user can choose to play against another player or an AI using minimax with alpha-beta pruning

Gomoku A GUI based Gomoku game using pygame where the user can choose to play against another player or an AI using minimax with alpha-beta pruning. R

Mingyu Liu 1 Oct 30, 2021
Box - a world simulator written in python with pygame

Box is a world simulator written in python with pygame. Features A world generation system A world editor Simulates creatures called boxlanders. You c

1up Community 3 Nov 14, 2022
A python3 project for generating WorldEdit shematics for the MineClone2 game for Minetest from images.

MineClone2 MapArt This is a python3 project you can use with the MineClone2 game for Minetest. This project take an image and output a WorldEdit shema

3 Jan 06, 2023
Create a Hangman Game using Python and all techniques of Python.

Hangman Game Created by Fernando Callasaca Game rules: Choose a word and if you guess it will appear completed. In case it is not the word then the ma

Fernando Callasaca 3 Nov 01, 2021
Termordle - a terminal based wordle clone in python

Termordle - a terminal based wordle clone in python

2 Feb 08, 2022
Wordle - Wordle Clone With Python

Wordle Clone Python This is a cli clone of the famous wordle game developed by J

Shivam Pandya 20 Jul 07, 2022
Automates cubemap generation for Source Engine games.

AutoCube Automates cubemap generation for Source Engine games during compile-time. Download: see the release page Installation Using with CompilePal A

5 Feb 18, 2022
PyUnity is a Python implementation of the Unity Engine, written in C++

PyUnity is a Python implementation of the Unity Engine, written in C++. This is just a fun project and many features have been taken out to make it as easy as possible to create a scene and run it.

PyUnity 206 Jan 03, 2023
Brawl Stars open source server for v20

Laser Scratch Brawl Stars open source server for v20! Implemented Features Battle End Leaderboard Player Profile Lobby Info Menu Notifications Club Wa

TheIke 17 Nov 19, 2022
This repository contains algorithm and solver for the game WORDLE

Wordle-Cracker This repository contains algorithm and solver for the game WORDLE How to use Run the program: python main.py Type in the guess word in

YiHsin Chen 3 May 14, 2022
An interactive pygame implementation of Conway's Game of Life

Game of Life An interactive pygame implementation of Conway's Game of Life Installation Clone the repo and navigate into it. git clone https://github.

Ethan 1 Dec 05, 2021
Rock Paper Scissors Games with Python

This is a classic Rock, Paper, Scissors game with some ASCII aesthetics. After the welcome message, the game asks you to choose between the three choices. Then it let the computer choose its choice.

p.katekomol 1 Jan 24, 2022
A Pygame game made in 48 hours

Flappuccino Flappuccino is a game created in 48 hours for the PyGame Community New Years Jam using Python with Pygame. Screenshots Background Informat

PolyMars 242 Jan 02, 2023
A two-player strategy game played on a rectangular grid made up of smaller square cells of chocolate 🍫 or cookies 🍪

Chomp Game ©️ Chomp is a two-player strategy game played on a rectangular grid made up of smaller square cells of chocolate 🍫 or cookies 🍪 , which c

Farivar Tabatabaei 2 Feb 02, 2022
A stat tracker for the bedwars hypixel game in python

A hypixel bedwars stat tracker. Features Get stats in your current lobby Get stats in a guild Installation & Configuration git clone https://github.co

Le_Grand_Mannitout 3 Dec 25, 2021
中文版本的ai地牢,一个使用GPT-2的文字冒险游戏,使用清源CPM预训练模型finetune而成。

中文版本的ai地牢,一个使用GPT-2的文字冒险游戏,使用清源CPM预训练模型finetune而成。

icybee 178 Jan 03, 2023
A Game of Life implementation in Python

Game of Life in Python (Golipy) Golipy is a simulator of John H. Conway's Game of Life, developed in Python based on the Pygame library. This is a toy

Alber 2 Dec 10, 2021
Jogo da velha com interface gráfica desenvolvida em Python utilizando pygame e IA(Inteligência Artificial)

Jogo-da-Velha Sobre o projeto Jogo da velha com interface gráfica desenvolvida em Python utilizando pygame e IA(Inteligência Artificial) Layout tela d

Matheus Maia Alvarez 6 Apr 09, 2022
This project is an exciting fun game for beginners to build up

This project is an exciting fun game for beginners to build up. The program generates a random number from 1 to 10, or 1 to 100 any range that is specified and the user must guess the number after a

PyLaboratory 0 Feb 07, 2022