SaveLoad.gml 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. function get_default_save_data()
  2. {
  3. return
  4. {
  5. player:
  6. {
  7. maxHP: 6,
  8. maxINK: 9,
  9. Credit: 0,
  10. abilities:
  11. {
  12. attack: false,
  13. annotate: false,
  14. dash: false,
  15. wall_climb: false,
  16. double_jump: false
  17. },
  18. corpse:
  19. {
  20. targetRoom: noone,
  21. xPos: -1,
  22. yPos: -1,
  23. droppedCredit: 0
  24. },
  25. tutorial:
  26. {
  27. dash : false,
  28. jump : false,
  29. attack : false,
  30. pogo : false,
  31. save : false
  32. }
  33. },
  34. world:
  35. {
  36. spRoom: "rTest1",
  37. spxPos: 192,
  38. spyPos: 864,
  39. destroyed_objects: {},
  40. defeated_boss: {}
  41. }/*,
  42. meta:
  43. {
  44. play_time: 0,
  45. save_date: ""
  46. }*/
  47. }
  48. }
  49. function save_game_to_disk()
  50. {
  51. // 更新元数据
  52. // global.save_data.meta.save_date = date_datetime_string(date_current_datetime());
  53. // 序列化
  54. var _json_string = json_stringify(global.save_data);
  55. // 使用buffer写入
  56. var _buffer = buffer_create(string_byte_length(_json_string) + 1, buffer_fixed, 1);
  57. buffer_write(_buffer, buffer_string, _json_string);
  58. buffer_save(_buffer, global.save_filename);
  59. buffer_delete(_buffer);
  60. if global.developer_mode
  61. show_debug_message("The game has been saved to " + global.save_filename);
  62. }
  63. function load_game_from_disk()
  64. {
  65. if !file_exists(global.save_filename)
  66. return;
  67. // 使用buffer读取
  68. var _buffer = buffer_load(global.save_filename);
  69. var _json_string = buffer_read(_buffer, buffer_string);
  70. buffer_delete(_buffer);
  71. // 反序列化
  72. var _loaded_data = json_parse(_json_string);
  73. // 覆盖当前的全局存档数据
  74. global.save_data = _loaded_data;
  75. room_goto(asset_get_index(global.save_data.world.spRoom));
  76. global.in_game_manager = icl(oInGameManager);
  77. }
  78. function self_check_destroy()
  79. {
  80. if struct_exists(global.save_data.world.destroyed_objects, uuid)
  81. instance_destroy();
  82. }
  83. function self_record_destroy(_callback = undefined)
  84. {
  85. var _list = global.save_data.world.destroyed_objects;
  86. _list[$ uuid] = true;
  87. if is_method(_callback)
  88. _callback();
  89. save_game_to_disk();
  90. instance_destroy();
  91. }