15 Commits

Author SHA1 Message Date
b2a96309e5 [v0.6.1]
- Restablert el exemplet de game.lua
- Ficat Makefile per a tots, falta provar el de mac
- Bàsicament, açò es per fer una release de binaris (fill de osiris).
2023-09-07 10:46:38 +02:00
b0446f40a1 Merge branch 'master' of https://gitea.sustancia.synology.me/JailDoctor/ascii 2023-09-07 10:35:50 +02:00
3b4501aaec - Treballant en el editor de codi 2023-07-10 22:01:39 +02:00
fca1172162 Merge branch 'master' of https://gitea.sustancia.synology.me/JailDoctor/ascii 2023-01-08 09:10:02 +01:00
9d2a0801e1 Merge branch 'master' of https://gitea.sustancia.synology.me/JailDoctor/ascii 2023-01-08 09:09:41 +01:00
41f539578a - Volume changing
- Message system
- Tempo changing
- Save to clipboard
2023-01-08 09:09:27 +01:00
dd7e3de890 Merge branch 'master' of https://gitea.sustancia.synology.me/JailDoctor/ascii 2023-01-08 08:36:57 +01:00
785a51ac98 Update 'readme.md' 2022-12-11 12:25:00 +01:00
9ed4118250 Update 'readme.md' 2022-12-11 12:24:07 +01:00
5c0758354c Update 'readme.md' 2022-12-11 12:21:43 +01:00
3abd22f150 Update 'readme.md' 2022-12-11 12:21:13 +01:00
cde75e2557 Update 'readme.md' 2022-12-11 12:17:25 +01:00
4733a66fc0 Update 'readme.md' 2022-12-11 12:15:58 +01:00
b3f59e9175 Add 'readme.md' 2022-12-11 12:12:32 +01:00
b09360d7ae Run a game by dropping the file on the window 2022-07-27 18:25:45 +02:00
9 changed files with 364 additions and 23 deletions

1
.gitignore vendored
View File

@@ -7,3 +7,4 @@ scr_min.c
tests.lua
fake_editor.lua
*.bin
bin/*

View File

@@ -1,4 +1,27 @@
executable = ascii
source = *.cpp ./lua/*.c
windows:
@echo off
g++ $(source) -Wall -Os -ffunction-sections -fdata-sections -Wl,--gc-sections -lmingw32 -lSDL2main -lSDL2 -mwindows -o "$(executable).exe"
strip -s -R .comment -R .gnu.version --strip-unneeded "$(executable).exe"
windows_debug:
@echo off
g++ $(source) -D DEBUG -g -Wall -Os -lmingw32 -lSDL2main -lSDL2 -o "$(executable)_debug.exe"
macos:
g++ *.cpp ./lua/*.c -lSDL2 -o $(executable)
clang++ $(source) -Wall -Os -std=c++11 -ffunction-sections -fdata-sections -lSDL2 -o "$(executable)"
macos_debug:
clang++ $(source) -D DEBUG -g -Wall -Os -std=c++11 -ffunction-sections -fdata-sections -lSDL2 -o "$(executable)_debug"
macos_bundle:
clang++ $(source) -D MACOS_BUNDLE -Wall -Os -std=c++11 -framework SDL2 -F /Library/Frameworks -ffunction-sections -fdata-sections -o mini_bundle -rpath @executable_path/../Frameworks/ -target x86_64-apple-macos10.12
linux:
g++ $(source) -Wall -Os -ffunction-sections -fdata-sections -Wl,--gc-sections -lSDL2 -o "$(executable)"
strip -s -R .comment -R .gnu.version --strip-unneeded "$(executable)"
linux_debug:
g++ $(source) -D DEBUG -g -Wall -Os -ffunction-sections -fdata-sections -Wl,--gc-sections -lSDL2 -o "$(executable)_debug"

View File

@@ -198,6 +198,8 @@ int main(int argc,char*argv[]) {
lua_init(NULL);
lua_call_init();
SDL_EventState(SDL_DROPFILE, SDL_ENABLE);
while(!exit) {
if (should_reset) {
should_reset = false;
@@ -210,6 +212,12 @@ int main(int argc,char*argv[]) {
mouse_wheel = 0;
while(SDL_PollEvent(&mini_eve)) {
if (mini_eve.type == SDL_QUIT) { exit=true; break; }
if (mini_eve.type == SDL_DROPFILE) {
char* dropped_filedir = mini_eve.drop.file;
load(dropped_filedir);
//SDL_ShowSimpleMessageBox( SDL_MESSAGEBOX_INFORMATION, "File dropped on window", dropped_filedir, mini_win );
SDL_free(dropped_filedir);
}
if (mini_eve.type == SDL_KEYDOWN) {
if (mini_eve.key.keysym.scancode == SDL_SCANCODE_ESCAPE) {
if (lua_is_playing()) {
@@ -254,9 +262,9 @@ int main(int argc,char*argv[]) {
} else {
debug_cursor_blink--;
if (debug_cursor_blink == 0) {
debug_cursor_blink = 30;
debug_cursor_blink = 60;
const int pos = cursor_x+cursor_y*screen_width;
char_screen[pos] = char_screen[pos]==32 ? 95 : 32;
//char_screen[pos] = char_screen[pos]==32 ? 95 : 32;
}
loop();
}
@@ -266,7 +274,10 @@ int main(int argc,char*argv[]) {
case 0:
for (int y=0; y<screen_height; ++y) {
for (int x=0; x<screen_width; ++x) {
const uint8_t chr_color = current_color; //COLSCR(x,y);
uint8_t chr_color = current_color; //COLSCR(x,y);
if ((debug_cursor_blink<30)&&(cursor_x==x)&&(cursor_y==y)) {
chr_color = (chr_color>>4)+((chr_color&0x0f)<<4);
}
const uint32_t ink_color = palette[chr_color & 0x0f];
const uint32_t paper_color = palette[chr_color >> 4];
const uint8_t chr = CHRSCR(x,y);
@@ -581,6 +592,11 @@ void prev_cmd() {
get_cmd_by_index();
}
void debug_set_cursor(uint8_t x, uint8_t y) {
cursor_x = x;
cursor_y = y;
}
uint8_t ascii(const char *str, uint8_t index) {
return str[index];
}

View File

@@ -183,6 +183,7 @@ void debug(const char *str, const bool newline=true);
void debug_get_cmd();
void next_cmd();
void prev_cmd();
void debug_set_cursor(uint8_t x, uint8_t y);
uint8_t ascii(const char *str, uint8_t index);
const char* chr(uint8_t ascii);

View File

@@ -1 +1,20 @@
/Users/sergio/Gitea/miniascii_jaildoc/miniascii/demos/ticker.lua
function init()
mode(0)
cls()
play("o4v5l1crcl4dcferl1crcl4dcgfr")
end
function update()
cls()
locate(0,0)
if mousebutton(1) then
print("Has pulsat el boto esquerre")
elseif mousebutton(2) then
print("Has pulsat el boto del mig")
elseif mousebutton(3) then
print("Has pulsat el boto dret")
else
print("No has pulsat cap boto")
end
end

View File

@@ -417,7 +417,7 @@ bool lua_is_playing() {
return lua_state == STATE_PLAYING;
}
const char boot[] = "function init()mode(1)cls()play('o5l0v5cegv4cegv3cegv2cegv1ceg')memcpy(360,4608,240)memcpy(1560,4848,240)ink(1)print('G A M E',8,16)ink(4)print('S Y S T E M',20,16)ink(7)print('mini',9,8)ink(8)print('v0.5.4',34,29)w=0 end function update()w=w+1 if w>90 then cls()load()end end";
const char boot[] = "function init()mode(1)cls()play('o5l0v5cegv4cegv3cegv2cegv1ceg')memcpy(360,4608,240)memcpy(1560,4848,240)ink(1)print('G A M E',8,16)ink(4)print('S Y S T E M',20,16)ink(7)print('mini',9,8)ink(8)print('v0.6.1',34,29)w=0 end function update()w=w+1 if w>90 then cls()load()end end";
void lua_init(const char* filename, const bool start_playing) {
if (lua_state != STATE_STOPPED) lua_quit();

211
main.cpp
View File

@@ -3,15 +3,41 @@
#include <string>
#include <list>
std::list<std::string> code;
int current_editor = 0;
void init_terminal();
void do_terminal();
void init_code_editor();
void do_code_editor();
void save_code();
void loop() {
if (btnp(KEY_TAB)) {
current_editor = (++current_editor)%2;
switch(current_editor) {
case 0:
init_terminal();
break;
case 1:
init_code_editor();
break;
}
}
switch(current_editor) {
case 0:
do_terminal();
break;
case 1:
do_code_editor();
break;
}
}
void execute_run() {
//if (current_editor == 1) save_code();
if (current_editor == 1) save_code();
}
uint8_t get_char(uint8_t key) {
@@ -71,3 +97,186 @@ void do_terminal() {
}
}
}
void save_code() {
const char* file = get_filename();
FILE *f = fopen(file, "w");
for (std::list<std::string>::iterator it = code.begin(); it != code.end(); it++) {
fprintf(f, "%s\n", (*it).c_str());
}
fclose(f);
}
void load_code() {
const char* file = get_filename();
FILE *f = fopen(file, "rb");
fseek(f, 0, SEEK_END);
long fsize = ftell(f);
fseek(f, 0, SEEK_SET); /* same as rewind(f); */
char *buffer = (char*)malloc(fsize + 1);
fread(buffer, 1, fsize, f);
fclose(f);
buffer[fsize] = 0;
int start = 0;
for (int pos=0;pos<fsize;++pos) {
if (buffer[pos] == '\n') {
buffer[pos]='\0';
code.push_back(&buffer[start]);
start=pos+1;
} else if (buffer[pos] == '\r') {
buffer[pos]='\0';
code.push_back(&buffer[start]);
start=pos+1;
if (buffer[start] == '\n') {pos++; start++;}
}
}
free(buffer);
}
std::list<std::string>::iterator ls[28];
static int col = 0;
static int line = 0;
void refresh_code_editor() {
color(COLOR_WHITE, COLOR_BLUE);
cls();
//print(" File Edit Run ",0,0);
//print(" ",0,29);
std::list<std::string>::iterator it = code.begin();
int i=0;
while (it != code.end() && i<28) {
ls[i] = it;
print((*it).c_str(), 0, i);
++i; ++it;
}
}
void init_code_editor() {
mode(0);
code.clear();
load_code();
refresh_code_editor();
}
std::string get_current_line() {
return *ls[line];
}
void move_cursor_up() {
if (line > 0) {
line--;
if (get_current_line().size() < col) col = get_current_line().size();
}
}
void move_cursor_down() {
if (line < code.size()-1) {
line++;
if (get_current_line().size() < col) col = get_current_line().size();
}
}
void move_cursor_right() {
if ( col < get_current_line().size() ) {
col++;
} else {
if (line < code.size()-1) {
col = 0;
move_cursor_down();
}
}
}
void move_cursor_left() {
if (col > 0) {
col--;
} else {
if (line > 0) {
move_cursor_up();
col = get_current_line().size();
}
}
}
void move_line_end() {
col = get_current_line().size();
}
void move_line_home() {
col = 0;
}
void split_line() {
std::string str = get_current_line();
*ls[line] = str.substr(col);
std::list<std::string>::iterator newline = ls[line]++;
code.insert(newline, str.substr(0, col));
line++; col=0;
refresh_code_editor();
}
void join_lines() {
std::string str = get_current_line();
//std::list<std::string>::iterator prevline = ls[line]--;
code.erase(ls[line]);
line--;
const int line_size = (*ls[line]).size();
*ls[line] += str;
col = line_size;
refresh_code_editor();
}
void delete_char() {
if (col == 0) {
if (line > 0) join_lines();
} else {
std::string str = get_current_line();
std::string a = str.substr(0,col-1);
std::string b = str.substr(col);
*ls[line] = a+b;
col--;
refresh_code_editor();
}
}
void supr_char() {
if ((col == (*ls[line]).size()) && (line == code.size()-1)) return;
move_cursor_right();
delete_char();
}
void add_char(uint8_t chr) {
std::string str = get_current_line();
std::string a = str.substr(0,col);
std::string b = str.substr(col);
std::string c = " "; c[0] = chr;
*ls[line] = a+c+b;
col++;
refresh_code_editor();
}
void do_code_editor() {
const uint8_t key = whichbtn();
if (key != KEY_UNKNOWN) {
if (key == KEY_RETURN or key == KEY_KP_ENTER) {
split_line();
}
else if (key == KEY_UP) move_cursor_up();
else if (key == KEY_DOWN) move_cursor_down();
else if (key == KEY_LEFT) move_cursor_left();
else if (key == KEY_RIGHT) move_cursor_right();
else if (key == KEY_BACKSPACE) delete_char();
else if (key == KEY_DELETE) supr_char();
else if (key == KEY_END) move_line_end();
else if (key == KEY_HOME) move_line_home();
else {
uint8_t chr = get_char(key);
if (chr != 0) add_char(chr);
}
}
debug_set_cursor(col, line);
}

1
readme.md Normal file
View File

@@ -0,0 +1 @@
miniASCi!

View File

@@ -5,12 +5,17 @@ function init()
"\143\143\143\154\154", " ", "\143\143\143\154\154", " ", "\143\143\143\154\154", "^^^^^" }
notes = {"C ", "C#", "D ", "D#", "E ", "F ", "F#", "G ", "G#", "A ", "A#", "B "}
pnotes = {"c", "c#", "d", "d#", "e", "f", "f#", "g", "g#", "a", "a#", "b"}
vcolor = { 1, 9, 5, 4, 6, 12, 14, 15}
piano_pos=18
mousewait=0
compas = 0
compasos = {}
volumens = {}
volum = 4
tempo = 4
for i=0,1279 do compasos[i] = 108 end
for i=0,1279 do volumens[i] = 4 end
compasos[0] = 49
compasos[1] = 49
compasos[2] = 49
@@ -20,6 +25,8 @@ function init()
compasos[10] = 50
old_mouse_x,old_mouse_y = 0,0
message_count = 255
message_text = " HOLA"
end
function update()
@@ -72,7 +79,7 @@ function update()
color(COLOR_BLACK, COLOR_LIGHT_GRAY+flr(oct%2))
print("\003",7+i,10+11-(n-piano_pos))
end
color(COLOR_BLACK,COLOR_LIGHT_RED)
color(COLOR_BLACK,vcolor[volumens[(compas*32)+i]])
if i==31 or compasos[(compas*32)+i+1]~=n then
print("\003",8+i,10+11-(n-piano_pos))
else
@@ -83,10 +90,11 @@ function update()
if mousex()>=8 and mousey()>=10 and mousey()<=21 then
if mousebutton(1) then
volumens[(compas*32)+mousex()-8] = volum
compasos[(compas*32)+mousex()-8] = piano_pos+11-(mousey()-10)
if old_mouse_x ~= mousex() or old_mouse_y ~= mousey() then
local note = piano_pos+11-(mousey()-10)
play("l4o"..tostr(note/12)..pnotes[(note%12)+1])
play("l4v"..volum.."o"..tostr(note/12)..pnotes[(note%12)+1])
end
old_mouse_x,old_mouse_y = mousex(),mousey()
else
@@ -105,16 +113,64 @@ function update()
end
end
color(15,0)print("\143",0,0)
color(14,0)print("\143",1,0)
color(12,0)print("\143",2,0)
color(6,0)print("\143",3,0)
color(4,0)print("\143",4,0)
color(5,4)print("\143",5,0)
color(9,0)print("\143",6,0)
color(1,0)print("\143",7,0)
color(0,0)print("\143",8,0)
if btn(KEY_LCTRL) and btnp(KEY_S) then
local song = prepare_song(true)
toclipboard(song)
show_message("SAVED TO CLIPBOARD")
end
-- if btn(KEY_LSHIFT) and btnp(KEY_L) then
-- local song = prepare_song(true)
-- toclipboard(song)
-- show_message("SAVED TO CLIPBOARD")
-- end
color(15,0)print("VOLUM:",0,0)
color(1,0)print("\143",0,1)
color(9,0)print("\143",1,1)
color(5,4)print("\143",2,1)
color(4,0)print("\143",3,1)
color(6,0)print("\143",4,1)
color(12,0)print("\143",5,1)
color(14,0)print("\143",6,1)
color(15,0)print("\143",7,1)
color(15,0)print("\244",volum-1,2)
if mousex()<8 and mousey()==1 and mousebutton(1) then
volum = mousex()+1
end
if not mousedown and mousex()==20 and mousey()==1 and mousebutton(1) and tempo > 0 then
tempo = tempo - 1
mousedown = true
end
if not mousedown and mousex()==24 and mousey()==1 and mousebutton(1) and tempo < 9 then
tempo = tempo + 1
mousedown = true
end
if mousedown and not mousebutton(1) then
mousedown = false
end
color(15,0)print("TEMPO",20,0)
print("\247 0 \246",20,1)
print(tostr(tempo),22,1)
if message_count > 0 then
message_color = 15
if message_count < 18 then
message_color = message_count>>1
end
color(message_color,0)print(message_text,0,26)
message_count = message_count - 1
end
end
function show_message(text)
message_count = 255
message_text = text
end
function search_song_end()
@@ -124,6 +180,12 @@ function search_song_end()
end
function play_song(entire_song)
local song = prepare_song(entire_song)
log(song)
play(song)
end
function prepare_song(entire_song)
entire_song = entire_song or false
local note_size = {1,2,3,4,6,8,12,16,24,32}
local note_names = {"c","c#","d", "d#","e","f","f#","g","g#","a","a#","b"}
@@ -131,10 +193,15 @@ function play_song(entire_song)
local current_note = 255
local current_octave = 4
local current_volume = 4
local p=compas*32
local ends=32+compas*32
if tempo ~= 4 then
song = "t"..tostr(tempo)
end
if entire_song then
p=0
ends=search_song_end()
@@ -142,8 +209,12 @@ function play_song(entire_song)
while p<ends do
current_note = compasos[p]
if volumens[p] ~= current_volume then
current_volume = volumens[p]
song=song.."v"..tostr(current_volume)
end
local d=0
while d<32 and current_note == compasos[p] do d=d+1 p=p+1 end
while d<32 and current_note == compasos[p] and current_volume == volumens[p] do d=d+1 p=p+1 end
local o = flr(current_note/12)
if o<9 and current_octave~=o then
current_octave=o
@@ -167,6 +238,6 @@ function play_song(entire_song)
end
end
end
log(song)
play(song)
return song
end