├── .gitattributes ├── FileSaver.js ├── ImageConverter.html ├── LICENSE ├── README.md ├── asm.js ├── compiler.js ├── cpu.js ├── example.js ├── example ├── 1916.c ├── 2048.c ├── 6502.c ├── Blackjack.c ├── OlympusMons.c ├── asteroids.c ├── attack.c ├── badapplex16.c ├── bashe.c ├── bench.c ├── brainf.c ├── breakout.c ├── calculator.c ├── cardrpg.c ├── chip8.c ├── cityrunner.c ├── clicker.c ├── columns.c ├── darkmaze.c ├── dragonfractal.c ├── drawCircle.c ├── drawinimgtest.c ├── esprogue.c ├── example.c ├── fire_demo.c ├── fish_life.c ├── fisherman.c ├── flappybird.c ├── flappybyrd.c ├── fourinrow.c ├── frozenworld.c ├── galaxies.c ├── gameoflife.c ├── intro.c ├── keytest.c ├── logo.c ├── mars_attack.c ├── mathbench.c ├── maze.c ├── memories.c ├── microBasic.c ├── microrace.c ├── mines.c ├── ninjaescape.c ├── platformer.c ├── race.c ├── raycast.c ├── raycast2.c ├── snake.c ├── sound_test.c ├── space.c ├── spacefighter.c ├── sprites.c ├── sudoku.c ├── tang.c ├── tankCity.c ├── tech_demo.c ├── testcollision.c ├── testinterrupt1.c ├── tile.c ├── towerdefence.c ├── wormblast.c └── zombie_defense.c ├── favicon.png ├── font.js ├── function ├── malloc.asm └── printf.asm ├── games.png ├── gifjs ├── gif.js ├── gif.js.map ├── gif.worker.js └── gif.worker.js.map ├── img ├── IMG_0001_1.jpg ├── IMG_0001_2.png ├── cityrunner.gif ├── clicker.gif ├── collision.gif ├── columns.gif ├── flappybird.gif ├── galaxies.gif ├── gameoflife.gif ├── mars_attack.gif ├── memories.gif ├── pi.gif ├── race.gif ├── rpg.gif ├── snake.gif ├── tile.gif └── towerdef.gif ├── index.html ├── opcodes.txt ├── saveashtml.js ├── sound.js ├── soundEditor.html ├── spriteEditor.js ├── style.css ├── test.html └── ui.js /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto -------------------------------------------------------------------------------- /FileSaver.js: -------------------------------------------------------------------------------- 1 | /* FileSaver.js 2 | * A saveAs() FileSaver implementation. 3 | * 1.3.2 4 | * 2016-06-16 18:25:19 5 | * 6 | * By Eli Grey, http://eligrey.com 7 | * License: MIT 8 | * See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md 9 | */ 10 | 11 | /*global self */ 12 | /*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */ 13 | 14 | /*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */ 15 | 16 | var saveAs = saveAs || (function(view) { 17 | "use strict"; 18 | // IE <10 is explicitly unsupported 19 | if (typeof view === "undefined" || typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) { 20 | return; 21 | } 22 | var 23 | doc = view.document 24 | // only get URL when necessary in case Blob.js hasn't overridden it yet 25 | , get_URL = function() { 26 | return view.URL || view.webkitURL || view; 27 | } 28 | , save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a") 29 | , can_use_save_link = "download" in save_link 30 | , click = function(node) { 31 | var event = new MouseEvent("click"); 32 | node.dispatchEvent(event); 33 | } 34 | , is_safari = /constructor/i.test(view.HTMLElement) || view.safari 35 | , is_chrome_ios =/CriOS\/[\d]+/.test(navigator.userAgent) 36 | , throw_outside = function(ex) { 37 | (view.setImmediate || view.setTimeout)(function() { 38 | throw ex; 39 | }, 0); 40 | } 41 | , force_saveable_type = "application/octet-stream" 42 | // the Blob API is fundamentally broken as there is no "downloadfinished" event to subscribe to 43 | , arbitrary_revoke_timeout = 1000 * 40 // in ms 44 | , revoke = function(file) { 45 | var revoker = function() { 46 | if (typeof file === "string") { // file is an object URL 47 | get_URL().revokeObjectURL(file); 48 | } else { // file is a File 49 | file.remove(); 50 | } 51 | }; 52 | setTimeout(revoker, arbitrary_revoke_timeout); 53 | } 54 | , dispatch = function(filesaver, event_types, event) { 55 | event_types = [].concat(event_types); 56 | var i = event_types.length; 57 | while (i--) { 58 | var listener = filesaver["on" + event_types[i]]; 59 | if (typeof listener === "function") { 60 | try { 61 | listener.call(filesaver, event || filesaver); 62 | } catch (ex) { 63 | throw_outside(ex); 64 | } 65 | } 66 | } 67 | } 68 | , auto_bom = function(blob) { 69 | // prepend BOM for UTF-8 XML and text/* types (including HTML) 70 | // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF 71 | if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) { 72 | return new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type}); 73 | } 74 | return blob; 75 | } 76 | , FileSaver = function(blob, name, no_auto_bom) { 77 | if (!no_auto_bom) { 78 | blob = auto_bom(blob); 79 | } 80 | // First try a.download, then web filesystem, then object URLs 81 | var 82 | filesaver = this 83 | , type = blob.type 84 | , force = type === force_saveable_type 85 | , object_url 86 | , dispatch_all = function() { 87 | dispatch(filesaver, "writestart progress write writeend".split(" ")); 88 | } 89 | // on any filesys errors revert to saving with object URLs 90 | , fs_error = function() { 91 | if ((is_chrome_ios || (force && is_safari)) && view.FileReader) { 92 | // Safari doesn't allow downloading of blob urls 93 | var reader = new FileReader(); 94 | reader.onloadend = function() { 95 | var url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;'); 96 | var popup = view.open(url, '_blank'); 97 | if(!popup) view.location.href = url; 98 | url=undefined; // release reference before dispatching 99 | filesaver.readyState = filesaver.DONE; 100 | dispatch_all(); 101 | }; 102 | reader.readAsDataURL(blob); 103 | filesaver.readyState = filesaver.INIT; 104 | return; 105 | } 106 | // don't create more object URLs than needed 107 | if (!object_url) { 108 | object_url = get_URL().createObjectURL(blob); 109 | } 110 | if (force) { 111 | view.location.href = object_url; 112 | } else { 113 | var opened = view.open(object_url, "_blank"); 114 | if (!opened) { 115 | // Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html 116 | view.location.href = object_url; 117 | } 118 | } 119 | filesaver.readyState = filesaver.DONE; 120 | dispatch_all(); 121 | revoke(object_url); 122 | } 123 | ; 124 | filesaver.readyState = filesaver.INIT; 125 | 126 | if (can_use_save_link) { 127 | object_url = get_URL().createObjectURL(blob); 128 | setTimeout(function() { 129 | save_link.href = object_url; 130 | save_link.download = name; 131 | click(save_link); 132 | dispatch_all(); 133 | revoke(object_url); 134 | filesaver.readyState = filesaver.DONE; 135 | }); 136 | return; 137 | } 138 | 139 | fs_error(); 140 | } 141 | , FS_proto = FileSaver.prototype 142 | , saveAs = function(blob, name, no_auto_bom) { 143 | return new FileSaver(blob, name || blob.name || "download", no_auto_bom); 144 | } 145 | ; 146 | // IE 10+ (native saveAs) 147 | if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) { 148 | return function(blob, name, no_auto_bom) { 149 | name = name || blob.name || "download"; 150 | 151 | if (!no_auto_bom) { 152 | blob = auto_bom(blob); 153 | } 154 | return navigator.msSaveOrOpenBlob(blob, name); 155 | }; 156 | } 157 | 158 | FS_proto.abort = function(){}; 159 | FS_proto.readyState = FS_proto.INIT = 0; 160 | FS_proto.WRITING = 1; 161 | FS_proto.DONE = 2; 162 | 163 | FS_proto.error = 164 | FS_proto.onwritestart = 165 | FS_proto.onprogress = 166 | FS_proto.onwrite = 167 | FS_proto.onabort = 168 | FS_proto.onerror = 169 | FS_proto.onwriteend = 170 | null; 171 | 172 | return saveAs; 173 | }( 174 | typeof self !== "undefined" && self 175 | || typeof window !== "undefined" && window 176 | || this.content 177 | )); 178 | // `self` is undefined in Firefox for Android content script context 179 | // while `this` is nsIContentFrameMessageManager 180 | // with an attribute `content` that corresponds to the window 181 | 182 | if (typeof module !== "undefined" && module.exports) { 183 | module.exports.saveAs = saveAs; 184 | } else if ((typeof define !== "undefined" && define !== null) && (define.amd !== null)) { 185 | define("FileSaver.js", function() { 186 | return saveAs; 187 | }); 188 | } 189 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2018, corax89 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | * Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | * Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | * Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # game engine for esp8266 game console with compiler 2 | 3 | Firmware for gaming console on esp8266 [https://github.com/corax89/esp8266_game_engine](https://github.com/corax89/esp8266_game_engine) 4 | 5 | ![columns](/img/columns.gif) ![snake](/img/snake.gif) ![race](/img/race.gif) ![gameoflife](/img/gameoflife.gif) ![mars_attack](/img/mars_attack.gif) ![tile](/img/tile.gif) 6 | ![clicker](/img/clicker.gif) ![flappybird](/img/flappybird.gif) ![towerdefence](/img/towerdef.gif) ![cityrunner](/img/cityrunner.gif) 7 | ![galaxies](/img/galaxies.gif) ![memories](/img/memories.gif) 8 | 9 | Gaming device that can be programmed directly from the browser. Here is the compiler of the subset C into bytecode and the virtual machine written in js. 10 | VM has access to 65,534 bytes of memory, only 20,000 bytes are available on the device itself, since the remaining memory goes to the screen buffer and library. 11 | The screen has a size of 128x128 pixels, each pixel can take one of the 16 colors of the palette. The first color is transparent. There are 32 soft sprites available. 12 | The compiler supports int and unsigned char types, one-dimensional arrays, debugging 13 | 14 | ![палитра](/img/IMG_0001_2.png) 15 | 16 | Попытка сделать игровое устройство, которое можно программировать прямо из браузера. Здесь находится компилятор подмножества си в байткод и виртуальная машина, написанные на js. 17 | VM имеет доступ к 65 534 байтам памяти, на самом устройстве доступно лишь 20 000 байт, т.к. остальная память уходит на буфер экрана и библиотеки. 18 | Экран имеет размер 128x128 пикселей, каждый пиксель может принимать один из 16 цветов палитры. Первый цвет является прозрачным. Доступно 32 софтовых спрайта. 19 | 20 | Компилятор поддерживает типы int и unsignet char, одномерные массивы, создание и вызов функций, отладку 21 | 22 | Игровая консоль сделана на основе корпуса gameboy 23 | 24 | ![esp8266 game console](/img/IMG_0001_1.jpg) 25 | 26 | 27 | -------------------------------------------------------------------------------- /example/2048.c: -------------------------------------------------------------------------------- 1 | int arr[16]; 2 | int i,ii,j,score; 3 | char key,r,ok,end,newn; 4 | 5 | void init(){ 6 | for(i = 0; i < 16; i++) 7 | arr[i] = 0; 8 | score = 0; 9 | gotoxy(3,3); 10 | printf("\n"); 11 | } 12 | 13 | int shiftLeft(char n){ 14 | for(ii = 0; ii < 4;ii++) 15 | for(i = n*4; i < n*4 + 3; i++) 16 | if(arr[i] == 0){ 17 | arr[i] = arr[i + 1]; 18 | arr[i + 1] = 0; 19 | } 20 | for(i = n*4; i < n*4 + 3; i++) 21 | if(arr[i] == arr[i + 1]){ 22 | arr[i] = arr[i] * 2; 23 | score = score + arr[i]; 24 | arr[i + 1] = 0; 25 | } 26 | for(ii = 0; ii < 4;ii++) 27 | for(i = n*4; i < n*4 + 3; i++) 28 | if(arr[i] == 0){ 29 | arr[i] = arr[i + 1]; 30 | arr[i + 1] = 0; 31 | } 32 | } 33 | 34 | int shiftRight(char n){ 35 | for(ii = 0; ii < 4;ii++) 36 | for(i = n*4 + 3; i > n*4 ; i--) 37 | if(arr[i] == 0){ 38 | arr[i] = arr[i - 1]; 39 | arr[i - 1] = 0; 40 | } 41 | for(i = n*4 + 3; i > n*4 ; i--) 42 | if(arr[i] == arr[i - 1]){ 43 | arr[i - 1] = arr[i - 1] * 2; 44 | score = score + arr[i - 1]; 45 | arr[i] = 0; 46 | } 47 | for(ii = 0; ii < 4;ii++) 48 | for(i = n*4 + 3; i > n*4 ; i--) 49 | if(arr[i] == 0){ 50 | arr[i] = arr[i - 1]; 51 | arr[i - 1] = 0; 52 | } 53 | } 54 | 55 | int shiftUp(char n){ 56 | for(ii = 0; ii < 4;ii++) 57 | for(i = n; i < n + 12; i = i + 4) 58 | if(arr[i] == 0){ 59 | arr[i] = arr[i + 4]; 60 | arr[i + 4] = 0; 61 | } 62 | for(i = n; i < n + 12; i = i + 4) 63 | if(arr[i] == arr[i + 4]){ 64 | arr[i] = arr[i] * 2; 65 | score = score + arr[i]; 66 | arr[i + 4] = 0; 67 | } 68 | for(ii = 0; ii < 4;ii++) 69 | for(i = n; i < n + 12; i = i + 4) 70 | if(arr[i] == 0){ 71 | arr[i] = arr[i + 4]; 72 | arr[i + 4] = 0; 73 | } 74 | } 75 | 76 | int shiftDown(char n){ 77 | for(ii = 0; ii < 4;ii++) 78 | for(i = n + 12; i > n; i = i - 4) 79 | if(arr[i] == 0){ 80 | arr[i] = arr[i - 4]; 81 | arr[i - 4] = 0; 82 | } 83 | for(i = n + 12; i > n; i = i - 4) 84 | if(arr[i] == arr[i - 4]){ 85 | arr[i - 4] = arr[i - 4] * 2; 86 | score = score + arr[i - 4]; 87 | arr[i] = 0; 88 | } 89 | for(ii = 0; ii < 4;ii++) 90 | for(i = n + 12; i > n; i = i - 4) 91 | if(arr[i] == 0){ 92 | arr[i] = arr[i - 4]; 93 | arr[i - 4] = 0; 94 | } 95 | } 96 | 97 | void draw(){ 98 | gotoxy(3,3); 99 | printf("score %d", score); 100 | gotoxy(0,5); 101 | for(j = 0; j < 4; j++){ 102 | printf("\n\n"); 103 | for(i = 0; i < 4; i++) 104 | printf("%d\t",arr[j * 4 + i]); 105 | } 106 | } 107 | 108 | void onkey(){ 109 | for(j = 0; j < 4; j++) 110 | switch(key){ 111 | case 1: 112 | shiftUp(j); 113 | break; 114 | case 2: 115 | shiftDown(j); 116 | break; 117 | case 4: 118 | shiftLeft(j); 119 | break; 120 | case 8: 121 | shiftRight(j); 122 | break; 123 | } 124 | } 125 | 126 | void rand(){ 127 | ok = 1; 128 | j = 0; 129 | newn = 2; 130 | r = random(10); 131 | if(r == 1) 132 | newn = 4; 133 | while(ok){ 134 | r = random(16); 135 | j++; 136 | if(arr[r] == 0){ 137 | arr[r] = newn; 138 | ok = 0; 139 | } 140 | if(j > 1000){ 141 | ok = 0; 142 | end = 1; 143 | } 144 | } 145 | } 146 | 147 | void main(){ 148 | end = 0; 149 | init(); 150 | rand(); 151 | draw(); 152 | while(1){ 153 | key = getkey(); 154 | if(key){ 155 | onkey(); 156 | rand(); 157 | draw(); 158 | while(getkey() != 0){}; 159 | } 160 | if(end == 1){ 161 | gotoxy(0,5); 162 | printf("\n game over \n"); 163 | end = 0; 164 | init(); 165 | } 166 | } 167 | } 168 | 169 | -------------------------------------------------------------------------------- /example/asteroids.c: -------------------------------------------------------------------------------- 1 | char shatle[] = {0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x40,0x0,0x0,0x0,0x0,0x0,0x76,0x66,0x66,0x65,0x0,0x0,0x0,0x1,0x11,0x40,0x0,0x0,0x0,0x0,0x1,0x11,0x14,0x44,0x40,0x0,0x0,0x1,0x11,0x11,0x11,0x14,0x44,0x0,0xbb,0xbb,0xbb,0x11,0x11,0xee,0x40,0xcc,0xcc,0xcc,0x11,0x11,0xee,0xf0,0x1,0x11,0x11,0x11,0x1f,0xff,0x0,0x1,0x11,0x1f,0xff,0xf0,0x0,0x0,0x1,0x11,0xf0,0x0,0x0,0x0,0x0,0x76,0x66,0x66,0x65,0x0,0x0,0x0,0x1,0xf0,0x0,0x0,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x0,0x0,0x0}; 2 | char bullet[] = {0x77,0x77,0x77,0x22,0x22,0x22}; 3 | char aster1[] = {0x0,0xf,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0xfc,0xfc,0xcf,0xcc,0xbb,0x0,0x0,0xf,0xcf,0xcf,0xcc,0xcc,0xbc,0xbc,0x0,0xfc,0xfc,0xfc,0xcb,0xfc,0xcb,0xcb,0x0,0xff,0xbf,0xcc,0xcc,0xbf,0xcc,0xbc,0xb0,0xfc,0xfc,0xcc,0xcc,0xcb,0xfc,0xcb,0xb0,0xff,0xcc,0xcc,0xcc,0xcb,0xfc,0xbc,0xb0,0xfc,0xfc,0xcc,0xcc,0xcb,0xfc,0xcb,0xcb,0xff,0xcc,0xbc,0xcc,0xbf,0xcc,0xbc,0xbb,0xfc,0xfc,0xfb,0xbb,0xfc,0xcc,0xcb,0xcb,0xf,0xcc,0xcf,0xff,0xcc,0xcc,0xbc,0xbb,0x0,0xcc,0xcc,0xcc,0xcc,0xcb,0xcb,0xb0,0x0,0xc,0xcc,0xcc,0xcc,0xbc,0xbb,0x0,0x0,0x0,0xcc,0xcb,0xcb,0xcb,0xcb,0x0,0x0,0x0,0xb,0xbc,0xbc,0xbb,0xb0,0x0,0x0,0x0,0x0,0xb,0xbb,0xb0,0x0,0x0}; 4 | char aster2[] = {0x0,0x0,0x11,0x10,0x0,0x0,0x0,0x11,0x1f,0x11,0x10,0x0,0x11,0xf1,0xf1,0xfb,0x10,0x0,0x11,0x1f,0x1f,0xff,0xbf,0xc0,0x1f,0x11,0xff,0xff,0xff,0xc0,0x11,0xff,0xff,0xbf,0xfc,0xfc,0x1f,0xff,0xbb,0xff,0xcf,0xcc,0xff,0xff,0xff,0xfc,0xfc,0xfc,0xf,0xfc,0xff,0xcf,0xcc,0xc0,0xc,0xcf,0xcf,0xcc,0xc0,0x0,0x0,0xcc,0xcc,0xc0,0x0,0x0,0x0,0x0,0xcc,0x0,0x0,0x0}; 5 | 6 | int direction; 7 | int speed; 8 | char key,i,count; 9 | 10 | void newObj(int arr,char x, char y, char w,char h, char l){ 11 | char j; 12 | for(j = 3; j < 12; j++){ 13 | if(spritegetvalue(j,S_LIVES) == 0){ 14 | getsprite(j,arr); 15 | spritesetvalue(j,S_WIDTH,w); 16 | spritesetvalue(j,S_HEIGHT,h); 17 | spritesetvalue(j,S_SPEEDX,0); 18 | spritesetvalue(j,S_SPEEDY,random(1)); 19 | spritesetvalue(j,S_SOLID,1); 20 | spritesetvalue(j,S_ANGLE,random(18) * 20); 21 | spritesetvalue(j,S_LIVES,l); 22 | putsprite(j,x,y); 23 | return; 24 | } 25 | } 26 | } 27 | 28 | void end(); 29 | 30 | void collisions(){ 31 | char n,x,y; 32 | for(i = 3; i < 12; i++){ 33 | if(spritegetvalue(i,S_X) < 0) 34 | spritesetvalue(i,S_X,127); 35 | else if(spritegetvalue(i,S_X) > 127) 36 | spritesetvalue(i,S_X,0); 37 | if(spritegetvalue(i,S_Y) < 0) 38 | spritesetvalue(i,S_Y,127); 39 | else if(spritegetvalue(i,S_Y) > 127) 40 | spritesetvalue(i,S_Y,0); 41 | } 42 | if(spritegetvalue(2,S_COLLISION) > 2){ 43 | n = spritegetvalue(2,S_COLLISION); 44 | spritesetvalue(2,S_LIVES,0); 45 | count--; 46 | if(spritegetvalue(n,S_LIVES) == 2){ 47 | x = spritegetvalue(n,S_X); 48 | y = spritegetvalue(n,S_Y); 49 | getsprite(n,aster2); 50 | spritesetvalue(n,S_WIDTH,12); 51 | spritesetvalue(n,S_HEIGHT,12); 52 | spritesetvalue(n,S_LIVES,1); 53 | newObj(aster2, x, y, 12, 12, 1); 54 | count += 2; 55 | } 56 | else 57 | spritesetvalue(n,S_LIVES,0); 58 | } 59 | if(spritegetvalue(1,S_COLLISION) > 2) 60 | end(); 61 | } 62 | 63 | void init(){ 64 | direction = 0; 65 | speed = 0; 66 | setparticle(0,6,200); 67 | getsprite(1,shatle); 68 | spritesetvalue(1,S_WIDTH,14); 69 | spritesetvalue(1,S_HEIGHT,13); 70 | getsprite(2,bullet); 71 | spritesetvalue(2,S_WIDTH,6); 72 | spritesetvalue(2,S_HEIGHT,2); 73 | spritesetvalue(2,S_SOLID,1); 74 | for(i = 3; i < 7; i++){ 75 | newObj(aster1, 20 + random(90),random(100), 16, 16, 2); 76 | } 77 | count = 4; 78 | putsprite(1,10,60); 79 | } 80 | 81 | void end(){ 82 | for(i = 3; i < 12; i++){ 83 | spritesetvalue(i,S_LIVES,0); 84 | } 85 | gotoxy(6,6); 86 | if(count > 0) 87 | puts("game end"); 88 | else 89 | puts("game win"); 90 | while(getkey() > 0){}; 91 | while(getkey() == 0){}; 92 | clearscreen(); 93 | init(); 94 | } 95 | 96 | void main(){ 97 | init(); 98 | while(1){ 99 | if(spritegetvalue(1,S_X) < 0) 100 | spritesetvalue(1,S_X,127); 101 | else if(spritegetvalue(1,S_X) > 127) 102 | spritesetvalue(1,S_X,0); 103 | if(spritegetvalue(1,S_Y) < 0) 104 | spritesetvalue(1,S_Y,127); 105 | else if(spritegetvalue(1,S_Y) > 127) 106 | spritesetvalue(1,S_Y,0); 107 | collisions(); 108 | if(count == 0) 109 | end(); 110 | key = getkey(); 111 | if(key & KEY_LEFT) 112 | direction-=8; 113 | else if(key & KEY_RIGHT) 114 | direction+=8; 115 | if(direction < 0) 116 | direction += 360; 117 | if(((key & KEY_UP) > 0 || (key & KEY_A) > 0)&& speed < 20) 118 | speed++; 119 | if((key & KEY_DOWN) > 0){ 120 | if(speed > 8) 121 | speed--; 122 | else 123 | speed=0; 124 | } 125 | if(key & KEY_B > 0 && spritegetvalue(2,S_LIVES) <= 0){ 126 | spritespeed(2,7,direction); 127 | spritesetvalue(2,S_ANGLE,direction); 128 | putsprite(2,spritegetvalue(1,S_X) + 7,spritegetvalue(1,S_Y) + 7); 129 | } 130 | if((spritegetvalue(2,S_X) < 0) || (spritegetvalue(2,S_X) > 127) 131 | || (spritegetvalue(2,S_Y) < 0) || (spritegetvalue(2,S_Y) > 127)){ 132 | spritesetvalue(2,S_LIVES,0); 133 | } 134 | spritespeed(1,speed/4,direction); 135 | spritesetvalue(1,S_ANGLE,direction); 136 | setemitter(50,direction + 130, direction + 210, speed); 137 | drawparticle(spritegetvalue(1,S_X) + 7, spritegetvalue(1,S_Y) + 7, 3); 138 | delayredraw(); 139 | } 140 | } -------------------------------------------------------------------------------- /example/attack.c: -------------------------------------------------------------------------------- 1 | char earth[] = {0x8,0x88,0x82,0x85,0x6,0x55,0x82,0x58,0x2,0x55,0x82,0x5d,0x4,0xdd,0x2,0x55,0x22,0xdd,0x83,0xd4,0x45,0x6,0xdd,0x83,0x54,0x4d,0x6,0xdd,0x83,0xd5,0x5d,0x13,0xdd,0x82,0x5d,0x7,0xdd,0x82,0x55,0x6,0xdd,0x83,0xd5,0x85,0x2,0x55,0x4,0xdd,0x82,0x55,0x2,0x88,0x5,0x55,0x81,0x58,0x00}; 2 | char gun[] = {0x0,0x1,0x11,0x11,0x10,0x0,0x0,0x0,0x0,0x16,0x6f,0xf6,0x61,0x0,0x0,0x0,0x1,0x66,0xfc,0xcc,0x66,0x10,0x0,0x0,0x16,0x66,0xcc,0xcb,0x66,0x61,0x0,0x0,0x16,0x66,0x6b,0xb6,0x66,0x66,0x0,0x0,0x16,0x66,0x66,0x66,0x66,0x66,0xf,0xf6,0x16,0x6f,0xff,0xff,0xff,0xff,0xfc,0xc6,0x16,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xc6,0xb6,0x99,0x99,0x99,0x99,0x99,0x99,0x96,0xb6,0x6b,0xbb,0xbb,0xbb,0xbb,0xbb,0xb6,0xb6,0x66,0x66,0x66,0x66,0x6b,0xb,0xb6,0xb6,0x66,0x66,0x66,0x66,0x6b,0x0,0x0,0xb6,0x66,0x66,0x66,0x66,0x6b,0x0,0x0,0xb,0x66,0x66,0x66,0x66,0xb0,0x0,0x0,0x0,0xb6,0x66,0x66,0x6b,0x0,0x0,0x0,0x0,0xb,0xbb,0xbb,0xb0,0x0,0x0,0x0,0x00}; 3 | char bullet[] = {0x6,0x60,0x6b,0xb6,0x6b,0xb6,0x6b,0xb6,0x6b,0xb6,0x66,0x66,0x00}; 4 | int angle = 0; 5 | char key = 0; 6 | 7 | void main(){ 8 | //gravity, count, time 9 | setparticle(0, 4, 1000); 10 | setimagesize(8); 11 | putimagerle(earth,0,0,16,16); 12 | getsprite(0, gun); 13 | putsprite(0, 56, 56); 14 | spritesetvalue(0, S_WIDTH, 16); 15 | spritesetvalue(0, S_HEIGHT, 16); 16 | getsprite(1, bullet); 17 | spritesetvalue(1, S_WIDTH, 4); 18 | spritesetvalue(1, S_HEIGHT, 6); 19 | while(1){ 20 | key = getkey(); 21 | if(key & KEY_LEFT){ 22 | angle -= 10; 23 | if(angle < 0){ 24 | angle = 359; 25 | } 26 | } 27 | else if(key & KEY_RIGHT){ 28 | angle += 10; 29 | if(angle > 359){ 30 | angle = 0;} 31 | } 32 | else if(key & KEY_B){ 33 | //putsprite(1, 56, 56); 34 | //time, dir, dir1, speed 35 | setemitter(50, angle - 10, angle + 10, 9); 36 | drawparticle(64, 64, 6); 37 | } 38 | spritesetvalue(0, S_ANGLE, angle); 39 | delayredraw(); 40 | } 41 | } -------------------------------------------------------------------------------- /example/bashe.c: -------------------------------------------------------------------------------- 1 | int stickCount; 2 | char key,previouseKey,takenSticks; 3 | 4 | void redraw(){ 5 | int i; 6 | //выбираем красный цвет 7 | setcolor(2); 8 | //рисуем видимые палочки 9 | for(i = 0; i < stickCount; i++) 10 | line(22 + i * 6, 74, 22 + i * 6, 84); 11 | //выбираем серый цвет 12 | setcolor(11); 13 | //рисуем выброшенные 14 | for(i = stickCount; i < 15; i++) 15 | line(22 + i * 6, 74, 22 + i * 6, 84); 16 | //возвращаем белый цвет как основной 17 | setcolor(1); 18 | //ждем перерисовки экрана 19 | delayredraw(); 20 | } 21 | 22 | void playersMove(){ 23 | //если код кнопки равен предыдущему, значит она еще не отпущена. Ждем 24 | while(key == previouseKey){ 25 | key = getkey(); 26 | } 27 | while(key != KEY_LEFT && key != KEY_DOWN && key != KEY_RIGHT){ 28 | key = getkey(); 29 | } 30 | if(key & KEY_LEFT){ 31 | takenSticks = 1; 32 | }else if(key & KEY_DOWN){ 33 | takenSticks = 2; 34 | }else{ 35 | takenSticks = 3; 36 | } 37 | printf("%d, ", takenSticks); 38 | stickCount -= takenSticks; 39 | previouseKey = key; 40 | } 41 | 42 | void computersMove(){ 43 | if(stickCount % 4){ 44 | //компьютер реализует выигрышную стратегию, если выпала возможность 45 | takenSticks = stickCount % 4; 46 | }else{ 47 | //компьютер ждет возможности реализовать выигрышную стратегию 48 | takenSticks = 2; 49 | } 50 | stickCount -= takenSticks; 51 | printf("%d, ", takenSticks); 52 | } 53 | 54 | void game(){ 55 | //инициализация 56 | stickCount = 15; 57 | clearscreen(); 58 | //переводим каретку на восьмой символ нулевой строки 59 | gotoxy(8,0); 60 | puts("Баше"); 61 | gotoxy(2,1); 62 | puts("Возьмите 1,2 или 3 палочки. Проигрывает тот, кому нечего брать. Управление:\n"); 63 | //коды 27,25 и 26 соответствуют стрелкам 64 | printf(" %c 1 %c 2 %c 3", 27, 25, 26); 65 | gotoxy(0,12); 66 | redraw(); 67 | while(1){ 68 | playersMove(); 69 | if(stickCount <= 0){ 70 | gotoxy(3,8); 71 | puts("Вы выиграли"); 72 | return; 73 | } 74 | redraw(); 75 | computersMove(); 76 | redraw(); 77 | if(stickCount <= 0){ 78 | gotoxy(3,8); 79 | puts("Компьютер выиграл"); 80 | return; 81 | } 82 | } 83 | } 84 | 85 | void main(){ 86 | while(1){ 87 | game(); 88 | //ждем секунду 89 | settimer(1,1000); 90 | while(gettimer(1)){} 91 | while(getkey() == 0){} 92 | previouseKey = key; 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /example/bench.c: -------------------------------------------------------------------------------- 1 | char im[] = {0x22,0x22,0x22,0x22,0x24,0x44,0x44,0x42,0x24,0x33,0x33,0x42,0x24,0x36,0x63,0x42,0x24,0x36,0x63,0x42,0x24,0x33,0x33,0x42,0x24,0x44,0x44,0x42,0x22,0x22,0x22,0x22,0x00}; 2 | char im1r[] = {0x4,0x22,0x82,0x24,0x2,0x44,0x83,0x42,0x24,0x2,0x33,0x8b,0x42,0x24,0x36,0x63,0x42,0x24,0x36,0x63,0x42,0x24,0x2,0x33,0x83,0x42,0x24,0x2,0x44,0x82,0x42,0x4,0x22,0x00}; 3 | char im2r[] = {0x20,0x33,0x00}; 4 | int s1,s2,s3,s4,s5,s6; 5 | 6 | 7 | void main(){ 8 | while(1){ 9 | settimer(1,5000); 10 | for(int i = 0; i < 1000; i++) 11 | putimage(im,random(120),random(80),8,8); 12 | s1 = 5000 - gettimer(1); 13 | settimer(1,5000); 14 | for(i = 0; i < 1000; i++) 15 | putimagerle(im1r,random(120),random(80),8,8); 16 | s2 = 5000 - gettimer(1); 17 | settimer(1,5000); 18 | for(i = 0; i < 1000; i++) 19 | putimagerle(im2r,random(120),random(80),8,8); 20 | s3 = 5000 - gettimer(1); 21 | setimagesize(3); 22 | settimer(1,5000); 23 | for(int i = 0; i < 1000; i++) 24 | putimage(im,random(100),random(60),8,8); 25 | s4 = 5000 - gettimer(1); 26 | settimer(1,5000); 27 | for(i = 0; i < 1000; i++) 28 | putimagerle(im1r,random(100),random(60),8,8); 29 | s5 = 5000 - gettimer(1); 30 | settimer(1,5000); 31 | for(i = 0; i < 1000; i++) 32 | putimagerle(im2r,random(100),random(60),8,8); 33 | s6 = 5000 - gettimer(1); 34 | clearscreen(); 35 | gotoxy(0,12); 36 | setimagesize(1); 37 | printf("%d\t%d\t%d\n%d\t%d\t%d",s1,s2,s3,s4,s5,s6); 38 | } 39 | } -------------------------------------------------------------------------------- /example/brainf.c: -------------------------------------------------------------------------------- 1 | /*settings*{"name":"brainf+ck","author":"corax","image":[187,187,187,187,187,187,187,187,187,187,187,187,187,187,17,187,17,187,187,177,177,27,187,187,187,187,27,27,27,27,187,187,177,177,187,187,187,187,27,27,27,27,43,177,177,177,187,187,187,187,17,187,17,187,178,177,177,177,187,187,187,187,27,27,27,27,43,177,177,177,187,187,187,187,27,27,27,27,187,177,177,177,187,187,187,187,17,187,27,27,187,177,177,177,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,17,27,187,187,187,27,177,177,187,187,187,187,27,187,187,187,177,177,177,177,187,187,187,187,17,187,181,187,177,187,177,27,187,187,187,187,27,187,85,91,177,187,177,177,187,187,187,187,27,187,181,187,177,177,177,177,187,187,187,187,27,187,187,187,187,27,177,177,187,187,187,187,187,187,187,187,187,187,187,187,187,187]}*/ 2 | //16x9rle 3 | char leftinput[] = {0x8,0x55,0x8,0x0,0x82,0x10,0x2,0x0,0x82,0x10,0x4,0x0,0x86,0x1,0x0,0x1,0x0,0x1,0x4,0x0,0x2,0x10,0x8b,0x0,0x11,0x10,0x11,0x10,0x1,0x0,0x1,0x0,0x1,0x3,0x0,0x82,0x10,0x2,0x0,0x82,0x10,0xc,0x0,0x8,0x55}; 4 | char rightinput[] = {0x8,0x55,0xc,0x0,0x85,0x11,0x0,0x1,0x10,0x4,0x0,0x82,0x10,0x2,0x0,0x82,0x10,0x4,0x0,0x82,0x10,0x2,0x0,0x82,0x10,0x4,0x0,0x82,0x10,0x2,0x0,0x8a,0x10,0x1,0x0,0x1,0x0,0x11,0x0,0x1,0x10,0x2,0x0,0x82,0x1,0x5,0x0,0x8,0x55}; 5 | //12x9rle 6 | char endinput[] = {0x6,0x55,0x6,0x0,0x86,0x11,0x0,0x11,0x0,0x1,0x6,0x10,0x82,0x0,0x2,0x10,0x85,0x11,0x0,0x10,0x0,0x5,0x10,0x84,0x0,0x11,0x0,0x2,0x10,0x83,0x1,0x10,0x6,0x0,0x6,0x55}; 7 | //10x3 8 | char cursor[] = {0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa}; 9 | 10 | char operators[] = {'>', '<', '+', '-', '.', ',', '[', ']'}; 11 | 12 | char screen[256]; 13 | char mem[2048]; 14 | 15 | int key, prevkey, x, pos, lastpos, i, mempos, screenpos, bracketcount; 16 | 17 | void init(){ 18 | setimagesize(3); 19 | putimagerle(leftinput, 0, 102, 16,9); 20 | putimagerle(rightinput, 48, 102, 16,9); 21 | putimagerle(endinput, 96, 102, 12,9); 22 | setimagesize(1); 23 | getsprite(1, cursor); 24 | spritesetvalue(1, S_WIDTH, 10); 25 | spritesetvalue(1, S_HEIGHT, 2); 26 | putsprite(1, 0, 105); 27 | getsprite(2, cursor); 28 | spritesetvalue(2, S_WIDTH, 10); 29 | spritesetvalue(2, S_HEIGHT, 2); 30 | putsprite(2, 0, 124); 31 | } 32 | 33 | void cls(){ 34 | setbgcolor(0); 35 | for(i = 0; i < 12; i++){ 36 | gotoxy(0,i); 37 | putchar(10); 38 | } 39 | } 40 | 41 | void redraw(){ 42 | setbgcolor(0); 43 | gotoxy(0,0); 44 | for(i = 0; i < 252; i++){ 45 | putchar(screen[i]); 46 | } 47 | } 48 | 49 | void run(){ 50 | char op; 51 | mempos = 0; 52 | screenpos = 0; 53 | gotoxy(0,1); 54 | for(i = 0; i < 1024; i++) 55 | mem[i] = 0; 56 | while(1){ 57 | op = screen[screenpos]; 58 | switch(op){ 59 | case '>': 60 | mempos++; 61 | break; 62 | case '<': 63 | if(mempos > 0) 64 | mempos--; 65 | break; 66 | case '+': 67 | mem[mempos] += 1; 68 | break; 69 | case '-': 70 | mem[mempos] -= 1; 71 | break; 72 | case '.': 73 | putchar(mem[mempos]); 74 | break; 75 | case ',': 76 | mem[mempos] = getchar(); 77 | break; 78 | case '[': 79 | if(mem[mempos] == 0){ 80 | bracketcount = 1; 81 | while(bracketcount){ 82 | screenpos++; 83 | if(screenpos > 252) 84 | return; 85 | if(screen[screenpos] == '[') 86 | bracketcount++; 87 | else if(screen[screenpos] == ']') 88 | bracketcount--; 89 | } 90 | } 91 | break; 92 | case ']': 93 | if(mem[mempos] != 0){ 94 | bracketcount = 1; 95 | while(bracketcount){ 96 | if(screenpos > 0){ 97 | screenpos--; 98 | } 99 | else{ 100 | return; 101 | } 102 | if(screen[screenpos] == ']') 103 | bracketcount++; 104 | else if(screen[screenpos] == '[') 105 | bracketcount--; 106 | } 107 | if(screenpos > 0){ 108 | screenpos--; 109 | } 110 | else{ 111 | return; 112 | } 113 | } 114 | break; 115 | default: 116 | settimer(1, 1000); 117 | while(gettimer(1) != 0){}; 118 | while(getkey() == 0){}; 119 | return; 120 | } 121 | screenpos++; 122 | } 123 | } 124 | 125 | void delite(){ 126 | setbgcolor(0); 127 | gotoxy(pos % 21, pos / 21); 128 | for(i = pos; i < 252; i++){ 129 | screen[i] = screen[i + 1]; 130 | putchar(screen[i]); 131 | } 132 | setbgcolor(10); 133 | gotoxy(pos % 21, pos / 21); 134 | putchar(screen[pos]); 135 | } 136 | 137 | void insert(){ 138 | for(i = 251; i > pos; i--){ 139 | screen[i] = screen[i - 1]; 140 | if(screen[i] > 0) 141 | putchar(screen[i]); 142 | } 143 | } 144 | 145 | void keyTest(){ 146 | key = getkey(); 147 | if(key != prevkey){ 148 | if(key == KEY_LEFT){ 149 | if(x > 0) 150 | x--; 151 | } 152 | else if(key == KEY_RIGHT){ 153 | if(x < 10) 154 | x++; 155 | } 156 | if(key == KEY_UP){ 157 | if(pos > 0){ 158 | setbgcolor(0); 159 | gotoxy(pos % 21, pos / 21); 160 | putchar(screen[pos]); 161 | pos--; 162 | setbgcolor(10); 163 | gotoxy(pos % 21, pos / 21); 164 | putchar(screen[pos]); 165 | } 166 | } 167 | else if(key == KEY_DOWN){ 168 | if(pos < lastpos){ 169 | setbgcolor(0); 170 | gotoxy(pos % 21, pos / 21); 171 | putchar(screen[pos]); 172 | pos++; 173 | setbgcolor(10); 174 | putchar(screen[pos]); 175 | } 176 | } 177 | else if((key == KEY_A || key == KEY_B) && pos < 252){ 178 | if(x < 8){ 179 | setbgcolor(0); 180 | insert(); 181 | gotoxy(pos % 21, pos / 21); 182 | putchar(operators[x]); 183 | screen[pos] = operators[x]; 184 | if(lastpos < 250) 185 | lastpos++; 186 | pos++; 187 | setbgcolor(10); 188 | putchar(screen[pos]); 189 | } 190 | else if(x == 8){ 191 | delite(); 192 | if(lastpos > 0) 193 | lastpos--; 194 | } 195 | else if(x == 9){ 196 | cls(); 197 | run(); 198 | redraw(); 199 | } 200 | else if(x == 10){ 201 | for(i = 0; i < 253; i++) 202 | screen[i] = 0; 203 | cls(); 204 | pos = 0; 205 | lastpos = 0; 206 | } 207 | } 208 | putsprite(1, x * 12, 105); 209 | putsprite(2, x * 12, 124); 210 | } 211 | prevkey = key; 212 | } 213 | 214 | void main(){ 215 | init(); 216 | redraw(); 217 | while(1){ 218 | keyTest(); 219 | } 220 | } 221 | -------------------------------------------------------------------------------- /example/breakout.c: -------------------------------------------------------------------------------- 1 | #define BALL_SPEED 3 2 | 3 | //12x8 4 | char brick[] = {0xc,0xcc,0xcc,0xcc,0xcc,0xc0,0xeb,0x66,0x66,0x6c,0x6c,0xfc,0xeb,0x66,0x66,0xe6,0xe6,0x9c,0xeb,0x66,0x6e,0x6e,0x69,0xfc,0xeb,0x66,0xe6,0xe6,0x96,0xfc,0xeb,0x6e,0x6e,0x69,0x66,0xfc,0xeb,0xe6,0xe6,0x96,0x66,0xfc,0xe,0xee,0xee,0xee,0xee,0xe0}; 5 | //8x9 6 | char ball[] = {0x0,0xb2,0x2b,0x0,0x4,0x22,0x22,0x40,0xb2,0x2a,0xa2,0x2b,0x22,0xa2,0x22,0x22,0x22,0xa2,0x22,0x22,0xb2,0x22,0x22,0x2b,0x4,0x22,0x22,0x40,0x0,0xb2,0x2b,0x0}; 7 | //26x8 8 | char deck[] = {0xa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xa0,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0xf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0}; 9 | int x = 60; 10 | char game, count, key; 11 | 12 | void balloncollision(int n){ 13 | if(spritegetvalue(31, S_COLLISION) == 30){ 14 | spritesetvalue(31, S_SPEEDX, (spritegetvalue(31, S_X) - 8 - x) / 2); 15 | drawparticle(spritegetvalue(31, S_X) + 4, spritegetvalue(31, S_Y), 2); 16 | if(spritegetvalue(31, S_Y) < 108) 17 | spritesetvalue(31, S_SPEEDY, 0 - spritegetvalue(31, S_SPEEDY)); 18 | } 19 | else{ 20 | spritesetvalue(31, S_SPEEDX, 0 - spritegetvalue(31, S_SPEEDX)); 21 | spritesetvalue(31, S_SPEEDY, 0 - spritegetvalue(31, S_SPEEDY)); 22 | drawparticle(spritegetvalue(31, S_X) + 4, spritegetvalue(31, S_Y), 3); 23 | } 24 | } 25 | 26 | void brickoncollision(int n){ 27 | if(n < 24){ 28 | spritesetvalue(n, S_LIVES, 0); 29 | count--; 30 | } 31 | } 32 | 33 | void init(){ 34 | clearscreen(); 35 | game = 1; 36 | count = 24; 37 | setparticle(2, 10, 500); 38 | setemitter(100, 1, 259,6); 39 | for(char i = 0; i < 24; i++){ 40 | getsprite(i, brick); 41 | spritesetvalue(i, S_WIDTH, 12); 42 | spritesetvalue(i, S_SPEEDX, 0); 43 | spritesetvalue(i, S_SPEEDY, 0); 44 | spritesetvalue(i, S_ON_COLLISION, brickoncollision); 45 | putsprite(i, (i / 3) * 16, 8 + (i % 3) * 10)); 46 | } 47 | getsprite(31, ball); 48 | spritesetvalue(31, S_SPEEDX, -BALL_SPEED + random(BALL_SPEED * 2)); 49 | spritesetvalue(31, S_SPEEDY, -BALL_SPEED); 50 | spritesetvalue(31, S_ON_COLLISION, balloncollision); 51 | putsprite(31, x, 102); 52 | getsprite(30, deck); 53 | spritesetvalue(30, S_WIDTH, 24); 54 | spritesetvalue(30, S_SPEEDX, 0); 55 | spritesetvalue(30, S_SPEEDY, 0); 56 | putsprite(30, x, 110); 57 | } 58 | 59 | void gameover(){ 60 | gotoxy(6, 7); 61 | if(count == 0) 62 | puts("you win!!"); 63 | else 64 | puts("game over"); 65 | while(getkey() != 0){} 66 | while(getkey() == 0){} 67 | init(); 68 | } 69 | 70 | void onexit(){ 71 | if(spritegetvalue(31, S_Y) > 120) 72 | gameover(); 73 | else if(spritegetvalue(31, S_Y) < 0) 74 | spritesetvalue(31, S_SPEEDY, BALL_SPEED); 75 | if(spritegetvalue(31, S_X) > 120) 76 | spritesetvalue(31, S_SPEEDX, -BALL_SPEED); 77 | else if(spritegetvalue(31, S_X) < 0) 78 | spritesetvalue(31, S_SPEEDX, BALL_SPEED); 79 | } 80 | 81 | void main(){ 82 | while(1){ 83 | init(); 84 | while(game){ 85 | key = getkey(); 86 | if(key == KEY_LEFT && x > 0) 87 | x -= 3; 88 | else if(key == KEY_RIGHT && x < 96) 89 | x += 3; 90 | else 91 | spritesetvalue(30, S_SPEEDX, 0); 92 | putsprite(30, x, 110); 93 | onexit(); 94 | if(count == 0) 95 | gameover(); 96 | delayredraw(); 97 | } 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /example/calculator.c: -------------------------------------------------------------------------------- 1 | /*settings*{"name":"calculator","author":"Corax","image":[170,170,170,170,170,170,170,170,170,170,170,170,170,170,26,170,170,170,170,170,170,170,170,170,170,170,26,170,170,170,170,170,221,221,221,221,170,17,17,26,161,17,17,173,221,221,221,221,170,170,26,170,170,170,170,173,221,221,221,221,170,170,26,170,170,170,170,173,17,17,17,29,170,170,170,170,170,170,170,173,17,17,17,29,170,170,170,170,170,170,170,173,221,221,221,221,170,170,170,170,170,170,170,173,221,221,221,221,170,26,170,26,170,170,161,173,17,17,17,29,170,161,161,170,170,170,26,173,17,17,17,29,170,170,26,170,170,161,170,173,221,221,221,221,170,161,161,170,170,26,170,173,221,221,221,221,170,26,170,26,161,170,170,170,221,221,221,221,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170]}*/ 2 | //16x11rle 3 | char leftn[] = {0x88,0x11,0x10,0x0,0x10,0x11,0x10,0x11,0x3,0x10,0x86,0x0,0x10,0x0,0x10,0x0,0x3,0x10,0x86,0x0,0x10,0x11,0x10,0x1,0x3,0x10,0x82,0x0,0x2,0x10,0x2,0x0,0x8a,0x10,0x11,0x10,0x0,0x10,0x11,0x10,0x11,0x10,0x8,0x0,0x88,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x2,0x10,0x83,0x0,0x10,0x2,0x0,0x3,0x10,0x8a,0x11,0x10,0x11,0x10,0x0,0x10,0x11,0x10,0x0,0x3,0x10,0x82,0x0,0x3,0x10,0x88,0x11,0x10,0x11,0x10,0x0,0x10,0x11}; 4 | char rightn[] = {0x2,0x10,0x4,0x0,0x83,0x1,0x0,0x2,0x10,0x82,0x1,0x3,0x0,0x2,0x10,0x86,0x11,0x10,0x11,0x10,0x11,0x2,0x10,0x2,0x0,0x83,0x10,0x1,0x3,0x0,0x2,0x10,0x83,0x0,0x10,0x4,0x0,0x82,0x1,0x9,0x0,0x83,0x11,0x10,0x6,0x0,0x4,0x10,0x8a,0x0,0x10,0x11,0x10,0x11,0x10,0x1,0x0,0x1,0x4,0x0,0x4,0x10,0x86,0x0,0x11,0x10,0x11,0x10,0x6,0x0}; 5 | //16x3 6 | char cursor1[] = {0xd0,0x0,0x0,0x0,0x0,0x0,0x0,0xd,0xd0,0x0,0x0,0x0,0x0,0x0,0x0,0xd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}; 7 | char cursor2[] = {0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x0,0x0,0x0,0x0,0x0,0x0,0xd,0xd0,0x0,0x0,0x0,0x0,0x0,0x0,0xd}; 8 | 9 | char input[] = {'0','1','2','3','4','+','-','c','5','6','7','8','9','*','/','='}; 10 | 11 | char source[20]; 12 | char reverse1[21]; 13 | char reverse2[21]; 14 | int buffer[41]; 15 | int output[41]; 16 | 17 | int ch, inverse, action, key, prevkey, x, y, i, j, len, length1, length2, length3, position; 18 | 19 | void init(){ 20 | getsprite(1, cursor1); 21 | spritesetvalue(1, S_WIDTH, 16); 22 | spritesetvalue(1, S_HEIGHT, 3); 23 | putsprite(1, 0, 83); 24 | getsprite(2, cursor2); 25 | spritesetvalue(2, S_WIDTH, 16); 26 | spritesetvalue(2, S_HEIGHT, 3); 27 | putsprite(2, 0, 62); 28 | position = 0; 29 | for(i = 0; i < 20; i++){ 30 | source[i] = '0'; 31 | } 32 | } 33 | 34 | int max(int a, int b){ 35 | if(a > b) 36 | return a; 37 | return b; 38 | } 39 | 40 | void mathAdd(){ 41 | char l, n; 42 | l = max(length1, length2); 43 | for(i = 0; i < l; i++){ 44 | n = reverse1[i] + reverse2[i] + output[i]; 45 | output[i] = n % 10; 46 | output[i + 1] = n / 10; 47 | } 48 | if(n > 9){ 49 | l++; 50 | } 51 | length3 = l; 52 | } 53 | 54 | void mathSub(){ 55 | int l, n; 56 | l = max(length1, length2); 57 | inverse = 0; 58 | if(length1 < length2) 59 | inverse = 1; 60 | else if(length1 == length2 && reverse1[l - 1] < reverse2[l - 1]) 61 | inverse = 1; 62 | for(i = 0; i < l; i++){ 63 | if(inverse) 64 | n = reverse2[i] - reverse1[i] + output[i]; 65 | else 66 | n = reverse1[i] - reverse2[i] + output[i]; 67 | if(n >= 0) 68 | output[i] = n; 69 | else{ 70 | output[i + 1] = -1; 71 | output[i] = n + 10; 72 | } 73 | } 74 | l = 20; 75 | while(l > 0 && (output[l] <= 0 || output[l] > 9)){ 76 | output[l] = 0; 77 | l = l - 1; 78 | } 79 | length3 = l + 1; 80 | } 81 | 82 | void mathMul(){ 83 | int l, n; 84 | l = max(length1, length2); 85 | for(i = 0; i < length2; i++){ 86 | for(j = 0; j < length1; j++){ 87 | n = reverse1[j] * reverse2[i] + buffer[i + j]; 88 | buffer[i + j] = n % 10; 89 | buffer[i + j + 1] = n / 10; 90 | } 91 | if(l <= i + j) 92 | l = i + j + 1; 93 | for(j = 0; j < l; j++){ 94 | n = buffer[j] + output[j]; 95 | output[j] = n % 10; 96 | output[j + 1] = output[j + 1] + (n / 10); 97 | buffer[j] = 0; 98 | } 99 | } 100 | length3 = l; 101 | } 102 | 103 | void mathDiv(){ 104 | int p, n; 105 | len = length1 - length2; 106 | length3 = length1; 107 | p = 0; 108 | if(len < 0){ 109 | return; 110 | } 111 | for(j = 20 - len; j >= 0 ; j--){ 112 | reverse2[j + len] = reverse2[j]; 113 | } 114 | for(j = 0; j < len; j++) 115 | reverse2[j] = 0; 116 | length2 = length1; 117 | while(1){ 118 | n = 0; 119 | while((reverse1[length2] * 10 + reverse1[length2 - 1]) >= reverse2[length2 - 1]){ 120 | mathSub(); 121 | n++; 122 | for(j = 0; j < 20; j++){ 123 | reverse1[j] = output[j]; 124 | output[j] = 0; 125 | } 126 | } 127 | len--; 128 | buffer[p] = n; 129 | p++; 130 | if(reverse1[length1 - 1] <= 0) 131 | length1--; 132 | length2--; 133 | for(j = 0; j <= length2; j++){ 134 | reverse2[j] = reverse2[j + 1]; 135 | } 136 | reverse2[length2] = 0; 137 | reverse2[length2 + 1] = 0; 138 | if(len < 0){ 139 | for(j = 0; j <= p; j++){ 140 | output[j] = buffer[p - j - 1]; 141 | } 142 | length3 = p; 143 | return; 144 | } 145 | } 146 | } 147 | 148 | void reverseSource(){ 149 | if(position == 0){ 150 | for(i = 0; i < length1; i++){ 151 | reverse1[length1 - 1 - i] = source[i] - 48; 152 | source[i] = '0'; 153 | } 154 | } 155 | else if(position == 1){ 156 | for(i = 0; i < length2; i++){ 157 | reverse2[length2 - 1 - i] = source[i] - 48; 158 | source[i] = '0'; 159 | } 160 | } 161 | } 162 | 163 | void addAction(char c){ 164 | if(position == 0){ 165 | if(c != '='){ 166 | action = c; 167 | gotoxy(18, 2); 168 | putchar(c); 169 | reverseSource(); 170 | position = 1; 171 | } 172 | } 173 | else if(c == '='){ 174 | reverseSource(); 175 | position = 2; 176 | gotoxy(18, 4); 177 | putchar('='); 178 | if(action == '+') 179 | mathAdd(); 180 | if(action == '-') 181 | mathSub(); 182 | if(action == '*') 183 | mathMul(); 184 | if(action == '/') 185 | mathDiv(); 186 | } 187 | } 188 | 189 | void printSource(){ 190 | if(position == 0){ 191 | gotoxy(0, 1); 192 | putchar(10); 193 | gotoxy(20 - length1, 1); 194 | for(i = 0; i < length1; i++) 195 | putchar(source[i]); 196 | } 197 | else if(position == 1){ 198 | gotoxy(0, 3); 199 | putchar(10); 200 | gotoxy(20 - length2, 3); 201 | for(i = 0; i < length2; i++) 202 | putchar(source[i]); 203 | } 204 | else if(position == 2){ 205 | gotoxy(0, 5); 206 | putchar(10); 207 | gotoxy(0, 5); 208 | if(action == '-' && inverse) 209 | putchar('-'); 210 | for(i = length3 - 1; i >= 0; i--) 211 | putchar(output[i] + 48); 212 | } 213 | } 214 | 215 | void clear(){ 216 | gotoxy(0,0); 217 | for(i = 0; i < 7; i++) 218 | putchar(10); 219 | position = 0; 220 | length1 = 0; 221 | length2 = 0; 222 | for(i = 0; i < 40; i++) 223 | output[i] = 0; 224 | } 225 | 226 | void del(){ 227 | if(position == 0){ 228 | if(length1 > 0){ 229 | length1--; 230 | source[length1] = 0; 231 | } 232 | } 233 | else if(position == 1){ 234 | if(length2 > 0){ 235 | length2--; 236 | source[length2] = 0; 237 | } 238 | } 239 | } 240 | 241 | void keyTest(){ 242 | key = getkey(); 243 | if(key != prevkey){ 244 | if(key == KEY_LEFT){ 245 | if(x > 0) 246 | x--; 247 | } 248 | else if(key == KEY_RIGHT){ 249 | if(x < 7) 250 | x++; 251 | } 252 | if(key == KEY_UP){ 253 | if(y > 0) 254 | y--; 255 | } 256 | else if(key == KEY_DOWN){ 257 | if(y < 1) 258 | y++; 259 | } 260 | else if(key == KEY_A){ 261 | ch = input[x + y * 8]; 262 | if(position == 2){ 263 | clear(); 264 | } 265 | if(ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '=') 266 | addAction(ch); 267 | else if(ch == 'c') 268 | clear(); 269 | else if(position == 0){ 270 | if(length1 < 20){ 271 | source[length1] = ch; 272 | length1++; 273 | } 274 | } 275 | else if(position == 1){ 276 | if(length2 < 20){ 277 | source[length2] = ch; 278 | length2++; 279 | } 280 | } 281 | printSource(); 282 | } 283 | else if(key == KEY_B){ 284 | del(); 285 | printSource(); 286 | } 287 | putsprite(1, x * 16, 83 + y * 24); 288 | putsprite(2, x * 16, 62 + y * 24); 289 | } 290 | prevkey = key; 291 | } 292 | 293 | void main(){ 294 | init(); 295 | setimagesize(4); 296 | putimagerle(leftn, 2, 64, 16,11); 297 | putimagerle(rightn, 66, 64, 16,11); 298 | while(1){ 299 | keyTest(); 300 | } 301 | } -------------------------------------------------------------------------------- /example/cardrpg.c: -------------------------------------------------------------------------------- 1 | char card[] = {0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd1,0x11,0x11,0x1d,0xd1,0x11,0x11,0x1d,0xd1,0x11,0x11,0x1d,0xd1,0x11,0x11,0x1d,0xd1,0x11,0x11,0x1d,0xd1,0x11,0x11,0x1d,0xd1,0x11,0x11,0x1d,0xd1,0x11,0x11,0x1d,0xd1,0x11,0x11,0x1d,0xd1,0x11,0x11,0x1d,0xd1,0x11,0x11,0x1d,0xd1,0x11,0x11,0x1d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00}; 2 | 3 | char health[] = {0x0,0xa,0xa0,0x0,0x0,0x38,0x83,0x0,0x0,0x3,0x30,0x0,0x0,0x3,0x30,0x0,0x0,0x3,0x30,0x0,0x0,0x3,0x30,0x0,0x0,0xc3,0x13,0x0,0xc,0x33,0x13,0x30,0xc2,0x2f,0x21,0x23,0xc2,0x22,0x12,0x23,0xc,0x22,0x22,0x30,0x0,0xc3,0x33,0x0,0x00}; 4 | 5 | char hero[] = {0x2,0x0,0x0,0x0,0x0,0x0,0xf,0x0,0x6,0x60,0x0,0x0,0xf,0x0,0x66,0x66,0x0,0x0,0xf,0x6,0x66,0x66,0x60,0x0,0xf,0x0,0xe1,0xe1,0x0,0x0,0xf,0x0,0x1c,0xcc,0xcc,0xc0,0xcc,0xc0,0x1c,0xbb,0xbb,0xc0,0xc,0x66,0x6c,0xb2,0x2b,0xc0,0x6,0x66,0x6c,0xbb,0x2b,0xc0,0x0,0x6,0x6c,0xbb,0xbb,0xc0,0x0,0x8,0x88,0xcb,0xbc,0x0,0x0,0x6,0x66,0x6c,0xc0,0x0,0x0,0x6,0x66,0x66,0x0,0x0,0x0,0xbb,0xb0,0xbb,0xb0,0x0,0x00}; 6 | char rat[] = {0x0,0x90,0x0,0x40,0x0,0x9,0x99,0x0,0x0,0x2,0x92,0x0,0x0,0x99,0x44,0x40,0x9,0xbb,0x4,0x40,0x9b,0xb0,0x4,0x4b,0xcb,0xc0,0x44,0x4b,0xc0,0xc4,0xbb,0x4b,0x0,0x6,0xb6,0x4b,0xa,0x0,0x4,0xbb,0xa0,0x0,0x4b,0xbb,0xa,0xa6,0xb6,0xba,0x00}; 7 | char zombie[] = {0x0,0x5,0x55,0x50,0x0,0x52,0x52,0x50,0x0,0x55,0x55,0x50,0x0,0xc,0x11,0x5c,0xc5,0xa5,0x55,0x55,0x50,0xd,0xdd,0xcc,0x0,0xdd,0x5c,0xca,0x0,0xd0,0x55,0x55,0x0,0x0,0xd0,0x50,0x0,0x0,0xd0,0xc0,0x0,0x0,0xd0,0xa0,0x0,0xad,0x55,0x50,0x00}; 8 | 9 | int addhealth[4]; 10 | 11 | 12 | char position = 0; 13 | char x = 60; 14 | char y = 2; 15 | char i, key; 16 | int life = 10; 17 | int maxLife = 10; 18 | char score = 0; 19 | 20 | void drawScore(){ 21 | setimagesize(1); 22 | setcolor(1); 23 | gotoxy(0,1); 24 | printf("score"); 25 | gotoxy(0,2); 26 | printf("%d", score); 27 | gotoxy(0,3); 28 | printf("health"); 29 | gotoxy(0,4); 30 | printf("%d/%d ", life, maxLife); 31 | } 32 | 33 | void newCard(char x, char y, char position){ 34 | setimagesize(2); 35 | setcolor(2); 36 | if(random(4) == 0){ 37 | putimage(health,x,y,8,12); 38 | addhealth[position] = 3 + random(7); 39 | setcolor(5); 40 | } 41 | else{ 42 | if(random(3) == 0){ 43 | putimage(zombie,x,y,8,12); 44 | addhealth[position] = -2 - random(maxLife / 3); 45 | } 46 | else{ 47 | putimage(rat,x,y,8,12); 48 | addhealth[position] = -1 - random(maxLife / 4); 49 | } 50 | } 51 | setimagesize(1); 52 | gotoxy(x / 6 + 1, y / 8 + 4); 53 | printf("%d", addhealth[position]); 54 | score++; 55 | } 56 | 57 | void moveRight(){ 58 | for(i=60;i<=92;i=i+4){ 59 | setimagesize(4); 60 | putimage(card,i,y,8,16); 61 | setimagesize(2); 62 | putimage(hero,i + 5,y + 9,11,14); 63 | delayredraw(); 64 | } 65 | setimagesize(4); 66 | putimage(card,60,y,8,16); 67 | newCard(x + 8,y + 9,position); 68 | x = 92; 69 | position++; 70 | life += addhealth[position]; 71 | } 72 | 73 | void moveLeft(){ 74 | for(i=92;i>=60;i=i-4){ 75 | setimagesize(4); 76 | putimage(card,i,y,8,16); 77 | setimagesize(2); 78 | putimage(hero,i + 5,y + 9,11,14); 79 | delayredraw(); 80 | } 81 | setimagesize(4); 82 | putimage(card,92,y,8,16); 83 | newCard(x + 8,y + 9,position); 84 | x = 60; 85 | position--; 86 | life += addhealth[position]; 87 | } 88 | 89 | void moveDown(){ 90 | for(i=2;i<=60;i=i+4){ 91 | setimagesize(4); 92 | putimage(card,x,i,8,16); 93 | setimagesize(2); 94 | putimage(hero,x + 5,i + 9,11,14); 95 | delayredraw(); 96 | } 97 | setimagesize(4); 98 | putimage(card,x,2,8,16); 99 | newCard(x + 8,y + 9,position); 100 | y = 60; 101 | position+=2; 102 | life += addhealth[position]; 103 | } 104 | 105 | void moveUp(){ 106 | for(i=60;i>=2;i=i-4){ 107 | setimagesize(4); 108 | putimage(card,x,i,8,16); 109 | setimagesize(2); 110 | putimage(hero,x + 5,i + 9,11,14); 111 | delayredraw(); 112 | } 113 | setimagesize(4); 114 | putimage(card,x,60,8,16); 115 | newCard(x + 8,y + 9,position); 116 | y = 2; 117 | position-=2; 118 | life += addhealth[position]; 119 | } 120 | 121 | void move(){ 122 | key = getkey(); 123 | if((key == KEY_LEFT) && ((position == 1) || (position == 3))){ 124 | moveLeft(); 125 | } 126 | else if((key == KEY_RIGHT) && ((position == 0) || (position == 2))){ 127 | moveRight(); 128 | } 129 | else if((key == KEY_DOWN) && (position < 2)){ 130 | moveDown(); 131 | } 132 | else if((key == KEY_UP) && (position > 1)){ 133 | moveUp(); 134 | } 135 | } 136 | 137 | void main(){ 138 | setimagesize(4); 139 | putimage(card,60,2,8,16); 140 | putimage(card,92,2,8,16); 141 | putimage(card,60,60,8,16); 142 | putimage(card,92,60,8,16); 143 | while(1){ 144 | drawScore(); 145 | move(); 146 | delayredraw(); 147 | } 148 | } 149 | -------------------------------------------------------------------------------- /example/chip8.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corax89/game_engine_for_esp8266_with_compiler/c225ad0aaf428081e50f105e5d56dbf401cf1fa2/example/chip8.c -------------------------------------------------------------------------------- /example/cityrunner.c: -------------------------------------------------------------------------------- 1 | /*settings*{"name":"cityrunner","author":"corax","image":[51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,49,17,51,51,49,51,51,51,51,51,49,17,17,49,51,51,17,19,51,51,51,51,49,51,49,49,51,51,19,19,51,51,51,51,49,49,49,17,51,49,51,49,51,51,51,51,49,51,49,49,51,49,49,49,51,51,51,51,49,49,49,49,51,49,51,49,51,51,51,51,49,51,49,17,51,49,49,49,51,51,51,51,49,49,49,49,51,49,51,49,17,19,51,51,49,51,49,49,17,17,49,49,51,19,51,49,17,49,49,17,19,19,51,51,19,19,51,49,49,51,49,49,17,19,19,19,19,19,51,49,49,49,49,49,19,19,51,51,17,17,19,49,49,51,49,17,17,19,19,19,19,19,19,49,49,49,49,49,19,19,51,51,17,17,19]}*/ 2 | //16x16 3 | char block0[] = {0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xa8,0xaa,0xa8,0xcc,0xc8,0x88,0x88,0xaa,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x8c,0x33,0x88,0xc3,0x38,0x8c,0x33,0x88,0x8c,0x33,0x88,0xc3,0x3a,0xac,0x33,0x88,0x8c,0x36,0x88,0xc3,0x68,0x8c,0x36,0x88,0x8c,0x63,0xaa,0xc6,0x38,0x8c,0x63,0x88,0x8c,0x33,0x88,0xc3,0x38,0x8c,0x33,0xa8,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xaa,0xa8,0x88,0xaa,0xa8,0xaa,0xa8,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x8a,0xaa,0x8a,0xaa,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xaa,0x8c,0xcc,0x88,0x88,0x8a,0xaa,0x8a}; 4 | char block1[] = {0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xa8,0xaa,0xa8,0x88,0x88,0x88,0x88,0xaa,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x8c,0x33,0x88,0xc3,0x38,0x8c,0x33,0x88,0x8c,0xbb,0x88,0xc3,0x3a,0xac,0xbb,0x88,0x8c,0xbb,0x88,0xc3,0x68,0x8c,0xbb,0x88,0x8c,0xbb,0x8a,0xc6,0x38,0x8c,0xbb,0x88,0x8c,0xbb,0x88,0xc3,0x38,0x8c,0xbb,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xaa,0xa8,0x88,0xff,0xf8,0x88,0xaa,0xa8,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x8a,0xaa,0x8a,0xaa,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xaa,0x8c,0xcc,0x88,0x88,0x88,0x88,0x8a}; 5 | char block2[] = {0xbb,0xbb,0xbb,0xbb,0xbb,0x44,0x44,0x44,0x88,0x88,0x88,0x88,0x8b,0x4a,0xaa,0xaa,0xbb,0xbb,0xbb,0xbb,0xbb,0x44,0x44,0x44,0xa8,0xaa,0xa8,0xcc,0xc8,0x4a,0xaa,0xaa,0x88,0x88,0x88,0x88,0x88,0x4a,0xaa,0xaa,0x8c,0x33,0x88,0xc3,0x38,0x4a,0xaa,0xcc,0x8c,0x33,0x88,0xc3,0x3a,0x4a,0xaa,0xaa,0x8c,0x36,0x88,0xc3,0x68,0x4c,0xa2,0x2a,0x8c,0x63,0xaa,0xc6,0x38,0x4a,0xaa,0xaa,0x8c,0x33,0x88,0xc3,0x38,0x4a,0x22,0xa2,0x88,0x88,0x88,0x88,0x88,0x4a,0xaa,0xaa,0xaa,0xa8,0x88,0xff,0xf8,0x42,0xac,0xca,0x88,0x88,0x88,0x88,0x88,0x4a,0xaa,0xaa,0x88,0x8a,0xaa,0x8a,0xaa,0x4a,0xaa,0xaa,0x88,0x88,0x88,0x88,0x88,0x4a,0x22,0xaa,0xaa,0x8c,0xcc,0x88,0x88,0x4a,0xaa,0xaa}; 6 | char block3[] = {0x33,0xcf,0xcf,0xff,0xfc,0xfc,0xba,0x33,0x3c,0xfc,0xff,0xff,0xff,0xcf,0xcb,0xa3,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0x99,0x93,0x3c,0xfc,0xff,0xff,0xff,0xcf,0xcb,0xa3,0x3f,0xcf,0xff,0xff,0xff,0xfc,0xba,0xa3,0x3c,0xfc,0xff,0xff,0xff,0xcf,0xcb,0xa3,0x3f,0xcf,0xff,0xff,0xff,0xfc,0xba,0xa3,0x3c,0xfc,0xff,0xff,0xff,0xcf,0xcb,0xa3,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0x99,0x93,0x3c,0xfc,0xff,0xff,0xff,0xcf,0xcb,0xa3,0x33,0x93,0x93,0x33,0x33,0x33,0x93,0x93,0x33,0x9c,0xfb,0xb3,0x33,0x3b,0x94,0x93,0x33,0x93,0x9f,0xfb,0xbf,0xb4,0x93,0x93,0x33,0x93,0x93,0x3f,0xf4,0x43,0x93,0xa3,0x33,0x93,0x9f,0xfb,0xbf,0xb4,0x93,0xa3,0x33,0x9c,0xfb,0xb3,0x33,0x3b,0x94,0x93}; 7 | //16x16rle 8 | char back0[] = {0x2,0x33,0x2,0x11,0x6,0x33,0x83,0x13,0x31,0x6,0x33,0x2,0x11,0x6,0x33,0x82,0x13,0x2,0x31,0x83,0x11,0x13,0x3,0x33,0x2,0x11,0x84,0x31,0x11,0x13,0x3,0x33,0x82,0x13,0x2,0x31,0x86,0x11,0x13,0x33,0x11,0x13,0x2,0x11,0x88,0x31,0x11,0x13,0x11,0x13,0x11,0x13,0x2,0x31,0x2,0x11,0x84,0x13,0x11,0x13,0x4,0x11,0x83,0x13,0x11,0x3,0x13,0x2,0x31,0x82,0x11,0x2,0x13,0x83,0x11,0x13,0x2,0x11,0x85,0x31,0x11,0x13,0x11,0x3,0x13,0x2,0x31,0x82,0x11,0x2,0x13,0x8,0x11,0x8,0x31,0x8,0x13,0x8,0x33}; 9 | char back1[] = {0x83,0x33,0x31,0x7,0x33,0x82,0x31,0x7,0x33,0x83,0x11,0x13,0x5,0x33,0x82,0x31,0x2,0x11,0x5,0x33,0x3,0x31,0x83,0x11,0x13,0x2,0x11,0x83,0x33,0x31,0x2,0x11,0x82,0x33,0x2,0x13,0x84,0x31,0x33,0x11,0x3,0x31,0x2,0x11,0x3,0x31,0x2,0x11,0x9,0x31,0x2,0x11,0x2,0x31,0x4,0x11,0x3,0x31,0x82,0x11,0x4,0x31,0x2,0x11,0x84,0x31,0x33,0x31,0x2,0x11,0x4,0x31,0x82,0x33,0x8,0x11,0x8,0x31,0x8,0x13,0x8,0x33}; 10 | char back2[] = {0x8,0x38,0x89,0xf3,0x33,0xf3,0x33,0xf3,0x33,0xf3,0x33,0x8,0x3f,0x99,0xf3,0xff,0xf3,0xff,0xf3,0xff,0xf3,0xff,0xf2,0x2f,0xf2,0x2f,0xf2,0x2f,0xf2,0x2f,0xf2,0xff,0xf2,0xff,0xf2,0xff,0xf2,0xff,0x8,0xaa,0x82,0xa2,0x2,0xff,0x82,0xf2,0x3,0xff,0x85,0xfa,0xaf,0x2f,0xbf,0x2,0x2f,0x2,0xbf,0x83,0x2a,0xab,0x2,0xf2,0x89,0xfb,0xf2,0xfb,0xf2,0xfa,0xaf,0xbf,0x2f,0x2,0xbf,0x2,0x2f,0x8a,0xba,0xab,0xba,0xfa,0xbb,0xfb,0xba,0xbb,0xfa,0x2,0xab,0x84,0xbb,0xab,0xbb,0x2,0xab,0x83,0xba,0xaa,0x2,0xbb,0x2,0xba,0x82,0xbb,0x2,0xba,0x82,0xab,0x3,0xbb,0x82,0xab,0x2,0xbb,0x9,0xaa}; 11 | char back3[] = {0x8,0x66,0x2,0x61,0x5,0x66,0x82,0x61,0x3,0x16,0x3,0x66,0x2,0x16,0x3,0x61,0x2,0x66,0x3,0x61,0x3,0x11,0x2,0x16,0x7,0x11,0x82,0x61,0xb,0x11,0x2,0xf1,0x5,0x11,0x84,0x1f,0x3f,0x1f,0x4,0x11,0x84,0x1f,0xf3,0x3f,0x2,0xf1,0x2,0x11,0x2,0xf1,0x84,0xf3,0x33,0xff,0x4,0x1f,0x83,0xff,0x33,0x5,0xf1,0x82,0xff,0x2,0x33,0x83,0x13,0x3f,0x2,0x1f,0x85,0xff,0xf3,0x33,0x3f,0x2,0x33,0x2,0xff,0x85,0x33,0x31,0xff,0xf1,0x6,0x33,0x83,0x11,0x13,0x8,0x33}; 12 | char back4[] = {0x80,0x66}; 13 | //6x8 14 | char spr0[] = {0x0,0xbb,0xb0,0x0,0xb7,0x0,0xc,0xcc,0x0,0x10,0xcc,0xf1,0x0,0x22,0x0,0x0,0x22,0xb0,0x2,0x0,0xb,0x20,0x0,0xb}; 15 | char spr1[] = {0x0,0xbb,0xb0,0x0,0xb7,0x0,0x0,0xcc,0x0,0x0,0xcc,0x0,0x1,0x22,0x10,0x0,0x22,0x0,0x0,0xd0,0x20,0xd,0x0,0x2}; 16 | char spr2[] = {0x0,0xbb,0xb0,0x0,0xb7,0x0,0x0,0xcc,0x0,0x0,0xcc,0x0,0x0,0x12,0x0,0x0,0x22,0x0,0x0,0x2d,0x0,0x0,0x2d,0x6}; 17 | int spr[] = {spr0, spr2, spr1, spr2}; 18 | 19 | int map[256]; 20 | int i,r,p,distance,maxdistance,cadr,game,key,prevkey,level; 21 | 22 | void exitscreen(){ 23 | game = 0; 24 | spritesetvalue(1, S_LIVES, 0); 25 | } 26 | 27 | void init(){ 28 | level = 0; 29 | game = 1; 30 | distance = 0; 31 | getsprite(1, spr2); 32 | spritesetvalue(1, S_WIDTH, 6); 33 | spritesetvalue(1, S_SOLID, 1); 34 | spritesetvalue(1, S_GRAVITY, 4); 35 | spritesetvalue(1, S_ON_EXIT_SCREEN, exitscreen); 36 | loaddata("cityrunner", &maxdistance); 37 | } 38 | 39 | void nextLevel(){ 40 | setbgcolor(3); 41 | clearscreen(); 42 | for(i = 0; i < 128; i++){ 43 | map[i] = 0; 44 | map[128 + i] = block0; 45 | } 46 | for(i = 0; i < 64; i++){ 47 | r = 134 + random(120); 48 | if(map[r - 1] != 0 && map[r + 1] != 0) 49 | map[r] = 0; 50 | } 51 | for(i = 0; i < 32; i++){ 52 | r = 20 + random(110); 53 | if(map[r + 128] != 0){ 54 | if(random(3) == 1) 55 | map[r] = block3; 56 | else 57 | map[r] = block0; 58 | } 59 | } 60 | for(i = 0; i < 255; i++){ 61 | if(map[i] == block0 && (map[i + 1] == 0 || map[i + 1] == block3)){ 62 | map[i] = block2; 63 | i++; 64 | } 65 | else if(map[i] == block0 && random(3) == 1) 66 | map[i] = block1; 67 | } 68 | loadtile(map, 16, 16, 128, 2); 69 | drawtile(0, 80); 70 | for(i = 0; i < 8; i++){ 71 | if(random(1)) 72 | putimagerle(back0,i * 16, 50,16,16); 73 | else 74 | putimagerle(back1,i * 16, 50,16,16); 75 | putimagerle(back2,i * 16, 112,16,16); 76 | putimagerle(back3,i * 16, 16,16,16); 77 | putimagerle(back4,i * 16, 0,16,16); 78 | } 79 | p = 0; 80 | level++; 81 | setbgcolor(6); 82 | gotoxy(1, 1); 83 | printf(" level %d ", level); 84 | putsprite(1, 48, 86); 85 | spritesetvalue(1, S_SPEEDX, 0); 86 | while(getkey() == 0){} 87 | spritesetvalue(1, S_SPEEDX, 8); 88 | spritesetvalue(1, S_SPEEDY, 0); 89 | putsprite(1, 48, 86); 90 | } 91 | 92 | void main(){ 93 | while(1){ 94 | init(); 95 | nextLevel(); 96 | while(game){ 97 | scroll(2); 98 | p+=2; 99 | distance++; 100 | setbgcolor(6); 101 | gotoxy(1, 1); 102 | spritesetvalue(1, S_SPEEDX, 8); 103 | printf(" distance %d ", distance); 104 | if(p > 1900) 105 | nextLevel(); 106 | if(gettimer(0) == 0){ 107 | settimer(0, 100); 108 | cadr++; 109 | if(cadr > 3) 110 | cadr = 0; 111 | } 112 | key = getkey(); 113 | if(gettileinxy(spritegetvalue(1, S_X), spritegetvalue(1, S_Y) + 18)){ 114 | if(key == KEY_A || key == KEY_B) 115 | spritesetvalue(1, S_SPEEDY, -25); 116 | getsprite(1, spr[cadr]); 117 | } 118 | else 119 | getsprite(1, spr[0]); 120 | if(key > 32){ 121 | prevkey = key; 122 | spritesetvalue(1, S_SPEEDX, 0); 123 | gotoxy(1, 1); 124 | printf(" pause "); 125 | while(key == 0 || key == prevkey){ 126 | key = getkey(); 127 | } 128 | } 129 | setbgcolor(3); 130 | delayredraw(); 131 | } 132 | gotoxy(1, 5); 133 | if(distance > maxdistance[0]){ 134 | printf(" new"); 135 | maxdistance = distance; 136 | savedata("cityrunner", &maxdistance, 2); 137 | } 138 | printf(" record %d ", maxdistance); 139 | settimer(0, 1000); 140 | while(gettimer(0)){} 141 | while(getkey() == 0){} 142 | } 143 | } 144 | -------------------------------------------------------------------------------- /example/columns.c: -------------------------------------------------------------------------------- 1 | /*settings*{"name":"columns","author":"Corax","image":[136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,130,40,51,136,136,136,136,136,136,136,136,136,34,39,51,248,136,136,136,136,136,136,136,138,34,119,19,63,136,136,136,136,136,136,136,162,38,113,119,51,248,136,136,136,136,136,138,34,103,23,113,115,63,136,136,136,136,136,162,38,113,119,119,23,51,248,136,136,136,136,138,34,103,119,119,115,51,136,136,136,136,136,136,162,38,119,23,51,56,136,136,136,136,136,136,138,34,103,113,51,136,136,136,136,136,136,136,136,162,44,51,56,136,136,136,136,136,136,136,140,138,44,99,140,136,136,136,136,136,136,140,200,200,200,200,200,204,136,136,136,136,136,136,140,140,140,140,140,136,136,136,136]}*/ 2 | //6x13 3 | int field[78]; 4 | //8x8 5 | char free[] = {0xff,0xff,0xff,0xfc,0xf1,0x11,0x11,0x1c,0xf1,0x11,0x11,0x1c,0xf1,0x11,0x11,0x1c,0xf1,0x11,0x11,0x1c,0xf1,0x11,0x11,0x1c,0xf1,0x11,0x11,0x1c,0xfc,0xcc,0xcc,0xcc}; 6 | char red[] = {0xff,0x22,0x22,0xfc,0xf2,0xa2,0xa2,0x2c,0x2a,0x27,0x22,0x22,0x22,0x72,0x22,0x22,0x2a,0x22,0x22,0x26,0x22,0x22,0x22,0x26,0xf2,0x22,0x22,0x6c,0xfc,0x22,0x66,0xcc}; 7 | char blue[] = {0xff,0x33,0x33,0xfc,0xf3,0xe3,0xe3,0x3c,0x3e,0x31,0x33,0x33,0x33,0x13,0x33,0x33,0x3e,0x33,0x33,0x36,0x33,0x33,0x33,0x36,0xf3,0x33,0x33,0x6c,0xfc,0x33,0x66,0xcc}; 8 | char green[] = {0xff,0x55,0x55,0xfc,0xf5,0xd5,0xd5,0x5c,0x5d,0x51,0x55,0x55,0x55,0x15,0x55,0x55,0x5d,0x55,0x55,0x59,0x55,0x55,0x55,0x59,0xf5,0x55,0x55,0x9c,0xfc,0x55,0x99,0xcc}; 9 | char yellow[] = {0xf7,0x11,0x11,0x7c,0x71,0x77,0x77,0x77,0x17,0x77,0x77,0x78,0x17,0x77,0x87,0x78,0x17,0x71,0x77,0x78,0x17,0x77,0x77,0x78,0x77,0x77,0x77,0x87,0xf7,0x88,0x88,0x7c}; 10 | char gray[] = {0xf1,0x11,0x11,0x1c,0x11,0xc1,0xc4,0xcb,0x1c,0x1c,0xcc,0x4b,0x11,0xcc,0xcc,0xcb,0x1c,0xcc,0xcc,0xbb,0x14,0xcc,0xcb,0xcb,0x1c,0x4c,0xbc,0xbb,0xfb,0xbb,0xbb,0xbc}; 11 | char multi[] = {0xbb,0xbb,0x66,0x66,0xbb,0x11,0x1e,0x16,0xb1,0xc1,0x11,0x66,0xbb,0x11,0x1e,0x16,0xb1,0xc1,0x11,0x66,0xbb,0x11,0x1e,0x16,0xb1,0xc1,0x11,0x66,0xbb,0xbb,0x66,0x66}; 12 | char clear[] = {0x10,0x10,0x10,0x10,0x1,0x1,0x1,0x1,0x10,0x11,0x10,0x10,0x1,0x1,0x1,0x11,0x11,0x10,0x10,0x10,0x1,0x1,0x11,0x1,0x10,0x10,0x10,0x10,0x1,0x1,0x1,0x1}; 13 | 14 | char boomsnd[] = "s:d=4,o=5,b=900:a#,f#,a,e,d,f#"; 15 | char deliteblocksnd[] = "s:d=4,o=6,b=450:c#,d#,f#,a,b"; 16 | 17 | int blocks[] = {free, red, blue, green, yellow, gray, multi}; 18 | char next[3]; 19 | 20 | int i,x,y,fx,fy,key,pos,prevkey,isdown,score; 21 | 22 | void end(); 23 | 24 | void newFigure(){ 25 | if(field[14] == 0){ 26 | field[2] = next[0]; 27 | field[8] = next[1]; 28 | field[14] = next[2]; 29 | fx = 2; 30 | fy = 2; 31 | } 32 | else 33 | end(); 34 | next[0] = 1 + random(5); 35 | next[1] = 1 + random(5); 36 | next[2] = 1 + random(5); 37 | } 38 | 39 | void drawClear(){ 40 | loadrtttl(deliteblocksnd, 0); 41 | playrtttl(); 42 | for(x = 0; x < 6; x++) 43 | for(y = 0; y < 13; y++) 44 | if(field[x + y * 6] == 15) 45 | putimage(clear, 8 + x * 8, 8 + y * 8, 8, 8); 46 | } 47 | 48 | void redraw(){ 49 | for(x = 0; x < 6; x++) 50 | for(y = 0; y < 13; y++) 51 | putimage(blocks[field[x + y * 6]], 8 + x * 8, 8 + y * 8, 8, 8); 52 | gotoxy(12,1); 53 | printf("score:"); 54 | gotoxy(12,3); 55 | printf("%d", score); 56 | gotoxy(12,5); 57 | printf("next:"); 58 | for(y = 0; y < 3; y++) 59 | putimage(blocks[next[y]], 80, 60 + y * 8, 8, 8); 60 | } 61 | 62 | void goleft(){ 63 | char pos = fx - 1 + fy * 6; 64 | if(field[pos] == 0 && field[pos - 6] == 0 && field[pos - 12] == 0){ 65 | fx--; 66 | field[pos] = field[pos + 1]; 67 | field[pos - 6] = field[pos - 5]; 68 | field[pos - 12] = field[pos - 11]; 69 | field[pos + 1] = 0; 70 | field[pos - 5] = 0; 71 | field[pos - 11] = 0; 72 | } 73 | } 74 | 75 | void goright(){ 76 | char pos = fx + 1 + fy * 6; 77 | if(field[pos] == 0 && field[pos - 6] == 0 && field[pos - 12] == 0){ 78 | fx++; 79 | field[pos] = field[pos - 1]; 80 | field[pos - 6] = field[pos - 7]; 81 | field[pos - 12] = field[pos - 13]; 82 | field[pos - 1] = 0; 83 | field[pos - 7] = 0; 84 | field[pos - 13] = 0; 85 | } 86 | } 87 | 88 | void rotate(){ 89 | char pos,buf; 90 | pos = fx + fy * 6; 91 | buf = field[pos] 92 | field[pos] = field[pos - 6]; 93 | field[pos - 6] = field[pos - 12]; 94 | field[pos - 12] = buf; 95 | } 96 | 97 | void putDownColumn(int x){ 98 | int i,y,pos; 99 | for(y = 12; y > 0; y--){ 100 | pos = x + y * 6; 101 | while(field[pos] == 15){ 102 | for(i = y; i > 0; i--){ 103 | field[pos] = field[pos - 6]; 104 | pos -= 6; 105 | } 106 | pos = x + y * 6; 107 | } 108 | } 109 | field[x] = 0; 110 | delayredraw(); 111 | } 112 | 113 | void testField(){ 114 | int pos, x, y, color; 115 | for(y = 0; y <= 12; y++){ 116 | for(x = 0; x < 6; x++){ 117 | pos = x + y * 6; 118 | if(field[pos] != 0){ 119 | color = field[pos]; 120 | if(x < 4 && color < 15){ 121 | //--- 122 | //+++ 123 | //--- 124 | if(field[pos] == field[pos + 1] && field[pos] == field[pos + 2]){ 125 | isdown = 1; 126 | field[pos] = 15; 127 | pos++; 128 | x++; 129 | score+=2; 130 | while(x < 6 && field[pos] == color){ 131 | field[pos] = 15; 132 | x++; 133 | pos++; 134 | score+=2; 135 | } 136 | drawClear(); 137 | } 138 | } 139 | if(y <= 10 && color < 15){ 140 | pos = x + y * 6; 141 | //-+- 142 | //-+- 143 | //-+- 144 | if(color == field[pos + 6] && field[pos] == field[pos + 12]){ 145 | isdown = 1; 146 | field[pos] = 15; 147 | pos+=6; 148 | y++; 149 | score+=2; 150 | while(y <= 12 && field[pos] == color){ 151 | field[pos] = 15; 152 | y++; 153 | pos+=6; 154 | score+=2; 155 | } 156 | drawClear(); 157 | } 158 | } 159 | if(y <= 10 && x < 4 && color < 15){ 160 | pos = x + y * 6; 161 | //+-- 162 | //-+- 163 | //--+ 164 | if(color == field[pos + 7] && field[pos] == field[pos + 14]){ 165 | isdown = 1; 166 | field[pos] = 15; 167 | pos+=7; 168 | score+=2; 169 | while(x < 6 && field[pos] == color){ 170 | field[pos] = 15; 171 | pos+=7; 172 | score+=2; 173 | } 174 | drawClear(); 175 | } 176 | } 177 | if(y <= 10 && x > 1 && color < 15){ 178 | pos = x + y * 6; 179 | //--+ 180 | //-+- 181 | //+-- 182 | if(color == field[pos + 5] && field[pos] == field[pos + 10]){ 183 | isdown = 1; 184 | field[pos] = 15; 185 | pos+=5; 186 | score+=2; 187 | while(x < 6 && field[pos] == color){ 188 | field[pos] = 15; 189 | pos+=5; 190 | score+=2; 191 | } 192 | drawClear(); 193 | } 194 | } 195 | } 196 | } 197 | } 198 | } 199 | } 200 | 201 | void step(){ 202 | if(gettimer(1) == 0){ 203 | settimer(1, 100); 204 | if(key == KEY_DOWN) 205 | settimer(0, 50); 206 | if(key != prevkey){ 207 | if(key == KEY_LEFT && fx > 0) 208 | goleft(); 209 | if(key == KEY_RIGHT && fx < 5) 210 | goright(); 211 | if(key == KEY_B || key == KEY_UP) 212 | rotate(); 213 | prevkey = key; 214 | } 215 | redraw(); 216 | } 217 | if(gettimer(0) == 0){ 218 | settimer(0, 1000); 219 | score++; 220 | pos = fx + fy * 6; 221 | if(fy < 12 && field[pos + 6] == 0){ 222 | fy++; 223 | field[pos + 6] = field[pos]; 224 | field[pos] = field[pos - 6]; 225 | field[pos - 6] = field[pos - 12]; 226 | field[pos - 12] = 0; 227 | } 228 | else{ 229 | loadrtttl(boomsnd, 0); 230 | playrtttl(); 231 | isdown = 1; 232 | while(isdown){ 233 | isdown = 0; 234 | testField(); 235 | for(x = 0; x < 6; x++) 236 | putDownColumn(x); 237 | } 238 | newFigure(); 239 | } 240 | } 241 | } 242 | 243 | void init(){ 244 | clearscreen(); 245 | next[0] = 1 + random(5); 246 | next[1] = 1 + random(5); 247 | next[2] = 1 + random(5); 248 | score = 0; 249 | for(y = 0; y <= 12; y++) 250 | for(x = 0; x < 6; x++) 251 | field[x + y * 6] = 0; 252 | newFigure(); 253 | } 254 | 255 | void end(){ 256 | gotoxy(10,11); 257 | printf("game over"); 258 | settimer(1, 2000); 259 | while(gettimer(1)){} 260 | while(getkey() != 0){} 261 | init(); 262 | } 263 | 264 | void main(){ 265 | init(); 266 | while(1){ 267 | step(); 268 | key = getkey(); 269 | } 270 | } 271 | -------------------------------------------------------------------------------- /example/darkmaze.c: -------------------------------------------------------------------------------- 1 | //8x8x2 2 | char character[] = {0x77,0xbb,0xc0,0x2,0x7,0xcc,0xcc,0x2,0xc,0xc1,0x71,0x8,0xaa,0x7a,0x7a,0x8,0xcc,0xba,0xaa,0xb7,0x7b,0xba,0xaa,0x8,0x6,0x66,0xa6,0x0,0xc,0x0,0xc,0x0,0x77,0xbb,0xc0,0x20,0x7,0xcc,0xcc,0x20,0xc,0xc1,0x71,0x80,0xaa,0x7a,0x7a,0x80,0xac,0xba,0xaa,0x70,0x7,0xba,0xaa,0x80,0x6,0x66,0xa6,0x0,0x0,0xc0,0xc0,0x0}; 3 | //8x8 4 | char w[] = {0xff,0xff,0xff,0xfb,0xfc,0xcf,0xcc,0xcb,0xff,0xcc,0xcc,0xcb,0xfc,0xcc,0xbc,0xbb,0xfc,0xbc,0xcc,0xcb,0xfc,0xcc,0xcb,0xcb,0xfc,0xcc,0xbc,0xcb,0xff,0xbb,0xbb,0xbb}; 5 | char d[] = {0xff,0xff,0xff,0xfb,0xfc,0xcf,0xcc,0xcb,0xff,0xb2,0x2a,0xcb,0xfb,0x22,0x22,0xab,0xfb,0x22,0x22,0xab,0xfb,0x22,0x22,0xab,0xfb,0x22,0x22,0xab,0xfb,0x22,0x22,0xab}; 6 | //32x32 rle 7 | char shadow[] = {0x7,0xbb,0x3,0xb,0xb,0xbb,0x83,0xb0,0x0,0x3,0xb0,0xa,0xbb,0x84,0x0,0xb,0xb0,0x2,0x0,0x3,0xb,0x7,0xbb,0x83,0x0,0xbb,0x7,0x0,0x82,0xb0,0x5,0xbb,0x2,0xb0,0x7,0x0,0x3,0xb,0x4,0xbb,0x82,0xb,0x9,0x0,0x3,0xb,0x3,0xbb,0x83,0x0,0xb0,0x9,0x0,0x2,0xb0,0x2,0xbb,0x83,0xb0,0xb,0x2,0x0,0x82,0xb0,0x7,0x0,0x2,0xb,0x2,0xbb,0x82,0xb,0xc,0x0,0x82,0xb0,0x2,0xbb,0x82,0xb0,0xd,0x0,0x84,0xbb,0xb0,0xb,0xc,0x0,0x2,0xb,0x82,0xbb,0xe,0x0,0x82,0xbb,0x2,0xb0,0xc,0x0,0x2,0xb,0x82,0xbb,0xe,0x0,0x2,0xb0,0xe,0x0,0x2,0xb,0xe,0x0,0x2,0xb0,0xe,0x0,0x2,0xb,0xf,0x0,0x84,0xb0,0x0,0xb,0xc,0x0,0x82,0xb,0xf,0x0,0x3,0xb0,0xd,0x0,0x84,0xb,0x0,0xb,0xd,0x0,0x2,0xbb,0xd,0x0,0x2,0xb,0x82,0xb0,0xd,0x0,0x82,0xb0,0x2,0xbb,0x82,0xb0,0xc,0x0,0x82,0xb,0x2,0xbb,0x82,0xb,0xb,0x0,0x2,0xb0,0x2,0xbb,0x2,0xb0,0x9,0x0,0x3,0xb,0x3,0xbb,0x2,0xb,0x7,0x0,0x82,0xb,0x2,0xb0,0x4,0xbb,0x2,0xb0,0x82,0xb,0x6,0x0,0x82,0xb0,0x2,0xb,0x5,0xbb,0x83,0xb,0x0,0x2,0xb0,0x2,0x0,0x3,0xb,0x82,0xb0,0x6,0xbb,0x83,0xb0,0xbb,0x4,0xb,0x82,0x0,0x2,0xb0,0xa,0xbb,0x3,0xb0,0x7,0xbb}; 8 | 9 | int maze[][] = { 10 | {w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w}, 11 | {w,0,0,w,0,0,0,w,0,0,0,0,0,0,0,w}, 12 | {w,0,0,w,0,w,0,w,0,w,0,w,0,w,0,w}, 13 | {w,0,0,w,0,w,0,w,0,w,0,w,0,w,0,w}, 14 | {w,0,0,0,0,0,0,w,0,w,0,w,0,w,0,w}, 15 | {w,w,w,w,w,0,0,w,0,w,0,w,0,w,0,w}, 16 | {w,0,0,0,0,0,0,w,0,w,0,w,0,w,0,w}, 17 | {w,w,w,0,w,w,w,w,0,w,0,w,0,w,0,w}, 18 | {w,0,0,0,0,0,0,w,0,w,0,w,0,w,0,w}, 19 | {w,0,w,w,w,w,0,w,0,w,w,w,0,w,0,w}, 20 | {w,0,0,0,0,w,0,0,0,0,0,w,0,w,0,w}, 21 | {w,w,w,w,w,w,w,w,w,w,w,w,0,w,0,w}, 22 | {w,0,0,0,0,0,0,0,0,0,0,0,0,w,0,w}, 23 | {w,0,w,w,w,w,w,w,w,w,w,w,w,w,0,w}, 24 | {w,d,w,0,0,0,0,0,0,0,0,0,0,0,0,w}, 25 | {w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w} 26 | } 27 | 28 | int frame = 0, key, x, y, isPlay; 29 | 30 | void init(){ 31 | x = 1; 32 | y = 1; 33 | isPlay = 1; 34 | setcolor(4); 35 | setbgcolor(11); 36 | getsprite(1, character); 37 | loadtile(maze, 8, 8, 16, 16); 38 | } 39 | 40 | void step(){ 41 | if(!gettimer(0)){ 42 | settimer(0, 400); 43 | frame = 1 - frame; 44 | } 45 | if(!gettimer(1)){ 46 | settimer(1, 100); 47 | } 48 | else{ 49 | return; 50 | } 51 | key = getkey(); 52 | if(key == KEY_UP){ 53 | if(gettileinxy(x * 8, (y - 1) * 8) != w){ 54 | y--; 55 | } 56 | } 57 | if(key == KEY_DOWN){ 58 | if(gettileinxy(x * 8, (y + 1) * 8) != w){ 59 | y++; 60 | } 61 | } 62 | if(key == KEY_LEFT){ 63 | if(gettileinxy((x - 1) * 8, y * 8) != w){ 64 | x--; 65 | } 66 | } 67 | if(key == KEY_RIGHT){ 68 | if(gettileinxy((x + 1) * 8, y * 8) != w){ 69 | x++; 70 | } 71 | } 72 | if(gettileinxy(x * 8, y * 8) == d){ 73 | isPlay = 0; 74 | } 75 | } 76 | 77 | void draw(){ 78 | setclip(0, 0, 128, 128); 79 | clearscreen(); 80 | setclip(x * 8 - 12, y * 8 - 12, 32, 32); 81 | fillrect(0, 0, 128, 128); 82 | drawtile(0, 0); 83 | putimagerle(shadow, x * 8 - 12, y * 8 - 12, 32, 32); 84 | getsprite(1, character + frame * 32); 85 | putsprite(1, x * 8, y * 8); 86 | delayredraw(); 87 | } 88 | 89 | void main(){ 90 | init(); 91 | while(isPlay){ 92 | step(); 93 | draw(); 94 | } 95 | setclip(0, 0, 128, 128); 96 | clearscreen(); 97 | drawtile(0, 0); 98 | setcolor(1); 99 | gotoxy(1, 8); 100 | puts("You found a way out."); 101 | } -------------------------------------------------------------------------------- /example/dragonfractal.c: -------------------------------------------------------------------------------- 1 | void dragon(int x1, int y1, int x2, int y2, int k){ 2 | char tx,ty; 3 | if(k == 0){ 4 | line(x1,y1,x2,y2); 5 | }else{ 6 | tx = ((x1 + x2) / 2 + (y2 - y1) / 2); 7 | ty = ((y1 + y2) / 2 - (x2 - x1) / 2); 8 | dragon(x2,y2,tx,ty,k-1); 9 | dragon(x1,y1,tx,ty,k-1); 10 | } 11 | } 12 | 13 | void main(){ 14 | int i; 15 | setcolor(2); 16 | for(i = 1; i < 14; i++){ 17 | clearscreen(); 18 | dragon(40,40,100,100,i); 19 | settimer(0,500); 20 | while(gettimer(0)){}; 21 | } 22 | } -------------------------------------------------------------------------------- /example/drawCircle.c: -------------------------------------------------------------------------------- 1 | void plot_circle(int x, int y, int x_center, int y_center){ 2 | putpixel(x_center+x,y_center+y); 3 | putpixel(x_center+x,y_center-y); 4 | putpixel(x_center-x,y_center+y); 5 | putpixel(x_center-x,y_center-y); 6 | } 7 | 8 | void circle(int x_center, int y_center, int radius){ 9 | int x,y,delta; 10 | x = 0; 11 | y = radius; 12 | delta = 3 - 2 * radius; 13 | while(x= y){ 36 | line(x0 - x, y0 + y, x0 + x, y0 + y); 37 | line(x0 - x, y0 - y, x0 + x, y0 - y); 38 | line(x0 - y, y0 + x, x0 + y, y0 + x); 39 | line(x0 - y, y0 - x, x0 + y, y0 - x); 40 | y++; 41 | radiusError += yChange; 42 | yChange += 2; 43 | if (((radiusError << 1) + xChange) > 0){ 44 | x--; 45 | radiusError += xChange; 46 | xChange += 2; 47 | } 48 | } 49 | } 50 | 51 | void main(){ 52 | while(1){ 53 | setcolor(1 + random(14)); 54 | fillCircle(random(120),random(120),30); 55 | } 56 | } -------------------------------------------------------------------------------- /example/drawinimgtest.c: -------------------------------------------------------------------------------- 1 | //16x16 2 | char spr[] = {0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69}; 3 | //4x55 4 | char chr[] = {0x11,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x11,0x16,0x66,0x16,0x66,0x16,0x66,0x16,0x66,0x16,0x66,0x16,0x11,0x16,0x66,0x16,0x11,0x16,0x16,0x66,0x11,0x16,0x11,0x16,0x66,0x16,0x61,0x16,0x66,0x16,0x11,0x16,0x16,0x16,0x16,0x16,0x11,0x16,0x66,0x16,0x66,0x16,0x11,0x16,0x16,0x66,0x11,0x16,0x66,0x16,0x11,0x16,0x11,0x16,0x16,0x66,0x11,0x16,0x16,0x16,0x11,0x16,0x11,0x16,0x66,0x16,0x66,0x16,0x66,0x16,0x66,0x16,0x11,0x16,0x16,0x16,0x11,0x16,0x16,0x16,0x11,0x16,0x11,0x16,0x16,0x16,0x11,0x16,0x66,0x16,0x11,0x16,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66}; 5 | 6 | void chartosprite(int x, int y, int n){ 7 | int i,j; 8 | for(i = 0; i < 2; i++) 9 | for(j = 0; j < 5; j++) 10 | spr[x + i + (y + j) * 8] = chr[n * 10 + i + j * 2]; 11 | } 12 | 13 | void printtosprite(int x, int y, int n){ 14 | int i; 15 | for(i = 3; i >= 0; i--){ 16 | chartosprite(x + i * 2, y, n % 10); 17 | n = n / 10; 18 | } 19 | } 20 | 21 | void main(){ 22 | putimage(spr,1,60,16,16); 23 | printtosprite(0,2,1234); 24 | printtosprite(0,9,5678); 25 | putimage(spr,40,60,16,16); 26 | putimage(spr,40,60,16,16); 27 | putimage(spr,50,70,16,16); 28 | setimagesize(3); 29 | putimage(spr,0,0,16,16); 30 | } -------------------------------------------------------------------------------- /example/example.c: -------------------------------------------------------------------------------- 1 | int fibo(int n) 2 | { 3 | if (n == 1) { 4 | return 1; 5 | } else if (n == 2) { 6 | return 1; 7 | } else{ 8 | return fibo(n - 1) + fibo(n - 2); 9 | } 10 | } 11 | 12 | void main(){ 13 | putn(fibo(10)); 14 | } 15 | //-------------------sort 16 | int array[] = {10,5,1,77,12,34,55,67}; 17 | int i, j, min_i, temp; 18 | int size = 8; 19 | 20 | void main(){ 21 | for (i = 0; i < size; i++) 22 | printf("%d ",array[i]); 23 | putchar(10); 24 | for (i = 0; i < size - 1; i++) { 25 | /* устанавливаем начальное значение минимального индекса */ 26 | min_i = i; 27 | /* находим индекс минимального элемента */ 28 | for (j = i + 1; j < size; j++) { 29 | if (array[j] < array[min_i]) { 30 | min_i = j; 31 | } 32 | } 33 | /* меняем значения местами */ 34 | temp = array[i]; 35 | array[i] = array[min_i]; 36 | array[min_i] = temp; 37 | } 38 | for (i = 0; i < size; i++) 39 | printf("%d ",array[i]); 40 | } 41 | 42 | //-------------------eratosphen 43 | #define N 470 44 | 45 | int prime[1000]; 46 | int i; 47 | int j; 48 | int n = N; 49 | 50 | void main() 51 | { 52 | for(i = 0; i 0; i--) { 112 | x = 10 * A[i-1] + q*i; 113 | A[i-1] = x % (2*i - 1); 114 | q = x / (2*i - 1); 115 | } 116 | 117 | A[0] = q%10; 118 | q = q/10; 119 | 120 | if (10 == q) { 121 | printf("%d", predigit + 1); 122 | 123 | for (k = 0; k < nines; k++) { 124 | printf("%d", 0); 125 | } 126 | predigit=0; nines = 0; 127 | } 128 | else { 129 | printf("%d", predigit); 130 | predigit = q; 131 | 132 | if (0 != nines) { 133 | for (k = 0; k < nines; k++) 134 | printf("%d", 9); 135 | nines = 0; 136 | } 137 | } 138 | } 139 | printf("%d", predigit); 140 | } 141 | 142 | //--------------------------------------- 143 | void pascaltriangle(int n) 144 | { 145 | int c, i, j, k; 146 | 147 | for(i=0; i < n; i++) { 148 | c = 1; 149 | for(j=0; j <= 2*(n-i); j=j+2) { 150 | printf(" "); 151 | } 152 | for(k=0; k <= i; k++) { 153 | printf("%d ", c); 154 | c = c * (i-k)/(k+1); 155 | } 156 | printf("\n"); 157 | } 158 | } 159 | 160 | int main() 161 | { 162 | pascaltriangle(8); 163 | return 0; 164 | } 165 | 166 | //-------------------------------------- 167 | int i,time; 168 | 169 | void main(){ 170 | while(1){ 171 | gotoxy(4,7); 172 | puts("press any key"); 173 | while(getkey() == 0){}; 174 | settimer(0,30000); 175 | for (i = 1; i < 10000; i++){ 176 | setcolor(random(15)); 177 | line(random(127),random(160),random(127),random(160)); 178 | } 179 | time = 30000 - gettimer(0); 180 | clearscreen(); 181 | gotoxy(7,8); 182 | putn(time); 183 | puts("ms"); 184 | } 185 | } 186 | //-------------------------------------- 187 | int i,time; 188 | 189 | void main(){ 190 | while(1){ 191 | gotoxy(4,7); 192 | puts("press any key"); 193 | while(getkey() == 0){}; 194 | settimer(0,30000); 195 | for (i = 1; i < 1000; i++){ 196 | setcolor(random(15)); 197 | filltriangle(random(127),random(127),random(127),random(127),random(127),random(127)); 198 | } 199 | time = 30000 - gettimer(0); 200 | clearscreen(); 201 | gotoxy(7,8); 202 | putn(time); 203 | puts("ms"); 204 | } 205 | } 206 | 207 | //-------------------------------------- 208 | int x = 0; 209 | int y = 0; 210 | int x1 = 128; 211 | int y1 = 128; 212 | int ang = 0; 213 | 214 | void main() 215 | { 216 | while(1){ 217 | setcolor(0); 218 | line(x,y,x1,y1); 219 | if(ang == 0){ 220 | y++; 221 | y1--; 222 | if(y1 == 0) 223 | ang = 1; 224 | } 225 | if(ang == 1){ 226 | x++; 227 | x1--; 228 | if(x1 == 0){ 229 | ang = 0; 230 | x = 0; 231 | y = 0; 232 | x1 = 128; 233 | y1 = 128; 234 | } 235 | } 236 | setcolor(1); 237 | line(x,y,x1,y1); 238 | } 239 | } 240 | 241 | //speed 242 | int a; 243 | int b; 244 | 245 | void main(){ 246 | while(1){ 247 | gotoxy(1,1); 248 | printf("press key"); 249 | while(getkey() == 0){}; 250 | clearscreen(); 251 | a = 0; 252 | b = 0; 253 | settimer(1, 1000); 254 | while(gettimer(1) > 0){ 255 | a++; 256 | if(a > 61){ 257 | a = 0; 258 | b++; 259 | } 260 | } 261 | gotoxy(1,2); 262 | printf("speed %d kGz", b); 263 | } 264 | } 265 | //particle 266 | void main(){ 267 | while(1){ 268 | //gravity, time, count 269 | setparticle(1, 4, 2000); 270 | //time, dir, dir1, speed 271 | setemitter(50, 200, 250, 12); 272 | for(int i =0; i< 60; i++){ 273 | //x, y, color 274 | drawparticle(60 + i, 60, i); 275 | delayredraw(); 276 | } 277 | } 278 | } 279 | -------------------------------------------------------------------------------- /example/fire_demo.c: -------------------------------------------------------------------------------- 1 | char f1[] = {0x20,0x22}; 2 | char f2[] = {0x20,0x77}; 3 | char f3[] = {0x20,0x88}; 4 | char f4[] = {0x20,0xff}; 5 | char f5[] = {0x20,0xcc}; 6 | char f6[] = {0x20,0xbb}; 7 | char f7[] = {0x20,0xbb}; 8 | char field[272]; 9 | char buf_field[256]; 10 | int colors[] = {f7, f7, f6, f6, f5, f5, f4, f4, f3, f3, f2, f2, f1, f1, f1}; 11 | 12 | int i,x,y; 13 | 14 | void init(){ 15 | setbgcolor(11); 16 | clearscreen(); 17 | for(i = 0; i < 128; i++) 18 | field[i] = random(14); 19 | } 20 | 21 | void draw(){ 22 | i = 64; 23 | for(y = 4; y < 16; y++) 24 | for(x = 0; x < 16; x++){ 25 | i++; 26 | field[i] = buf_field[i]; 27 | putimagerle(colors[field[i]], x * 8, y * 8, 8, 8); 28 | } 29 | } 30 | 31 | void step(){ 32 | for(i = 240; i < 272; i++) 33 | field[i] = 10 + random(4); 34 | for(i = 0; i < 256; i++){ 35 | if(field[i] == field[i + 16]) 36 | buf_field[i] = 0; 37 | else 38 | buf_field[i] = ((field[i] + field[i + 16]) / 2); 39 | } 40 | } 41 | 42 | void main(){ 43 | init(); 44 | while(1){ 45 | step(); 46 | draw(); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /example/flappybird.c: -------------------------------------------------------------------------------- 1 | /*settings*{"name":"flappy_bird","author":"corax","image":[51,51,51,51,51,51,51,51,51,149,115,51,51,51,51,51,51,51,51,51,51,149,115,51,51,51,51,51,51,51,51,51,51,149,115,51,51,51,51,48,0,51,51,51,51,149,115,51,51,51,48,1,23,0,51,51,51,149,115,51,51,0,1,23,112,17,3,51,51,149,115,51,48,16,7,119,112,17,16,51,57,85,87,51,48,113,16,119,112,17,1,3,51,51,51,51,48,119,16,119,119,1,17,3,51,51,51,51,48,119,7,119,112,0,0,0,51,51,51,51,51,0,170,170,2,34,34,34,3,51,51,51,51,10,170,170,160,0,0,0,51,51,51,51,51,48,10,170,162,34,34,32,51,51,51,51,51,51,48,0,0,0,0,3,57,85,87,51,51,51,51,51,51,51,51,51,51,149,115,51,51,51,51,51,51,51,51,51,51,149,115,51]}*/ 2 | //16x12 3 | char bird[] = {0x0,0x0,0x0,0xbb,0xbb,0xb0,0x0,0x0,0x0,0x0,0xbb,0x11,0xb1,0x1b,0x0,0x0,0x0,0xb,0x11,0x7b,0x11,0x11,0xb0,0x0,0xb,0xbb,0x77,0x7b,0x11,0x14,0x1b,0x0,0xb1,0x11,0xb7,0x7b,0x11,0x14,0x1b,0x0,0xb1,0x11,0x1b,0x77,0xb1,0x11,0x1b,0x0,0xb7,0x11,0x7b,0x77,0x7b,0xbb,0xbb,0xb0,0xb,0x77,0xb7,0x77,0xb2,0x22,0x22,0x2b,0x0,0xbb,0xaa,0xab,0x2b,0xbb,0xbb,0xb0,0x0,0xba,0xaa,0xaa,0xb2,0x22,0x22,0xb0,0x0,0xb,0xba,0xaa,0xab,0xbb,0xbb,0x0,0x0,0x0,0xb,0xbb,0xb0,0x0,0x0,0x0}; 4 | //8x48 5 | char tube[] = {0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77,0x95,0xdd,0xdd,0x77}; 6 | //16x16 rle 7 | char fone[] = {0xb,0x33,0x82,0x11,0x6,0x33,0x3,0x11,0x4,0x33,0x4,0x11,0x85,0x13,0x11,0x33,0x31,0x6,0x11,0x84,0x13,0x11,0x1f,0x3,0xff,0x4,0x11,0x82,0x1f,0x2,0x11,0x82,0x1f,0x4,0x11,0x4,0x1f,0x4,0x11,0x82,0x1f,0x2,0x11,0x83,0x1f,0xff,0x2,0x11,0x85,0x1f,0xff,0x1f,0x99,0x2,0x1f,0x2,0x11,0x2,0x1f,0x85,0x19,0xdd,0x9f,0x1f,0x2,0x11,0x92,0x1f,0x19,0x9d,0xdd,0xd9,0x19,0x99,0x11,0x1f,0x9d,0xdd,0x9d,0xd9,0x9d,0xdd,0x91,0x99,0x3,0xdd,0x82,0x9d,0x2,0xdd,0x82,0xd9,0x6,0xdd,0x82,0x9d,0x9,0xdd}; 8 | char fone2[] = {0x8,0x99,0x8a,0x55,0x5d,0xdd,0xd5,0x55,0x5d,0xdd,0xd5,0x55,0x2,0xdd,0x2,0x55,0x2,0xdd,0x8a,0x55,0x5d,0xdd,0xd5,0x55,0x5d,0xdd,0xd5,0x55,0x2,0xdd,0x2,0x55,0x2,0xdd,0x2,0x55,0x8,0xbb,0x8,0xcc,0x48,0x77}; 9 | 10 | char game,score,i,h,speed; 11 | 12 | void init(); 13 | 14 | void onexit(){ 15 | if(spritegetvalue(1, S_Y) > 127){ 16 | spritesetvalue(1, S_LIVES, 0); 17 | game = 0; 18 | } 19 | else 20 | spritesetvalue(1, S_Y, 1); 21 | } 22 | 23 | void tubeOnexit(int n){ 24 | if(spritegetvalue(n, S_X) < 0 && game){ 25 | spritesetvalue(n, S_X, 127); 26 | spritesetvalue(n, S_SPEEDX, 0 - speed); 27 | if(spritegetvalue(n, S_Y) < 64) 28 | spritesetvalue(n, S_HEIGHT, 16 + random(24)); 29 | 30 | else{ 31 | h = 16 + random(24); 32 | spritesetvalue(n, S_HEIGHT, h); 33 | spritesetvalue(n, S_Y, 112 - h); 34 | score++; 35 | speed = 6 + score; 36 | gotoxy(10,7); 37 | putn(score); 38 | } 39 | } 40 | } 41 | 42 | void oncollision(){ 43 | game = 0; 44 | spritesetvalue(3, S_SPEEDY, 5); 45 | } 46 | 47 | void init(){ 48 | game = 1; 49 | speed = 6; 50 | score = 0; 51 | setbgcolor(3); 52 | clearscreen(); 53 | getsprite(1, bird); 54 | spritesetvalue(1, S_WIDTH, 16); 55 | spritesetvalue(1, S_HEIGHT, 12); 56 | spritesetvalue(1, S_SOLID, 1); 57 | spritesetvalue(1, S_GRAVITY, 3); 58 | spritesetvalue(1, S_SPEEDY, -1); 59 | spritesetvalue(1, S_SPEEDX, 0); 60 | spritesetvalue(1, S_ON_EXIT_SCREEN, onexit); 61 | spritesetvalue(1, S_ON_COLLISION, oncollision); 62 | putsprite(1, 5, 60); 63 | for(i = 0; i < 16; i++){ 64 | putimagerle(fone2, i * 16, 112, 16, 16); 65 | putimagerle(fone, i * 16, 96, 16, 16); 66 | } 67 | for(i = 2; i < 4; i++){ 68 | getsprite(i, tube); 69 | spritesetvalue(i, S_WIDTH, 8); 70 | spritesetvalue(i, S_HEIGHT, 32); 71 | spritesetvalue(i, S_SPEEDX, -6); 72 | spritesetvalue(i, S_SPEEDY, 0); 73 | spritesetvalue(i, S_SOLID, 1); 74 | spritesetvalue(i, S_ON_EXIT_SCREEN, tubeOnexit); 75 | } 76 | putsprite(2, 128,0); 77 | spritesetvalue(2, S_HEIGHT, 8 + random(24)); 78 | putsprite(3, 128, 80); 79 | } 80 | 81 | void main(){ 82 | while(1){ 83 | init(); 84 | while(game){ 85 | spritesetvalue(1, S_ANGLE, spritegetvalue(1, S_SPEEDY)); 86 | if(getkey()) 87 | spritesetvalue(1, S_SPEEDY, -20); 88 | delayredraw(); 89 | } 90 | for(i = 0; i < 20; i++) 91 | delayredraw(); 92 | while(getkey() == 0){} 93 | } 94 | } -------------------------------------------------------------------------------- /example/flappybyrd.c: -------------------------------------------------------------------------------- 1 | //16x12 2 | char bird[] = {0x0,0x0,0x0,0xbb,0xbb,0xb0,0x0,0x0,0x0,0x0,0xbb,0x11,0xb1,0x1b,0x0,0x0,0x0,0xb,0x11,0x7b,0x11,0x11,0xb0,0x0,0xb,0xbb,0x77,0x7b,0x11,0x14,0x1b,0x0,0xb1,0x11,0xb7,0x7b,0x11,0x14,0x1b,0x0,0xb1,0x11,0x1b,0x77,0xb1,0x11,0x1b,0x0,0xb7,0x11,0x7b,0x77,0x7b,0xbb,0xbb,0xb0,0xb,0x77,0xb7,0x77,0xb2,0x22,0x22,0x2b,0x0,0xbb,0xaa,0xab,0x2b,0xbb,0xbb,0xb0,0x0,0xba,0xaa,0xaa,0xb2,0x22,0x22,0xb0,0x0,0xb,0xba,0xaa,0xab,0xbb,0xbb,0x0,0x0,0x0,0xb,0xbb,0xb0,0x0,0x0,0x0}; 3 | //8x32 4 | char tube[] = {0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71,0x95,0xdd,0xdd,0x71}; 5 | //16x16 rle 6 | char fone[] = {0xb,0x33,0x82,0x11,0x6,0x33,0x3,0x11,0x4,0x33,0x4,0x11,0x85,0x13,0x11,0x33,0x31,0x6,0x11,0x84,0x13,0x11,0x1f,0x3,0xff,0x4,0x11,0x82,0x1f,0x2,0x11,0x82,0x1f,0x4,0x11,0x4,0x1f,0x4,0x11,0x82,0x1f,0x2,0x11,0x83,0x1f,0xff,0x2,0x11,0x85,0x1f,0xff,0x1f,0x99,0x2,0x1f,0x2,0x11,0x2,0x1f,0x85,0x19,0xdd,0x9f,0x1f,0x2,0x11,0x92,0x1f,0x19,0x9d,0xdd,0xd9,0x19,0x99,0x11,0x1f,0x9d,0xdd,0x9d,0xd9,0x9d,0xdd,0x91,0x99,0x3,0xdd,0x82,0x9d,0x2,0xdd,0x82,0xd9,0x6,0xdd,0x82,0x9d,0x9,0xdd}; 7 | char fone2[] = {0x8,0x99,0x8a,0x55,0x5d,0xdd,0xd5,0x55,0x5d,0xdd,0xd5,0x55,0x2,0xdd,0x2,0x55,0x2,0xdd,0x8a,0x55,0x5d,0xdd,0xd5,0x55,0x5d,0xdd,0xd5,0x55,0x2,0xdd,0x2,0x55,0x2,0xdd,0x2,0x55,0x8,0xbb,0x8,0xcc,0x48,0x77}; 8 | 9 | char game,score,i,h; 10 | 11 | void init(); 12 | 13 | void onexit(){ 14 | if(spritegetvalue(1, S_Y) > 127) 15 | game = 0; 16 | else 17 | spritesetvalue(1, S_Y, 1);; 18 | } 19 | 20 | void tubeOnexit(int n){ 21 | if(spritegetvalue(n, S_X) < 0){ 22 | spritesetvalue(n, S_X, 127); 23 | if(spritegetvalue(n, S_Y) < 64) 24 | spritesetvalue(n, S_HEIGHT, 8 + random(24)); 25 | else{ 26 | h = 8 + random(24); 27 | spritesetvalue(n, S_HEIGHT, h); 28 | spritesetvalue(n, S_Y, 112 - h); 29 | score++; 30 | gotoxy(10,7); 31 | putn(score); 32 | } 33 | } 34 | } 35 | 36 | void oncollision(){ 37 | game = 0; 38 | } 39 | 40 | void init(){ 41 | game = 1; 42 | score = 0; 43 | setbgcolor(3); 44 | clearscreen(); 45 | getsprite(1, bird); 46 | spritesetvalue(1, S_WIDTH, 16); 47 | spritesetvalue(1, S_HEIGHT, 12); 48 | spritesetvalue(1, S_SOLID, 1); 49 | spritesetvalue(1, S_GRAVITY, 3); 50 | spritesetvalue(1, S_SPEEDY, -1); 51 | spritesetvalue(1, S_SPEEDX, 0); 52 | spritesetvalue(1, S_ON_EXIT_SCREEN, onexit); 53 | spritesetvalue(1, S_ON_COLLISION, oncollision); 54 | putsprite(1, 5, 60); 55 | for(i = 0; i < 16; i++){ 56 | putimagerle(fone2, i * 16, 112, 16, 16); 57 | putimagerle(fone, i * 16, 96, 16, 16); 58 | } 59 | for(i = 2; i < 4; i++){ 60 | getsprite(i, tube); 61 | spritesetvalue(i, S_WIDTH, 8); 62 | spritesetvalue(i, S_HEIGHT, 32); 63 | spritesetvalue(i, S_SPEEDX, -6); 64 | spritesetvalue(i, S_SPEEDY, 0); 65 | spritesetvalue(i, S_SOLID, 1); 66 | spritesetvalue(i, S_ON_EXIT_SCREEN, tubeOnexit); 67 | } 68 | putsprite(2, 128,0); 69 | spritesetvalue(2, S_HEIGHT, 8 + random(24)); 70 | putsprite(3, 128, 80); 71 | } 72 | 73 | void main(){ 74 | while(1){ 75 | init(); 76 | while(game){ 77 | spritesetvalue(1, S_ANGLE, spritegetvalue(1, S_SPEEDY)); 78 | if(getkey()) 79 | spritesetvalue(1, S_SPEEDY, -20); 80 | delayredraw(); 81 | } 82 | for(i = 0; i < 20; i++) 83 | delayredraw(); 84 | while(getkey() == 0){} 85 | } 86 | } -------------------------------------------------------------------------------- /example/fourinrow.c: -------------------------------------------------------------------------------- 1 | /*settings*{"name":"fourinarow","author":"corax","image":[17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,19,49,17,51,17,19,49,17,51,17,17,18,34,34,35,17,49,49,34,34,34,34,17,17,49,19,18,34,34,34,19,19,17,49,17,17,19,49,17,51,17,19,49,17,51,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,18,33,17,51,17,18,33,17,51,17,17,17,33,18,19,17,49,33,18,19,17,49,17,17,33,18,19,17,49,33,18,19,17,49,17,17,18,33,17,51,17,18,33,17,51,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17]}*/ 2 | #define RED_F 1 3 | #define BLUE_F 2 4 | //14x13 5 | char redF[] = {0x0,0x0,0x2,0x22,0x0,0x0,0x0,0x0,0x2,0x22,0x22,0x22,0x0,0x0,0x0,0x22,0x22,0x22,0x22,0x20,0x0,0x2,0x22,0x22,0x22,0x22,0x20,0x0,0x2,0x22,0x22,0x22,0x22,0x22,0x0,0x22,0x22,0x22,0x22,0x22,0x22,0x20,0x22,0x22,0x22,0x22,0x22,0x22,0x20,0x22,0x22,0x22,0x22,0x22,0x22,0x20,0x2,0x22,0x22,0x22,0x22,0x22,0x0,0x2,0x22,0x22,0x22,0x22,0x22,0x0,0x0,0x22,0x22,0x22,0x22,0x20,0x0,0x0,0x2,0x22,0x22,0x22,0x0,0x0,0x0,0x0,0x2,0x22,0x0,0x0,0x0}; 6 | char blueF[] = {0x0,0x0,0x3,0x33,0x0,0x0,0x0,0x0,0x3,0x30,0x0,0x33,0x0,0x0,0x0,0x30,0x0,0x0,0x0,0x30,0x0,0x3,0x0,0x3,0x33,0x0,0x3,0x0,0x3,0x0,0x30,0x30,0x30,0x3,0x0,0x30,0x3,0x3,0x3,0x3,0x0,0x30,0x30,0x3,0x30,0x30,0x33,0x0,0x30,0x30,0x3,0x3,0x3,0x3,0x0,0x30,0x3,0x0,0x30,0x30,0x30,0x3,0x0,0x3,0x0,0x3,0x33,0x0,0x3,0x0,0x0,0x30,0x0,0x0,0x0,0x30,0x0,0x0,0x3,0x30,0x0,0x33,0x0,0x0,0x0,0x0,0x3,0x33,0x0,0x0,0x0}; 7 | 8 | int field[42]; 9 | int weightArray[7]; 10 | int indexWArray[7]; 11 | int key,lastkey,x,y,cursorx,game,freeCell,ywin,cwin; 12 | 13 | void sort(){ 14 | int i, j, min_i, temp, tempx; 15 | for (i = 0; i < 6; i++) { 16 | min_i = i; 17 | for (j = i + 1; j < 7; j++) { 18 | if (weightArray[j] < weightArray[min_i]) { 19 | min_i = j; 20 | } 21 | } 22 | temp = weightArray[i]; 23 | tempx = indexWArray[i]; 24 | weightArray[i] = weightArray[min_i]; 25 | indexWArray[i] = indexWArray[min_i]; 26 | weightArray[min_i] = temp; 27 | indexWArray[min_i] = tempx; 28 | } 29 | } 30 | 31 | void init(){ 32 | int x,y,i; 33 | clearscreen(); 34 | for(i = 0; i < 42; i++) 35 | field[i] = 0; 36 | for(x = 0; x <= 7; x++) 37 | for(y = 0; y <= 6; y++){ 38 | line(x * 16 + 8, y * 16 + 14, 8, y * 16 + 14); 39 | line(x * 16 + 8, 15, x * 16 + 8, y * 16 + 14); 40 | } 41 | gotoxy(1,14); 42 | printf("Win: you %d", ywin); 43 | gotoxy(6,15); 44 | printf("computer %d ", cwin); 45 | getsprite(1, redF); 46 | spritesetvalue(1, S_WIDTH, 14); 47 | spritesetvalue(1, S_HEIGHT, 13); 48 | spritesetvalue(1, S_SPEEDY, 0); 49 | spritesetvalue(1, S_SPEEDX, 0); 50 | putsprite(1,10,0); 51 | game = 1; 52 | freeCell = 42; 53 | cursorx = 0; 54 | } 55 | 56 | int testField(int newF, int newX, int newY){ 57 | int i,j,count,maxCount; 58 | count = 0; 59 | maxCount = 0; 60 | //test vertical 61 | for(i = 0; i < 6; i++){ 62 | if(field[newX + i * 7] == newF){ 63 | count++; 64 | if(count > maxCount) 65 | maxCount = count; 66 | } 67 | else if(field[newX + i * 7] != 0){ 68 | i = 6; 69 | } 70 | } 71 | count = 0; 72 | //test horisontal 73 | for(i = newX; i < 7; i++){ 74 | if(field[i + newY * 7] == newF){ 75 | count++; 76 | } 77 | else{ 78 | i = 7; 79 | } 80 | } 81 | for(i = newX - 1; i >= 0; i--){ 82 | if(field[i + newY * 7] == newF){ 83 | count++; 84 | } 85 | else{ 86 | i = -1; 87 | } 88 | } 89 | if(count > maxCount) 90 | maxCount = count; 91 | /*test diagonal 92 | --/ 93 | -/- 94 | /-- 95 | */ 96 | count = 0; 97 | j = y; 98 | for(i = x; i < 7; i++){ 99 | if(j >= 0){ 100 | if(field[i + j * 7] == newF){ 101 | count++; 102 | } 103 | else{ 104 | i = 7; 105 | } 106 | } 107 | else 108 | i = 7; 109 | j--; 110 | } 111 | j = y; 112 | for(i = x - 1; i >= 0; i--){ 113 | j++; 114 | if(j < 6){ 115 | if(field[i + j * 7] == newF){ 116 | count++; 117 | } 118 | else{ 119 | i = 0; 120 | } 121 | } 122 | else 123 | i = 0; 124 | } 125 | if(count > maxCount) 126 | maxCount = count; 127 | /*test diagonal2 128 | \-- 129 | -\- 130 | --\ 131 | */ 132 | count = 0; 133 | j = y; 134 | for(i = x; i < 7; i++){ 135 | if(j < 6){ 136 | if(field[i + j * 7] == newF){ 137 | count++; 138 | } 139 | else{ 140 | i = 7; 141 | } 142 | } 143 | else 144 | i = 7; 145 | j++; 146 | } 147 | j = y; 148 | for(i = x - 1; i >= 0; i--){ 149 | j--; 150 | if(j >= 0){ 151 | if(field[i + j * 7] == newF){ 152 | count++; 153 | } 154 | else{ 155 | i = 0; 156 | } 157 | } 158 | else 159 | i = 0; 160 | } 161 | if(count > maxCount) 162 | maxCount = count; 163 | return maxCount; 164 | } 165 | 166 | void animation(int fig, int nx, int ny){ 167 | int i; 168 | if(fig == BLUE_F) 169 | getsprite(1, blueF); 170 | for(i = 0; i < 12; i++){ 171 | putsprite(1,nx, i * 8); 172 | delayredraw(); 173 | if((16 + i * 8) > ny) 174 | i = 12; 175 | } 176 | getsprite(1, redF); 177 | } 178 | 179 | void dropFigure(int fig){ 180 | int i; 181 | for(i = 5; i >= 0; i--) 182 | if(field[x + i * 7] == 0){ 183 | field[x + i * 7] = fig; 184 | animation(fig, 10 + x * 16, 16 + i * 16); 185 | if(fig == BLUE_F) 186 | putimage(blueF, 10 + x * 16, 16 + i * 16, 14, 13); 187 | else 188 | putimage(redF, 10 + x * 16, 16 + i * 16, 14, 13); 189 | y = i; 190 | return; 191 | } 192 | y = -1; 193 | } 194 | 195 | int testDropFigure(){ 196 | int i; 197 | for(i = 5; i >= 0; i--) 198 | if(field[x + i * 7] == 0){ 199 | field[x + i * 7] = BLUE_F; 200 | y = i; 201 | return i; 202 | } 203 | return (-1); 204 | } 205 | 206 | void step(){ 207 | int moveMade; 208 | moveMade = 0; 209 | while(moveMade == 0){ 210 | key = getkey(); 211 | if(key != lastkey){ 212 | lastkey = key; 213 | if(key == KEY_LEFT && cursorx > 0) 214 | cursorx--; 215 | if(key == KEY_RIGHT && cursorx < 6) 216 | cursorx++; 217 | if(key == KEY_A || key == KEY_B || key == KEY_DOWN){ 218 | if(field[cursorx] == 0){ 219 | moveMade = 1; 220 | x = cursorx; 221 | dropFigure(RED_F); 222 | } 223 | } 224 | putsprite(1,10 + cursorx * 16,0); 225 | } 226 | } 227 | } 228 | 229 | void aistep(){ 230 | int i,j,saveX, saveY, maxCount; 231 | maxCount = 0; 232 | for(i = 0; i < 7; i++){ 233 | x = i; 234 | if(testDropFigure() > -1){ 235 | weightArray[x] = testField(BLUE_F, x, y); 236 | if(weightArray[x] > 3) 237 | weightArray[x] = 99; 238 | else{ 239 | saveX = x; 240 | saveY = y; 241 | for(j = 0; j < 7; j++){ 242 | x = j; 243 | if(testDropFigure() > -1){ 244 | field[x + y * 7] = RED_F; 245 | if(testField(RED_F, x, y) > 3) 246 | weightArray[saveX] = -9; 247 | field[x + y * 7] = 0; 248 | } 249 | } 250 | x = saveX; 251 | y = saveY; 252 | } 253 | field[x + y * 7] = RED_F; 254 | weightArray[x] = weightArray[x] + (testField(RED_F, x, y) * 2); 255 | field[x + y * 7] = 0; 256 | } 257 | else{ 258 | weightArray[x] = 0; 259 | } 260 | indexWArray[x] = x; 261 | } 262 | sort(); 263 | for(i = 5; i >= 0; i--){ 264 | if(weightArray[i] == weightArray[6]){ 265 | maxCount++; 266 | } 267 | else{ 268 | i = 0; 269 | } 270 | } 271 | i = 6 - random(maxCount); 272 | x = indexWArray[i]; 273 | dropFigure(BLUE_F); 274 | } 275 | 276 | void testWin(int newF){ 277 | int l; 278 | l = testField(newF, x, y); 279 | if(l > 3){ 280 | game = 0; 281 | spritesetvalue(1, S_LIVES, 0); 282 | gotoxy(5,0); 283 | if(newF == BLUE_F){ 284 | puts("Computer win!"); 285 | cwin++; 286 | } 287 | else{ 288 | puts("You win!"); 289 | ywin++; 290 | } 291 | } 292 | freeCell--; 293 | if(freeCell <= 0) 294 | game = 0; 295 | } 296 | 297 | void main(){ 298 | ywin = 0; 299 | cwin = 0; 300 | while(1){ 301 | init(); 302 | while(game){ 303 | step(); 304 | testWin(RED_F); 305 | if(game){ 306 | aistep(); 307 | testWin(BLUE_F); 308 | } 309 | } 310 | settimer(0,1000); 311 | while(gettimer(0) != 0){} 312 | while(getkey() == 0){} 313 | } 314 | } 315 | -------------------------------------------------------------------------------- /example/galaxies.c: -------------------------------------------------------------------------------- 1 | /*settings*{"name":"galaxies","author":"corax89","image":[68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,71,116,69,85,85,85,85,84,71,116,68,68,71,116,69,85,85,85,85,84,71,116,68,68,71,119,117,82,37,82,37,87,119,116,68,68,71,119,117,82,37,82,37,87,119,116,68,68,68,71,119,117,85,85,87,119,116,68,68,68,68,71,119,117,85,85,87,119,116,68,68,68,68,68,65,24,136,136,129,20,68,68,68,68,68,68,65,24,136,136,129,20,68,68,68,68,68,68,73,148,72,132,73,148,68,68,68,68,68,68,73,148,72,132,73,148,68,68,68,68,68,73,148,68,68,68,68,73,148,68,68,68,68,73,148,68,68,68,68,73,148,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68]}*/ 2 | //8x8 3 | char alien1[] = {0xd0,0xd,0x50,0x9,0xd0,0x75,0x5a,0x9,0xd,0x55,0x55,0x90,0x0,0xd5,0x59,0x0,0x0,0x15,0x56,0x0,0x1,0xe5,0x5e,0x60,0x1e,0xd,0x90,0xe6,0xe0,0x0,0x0,0xe}; 4 | char alien2[] = {0x0,0xd,0x50,0x0,0xd0,0x75,0x5a,0x9,0xdd,0x55,0x55,0x99,0x0,0xd5,0x59,0x0,0x1,0x15,0x56,0x60,0x1e,0xe5,0x5e,0xe6,0x10,0xd5,0x59,0x6,0xe0,0xd,0x90,0xe}; 5 | char alien3[] = {0xf0,0x0,0x0,0xb,0xf0,0x0,0x0,0xb,0xfc,0x0,0x0,0xcb,0xf,0x20,0x2,0xb0,0xf,0xcc,0xcc,0xb0,0x0,0xfc,0xcb,0x0,0xf,0xc,0xc0,0xb0,0xf0,0xf,0xb0,0xb}; 6 | char alien4[] = {0xf,0x0,0x0,0xb0,0xf0,0x0,0x0,0xb,0xfc,0x0,0x0,0xcb,0xf,0x20,0x2,0xb0,0xf,0xcc,0xcc,0xb0,0x0,0xfc,0xcb,0x0,0xf,0xf,0xb0,0xb0,0xf,0x0,0x0,0xb0}; 7 | //16x16 8 | char ship0[] = {0x0,0x0,0x0,0xa0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0xa0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0xa0,0x2,0x0,0x0,0x0,0x0,0x0,0xa,0xf0,0xf,0x20,0x0,0x0,0x0,0x0,0xa,0x1f,0xfc,0x20,0x0,0x0,0x0,0x0,0x1,0xf1,0xcf,0xc0,0x0,0x0,0x0,0x0,0x0,0x1f,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x1f,0xfc,0x0,0x0,0x0,0x0,0x0,0x1,0xf3,0x6f,0xc0,0x0,0x0,0xc0,0x0,0x1f,0x13,0x6c,0xfc,0x0,0x9,0xc0,0x1,0xf1,0xf3,0x6f,0xcf,0xc0,0x9,0xc1,0x1f,0x1f,0xf1,0xcf,0xfc,0xfc,0xc9,0xc1,0xf1,0xff,0xf1,0xcf,0xff,0xcf,0xc9,0xcf,0xff,0xff,0xfa,0xaf,0xff,0xff,0xf9,0x70,0x0,0x0,0x0,0x0,0x0,0x0,0x7}; 9 | char ship1[] = {0x0,0x0,0x0,0xa0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0xa0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0xa0,0x2,0x0,0x0,0x0,0x0,0x0,0xa,0xf0,0xf,0x20,0x0,0x0,0x0,0x0,0xa,0x1f,0xfc,0x20,0x0,0x0,0x0,0x0,0x1,0xf1,0xcf,0xc0,0x0,0x0,0x0,0x0,0x0,0x1f,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x1f,0xfc,0x0,0x0,0x0,0x0,0x0,0x1,0xf3,0x6f,0xc0,0x0,0x0,0xc0,0x0,0x1f,0x13,0x6c,0xfc,0x0,0x9,0xc0,0x1,0xf1,0xf3,0x6f,0xcf,0xc0,0x9,0xc1,0x1f,0x1f,0xf1,0xcf,0xfc,0xfc,0xc9,0xc1,0xf1,0xff,0x11,0xf1,0xff,0xcf,0xc9,0xcf,0xff,0xf1,0x72,0x27,0x1f,0xff,0xf9,0x20,0x0,0x0,0x7,0x70,0x0,0x0,0x2}; 10 | char shipl[] = {0x0,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0xa0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0xa0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0xa0,0x22,0x0,0x0,0x0,0x0,0x0,0x0,0xac,0xf2,0xc0,0x0,0x0,0x0,0x0,0x0,0xf1,0xc2,0xc0,0x0,0x0,0x0,0x0,0x0,0x1c,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0xf1,0xc0,0x0,0x0,0x90,0x0,0x0,0x0,0xf,0xfc,0xf0,0x0,0x99,0x0,0x0,0x0,0x16,0x6f,0xcf,0xc0,0x99,0x0,0x0,0x1,0xf6,0x6f,0xfc,0xfc,0x99,0x0,0x0,0x1f,0x16,0x6f,0xff,0xcf,0x99,0x0,0x1,0xf1,0xf8,0xcf,0xff,0xfc,0x99,0xc0,0x1f,0x1f,0xf7,0x7f,0xf0,0x0,0xaa,0xc1,0xf1,0xf0,0x7,0x70,0x0,0x0,0x0,0x70,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; 11 | char shipr[] = {0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0xa,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0xaa,0x2,0x0,0x0,0x0,0x0,0x0,0x1,0xaf,0x12,0x0,0x0,0x0,0x0,0x0,0x1,0xa1,0xcf,0x0,0x0,0x0,0x0,0x0,0x0,0x1f,0x1c,0x0,0x0,0x0,0xc,0x0,0x0,0x1,0xcf,0x0,0x0,0x0,0xcc,0x0,0xf,0x1f,0x10,0x0,0x0,0x0,0xcc,0x1,0xf1,0xf3,0x39,0x0,0x0,0x0,0xcc,0x1f,0x1f,0xf3,0x3f,0x90,0x0,0x0,0xcc,0xf1,0xff,0xf3,0x3c,0xf9,0x0,0x0,0xcc,0x1f,0xff,0xf1,0xcf,0xcf,0x90,0x0,0x77,0x0,0xf,0xf7,0x7f,0xfc,0xf9,0x9,0x0,0x0,0x0,0x7,0x70,0xf,0xcf,0x99,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa}; 12 | int ship[] = {ship0,ship1}; 13 | //2x8 14 | char laser[] = {0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a}; 15 | //4x4 16 | char bomb[] = {0x1,0x10,0x13,0x1f,0x11,0xff,0xf,0xf0}; 17 | int aliens[] = {alien1, alien2, alien3, alien4}; 18 | 19 | int i,x,y,cadr,count,key,r,speed,level,game; 20 | 21 | void onExit(int n){ 22 | if(spritegetvalue(n,S_X) < 0) 23 | spritesetvalue(n,S_SPEEDX,speed); 24 | else 25 | spritesetvalue(n,S_SPEEDX,0 - speed); 26 | spritesetvalue(n,S_Y,spritegetvalue(n,S_Y) + 9); 27 | } 28 | 29 | void flyOnExit(){ 30 | spritesetvalue(29,S_LIVES, 0); 31 | spritesetvalue(r,S_LIVES, 1); 32 | spritesetvalue(r,S_Y, 48); 33 | } 34 | 35 | void laserExit(){ 36 | spritesetvalue(30,S_LIVES,0); 37 | } 38 | 39 | void laserCollision(){ 40 | i = spritegetvalue(30, S_COLLISION); 41 | spritesetvalue(i, S_LIVES, 0); 42 | spritesetvalue(30, S_LIVES, 0); 43 | if(i != 28){ 44 | count--; 45 | } 46 | } 47 | 48 | void shipOnCollision(){ 49 | game = 0; 50 | spritesetvalue(31, S_LIVES, 0); 51 | } 52 | 53 | void nextLevel(){ 54 | int i; 55 | for(i = 0; i < 32; i++){ 56 | spritesetvalue(i, S_LIVES, 0); 57 | } 58 | level++; 59 | speed = level - 1; 60 | gotoxy(7,7); 61 | setcolor(1); 62 | printf("level %d", level); 63 | settimer(0, 1000); 64 | while(gettimer(0)){} 65 | clearscreen(); 66 | for(i = 0; i < 30; i++){ 67 | setcolor(random(15)); 68 | putpixel(random(127),random(127)); 69 | } 70 | i = 0; 71 | for(y = 0; y < 2; y++){ 72 | for(x = 0; x < 10; x++){ 73 | getsprite(i, aliens[0]); 74 | spritesetvalue(i,S_SPEEDX,speed); 75 | spritesetvalue(i,S_SPEEDY,0); 76 | spritesetvalue(i,S_IS_SCROLLED,0); 77 | spritesetvalue(i,S_ON_EXIT_SCREEN,onExit); 78 | putsprite(i, 8 + x * 10, 8 + y * 20); 79 | i++; 80 | } 81 | } 82 | count = 20; 83 | x = 48; 84 | y = 100; 85 | putsprite(31, x, y); 86 | } 87 | 88 | void init(){ 89 | game = 1; 90 | speed = 0; 91 | level = 0; 92 | getsprite(28, bomb); 93 | spritesetvalue(28,S_WIDTH,4); 94 | spritesetvalue(28,S_HEIGHT,4); 95 | spritesetvalue(28,S_SPEEDY,3); 96 | getsprite(29, aliens[0]); 97 | spritesetvalue(29,S_SPEEDX,0); 98 | spritesetvalue(29,S_SPEEDY,0); 99 | spritesetvalue(29,S_ON_EXIT_SCREEN,flyOnExit); 100 | getsprite(31, ship[0]); 101 | spritesetvalue(31,S_HEIGHT,16); 102 | spritesetvalue(31,S_WIDTH,16); 103 | spritesetvalue(31,S_ON_COLLISION,shipOnCollision); 104 | getsprite(30, laser); 105 | spritesetvalue(30,S_WIDTH,2); 106 | spritesetvalue(30,S_SPEEDY,-24); 107 | spritesetvalue(30,S_ON_EXIT_SCREEN,laserExit); 108 | spritesetvalue(30,S_ON_COLLISION,laserCollision); 109 | nextLevel(); 110 | } 111 | 112 | void nextCadr(){ 113 | if(gettimer(1) == 0){ 114 | settimer(1, 300); 115 | cadr = 1 - cadr; 116 | for(i = 0; i < 20; i++){ 117 | getsprite(i, aliens[cadr + i / 10 * 2]); 118 | } 119 | } 120 | } 121 | 122 | void step(){ 123 | nextCadr(); 124 | scroll(3); 125 | getsprite(31, ship[cadr]); 126 | key = getkey(); 127 | if(key & KEY_B > 0 || key & KEY_A > 0){ 128 | if(spritegetvalue(30,S_LIVES) == 0){ 129 | putsprite(30, x + 7, y - 9); 130 | } 131 | } 132 | if(key & KEY_LEFT && x > 0){ 133 | x-=2; 134 | getsprite(31, shipl); 135 | } 136 | if(key & KEY_RIGHT && x < 112){ 137 | x+=2; 138 | getsprite(31, shipr); 139 | } 140 | putsprite(31, x, y); 141 | if(random(30) == 1){ 142 | if(spritegetvalue(29,S_LIVES) == 0){ 143 | r = random(10); 144 | if(spritegetvalue(r,S_LIVES) != 0){ 145 | spritesetvalue(r,S_LIVES, 0); 146 | if(spritegetvalue(r,S_X) < 60){ 147 | spritesetvalue(29,S_SPEEDX,3); 148 | } 149 | else{ 150 | spritesetvalue(29,S_SPEEDX,-3); 151 | } 152 | putsprite(29, spritegetvalue(r,S_X), spritegetvalue(r,S_Y)); 153 | putsprite(28, spritegetvalue(r,S_X) + 2, spritegetvalue(r,S_Y) + 8); 154 | } 155 | } 156 | } 157 | if(count <= 0) 158 | nextLevel(); 159 | delayredraw(); 160 | } 161 | 162 | void main(){ 163 | while(1){ 164 | init(); 165 | while(game){ 166 | step(); 167 | } 168 | } 169 | } -------------------------------------------------------------------------------- /example/gameoflife.c: -------------------------------------------------------------------------------- 1 | //128x128 2 | char field[4096]; 3 | char buf_field[4096]; 4 | int x,y,n,i,p,r; 5 | 6 | void redraw(){ 7 | i = 0; 8 | int nx,ny; 9 | ny = 0; 10 | for(y = 0; y < 64; y++){ 11 | nx = 0; 12 | ny += 2; 13 | for(x = 0; x < 64; x++){ 14 | field[i] = buf_field[i]; 15 | setcolor(field[i]); 16 | putpixel(nx, ny); 17 | /* 18 | putpixel(nx + 1, ny); 19 | putpixel(nx, ny + 1); 20 | putpixel(nx + 1, ny + 1); 21 | */ 22 | i++; 23 | nx += 2; 24 | } 25 | } 26 | } 27 | 28 | void init(){ 29 | for(i = 0; i < 4096; i++){ 30 | if(random(5) == 1) 31 | field[i] = 1; 32 | else 33 | field[i] = 0; 34 | } 35 | } 36 | 37 | void step(){ 38 | i = 0; 39 | for(x = 0; x < 64; x++){ 40 | for(y = 0; y < 64; y++){ 41 | i++; 42 | n = 0; 43 | if(y > 0){ 44 | n += field[i - 64]; 45 | if(x > 0) 46 | n += field[i - 65]; 47 | if(x < 64) 48 | n += field[i - 63]; 49 | } 50 | if(y < 64){ 51 | n += field[i + 64]; 52 | if(x > 0) 53 | n += field[i + 65]; 54 | if(x < 64) 55 | n += field[i + 63]; 56 | } 57 | if(x > 0) 58 | n += field[i - 1]; 59 | if(x < 64) 60 | n += field[i + 1]; 61 | if(field[i] == 1){ 62 | if(n == 2 || n == 3){ 63 | buf_field[i] = 1; 64 | } 65 | else{ 66 | buf_field[i] = 0; 67 | } 68 | } 69 | else{ 70 | if(n == 3){ 71 | buf_field[i] = 1; 72 | } 73 | else{ 74 | buf_field[i] = 0; 75 | } 76 | } 77 | } 78 | } 79 | } 80 | 81 | void main(){ 82 | init(); 83 | while(1){ 84 | step(); 85 | redraw(); 86 | if(getkey()) 87 | init(); 88 | } 89 | } -------------------------------------------------------------------------------- /example/intro.c: -------------------------------------------------------------------------------- 1 | char l[] = {0x4,0x44,0x40,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x24,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x44,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x24,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x44,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x24,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x24,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x44,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x24,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x44,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x24,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x24,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x44,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x24,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x44,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x24,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x24,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x44,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x24,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x44,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x24,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x24,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x44,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x24,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x44,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x24,0x0,0x0,0x0,0x0,0x0,0x42,0x22,0x22,0x44,0x44,0x44,0x44,0x40,0x42,0x22,0x22,0x22,0x22,0x22,0x24,0x24,0x42,0x22,0x22,0x22,0x22,0x22,0x22,0x44,0x42,0x22,0x22,0x22,0x22,0x22,0x24,0x24,0x4,0x22,0x22,0x22,0x22,0x22,0x22,0x44,0x0,0x44,0x44,0x44,0x44,0x44,0x44,0x40}; 2 | char g[] = {0x6,0x66,0x66,0x66,0x66,0x66,0x66,0x60,0x63,0x33,0x33,0x33,0x33,0x33,0x33,0x36,0x63,0x33,0x33,0x33,0x33,0x33,0x33,0x66,0x63,0x33,0x33,0x33,0x33,0x33,0x33,0x36,0x63,0x33,0x33,0x33,0x33,0x33,0x33,0x36,0x63,0x33,0x36,0x66,0x66,0x63,0x33,0x36,0x63,0x33,0x36,0x0,0x0,0x63,0x33,0x36,0x63,0x33,0x66,0x0,0x0,0x63,0x33,0x36,0x63,0x33,0x36,0x0,0x0,0x6,0x66,0x60,0x63,0x33,0x66,0x0,0x0,0x0,0x0,0x0,0x63,0x33,0x36,0x0,0x0,0x0,0x0,0x0,0x63,0x33,0x36,0x0,0x0,0x0,0x0,0x0,0x63,0x33,0x66,0x0,0x0,0x0,0x0,0x0,0x63,0x33,0x36,0x0,0x0,0x0,0x0,0x0,0x63,0x33,0x66,0x0,0x0,0x0,0x0,0x0,0x63,0x33,0x36,0x0,0x0,0x0,0x0,0x0,0x63,0x33,0x36,0x0,0x0,0x0,0x0,0x0,0x63,0x33,0x66,0x0,0x0,0x0,0x0,0x0,0x63,0x33,0x36,0x0,0x66,0x66,0x66,0x60,0x63,0x33,0x66,0x6,0x33,0x33,0x33,0x36,0x63,0x33,0x36,0x6,0x33,0x33,0x33,0x66,0x63,0x33,0x36,0x6,0x33,0x33,0x33,0x36,0x63,0x33,0x66,0x6,0x33,0x33,0x33,0x36,0x63,0x33,0x36,0x0,0x66,0x66,0x33,0x66,0x63,0x33,0x66,0x0,0x0,0x6,0x33,0x36,0x63,0x33,0x36,0x0,0x0,0x6,0x33,0x66,0x63,0x33,0x33,0x66,0x66,0x66,0x33,0x36,0x63,0x33,0x33,0x33,0x33,0x33,0x33,0x36,0x63,0x33,0x33,0x33,0x33,0x33,0x33,0x66,0x63,0x33,0x33,0x33,0x33,0x33,0x33,0x36,0x63,0x33,0x33,0x33,0x33,0x33,0x33,0x66,0x6,0x66,0x66,0x66,0x66,0x66,0x66,0x60}; 3 | char e[] = {0x9,0x99,0x99,0x99,0x99,0x99,0x99,0x90,0x9d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd9,0x9d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x99,0x9d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd9,0x9d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x99,0x9d,0xdd,0xd9,0x99,0x99,0x99,0x99,0x90,0x9d,0xdd,0xd9,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0x99,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0xd9,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0x99,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0xd9,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0xd9,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0x99,0x99,0x99,0x90,0x0,0x0,0x9d,0xdd,0xdd,0xdd,0xdd,0xd9,0x0,0x0,0x9d,0xdd,0xdd,0xdd,0xdd,0x99,0x0,0x0,0x9d,0xdd,0xdd,0xdd,0xdd,0xd9,0x0,0x0,0x9d,0xdd,0xdd,0xdd,0xdd,0x99,0x0,0x0,0x9d,0xdd,0x99,0x99,0x99,0x90,0x0,0x0,0x9d,0xdd,0xd9,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0x99,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0xd9,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0xd9,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0x99,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0xd9,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0x99,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0xd9,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0xdd,0x99,0x99,0x99,0x99,0x90,0x9d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd9,0x9d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x99,0x9d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd9,0x9d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x99,0x9,0x99,0x99,0x99,0x99,0x99,0x99,0x90}; 4 | char ea[] = {0x0,0x0,0x0,0x0,0x0,0x9,0x90,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0x9d,0x99,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0x9d,0xdd,0xd9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0x9d,0xdd,0xdd,0x9d,0x90,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0x9d,0xdd,0xdd,0xdd,0xdd,0x90,0x0,0x0,0x0,0x0,0x0,0x9,0x9d,0xdd,0xdd,0xdd,0xdd,0x99,0x0,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0xdd,0xdd,0xdd,0x99,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0xdd,0xdd,0x99,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0xdd,0xdd,0xd9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0xdd,0xdd,0x9d,0x90,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0xdd,0x90,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0xd9,0xd9,0x0,0x0,0x99,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0xdd,0xdd,0xd9,0x0,0x99,0xd9,0x90,0x0,0x0,0x0,0x0,0x0,0x9,0xdd,0xdd,0x9d,0x99,0xdd,0xdd,0x90,0x0,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0xdd,0xdd,0xdd,0xd9,0xd9,0x0,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0xdd,0xdd,0xdd,0xdd,0xd9,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0xdd,0xdd,0xdd,0xdd,0xd9,0x90,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0xdd,0xdd,0xdd,0xd9,0x90,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0xdd,0x90,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0xdd,0x90,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0xdd,0xd9,0xd9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0xdd,0xdd,0xd9,0x0,0x0,0x0,0x9,0x90,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0x9d,0x90,0x0,0x9,0x9d,0x99,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0xdd,0x90,0x9,0xdd,0xdd,0xd9,0x0,0x0,0x0,0x0,0x0,0x9,0xdd,0xd9,0xd9,0x9d,0xdd,0xdd,0x9d,0x90,0x0,0x0,0x0,0x0,0x9,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x90,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0xdd,0xdd,0xdd,0xdd,0x99,0x0,0x0,0x0,0x0,0x0,0x0,0x9d,0xdd,0xdd,0xdd,0xdd,0xd9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0xdd,0xdd,0xdd,0x99,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0xdd,0xdd,0x99,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9d,0x99,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x0,0x0,0x0}; 5 | char light[] = {0x0,0x0,0x0,0x0,0x0,0x11,0x11,0x11,0x11,0x11,0x0,0x0,0x0,0x0,0x0,0x11,0x11,0x11,0x11,0x11,0x0,0x0,0x0,0x0,0x1,0x11,0x11,0x11,0x11,0x10,0x0,0x0,0x0,0x0,0x1,0x11,0x11,0x11,0x11,0x10,0x0,0x0,0x0,0x0,0x1,0x11,0x11,0x11,0x11,0x10,0x0,0x0,0x0,0x0,0x11,0x11,0x11,0x11,0x11,0x0,0x0,0x0,0x0,0x0,0x11,0x11,0x11,0x11,0x11,0x0,0x0,0x0,0x0,0x0,0x11,0x11,0x11,0x11,0x11,0x0,0x0,0x0,0x0,0x1,0x11,0x11,0x11,0x11,0x10,0x0,0x0,0x0,0x0,0x1,0x11,0x11,0x11,0x11,0x10,0x0,0x0,0x0,0x0,0x1,0x11,0x11,0x11,0x11,0x10,0x0,0x0,0x0,0x0,0x11,0x11,0x11,0x11,0x11,0x0,0x0,0x0,0x0,0x0,0x11,0x11,0x11,0x11,0x11,0x0,0x0,0x0,0x0,0x0,0x11,0x11,0x11,0x11,0x11,0x0,0x0,0x0,0x0,0x1,0x11,0x11,0x11,0x11,0x10,0x0,0x0,0x0,0x0,0x1,0x11,0x11,0x11,0x11,0x10,0x0,0x0,0x0,0x0,0x1,0x11,0x11,0x11,0x11,0x10,0x0,0x0,0x0,0x0,0x11,0x11,0x11,0x11,0x11,0x0,0x0,0x0,0x0,0x0,0x11,0x11,0x11,0x11,0x11,0x0,0x0,0x0,0x0,0x0,0x11,0x11,0x11,0x11,0x11,0x0,0x0,0x0,0x0,0x1,0x11,0x11,0x11,0x11,0x10,0x0,0x0,0x0,0x0,0x1,0x11,0x11,0x11,0x11,0x10,0x0,0x0,0x0,0x0,0x1,0x11,0x11,0x11,0x11,0x10,0x0,0x0,0x0,0x0,0x11,0x11,0x11,0x11,0x11,0x0,0x0,0x0,0x0,0x0,0x11,0x11,0x11,0x11,0x11,0x0,0x0,0x0,0x0,0x0,0x11,0x11,0x11,0x11,0x11,0x0,0x0,0x0,0x0,0x1,0x11,0x11,0x11,0x11,0x10,0x0,0x0,0x0,0x0,0x1,0x11,0x11,0x11,0x11,0x10,0x0,0x0,0x0,0x0,0x1,0x11,0x11,0x11,0x11,0x10,0x0,0x0,0x0,0x0,0x11,0x11,0x11,0x11,0x11,0x0,0x0,0x0,0x0,0x0,0x11,0x11,0x11,0x11,0x11,0x0,0x0,0x0,0x0,0x0,0x11,0x11,0x11,0x11,0x11,0x0,0x0,0x0,0x0,0x0}; 6 | 7 | char s[] = "s:d=4,o=7,b=900:d#,f#,e,4e4,e,g,f,4c4,f,g#,f#,4e4,f#,a,g,4c4,g,a#,g#,4e4,g#,b,a,4c4,g#,g,f#,4e4,f,e,d#,4c4,d,c#,c,4e4,d#,f,d#,4c4,d#,f,d#,4c4,d#,f,d#,4c4,d#,f,d#,p,p,32f#5,32e6,32c#5,32f#4,32c4,32g4,32f4,32d4,32e4,32c#4,32e4"; 8 | 9 | void main(){ 10 | int i; 11 | setbgcolor(1); 12 | loadrtttl(s,0); 13 | playrtttl(); 14 | clearscreen(); 15 | getsprite(1,l); 16 | getsprite(2,g); 17 | getsprite(3,e); 18 | getsprite(4,light); 19 | getsprite(5,ea); 20 | for(i =1; i < 4; i++){ 21 | spritesetvalue(i,S_SPEEDY,20); 22 | spritesetvalue(i,S_WIDTH, 16); 23 | spritesetvalue(i,S_HEIGHT, 32); 24 | } 25 | spritesetvalue(3,S_ANGLE,330); 26 | spritesetvalue(4,S_SPEEDX,20); 27 | spritesetvalue(4,S_WIDTH, 20); 28 | spritesetvalue(4,S_HEIGHT, 32); 29 | spritesetvalue(5,S_SPEEDY,20); 30 | spritesetvalue(5,S_WIDTH, 26); 31 | spritesetvalue(5,S_HEIGHT, 32); 32 | putsprite(1, 20, -32); 33 | putsprite(2, 54, -32); 34 | putsprite(5, 84, -32); 35 | while(spritegetvalue(1,S_Y) < 64){} 36 | for(i =1; i < 4; i++){ 37 | spritesetvalue(i,S_SPEEDY,-10); 38 | } 39 | putsprite(3, 90, spritegetvalue(1,S_Y)); 40 | spritesetvalue(5,S_LIVES,0); 41 | spritesetvalue(3,S_ANGLE,336); 42 | delayredraw(); 43 | delayredraw(); 44 | spritesetvalue(3,S_ANGLE,338); 45 | delayredraw(); 46 | delayredraw(); 47 | spritesetvalue(3,S_ANGLE,342); 48 | delayredraw(); 49 | delayredraw(); 50 | spritesetvalue(3,S_ANGLE,350); 51 | delayredraw(); 52 | delayredraw(); 53 | spritesetvalue(3,S_ANGLE,0); 54 | delayredraw(); 55 | while(spritegetvalue(1,S_Y) > 48){} 56 | for(i =1; i < 4; i++){ 57 | spritesetvalue(i,S_SPEEDY,0); 58 | } 59 | putsprite(4, 0, spritegetvalue(1,S_Y)); 60 | while(spritegetvalue(4,S_X) < 128){} 61 | settimer(1, 1000); 62 | while(gettimer(1)){} 63 | for(i = 1; i < 5; i++){ 64 | spritesetvalue(i,S_LIVES,0); 65 | } 66 | clearscreen(); 67 | delayredraw(); 68 | delayredraw(); 69 | } -------------------------------------------------------------------------------- /example/keytest.c: -------------------------------------------------------------------------------- 1 | void main(){ 2 | char key; 3 | while(1){ 4 | clearscreen(); 5 | key = getkey(); 6 | gotoxy(0,0); 7 | printf("key %d \n", key); 8 | if(key & KEY_UP) 9 | printf(" key up"); 10 | if(key & KEY_DOWN) 11 | printf(" key down"); 12 | if(key & KEY_LEFT) 13 | printf(" key left"); 14 | if(key & KEY_RIGHT) 15 | printf(" key right"); 16 | if(key & KEY_A) 17 | printf(" key A"); 18 | if(key & KEY_B) 19 | printf("key B"); 20 | delayredraw(); 21 | } 22 | } -------------------------------------------------------------------------------- /example/logo.c: -------------------------------------------------------------------------------- 1 | char logo[] = {0x8,0x88,0x87,0x86,0x66,0x88,0x66,0x86,0x68,0x2,0x88,0x85,0x86,0x68,0x86,0x88,0x2,0x86,0x2,0x88,0x82,0x86,0x2,0x88,0x2,0x86,0x82,0x68,0x2,0x88,0x86,0x86,0x66,0x86,0x68,0x86,0xd,0x88,0x82,0x86,0x2,0x88,0x84,0x66,0x86,0x66,0x2,0x88,0x87,0x86,0x88,0x86,0x88,0x86,0x68,0x2,0x88,0x83,0x86,0x88,0x3,0x86,0x3,0x88,0x87,0x86,0x66,0x88,0x66,0x86,0x66,0xa,0x88,0x82,0x68,0xe,0x88,0x88,0x68,0x88,0x68,0x88,0x86,0x88,0x68,0xa,0x88,0x82,0x68,0x5,0x88}; 2 | int y = 0 3 | 4 | void main(){ 5 | setbgcolor(8); 6 | clearscreen(); 7 | for(y = 1; y < 12; y++){ 8 | putimagerle(logo,56,y,16,16); 9 | delayredraw(); 10 | } 11 | setimagesize(2); 12 | for(y = 12; y < 20; y++){ 13 | putimagerle(logo,48,y,16,16); 14 | delayredraw(); 15 | } 16 | setimagesize(3); 17 | for(y = 20; y < 28; y++){ 18 | putimagerle(logo,40,y,16,16); 19 | delayredraw(); 20 | } 21 | setimagesize(4); 22 | putimagerle(logo,32,y,16,16); 23 | for(y = 20; y < 40; y++){ 24 | delayredraw(); 25 | } 26 | setbgcolor(0); 27 | clearscreen(); 28 | } 29 | -------------------------------------------------------------------------------- /example/mars_attack.c: -------------------------------------------------------------------------------- 1 | //16x7 2 | char ufo0[] = {0x0,0x0,0x0,0xf,0x90,0x0,0x0,0x0,0x0,0x0,0xf,0xcc,0xc9,0x90,0x0,0x0,0x0,0x0,0x17,0xc7,0xc7,0x98,0x0,0x0,0x11,0xff,0xff,0xff,0xfb,0xbb,0xbb,0xbb,0x0,0x0,0x12,0xc2,0xc2,0x9a,0x0,0x0,0x0,0x0,0xf,0xcc,0xc9,0x90,0x0,0x0,0x0,0x0,0x0,0xf,0x90,0x0,0x0,0x0}; 3 | char ufo1[] = {0x0,0x0,0x0,0xf,0x90,0x0,0x0,0x0,0x0,0x0,0xf,0xcc,0xc9,0x90,0x0,0x0,0x0,0x0,0x7c,0x7c,0x7c,0x89,0x0,0x0,0x11,0xff,0xff,0xff,0xfb,0xbb,0xbb,0xbb,0x0,0x0,0x2c,0x2c,0x2c,0xa9,0x0,0x0,0x0,0x0,0xf,0xcc,0xc9,0x90,0x0,0x0,0x0,0x0,0x0,0xf,0x90,0x0,0x0,0x0}; 4 | int ufo[] = {ufo0, ufo1}; 5 | //2x11 6 | char laser[] = {0x72,0x7a,0xa2,0x7a,0xa2,0x72,0x7a,0xa2,0x7a,0xa2,0x72}; 7 | //8x8 8 | char block[] = {0x99,0x99,0x99,0x99,0x1e,0x1e,0xce,0xc9,0x1e,0xce,0xce,0x99,0x1c,0x1c,0xc9,0xc9,0x1e,0xce,0xce,0x99,0x1e,0x1e,0xce,0xc9,0x11,0xcc,0xcc,0x99,0x1c,0x1c,0xc9,0xc9}; 9 | //8x8rle 10 | char earth[] = {0x4,0x88,0x4,0xa8,0x4,0x8a,0x4,0xa8,0x10,0xaa}; 11 | char map[60]; 12 | 13 | char cadr = 0; 14 | int key,game,i,j,r,ok,count,speed; 15 | 16 | void init(); 17 | 18 | void end(){ 19 | speed = 1; 20 | spritesetvalue(31,S_SPEEDY,-1); 21 | settimer(0, 1000); 22 | while(gettimer(0)){} 23 | } 24 | 25 | void vin(){ 26 | speed++; 27 | init(); 28 | } 29 | 30 | void ufoExit(){ 31 | spritesetvalue(31,S_X,-14); 32 | spritesetvalue(31,S_Y,spritegetvalue(31,S_Y) + 4); 33 | if(spritegetvalue(31,S_Y) > 120) 34 | game = 0; 35 | } 36 | 37 | void ufoCollision(){ 38 | game = 0; 39 | spritesetvalue(spritegetvalue(31, S_COLLISION), S_SPEEDY, 1); 40 | } 41 | 42 | void laserExit(){ 43 | spritesetvalue(30,S_LIVES,0); 44 | } 45 | 46 | void laserCollision(){ 47 | i = spritegetvalue(30, S_COLLISION); 48 | spritesetvalue(i, S_LIVES, 0); 49 | spritesetvalue(30, S_LIVES, 0); 50 | drawparticle(spritegetvalue(i, S_X) + 4, spritegetvalue(i, S_Y), 2); 51 | count--; 52 | } 53 | 54 | void init(){ 55 | gotoxy(1,1); 56 | game = 1; 57 | printf("level %d ", speed - 2); 58 | count = 28; 59 | for(i = 0; i < 60; i++) 60 | map[i] = 0; 61 | for(i = 0; i < 28; i++){ 62 | getsprite(i, block); 63 | spritesetvalue(i,S_SOLID,1); 64 | spritesetvalue(i,S_SPEEDX,0); 65 | spritesetvalue(i,S_SPEEDY,0); 66 | ok = 0; 67 | while(ok == 0){ 68 | r = random(11); 69 | for(j = 4; j >= 0; j--){ 70 | if(map[j * 12 + r] == 0){ 71 | ok = 1; 72 | map[j * 12 + r] = 1; 73 | putsprite(i, r * 10, j * 8 + 80); 74 | j = 0; 75 | } 76 | } 77 | } 78 | } 79 | getsprite(30, laser); 80 | spritesetvalue(30,S_WIDTH,2); 81 | spritesetvalue(30,S_HEIGHT,11); 82 | spritesetvalue(30,S_SPEEDY,21); 83 | spritesetvalue(30,S_ON_EXIT_SCREEN,laserExit); 84 | spritesetvalue(30,S_ON_COLLISION,laserCollision); 85 | getsprite(31, ufo[0]); 86 | spritesetvalue(31,S_WIDTH,16); 87 | spritesetvalue(31,S_HEIGHT,7); 88 | spritesetvalue(31,S_SOLID,1); 89 | spritesetvalue(31,S_SPEEDX,speed); 90 | spritesetvalue(31,S_SPEEDY,0); 91 | spritesetvalue(31,S_ON_EXIT_SCREEN,ufoExit); 92 | spritesetvalue(31,S_ON_COLLISION,ufoCollision); 93 | putsprite(31, 1, 8); 94 | } 95 | 96 | void nextcadr(){ 97 | if(gettimer(0) == 0){ 98 | settimer(0, 300); 99 | cadr = 1 - cadr; 100 | getsprite(31, ufo[cadr]); 101 | } 102 | } 103 | 104 | void main(){ 105 | setbgcolor(3); 106 | clearscreen(); 107 | speed = 3; 108 | setparticle(2, 10, 500); 109 | setemitter(100, 310, 230, 8); 110 | for(i = 0; i < 16; i++) 111 | putimagerle(earth,i * 8, 120, 8, 8); 112 | while(1){ 113 | init(); 114 | while(game){ 115 | key = getkey(); 116 | if(key == KEY_B){ 117 | if(spritegetvalue(30,S_LIVES) == 0) 118 | putsprite(30, spritegetvalue(31,S_X) + 7, spritegetvalue(31,S_Y) + 8); 119 | } 120 | nextcadr(); 121 | if(count == 0) 122 | vin(); 123 | } 124 | end(); 125 | } 126 | } -------------------------------------------------------------------------------- /example/mathbench.c: -------------------------------------------------------------------------------- 1 | int s1,s2,s3,s4,s5,s6,x; 2 | 3 | void main(){ 4 | while(1){ 5 | gotoxy(0,1); 6 | settimer(1,5000); 7 | for(int i = 0; i < 10000; i++){} 8 | s1 = 5000 - gettimer(1); 9 | printf("nop \t%d\n",s1); 10 | settimer(1,5000); 11 | for(i = 0; i < 10000; i++) 12 | x=x+1; 13 | s2 = 5000 - gettimer(1) - s1; 14 | printf("add \t%d\n",s2); 15 | settimer(1,5000); 16 | for(i = 0; i < 10000; i++) 17 | x=x-1; 18 | s3 = 5000 - gettimer(1) - s1; 19 | printf("sub \t%d\n",s3); 20 | settimer(1,5000); 21 | for(int i = 0; i < 10000; i++) 22 | x=x*3; 23 | s4 = 5000 - gettimer(1) - s1; 24 | printf("mul \t%d\n",s4); 25 | settimer(1,5000); 26 | for(i = 0; i < 10000; i++) 27 | x=x/3; 28 | s5 = 5000 - gettimer(1) - s1; 29 | printf("div \t%d\n",s5); 30 | settimer(1,5000); 31 | for(i = 0; i < 10000; i++) 32 | x=sqrt(30000); 33 | s6 = 5000 - gettimer(1) - s1; 34 | printf("sqr \t%d\n",s6); 35 | } 36 | } -------------------------------------------------------------------------------- /example/maze.c: -------------------------------------------------------------------------------- 1 | char wall0[] = {0xaa,0xba,0xaa,0xaa,0xbb,0xbb,0xbb,0xbb,0xaa,0xaa,0xab,0xaa,0xaa,0xaa,0xab,0xaa,0xbb,0xbb,0xbb,0xbb,0x99,0xb9,0x99,0x99,0xbb,0xbb,0xbb,0xbb,0x99,0x99,0x9b,0x99}; 2 | char wall1[] = {0xaa,0xba,0xaa,0xaa,0xbb,0xbb,0xbb,0xbb,0xaa,0xaa,0xab,0xaa,0xaa,0xaa,0xab,0xaa,0xbb,0xbb,0xbb,0xbb,0xaa,0xba,0xaa,0xca,0xaa,0xbc,0xcc,0xca,0xaa,0xba,0xaa,0xca}; 3 | char wall2[] = {0xff,0xff,0xff,0xff,0xfc,0xff,0xff,0xff,0xff,0xfc,0xff,0xcf,0xff,0xff,0xff,0xff,0xff,0xff,0xcf,0xff,0xfc,0xff,0xff,0xff,0xff,0xff,0xfc,0xff,0xff,0xff,0xff,0xff}; 4 | 5 | int maze[225]; 6 | char stack[100]; 7 | char stackpoint = 0; 8 | char x,y,i; 9 | char generate = 1; 10 | int s[4]; 11 | 12 | char randomCell(){ 13 | char n = random(3); 14 | if(x == 1) 15 | s[2] = 1; 16 | else 17 | s[2] = maze[x - 2 + y * 15]; 18 | if(x == 13) 19 | s[0] = 1; 20 | else 21 | s[0] = maze[x + 2 + y * 15]; 22 | if(y == 1) 23 | s[1] = 1; 24 | else 25 | s[1] = maze[x + (y - 2) * 15]; 26 | if(y == 13) 27 | s[3] = 1; 28 | else 29 | s[3] = maze[x + (y + 2) * 15]; 30 | if(s[n] != 0){ 31 | i = 8; 32 | while(i){ 33 | n++; 34 | if(n > 3) 35 | n = 0; 36 | if(s[n] == 0) 37 | return n; 38 | i--; 39 | } 40 | } 41 | else 42 | return n; 43 | return 4; 44 | } 45 | 46 | void nextCell(){ 47 | char n = randomCell(); 48 | if(n == 0){ 49 | x++; 50 | maze[x + y * 15] = wall2; 51 | x++; 52 | maze[x + y * 15] = wall2; 53 | } 54 | else if(n == 1){ 55 | y--; 56 | maze[x + y * 15] = wall2; 57 | y--; 58 | maze[x + y * 15] = wall2; 59 | } 60 | else if(n == 2){ 61 | x--; 62 | maze[x + y * 15] = wall2; 63 | x--; 64 | maze[x + y * 15] = wall2; 65 | } 66 | else if(n == 3){ 67 | y++; 68 | maze[x + y * 15] = wall2; 69 | y++; 70 | maze[x + y * 15] = wall2; 71 | } 72 | if(n == 4){ 73 | if(stackpoint < 2){ 74 | generate = 0; 75 | return; 76 | } 77 | stackpoint--; 78 | y = stack[stackpoint]; 79 | stackpoint--; 80 | x = stack[stackpoint]; 81 | } 82 | else{ 83 | stack[stackpoint] = x; 84 | stackpoint++; 85 | stack[stackpoint] = y; 86 | stackpoint++; 87 | } 88 | if(n < 4){ 89 | drawtile(4 ,4); 90 | delayredraw(); 91 | } 92 | } 93 | 94 | void main(){ 95 | while(1){ 96 | for(x = 0; x < 15; x++){ 97 | for(y = 0; y < 15; y++){ 98 | if(((x + 1) % 2 == 0) & ((y + 1) % 2 == 0)) 99 | maze[x + y * 15] = 0; 100 | else 101 | maze[x + y * 15] = wall1; 102 | } 103 | } 104 | loadtile(maze, 8, 8, 15, 15); 105 | drawtile(4 ,4); 106 | x = 1; 107 | y = 1; 108 | maze[x + y * 15] = wall2; 109 | while(generate){ 110 | nextCell(); 111 | } 112 | for(x = 1; x < 14; x++){ 113 | for(y = 0; y < 14; y++){ 114 | if((maze[x + y * 15] == wall1) && (maze[x + (y + 1) * 15] == wall2)) 115 | maze[x + y * 15] = wall0; 116 | } 117 | } 118 | drawtile(4 ,4); 119 | while(getkey() != KEY_B){} 120 | generate = 1; 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /example/memories.c: -------------------------------------------------------------------------------- 1 | /*settings*{"name":"memories","author":"corax","image":[136,136,129,136,136,129,136,136,129,136,136,129,140,200,129,140,200,129,140,200,129,136,168,129,136,140,129,136,140,129,136,140,129,136,40,129,136,200,129,136,200,129,136,200,129,136,40,129,136,136,129,136,136,129,136,136,129,130,39,129,136,200,129,136,200,129,136,200,129,130,34,129,136,136,129,136,136,129,136,136,129,136,136,129,17,17,17,17,17,17,17,17,17,17,17,17,136,136,129,136,136,129,136,136,129,136,136,129,140,200,129,136,168,129,140,200,129,140,200,129,136,140,129,136,40,129,136,140,129,136,140,129,136,200,129,136,40,129,136,200,129,136,200,129,136,136,129,130,39,129,136,136,129,136,136,129,136,200,129,130,34,129,136,200,129,136,200,129,136,136,129,136,136,129,136,136,129,136,136,129,17,17,17,17,17,17,17,17,17,17,17,17]}*/ 2 | //16x16 3 | char cursor[] = {0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22}; 4 | //16x16rle 5 | char back[] = {0x8,0xcc,0x82,0xc8,0x6,0x88,0x83,0x8c,0xc8,0x6,0x88,0x83,0x8c,0xc8,0x6,0x88,0x83,0x8c,0xc8,0x6,0x88,0x83,0x8c,0xc8,0x6,0x88,0x83,0x8c,0xc8,0x6,0x88,0x83,0x8c,0xc8,0x6,0x88,0x83,0x8c,0xc8,0x6,0x88,0x83,0x8c,0xc8,0x6,0x88,0x83,0x8c,0xc8,0x6,0x88,0x83,0x8c,0xc8,0x6,0x88,0x83,0x8c,0xc8,0x6,0x88,0x83,0x8c,0xc8,0x6,0x88,0x83,0x8c,0xc8,0x6,0x88,0x82,0x8c,0x8,0xcc}; 6 | char img0[] = {0x8,0xcc,0x82,0xc1,0x6,0x11,0x85,0x1c,0xc1,0x0,0x1,0x4,0x11,0x85,0x1c,0xc1,0x7,0x70,0x4,0x11,0x86,0x1c,0xc1,0x7,0x87,0x1,0x3,0x11,0x86,0x1c,0xc1,0x10,0x78,0x70,0x3,0x11,0x87,0x1c,0xc1,0x11,0x7,0x87,0x1,0x2,0x11,0x87,0x1c,0xc1,0x11,0x10,0x78,0x70,0x2,0x11,0x83,0x1c,0xc1,0x2,0x11,0x87,0x7,0x87,0x1,0x8,0x1c,0xc1,0x2,0x11,0x83,0x10,0x78,0x2,0x70,0x83,0x1c,0xc1,0x3,0x11,0x2,0x7,0x84,0x1,0x1c,0xc1,0x3,0x11,0x86,0x10,0x70,0x81,0x1c,0xc1,0x3,0x11,0x86,0x7,0x8,0x78,0x1c,0xc1,0x3,0x11,0x86,0x80,0x11,0x80,0x1c,0xc1,0x6,0x11,0x82,0x1c,0x8,0xcc}; 7 | char img1[] = {0x8,0xcc,0x82,0xc1,0x6,0x11,0x83,0x1c,0xc1,0x2,0x11,0x83,0x99,0x91,0x2,0x11,0x87,0x1c,0xc1,0x11,0x10,0xdd,0xd9,0x2,0x11,0x85,0x1c,0xc1,0x10,0x9,0x2,0xdd,0x90,0x91,0x11,0x1c,0xc1,0x9,0x99,0xd9,0xdd,0xd9,0x11,0x1c,0xc1,0xb,0x99,0xbd,0x2,0xdd,0x8e,0x91,0x1c,0xc1,0x9,0xb9,0x99,0x9d,0xdd,0xd9,0x1c,0xc1,0x10,0x9b,0x2,0x99,0x82,0xdf,0x2,0x1c,0x92,0xc1,0x11,0x9,0xb9,0x99,0xc1,0xfc,0x1c,0xc1,0x11,0x10,0x9b,0x9c,0x10,0x11,0x1c,0xc1,0x2,0x11,0x82,0x9,0x2,0x1,0x84,0x11,0x1c,0xc1,0x2,0x11,0x83,0x10,0xc,0x2,0x11,0x83,0x1c,0xc1,0x6,0x11,0x83,0x1c,0xc1,0x6,0x11,0x82,0x1c,0x8,0xcc}; 8 | char img2[] = {0x8,0xcc,0x82,0xc1,0x6,0x11,0x8d,0x1c,0xc1,0x11,0x17,0x7a,0xaa,0xa1,0x11,0x1c,0xc1,0x11,0x1c,0x2,0x88,0x87,0xb1,0x11,0x1c,0xc1,0x11,0xb1,0x2,0x11,0x98,0x1b,0x11,0x1c,0xc1,0x11,0x1b,0xb1,0x1f,0xb1,0x11,0x1c,0xc1,0x11,0xc1,0x11,0xf1,0x1b,0x11,0x1c,0xc1,0x1c,0x11,0x1f,0x2,0x11,0x83,0xb1,0x1c,0x2,0xc1,0x3,0x33,0x84,0x66,0x1b,0x1c,0x2,0xc1,0x2,0x33,0x85,0x36,0x66,0x1b,0x1c,0x2,0xc1,0x92,0x63,0x33,0x66,0x63,0x1b,0x1c,0xc1,0x1b,0x16,0x36,0x66,0x31,0xb1,0x1c,0xc1,0x11,0xb1,0x2,0x66,0x87,0x1b,0x11,0x1c,0xc1,0x11,0x1b,0x2,0xbb,0x85,0xb1,0x11,0x1c,0xc1,0x6,0x11,0x82,0x1c,0x8,0xcc}; 9 | char img3[] = {0x8,0xcc,0x82,0xc1,0x6,0x11,0x8c,0x1c,0xc1,0x1a,0xaa,0xac,0xaa,0xcb,0xb1,0x1c,0xc1,0x1a,0x3,0x77,0x87,0x7a,0xb1,0x1c,0xc1,0x1a,0x79,0x2,0x99,0xbd,0x9a,0xb1,0x1c,0xc1,0x1a,0x79,0x49,0x48,0xba,0xb1,0x1c,0xc1,0x1a,0x79,0x49,0x48,0xba,0xb1,0x1c,0xc1,0x1a,0x79,0x49,0x88,0xba,0xb1,0x1c,0xc1,0x1c,0x79,0x48,0x88,0xba,0xb1,0x1c,0xc1,0x1a,0x79,0x44,0x88,0xba,0xb1,0x1c,0xc1,0x11,0xa7,0x94,0x4b,0xab,0x11,0x1c,0xc1,0x11,0x1c,0x7b,0x4a,0xb1,0x11,0x1c,0xc1,0x2,0x11,0x83,0xc7,0x7b,0x2,0x11,0x83,0x1c,0xc1,0x2,0x11,0x83,0x1b,0xb1,0x2,0x11,0x83,0x1c,0xc1,0x6,0x11,0x82,0x1c,0x8,0xcc}; 10 | char img4[] = {0x8,0xcc,0x82,0xc1,0x2,0x11,0x97,0x4b,0x11,0xb1,0x11,0x1c,0xc1,0x11,0x14,0xff,0xbb,0xfb,0x11,0x1c,0xc1,0x11,0x14,0xfc,0xff,0xc9,0xb1,0x1c,0xc1,0x2,0x11,0xa0,0x4f,0xcc,0x99,0xb1,0x1c,0xc1,0x11,0x14,0x6f,0xff,0x66,0x11,0x1c,0xc1,0x11,0x4c,0xc6,0x66,0x9b,0x11,0x1c,0xc1,0x14,0xcf,0x6c,0xc6,0x99,0xb1,0x1c,0xc1,0x4c,0x2,0xff,0x87,0xc6,0xc9,0x9b,0x1c,0xc1,0x4c,0x2,0xff,0x8f,0xcc,0x99,0x9b,0x1c,0xc1,0x4c,0xcf,0xfc,0xc9,0x99,0x9b,0x1c,0xc1,0x14,0x2,0xcc,0x2,0x99,0x86,0xb1,0x1c,0xc1,0x11,0x4b,0x2,0x99,0x85,0xbb,0x11,0x1c,0xc1,0x2,0x11,0x2,0xbb,0x2,0x11,0x83,0x1c,0xc1,0x6,0x11,0x82,0x1c,0x8,0xcc}; 11 | char img5[] = {0x8,0xcc,0x82,0xc1,0x6,0x11,0x85,0x1c,0xc1,0x11,0x13,0x2,0x33,0x8f,0x31,0x11,0x1c,0xc1,0x11,0x3e,0xee,0x11,0x13,0x11,0x1c,0xc1,0x13,0xee,0x2,0x33,0x8e,0x11,0x31,0x1c,0xc1,0x13,0xe3,0xee,0xe1,0x11,0x31,0x1c,0xc1,0x13,0x2,0xee,0x82,0x1e,0x2,0x31,0x87,0x1c,0xc1,0x16,0xe3,0xee,0xe3,0x2,0x31,0x87,0x1c,0xc1,0x16,0xe3,0x3e,0xe3,0x2,0x31,0x87,0x1c,0xc1,0x16,0x36,0x3e,0xe3,0x2,0x31,0x84,0x1c,0xc1,0x16,0x2,0x63,0x89,0xee,0x3e,0x31,0x1c,0xc1,0x16,0x36,0x3e,0x2,0xee,0x86,0x31,0x1c,0xc1,0x11,0x63,0x2,0xee,0x87,0xe6,0x11,0x1c,0xc1,0x11,0x16,0x2,0x66,0x85,0x61,0x11,0x1c,0xc1,0x6,0x11,0x82,0x1c,0x8,0xcc}; 12 | char img6[] = {0x8,0xcc,0x82,0xc1,0x6,0x11,0x83,0x1c,0xc1,0x6,0x11,0x83,0x1c,0xc1,0x4,0x11,0x85,0x19,0x11,0x1c,0xc1,0x4,0x11,0x85,0x99,0xb1,0x1c,0xc1,0x3,0x11,0x86,0x19,0x9b,0xc1,0x1c,0xc1,0x3,0x11,0x86,0x99,0xb1,0xbc,0x1c,0xc1,0x2,0x11,0x88,0x19,0x9b,0xc1,0x1b,0x1c,0xc1,0x11,0x2,0xb9,0x89,0xb1,0xbc,0x11,0x1c,0xc1,0x19,0x99,0xcb,0x3,0x11,0x86,0x1c,0xc1,0x19,0x91,0xcb,0x3,0x11,0x86,0x1c,0xc1,0x19,0xcc,0xcb,0x3,0x11,0x86,0x1c,0xc1,0x11,0xbb,0xb1,0x3,0x11,0x83,0x1c,0xc1,0x6,0x11,0x83,0x1c,0xc1,0x6,0x11,0x82,0x1c,0x8,0xcc}; 13 | char img7[] = {0x8,0xcc,0x82,0xc1,0x6,0x11,0x83,0x1c,0xc1,0x3,0x11,0xa0,0x48,0x14,0x11,0x1c,0xc1,0x11,0x44,0x14,0x77,0xa7,0x41,0x1c,0xc1,0x14,0x77,0xa7,0x74,0x17,0x78,0x1c,0xc1,0x1a,0x74,0x18,0x41,0x14,0xa7,0x4c,0xc1,0x47,0x41,0x3,0x11,0x86,0x87,0x4c,0xc1,0x47,0x41,0x3,0x11,0x85,0x47,0x8c,0xc1,0x1a,0x3,0x11,0x87,0x18,0x7a,0x1c,0xc1,0x47,0x41,0x2,0x11,0x87,0x14,0x74,0x1c,0xc1,0x47,0x41,0x2,0x11,0x95,0x1a,0x74,0x1c,0xc1,0x18,0xaa,0x81,0x14,0x7a,0x81,0x1c,0xc1,0x11,0x18,0xa7,0x77,0x41,0x11,0x1c,0xc1,0x2,0x11,0x83,0xaa,0xa7,0x2,0x11,0x83,0x1c,0xc1,0x6,0x11,0x82,0x1c,0x8,0xcc}; 14 | 15 | int image[] = {img0, img1, img2, img3, img4, img5, img6, img7}; 16 | 17 | char music[] = "Abdelaze:d=8,o=5,b=160:32p,2d,2f,2a,4d6,e6,f6,g6,f6,e6,d6,2c#6,4a6,d6,f6,a6,f6,4d6,2a6,4g6,c6,e6,g6,e6,4c6,2a6,4f6,b,d6,f6,d6,4b,2g6,4e6,a,c#6,e6,c6,4a,2f6,e6,f6,e6,d6,4c#6,4f6,e6,f6,e6,d6,4a,4d6,c#6,d6,e6,d6,2d6"; 18 | 19 | char table[48]; 20 | char isOpen[48]; 21 | char opened[2]; 22 | 23 | int i,r,b,key,prevkey,x,y,open,count,time,step; 24 | 25 | void redraw(){ 26 | for(i = 0; i < 48; i++){ 27 | if(isOpen[i]) 28 | putimagerle(image[table[i]], (i % 8) * 16, 4 + (i / 8) * 16, 16, 16); 29 | else 30 | putimagerle(back, (i % 8) * 16, 4 + (i / 8) * 16, 16, 16); 31 | } 32 | } 33 | 34 | void init(){ 35 | x = 0; 36 | y = 0; 37 | open = 0; 38 | count = 48; 39 | time = 0; 40 | step = 0; 41 | getsprite(0, cursor); 42 | spritesetvalue(0, S_WIDTH, 16); 43 | spritesetvalue(0, S_HEIGHT, 16); 44 | putsprite(0, 0, 4); 45 | for(i = 0; i < 48; i++){ 46 | table[i] = i % 8; 47 | isOpen[i] = 0; 48 | } 49 | for(i = 0; i < 48; i++){ 50 | b = table[i]; 51 | r = random(47); 52 | table[i] = table[r]; 53 | table[r] = b; 54 | } 55 | redraw(); 56 | } 57 | 58 | void action(){ 59 | key = getkey(); 60 | if(key != prevkey){ 61 | if(key == KEY_LEFT){ 62 | if(x > 0) 63 | x--; 64 | } 65 | else if(key == KEY_RIGHT){ 66 | if(x < 7) 67 | x++; 68 | } 69 | if(key == KEY_UP){ 70 | if(y > 0) 71 | y--; 72 | } 73 | else if(key == KEY_DOWN){ 74 | if(y < 5) 75 | y++; 76 | } 77 | else if(key == KEY_A || key == KEY_B){ 78 | if(open >= 2){ 79 | if(table[(opened[0])] != table[(opened[1])]){ 80 | isOpen[(opened[0])] = 0; 81 | isOpen[(opened[1])] = 0; 82 | } 83 | else 84 | count -= 2; 85 | open = 0; 86 | } 87 | b = y * 8 + x; 88 | if(isOpen[b] == 0){ 89 | step++; 90 | isOpen[b] = 1; 91 | opened[open] = b; 92 | open++; 93 | redraw(); 94 | } 95 | } 96 | putsprite(0, x * 16, 4 + y * 16); 97 | } 98 | prevkey = key; 99 | } 100 | 101 | void printTime(){ 102 | if(gettimer(0) == 0){ 103 | settimer(0, 1000); 104 | time++; 105 | gotoxy(1,13); 106 | printf("step %d ", step); 107 | gotoxy(14,13); 108 | printf("%d:%d ", time / 60, time % 60); 109 | } 110 | } 111 | 112 | void main(){ 113 | loadrtttl(music,1); 114 | playrtttl(); 115 | while(1){ 116 | init(); 117 | while(count){ 118 | action(); 119 | if(count > 2) 120 | printTime(); 121 | delayredraw(); 122 | } 123 | } 124 | } 125 | -------------------------------------------------------------------------------- /example/mines.c: -------------------------------------------------------------------------------- 1 | #define MAX_MINE 8 2 | //12x12rle 3 | char cell[] = {0x6,0x99,0x82,0x96,0x4,0x66,0x83,0x69,0x96,0x4,0x66,0x83,0x69,0x96,0x4,0x66,0x83,0x69,0x96,0x4,0x66,0x83,0x69,0x96,0x4,0x66,0x83,0x69,0x96,0x4,0x66,0x83,0x69,0x96,0x4,0x66,0x83,0x69,0x96,0x4,0x66,0x83,0x69,0x96,0x4,0x66,0x83,0x69,0x9b,0x4,0xbb,0x82,0xb9,0x6,0x99}; 4 | char freecell[] = {0x6,0x99,0x82,0x9f,0x4,0xff,0x83,0xf9,0x9f,0x4,0x33,0x83,0xf9,0x9f,0x4,0x33,0x83,0xf9,0x9f,0x4,0x33,0x83,0xf9,0x9f,0x4,0x33,0x83,0xf9,0x9f,0x4,0x33,0x83,0xf9,0x9f,0x4,0x33,0x83,0xf9,0x9f,0x4,0x33,0x83,0xf9,0x9f,0x4,0x33,0x83,0xf9,0x9f,0x4,0xff,0x82,0xf9,0x6,0x99}; 5 | char minecell[] = {0x6,0x99,0x82,0x9f,0x4,0xff,0x83,0xf9,0x9f,0x4,0x33,0x85,0xf9,0x9f,0x3b,0x33,0x2,0xb3,0x84,0xf9,0x9f,0x33,0x2,0xbb,0x8b,0x33,0xf9,0x9f,0x3b,0xbf,0xbb,0x33,0xf9,0x9f,0x33,0x2,0xbb,0x90,0x93,0xf9,0x9f,0x33,0x9b,0x99,0x33,0xf9,0x9f,0x3b,0x39,0x33,0x93,0xf9,0x9f,0x4,0x33,0x83,0xf9,0x9f,0x4,0xff,0x82,0xf9,0x6,0x99}; 6 | char flagcell[] = {0x6,0x99,0x82,0x96,0x4,0x66,0x91,0x69,0x96,0x66,0xb2,0x26,0x66,0x69,0x96,0x66,0xb2,0x22,0x26,0x69,0x96,0x66,0xb2,0x2,0x22,0x91,0x69,0x96,0x66,0xb2,0x22,0x26,0x69,0x96,0x66,0xb2,0x26,0x66,0x69,0x96,0x66,0xb6,0x2,0x66,0x85,0x69,0x96,0x66,0xb6,0x2,0x66,0x83,0x69,0x96,0x4,0x66,0x83,0x69,0x9b,0x4,0xbb,0x82,0xb9,0x6,0x99}; 7 | //12x12 8 | char select[] = {0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x0,0x0,0x0,0x0,0xd,0xd0,0x0,0x0,0x0,0x0,0xd,0xd0,0x0,0x0,0x0,0x0,0xd,0xd0,0x0,0x0,0x0,0x0,0xd,0xd0,0x0,0x0,0x0,0x0,0xd,0xd0,0x0,0x0,0x0,0x0,0xd,0xd0,0x0,0x0,0x0,0x0,0xd,0xd0,0x0,0x0,0x0,0x0,0xd,0xd0,0x0,0x0,0x0,0x0,0xd,0xd0,0x0,0x0,0x0,0x0,0xd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}; 9 | //3x5 10 | char n1[] = {0x22,0x0,0x2,0x0,0x2,0x0,0x2,0x0,0x22,0x20}; 11 | char n2[] = {0x22,0x20,0x0,0x20,0x22,0x20,0x20,0x0,0x22,0x20}; 12 | char n3[] = {0x22,0x20,0x0,0x20,0x22,0x20,0x0,0x20,0x22,0x20}; 13 | char n4[] = {0x20,0x20,0x20,0x20,0x22,0x20,0x0,0x20,0x0,0x20}; 14 | char n5[] = {0x22,0x20,0x20,0x0,0x22,0x20,0x0,0x20,0x22,0x20}; 15 | char n6[] = {0x22,0x20,0x20,0x0,0x22,0x20,0x20,0x20,0x22,0x20}; 16 | int numbers[] = {0, n1, n2, n3, n4, n5, n6, n6, n6}; 17 | 18 | char field[80]; 19 | 20 | int i,time,key,lastkey,x,y,game,closedcell,firststep; 21 | 22 | void init(){ 23 | game = 1; 24 | firststep = 1; 25 | time = 0; 26 | closedcell = 80; 27 | char r; 28 | getsprite(1, select); 29 | spritesetvalue(1, S_WIDTH, 12); 30 | spritesetvalue(1, S_HEIGHT, 12); 31 | putsprite(1, 4, 24); 32 | for(i = 0; i < 80; i++){ 33 | putimagerle(cell,4 + (i % 10) * 12, 24 + (i / 10) * 12, 12, 12); 34 | field[i] = 0; 35 | } 36 | for(i = 0; i < MAX_MINE; i++){ 37 | r = random(80); 38 | while(field[r]) 39 | r = random(80); 40 | field[r] = 1; 41 | } 42 | } 43 | 44 | void end(){ 45 | settimer(0, 1000); 46 | while(gettimer(0)){} 47 | while(getkey() == 0){} 48 | game = 0; 49 | } 50 | 51 | void printTime(){ 52 | if(gettimer(0) == 0){ 53 | settimer(0, 1000); 54 | time++; 55 | gotoxy(9,1); 56 | printf("%d:%d ", time / 60, time % 60); 57 | } 58 | } 59 | 60 | char testCell(char x1, char y1){ 61 | int c,pos; 62 | pos = x1 + y1 * 10; 63 | c = 0; 64 | if(y1 > 0){ 65 | if(x1 > 0 && field[pos - 11] == 1) 66 | c=c+1; 67 | if(field[pos - 10] == 1) 68 | c=c+1; 69 | if(x1 < 9 && field[pos - 9] == 1) 70 | c=c+1; 71 | } 72 | if(x1 > 0 && field[pos - 1] == 1) 73 | c=c+1; 74 | if(x1 < 9 && field[pos + 1] == 1) 75 | c=c+1; 76 | if(y1 < 7){ 77 | if(x1 > 0 && field[pos + 11] == 1) 78 | c=c+1; 79 | if(field[pos + 10] == 1) 80 | c=c+1; 81 | if(field[pos + 9] == 1) 82 | c=c+1; 83 | } 84 | if(c > 0) 85 | putimage(numbers[c],8 + x1 * 12, 28 + y1 * 12, 4, 5); 86 | return c; 87 | } 88 | 89 | void openCell(int x1, int y1){ 90 | int c, pos; 91 | pos = x1 + y1 * 10; 92 | c = 0; 93 | if(field[pos] == 0){ 94 | field[pos] = 3; 95 | closedcell--; 96 | putimagerle(freecell,4 + x1 * 12, 24 + y1 * 12, 12, 12); 97 | c = testCell(x1, y1); 98 | if(c == 0){ 99 | if(x1 > 0) 100 | openCell(x1 - 1, y1); 101 | if(x1 < 9) 102 | openCell(x1 + 1, y1); 103 | if(y1 > 0) 104 | openCell(x1, y1 - 1); 105 | if(y1 < 7) 106 | openCell(x1, y1 + 1); 107 | if(x1 > 0 && y1 > 0) 108 | openCell(x1 - 1, y1 - 1); 109 | if(x1 < 9 && y1 < 7) 110 | openCell(x1 + 1, y1 + 1); 111 | if(y1 > 0 && x1 < 9) 112 | openCell(x1 + 1, y1 - 1); 113 | if(y1 < 7 && x1 > 0) 114 | openCell(x1 - 1, y1 + 1); 115 | } 116 | } 117 | } 118 | 119 | void setFlag(){ 120 | if(field[x + y * 10] < 2) 121 | putimagerle(flagcell,4 + x * 12, 24 + y * 12, 12, 12); 122 | } 123 | 124 | void action(){ 125 | key = getkey(); 126 | if(key != lastkey){ 127 | lastkey = key; 128 | if(key == KEY_UP) 129 | y--; 130 | if(key == KEY_DOWN) 131 | y++; 132 | if(key == KEY_LEFT) 133 | x--; 134 | if(key == KEY_RIGHT) 135 | x++; 136 | if(key == KEY_A){ 137 | if(firststep){ 138 | firststep = 0; 139 | field[x + y * 10] = 0; 140 | } 141 | if(field[x + y * 10] == 1){ 142 | putimagerle(minecell,4 + x * 12, 24 + y * 12, 12, 12); 143 | end(); 144 | } 145 | else if(field[x + y * 10] == 0){ 146 | openCell(x, y); 147 | } 148 | } 149 | if(key == KEY_B) 150 | setFlag(); 151 | if(x >= 10) 152 | x = 0; 153 | else if(x < 0) 154 | x = 9; 155 | if(y >= 8) 156 | y = 0; 157 | else if(y < 0) 158 | y = 7; 159 | putsprite(1, 4 + x*12, 24 + y*12); 160 | } 161 | } 162 | 163 | void main(){ 164 | while(1){ 165 | init(); 166 | while(game){ 167 | printTime(); 168 | action(); 169 | if(closedcell <= MAX_MINE){ 170 | gotoxy(7,2) 171 | printf("you win!"); 172 | end(); 173 | } 174 | } 175 | } 176 | } 177 | -------------------------------------------------------------------------------- /example/platformer.c: -------------------------------------------------------------------------------- 1 | char a[] = {0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd5,0x8d,0x5d,0xdd,0xdd,0xdd,0xdd,0xdd,0xd8,0x8d,0xdd,0xdd,0xdd,0xd5,0xdd,0xd8,0x88,0x8d,0xdd,0xd5,0x88,0xd8,0x88,0xd8,0x88,0x88,0x88,0x88,0x88,0x58,0x88,0x88,0x88,0xd8,0x88,0x88,0x88,0xd8,0x88,0x88,0x88,0x88,0x88,0x58,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x85,0x88,0x88,0x88,0x88,0x58,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x8a,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xa8,0x88,0x88,0xa8,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xa8,0x88,0x88,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0}; 2 | char b[] = {0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0xbb,0x9b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xab,0x9a,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xab,0x9a,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xab,0x9a,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xab,0x9a,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0xbb,0xbb,0xbb,0xbb,0xbb,0xb9,0xbb,0xbb,0xaa,0xaa,0xaa,0xaa,0xaa,0xb9,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xb9,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xb9,0xaa,0xaa,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0xbb,0xbb,0xbb,0x9b,0xbb,0xbb,0xbb,0xbb,0xaa,0xaa,0xab,0x9a,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xab,0x9a,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xab,0x9a,0xaa,0xaa,0xaa,0xaa}; 3 | char c[] = {0xb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0xbc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xfb,0xbc,0xc9,0xc9,0xc9,0xc9,0xc9,0xcc,0xfb,0xbc,0xcc,0xcc,0xcc,0xcc,0xcc,0xc9,0xfb,0xbc,0x9c,0xcc,0xcc,0xcc,0xcc,0xcc,0xfb,0xbc,0xcc,0xcc,0xcc,0xcc,0xcc,0xc9,0xfb,0xbc,0x9c,0xcc,0xcc,0xcc,0xcc,0xcc,0xfb,0xbc,0xcc,0xcc,0xcc,0xcc,0xcc,0xc9,0xfb,0xbc,0x9c,0xcc,0xcc,0xcc,0xcc,0xcc,0xfb,0xbc,0xcc,0xcc,0xcc,0xcc,0xcc,0xc9,0xfb,0xbc,0x9c,0xcc,0xcc,0xcc,0xcc,0xcc,0xfb,0xbc,0xcc,0xcc,0xcc,0xcc,0xcc,0xc9,0xfb,0xbc,0x9c,0xcc,0xcc,0xcc,0xcc,0xcc,0xfb,0xbc,0xcc,0x9c,0x9c,0x9c,0x9c,0x9c,0xfb,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0}; 4 | char cloud1[] = {0x18,0x22,0x8,0x2a,0x8,0xa2,0x10,0xaa,0x8,0xab,0x8,0xba,0x10,0xbb,0x8,0xb0,0x8,0xb}; 5 | char cloud2[] = {0x80,0x22}; 6 | char cloud3[] = {0x1a,0x22,0x84,0x21,0x11,0x12,0x4,0x22,0x82,0x21,0x3,0x11,0x82,0x12,0x3,0x22,0x5,0x11,0x84,0x12,0x22,0x21,0x6,0x11,0x83,0x22,0x21,0x6,0x11,0x83,0x12,0x21,0x7,0x11,0x82,0x22,0x7,0x11,0x83,0x22,0x21,0x5,0x11,0x3,0x22,0x5,0x21,0x21,0x22}; 7 | char spr0[] = {0x0,0x0,0xbc,0x0,0x0,0x0,0xb,0xbb,0xc0,0x0,0x0,0xb,0x1b,0x10,0x0,0x0,0xb,0xbb,0xc0,0x0,0x0,0xb,0xbb,0xc0,0x70,0x0,0xbb,0xbb,0xb7,0x63,0xb,0xbb,0xbb,0x76,0x63,0xb,0xbb,0xb7,0xb6,0x63,0x6,0xbb,0x7b,0xb6,0x63,0xb,0x67,0xbb,0xb6,0x63,0xb,0x66,0xbb,0xb6,0x63,0x6,0xbb,0xeb,0xbc,0x30,0xb,0xc0,0x0,0xbc,0x0,0xb,0xc0,0x0,0xbc,0x0,0xb,0xc0,0x0,0xbc,0x0,0xb,0xbc,0x0,0xbb,0xc0}; 8 | char spr1[] = {0x0,0x0,0xbc,0x0,0x0,0x0,0xb,0xbb,0xc0,0x0,0x0,0xb,0x1b,0x10,0x0,0x0,0xb,0xbb,0xc0,0x70,0x0,0xb,0xbb,0xc7,0x0,0x0,0xbb,0xbb,0x7b,0x0,0xb,0xbb,0xb7,0xb6,0x63,0xb,0xbb,0x7b,0xb6,0x63,0x66,0xb7,0xbb,0xb6,0x63,0x6,0x6b,0xbb,0xb6,0x63,0x6,0x6b,0xbb,0xb6,0x63,0x6b,0xb3,0xbb,0xb6,0x63,0x0,0xbc,0xb,0xc0,0x30,0x0,0xbc,0xb,0xc0,0x0,0x0,0xbc,0xb,0xc0,0x0,0x0,0xbb,0xcb,0xbc,0x0}; 9 | int spr[] = {spr0,spr1}; 10 | 11 | 12 | int t[] = { 13 | 0,0,b,b,0,0,0,0,b,0,0,c,0,0,0,0,0,0,c,0, 14 | 0,b,b,b,0,0,0,b,b,0,0,0,0,b,0,0,0,0,0,0, 15 | a,a,a,a,a,a,a,a,a,a,a,a,a,a,0,0,a,a,a,a 16 | }; 17 | int i,key; 18 | char cadr = 0; 19 | 20 | void scrollscreen(){ 21 | if(spritegetvalue(1,S_X) > 80){ 22 | scroll(1,2);} 23 | else if(spritegetvalue(1,S_X) < 40){ 24 | scroll(1,0);} 25 | } 26 | 27 | void init(){ 28 | for(i = 0; i < 16; i++){ 29 | putimagerle(cloud2, i * 16, 0, 16, 16); 30 | putimagerle(cloud1, i * 16, 16, 16, 13); 31 | } 32 | putimagerle(cloud3, 64, 0, 16, 16); 33 | putimagerle(cloud3, 2, 0, 16, 16); 34 | loadtile(t, 16, 16, 20, 3); 35 | getsprite(1,spr0); 36 | putsprite(1, 20, 30); 37 | spritesetvalue(1,S_WIDTH,10); 38 | spritesetvalue(1,S_HEIGHT,16); 39 | spritesetvalue(1,S_GRAVITY,1); 40 | spritesetvalue(1,S_SOLID,1); 41 | drawtile(10 ,70); 42 | } 43 | 44 | void main(){ 45 | init(); 46 | while(1){ 47 | getsprite(1,spr[cadr]); 48 | key = getkey(); 49 | if(key & KEY_LEFT){ 50 | spritesetvalue(1,S_SPEEDX,-2); 51 | cadr = 1 - cadr; 52 | } 53 | else if(key & KEY_RIGHT){ 54 | spritesetvalue(1,S_SPEEDX,2); 55 | cadr = 1 - cadr; 56 | } 57 | else{ 58 | spritesetvalue(1,S_SPEEDX,0); 59 | } 60 | if(((key & KEY_B) > 0) && (spritegetvalue(1,1) > 50)){ 61 | if(spritegetvalue(1,S_SPEEDY) == 0){ 62 | spritesetvalue(1,S_SPEEDY,-10); 63 | } 64 | } 65 | if(spritegetvalue(1,S_Y) > 128){ 66 | clearscreen(); 67 | init(); 68 | } 69 | scrollscreen(); 70 | delayredraw(); 71 | } 72 | } -------------------------------------------------------------------------------- /example/race.c: -------------------------------------------------------------------------------- 1 | char road0[] = {0x83,0x0,0xc,0x4,0xcc,0x82,0xc0,0x2,0x0,0x6,0xbb,0x83,0x0,0xb,0x6,0xbb,0x82,0xb0,0x8,0xcc,0x00}; 2 | char road1[] = {0x83,0x0,0xc,0x4,0xcc,0x82,0xc0,0x2,0x0,0x6,0xcc,0x83,0x0,0xb,0x6,0xbb,0x82,0xb0,0x8,0xbb,0x00}; 3 | char road2[] = {0x83,0x0,0xb,0x4,0xbb,0x82,0xb0,0x2,0x0,0x6,0xcc,0x83,0x0,0xc,0x6,0xcc,0x82,0xc0,0x8,0xbb,0x00}; 4 | char road3[] = {0x83,0x0,0xb,0x4,0xbb,0x82,0xb0,0x2,0x0,0x6,0xbb,0x83,0x0,0xc,0x6,0xcc,0x82,0xc0,0x8,0xcc,0x00}; 5 | char sky[] = {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x11,0x10,0x0,0x1,0x11,0x11,0x0,0x11,0x11,0x11,0x10,0x1,0x1,0x11,0x11,0x0,0x0,0x11,0x0,0x0,0x0,0x0,0x1,0x00}; 6 | char car[] = {0x0,0x0,0x0,0x0,0x0,0x22,0x22,0x0,0x2,0x11,0x11,0x20,0x2,0x11,0x11,0x20,0x22,0x22,0x22,0x22,0x27,0x22,0x22,0x72,0x22,0x22,0x22,0x22,0xb,0x0,0x0,0xb0,0x00}; 7 | char car1[] = {0x0,0x0,0x0,0x0,0x0,0x66,0x66,0x0,0x6,0x11,0x11,0x60,0x6,0x11,0x11,0x60,0x66,0x66,0x66,0x66,0x67,0x66,0x66,0x76,0x66,0x66,0x66,0x66,0x6,0x0,0x0,0x60,0x00}; 8 | int roads[4]; 9 | roads[0] = road0; 10 | roads[1] = road1; 11 | roads[2] = road2; 12 | roads[3] = road3; 13 | 14 | char skyx = 0; 15 | char skyy = 5; 16 | char c = 0; 17 | char i,key; 18 | char carx = 80; 19 | char car1x = 60; 20 | char car1y = 70; 21 | char car1size = 1; 22 | 23 | void animate(){ 24 | c++; 25 | skyx++; 26 | if(c > 3){c = 0;} 27 | if(skyx > 128){ 28 | skyx = 0; 29 | skyy = random(30); 30 | } 31 | } 32 | 33 | void main(){ 34 | getsprite(0, sky); 35 | getsprite(31, car); 36 | setcolor(14); 37 | for(i=0; i<68;i++) 38 | line(0,i,127,i); 39 | setcolor(13); 40 | for(i=68; i<124;i++) 41 | line(0,i,127,i); 42 | while(1){ 43 | setimagesize(7); 44 | putimagerle(roads[c], 8, 96,16,4); 45 | setimagesize(4); 46 | putimagerle(roads[c], 32, 80,16,4); 47 | setimagesize(2); 48 | putimagerle(roads[c], 48, 72,16,4); 49 | setimagesize(1); 50 | putimagerle(roads[c], 56, 68,16,4); 51 | animate(); 52 | key = getkey(); 53 | if((key == 4) & (carx > 24)){ 54 | carx--;} 55 | if((key == 8) & (carx < 80)){ 56 | carx++;} 57 | car1size = 1 + (car1y - 60) / 13; 58 | setimagesize(car1size); 59 | putimage(car1, car1x - car1size * 2, car1y ,8 ,8); 60 | setimagesize(3); 61 | putimage(car, carx, 98 ,8 ,8); 62 | putsprite(0, skyx, skyy); 63 | car1y++; 64 | if(car1y > 98){ 65 | car1y = 68;} 66 | delayredraw(); 67 | } 68 | } 69 | 70 | -------------------------------------------------------------------------------- /example/raycast.c: -------------------------------------------------------------------------------- 1 | char b[] = {0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x98,0x88,0x88,0x88,0x88,0x88,0x88,0x89,0x98,0x88,0x88,0x88,0x88,0x88,0x88,0x89,0x98,0x88,0x88,0x88,0x88,0x88,0x88,0x89,0x98,0x88,0x88,0x88,0x88,0x88,0x88,0x89,0x98,0x88,0x88,0x88,0x88,0x88,0x88,0x89,0x98,0x88,0x88,0x88,0x88,0x88,0x88,0x89,0x98,0x88,0x88,0x88,0x88,0x88,0x88,0x89,0x98,0x88,0x88,0x88,0x88,0x88,0x88,0x89,0x98,0x88,0x88,0x88,0x88,0x88,0x88,0x89,0x98,0x88,0x88,0x88,0x88,0x88,0x88,0x89,0x98,0x88,0x88,0x88,0x88,0x88,0x88,0x89,0x98,0x88,0x88,0x88,0x88,0x88,0x88,0x89,0x98,0x88,0x88,0x88,0x88,0x88,0x88,0x89,0x98,0x88,0x88,0x88,0x88,0x88,0x88,0x89,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99}; 2 | 3 | int map[] ={ 4 | b,b,b,b,b,b,b,b, 5 | b,0,0,b,0,0,b,b, 6 | b,b,0,0,0,0,b,b, 7 | b,0,0,0,0,0,0,b, 8 | b,0,0,0,0,0,0,b, 9 | b,0,0,0,0,0,0,b, 10 | b,b,b,b,b,b,b,b 11 | } 12 | 13 | int colors[] = {0,11,12,15,1,3}; 14 | 15 | int x,y,x1,y1,x2,y2,angle,i,d,h,key,top,prevx,prevy; 16 | 17 | int sintable[] = {0, 4, 8, 13, 17, 22, 26, 31, 35, 40, 44, 48, 53, 57, 61, 66, 70, 74, 79, 83, 87, 91, 95, 100, 104, 108, 112, 116, 120, 124, 127, 131, 135, 139, 143, 146, 150, 154, 157, 161, 164, 167, 171, 174, 177, 181, 184, 187, 190, 193, 196, 198, 201, 204, 207, 209, 212, 214, 217, 219, 221, 223, 226, 228, 230, 232, 233, 235, 237, 238, 240, 242, 243, 244, 246, 247, 248, 249, 250, 251, 252, 252, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 254, 253, 252, 252, 251, 250, 249, 248, 247, 246, 244, 243, 242, 240, 239, 237, 235, 233, 232, 230, 228, 226, 223, 221, 219, 217, 214, 212, 209, 207, 204, 201, 198, 196, 193, 190, 187, 184, 181, 177, 174, 171, 167, 164, 161, 157, 154, 150, 146, 143, 139, 135, 131, 128, 124, 120, 116, 112, 108, 104, 100, 95, 91, 87, 83, 79, 74, 70, 66, 61, 57, 53, 48, 44, 40, 35, 31, 26, 22, 17, 13, 8, 4, 0, -5, -9, -14, -18, -23, -27, -32, -36, -40, -45, -49, -54, -58, -62, -67, -71, -75, -80, -84, -88, -92, -96, -100, -105, -109, -113, -117, -121, -125, -128, -132, -136, -140, -144, -147, -151, -155, -158, -162, -165, -168, -172, -175, -178, -181, -185, -188, -191, -194, -197, -199, -202, -205, -208, -210, -213, -215, -218, -220, -222, -224, -226, -229, -231, -232, -234, -236, -238, -239, -241, -243, -244, -245, -247, -248, -249, -250, -251, -252, -253, -253, -254, -255, -255, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -255, -255, -254, -253, -253, -252, -251, -250, -249, -248, -247, -245, -244, -243, -241, -240, -238, -236, -234, -233, -231, -229, -227, -224, -222, -220, -218, -215, -213, -210, -208, -205, -202, -200, -197, -194, -191, -188, -185, -182, -178, -175, -172, -169, -165, -162, -158, -155, -151, -147, -144, -140, -136, -132, -129, -125, -121, -117, -113, -109, -105, -101, -97, -92, -88, -84, -80, -75, -71, -67, -63, -58, -54, -49, -45, -41, -36, -32, -27, -23, -18, -14, -10, -5}; 18 | int costable[] = {256, 255, 255, 255, 255, 255, 254, 254, 253, 252, 252, 251, 250, 249, 248, 247, 246, 244, 243, 242, 240, 238, 237, 235, 233, 232, 230, 228, 226, 223, 221, 219, 217, 214, 212, 209, 207, 204, 201, 198, 196, 193, 190, 187, 184, 181, 177, 174, 171, 167, 164, 161, 157, 154, 150, 146, 143, 139, 135, 131, 128, 124, 120, 116, 112, 108, 104, 100, 95, 91, 87, 83, 79, 74, 70, 66, 61, 57, 53, 48, 44, 40, 35, 31, 26, 22, 17, 13, 8, 4, 0, -5, -9, -14, -18, -23, -27, -32, -36, -41, -45, -49, -54, -58, -62, -67, -71, -75, -80, -84, -88, -92, -96, -100, -105, -109, -113, -117, -121, -125, -128, -132, -136, -140, -144, -147, -151, -155, -158, -162, -165, -168, -172, -175, -178, -181, -185, -188, -191, -194, -197, -199, -202, -205, -208, -210, -213, -215, -218, -220, -222, -224, -227, -229, -231, -232, -234, -236, -238, -239, -241, -243, -244, -245, -247, -248, -249, -250, -251, -252, -253, -253, -254, -255, -255, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -255, -255, -254, -253, -253, -252, -251, -250, -249, -248, -247, -245, -244, -243, -241, -240, -238, -236, -234, -233, -231, -229, -227, -224, -222, -220, -218, -215, -213, -210, -208, -205, -202, -199, -197, -194, -191, -188, -185, -182, -178, -175, -172, -169, -165, -162, -158, -155, -151, -147, -144, -140, -136, -132, -129, -125, -121, -117, -113, -109, -105, -101, -96, -92, -88, -84, -80, -75, -71, -67, -63, -58, -54, -49, -45, -41, -36, -32, -27, -23, -18, -14, -10, -5, -1, 4, 8, 13, 17, 22, 26, 31, 35, 39, 44, 48, 53, 57, 61, 66, 70, 74, 79, 83, 87, 91, 95, 99, 104, 108, 112, 116, 120, 124, 127, 131, 135, 139, 143, 146, 150, 153, 157, 161, 164, 167, 171, 174, 177, 180, 184, 187, 190, 193, 196, 198, 201, 204, 207, 209, 212, 214, 217, 219, 221, 223, 225, 228, 230, 231, 233, 235, 237, 238, 240, 242, 243, 244, 246, 247, 248, 249, 250, 251, 252, 252, 253, 254, 254, 255, 255, 255, 255, 255}; 19 | 20 | char cast(int ang){ 21 | int i; 22 | ang = ang % 360; 23 | for(i = 0; i < 14; i++){ 24 | x1 = x + (i*costable[ang])/64; 25 | y1 = y + (i*sintable[ang])/64; 26 | if (map[x1/16+y1/16*8] != 0){ 27 | line(x,y,x1,y1); 28 | return; 29 | } 30 | } 31 | } 32 | 33 | void main(){ 34 | x = 50; 35 | y = 70; 36 | angle = 90; 37 | loadtile(map, 16,16,8,7); 38 | while(1){ 39 | key = getkey(); 40 | if(key == KEY_UP){ 41 | prevx = x; 42 | prevy = y; 43 | x = x + (costable[angle])/64; 44 | y = y + (sintable[angle])/64; 45 | if(map[x/16+y/16*8] != 0){ 46 | x = prevx; 47 | y = prevy; 48 | } 49 | } 50 | if(key == KEY_DOWN){ 51 | prevx = x; 52 | prevy = y; 53 | x = x - (costable[angle])/64; 54 | y = y - (sintable[angle])/64; 55 | if(map[x/16+y/16*8] != 0){ 56 | x = prevx; 57 | y = prevy; 58 | } 59 | } 60 | if(key == KEY_LEFT) 61 | angle-=8; 62 | if(key == KEY_RIGHT) 63 | angle+=8; 64 | if(angle >= 360) 65 | angle = 0; 66 | if(angle < 0) 67 | angle = 359; 68 | clearscreen(); 69 | drawtile(0,0); 70 | if(angle >= 360) 71 | angle = 0; 72 | gotoxy(8,5); 73 | putn(angle); 74 | for(i = 0; i < 64; i+=4){ 75 | setcolor(2); 76 | cast(angle+i); 77 | d = distance(x, y, x1, y1); 78 | if(d < 70){ 79 | h = (70 - d)/4; 80 | setcolor(colors[h/3]); 81 | top = (16 - h)/2; 82 | line(32 + i/4, 112 + top, 32 + i/4, 112 + h + top); 83 | } 84 | } 85 | delayredraw(); 86 | delayredraw(); 87 | delayredraw(); 88 | } 89 | } -------------------------------------------------------------------------------- /example/raycast2.c: -------------------------------------------------------------------------------- 1 | char b[] = {0xdd,0xdd}; 2 | int map[] ={ 3 | b,b,b,b,b,b,b,b, 4 | b,0,0,b,0,0,b,b, 5 | b,b,0,b,0,0,b,b, 6 | b,0,0,0,0,0,0,b, 7 | b,0,0,0,b,b,b,b, 8 | b,0,0,0,0,0,0,b, 9 | b,b,b,b,b,b,b,b 10 | } 11 | 12 | int x,y,x1,y1,prevx,prevy,angle,a,i,d,h,top,key; 13 | 14 | int colors[] = {4,11,9,12,15,1,3}; 15 | int sintable[] = {0, 4, 8, 13, 17, 22, 26, 31, 35, 40, 44, 48, 53, 57, 61, 66, 70, 74, 79, 83, 87, 91, 95, 100, 104, 108, 112, 116, 120, 124, 127, 131, 135, 139, 143, 146, 150, 154, 157, 161, 164, 167, 171, 174, 177, 181, 184, 187, 190, 193, 196, 198, 201, 204, 207, 209, 212, 214, 217, 219, 221, 223, 226, 228, 230, 232, 233, 235, 237, 238, 240, 242, 243, 244, 246, 247, 248, 249, 250, 251, 252, 252, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 254, 253, 252, 252, 251, 250, 249, 248, 247, 246, 244, 243, 242, 240, 239, 237, 235, 233, 232, 230, 228, 226, 223, 221, 219, 217, 214, 212, 209, 207, 204, 201, 198, 196, 193, 190, 187, 184, 181, 177, 174, 171, 167, 164, 161, 157, 154, 150, 146, 143, 139, 135, 131, 128, 124, 120, 116, 112, 108, 104, 100, 95, 91, 87, 83, 79, 74, 70, 66, 61, 57, 53, 48, 44, 40, 35, 31, 26, 22, 17, 13, 8, 4, 0, -5, -9, -14, -18, -23, -27, -32, -36, -40, -45, -49, -54, -58, -62, -67, -71, -75, -80, -84, -88, -92, -96, -100, -105, -109, -113, -117, -121, -125, -128, -132, -136, -140, -144, -147, -151, -155, -158, -162, -165, -168, -172, -175, -178, -181, -185, -188, -191, -194, -197, -199, -202, -205, -208, -210, -213, -215, -218, -220, -222, -224, -226, -229, -231, -232, -234, -236, -238, -239, -241, -243, -244, -245, -247, -248, -249, -250, -251, -252, -253, -253, -254, -255, -255, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -255, -255, -254, -253, -253, -252, -251, -250, -249, -248, -247, -245, -244, -243, -241, -240, -238, -236, -234, -233, -231, -229, -227, -224, -222, -220, -218, -215, -213, -210, -208, -205, -202, -200, -197, -194, -191, -188, -185, -182, -178, -175, -172, -169, -165, -162, -158, -155, -151, -147, -144, -140, -136, -132, -129, -125, -121, -117, -113, -109, -105, -101, -97, -92, -88, -84, -80, -75, -71, -67, -63, -58, -54, -49, -45, -41, -36, -32, -27, -23, -18, -14, -10, -5}; 16 | int costable[] = {256, 255, 255, 255, 255, 255, 254, 254, 253, 252, 252, 251, 250, 249, 248, 247, 246, 244, 243, 242, 240, 238, 237, 235, 233, 232, 230, 228, 226, 223, 221, 219, 217, 214, 212, 209, 207, 204, 201, 198, 196, 193, 190, 187, 184, 181, 177, 174, 171, 167, 164, 161, 157, 154, 150, 146, 143, 139, 135, 131, 128, 124, 120, 116, 112, 108, 104, 100, 95, 91, 87, 83, 79, 74, 70, 66, 61, 57, 53, 48, 44, 40, 35, 31, 26, 22, 17, 13, 8, 4, 0, -5, -9, -14, -18, -23, -27, -32, -36, -41, -45, -49, -54, -58, -62, -67, -71, -75, -80, -84, -88, -92, -96, -100, -105, -109, -113, -117, -121, -125, -128, -132, -136, -140, -144, -147, -151, -155, -158, -162, -165, -168, -172, -175, -178, -181, -185, -188, -191, -194, -197, -199, -202, -205, -208, -210, -213, -215, -218, -220, -222, -224, -227, -229, -231, -232, -234, -236, -238, -239, -241, -243, -244, -245, -247, -248, -249, -250, -251, -252, -253, -253, -254, -255, -255, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, -255, -255, -254, -253, -253, -252, -251, -250, -249, -248, -247, -245, -244, -243, -241, -240, -238, -236, -234, -233, -231, -229, -227, -224, -222, -220, -218, -215, -213, -210, -208, -205, -202, -199, -197, -194, -191, -188, -185, -182, -178, -175, -172, -169, -165, -162, -158, -155, -151, -147, -144, -140, -136, -132, -129, -125, -121, -117, -113, -109, -105, -101, -96, -92, -88, -84, -80, -75, -71, -67, -63, -58, -54, -49, -45, -41, -36, -32, -27, -23, -18, -14, -10, -5, -1, 4, 8, 13, 17, 22, 26, 31, 35, 39, 44, 48, 53, 57, 61, 66, 70, 74, 79, 83, 87, 91, 95, 99, 104, 108, 112, 116, 120, 124, 127, 131, 135, 139, 143, 146, 150, 153, 157, 161, 164, 167, 171, 174, 177, 180, 184, 187, 190, 193, 196, 198, 201, 204, 207, 209, 212, 214, 217, 219, 221, 223, 225, 228, 230, 231, 233, 235, 237, 238, 240, 242, 243, 244, 246, 247, 248, 249, 250, 251, 252, 252, 253, 254, 254, 255, 255, 255, 255, 255}; 17 | //char rcos[] = {256,255,255,255,255,255,254,254,253,252,252,251,250,249,248,247,246,244,243,242,240,238,237,235,233,232,230,228,226,223,221,219,217,219,221,223,226,228,230,232,233,235,237,238,240,242,243,244,246,247,248,249,250,251,252,252,253,254,254,255,255,255,255,255,256}; 18 | char rcos[] = {256,255,255,255,255,255,254,254,253,252,252,251,250,249,248,247,246,247,248,249,250,251,252,252,253,254,254,255,255,255,255,255,256}; 19 | char cast(int ang){ 20 | int i; 21 | ang = ang % 360; 22 | for(i = 0; i < 18; i++){ 23 | x1 = x + (i*costable[ang])/64; 24 | y1 = y + (i*sintable[ang])/64; 25 | if(map[x1/16+y1/16*8] != 0){ 26 | return 1; 27 | } 28 | } 29 | return 0; 30 | } 31 | 32 | void main(){ 33 | x = 50; 34 | y = 70; 35 | angle = 90; 36 | loadtile(map, 2,2,8,7); 37 | drawtile(0,90); 38 | while(1){ 39 | delayredraw(); 40 | for(i = 0; i < 64; i++){ 41 | if(i == 40) 42 | delayredraw(); 43 | setcolor(0); 44 | line(i*2, 0, i*2, 64); 45 | line(i*2+1, 0, i*2+1, 64); 46 | cast(angle+i); 47 | d = distance(x, y, x1, y1); 48 | if(d < 64){ 49 | gotoxy(4,13); 50 | setcolor(2); 51 | a = rcos[i/2]; 52 | h = 64-d; 53 | setcolor(colors[h/12]); 54 | h = ((64 - d) * a)/256); 55 | top = (64-h)/2; 56 | line(i*2, top, i*2, h + top); 57 | line(i*2+1, top, i*2+1, h + top); 58 | } 59 | } 60 | key = getkey(); 61 | if(key == KEY_UP){ 62 | prevx = x; 63 | prevy = y; 64 | a = (angle + 32) % 360; 65 | x = x + (costable[a])/64; 66 | y = y + (sintable[a])/64; 67 | if(map[x/16+y/16*8] != 0){ 68 | x = prevx; 69 | y = prevy; 70 | } 71 | } 72 | if(key == KEY_DOWN){ 73 | prevx = x; 74 | prevy = y; 75 | a = (angle + 32) % 360; 76 | x = x - (costable[a])/64; 77 | y = y - (sintable[a])/64; 78 | if(map[x/16+y/16*8] != 0){ 79 | x = prevx; 80 | y = prevy; 81 | } 82 | } 83 | if(key == KEY_LEFT) 84 | angle-=16; 85 | if(key == KEY_RIGHT) 86 | angle+=16; 87 | if(angle >= 360) 88 | angle = 0; 89 | if(angle < 0) 90 | angle = 359; 91 | setcolor(0); 92 | putpixel(prevx/8,prevy/8 + 90); 93 | setcolor(2); 94 | putpixel(x/8,y/8 + 90); 95 | gotoxy(4,12); 96 | printf("a%d, x%d, y%d ", angle, x, y); 97 | } 98 | } 99 | 100 | -------------------------------------------------------------------------------- /example/snake.c: -------------------------------------------------------------------------------- 1 | char snake[100]; 2 | char eatx,eaty; 3 | char snake_length; 4 | char snake_spr[] = {0x11,0x10,0x11,0x10,0x11,0x10}; 5 | char eat_spr[] = {0x22,0x20,0x22,0x20,0x22,0x20}; 6 | char snake_clr[] = {0xbb,0xb0,0xbb,0xb0,0xbb,0xb0}; 7 | char snake_dir; 8 | int i,key, game_end; 9 | 10 | void delay(int n){ 11 | settimer(1, n); 12 | while(gettimer(1)){ 13 | if(key == 0) 14 | key = getkey(); 15 | } 16 | } 17 | 18 | void init_game(){ 19 | game_end = 0; 20 | snake_length = 6; 21 | snake_dir = 0; 22 | snake[0] = 1; 23 | snake[1] = 3; 24 | snake[2] = 1; 25 | snake[3] = 2; 26 | snake[4] = 1; 27 | snake[5] = 1; 28 | snake[6] = 1; 29 | snake[7] = 1; 30 | eatx = 10 + random(30); 31 | eaty = 10 + random(30); 32 | putimage(eat_spr, eatx * 3, eaty * 3, 3, 3); 33 | } 34 | 35 | int restart(){ 36 | gotoxy(4, 8); 37 | puts("game over"); 38 | gotoxy(4, 9); 39 | puts("score "); 40 | putn(snake_length / 2 - 3); 41 | while(getkey() == 0){ 42 | i = 0; 43 | }; 44 | clearscreen(); 45 | init_game(); 46 | } 47 | 48 | void redraw(){ 49 | i = 0; 50 | for(i; i < snake_length; i++){ 51 | putimage(snake_spr, snake[i] * 3, snake[i + 1] * 3, 3, 3); 52 | i++; 53 | } 54 | putimage(snake_clr, snake[snake_length] * 3, snake[snake_length + 1] * 3, 3, 3); 55 | } 56 | 57 | void action(){ 58 | if((key == 1) && (snake_dir != 3)) 59 | snake_dir = 1; 60 | else if((key == 4) && (snake_dir != 0)) 61 | snake_dir = 2; 62 | else if((key == 2) && (snake_dir != 1)) 63 | snake_dir = 3; 64 | else if((key == 8) && (snake_dir != 2)) 65 | snake_dir = 0; 66 | key = 0; 67 | i = snake_length + 1; 68 | if(snake_dir == 0){ 69 | snake[0] = snake[0] + 1; 70 | if(snake[0] >= 41){ 71 | snake[0] = 1;} 72 | } 73 | else if(snake_dir == 1){ 74 | snake[1] = snake[1] - 1; 75 | if(snake[1] <= 1){ 76 | snake[1] = 41;} 77 | } 78 | else if(snake_dir == 2){ 79 | snake[0] = snake[0] - 1; 80 | if(snake[0] <= 1){ 81 | snake[0] = 41;} 82 | } 83 | else if(snake_dir == 3){ 84 | snake[1] = snake[1] + 1; 85 | if(snake[1] >= 41){ 86 | snake[1] = 1;} 87 | } 88 | if(getpixel(snake[0] * 3 + 1, snake[1] * 3 + 1) == 1) 89 | game_end = 1; 90 | if((snake[0] == eatx) && (snake[1] == eaty)){ 91 | eatx = 2 + random(38);; 92 | eaty = 2 + random(38);; 93 | putimage(eat_spr, eatx * 3, eaty * 3, 3, 3); 94 | snake_length++; 95 | snake_length++; 96 | } 97 | while(i > 1){ 98 | snake[i] = snake[i - 2]; 99 | i--; 100 | snake[i] = snake[i - 2]; 101 | i--; 102 | } 103 | i = 0; 104 | } 105 | 106 | void main(){ 107 | init_game(); 108 | while(1){ 109 | if(game_end){ 110 | restart(); 111 | } 112 | action(); 113 | redraw(); 114 | delay(200); 115 | } 116 | } -------------------------------------------------------------------------------- /example/sound_test.c: -------------------------------------------------------------------------------- 1 | /*settings*{"name":"soundtest","author":"corax","image":[0,0,0,238,238,238,238,238,238,0,0,0,0,0,14,238,238,238,238,238,238,224,0,0,0,0,238,238,238,238,238,238,238,238,0,0,0,0,238,238,238,238,238,30,238,238,0,0,0,0,238,238,238,30,238,225,238,238,0,0,0,0,238,238,225,30,30,225,238,238,0,0,0,0,238,225,17,30,225,238,30,238,0,0,0,0,238,225,17,30,225,238,30,238,0,0,0,0,238,225,17,30,225,238,30,238,0,0,0,0,238,238,225,30,30,225,238,238,0,0,0,0,238,238,238,30,238,225,238,238,0,0,0,0,238,238,238,238,238,30,238,238,0,0,0,0,238,238,238,238,238,238,238,238,0,0,0,0,238,238,238,238,238,238,238,238,0,0,0,0,14,238,238,238,238,238,238,224,0,0,0,0,0,238,238,238,238,238,238,0,0,0]}*/ 2 | char m0[] = "Mozart:d=16,o=5,b=125:16d#,c#,c,c#,8e,8p,f#,e,d#,e,8g#,8p,a,g#,g,g#,d#6,c#6,c6,c#6,d#6,c#6,c6,c#6,4e6,8c#6,8e6,32b,32c#6,d#6,8c#6,8b,8c#6,32b,32c#6,d#6,8c#6,8b,8c#6,32b,32c#6,d#6,8c#6,8b,8a#,4g#,d#,32c#,c,c#,8e,8p,f#,e,d#,e,8g#,8p,a,g#,g,g#,d#6,c#6,c6,c#6,d#6,c#6,c6,c#6,4e6,8c#6,8e6,32b,32c#6,d#6,8c#6,8b,8c#6,32b,32c#6,d#6,8c#6,8b,8c#6,32b,32c#6,d#6,8c#6,8b,8a#,4g#"; 3 | char m1[] = "Deep Purple:d=4,o=4,b=112:c,d#,f.,c,d#,8f#,f,p,c,d#,f.,d#,c,2p,8p,c,d#,f.,c,d#,8f#,f,p,c,d#,f.,d#,c" 4 | char m2[] = "Mission Impossible:d=16,o=5,b=100:32d,32d#,32d,32d#,32d,32d#,32d,32d#,32d,32d,32d#,32e,32f,32f#,32g,g,8p,g,8p,a#,p,c6,p,g,8p,g,8p,f,p,f#,p,g,8p,g,8p,a#,p,c6,p,g,8p,g,8p,f,p,f#,p,a#,g,2d,32p,a#,g,2c#,32p,a#,g,2c,p,a#4,c"; 5 | 6 | int position,key,prevkey; 7 | 8 | void printName0(){ 9 | int i = 0; 10 | while(m0[i] != 0 && m0[i] != ':'){ 11 | putchar(m0[i]); 12 | i++; 13 | } 14 | } 15 | 16 | void printName1(){ 17 | int i = 0; 18 | while(m1[i] != 0 && m1[i] != ':'){ 19 | putchar(m1[i]); 20 | i++; 21 | } 22 | } 23 | 24 | void printName2(){ 25 | int i = 0; 26 | while(m2[i] != 0 && m2[i] != ':'){ 27 | putchar(m2[i]); 28 | i++; 29 | } 30 | } 31 | 32 | void main(){ 33 | position = 0; 34 | loadrtttl(m0,1); 35 | playrtttl(); 36 | int color,i,l; 37 | color = 0; 38 | setcolor(3); 39 | gotoxy(2,1); 40 | printName0(); 41 | gotoxy(2,3); 42 | printName1(); 43 | gotoxy(2,5); 44 | printName2(); 45 | gotoxy(4,8); 46 | puts("key A - play,\n key B - tone"); 47 | setpalette(2, 0); 48 | while(1){ 49 | setcolor(2); 50 | line(4, 16 + position * 16, 123, 16 + position * 16); 51 | key = getkey(); 52 | if(key != prevkey){ 53 | if(key == KEY_DOWN && position < 2) 54 | position++; 55 | if(key == KEY_UP && position > 0) 56 | position--; 57 | if(key == KEY_A){ 58 | if(position == 0) 59 | loadrtttl(m0,1); 60 | else if(position == 1) 61 | loadrtttl(m1,1); 62 | else if(position == 2) 63 | loadrtttl(m2,1); 64 | playrtttl(); 65 | } 66 | prevkey = key; 67 | } 68 | setcolor(3); 69 | gotoxy(4,10); 70 | printf("key kode %d ", key); 71 | if(key == KEY_B) 72 | tone(300,600); 73 | line(4, 16 + position * 16, 123, 16 + position * 16); 74 | color = color + 10; 75 | setledcolor(color); 76 | setpalette(1, color); 77 | for(i = 0; i < 16; i++){ 78 | setcolor(2); 79 | line(i * 8, 127, i * 8, 102); 80 | setcolor(1); 81 | line(i * 8, 127, i * 8, 122 - random(20)); 82 | } 83 | delayredraw(); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /example/space.c: -------------------------------------------------------------------------------- 1 | char s1[] = {0x00,0x00,0x90,0x00,0x00,0x09,0x89,0x90,0x00,0x98,0x88,0x89,0x09,0x88,0x89,0x89,0x09,0x89,0x98,0x89,0x98,0x98,0x88,0x90,0x98,0x98,0x99,0x00,0x09,0x09,0x09,0x09,0x00}; 2 | char s2[] = {0x00,0x90,0x90,0x90,0x09,0x89,0x89,0x89,0x98,0x88,0x88,0x89,0x09,0x88,0x88,0x89,0x99,0x89,0x88,0x89,0x00,0x98,0x88,0x90,0x00,0x09,0x98,0x90,0x00,0x00,0x09,0x09,0x00}; 3 | int cadrs[2]; 4 | cadrs[0] = s1; 5 | cadrs[1] = s2; 6 | char shatle[] = {0x00,0x01,0x10,0x00,0x00,0x01,0x10,0x00,0x00,0x1e,0xe1,0x00,0x00,0x11,0x11,0x00,0x00,0x01,0x10,0x00,0x00,0x01,0x10,0x00,0xc0,0x11,0x11,0x0c,0x11,0x21,0x12,0x11,0x00}; 7 | char stars[64]; 8 | char sprites[32]; 9 | char game[] = {0x11,0x10,0x11,0x10,0x11,0x01,0x10,0x11,0x10,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x11,0x10,0x10,0x10,0x10,0x11,0x10,0x10,0x10,0x10,0x10,0x00,0x10,0x10,0x11,0x10,0x10,0x10,0x10,0x00,0x10,0x11,0x00}; 10 | char over[] = {0x11,0x10,0x10,0x10,0x11,0x01,0x01,0x10,0x10,0x10,0x10,0x10,0x01,0x10,0x10,0x10,0x10,0x10,0x11,0x01,0x00,0x10,0x10,0x01,0x00,0x10,0x01,0x00,0x11,0x10,0x01,0x00,0x11,0x01,0x00,0x00}; 11 | char x,y,key,play; 12 | int i,j; 13 | void main() 14 | { 15 | while(1){ 16 | clearscreen(); 17 | x = 60; 18 | y = 118; 19 | play = 1; 20 | getsprite(16,shatle); 21 | for (j = 0; j < 16; j++) 22 | getsprite(j,cadrs[random(1)]); 23 | for (i = 0; i < 32; i++){ 24 | stars[i + 32] = random(120); 25 | stars[i] = random(254); 26 | } 27 | for (i = 0; i < 16; i++){ 28 | sprites[i + 16] = random(120); 29 | sprites[i] = random(32); 30 | } 31 | while(play){ 32 | for (j = 0; j < 32; j++){ 33 | setcolor(0); 34 | putpixel(stars[j + 32],stars[j]); 35 | stars[j] = stars[j] + random(8); 36 | setcolor(1 + random(3)); 37 | putpixel(stars[j + 32],stars[j]); 38 | } 39 | for (j = 0; j < 16; j++){ 40 | getsprite(j,cadrs[random(1)]); 41 | sprites[j] = sprites[j] + random(2); 42 | if(sprites[j] > 112){ 43 | if(((sprites[j + 16] + 8) > x) & (sprites[j + 16] < (x + 8))) 44 | play = 0; 45 | if(sprites[j] > 120){ 46 | sprites[j + 16] = random(120); 47 | sprites[j] = 0; 48 | } 49 | } 50 | putsprite(j,sprites[j + 16],sprites[j]); 51 | } 52 | key = getkey(); 53 | if((key == KEY_LEFT) & (x > 1)){ 54 | x--;x--;} 55 | if((key == KEY_RIGHT) & (x < 119)){ 56 | x++;x++;} 57 | putsprite(16, x, y); 58 | delayredraw(); 59 | } 60 | putimage(game, 50, 70, 16, 5); 61 | putimage(over, 70, 70, 14, 5); 62 | while(getkey() == 0){}; 63 | } 64 | } 65 | 66 | -------------------------------------------------------------------------------- /example/sprites.c: -------------------------------------------------------------------------------- 1 | char s0[] = {0x0,0x0,0x0,0x66,0x66,0x0,0x0,0x0,0x0,0x0,0x66,0x77,0x77,0x66,0x0,0x0,0x0,0x6,0x77,0x8f,0xc8,0x88,0x60,0x0,0x0,0x67,0x88,0x8f,0xc8,0x88,0x86,0x0,0x6,0x78,0x88,0x8f,0xc8,0x88,0x88,0x60,0x6,0x78,0x88,0x8f,0xc8,0x88,0x88,0x60,0x67,0x88,0x88,0xfc,0xcc,0x88,0x88,0xb6,0x67,0xff,0xff,0xcc,0xcc,0xcc,0xcc,0xb6,0x67,0xcc,0xcc,0xcc,0xcc,0xbb,0xbb,0xb6,0x67,0x88,0x88,0xcc,0xcb,0x88,0x88,0xb6,0x6,0x88,0x88,0x8c,0xb8,0x88,0x8b,0x60,0x6,0x88,0x88,0x8c,0xb8,0x88,0x8b,0x60,0x0,0x68,0x88,0x8c,0xb8,0x88,0xb6,0x0,0x0,0x6,0x88,0x8c,0xb8,0xbb,0x60,0x0,0x0,0x0,0x66,0xbb,0xbb,0x66,0x0,0x0,0x0,0x0,0x0,0x66,0x66,0x0,0x0,0x0,0x00}; 2 | char bl[] = {0x99,0x99,0x99,0x99,0xcc,0xcb,0x9c,0xcc,0xff,0xcb,0x9f,0xff,0xff,0xfb,0x9f,0xff,0x99,0x99,0x99,0x99,0xcc,0xcc,0xcc,0xb9,0xff,0xff,0xfc,0xb9,0xff,0xff,0xff,0xb9,0x00}; 3 | char b2[] = {0x9,0x99,0x99,0x0,0x9,0xcc,0xb9,0x0,0x9,0xfc,0xb9,0x0,0x9,0xff,0xb9,0x0,0x99,0x99,0x99,0x99,0xcc,0xcc,0xcc,0xb9,0xff,0xff,0xfc,0xb9,0xff,0xff,0xff,0xb9,0x00}; 4 | char j,x; 5 | int a = 0; 6 | void main(){ 7 | setimagesize(2); 8 | for (x = 0; x < 8; x++){ 9 | putimage(b2, x*16, 80, 8, 8); 10 | putimage(bl, x*16, 96, 8, 8); 11 | putimage(bl, x*16, 112, 8, 8); 12 | } 13 | for (j = 0; j < 32; j++){ 14 | getsprite(j,s0); 15 | putsprite(j, random(120), random(120)); 16 | spritespeedx(j, -4); 17 | spritespeedy(j, 2); 18 | spritesetvalue(j,4,16); 19 | spritesetvalue(j,5,16); 20 | spritesetvalue(j,9,1); 21 | } 22 | //gravity, time, count 23 | setparticle(1, 4, 2000); 24 | //time, dir, dir1, speed 25 | setemitter(190, 220, 0, 9); 26 | setimagesize(1); 27 | while(1){ 28 | scroll(1,2); 29 | a++; 30 | drawparticle(64, 64, a); 31 | for (j = 0; j < 32; j++){ 32 | spritesetvalue(j,6,a); 33 | if(spritegetvalue(j, 0) < 2){ 34 | spritespeedx(j, 4);} 35 | if(spritegetvalue(j, 0) >118){ 36 | spritespeedx(j, -4);} 37 | if(spritegetvalue(j, 1) < 2){ 38 | spritespeedy(j, 2);} 39 | if(spritegetvalue(j, 1) > 118){ 40 | spritespeedy(j, 0-2);} 41 | } 42 | gotoxy(4,2); 43 | printf(" key pressed %d ", getkey()); 44 | delayredraw(); 45 | } 46 | } -------------------------------------------------------------------------------- /example/sudoku.c: -------------------------------------------------------------------------------- 1 | //10x11 2 | char cursor[] = {0x22,0x22,0x22,0x22,0x20,0x20,0x0,0x0,0x0,0x20,0x20,0x0,0x0,0x0,0x20,0x20,0x0,0x0,0x0,0x20,0x20,0x0,0x0,0x0,0x20,0x20,0x0,0x0,0x0,0x20,0x20,0x0,0x0,0x0,0x20,0x20,0x0,0x0,0x0,0x20,0x20,0x0,0x0,0x0,0x20,0x20,0x0,0x0,0x0,0x20,0x22,0x22,0x22,0x22,0x20}; 3 | int x, y, game, error; 4 | 5 | int sudoku0[] = {0,7,5,0,9,0,0,0,6,0,2,3,0,8,0,0,4,0,8,0,0,0,0,3,0,0,1,5,0,0,7,0,2,0,0,0,0,4,0,8,0,6,0,2,0,0,0,0,9,0,1,0,0,3,9,0,0,4,0,0,0,0,7,0,6,0,0,7,0,5,8,0,7,0,0,0,1,0,3,9,0}; 6 | int sudoku1[] = {9,0,6,3,5,0,7,0,1,7,0,3,4,1,0,0,0,9,0,8,0,0,0,0,4,3,0,0,2,7,1,8,0,3,9,0,0,0,9,0,0,4,0,0,2,0,1,8,2,3,9,5,0,0,0,7,5,0,6,0,0,4,8,0,0,0,5,0,0,6,0,3,0,0,0,8,2,1,0,0,0}; 7 | int sudoku2[] = {3,0,6,5,0,8,4,0,0,5,2,0,0,0,0,0,0,0,0,8,7,0,0,0,0,3,1,0,0,3,0,1,0,0,8,0,9,0,0,8,6,3,0,0,5,0,5,0,0,9,0,6,0,0,1,3,0,0,0,0,2,5,0,0,0,0,0,0,0,0,7,4,0,0,5,2,0,6,3,0,0}; 8 | int sudoku_t[] = {sudoku0, sudoku1, sudoku2}; 9 | 10 | int sudoku[81]; 11 | int initsudoku[81]; 12 | 13 | void delay(int t){ 14 | settimer(1, t); 15 | while(gettimer(1)){} 16 | } 17 | 18 | int is_complete() { 19 | for(int p = 0; p < 9; p++){ 20 | for(int q = 0; q < 9; q++){ 21 | if(sudoku[p * 9 + q] == 0){ 22 | return 0; 23 | } 24 | } 25 | } 26 | return 1; 27 | } 28 | 29 | int is_safe(int n, int x, int y) { 30 | int i, j, a, b; 31 | if(n == 0){ 32 | return 1; 33 | } 34 | //vertical 35 | for(i = 0; i < 9; i++) { 36 | if(n == sudoku[x * 9 + i]){ 37 | if(i != y){ 38 | return 0; 39 | } 40 | } 41 | } 42 | //horizontal 43 | for(i = 0; i < 9; i++) { 44 | if(n == sudoku[i * 9 + y]){ 45 | if(i != x){ 46 | return 0; 47 | } 48 | } 49 | } 50 | a = (x / 3) * 3; 51 | b = (y / 3) * 3; 52 | //square 53 | for(i = a; i < a + 3; i++) { 54 | for(j = b; j < b + 3; j++) { 55 | if(n == sudoku[i * 9 + j]){ 56 | if(!(i == x && j == y)){ 57 | return 0; 58 | } 59 | } 60 | } 61 | } 62 | return 1; 63 | } 64 | 65 | void print(int sudoku[]) { 66 | int p,q; 67 | error = 0; 68 | delayredraw(); 69 | gotoxy(2,1); 70 | for(p = 0; p < 9;p++) { 71 | for(q = 0; q < 9; q++) { 72 | if(sudoku[p * 9 + q] > 0){ 73 | if(initsudoku[p * 9 + q] > 0){ 74 | setcolor(1); 75 | } 76 | else if(!is_safe(sudoku[p * 9 + q], p, q)){ 77 | error++; 78 | setcolor(2); 79 | } 80 | else{ 81 | setcolor(13); 82 | } 83 | printf("%d ", sudoku[p * 9 + q]); 84 | } 85 | else{ 86 | setcolor(1); 87 | printf("* "); 88 | } 89 | } 90 | if(!((p + 1) % 3)){ 91 | printf("\n"); 92 | } 93 | printf("\n "); 94 | } 95 | setcolor(1); 96 | for(p = 0; p < 4; p++){ 97 | line(8 + p * 36, 4, 8 + p * 36, 100); 98 | line(8, 4 + p * 32, 116, 4 + p * 32); 99 | } 100 | } 101 | 102 | void swap_rows(int x1, int x2){ 103 | int i, n; 104 | if(x1 > 2){ 105 | x2 = (x1 / 3) * 3 + x2; 106 | } 107 | if(x1 == x2){ 108 | return; 109 | } 110 | x1 = x1 * 9; 111 | x2 = x2 * 9; 112 | for(i = 0; i < 9; i++){ 113 | n = sudoku[x1 + i]; 114 | sudoku[x1 + i] = sudoku[x2 + i]; 115 | sudoku[x2 + i] = n; 116 | } 117 | } 118 | 119 | void swap_col(int y1, int y2){ 120 | int i, n; 121 | if(y1 > 2){ 122 | y2 = (y1 / 3) * 3 + y2; 123 | } 124 | if(y1 == y2){ 125 | return; 126 | } 127 | for(i = 0; i < 9; i++){ 128 | n = sudoku[y1 + i * 9]; 129 | sudoku[y1 + i * 9] = sudoku[y2 + i * 9]; 130 | sudoku[y2 + i * 9] = n; 131 | } 132 | } 133 | 134 | void swap_num(int n1, int n2){ 135 | int i; 136 | if(n1 == n2){ 137 | return; 138 | } 139 | for(i = 0; i < 81; i++){ 140 | if(sudoku[i] == n1){ 141 | sudoku[i] = n2; 142 | } 143 | else if(sudoku[i] == n2){ 144 | sudoku[i] = n1; 145 | } 146 | } 147 | } 148 | 149 | void init(int s[]){ 150 | int i; 151 | spritesetvalue(1, S_WIDTH, 10); 152 | spritesetvalue(1, S_HEIGHT, 11); 153 | getsprite(1, cursor); 154 | spritesetvalue(2, S_WIDTH, 10); 155 | spritesetvalue(2, S_HEIGHT, 11); 156 | getsprite(2, cursor); 157 | x = 0; 158 | y = 0; 159 | for(i = 0; i < 81; i++){ 160 | sudoku[i] = s[i]; 161 | } 162 | for(i = 0; i < 6; i++){ 163 | swap_rows(random(8), random(2)); 164 | swap_col(random(8), random(2)); 165 | swap_num(1 + random(8), 1 + random(8)); 166 | } 167 | for(i = 0; i < 81; i++){ 168 | initsudoku[i] = sudoku[i]; 169 | } 170 | game = 1; 171 | } 172 | 173 | int numberInput(){ 174 | int key, cx, i; 175 | cx = 0; 176 | gotoxy(1, 14); 177 | printf("0 1 2 3 4 5 6 7 8 9"); 178 | putsprite(2, 4 + cx * 12, 110); 179 | while(getkey() == KEY_A){} 180 | key = 0; 181 | while(key != KEY_A){ 182 | key = getkey(); 183 | if(key & KEY_LEFT){ 184 | if(cx > 0){ 185 | cx--; 186 | } 187 | else{ 188 | cx = 9; 189 | } 190 | } 191 | if(key & KEY_RIGHT){ 192 | if(cx < 9){ 193 | cx++; 194 | } 195 | else{ 196 | cx = 0; 197 | } 198 | } 199 | if(key){ 200 | putsprite(2, 4 + cx * 12, 110); 201 | delay(200); 202 | } 203 | delayredraw(); 204 | } 205 | spritesetvalue(2, S_LIVES, 0); 206 | gotoxy(1, 14); 207 | for(i = 0; i < 20; i++){ 208 | putchar(' '); 209 | } 210 | return cx; 211 | } 212 | 213 | void step(){ 214 | int key; 215 | key = getkey(); 216 | if(key & KEY_UP && y > 0){ 217 | y--; 218 | } 219 | if(key & KEY_DOWN && y < 8){ 220 | y++; 221 | } 222 | if(key & KEY_LEFT && x > 0){ 223 | x--; 224 | } 225 | if(key & KEY_RIGHT && x < 8){ 226 | x++; 227 | } 228 | if(key & KEY_A){ 229 | if(!initsudoku[y * 9 + x]){ 230 | sudoku[y * 9 + x] = numberInput(); 231 | } 232 | print(sudoku); 233 | if(is_complete() && error == 0){ 234 | game = 0; 235 | } 236 | } 237 | putsprite(1, 10 + x * 12, 5 + y * 9 + (y / 3) * 5); 238 | if(key){ 239 | delay(200); 240 | } 241 | } 242 | 243 | int main(void) { 244 | int i; 245 | while(1){ 246 | init(sudoku_t[random(2)]); 247 | print(sudoku); 248 | while(game){ 249 | step(); 250 | delayredraw(); 251 | } 252 | gotoxy(6, 14); 253 | printf("you win!"); 254 | delay(1000); 255 | while(!getkey()){} 256 | } 257 | } 258 | -------------------------------------------------------------------------------- /example/tang.c: -------------------------------------------------------------------------------- 1 | int tangtable[] = {0,4,8,13,17,22,26,31,35,40,45,49,54,59,63,68,73,78,83,88,93,98,103,108,113,119,124,130,136,141,147,153,159,166,172,179,185,192,199,207,214,222,230,238,247,255,265,274,284,294,305,316,327,339,352,365,379,394,409,425,443,461,481,502,524,548,574,602,633,666,703,743,787,837,892,955,1026,1108,1203,1316,1450,1615,1820,2083,2433,2922,3655,4874,7307,14570}; 2 | 3 | int tan(int angle, int dist){ 4 | angle = angle % 360; 5 | if(angle < 90) 6 | return ((tangtable[angle] * dist) >> 8); 7 | else if(angle < 180) 8 | return (0 - ((tangtable[180 - angle] * dist) >> 8)); 9 | else if(angle < 270) 10 | return ((tangtable[angle - 180] * dist ) >> 8); 11 | else if(angle < 360) 12 | return (0 - ((tangtable[360 - angle] * dist) >>8)); 13 | } 14 | 15 | void main(){ 16 | printf("%d",tan(190,90)); 17 | } -------------------------------------------------------------------------------- /example/tech_demo.c: -------------------------------------------------------------------------------- 1 | //16x16rle 2 | char water1[] = {0x8,0x33,0x89,0x1e,0xe1,0x11,0xee,0xe1,0x11,0xee,0xe1,0x10,0x33,0x2,0x11,0x2,0xee,0x2,0x11,0x2,0xee,0x18,0x33,0x2,0xee,0x3,0x11,0x82,0x1e,0x2,0xee,0x20,0x33,0x4,0xee,0x4,0x11,0x10,0x33}; 3 | char water3[] = {0x22,0x33,0x82,0x32,0x7,0x33,0x2,0x23,0x82,0x33,0x2,0x23,0x2,0x33,0x7,0x32,0x8,0x23,0x3,0x32,0x3,0x22,0x2,0x32,0x6,0x23,0x83,0x22,0x23,0x2,0x32,0x4,0x22,0x82,0x23,0x3,0x22,0x2,0x32,0x83,0x22,0x32,0xa,0x22,0x8,0x66,0x89,0x1e,0xe1,0x1e,0xe1,0x1e,0xe1,0x1e,0xe1,0x8,0x33}; 4 | char ground2[] = {0xc,0x33,0x2,0x53,0x4,0x33,0x82,0x53,0x3,0x35,0x3,0x33,0x2,0x35,0x4,0x53,0x2,0x33,0x2,0x53,0x82,0x95,0x3,0x35,0x84,0x33,0x35,0x39,0x5,0x55,0x2,0x53,0x4,0x55,0x82,0x59,0x2,0x55,0x84,0xd5,0x55,0x59,0x3,0x55,0x85,0x59,0x55,0xdd,0x5d,0x2,0x55,0x82,0x59,0x2,0x55,0x82,0x5d,0x2,0xdd,0x2,0xd5,0x3,0x55,0x83,0xdd,0xdc,0x3,0xdd,0x2,0x55,0x83,0x5d,0xdc,0x3,0xdd,0x86,0xdc,0xd5,0x55,0xdd,0xcd,0x2,0xdd,0x82,0xcc,0x2,0xdd,0x82,0x55,0x2,0xdd,0x8,0x99,0x2,0xcc,0x82,0x8c,0x2,0xcc,0x82,0x8c,0x2,0xcc,0x2,0x88,0x82,0x87,0x5,0x88}; 5 | char water4[] = {0x23,0x33,0x84,0x23,0x32,0x23,0x6,0x33,0x83,0x23,0x22,0x2,0x33,0x2,0x23,0x4,0x32,0x82,0x23,0x3,0x32,0x3,0x23,0x82,0x22,0x2,0x32,0x2,0x23,0x4,0x32,0x2,0x23,0x83,0x22,0x32,0x2,0x22,0x82,0x23,0x3,0x22,0x82,0x23,0x4,0x22,0x83,0x32,0x23,0x4,0x22,0x82,0x32,0x2,0x22,0x2,0x32,0x2,0x22,0x2,0x23,0x2,0x22,0x83,0x23,0x22,0x8,0x66,0x83,0xe3,0x13,0x2,0x33,0x83,0xe3,0x13,0x2,0x33,0x88,0xe3,0x13,0xe3,0x13,0xe3,0x13,0x3e,0x13}; 6 | //16x16 7 | char water2[] = {0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x13,0x33,0x33,0x13,0x33,0x33,0x13,0x33,0x31,0x33,0x31,0x31,0x33,0x31,0x31,0x33,0x33,0x13,0x13,0x33,0x13,0x13,0x33,0x13,0x33,0x31,0x33,0x33,0x31,0x33,0x33,0x31,0xe3,0x33,0x33,0xe3,0x33,0x33,0xe3,0x33,0x3e,0x33,0x3e,0x3e,0x33,0x3e,0x3e,0x33,0x33,0xe3,0xe3,0x33,0xe3,0xe3,0x33,0xe3,0x13,0x3e,0x33,0x13,0x3e,0x33,0x13,0x3e,0x31,0x33,0x31,0x31,0x33,0x31,0x31,0x33,0x33,0x13,0x13,0x33,0x13,0x13,0x33,0x13,0x33,0x31,0x33,0x33,0x31,0x33,0x33,0x31,0xe3,0x33,0x33,0xe3,0x33,0x33,0xe3,0x33,0x3e,0x33,0x3e,0x3e,0x33,0x3e,0x3e,0x33,0x33,0xe3,0xe3,0x33,0xe3,0xe3,0x33,0xe3,0x33,0x3e,0x33,0x33,0x3e,0x33,0x33,0x3e}; 8 | char ground1[] = {0x88,0x88,0x88,0x88,0x88,0x8c,0x88,0x88,0x88,0x88,0x88,0x8c,0x88,0xca,0x78,0x88,0xc8,0x88,0x88,0xca,0x78,0x87,0x88,0x88,0xa7,0x8c,0x88,0x87,0x88,0x88,0x8c,0xcc,0x78,0xca,0x78,0x88,0x88,0x88,0xca,0xa7,0x88,0x87,0x88,0x88,0xcc,0x88,0xca,0xa7,0x88,0x88,0x88,0x8c,0xaa,0x78,0x87,0x78,0x88,0x88,0x88,0x8c,0xaa,0x78,0x88,0x88,0xc8,0x88,0x88,0x88,0x77,0x88,0x88,0x88,0xa7,0xcc,0xc8,0x88,0x88,0x8c,0xc8,0x8c,0x7c,0xaa,0xa7,0x88,0x88,0xca,0xa7,0x88,0x8c,0xaa,0xa7,0x88,0x88,0xca,0xa7,0x88,0x8c,0xaa,0xa7,0x8c,0xc8,0x87,0x78,0x8c,0x78,0x77,0x78,0xca,0xa7,0x88,0x88,0xca,0x88,0x88,0x88,0xca,0xa7,0x88,0x88,0x87,0x88,0x88,0x88,0x87,0x77,0x88,0x88,0x88}; 9 | char ship[] = {0x0,0x0,0x0,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6f,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x61,0xf0,0x0,0x0,0x0,0x0,0x0,0x1,0x91,0x1f,0x0,0x0,0x0,0x0,0x0,0x1f,0x6c,0x11,0xf0,0x0,0x0,0x0,0x0,0x11,0x91,0xc1,0xf0,0x0,0x0,0x0,0x1,0x1f,0x6c,0x1c,0x1f,0x0,0x0,0x0,0x1,0xf1,0x91,0xc1,0x11,0xf0,0x0,0x0,0x9f,0x9f,0x6c,0x9c,0x99,0x90,0x0,0x0,0x0,0x0,0x60,0x0,0x0,0x0,0x0,0x69,0x69,0x69,0x66,0x66,0x66,0x26,0x66,0x6,0xc1,0xc1,0xbc,0x11,0x12,0x12,0x1f,0x0,0x6c,0xbc,0xb1,0xb1,0x11,0x21,0xf0,0x0,0x6,0x1b,0xbb,0x11,0x11,0x1f,0x0,0x0,0x0,0xc1,0xc1,0xc1,0x11,0xf0,0x0,0x0,0x0,0xcc,0x1c,0x11,0x11,0xf0,0x0}; 10 | //16x12 11 | char bottle[] = {0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa8,0x80,0x0,0x0,0x0,0x0,0x0,0x5,0x9a,0x88,0x0,0x0,0x0,0x0,0x0,0x59,0xcd,0xa0,0x0,0x0,0x0,0x5,0x55,0x9c,0xd5,0x0,0x0,0x0,0x0,0x59,0x99,0xcd,0x50,0x0,0x0,0x0,0x5,0x99,0x9c,0xdd,0x50,0x0,0x0,0x0,0x59,0x9c,0xcc,0xdd,0x50,0x0,0x0,0x5,0x99,0xcc,0xcd,0xdd,0x50,0x0,0x0,0x59,0x9c,0xcc,0xcd,0xd5,0x0,0x0,0x5,0x99,0x9c,0xcc,0xdd,0x50,0x0,0x0,0x59,0x99,0xcc,0xcc,0xd5,0x0,0x0,0x0}; 12 | //8x14 13 | char we[] = {0xa,0xaa,0xaa,0x0,0xa7,0x77,0x77,0xa0,0xa7,0x77,0x77,0xa0,0xa7,0x7a,0xaa,0x0,0xa7,0x7a,0x0,0x0,0xa7,0x7a,0xaa,0x0,0xa7,0x77,0x77,0xa0,0xa7,0x77,0x77,0xa0,0xa7,0x7a,0xaa,0x0,0xa7,0x7a,0x0,0x0,0xa7,0x7a,0xaa,0x0,0xa7,0x77,0x77,0xa0,0xa7,0x77,0x77,0xa0,0xa,0xaa,0xaa,0x0}; 14 | char ws[] = {0xa,0xaa,0xaa,0x0,0xad,0xdd,0xdd,0xa0,0xad,0xdd,0xdd,0xa0,0xad,0xda,0xaa,0x0,0xad,0xda,0x0,0x0,0xad,0xdd,0xa0,0x0,0xad,0xdd,0xda,0x0,0xa,0xdd,0xdd,0xa0,0x0,0xad,0xdd,0xa0,0x0,0xa,0xdd,0xa0,0xa,0xaa,0xdd,0xa0,0xad,0xdd,0xdd,0xa0,0xad,0xdd,0xdd,0xa0,0xa,0xaa,0xaa,0x0}; 15 | char wp[] = {0xa,0xaa,0xaa,0x0,0xa2,0x22,0x22,0xa0,0xa2,0x22,0x22,0xa0,0xa2,0x2a,0xa2,0xa0,0xa2,0x2a,0xa2,0xa0,0xa2,0x22,0x22,0xa0,0xa2,0x22,0x22,0xa0,0xa2,0x2a,0xaa,0x0,0xa2,0x2a,0x0,0x0,0xa2,0x2a,0x0,0x0,0xa2,0x2a,0x0,0x0,0xa2,0x2a,0x0,0x0,0xa2,0x2a,0x0,0x0,0xa,0xa0,0x0,0x0}; 16 | char w8[] = {0xa,0xaa,0xaa,0xa0,0xa6,0x66,0x66,0x6a,0xa6,0x66,0x66,0x6a,0xa6,0x6a,0xa6,0x6a,0xa6,0x6a,0xa6,0x6a,0xa6,0x6a,0xa6,0x6a,0xa6,0x66,0x66,0x6a,0xa6,0x6a,0xa6,0x6a,0xa6,0x6a,0xa6,0x6a,0xa6,0x6a,0xa6,0x6a,0xa6,0x6a,0xa6,0x6a,0xa6,0x66,0x66,0x6a,0xa6,0x66,0x66,0x6a,0xa,0xaa,0xaa,0xa0}; 17 | char w2[] = {0xa,0xaa,0xaa,0x0,0xaf,0xff,0xff,0xa0,0xaf,0xff,0xff,0xa0,0xaa,0xaa,0xff,0xa0,0xaa,0xaa,0xff,0xa0,0xaf,0xff,0xff,0xa0,0xaf,0xff,0xff,0xa0,0xaf,0xfa,0xaa,0x0,0xaf,0xfa,0x0,0x0,0xaf,0xfa,0x0,0x0,0xaf,0xfa,0xaa,0x0,0xaf,0xff,0xff,0xa0,0xaf,0xff,0xff,0xa0,0xa,0xaa,0xaa,0x0}; 18 | char w6[] = {0xa,0xaa,0xaa,0xa0,0xae,0xee,0xee,0xea,0xae,0xee,0xee,0xea,0xae,0xea,0xaa,0xa0,0xae,0xea,0xa0,0x0,0xae,0xea,0xaa,0xa0,0xae,0xee,0xee,0xea,0xae,0xea,0xae,0xea,0xae,0xea,0xae,0xea,0xae,0xea,0xae,0xea,0xae,0xea,0xae,0xea,0xae,0xee,0xee,0xea,0xae,0xee,0xee,0xea,0xa,0xaa,0xaa,0xa0}; 19 | 20 | int tx[] = {0,4,8,11,14,17,19,21,23,25,26,27,28,28,28,27,26,25,23,21,19,17,14,11,8,4,0,-4,-8,-11,-14,-17,-19,-21,-23,-25,-26,-27,-28,-28,-28,-27,-26,-25,-23,-21,-19,-17,-14,-11,-8,-4,0,0} 21 | 22 | int i,dir,y,x; 23 | 24 | int getx(int p){ 25 | p = p % 53; 26 | return tx[p]; 27 | } 28 | 29 | void cadr(){ 30 | if(gettimer(0) == 0){ 31 | settimer(1, 300); 32 | settimer(0, 600); 33 | setpallette(14, 0xE718); 34 | setpallette(1, 0x7DB6); 35 | spritesetvalue(1,S_HEIGHT,12); 36 | putimagerle(water3, x + 32, 12, 16, 16); 37 | putimagerle(water4, x + 48, 12, 16, 16); 38 | putsprite(1, 104, 96); 39 | } 40 | if(gettimer(1) == 0){ 41 | settimer(1, 600) 42 | settimer(0, 300); 43 | delayredraw(); 44 | setpallette(1, 0xE718); 45 | setpallette(14, 0x7DB6); 46 | spritesetvalue(1,S_HEIGHT,9); 47 | putimagerle(water4, x + 32, 12, 16, 16); 48 | putimagerle(water3, x + 48, 12, 16, 16); 49 | putsprite(1, 104, 99); 50 | } 51 | if(gettimer(3) == 0){ 52 | settimer(3, 100); 53 | if(dir){ 54 | scroll(2); 55 | x -= 2; 56 | } 57 | else{ 58 | scroll(0); 59 | x += 2; 60 | } 61 | if(x > 40) 62 | dir = 1; 63 | if(x < -20) 64 | dir = 0; 65 | } 66 | } 67 | 68 | void main(){ 69 | dir = 0; 70 | y = 260; 71 | x = 0; 72 | setbgcolor(3); 73 | clearscreen(); 74 | getsprite(0,ship); 75 | putsprite(0, 56, 70); 76 | spritesetvalue(0,S_WIDTH,16); 77 | spritesetvalue(0,S_HEIGHT,16); 78 | getsprite(0,ship); 79 | putsprite(0, 56, 50); 80 | getsprite(1,bottle); 81 | putsprite(1, 56, 70); 82 | spritesetvalue(1,S_WIDTH,16); 83 | spritesetvalue(1,S_HEIGHT,12); 84 | spritesetvalue(1,S_IS_SCROLLED,0); 85 | putsprite(1, 104, 90); 86 | getsprite(2,we); 87 | getsprite(3,ws); 88 | getsprite(4,wp); 89 | getsprite(5,w8); 90 | getsprite(6,w2); 91 | getsprite(7,w6); 92 | getsprite(8,w6); 93 | for(i = 2; i < 9; i++){ 94 | spritesetvalue(i,S_WIDTH,8); 95 | spritesetvalue(i,S_HEIGHT,14); 96 | spritesetvalue(i,S_IS_SCROLLED,0); 97 | } 98 | setpallette(14, 0x3DF9); 99 | setpallette(2, 0xE718); 100 | for(i = 0; i < 8; i++){ 101 | putimagerle(water1, i * 16, 60, 16, 16); 102 | putimagerle(ground2, i * 16, 12, 16, 16); 103 | putimage(ground1, i * 16, 28, 16, 16); 104 | putimage(ground1, i * 16, 44, 16, 16); 105 | } 106 | putimagerle(water3, 32, 12, 16, 16); 107 | putimagerle(water4, 48, 12, 16, 16); 108 | putimage(water2, 32, 44, 16, 16); 109 | putimage(water2, 48, 44, 16, 16); 110 | putimage(water2, 32, 28, 16, 16); 111 | putimage(water2, 48, 28, 16, 16); 112 | setimagesize(2); 113 | for(i = 0; i < 4; i++) 114 | putimagerle(water1, i * 32, 76, 16, 16); 115 | setimagesize(1); 116 | while(1){ 117 | cadr(); 118 | y--; 119 | for(i = 2; i < 9; i++){ 120 | putsprite(i, 56 + getx(y + i), y + i * 20 - 160); 121 | } 122 | spritesetvalue(0,S_ANGLE,getx(y % 50) / 2); 123 | if(y < 1) 124 | y = 260; 125 | settimer(4, 16); 126 | while(gettimer(4)){} 127 | } 128 | } -------------------------------------------------------------------------------- /example/testcollision.c: -------------------------------------------------------------------------------- 1 | char sp[] = {0x0,0x22,0x22,0x0,0x2,0x22,0x22,0x20,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x2,0x22,0x22,0x20,0x0,0x22,0x22,0x0}; 2 | char bl[] = {0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55}; 3 | 4 | int t[] ={ 5 | bl,0,0,0,0,0,0,0,0,0,0,0,0,0,0,bl, 6 | bl,0,0,0,0,0,0,0,0,0,0,0,0,0,0,bl, 7 | bl,bl,bl,bl,bl,bl,bl,bl,bl,bl,bl,bl,bl,bl,bl,bl, 8 | bl,bl,bl,bl,bl,bl,bl,bl,bl,bl,bl,bl,bl,bl,bl,bl 9 | } 10 | 11 | char j,x; 12 | int a = 0; 13 | 14 | void main(){ 15 | loadtile(t,8,8,16,4); 16 | drawtile(0,100); 17 | for (j = 0; j < 32; j++){ 18 | getsprite(j,sp); 19 | putsprite(j, 30 + (j/4)*9 + (j % 4) * 3, 40 + (j % 4) * 12); 20 | spritespeedx(j, 0); 21 | spritespeedy(j, 0); 22 | spritesetvalue(j,S_WIDTH,8); 23 | spritesetvalue(j,S_HEIGHT,8); 24 | spritesetvalue(j,S_SOLID,1); 25 | spritesetvalue(j,S_SPEEDX,random(32) - 16); 26 | spritesetvalue(j,S_SPEEDY,random(32) - 16); 27 | spritesetvalue(j,S_GRAVITY,1); 28 | } 29 | while(1){ 30 | for (j = 0; j < 32; j++){ 31 | spritesetvalue(j,S_ANGLE,a); 32 | if(spritegetvalue(j, S_X) < 2) 33 | spritespeedx(j, 1); 34 | if(spritegetvalue(j, S_X) >118) 35 | spritespeedx(j, -1); 36 | if(spritegetvalue(j, S_Y) < 2) 37 | spritespeedy(j, 1); 38 | if(spritegetvalue(j, S_Y) > 118) 39 | spritespeedy(j, -1); 40 | } 41 | delayredraw(); 42 | } 43 | } 44 | 45 | 46 | -------------------------------------------------------------------------------- /example/testinterrupt1.c: -------------------------------------------------------------------------------- 1 | char s1[] = {0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22}; 2 | int g,i; 3 | 4 | void collis(int n){ 5 | spritesetvalue(n, S_X,0); 6 | g++; 7 | } 8 | 9 | void main() 10 | { 11 | for(i = 1; i<15; i+=2;){ 12 | getsprite(i,s1); 13 | spritesetvalue(i, S_ON_COLLISION,collis); 14 | spritesetvalue(i, S_SOLID,1); 15 | putsprite(i,0,i*8); 16 | spritesetvalue(i, S_SPEEDX,2); 17 | getsprite(i+1,s1); 18 | putsprite(i+1,60,i*8); 19 | } 20 | while(1){} 21 | } -------------------------------------------------------------------------------- /example/tile.c: -------------------------------------------------------------------------------- 1 | char a[] = {0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd5,0x8d,0x5d,0xdd,0xdd,0xdd,0xdd,0xdd,0xd8,0x8d,0xdd,0xdd,0xdd,0xd5,0xdd,0xd8,0x88,0x8d,0xdd,0xd5,0x88,0xd8,0x88,0xd8,0x88,0x88,0x88,0x88,0x88,0x58,0x88,0x88,0x88,0xd8,0x88,0x88,0x88,0xd8,0x88,0x88,0x88,0x88,0x88,0x58,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x85,0x88,0x88,0x88,0x88,0x58,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x8a,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xa8,0x88,0x88,0xa8,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xa8,0x88,0x88,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0}; 2 | char b[] = {0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0xbb,0x9b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xab,0x9a,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xab,0x9a,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xab,0x9a,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xab,0x9a,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0xbb,0xbb,0xbb,0xbb,0xbb,0xb9,0xbb,0xbb,0xaa,0xaa,0xaa,0xaa,0xaa,0xb9,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xb9,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xb9,0xaa,0xaa,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0xbb,0xbb,0xbb,0x9b,0xbb,0xbb,0xbb,0xbb,0xaa,0xaa,0xab,0x9a,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xab,0x9a,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xab,0x9a,0xaa,0xaa,0xaa,0xaa}; 3 | char c[] = {0xb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0xbc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xfb,0xbc,0xc9,0xc9,0xc9,0xc9,0xc9,0xcc,0xfb,0xbc,0xcc,0xcc,0xcc,0xcc,0xcc,0xc9,0xfb,0xbc,0x9c,0xcc,0xcc,0xcc,0xcc,0xcc,0xfb,0xbc,0xcc,0xcc,0xcc,0xcc,0xcc,0xc9,0xfb,0xbc,0x9c,0xcc,0xcc,0xcc,0xcc,0xcc,0xfb,0xbc,0xcc,0xcc,0xcc,0xcc,0xcc,0xc9,0xfb,0xbc,0x9c,0xcc,0xcc,0xcc,0xcc,0xcc,0xfb,0xbc,0xcc,0xcc,0xcc,0xcc,0xcc,0xc9,0xfb,0xbc,0x9c,0xcc,0xcc,0xcc,0xcc,0xcc,0xfb,0xbc,0xcc,0xcc,0xcc,0xcc,0xcc,0xc9,0xfb,0xbc,0x9c,0xcc,0xcc,0xcc,0xcc,0xcc,0xfb,0xbc,0xcc,0x9c,0x9c,0x9c,0x9c,0x9c,0xfb,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0}; 4 | char cloud1[] = {0x18,0x22,0x8,0x2a,0x8,0xa2,0x10,0xaa,0x8,0xab,0x8,0xba,0x10,0xbb,0x8,0xb0,0x8,0xb}; 5 | char cloud2[] = {0x80,0x22}; 6 | char cloud3[] = {0x1a,0x22,0x84,0x21,0x11,0x12,0x4,0x22,0x82,0x21,0x3,0x11,0x82,0x12,0x3,0x22,0x5,0x11,0x84,0x12,0x22,0x21,0x6,0x11,0x83,0x22,0x21,0x6,0x11,0x83,0x12,0x21,0x7,0x11,0x82,0x22,0x7,0x11,0x83,0x22,0x21,0x5,0x11,0x3,0x22,0x5,0x21,0x21,0x22}; 7 | int t[] = { 8 | 0,0,b,b,0,0,0,0,b,0,0,c,0,0,0,0,0,0,c,0, 9 | 0,b,b,b,0,0,0,b,b,0,0,0,0,b,0,0,0,0,0,0, 10 | a,a,a,a,a,a,a,a,a,a,a,a,a,a,0,0,a,a,a,a 11 | }; 12 | int i; 13 | void main(){ 14 | for(i = 0; i < 16; i++){ 15 | putimagerle(cloud2, i * 16, 0, 16, 16); 16 | putimagerle(cloud1, i * 16, 16, 16, 13); 17 | } 18 | putimagerle(cloud3, 64, 0, 16, 16); 19 | putimagerle(cloud3, 2, 0, 16, 16); 20 | loadtile(t, 16, 16, 20, 3); 21 | i = 100; 22 | while(1){ 23 | drawtile(10,70); 24 | delayredraw(); 25 | while(i > 0){ 26 | scroll(1,2); 27 | i--; 28 | delayredraw(); 29 | } 30 | delayredraw(); 31 | while(i < 100){ 32 | scroll(1,0); 33 | i++; 34 | delayredraw(); 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /example/wormblast.c: -------------------------------------------------------------------------------- 1 | /*settings*{"name":"wormblast","author":"Corax","image":[51,51,51,51,51,55,51,51,51,51,51,51,51,51,51,51,55,51,51,51,51,51,51,51,51,51,51,51,51,115,51,51,51,51,51,51,51,51,51,51,51,67,51,51,51,51,51,51,51,51,51,51,57,68,51,51,51,51,51,51,51,51,51,51,159,196,67,51,51,51,51,51,51,51,51,57,255,204,68,51,51,51,51,51,136,131,51,57,252,204,68,51,51,136,136,120,136,136,51,51,156,196,67,51,56,136,136,136,136,136,51,51,52,68,51,51,136,136,136,136,136,136,131,51,51,51,51,51,136,135,136,136,136,136,115,51,51,51,51,51,136,120,120,136,136,135,135,51,51,51,51,56,136,135,136,136,136,136,120,136,136,120,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,135,136,136,136,136,136,136,136,136,136,136,136,120]}*/ 2 | //6x6 3 | char bomb[] = {0x0,0xb9,0x0,0xb,0x9b,0x90,0xb9,0xb9,0x9c,0x9b,0x9c,0x9c,0x9,0xc9,0xc0,0x0,0xcc,0x0}; 4 | //32x10 5 | char wave[] = {0x0,0x0,0x99,0x99,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0x99,0x99,0x90,0x0,0x0,0x9,0x66,0x66,0x90,0x0,0x9,0x99,0x90,0x0,0x0,0x96,0x66,0x66,0x69,0x0,0x9,0x96,0x66,0x66,0x69,0x9,0x96,0x66,0x69,0x0,0x99,0x66,0x66,0x66,0x66,0x90,0x96,0x66,0x66,0x66,0x66,0x96,0x66,0x66,0x66,0x99,0x66,0x66,0x66,0x66,0x66,0x69,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66}; 6 | //6x8 7 | char worm1[] = {0x0,0x55,0x50,0x5,0x51,0xa1,0x5,0xa1,0xa1,0x0,0xaa,0xa0,0x0,0xaa,0x0,0x0,0xa,0xa0,0xaa,0xaa,0xa0,0xa,0xaa,0x0}; 8 | char worm2[] = {0x0,0x55,0x50,0x5,0x51,0xa1,0x5,0xa1,0xa1,0x0,0xaa,0xa0,0x0,0xa,0xa0,0x0,0xa,0xaa,0x0,0xaa,0xaa,0xa,0xaa,0xa0}; 9 | int worm[] = {worm1, worm2}; 10 | //32x32rle 11 | char ground[] = {0x11,0x88,0x82,0x87,0x8,0x88,0x82,0x78,0x6,0x88,0x83,0x71,0x78,0x6,0x88,0x83,0x87,0x17,0x6,0x88,0x82,0x87,0x8,0x88,0x82,0x78,0x1a,0x88,0x83,0x87,0x78,0xe,0x88,0x83,0x78,0x17,0x7,0x88,0x83,0x87,0x78,0x5,0x88,0x83,0x87,0x78,0x7,0x88,0x83,0x78,0x17,0xe,0x88,0x83,0x87,0x78,0x49,0x88,0x83,0x87,0x77,0xe,0x88,0x84,0x78,0x81,0x78,0xd,0x88,0x84,0x71,0x11,0x78,0x5,0x88,0x82,0x87,0x7,0x88,0x83,0x87,0x77,0x6,0x88,0x83,0x71,0x78,0xe,0x88,0x82,0x87,0x4b,0x88,0x82,0x78,0x8,0x88,0x82,0x87,0x5,0x88,0x83,0x87,0x17,0x8,0x88,0x83,0x71,0x78,0x5,0x88,0x82,0x78,0x2,0x88,0x84,0x87,0x77,0x78,0x3,0x88,0x82,0x87,0x9,0x88,0x84,0x78,0x88,0x17,0xd,0x88,0x84,0x87,0x11,0x17,0xe,0x88,0x83,0x77,0x78,0x3d,0x88}; 12 | 13 | char boom[] = "t:d=32,o=4,b=600:8a,a,a,a,a,a,a,a,4f,4f,f,f,f,f,f,f,f,f,f,f,a,a,a,a,a,a,a,a"; 14 | 15 | int i,cadr,key,score,maxscore; 16 | 17 | void init(); 18 | 19 | void printScore(){ 20 | gotoxy(0,0); 21 | setcolor(1); 22 | setbgcolor(3); 23 | printf("score %d max %d ", score, maxscore); 24 | } 25 | 26 | void plot_circle(int x, int y, int x_center, int y_center){ 27 | putpixel(x_center+x,y_center+y); 28 | putpixel(x_center+x,y_center+y + 1); 29 | putpixel(x_center+x,y_center-y); 30 | putpixel(x_center+x,y_center-y + 1); 31 | putpixel(x_center-x,y_center+y); 32 | putpixel(x_center-x,y_center+y + 1); 33 | putpixel(x_center-x,y_center-y); 34 | putpixel(x_center-x,y_center-y + 1); 35 | } 36 | 37 | void circle(int x_center, int y_center, int radius){ 38 | int x,y,delta; 39 | x = 0; 40 | y = radius; 41 | delta = 3 - 2 * radius; 42 | while(x= 0) 62 | x = -32; 63 | for(i = 0; i < 5; i++){ 64 | spritesetvalue(3 + i,S_X, x + i * 32); 65 | } 66 | } 67 | 68 | void drawWorm(){ 69 | int x,y; 70 | x = spritegetvalue(1, S_X); 71 | y = spritegetvalue(1, S_Y); 72 | if(getpixel(x + 3, y + 8) == 3) 73 | spritesetvalue(1,S_Y,y + 1); 74 | getsprite(1,worm[cadr]); 75 | key = getkey(); 76 | if(key == KEY_LEFT){ 77 | cadr = 1 - cadr; 78 | if(getpixel(x - 1, y + 4) == 3 && x > 1){ 79 | spritesetvalue(1,S_X,x - 1); 80 | if(getpixel(x - 1, y + 6) != 3) 81 | spritesetvalue(1,S_Y,y - 1); 82 | } 83 | } 84 | if(key == KEY_RIGHT){ 85 | cadr = 1 - cadr; 86 | if(getpixel(x + 7, y + 4) == 3 && x < 122){ 87 | spritesetvalue(1,S_X,x + 1); 88 | if(getpixel(x + 7, y + 6) != 3) 89 | spritesetvalue(1,S_Y,y - 1); 90 | } 91 | } 92 | if(y > 116){ 93 | savedata("wormblast", &maxscore, 2); 94 | init(); 95 | } 96 | } 97 | 98 | void bang(int x, int y){ 99 | int r; 100 | r = 1; 101 | loadrtttl(boom,0); 102 | playrtttl(); 103 | while(r < 12){ 104 | setcolor(1); 105 | circle(x,y,r + 1); 106 | setcolor(3); 107 | circle(x,y,r); 108 | r++; 109 | settimer(1, 15); 110 | while(gettimer(1) > 0){} 111 | drawWorm(); 112 | drawWave(); 113 | } 114 | circle(x,y,r); 115 | } 116 | 117 | void bombCollision(char n){ 118 | if(spritegetvalue(2, S_COLLISION) == 1){ 119 | if(spritegetvalue(2, S_X) < spritegetvalue(1, S_X)){ 120 | spritesetvalue(2, S_X, spritegetvalue(2, S_X) - 3); 121 | } 122 | else{ 123 | spritesetvalue(2, S_X, spritegetvalue(2, S_X) + 3); 124 | } 125 | } 126 | } 127 | 128 | void step(){ 129 | int x,y; 130 | if(gettimer(0) == 0){ 131 | settimer(0, 15); 132 | if(spritegetvalue(2, S_LIVES) <= 0){ 133 | putsprite(2, spritegetvalue(1, S_X) + random(3), 0); 134 | spritesetvalue(2,S_LIVES,90); 135 | } 136 | x = spritegetvalue(2, S_X); 137 | y = spritegetvalue(2, S_Y); 138 | if(getpixel(x + 3, y + 6) == 3 || y < 32) 139 | spritesetvalue(2,S_Y,y + 1); 140 | else{ 141 | spritesetvalue(2,S_LIVES,spritegetvalue(2,S_LIVES) - 1); 142 | if(spritegetvalue(2,S_LIVES) <= 0){ 143 | bang(x, y); 144 | score++; 145 | if(score > maxscore){ 146 | maxscore = score; 147 | } 148 | } 149 | } 150 | drawWorm(); 151 | drawWave(); 152 | printScore(); 153 | } 154 | } 155 | 156 | void init(){ 157 | int x,y; 158 | score = 0; 159 | cadr = 0; 160 | setbgcolor(3); 161 | clearscreen(); 162 | setcolor(3); 163 | for(y = 48; y < 128; y+=32) 164 | for(x = 0; x < 127; x+=32) 165 | putimagerle(ground,x,y,32,32); 166 | getsprite(1,worm[0]); 167 | spritesetvalue(1,S_WIDTH,6); 168 | spritesetvalue(1,S_HEIGHT,8); 169 | spritesetvalue(1,S_SPEEDX,0); 170 | spritesetvalue(1,S_SPEEDY,0); 171 | putsprite(1, 61, 40); 172 | getsprite(2,bomb); 173 | spritesetvalue(2,S_LIVES,0); 174 | spritesetvalue(2,S_WIDTH,6); 175 | spritesetvalue(2,S_HEIGHT,6); 176 | spritesetvalue(2,S_ON_COLLISION,bombCollision); 177 | for(i = 0; i < 5; i++){ 178 | getsprite(3 + i,wave); 179 | spritesetvalue(3 + i,S_WIDTH,32); 180 | spritesetvalue(3 + i,S_HEIGHT,10); 181 | spritesetvalue(3 + i,S_SPEEDX,0); 182 | spritesetvalue(3 + i,S_SPEEDY,0); 183 | putsprite(3 + i, i * 32 - 31, 120 - i % 2); 184 | } 185 | loaddata("wormblast", &maxscore); 186 | setcolor(1); 187 | gotoxy(0, 0); 188 | printf("press any key"); 189 | settimer(1, 1000); 190 | while(gettimer(1)){} 191 | while(getkey() == 0){} 192 | } 193 | 194 | void main(){ 195 | init(); 196 | while(1){ 197 | step(); 198 | } 199 | } -------------------------------------------------------------------------------- /favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corax89/game_engine_for_esp8266_with_compiler/c225ad0aaf428081e50f105e5d56dbf401cf1fa2/favicon.png -------------------------------------------------------------------------------- /font.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corax89/game_engine_for_esp8266_with_compiler/c225ad0aaf428081e50f105e5d56dbf401cf1fa2/font.js -------------------------------------------------------------------------------- /function/malloc.asm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corax89/game_engine_for_esp8266_with_compiler/c225ad0aaf428081e50f105e5d56dbf401cf1fa2/function/malloc.asm -------------------------------------------------------------------------------- /function/printf.asm: -------------------------------------------------------------------------------- 1 | _printf: 2 | MOV R2,R0 3 | ADD R2,R1 4 | LDI R2,(R2) 5 | LDC R3,(R2) 6 | next_printf_c: 7 | CMP R3,37 ;% 8 | JZ printf_get 9 | PUTC R3 10 | INC R2 11 | LDC R3,(R2) 12 | JNZ next_printf_c 13 | RET 14 | next_printf_c_end: 15 | INC R2 16 | LDC R3,(R2) 17 | JNZ next_printf_c 18 | RET 19 | printf_get: 20 | INC R2 21 | LDC R3,(R2) 22 | CMP R3,37 ;% 23 | JZ printf_percent 24 | DEC R1,2 25 | LDI R4,(R1+R0) 26 | CMP R3,68 ;D 27 | JZ printf_d 28 | CMP R3,73 ;I 29 | JZ printf_d 30 | CMP R3,83 ;S 31 | JZ printf_s 32 | CMP R3,67 ;C 33 | JZ printf_c 34 | JMP next_printf_c 35 | printf_percent: 36 | PUTC R3 37 | JMP next_printf_c_end 38 | printf_d: 39 | PUTN R4 40 | JMP next_printf_c_end 41 | printf_c: 42 | PUTC R4 43 | JMP next_printf_c_end 44 | printf_s: 45 | PUTS R4 46 | JMP next_printf_c_end -------------------------------------------------------------------------------- /games.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corax89/game_engine_for_esp8266_with_compiler/c225ad0aaf428081e50f105e5d56dbf401cf1fa2/games.png -------------------------------------------------------------------------------- /img/IMG_0001_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corax89/game_engine_for_esp8266_with_compiler/c225ad0aaf428081e50f105e5d56dbf401cf1fa2/img/IMG_0001_1.jpg -------------------------------------------------------------------------------- /img/IMG_0001_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corax89/game_engine_for_esp8266_with_compiler/c225ad0aaf428081e50f105e5d56dbf401cf1fa2/img/IMG_0001_2.png -------------------------------------------------------------------------------- /img/cityrunner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corax89/game_engine_for_esp8266_with_compiler/c225ad0aaf428081e50f105e5d56dbf401cf1fa2/img/cityrunner.gif -------------------------------------------------------------------------------- /img/clicker.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corax89/game_engine_for_esp8266_with_compiler/c225ad0aaf428081e50f105e5d56dbf401cf1fa2/img/clicker.gif -------------------------------------------------------------------------------- /img/collision.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corax89/game_engine_for_esp8266_with_compiler/c225ad0aaf428081e50f105e5d56dbf401cf1fa2/img/collision.gif -------------------------------------------------------------------------------- /img/columns.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corax89/game_engine_for_esp8266_with_compiler/c225ad0aaf428081e50f105e5d56dbf401cf1fa2/img/columns.gif -------------------------------------------------------------------------------- /img/flappybird.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corax89/game_engine_for_esp8266_with_compiler/c225ad0aaf428081e50f105e5d56dbf401cf1fa2/img/flappybird.gif -------------------------------------------------------------------------------- /img/galaxies.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corax89/game_engine_for_esp8266_with_compiler/c225ad0aaf428081e50f105e5d56dbf401cf1fa2/img/galaxies.gif -------------------------------------------------------------------------------- /img/gameoflife.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corax89/game_engine_for_esp8266_with_compiler/c225ad0aaf428081e50f105e5d56dbf401cf1fa2/img/gameoflife.gif -------------------------------------------------------------------------------- /img/mars_attack.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corax89/game_engine_for_esp8266_with_compiler/c225ad0aaf428081e50f105e5d56dbf401cf1fa2/img/mars_attack.gif -------------------------------------------------------------------------------- /img/memories.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corax89/game_engine_for_esp8266_with_compiler/c225ad0aaf428081e50f105e5d56dbf401cf1fa2/img/memories.gif -------------------------------------------------------------------------------- /img/pi.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corax89/game_engine_for_esp8266_with_compiler/c225ad0aaf428081e50f105e5d56dbf401cf1fa2/img/pi.gif -------------------------------------------------------------------------------- /img/race.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corax89/game_engine_for_esp8266_with_compiler/c225ad0aaf428081e50f105e5d56dbf401cf1fa2/img/race.gif -------------------------------------------------------------------------------- /img/rpg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corax89/game_engine_for_esp8266_with_compiler/c225ad0aaf428081e50f105e5d56dbf401cf1fa2/img/rpg.gif -------------------------------------------------------------------------------- /img/snake.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corax89/game_engine_for_esp8266_with_compiler/c225ad0aaf428081e50f105e5d56dbf401cf1fa2/img/snake.gif -------------------------------------------------------------------------------- /img/tile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corax89/game_engine_for_esp8266_with_compiler/c225ad0aaf428081e50f105e5d56dbf401cf1fa2/img/tile.gif -------------------------------------------------------------------------------- /img/towerdef.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corax89/game_engine_for_esp8266_with_compiler/c225ad0aaf428081e50f105e5d56dbf401cf1fa2/img/towerdef.gif -------------------------------------------------------------------------------- /opcodes.txt: -------------------------------------------------------------------------------- 1 | LDI R,int 01 0R XXXX 2 | LDI R,(R) 02 RR 3 | LDI R,(adr) 03 0R XXXX 4 | LDI R,(int+R) 04 RR XXXX 5 | STI (R),R 05 RR 6 | STI (adr),R 06 R0 XXXX 7 | STI (adr+R),R 06 RR XXXX 8 | MOV R,R 07 RR 9 | LDIAL R,(int+R*2) 08 RR XXXX 10 | STIAL (adr+R*2),R 09 RR XXXX 11 | LDC R,char 1R XX 12 | LDC R,(R) 20 RR 13 | LDC R,(R+R) 2R RR 14 | LDC R,(int+R) 30 RR XXXX 15 | LDC R,(adr) 31 0R XXXX 16 | STC (adr),R 32 0R XXXX 17 | STC (int+R),R 33 RR XXXX 18 | STC (R),R 40 RR 19 | STC (R+R),R 4R RR 20 | HLT 50 00 21 | PAUSE 50 01 22 | STIMER R,R 51 RR 23 | GTIMER R 52 0R 24 | SETLED R 53 0R 25 | LOADRT R 54 RR 26 | PLAYRT 55 00 27 | PAUSERT 55 01 28 | STOPRT 55 02 29 | PLAYTN R,R 56 RR 30 | LDATA R 57 0R 31 | NDATA R 57 1R 32 | SDATA R,R 58 RR 33 | LDI R,(R+R) 6R RR 34 | STI (R+R),R 7R RR 35 | POP R 80 0R 36 | POPN R 81 0R 37 | PUSH R 82 0R 38 | PUSHN R 83 0R 39 | JMP adr 90 00 XXXX 40 | JNZ adr 91 00 XXXX 41 | JZ adr 92 00 XXXX 42 | JNP adr 93 00 XXXX 43 | JP adr 94 00 XXXX 44 | JNC adr 95 00 XXXX 45 | JC adr 96 00 XXXX 46 | JZR R,adr 97 0R XXXX 47 | JNZR R,adr 98 0R XXXX 48 | CALL adr 99 00 XXXX 49 | RET 9A 00 50 | ADD R,R A0 RR 51 | ADC R,R A1 RR 52 | SUB R,R A2 RR 53 | SBC R,R A3 RR 54 | MUL R,R A4 RR 55 | DIV R,R A5 RR 56 | AND R,R A6 RR 57 | OR R,R A7 RR 58 | INC R A8 0R 59 | INC adr A8 10 XXXX 60 | INC R,n A8 nR 61 | DEC R A9 0R 62 | DEC adr A9 10 XXXX 63 | DEC R,n A9 nR 64 | XOR R,R AA RR 65 | SHL R,R AB RR 66 | SHR R,R AC RR 67 | RAND R AD 0R 68 | SQRT R AD 1R 69 | NOT R AD 2R 70 | ANDL R,R AE RR 71 | ORL R,R AF RR 72 | CMP R,CHR BR XX 73 | CMP R,INT C0 R0 XXXX 74 | CMP R,R C1 RR 75 | LDF R,F C2 RF 76 | 77 | ITOF R C3 0R 78 | FTOI R C3 1R 79 | SIN R C3 2R 80 | COS R C3 3R 81 | MEMCPY R C3 4R 82 | MULF R,R C4 RR 83 | DIVF R,R C5 RR 84 | 85 | CLS D0 00 86 | GSPRXY R,R D0 RR 87 | PUTC R D1 0R 88 | PUTS R D1 1R 89 | PUTN R D1 2R 90 | SETX R D1 3R 91 | SETY R D1 4R 92 | 93 | DRECT R D1 5R 94 | FRECT R D1 6R 95 | DCIRC R D1 7R 96 | FCIRC R D1 8R 97 | DTRIANG R D1 9R 98 | FTRIANG R D1 AR 99 | 100 | PUTF R D1 BR 101 | DRWCHAR R D1 CR 102 | DRWSTR R D1 DR 103 | FONTLOAD R D1 ER 104 | FONTSIZE R D1 FR 105 | 106 | GETK R D2 0R 107 | GETJ R D2 1R 108 | PPIX R,R D3 RR 109 | DRWIM R D4 0R 110 | SFCLR R D4 1R 111 | SBCLR R D4 2R 112 | GFCLR R D4 3R 113 | GBCLR R D4 4R 114 | ISIZE R D4 5R 115 | DLINE R D4 6R 116 | DRWRLE R D4 7R 117 | LDTILE R D4 8R 118 | SPRSDS R*2 D4 9R 119 | DRWBIT R D4 AR 120 | SETCLIP R D4 BR 121 | SETFPS R D4 CR 122 | SETCTILE R D4 DR 123 | 124 | LDSPRT R,R D5 RR 125 | SPALET R,R D6 RR 126 | SPART R D7 0R 127 | SEMIT R D7 1R 128 | DPART R D7 2R 129 | DISTSS D7 3R 130 | DISTSP D7 4R 131 | DISTPP D7 5R 132 | SEMITSZ R D7 6R 133 | SCROLL R,R D8 RR 134 | GETPIX R,R D9 RR 135 | DRTILE R,R DA RR 136 | SPRGET R,R DC RR 137 | AGBSPR R,R DE RR 138 | GTILEXY R,R DF RR 139 | DRSPRT R,R,R ER RR 140 | SSPRTV R,R,R FR RR 141 | ______________________________ 142 | sprite.x 0 143 | sprite.y 1 144 | sprite.speedx 2 145 | sprite.speedy 3 146 | sprite.width 4 147 | sprite.height 5 148 | sprite.angle 6 149 | sprite.lives 7 150 | sprite.collision 8 151 | -------------------------------------------------------------------------------- /saveashtml.js: -------------------------------------------------------------------------------- 1 | function saveAsHtml(file, im) { 2 | var s = 'esp8266gameEngine
print on keyboard
key A - z, key B - x or space. Created width ESP lge
click on screen for start
sound
'; 13 | return s; 14 | } 15 | -------------------------------------------------------------------------------- /sound.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | function Sound() { 4 | var audio; 5 | 6 | var play_tone = { 7 | "freq": 0, 8 | "time": 0 9 | }; 10 | 11 | var rtttl = { 12 | "address": 0, 13 | "position": 0, 14 | "startposition": 0, 15 | "loop": 0, 16 | "play": 0, 17 | "default_dur": 0, 18 | "default_oct": 0, 19 | "bpm": 0, 20 | "wholenote": 0, 21 | "str": '', 22 | "globalSound": 1 23 | }; 24 | 25 | var notes = [ 26 | 0, 262, 277, 294, 311, 330, 349, 370, 392, 415, 440, 466, 494, 523, 554, 587, 622, 659, 698, 740, 784, 831, 880, 27 | 932, 988, 1047, 1109, 1175, 1245, 1319, 1397, 1480, 1568, 1661, 1760, 1865, 1976, 2093, 2217, 2349, 2489, 2637, 28 | 2794, 2960, 3136, 3322, 3520, 3729, 3951 29 | ]; 30 | 31 | function initAudio() { 32 | if (!audio){ 33 | if(!(window.AudioContext || window.webkitAudioContext)){ 34 | audio = {}; 35 | document.getElementById("soundCheckbox").disabled = true; 36 | document.getElementById("soundCheckbox").checked = false; 37 | rtttl.globalSound = false; 38 | } 39 | else 40 | audio = new(window.AudioContext || window.webkitAudioContext)(); 41 | } 42 | } 43 | 44 | function isdigit(str) { 45 | return /^\d+$/.test(str); 46 | } 47 | 48 | function isNumber(value) { 49 | return typeof value === 'number' && isFinite(value); 50 | } 51 | 52 | function tone(freq, delay) { 53 | if (rtttl.globalSound) { 54 | var attack = 10, 55 | gain = audio.createGain(), 56 | osc = audio.createOscillator(); 57 | gain.connect(audio.destination); 58 | gain.gain.value = 0.1; 59 | osc.frequency.value = freq; 60 | osc.type = "square"; 61 | osc.connect(gain); 62 | osc.start(0); 63 | setTimeout(function () { 64 | osc.stop(0); 65 | osc.disconnect(gain); 66 | gain.disconnect(audio.destination); 67 | }, delay); 68 | } 69 | } 70 | 71 | function addTone(f, t) { 72 | play_tone.freq = f; 73 | play_tone.time = t; 74 | } 75 | 76 | function loadRtttl() { 77 | var n, 78 | c, 79 | i; 80 | rtttl.default_dur = 4; 81 | rtttl.default_oct = 6; 82 | rtttl.bpm = 63; 83 | rtttl.startposition = 0; 84 | i = 0; 85 | c = cpu.readMem(rtttl.address + i); 86 | rtttl.str = ''; 87 | while (c != 0) { 88 | rtttl.str += String.fromCharCode(c); 89 | c = cpu.readMem(rtttl.address + i); 90 | i++; 91 | } 92 | while (c != ':' && rtttl.startposition < rtttl.str.length) { 93 | // ignore name 94 | c = rtttl.str[rtttl.startposition]; 95 | rtttl.startposition++; 96 | } 97 | c = rtttl.str[rtttl.startposition]; // skip ':' 98 | // get default duration 99 | if (c == 'd') { 100 | rtttl.startposition += 2; // skip "d=" 101 | n = ''; 102 | while (isdigit(rtttl.str[rtttl.startposition])) { 103 | n += rtttl.str[rtttl.startposition]; 104 | rtttl.startposition++; 105 | } 106 | if (parseInt(n) > 0) 107 | rtttl.default_dur = parseInt(n); 108 | rtttl.startposition++; // skip comma 109 | } 110 | // get default octave 111 | c = rtttl.str[rtttl.startposition]; 112 | if (c == 'o') { 113 | rtttl.startposition += 2; // skip "o=" 114 | c = rtttl.str[rtttl.startposition]; 115 | if (parseInt(c) >= 3 && parseInt(c) <= 7) 116 | rtttl.default_oct = parseInt(c); 117 | rtttl.startposition += 2; 118 | } 119 | // get BPM 120 | c = rtttl.str[rtttl.startposition]; 121 | if (c == 'b') { 122 | rtttl.startposition += 2; // skip "b=" 123 | n = ''; 124 | while (isdigit(rtttl.str[rtttl.startposition])) { 125 | n += rtttl.str[rtttl.startposition]; 126 | rtttl.startposition++; 127 | } 128 | if (parseInt(n) > 0) 129 | rtttl.bpm = parseInt(n); 130 | } 131 | // BPM usually expresses the number of quarter notes per minute 132 | rtttl.wholenote = (60 * 1000 / rtttl.bpm) * 4; // this is the time for whole note (in milliseconds) 133 | rtttl.startposition++; 134 | rtttl.position = 0; 135 | return 1; 136 | } 137 | 138 | function testEndRtttl() { 139 | if (rtttl.startposition + rtttl.position >= rtttl.str.length) { 140 | if (!rtttl.loop) 141 | rtttl.play = 0; 142 | rtttl.position = 0; 143 | return true; 144 | } 145 | return false; 146 | } 147 | 148 | function playRtttl() { 149 | var n, 150 | duration, 151 | note, 152 | scale, 153 | c; 154 | //play single tone 155 | if (play_tone.time) { 156 | tone(play_tone.freq, play_tone.time); 157 | n = play_tone.time; 158 | play_tone.time = 0; 159 | return n; 160 | } 161 | //player 162 | if (rtttl.play == 0) 163 | return 100; 164 | //first, get note duration, if available 165 | n = 0; 166 | if(testEndRtttl()) 167 | return 100; 168 | c = rtttl.str[rtttl.startposition + rtttl.position]; 169 | n = ''; 170 | while (isdigit(rtttl.str[rtttl.startposition + rtttl.position])) { 171 | n += rtttl.str[rtttl.startposition + rtttl.position]; 172 | rtttl.position++; 173 | } 174 | if (isNumber(parseInt(n)) && parseInt(n) != 0) 175 | duration = rtttl.wholenote / n; 176 | else 177 | duration = rtttl.wholenote / rtttl.default_dur; // we will need to check if we are a dotted note after 178 | //now get the note 179 | c = rtttl.str[rtttl.startposition + rtttl.position]; 180 | note = 0; 181 | switch (c) { 182 | case 'c': 183 | case 'C': 184 | note = 1; 185 | break; 186 | case 'd': 187 | case 'D': 188 | note = 3; 189 | break; 190 | case 'e': 191 | case 'E': 192 | note = 5; 193 | break; 194 | case 'f': 195 | case 'F': 196 | note = 6; 197 | break; 198 | case 'g': 199 | case 'G': 200 | note = 8; 201 | break; 202 | case 'a': 203 | case 'A': 204 | note = 10; 205 | break; 206 | case 'b': 207 | case 'B': 208 | note = 12; 209 | break; 210 | case 'p': 211 | case 'P': 212 | default: 213 | note = 0; 214 | } 215 | if (!testEndRtttl()) 216 | rtttl.position++; 217 | else{ 218 | return 100; 219 | } 220 | c = rtttl.str[rtttl.startposition + rtttl.position]; 221 | // now, get optional '#' sharp 222 | if (c == '#') { 223 | note++; 224 | if (!testEndRtttl()) 225 | rtttl.position++; 226 | else 227 | return 100; 228 | c = rtttl.str[rtttl.startposition + rtttl.position]; 229 | } 230 | // now, get optional '.' & ';' & '&' dotted note 231 | if (c == '.' || c == ';' || c == '&') { 232 | if(c == '.') 233 | duration += duration / 2; 234 | else if(c == ';') 235 | duration += duration; 236 | else 237 | duration += (duration / 2) * 3; 238 | if (!testEndRtttl()) 239 | rtttl.position++; 240 | else 241 | return 100; 242 | c = rtttl.str[rtttl.startposition + rtttl.position]; 243 | } 244 | // now, get scale 245 | if (isdigit(c)) { 246 | scale = c - '0'; 247 | if (!testEndRtttl()) 248 | rtttl.position++; 249 | else 250 | return 100; 251 | c = rtttl.str[rtttl.startposition + rtttl.position]; 252 | } else { 253 | scale = rtttl.default_oct; 254 | } 255 | if (c == ',') 256 | rtttl.position++; // skip comma for next note (or we may be at the end) 257 | // now play the note 258 | if (note) { 259 | tone(notes[(scale - 4) * 12 + note], duration); 260 | } else { 261 | //console.log("Pausing: " + duration); 262 | } 263 | return duration; 264 | } 265 | 266 | return { 267 | initAudio: initAudio, 268 | rtttl: rtttl, 269 | tone: tone, 270 | addTone: addTone, 271 | loadRtttl: loadRtttl, 272 | playRtttl: playRtttl 273 | }; 274 | } 275 | -------------------------------------------------------------------------------- /test.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | test 4 | 5 | 6 | 7 | 8 | 9 | 10 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 82 | 83 | 84 | --------------------------------------------------------------------------------