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)
This is a good project to train your logic game with python language

JO-KEN-PÔ!!! | Description | basic. I make this game only to train. This is a good project to train your logic game with python language. This game is

Elianderson Silva 1 Jan 24, 2022
Multiple hacks that breaks the game

Blooket-Hack All of the cheats are based on a game mode.

glizzz_y 484 Feb 25, 2022
A Python based program that displays Your Minecraft Server's Status Infos.

Minecraft-server-Status This (very) small python script allows you to view any Minecraft server's status Information Usage Download the file, install

Jonas_Jones 2 Oct 05, 2022
游戏中按TAB键查看所有玩家分数的小程序

DDNet-show-points-in-game DDRaceNetwork 游戏中按TAB键查看所有玩家分数的小程序

3 Oct 13, 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
Quantum version of the game Tic Tac Toe.

QTicTacToe Quantum version of the game Tic Tac Toe. This game was inspired by the game at this site. Installation The game requires the qiskit python

1 Jan 05, 2022
Python desktop application to create, distribute, discover, and run codegames

Python desktop application to create, distribute, discover, and run codegames

2 Nov 16, 2021
A Simple Scissor Paper Rock Game On Python Using Pygame.

Scissor Paper Stone Game Using Pygame This is a simple GUI based game made on pygame python. Installation Run code on your machine: git clone https:

Dipin Adhikari 0 Mar 21, 2022
A python game engine.

PursuedPyBear, also known as ppb, exists to be an educational resource. Most obviously used to teach computer science, it can be a useful tool for any topic that a simulation can be helpful.

PPB 235 Jan 08, 2023
Input-based tic tac toe game made in only python.

Tic Tac Toe Tic Tac Toe is a game in which two players seek in alternate turns to complete a row, a column, or a diagonal with either three O's or thr

Ayza 5 Jun 26, 2022
WORDLE Helper and Solver

WORDLE Helper and Solver There is a pupular game around WORDLE The game could be hard for non-English speaking people so I started to think of a helpe

1 Jan 24, 2022
A launcher to launch games from Riot Games under Linux

rito-launcher A launcher to launch games from Riot Games under Linux Requirements: Python 3, with the following pip plugins: 'configparser, pathlib, w

6 Mar 07, 2022
A simple log-frequency helper for solving Wordle puzzles

A Simple Helper for Wordle Basic Usage Clone the repo and run python play.py Select a word from the list, or type your own choice of word Type the sam

Christian Casey 2 Feb 14, 2022
Chess game for 2 players with UI

2-D Chess for 2 players Overview This is a simple 2D Chess game for 2 players using pygame library. Requirements To be able to run this game, you must

7 Apr 06, 2022
Frets on Fire X: a fork of Frets on Fire with many added features and capabilities

Frets on Fire X - FoFiX This is Frets on Fire X, a highly customizable rhythm game supporting many modes of guitar, bass, drum, and vocal gameplay for

FoFiX 377 Jan 02, 2023
2DMC is an abrrieviation for 2 Dimensional Minecraft.

2DMC 2DMC is an abrrieviation for 2 Dimensional Minecraft. This idea is originally created and implemented by Griffpatch on Scratch. This is a persona

DaNub 5 Nov 06, 2022
An single python server emulator of MMORPG game WindSlayer also known as WS1.

PySlayer An single python server emulator of MMORPG game WindSlayer also known as WS1. Requirements Python = 3.7 Old windslayer client (Korea Yahoo!

mirusu400 29 Dec 19, 2022
Open-source project written in the ursina engine, simulating the popular game Minecraft.

Voxelcraft is an open-source project written in the ursina engine, simulating the popular game Minecraft.

Calinescu Mihai 21 Oct 06, 2022
XO game with server, client and visualizer for AI bots.

XO game with server, client and visualizer for AI bots.

Ali 4 Jul 14, 2022
Guess Your Card - A Multiplayer Python Game

Guess Your Card - A Multiplayer Python Game This is a guessing card game having two levels - Developed in Python and can be played between two to four

Hammad Ahmed ~ 1 Oct 20, 2021