Skip to content

Commit

Permalink
Added port of QuickBASIC intro ASCII animation
Browse files Browse the repository at this point in the history
  • Loading branch information
rbergen committed Jan 31, 2021
1 parent 8b203a5 commit 781c47a
Show file tree
Hide file tree
Showing 13 changed files with 992 additions and 42 deletions.
9 changes: 8 additions & 1 deletion R136.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard_C>stdc11</LanguageStandard_C>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
Expand All @@ -102,6 +103,7 @@
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard_C>stdc11</LanguageStandard_C>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
Expand All @@ -116,6 +118,7 @@
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard_C>stdc11</LanguageStandard_C>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
Expand All @@ -130,6 +133,7 @@
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard_C>stdc11</LanguageStandard_C>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
Expand All @@ -140,16 +144,19 @@
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="curses.h" />
<ClInclude Include="include.h" />
<ClInclude Include="r136.h" />
<ClInclude Include="utf8.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="init.cpp" />
<ClCompile Include="loadsave.cpp" />
<ClCompile Include="main.cpp" />
<ClCompile Include="random.cpp" />
<ClCompile Include="intro.cpp" />
<ClCompile Include="status.cpp" />
<ClCompile Include="console.cpp" />
<ClCompile Include="use.cpp" />
<ClCompile Include="utf8.c" />
</ItemGroup>
<ItemGroup>
<None Include="Original\R136.zip" />
Expand Down
13 changes: 11 additions & 2 deletions R136.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,13 @@
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="include.h">
<ClInclude Include="curses.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curses.h">
<ClInclude Include="r136.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="utf8.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
Expand All @@ -47,6 +50,12 @@
<ClCompile Include="random.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="intro.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="utf8.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="Original\R136.zip">
Expand Down
129 changes: 111 additions & 18 deletions console.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
/***************************************************************************
* Includes necessary for functions to work
***************************************************************************/
#include "include.h"
#include "r136.h"
#include "utf8.h"

/***************************************************************************
* #defines of constants used by the functions
Expand All @@ -26,19 +27,31 @@
== 3: Insert on at start, use block cursor to indicate Insert off. */
#define L_INSFLAG 3

#define PAIR_BOLD 1
#define PAIR_BANNER 2
#define PAIR_ERROR 3
#define FG_BOLD COLOR_WHITE
#define FG_BANNER COLOR_RED
#define FG_ERROR COLOR_RED
#define ATTR_BOLD (COLOR_PAIR(PAIR_BOLD) | A_BOLD)
#define ATTR_BANNER (COLOR_PAIR(PAIR_BANNER) | A_UNDERLINE)
#define ATTR_ERROR (COLOR_PAIR(PAIR_ERROR) | A_BOLD)
#define FG_INVERSE COLOR_BLACK
#define FG_INVERSERED COLOR_RED
#define FG_NORMAL COLOR_WHITE
#define BG_BOLD COLOR_BLACK
#define BG_BANNER COLOR_BLACK
#define BG_ERROR COLOR_BLACK
#define BG_INVERSE COLOR_WHITE
#define BG_INVERSERED COLOR_WHITE
#define BG_NORMAL COLOR_BLACK
#define ATTR_BOLD (COLOR_PAIR(COLORS_BOLD) | A_BOLD)
#define ATTR_BANNER (COLOR_PAIR(COLORS_BANNER) | A_UNDERLINE)
#define ATTR_ERROR (COLOR_PAIR(COLORS_ERROR) | A_BOLD)
#define ATTR_INVERSE (COLOR_PAIR(COLORS_INVERSE))
#define ATTR_INVERSERED (COLOR_PAIR(COLORS_INVERSERED) | A_BOLD)
#define ATTR_NORMAL (COLOR_PAIR(COLORS_NORMAL))

chtype attributes[7];

WINDOW *BANNERWINDOW = NULL;
WINDOW* MAINWINDOW = NULL;
WINDOW *INPUTWINDOW = NULL;
WINDOW* FULLSCREEN = NULL;


/***************************************************************************
Expand Down Expand Up @@ -102,43 +115,124 @@ int printmw(const char* fmt, ...)
return retval;
}

void initcolors()
{
start_color();

init_pair(COLORS_BOLD, FG_BOLD, BG_BOLD);
attributes[COLORS_BOLD] = ATTR_BOLD;

init_pair(COLORS_BANNER, FG_BANNER, BG_BANNER);
attributes[COLORS_BANNER] = ATTR_BANNER;

init_pair(COLORS_ERROR, FG_ERROR, BG_ERROR);
attributes[COLORS_ERROR] = ATTR_ERROR;

init_pair(COLORS_INVERSE, FG_INVERSE, BG_INVERSE);
attributes[COLORS_INVERSE] = ATTR_INVERSE;

init_pair(COLORS_INVERSERED, FG_INVERSERED, BG_INVERSERED);
attributes[COLORS_INVERSERED] = ATTR_INVERSERED;

init_pair(COLORS_NORMAL, FG_NORMAL, BG_NORMAL);
attributes[COLORS_NORMAL] = ATTR_NORMAL;

}

void initconsole()
{
initscr();
noecho();
keypad(stdscr, true);

start_color();
init_pair(PAIR_BOLD, FG_BOLD, COLOR_BLACK);
init_pair(PAIR_BANNER, FG_BANNER, COLOR_BLACK);
init_pair(PAIR_ERROR, FG_ERROR, COLOR_BLACK);
FULLSCREEN = stdscr;

initcolors();
}

setupwindows();
void printfsblockat(int y, int x, int colors, const char** block, int rowcount)
{
wattron(FULLSCREEN, attributes[colors]);

for (int i = 0; i < rowcount; i++)
{
mvwaddstr(FULLSCREEN, y + i, x, block[i]);
}

wattroff(FULLSCREEN, attributes[colors]);
}

void printfsblocksectionat(int y, int x, int colors, const char** block, int topy, int leftx, int bottomy, int rightx)
{
wattron(FULLSCREEN, attributes[colors]);

for (int i = topy; i <= bottomy; i++)
{
mvwaddnstr(FULLSCREEN, y + i - topy, x, &block[i][u8_offset(block[i], leftx)], u8_offset(block[i], rightx - leftx + 1));
}

wattroff(FULLSCREEN, attributes[colors]);
}


void printfsat(int y, int x, int colors, const char* text)
{
wattron(FULLSCREEN, attributes[colors]);
mvwaddstr(FULLSCREEN, y, x, text);
wattroff(FULLSCREEN, attributes[colors]);
}

void clrfs(int colors)
{
wbkgd(FULLSCREEN, attributes[colors]);
werase(FULLSCREEN);
}

void updatefs()
{
wrefresh(FULLSCREEN);
}

void clrscr()
{
werase(MAINWINDOW);
}

void waitforkey()
void getfssize(int& y, int& x)
{
getmaxyx(FULLSCREEN, y, x);
}

void waitforkeyengine(WINDOW* window, bool dosetup) {
int y, x;

wrefresh(MAINWINDOW);
wrefresh(window);
while (true)
{
getyx(MAINWINDOW, y, x);
if (mvwgetch(MAINWINDOW, y, x) == KEY_RESIZE)
getyx(window, y, x);
if (mvwgetch(window, y, x) == KEY_RESIZE)
{
resize_term(0, 0);
setupwindows();
if (dosetup)
{
setupwindows();
}
}
else
break;
}
}

void waitforfskey()
{
waitforkeyengine(FULLSCREEN, false);
}

void waitforkey()
{
waitforkeyengine(MAINWINDOW, true);
}

void printcentered(WINDOW* win, const char* str)
{
int winwidth = getmaxx(win);
Expand Down Expand Up @@ -200,7 +294,6 @@ void printcmdstr(const char* fmt, ...)
clearline(INPUTWINDOW);

va_list args;
int retval;

wattron(INPUTWINDOW, ATTR_ERROR);

Expand Down
16 changes: 8 additions & 8 deletions init.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#include "include.h"
#include "r136.h"
#include <time.h>

Room rooms[ROOM_COUNT] = { // { name, descript }
Expand All @@ -21,7 +21,7 @@ Room rooms[ROOM_COUNT] = { // { name, descript }
{ "in het bos" },
{ "op een open plek", "Er ligt hier een dood konijn dat wordt belaagd door vliegen." },
{ "in het moeras", "Er hangt een griezelige nevel over het stinkende oppervlak." },
{ "in de ruïne", "Je bevindt je in een spookachtige ruïne. Er is hier een wankele trap die naar\nbeneden leidt." },
{ u8"in de ruïne", u8"De ruïne is een spookachtige bouwval. Er is hier een wankele trap die naar\nbeneden leidt." },

{ "in de slijmgrot", "De wanden van deze grot zijn bekleed met een snotachtig slijm." },
{ "in de zwarte grot", "Je ziet geen hand voor ogen." },
Expand All @@ -31,7 +31,7 @@ Room rooms[ROOM_COUNT] = { // { name, descript }
{ "in een verwaarloosde grot" },
{ "in een lege grot" },
{ "in de hoofdgrot", "Er staat hier een batterij aan mysterieuze apparatuur." },
{ "in de hiërogliefengrot", "Op de wanden staan hiërogliefen waar je geen wijs uit wordt." },
{ u8"in de hiërogliefengrot", u8"Op de wanden staan hiërogliefen waar je geen wijs uit wordt." },
{ "in de stankgrot", "Er hangt hier een smerige lucht die je herinnert aan de zware lucht van een\nbeerput." },
{ "in een troosteloze grot" },
{ "in de TL-grot", "De grot wordt zwak verlicht door een lichtbron die hoog aan het plafond hangt." },
Expand All @@ -40,12 +40,12 @@ Room rooms[ROOM_COUNT] = { // { name, descript }
{ "in de kaktusgrot", "Je bent omringd door giftige kaktussen die in deze grot staan." },
{ "in de stalagmietengrot", "Hier zie je een traliewerk van stalagmieten." },
{ "in de stormgrot", "Door deze grot loeit een harde wind, waardoor je je vast moet grijpen aan een\nvan de wanden." },
{ "in de mistgrot", "Een dichte mist belemmert je zicht, en je verliest je or‹entatiegevoel." },
{ "in de mistgrot", "Een dichte mist belemmert je zicht, en je verliest je or‹entatiegevoel." },
{ "in de wenteltrapgrot", "In deze grot bevindt zich een grote, stenen wenteltrap die waarschijnlijk naar\nandere niveaus leidt." },
{ "in de tentakelgrot", "Van alle kanten komen grote tentakels die je aftasten en groene sporen op je\nhuid achterlaten." },

{ "in de vuilnisgrot", "In deze grot ligt een grote stapel rottende etensresten. De stank is bijna on-\ndraaglijk." },
{ "in de echogrot", "Hier worden alle geluiden die je maakt tegen de wanden geëcho'd." },
{ "in de echogrot", u8"Hier worden alle geluiden die je maakt tegen de wanden geëcho'd." },
{ "in de geheime grot", "Op de grond van deze grot liggen allerlei onbekende en geheimzinnige voorwer-\npen." },
{ "in de voedselgrot", "Zo te ruiken is dit waarschijnlijk eens een keuken geweest..." },
{ "in de grot van de gnoe", "Hier liggen de geraamtes van wezens die eerder ten prooi zijn gevallen aan de\ngnoe." },
Expand Down Expand Up @@ -200,13 +200,13 @@ Item items[ITEM_COUNT] = { // { name, descript, room, useableon }
{ "de hasj", "Het is een zakje met spul dat lijkt op tabak.", ROOM_DRUGSGROT, LIVING_BARBECUE },
{ "het rood kristal", "Het is een helder, roodgekleurd kristal. Even zie je een mysterieuze twinke-\nling.", UNDEFINED, LIVING_DRAKEKOP },
{ "de slaapmuts", "Het is een Mickey Mouse-slaapmuts met vrolijke kleuren.", ROOM_DWANGBUISGROT, LIVING_DRAAK },
{ "de noekietronenbom", "De bom bestaat uit een aantal dunne buizen in een cilinder. Daaromheen zitten\neen aantal slangetjes. Er klinkt een vreemd gebrom dat uit een rooster komt. Er\nzit een bordje op: -5 - 105ø, Codenaam: R136.", ROOM_HOOFDGROT, LIVING_LAVA },
{ "de noekietronenbom", u8"De bom bestaat uit een aantal dunne buizen in een cilinder. Daaromheen zitten\neen aantal slangetjes. Er klinkt een vreemd gebrom dat uit een rooster komt. Er\nzit een bordje op: -5° - 105°, Codenaam: R136.", ROOM_HOOFDGROT, LIVING_LAVA },
{ "de zaklamp", "Het is een zwarte, aluminium zaklamp met een halogeenlampje erin.", ROOM_TLGROT, connectToItem(ITEM_BATTERIJEN) },
{ "het verband", "Het is een witte doos met een rood kruis waarin wat verband en een paar pleis-\nters zitten.", ROOM_TENTAKELGROT, UNDEFINED },
{ "de vlammenwerper", "De vlammenwerper bestaat uit een pijp, een zuur- en een brandstoffles en een\naktivatieknop. Uit de pijp komt een klein waakvlammetje.", ROOM_VUILNISGROT, LIVING_BOOM },
{ "de vlammenwerper", "De vlammenwerper bestaat uit een pijp, een zuur- en een brandstoffles en een\nactivatieknop. Uit de pijp komt een klein waakvlammetje.", ROOM_VUILNISGROT, LIVING_BOOM },
{ "het kookboek", "Het is een oud, vergeeld kookboek met daarin een koekjesrecept. Er staat:\n'Pak wat hellehond en wat hasj, en gooi het in de barbecue'.\nDat is alles.", ROOM_VOEDSELGROT, UNDEFINED },
{ "de tnt", "De T.N.T. is een bosje rode staven met een velletje waarop staat: 'Pas op!\nSchokgevoelig!'", ROOM_LEGEGROT51, UNDEFINED },
{ "het mosterdgaspatroon", "Het is een patroon dat mosterdgas onder druk bevat. Er zitten draadjes aan, en\nje kunt niets vinden om hem te aktiveren.", UNDEFINED, connectToItem(ITEM_ONTSTEKING) },
{ "het mosterdgaspatroon", "Het is een patroon dat mosterdgas onder druk bevat. Er zitten draadjes aan, en\nje kunt niets vinden om hem te activeren.", UNDEFINED, connectToItem(ITEM_ONTSTEKING) },
{ "het giftige vlees", "Het is een stuk vlees dat er op zich lekker uit ziet, maar een paar groene\nvlekken heeft. Er zit een dode mier op.", ROOM_VEILIGEGROT, LIVING_GNOE },
{ "de ontsteking", "De ontsteking is een kastje met een T-vormige hendel erop.", ROOM_SKOEBIEGROT, connectToItem(ITEM_GASPATROON) },
{ "het pakje batterijen", "Het is een pakketje met penlights. Konijntjes kunnen er uren mee trommelen.", ROOM_RADIOACTIEVEGROT, connectToItem(ITEM_ZAKLAMP) },
Expand Down
Loading

0 comments on commit 781c47a

Please sign in to comment.