code:
'use strict';
$(document).ready(function() {
    // [ Zero-configuration ] start
    $('#zero-configuration').DataTable();

    // [ HTML5-Export ] start
    $('#key-act-button').DataTable({
        dom: 'Bfrtip',
        buttons: [
            'copyHtml5',
            'excelHtml5',
            'csvHtml5',
            'pdfHtml5'
        ]
    });

    // [ Columns-Reorder ] start
    $('#col-reorder').DataTable({
        colReorder: true
    });

    // [ Fixed-Columns ] start
    $('#fixed-columns-left').DataTable({
        scrollY: "300px",
        scrollX: true,
        scrollCollapse: true,
        paging: false,
        fixedColumns: true,
    });
    $('#fixed-columns-left-right').DataTable({
        scrollY: "300px",
        scrollX: true,
        scrollCollapse: true,
        paging: false,
        fixedColumns: true,
        fixedColumns: {
            leftColumns: 1,
            rightColumns: 1
        }
    });
    $('#fixed-header').DataTable({
        fixedHeader: true
    });

    // [ Scrolling-table ] start
    $('#scrolling-table').DataTable({
        scrollY: 300,
        paging: false,
        keys: true
    });

    // [ Responsive-table ] start
    $('#responsive-table').DataTable({
    });

    $('#responsive-table-model').DataTable({
        responsive: {
            details: {
                display: $.fn.dataTable.Responsive.display.modal({
                    header: function(row) {
                        var data = row.data();
                        return 'Details for ' + data[0] + ' ' + data[1];
                    }
                }),
                renderer: $.fn.dataTable.Responsive.renderer.tableAll({
                    tableClass: 'table'
                })
            }
        }
    });
});


code:
/*
 * Container style
 */
.ps {
  overflow: hidden !important;
  overflow-anchor: none;
  -ms-overflow-style: none;
  touch-action: auto;
  -ms-touch-action: auto;
}

/*
 * Scrollbar rail styles
 */
.ps__rail-x {
  display: none;
  opacity: 0;
  transition: background-color .2s linear, opacity .2s linear;
  -webkit-transition: background-color .2s linear, opacity .2s linear;
  height: 15px;
  /* there must be 'bottom' or 'top' for ps__rail-x */
  bottom: 0px;
  /* please don't change 'position' */
  position: absolute;
}

.ps__rail-y {
  display: none;
  opacity: 0;
  transition: background-color .2s linear, opacity .2s linear;
  -webkit-transition: background-color .2s linear, opacity .2s linear;
  width: 15px;
  /* there must be 'right' or 'left' for ps__rail-y */
  right: 0;
  /* please don't change 'position' */
  position: absolute;
}

.ps--active-x > .ps__rail-x,
.ps--active-y > .ps__rail-y {
  display: block;
  background-color: transparent;
}

.ps:hover > .ps__rail-x,
.ps:hover > .ps__rail-y,
.ps--focus > .ps__rail-x,
.ps--focus > .ps__rail-y,
.ps--scrolling-x > .ps__rail-x,
.ps--scrolling-y > .ps__rail-y {
  opacity: 0.6;
}

.ps .ps__rail-x:hover,
.ps .ps__rail-y:hover,
.ps .ps__rail-x:focus,
.ps .ps__rail-y:focus,
.ps .ps__rail-x.ps--clicking,
.ps .ps__rail-y.ps--clicking {
  background-color: #eee;
  opacity: 0.9;
}

/*
 * Scrollbar thumb styles
 */
.ps__thumb-x {
  background-color: #aaa;
  border-radius: 6px;
  transition: background-color .2s linear, height .2s ease-in-out;
  -webkit-transition: background-color .2s linear, height .2s ease-in-out;
  height: 6px;
  /* there must be 'bottom' for ps__thumb-x */
  bottom: 2px;
  /* please don't change 'position' */
  position: absolute;
}

.ps__thumb-y {
  background-color: #aaa;
  border-radius: 6px;
  transition: background-color .2s linear, width .2s ease-in-out;
  -webkit-transition: background-color .2s linear, width .2s ease-in-out;
  width: 6px;
  /* there must be 'right' for ps__thumb-y */
  right: 2px;
  /* please don't change 'position' */
  position: absolute;
}

.ps__rail-x:hover > .ps__thumb-x,
.ps__rail-x:focus > .ps__thumb-x,
.ps__rail-x.ps--clicking .ps__thumb-x {
  background-color: #999;
  height: 11px;
}

.ps__rail-y:hover > .ps__thumb-y,
.ps__rail-y:focus > .ps__thumb-y,
.ps__rail-y.ps--clicking .ps__thumb-y {
  background-color: #999;
  width: 11px;
}

/* MS supports */
@supports (-ms-overflow-style: none) {
  .ps {
    overflow: auto !important;
  }
}

@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
  .ps {
    overflow: auto !important;
  }
}

license: unknown


code:
<!DOCTYPE HTML>

    <title>Getting Started: Serving Web Content</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

    <form action="/logout" method="post">
        <input type="hidden" name="_csrf" value="{{_csrf.token}}" />
        <input type="submit" value="Выйти"/>
    </form>

Сбережения

Страница добавления сбережений в БД

    <form method="post">
        <input type="text" name="saving_name" placeholder="Введите наименование накопления" />

        <input type="text" name="amount" placeholder="Введите сумму накопления">

        <input type="text" name="currency_name" placeholder="Введите валюту накопления">

        <input type="text" name="saving_type" placeholder="Введите тип накопления">

        <input type="hidden" name="_csrf" value="{{_csrf.token}}" />
        <button type="submit">Добавить</button>
    </form>


code:
<!DOCTYPE HTML>

    <title>Getting Started: Serving Web Content</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

    <form action="/logout" method="post">
        <input type="hidden" name="_csrf" value="{{_csrf.token}}" />
        <input type="submit" value="Выйти"/>
    </form>

Сбережения

Страница изменения сбережений в БД

            Наименование
            Сумма
            Валюта
            Тип
            Автор
            Изменение строки

        {{#savings}}

                {{saving_name}}
                {{amount}}
                {{currency_name}}
                {{saving_type}}
                {{authorName}}

        {{/savings}}


code:
<!DOCTYPE HTML>

        <title>Getting Started: Serving Web Content</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Страница регистрации

Страница авторизации

Сбережения

Добавления сбережений

Изменение таблицы сбережений


code:
<!DOCTYPE html>

    <title>Авторизация пользователя</title>

    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimal-ui">
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="description" content=""/>
    <meta name="keywords" content=""/>
    <meta name="author" content="CodedThemes" />

    <link rel="icon" href="images/favicon.ico" type="image/x-icon">

    <link rel="stylesheet" type="text/css" href="css/fontawesome-all.min.css" />

    <link rel="stylesheet" type="text/css" href="css/animate.min.css" />

    <link rel="stylesheet" type="text/css" href="css/style.css" />

Авторизация

                    <form action="/login" method="post">

                            <input type="text" class="form-control" name="username" placeholder="Имя пользователя">

                            <input type="password" class="form-control" name="password" placeholder="Пароль">

                        <input type="hidden" name="_csrf" value="{{_csrf.token}}" />
                        <button class="btn btn-primary shadow-2 mb-4">Погнали!</button>
                    </form>

Еще не с нами? Регайся


code:
<!DOCTYPE html>

    <title>Регистрация пользователя</title>

    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimal-ui">
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="description" content=""/>
    <meta name="keywords" content=""/>
    <meta name="author" content="CodedThemes" />

    <link rel="icon" href="images/favicon.ico" type="image/x-icon">

    <link rel="stylesheet" type="text/css" href="css/fontawesome-all.min.css" />

    <link rel="stylesheet" type="text/css" href="css/animate.min.css" />

    <link rel="stylesheet" type="text/css" href="css/style.css" />

Регистрация

                <form action="/registration" method="post">

                        <input type="text" class="form-control" name="username" placeholder="Имя пользователя">

                        <input type="password" class="form-control" name="password" placeholder="Пароль">

                    <input type="hidden" name="_csrf" value="{{_csrf.token}}" />
                    <button class="btn btn-primary shadow-2 mb-4">Погнали!</button>
                </form>
                {{#message}}

                        {{message}}
                        <button type="button" class="close" data-dismiss="alert" aria-label="Close">×</button>

                {{/message}}

Уже с нами? Логинься


code:
<!DOCTYPE html>

        <title>Datta Able - DataTable</title>

        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimal-ui">
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="description" content="Datta Able Bootstrap admin template made using Bootstrap 4 and it has huge amount of ready made feature, UI components, pages which completely fulfills any dashboard needs." />
        <meta name="keywords" content="admin templates, bootstrap admin templates, bootstrap 4, dashboard, dashboard templets, sass admin templets, html admin templates, responsive, bootstrap admin templates free download,premium bootstrap admin templates, datta able, datta able bootstrap admin template">
        <meta name="author" content="Codedthemes" />

        <link rel="icon" href="images/favicon.ico" type="image/x-icon">

        <link rel="stylesheet" href="css/fontawesome-all.min.css">

        <link rel="stylesheet" href="css/animate.min.css">

        <link rel="stylesheet" href="plugins/data-tables/css/datatables.min.css">

        <link rel="stylesheet" href="css/style.css">

 Сбережения

Сбережения

                                                        Наименование
                                                        Сумма
                                                        Валюта
                                                        Тип
                                                        Автор

                                                    {{#savings}}

                                                            {{saving_name}}
                                                            {{amount}}
                                                            {{currency_name}}
                                                            {{saving_type}}
                                                            {{authorName}}

                                                    {{/savings}}


code:
//package com.kubyshka;
//
//import org.junit.jupiter.api.Test;
//import org.springframework.boot.test.context.SpringBootTest;
//
//@SpringBootTest
//class KubyshkaApplicationTests {
//
//	@Test
//	void contextLoads() {
//	}
//
//}


code:
# MTESSERACTOCR

Написана на .bash Обновил программу для утилиты tesseract-ocr. Это механизм оптического распознавания символов OCR (Optical Character Recognition)

repo_name: Grannik/MTESSERACTOCR


code:
#!/bin/bash
 E='echo -e';e='echo -en';trap "R;exit" 2
 ESC=$( $e "\e")
 TPUT(){ $e "\e[${1};${2}H" ;}
 CLEAR(){ $e "\ec";}
# 25 возможно это
 CIVIS(){ $e "\e[?25l";}
# это цвет текста списка перед курсором при значении 0 в переменной  UNMARK(){ $e "\e[0m";}
 MARK(){ $e "\e[45m";}
# 0 это цвет заднего фона списка
 UNMARK(){ $e "\e[0m";}
# ~~~~~~~~ Эти строки задают цвет фона ~~~~~~~~
 R(){ CLEAR ;stty sane;CLEAR;};
#R(){ CLEAR ;stty sane;$e "\ec\e[37;44m\e[J";};
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 HEAD(){ for (( a=2; a<=23; a++ ))
 do
 TPUT $a 1
        $E "\xE2\x94\x82                                                                      \xE2\x94\x82";
 done
 TPUT 3 4
        $E "\033[36mЕдиничные опции                       \033[90m SINGLE OPTIONS\033[0m";
 TPUT 12 3
        $E "\033[36mОбщие озции\033[0m";
 TPUT 21 3
        $E "$(tput setaf 2)  Up \xE2\x86\x91 \xE2\x86\x93 Down Select Enter$(tput sgr 0) ";
 MARK;TPUT 1 1
        $E "+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+";UNMARK;}
   i=0; CLEAR; CIVIS;NULL=/dev/null
   FOOT(){ MARK;TPUT 24 1
        $E "+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+";UNMARK;}
# это управляет кнопками ввер/хвниз
 i=0; CLEAR; CIVIS;NULL=/dev/null
#
 ARROW(){ IFS= read -s -n1 key 2>/dev/null >&2
           if [[ $key = $ESC ]];then
              read -s -n1 key 2>/dev/null >&2;
              if [[ $key = \[ ]]; then
                 read -s -n1 key 2>/dev/null >&2;
                 if [[ $key = A ]]; then echo up;fi
                 if [[ $key = B ]];then echo dn;fi
              fi
           fi
           if [[ "$key" == "$($e \\x0A)" ]];then echo enter;fi;}
#
  M0(){ TPUT 5 3; $e " Cправочное сообщение                   \033[32m-h --help                  \033[0m";}
  M1(){ TPUT 6 3; $e " Дополнительная помощь                  \033[32m   --help-extra            \033[0m";}
  M2(){ TPUT 7 3; $e " Pежимы сегментации                     \033[32m   --help-psm              \033[0m";}
  M3(){ TPUT 8 3; $e " Pежимы OCR Engine                      \033[32m   --help-oem              \033[0m";}
  M4(){ TPUT 9 3; $e " Версия                                 \033[32m-v --version               \033[0m";}
  M5(){ TPUT 10 3; $e " Список доступных языков                \033[32m   --list-langs            \033[0m";}
  M6(){ TPUT 11 3; $e " Параметры тессеракта                   \033[32m   --print-parameters      \033[0m";}
#
  M7(){ TPUT 13 3; $e " CONFIGVAR значение VALUE               \033[32m-c CONFIGVAR=VALUE         \033[0m";}
  M8(){ TPUT 14 3; $e " Pазрешение N в точках                  \033[32m   --dpi N                 \033[0m";}
  M9(){ TPUT 15 3; $e " Указать несколько языков               \033[32m-l LANG           -l SCRIPT\033[0m";}
 M10(){ TPUT 16 3; $e " Настройте tesseract                    \033[32m   --psm N                 \033[0m";}
 M11(){ TPUT 17 3; $e " Pежим OCR Engine                       \033[32m   --oem N                 \033[0m";}
 M12(){ TPUT 18 3; $e " Pасположение пути к tessdata           \033[32m   --tessdata-dir PATH     \033[0m";}
 M13(){ TPUT 19 3; $e " Pасположение пользовательских шаблонов \033[32m   --user-patterns FILE    \033[0m";}
 M14(){ TPUT 20 3; $e " Rасположение пользовательских слов     \033[32m   --user-words FILE       \033[0m";}
#
 M15(){ TPUT 22 3; $e " EXIT                                                              ";}
# далее идет переменная LM=16 позволяющая выстраивать список в вертикаль.
LM=15
   MENU(){ for each in $(seq 0 $LM);do M${each};done;}
    POS(){ if [[ $cur == up ]];then ((i--));fi
           if [[ $cur == dn ]];then ((i++));fi
           if [[ $i -lt 0   ]];then i=$LM;fi
           if [[ $i -gt $LM ]];then i=0;fi;}
REFRESH(){ after=$((i+1)); before=$((i-1))
           if [[ $before -lt 0  ]];then before=$LM;fi
           if [[ $after -gt $LM ]];then after=0;fi
           if [[ $j -lt $i      ]];then UNMARK;M$before;else UNMARK;M$after;fi
           if [[ $after -eq 0 ]] || [ $before -eq $LM ];then
           UNMARK; M$before; M$after;fi;j=$i;UNMARK;M$before;M$after;}
   INIT(){ R;HEAD;FOOT;MENU;}
     SC(){ REFRESH;MARK;$S;$b;cur=`ARROW`;}
# Функция возвращения в меню
     ES(){ MARK;$e " ENTER = main menu ";$b;read;INIT;};INIT
  while [[ "$O" != " " ]]; do case $i in
  0) S=M0;SC;if [[ $cur == enter ]];then R;echo " Показать справочное сообщение.";ES;fi;;
  1) S=M1;SC;if [[ $cur == enter ]];then R;echo " Показать дополнительную помощь для опытных пользователей.";ES;fi;;
  2) S=M2;SC;if [[ $cur == enter ]];then R;echo " Показать режимы сегментации страницы.";ES;fi;;
  3) S=M3;SC;if [[ $cur == enter ]];then R;echo " Показать режимы OCR Engine.";ES;fi;;
  4) S=M4;SC;if [[ $cur == enter ]];then R;echo " Возвращает текущую версию исполняемого файла tesseract.";ES;fi;;
  5) S=M5;SC;if [[ $cur == enter ]];then R;echo " Список доступных языков для движка tesseract. Может использоваться с --tessdata-dir ПУТЬ.
";ES;fi;;
  6) S=M6;SC;if [[ $cur == enter ]];then R;echo " Распечатать параметры тессеракта.";ES;fi;;
  7) S=M7;SC;if [[ $cur == enter ]];then R;echo "
 Установите для параметра CONFIGVAR значение VALUE. Допускается несколько аргументов -c.
";ES;fi;;
  8) S=M8;SC;if [[ $cur == enter ]];then R;echo "
 Укажите разрешение N в точках на дюйм для входных изображений. Типичное значение N - 300. Без этого параметра разрешение считывается
 из метаданных включеныe в изображение. Если изображение не содержит этой информации, Tesseract пытается ее угадать.
#
 Извлечение текста:
  tesseract recital-63.png recital --dpi 150
  tesseract bold-italic.png bold --dpi 150
";ES;fi;;
  9) S=M9;SC;if [[ $cur == enter ]];then R;echo "
 Используемый язык или сценарий. Если ничего не указано, предполагается eng (английский). Tesseract использует трехсимвольные
 языковые коды ISO 639-2 (см. ЯЗЫКИ И СЦЕНАРИИ).
#
 чтобы позволить tesseract знать язык, на котором мы хотим работать:
 tesseract hen-wlad-fy-nhadau.png anthem -l cym --dpi 150
#
 Если ваш документ содержит два или более языков (например, словарь валлийский-английский), вы можете использовать знак плюс (+)
 сказать tesseract добавить другой язык, вот так:
 tesseract image.png textfile -l eng+cym+fra
";ES;fi;;
 10) S=M10;SC;if [[ $cur == enter ]];then R;echo "
 Настройте, чтобы tesseract запускал только часть анализа макета и принимал определенную форму изображения. Возможные варианты для N:
  0 = только ориентация и обнаружение сценария (OSD).
  1 = Автоматическая сегментация страниц с экранным меню.
  2 = Автоматическая сегментация страниц, но без OSD или OCR. (не реализована)
  3 = Полностью автоматическая сегментация страниц, но без экранного меню. (Дефолт)
  4 = Предположим, что один столбец текста переменного размера.
  5 = Предположим, что один однородный блок вертикально выровненного текста.
  6 = Предположим, что это один однородный блок текста.
  7 = рассматривать изображение как одну текстовую строку.
  8 = рассматривать изображение как одно слово.
  9 = рассматривать изображение как отдельное слово в круге.
 10 = рассматривать изображение как один символ.
 11 = Редкий текст. Найдите как можно больше текста в произвольном порядке.
 12 = Разреженный текст в экранном меню.
 13 = Сырая линия. Рассматривайте изображение как одну текстовую строку, обход хаков, специфичных для Tesseract.
";ES;fi;;
 11) S=M11;SC;if [[ $cur == enter ]];then R;echo "
 Укажите режим OCR Engine. Возможные варианты для N:
  0 = только оригинальный Тессеракт.
  1 = только нейронные сети LSTM.
  2 = Тессеракт + LSTM.
  3 = По умолчанию, в зависимости от того, что доступно.
";ES;fi;;
 12) S=M12;SC;if [[ $cur == enter ]];then R;echo " Укажите расположение пути к tessdata.";ES;fi;;
 13) S=M13;SC;if [[ $cur == enter ]];then R;echo " Укажите расположение файла пользовательских шаблонов.";ES;fi;;
 14) S=M14;SC;if [[ $cur == enter ]];then R;echo " Укажите расположение файла пользовательских слов.";ES;fi;;
#
 15) S=M15;SC;if [[ $cur == enter ]];then R;clear;exit 0;fi;;
 esac;POS;done


code:
- repo: https://github.com/pre-commit/pre-commit-hooks
  rev: v2.0.0
  hooks:
    - id: end-of-file-fixer
    - id: mixed-line-ending
    - id: trailing-whitespace

repo_name: michaelk/awesome

license: mit


code:
# Contribution Guide #

First of all, thank for your contribution! I can't manage this whole thing
alone, and I welcome pull requests. To make sure that we're all on the same
page, here are some guidelines to follow for submitting pull requests for this
list.

## Ensure that everything you link to is free (as in freedom) ##

This is highly important - this list *only* contains freedom-respecting things!
If you are sending a pull request linking to code, ensure it is licensed under a
[freedom-respecting license][1]; if you are linking to assets of any kind, make
sure that [they are the same][2]. For games, be especially careful that they are
both.

## Indicate the license for anything you add clearly ##

Ensure that you use the correct name for the license (as per [this][1]
or [this][2]), and indicate any further restrictions clearly. Also check if the
license is in use already - if it is, don't create another link to it.

## Maintain alphabetical order within sections ##

Pretty self-explanatory, really. Numbers are considered to be higher-ordered
than anything else, and otherwise, lex order.

## Give a clear commit message ##

The commit message should state clearly *what* you did (adding, removing,
clarifying, etc.), with *what* (usually by giving the name of the entry), in the
present continuous tense (i.e. 'adding' not 'added').

[1]: https://www.gnu.org/licenses/license-list.html
[2]: http://freedomdefined.org/Licenses


code:
# Awesome Gamedev #

A curated list of good stuff related to the development of games. This list
contains *only* [free software][1] for code, sellers who aren't evil for
physical resources, and [free cultural works][2] for assets.

I have also provided a list of resources which are *not* free, and the reasons
why, in the associated Wall of Shame file.

This is released under a Creative Commons-Attribution-ShareAlike license,
version 4.0. You can find its text in the `LICENSE.md` file.

This project is part of [Peers][361] - a community for growing freedom. Support
us today!

## Table of Contents ##

* [Assorted Assets](#assorted-assets)
* [Audio](#audio)
  * [Editors](#editors)
  * [Music](#music)
  * [Sound Effects](#sound-effects)
* [Communities](#communities)
* [Engines](#engines)
  * [General](#general)
  * [HTML5](#html5)
  * [Physics](#physics)
* [Math](#math)
* [Fonts](#fonts)
* [Games](#games)
  * [C](#c)
  * [C++](#c)
  * [CoffeeScript](#coffeescript)
  * [Dart](#dart)
  * [ECMAScript](#ecmascript)
  * [Java](#java)
  * [Other/Multiple](#othermultiple)
  * [Python](#python)
  * [Scala](#scala)
* [Graphics](#graphics)
  * [Assorted](#assorted)
  * [Collections](#collections)
  * [Icons](#icons)
  * [Sprites](#sprites)
* [Graphics Tools](#graphics-tools)
  * [Animation](#animation)
  * [Bitmap Compression](#bitmap-compression)
  * [Editors](#editors-1)
  * [Mesh Tools](#mesh-tools)
  * [Spritesheet Tools](#spritesheet-tools)
  * [Texture Tools](#texture-tools)
  * [Voxel Editors](#voxel-editors)
* [Learning Resources](#learning-resources)
  * [Graphics](#graphics-1)
    * [Beginner](#beginner)
  * [Music](#music-1)
  * [Programming](#programming)
    * [Beginner](#beginner-1)
    * [Intermediate](#intermediate)
    * [Reference](#reference)
  * [Talks](#talks)
* [Programming Frameworks and Libraries](#programming-frameworks-and-libraries)
* [Utilities](#utilities)

## Assorted Assets ##

This contains collections of miscellaneous assets of different kinds.

* [Openclipart][288] - A giant collection of clip art. [CC0][289].
* [OpenGameArt.org][7] - A large collection of art intended for game
  development. Various licenses, including free ones.
* [Wikimedia Commons][97] - A collection of various assets of all kinds. Various
  licenses, all CC or free-er.
* [Open Source Game Clones][392] - A collection of open source videogames that
  are clones of old games.

## Audio ##

### Editors ###

* [Ardour][130] - The digital audio workstation. [GNU GPLv2][14] or later.
* [Audacity][33] - Software for recording and editing sounds. [GNU GPLv2][14] or
  later.
* [Beast][133] - Music composition and modular synthesis
  software. [GNU LGPLv3][38] or later.
* [Hydrogen][366] - An advanced drum machine, with a free drum kit
  included. [GNU GPLv2][14] or later.
* [LMMS][142] - A digital audio workstation. [GNU GPLv2][14] or later.
* [MilkyTracker][34] - Multi-platform application for creating .mod and .xm
  module files. [GNU GPLv3][23] or later.
* [Musagi][35] - A large and sophisticated music editor. [Expat][11].
* [rFXGen][391] -  a tool to generate sound waves procedurally. [zlib][45]

### General ###

* [GameSounds.xyz][413] - Royalty free music and sounds. Various licenses,
  including free ones.
* [Musical Artifacts][345] - A collection of music-related everything. Various
  licenses, all CC.

### Music ###

* [CC0 Music][385] - A collection of music. [CC0][289].
* [ccMixter][304] - A site for collaborating with musicians. Various licenses,
  all CC.
* [Creative Commons on Bandcamp][85] - Everything on Bandcamp under a
  CC-license. Various licenses, all CC.
* [Creative Commons on SoundCloud][98] - A Creative Commons collection on
  SoundCloud. Various licenses, all CC.
* [Free Music Archive][328] - An archive of free music. Various licenses, all CC.
* [Incompetech][294] - An artist providing royalty free music of all genres. [CC-BY-3.0][5].
* [Jamendo][287] - A site providing music licensed under the Creatives
  Commons. Various licenses, all CC.
* [LibreFM][96] - A big collection of stations, with fully-free music. Licenses
  allow downloads and reuse.
* [Musopen][31] - A site dedicated to copyright-free (and culturally free)
  music. Various licenses, all copyright-free (varies by piece).
* [Open Music Archive][295] - Digitized out-of-copyright sound
  recordings. Public domain in the UK.
* [Silverman Sound Studios' Music Tracks][368] - A bunch of musical
  tracks. [CC-BY-4.0][136].

### Sound Effects ###

* [Audioaugust][341] - A collection of sound effects, originally used for a
  game. [CC-BY-4.0][136].
* [Freesound.org][30] - A collection of CC-licensed sound effects. Various
  licenses, all CC.
* [jsfxr][290] - A tool like sfxr-sdl but in ECMAScript. [Unlicense][305].
* [Opsound][70] - A collection of assorted sounds. [CC-BY-SA-3.0][127].
* [sfxr-sdl][321] - A tool to generate sounds. [Expat][11].
* [SoundBible's Royalty-free section][32] - A collection of CC or
  public-domain-licensed sounds. Various licenses, all CC or public domain.

## Communities ##

Gamedev can be a lonely job, and it also can have a steep learning curve. These
communities are designed to assist you in terms of camaraderie, expert knowledge
and resources.

* [/r/freeculture][316] - Part of the Free Culture Reddit Community. A general
  free-culture-focused community.
* [/r/FreeGaming][94] - Part of the Free Culture Reddit Community. Designed
  specifically for discussion of free culture games.
* [/r/freesoftware][323] - A general free-software-focused community.
* [/r/godot][185] - A community for discussion and support in development with
  the Godot game engine.
* [FreeGameDev Forums][326] - A forum community for all things free-game-development-related.
* [FreeGaming][324] - A [freepo.st][325] community dedicated to free gaming.
* [Libregamewiki][327] - The free gaming encyclopedia.

## Engines ##

These are full-blown game engines.

### General ###

* [AGS][57] - Implemented in C++. Scripted using its own scripting
  language. Designed for adventure games. [Artistic License 2.0][58].
* [AlephOne][371] - Implemented in C++. Designed for FPS games. [GNU GPLv3][23]
  or later.
* [AnKi 3D][369] - Implemented in C++. [3-clause BSD][29].
* [Arianne][372] - Implemented in Java. Includes a multiplayer game
  framework. [GNU GPLv2][14] only.
* [Azul3D][112] - Implemented in Go. [3-clause BSD][29].
* [Backbone][161] - Implemented in ECMAScript. [Expat][11].
* [BananaBread][162] - Implemented in ECMAScript. A port of Sauerbrauten. [zlib][45].
* [Castle Game Engine][292] - Implemented in ObjectPascal. [GNU LGPLv2][102] or later.
* [Chili Source][262] - Implemented in C++. [Expat][11].
* [Cocos2d][75] - Implemented in Python. [3-clause BSD][29].
* [Cocos2d-android][263] - Implemented in Java. [3-clause BSD][29].
* [Cocos2d-X][306] - Implemented in C++. Has ECMAScript, Lua and C++ scripting. [Expat][11].
* [DarkPlaces][314] - Implemented in C. [GNU GPLv2][14] or later.
* [delta3d][373] - Implemented in C++. Also useful for
  simulations. [GNU LGPLv2][102] or later.
* [Doomsday][134] - Implemented in C++. [GNU GPLv2][14] or later.
* [Duality][77] - Implemented in C#. [Expat][11].
* [EasyRPG][208] - Implemented in C++. Designed for JRPG-style
  games. [GNU GPLv3][23] or later.
* [ENIGMA][308] - Implemented in C++. Has its own scripting language
  and [GUI editor][309]. [GNU GPLv3][23] or later.
* [FIFE][55] - Implemented in C++. Has Python scripting. Designed for isometric
  games. [GNU LGPLv3][38] or later.
* [Fillwave][374] - Implemented in C++. Has an easy graphics API. [FreeBSD][17].
* [Flambe][329] - Implemented in Haxe. Designed for 2D games. [Expat][11].
* [FLARE][54] - Implemented in C++. Designed for action RPGs. [GNU GPLv3][23] or
  later.
* [Fluxus][137] - Implemented in C++. Designed for livecoding
  worlds. [GNU GPLv2][14] or later.
* [gamekit][293] - Implemented in C++. Scripted using C++, Lua or logic blocks. [Expat][11].
* [GamePlay][266] - Implemented in C++. [Apache2.0][20].
* [GDevelop][60] - Implemented in C++. Targeted at non-programmers. [Expat][11]
  (IDE is [GNU GPLv3][23] only.)
* [GNU FreeDink][47] - Implemented in C++. [GNU GPLv3][23] or later.
* [Godot][51] - Implemented in C++. Has [its own scripting language][52]. [Expat][11].
* [Gosu][318] - Implemented in C++. has a Ruby interface. [Expat][11].
* [Helm][83] - Implemented in Haskell. [Expat][11].
* [HERITAGE][123] - Implemented in ECMAScript. Designed for text adventure
  games. [GNU GPLv3][23] or later.
* [Horde3D][115] - Implemented in C++. [EPLv1][116].
* [ioquake3][202] - Implemented in C. A fork of the Quake III Arena
  engine. [GNU GPLv2][14] or later.
* [Irrlicht][43] - Implemented in C++. Has a [range of bindings][44]. [zlib][45].
* [JMonkey][140] - Implemented in Java. [3-clause BSD][29].
* [KivEnt][307] - Implemented in Python. [Expat][11].
* [LambdaHack][84] - Implemented in Haskell, Designed for roguelikes. [3-clause BSD][29].
* [litiengine][417] - Implemented in Java, Designed for 2D games. [MIT][403]
* [lycheejs][89] - Implemented in ECMAScript. Designed for construction of HTML5
  or native SDL games. [Expat][11].
* [Maratis][311] - Implemented in C++. Has Lua for scripting. [GNU GPLv2][14] or
  later.
* [Moai][319] - Implemented in C++. Has Lua for scripting. [CPAL][320].
* [OctaForge][379] - Implemented in C++. Has LuaJIT for scripting. Fork of
  Sauerbraten. [NCSA Open Source License][380].
* [Ogre3D][41] - Implemented in C++. Has a [range of bindings][42]. [Expat][11].
* [Orx][315] - Implented in C. [zlib][45].
* [Oxygine][176] - Implemented in C++. [Expat][11].
* [Panda3D][119] - Implemented in C++. Has a Python interface. [3-clause BSD][29].
* [PlayN][317] - Implemented in Java. [Apache2.0][20].
* [Processing][313] - Implemented in Java. Has its own scripting
  language. [GNU GPLv2][14] only.
* [Processing.js][314] - Implemented in ECMAScript. Has its own scripting
  language. [Expat][11].
* [qfusion][206] - Implemented in C++. Designed for FPS games. [GNU GPLv2][14]
  or later.
* [Ren'Py][107] - Implemented in Python. Designed for visual
  novels. [Expat][11], with some parts under [GNU LGPLv3][38] only.
* [SGE][387] - Implemented in Python. Designed for 2-D games. [GNU GPLv3][23]
* [SLUDGE][56] - Implemented in C++. Has its own scripting
  language. [GNU LGPLv3][38] only with the GTK Dev Kit [GNU GPLv3][23] or later.
* [Sly][344] - Implemented in Guile. Uses functional reactive
  programming. [GNU GPLv3][23] or later.
* [Solarus][375] - Implemented in C++. Comes with its own editor. Designed for
  RPGs. [GNU GPLv3][23] or later.
* [Spearmint][203] - Implemented in C. Designed for FPS games. [GNU GPLv3][23]
  or later.
* [Spring][121] - Implemented in C++. Designed for RTS games. [GNU GPLv2][14] or
  later.
* [Torque2D][63] - Implemented in C++. Has [its own scripting language][62]. [Expat][11].
* [Torque3D][61] - Implemented in C++. Has [its own scripting language][62]. [Expat][11].
* [Turbulenz][277] - Implemented in ECMAScript. [Expat][11].
* [Urho3D][122] - Implemented in C++. Scripted using AngelScript or Lua. [Expat][11].
* [voxeliq][246] - Implemented in C#. Designed for voxel world games. [MsPL][247].

### HTML5 ###

Unless stated otherwise, these engines are implemented in ECMAScript.

* [Akihabara][258] - Designed for 8-bit and 16-bit games. [Expat][11].
* [Babylon.js][260] - [Apache2.0][20].
* [Cocos2d-html5][264] - [Expat][11].
* [Coffee2D][205] - Implemented in CoffeeScript. [Expat][11].
* [Crafty.js][68] - [Expat][11].
* [Cube][168] - Designed for voxel games. [WTFPLv2][169].
* [kiwi.js][269] - [Expat][11].
* [melonJS][93] - [Expat][11].
* [panda.js][273] - [Expat][11].
* [Phaser][64] - [Expat][11].
* [PlayCanvas][65] - [Expat][11].
* [PuzzleScript][362] - [Expat][11].
* [Superpowers][357] - [ISC][358].

### Physics ###

* [ammo.js][259] - Implemented in ECMAScript. A port of Bullet. [3-clause BSD][29].
* [Box2D][48] - Implemented in C++. Designed to simulate rigid body physics. [zlib][45].
* [Bullet][59] - Implemented in C++. General physics engine. [zlib][45].
* [LiquidFun][396] - LiquidFun is a 2D rigid-body and fluid simulation C++ library for games based upon Box2D. [zlib][45].
* [Matter.js][91] - Implemented in ECMAScript. Physics engine for HTML5. [Expat][11].
* [ODE][117] - Open Dynamics Engine; implemented in C++. Designed to simulate
  rigid body dynamics. [Original BSD][118].
* [Oimo.js][272] - Implemented in ECMAScript. [Expat][11].
* [Physics.js][274] - Implemented in ECMAScript. [Expat][11].

## Math ##

* [Hypatia][416] - A pure-C math library for 2D/3D graphics (matrix, vector, quaternion) Seeks to be close to C89/C90 compliant for portability. [MIT][403].

## Fonts ##

* [Google Fonts][232] - A collection of freely-licensed fonts. [OFL][302].
* [Open Font Library][301] - A collection of freely licensed fonts. [OFL][302].
* [ParaType Public Fonts for Minority Languages of Russia][346] - Three
  freely-licensed fonts with support for many character
  sets. [ParaType Free Font Licensing Agreement][347].
* [The League of Moveable Type][303] - A collection of fonts with high
  standards. [OFL][302].

## Games ##

These are meant to serve as examples for your own work, or foundations to built upon.

I have endeavoured to provide both code and asset licenses here - if no asset
license is listed, assume it to be non-free or questionably-free. These entries
may be removed upon clarification.

### C ###

* [2048-cli][216] - A CLI version of 2048. [Expat][11] (code), no significant assets.
* [2048-in-terminal][217] - A CLI version of 2048. [Expat][11] (code), no
  significant assets.
* [Craft][226] - A 3D voxel world game. [Expat][11] (code and assets).
* [Curse of War][234] - A fast-paced strategy game. [GNU GPLv3][23] or later
  (code and assets).
* [The Legend of Edgar][214] - A 2D platform game with a persistent
  world. [GNU GPLv2][14] or later (code), various free culture licenses
  (assets).
* [FallingTime][196] - An arcade game. [GNU GPLv2][14] or later (code),
  various CC (no NC or ND) (assets).
* [Taisei][199] - [Expat][11] (code and assets), [OFL][302] only for one font.
* [Turtle Arena][204] - Third-person action game. [GNU GPLv3][23] or later
  (code), various free culture licenses (assets).
* [Wizznic][219] - A puzzle game. [GNU GPLv3][23] or later (code and assets).

### C++ ###

* [Battle for Wesnoth][244] - A turn-based strategy game. [GNU GPLv2][14] or
  later (code and assets).
* [Blackvoxel][225] - A voxel exploration and crafting game. [GNU GPLv3][23]
  or later (code and assets).
* [Clonepoint][193] - [GNU GPLv3][23] or later (code), various CC (no NC or
  ND) (assets).
* [colobot][233] - A robot-based strategy game. [GNU GPLv3][23] or later (code
  and assets).
* [Egooboo][210] - A 3D dungeon crawler in the spirit of
  NetHack. [GNU GPLv3][23] or later(code and assets).
* [Endless Sky][227] - 3D space exploration game. [GNU GPLv3][23] or later
  (code), various CC (no NC or ND) (assets).
* [Freeminer][228] - A 3D voxel world game. [GNU GPLv3][23] or later
  (code), [CC-BY-SA-3.0][127] (assets).
* [MegaGlest][250] - A 3D RTS game. [GNU GPLv3][23] or later
  (code), [CC-BY-SA-3.0][127] (assets).
* [Minetest][229] - A 3D voxel world game. [GNU LGPLv2][102] or later
  (code), [CC-BY-SA-3.0][127] (assets).
* [Minilens][360] - A cute puzzle platformer starring a cleaning robot on
  post-Apocalyptic Earth. Made with the Godot engine. [GNU GPLv3][23] or later
  (code), [CC-BY-SA-3.0][127] (assets).
* [Monster 1][212] - A JRPG-style game. [3-clause BSD][29] (code and assets).
* [Monster 2][213] - A JRPG-style game. [zlib][45] (code and assets).
* [OpenClonk][389] - A jump'n'run/settlement/combat game. [ISC][358] (code),
  [CC-BY-SA-3.0][127] at most but mostly [CC-BY-3.0][5] (assets).
* [OpenDungeons][236] - A version of Dungeon Keeper. [GNU GPLv3][23] or later
  (code), various free culture licenses (assets).
* [Return of Dr. Destructo][377] - An adventure game. [Expat][11] (code),
  [CC-BY-SA-4.0][125] (assets).
* [SavageWheels][198] - A car game. [Expat][11] (code and assets).
* [Seven Kingdoms: Ancient Adversaries][241] - A strategy
  game. [GNU GPLv2][14] or later (code and assets).
* [SuperTux][215] - A platformer. [GNU GPLv3][23] or later (code), various
  free culture licenses (assets).
* [SuperTuxKart][224] - A 3D racing game. [GNU GPLv3][23] or later (code),
  various free licenses (assets).
  (code), [CC-BY-SA-4.0][125] (assets).
* [The Powder Toy][231] - A sandbox falling sand physics game. [GNU GPLv3][23]
  or later (code and assets).
* [Übergame][356] - A multiplayer, casual FPS game. [Expat][11]
  (code), [CC0][289] (assets).
* [Warzone 2100][248] - An RTS sci-fi game. [GNU GPLv2][14] or later (code),
  various free culture licenses (assets).

### CoffeeScript ###

* [coffee-snake][339] - A version of Snake. [GNU GPLv3][23] or later (code),
  no significant assets.
* [Zop][186] - A 'connect the dots' game. [Expat][11] (code), no significant assets.

### Dart ###

* [Hauberk][190] - A roguelike. [Expat][11] (code), no significant assets.
* [Pop, Pop, Win!][183] - A version of Minesweeper. [3-clause BSD][29] (code
  and assets).

### ECMAScript ###

* [2048][172] - The original, classic casual game. [Expat][11] (code and assets).
* [A Dark Room][173] - A text adventure game. [MPLv2][166] (code), no
  significant assets.
* [Blockrain.js][177] - A version of Tetris. [Expat][11] (code and assets).
* [BrowserQuest][165] - An MMORPG. [MPLv2][166] (code), [CC-BY-SA-3.0][127] (assets).
* [Clumsy Bird][149] - A version of Flappy Bird. [Expat][11] (code and assets).
* [Drunken Viking][178] - A top-down puzzle game. [Expat][11] (code), various
  CC (no NC or ND) (assets).
* [Freeciv-web][167] - A port of Freeciv. [GNU GPLv2][14] or later
  and [GNU AGPLv3][27] or later (code and assets).
* [ludum-dare-28][180] - [CC-BY-4.0][136] (code and assets).
* [Masonry-JavaScript-Tetris-Clone][252] - Exactly what it says on the
  tin. [Expat][11] (code and assets).
* [Parity][181] - [Expat][11] (code), no significant assets.
* [Particle Clicker][359] - An incremental game that teaches the history of
  high-energy particle physics. [Expat][11] (code and assets).
* [Prism][184] - A colour-matching game. [Expat][11] (code), no significant assets.
* [Roguish][163] - A roguelike. [3-clause BSD][29] (code and assets).
* [Snake][157] - A version of Snake. [Expat][11] (code), no significant assets.
* [Sorades 13k][159] - A scrolling shooter. [CC-BY-SA-3.0][127] (code and assets).
* [Space Crusade][160] - A space game. [Expat][11] (code), [CC0][289] (assets).
* [Space Shooter][158] - Simple space shooting game. [Expat][11] (code).
* [Squirts][191] - [Expat][11] (code and assets).

### Java ###

* [epic-inventor][354] - An indie, side-scrolling RPG. [GNU GPLv2][14] only
  (code and assets).
* [Ned et les maki][221] - A 3D puzzle game. [Expat][11]
  (code), [FALv1.3][222] (assets).
* [Newton Adventure][220] - A puzzle game. [3-clause BSD][29] (code), various
  CC (no NC or ND) (assets).
* [PuzzleGame][257] - A slider puzzle game. Uses Android port of Cocos2D
  engine. [Expat][11] (code and assets).
* [Terasology][230] - A 3D voxel world game. [Apache2.0][20] (code and assets).

### Other/Multiple ###

* [Cataclysm: Dark Days Ahead][207] - A roguelike set in a post-apocalyptic
  world. [CC-BY-3.0][5] (code), [CC-BY-SA-3.0][127] (assets).
* [DynaDungeons][194] - A version of Bomberman. Uses Godot
  engine. [GNU GPLv3][23] or later (code), various CC (no NC or ND) (assets).
* [FLARE][211] - A dark fantasy 2D RPG. Uses FLARE engine. [GNU GPLv3][23] or
  later (code), [CC-BY-SA-3.0][127] (assets).
* [Pioneer][239] - A space exploration game. Implemented in C++ and
  Lua. [GNU GPLv3][23] only (code), [CC-BY-SA-3.0][127] (assets).
* [Source of Tales][242] - An MMORPG. Scripted using Lua (implementation
  language unclear). [GNU GPLv3][23] or later (code), [CC-BY-SA-3.0][127]
  and [GNU GPLv3][23] (assets).
* [Tanks of Freedom][243] - Pixed-based turn-based strategy. Uses Godot
  engine. [Expat][11] (code and assets).
* [Teeworlds][200] - Implemented in C and C++. [3-clause BSD][29]
  (code), [CC-BY-SA-3.0][127] (assets).
* [Zero-K][249] - An RTS game. Uses Spring engine. [GNU GPLv2][14] or later
  (code and assets).

### Python ###

* [Bullet dodger][383] - A fun and challenging mouse game where you must dodge
  bullets. [GNU GPLv3][23] only (code), various CC (no NC or ND) (assets).
* [Hexoshi][388] - Free-roaming Metroid-like. [GNU GPLv3][23] only (code),
  various CC (no NC or ND) (assets).
* [Mystic Mine][197] - [Expat][11] (code and assets).
* [ReTux][384] - A platformer. [GNU GPLv3][23] only (code), various free
  culture licenses (assets).
* [RogueBox Adventures][386] - A mix of classical roguelike and sandbox
  game. [GNU GPLv3][23] or later (code), various free culture licenses (assets).
* [Unknown Horizons][245] - A real-time strategy simulation
  game. [GNU GPLv2][14] or later (code), [CC-BY-SA-3.0][127] (assets).

## Graphics ##

### Assorted ###

This is a section for everything else that doesn't fit in some other graphics category.

* [Blender 3D Model Repository][296] - User-submitted 3D models made with
  Blender. Various licenses, including free ones.
* [Blend Swap][355] - A community of Blender artists and their work. Various
  licenses, all CC.
* [CanTree][10] - Free online tree generator. Generates PNG files. [Expat][11].
* [Kator Legaz 3D Models][297] - 3D Models by of various
  subjects. [CC-BY-3.0][5].
* [mocapdata.com][298] - A library of motion capture data. Various licenses,
  including free ones.
* [Yobi3D][13] - A search engine for 3D models that aims to display license
  information when possible. Various licenses, including free ones.

### Collections ###

This category contains any 'grab-bags' of different kinds of art assets.

* [Free stuff by 7Soul1][3] - A collection of various game-related
  assets. Available in PNG. Public domain.
* [openclipart][6] - A collection of various clip art. Available in PNG. Public domain.
* [Remastered Tyrian graphics][331] - A collection of pixel spreadsheets for a
  top-down shooter. [CC0][289].
* [Vecteezy][12] - A collection of vector art. Various Creative Commons licenses.
* [ZipUp Free Game Elements][363] - A collection of various graphical
  elements. Custom attribution license, free.

### Icons ###

* [FatCow][406] - A set of 3900 colour icons in 16x16 and 32x32 pixel format. [CC-BY-3.0][5].
* [Font Awesome][405] - A large set of vector icons. [CC-BY-4.0][136].
* [Game-icons.net][4] - A constantly-growing collection of black-and-white
  icons. Available in SVG or PNG. [CC-BY-3.0][5].
* [IconFontCppHeaders][412] - C and C++ headers for icon fonts [Font Awesome][405], [Material Design Icons][291] and [Kenney Game Icons][411]. [zlib][45]
* [Kenney Game Icons][411] - A font pack specifically designed for (browser) games and other gaming related websites/projects. [CC0][289].
* [Material Design Icons][291] - An official icon set from Google following
  specific guidelines. [Apache2.0][20].
* [Tango Icon Library][300] - An icon set project with a goal to create a
  consistent user interface. Public domain.

### Sprites ###

* [LPC Spritesheet Character Generator][395] - A pixel-art RPG-style character spritesheet generator. Arts are dual licensed : [GNU GPLv3][23] and [CC-BY-SA3][127]
* [SpriteLib][8] - A big collection of sprites. Available in PNG. [CPL 1.0][9].

## Graphics Tools ##

### Animation ###

* [Synfig Studio][104] - A 2D animation tool. [GNU GPLv2][14] or later.

### Bitmap Compression ###

* [FLIF][343] - Reference implementation of the Free Lossless Image
  Format. Comes with additional tools. [GNU GPLv3][23] only.
* [pngquant][16] - A command-line utility for lossy compression of PNG
  images. Has various front-ends available. [FreeBSD][17].
* [Trimage][18] - A cross-platform tool for losslessly optimizing PNG and JPG
  files. [Expat][11].

### Editors ###

* [Blender][25] - A 3D modelling and rendering editor. [GNU GPLv2][14] or later.
* [GIMP][22] - The GNU Image Manipulation Program. Designed for photo
  retouching, image composition and similar tasks. [GNU GPLv3][23] or later.
* [GrafX2][310] - A bitmap paint program specialized for 256-color
  drawing. [GNU GPLv2][14] only.
* [Hme][139] - A program for creating, manipulating and viewing height
  maps. [GNU GPLv2][14] or later.
* [Inkscape][24] - A vector image editing program. [GNU GPLv2][14] only.
* [Krita][108] - A digital painting and illustration program. [GNU GPLv2][14] or
  later.
* [MakeHuman][26] - A tool for making 3D characters. [GNU AGPLv3][27] or later.
* [MyPaint][81] - A natural materials painting and drawing
  emulator. [GNU GPLv2][14] or later.
* [ngPlant][105] - A 3D plant modelling software suite. [GNU GPLv2][14] or later.
* [NormalMapOnline][40] - An online normal-mapping tool. [Expat][11].
* [Overlap2D][19] - An engine-agnostic game level and UI editor. [Apache2.0][20].
* [Pixelorama][418] - 2D pixel art editor with animation support. [Expat][11].
* [Synfig Studio][104] - 2D animation software. [GNU GPLv2][14] or later.
* [Tiled][21] - Easy-to-use and flexible tile map editor. [GNU GPLv2][14] or
  later and [FreeBSD][17].

### Mesh Tools ###

* [MeshLabs][103] - A portable system for the processing and editing of
  unstructured 3D triangular meshes. [GNU GPLv2][14] or later.
* [Dilay][364] - A 3D sculpting application that provides an intuitive workflow
  using a number of powerful modelling tools. [GNU GPLv3][23] or later.

### Procedural Generators ###

* [SpaceshipGenerator][376] - A Blender script allowing generation of spaceships
  from a random seed and some parameters. [Expat][11].

### Spritesheet Tools ###

* [Piskel][15] - Online pixel art and animated sprite creator. [GNU AGPLv3][27]
  or later.

### Texture Tools ###

* [AwesomeBump][141] - A program that generates normal, height, specular or
  ambient occlusion, roughness or metallic textures. Requires a graphics card
  with support for OpenGL4 or greater. [GNU LGPLv3][38] or later.
* [Material Maker][419] - Procedural texture generation tool for use with PBR engines. [Expat][11].
* [NeoTextureEdit][37] - An easy-to-use, graph-based, procedural texture editor. No longer maintained.
  [GNU LGPLv3][38] or later.
* [TextureGeneratorOnline][39] - An online tool for texture generation. [Expat][11].

### Voxel Editors ###

* [Sproxel][28] - A 3D interface for quickly editing and creating voxel-based 3D
  models. [3-clause BSD][29].

## Learning Resources ##

These are all collections of information to help you learn about things that
might be necessary for developing games.

We aim for *complete* and *current* resources here whenever possible.

### Game Design ###

* [School of Game Design, Wikiversity][352] - A collection of learning resources
  for would-be game designers. [CC-BY-SA-3.0][127].

### Graphics ###

#### Beginner ####

* [Blender 3D: Noob to Pro][286] - A Wikibook for learning how to make 3D
  graphics with Blender. [CC-BY-SA-3.0][127].

#### Reference ####

* [Procedural Content Generation Wiki][378] - A collection of articles about the
  use of procedural generation to make stuff in games. [CC-BY-SA-3.0][127].

### Music ###

* [LibreMusicProduction][124] - A community-driven online resource for
  promoting musical creation and composition using free
  tools. [CC-BY-SA-4.0][125].

### Programming ###

* [Computer Science section on Saylor Academy][330] - A collection of computer
  science courses. Many of these deal with useful concepts for game
  programming. [CC-BY-3.0][5].
* [Introduction to Mobile Game Development][350] - Class on making simple mobile
  games with Gideros and Lua. [Expat][11].

#### Beginner ####

* [An Introduction to Python][282] - Pretty much what it says on the
  tin. [Python License][283].
* [Beginner 2d Game Programming Tutorial][340] (video) - A set of tutorials in
  2D game programming, illustrated using ECMAScript. [CC-BY-3.0][5].
* [C++ Tutorial for Beginners][333] (video) - A collection of basic video
  tutorials for C++. [CC-BY-3.0][5].
* [Effective Go][66] - A guide to writing good, clean and readable Go code for
  beginners. [CC-BY-3.0][5] (text), [3-clause BSD][29] (code).
* [Functional Programming in JavaScript][334] (video) - A series of tutorials
  about functional programming concepts, illustrated using
  ECMAScript. [CC-BY-3.0][5].
* [Java Collections Framework][337] (video) - A set of tutorials for using Java
  collections properly. [CC-BY-3.0][5].
* [Java For Complete Beginners][332] (video) - A collection of basic video
  tutorials for Java. [CC-BY-3.0][5].
* [Lua Programming][126] - A completed Wikibook on programming Lua. [CC-BY-SA-3.0][127].
* [Practical Haskell - getting started with Stack][50] - A series of tutorials
  designed to help people get started programming Haskell. [CC-BY-SA-4.0][125].
* [pygame_stuff][382] - A collection of code samples using
  PyGame. [GNU GPLv3][23] or later.
* [The GNU C Programming Tutorial][280] - An introduction to programming in C by
  the nice GNU people. PDF. [GNU FDL][281].
* [why's (poignant) Guide to Ruby][237] - An interesting introductory book for
  Ruby. [CC-BY-SA-3.0][127].

#### Intermediate ####

* [Advanced C++][351] (video) - A tutorial on advanced aspects of C++. [CC-BY-3.0][5].
* [Dive Into Python][284] - A Python book for experienced programmers. [GNU FDL][281].
* [Haskell][285] - A very thorough Wikibook on programming Haskell. [CC-BY-SA-3.0][127].
* [Haskell Tutorial for C Programmers][336] - An introduction to Haskell for
  people coming from C-family languages. [Expat][11].
* [JavaFX Tutorial][335] (video) - A series of videos about how to use JavaFX to
  make GUIs. [CC-BY-3.0][5].
* [Java Multithreading][337] (video) - A series of videos about how to do
  multithreading work in Java. [CC-BY-3.0][5].
* [Mostly adequate guide to functional programming (in JavaScript)][144] - A
  book on the fundamentals of functional programming in
  ECMAScript. [CC-BY-SA-4.0][145].
* [Structure and Interpretation of Computer Programs][240] - A classic
  programming and teaching text. Designed for teaching Scheme, but can be useful
  to anyone writing in any language. [CC-BY-SA-4.0][125].

#### Reference ####

* [breakouts][278] - A collection of ECMAScript implementations of
  Breakout. [Expat][11].
* [Haskell Programming][128] - A complete wiki of the Haskell programming
  language. [Expat][11].
* [Joey Hess' blog][129] - A collection of posts, many of which are about
  Haskell use. [CC-BY-4.0][136].

### Talks ###

These are collections of game development-related talks, podcasts etc. that
might be interesting or informative to people seeking to design games.

* [GameDevRadio][268] (podcast) - A series of online radio shows devoted to
  entertaining and educating whoever is interested in game
  development. [CC-BY-SA-4.0][125].
* [Indievelopment talks][143] (video) - A collection of talks about various
  aspects of game development. [CC0][289].

## Programming Frameworks and Libraries ##

These are programming libraries or low-level code-based tools which are designed
to support game programming, but do not provide as much structure or support as
an engine would.

* [ActionKid][82] - A simple video game framework. Implemented in
  Haskell. [3-clause BSD][29].
* [Allegro 5][36] - A cross-platform library for low-level tasks, like creating
  windows, accepting user input and so forth. Implemented in C and
  C++. [3-clause BSD][29].
* [Bacon2D][72] - A framework to ease 2D game development, providing QML
  elements representing basic game entities. Implemented in C++. [Expat][11].
* [bgfx][261] - A 'build-your-own-engine' rendering library. [FreeBSD][17].
* [Chipmunk2D][74] - A fast and lightweight 2D game physics library. Implemented
  in C. [Expat][11].
* [ChipmunkSharp][73] - Advanced physics engine library based on
  Chipmunk. Implemented in C#. [Expat][11].
* [Cinder][113] - A community-developed library for creative
  coding. Implemented in C++. [FreeBSD][17].
* [ClanLib][131] - A cross-platform toolkit with a primary focus on game
  creation. Implemented in C++. [ClanLib license][132].
* [CutJS][76] - A lightweight and fast 2D HTML5 rendering engine for
  cross-platform game development. Implemented in ECMAScript. [Expat][11].
* [Dear ImGui][400] - An Immediate Mode Graphical User interface for C++ with minimal dependencies. [zlib][45]
* [enchant.js][65] - A framework for developing simple HTML5 + ECMAScript
  games. Implemented in ECMAScript. [Expat][11].
* [EndGate][78] - A framework for building HTML5 games. Implemented in
  TypeScript. [Expat][11].
* [Epoxy][381] - A library for handling OpenGL function pointer
  management. Implemented in C. [Expat][11].
* [GameJs][279] - A thin library on top of the Canvas API, including some
  helpful game development modules. [Expat][11].
* [Gideros][349] - A cross-platform game development framework in Lua. Various
  licenses, all free.
* [Gladiator3D][267] - A raycasting engine. Implemented in
  ECMAScript. [Expat][11].
* [GLFW][401] - A multi-platform library for OpenGL, OpenGL ES and Vulkan development on the desktop. [zlib][45]
* [HaxeFlixel][79] - A cross-platform development framework, supporting many
  targets. Implemented in Haxe. [Expat][11].
* [HaxePunk][179] - A development framework designed to let you build games on
  any platform. [Expat][11].
* [ImGuizmo][402] - An immediate mode 3D gizmo for scene editing and other controls based on [Dear ImGui][400]. [MIT][403]
* [Kcp][414] - A fast and reliable ARQ protocol that helps fast-action games reduct network latency. [MIT][403]
* [Kivy][80] - Rapid-development library for multi-touch and visual apps on many
  platforms. Implemented in Python. [Expat][11].
* [Kuko][348] - A cross-platform development library, designed for mobile
  devices. Implemented in C++ and Lua. [Expat][11].
* [libGDX][86] - Cross-platform game development framework. Implemented in
  Java. [Apache 2.0][71].
* [libRocket][270] - An HTML/CSS-based UI library. Implemented in
  C++. [Expat][11].
* [libSDL2pp][271] - A set of C++11 bindings for SDL2. Implemented in
  C++. [zlib][45].
* [LimeJS][87] - A framework for building fast HTML5 games. Implemented in
  ECMAScript. [Apache 2.0][71].
* [LoomSDK][88] - A very large and powerful framework for cross-platform 2D
  game development. Implemented in C++. [Apache 2.0][71].
* [LÖVE][90] - A framework for making 2D games. Implemented in Lua. [zlib][45]
  .
* [LuaStudio][415] - A cross-platform framework/development tool for
  making 2D/3D games. Lua/LuaJIT programming language based. [zlib][45]
* [MINX][92] - MINX Is Not XNA; a framework resembling XNA. Implemented in
  C++. [3-clause BSD][29].
* [p2.js][111] - 2D physics library. Implemented in ECMAScript. [Expat][11].
* [pixi.js][275] - A 2D rendering engine. Implemented in
  ECMAScript. [Expat][11].
* [Polycode][120] - Framework for games and interactive
  applications. Implemented in C++. Has Lua bindings. [Expat][11].
* [PyDark][95] - Game framework on top of PyGame; designed to be easy to pick
  up. Implemented in Python. [Expat][11].
* [PyGame][106] - A set of modules designed for writing games. Implemented in
  Python. [GNU LGPLv2][102] or later.
* [Quasi-Engine][276] - A set of Qt-based tools for game
  development. Implemented in C++. [GNU LGPLv2][102] or later.
* [raylib][390] - Low-level library designed to learn videogames programming.
  Implemented in C, but has Lua and Go bindings. [zlib][45]
* [SDL][46] - Another cross-platform library for low-level tasks, like creating
  windows, accepting user input, and so forth. Implemented in C. [zlib][45].
* [SFML][109] - Simple and Fast Multimedia Library; a multi-platform,
  multi-language, multimedia interface to various computer hardware. Implemented
  in C++. Has a [range of bindings][110]. [3-clause BSD][29].
* [Slick2D][322] - A set of tools to make 2D game development
  easier. Implemented in Java. [3-clause BSD][29].
* [Three.js][69] - A library that makes WebGL easy to use. Implemented in
  ECMAScript. [Expat][11].
* [Tracy][420] - C++ frame profiler. [3-clause BSD][29].
* [voxel.js][67] - A multi-component framework for bulding voxel games for
  modern browsers. Implemented in ECMAScript. [3-clause BSD][29].
* [ZenGL][393] - A cross-platform game development library designed to provide
  necessary functionality for rendering 2D-graphics, handling input, sound output,
  etc. Implemented in Pascal. [zlib][394].

## Utilities ##

This is a catch-all category for things that don't fit anywhere else.

* [Assimp][100] - Open Asset Import Library; a portable way to import various
  well-known 3D model formats in a uniform manner. Implemented in C++, with a
  range of bindings. [3-clause BSD][29].
* [Easel.js][265] - Provides a range of tools to make working with the HTML5
  Canvas API easier. Implemented in ECMAScript. [Expat][11].
* [Gmsh][138] - A 3D finite-element grid generator with a built-in CAD engine
  and post-processor. [GNU GPLv2][14] or later.
* [libcaca][114] - An ASCII graphics rendering library for terminal-based
  interfaces. [WTFPLv2][169].
* [libnoise][101] - A portable coherent noise-generation library. Implemented
  in C++. [GNU LGPLv2][102] or later.
* [PhysicsFS][99] - A library to provide abstract access to various
  archives. [zlib][45].
* [ScummVM][53] - A program which allows you to run certain classic graphical
  point-and-click adventure games, provided you already have their data
  files. [GNU GPLv2][14] or later.
* [Torsion][365] - A TorqueScript IDE. [Expat][11].
* [TrenchBroom][370] - A cross-platform level editor for Quake-engine-based
  games. Currently supports Quake, Quake 2 and Hexen 2 engine-based
  games. [GNU GPLv3][23] or later.
* [WorldForge][135] - Provides everything needed to create your own free
  software MMORPG. [GNU GPLv3][23] or later (or a compatible license).

[1]: https://www.fsf.org/about/what-is-free-software
[2]: http://freedomdefined.org/Definition
[3]: http://7soul1.deviantart.com/gallery/44815788/Free-Stuff
[4]: http://game-icons.net/
[5]: https://creativecommons.org/licenses/by/3.0/
[6]: https://openclipart.org/
[7]: http://opengameart.org/
[8]: http://www.widgetworx.com/spritelib/
[9]: https://directory.fsf.org/wiki/License:CPLv1.0
[10]: http://arnaud.ile.nc/cantree/generator.php
[11]: https://directory.fsf.org/wiki/License:Expat
[12]: http://www.vecteezy.com/
[13]: https://www.yobi3d.com/
[14]: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
[15]: http://www.piskelapp.com/
[16]: http://pngquant.org/
[17]: https://directory.fsf.org/wiki?title=License:FreeBSD
[18]: https://github.com/Kilian/Trimage
[19]: http://overlap2d.com/
[20]: https://directory.fsf.org/wiki/License:Apache2.0
[21]: http://www.mapeditor.org/
[22]: http://www.gimp.org/
[23]: https://www.gnu.org/licenses/gpl.html
[24]: https://inkscape.org/en/
[25]: https://www.blender.org/
[26]: http://www.makehumancommunity.org/
[27]: https://www.gnu.org/licenses/agpl.html
[28]: http://sproxel.blogspot.com.br/p/about-sproxel.html
[29]: https://directory.fsf.org/wiki/License:BSD_3Clause
[30]: http://www.freesound.org/
[31]: https://musopen.org/
[32]: http://soundbible.com/royalty-free-sounds-1.html
[33]: http://audacity.sourceforge.net/
[34]: http://milkytracker.org/?about
[35]: http://www.drpetter.se/project_musagi.html
[36]: http://alleg.sourceforge.net/readme.html
[37]: http://neotextureedit.sourceforge.net/
[38]: https://www.gnu.org/licenses/lgpl.html
[39]: https://cpetry.github.io/TextureGenerator-Online/
[40]: https://cpetry.github.io/NormalMap-Online/
[41]: http://www.ogre3d.org/
[42]: https://en.wikipedia.org/wiki/OGRE#OGRE_ports_and_wrappers
[43]: http://irrlicht.sourceforge.net/
[44]: https://en.wikipedia.org/wiki/Irrlicht_Engine
[45]: https://directory.fsf.org/wiki/License:Zlib
[46]: https://www.libsdl.org/
[47]: https://www.gnu.org/software/freedink/
[48]: http://box2d.org/about/

[50]: http://seanhess.github.io/2015/08/04/practical-haskell-getting-started.html
[51]: http://www.godotengine.org/
[52]: https://en.wikipedia.org/wiki/Godot_%28game_engine%29#Scripting
[53]: http://scummvm.org/
[54]: https://github.com/clintbellanger/flare-engine/
[55]: http://fifengine.net/
[56]: https://opensludge.github.io/
[57]: https://github.com/adventuregamestudio/ags
[58]: https://directory.fsf.org/wiki/License:ArtisticLicense2.0
[59]: http://bulletphysics.org/wordpress/
[60]: http://www.compilgames.net/
[61]: https://www.garagegames.com/products/torque-3d
[62]: https://www.garagegames.com/products/torque-3d/overview/programming
[63]: https://www.garagegames.com/products/torque-2d
[64]: http://phaser.io/
[65]: https://playcanvas.com/
[66]: https://golang.org/doc/effective_go.html
[67]: http://voxeljs.com/
[68]: http://craftyjs.com/
[69]: http://threejs.org/
[70]: http://www.opsound.org/index.php
[71]: https://directory.fsf.org/wiki/License:Apache2.0
[72]: http://bacon2d.com/
[73]: https://github.com/netonjm/ChipmunkSharp
[74]: https://chipmunk-physics.net/
[75]: http://python.cocos2d.org/
[76]: http://cutjs.org/
[77]: http://duality.adamslair.net/
[78]: http://endgate.net/
[79]: http://haxeflixel.com/
[80]: http://kivy.org/#home
[81]: http://mypaint.intilinux.com/
[82]: https://github.com/egonSchiele/actionkid
[83]: http://helm-engine.org/
[84]: https://github.com/LambdaHack/LambdaHack
[85]: https://bandcamp.com/tag/creative-commons
[86]: http://libgdx.badlogicgames.com/
[87]: http://www.limejs.com/
[88]: http://loomsdk.com/
[89]: http://lycheejs.org/index.html
[90]: https://love2d.org/
[91]: http://brm.io/matter-js/
[92]: http://libminx.org/
[93]: http://melonjs.org/
[94]: https://www.reddit.com/r/FreeGaming
[95]: https://github.com/SirFroweey/PyDark
[96]: https://libre.fm/
[97]: https://commons.wikimedia.org/wiki/Main_Page
[98]: https://soundcloud.com/groups/creative-commons
[99]: https://icculus.org/physfs/
[100]: http://assimp.sourceforge.net/
[101]: http://libnoise.sourceforge.net/
[102]: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
[103]: http://meshlab.sourceforge.net/
[104]: https://www.synfig.org/
[105]: http://ngplant.org/
[106]: http://pygame.org/wiki/about
[107]: http://www.renpy.org/
[108]: https://krita.org/
[109]: http://www.sfml-dev.org/index.php
[110]: http://www.sfml-dev.org/download/bindings.php
[111]: https://schteppe.github.io/p2.js/
[112]: http://azul3d.org/
[113]: http://libcinder.org/
[114]: https://github.com/cacalabs/libcaca
[115]: http://www.horde3d.org/
[116]: https://directory.fsf.org/wiki/License:EPLv1.0
[117]: http://www.ode.org/
[118]: https://directory.fsf.org/wiki/License:BSD_4Clause
[119]: https://www.panda3d.org/
[120]: http://polycode.org/
[121]: https://springrts.com/
[122]: https://urho3d.github.io/
[123]: https://notabug.org/SylvieLorxu/HERITAGE
[124]: http://libremusicproduction.com/
[125]: https://creativecommons.org/licenses/by-sa/4.0/
[126]: https://en.wikibooks.org/wiki/Lua_Programming
[127]: https://creativecommons.org/licenses/by-sa/3.0/
[128]: https://wiki.haskell.org/Haskell
[129]: https://joeyh.name/blog/about/
[130]: https://ardour.org/
[131]: http://www.clanlib.org/index.html
[132]: http://www.clanlib.org/license.html
[133]: https://beast.testbit.org/
[134]: http://www.dengine.net/engine
[135]: http://www.worldforge.org/
[136]: https://creativecommons.org/licenses/by/4.0/
[137]: http://www.pawfal.org/fluxus/
[138]: http://geuz.org/gmsh/
[139]: http://hme.sourceforge.net/
[140]: http://jmonkeyengine.org/
[141]: https://github.com/kmkolasinski/AwesomeBump
[142]: https://lmms.io/
[143]: https://vimeo.com/indievelopment/videos
[144]: https://github.com/DrBoolean/mostly-adequate-guide
[145]: https://creativecommons.org/licenses/by-sa/4.0/
[146]: https://goblinrefuge.com/mediagoblin/u/kozross/collection/learn-java-for-beginners/
[147]: https://github.com/dmcinnes/HTML5-Asteroids
[148]: https://github.com/budnix/ball-and-wall
[149]: https://github.com/ellisonleao/clumsy-bird
[150]: https://github.com/leereilly/Coil
[151]: https://github.com/redbluegames/game-off-2013
[152]: https://github.com/varunpant/CrappyBird
[153]: https://github.com/MattSurabian/DuckHunt-JS
[154]: https://github.com/operasoftware/Emberwind
[155]: https://github.com/razh/game-off-2013
[156]: https://github.com/petarov/game-off-2012
[157]: https://github.com/jrgdiz/snake
[158]: https://github.com/Couchfriends/Space-Shooter
[159]: https://github.com/maettig/starship-sorades-13k
[160]: https://github.com/Loopeex/space-crusade
[161]: https://github.com/martindrapeau/backbone-game-engine
[162]: https://github.com/kripken/BananaBread
[163]: https://github.com/CamHenlin/Roguish
[164]: https://github.com/antionio/game-off-2013
[165]: https://github.com/mozilla/BrowserQuest
[166]: https://directory.fsf.org/wiki/License:MPLv2.0
[167]: https://github.com/freeciv/freeciv-web
[168]: https://github.com/morozd/blk-game
[169]: https://github.com/Nurgak/Cube-engine
[170]: https://github.com/Q42/0hn0
[171]: https://github.com/Q42/0hh1
[172]: https://github.com/gabrielecirulli/2048
[173]: https://github.com/doublespeakgames/adarkroom
[174]: https://github.com/cxong/Beatrix
[175]: https://github.com/sweetcarolinagames/BitBot
[176]: http://oxygine.org/
[177]: https://github.com/Aerolab/blockrain.js
[178]: https://github.com/cxong/DrunkenViking
[179]: http://haxepunk.com/
[180]: https://github.com/antila/ludum-dare-28
[181]: https://github.com/abejfehr/parity
[182]: https://github.com/Zolmeister/pond
[183]: https://github.com/dart-lang/sample-pop_pop_win
[184]: https://github.com/Zolmeister/prism
[185]: https://www.reddit.com/r/godot
[186]: https://github.com/Zolmeister/zop
[187]: https://github.com/particle-clicker/particle-clicker
[188]: https://github.com/lpinca/binb
[189]: https://github.com/cshepp/candyjam/
[190]: https://github.com/munificent/hauberk
[191]: https://github.com/KrofDrakula/squirts
[192]: https://github.com/fernjager/game-off-2013
[193]: https://github.com/rohit-n/Clonepoint
[194]: https://github.com/akien-mga/dynadungeons
[195]: https://github.com/BlkStormy/epic-inventor
[196]: https://github.com/cxong/FallingTime
[197]: https://github.com/koonsolo/MysticMine
[198]: https://github.com/petarov/savagewheels
[199]: https://github.com/laochailan/taisei
[200]: https://github.com/teeworlds/teeworlds/
[201]: https://github.com/albertz/openlierox
[202]: https://github.com/ioquake/ioq3
[203]: https://github.com/zturtleman/spearmint
[204]: https://github.com/Turtle-Arena/turtle-arena-code
[205]: https://github.com/LanJian/coffee2d
[206]: https://github.com/Warsow/qfusion
[207]: https://github.com/CleverRaven/Cataclysm-DDA
[208]: https://github.com/EasyRPG/
[209]: https://github.com/jwvhewitt/dmeternal
[210]: https://github.com/egoboo/egoboo
[211]: https://github.com/clintbellanger/flare-game
[212]: https://github.com/Nooskewl/monster
[213]: https://github.com/Nooskewl/monster-rpg-2
[214]: https://github.com/riksweeney/edgar
[215]: https://github.com/SuperTux/supertux
[216]: https://github.com/Tiehuis/2048-cli
[217]: https://github.com/alewmoose/2048-in-terminal
[218]: https://goblinrefuge.com/mediagoblin/u/kozross/collection/functional-programming-in-javascript/
[219]: https://github.com/DusteDdk/Wizznic
[220]: https://github.com/devnewton/newton_adventure
[221]: https://github.com/devnewton/nedetlesmaki
[222]: https://directory.fsf.org/wiki/License:Free-Art-L-v1.3
[223]: https://github.com/stuntrally/stuntrally
[224]: https://github.com/supertuxkart/stk-code
[225]: https://github.com/Blackvoxel/Blackvoxel
[226]: https://github.com/fogleman/Craft
[227]: https://github.com/endless-sky/endless-sky
[228]: https://github.com/freeminer/freeminer
[229]: https://github.com/minetest/minetest
[230]: https://github.com/MovingBlocks/Terasology
[231]: https://github.com/simtr/The-Powder-Toy
[232]: https://www.google.com/fonts
[233]: https://github.com/colobot/colobot
[234]: https://github.com/a-nikolaev/curseofwar
[235]: https://github.com/SimHacker/micropolis
[236]: https://github.com/OpenDungeons/OpenDungeons
[237]: http://mislav.uniqpath.com/poignant-guide/book/chapter-1.html
[238]: https://github.com/henkboom/pax-britannica
[239]: https://github.com/pioneerspacesim/pioneer
[240]: https://mitpress.mit.edu/sicp/full-text/book/book.html
[241]: https://github.com/the3dfxdude/7kaa
[242]: https://github.com/tales/sourceoftales
[243]: https://github.com/w84death/Tanks-of-Freedom
[244]: https://github.com/wesnoth/wesnoth
[245]: https://github.com/unknown-horizons/unknown-horizons
[246]: https://github.com/int6/voxeliq
[247]: https://directory.fsf.org/wiki/License:MsPL
[248]: https://github.com/Warzone2100/warzone2100
[249]: https://github.com/ZeroK-RTS/Zero-K
[250]: https://github.com/MegaGlest/megaglest-source
[251]: https://github.com/gamedolphin/Lost-Beneath-The-Surface
[252]: https://github.com/gamedolphin/Masonry-JavaScript-Tetris-Clone
[253]: https://github.com/gamedolphin/javascript_snake
[254]: https://github.com/gamedolphin/follow_me_javascript_simon_clone
[255]: https://github.com/chuvidi2003/GidiGames
[256]: https://github.com/watabou/pixel-dungeon
[257]: https://github.com/chuvidi2003/PuzzleGame
[258]: https://github.com/Akihabara/akihabara
[259]: https://github.com/kripken/ammo.js
[260]: https://github.com/BabylonJS/Babylon.js
[261]: https://github.com/bkaradzic/bgfx
[262]: https://github.com/ChilliWorks/ChilliSource
[263]: https://github.com/ZhouWeikuan/cocos2d/tree/master/cocos2d-android
[264]: https://github.com/cocos2d/cocos2d-html5
[265]: https://github.com/CreateJS/EaselJS/
[266]: https://github.com/gameplay3d/GamePlay
[267]: https://github.com/krotik/gladiator_3d
[268]: http://www.gamedevradio.com/
[269]: https://github.com/gamelab/kiwi.js
[270]: https://github.com/librocket/librocket
[271]: https://github.com/AMDmi3/libSDL2pp
[272]: https://github.com/lo-th/Oimo.js
[273]: https://github.com/ekelokorpi/panda.js-engine
[274]: https://github.com/wellcaffeinated/PhysicsJS
[275]: https://github.com/pixijs/pixi.js
[276]: https://github.com/INdT/Quasi-Engine
[277]: https://github.com/turbulenz/turbulenz_engine
[278]: https://github.com/city41/breakouts
[279]: https://github.com/GameJs/gamejs
[280]: http://markburgess.org/CTutorial/GNU-ctut.pdf
[281]: https://www.gnu.org/licenses/fdl.html
[282]: http://www.network-theory.co.uk/docs/pytut/
[283]: https://directory.fsf.org/wiki?title=License:Python2.0.1
[284]: http://www.diveintopython.net/
[285]: https://en.wikibooks.org/wiki/Haskell
[286]: https://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro
[287]: https://www.jamendo.com/
[288]: https://openclipart.org/
[289]: https://creativecommons.org/publicdomain/zero/1.0/
[290]: https://github.com/grumdrig/jsfxr
[291]: https://github.com/google/material-design-icons
[292]: http://castle-engine.sourceforge.net/
[293]: https://github.com/gamekit-developers/gamekit
[294]: http://incompetech.com/music/royalty-free/
[295]: http://www.openmusicarchive.org/
[296]: http://www.blender-models.com/
[297]: http://www.katorlegaz.com/3d_models/index.php
[298]: http://mocapdata.com/
[300]: http://tango.freedesktop.org/
[301]: http://openfontlibrary.org/
[302]: http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL&_sc=1
[303]: https://www.theleagueofmoveabletype.com/
[304]: http://ccmixter.org/
[305]: http://unlicense.org/
[306]: http://www.cocos2d-x.org/
[307]: http://www.kivent.org/
[308]: http://enigma-dev.org/
[309]: http://enigma-dev.org/docs/Wiki/LateralGM
[310]: http://pulkomandy.tk/projects/GrafX2
[311]: http://www.maratis3d.org/
[313]: https://processing.org/
[314]: https://icculus.org/twilight/darkplaces/
[315]: http://orx-project.org/
[316]: https://www.reddit.com/r/freeculture/
[317]: http://playn.io/
[318]: https://www.libgosu.org/
[319]: http://getmoai.com/
[320]: http://opensource.org/licenses/CPAL-1.0
[321]: http://drpetter.se/project_sfxr.html
[322]: http://slick.ninjacave.com/
[323]: https://www.reddit.com/r/freesoftware/
[324]: http://freepo.st/community/FreeGaming
[325]: http://freepo.st
[326]: http://forum.freegamedev.net/
[327]: https://libregamewiki.org/Main_Page
[328]: http://www.freemusicarchive.org/
[329]: https://github.com/aduros/flambe
[330]: https://learn.saylor.org/course/index.php?categoryid=9
[331]: https://notabug.org/koz.ross/remastered-tyrian-graphics
[332]: https://notabug.org/koz.ross/java-for-complete-beginners
[333]: https://notabug.org/koz.ross/cpp-tutorial-for-beginners
[334]: https://notabug.org/koz.ross/fp-in-js
[335]: https://notabug.org/koz.ross/javafx-tutorial
[336]: https://wiki.haskell.org/Haskell_Tutorial_for_C_Programmers
[337]: https://notabug.org/koz.ross/java-collections-framework
[338]: https://notabug.org/koz.ross/java-multithreading
[339]: https://github.com/dommmel/coffee-snake
[340]: https://notabug.org/koz.ross/beginner-2d-game-programming
[341]: https://github.com/inexor-game/audioaugust
[343]: http://flif.info/
[344]: http://dthompson.us/pages/software/sly.html
[345]: https://musical-artifacts.com/artifacts
[346]: http://www.paratype.com/public/
[347]: http://www.paratype.com/public/pt_openlicense_eng.asp
[348]: https://github.com/Moosader/Kuko
[349]: http://giderosmobile.com/
[350]: https://github.com/Moosader/Intro-to-Mobile-Game-Development-2015
[351]: https://notabug.org/koz.ross/advanced-cpp
[352]: https://en.wikiversity.org/wiki/School:Game_design
[353]: https://github.com/gabrielecirulli/2048
[354]: https://github.com/BlkStormy/epic-inventor
[355]: http://www.blendswap.com/
[356]: http://www.duion.com/games/uebergame/main
[357]: http://superpowers-html5.com/index.en.html
[358]: http://directory.fsf.org/wiki/License:ISC
[359]: https://github.com/particle-clicker/particle-clicker
[360]: https://github.com/KOBUGE-Games/minilens
[361]: http://peers.community/
[362]: http://www.puzzlescript.net/
[363]: http://www.zipup.me/category/free-game-elements/
[364]: http://abau.org/dilay/
[365]: https://github.com/SickheadGames/Torsion
[366]: http://www.hydrogen-music.org/hcms/
[368]: https://www.silvermansound.com/free-music
[369]: http://anki3d.org/
[370]: http://kristianduske.com/trenchbroom/
[371]: https://alephone.lhowon.org/
[372]: https://arianne-project.org/
[373]: http://delta3d.org/
[374]: http://filipwasil.bitbucket.org/fillwave/
[375]: http://www.solarus-games.org/
[376]: https://github.com/a1studmuffin/SpaceshipGenerator
[377]: https://github.com/MaxSavenkov/drdestructo2
[378]: http://pcg.wikidot.com/
[379]: https://octaforge.org/
[380]: http://directory.fsf.org/wiki/License:IllinoisNCSA
[381]: https://github.com/anholt/libepoxy
[382]: https://notabug.org/jorgesumle/pygame_stuff
[383]: https://notabug.org/jorgesumle/bullet_dodger
[384]: https://savannah.nongnu.org/projects/retux
[385]: http://www.wowa.me/archive
[386]: https://rogueboxadventures.tuxfamily.org/
[387]: http://stellarengine.nongnu.org/
[388]: http://hexoshi.nongnu.org/
[389]: http://openclonk.org/
[390]: http://www.raylib.com/
[391]: https://github.com/raysan5/rfxgen
[392]: http://osgameclones.com/
[393]: http://www.zengl.org/
[394]: http://www.zengl.org/license.html
[395]: http://gaurav.munjal.us/Universal-LPC-Spritesheet-Character-Generator/
[396]: http://google.github.io/liquidfun/
[400]: https://github.com/ocornut/imgui
[401]: http://www.glfw.org/
[402]: https://github.com/CedricGuillemet/ImGuizmo
[403]: https://opensource.org/licenses/MIT
[405]: https://github.com/FortAwesome/Font-Awesome/
[406]: http://www.fatcow.com/free-icons
[411]: https://github.com/nicodinh/kenney-icon-font/
[412]: https://github.com/juliettef/IconFontCppHeaders
[413]: https://gamesounds.xyz/
[414]: https://github.com/skywind3000/kcp/blob/master/README.en.md
[415]: https://scormpool.com/luastudio
[416]: https://github.com/dagostinelli/hypatia
[417]: https://github.com/gurkenlabs/litiengine
[418]: https://www.orama-interactive.com/pixelorama
[419]: https://github.com/RodZill4/material-maker
[420]: https://github.com/wolfpld/tracy


code:
# Wall of Shame #

This is a list of everything that did *not* make the list, or made the list and got cut. It is divided into two categories - one is stuff that *seems* free, but actually has severe nonfree dependencies, while the other is simply not clearly indicated one way or the other.

If you find anything on awesome-gamedev that should be put on the Wall of Shame, please let me know!

This is released under the GNU Free Documentation License - its text is provided in the LICENSE file.

Pretends to be free, but isn't
==============================

* Bfxr - relies on a proprietary runtime. Use sfxr/jsfxr instead.
* Bridges - only works on a proprietary platform.
* Canabalt - only works on a proprietary platform.
* Citrus - relies on a proprietary runtime.
* Codename Lumberjack - relies on a proprietary runtime.
* Dash - relies on a proprietary compiler.
* Ejecta - only works on a proprietary platform.
* EKG Runner - depends on a nonfree library.
* Ending - relies on a proprietary runtime.
* Farseer - depends on nonfree build tools.
* FlashPunk - relies on a proprietary runtime.
* Flixel - relies on a proprietary runtime. Use HaxeFlixel instead.
* GenesisEngine - relies on a proprietary build system and OS.
* Grit - depends on libCG.
* Hotfix - depends on a proprietary engine.
* MightyEditor - says it's 'open source', uses nonfree license.
* Monkey - graphics module is nonfree
* PuzzleDash - depends on a proprietary compiler.
* Sandbox Maker - based on free software, says it's 'open source', uses nonfree license.
* Starling - relies on a proprietary runtime.
* TransCube - depends on nonfree libraries.

Unclear
=======

* Blend4Web - Doesn't specify GPL version in program.
* Hextris - Doesn't specify GPL version in program.
* JiGS - Doesn't specify GPL version in program, has 'all rights reserved' components.
* Jitter - claims to be free, no clear licensing terms found, built for .NET (which doesn't hold much hope).
* Lichess - relies on questionably-free components.


code:
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# pyenv
.python-version

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/

repo_name: stochastic/AngloPyson

path: .gitignore


code:
import json
import os
import re
import string

from collections import ChainMap

# Load JSON
dirname = os.path.dirname(os.path.abspath(__file__))
filename = os.path.join(dirname, 'words_dictionary.json')
with open(filename) as f:
    data = json.load(f)

# Reverse Dictionary for use when converting Anglo-Saxon -> Modern
reverse = dict([(value, key) for key, value in data.items()]) # Removes punctuation in input

# Group the 2 Dictionaries via a ChainMap
cm = ChainMap(data, reverse)

punctuation = re.compile(r"[^\W]+|[\.]")
userInput = punctuation.findall(input("Insert Phrase Here: \n").lower())

# Main loop
print(" ".join(cm.get(word, word) for word in userInput))


code:
# AngloPyson
A Translator from Modern English to Anglo-Saxon (Olde English) and Vice-Versa!

Special thanks to [farey0633](https://twitter.com/farey0633) for helping me out with the translation.

## Demo
![](demo.gif)


nama

able: cunnan

about: ealmæst

absolute: æghwæs

accept: licwierþe

account: tellan

achieve: æfnan

across: þurh

act: don

active: fram

add: eaca

address: cwidegiedd

admit: licwierþe

affect: gefremman

afford: gefremman

after: æfter

again: æftersona

against: ongean

age: ealddom

agent: gerefa

ago: beforan

agree: gecweþan

air: lyft

all: eall

allow: eall

almost: ætrihte

along: be

already: gearu

alright: god

also: æc

always: æfre

amount: andefn

and: ge

answer: andswarian

any: ænig

apart: syndrig

appear: æteowian

apply: biddan

appoint: betæcan

approach: néosung

appropriate: niman

are: earon

area: scir

around: abutan

arrange: fadian

art: list

ask: ascian

associate: bindan

assume: niman

at: æt

attend: cepan

authority: anweald

away: gecýðig

awful: egeslic

back: bæc

bad: yfel

bag: huntian

balance: anmitta

ball: æppel

bank: eastæþ

bar: mæþ

base: gaf

banish: aflieman

banished: afliemanode

be: beon

bear: acennan

beat: swingan

beauty: fægernes

because: forþon

bed: bedd

before: beforan

begin: beginnan

behind: beæftan

believe: geliefan

benefit: þearf

best: betst

between: betweonan

big: great

bill: bile

birth: acennednes

bit: stycce

black: blæc

bloke: guma

blood: blod

blow: ablawan

blue: blew

boat: bat

body: bancofa

book: boc

both: begen

bottle: flasce

bottom: botm

bored: borianode

box: ciest

boy: cnapa

break: brecan

brief: scort

brilliant: beorht

bring: brengan

britain: Breten

brother: broþor

build: atimbran

business: ærende

comment: ymbsprǽc

document: boc

question: befrignan

story: saga

subject: gewealden


code:
test.py

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
.pybuilder/
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
#   For a library or package, you might want to ignore these files since the code is
#   intended to run in multiple environments; otherwise, check them in:
# .python-version

# pipenv
#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
#   However, in case of collaboration, if having platform-specific dependencies or dependencies
#   having no cross-platform support, pipenv may install dependencies that don't work, or not
#   install all needed dependencies.
#Pipfile.lock

# poetry
#   Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
#   This is especially recommended for binary packages to ensure reproducibility, and is more
#   commonly ignored for libraries.
#   https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock

# pdm
#   Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
#   pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
#   in version control.
#   https://pdm.fming.dev/#use-with-ide
.pdm.toml

# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/

# Celery stuff
celerybeat-schedule
celerybeat.pid

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# pytype static type analyzer
.pytype/

# Cython debug symbols
cython_debug/

# PyCharm
#  JetBrains specific template is maintained in a separate JetBrains.gitignore that can
#  be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
#  and can be added to the global gitignore or merged into this file.  For a more nuclear
#  option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/

repo_name: Humming/Owl


code:
<?xml version="1.0" encoding="utf-8"?>
<!--
  This XSD was made with the information written in
  https://aerialx.github.io/rvlution.net/wiki/Patch_Format/
  I... won't support params or ocarina/search patches for now
  as I have not seen anyone using that in SMG modding
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <!-- wiidisc element -->
  <xs:element name="wiidisc">
    <xs:complexType>
      <!-- wiidisc childs -->
      <xs:sequence>

        <!-- id element -->
        <xs:element name="id" minOccurs="0">
          <xs:complexType>
            <!-- id childs -->
            <xs:sequence>

              <!-- region element -->
              <xs:element name="region" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <!-- region attribs -->
                  <xs:attribute name="type" use="required">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <!-- 1 uppercase letter to identify the region -->
                        <xs:pattern value="[A-Z]"/>
                        <xs:maxLength value="1"/>
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:attribute>
                </xs:complexType>
              </xs:element>

            </xs:sequence>
            <!-- id attribs -->
            <xs:attribute name="game" use="optional">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <!-- 3/4 letter uppercase code of the Wii game id -->
                  <xs:pattern value="([0-9A-Z]){3,4}"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:attribute>
            <xs:attribute name="developer" use="optional">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <!-- 2 letter uppercase code of the Wii game developer id -->
                  <xs:pattern value="([0-9A-Z]){2}"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:attribute>
            <xs:attribute name="disc" type="pos_int" use="optional"/>
            <xs:attribute name="version" type="pos_int" use="optional"/>
          </xs:complexType>
        </xs:element>

        <!-- options element -->
        <xs:element name="options" minOccurs="1">
          <xs:complexType>
            <!-- options childs -->
            <xs:sequence>

              <!-- section element -->
              <xs:element name="section" minOccurs="1" maxOccurs="unbounded">
                <xs:complexType>
                  <!-- section childs -->
                  <xs:sequence>

                    <!-- option element -->
                    <xs:element name="option" minOccurs="1" maxOccurs="unbounded">
                      <xs:complexType>
                        <!-- option childs -->
                        <xs:sequence>

                          <!-- choice element -->
                          <xs:element name="choice" minOccurs="1" maxOccurs="unbounded">
                            <xs:complexType>
                              <!-- choice childs -->
                              <xs:sequence>

                                <!-- patch element -->
                                <xs:element name="patch" minOccurs="1" maxOccurs="unbounded">
                                  <xs:complexType>
                                    <!-- patch attribs -->
                                    <xs:attribute name="id" type="xs:string" use="required"/>
                                  </xs:complexType>
                                </xs:element>

                              </xs:sequence>
                              <!-- choice attribs -->
                              <xs:attribute name="name" type="xs:string" use="required"/>
                            </xs:complexType>
                          </xs:element>

                        </xs:sequence>
                        <!-- option attribs -->
                        <xs:attribute name="id" type="xs:string" use="optional"/>
                        <xs:attribute name="name" type="xs:string" use="required"/>
                        <xs:attribute name="default" use="optional">
                          <xs:simpleType>
                            <!-- 0 or 1 (I think) -->
                            <xs:restriction base="pos_int">
                              <xs:maxInclusive value="1"/>
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:attribute>
                      </xs:complexType>
                    </xs:element>

                  </xs:sequence>
                  <!-- section attribs -->
                  <xs:attribute name="name" type="xs:string" use="required"/>
                </xs:complexType>
              </xs:element>

            </xs:sequence>
          </xs:complexType>
        </xs:element>

        <!-- patch element -->
        <xs:element name="patch" minOccurs="1" maxOccurs="unbounded">
          <xs:complexType>

            <!-- patch childs -->
            <xs:choice minOccurs="0" maxOccurs="unbounded">

                <!-- file element -->
                <xs:element name="file" minOccurs="0" maxOccurs="unbounded">
                  <xs:complexType>
                    <!-- file attribs -->
                    <xs:attribute name="disc" type="xs:string" use="required"/>
                    <xs:attribute name="external" type="xs:string" use="required"/>
                    <xs:attribute name="resize" type="xs:boolean" use="optional"/>
                    <xs:attribute name="create" type="xs:boolean" use="optional"/>
                    <xs:attribute name="offset" type="hex_dec_int" use="optional"/>
                    <xs:attribute name="length" type="hex_dec_int" use="optional"/>
                  </xs:complexType>
                </xs:element>

                <!-- folder element -->
                <xs:element name="folder" minOccurs="0" maxOccurs="unbounded">
                  <xs:complexType>
                    <!-- folder attribs -->
                    <xs:attribute name="disc" type="xs:string" use="optional"/>
                    <xs:attribute name="external" type="xs:string" use="required"/>
                    <xs:attribute name="resize" type="xs:boolean" use="optional"/>
                    <xs:attribute name="create" type="xs:boolean" use="optional"/>
                    <xs:attribute name="recursive" type="xs:boolean" use="optional"/>
                    <xs:attribute name="length" type="hex_dec_int" use="optional"/>
                  </xs:complexType>
                </xs:element>

                <!-- savegame element -->
                <xs:element name="savegame" minOccurs="0" maxOccurs="unbounded">
                  <xs:complexType>
                    <!-- savegame attribs -->
                    <xs:attribute name="external" type="xs:string" use="required"/>
                    <xs:attribute name="clone" type="xs:boolean" use="optional"/>
                  </xs:complexType>
                </xs:element>

                <!-- memory element -->
                <xs:element name="memory" minOccurs="0" maxOccurs="unbounded">
                  <xs:complexType>
                    <!-- memory attribs -->
                    <xs:attribute name="offset" type="hex_dec_int" use="required"/>
                    <!-- honestly it is dumb that I cannot have a choice-like thing for attributes -->
                    <xs:attribute name="value" type="hex_str" use="optional"/>
                    <xs:attribute name="valuefile" type="xs:string" use="optional"/>
                    <xs:attribute name="original" type="hex_str" use="optional"/>
                  </xs:complexType>
                </xs:element>

            </xs:choice>
            <!-- patch attribs -->
            <xs:attribute name="id" type="xs:string" use="required"/>
            <xs:attribute name="root" type="xs:string" use="optional"/>
          </xs:complexType>
        </xs:element>

      </xs:sequence>
      <!-- wiidisc attributes -->
      <xs:attribute name="version" use="required">
        <xs:simpleType>
          <xs:restriction base="hex_dec_int">
            <!-- Riivolution v1 only accepts version="1" XMLs -->
            <xs:enumeration value="1"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="root" type="xs:string" use="optional"/>
    </xs:complexType>
  </xs:element>

  <!-- custom data types -->
  <!-- hex/dec integer -->
  <xs:simpleType name="hex_dec_int">
    <xs:restriction base="xs:string">
      <!-- match this lol -->
      <xs:pattern value="0x[0-9a-fA-F]+|[0-9]+"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- positive integer -->
  <xs:simpleType name="pos_int">
    <xs:restriction base="xs:integer">
      <!-- major or equal to 0 -->
      <xs:minInclusive value="0"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- hex string -->
  <xs:simpleType name="hex_str">
    <xs:restriction base="xs:string">
      <!-- match this lol -->
      <xs:pattern value="(0x)?([0-9a-fA-F]{2})+"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>


code:
It is required to use Python 3.8

Python modules required:
- lxml (to read XMLs)
- PyQt5 (GeckoLoader)
- chardet (GeckoLoader)
- bs4 (GeckoLoader)

Usage:
  Windows:
    py -3.8 main.py "path/to/iso/wbfs/file" "path/to/riiv/xml" "path/to/mod/files/folder"
  Linux:
    python3.8 main.py "path/to/iso/wbfs/file" "path/to/riiv/xml" "path/to/mod/files/folder"

For games that have "original" memory patches conditions you have to download a ram dump of your game (region specific) and put it in the "ram_dumps" folder.

This riivolution patcher is supposed to work with SMG1/2 mods but it might work with other games. The only thing is that "ocarina", "offset", and similar condition patches are not supported and custom savefiles will need to be manually handled (will depend on the mod, you may use SaveGame Manager GX for that).

For SMG1/2 here is a link of the ram dumps I could find:
https://archive.org/download/SMG_1-2_All-Regions

Name them exactly as the game id of your game.

Examples:
- SMG1 USA --> Game ID: RMGE01 --> Ram dump name: RMGE01.bin
- SMG2 EUR --> Game ID: SB4P01 --> Ram dump name: SB4P01.bin

After the end of the patching process, a "result.wbfs" file will be created with the mod applied to it. You can test the file with the USB Loader of your choice >:] (hope it works lol)

This tool will enforce that the Riivolution XML is correct before applying a mod. So if a XML file isn't formatted right in the slightest the tool will complain about it (i.e. it will be usual that the tool won't accept an XML lol). If you have trouble finding out which is the XML issue (if you have any), open an issue and let me know.

TODO:
- see if I can implement the other weird riivolution features.

Thanks to:
- Wiimm for his epik WIT tool
- JoshuaMKW for his GeckoLoader tool
Without those tools this tool would not be possible at all

path: README