#gamedev #parser #language #interpreter #embedded


A small language to add in games for easy modding

7 releases (stable)

1.4.0 Jun 23, 2021
1.3.2 Jun 20, 2021
1.2.0 May 26, 2021
0.1.0 May 15, 2021

#566 in Embedded development

Download history 2/week @ 2022-12-06 7/week @ 2022-12-13 1/week @ 2022-12-20 1/week @ 2023-01-03 9/week @ 2023-01-17 8/week @ 2023-01-24 7/week @ 2023-01-31 16/week @ 2023-02-07 21/week @ 2023-02-14 8/week @ 2023-02-21 14/week @ 2023-02-28

51 downloads per month

MIT license

787 lines


Why ccdb-script?

A light language for rust when you want your game or project to easily be moddable.

ccdb_script is light

as said ccdb_script is made to be light

ccdb_script is easy

ccdb_script is made to be easy to integrate into any given project

How to integrate

// ! note this example uses my other crate openfile 
use ccdb_script;
/* The test ccdb-script 
[(var)test "test"]
fn main(){
    ccdb_script::run(openfile::readFile("test.ccdbs")); // you can also get val from this
    let parse = ccdb_script::parse(openfile::readFile("test.ccdbs")); // if you split it up this way you only need to parse once and then 
    // you can still easily run the script whenever you want to 
    let mut val = ccdb_script::run_parsed(parse);

    // create a custom struct. This is used for custom functions in the script that are linked to rust
    let mut custom = ccdb_script::custom::Custom::new();
    //sample function ALL custom functions need Vec<String> and -> String as their only in and outputs
    fn test(x: Vec<String>) -> String{
    fn test2(x: Vec<String>){
        println!("no output{:#?}",x);
     fn test3(x: &mut ccdb_script::var::Var){
    custom.new_fn(ccdb_script::custom::FnType::Output(test),"test");//with output 
    custom.new_fn(ccdb_script::custom::FnType::Nout(test2),"test2");//without output
    custom.new_fn(ccdb_script::custom::FnType::Var(test3),"test3");//to get access to var values

// add it to the script
    // the output will be R(function name) with no ()
    // if you want custom values when running the script;
    let mut var = ccdb_script::var::Var::new();
    var.set_max_mem(100); // set the max number of bytes the script is allowed to use if you set it to 0 it will be infinite(default)
    ccdb_script::run_parsed_var(parse, &mut var);



[(var)test "test"]
[(print)"Hello, world"]
[(if)test == "test"]
[(edit)test "test2"]

[(print)"new test"]

[(print)"That is true"]

[(print)"dropping test"]
/ drop a variable by using drop

[(if stop)]

[(var)int "0"]
/ use + / - and * like this before the number to do a math operation
[(edit)int +100]
[(custom) arg1 ,< arg2 arg3 ...]
/ split the line using ,<


This language is made to be easily integrated in ccdb
and other projects

No runtime deps