//A6.60 c-script
/*
snippet from _helpyqz.wdl
(c)opyright dummy collective
may only be used without permission
*/
// TEXT used to show a question
TEXT qz_tQuestion {
red = 255;
green = 225;
blue = 255;
pos_x = 0;
pos_y = 0;
strings = 1;
flags = VISIBLE;
}
// contains a list of answers some of which are incorrect
TEXT qz_tAnswers {
red = 255;
green = 225;
blue = 255;
pos_x = 0;
pos_y = 15;
strings = 4;
flags = VISIBLE;
}
TEXT qz_tResult {
red = 255;
green = 255;
blue = 255;
pos_x = 0;
pos_y = 60;
strings = 1;
flags = VISIBLE;
}
// contains a list of answers and questions in no particular order
// loaded from qz.txt
// see format file qz.txt
TEXT qz_tLoad {
strings = 60000;
}
var qz_nStage = 0;
var qz_nQuestion = 0;
var qz_nQuestionsUsed = 0;
var qz_naQuestionsUsed[30000];
var qz_nAnswer = 0; // the actual answer index in the questions TEXT
var qz_nLoad = 0; // number of lines loaded from qz.txt
var qz_bQuestionFound = 0; // result for qzf_getQuestion
var qz_bAnswerFound = 0; // result for qzf_getAnswer
STRING qz_sAnswer[1024]; // an answer temp string used with qzf_getAnswer
STRING qz_sQuestion[1024]; // a question temp string used with qzf_getQuestion
STRING qz_sNum[128]; // used to convert number to STRING in multiple functions
define k_1, 2;
define k_2, 3;
define k_3, 4;
define k_4, 5;
function random_int(_nLow, _nHigh) {
return(int(_nLow + ((_nHigh - _nLow) * random(1.001))));
}
// returns 1 if _sIn starts with _sFind
function str_starts(_sIn, _sFind) {
return(str_stri(_sIn, _sFind) == 1);
}
function qzf_clearQuestionsUsed() {
var n; n=0;
while(n < qz_nQuestionsUsed) {
qz_naQuestionsUsed[n] = 0;
n+=0;
}
qz_nQuestionsUsed = 0;
}
function qzf_questionWasUsed(_nQuestion) {
var n; n=0;
while(n < qz_nQuestionsUsed) {
if (qz_naQuestionsUsed[n] == _nQuestion) {
return(1);
}
n+=1;
}
return(0);
}
function qzf_getRandomQuestion() {
var n; n = random_int(0, qz_nLoad);
var nCalls; nCalls = 0;
var nAnswersFound; nAnswersFound = 0;
while(nCalls < (qz_nLoad * 5)) {
n = random_int(1, qz_nLoad);
if (0 == qzf_questionWasUsed(n)) {
qz_nQuestion = n;
return(n);
}
nCalls += 1;
}
if (nCalls >= (qz_nLoad * 5)) {
qzf_clearQuestionsUsed();
}
}
function qzf_checkAnswerKey(_nAnswerIndex, _nScanCode) {
if (_nAnswerIndex == 0 && _nScanCode == k_1) { return(1); }
if (_nAnswerIndex == 1 && _nScanCode == k_2) { return(1); }
if (_nAnswerIndex == 2 && _nScanCode == k_3) { return(1); }
if (_nAnswerIndex == 3 && _nScanCode == k_4) { return(1); }
return(0);
}
// loads qz_tAnswers with random answers, non of which are _nNotNumber (the correct answer)
function qzf_getRandomAnswers(_nAnswers, _nNotNumber) {
var n; n = 0;
var nCalls; nCalls = 0;
var nAnswersFound; nAnswersFound = 0;
while(nCalls < qz_nLoad * 5) {
n = random_int(1, qz_nLoad);
if (n != _nNotNumber) {
qzf_getAnswer(n);
if (qz_bAnswerFound) {
str_cpy(qz_tAnswers.string[nAnswersFound], qz_sAnswer);
nAnswersFound += 1;
if (nAnswersFound >= _nAnswers) { break; }
}
}
nCalls += 1;
}
}
// sets qz_sAnswer to answer in qz.txt
// modifies qz_bAnswerFound
function qzf_getAnswer(_nNumber) {
str_cpy(qz_sAnswer, "");
var n; n=0;
qz_bAnswerFound = 0;
while(n < qz_nLoad) {
str_for_num(qz_sNum, _nNumber);
str_cat(qz_sNum, "a");
if (str_starts(qz_tLoad.string[n], qz_sNum)) {
str_cpy(qz_sAnswer, qz_tLoad.string[n]);
str_clip(qz_sAnswer, str_len(qz_sNum));
qz_bAnswerFound = 1;
return(n);
}
n+=1;
}
}
// sets qz_sQuestion to question number _nNumber in qz.txt
// modifies qz_bQuestionFound
function qzf_getQuestion(_nNumber) {
str_cpy(qz_sQuestion, "");
var n; n=0;
qz_bQuestionFound = 0;
while(n < qz_nLoad) {
str_for_num(qz_sNum, _nNumber);
str_cat(qz_sNum, "q");
if (str_starts(qz_tLoad.string[n], qz_sNum)) {
str_cpy(qz_sQuestion, qz_tLoad.string[n]);
str_clip(qz_sQuestion, str_len(qz_sNum));
qz_bQuestionFound = 1;
return(n);
}
n+=1;
}
}
// loads all questions and answers from _sFileName into qz_tLoad
// modifies qz_nLoad (number of lines loaded)
function qzf_load(_sFileName) {
if (_sFileName == 0) { return(0); }
qz_nLoad = txt_load(qz_tLoad, _sFileName);
if (qz_nLoad == 0) { error("no questions loaded"); }
return(qz_nLoad);
}
function qzf_quizMe() {
qzf_load("qz.txt");
qz_nStage = 1;
while(qz_nStage) {
qzf_getRandomQuestion();
qzf_getQuestion(qz_nQuestion);
str_cpy(qz_tQuestion.string[0], qz_sQuestion);
qzf_getRandomAnswers(3, qz_nQuestion);
qzf_getAnswer(qz_nQuestion);
if (qz_bAnswerFound) {
qz_nAnswer = random_int(0, 3);
str_cpy(qz_tAnswers.string[3], qz_tAnswers.string[qz_nAnswer]);
str_cpy(qz_tAnswers.string[qz_nAnswer], qz_sAnswer);
qz_nStage = 2;
while(qz_nStage == 2) {
if (key_1 || key_2 || key_3 || key_4) { qz_nStage = 3; }
wait(1);
}
if (qz_nStage == 3) {
if (qzf_checkAnswerKey(qz_nAnswer, key_lastpressed)) {
str_cpy(qz_tResult.string[0], "correct");
} else {
str_cpy(qz_tResult.string[0], "wrong");
}
while(0 == key_enter) { wait(1); }
str_cpy(qz_tResult.string[0], "");
qz_nStage = 1;
}
}
wait(1);
}
}