From 6be630167a33a34de4019abb98df8e99cf709947 Mon Sep 17 00:00:00 2001 From: Vadim Grigoruk Date: Sat, 4 Aug 2018 00:36:53 +0300 Subject: [PATCH] #652: added alt font button to the Code Editor --- bin/assets/config.tic.dat | 2 +- config.tic | Bin 14461 -> 14461 bytes src/code.c | 57 ++++++++++++++++++++++++++++---------- src/code.h | 2 ++ src/console.c | 6 ++-- src/dialog.c | 14 +++++----- src/jsapi.c | 6 ++-- src/luaapi.c | 16 +++++++++-- src/machine.h | 8 +++--- src/map.c | 6 ++-- src/menu.c | 22 +++++++-------- src/music.c | 24 ++++++++-------- src/sfx.c | 20 ++++++------- src/sprite.c | 10 +++---- src/start.c | 6 ++-- src/studio.c | 8 +++--- src/surf.c | 30 ++++++++++---------- src/tic.c | 46 +++++++++++++++--------------- src/tic.h | 3 +- src/ticapi.h | 8 +++--- src/wrenapi.c | 12 ++++++-- 21 files changed, 181 insertions(+), 125 deletions(-) diff --git a/bin/assets/config.tic.dat b/bin/assets/config.tic.dat index 4b00b51..0cfa572 100644 --- a/bin/assets/config.tic.dat +++ b/bin/assets/config.tic.dat @@ -1 +1 @@ -0x78, 0xda, 0xed, 0x19, 0x4b, 0x6c, 0x1b, 0xc7, 0x75, 0xfd, 0x49, 0x1a, 0x32, 0xae, 0xc7, 0x02, 0x8a, 0xa0, 0x9f, 0xb4, 0x59, 0xa8, 0x69, 0x4b, 0x4a, 0x24, 0x45, 0x91, 0x92, 0xea, 0xda, 0xdd, 0xa6, 0xb2, 0x48, 0x4b, 0x6a, 0xf4, 0x83, 0x24, 0xc6, 0x0d, 0x8c, 0x44, 0x5d, 0x91, 0x4b, 0x89, 0x08, 0xc5, 0x55, 0x77, 0x49, 0x4b, 0x72, 0x20, 0x20, 0x08, 0x10, 0x40, 0x3d, 0xb9, 0x07, 0x17, 0xa8, 0x0e, 0x85, 0x52, 0xf8, 0xa6, 0x5e, 0x7a, 0xf1, 0xa5, 0x3a, 0x18, 0xed, 0xad, 0x05, 0x5a, 0x14, 0x41, 0xd1, 0x43, 0x51, 0xf4, 0x52, 0xf4, 0x4a, 0xcf, 0xc9, 0xa8, 0x11, 0x20, 0xdb, 0xf7, 0x66, 0x66, 0x97, 0xfb, 0x99, 0xa5, 0x1c, 0x20, 0xe9, 0x49, 0xb3, 0x1a, 0xce, 0xe7, 0xcd, 0x7b, 0xf3, 0xfe, 0x33, 0xbb, 0x3a, 0xf7, 0xe1, 0xf3, 0xca, 0x27, 0x0e, 0x94, 0xc1, 0xc1, 0xc1, 0x7b, 0x07, 0x07, 0x07, 0xf7, 0xb0, 0x85, 0xe1, 0x3d, 0x87, 0x7a, 0xd5, 0x71, 0x1e, 0x77, 0x07, 0x07, 0x9d, 0xee, 0xc1, 0x01, 0xed, 0x0e, 0xbe, 0x4f, 0xbb, 0xce, 0x3d, 0xea, 0xd0, 0x7b, 0x94, 0xba, 0x95, 0xe1, 0x0f, 0x0c, 0x0c, 0x98, 0xf5, 0x7a, 0xdd, 0xc4, 0x16, 0x86, 0x26, 0xe0, 0xb9, 0x15, 0xf1, 0x07, 0x06, 0x9c, 0x6e, 0xbd, 0x4e, 0xbb, 0x03, 0x3a, 0xe0, 0x9b, 0xb4, 0x4b, 0x79, 0x7d, 0x4c, 0x4d, 0xc5, 0x61, 0xf8, 0xa5, 0x52, 0xe9, 0xe8, 0xf0, 0xf0, 0xf0, 0x08, 0x5b, 0x18, 0x1e, 0x11, 0xa8, 0x80, 0x7b, 0x24, 0xf0, 0x4b, 0x25, 0xa7, 0x7b, 0x78, 0x48, 0xbb, 0xa5, 0xfb, 0x80, 0x7f, 0x44, 0xbb, 0x04, 0x2a, 0x3d, 0x02, 0xfc, 0x23, 0x81, 0x5f, 0xa9, 0x54, 0x1e, 0x9d, 0x9c, 0x9c, 0x3c, 0xc2, 0x16, 0x86, 0xac, 0x12, 0x85, 0x60, 0x8b, 0xf8, 0x95, 0x8a, 0xd3, 0x3d, 0x39, 0xa1, 0xdd, 0xca, 0x43, 0xc0, 0x7f, 0x04, 0x34, 0x1f, 0x51, 0xaa, 0x40, 0xc5, 0xf6, 0xc3, 0xe3, 0xe3, 0xe4, 0x31, 0x96, 0x6b, 0x0f, 0x8e, 0x8f, 0x8b, 0xc5, 0xe3, 0x6b, 0xc5, 0xe2, 0x03, 0x1c, 0xc2, 0xcf, 0xb5, 0x7c, 0xb1, 0x78, 0xc1, 0x85, 0xb3, 0x79, 0x80, 0xb3, 0x75, 0x11, 0xf8, 0x03, 0x81, 0x2f, 0x5a, 0x18, 0x07, 0xe0, 0xd7, 0x04, 0xfd, 0x6b, 0x02, 0xff, 0x5a, 0x0f, 0xff, 0xb7, 0x27, 0x27, 0x2f, 0x9e, 0xdc, 0x7e, 0x78, 0x72, 0xf2, 0xf0, 0x36, 0xaf, 0x95, 0x0a, 0x6b, 0x61, 0xe6, 0xf6, 0x52, 0xa5, 0xf2, 0xdc, 0x4f, 0xea, 0xf5, 0xe7, 0xeb, 0x03, 0x7a, 0xbd, 0xae, 0xbf, 0x54, 0xf7, 0xb7, 0xd0, 0x7b, 0xe9, 0xca, 0xc0, 0xc0, 0xb9, 0xf7, 0x0e, 0x0e, 0x5e, 0x38, 0x78, 0x3f, 0x75, 0xc0, 0x6a, 0xea, 0xfd, 0x03, 0xb7, 0x0f, 0xbd, 0x94, 0x3a, 0x38, 0x78, 0xfe, 0xe7, 0x87, 0x87, 0x89, 0xc3, 0xfb, 0xb3, 0x87, 0xac, 0xce, 0x96, 0x40, 0xcb, 0xd8, 0xde, 0x3f, 0xbc, 0x0f, 0xbf, 0x3f, 0x2c, 0x95, 0x2e, 0x32, 0x7b, 0xa3, 0xed, 0xd9, 0xf3, 0x5f, 0xd6, 0x1f, 0x01, 0x3f, 0x70, 0x14, 0x8a, 0xba, 0xfd, 0xc4, 0xb9, 0xa7, 0x38, 0x60, 0xfb, 0xc7, 0xf7, 0xc0, 0xfe, 0x07, 0xa2, 0xa2, 0x3f, 0x28, 0xf4, 0x71, 0xd7, 0x71, 0xba, 0x5d, 0x66, 0x6f, 0xb4, 0x7d, 0xfd, 0x09, 0xb4, 0xf8, 0xd4, 0xeb, 0xaf, 0x80, 0x1f, 0x78, 0xf8, 0x26, 0xa5, 0x60, 0x7b, 0x56, 0xcd, 0x3a, 0x75, 0x98, 0x1f, 0x0c, 0xf4, 0xf0, 0x99, 0xbd, 0xd1, 0xf6, 0x4f, 0x9f, 0x3e, 0x3d, 0x3a, 0x3c, 0x3a, 0xc2, 0xfe, 0x22, 0xf8, 0x81, 0x87, 0x7f, 0x44, 0x29, 0xd8, 0x9e, 0x3e, 0x85, 0x7a, 0x74, 0x48, 0x1d, 0xe6, 0x07, 0xa5, 0x1e, 0x3e, 0xb3, 0x35, 0xda, 0xfe, 0x04, 0xdb, 0x8f, 0x59, 0x7f, 0x0d, 0xfc, 0xc0, 0xc3, 0x7f, 0xa4, 0x38, 0x60, 0xfb, 0xc7, 0x8f, 0xc0, 0xfe, 0x27, 0xa2, 0xa2, 0x3f, 0xb8, 0xf8, 0x0a, 0x94, 0x38, 0x1f, 0xc0, 0x79, 0x3f, 0x3c, 0xec, 0x03, 0x41, 0x78, 0xd4, 0x07, 0x02, 0x70, 0x89, 0x0f, 0xb8, 0xf0, 0x38, 0x1f, 0xc0, 0x79, 0x84, 0xc7, 0xf9, 0x00, 0xce, 0x23, 0x3c, 0xce, 0x07, 0x70, 0x1e, 0xe1, 0x71, 0x3e, 0x80, 0xf3, 0xd2, 0xf8, 0x65, 0xa5, 0x6e, 0x9a, 0xce, 0x13, 0x59, 0xfc, 0x02, 0x1c, 0xec, 0x09, 0xf5, 0x09, 0x54, 0x45, 0xb9, 0x32, 0x00, 0x7f, 0x03, 0x0a, 0xe0, 0x5e, 0x11, 0x35, 0x50, 0x60, 0x7f, 0xfc, 0x01, 0x57, 0xc5, 0x25, 0x6e, 0x3d, 0xe7, 0xd6, 0xb7, 0x2b, 0xdd, 0xee, 0xc3, 0x8f, 0xff, 0xd3, 0x7d, 0x78, 0xc2, 0x2b, 0x8e, 0xfd, 0x45, 0x39, 0x2b, 0x9f, 0x6b, 0xe9, 0xc5, 0x2f, 0xb6, 0x4f, 0x9c, 0x68, 0xfc, 0x2a, 0x18, 0xb3, 0x8f, 0x21, 0x76, 0x99, 0x0f, 0x84, 0xe3, 0xd7, 0x35, 0xb3, 0x6b, 0x7b, 0x66, 0x60, 0xf4, 0x07, 0xf4, 0x0b, 0x66, 0x7b, 0xcf, 0xd6, 0xc2, 0xf6, 0xe7, 0xb8, 0x3f, 0x88, 0xfd, 0x7f, 0x50, 0xec, 0x76, 0xed, 0x9d, 0x7f, 0x7b, 0x15, 0xc7, 0xfe, 0x72, 0xfe, 0x8f, 0xaf, 0x9c, 0x19, 0xe9, 0xac, 0x9c, 0x95, 0xb3, 0x12, 0x5f, 0x1c, 0x5f, 0x55, 0x7c, 0xad, 0x28, 0x78, 0x4a, 0x61, 0x8d, 0x2b, 0x08, 0x73, 0x1c, 0x12, 0x68, 0x03, 0x70, 0x98, 0x23, 0x04, 0x5b, 0x18, 0x40, 0xc7, 0x09, 0xd1, 0x07, 0x28, 0x00, 0x59, 0x47, 0x34, 0x24, 0x88, 0xcf, 0xd1, 0x14, 0x0a, 0x3f, 0x84, 0xf2, 0x36, 0x44, 0x40, 0xa1, 0xfd, 0xe4, 0x13, 0xb4, 0xbd, 0x4a, 0xa3, 0x60, 0x3f, 0x3c, 0x42, 0x8b, 0xe0, 0xfe, 0x84, 0xf1, 0x8f, 0x6d, 0x88, 0xbd, 0x1e, 0x0f, 0x8e, 0x22, 0x87, 0xf9, 0xf7, 0x22, 0xf1, 0xfc, 0x52, 0xe7, 0x74, 0x53, 0x51, 0x22, 0x68, 0xc8, 0x14, 0xd0, 0x6b, 0x22, 0x74, 0x1d, 0x98, 0x75, 0x6b, 0x64, 0x1f, 0x47, 0xec, 0xed, 0xb8, 0xfd, 0x20, 0x05, 0x66, 0x2f, 0x4a, 0x04, 0x1d, 0x6e, 0xe3, 0x20, 0x5c, 0x30, 0x85, 0xfa, 0xa1, 0xf1, 0xf4, 0x1d, 0xea, 0xae, 0x55, 0x22, 0xf8, 0x8e, 0x6f, 0x9f, 0xb0, 0x7f, 0xf4, 0xf6, 0x55, 0xa4, 0xfc, 0xfb, 0xf7, 0x17, 0x8d, 0x54, 0x7e, 0x1a, 0x83, 0xdf, 0x9b, 0xe7, 0xc6, 0x89, 0xc0, 0x7d, 0x3a, 0x97, 0xe9, 0x3f, 0x0c, 0x8f, 0xd8, 0xd7, 0x67, 0x1b, 0x99, 0xff, 0xf9, 0x6d, 0x2f, 0xf3, 0x81, 0x00, 0x9e, 0xc4, 0x77, 0xa8, 0x4f, 0x7e, 0x69, 0xfc, 0x0a, 0xbf, 0x25, 0x0e, 0x8f, 0xac, 0x38, 0xf9, 0x59, 0x75, 0x78, 0x1b, 0xb6, 0x3f, 0x87, 0xf5, 0x5a, 0x39, 0x7e, 0x9c, 0x7d, 0x82, 0xfe, 0xe7, 0x38, 0xf1, 0xf6, 0x8f, 0xf3, 0xaf, 0x00, 0x5c, 0x22, 0x3f, 0x9b, 0xa7, 0xc4, 0x67, 0x47, 0xbf, 0xfb, 0x05, 0x65, 0x0b, 0xcb, 0xc7, 0xd6, 0xf7, 0xf5, 0x7f, 0xe2, 0x19, 0xd9, 0x91, 0xf8, 0x37, 0xa3, 0x89, 0xbe, 0x4d, 0x84, 0x8f, 0x87, 0xf5, 0x17, 0xae, 0x61, 0xfa, 0x54, 0xf0, 0xc6, 0xf2, 0x24, 0x89, 0xe4, 0x3f, 0x46, 0x9f, 0x88, 0x35, 0x54, 0xc6, 0x7f, 0xff, 0xf8, 0x0e, 0xe8, 0xdf, 0x89, 0x8f, 0x8f, 0x20, 0x3e, 0xe9, 0x83, 0x1f, 0xd5, 0x9f, 0xe3, 0xe6, 0x3f, 0x47, 0xe6, 0x1f, 0x24, 0xaa, 0x04, 0x99, 0x7d, 0xe2, 0xf8, 0x0f, 0xc3, 0x48, 0xf4, 0xfc, 0x20, 0xa4, 0xa7, 0x43, 0x87, 0xca, 0xed, 0xef, 0x97, 0x33, 0x18, 0xbf, 0x84, 0x57, 0x3f, 0x9f, 0x61, 0xfb, 0xfb, 0x72, 0x4b, 0xd8, 0x7e, 0x8a, 0x13, 0x3a, 0x5f, 0x22, 0xe7, 0x5b, 0x38, 0xf6, 0x89, 0xf4, 0x4c, 0xf0, 0xce, 0x1f, 0x22, 0x49, 0xef, 0x34, 0x7a, 0x2e, 0xc6, 0x9e, 0x11, 0x0e, 0x91, 0xe7, 0x8f, 0x53, 0x70, 0x30, 0x77, 0xf3, 0xfc, 0x2d, 0xf1, 0xdf, 0x90, 0x0f, 0xc8, 0xf0, 0x99, 0x9a, 0x48, 0x74, 0x7f, 0x45, 0xd0, 0x8c, 0xa3, 0xef, 0xf9, 0x20, 0xf5, 0xf9, 0x51, 0x80, 0x01, 0xc2, 0x75, 0x2f, 0x5a, 0x4a, 0xe4, 0xf9, 0x93, 0x88, 0x38, 0x52, 0x42, 0x31, 0xea, 0x48, 0x72, 0x50, 0x44, 0x40, 0x25, 0xde, 0x3f, 0xc3, 0xc9, 0x9f, 0xc8, 0xe8, 0xfb, 0xf3, 0xa3, 0xc4, 0xbe, 0xfe, 0xaa, 0x48, 0xe4, 0x77, 0xcf, 0x46, 0x16, 0xff, 0x44, 0x02, 0xef, 0xc7, 0x7f, 0x28, 0x86, 0x65, 0x67, 0xc8, 0xe9, 0x39, 0x20, 0x64, 0x1f, 0x1a, 0x73, 0x06, 0x48, 0xd4, 0xe3, 0xb7, 0xbf, 0x34, 0xfe, 0xc3, 0xb6, 0x93, 0xc9, 0xdf, 0xef, 0x7e, 0x12, 0x8a, 0x61, 0x99, 0x2f, 0x07, 0x72, 0x00, 0x95, 0xe9, 0x97, 0xe3, 0xba, 0x7e, 0x16, 0xc1, 0x0f, 0xc9, 0x4e, 0xfb, 0xe5, 0x80, 0x98, 0xf8, 0xa7, 0x31, 0xf1, 0xaf, 0x10, 0x49, 0x95, 0xc5, 0xbf, 0x13, 0x13, 0xff, 0x0a, 0xbf, 0x00, 0x53, 0x7a, 0xf6, 0xaa, 0x72, 0x56, 0xce, 0xca, 0x59, 0xf9, 0x6c, 0x0b, 0xf5, 0x55, 0x45, 0xf2, 0x7a, 0xc2, 0x5e, 0x79, 0xfb, 0xdc, 0x1f, 0x88, 0x38, 0xf7, 0xfd, 0x6d, 0x24, 0xff, 0xfb, 0x5b, 0x49, 0x7a, 0x0c, 0xbc, 0xbb, 0x92, 0x98, 0xcf, 0x13, 0xc4, 0xfd, 0x0e, 0x20, 0xe7, 0x3f, 0x9e, 0xc1, 0x90, 0x8c, 0xe4, 0x53, 0xbe, 0xff, 0xbb, 0xdf, 0x1f, 0x94, 0xfe, 0x7a, 0xa0, 0x82, 0xc7, 0x67, 0xe1, 0x45, 0xfa, 0x19, 0x86, 0x3c, 0xa3, 0xc1, 0x88, 0xfc, 0x7c, 0xa1, 0xf2, 0xe3, 0x85, 0xe9, 0x8b, 0xf8, 0xaa, 0x23, 0xe3, 0xdb, 0xa7, 0x1f, 0xd9, 0xf1, 0xe6, 0xa7, 0xdf, 0x0f, 0xae, 0x48, 0xe8, 0x13, 0x9f, 0x6f, 0xc8, 0x18, 0x74, 0x88, 0xef, 0xd8, 0x24, 0xf2, 0xeb, 0x17, 0x51, 0x82, 0x3e, 0x16, 0xd1, 0x5b, 0x1f, 0xf9, 0xc3, 0xbe, 0x29, 0xc3, 0xef, 0xc7, 0x9f, 0xd2, 0x27, 0x36, 0x64, 0xf0, 0x3e, 0x9f, 0x67, 0x62, 0xef, 0xe2, 0x2e, 0x4f, 0x0e, 0x91, 0x9b, 0x9b, 0x2a, 0xf1, 0xdf, 0x77, 0x9c, 0x90, 0xdf, 0xd2, 0x18, 0xfb, 0xbb, 0x7a, 0x96, 0xc5, 0x8f, 0x5f, 0x3f, 0x44, 0x76, 0xbd, 0x21, 0xc1, 0x56, 0x66, 0x1f, 0xef, 0xf3, 0x5a, 0x0c, 0x7e, 0x9c, 0xff, 0xf9, 0xed, 0x2f, 0xf5, 0xaf, 0x10, 0x9c, 0x9c, 0xe2, 0x1f, 0xe1, 0xfd, 0x09, 0x39, 0x45, 0xbe, 0x50, 0x7e, 0x70, 0x48, 0xfc, 0xfd, 0x8d, 0x90, 0xf8, 0xfc, 0xe8, 0xc4, 0xe4, 0xca, 0xf0, 0xd5, 0xcf, 0x21, 0xf2, 0xfc, 0x19, 0xc7, 0x9f, 0x1f, 0x2e, 0xcd, 0xaf, 0x21, 0xfd, 0x52, 0xa5, 0x8f, 0xfd, 0x64, 0xfa, 0x0b, 0xe9, 0x28, 0xce, 0x7e, 0x8e, 0x4f, 0x46, 0x99, 0xfe, 0xe3, 0xe2, 0x3f, 0xac, 0xdf, 0x38, 0xfd, 0x91, 0x53, 0xec, 0x47, 0x48, 0x7f, 0xfc, 0x38, 0xfd, 0xf8, 0x71, 0xc9, 0x29, 0x70, 0x19, 0xfd, 0x70, 0x7e, 0x71, 0x64, 0xdf, 0xff, 0xfc, 0xf2, 0x9d, 0x12, 0xc3, 0xb2, 0xcf, 0xef, 0x01, 0xff, 0x8b, 0xb1, 0xcf, 0x33, 0x7f, 0xce, 0x8f, 0x3b, 0xdf, 0x4e, 0xf9, 0x17, 0x00, 0x8d, 0xc9, 0x8f, 0x24, 0x14, 0xc3, 0x4e, 0xcc, 0x77, 0xe9, 0xb8, 0xf8, 0x77, 0xdf, 0x69, 0xe2, 0xec, 0x1b, 0xc8, 0x51, 0x71, 0xf8, 0x21, 0x3f, 0x52, 0xfa, 0xe4, 0xb8, 0xf0, 0x19, 0x4b, 0x24, 0x39, 0x28, 0x2e, 0x77, 0x4b, 0xe9, 0x93, 0x60, 0x20, 0x13, 0x09, 0x7d, 0xe2, 0xfb, 0x74, 0x24, 0xcb, 0x9f, 0x7d, 0xf3, 0x8b, 0xd2, 0x3f, 0xbe, 0x95, 0x53, 0xf8, 0x0f, 0xc7, 0x30, 0x55, 0xfa, 0xe3, 0x3b, 0xa7, 0xdc, 0x11, 0x68, 0xcc, 0x3b, 0x6a, 0x9f, 0xe3, 0x31, 0x72, 0xc7, 0x8b, 0xbb, 0x17, 0xc5, 0xf9, 0x22, 0x39, 0xc5, 0x3f, 0xfa, 0xe5, 0x37, 0x59, 0x8e, 0x8c, 0xbb, 0xbf, 0xc5, 0xc5, 0x52, 0x58, 0x76, 0x59, 0x0e, 0xf0, 0xbe, 0xff, 0xc5, 0xc4, 0xbf, 0x13, 0x13, 0xff, 0x54, 0xe2, 0x63, 0x52, 0xff, 0x20, 0xf2, 0xf8, 0xf7, 0xf4, 0x7b, 0xf1, 0x8a, 0xa2, 0xbc, 0x90, 0x48, 0xbe, 0x78, 0xe9, 0x8b, 0x97, 0xc9, 0x97, 0xbf, 0xf2, 0xd5, 0xaf, 0xbd, 0xfc, 0xf5, 0x6f, 0xbc, 0xf2, 0xdc, 0xaf, 0xce, 0x2b, 0xab, 0x33, 0xe5, 0xf9, 0xb2, 0x96, 0x7c, 0x37, 0x99, 0x98, 0xaa, 0x2c, 0xaf, 0x2c, 0x2e, 0x6b, 0xc9, 0x04, 0xf4, 0x13, 0x93, 0xcb, 0xcb, 0x8b, 0xb7, 0xb4, 0xec, 0x68, 0x06, 0xfa, 0x33, 0x93, 0x0b, 0x25, 0xd1, 0x9d, 0xbd, 0x51, 0x9e, 0x9c, 0x17, 0xfd, 0xa5, 0xd9, 0x1f, 0x97, 0xe7, 0xd6, 0x96, 0xca, 0xcb, 0x37, 0xcb, 0x53, 0xab, 0x5a, 0xdb, 0xea, 0x18, 0x30, 0xbb, 0x9f, 0x49, 0x02, 0xa5, 0xc5, 0x52, 0x59, 0x15, 0x84, 0x6e, 0x4c, 0xab, 0x58, 0x34, 0x86, 0xb2, 0xb2, 0xba, 0x3c, 0xbb, 0x30, 0x0d, 0x83, 0x31, 0x1c, 0x2d, 0x54, 0xe6, 0x6f, 0x94, 0x97, 0x61, 0x54, 0xc4, 0xd1, 0xeb, 0xe5, 0x37, 0x6f, 0x2d, 0x2e, 0x97, 0xb4, 0x09, 0x1c, 0x4c, 0x2e, 0xcd, 0x72, 0x2c, 0x86, 0x36, 0xb5, 0x38, 0x3f, 0x5f, 0x5e, 0x58, 0xd5, 0xbe, 0xcb, 0x68, 0xcc, 0x4e, 0x2f, 0x30, 0x50, 0x1e, 0x47, 0x6f, 0x4c, 0x2e, 0xf3, 0x85, 0xe3, 0x38, 0x5a, 0x04, 0x69, 0x60, 0xac, 0x31, 0xd0, 0x4a, 0x79, 0x0e, 0x18, 0x53, 0x35, 0x46, 0x9d, 0x0b, 0xa7, 0x72, 0xea, 0x2b, 0x33, 0x93, 0xa5, 0xc5, 0x5b, 0x6a, 0x80, 0xe7, 0xe9, 0xc9, 0xf9, 0xf2, 0xd2, 0x64, 0x49, 0x70, 0xbd, 0xba, 0x58, 0x99, 0x9a, 0x81, 0x3e, 0x1b, 0x24, 0x26, 0xe7, 0x96, 0x66, 0x26, 0xb5, 0xd1, 0xab, 0x8c, 0xec, 0x3e, 0xc7, 0xd8, 0x4f, 0x26, 0xa7, 0x66, 0xca, 0x53, 0xaf, 0xaf, 0x2d, 0x94, 0x6f, 0xad, 0xbd, 0x51, 0x5e, 0x5e, 0x99, 0x5d, 0x5c, 0xd0, 0xea, 0x7a, 0xd3, 0x36, 0x92, 0x0b, 0x8b, 0x6b, 0x2b, 0x8b, 0x15, 0xd0, 0x19, 0x1f, 0x4e, 0xcf, 0xde, 0x5c, 0x9b, 0x2b, 0x2f, 0x4c, 0xaf, 0xce, 0x68, 0x85, 0xbc, 0x9a, 0xcd, 0xaa, 0x8d, 0x96, 0x6a, 0x1b, 0x55, 0xb3, 0x55, 0xb3, 0x19, 0x6c, 0x65, 0x6a, 0x72, 0xae, 0xac, 0x15, 0x92, 0x49, 0x00, 0xd9, 0x9b, 0xe6, 0x8e, 0xba, 0xf2, 0xe6, 0xc2, 0x94, 0xda, 0xd4, 0xd7, 0x8d, 0xa6, 0x8a, 0x73, 0x3b, 0x9b, 0x46, 0x4b, 0x5d, 0x9d, 0x9d, 0x52, 0x6b, 0x96, 0xb9, 0x6d, 0xab, 0x13, 0xf9, 0x99, 0xbb, 0x6a, 0xdd, 0xd2, 0xb7, 0x0c, 0x3b, 0xb9, 0x32, 0xb3, 0x78, 0x6b, 0x0d, 0x97, 0x8b, 0xad, 0x92, 0x53, 0xcb, 0xab, 0x6b, 0xf3, 0x8b, 0x0b, 0xb3, 0xab, 0x60, 0x48, 0x31, 0x55, 0x99, 0x15, 0x3b, 0x14, 0x71, 0x87, 0xd8, 0x92, 0xac, 0x77, 0x5a, 0xd5, 0x76, 0xc3, 0x64, 0x5b, 0xa5, 0xd2, 0xc9, 0x44, 0xb5, 0x69, 0x63, 0xd3, 0x34, 0xab, 0x7a, 0x93, 0x73, 0xa3, 0x0d, 0xae, 0x6e, 0x36, 0x6c, 0x15, 0xfe, 0xec, 0x3d, 0xbb, 0x6d, 0x6c, 0xa9, 0x20, 0x43, 0xbd, 0xb1, 0xd1, 0xb1, 0x74, 0x86, 0x57, 0xd5, 0xad, 0xb6, 0xd5, 0xa8, 0x6d, 0x18, 0x83, 0x2e, 0x96, 0xdd, 0xb8, 0x6b, 0x68, 0xdb, 0x56, 0xa3, 0xd5, 0x4e, 0x31, 0x02, 0x99, 0x7c, 0x26, 0x3b, 0x01, 0x34, 0xfd, 0x53, 0xa9, 0xc2, 0x58, 0x3e, 0x8b, 0x0b, 0xd3, 0x23, 0x23, 0x85, 0x4c, 0x6a, 0xb4, 0x38, 0x01, 0x4b, 0xa0, 0x9b, 0x4e, 0x1a, 0xad, 0x5a, 0xe2, 0xf7, 0x8a, 0xf2, 0x1c, 0x7b, 0x48, 0x02, 0x9f, 0x17, 0xd9, 0xc3, 0xfa, 0xca, 0xb3, 0x3c, 0xe7, 0x99, 0xff, 0x5f, 0xc0, 0xe7, 0x22, 0x3c, 0x5f, 0x80, 0xe7, 0xd2, 0x85, 0x4b, 0x09, 0x25, 0xf8, 0x5c, 0x0a, 0x3d, 0x7e, 0x0a, 0x17, 0x80, 0xc4, 0x7b, 0xca, 0x65, 0xe5, 0xf2, 0xb9, 0xcb, 0xe7, 0x9e, 0x6d, 0xcf, 0xf0, 0x73, 0x31, 0x99, 0x77, 0x3f, 0x03, 0xf2, 0x8f, 0x9b, 0xd8, 0x5e, 0x29, 0xac, 0xde, 0xf9, 0xe5, 0xef, 0xfe, 0xf9, 0xc9, 0xe3, 0x3f, 0xff, 0xe6, 0x67, 0x1b, 0xe5, 0x6f, 0x9e, 0x73, 0xc7, 0x6e, 0x7b, 0x09, 0x70, 0xbe, 0x74, 0xe9, 0xe5, 0xd2, 0xab, 0x63, 0xf9, 0xb1, 0xad, 0x85, 0x1f, 0x2d, 0x7c, 0x30, 0x97, 0x1f, 0x33, 0x5e, 0xfd, 0xeb, 0xcd, 0x99, 0xce, 0x4f, 0xf5, 0x37, 0xf7, 0xff, 0xf2, 0xd1, 0x7e, 0xe6, 0x83, 0x5f, 0xfc, 0x7a, 0xeb, 0x38, 0xf3, 0xd1, 0xf1, 0xe1, 0xd6, 0x1f, 0xfe, 0xf4, 0x8f, 0xbf, 0xbd, 0xfd, 0xaf, 0xee, 0xdf, 0xbf, 0xf5, 0xed, 0xcb, 0x0a, 0xda, 0x1f, 0xbd, 0xbb, 0xbc, 0xac, 0xdd, 0xbe, 0x9d, 0xbc, 0xa3, 0x5b, 0x7b, 0x8d, 0xd6, 0x86, 0x7a, 0xc7, 0xa8, 0x16, 0xd4, 0xb6, 0xb1, 0x3b, 0x65, 0x9a, 0x56, 0xed, 0x7a, 0xb2, 0xd3, 0x6a, 0xd4, 0x4d, 0x6b, 0x4b, 0xb5, 0xf5, 0xad, 0xed, 0xa6, 0x61, 0x15, 0x4a, 0xaa, 0x6d, 0x76, 0xac, 0xaa, 0xd1, 0x83, 0xd4, 0x9b, 0xa6, 0xde, 0x56, 0xdb, 0xd6, 0xc6, 0xda, 0xae, 0x6c, 0x72, 0x4f, 0x36, 0xb9, 0x23, 0x9b, 0xdc, 0x0c, 0x4f, 0xda, 0x55, 0x2b, 0xba, 0x12, 0x27, 0x61, 0x65, 0x72, 0x64, 0x44, 0x2d, 0x6f, 0x75, 0x9a, 0x7a, 0xdb, 0xa8, 0x41, 0x90, 0x6c, 0x77, 0xda, 0xaa, 0x65, 0xd8, 0x66, 0xb3, 0x83, 0xee, 0x95, 0x4b, 0x32, 0x29, 0x60, 0x42, 0xc3, 0x4e, 0xaa, 0x30, 0x3e, 0x91, 0xcb, 0x67, 0x46, 0xc7, 0xc6, 0x72, 0xf9, 0x34, 0x47, 0x9d, 0xd1, 0xad, 0x5a, 0xcb, 0xb0, 0x6d, 0xd5, 0xac, 0x03, 0x45, 0xbd, 0xd5, 0x6c, 0xb4, 0x8c, 0x1c, 0x02, 0xd4, 0xec, 0xd5, 0x5c, 0x5e, 0xd5, 0x40, 0xca, 0x7a, 0x1b, 0xc7, 0xd9, 0xd1, 0x09, 0x36, 0xde, 0x32, 0x6a, 0x8d, 0xce, 0x56, 0x92, 0xf3, 0xb0, 0x09, 0xd8, 0x2b, 0x80, 0xa5, 0xe1, 0xe2, 0x28, 0xc1, 0xed, 0xc6, 0xae, 0xd1, 0xb4, 0x59, 0xe8, 0xfa, 0x49, 0x67, 0x0b, 0x41, 0xca, 0x63, 0x6c, 0x88, 0xb4, 0x7c, 0x64, 0x97, 0x1a, 0xbb, 0x5a, 0xb6, 0xe8, 0x52, 0x2d, 0x35, 0xec, 0xed, 0xa6, 0xbe, 0xa7, 0xee, 0xe8, 0xd6, 0x36, 0xa3, 0x91, 0x67, 0x38, 0x2d, 0xb3, 0x65, 0xe0, 0x68, 0x34, 0x97, 0x1f, 0xe1, 0xec, 0x1a, 0xbb, 0x6d, 0xcb, 0xd8, 0x32, 0xb8, 0xdc, 0xb8, 0x9a, 0x0b, 0x8e, 0x0b, 0x26, 0xc6, 0x50, 0x76, 0xe8, 0x8c, 0x5d, 0x45, 0xf1, 0x55, 0x46, 0x78, 0x72, 0xcb, 0xec, 0xb4, 0xda, 0x4c, 0xfa, 0x4d, 0xbd, 0x06, 0x79, 0x64, 0x4b, 0xb7, 0xdf, 0xc9, 0x09, 0x3e, 0xb0, 0x5f, 0xd2, 0xad, 0x77, 0xb4, 0x7c, 0x6e, 0xfc, 0xba, 0x6f, 0x6e, 0xae, 0xb1, 0xb1, 0xd9, 0xd6, 0x46, 0x71, 0x12, 0x68, 0x64, 0x3f, 0xa3, 0xc2, 0xf8, 0xb1, 0x97, 0xa7, 0x6f, 0xa8, 0x6d, 0x53, 0x9d, 0x03, 0x65, 0xe9, 0x16, 0x13, 0x75, 0xd2, 0xb6, 0x3b, 0xe8, 0x90, 0x1d, 0x1b, 0x7f, 0xf9, 0x82, 0xbd, 0x6d, 0xb0, 0x36, 0x38, 0x67, 0xbb, 0x03, 0xb6, 0x55, 0xdb, 0x98, 0x61, 0x20, 0x0b, 0x76, 0x9a, 0x35, 0x50, 0x49, 0x5b, 0x5d, 0x37, 0xd4, 0x96, 0x61, 0xd4, 0x8c, 0x9a, 0x2b, 0xc8, 0xaa, 0xc9, 0xe9, 0x8d, 0xa6, 0xf8, 0xb8, 0x9a, 0x7e, 0xd7, 0x32, 0x00, 0xb7, 0x95, 0xaa, 0x7e, 0x1f, 0x84, 0xcb, 0x43, 0xc0, 0x8c, 0xa7, 0x5f, 0xab, 0x8e, 0x8c, 0x16, 0x72, 0xdf, 0x2b, 0x5c, 0xdb, 0x36, 0x77, 0x52, 0xa9, 0xea, 0x30, 0xcc, 0x8f, 0x8f, 0xa7, 0x47, 0x46, 0xb1, 0xc9, 0x14, 0x72, 0x63, 0xe9, 0xeb, 0xfb, 0xa8, 0xd6, 0xa2, 0x47, 0x2d, 0xc5, 0x46, 0x1e, 0x2d, 0x8c, 0x98, 0x62, 0xaa, 0xb7, 0x55, 0x35, 0x67, 0xa5, 0x33, 0xfe, 0xe1, 0x46, 0x70, 0xb8, 0x9e, 0x46, 0x8a, 0x28, 0x21, 0x9f, 0x43, 0xb1, 0x51, 0xba, 0xcf, 0x4e, 0xe8, 0x15, 0x6b, 0x63, 0x5d, 0x26, 0x32, 0x48, 0x96, 0x2f, 0x8e, 0x16, 0xf3, 0x57, 0x5f, 0xab, 0x0e, 0x71, 0x91, 0x99, 0x90, 0x43, 0x28, 0x78, 0x35, 0x93, 0xcf, 0x8d, 0x8d, 0x4e, 0x4c, 0x4c, 0xa4, 0xb3, 0x5c, 0x01, 0x3d, 0xa9, 0x91, 0x5c, 0x8c, 0xcc, 0x7c, 0x27, 0x21, 0xb1, 0x3b, 0xd8, 0xf0, 0x0f, 0x7a, 0xd2, 0x2e, 0x80, 0xac, 0x86, 0xdd, 0x56, 0x0d, 0x37, 0x6a, 0x79, 0x4a, 0x51, 0x37, 0x1a, 0x77, 0xe0, 0xcc, 0x62, 0xdc, 0xa2, 0xcc, 0xdb, 0x26, 0xe4, 0x7b, 0xf8, 0xb5, 0x1b, 0xec, 0xa0, 0xd0, 0x5b, 0x4c, 0x76, 0x38, 0xde, 0xcc, 0x7a, 0xdd, 0x36, 0xda, 0x5c, 0x4b, 0x4d, 0xdb, 0x54, 0xef, 0x1a, 0x96, 0xf9, 0x1d, 0x8c, 0x37, 0x8c, 0x60, 0xcb, 0x30, 0x78, 0xd4, 0x17, 0xd5, 0x9b, 0x46, 0xbb, 0xba, 0x99, 0x62, 0x81, 0x00, 0x54, 0x32, 0xac, 0x03, 0x8b, 0xd2, 0x70, 0x3a, 0xc3, 0x58, 0x43, 0xbd, 0x98, 0x56, 0x0a, 0xba, 0x43, 0xc0, 0xce, 0x30, 0x42, 0x86, 0x59, 0xac, 0x80, 0xb3, 0x83, 0x0e, 0xc6, 0xd3, 0xe9, 0x11, 0x98, 0xbf, 0x9e, 0x4c, 0x08, 0x49, 0x3d, 0xab, 0x8f, 0xe6, 0x0a, 0xea, 0x90, 0x6b, 0x87, 0x42, 0x29, 0xc5, 0xf3, 0x60, 0x06, 0x08, 0xe5, 0x76, 0xf7, 0x32, 0x2c, 0x4f, 0xa4, 0x73, 0x20, 0xb5, 0x2b, 0x2f, 0xc4, 0x6e, 0x5b, 0x6f, 0x55, 0x0d, 0xcc, 0x03, 0x9e, 0xcc, 0x22, 0x35, 0x80, 0xc9, 0x5b, 0x42, 0x1d, 0x4c, 0x38, 0x91, 0xb0, 0x10, 0xc5, 0xe3, 0x3c, 0xfd, 0x2e, 0xb2, 0x2b, 0xf8, 0xbc, 0x2e, 0xb8, 0xc9, 0xa6, 0x90, 0xf3, 0xac, 0x27, 0x43, 0x3a, 0x9d, 0x75, 0x99, 0x67, 0x8a, 0x4e, 0x24, 0x58, 0x5e, 0x28, 0xa9, 0xd3, 0x7a, 0xc7, 0xb6, 0x1b, 0x7a, 0xcb, 0xf5, 0x0a, 0x1c, 0x0b, 0x97, 0x40, 0xad, 0xb8, 0xb9, 0x54, 0x6f, 0x1a, 0x9e, 0x4d, 0x8d, 0xdd, 0xed, 0x42, 0x8a, 0x4d, 0x0d, 0xe1, 0xae, 0x48, 0x5d, 0x88, 0x52, 0xcc, 0xb6, 0xf5, 0x6d, 0x8f, 0xa4, 0x5a, 0x6f, 0x34, 0xdb, 0x86, 0xa5, 0xea, 0x4d, 0x13, 0xec, 0xb5, 0x69, 0x5a, 0x77, 0x55, 0x9e, 0xe3, 0x98, 0xfa, 0x67, 0x60, 0x5c, 0xec, 0xa9, 0x9f, 0x6f, 0x24, 0xf4, 0xcf, 0x16, 0xac, 0x6b, 0xdc, 0x42, 0xae, 0x71, 0x52, 0x59, 0xf0, 0xc2, 0x0c, 0xae, 0x80, 0xdc, 0xcc, 0x97, 0x54, 0xc3, 0x4b, 0x30, 0xef, 0x05, 0x97, 0xd4, 0x22, 0x4b, 0xfc, 0x54, 0xf8, 0xae, 0x35, 0xbb, 0xad, 0x31, 0x95, 0xa2, 0x28, 0x39, 0x38, 0x9d, 0x12, 0x20, 0xcb, 0x94, 0xd9, 0xba, 0x63, 0x58, 0x00, 0x74, 0xcd, 0x03, 0xb6, 0xd8, 0x31, 0x30, 0xb3, 0xe5, 0x5c, 0x3c, 0xa6, 0x03, 0x4d, 0x64, 0x63, 0x8f, 0xda, 0xce, 0xba, 0xc6, 0x94, 0x08, 0x54, 0x19, 0xc7, 0x5c, 0x79, 0x3d, 0x70, 0xd5, 0x03, 0x63, 0x0a, 0x89, 0x80, 0x6b, 0x3d, 0x70, 0x00, 0x1b, 0x58, 0x5a, 0xe6, 0xfa, 0xe7, 0x6a, 0xf5, 0x02, 0x23, 0xe7, 0xb9, 0x60, 0x6a, 0x7d, 0x68, 0x67, 0x7d, 0xb8, 0x3a, 0xb4, 0x53, 0x1d, 0xae, 0x0d, 0xed, 0xd4, 0xd2, 0x23, 0x29, 0x18, 0xc2, 0x00, 0xba, 0xc2, 0x40, 0xe3, 0x9f, 0xd2, 0x40, 0xe3, 0xfd, 0x0c, 0xa4, 0x47, 0x0c, 0x54, 0x08, 0x6b, 0xff, 0xff, 0x61, 0x43, 0xb6, 0xc4, 0x88, 0x2c, 0x29, 0x7c, 0xde, 0x66, 0xd6, 0x7b, 0x66, 0x2e, 0x48, 0xec, 0xf8, 0xf9, 0x78, 0x81, 0x00, 0x1b, 0x3d, 0x70, 0xe1, 0xd3, 0x3a, 0x89, 0x3e, 0xb4, 0xa3, 0x0f, 0x07, 0x3d, 0x65, 0xd8, 0x18, 0xda, 0x31, 0xd0, 0x5d, 0xf4, 0x61, 0xd7, 0x63, 0x86, 0x61, 0x42, 0x38, 0x8d, 0xa0, 0xe8, 0xde, 0x51, 0x3c, 0xf5, 0x70, 0x5e, 0xf0, 0x7e, 0x13, 0xe3, 0x25, 0x32, 0xb5, 0xef, 0xf5, 0x32, 0xa6, 0x27, 0x02, 0x2c, 0xcf, 0xb8, 0x57, 0x25, 0x77, 0xd3, 0xc9, 0x66, 0x13, 0x6e, 0x1b, 0x5e, 0xf2, 0xdb, 0x84, 0xc4, 0xcd, 0x9c, 0x93, 0xe5, 0x44, 0xa3, 0x5e, 0x37, 0xaa, 0x6d, 0x9e, 0x24, 0x85, 0xb7, 0xae, 0x5a, 0x0d, 0x5f, 0x46, 0xf4, 0x3c, 0x94, 0x67, 0x19, 0xe4, 0x0c, 0xad, 0xe0, 0xf3, 0x4b, 0xee, 0xdd, 0x08, 0x40, 0x7f, 0xf3, 0x79, 0x63, 0x0f, 0x43, 0x15, 0x18, 0x9e, 0xbd, 0x99, 0xa8, 0x7e, 0x5a, 0x9e, 0xa9, 0x3d, 0x88, 0x4b, 0xcc, 0xb3, 0x72, 0x0f, 0x22, 0x70, 0x84, 0xf0, 0x41, 0x2b, 0xf8, 0x8e, 0x02, 0xd3, 0x62, 0xe7, 0x99, 0xef, 0xbe, 0x09, 0xb8, 0x78, 0xba, 0xc1, 0xab, 0x0b, 0x9f, 0xc5, 0x33, 0x0c, 0x62, 0x76, 0x7b, 0x53, 0x17, 0xc7, 0xc1, 0x2d, 0xb8, 0xc7, 0x05, 0x84, 0x77, 0x0f, 0x04, 0xf0, 0x0d, 0x64, 0xf5, 0x3a, 0xbe, 0xcd, 0xb2, 0xd9, 0x21, 0xef, 0xba, 0x37, 0x8c, 0x4c, 0xe5, 0xf6, 0x86, 0xd8, 0x6f, 0x7a, 0x88, 0x5d, 0x1c, 0x77, 0x33, 0x1e, 0x60, 0x97, 0x01, 0x76, 0x05, 0x60, 0xcf, 0xc7, 0x38, 0x52, 0x81, 0x53, 0x64, 0x18, 0xef, 0x7c, 0x9c, 0xeb, 0x15, 0xff, 0xcd, 0x90, 0x69, 0x71, 0x1e, 0xba, 0x61, 0x86, 0x72, 0xbb, 0xc3, 0x1a, 0xdf, 0x92, 0xdd, 0x5a, 0xb9, 0xba, 0x11, 0x47, 0x63, 0x77, 0x04, 0xf7, 0x2e, 0x99, 0x89, 0x74, 0x70, 0x6f, 0x86, 0xaf, 0xc1, 0x0b, 0x6a, 0xb5, 0xcd, 0xd9, 0x1b, 0x99, 0xe0, 0xda, 0x6c, 0xd4, 0xf9, 0x18, 0xee, 0x2c, 0xc5, 0x62, 0x31, 0xcd, 0x78, 0xb0, 0x34, 0xef, 0x12, 0x0a, 0x2b, 0xe0, 0x18, 0x85, 0xa3, 0xb5, 0xb7, 0x0c, 0xaf, 0x2e, 0x6c, 0xd9, 0x46, 0x74, 0x19, 0x9b, 0x5f, 0x0f, 0xcc, 0x0b, 0xa9, 0x71, 0xea, 0xfa, 0x3e, 0xd3, 0x63, 0xf2, 0x8e, 0xd9, 0xa8, 0xc1, 0x44, 0xa3, 0x95, 0x4a, 0xab, 0x20, 0x5b, 0xef, 0x92, 0x0f, 0x77, 0xa5, 0x3c, 0x0b, 0x42, 0xef, 0x62, 0xec, 0xa7, 0xc4, 0xf4, 0x01, 0x49, 0xc6, 0x6a, 0x6b, 0x1b, 0xcd, 0xb5, 0x9b, 0x96, 0xbe, 0xc1, 0x5e, 0x9d, 0xe0, 0x52, 0xc0, 0x8f, 0x66, 0xf6, 0x66, 0x94, 0xe1, 0xef, 0x42, 0x28, 0x1a, 0x5b, 0x9a, 0xdb, 0xd3, 0xd8, 0x8b, 0x4c, 0x56, 0x8c, 0xe0, 0x46, 0x9d, 0x70, 0x15, 0xab, 0x31, 0xbb, 0x33, 0xc0, 0x88, 0x47, 0x61, 0x87, 0x53, 0xd8, 0xc4, 0xbc, 0x97, 0x4c, 0x78, 0x1b, 0x35, 0x4d, 0x0b, 0xef, 0x1c, 0x1a, 0x86, 0x09, 0xda, 0x64, 0x88, 0x99, 0x28, 0xc4, 0x07, 0xee, 0xea, 0xc7, 0x80, 0xf7, 0x05, 0xa0, 0x3b, 0x26, 0xee, 0x6f, 0xa9, 0x30, 0xb1, 0xb4, 0xeb, 0xd3, 0xfb, 0xc9, 0xb7, 0xde, 0x4a, 0xfe, 0x0f, 0x31, 0x38, 0x1c, 0x1b, \ No newline at end of file +0x78, 0xda, 0xed, 0x18, 0x4b, 0x6c, 0x1b, 0xc7, 0x75, 0xfd, 0x49, 0x1a, 0x32, 0xae, 0xc7, 0x02, 0x8a, 0xa0, 0x9f, 0xb4, 0x59, 0xa8, 0x69, 0x4b, 0x4a, 0x24, 0x45, 0x91, 0x92, 0xea, 0xda, 0xdd, 0xa6, 0xb2, 0x48, 0x4b, 0x6a, 0xf4, 0x83, 0x24, 0xc6, 0x0d, 0x8c, 0x44, 0x5d, 0x91, 0x4b, 0x89, 0x08, 0xc5, 0x55, 0x77, 0x49, 0x4b, 0x72, 0x20, 0x20, 0x08, 0x10, 0x40, 0x3d, 0xb9, 0x07, 0x17, 0xa8, 0x0e, 0x85, 0x52, 0xf8, 0xa6, 0x5e, 0x7a, 0xf1, 0xa5, 0x3a, 0x18, 0xed, 0xad, 0x05, 0x5a, 0x14, 0x41, 0xd1, 0x43, 0x51, 0xf4, 0x52, 0xf4, 0x4a, 0xef, 0xc9, 0xa8, 0x11, 0x20, 0xd3, 0xf7, 0x66, 0x76, 0x97, 0xb3, 0xbb, 0xb3, 0x94, 0x03, 0x24, 0x3d, 0x69, 0x96, 0xc3, 0xf9, 0xbc, 0x79, 0x6f, 0xde, 0x7f, 0x66, 0xf7, 0xdc, 0x87, 0xcf, 0x2b, 0x9f, 0x50, 0x28, 0x83, 0x83, 0x83, 0xf7, 0x0e, 0x0e, 0x0e, 0xee, 0x61, 0x0b, 0xc3, 0x7b, 0xd4, 0xf1, 0x2b, 0xa5, 0x8f, 0xbb, 0x83, 0x83, 0xb4, 0x7b, 0x70, 0xe0, 0x74, 0x07, 0xdf, 0x77, 0xba, 0xf4, 0x9e, 0x43, 0x9d, 0x7b, 0x8e, 0xe3, 0x55, 0x86, 0x3f, 0x30, 0x30, 0x60, 0xd6, 0xeb, 0x75, 0x13, 0x5b, 0x18, 0x9a, 0x80, 0xe7, 0x55, 0xc4, 0x1f, 0x18, 0xa0, 0xdd, 0x7a, 0xdd, 0xe9, 0x0e, 0xe8, 0x80, 0x6f, 0x3a, 0x5d, 0x87, 0xd7, 0xc7, 0x8e, 0xa9, 0x50, 0x86, 0x5f, 0x2a, 0x95, 0x8e, 0x0e, 0x0f, 0x0f, 0x8f, 0xb0, 0x85, 0xe1, 0x11, 0x81, 0x0a, 0xb8, 0x47, 0x2e, 0x7e, 0xa9, 0x44, 0xbb, 0x87, 0x87, 0x4e, 0xb7, 0x74, 0x1f, 0xf0, 0x8f, 0x9c, 0x2e, 0x81, 0xea, 0x1c, 0x01, 0xfe, 0x91, 0x8b, 0x5f, 0xa9, 0x54, 0x1e, 0x9d, 0x9c, 0x9c, 0x3c, 0xc2, 0x16, 0x86, 0xac, 0x12, 0x85, 0x60, 0x8b, 0xf8, 0x95, 0x0a, 0xed, 0x9e, 0x9c, 0x38, 0xdd, 0xca, 0x43, 0xc0, 0x7f, 0x04, 0x34, 0x1f, 0x39, 0x8e, 0x02, 0x15, 0xdb, 0x0f, 0x8f, 0x8f, 0x93, 0xc7, 0x58, 0xae, 0x3d, 0x38, 0x3e, 0x2e, 0x16, 0x8f, 0xaf, 0x15, 0x8b, 0x0f, 0x70, 0x08, 0x7f, 0xd7, 0xf2, 0xc5, 0xe2, 0x05, 0x0f, 0xce, 0xe6, 0x01, 0xce, 0xd6, 0x45, 0xe0, 0x0f, 0x5c, 0x7c, 0xb7, 0x85, 0x71, 0x00, 0x7e, 0xcd, 0xa5, 0x7f, 0xcd, 0xc5, 0xbf, 0xd6, 0xc3, 0xff, 0xed, 0xc9, 0xc9, 0x8b, 0x27, 0xb7, 0x1f, 0x9e, 0x9c, 0x3c, 0xbc, 0xcd, 0x6b, 0xa5, 0xc2, 0x5a, 0x98, 0xb9, 0xbd, 0x54, 0xa9, 0x3c, 0xf7, 0x93, 0x7a, 0xfd, 0xf9, 0xfa, 0x80, 0x5e, 0xaf, 0xeb, 0x2f, 0xd5, 0xc5, 0x16, 0x7a, 0x2f, 0x5d, 0x19, 0x18, 0x38, 0xf7, 0xde, 0xc1, 0xc1, 0x0b, 0x07, 0xef, 0xa7, 0x0e, 0x58, 0x4d, 0xbd, 0x7f, 0xe0, 0xf5, 0xa1, 0x97, 0x52, 0x07, 0x07, 0xcf, 0xff, 0xfc, 0xf0, 0x30, 0x71, 0x78, 0x7f, 0xf6, 0x90, 0xd5, 0xd9, 0x12, 0x68, 0x19, 0xdb, 0xfb, 0x87, 0xf7, 0xe1, 0xff, 0x87, 0xa5, 0xd2, 0x45, 0x66, 0x6f, 0xb4, 0x3d, 0x7b, 0xfe, 0xcb, 0xfa, 0x23, 0xe0, 0x07, 0x54, 0x71, 0x50, 0xb7, 0x9f, 0xd0, 0x7b, 0x0a, 0x05, 0xdb, 0x3f, 0xbe, 0x07, 0xf6, 0x3f, 0x70, 0x2b, 0xfa, 0x83, 0xe2, 0x3c, 0xee, 0x52, 0xda, 0xed, 0x32, 0x7b, 0xa3, 0xed, 0xeb, 0x4f, 0xa0, 0xc5, 0xa7, 0x5e, 0x7f, 0x05, 0xfc, 0xc0, 0xc7, 0x37, 0x1d, 0x07, 0x6c, 0xcf, 0xaa, 0x59, 0x77, 0x28, 0xf3, 0x83, 0x81, 0x1e, 0x3e, 0xb3, 0x37, 0xda, 0xfe, 0xe9, 0xd3, 0xa7, 0x47, 0x87, 0x47, 0x47, 0xd8, 0x5f, 0x04, 0x3f, 0xf0, 0xf1, 0x8f, 0x1c, 0x07, 0x6c, 0xef, 0x3c, 0x85, 0x7a, 0x74, 0xe8, 0x50, 0xe6, 0x07, 0xa5, 0x1e, 0x3e, 0xb3, 0x35, 0xda, 0xfe, 0x04, 0xdb, 0x8f, 0x59, 0x7f, 0x0d, 0xfc, 0xc0, 0xc7, 0x7f, 0xa4, 0x50, 0xb0, 0xfd, 0xe3, 0x47, 0x60, 0xff, 0x13, 0xb7, 0xa2, 0x3f, 0x78, 0xf8, 0x0a, 0x94, 0x38, 0x1f, 0xc0, 0x79, 0x11, 0x1e, 0xf6, 0x81, 0x20, 0x3c, 0xea, 0x03, 0x01, 0xb8, 0xc4, 0x07, 0x3c, 0x78, 0x9c, 0x0f, 0xe0, 0x3c, 0xc2, 0xe3, 0x7c, 0x00, 0xe7, 0x11, 0x1e, 0xe7, 0x03, 0x38, 0x8f, 0xf0, 0x38, 0x1f, 0xc0, 0x79, 0x69, 0xfc, 0xb2, 0x52, 0x37, 0x4d, 0xfa, 0x44, 0x16, 0xbf, 0x00, 0x07, 0x7b, 0x42, 0x7d, 0x02, 0x55, 0x51, 0xae, 0x0c, 0xc0, 0x6f, 0x40, 0x01, 0xdc, 0x2b, 0x6e, 0x0d, 0x14, 0xd8, 0x1f, 0xff, 0xc0, 0x55, 0x71, 0x89, 0x57, 0xcf, 0x79, 0xf5, 0xed, 0x4a, 0xb7, 0xfb, 0xf0, 0xe3, 0xff, 0x74, 0x1f, 0x9e, 0xf0, 0x8a, 0x63, 0xb1, 0x28, 0x67, 0xe5, 0x73, 0x2d, 0xbd, 0xf8, 0xc5, 0xf6, 0x09, 0x8d, 0xc6, 0xaf, 0x82, 0x31, 0xfb, 0x18, 0x62, 0x97, 0xf9, 0x40, 0x38, 0x7e, 0x3d, 0x33, 0x7b, 0xb6, 0x67, 0x06, 0x46, 0x7f, 0x40, 0xbf, 0x60, 0xb6, 0xf7, 0x6d, 0xed, 0xda, 0xfe, 0x1c, 0xf7, 0x07, 0x77, 0xff, 0x1f, 0x14, 0xbb, 0x5d, 0x7b, 0xe7, 0xdf, 0x7e, 0xc5, 0xb1, 0x58, 0xce, 0xff, 0xf1, 0x95, 0x33, 0x23, 0x9d, 0x95, 0xb3, 0x72, 0x56, 0xe2, 0x0b, 0x15, 0xaa, 0x22, 0xb4, 0x6e, 0xc1, 0x53, 0x0a, 0x6b, 0x5c, 0x41, 0x18, 0xa5, 0x24, 0xd0, 0x06, 0xe0, 0x30, 0x47, 0x08, 0xb6, 0x30, 0x80, 0x0e, 0x0d, 0xd1, 0x07, 0x28, 0x00, 0x59, 0xc7, 0x6d, 0x48, 0x10, 0x9f, 0xa3, 0x29, 0x0e, 0xfc, 0x11, 0x87, 0xb7, 0x21, 0x02, 0x8a, 0xd3, 0x4f, 0x3e, 0x97, 0xb6, 0x5f, 0x9d, 0x28, 0x58, 0x84, 0x47, 0x68, 0x11, 0xdc, 0x9f, 0x30, 0xfe, 0xb1, 0x0d, 0xb1, 0xd7, 0xe3, 0x81, 0x2a, 0x72, 0x98, 0xb8, 0x17, 0x89, 0xe7, 0xd7, 0xa1, 0xa7, 0x9b, 0xca, 0x21, 0x2e, 0x0d, 0x99, 0x02, 0x7a, 0x4d, 0x84, 0x2e, 0x05, 0x24, 0x8a, 0xba, 0x57, 0x48, 0x74, 0x1f, 0xea, 0xee, 0x4d, 0xbd, 0x7e, 0x90, 0x02, 0xb3, 0x97, 0xc3, 0xf1, 0xd8, 0x92, 0x08, 0xdc, 0x65, 0x0a, 0xf5, 0xe3, 0xc4, 0xd3, 0xa7, 0x8e, 0xb7, 0x56, 0x89, 0xe0, 0x53, 0x61, 0x9f, 0xb0, 0x7f, 0xf4, 0xf6, 0x55, 0xa4, 0xfc, 0x8b, 0xfb, 0xbb, 0x8d, 0x04, 0x9f, 0x04, 0x5a, 0x39, 0x9c, 0x1b, 0x27, 0x02, 0x17, 0x74, 0x2e, 0xd3, 0x7f, 0x18, 0x1e, 0xb1, 0xaf, 0x60, 0x1b, 0x99, 0xff, 0x89, 0xb6, 0x97, 0xf9, 0x40, 0x00, 0x4f, 0xe2, 0x3b, 0x8e, 0x20, 0xbf, 0x34, 0x7e, 0x5d, 0xbf, 0x25, 0x94, 0x47, 0x56, 0x9c, 0xfc, 0xac, 0x52, 0xde, 0x86, 0xed, 0xcf, 0x61, 0xbd, 0x56, 0x8e, 0x1f, 0x67, 0x1f, 0x81, 0xbe, 0x04, 0x5f, 0xb4, 0x7f, 0x9c, 0x7f, 0x05, 0xe0, 0x12, 0xf9, 0xd9, 0xbc, 0x43, 0x04, 0x3b, 0x8a, 0xee, 0x17, 0x94, 0x2d, 0x2c, 0x1f, 0x5b, 0xdf, 0xd7, 0xff, 0x89, 0x6f, 0x64, 0x2a, 0xf1, 0x6f, 0x46, 0x13, 0x7d, 0x9b, 0xb8, 0x3e, 0x1e, 0xd6, 0x5f, 0xb8, 0x86, 0xe9, 0x3b, 0x2e, 0x6f, 0x2c, 0x4f, 0x92, 0x48, 0xfe, 0x63, 0xf4, 0x89, 0xbb, 0xc6, 0x91, 0xf1, 0x1f, 0xd4, 0x6f, 0x5f, 0xfd, 0xd3, 0xf8, 0xf8, 0x08, 0xe2, 0x93, 0x3e, 0xf8, 0x51, 0xfd, 0x51, 0x2f, 0xff, 0x51, 0x99, 0x7f, 0x90, 0xa8, 0x12, 0x64, 0xf6, 0x89, 0xe3, 0x3f, 0x0c, 0x23, 0xd1, 0xf3, 0x83, 0x90, 0x9e, 0x0e, 0xa9, 0x23, 0xb7, 0xbf, 0x28, 0x67, 0x30, 0x7e, 0x09, 0xaf, 0x22, 0x9f, 0x61, 0xfb, 0x0b, 0xb9, 0x25, 0x6c, 0x3f, 0x85, 0x86, 0xce, 0x97, 0xc8, 0xf9, 0x16, 0x8e, 0x7d, 0x22, 0x3d, 0x13, 0xfc, 0xf3, 0x87, 0x48, 0xd2, 0xbb, 0x13, 0x3d, 0x17, 0x63, 0xcf, 0x08, 0x4a, 0xe4, 0xf9, 0xe3, 0x14, 0x1c, 0xcc, 0xdd, 0x3c, 0x7f, 0x4b, 0xfc, 0x37, 0xe4, 0x03, 0x32, 0x7c, 0xa6, 0x26, 0x12, 0xdd, 0x5f, 0x71, 0x69, 0xc6, 0xd1, 0x0f, 0x9e, 0x51, 0x92, 0x1c, 0x88, 0x77, 0x0a, 0xe2, 0xde, 0x2d, 0xa4, 0xe7, 0x9f, 0x9b, 0xe3, 0xdc, 0x38, 0x52, 0x42, 0x31, 0x4a, 0x25, 0x39, 0x28, 0x22, 0xa0, 0x12, 0xef, 0x9f, 0xe1, 0xe4, 0x4f, 0x64, 0xf4, 0xc5, 0xfc, 0x28, 0xb1, 0xaf, 0x58, 0x15, 0x89, 0xfc, 0xde, 0xd9, 0xc8, 0xe2, 0x9f, 0x48, 0xe0, 0xfd, 0xf8, 0x0f, 0xc5, 0xb0, 0xec, 0x0c, 0x39, 0x3d, 0x07, 0x84, 0xec, 0xe3, 0xc4, 0x9c, 0x01, 0x12, 0xf5, 0x88, 0xf6, 0x97, 0xc6, 0x7f, 0xd8, 0x76, 0x32, 0xf9, 0xfb, 0xc4, 0x7f, 0x38, 0x86, 0x65, 0xbe, 0x1c, 0xc8, 0x01, 0x8e, 0x4c, 0xbf, 0x1c, 0xd7, 0xf3, 0xb3, 0x08, 0x7e, 0x48, 0x76, 0xa7, 0x5f, 0x0e, 0x88, 0x89, 0x7f, 0x27, 0x26, 0xfe, 0x15, 0x22, 0xa9, 0xb2, 0xf8, 0xa7, 0x31, 0xf1, 0xaf, 0xf0, 0x0b, 0xb0, 0xe3, 0x9c, 0xbd, 0xaa, 0x9c, 0x95, 0xb3, 0x72, 0x56, 0x3e, 0xdb, 0xe2, 0x08, 0x55, 0x91, 0xbc, 0x9e, 0xb0, 0x57, 0xde, 0x3e, 0xf7, 0x07, 0xe2, 0x9e, 0xfb, 0x62, 0x1b, 0xc9, 0xff, 0x62, 0x2b, 0x49, 0x8f, 0x81, 0x77, 0x57, 0x12, 0xf3, 0x79, 0x82, 0x78, 0xdf, 0x01, 0xe4, 0xfc, 0xc7, 0x33, 0x18, 0x92, 0x91, 0xc8, 0xef, 0x67, 0x8e, 0x22, 0x7f, 0x7f, 0xf6, 0x64, 0xf4, 0xbe, 0x43, 0xc4, 0xe9, 0x90, 0x9e, 0xf6, 0x1d, 0x22, 0xf4, 0x39, 0x42, 0x89, 0x5e, 0x73, 0x9e, 0xd9, 0x5e, 0x4a, 0xfc, 0x27, 0x00, 0xe9, 0x37, 0x03, 0x22, 0x54, 0x2a, 0xe3, 0x5d, 0x90, 0x5f, 0x76, 0xbc, 0x89, 0xf4, 0xfb, 0xc1, 0x15, 0x09, 0x7d, 0x22, 0xf8, 0x86, 0xec, 0xfc, 0xa3, 0x44, 0x38, 0x36, 0x89, 0xfc, 0xfa, 0x45, 0x94, 0xa0, 0x8f, 0x45, 0xf4, 0x46, 0x82, 0x9f, 0x79, 0x22, 0xf4, 0x49, 0x7f, 0xfc, 0x7e, 0xfc, 0x29, 0x7d, 0x62, 0x43, 0x06, 0xef, 0xf3, 0x79, 0x26, 0xf6, 0x2e, 0xee, 0xf1, 0x44, 0xa5, 0x77, 0x9b, 0x1e, 0x9e, 0x13, 0x23, 0x9f, 0xf8, 0x5d, 0xc0, 0x89, 0xb1, 0xbf, 0xa7, 0x67, 0x59, 0xfc, 0x88, 0xfa, 0x21, 0xb2, 0xeb, 0x0d, 0x09, 0xb6, 0x32, 0xfb, 0xf8, 0x9f, 0xd7, 0x62, 0xf0, 0xe3, 0xfc, 0x4f, 0xb4, 0xbf, 0xd4, 0xbf, 0x42, 0x70, 0x72, 0x8a, 0x7f, 0x84, 0xf7, 0x27, 0xe4, 0x14, 0xf9, 0x42, 0xf9, 0x81, 0x92, 0xf8, 0xfb, 0x1b, 0x21, 0xf1, 0xf9, 0x91, 0xc6, 0xe4, 0xca, 0xf0, 0xd5, 0x4f, 0x26, 0x1f, 0x0d, 0xc5, 0x68, 0x3f, 0xfd, 0x91, 0x18, 0xfb, 0x91, 0x18, 0xfe, 0x02, 0xf6, 0x93, 0xe9, 0x2f, 0xa4, 0xa3, 0x38, 0xfb, 0x51, 0x41, 0x46, 0x99, 0xfe, 0xe3, 0xe2, 0x3f, 0xac, 0xdf, 0x38, 0xfd, 0x91, 0x53, 0xec, 0x47, 0xc8, 0xe9, 0xf8, 0x54, 0x12, 0xdf, 0x22, 0xae, 0xd4, 0x3e, 0x21, 0xda, 0x8e, 0xd2, 0x3f, 0xbf, 0x50, 0xd9, 0xf7, 0x3f, 0x51, 0xbe, 0x53, 0x62, 0x58, 0xf6, 0xf9, 0x3d, 0xe0, 0x7f, 0x31, 0xf6, 0x79, 0xe6, 0xcf, 0xf9, 0x44, 0xf9, 0xd4, 0xef, 0xff, 0x34, 0x94, 0x27, 0xc2, 0xbc, 0x53, 0x25, 0x3e, 0x7e, 0xc3, 0x39, 0x40, 0xfa, 0xfd, 0xa2, 0x8f, 0x7d, 0x03, 0x39, 0x2a, 0x0e, 0x3f, 0xe4, 0x47, 0x4a, 0x9f, 0x1c, 0x17, 0xfe, 0x46, 0x4a, 0x24, 0x31, 0x14, 0x97, 0xbb, 0xa5, 0xf4, 0x49, 0x30, 0x90, 0x89, 0x84, 0x3e, 0x11, 0x3e, 0x1d, 0xc9, 0xe2, 0xb7, 0x6f, 0x7e, 0x91, 0xe4, 0x00, 0x45, 0xe9, 0x9f, 0x03, 0x94, 0x3e, 0x31, 0xec, 0x28, 0xfd, 0xf1, 0x69, 0x5c, 0x0e, 0x15, 0xed, 0x43, 0xfa, 0xe7, 0x78, 0x99, 0xfe, 0xc5, 0x3b, 0x5e, 0xdc, 0xdd, 0x28, 0xce, 0x17, 0xc9, 0x29, 0xfe, 0x11, 0xc8, 0x4f, 0x4a, 0x7f, 0x38, 0x25, 0xf1, 0xf7, 0xb7, 0xb8, 0x58, 0x0a, 0xcb, 0x2e, 0xcb, 0x01, 0xfe, 0xf7, 0xbf, 0x98, 0xf8, 0xa7, 0x31, 0xf1, 0xef, 0x48, 0x7c, 0x4c, 0xea, 0x1f, 0x44, 0x1e, 0xff, 0xbe, 0x7e, 0x2f, 0x5e, 0x51, 0x94, 0x17, 0x12, 0xc9, 0x17, 0x2f, 0x7d, 0xf1, 0x32, 0xf9, 0xf2, 0x57, 0xbe, 0xfa, 0xb5, 0x97, 0xbf, 0xfe, 0x8d, 0x57, 0x9e, 0xfb, 0xd5, 0x79, 0x65, 0x75, 0xa6, 0x3c, 0x5f, 0xd6, 0x92, 0xef, 0x26, 0x13, 0x53, 0x95, 0xe5, 0x95, 0xc5, 0x65, 0x2d, 0x99, 0x80, 0x7e, 0x62, 0x72, 0x79, 0x79, 0xf1, 0x96, 0x96, 0x1d, 0xcd, 0x40, 0x7f, 0x66, 0x72, 0xa1, 0xe4, 0x76, 0x67, 0x6f, 0x94, 0x27, 0xe7, 0xdd, 0xfe, 0xd2, 0xec, 0x8f, 0xcb, 0x73, 0x6b, 0x4b, 0xe5, 0xe5, 0x9b, 0xe5, 0xa9, 0x55, 0xad, 0x6d, 0x75, 0x0c, 0x98, 0xdd, 0xcf, 0x24, 0x81, 0xd2, 0x62, 0xa9, 0xac, 0xba, 0x84, 0x6e, 0x4c, 0xab, 0x58, 0x34, 0x86, 0xb2, 0xb2, 0xba, 0x3c, 0xbb, 0x30, 0x0d, 0x83, 0x31, 0x1c, 0x2d, 0x54, 0xe6, 0x6f, 0x94, 0x97, 0x61, 0x54, 0xc4, 0xd1, 0xeb, 0xe5, 0x37, 0x6f, 0x2d, 0x2e, 0x97, 0xb4, 0x09, 0x1c, 0x4c, 0x2e, 0xcd, 0x72, 0x2c, 0x86, 0x36, 0xb5, 0x38, 0x3f, 0x5f, 0x5e, 0x58, 0xd5, 0xbe, 0xcb, 0x68, 0xcc, 0x4e, 0x2f, 0x30, 0x50, 0x1e, 0x47, 0x6f, 0x4c, 0x2e, 0xf3, 0x85, 0xe3, 0x38, 0x5a, 0x04, 0x69, 0x60, 0xac, 0x31, 0xd0, 0x4a, 0x79, 0x0e, 0x18, 0x53, 0x35, 0x46, 0x9d, 0x0b, 0xa7, 0x72, 0xea, 0x2b, 0x33, 0x93, 0xa5, 0xc5, 0x5b, 0x6a, 0x80, 0xe7, 0xe9, 0xc9, 0xf9, 0xf2, 0xd2, 0x64, 0xc9, 0xe5, 0x7a, 0x75, 0xb1, 0x32, 0x35, 0x03, 0x7d, 0x36, 0x48, 0x4c, 0xce, 0x2d, 0xcd, 0x4c, 0x6a, 0xa3, 0x57, 0x19, 0xd9, 0x7d, 0x8e, 0xb1, 0x9f, 0x4c, 0x4e, 0xcd, 0x94, 0xa7, 0x5e, 0x5f, 0x5b, 0x28, 0xdf, 0x5a, 0x7b, 0xa3, 0xbc, 0xbc, 0x32, 0xbb, 0xb8, 0xa0, 0xd5, 0xf5, 0xa6, 0x6d, 0x24, 0x17, 0x16, 0xd7, 0x56, 0x16, 0x2b, 0xa0, 0x33, 0x3e, 0x9c, 0x9e, 0xbd, 0xb9, 0x36, 0x57, 0x5e, 0x98, 0x5e, 0x9d, 0xd1, 0x0a, 0x79, 0x35, 0x9b, 0x55, 0x1b, 0x2d, 0xd5, 0x36, 0xaa, 0x66, 0xab, 0x66, 0x33, 0xd8, 0xca, 0xd4, 0xe4, 0x5c, 0x59, 0x2b, 0x24, 0x93, 0x00, 0xb2, 0x37, 0xcd, 0x1d, 0x75, 0xe5, 0xcd, 0x85, 0x29, 0xb5, 0xa9, 0xaf, 0x1b, 0x4d, 0x15, 0xe7, 0x76, 0x36, 0x8d, 0x96, 0xba, 0x3a, 0x3b, 0xa5, 0xd6, 0x2c, 0x73, 0xdb, 0x56, 0x27, 0xf2, 0x33, 0x77, 0xd5, 0xba, 0xa5, 0x6f, 0x19, 0x76, 0x72, 0x65, 0x66, 0xf1, 0xd6, 0x1a, 0x2e, 0x77, 0xb7, 0x4a, 0x4e, 0x2d, 0xaf, 0xae, 0xcd, 0x2f, 0x2e, 0xcc, 0xae, 0x82, 0x21, 0xdd, 0xa9, 0xca, 0xac, 0xbb, 0x43, 0x11, 0x77, 0x88, 0x2d, 0xc9, 0x7a, 0xa7, 0x55, 0x6d, 0x37, 0x4c, 0xb6, 0x55, 0x2a, 0x9d, 0x4c, 0x54, 0x9b, 0x36, 0x36, 0x4d, 0xb3, 0xaa, 0x37, 0x39, 0x37, 0xda, 0xe0, 0xea, 0x66, 0xc3, 0x56, 0xe1, 0x67, 0xef, 0xd9, 0x6d, 0x63, 0x4b, 0x05, 0x19, 0xea, 0x8d, 0x8d, 0x8e, 0xa5, 0x33, 0xbc, 0xaa, 0x6e, 0xb5, 0xad, 0x46, 0x6d, 0xc3, 0x18, 0xf4, 0xb0, 0xec, 0xc6, 0x5d, 0x43, 0xdb, 0xb6, 0x1a, 0xad, 0x76, 0x8a, 0x11, 0xc8, 0xe4, 0x33, 0xd9, 0x09, 0xa0, 0x29, 0x4e, 0xa5, 0x0a, 0x63, 0xf9, 0x2c, 0x2e, 0x4c, 0x8f, 0x8c, 0x14, 0x32, 0xa9, 0xd1, 0xe2, 0x04, 0x2c, 0x81, 0x6e, 0x3a, 0x69, 0xb4, 0x6a, 0x89, 0xdf, 0x2b, 0xca, 0x73, 0xec, 0x21, 0x09, 0x7c, 0x5e, 0x64, 0x0f, 0xeb, 0x2b, 0xcf, 0xf2, 0x9c, 0x67, 0xfe, 0x7f, 0x01, 0x9f, 0x8b, 0xf0, 0x7c, 0x01, 0x9e, 0x4b, 0x17, 0x2e, 0x25, 0x94, 0xe0, 0x73, 0x29, 0xf4, 0x88, 0x14, 0x2e, 0x00, 0x89, 0xf7, 0x94, 0xcb, 0xca, 0xe5, 0x73, 0x97, 0xcf, 0x3d, 0xdb, 0x9e, 0xe1, 0xe7, 0x62, 0x32, 0xef, 0x7d, 0x06, 0xe4, 0x1f, 0x37, 0xb1, 0xbd, 0x52, 0x58, 0xbd, 0xf3, 0xcb, 0xdf, 0xfd, 0xf3, 0x93, 0xc7, 0x7f, 0xfe, 0xcd, 0xcf, 0x36, 0xca, 0xdf, 0x3c, 0xe7, 0x8d, 0xbd, 0xf6, 0x12, 0xe0, 0x7c, 0xe9, 0xd2, 0xcb, 0xa5, 0x57, 0xc7, 0xf2, 0x63, 0x5b, 0x0b, 0x3f, 0x5a, 0xf8, 0x60, 0x2e, 0x3f, 0x66, 0xbc, 0xfa, 0xd7, 0x9b, 0x33, 0x9d, 0x9f, 0xea, 0x6f, 0xee, 0xff, 0xe5, 0xa3, 0xfd, 0xcc, 0x07, 0xbf, 0xf8, 0xf5, 0xd6, 0x71, 0xe6, 0xa3, 0xe3, 0xc3, 0xad, 0x3f, 0xfc, 0xe9, 0x1f, 0x7f, 0x7b, 0xfb, 0x5f, 0xdd, 0xbf, 0x7f, 0xeb, 0xdb, 0x97, 0x15, 0xb4, 0x3f, 0x7a, 0x77, 0x79, 0x59, 0xbb, 0x7d, 0x3b, 0x79, 0x47, 0xb7, 0xf6, 0x1a, 0xad, 0x0d, 0xf5, 0x8e, 0x51, 0x2d, 0xa8, 0x6d, 0x63, 0x77, 0xca, 0x34, 0xad, 0xda, 0xf5, 0x64, 0xa7, 0xd5, 0xa8, 0x9b, 0xd6, 0x96, 0x6a, 0xeb, 0x5b, 0xdb, 0x4d, 0xc3, 0x2a, 0x94, 0x54, 0xdb, 0xec, 0x58, 0x55, 0xa3, 0x07, 0xa9, 0x37, 0x4d, 0xbd, 0xad, 0xb6, 0xad, 0x8d, 0xb5, 0x5d, 0xd9, 0xe4, 0x9e, 0x6c, 0x72, 0x47, 0x36, 0xb9, 0x19, 0x9e, 0xb4, 0xab, 0x56, 0x74, 0x25, 0x4e, 0xc2, 0xca, 0xe4, 0xc8, 0x88, 0x5a, 0xde, 0xea, 0x34, 0xf5, 0xb6, 0x51, 0x83, 0x20, 0xd9, 0xee, 0xb4, 0x55, 0xcb, 0xb0, 0xcd, 0x66, 0x07, 0xdd, 0x2b, 0x97, 0x64, 0x52, 0xc0, 0x84, 0x86, 0x9d, 0x54, 0x61, 0x7c, 0x22, 0x97, 0xcf, 0x8c, 0x8e, 0x8d, 0xe5, 0xf2, 0x69, 0x8e, 0x3a, 0xa3, 0x5b, 0xb5, 0x96, 0x61, 0xdb, 0xaa, 0x59, 0x07, 0x8a, 0x7a, 0xab, 0xd9, 0x68, 0x19, 0x39, 0x04, 0xa8, 0xd9, 0xab, 0xb9, 0xbc, 0xaa, 0x81, 0x94, 0xf5, 0x36, 0x8e, 0xb3, 0xa3, 0x13, 0x6c, 0xbc, 0x65, 0xd4, 0x1a, 0x9d, 0xad, 0x24, 0xe7, 0x61, 0x13, 0xb0, 0x57, 0x00, 0x4b, 0xc3, 0xc5, 0x51, 0x82, 0xdb, 0x8d, 0x5d, 0xa3, 0x69, 0xb3, 0xd0, 0x15, 0x49, 0x67, 0x0b, 0x41, 0xca, 0x63, 0x6c, 0x88, 0xb4, 0x04, 0xb2, 0x4b, 0x8d, 0x5d, 0x2d, 0x5b, 0xf4, 0xa8, 0x96, 0x1a, 0xf6, 0x76, 0x53, 0xdf, 0x53, 0x77, 0x74, 0x6b, 0x9b, 0xd1, 0xc8, 0x33, 0x9c, 0x96, 0xd9, 0x32, 0x70, 0x34, 0x9a, 0xcb, 0x8f, 0x70, 0x76, 0x8d, 0xdd, 0xb6, 0x65, 0x6c, 0x19, 0x5c, 0x6e, 0x5c, 0xcd, 0x05, 0xc7, 0x05, 0x13, 0x63, 0x28, 0x3b, 0x74, 0xc6, 0xae, 0xa2, 0xf8, 0x2a, 0x23, 0x3c, 0xb9, 0x65, 0x76, 0x5a, 0x6d, 0x26, 0xfd, 0xa6, 0x5e, 0x83, 0x3c, 0xb2, 0xa5, 0xdb, 0xef, 0xe4, 0x5c, 0x3e, 0xb0, 0x5f, 0xd2, 0xad, 0x77, 0xb4, 0x7c, 0x6e, 0xfc, 0xba, 0x30, 0x37, 0xd7, 0xd8, 0xd8, 0x6c, 0x6b, 0xa3, 0x38, 0x09, 0x34, 0xb2, 0x9f, 0x51, 0x61, 0xfc, 0xd8, 0xcb, 0xd3, 0x37, 0xd4, 0xb6, 0xa9, 0xce, 0x81, 0xb2, 0x74, 0x8b, 0x89, 0x3a, 0x69, 0xdb, 0x1d, 0x74, 0xc8, 0x8e, 0x8d, 0xff, 0x7c, 0xc1, 0xde, 0x36, 0x58, 0x1b, 0x9c, 0xb3, 0xdd, 0x01, 0xdb, 0xaa, 0x6d, 0xcc, 0x30, 0x90, 0x05, 0x3b, 0xcd, 0x1a, 0xa8, 0xa4, 0xad, 0xae, 0x1b, 0x6a, 0xcb, 0x30, 0x6a, 0x46, 0xcd, 0x13, 0x64, 0xd5, 0xe4, 0xf4, 0x46, 0x53, 0x7c, 0x5c, 0x4d, 0xbf, 0x6b, 0x19, 0x80, 0xdb, 0x4a, 0x55, 0xbf, 0x0f, 0xc2, 0xe5, 0x21, 0x60, 0xc6, 0xd3, 0xaf, 0x55, 0x47, 0x46, 0x0b, 0xb9, 0xef, 0x15, 0xae, 0x6d, 0x9b, 0x3b, 0xa9, 0x54, 0x75, 0x18, 0xe6, 0xc7, 0xc7, 0xd3, 0x23, 0xa3, 0xd8, 0x64, 0x0a, 0xb9, 0xb1, 0xf4, 0xf5, 0x7d, 0x54, 0x6b, 0xd1, 0xa7, 0x96, 0x62, 0x23, 0x9f, 0x16, 0x46, 0x4c, 0x31, 0xd5, 0xdb, 0xaa, 0x9a, 0xb3, 0xd2, 0x19, 0x71, 0xb8, 0x11, 0x1c, 0xae, 0xa7, 0x91, 0x22, 0x4a, 0xc8, 0xe7, 0x50, 0x6c, 0x94, 0xee, 0xb3, 0x13, 0x7a, 0xc5, 0xda, 0x58, 0x97, 0x89, 0x0c, 0x92, 0xe5, 0x8b, 0xa3, 0xc5, 0xfc, 0xd5, 0xd7, 0xaa, 0x43, 0x5c, 0x64, 0x26, 0xe4, 0x10, 0x0a, 0x5e, 0xcd, 0xe4, 0x73, 0x63, 0xa3, 0x13, 0x13, 0x13, 0xe9, 0x2c, 0x57, 0x40, 0x4f, 0x6a, 0x24, 0x17, 0x23, 0x33, 0xdf, 0xc9, 0x95, 0xd8, 0x1b, 0x6c, 0x88, 0x83, 0x9e, 0xb4, 0x0b, 0x20, 0xab, 0x61, 0xb7, 0x55, 0xc3, 0x8b, 0x5a, 0x9e, 0x52, 0xd4, 0x8d, 0xc6, 0x1d, 0x38, 0xb3, 0x18, 0xb7, 0x28, 0xf3, 0xb6, 0x09, 0xf9, 0x1e, 0xfe, 0xed, 0x06, 0x3b, 0x28, 0xf4, 0x16, 0x93, 0x1d, 0x8e, 0x37, 0xb3, 0x5e, 0xb7, 0x8d, 0x36, 0xd7, 0x52, 0xd3, 0x36, 0xd5, 0xbb, 0x86, 0x65, 0x7e, 0x07, 0xe3, 0x0d, 0x23, 0xd8, 0x32, 0x0c, 0x1e, 0xf5, 0x45, 0xf5, 0xa6, 0xd1, 0xae, 0x6e, 0xa6, 0x58, 0x20, 0x00, 0x95, 0x0c, 0xeb, 0xc0, 0xa2, 0x34, 0x9c, 0xce, 0x30, 0xd6, 0x50, 0x2f, 0xa6, 0x95, 0x82, 0xee, 0x10, 0xb0, 0x33, 0x8c, 0x90, 0x61, 0x16, 0x2b, 0xe0, 0xec, 0xa0, 0x83, 0xf1, 0x74, 0x7a, 0x04, 0xe6, 0xaf, 0x27, 0x13, 0xae, 0xa4, 0xbe, 0xd5, 0x47, 0x73, 0x05, 0x75, 0xc8, 0xb3, 0x43, 0xa1, 0x94, 0xe2, 0x79, 0x30, 0x03, 0x84, 0x72, 0xbb, 0x7b, 0x19, 0x96, 0x27, 0xd2, 0x39, 0x90, 0xda, 0x93, 0x17, 0x62, 0xb7, 0xad, 0xb7, 0xaa, 0x06, 0xe6, 0x01, 0x5f, 0x66, 0x37, 0x35, 0x80, 0xc9, 0x5b, 0xae, 0x3a, 0x98, 0x70, 0x6e, 0xc2, 0x42, 0x14, 0x9f, 0xf3, 0xf4, 0xbb, 0xc8, 0xae, 0xcb, 0xe7, 0x75, 0x97, 0x9b, 0x6c, 0x0a, 0x39, 0xcf, 0xfa, 0x32, 0xa4, 0xd3, 0x59, 0x8f, 0x79, 0xa6, 0xe8, 0x44, 0x82, 0xe5, 0x85, 0x92, 0x3a, 0xad, 0x77, 0x6c, 0xbb, 0xa1, 0xb7, 0x3c, 0xaf, 0xc0, 0xb1, 0xeb, 0x12, 0xa8, 0x15, 0x2f, 0x97, 0xea, 0x4d, 0xc3, 0xb7, 0xa9, 0xb1, 0xbb, 0x5d, 0x48, 0xb1, 0xa9, 0x21, 0xdc, 0x15, 0xa9, 0xbb, 0xa2, 0x14, 0xb3, 0x6d, 0x7d, 0xdb, 0x27, 0xa9, 0xd6, 0x1b, 0xcd, 0xb6, 0x61, 0xa9, 0x7a, 0xd3, 0x04, 0x7b, 0x6d, 0x9a, 0xd6, 0x5d, 0x95, 0xe7, 0x38, 0xa6, 0xfe, 0x19, 0x18, 0x17, 0x7b, 0xea, 0xe7, 0x1b, 0xb9, 0xfa, 0x67, 0x0b, 0xd6, 0x35, 0x6e, 0x21, 0xcf, 0x38, 0xa9, 0x2c, 0x78, 0x61, 0x06, 0x57, 0x40, 0x6e, 0xe6, 0x4b, 0xaa, 0xe1, 0x25, 0x98, 0xf7, 0x82, 0x4b, 0x6a, 0x91, 0x25, 0x22, 0x15, 0xbe, 0x6b, 0xcd, 0x6e, 0x6b, 0x4c, 0xa5, 0x28, 0x4a, 0x0e, 0x4e, 0xa7, 0x04, 0xc8, 0x32, 0x65, 0xb6, 0xee, 0x18, 0x16, 0x00, 0x3d, 0xf3, 0x80, 0x2d, 0x76, 0x0c, 0xcc, 0x6c, 0x39, 0x0f, 0x8f, 0xe9, 0x40, 0x73, 0xb3, 0xb1, 0x4f, 0x6d, 0x67, 0x5d, 0x63, 0x4a, 0x04, 0xaa, 0x8c, 0x63, 0xae, 0xbc, 0x1e, 0xb8, 0xea, 0x83, 0x31, 0x85, 0x44, 0xc0, 0xb5, 0x1e, 0x38, 0x80, 0x0d, 0x2c, 0x2d, 0x73, 0xfd, 0x73, 0xb5, 0xfa, 0x81, 0x91, 0xf3, 0x5d, 0x30, 0xb5, 0x3e, 0xb4, 0xb3, 0x3e, 0x5c, 0x1d, 0xda, 0xa9, 0x0e, 0xd7, 0x86, 0x76, 0x6a, 0xe9, 0x91, 0x14, 0x0c, 0x61, 0x00, 0x5d, 0xd7, 0x40, 0xe3, 0x9f, 0xd2, 0x40, 0xe3, 0xfd, 0x0c, 0xa4, 0x47, 0x0c, 0x54, 0x08, 0x6b, 0xff, 0xff, 0x61, 0x43, 0xb6, 0xc4, 0x88, 0x2c, 0x29, 0x7c, 0xde, 0x66, 0xd6, 0x7b, 0x66, 0x2e, 0x48, 0xec, 0xf8, 0xf9, 0x78, 0x81, 0x0b, 0x36, 0x7a, 0xe0, 0xc2, 0xa7, 0x75, 0x12, 0x7d, 0x68, 0x47, 0x1f, 0x0e, 0x7a, 0xca, 0xb0, 0x31, 0xb4, 0x63, 0xa0, 0xbb, 0xe8, 0xc3, 0x9e, 0xc7, 0x0c, 0xc3, 0x84, 0xeb, 0x34, 0x2e, 0x45, 0xef, 0x8e, 0xe2, 0xab, 0x87, 0xf3, 0x82, 0xf7, 0x9b, 0x18, 0x2f, 0x91, 0xa9, 0x7d, 0xaf, 0x97, 0x31, 0x7d, 0x11, 0x60, 0x79, 0xc6, 0xbb, 0x2a, 0x79, 0x9b, 0x4e, 0x36, 0x9b, 0x70, 0xdb, 0xf0, 0x93, 0xdf, 0x26, 0x24, 0x6e, 0xe6, 0x9c, 0x2c, 0x27, 0x1a, 0xf5, 0xba, 0x51, 0x6d, 0xf3, 0x24, 0xe9, 0x7a, 0xeb, 0xaa, 0xd5, 0x10, 0x32, 0xa2, 0xef, 0xa1, 0x3c, 0xcb, 0x20, 0x67, 0x68, 0x05, 0xc1, 0x2f, 0xb9, 0x77, 0x23, 0x00, 0xfd, 0x4d, 0xf0, 0xc6, 0x1e, 0x86, 0xea, 0x62, 0xf8, 0xf6, 0x66, 0xa2, 0x8a, 0xb4, 0x7c, 0x53, 0xfb, 0x10, 0x8f, 0x98, 0x6f, 0xe5, 0x1e, 0xc4, 0xc5, 0x71, 0x85, 0x0f, 0x5a, 0x41, 0x38, 0x0a, 0x4c, 0x8b, 0x9d, 0x67, 0xc2, 0x7d, 0x13, 0x70, 0xf1, 0x74, 0x83, 0x57, 0x17, 0x3e, 0x8b, 0x67, 0x18, 0xc4, 0xec, 0xf6, 0xa6, 0xee, 0x1e, 0x07, 0xb7, 0xe0, 0x1e, 0x17, 0x10, 0xde, 0x3b, 0x10, 0xc0, 0x37, 0x90, 0xd5, 0xeb, 0xf8, 0x36, 0xcb, 0x66, 0x87, 0xfc, 0xeb, 0xde, 0x30, 0x32, 0x95, 0xdb, 0x1b, 0x62, 0xff, 0xe9, 0x21, 0x76, 0x71, 0xdc, 0xcd, 0xf8, 0x80, 0x5d, 0x06, 0xd8, 0x75, 0x01, 0x7b, 0x02, 0xe3, 0x48, 0x05, 0x4e, 0x91, 0x61, 0xbc, 0xf3, 0x71, 0xae, 0x57, 0xc4, 0x9b, 0x21, 0xd3, 0xe2, 0x3c, 0x74, 0xc3, 0x0c, 0xe5, 0x76, 0x87, 0x35, 0xbe, 0x25, 0xbb, 0xb5, 0x72, 0x75, 0x23, 0x8e, 0xc6, 0xee, 0x08, 0xde, 0x5d, 0x32, 0x13, 0xe9, 0xe0, 0xde, 0x0c, 0x5f, 0x83, 0x17, 0xd4, 0x6a, 0x9b, 0xb3, 0x37, 0x32, 0xc1, 0xb5, 0xd9, 0xa8, 0xf3, 0x31, 0xdc, 0x59, 0x8a, 0xc5, 0x62, 0x9a, 0xf1, 0x60, 0x69, 0xfe, 0x25, 0x14, 0x56, 0xc0, 0x31, 0x0a, 0x47, 0x6b, 0x6f, 0x19, 0x5e, 0x5d, 0xd8, 0xb2, 0x8d, 0xe8, 0x32, 0x36, 0xbf, 0x1e, 0x98, 0x77, 0xa5, 0xc6, 0xa9, 0xeb, 0xfb, 0x4c, 0x8f, 0xc9, 0x3b, 0x66, 0xa3, 0x06, 0x13, 0x8d, 0x56, 0x2a, 0xad, 0x82, 0x6c, 0xbd, 0x4b, 0x3e, 0xdc, 0x95, 0xf2, 0x2c, 0x08, 0xfd, 0x8b, 0xb1, 0x48, 0x89, 0xe9, 0x03, 0x92, 0x8c, 0xd5, 0xd6, 0x36, 0x9a, 0x6b, 0x37, 0x2d, 0x7d, 0x83, 0xbd, 0x3a, 0xc1, 0xa5, 0x80, 0x1f, 0xcd, 0xec, 0xcd, 0x28, 0xc3, 0xdf, 0x85, 0x50, 0x34, 0xb6, 0x34, 0xb7, 0xa7, 0xb1, 0x17, 0x99, 0xac, 0x3b, 0x82, 0x1b, 0x75, 0xc2, 0x53, 0xac, 0xc6, 0xec, 0xce, 0x00, 0x23, 0x3e, 0x85, 0x1d, 0x4e, 0x61, 0x13, 0xf3, 0x5e, 0x32, 0xe1, 0x6f, 0xd4, 0x34, 0x2d, 0xbc, 0x73, 0x68, 0x18, 0x26, 0x68, 0x93, 0x21, 0x66, 0xa2, 0x10, 0x1f, 0xb8, 0xab, 0x88, 0x01, 0xef, 0x0b, 0x40, 0x77, 0xcc, 0xbd, 0xbf, 0xa5, 0xc2, 0xc4, 0xd2, 0x9e, 0x4f, 0xef, 0x27, 0xdf, 0x7a, 0x2b, 0xf9, 0x3f, 0x2a, 0xad, 0x1b, 0xdf, \ No newline at end of file diff --git a/config.tic b/config.tic index e2c686229ee34d1cb29a51140086e71d1aa71cb6..5e0e368c23e544b3cdea9cf8917f82314113b5bc 100644 GIT binary patch delta 162 zcmW-ZF$%&k7)Gr|{DnZQlv1>&)+UnZC@E#`^gc?`YYse5t7t3(|_iDoM91%>&VI)Jz z8*;*3kv)e+2dN@Q;2|TJh;T_fKh4ygMeS3^|ZERIw*G&%7OgFxVR1@-; IY^h(vA2lB}EC2ui delta 146 zcmexc@V8*YTAstic->api.rect(code->tic, 0, TIC80_HEIGHT - Height, TIC80_WIDTH, Height, (tic_color_white)); - code->tic->api.fixed_text(code->tic, code->status, 0, TIC80_HEIGHT - TIC_FONT_HEIGHT, getConfig()->theme.code.bg); + code->tic->api.fixed_text(code->tic, code->status, 0, TIC80_HEIGHT - TIC_FONT_HEIGHT, getConfig()->theme.code.bg, false); } static void drawCursor(Code* code, s32 x, s32 y, char symbol) @@ -58,16 +58,16 @@ static void drawCursor(Code* code, s32 x, s32 y, char symbol) if(inverse) { - code->tic->api.rect(code->tic, x-1, y-1, TIC_FONT_WIDTH+1, TIC_FONT_HEIGHT+1, getConfig()->theme.code.cursor); + code->tic->api.rect(code->tic, x-1, y-1, (code->altFont ? TIC_ALTFONT_WIDTH : TIC_FONT_WIDTH)+1, TIC_FONT_HEIGHT+1, getConfig()->theme.code.cursor); if(symbol) - code->tic->api.draw_char(code->tic, symbol, x, y, getConfig()->theme.code.bg); + code->tic->api.draw_char(code->tic, symbol, x, y, getConfig()->theme.code.bg, code->altFont); } } static void drawCode(Code* code, bool withCursor) { - s32 xStart = code->rect.x - code->scroll.x * STUDIO_TEXT_WIDTH; + s32 xStart = code->rect.x - code->scroll.x * (code->altFont ? TIC_ALTFONT_WIDTH : TIC_FONT_WIDTH); s32 x = xStart; s32 y = code->rect.y - code->scroll.y * STUDIO_TEXT_HEIGHT; char* pointer = code->src; @@ -89,10 +89,10 @@ static void drawCode(Code* code, bool withCursor) code->tic->api.rect(code->tic, x-1, y-1, TIC_FONT_WIDTH+1, TIC_FONT_HEIGHT+1, getConfig()->theme.code.select); else if(getConfig()->theme.code.shadow) { - code->tic->api.draw_char(code->tic, symbol, x+1, y+1, 0); + code->tic->api.draw_char(code->tic, symbol, x+1, y+1, 0, code->altFont); } - code->tic->api.draw_char(code->tic, symbol, x, y, *colorPointer); + code->tic->api.draw_char(code->tic, symbol, x, y, *colorPointer, code->altFont); } if(code->cursor.position == pointer) @@ -103,7 +103,7 @@ static void drawCode(Code* code, bool withCursor) x = xStart; y += STUDIO_TEXT_HEIGHT; } - else x += STUDIO_TEXT_WIDTH; + else x += (code->altFont ? TIC_ALTFONT_WIDTH : TIC_FONT_WIDTH); pointer++; colorPointer++; @@ -966,7 +966,7 @@ static void processMouse(Code* code) { if(checkMouseDown(&code->rect, tic_mouse_right)) { - code->scroll.x = (code->scroll.start.x - getMouseX()) / STUDIO_TEXT_WIDTH; + code->scroll.x = (code->scroll.start.x - getMouseX()) / (code->altFont ? TIC_ALTFONT_WIDTH : TIC_FONT_WIDTH); code->scroll.y = (code->scroll.start.y - getMouseY()) / STUDIO_TEXT_HEIGHT; normalizeScroll(code); @@ -980,7 +980,7 @@ static void processMouse(Code* code) s32 mx = getMouseX(); s32 my = getMouseY(); - s32 x = (mx - code->rect.x) / STUDIO_TEXT_WIDTH; + s32 x = (mx - code->rect.x) / (code->altFont ? TIC_ALTFONT_WIDTH : TIC_FONT_WIDTH); s32 y = (my - code->rect.y) / STUDIO_TEXT_HEIGHT; char* position = code->cursor.position; @@ -1009,7 +1009,7 @@ static void processMouse(Code* code) { code->scroll.active = true; - code->scroll.start.x = getMouseX() + code->scroll.x * STUDIO_TEXT_WIDTH; + code->scroll.start.x = getMouseX() + code->scroll.x * (code->altFont ? TIC_ALTFONT_WIDTH : TIC_FONT_WIDTH); code->scroll.start.y = getMouseY() + code->scroll.y * STUDIO_TEXT_HEIGHT; } @@ -1061,9 +1061,9 @@ static void drawPopupBar(Code* code, const char* title) enum {TextY = TOOLBAR_SIZE + 1}; code->tic->api.rect(code->tic, 0, TOOLBAR_SIZE, TIC80_WIDTH, TIC_FONT_HEIGHT + 1, (tic_color_blue)); - code->tic->api.fixed_text(code->tic, title, 0, TextY, (tic_color_white)); + code->tic->api.fixed_text(code->tic, title, 0, TextY, (tic_color_white), false); - code->tic->api.fixed_text(code->tic, code->popup.text, (s32)strlen(title)*TIC_FONT_WIDTH, TextY, (tic_color_white)); + code->tic->api.fixed_text(code->tic, code->popup.text, (s32)strlen(title)*TIC_FONT_WIDTH, TextY, (tic_color_white), false); drawCursor(code, (s32)(strlen(title) + strlen(code->popup.text)) * TIC_FONT_WIDTH, TextY, ' '); } @@ -1248,12 +1248,12 @@ static void drawOutlineBar(Code* code, s32 x, s32 y) rect.w + 1, TIC_FONT_HEIGHT + 1, (tic_color_red)); while(ptr->pos) { - code->tic->api.fixed_text(code->tic, ptr->name, x, y, (tic_color_white)); + code->tic->api.fixed_text(code->tic, ptr->name, x, y, (tic_color_white), false); ptr++; y += STUDIO_TEXT_HEIGHT; } } - else code->tic->api.fixed_text(code->tic, "(empty)", x, y, (tic_color_white)); + else code->tic->api.fixed_text(code->tic, "(empty)", x, y, (tic_color_white), false); } static void textOutlineTick(Code* code) @@ -1308,6 +1308,32 @@ static void textOutlineTick(Code* code) drawOutlineBar(code, TIC80_WIDTH - 12 * TIC_FONT_WIDTH, 2*(TIC_FONT_HEIGHT+1)); } +static void drawFontButton(Code* code, s32 x, s32 y) +{ + tic_mem* tic = code->tic; + + enum {Size = TIC_FONT_WIDTH}; + tic_rect rect = {x, y, Size, Size}; + + bool over = false; + if(checkMousePos(&rect)) + { + setCursor(tic_cursor_hand); + + showTooltip("SWITCH FONT"); + + over = true; + + if(checkMouseClick(&rect, tic_mouse_left)) + { + code->altFont = !code->altFont; + } + } + + + tic->api.draw_char(tic, 'F', x, y, over ? tic_color_dark_gray : tic_color_light_blue, code->altFont); +} + static void drawCodeToolbar(Code* code) { code->tic->api.rect(code->tic, 0, 0, TIC80_WIDTH, TOOLBAR_SIZE, (tic_color_white)); @@ -1392,6 +1418,8 @@ static void drawCodeToolbar(Code* code) drawBitIcon(rect.x, rect.y, Icons + i*BITS_IN_BYTE, active ? (tic_color_white) : (over ? (tic_color_dark_gray) : (tic_color_light_blue))); } + drawFontButton(code, TIC80_WIDTH - (Count+2) * Size, 1); + drawToolbar(code->tic, getConfig()->theme.code.bg, false); } @@ -1472,6 +1500,7 @@ void initCode(Code* code, tic_mem* tic, tic_code* src) .items = code->outline.items, .index = 0, }, + .altFont = true, .event = onStudioEvent, .update = update, }; diff --git a/src/code.h b/src/code.h index f084711..523f5ab 100644 --- a/src/code.h +++ b/src/code.h @@ -98,6 +98,8 @@ struct Code s32 index; } outline; + bool altFont; + void(*tick)(Code*); void(*escape)(Code*); void(*event)(Code*, StudioEvent); diff --git a/src/console.c b/src/console.c index 843ccba..d59157c 100644 --- a/src/console.c +++ b/src/console.c @@ -241,7 +241,7 @@ static void drawCursor(Console* console, s32 x, s32 y, u8 symbol) if(inverse) console->tic->api.rect(console->tic, x-1, y-1, TIC_FONT_WIDTH+1, TIC_FONT_HEIGHT+1, CONSOLE_CURSOR_COLOR); - console->tic->api.draw_char(console->tic, symbol, x, y, inverse ? TIC_COLOR_BG : CONSOLE_FRONT_TEXT_COLOR); + console->tic->api.draw_char(console->tic, symbol, x, y, inverse ? TIC_COLOR_BG : CONSOLE_FRONT_TEXT_COLOR, false); } static void drawConsoleText(Console* console) @@ -259,7 +259,7 @@ static void drawConsoleText(Console* console) u8 color = *colorPointer++; if(symbol) - console->tic->api.draw_char(console->tic, symbol, x * STUDIO_TEXT_WIDTH, y * STUDIO_TEXT_HEIGHT, color); + console->tic->api.draw_char(console->tic, symbol, x * STUDIO_TEXT_WIDTH, y * STUDIO_TEXT_HEIGHT, color, false); if(++x == CONSOLE_BUFFER_WIDTH) { @@ -285,7 +285,7 @@ static void drawConsoleInputText(Console* console) if(console->inputPosition == index) drawCursor(console, x, y, symbol); else - console->tic->api.draw_char(console->tic, symbol, x, y, CONSOLE_FRONT_TEXT_COLOR); + console->tic->api.draw_char(console->tic, symbol, x, y, CONSOLE_FRONT_TEXT_COLOR, false); index++; diff --git a/src/dialog.c b/src/dialog.c index 3dd84c3..f46d2e6 100644 --- a/src/dialog.c +++ b/src/dialog.c @@ -57,8 +57,8 @@ static void drawButton(Dialog* dlg, const char* label, s32 x, s32 y, u8 color, u tic->api.rect(tic, rect.x, rect.y, rect.w, rect.h, (tic_color_white)); } - s32 size = tic->api.text(tic, label, 0, -TIC_FONT_HEIGHT, 0); - tic->api.text(tic, label, rect.x + (BtnWidth - size+1)/2, rect.y + (down?3:2), over ? overColor : color); + s32 size = tic->api.text(tic, label, 0, -TIC_FONT_HEIGHT, 0, false); + tic->api.text(tic, label, rect.x + (BtnWidth - size+1)/2, rect.y + (down?3:2), over ? overColor : color, false); if(dlg->focus == id) { @@ -162,8 +162,8 @@ static void drawDialog(Dialog* dlg) { static const char Label[] = "WARNING!"; - s32 size = tic->api.text(tic, Label, 0, -TIC_FONT_HEIGHT, 0); - tic->api.text(tic, Label, rect.x + (Width - size)/2, rect.y-(TOOLBAR_SIZE-2), (tic_color_gray)); + s32 size = tic->api.text(tic, Label, 0, -TIC_FONT_HEIGHT, 0, false); + tic->api.text(tic, Label, rect.x + (Width - size)/2, rect.y-(TOOLBAR_SIZE-2), (tic_color_gray), false); } { @@ -174,12 +174,12 @@ static void drawDialog(Dialog* dlg) { for(s32 i = 0; i < dlg->rows; i++) { - s32 size = tic->api.text(tic, dlg->text[i], 0, -TIC_FONT_HEIGHT, 0); + s32 size = tic->api.text(tic, dlg->text[i], 0, -TIC_FONT_HEIGHT, 0, false); s32 x = rect.x + (Width - size)/2; s32 y = rect.y + (TIC_FONT_HEIGHT+1)*(i+1); - tic->api.text(tic, dlg->text[i], x, y+1, (tic_color_black)); - tic->api.text(tic, dlg->text[i], x, y, (tic_color_white)); + tic->api.text(tic, dlg->text[i], x, y+1, (tic_color_black), false); + tic->api.text(tic, dlg->text[i], x, y, (tic_color_white), false); } } diff --git a/src/jsapi.c b/src/jsapi.c index 388e7b8..1910369 100644 --- a/src/jsapi.c +++ b/src/jsapi.c @@ -63,8 +63,9 @@ static duk_ret_t duk_print(duk_context* duk) s32 color = duk_is_null_or_undefined(duk, 3) ? (TIC_PALETTE_SIZE-1) : duk_to_int(duk, 3); bool fixed = duk_is_null_or_undefined(duk, 4) ? false : duk_to_boolean(duk, 4); s32 scale = duk_is_null_or_undefined(duk, 5) ? 1 : duk_to_int(duk, 5); + bool alt = duk_is_null_or_undefined(duk, 6) ? false : duk_to_boolean(duk, 6); - s32 size = memory->api.text_ex(memory, text ? text : "nil", x, y, color, fixed, scale); + s32 size = memory->api.text_ex(memory, text ? text : "nil", x, y, color, fixed, scale, alt); duk_push_uint(duk, size); @@ -611,6 +612,7 @@ static duk_ret_t duk_font(duk_context* duk) s32 height = duk_is_null_or_undefined(duk, 5) ? TIC_SPRITESIZE : duk_to_int(duk, 5); bool fixed = duk_is_null_or_undefined(duk, 6) ? false : duk_to_boolean(duk, 6); s32 scale = duk_is_null_or_undefined(duk, 7) ? 1 : duk_to_int(duk, 7); + bool alt = duk_is_null_or_undefined(duk, 8) ? false : duk_to_boolean(duk, 8); if(scale == 0) { @@ -618,7 +620,7 @@ static duk_ret_t duk_font(duk_context* duk) return 1; } - s32 size = drawText(memory, text, x, y, width, height, chromakey, scale, fixed ? drawSpriteFont : drawFixedSpriteFont); + s32 size = drawText(memory, text, x, y, width, height, chromakey, scale, fixed ? drawSpriteFont : drawFixedSpriteFont, alt); duk_push_int(duk, size); diff --git a/src/luaapi.c b/src/luaapi.c index 1a61080..0a49020 100644 --- a/src/luaapi.c +++ b/src/luaapi.c @@ -933,6 +933,7 @@ static s32 lua_font(lua_State* lua) u8 chromakey = 0; bool fixed = false; s32 scale = 1; + bool alt = false; if(top >= 3) { @@ -955,6 +956,11 @@ static s32 lua_font(lua_State* lua) if(top >= 8) { scale = getLuaNumber(lua, 8); + + if(top >= 9) + { + alt = lua_toboolean(lua, 9); + } } } } @@ -967,7 +973,7 @@ static s32 lua_font(lua_State* lua) return 1; } - s32 size = drawText(memory, text, x, y, width, height, chromakey, scale, fixed ? drawSpriteFont : drawFixedSpriteFont); + s32 size = drawText(memory, text, x, y, width, height, chromakey, scale, fixed ? drawSpriteFont : drawFixedSpriteFont, alt); lua_pushinteger(lua, size); @@ -991,6 +997,7 @@ static s32 lua_print(lua_State* lua) s32 color = TIC_PALETTE_SIZE-1; bool fixed = false; s32 scale = 1; + bool alt = false; const char* text = printString(lua, 1); @@ -1010,6 +1017,11 @@ static s32 lua_print(lua_State* lua) if(top >= 6) { scale = getLuaNumber(lua, 6); + + if(top >= 7) + { + alt = lua_toboolean(lua, 7); + } } } } @@ -1021,7 +1033,7 @@ static s32 lua_print(lua_State* lua) return 1; } - s32 size = memory->api.text_ex(memory, text ? text : "nil", x, y, color, fixed, scale); + s32 size = memory->api.text_ex(memory, text ? text : "nil", x, y, color, fixed, scale, alt); lua_pushinteger(lua, size); diff --git a/src/machine.h b/src/machine.h index 56297d8..7da7121 100644 --- a/src/machine.h +++ b/src/machine.h @@ -163,10 +163,10 @@ typedef struct } tic_machine; -typedef s32(DrawCharFunc)(tic_mem* memory, u8 symbol, s32 x, s32 y, s32 width, s32 height, u8 color, s32 scale); -s32 drawText(tic_mem* memory, const char* text, s32 x, s32 y, s32 width, s32 height, u8 color, s32 scale, DrawCharFunc* func); -s32 drawSpriteFont(tic_mem* memory, u8 symbol, s32 x, s32 y, s32 width, s32 height, u8 chromakey, s32 scale); -s32 drawFixedSpriteFont(tic_mem* memory, u8 index, s32 x, s32 y, s32 width, s32 height, u8 chromakey, s32 scale); +typedef s32(DrawCharFunc)(tic_mem* memory, u8 symbol, s32 x, s32 y, s32 width, s32 height, u8 color, s32 scale, bool alt); +s32 drawText(tic_mem* memory, const char* text, s32 x, s32 y, s32 width, s32 height, u8 color, s32 scale, DrawCharFunc* func, bool alt); +s32 drawSpriteFont(tic_mem* memory, u8 symbol, s32 x, s32 y, s32 width, s32 height, u8 chromakey, s32 scale, bool alt); +s32 drawFixedSpriteFont(tic_mem* memory, u8 index, s32 x, s32 y, s32 width, s32 height, u8 chromakey, s32 scale, bool alt); void parseCode(const tic_script_config* config, const char* start, u8* color, const tic_code_theme* theme); #if defined(TIC_BUILD_WITH_LUA) diff --git a/src/map.c b/src/map.c index ae3806f..070d964 100644 --- a/src/map.c +++ b/src/map.c @@ -328,7 +328,7 @@ static void drawTileIndex(Map* map, s32 x, s32 y) { char buf[] = "#999"; sprintf(buf, "#%03i", index); - map->tic->api.text(map->tic, buf, x, y, (tic_color_light_blue)); + map->tic->api.text(map->tic, buf, x, y, (tic_color_light_blue), false); } } @@ -424,7 +424,7 @@ static void drawCursorPos(Map* map, s32 x, s32 y) sprintf(pos, "%03i:%03i", tx, ty); - s32 width = map->tic->api.text(map->tic, pos, TIC80_WIDTH, 0, (tic_color_gray)); + s32 width = map->tic->api.text(map->tic, pos, TIC80_WIDTH, 0, (tic_color_gray), false); s32 px = x + (TIC_SPRITESIZE + 3); if(px + width >= TIC80_WIDTH) px = x - (width + 2); @@ -433,7 +433,7 @@ static void drawCursorPos(Map* map, s32 x, s32 y) if(py <= TOOLBAR_SIZE) py = y + (TIC_SPRITESIZE + 3); map->tic->api.rect(map->tic, px - 1, py - 1, width + 1, TIC_FONT_HEIGHT + 1, (tic_color_white)); - map->tic->api.text(map->tic, pos, px, py, (tic_color_light_blue)); + map->tic->api.text(map->tic, pos, px, py, (tic_color_light_blue), false); } static void setMapSprite(Map* map, s32 x, s32 y) diff --git a/src/menu.c b/src/menu.c index 4a24c7c..ce5ebf1 100644 --- a/src/menu.c +++ b/src/menu.c @@ -119,8 +119,8 @@ static void drawDialog(Menu* menu) { static const char Label[] = "GAME MENU"; - s32 size = tic->api.text(tic, Label, 0, -TIC_FONT_HEIGHT, 0); - tic->api.text(tic, Label, rect.x + (DIALOG_WIDTH - size)/2, rect.y-(TOOLBAR_SIZE-2), (tic_color_gray)); + s32 size = tic->api.text(tic, Label, 0, -TIC_FONT_HEIGHT, 0, false); + tic->api.text(tic, Label, rect.x + (DIALOG_WIDTH - size)/2, rect.y-(TOOLBAR_SIZE-2), (tic_color_gray), false); } { @@ -157,7 +157,7 @@ static void drawTabDisabled(Menu* menu, s32 x, s32 y, s32 id) { char buf[] = "#1"; sprintf(buf, "#%i", id+1); - tic->api.fixed_text(tic, buf, x+2, y, (over ? tic_color_light_blue : tic_color_gray)); + tic->api.fixed_text(tic, buf, x+2, y, (over ? tic_color_light_blue : tic_color_gray), false); } } @@ -174,7 +174,7 @@ static void drawTab(Menu* menu, s32 x, s32 y, s32 id) { char buf[] = "#1"; sprintf(buf, "#%i", id+1); - tic->api.fixed_text(tic, buf, x+2, y, (tic_color_gray)); + tic->api.fixed_text(tic, buf, x+2, y, (tic_color_gray), false); } } @@ -221,7 +221,7 @@ static void drawPlayerButtons(Menu* menu, s32 x, s32 y) if(strlen(label) > MaxChars) label[MaxChars] = '\0'; - tic->api.text(tic, label, rect.x+10, rect.y+2, (over ? tic_color_gray : tic_color_black)); + tic->api.text(tic, label, rect.x+10, rect.y+2, (over ? tic_color_gray : tic_color_black), false); } } @@ -280,12 +280,12 @@ static void drawGamepadMenu(Menu* menu) if(down) { - tic->api.text(tic, Label, rect.x, rect.y+1, (tic_color_light_blue)); + tic->api.text(tic, Label, rect.x, rect.y+1, (tic_color_light_blue), false); } else { - tic->api.text(tic, Label, rect.x, rect.y+1, (tic_color_black)); - tic->api.text(tic, Label, rect.x, rect.y, (over ? tic_color_light_blue : tic_color_white)); + tic->api.text(tic, Label, rect.x, rect.y+1, (tic_color_black), false); + tic->api.text(tic, Label, rect.x, rect.y, (over ? tic_color_light_blue : tic_color_white), false); } { @@ -346,12 +346,12 @@ static void drawMainMenu(Menu* menu) if(down) { - tic->api.text(tic, Rows[i], label.x, label.y+1, (tic_color_light_blue)); + tic->api.text(tic, Rows[i], label.x, label.y+1, (tic_color_light_blue), false); } else { - tic->api.text(tic, Rows[i], label.x, label.y+1, (tic_color_black)); - tic->api.text(tic, Rows[i], label.x, label.y, (over ? tic_color_light_blue : tic_color_white)); + tic->api.text(tic, Rows[i], label.x, label.y+1, (tic_color_black), false); + tic->api.text(tic, Rows[i], label.x, label.y, (over ? tic_color_light_blue : tic_color_white), false); } if(i == menu->main.focus) diff --git a/src/music.c b/src/music.c index ab8cec9..957ba85 100644 --- a/src/music.c +++ b/src/music.c @@ -139,7 +139,7 @@ static void drawEditbox(Music* music, s32 x, s32 y, s32 value, void(*set)(Music* char val[] = "99"; sprintf(val, "%02i", value); - music->tic->api.fixed_text(music->tic, val, x, y, (tic_color_white)); + music->tic->api.fixed_text(music->tic, val, x, y, (tic_color_white), false); } { @@ -191,8 +191,8 @@ static void drawSwitch(Music* music, s32 x, s32 y, const char* label, s32 value, 0b00000000, }; - music->tic->api.text(music->tic, label, x, y+1, (tic_color_black)); - music->tic->api.text(music->tic, label, x, y, (tic_color_white)); + music->tic->api.text(music->tic, label, x, y+1, (tic_color_black), false); + music->tic->api.text(music->tic, label, x, y, (tic_color_white), false); { x += (s32)strlen(label)*TIC_FONT_WIDTH; @@ -220,8 +220,8 @@ static void drawSwitch(Music* music, s32 x, s32 y, const char* label, s32 value, { char val[] = "999"; sprintf(val, "%02i", value); - music->tic->api.fixed_text(music->tic, val, x + TIC_FONT_WIDTH, y+1, (tic_color_black)); - music->tic->api.fixed_text(music->tic, val, x += TIC_FONT_WIDTH, y, (tic_color_white)); + music->tic->api.fixed_text(music->tic, val, x + TIC_FONT_WIDTH, y+1, (tic_color_black), false); + music->tic->api.fixed_text(music->tic, val, x += TIC_FONT_WIDTH, y, (tic_color_white), false); } { @@ -1166,15 +1166,15 @@ static void drawTrackerFrames(Music* music, s32 x, s32 y) char buf[] = "99"; sprintf(buf, "%02i", i); - music->tic->api.fixed_text(music->tic, buf, x, y + i*TIC_FONT_HEIGHT, (tic_color_dark_gray)); + music->tic->api.fixed_text(music->tic, buf, x, y + i*TIC_FONT_HEIGHT, (tic_color_dark_gray), false); } if(music->tracker.row >= 0) { char buf[] = "99"; sprintf(buf, "%02i", music->tracker.row); - music->tic->api.fixed_text(music->tic, buf, x, y - 10, (tic_color_black)); - music->tic->api.fixed_text(music->tic, buf, x, y - 11, (tic_color_white)); + music->tic->api.fixed_text(music->tic, buf, x, y - 10, (tic_color_black), false); + music->tic->api.fixed_text(music->tic, buf, x, y - 11, (tic_color_white), false); } } @@ -1306,11 +1306,11 @@ static void drawTrackerChannel(Music* music, s32 x, s32 y, s32 channel) char sym = rowStr[c]; const u8* colors = beetRow || sym != '-' ? Colors : DarkColors; - music->tic->api.draw_char(music->tic, sym, colx, rowy, colors[ColorIndexes[c]]); + music->tic->api.draw_char(music->tic, sym, colx, rowy, colors[ColorIndexes[c]], false); } } } - else music->tic->api.fixed_text(music->tic, rowStr, x, rowy, (tic_color_dark_gray)); + else music->tic->api.fixed_text(music->tic, rowStr, x, rowy, (tic_color_dark_gray), false); if (i == music->tracker.row) { @@ -1319,7 +1319,7 @@ static void drawTrackerChannel(Music* music, s32 x, s32 y, s32 channel) s32 col = music->tracker.col % CHANNEL_COLS; s32 colx = x - 1 + col * TIC_FONT_WIDTH; music->tic->api.rect(music->tic, colx, rowy - 1, TIC_FONT_WIDTH + 1, TIC_FONT_HEIGHT + 1, (tic_color_red)); - music->tic->api.draw_char(music->tic, rowStr[col], colx + 1, rowy, (tic_color_black)); + music->tic->api.draw_char(music->tic, rowStr[col], colx + 1, rowy, (tic_color_black), false); } } @@ -1520,7 +1520,7 @@ static void drawPianoLayout(Music* music) music->tic->api.clear(music->tic, (tic_color_gray)); static const char Wip[] = "PIANO MODE - WORK IN PROGRESS..."; - music->tic->api.fixed_text(music->tic, Wip, (TIC80_WIDTH - (sizeof Wip - 1) * TIC_FONT_WIDTH) / 2, TIC80_HEIGHT / 2, (tic_color_white)); + music->tic->api.fixed_text(music->tic, Wip, (TIC80_WIDTH - (sizeof Wip - 1) * TIC_FONT_WIDTH) / 2, TIC80_HEIGHT / 2, (tic_color_white), false); } static void scrollNotes(Music* music, s32 delta) diff --git a/src/sfx.c b/src/sfx.c index fe8d3e2..9413091 100644 --- a/src/sfx.c +++ b/src/sfx.c @@ -63,7 +63,7 @@ static void drawSwitch(Sfx* sfx, s32 x, s32 y, const char* label, s32 value, voi 0b00000000, }; - sfx->tic->api.text(sfx->tic, label, x, y, (tic_color_white)); + sfx->tic->api.text(sfx->tic, label, x, y, (tic_color_white), false); { x += (s32)strlen(label)*TIC_FONT_WIDTH; @@ -84,7 +84,7 @@ static void drawSwitch(Sfx* sfx, s32 x, s32 y, const char* label, s32 value, voi { char val[] = "99"; sprintf(val, "%02i", value); - sfx->tic->api.fixed_text(sfx->tic, val, x += TIC_FONT_WIDTH, y, (tic_color_white)); + sfx->tic->api.fixed_text(sfx->tic, val, x += TIC_FONT_WIDTH, y, (tic_color_white), false); } { @@ -156,7 +156,7 @@ static void setLoopSize(Sfx* sfx, s32 delta) static void drawLoopPanel(Sfx* sfx, s32 x, s32 y) { - sfx->tic->api.text(sfx->tic, "LOOP:", x, y, (tic_color_dark_gray)); + sfx->tic->api.text(sfx->tic, "LOOP:", x, y, (tic_color_dark_gray), false); enum {Gap = 2}; @@ -293,7 +293,7 @@ static void drawCanvasTabs(Sfx* sfx, s32 x, s32 y) for(s32 i = 0, sy = y; i < COUNT_OF(Labels); sy += Height, i++) { - s32 size = sfx->tic->api.text(sfx->tic, Labels[i], 0, -TIC_FONT_HEIGHT, (tic_color_black)); + s32 size = sfx->tic->api.text(sfx->tic, Labels[i], 0, -TIC_FONT_HEIGHT, (tic_color_black), false); tic_rect rect = {x - size, sy, size, TIC_FONT_HEIGHT}; @@ -307,7 +307,7 @@ static void drawCanvasTabs(Sfx* sfx, s32 x, s32 y) } } - sfx->tic->api.text(sfx->tic, Labels[i], rect.x, rect.y, i == sfx->canvasTab ? (tic_color_white) : (tic_color_dark_gray)); + sfx->tic->api.text(sfx->tic, Labels[i], rect.x, rect.y, i == sfx->canvasTab ? (tic_color_white) : (tic_color_dark_gray), false); } tic_sample* effect = getEffect(sfx); @@ -328,7 +328,7 @@ static void drawCanvasTabs(Sfx* sfx, s32 x, s32 y) effect->pitch16x++; } - sfx->tic->api.fixed_text(sfx->tic, Label, rect.x, rect.y, (effect->pitch16x ? tic_color_white : tic_color_dark_gray)); + sfx->tic->api.fixed_text(sfx->tic, Label, rect.x, rect.y, (effect->pitch16x ? tic_color_white : tic_color_dark_gray), false); } break; case SFX_ARPEGGIO_TAB: @@ -345,7 +345,7 @@ static void drawCanvasTabs(Sfx* sfx, s32 x, s32 y) effect->reverse++; } - sfx->tic->api.text(sfx->tic, Label, rect.x, rect.y, (effect->reverse ? tic_color_white : tic_color_dark_gray)); + sfx->tic->api.text(sfx->tic, Label, rect.x, rect.y, (effect->reverse ? tic_color_white : tic_color_dark_gray), false); } break; default: break; @@ -517,7 +517,7 @@ static void drawOctavePanel(Sfx* sfx, s32 x, s32 y) tic_sample* effect = getEffect(sfx); static const char Label[] = "OCT"; - sfx->tic->api.text(sfx->tic, Label, x, y, (tic_color_white)); + sfx->tic->api.text(sfx->tic, Label, x, y, (tic_color_white), false); x += sizeof(Label)*TIC_FONT_WIDTH; @@ -537,7 +537,7 @@ static void drawOctavePanel(Sfx* sfx, s32 x, s32 y) } } - sfx->tic->api.draw_char(sfx->tic, i + '1', rect.x, rect.y, (i == effect->octave ? tic_color_white : tic_color_dark_gray)); + sfx->tic->api.draw_char(sfx->tic, i + '1', rect.x, rect.y, (i == effect->octave ? tic_color_white : tic_color_dark_gray), false); } } @@ -810,7 +810,7 @@ static void drawSfxToolbar(Sfx* sfx) char buf[] = "C#4"; sprintf(buf, "%s%i", Notes[effect->note], effect->octave+1); - sfx->tic->api.fixed_text(sfx->tic, buf, x, y, (over ? tic_color_dark_gray : tic_color_light_blue)); + sfx->tic->api.fixed_text(sfx->tic, buf, x, y, (over ? tic_color_dark_gray : tic_color_light_blue), false); } drawModeTabs(sfx); diff --git a/src/sprite.c b/src/sprite.c index 155dcc2..6b5afa4 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -366,8 +366,8 @@ static void drawCanvas(Sprite* sprite, s32 x, s32 y) s32 ix = x + (CANVAS_SIZE - 4*TIC_FONT_WIDTH)/2; s32 iy = TIC_SPRITESIZE + 2; - sprite->tic->api.text(sprite->tic, buf, ix, iy+1, (tic_color_black)); - sprite->tic->api.text(sprite->tic, buf, ix, iy, (tic_color_white)); + sprite->tic->api.text(sprite->tic, buf, ix, iy+1, (tic_color_black), false); + sprite->tic->api.text(sprite->tic, buf, ix, iy, (tic_color_white), false); } sprite->tic->api.rect_border(sprite->tic, x-1, y-1, CANVAS_SIZE+2, CANVAS_SIZE+2, (tic_color_white)); @@ -692,7 +692,7 @@ static void drawRGBSlider(Sprite* sprite, s32 x, s32 y, u8* value) { char buf[] = "FF"; sprintf(buf, "%02X", *value); - sprite->tic->api.text(sprite->tic, buf, x - 18, y - 2, (tic_color_dark_gray)); + sprite->tic->api.text(sprite->tic, buf, x - 18, y - 2, (tic_color_dark_gray), false); } } @@ -1535,7 +1535,7 @@ static void drawSpriteToolbar(Sprite* sprite) static const char Label[] = "BG"; tic_rect rect = {TIC80_WIDTH - 2 * TIC_FONT_WIDTH - 2, 0, 2 * TIC_FONT_WIDTH + 1, TIC_SPRITESIZE-1}; sprite->tic->api.rect(sprite->tic, rect.x, rect.y, rect.w, rect.h, bg ? (tic_color_black) : (tic_color_gray)); - sprite->tic->api.fixed_text(sprite->tic, Label, rect.x+1, rect.y+1, (tic_color_white)); + sprite->tic->api.fixed_text(sprite->tic, Label, rect.x+1, rect.y+1, (tic_color_white), false); if(checkMousePos(&rect)) { @@ -1555,7 +1555,7 @@ static void drawSpriteToolbar(Sprite* sprite) static const char Label[] = "FG"; tic_rect rect = {TIC80_WIDTH - 4 * TIC_FONT_WIDTH - 4, 0, 2 * TIC_FONT_WIDTH + 1, TIC_SPRITESIZE-1}; sprite->tic->api.rect(sprite->tic, rect.x, rect.y, rect.w, rect.h, bg ? (tic_color_gray) : (tic_color_black)); - sprite->tic->api.fixed_text(sprite->tic, Label, rect.x+1, rect.y+1, (tic_color_white)); + sprite->tic->api.fixed_text(sprite->tic, Label, rect.x+1, rect.y+1, (tic_color_white), false); if(checkMousePos(&rect)) { diff --git a/src/start.c b/src/start.c index 8ef88bf..07a9c58 100644 --- a/src/start.c +++ b/src/start.c @@ -38,9 +38,9 @@ static void reset(Start* start) static void drawHeader(Start* start) { - start->tic->api.fixed_text(start->tic, TIC_NAME_FULL, STUDIO_TEXT_WIDTH, STUDIO_TEXT_HEIGHT, (tic_color_white)); - start->tic->api.fixed_text(start->tic, TIC_VERSION_LABEL, (sizeof(TIC_NAME_FULL) + 1) * STUDIO_TEXT_WIDTH, STUDIO_TEXT_HEIGHT, (tic_color_dark_gray)); - start->tic->api.fixed_text(start->tic, TIC_COPYRIGHT, STUDIO_TEXT_WIDTH, STUDIO_TEXT_HEIGHT*2, (tic_color_dark_gray)); + start->tic->api.fixed_text(start->tic, TIC_NAME_FULL, STUDIO_TEXT_WIDTH, STUDIO_TEXT_HEIGHT, (tic_color_white), false); + start->tic->api.fixed_text(start->tic, TIC_VERSION_LABEL, (sizeof(TIC_NAME_FULL) + 1) * STUDIO_TEXT_WIDTH, STUDIO_TEXT_HEIGHT, (tic_color_dark_gray), false); + start->tic->api.fixed_text(start->tic, TIC_COPYRIGHT, STUDIO_TEXT_WIDTH, STUDIO_TEXT_HEIGHT*2, (tic_color_dark_gray), false); } static void header(Start* start) diff --git a/src/studio.c b/src/studio.c index 3592758..aef234e 100644 --- a/src/studio.c +++ b/src/studio.c @@ -595,7 +595,7 @@ static void drawBankIcon(s32 x, s32 y) if(i == impl.bank.indexes[mode]) tic->api.rect(tic, rect.x, rect.y, rect.w, rect.h, tic_color_red); - tic->api.draw_char(tic, '0' + i, rect.x+1, rect.y+1, i == impl.bank.indexes[mode] ? tic_color_white : over ? tic_color_red : tic_color_peach); + tic->api.draw_char(tic, '0' + i, rect.x+1, rect.y+1, i == impl.bank.indexes[mode] ? tic_color_white : over ? tic_color_red : tic_color_peach, false); } @@ -764,11 +764,11 @@ void drawToolbar(tic_mem* tic, u8 color, bool bg) { if(strlen(impl.tooltip.text)) { - impl.studio.tic->api.text(tic, impl.tooltip.text, TextOffset, 1, (tic_color_black)); + impl.studio.tic->api.text(tic, impl.tooltip.text, TextOffset, 1, (tic_color_black), false); } else { - impl.studio.tic->api.text(tic, Names[mode], TextOffset, 1, (tic_color_dark_gray)); + impl.studio.tic->api.text(tic, Names[mode], TextOffset, 1, (tic_color_dark_gray), false); } } } @@ -1538,7 +1538,7 @@ static void drawPopup() impl.studio.tic->api.rect(impl.studio.tic, 0, anim, TIC80_WIDTH, TIC_FONT_HEIGHT+1, (tic_color_red)); impl.studio.tic->api.text(impl.studio.tic, impl.popup.message, (s32)(TIC80_WIDTH - strlen(impl.popup.message)*TIC_FONT_WIDTH)/2, - anim + 1, (tic_color_white)); + anim + 1, (tic_color_white), false); } } diff --git a/src/surf.c b/src/surf.c index ff504be..ab08f16 100644 --- a/src/surf.c +++ b/src/surf.c @@ -194,8 +194,8 @@ static void drawTopToolbar(Surf* surf, s32 x, s32 y) s32 xl = x + MAIN_OFFSET; s32 yl = y + (Height - TIC_FONT_HEIGHT)/2; - tic->api.text(tic, label, xl, yl+1, tic_color_black); - tic->api.text(tic, label, xl, yl, tic_color_white); + tic->api.text(tic, label, xl, yl+1, tic_color_black, false); + tic->api.text(tic, label, xl, yl, tic_color_white, false); } enum{Gap = 10, TipX = 150, SelectWidth = 54}; @@ -204,15 +204,15 @@ static void drawTopToolbar(Surf* surf, s32 x, s32 y) tic->api.sprite_ex(tic, &getConfig()->cart->bank0.tiles, 12, TipX, y+1, 1, 1, &colorkey, 1, 1, tic_no_flip, tic_no_rotate); { static const char Label[] = "SELECT"; - tic->api.text(tic, Label, TipX + Gap, y+3, tic_color_black); - tic->api.text(tic, Label, TipX + Gap, y+2, tic_color_white); + tic->api.text(tic, Label, TipX + Gap, y+3, tic_color_black, false); + tic->api.text(tic, Label, TipX + Gap, y+2, tic_color_white, false); } tic->api.sprite_ex(tic, &getConfig()->cart->bank0.tiles, 13, TipX + SelectWidth, y + 1, 1, 1, &colorkey, 1, 1, tic_no_flip, tic_no_rotate); { static const char Label[] = "BACK"; - tic->api.text(tic, Label, TipX + Gap + SelectWidth, y +3, tic_color_black); - tic->api.text(tic, Label, TipX + Gap + SelectWidth, y +2, tic_color_white); + tic->api.text(tic, Label, TipX + Gap + SelectWidth, y +3, tic_color_black, false); + tic->api.text(tic, Label, TipX + Gap + SelectWidth, y +2, tic_color_white, false); } } @@ -232,8 +232,8 @@ static void drawBottomToolbar(Surf* surf, s32 x, s32 y) sprintf(label, "/%s", dir); s32 xl = x + MAIN_OFFSET; s32 yl = y + (Height - TIC_FONT_HEIGHT)/2; - tic->api.text(tic, label, xl, yl+1, tic_color_black); - tic->api.text(tic, label, xl, yl, tic_color_white); + tic->api.text(tic, label, xl, yl+1, tic_color_black, false); + tic->api.text(tic, label, xl, yl, tic_color_white, false); } #ifdef CAN_OPEN_URL @@ -247,8 +247,8 @@ static void drawBottomToolbar(Surf* surf, s32 x, s32 y) tic->api.sprite_ex(tic, &getConfig()->cart->bank0.tiles, 15, TipX + SelectWidth, y + 1, 1, 1, &colorkey, 1, 1, tic_no_flip, tic_no_rotate); { static const char Label[] = "WEBSITE"; - tic->api.text(tic, Label, TipX + Gap + SelectWidth, y +3, tic_color_black); - tic->api.text(tic, Label, TipX + Gap + SelectWidth, y +2, tic_color_white); + tic->api.text(tic, Label, TipX + Gap + SelectWidth, y +3, tic_color_black, false); + tic->api.text(tic, Label, TipX + Gap + SelectWidth, y +2, tic_color_white, false); } } #endif @@ -331,14 +331,14 @@ static void drawMenu(Surf* surf, s32 x, s32 y, bool bg) if(bg) { - s32 size = tic->api.text(tic, name, 0, -TIC_FONT_HEIGHT, 0); + s32 size = tic->api.text(tic, name, 0, -TIC_FONT_HEIGHT, 0, false); drawInverseRect(tic, x + MAIN_OFFSET - 1, ym-1, size+1, TIC_FONT_HEIGHT+2); } else { - tic->api.text(tic, name, x + MAIN_OFFSET, ym + 1, tic_color_black); - tic->api.text(tic, name, x + MAIN_OFFSET, ym, tic_color_white); + tic->api.text(tic, name, x + MAIN_OFFSET, ym + 1, tic_color_black, false); + tic->api.text(tic, name, x + MAIN_OFFSET, ym, tic_color_white, false); } } } @@ -837,8 +837,8 @@ static void tick(Surf* surf) else { static const char Label[] = "You don't have any files..."; - s32 size = tic->api.text(tic, Label, 0, -TIC_FONT_HEIGHT, tic_color_white); - tic->api.text(tic, Label, (TIC80_WIDTH - size) / 2, (TIC80_HEIGHT - TIC_FONT_HEIGHT)/2, tic_color_white); + s32 size = tic->api.text(tic, Label, 0, -TIC_FONT_HEIGHT, tic_color_white, false); + tic->api.text(tic, Label, (TIC80_WIDTH - size) / 2, (TIC80_HEIGHT - TIC_FONT_HEIGHT)/2, tic_color_white, false); } } diff --git a/src/tic.c b/src/tic.c index 4257ec3..269953b 100644 --- a/src/tic.c +++ b/src/tic.c @@ -615,25 +615,25 @@ static void api_clear(tic_mem* memory, u8 color) } } -static s32 drawChar(tic_mem* memory, u8 symbol, s32 x, s32 y, s32 width, s32 height, u8 color, s32 scale) +static s32 drawChar(tic_mem* memory, u8 symbol, s32 x, s32 y, s32 width, s32 height, u8 color, s32 scale, bool alt) { - const u8* ptr = memory->font.data + symbol*BITS_IN_BYTE; + const u8* ptr = memory->font.data + (symbol + (alt ? TIC_FONT_CHARS / 2 : 0))*BITS_IN_BYTE; x += (BITS_IN_BYTE - 1)*scale; for(s32 i = 0, ys = y; i < TIC_FONT_HEIGHT; i++, ptr++, ys += scale) - for(s32 col = BITS_IN_BYTE - TIC_FONT_WIDTH, xs = x - col; col < BITS_IN_BYTE; col++, xs -= scale) + for(s32 col = BITS_IN_BYTE - (alt ? TIC_ALTFONT_WIDTH : TIC_FONT_WIDTH), xs = x - col; col < BITS_IN_BYTE; col++, xs -= scale) if(*ptr & 1 << col) api_rect(memory, xs, ys, scale, scale, color); - return TIC_FONT_WIDTH*scale; + return (alt ? TIC_ALTFONT_WIDTH : TIC_FONT_WIDTH)*scale; } -static s32 api_draw_char(tic_mem* memory, u8 symbol, s32 x, s32 y, u8 color) +static s32 api_draw_char(tic_mem* memory, u8 symbol, s32 x, s32 y, u8 color, bool alt) { - return drawChar(memory, symbol, x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT, color, 1); + return drawChar(memory, symbol, x, y, alt ? TIC_ALTFONT_WIDTH : TIC_FONT_WIDTH, TIC_FONT_HEIGHT, color, 1, alt); } -s32 drawText(tic_mem* memory, const char* text, s32 x, s32 y, s32 width, s32 height, u8 color, s32 scale, DrawCharFunc* func) +s32 drawText(tic_mem* memory, const char* text, s32 x, s32 y, s32 width, s32 height, u8 color, s32 scale, DrawCharFunc* func, bool alt) { s32 pos = x; s32 max = x; @@ -649,26 +649,28 @@ s32 drawText(tic_mem* memory, const char* text, s32 x, s32 y, s32 width, s32 hei pos = x; y += height * scale; } - else pos += func(memory, sym, pos, y, width, height, color, scale); + else pos += func(memory, sym, pos, y, width, height, color, scale, alt); } return pos > max ? pos - x : max - x; } -static s32 api_fixed_text(tic_mem* memory, const char* text, s32 x, s32 y, u8 color) +static s32 api_fixed_text(tic_mem* memory, const char* text, s32 x, s32 y, u8 color, bool alt) { - return drawText(memory, text, x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT, color, 1, drawChar); + return drawText(memory, text, x, y, alt ? TIC_ALTFONT_WIDTH : TIC_FONT_WIDTH, TIC_FONT_HEIGHT, color, 1, drawChar, alt); } -static s32 drawNonFixedChar(tic_mem* memory, u8 symbol, s32 x, s32 y, s32 width, s32 height, u8 color, s32 scale) +static s32 drawNonFixedChar(tic_mem* memory, u8 symbol, s32 x, s32 y, s32 width, s32 height, u8 color, s32 scale, bool alt) { - const u8* ptr = memory->font.data + (symbol)*BITS_IN_BYTE; + const u8* ptr = memory->font.data + (symbol)*BITS_IN_BYTE + (alt ? TIC_FONT_CHARS / 2 : 0); + + const s32 FontWidth = alt ? TIC_ALTFONT_WIDTH : TIC_FONT_WIDTH; s32 start = 0; - s32 end = TIC_FONT_WIDTH; + s32 end = FontWidth; s32 i = 0; - for(s32 col = 0; col < TIC_FONT_WIDTH; col++) + for(s32 col = 0; col < FontWidth; col++) { for(i = 0; i < TIC_FONT_HEIGHT; i++) if(*(ptr + i) & 0b10000000 >> col) break; @@ -678,7 +680,7 @@ static s32 drawNonFixedChar(tic_mem* memory, u8 symbol, s32 x, s32 y, s32 width, x -= start * scale; - for(s32 col = TIC_FONT_WIDTH - 1; col >= start; col--) + for(s32 col = FontWidth - 1; col >= start; col--) { for(i = 0; i < TIC_FONT_HEIGHT; i++) if(*(ptr + i) & 0b10000000 >> col) break; @@ -692,17 +694,17 @@ static s32 drawNonFixedChar(tic_mem* memory, u8 symbol, s32 x, s32 y, s32 width, api_rect(memory, xs, ys, scale, scale, color); s32 size = end - start; - return (size ? size + 1 : TIC_FONT_WIDTH - 2) * scale; + return (size ? size + 1 : FontWidth - 2) * scale; } -static s32 api_text(tic_mem* memory, const char* text, s32 x, s32 y, u8 color) +static s32 api_text(tic_mem* memory, const char* text, s32 x, s32 y, u8 color, bool alt) { - return drawText(memory, text, x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT, color, 1, drawNonFixedChar); + return drawText(memory, text, x, y, alt ? TIC_ALTFONT_WIDTH : TIC_FONT_WIDTH, TIC_FONT_HEIGHT, color, 1, drawNonFixedChar, alt); } -static s32 api_text_ex(tic_mem* memory, const char* text, s32 x, s32 y, u8 color, bool fixed, s32 scale) +static s32 api_text_ex(tic_mem* memory, const char* text, s32 x, s32 y, u8 color, bool fixed, s32 scale, bool alt) { - return drawText(memory, text, x, y, TIC_FONT_WIDTH, TIC_FONT_HEIGHT, color, scale, fixed ? drawChar : drawNonFixedChar); + return drawText(memory, text, x, y, alt ? TIC_ALTFONT_WIDTH : TIC_FONT_WIDTH, TIC_FONT_HEIGHT, color, scale, fixed ? drawChar : drawNonFixedChar, alt); } static void drawSprite(tic_mem* memory, const tic_tiles* src, s32 index, s32 x, s32 y, u8* colors, s32 count, s32 scale, tic_flip flip, tic_rotate rotate) @@ -753,14 +755,14 @@ static void api_sprite_ex(tic_mem* memory, const tic_tiles* src, s32 index, s32 } } -s32 drawSpriteFont(tic_mem* memory, u8 symbol, s32 x, s32 y, s32 width, s32 height, u8 chromakey, s32 scale) +s32 drawSpriteFont(tic_mem* memory, u8 symbol, s32 x, s32 y, s32 width, s32 height, u8 chromakey, s32 scale, bool alt) { api_sprite_ex(memory, &memory->ram.sprites, symbol, x, y, 1, 1, &chromakey, 1, scale, tic_no_flip, tic_no_rotate); return width * scale; } -s32 drawFixedSpriteFont(tic_mem* memory, u8 index, s32 x, s32 y, s32 width, s32 height, u8 chromakey, s32 scale) +s32 drawFixedSpriteFont(tic_mem* memory, u8 index, s32 x, s32 y, s32 width, s32 height, u8 chromakey, s32 scale, bool alt) { const u8* ptr = memory->ram.sprites.data[index].data; diff --git a/src/tic.h b/src/tic.h index 6b4357d..8502184 100644 --- a/src/tic.h +++ b/src/tic.h @@ -55,6 +55,7 @@ #define TIC_RAM_SIZE (80*1024) //80K #define TIC_FONT_WIDTH 6 #define TIC_FONT_HEIGHT 6 +#define TIC_ALTFONT_WIDTH 4 #define TIC_PALETTE_BPP 4 #define TIC_PALETTE_SIZE (1 << TIC_PALETTE_BPP) #define TIC_FRAMERATE 60 @@ -111,7 +112,7 @@ #define TIC_GAMEPADS (sizeof(tic80_gamepads) / sizeof(tic80_gamepad)) #define SFX_NOTES {"C-", "C#", "D-", "D#", "E-", "F-", "F#", "G-", "G#", "A-", "A#", "B-"} -#define TIC_FONT_CHARS 128 +#define TIC_FONT_CHARS 256 enum { diff --git a/src/ticapi.h b/src/ticapi.h index d7489e4..66f21f0 100644 --- a/src/ticapi.h +++ b/src/ticapi.h @@ -121,10 +121,10 @@ struct tic_script_config typedef struct { - s32 (*draw_char) (tic_mem* memory, u8 symbol, s32 x, s32 y, u8 color); - s32 (*text) (tic_mem* memory, const char* text, s32 x, s32 y, u8 color); - s32 (*fixed_text) (tic_mem* memory, const char* text, s32 x, s32 y, u8 color); - s32 (*text_ex) (tic_mem* memory, const char* text, s32 x, s32 y, u8 color, bool fixed, s32 scale); + s32 (*draw_char) (tic_mem* memory, u8 symbol, s32 x, s32 y, u8 color, bool alt); + s32 (*text) (tic_mem* memory, const char* text, s32 x, s32 y, u8 color, bool alt); + s32 (*fixed_text) (tic_mem* memory, const char* text, s32 x, s32 y, u8 color, bool alt); + s32 (*text_ex) (tic_mem* memory, const char* text, s32 x, s32 y, u8 color, bool fixed, s32 scale, bool alt); void (*clear) (tic_mem* memory, u8 color); void (*pixel) (tic_mem* memory, s32 x, s32 y, u8 color); u8 (*get_pixel) (tic_mem* memory, s32 x, s32 y); diff --git a/src/wrenapi.c b/src/wrenapi.c index edbfc6f..2267ef2 100644 --- a/src/wrenapi.c +++ b/src/wrenapi.c @@ -397,7 +397,9 @@ static void wren_print(WrenVM* vm) return; } - s32 size = memory->api.text_ex(memory, text, x, y, color, fixed, scale); + bool alt = wrenGetSlotBool(vm, 7); + + s32 size = memory->api.text_ex(memory, text, x, y, color, fixed, scale, alt); wrenSetSlotDouble(vm, 0, size); } @@ -422,6 +424,7 @@ static void wren_font(WrenVM* vm) u8 chromakey = 0; bool fixed = false; s32 scale = 1; + bool alt = false; if(top > 3) { @@ -444,6 +447,11 @@ static void wren_font(WrenVM* vm) if(top > 8) { scale = getWrenNumber(vm, 8); + + if(top > 9) + { + alt = wrenGetSlotBool(vm, 9); + } } } } @@ -456,7 +464,7 @@ static void wren_font(WrenVM* vm) return; } - s32 size = drawText(memory, text ? text : "null", x, y, width, height, chromakey, scale, fixed ? drawSpriteFont : drawFixedSpriteFont); + s32 size = drawText(memory, text ? text : "null", x, y, width, height, chromakey, scale, fixed ? drawSpriteFont : drawFixedSpriteFont, alt); wrenSetSlotDouble(vm, 0, size); } }