SaveLoad.gml 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. function initialize_save_data()
  2. {
  3. global.save_data =
  4. {
  5. player:
  6. {
  7. maxHP: 5,
  8. maxINK: 9,
  9. Credit: 0,
  10. abilities:
  11. {
  12. attack: false,
  13. accesscard : false,
  14. annotate: false,
  15. dash: false,
  16. wall_climb: false,
  17. double_jump: false
  18. },
  19. corpse:
  20. {
  21. targetRoom: noone,
  22. xPos: -1,
  23. yPos: -1,
  24. droppedCredit: 0
  25. },
  26. },
  27. world:
  28. {
  29. spRoom: "rTest1",
  30. spxPos: 192,
  31. spyPos: 864,
  32. activated_objects: {},
  33. defeated_boss: {},
  34. npc_flags: {}
  35. }
  36. };
  37. global.dialogue =
  38. {
  39. warden:
  40. {
  41. idle : ["Morning!"],
  42. first :
  43. [[
  44. @"Good morning.
  45. I haven't met you before!
  46. Are you new here?",
  47. @"By the way, my access card is lost,
  48. so you probably can't leave the dorm right now.
  49. I'm pretty sorry."
  50. ],[
  51. @"Tell me if you see it anywhere!"
  52. ]],
  53. accesscard :
  54. [[
  55. @"Wow, thanks a lot!
  56. Here, try this.",
  57. @"Oh, I can lend a card to you.
  58. There may be other locked doors like these."
  59. ],[
  60. @"Are you leaving?
  61. Remember to pay a visit when you have spare time.
  62. I'm planning to sell some daily necessities."
  63. ]]
  64. }
  65. };
  66. var _npc_names = struct_get_names(global.dialogue);
  67. for(var i = 0; i < array_length(_npc_names); i++)
  68. {
  69. var _npc = _npc_names[i];
  70. var _blocks = struct_get_names(global.dialogue[$ _npc]);
  71. var _flags = {};
  72. for(var j = 0; j < array_length(_blocks); j++)
  73. {
  74. var _block = _blocks[j];
  75. if _block != "idle"
  76. _flags[$ _block] = -1;
  77. else if _block == "first"
  78. _flags[$ _block] = 0;
  79. }
  80. global.save_data.world.npc_flags[$ _npc] = _flags;
  81. }
  82. }
  83. function save_game_to_disk()
  84. {
  85. var _json_string = json_stringify(global.save_data);
  86. var _buffer = buffer_create(string_byte_length(_json_string) + 1, buffer_fixed, 1);
  87. buffer_write(_buffer, buffer_string, _json_string);
  88. buffer_save(_buffer, global.save_filename);
  89. buffer_delete(_buffer);
  90. if global.developer_mode
  91. show_debug_message("The game has been saved to " + global.save_filename);
  92. }
  93. function load_game_from_disk()
  94. {
  95. if !file_exists(global.save_filename)
  96. return;
  97. var _buffer = buffer_load(global.save_filename);
  98. var _json_string = buffer_read(_buffer, buffer_string);
  99. buffer_delete(_buffer);
  100. var _loaded_data = json_parse(_json_string);
  101. global.save_data = _loaded_data;
  102. room_goto(asset_get_index(global.save_data.world.spRoom));
  103. global.in_game_manager = icl(oInGameManager);
  104. }
  105. function self_check_activated()
  106. {
  107. return struct_exists(global.save_data.world.activated_objects, uuid)
  108. }
  109. function autosave()
  110. {
  111. var _list = global.save_data.world.activated_objects;
  112. _list[$ uuid] = true;
  113. save_game_to_disk();
  114. }