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)
A rhythm-based game that automatically generates obstacles based on a song's features.

DISCLAIMER: This is my first coding project, created in December 2019. The game may not be optimized, and looking back on it, there are a lot of chang

Kenneth Huang 1 Dec 27, 2021
Among AIs is a (prototype of) PC Game we developed as part of the Smart Applications course @ University of Pisa.

Among AIs is a PC Game we developed as part of the Smart Applications course @ Department of Computer Science of University of Pisa, under t

Gabriele Pisciotta 5 Dec 05, 2021
A very bad wordle solver to help me solve the daily wordle

Wordle Solver A very bad wordle solver to help me solve the daily wordle on https://www.powerlanguage.co.uk/wordle/ TODO list take into account letter

Logan Anderson 4 Feb 03, 2022
Mandaw 2 Mar 01, 2022
This is a simple tic tac toe game that runs in the command line.

Tic Tac Toe Game This is a simple tic tac toe game that runs in the command line. Game Description: The game is made up of a square grid with 9 portio

Josias Aurel 2 Nov 12, 2022
Editing tool (read/write) .sc files (*_tes.sc , *.sc, *_dl.sc ) from Supercell games (Brawl Stars, Clash Royale, Clash of Clans and others).

SupercellSWF Version 0.1.0.2 About Editing tool (read/write) .sc files (*_tes.sc , *.sc, *_dl.sc ) from Supercell games (Brawl Stars, Clash Royale, Cl

Fred31 11 Jun 23, 2022
Wordle-helper: python script to help solving wordle game

wordle-helper This is a python script to help solving wordle game 5-letter-word-

MD Nur Ahmed 2 Feb 08, 2022
Wordlebot - A simple Wordle puzzle solver in python

WordleBot A simple search-based puzzle solver for Wordle, built in Python. Inspi

Rob Kimball 2 Jan 27, 2022
A Python tic tac toe game

Tic Tac Toe A Python tic tac toe game To start the game, run python3 main.py First, you have to select the game level. Today, it has three levels In a

Phant 1 Jan 14, 2022
A Pygame application which generates mazes using randomized DFS (Depth-First-Search)

Maze-Generator-with-Randomized-DFS A Pygame application which generates mazes using randomized DFS (Depth-First-Search)-(Iterative implementation). Ra

Aysha sana 2 Feb 08, 2022
Inject custom C++ code into GameMaker Studio 2 YYC builds

YYC Boost Inject custom C++ code into GameMaker Studio 2 YYC builds! WARNING: This tool is currently in an early stage of development and it is not gu

Patrik Kraif 7 Dec 30, 2022
A pygame implementation of John Conway's Game of Life

Game of Life A Pygame Simulation This is a Pygame implementation of the famous Conway's Game of Life. The game features a set of very simple rules: An

1 Jan 06, 2022
🪨 📄 ✂ game in python with recursion

🪨 📄 ✂ Game Rock Paper Scissor game in python with recursion ⚙️ Developer's Guide Things you need to get started with this code:- Download python3 fr

Atul Anand 3 Jul 25, 2022
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

SmashedFrenzy16 0 Dec 24, 2022
Ladder network is a deep learning algorithm that combines supervised and unsupervised learning

This repository contains source code for the experiments in a paper titled Semi-Supervised Learning with Ladder Networks by A Rasmus, H Valpola, M Hon

Curious AI 505 Nov 15, 2022
AI Mario challenges you to clear all stage of Super Mario game.

mario-ai-challenge Challenge AI Mario to clear all stages of Super Mario. GitHub Pages Site Rules Enjoy building AI Mario. Share information. Use Goog

karaage 48 Dec 10, 2022
Overview: copain, your friendly AI framework to learn and play games

Overview: copain, your friendly AI framework to learn and play games Interface fceux with python and run reinforcement learning. Compatibility Current

fcharras 1 Dec 16, 2021
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
Email guesser - Guessing BF email based on emailGuesser by WhiteHatInspector

email_guesser Guessing BF email based on emailGuesser by WhiteHatInspector (http

4 Dec 25, 2022
Console 2D GameEngine {C2DGE} [0.1.0]

Console 2D GameEngine {C2DGE} [0.1.0] By Grosse pastèque#6705 The Project's Goal : This projects was just a challenge so if you have bad reviews, it's

Big watermelon 1 Nov 06, 2021