objects/oLevelEditor/keypress_anykey.gml
From spelunky.gmk, Spelunky Classic 1.1's source, © 2008, 2009 Derek Yu and Mossmouth, LLC, shown whole under the Spelunky User License v1.1b. Extracted by spelunky.ai's tools, an unofficial fan project, one file per script or event; the // ==== lines are the extractor's, naming each action of the event. Some scripts are others' work that Derek Yu credits in the source's readme.txt: Martin Piecyk's platform engine, ChevyRay's view scaling scripts and tsg1zzn's Super Sound System.
oLevelEditor's keypress anykey event, 322 lines of GML.
if (status == GET_FILE_NAME){ if (keyboard_key == vk_enter) { if (levelName != "") { status = EDIT; file = file_text_open_read("levels/" + string_lower(levelName)+".lvl"); if (file) { for (j = 0; j < 32; j += 1) { str = file_text_read_string(file); for (i = 0; i < 40; i += 1) { levelArray[i, j] = string_char_at(str, i+1); //scrCreateTile(levelArray[i, j], 16+i*16, 16+j*16); } file_text_readln(file); } author = file_text_read_string(file); file_text_readln(file); music = file_text_read_string(file); file_text_readln(file); lifeStart = file_text_read_string(file); file_text_readln(file); bombStart = file_text_read_string(file); file_text_readln(file); ropeStart = file_text_read_string(file); file_text_readln(file); nextLevel = file_text_read_string(file); exitNamesNum = 0; if (not file_text_eof(file)) { file_text_readln(file); exitNamesNum = real(file_text_read_string(file)); } if (exitNamesNum > 0) { file_text_readln(file); for (i = 0; i < exitNamesNum; i += 1) { exitNames[i] = file_text_read_string(file); if (i < exitNamesNum-1) file_text_readln(file); } } signNamesNum = 0; if (not file_text_eof(file)) { file_text_readln(file); signNamesNum = real(file_text_read_string(file)); } if (signNamesNum > 0) { file_text_readln(file); for (i = 0; i < signNamesNum; i += 1) { signNames[i] = file_text_read_string(file); if (i < signNamesNum-1) file_text_readln(file); } } file_text_close(file); // build level exitNamesID = 0; signNamesID = 0; for (j = 0; j < 32; j += 1) { for (i = 0; i < 40; i += 1) { scrCreateTile(levelArray[i, j], 16+i*16, 16+j*16); if (levelArray[i, j] == "X") { obj = instance_position(16+i*16, 16+j*16, oExit); if (obj) { if (exitNamesNum > 0) { obj.leadsTo = exitNames[exitNamesID]; exitNamesID += 1; } } } else if (levelArray[i, j] == "@") { obj = instance_position(16+i*16, 16+j*16, oEntrance); if (obj) { if (exitNamesNum > 0) { obj.leadsTo = exitNames[exitNamesID]; exitNamesID += 1; } } } else if (levelArray[i, j] == "I") { obj = instance_position(16+i*16, 16+j*16, oMsgSign); if (obj) { if (signNamesNum > 0) { obj.message = signNames[signNamesID]; signNamesID += 1; } } } } } } window_set_cursor(cr_default); oCursObj.visible = true; instance_create(x+16, y, oEditButton); instance_create(x+320-32, y, oNewButton); instance_create(x+320-48, y, oTestButton); } } else if (keyboard_key == vk_backspace or keyboard_key == vk_delete) { //levelName += "DEL"; levelName = string_delete(levelName, string_length(levelName), 1); } else levelName += scrGetChar(keyboard_key);}else if (status == EDIT){ if (keyboard_key == ord('E')) { if (mouse_x > 16 and mouse_x < room_width-16 and mouse_y > 16 and mouse_y < room_height-16 and oCursObj.x >= 16 and oCursObj.x < room_width-16 and oCursObj.y >= 16 and oCursObj.y < room_height-16) { obj = instance_position(oCursObj.x+8, oCursObj.y+12, oDrawnSprite); if (obj) { if (obj.type == "Exit") { textEdit = obj.leadsTo; oLevelEditor.status = EDIT_DOOR; with oNewButton { instance_destroy(); } with oTestButton { instance_destroy(); } with oEditButton { instance_destroy(); } //levelArray[floor(oCursObj.x/16)-1, floor(oCursObj.y/16)-1] = "0"; } else if (obj.type == "Message Sign") { textEdit = obj.message; oLevelEditor.status = EDIT_MSG; with oNewButton { instance_destroy(); } with oTestButton { instance_destroy(); } with oEditButton { instance_destroy(); } //levelArray[floor(oCursObj.x/16)-1, floor(oCursObj.y/16)-1] = "0"; } } } }}else if (status == EDIT_DOOR){ if (keyboard_key == vk_enter) { obj.leadsTo = textEdit; status = EDIT; window_set_cursor(cr_default); oCursObj.visible = true; instance_create(x+16, y, oEditButton); instance_create(x+320-48, y, oNewButton); instance_create(x+320-48, y, oTestButton); } else if (keyboard_key == vk_backspace or keyboard_key == vk_delete) { textEdit = string_delete(textEdit, string_length(textEdit), 1); } else if (string_length(textEdit) < 38) textEdit += scrGetChar(keyboard_key);}else if (status == EDIT_MSG){ if (keyboard_key == vk_enter) { obj.message = textEdit; status = EDIT; window_set_cursor(cr_default); oCursObj.visible = true; instance_create(x+16, y, oEditButton); instance_create(x+320-48, y, oNewButton); instance_create(x+320-48, y, oTestButton); } else if (keyboard_key == vk_backspace or keyboard_key == vk_delete) { textEdit = string_delete(textEdit , string_length(textEdit), 1); } else if (string_length(textEdit) < 38)textEdit += scrGetChar(keyboard_key);}else if (status == INFO_NAME){ if (keyboard_key == vk_enter) { if (levelName != "") { status = INFO_AUTHOR; window_set_cursor(cr_default); oCursObj.visible = true; } } else if (keyboard_key == vk_backspace or keyboard_key == vk_delete) { levelName = string_delete(levelName, string_length(levelName), 1); } else levelName += scrGetChar(keyboard_key);}else if (status == INFO_AUTHOR){ if (keyboard_key == vk_enter) { if (author != "") { status = INFO_MUSIC; window_set_cursor(cr_default); oCursObj.visible = true; } } else if (keyboard_key == vk_backspace or keyboard_key == vk_delete) { author = string_delete(author, string_length(author), 1); } else author += scrGetChar(keyboard_key);}else if (status == INFO_MUSIC){ if (keyboard_key == vk_enter) { if (music != "") { status = INFO_LIFE; window_set_cursor(cr_default); oCursObj.visible = true; } } else if (keyboard_key == vk_backspace or keyboard_key == vk_delete) { music = string_delete(music, string_length(music), 1); } else music += scrGetChar(keyboard_key);}else if (status == INFO_LIFE){ if (keyboard_key == vk_enter) { if (lifeStart != "") { status = INFO_BOMBS; window_set_cursor(cr_default); oCursObj.visible = true; } } else if (keyboard_key == vk_backspace or keyboard_key == vk_delete) { lifeStart = string_delete(lifeStart, string_length(lifeStart), 1); } else lifeStart += scrGetChar(keyboard_key);}else if (status == INFO_BOMBS){ if (keyboard_key == vk_enter) { if (bombStart != "") { status = INFO_ROPE; window_set_cursor(cr_default); oCursObj.visible = true; } } else if (keyboard_key == vk_backspace or keyboard_key == vk_delete) { bombStart = string_delete(bombStart, string_length(bombStart), 1); } else bombStart += scrGetChar(keyboard_key);}else if (status == INFO_ROPE){ if (keyboard_key == vk_enter) { if (ropeStart != "") { status = INFO_NEXT; window_set_cursor(cr_default); oCursObj.visible = true; } } else if (keyboard_key == vk_backspace or keyboard_key == vk_delete) { ropeStart = string_delete(ropeStart, string_length(ropeStart), 1); } else ropeStart += scrGetChar(keyboard_key);}else if (status == INFO_NEXT){ if (keyboard_key == vk_enter) { if (nextLevel != "") { status = EDIT; window_set_cursor(cr_default); oCursObj.visible = true; instance_create(x+16, y, oEditButton); instance_create(x+320-48, y, oNewButton); instance_create(x+320-48, y, oTestButton); } } else if (keyboard_key == vk_backspace or keyboard_key == vk_delete) { nextLevel = string_delete(nextLevel , string_length(nextLevel), 1); } else nextLevel += scrGetChar(keyboard_key);}