1
0

SaveLoad.gml 2.0 KB

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