Compare commits

..

10 Commits

Author SHA1 Message Date
Andrew Pamment
8917268ba5 hide pointer 2023-05-21 22:18:53 +10:00
Andrew Pamment
eda050ebfc Update for new libquinn 2023-05-16 20:28:15 +10:00
Andrew Pamment
2d954b221a Updates for libquinn 2021-12-25 10:24:49 +10:00
Andrew Pamment
88c739b468 Remove yield 2021-12-23 10:46:33 +10:00
Andrew Pamment
e4ac10e53f Add loading screen.. 2021-12-14 13:49:53 +10:00
Andrew Pamment
467523db17 Change output to qdoom 2021-12-12 10:28:36 +10:00
Andrew Pamment
64a5496557 Add quinn bits! 2021-12-12 10:24:52 +10:00
ozkl
2d9b24f07c soso nano-x port 2021-02-28 20:44:35 +03:00
ozkl
2019640bd6 doom soso port update 2021-02-28 19:12:01 +03:00
ozkl
0f488ee086 clang istead of gcc 2020-12-12 18:00:29 +03:00
11 changed files with 2129 additions and 12 deletions

View File

@ -12,7 +12,7 @@ else
endif
CC=gcc # gcc or g++
CC=clang # gcc or g++
CFLAGS+=-ggdb3 -Os
LDFLAGS+=-Wl,--gc-sections
CFLAGS+=-ggdb3 -Wall -DNORMALUNIX -DLINUX -DSNDSERV -D_DEFAULT_SOURCE # -DUSEASM

View File

@ -0,0 +1,51 @@
################################################################
#
# $Id:$
#
# $Log:$
#
ifeq ($(V),1)
VB=''
else
VB=@
endif
CC=i686-quinn-gcc # gcc or g++
CFLAGS+=-O3
#LDFLAGS+=$(SOSO_ROOT)/lib/crt1.o $(SOSO_ROOT)/lib/crti.o $(SOSO_ROOT)/lib/crtn.o
CFLAGS+=-Wall -D_DEFAULT_SOURCE # -DUSEASM
LIBS+= -lquinn -lfreetype -lpng -lz -lm
# subdirectory for objects
OBJDIR=build
OUTPUT=qdoom.exe
SRC_DOOM = i_main.o dummy.o am_map.o doomdef.o doomstat.o dstrings.o d_event.o d_items.o d_iwad.o d_loop.o d_main.o d_mode.o d_net.o f_finale.o f_wipe.o g_game.o hu_lib.o hu_stuff.o info.o i_cdmus.o i_endoom.o i_joystick.o i_scale.o i_sound.o i_system.o i_timer.o memio.o m_argv.o m_bbox.o m_cheat.o m_config.o m_controls.o m_fixed.o m_menu.o m_misc.o m_random.o p_ceilng.o p_doors.o p_enemy.o p_floor.o p_inter.o p_lights.o p_map.o p_maputl.o p_mobj.o p_plats.o p_pspr.o p_saveg.o p_setup.o p_sight.o p_spec.o p_switch.o p_telept.o p_tick.o p_user.o r_bsp.o r_data.o r_draw.o r_main.o r_plane.o r_segs.o r_sky.o r_things.o sha1.o sounds.o statdump.o st_lib.o st_stuff.o s_sound.o tables.o v_video.o wi_stuff.o w_checksum.o w_file.o w_main.o w_wad.o z_zone.o w_file_stdc.o i_input.o i_video.o doomgeneric.o doomgeneric_quinn.o
OBJS += $(addprefix $(OBJDIR)/, $(SRC_DOOM))
all: $(OUTPUT)
clean:
rm -rf $(OBJDIR)
rm -f $(OUTPUT)
rm -f $(OUTPUT).gdb
rm -f $(OUTPUT).map
$(OUTPUT): $(OBJS)
@echo [Linking $@]
i686-quinn-gcc -v $(LDFLAGS) $(OBJS) -o $(OUTPUT) $(LIBS)
$(OBJS): | $(OBJDIR)
$(OBJDIR):
mkdir -p $(OBJDIR)
$(OBJDIR)/%.o: %.c
@echo [Compiling $<]
$(VB)$(CC) $(CFLAGS) -c $< -o $@
print:
@echo OBJS: $(OBJS)

View File

@ -12,11 +12,11 @@ else
endif
SDL_CFLAGS = -D_THREAD_SAFE -I/usr/local/Cellar/sdl2/2.0.10/include/SDL2
SDL_LIBS = -L/usr/local/Cellar/sdl2/2.0.10/lib -lSDL2
SDL_CFLAGS = -D_THREAD_SAFE -I/usr/include/SDL2
SDL_LIBS =
CC=gcc # gcc or g++
CC=clang # gcc or g++
CFLAGS+=-ggdb3 -Os $(INCLUDES) $(SDL_CFLAGS)
LDFLAGS+=-Wl,-dead_strip
CFLAGS+=-ggdb3 -Wall -DNORMALUNIX -DLINUX -DSNDSERV # -DUSEASM

View File

@ -16,11 +16,11 @@ CC=soso-clang # gcc or g++
CFLAGS+=-O3
LDFLAGS+=$(SOSO_ROOT)/lib/crt1.o $(SOSO_ROOT)/lib/crti.o $(SOSO_ROOT)/lib/crtn.o
CFLAGS+=-Wall -DNORMALUNIX -DLINUX -DSNDSERV -D_DEFAULT_SOURCE # -DUSEASM
LIBS+=-lsosousdk -lm -lc /usr/lib/llvm-10/lib/clang/10.0.0/lib/linux/libclang_rt.builtins-i386.a
LIBS+=-lm -lc /usr/lib/llvm-10/lib/clang/10.0.0/lib/linux/libclang_rt.builtins-i386.a
# subdirectory for objects
OBJDIR=build
OUTPUT=doom-soso
OUTPUT=fbdoom
SRC_DOOM = i_main.o dummy.o am_map.o doomdef.o doomstat.o dstrings.o d_event.o d_items.o d_iwad.o d_loop.o d_main.o d_mode.o d_net.o f_finale.o f_wipe.o g_game.o hu_lib.o hu_stuff.o info.o i_cdmus.o i_endoom.o i_joystick.o i_scale.o i_sound.o i_system.o i_timer.o memio.o m_argv.o m_bbox.o m_cheat.o m_config.o m_controls.o m_fixed.o m_menu.o m_misc.o m_random.o p_ceilng.o p_doors.o p_enemy.o p_floor.o p_inter.o p_lights.o p_map.o p_maputl.o p_mobj.o p_plats.o p_pspr.o p_saveg.o p_setup.o p_sight.o p_spec.o p_switch.o p_telept.o p_tick.o p_user.o r_bsp.o r_data.o r_draw.o r_main.o r_plane.o r_segs.o r_sky.o r_things.o sha1.o sounds.o statdump.o st_lib.o st_stuff.o s_sound.o tables.o v_video.o wi_stuff.o w_checksum.o w_file.o w_main.o w_wad.o z_zone.o w_file_stdc.o i_input.o i_video.o doomgeneric.o doomgeneric_soso.o
OBJS += $(addprefix $(OBJDIR)/, $(SRC_DOOM))

View File

@ -0,0 +1,54 @@
################################################################
#
# $Id:$
#
# $Log:$
#
ifeq ($(V),1)
VB=''
else
VB=@
endif
CC=soso-clang # gcc or g++
CFLAGS+=-O3
LDFLAGS+=$(SOSO_ROOT)/lib/crt1.o $(SOSO_ROOT)/lib/crti.o $(SOSO_ROOT)/lib/crtn.o
CFLAGS+=-I$(SOSO_ROOT)/include/nano-x -Wall -DNORMALUNIX -DLINUX -DSNDSERV -D_DEFAULT_SOURCE # -DUSEASM
LIBS+=-lnano-X -lm -lc /usr/lib/llvm-10/lib/clang/10.0.0/lib/linux/libclang_rt.builtins-i386.a
# subdirectory for objects
OBJDIR=build
OUTPUT=doom
SRC_DOOM = i_main.o dummy.o am_map.o doomdef.o doomstat.o dstrings.o d_event.o d_items.o d_iwad.o d_loop.o d_main.o d_mode.o d_net.o f_finale.o f_wipe.o g_game.o hu_lib.o hu_stuff.o info.o i_cdmus.o i_endoom.o i_joystick.o i_scale.o i_sound.o i_system.o i_timer.o memio.o m_argv.o m_bbox.o m_cheat.o m_config.o m_controls.o m_fixed.o m_menu.o m_misc.o m_random.o p_ceilng.o p_doors.o p_enemy.o p_floor.o p_inter.o p_lights.o p_map.o p_maputl.o p_mobj.o p_plats.o p_pspr.o p_saveg.o p_setup.o p_sight.o p_spec.o p_switch.o p_telept.o p_tick.o p_user.o r_bsp.o r_data.o r_draw.o r_main.o r_plane.o r_segs.o r_sky.o r_things.o sha1.o sounds.o statdump.o st_lib.o st_stuff.o s_sound.o tables.o v_video.o wi_stuff.o w_checksum.o w_file.o w_main.o w_wad.o z_zone.o w_file_stdc.o i_input.o i_video.o doomgeneric.o doomgeneric_sosox.o
OBJS += $(addprefix $(OBJDIR)/, $(SRC_DOOM))
all: $(OUTPUT)
clean:
rm -rf $(OBJDIR)
rm -f $(OUTPUT)
rm -f $(OUTPUT).gdb
rm -f $(OUTPUT).map
$(OUTPUT): $(OBJS)
@echo [Linking $@]
i386-soso-ld -v $(LDFLAGS) $(OBJS) -o $(OUTPUT) $(LIBS)
@echo [Size]
-$(CROSS_COMPILE)size $(OUTPUT)
cp $(OUTPUT) ~/git/soso/userspace/bin/
$(OBJS): | $(OBJDIR)
$(OBJDIR):
mkdir -p $(OBJDIR)
$(OBJDIR)/%.o: %.c
@echo [Compiling $<]
$(VB)$(CC) $(CFLAGS) -c $< -o $@
print:
@echo OBJS: $(OBJS)

869
doomgeneric/doom.xpm Normal file
View File

@ -0,0 +1,869 @@
/* XPM */
static char * doom_xpm[] = {
"64 64 802 2",
" c None",
". c #2E3C64",
"+ c #313E65",
"@ c #8D8779",
"# c #747171",
"$ c #847F75",
"% c #8F8879",
"& c #505469",
"* c #A89D82",
"= c #CCBF8F",
"- c #E1D198",
"; c #344164",
"> c #777272",
", c #B3A886",
"' c #C8BB8D",
") c #9E967D",
"! c #EDDC9D",
"~ c #908878",
"{ c #BAAF88",
"] c #EBDA9C",
"^ c #374365",
"/ c #4A4F68",
"( c #DFCF97",
"_ c #59596A",
": c #ADA384",
"< c #A39A7F",
"[ c #878276",
"} c #E0D097",
"| c #4C5169",
"1 c #787572",
"2 c #ECDB9C",
"3 c #E0D197",
"4 c #C4B78C",
"5 c #55566A",
"6 c #968F7C",
"7 c #444D67",
"8 c #E9D99B",
"9 c #CEC090",
"0 c #3A4165",
"a c #C6B98D",
"b c #A79E80",
"c c #E8D89B",
"d c #B1A684",
"e c #424766",
"f c #60606C",
"g c #E3D499",
"h c #66666E",
"i c #C8BA8E",
"j c #464965",
"k c #3D385D",
"l c #483355",
"m c #4F2F4E",
"n c #552B46",
"o c #59283F",
"p c #5C253A",
"q c #5D2438",
"r c #5D253A",
"s c #58273E",
"t c #542A45",
"u c #4C304F",
"v c #42365A",
"w c #323B62",
"x c #575769",
"y c #D6C893",
"z c #958D7A",
"A c #8A8377",
"B c #EBDB9C",
"C c #D1C492",
"D c #535769",
"E c #7E7973",
"F c #D3C592",
"G c #D5C693",
"H c #DDCD96",
"I c #5D5D6C",
"J c #8C8678",
"K c #D4B684",
"L c #6B1414",
"M c #6B1415",
"N c #7F3934",
"O c #E1CB92",
"P c #E6D69B",
"Q c #464B68",
"R c #777472",
"S c #E7D69A",
"T c #D7C893",
"U c #98917C",
"V c #C1B38B",
"W c #C7BA8D",
"X c #948C7B",
"Y c #767371",
"Z c #3B395E",
"` c #5E273D",
" . c #D6B985",
".. c #BF956D",
"+. c #80352B",
"@. c #B08F70",
"#. c #848076",
"$. c #4E5268",
"%. c #D6C793",
"&. c #817C74",
"*. c #A2987E",
"=. c #CABF90",
"-. c #DCCD96",
";. c #EAD79A",
">. c #AA7657",
",. c #701C1A",
"'. c #8F4B3A",
"). c #B98C66",
"!. c #AE7B5B",
"~. c #74231E",
"{. c #A77154",
"]. c #D9BD88",
"^. c #DBBF89",
"/. c #772721",
"(. c #751D1F",
"_. c #B0866A",
":. c #B7AC88",
"<. c #585C6A",
"[. c #D8C995",
"}. c #9A927C",
"|. c #E5CF94",
"1. c #84392E",
"2. c #9C5F47",
"3. c #DFC78E",
"4. c #5A5D6B",
"5. c #69666E",
"6. c #DECE96",
"7. c #CFC091",
"8. c #CBBD8E",
"9. c #DCCC96",
"0. c #6A676F",
"a. c #333D63",
"b. c #D2B988",
"c. c #8C4737",
"d. c #C39B71",
"e. c #B28B6D",
"f. c #313C63",
"g. c #7A7773",
"h. c #E4D499",
"i. c #9B937D",
"j. c #797773",
"k. c #E7D79B",
"l. c #622C47",
"m. c #8E372D",
"n. c #E9D79A",
"o. c #E8D497",
"p. c #75231F",
"q. c #B38460",
"r. c #DBBD88",
"s. c #7F1C1A",
"t. c #622B45",
"u. c #E9D89B",
"v. c #E1D199",
"w. c #3F4566",
"x. c #C5B88C",
"y. c #74555F",
"z. c #7B1717",
"A. c #B47A5A",
"B. c #E0C78F",
"C. c #97513E",
"D. c #6D1414",
"E. c #6B1515",
"F. c #701515",
"G. c #842A24",
"H. c #DABB87",
"I. c #974637",
"J. c #75525D",
"K. c #D0C291",
"L. c #9D967E",
"M. c #CEA679",
"N. c #A55E48",
"O. c #892F27",
"P. c #9D513E",
"Q. c #903C30",
"R. c #7D1A19",
"S. c #7B1616",
"T. c #771717",
"U. c #721515",
"V. c #6E1515",
"W. c #711515",
"X. c #751616",
"Y. c #791717",
"Z. c #9C503E",
"`. c #B27758",
" + c #A9674D",
".+ c #974838",
"++ c #C79B71",
"@+ c #EBD99B",
"#+ c #988F7B",
"$+ c #872C26",
"%+ c #741616",
"&+ c #761616",
"*+ c #771616",
"=+ c #791616",
"-+ c #7A1717",
";+ c #A7634A",
">+ c #E7D195",
",+ c #E8D79B",
"'+ c #6A6A6F",
")+ c #BFB38A",
"!+ c #C5976E",
"~+ c #9B917D",
"{+ c #D3C591",
"]+ c #934134",
"^+ c #BCB089",
"/+ c #DCC38D",
"(+ c #E0C58E",
"_+ c #7F1B1A",
":+ c #AC6C51",
"<+ c #CAA77B",
"[+ c #323B61",
"}+ c #813530",
"|+ c #E5CB91",
"1+ c #E1C68E",
"2+ c #9B3F33",
"3+ c #871818",
"4+ c #811818",
"5+ c #7D1818",
"6+ c #8A1E1C",
"7+ c #D4AB7C",
"8+ c #D9B482",
"9+ c #792121",
"0+ c #37395D",
"a+ c #4B2C46",
"b+ c #651A1A",
"c+ c #9E4336",
"d+ c #E5CD93",
"e+ c #D4AA7B",
"f+ c #B26B51",
"g+ c #8D2320",
"h+ c #881919",
"i+ c #861919",
"j+ c #7F1717",
"k+ c #7C1717",
"l+ c #7E1717",
"m+ c #8A1C1B",
"n+ c #DBBA86",
"o+ c #E1C48D",
"p+ c #912C26",
"q+ c #691A1A",
"r+ c #4F293E",
"s+ c #343A60",
"t+ c #591C20",
"u+ c #5A1A1A",
"v+ c #7C1919",
"w+ c #841818",
"x+ c #831818",
"y+ c #801818",
"z+ c #801717",
"A+ c #7F1818",
"B+ c #7E1818",
"C+ c #821818",
"D+ c #851818",
"E+ c #912B25",
"F+ c #932D27",
"G+ c #7F1919",
"H+ c #5B1A1A",
"I+ c #5A1A1B",
"J+ c #39375C",
"K+ c #492E49",
"L+ c #5E1A1A",
"M+ c #811919",
"N+ c #831919",
"O+ c #601A1A",
"P+ c #4D2A41",
"Q+ c #2F3C64",
"R+ c #561F2A",
"S+ c #5C1A1A",
"T+ c #791A1A",
"U+ c #7D1919",
"V+ c #5F1A1A",
"W+ c #591C1F",
"X+ c #313B62",
"Y+ c #3E3558",
"Z+ c #6B1A1A",
"`+ c #821919",
" @ c #6E1A1A",
".@ c #433252",
"+@ c #4C2C44",
"@@ c #641C1C",
"#@ c #5B1919",
"$@ c #6D1919",
"%@ c #6F1919",
"&@ c #51273C",
"*@ c #562230",
"=@ c #B13333",
"-@ c #8F2929",
";@ c #621A1A",
">@ c #721A1A",
",@ c #871B1A",
"'@ c #741A1A",
")@ c #631A1A",
"!@ c #601B1B",
"~@ c #932A2A",
"{@ c #631F24",
"]@ c #2E3C63",
"^@ c #671D1E",
"/@ c #B63434",
"(@ c #8A2828",
"_@ c #59291D",
":@ c #54BD3A",
"<@ c #609733",
"[@ c #6C702A",
"}@ c #755625",
"|@ c #7C3F21",
"1@ c #83281C",
"2@ c #84251B",
"3@ c #7D3C20",
"4@ c #755425",
"5@ c #6D6D2A",
"6@ c #619331",
"7@ c #595D27",
"8@ c #5D1B1B",
"9@ c #A02E2E",
"0@ c #7B2424",
"a@ c #3B375A",
"b@ c #3D3557",
"c@ c #762121",
"d@ c #842626",
"e@ c #593D21",
"f@ c #51C63C",
"g@ c #53BF3B",
"h@ c #57B238",
"i@ c #22260E",
"j@ c #1B0505",
"k@ c #210606",
"l@ c #220606",
"m@ c #427225",
"n@ c #58B138",
"o@ c #53BE3A",
"p@ c #55752C",
"q@ c #9C2C2C",
"r@ c #892828",
"s@ c #433251",
"t@ c #45314F",
"u@ c #832525",
"v@ c #B53434",
"w@ c #7F2424",
"x@ c #584923",
"y@ c #0B1C08",
"z@ c #000000",
"A@ c #307423",
"B@ c #55822E",
"C@ c #5B1B1B",
"D@ c #972C2C",
"E@ c #492D48",
"F@ c #492D47",
"G@ c #8D2929",
"H@ c #7D2424",
"I@ c #593B21",
"J@ c #0D210A",
"K@ c #327B25",
"L@ c #56732C",
"M@ c #952A2A",
"N@ c #A42F2F",
"O@ c #4E283E",
"P@ c #4C2B43",
"Q@ c #922929",
"R@ c #8B2828",
"S@ c #59271C",
"T@ c #51C53C",
"U@ c #132F0E",
"V@ c #388929",
"W@ c #565E28",
"X@ c #962B2B",
"Y@ c #AA3030",
"Z@ c #51263A",
"`@ c #4E2940",
" # c #952B2B",
".# c #9B2C2C",
"+# c #651D1D",
"@# c #53A235",
"## c #193D12",
"$# c #3D962D",
"%# c #592E1E",
"&# c #631D1D",
"*# c #A22F2F",
"=# c #AE3232",
"-# c #532435",
";# c #4F293F",
"># c #9A2C2C",
",# c #B43434",
"'# c #982B2B",
")# c #872626",
"!# c #7C2323",
"~# c #566729",
"{# c #27601D",
"]# c #000100",
"^# c #4BB838",
"/# c #53A135",
"(# c #671E1E",
"_# c #882727",
":# c #B23232",
"<# c #B33333",
"[# c #532535",
"}# c #4D2A42",
"|# c #792222",
"1# c #5A201B",
"2# c #52B238",
"3# c #398D2B",
"4# c #9C2D2D",
"5# c #512639",
"6# c #922A2A",
"7# c #912929",
"8# c #661C1C",
"9# c #665729",
"0# c #4DBB39",
"a# c #030802",
"b# c #23561A",
"c# c #5F8D32",
"d# c #762020",
"e# c #6B1D1D",
"f# c #752121",
"g# c #4F283D",
"h# c #47304D",
"i# c #9D2C2C",
"j# c #812424",
"k# c #7B2121",
"l# c #65752F",
"m# c #24581B",
"n# c #030702",
"o# c #46AC34",
"p# c #59A536",
"q# c #792923",
"r# c #852424",
"s# c #B23333",
"t# c #4B2C45",
"u# c #3F3455",
"v# c #822626",
"w# c #A63030",
"x# c #842525",
"y# c #6A632C",
"z# c #52C43C",
"A# c #4FC13B",
"B# c #2A671F",
"C# c #3D942D",
"D# c #5D9734",
"E# c #782C23",
"F# c #7F2222",
"G# c #972A2A",
"H# c #45314E",
"I# c #742222",
"J# c #7D2121",
"K# c #704B28",
"L# c #5AA537",
"M# c #55B93A",
"N# c #696A2D",
"O# c #7B2321",
"P# c #792020",
"Q# c #65222A",
"R# c #1C0707",
"S# c #230909",
"T# c #481313",
"U# c #6E1E1E",
"V# c #7B2221",
"W# c #6F5028",
"X# c #618531",
"Y# c #55B339",
"Z# c #51C43B",
"`# c #54BB3A",
" $ c #5D9634",
".$ c #6A642C",
"+$ c #782A22",
"@$ c #552620",
"#$ c #7B6D4E",
"$$ c #332F22",
"%$ c #712020",
"&$ c #882728",
"*$ c #4E293F",
"=$ c #AC3131",
"-$ c #B43333",
";$ c #120505",
">$ c #504A35",
",$ c #C4B682",
"'$ c #574F39",
")$ c #1B0707",
"!$ c #411111",
"~$ c #7B2322",
"{$ c #773023",
"]$ c #7A2622",
"^$ c #7A2121",
"/$ c #611A1A",
"($ c #3D1513",
"_$ c #0D0504",
":$ c #A99D70",
"<$ c #A5996D",
"[$ c #0C0303",
"}$ c #722733",
"|$ c #413252",
"1$ c #8D2828",
"2$ c #9C9167",
"3$ c #C5B783",
"4$ c #1E1C14",
"5$ c #797050",
"6$ c #1D1B13",
"7$ c #050101",
"8$ c #2A1411",
"9$ c #3B1010",
"0$ c #4E1515",
"a$ c #741F1F",
"b$ c #731F1F",
"c$ c #5F1919",
"d$ c #4F1C19",
"e$ c #795D44",
"f$ c #382C20",
"g$ c #47422F",
"h$ c #E6D699",
"i$ c #736B4C",
"j$ c #766E4E",
"k$ c #BDAF7D",
"l$ c #7B2222",
"m$ c #4F2E4A",
"n$ c #732327",
"o$ c #968B63",
"p$ c #655E43",
"q$ c #6F6749",
"r$ c #635B41",
"s$ c #90865F",
"t$ c #0D0C09",
"u$ c #58523A",
"v$ c #17160F",
"w$ c #130505",
"x$ c #190707",
"y$ c #0F0505",
"z$ c #1E1811",
"A$ c #7F7654",
"B$ c #312E21",
"C$ c #9A8F66",
"D$ c #A3976C",
"E$ c #A4986C",
"F$ c #070604",
"G$ c #B5A878",
"H$ c #5A1919",
"I$ c #9E2E2E",
"J$ c #37395E",
"K$ c #4E2941",
"L$ c #A0946A",
"M$ c #020201",
"N$ c #6E6649",
"O$ c #524C36",
"P$ c #877D59",
"Q$ c #E4D397",
"R$ c #45402E",
"S$ c #A59A6E",
"T$ c #635C42",
"U$ c #D4C58C",
"V$ c #010101",
"W$ c #C6B883",
"X$ c #9E9369",
"Y$ c #7B7251",
"Z$ c #B9AC7B",
"`$ c #050403",
" % c #B8AB7A",
".% c #8A805B",
"+% c #0C0B08",
"@% c #433E2C",
"#% c #4D1414",
"$% c #B53333",
"%% c #782935",
"&% c #39385C",
"*% c #762223",
"=% c #020101",
"-% c #14120D",
";% c #080806",
">% c #383425",
",% c #948962",
"'% c #746C4D",
")% c #A79B6F",
"!% c #252319",
"~% c #817856",
"{% c #71694B",
"]% c #E6D598",
"^% c #13110C",
"/% c #B1A475",
"(% c #565039",
"_% c #494431",
":% c #100F0A",
"<% c #3B3627",
"[% c #030302",
"}% c #591818",
"|% c #AE3131",
"1% c #A83030",
"2% c #433455",
"3% c #50273C",
"4% c #A32E2E",
"5% c #1E0808",
"6% c #0F0E0A",
"7% c #3D3828",
"8% c #060504",
"9% c #3B3727",
"0% c #3A3526",
"a% c #A89C6F",
"b% c #1F1C14",
"c% c #373324",
"d% c #726A4C",
"e% c #2A271C",
"f% c #090906",
"g% c #A69A6E",
"h% c #70684A",
"i% c #676044",
"j% c #701E1E",
"k% c #9B2B2B",
"l% c #AF3232",
"m% c #6A2531",
"n% c #38385C",
"o% c #591B1D",
"p% c #721F1F",
"q% c #4A1414",
"r% c #0B0A07",
"s% c #BEB07E",
"t% c #5E573E",
"u% c #7E7554",
"v% c #16150F",
"w% c #222017",
"x% c #070705",
"y% c #302D20",
"z% c #564F39",
"A% c #270A0A",
"B% c #8D2727",
"C% c #611C1C",
"D% c #3E3557",
"E% c #4A2C46",
"F% c #6C1E1E",
"G% c #857B58",
"H% c #544E37",
"I% c #4F4934",
"J% c #D7C78E",
"K% c #0C0504",
"L% c #691C1C",
"M% c #7A2020",
"N% c #55222F",
"O% c #631C1C",
"P% c #6D1D1D",
"Q% c #170606",
"R% c #928761",
"S% c #958A63",
"T% c #28251A",
"U% c #484330",
"V% c #12100C",
"W% c #615A40",
"X% c #E7D799",
"Y% c #2F2B1F",
"Z% c #735E44",
"`% c #6A1C1C",
" & c #7F2826",
".& c #732020",
"+& c #571E27",
"@& c #353A60",
"#& c #751F1F",
"$& c #A5644E",
"%& c #B27C5D",
"&& c #9D5946",
"*& c #7D2423",
"=& c #4C1414",
"-& c #2C2219",
";& c #353224",
">& c #DECE93",
",& c #5B553C",
"'& c #4B4632",
")& c #353123",
"!& c #201D15",
"~& c #0E0D09",
"{& c #B7AA79",
"]& c #403C2A",
"^& c #E3D396",
"/& c #504431",
"(& c #8F4136",
"_& c #CAA176",
":& c #E7D397",
"<& c #874B3C",
"[& c #3F3556",
"}& c #413353",
"|& c #7C3F33",
"1& c #EAD99B",
"2& c #DDC18B",
"3& c #89372F",
"4& c #3F1111",
"5& c #493E2D",
"6& c #2E2A1E",
"7& c #E2D296",
"8& c #57513A",
"9& c #A2966B",
"0& c #B2A676",
"a& c #2F2C1F",
"b& c #2C291D",
"c& c #C8B984",
"d& c #110907",
"e& c #431514",
"f& c #842F2B",
"g& c #E5CE94",
"h& c #DAC691",
"i& c #3F4967",
"j& c #D3BE8B",
"k& c #C0936C",
"l& c #782020",
"m& c #4F1515",
"n& c #38251C",
"o& c #7D7452",
"p& c #181610",
"q& c #262319",
"r& c #AA9E71",
"s& c #423326",
"t& c #4B1816",
"u& c #A05E4A",
"v& c #B4A986",
"w& c #A89E81",
"x& c #CFAB7D",
"y& c #681C1C",
"z& c #461313",
"A& c #3A201A",
"B& c #6B6246",
"C& c #C1B380",
"D& c #363224",
"E& c #807755",
"F& c #514B36",
"G& c #3D2A20",
"H& c #3F1312",
"I& c #A3624C",
"J& c #6C6C6F",
"K& c #E7D79A",
"L& c #E3CC92",
"M& c #AC7257",
"N& c #661B1B",
"O& c #551717",
"P& c #491414",
"Q& c #421212",
"R& c #531616",
"S& c #9B5644",
"T& c #A15F4A",
"U& c #88352F",
"V& c #925240",
"W& c #D3BB8A",
"X& c #C4B68B",
"Y& c #ECDB9D",
"Z& c #B3A07E",
"`& c #60272D",
" * c #772926",
".* c #DABD89",
"+* c #DCC08B",
"@* c #B47F5F",
"#* c #C0926C",
"$* c #BA946D",
"%* c #403354",
"&* c #ADA383",
"** c #67646D",
"=* c #E5D599",
"-* c #8E8878",
";* c #333A61",
">* c #9F7E64",
",* c #944A3C",
"'* c #E7D296",
")* c #928C79",
"!* c #BCB189",
"~* c #837E76",
"{* c #3D4365",
"]* c #E2D298",
"^* c #E1CC92",
"/* c #854639",
"(* c #782121",
"_* c #6F1E1E",
":* c #7D5046",
"<* c #E0CF95",
"[* c #B0A684",
"}* c #948D7A",
"|* c #D9C995",
"1* c #584359",
"2* c #51273A",
"3* c #5A1B1C",
"4* c #6A1E1E",
"5* c #701F1F",
"6* c #752020",
"7* c #772020",
"8* c #6D1E1E",
"9* c #522537",
"0* c #DACB95",
"a* c #B0A685",
"b* c #BFB28A",
"c* c #E3D399",
"d* c #61626D",
"e* c #35395F",
"f* c #46304D",
"g* c #512537",
"h* c #482F4B",
"i* c #7F7B74",
"j* c #65646D",
"k* c #CBBD8F",
"l* c #2F3B63",
"m* c #39375B",
"n* c #4A2D47",
"o* c #4C2B44",
"p* c #4A2C47",
"q* c #482E4A",
"r* c #423252",
"s* c #B8AC87",
"t* c #525668",
"u* c #A39A80",
"v* c #C2B58B",
"w* c #484D67",
"x* c #7B7973",
"y* c #968E7B",
"z* c #5C5F6B",
"A* c #A1987F",
" . + . . . . . ",
" . . . . . @ # . . . $ . . . . . . ",
" . % & . . * = . . . & - ; . . . > + . ",
" . , ' . . . ) ! ~ . . . . { ] ^ . . / ( _ . ",
" . : ! < . . . [ ! } | . . . . 1 2 3 . . . . 4 ! 5 . ",
" . . . . . 6 ! ] $ . . . 7 8 ! 9 0 . . . . . . . . . . . . . . . . 5 ( ! a . . . b ! c ; . . . . . ",
" . d e . . . f ! ! g h . . . i ! ! ' j k l m n o p q r s t u v w . x y ! ! z . . . A B ! C . . . . D E . ",
" . F i 0 . . . . G ! ! H I . . J ! ! ! K L L L L L L L L L L L L M N O ! ! P Q . . R S ! ! * . . . & T U . ",
" . V ! W 0 . . . X ! ! ! } Y Z ` .! ! ..L L L L L L L L L L L L L +.2 ! ! @.. . #.P ! ! c 5 . . . $.%.! &.. ",
" . *.! ! =.7 . . . ; -.! ! ! ;.>.,.'.).!.~.L L L L L L L L L L L L L L {.].^./.(._.B ! ! ! :.. . . . <.[.! 2 / . ",
" . _ B ! ! %._ . . . . }.! ! ! ! ! |.1.L L L L L L L L L L L L L L L L L L L L 2.3.! ! ! ! 8 4.. . . 5.6.! ! 7.. . ",
" . . 8.! ! ! 9.0.. . . a.b.! ! ! ! ! c.L L L L L L L L L L L L L L L L L L L L d.! ! ! ! ! e.f.. . . g.h.! ! ! i.. ",
" . j.! ! ! ! k.}.. . l.m.n.! ! ! o.p.L L L L L L L L L L L L L L L L L L L L q.! ! ! ! r.s.t.. . i.u.! ! ! v.w.. ",
" . . x.! ! ! ! ! 7.y.z.z.A.! ! B.C.D.L L L L L L L L L L L L L L L L L L E.F.G.H.! ! 2 I.z.z.J.K.! ! ! ! ! L.. . ",
" . 4.S ! ! ! ! ! 2 M.N.O.P.Q.R.z.S.T.U.V.L L L L L L L L L L L L V.W.X.Y.z.z.R.Z.`. +R..+++@+! ! ! ! ! C + . ",
" . . #+! ! ! ! ! ! ! ! ! $+z.z.z.z.z.z.z.z.Y.T.X.%+%+%+X.&+*+=+-+z.z.z.z.z.z.z.z.z.;+>+! ! ! ! ! ! ! ,+'+. . ",
" . . )+! ! ! ! ! ! ! ! .+z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.!+! ! ! ! ! ! ! ! ~+. . ",
" . e {+! ! ! ! ! ! ! ]+z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.++! ! ! ! ! ! ! ^+. . ",
" . . D /+! ! ! ! ! (+_+z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.:+! ! ! ! ! ! <+^ . ",
" . [+}+|+! ! ! 1+2+3+4+5+z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.5+4+6+7+! ! ! ! 8+9+0+. ",
" . . a+b+c+d+e+f+g+h+h+h+h+i+4+j+k+z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.k+l+4+i+h+h+h+m+f+n+! o+p+q+r+. . ",
" . s+t+u+v+h+h+h+h+h+h+h+h+h+h+h+h+i+w+x+4+y+z+A+B+B+A+z+y+C+x+D+i+h+h+h+h+h+h+h+h+h+h+E+F+G+H+I+J+. ",
" . . K+u+u+L+M+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+N+O+u+u+P+. . ",
" . Q+R+u+u+u+S+T+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+U+V+u+u+u+W+X+. ",
" . Y+u+u+u+u+u+H+Z+`+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+N+ @H+u+u+u+u+u+.@. ",
" . +@@@u+u+u+u+u+u+#@$@G+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+M+%@H+u+u+u+u+u+u+u+&@. . ",
" . . *@=@-@H+u+u+u+u+u+u+u+;@>@G+,@h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+h+M+'@)@u+u+u+u+u+u+u+u+!@~@{@]@. ",
" . s+^@/@/@(@u+u+u+u+u+u+u+u+u+_@:@<@[@}@|@1@h+h+h+h+h+h+h+h+h+h+2@3@4@5@6@7@u+u+u+u+u+u+u+u+u+u+8@9@/@0@a@. ",
" . b@c@/@/@/@d@u+u+u+u+u+u+u+u+e@f@f@f@f@f@f@g@h@i@j@k@l@j@m@n@o@f@f@f@f@f@p@u+u+u+u+u+u+u+u+u+S+q@/@/@r@s@. ",
" . t@u@/@/@/@v@w@u+u+u+u+u+u+u+x@f@f@f@f@f@f@f@f@y@z@z@z@z@A@f@f@f@f@f@f@f@B@u+u+u+u+u+u+u+u+C@D@/@/@/@D@E@. ",
" . F@G@/@/@/@/@/@H@u+u+u+u+u+u+I@f@f@f@f@f@f@f@f@J@z@z@z@z@K@f@f@f@f@f@f@f@L@u+u+u+u+u+u+u+u+M@/@/@/@/@N@O@. ",
" . P@Q@/@/@/@/@/@v@R@u+u+u+u+u+S@T@f@f@f@f@f@f@f@U@z@z@z@z@V@f@f@f@f@f@f@f@W@u+u+u+u+u+u+8@X@/@/@/@/@/@Y@Z@. ",
" . `@ #/@/@/@/@/@/@/@.#+#u+u+u+u+@#f@f@f@f@f@f@f@##z@z@z@z@$#f@f@f@f@f@f@T@%#u+u+u+u+u+&#*#/@/@/@/@/@/@=#-#. ",
" . ;#>#/@/@/@/@/@/@/@/@,#'#)#!#u+~#f@f@f@f@f@f@f@{#z@z@z@]#^#f@f@f@f@f@f@/#u+u+u+u+(#_#:#/@/@/@/@/@/@/@<#[#. ",
" . }#X@/@/@/@/@/@/@/@/@/@/@/@/@|#1#2#f@f@f@f@f@f@3#z@z@z@J@f@f@f@f@f@f@f@x@u+C@4#/@/@/@/@/@/@/@/@/@/@/@<#5#. ",
" . a+6#/@/@/@/@/@/@/@/@/@/@/@/@7#8#9#T@f@f@f@f@f@0#a#z@z@b#f@f@f@f@f@f@c#d#e#f#/@/@/@/@/@/@/@/@/@/@/@/@=#g#. ",
" . h#G@/@/@/@/@/@/@/@/@/@/@/@i#j#k#k#l#f@f@f@f@f@f@m#z@n#o#f@f@f@f@f@p#q#k#k#r#s#/@/@/@/@/@/@/@/@/@/@/@Y@t#. ",
" . u#v#/@/@/@/@/@/@/@/@/@w#x#k#k#k#k#k#y#z#f@f@f@f@A#B#C#f@f@f@f@f@D#E#k#k#k#k#F#G#<#/@/@/@/@/@/@/@/@/@*#H#. ",
" . 0+I#/@/@/@/@/@/@/@/@4#J#k#k#k#k#k#k#k#K#L#f@f@f@f@f@f@f@f@f@M#N#O#k#k#k#k#k#k#P#V+)#/@/@/@/@/@/@/@/@M@b@. ",
" . . Q#/@/@/@/@/@/@/@!#R#S#T#U#k#k#k#k#k#k#V#W#X#Y#Z#f@f@`# $.$+$k#k#k#k#k#k#d#@$#$$$z@%$/@/@/@/@/@/@/@&$w . ",
" . . *$=$/@/@/@/@/@-$;$z@>$,$'$)$!$O+P#k#k#k#k#k#k#~${$]$k#k#k#k#k#k#k#^$/$($_$:$! <$z@[$<#/@/@/@/@/@/@}$. . ",
" . |$~@/@/@/@/@/@1$z@z@2$! 3$4$5$6$7$8$9$0$/$a$k#k#k#k#k#k#k#b$c$d$e$f$g$h$i$j$! k$z@z@l$/@/@/@/@/@,#m$. ",
" . X+n$/@/@/@/@/@d#z@z@o$! p$q$! 2$r$! s$t$u$v$7$[$w$x$w$y$z$A$B$C$! D$r$! E$F$G$D$z@z@H$/@/@/@/@/@I$J$. ",
" . . K$Y@/@/@/@/@a$z@z@p$L$M$N$! O$P$! Q$R$! S$T$U$6$V$W$X$i$! Y$<$! Z$`$ %.%z@+%@%z@z@#%$%/@/@/@/@%%. . ",
" . &%*%/@/@/@,#k#=%z@-%;%z@>%,%z@'%! )%!%! ~%{%]%^%z@ %/%$$! (%_%! E$z@:%<%[%z@z@z@z@}%|%/@/@/@1%2%. ",
" . . 3%H@4%=#'#k#5%z@z@z@6%7%8%z@9%2 0%z@a%b%c%d%z@z@e%j$z@s$f%z@g%h%z@z@z@<%i%z@z@=%j%k%/@/@l%m%. . ",
" . n%o%u+p%k#k#q%z@z@r%s%t%z@z@[%u%z@z@+%z@[%[%z@z@z@[%z@[%z@z@v%w%z@x%z@y%2 z%z@A%k#J#B%|#C%D%. . ",
" . . E%u+F%k#k#P#w$z@G%! H%;%u$z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@z@;%z@z@i%I%6$! J%K%L%k#k#M%C@O@. . ",
" . X+N%O%k#k#k#P%Q%R%! c%)%S%z@T%U%z@z@V$z@z@z@z@z@z@z@z@V%z@B$R%`$W%X%Y%G$Z%`%k#k# &.&+&@&. ",
" . . &%W+#&$&%&&&*&=&-&;&! A$T%>&,&z@'&)&z@x%z@z@z@!&z@~&{&8%!%! .%]&^&/&0$k#(&_&:&2 <&[&. . ",
" . . }&|&1&! ! 2&3&d#4&5&6&D$! g$6$7&8&M$9&V$z@z@0&a&b&! h%;%1&c&d&e&d#k#f&g&! ! ! h&i&. ",
" . ^ j&! ! ! ! k&k#k#l&m&n&o&p&Y$! i%H%! q&z@V$h$L$B$! r&z@s&t&d#k#k#k#u&! ! ! ! ! v&. . ",
" . . w&! ! ! ! ! x&k#k#k#k#k#y&z&A&B&B$z%C&D&z@;%E&F&r%G&H&;@k#k#k#k#k#k#I&! ! ! ! ! ] J&. ",
" . $.K&! ! ! ! L&M&k#k#k#k#k#k#k#k#P#N&O&P&Q&Q&z&R&;@l&k#k#k#k#k#k#*&S&T&U&V&W&! ! ! ! X&. . ",
" . . : ! ! ! Y&Z&`& *.*+*@*k#k#k#k#k#k#k#k#k#k#k#k#k#k#k#k#k#k#k#k#k##*! ! $*%*; &*2 ! ! B **. ",
" . Q =*! ! c -*. ;*>*! ! ! ,*k#k#k#k#k#k#k#k#k#k#k#k#k#k#k#k#k#k#k#k#'*! ! 1&I . . )*] ! ! !*. . ",
" . ) ! ! 8 ~*. . {*]*! ! ^*/*a$k#k#k#k#k#k#k#k#k#k#k#k#k#k#k#k#(*_*@@:*<*! ! [*. . . U ! ! g ^ . ",
" . =.! ! }*. . . A ! ! |*1*2*3*8@@@4*5*6*7*9+k#k#^$l&d#.&8*8#!@I+9*%*Q+**h.! 0*. . . . , ! ! R . ",
" . . h.! a*. . . b*! c*d*. . e*f*Z@t+u+u+u+u+u+H+u+u+u+u+o%g*h*0+. . . . i*B ! j*. . ; 8.! }.. ",
" . {*! k*+ . . 0*! $ . . . . . . l*m*}&h*n*o*o*p*q*r*a@X+. . . . . . s*! [ . . . t*3 u*. ",
" . e ]*x . . . P v*. . . . . . . . . . . . . . . . . w*]*#+. . . x*y*. ",
" . . j.. . . h.z*. . . A*j.. . . ^ . ",
" . . . . -*. . . 0 e . . . . ",
" . . . . . . . "};

View File

@ -0,0 +1,189 @@
#include "quinn.h"
#include "doomgeneric.h"
#include "doomkeys.h"
#include "doom.xpm"
#include "loading.xpm"
#define KEYQUEUE_SIZE 16
static unsigned short s_KeyQueue[KEYQUEUE_SIZE];
static unsigned int s_KeyQueueWriteIndex = 0;
static unsigned int s_KeyQueueReadIndex = 0;
static int window_handle = 0;
static char *surface;
static unsigned int start_ticks;
void exit_callback(int wh) {
}
void do_exit() {
quinn_exit();
}
static const char keyChars_set1[] = {
0, 27, '1', '2',
'3', '4', '5', '6',
'7', '8', '9', '0',
'-', '=', '\b', '\t',
'q', 'w', 'e', 'r',
't', 'y', 'u', 'i',
'o', 'p', '[', ']',
'\n', 0, 'a', 's',
'd', 'f', 'g', 'h',
'j', 'k', 'l', ';',
'\'', '`', 0, '\\',
'z', 'x', 'c', 'v',
'b', 'n', 'm', ',',
'.', '/', 0, 0,
0, ' ', 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0
};
static unsigned char convertToDoomKey(unsigned char scancode)
{
unsigned char key = 0;
switch (scancode)
{
case 0x1C:
key = KEY_ENTER;
break;
case 0x01:
key = KEY_ESCAPE;
break;
case 0x4B:
key = KEY_LEFTARROW;
break;
case 0x4D:
key = KEY_RIGHTARROW;
break;
case 0x48:
key = KEY_UPARROW;
break;
case 0x50:
key = KEY_DOWNARROW;
break;
case 0x1D:
key = KEY_FIRE;
break;
case 0x39:
key = KEY_USE;
break;
case 0x36:
key = KEY_RSHIFT;
break;
case 0x0E:
key = KEY_BACKSPACE;
break;
default:
if (scancode > 0 && scancode < 0x57) {
key = keyChars_set1[scancode];
}
break;
}
return key;
}
void uninput_cb(char c) {
unsigned char key = convertToDoomKey((unsigned char)c);
unsigned short keyData = (0 << 8) | key;
s_KeyQueue[s_KeyQueueWriteIndex] = keyData;
s_KeyQueueWriteIndex++;
s_KeyQueueWriteIndex %= KEYQUEUE_SIZE;
}
void input_cb(char c) {
unsigned char key = convertToDoomKey((unsigned char)c);
unsigned short keyData = (1 << 8) | key;
s_KeyQueue[s_KeyQueueWriteIndex] = keyData;
s_KeyQueueWriteIndex++;
s_KeyQueueWriteIndex %= KEYQUEUE_SIZE;
}
void DG_Init() {
struct window_req_t wr;
struct widget_t *w;
char *icon, *loading;
__asm__ volatile ("int $0x30" : "=a" (start_ticks) : "0" (46));
// atexit(do_exit);
convert_xpm(doom_xpm, &icon);
wr.x = 30;
wr.y = 30;
strcpy(wr.name, "DOOM");
wr.width = DOOMGENERIC_RESX;
wr.height = DOOMGENERIC_RESY;
wr.flags = WIN_REQ_FLAG_NO_MOUSE;
wr.icon = icon;
window_handle = quinn_req_window(&wr, exit_callback);
free(icon);
w = quinn_add_surface(window_handle, 0, 0, DOOMGENERIC_RESX, DOOMGENERIC_RESY, NULL, NULL, input_cb, uninput_cb);
surface = quinn_surface_get_surface(w);
convert_xpm(loading_xpm, &loading);
quinn_fill_rect(window_handle, surface, DOOMGENERIC_RESX, DOOMGENERIC_RESY, 0, 0, DOOMGENERIC_RESX, DOOMGENERIC_RESY, 0xff000000);
quinn_render(window_handle, surface, loading, 147, 104, 233, 120, DOOMGENERIC_RESX, DOOMGENERIC_RESY);
free(loading);
quinn_process(0);
}
void DG_DrawFrame() {
quinn_render_no_alpha(window_handle, surface, DG_ScreenBuffer, DOOMGENERIC_RESX, DOOMGENERIC_RESY, 0, 0, DOOMGENERIC_RESX, DOOMGENERIC_RESY);
quinn_process(0);
}
void DG_SleepMs(uint32_t ms) {
unsigned int ticks;
unsigned int now = 0;
__asm__ volatile ("int $0x30" : "=a" (ticks) : "0" (46));
while (ticks + (ms * 10) > now) {
__asm__ volatile ("int $0x30" : "=a" (now) : "0" (46));
}
}
uint32_t DG_GetTicksMs() {
unsigned int ticks;
__asm__ volatile ("int $0x30" : "=a" (ticks) : "0" (46));
return (ticks - start_ticks) * 10;
}
int DG_GetKey(int *pressed, unsigned char *key) {
if (s_KeyQueueReadIndex == s_KeyQueueWriteIndex)
{
//key queue is empty
return 0;
}
else
{
unsigned short keyData = s_KeyQueue[s_KeyQueueReadIndex];
s_KeyQueueReadIndex++;
s_KeyQueueReadIndex %= KEYQUEUE_SIZE;
*pressed = keyData >> 8;
*key = keyData & 0xFF;
return 1;
}
}
void DG_SetWindowTitle(const char *title) {
quinn_set_win_caption(window_handle, title);
}

View File

@ -12,9 +12,10 @@
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <sosousdk.h>
#include <termios.h>
#include <soso.h>
static int FrameBufferFd = -1;
static int* FrameBuffer = 0;
@ -115,8 +116,7 @@ void enableRawMode()
tcgetattr(STDIN_FILENO, &orig_termios);
atexit(disableRawMode);
struct termios raw = orig_termios;
raw.c_lflag &= ~(ECHO | ICANON);
//raw.c_lflag &= ~(ECHO);
raw.c_lflag &= ~(ECHO);
raw.c_cc[VMIN] = 0;
tcsetattr(STDIN_FILENO, TCSAFLUSH, &raw);
}
@ -226,12 +226,12 @@ void DG_DrawFrame()
void DG_SleepMs(uint32_t ms)
{
sleepMilliseconds(ms);
sleep_ms(ms);
}
uint32_t DG_GetTicksMs()
{
return getUptimeMilliseconds();
return get_uptime_ms();
}
int DG_GetKey(int* pressed, unsigned char* doomKey)

View File

@ -0,0 +1,259 @@
//doomgeneric for soso os (nano-x version)
//TODO: get keys from X, not using direct keyboard access!
#include "doomkeys.h"
#include "m_argv.h"
#include "doomgeneric.h"
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <sys/ioctl.h>
#include <termios.h>
#include <soso.h>
#include <nano-X.h>
static int g_keyboard_fd = -1;
#define KEYQUEUE_SIZE 16
static unsigned short g_key_queue[KEYQUEUE_SIZE];
static unsigned int g_key_queue_write_index = 0;
static unsigned int g_key_queue_read_index = 0;
static GR_WINDOW_ID wid;
static GR_GC_ID gc;
static unsigned char* windowBuffer = 0;
static const int winSizeX = DOOMGENERIC_RESX;
static const int winSizeY = DOOMGENERIC_RESY;
static int button_down = 0;
static unsigned char convert_to_doom_key(unsigned char scancode)
{
unsigned char key = 0;
switch (scancode)
{
case 0x9C:
case 0x1C:
key = KEY_ENTER;
break;
case 0x01:
key = KEY_ESCAPE;
break;
case 0xCB:
case 0x4B:
key = KEY_LEFTARROW;
break;
case 0xCD:
case 0x4D:
key = KEY_RIGHTARROW;
break;
case 0xC8:
case 0x48:
key = KEY_UPARROW;
break;
case 0xD0:
case 0x50:
key = KEY_DOWNARROW;
break;
case 0x1D:
key = KEY_FIRE;
break;
case 0x39:
key = KEY_USE;
break;
case 0x2A:
case 0x36:
key = KEY_RSHIFT;
break;
case 0x15:
key = 'y';
break;
default:
break;
}
return key;
}
static void add_key_to_queue(int pressed, unsigned char key_code)
{
unsigned char key = convert_to_doom_key(key_code);
unsigned short key_data = (pressed << 8) | key;
g_key_queue[g_key_queue_write_index] = key_data;
g_key_queue_write_index++;
g_key_queue_write_index %= KEYQUEUE_SIZE;
}
struct termios orig_termios;
void disable_raw_mode()
{
tcsetattr(STDIN_FILENO, TCSAFLUSH, &orig_termios);
}
void enable_raw_mode()
{
tcgetattr(STDIN_FILENO, &orig_termios);
atexit(disable_raw_mode);
struct termios raw = orig_termios;
raw.c_lflag &= ~(ECHO);
raw.c_cc[VMIN] = 0;
tcsetattr(STDIN_FILENO, TCSAFLUSH, &raw);
}
void DG_Init()
{
if (GrOpen() < 0)
{
GrError("GrOpen failed");
return;
}
gc = GrNewGC();
GrSetGCUseBackground(gc, GR_FALSE);
GrSetGCForeground(gc, MWRGB( 255, 0, 0 ));
wid = GrNewBufferedWindow(GR_WM_PROPS_APPFRAME |
GR_WM_PROPS_CAPTION |
GR_WM_PROPS_CLOSEBOX |
GR_WM_PROPS_BUFFER_MMAP |
GR_WM_PROPS_BUFFER_BGRA,
"Doom",
GR_ROOT_WINDOW_ID,
50, 50, winSizeX, winSizeY, MWRGB( 255, 255, 255 ));
GrSelectEvents(wid, GR_EVENT_MASK_EXPOSURE |
GR_EVENT_MASK_TIMER |
GR_EVENT_MASK_CLOSE_REQ |
GR_EVENT_MASK_BUTTON_DOWN |
GR_EVENT_MASK_BUTTON_UP);
GrMapWindow (wid);
windowBuffer = GrOpenClientFramebuffer(wid);
enable_raw_mode();
g_keyboard_fd = open("/dev/keyboard", 0);
if (g_keyboard_fd >= 0)
{
//enter non-blocking mode
ioctl(g_keyboard_fd, 1, (void*)1);
}
}
static void handle_key_input()
{
if (g_keyboard_fd < 0)
{
return;
}
unsigned char scancode = 0;
if (read(g_keyboard_fd, &scancode, 1) > 0)
{
unsigned char keyRelease = (0x80 & scancode);
scancode = (0x7F & scancode);
//printf("scancode:%x pressed:%d\n", scancode, 0 == keyRelease);
if (0 == keyRelease)
{
add_key_to_queue(1, scancode);
}
else
{
add_key_to_queue(0, scancode);
}
}
}
void DG_DrawFrame()
{
GR_EVENT event;
while (GrPeekEvent(&event))
{
GrGetNextEvent(&event);
switch (event.type)
{
case GR_EVENT_TYPE_BUTTON_DOWN:
button_down = 1;
break;
case GR_EVENT_TYPE_BUTTON_UP:
button_down = 0;
break;
case GR_EVENT_TYPE_CLOSE_REQ:
GrClose();
exit (0);
break;
case GR_EVENT_TYPE_EXPOSURE:
break;
case GR_EVENT_TYPE_TIMER:
break;
}
}
//if (button_down == 0)
{
memcpy(windowBuffer, DG_ScreenBuffer, DOOMGENERIC_RESX * DOOMGENERIC_RESY * 4);
GrFlushWindow(wid);
}
handle_key_input();
}
void DG_SleepMs(uint32_t ms)
{
sleep_ms(ms);
}
uint32_t DG_GetTicksMs()
{
return get_uptime_ms();
}
int DG_GetKey(int* pressed, unsigned char* doomKey)
{
if (g_key_queue_read_index == g_key_queue_write_index)
{
//key queue is empty
return 0;
}
else
{
unsigned short keyData = g_key_queue[g_key_queue_read_index];
g_key_queue_read_index++;
g_key_queue_read_index %= KEYQUEUE_SIZE;
*pressed = keyData >> 8;
*doomKey = keyData & 0xFF;
return 1;
}
}
void DG_SetWindowTitle(const char * title)
{
GrSetWindowTitle(wid, title);
}

695
doomgeneric/loading.xpm Normal file
View File

@ -0,0 +1,695 @@
/* XPM */
static char * loading_xpm[] = {
"147 104 588 2",
" c None",
". c #EDDC9D",
"+ c #EDDC9E",
"@ c #EDDD9D",
"# c #EEDC9D",
"$ c #ECDB9D",
"% c #EDDB9C",
"& c #ECDC9D",
"* c #EDDB9D",
"= c #6A1414",
"- c #681616",
"; c #691515",
"> c #691616",
", c #671515",
"' c #D5B784",
") c #6B1414",
"! c #83392D",
"~ c #E4CE93",
"{ c #EDDB9E",
"] c #6D1616",
"^ c #D6B985",
"/ c #BF956D",
"( c #80352B",
"_ c #ECDB9C",
": c #C7A074",
"< c #ECDD9E",
"[ c #ECD99B",
"} c #AB7657",
"| c #701C1A",
"1 c #8F4B3A",
"2 c #B98C66",
"3 c #AE7B5B",
"4 c #74231E",
"5 c #A77154",
"6 c #D9BD88",
"7 c #DBBF89",
"8 c #772721",
"9 c #761C1A",
"0 c #C1926B",
"a c #EEDC9E",
"b c #E5CF94",
"c c #84392E",
"d c #9C5F47",
"e c #DFC78E",
"f c #EEDC9C",
"g c #DDC28C",
"h c #8C4737",
"i c #C39B71",
"j c #C79A70",
"k c #7C1818",
"l c #8E372D",
"m c #E9D79A",
"n c #E8D497",
"o c #75231F",
"p c #B38460",
"q c #DBBD88",
"r c #7F1C1A",
"s c #7A1717",
"t c #7B1717",
"u c #B47A5A",
"v c #E0C78F",
"w c #97513E",
"x c #6D1414",
"y c #6B1515",
"z c #701515",
"A c #842A24",
"B c #DABB87",
"C c #974637",
"D c #CEA679",
"E c #A55E48",
"F c #892F27",
"G c #9D513E",
"H c #903C30",
"I c #7D1A19",
"J c #7B1616",
"K c #771717",
"L c #721515",
"M c #6E1515",
"N c #711515",
"O c #751616",
"P c #791717",
"Q c #9C503E",
"R c #B27758",
"S c #A9674D",
"T c #974838",
"U c #C79B71",
"V c #EBD99B",
"W c #872C26",
"X c #741616",
"Y c #761616",
"Z c #771616",
"` c #791616",
" . c #A7634A",
".. c #E7D195",
"+. c #C5976E",
"@. c #EDDC9C",
"#. c #934134",
"$. c #E1C78F",
"%. c #E0C58E",
"&. c #7F1B1A",
"*. c #AC6C51",
"=. c #D0AB7C",
"-. c #83352D",
";. c #E5CB91",
">. c #E1C68E",
",. c #9B3F33",
"'. c #871818",
"). c #811818",
"!. c #7D1818",
"~. c #8A1E1C",
"{. c #D4AB7C",
"]. c #D9B482",
"^. c #7A211F",
"/. c #5A1A1A",
"(. c #651A1A",
"_. c #9E4336",
":. c #E5CD93",
"<. c #D4AA7B",
"[. c #B26B51",
"}. c #8D2320",
"|. c #881919",
"1. c #861919",
"2. c #7F1717",
"3. c #7C1717",
"4. c #7E1717",
"5. c #8A1C1B",
"6. c #DBBA86",
"7. c #E1C48D",
"8. c #912C26",
"9. c #691A1A",
"0. c #5A1B1B",
"a. c #7C1919",
"b. c #841818",
"c. c #831818",
"d. c #801818",
"e. c #801717",
"f. c #7F1818",
"g. c #7E1818",
"h. c #821818",
"i. c #851818",
"j. c #912B25",
"k. c #932D27",
"l. c #7F1919",
"m. c #5B1A1A",
"n. c #5A1919",
"o. c #5E1A1A",
"p. c #811919",
"q. c #831919",
"r. c #601A1A",
"s. c #591A1A",
"t. c #5C1A1A",
"u. c #791A1A",
"v. c #7D1919",
"w. c #5F1A1A",
"x. c #6B1A1A",
"y. c #821919",
"z. c #6E1A1A",
"A. c #641C1C",
"B. c #5B1919",
"C. c #6D1919",
"D. c #6F1919",
"E. c #5B1B1B",
"F. c #B13333",
"G. c #8F2929",
"H. c #621A1A",
"I. c #721A1A",
"J. c #871B1A",
"K. c #741A1A",
"L. c #631A1A",
"M. c #601B1B",
"N. c #932A2A",
"O. c #651D1D",
"P. c #671D1D",
"Q. c #B63434",
"R. c #8A2828",
"S. c #59291D",
"T. c #54BD3A",
"U. c #609733",
"V. c #6C702A",
"W. c #755625",
"X. c #7C3F21",
"Y. c #83281C",
"Z. c #84251B",
"`. c #7D3C20",
" + c #755425",
".+ c #6D6D2A",
"++ c #619331",
"@+ c #595D27",
"#+ c #5D1B1B",
"$+ c #A02E2E",
"%+ c #7B2424",
"&+ c #762121",
"*+ c #842626",
"=+ c #593D21",
"-+ c #51C63C",
";+ c #53BF3B",
">+ c #57B238",
",+ c #22260E",
"'+ c #1B0505",
")+ c #210606",
"!+ c #220606",
"~+ c #427225",
"{+ c #58B138",
"]+ c #53BE3A",
"^+ c #55752C",
"/+ c #9C2C2C",
"(+ c #892828",
"_+ c #832525",
":+ c #B53434",
"<+ c #7F2424",
"[+ c #584923",
"}+ c #0B1C08",
"|+ c #000000",
"1+ c #307423",
"2+ c #55822E",
"3+ c #972C2C",
"4+ c #591919",
"5+ c #8D2929",
"6+ c #7D2424",
"7+ c #593B21",
"8+ c #0D210A",
"9+ c #327B25",
"0+ c #56732C",
"a+ c #952A2A",
"b+ c #A42F2F",
"c+ c #922929",
"d+ c #8B2828",
"e+ c #59271C",
"f+ c #51C53C",
"g+ c #132F0E",
"h+ c #388929",
"i+ c #565E28",
"j+ c #962B2B",
"k+ c #AA3030",
"l+ c #952B2B",
"m+ c #9B2C2C",
"n+ c #53A235",
"o+ c #193D12",
"p+ c #3D962D",
"q+ c #592E1E",
"r+ c #631D1D",
"s+ c #A22F2F",
"t+ c #AE3232",
"u+ c #9A2C2C",
"v+ c #B43434",
"w+ c #982B2B",
"x+ c #872626",
"y+ c #7C2323",
"z+ c #566729",
"A+ c #27601D",
"B+ c #000100",
"C+ c #4BB838",
"D+ c #53A135",
"E+ c #671E1E",
"F+ c #882727",
"G+ c #B23232",
"H+ c #B33333",
"I+ c #792222",
"J+ c #5A201B",
"K+ c #52B238",
"L+ c #398D2B",
"M+ c #9C2D2D",
"N+ c #922A2A",
"O+ c #912929",
"P+ c #661C1C",
"Q+ c #665729",
"R+ c #4DBB39",
"S+ c #030802",
"T+ c #23561A",
"U+ c #5F8D32",
"V+ c #762020",
"W+ c #6B1D1D",
"X+ c #752121",
"Y+ c #9D2C2C",
"Z+ c #812424",
"`+ c #7B2121",
" @ c #65752F",
".@ c #24581B",
"+@ c #030702",
"@@ c #46AC34",
"#@ c #59A536",
"$@ c #792923",
"%@ c #852424",
"&@ c #B23333",
"*@ c #822626",
"=@ c #A63030",
"-@ c #842525",
";@ c #6A632C",
">@ c #52C43C",
",@ c #4FC13B",
"'@ c #2A671F",
")@ c #3D942D",
"!@ c #5D9734",
"~@ c #782C23",
"{@ c #7F2222",
"]@ c #972A2A",
"^@ c #742222",
"/@ c #7D2121",
"(@ c #704B28",
"_@ c #5AA537",
":@ c #55B93A",
"<@ c #696A2D",
"[@ c #7B2321",
"}@ c #792020",
"|@ c #681F1F",
"1@ c #1C0707",
"2@ c #230909",
"3@ c #481313",
"4@ c #6E1E1E",
"5@ c #7B2221",
"6@ c #6F5028",
"7@ c #618531",
"8@ c #55B339",
"9@ c #51C43B",
"0@ c #54BB3A",
"a@ c #5D9634",
"b@ c #6A642C",
"c@ c #782A22",
"d@ c #552620",
"e@ c #7B6D4E",
"f@ c #332F22",
"g@ c #712020",
"h@ c #AC3131",
"i@ c #B43333",
"j@ c #120505",
"k@ c #504A35",
"l@ c #C4B682",
"m@ c #574F39",
"n@ c #1B0707",
"o@ c #411111",
"p@ c #7B2322",
"q@ c #773023",
"r@ c #7A2622",
"s@ c #7A2121",
"t@ c #611A1A",
"u@ c #3D1513",
"v@ c #0D0504",
"w@ c #A99D70",
"x@ c #A5996D",
"y@ c #0C0303",
"z@ c #7A2222",
"A@ c #8D2828",
"B@ c #9C9167",
"C@ c #C5B783",
"D@ c #1E1C14",
"E@ c #797050",
"F@ c #1D1B13",
"G@ c #050101",
"H@ c #2A1411",
"I@ c #3B1010",
"J@ c #4E1515",
"K@ c #741F1F",
"L@ c #731F1F",
"M@ c #5F1919",
"N@ c #4F1C19",
"O@ c #795D44",
"P@ c #382C20",
"Q@ c #47422F",
"R@ c #E6D699",
"S@ c #736B4C",
"T@ c #766E4E",
"U@ c #BDAF7D",
"V@ c #7B2222",
"W@ c #641A1A",
"X@ c #752222",
"Y@ c #968B63",
"Z@ c #655E43",
"`@ c #6F6749",
" # c #635B41",
".# c #90865F",
"+# c #0D0C09",
"@# c #58523A",
"## c #17160F",
"$# c #130505",
"%# c #190707",
"&# c #0F0505",
"*# c #1E1811",
"=# c #7F7654",
"-# c #312E21",
";# c #9A8F66",
"># c #A3976C",
",# c #A4986C",
"'# c #070604",
")# c #B5A878",
"!# c #9E2E2E",
"~# c #A0946A",
"{# c #020201",
"]# c #6E6649",
"^# c #524C36",
"/# c #877D59",
"(# c #E4D397",
"_# c #45402E",
":# c #A59A6E",
"<# c #635C42",
"[# c #D4C58C",
"}# c #010101",
"|# c #C6B883",
"1# c #9E9369",
"2# c #7B7251",
"3# c #B9AC7B",
"4# c #050403",
"5# c #B8AB7A",
"6# c #8A805B",
"7# c #0C0B08",
"8# c #433E2C",
"9# c #4D1414",
"0# c #B53333",
"a# c #762222",
"b# c #020101",
"c# c #14120D",
"d# c #080806",
"e# c #383425",
"f# c #948962",
"g# c #746C4D",
"h# c #A79B6F",
"i# c #252319",
"j# c #817856",
"k# c #71694B",
"l# c #E6D598",
"m# c #13110C",
"n# c #B1A475",
"o# c #565039",
"p# c #494431",
"q# c #100F0A",
"r# c #3B3627",
"s# c #030302",
"t# c #591818",
"u# c #AE3131",
"v# c #A83030",
"w# c #A32E2E",
"x# c #1E0808",
"y# c #0F0E0A",
"z# c #3D3828",
"A# c #060504",
"B# c #3B3727",
"C# c #3A3526",
"D# c #A89C6F",
"E# c #1F1C14",
"F# c #373324",
"G# c #726A4C",
"H# c #2A271C",
"I# c #090906",
"J# c #A69A6E",
"K# c #70684A",
"L# c #676044",
"M# c #701E1E",
"N# c #9B2B2B",
"O# c #AF3232",
"P# c #721F1F",
"Q# c #4A1414",
"R# c #0B0A07",
"S# c #BEB07E",
"T# c #5E573E",
"U# c #7E7554",
"V# c #16150F",
"W# c #222017",
"X# c #070705",
"Y# c #302D20",
"Z# c #564F39",
"`# c #270A0A",
" $ c #8D2727",
".$ c #611C1C",
"+$ c #6C1E1E",
"@$ c #857B58",
"#$ c #544E37",
"$$ c #4F4934",
"%$ c #D7C78E",
"&$ c #0C0504",
"*$ c #691C1C",
"=$ c #7A2020",
"-$ c #631C1C",
";$ c #6D1D1D",
">$ c #170606",
",$ c #928761",
"'$ c #958A63",
")$ c #28251A",
"!$ c #484330",
"~$ c #12100C",
"{$ c #615A40",
"]$ c #E7D799",
"^$ c #2F2B1F",
"/$ c #735E44",
"($ c #6A1C1C",
"_$ c #7F2826",
":$ c #732020",
"<$ c #751F1F",
"[$ c #A5644E",
"}$ c #B27C5D",
"|$ c #9D5946",
"1$ c #7D2423",
"2$ c #4C1414",
"3$ c #2C2219",
"4$ c #353224",
"5$ c #DECE93",
"6$ c #5B553C",
"7$ c #4B4632",
"8$ c #353123",
"9$ c #201D15",
"0$ c #0E0D09",
"a$ c #B7AA79",
"b$ c #403C2A",
"c$ c #E3D396",
"d$ c #504431",
"e$ c #8F4136",
"f$ c #CAA176",
"g$ c #E7D397",
"h$ c #874B3C",
"i$ c #7C3F33",
"j$ c #EAD99B",
"k$ c #DDC18B",
"l$ c #89372F",
"m$ c #3F1111",
"n$ c #493E2D",
"o$ c #2E2A1E",
"p$ c #E2D296",
"q$ c #57513A",
"r$ c #B2A676",
"s$ c #2F2C1F",
"t$ c #2C291D",
"u$ c #C8B984",
"v$ c #110907",
"w$ c #431514",
"x$ c #842F2B",
"y$ c #E5CE94",
"z$ c #E2CD94",
"A$ c #DEC78F",
"B$ c #C0936C",
"C$ c #782020",
"D$ c #4F1515",
"E$ c #38251C",
"F$ c #7D7452",
"G$ c #181610",
"H$ c #27241A",
"I$ c #AA9E71",
"J$ c #423326",
"K$ c #4B1816",
"L$ c #A05E4A",
"M$ c #CFAB7D",
"N$ c #681C1C",
"O$ c #461313",
"P$ c #3A201A",
"Q$ c #6B6246",
"R$ c #C1B380",
"S$ c #363224",
"T$ c #807755",
"U$ c #514B36",
"V$ c #3D2A20",
"W$ c #3F1312",
"X$ c #A3624C",
"Y$ c #E3CC92",
"Z$ c #AC7257",
"`$ c #661B1B",
" % c #551717",
".% c #491414",
"+% c #421212",
"@% c #531616",
"#% c #9B5644",
"$% c #A15F4A",
"%% c #88352F",
"&% c #925240",
"*% c #DCC38D",
"=% c #D8BF8A",
"-% c #642421",
";% c #772926",
">% c #DABD89",
",% c #DCC08B",
"'% c #B47F5F",
")% c #C0926C",
"!% c #BB956D",
"~% c #AF8964",
"{% c #944A3C",
"]% c #E7D296",
"^% c #ECDD9D",
"/% c #E1CC92",
"(% c #854639",
"_% c #782121",
":% c #6F1E1E",
"<% c #845240",
"[% c #E8D698",
"}% c #6A1E1E",
"|% c #701F1F",
"1% c #752020",
"2% c #772020",
"3% c #792121",
"4% c #6D1E1E",
"5% c #722D2D",
"6% c #732E2E",
"7% c #722C2C",
" ",
" ",
" . . ",
" + @ . . . # ",
" . . . . . $ . ",
" . . @ . . # . . . . ",
" % . . & * . . @ = - ; - > , , @ . . . . & ",
" . * . . . . . . . ' ) ) ) ) ) ) ) ) ) ) ) ) ) ! ~ . . + . . . . ",
" { . . . . . . ] ^ . . / ) ) ) ) ) ) ) ) ) ) ) ) ) ( _ . . : + . . . * . ",
" . . < . . . . [ } | 1 2 3 4 ) ) ) ) ) ) ) ) ) ) ) ) ) ) 5 6 7 8 9 0 & . . . + a . . ",
" . . . * . . . . . b c ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) d e . . . . . . . . { ",
" f . . . * g . . . . . h ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) i . . . . . j . . . . ",
" . . . . . k l m . . . n o ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) p . . . . q r s . . . . + ",
" . . . . . . { t t u . . v w x ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) y z A B . . _ C t t . . . . . . ",
" . . . . . . _ D E F G H I t J K L M ) ) ) ) ) ) ) ) ) ) ) ) M N O P t t I Q R S I T U V . . . . . & ",
" . . . . . . . . . W t t t t t t t t P K O X X X O Y Z ` s t t t t t t t t t .... . . . . . . . ",
" . . . . . . . . . T t t t t t t t t t t t t t t t t t t t t t t t t t t t t +.. . . . . . . . ",
" @.. . . . . . . #.t t t t t t t t t t t t t t t t t t t t t t t t t t t t U . . . . . . . a ",
" $.. . . . . %.&.t t t t t t t t t t t t t t t t t t t t t t t t t t t t *.. . . . . . =. ",
" -.;.. . . >.,.'.).!.t t t t t t t t t t t t t t t t t t t t t t t t !.).~.{.. . . . ].^. ",
" /.(._.:.<.[.}.|.|.|.|.1.).2.3.t t t t t t t t t t t t t t t t 3.4.).1.|.|.|.5.[.6.. 7.8.9.0. ",
" /./.a.|.|.|.|.|.|.|.|.|.|.|.|.1.b.c.).d.e.f.g.g.f.e.d.h.c.i.1.|.|.|.|.|.|.|.|.|.|.j.k.l.m./. ",
" n././.o.p.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.q.r././.n. ",
" s./././.t.u.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.v.w././././. ",
" /././././.m.x.y.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.q.z.m./././././. ",
" /.A././././././.B.C.l.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.p.D.m./././././././.m. ",
" E.F.G.m./././././././.H.I.l.J.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.p.K.L././././././././.M.N.O. ",
" P.Q.Q.R./././././././././.S.T.U.V.W.X.Y.|.|.|.|.|.|.|.|.|.|.Z.`. +.+++@+/./././././././././.#+$+Q.%+ ",
" &+Q.Q.Q.*+/./././././././.=+-+-+-+-+-+-+;+>+,+'+)+!+'+~+{+]+-+-+-+-+-+^+/././././././././.t./+Q.Q.(+ ",
" _+Q.Q.Q.:+<+/././././././.[+-+-+-+-+-+-+-+-+}+|+|+|+|+1+-+-+-+-+-+-+-+2+/./././././././.E.3+Q.Q.Q.3+/. ",
" 4+5+Q.Q.Q.Q.Q.6+/./././././.7+-+-+-+-+-+-+-+-+8+|+|+|+|+9+-+-+-+-+-+-+-+0+/./././././././.a+Q.Q.Q.Q.b+4+ ",
" /.c+Q.Q.Q.Q.Q.:+d+/././././.e+f+-+-+-+-+-+-+-+g+|+|+|+|+h+-+-+-+-+-+-+-+i+/./././././.#+j+Q.Q.Q.Q.Q.k+/. ",
" /.l+Q.Q.Q.Q.Q.Q.Q.m+O././././.n+-+-+-+-+-+-+-+o+|+|+|+|+p+-+-+-+-+-+-+f+q+/././././.r+s+Q.Q.Q.Q.Q.Q.t+/. ",
" /.u+Q.Q.Q.Q.Q.Q.Q.Q.v+w+x+y+/.z+-+-+-+-+-+-+-+A+|+|+|+B+C+-+-+-+-+-+-+D+/./././.E+F+G+Q.Q.Q.Q.Q.Q.Q.H+0. ",
" /.j+Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.I+J+K+-+-+-+-+-+-+L+|+|+|+8+-+-+-+-+-+-+-+[+/.E.M+Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.H+/. ",
" /.N+Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.O+P+Q+f+-+-+-+-+-+R+S+|+|+T+-+-+-+-+-+-+U+V+W+X+Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.t+/. ",
" 5+Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Y+Z+`+`+ @-+-+-+-+-+-+.@|++@@@-+-+-+-+-+#@$@`+`+%@&@Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.k+/. ",
" *@Q.Q.Q.Q.Q.Q.Q.Q.Q.=@-@`+`+`+`+`+;@>@-+-+-+-+,@'@)@-+-+-+-+-+!@~@`+`+`+`+{@]@H+Q.Q.Q.Q.Q.Q.Q.Q.Q.s+ ",
" ^@Q.Q.Q.Q.Q.Q.Q.Q.M+/@`+`+`+`+`+`+`+(@_@-+-+-+-+-+-+-+-+-+:@<@[@`+`+`+`+`+`+}@w.x+Q.Q.Q.Q.Q.Q.Q.Q.a+ ",
" |@Q.Q.Q.Q.Q.Q.Q.y+1@2@3@4@`+`+`+`+`+`+5@6@7@8@9@-+-+0@a@b@c@`+`+`+`+`+`+V+d@e@f@|+g@Q.Q.Q.Q.Q.Q.Q.F+ ",
" /.h@Q.Q.Q.Q.Q.i@j@|+k@l@m@n@o@r.}@`+`+`+`+`+`+p@q@r@`+`+`+`+`+`+`+s@t@u@v@w@. x@|+y@H+Q.Q.Q.Q.Q.Q.z@ ",
" N.Q.Q.Q.Q.Q.A@|+|+B@. C@D@E@F@G@H@I@J@t@K@`+`+`+`+`+`+`+L@M@N@O@P@Q@R@S@T@. U@|+|+V@Q.Q.Q.Q.Q.v+W@ ",
" X@Q.Q.Q.Q.Q.V+|+|+Y@. Z@`@. B@ #. .#+#@###G@y@$#%#$#&#*#=#-#;#. ># #. ,#'#)#>#|+|+n.Q.Q.Q.Q.Q.!# ",
" B.k+Q.Q.Q.Q.K@|+|+Z@~#{#]#. ^#/#. (#_#. :#<#[#F@}#|#1#S@. 2#x@. 3#4#5#6#|+7#8#|+|+9#0#Q.Q.Q.Q.Z+ ",
" a#Q.Q.Q.v+`+b#|+c#d#|+e#f#|+g#. h#i#. j#k#l#m#|+5#n#f@. o#p#. ,#|+q#r#s#|+|+|+|+t#u#Q.Q.Q.v# ",
" /.6+w#t+w+`+x#|+|+|+y#z#A#|+B#_ C#|+D#E#F#G#|+|+H#T@|+.#I#|+J#K#|+|+|+r#L#|+|+b#M#N#Q.Q.O#g@ ",
" /./.P#`+`+Q#|+|+R#S#T#|+|+s#U#|+|+7#|+s#s#|+|+|+s#|+s#|+|+V#W#|+X#|+Y#_ Z#|+`#`+/@ $I+.$ ",
" n./.+$`+`+}@$#|+@$. #$d#@#|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+|+d#|+|+L#$$F@. %$&$*$`+`+=$E.4+ ",
" /.-$`+`+`+;$>$,$. F#h#'$|+)$!$|+|+}#|+|+|+|+|+|+|+|+~$|+-#,$4#{$]$^$)#/$($`+`+_$:$/. ",
" /.<$[$}$|$1$2$3$4$. =#)$5$6$|+7$8$|+X#|+|+|+9$|+0$a$A#i#. 6#b$c$d$J@`+e$f$g$_ h$ ",
" i$j$. . k$l$V+m$n$o$>#. Q@F@p$q${#,#{#|+|+r$s$t$. K#d#j$u$v$w$V+`+x$y$. . . z$ ",
" A$. . . . B$`+`+C$D$E$F$G$2#. L##$. H$|+}#R@~#-#. I$|+J$K$V+`+`+`+L$. . . . . # ",
" . . . . . M$`+`+`+`+`+N$O$P$Q$-#Z#R$S$|+d#T$U$R#V$W$H.`+`+`+`+`+`+X$. . . . . . ",
" . . . . . Y$Z$`+`+`+`+`+`+`+`+}@`$ %.%+%+%O$@%H.C$`+`+`+`+`+`+1$#%$%%%&%*%. . . . # ",
" . . . . =%-%;%>%,%'%`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+)%. . !% . . . . ",
" . . . . ~%. . . {%`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+]%. . _ . . . ^% ",
" . . @ . . . /%(%K@`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+_%:%A.<%[%. . @ . . & ",
" < . . . . * /./.#+A.}%|%1%2%3%`+`+s@C$V+:$4%P+M././. . . . + . . ",
" . . . . . /././././././.m./././././.s. . . f . ",
" . $ . . /.0.0.n./. . . . ",
" . + . . ",
" . ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" 5%5%5% ",
" 5%5%5%5%5% 5%5%5%5%5% 5%5%5%5% ",
" 5%5%5%5%5% 5%5%5%5%5% 5%5%5%5% ",
" 5%5%5%5%5% 5%5%5%5%5% 5%5%5%5% ",
" 5%5%5%5%5% 5%5%5%5%5% ",
" 5%5%5%5%5% 5%5% 5%5% 5% 5%5%5%5%5% 5%5% 5%5% ",
" 5%5%5%5%5% 5%5%5%5%5%5%5%5%5% 5%5%5%5%5%5%5%5%5%5% 5%5%5%5%5%5%5% 5%5%5%5%5% 5%5%5%5% 5%5%5%5% 5%5%5%5%5%5%5% 5%5%5%5%5%5%5% 5%5%5%6% ",
" 5%5%5%5%5% 5%5%5%5%5%5%5%5%5%5%5%5% 5%5%5%5%5%5%5%5%5%5%5%5% 5%5%5%5%5%5%5%5%5%5%5%5%5%5%5% 5%5%5%5% 5%5%5%5%5%5%5%5%5%5%5%5%5%5% 5%5%5%5%5%5%5%5%5%5%5%5%5%6% ",
" 5%5%5%5%5% 5%5%5%5%5%5%5%5%5%5%5%5%5%5% 5%5%5%5%5%5% 5%5%5%5%5% 5%5%5%5%5%5%5%5%5%5%5%5%5%5%5% 5%5%5%5% 5%5%5%5%5%5%5%5%5%5%5%5%5%5%5% 5%5%5%5%5%5%5%5%5%5%5%5%5%5%6% ",
" 5%5%5%5%5% 5%5%5%5%5% 5%5%5%5% 5%5%5%5% 5%5%5%5%7% 5%5%5%5%5% 5%5%5%5%5%5% 5%5%5%5% 5%5%5%5%5% 5%5%5%5%5% 5%5%5%5%5% 5%5%5%5%5%6% ",
" 5%5%5%5%5% 5%5%5%5% 5%5%5%5%5% 5%5%5%5%7% 5%5%5%5%5% 5%5%5%5%5% 5%5%5%5% 5%5%5%5%5% 5%5%5%5% 5%5%5%5%5% 5%5%5%5%6% ",
" 5%5%5%5%5% 5%5%5%5% 5%5%5%5% 5%5%5%5%5%5%5%5%5%5%7% 5%5%5%5% 5%5%5%5%5% 5%5%5%5% 5%5%5%5% 5%5%5%5% 5%5%5%5% 5%5%5%5%6% ",
" 5%5%5%5%5% 5%5%5%5%5% 5%5%5%5% 5%5%5%5%5%5%5%5%5%5%5%5%7% 5%5%5%5% 5%5%5%5%5% 5%5%5%5% 5%5%5%5% 5%5%5%5% 5%5%5%5% 5%5%5%5%6% ",
" 5%5%5%5%5% 5%5%5%5% 5%5%5%5% 5%5%5%5%5%5% 5%5%5%5%7% 5%5%5%5% 7%5%5%5%5% 5%5%5%5% 5%5%5%5% 5%5%5%5% 5%5%5%5% 5%5%5%5%6% ",
" 5%5%5%5%5% 5%5%5%5% 5%5%5%5%5% 5%5%5%5% 5%5%5%5%7% 5%5%5%5% 5%5%5%5%5% 5%5%5%5% 5%5%5%5% 5%5%5%5% 5%5%5%5%5% 5%5%5%5%6% ",
" 5%5%5%5%5% 5%5%5%5%5% 5%5%5%5%5% 5%5%5%5%5% 5%5%5%5%7% 5%5%5%5%5% 5%5%5%5%5% 5%5%5%5% 5%5%5%5% 5%5%5%5% 5%5%5%5%5%5% 5%5%5%5%5%6% ",
" 5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5% 5%5%5%5%5%5% 5%5%5%5%5%5% 5%5%5%5%5% 5%5%5%5%5%5% 5%5%5%5%5%5% 5%5%5%5%5%5%5% 5%5%5%5% 5%5%5%5% 5%5%5%5% 5%5%5%5%5%5%5%5%5%5%5%5%5%5%6% 5%5%5%5% 5%5%5%5%5% 5%5%5%5% ",
" 5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5% 5%5%5%5%5%5%5%5%5%5%5%5% 5%5%5%5%5%5%5%5%5%5%5%5%5%5% 5%5%5%5%5%5%5%5%5%5%5%5%5%5%5% 5%5%5%5% 5%5%5%5% 5%5%5%5% 5%5%5%5%5%5%5%5%5%5%5%5%5%6% 5%5%5%5% 5%5%5%5%5% 5%5%5%5% ",
" 5%5%5%5%5%5%5%5%5%5%5%5%5%5%5%5% 5%5%5%5%5%5%5%5%5%5% 5%5%5%5%5%5%5% 5%5%5%5% 5%5%5%5%5%5%5% 5%5%5%5%5% 5%5%5%5% 5%5%5%5% 5%5%5%5% 5%5%5%5%5%5%5% 5%5%5%5%5% 5%5%5%5% 5%5%5%5%5% 5%5%5%5% ",
" 5%5%5%5% 5%5%5% 5%5%5% 5%5%5%5%7% ",
" 5%5%5%5% ",
" 5%5%5%5%5% 5%5%5%5%5% ",
" 5%5%5%5%5%5%5%5%5%5%5%5%5%5% ",
" 5%5%5%5%5%5%5%5%5%5%5% ",
" 5%5%5%5%5%5% ",
" ",
" "};

View File

@ -2115,7 +2115,7 @@ char *M_GetSaveGameDir(char *iwadname)
free(topdir);
#else
savegamedir = M_StringJoin(configdir, DIR_SEPARATOR_S, ".savegame/", NULL);
savegamedir = M_StringJoin(configdir, DIR_SEPARATOR_S, "saves/", NULL);
M_MakeDirectory(savegamedir);