Guest User

Untitled

a guest
Oct 17th, 2015
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.95 KB | None | 0 0
  1. #==============================================================================
  2. # +++ MOG - Scene File A (V1.3) +++
  3. #==============================================================================
  4. # By Moghunter
  5. # https://atelierrgss.wordpress.com/
  6. #==============================================================================
  7. # Tela de salvar e carregar animado versão A.
  8. #==============================================================================
  9. # Serão necessários as seguintes imagens na pasta Graphics/System
  10. #
  11. # Save_Number.png
  12. # Save_Background.png
  13. # Save_Character_Floor.png
  14. # Save_Layout01.png
  15. # Save_Layout02.png
  16. # Save_Window01.png
  17. # Save_Window02.png
  18. #
  19. #==============================================================================
  20. #
  21. #==============================================================================
  22. # ● Histórico (Version History)
  23. #==============================================================================
  24. # v 1.3 - Melhor codificação.
  25. # v 1.1 - Melhoria no sistema de dispose de imagens.
  26. #==============================================================================
  27. module MOG_SCENE_FILE
  28. #Quantidade de slots de saves.
  29. FILES_MAX = 9
  30. end
  31.  
  32. #==============================================================================
  33. # ■ Game Temp
  34. #==============================================================================
  35. class Game_Temp
  36.  
  37. attr_accessor :scene_save
  38. #--------------------------------------------------------------------------
  39. # ● Initialize
  40. #--------------------------------------------------------------------------
  41. alias mog_scene_file_initialize initialize
  42. def initialize
  43. mog_scene_file_initialize
  44. @scene_save = false
  45. end
  46.  
  47. end
  48. #==============================================================================
  49. # ■ Window_Base
  50. #==============================================================================
  51. class Window_Base < Window
  52.  
  53. #--------------------------------------------------------------------------
  54. # ● draw_picture_number(x,y,value,file_name,align, space, frame_max ,frame_index)
  55. #--------------------------------------------------------------------------
  56. # X - Posição na horizontal
  57. # Y - Posição na vertical
  58. # VALUE - Valor Numérico
  59. # FILE_NAME - Nome do arquivo
  60. # ALIGN - Centralizar 0 - Esquerda 1- Centro 2 - Direita
  61. # SPACE - Espaço entre os números.
  62. # FRAME_MAX - Quantidade de quadros(Linhas) que a imagem vai ter.
  63. # FRAME_INDEX - Definição do quadro a ser utilizado.
  64. #--------------------------------------------------------------------------
  65. def draw_picture_number(x,y,value, file_name,align = 0, space = 0, frame_max = 1,frame_index = 0)
  66. number_image = Cache.system(file_name)
  67. frame_max = 1 if frame_max < 1
  68. frame_index = frame_max -1 if frame_index > frame_max -1
  69. align = 2 if align > 2
  70. cw = number_image.width / 10
  71. ch = number_image.height / frame_max
  72. h = ch * frame_index
  73. number = value.abs.to_s.split(//)
  74. case align
  75. when 0
  76. plus_x = (-cw + space) * number.size
  77. when 1
  78. plus_x = (-cw + space) * number.size
  79. plus_x /= 2
  80. when 2
  81. plus_x = 0
  82. end
  83. for r in 0..number.size - 1
  84. number_abs = number[r].to_i
  85. number_rect = Rect.new(cw * number_abs, h, cw, ch)
  86. self.contents.blt(plus_x + x + ((cw - space) * r), y , number_image, number_rect)
  87. end
  88. number_image.dispose
  89. end
  90.  
  91. #--------------------------------------------------------------------------
  92. # ● Draw Help Layout
  93. #--------------------------------------------------------------------------
  94. def draw_face_save(name,x,y,type)
  95. if type == 0
  96. image_name = name + "_0"
  97. elsif type == 1
  98. image_name = name + "_1"
  99. else
  100. image_name = name + "_2"
  101. end
  102. image = Cache.face(image_name)
  103. cw = image.width
  104. ch = image.height
  105. src_rect = Rect.new(0, 0, cw, ch)
  106. self.contents.blt(x , y , image, src_rect)
  107. image.dispose
  108. end
  109.  
  110. #--------------------------------------------------------------------------
  111. # ● draw_parameter_layout
  112. #--------------------------------------------------------------------------
  113. def draw_parameter_layout(x,y)
  114. image = Cache.system("Save_Window01")
  115. cw = image.width
  116. ch = image.height
  117. src_rect = Rect.new(0, 0, cw, ch)
  118. self.contents.blt(x , y , image, src_rect)
  119. image.dispose
  120. end
  121.  
  122. #--------------------------------------------------------------------------
  123. # ● draw_parameter_layout2
  124. #--------------------------------------------------------------------------
  125. def draw_parameter_layout2(x,y,type)
  126. if type == 0
  127. image = Cache.system("Save_Window02")
  128. else
  129. image = Cache.system("Save_Window03")
  130. end
  131. cw = image.width
  132. ch = image.height
  133. src_rect = Rect.new(0, 0, cw, ch)
  134. self.contents.blt(x , y , image, src_rect)
  135. image.dispose
  136. end
  137.  
  138. #--------------------------------------------------------------------------
  139. # ● draw_character_floor
  140. #--------------------------------------------------------------------------
  141. def draw_character_floor(x,y)
  142. image = Cache.system("Save_Character_Floor")
  143. cw = image.width
  144. ch = image.height
  145. src_rect = Rect.new(0, 0, cw, ch)
  146. self.contents.blt(x , y , image, src_rect)
  147. image.dispose
  148. end
  149.  
  150. end
  151.  
  152. #==============================================================================
  153. # ■ DataManager
  154. #==============================================================================
  155. module DataManager
  156.  
  157. #--------------------------------------------------------------------------
  158. # ● Make Save Header
  159. #--------------------------------------------------------------------------
  160. def self.make_save_header
  161. header = {}
  162. header[:characters] = $game_party.characters_for_savefile
  163. header[:playtime_s] = $game_system.playtime_s
  164. header[:playtime] = $game_system.playtime
  165. header[:map_name] = $game_map.display_name
  166. header[:members] = $game_party.members
  167. header
  168. end
  169. end
  170.  
  171. #==============================================================================
  172. # ■ Window_SaveFile
  173. #==============================================================================
  174. class Window_SaveFile_A < Window_Base
  175. attr_reader :filename
  176. attr_reader :file_exist
  177. attr_reader :time_stamp
  178. attr_reader :selected
  179. attr_reader :file_index
  180.  
  181. #--------------------------------------------------------------------------
  182. # ● Initialize
  183. #--------------------------------------------------------------------------
  184. def initialize(file_index, filename)
  185. super(0, 0,720, 140)
  186. self.opacity = 0
  187. @file_index = file_index
  188. @filename = filename
  189. load_gamedata
  190. refresh
  191. @selected = false
  192. end
  193.  
  194. #--------------------------------------------------------------------------
  195. # ● load_gamedata
  196. #--------------------------------------------------------------------------
  197. def load_gamedata
  198. @time_stamp = Time.at(0)
  199. @file_exist = FileTest.exist?(@filename)
  200. if @file_exist
  201. header = DataManager.load_header(@file_index)
  202. if header == nil
  203. @file_exist = false
  204. return
  205. end
  206. @characters = header[:characters]
  207. @total_sec = header[:playtime]
  208. @mapname = header[:map_name]
  209. @members = header[:members]
  210. end
  211. end
  212.  
  213. #--------------------------------------------------------------------------
  214. # ● Refresh
  215. #--------------------------------------------------------------------------
  216. def refresh
  217. self.contents.clear
  218. self.contents.font.color = normal_color
  219. xp = 96
  220. ex = 60
  221. if @file_exist
  222. if @total_sec == nil
  223. draw_parameter_layout2(0,50,0)
  224. draw_parameter_layout(-10 + xp,0)
  225. value = @file_index + 1
  226. draw_picture_number(13 + xp, 32,value, "Save_Number_01",1,0,3,0)
  227. self.contents.draw_text(140, 50, 450, 32, "Error! - Please, dont't use your old Save Files...", 0)
  228. return
  229. end
  230. draw_parameter_layout2(0,50,0)
  231. draw_parameter_layout(-10 + xp,0)
  232. value = @file_index + 1
  233. draw_picture_number(13 + xp, 32,value, "Save_Number_01",1,0,3,0)
  234. draw_party_characters(180 + xp, 75,ex)
  235. draw_playtime(495, 20, contents.width - 4, 2)
  236. draw_map_location( 400 + xp,64)
  237. draw_level(185 + xp,85,ex)
  238. draw_face_save(40 + xp,0)
  239. else
  240. draw_parameter_layout2(0,50,1)
  241. draw_parameter_layout(-10 + xp,0)
  242. value = @file_index + 1
  243. draw_picture_number(13 + xp, 32,value, "Save_Number_01",1,0,3,0)
  244. self.contents.draw_text(260, 50, 120, 32, "No Data", 1)
  245. end
  246. end
  247.  
  248. #--------------------------------------------------------------------------
  249. # ● draw_face
  250. #--------------------------------------------------------------------------
  251. def draw_face_save(x,y)
  252. draw_actor_face(@members[0], x, y)
  253. draw_actor_face(@members[1], 195, y)
  254. draw_actor_face(@members[2],240, y)
  255. end
  256.  
  257. #--------------------------------------------------------------------------
  258. # ● draw_level
  259. #--------------------------------------------------------------------------
  260. def draw_level(x,y,ex)
  261. self.contents.font.color = normal_color
  262. break if i > 3
  263. level = @members[i].level
  264. draw_picture_number(x + (ex * i) , y ,level, "Save_Number_01",1,0,3,1)
  265. end
  266. end
  267.  
  268. #--------------------------------------------------------------------------
  269. # ● draw_map_location
  270. #--------------------------------------------------------------------------
  271. def draw_map_location(x,y)
  272. self.contents.font.bold = true
  273. self.contents.font.name = "Georgia"
  274. self.contents.font.size = 20
  275. self.contents.font.italic = true
  276. self.contents.draw_text(x, y, 125, 32, @mapname.to_s, 0)
  277. end
  278. #--------------------------------------------------------------------------
  279. # ● draw_party_characters
  280. #--------------------------------------------------------------------------
  281. def draw_party_characters(x, y,ex)
  282. break if i > 3
  283. name = @characters[i][0]
  284. index = @characters[i][1]
  285. draw_character_floor(- 35 + x + i * ex,y - 20)
  286. draw_character(name, index, x + i * ex, y)
  287. end
  288. end
  289.  
  290. #--------------------------------------------------------------------------
  291. # ● draw_playtime
  292. #--------------------------------------------------------------------------
  293. def draw_playtime(x, y, width, align)
  294. hour = @total_sec / 60 / 60
  295. min = @total_sec / 60 % 60
  296. sec = @total_sec % 60
  297. time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
  298. draw_picture_number(x + 18 * 0, y ,0, "Save_Number_01",0,0,3,0) if hour < 10
  299. draw_picture_number(x + 18 * 1, y ,hour, "Save_Number_01",0,0,3,0)
  300. draw_picture_number(x + 18 * 3, y ,0, "Save_Number_01",0,0,3,0) if min < 10
  301. draw_picture_number(x + 18 * 4, y ,min, "Save_Number_01",0,0,3,0)
  302. draw_picture_number(x + 18 * 6, y ,0, "Save_Number_01",0,0,3,0) if sec < 10
  303. draw_picture_number(x + 18 * 7, y ,sec , "Save_Number_01",0,0,3,0)
  304. end
  305.  
  306. #--------------------------------------------------------------------------
  307. # ● selected
  308. #--------------------------------------------------------------------------
  309. def selected=(selected)
  310. @selected = selected
  311. end
  312. end
  313.  
  314. #==============================================================================
  315. # ■ Scene Save
  316. #==============================================================================
  317. class Scene_Save < Scene_File
  318. #--------------------------------------------------------------------------
  319. # ● Initialize
  320. #--------------------------------------------------------------------------
  321. def initialize
  322. $game_temp.scene_save = true
  323. super
  324. end
  325. end
  326. #==============================================================================
  327. # ■ Scene Load
  328. #==============================================================================
  329. class Scene_Load < Scene_File
  330. #--------------------------------------------------------------------------
  331. # ● Initialize
  332. #--------------------------------------------------------------------------
  333. def initialize
  334. $game_temp.scene_save = false
  335. super
  336. end
  337. end
  338.  
  339. #==============================================================================
  340. # ■ Scene_File
  341. #==============================================================================
  342. class Scene_File
  343. include MOG_SCENE_FILE
  344.  
  345.  
  346. #--------------------------------------------------------------------------
  347. # ● initialize
  348. #--------------------------------------------------------------------------
  349. def initialize
  350. @saving = $game_temp.scene_save
  351. @file_max = FILES_MAX
  352. @file_max = 1 if FILES_MAX < 1
  353. execute_dispose
  354. create_layout
  355. create_savefile_windows
  356. @index = DataManager.last_savefile_index
  357. @check_prev_index = true
  358. @savefile_windows[@index].selected = true
  359. end
  360.  
  361. #--------------------------------------------------------------------------
  362. # ● Main
  363. #--------------------------------------------------------------------------
  364. def main
  365. Graphics.transition
  366. execute_loop
  367. execute_dispose
  368. end
  369.  
  370. #--------------------------------------------------------------------------
  371. # ● Execute Loop
  372. #--------------------------------------------------------------------------
  373. def execute_loop
  374. loop do
  375. Graphics.update
  376. Input.update
  377. update
  378. if SceneManager.scene != self
  379. break
  380. end
  381. end
  382. end
  383.  
  384. #--------------------------------------------------------------------------
  385. # ● Create_background
  386. #--------------------------------------------------------------------------
  387. def create_layout
  388. @background = Plane.new
  389. @background.bitmap = Cache.system("Save_Background")
  390. @background.z = 0
  391. @layout_01 = Sprite.new
  392. @layout_01.bitmap = Cache.system("Save_Layout01")
  393. @layout_01.z = 1
  394. @layout_01.blend_type = 1
  395. image = Cache.system("Save_Layout02")
  396. @bitmap = Bitmap.new(image.width,image.height)
  397. cw = image.width
  398. ch = image.height / 2
  399. if @saving
  400. h = 0
  401. else
  402. h = ch
  403. end
  404. src_rect = Rect.new(0, h, cw, ch)
  405. @bitmap.blt(0,0, image, src_rect)
  406. @layout_02 = Sprite.new
  407. @layout_02.bitmap = @bitmap
  408. @layout_02.z = 3
  409. @layout_02.y = 370
  410. image.dispose
  411. end
  412.  
  413. #--------------------------------------------------------------------------
  414. # ● Execute Dispose
  415. #--------------------------------------------------------------------------
  416. def execute_dispose
  417. return if @background == nil
  418. Graphics.freeze
  419. @background.bitmap.dispose
  420. @background.dispose
  421. @background = nil
  422. @layout_01.bitmap.dispose
  423. @layout_01.dispose
  424. @layout_02.bitmap.dispose
  425. @layout_02.dispose
  426. @bitmap.dispose
  427. dispose_item_windows
  428. end
  429.  
  430. #--------------------------------------------------------------------------
  431. # ● Frame Update
  432. #--------------------------------------------------------------------------
  433. def update
  434. update_savefile_windows
  435. update_savefile_selection
  436. check_start_index
  437. end
  438.  
  439. #--------------------------------------------------------------------------
  440. # ● check_start_index
  441. #--------------------------------------------------------------------------
  442. def check_start_index
  443. return if @check_prev_index == false
  444. @check_prev_index = false
  445. check_active_window
  446. end
  447.  
  448. #--------------------------------------------------------------------------
  449. # ● check_active_window
  450. #--------------------------------------------------------------------------
  451. def check_active_window
  452. @index = 0 if @index == nil
  453. for i in 0...@file_max
  454. @pw = @index - 1
  455. @pw = 0 if @pw > @file_max - 1
  456. @pw = @file_max- 1 if @pw < 0
  457. @aw = @index
  458. @nw = @index + 1
  459. @nw = 0 if @nw > @file_max - 1
  460. @nw = @file_max - 1 if @nw < 0
  461. case @savefile_windows[i].file_index
  462. when @pw,@nw
  463. @savefile_windows[i].visible = true
  464. @savefile_windows[i].contents_opacity = 80
  465. when @aw
  466. @savefile_windows[i].visible = true
  467. @savefile_windows[i].contents_opacity = 255
  468. else
  469. @savefile_windows[i].visible = false
  470. end
  471. end
  472. end
  473.  
  474. #--------------------------------------------------------------------------
  475. # ● Create Save File Window
  476. #--------------------------------------------------------------------------
  477. def create_savefile_windows
  478. @pw_pos = [-160,32]
  479. @aw_pos = [-96,160]
  480. @nw_pos = [-32,288]
  481. @savefile_windows = []
  482. for i in 0...@file_max
  483. @savefile_windows[i] = Window_SaveFile_A.new(i, DataManager.make_filename(i))
  484. @savefile_windows[i].z = 2
  485. @savefile_windows[i].visible = false
  486. @savefile_windows[i].x = 400
  487. end
  488. check_active_window
  489. @item_max = @file_max
  490. end
  491.  
  492. #--------------------------------------------------------------------------
  493. # ● Dispose of Save File Window
  494. #--------------------------------------------------------------------------
  495. def dispose_item_windows
  496. for window in @savefile_windows
  497. window.dispose
  498. end
  499. end
  500.  
  501. #--------------------------------------------------------------------------
  502. # ● Update Save File Window
  503. #--------------------------------------------------------------------------
  504. def update_savefile_windows
  505. update_slide_window
  506. for window in @savefile_windows
  507. window.update
  508. end
  509. end
  510.  
  511. #--------------------------------------------------------------------------
  512. # ● update_slide_window
  513. #--------------------------------------------------------------------------
  514. def update_slide_window
  515. @background.ox += 1
  516. slide_window_x(@pw,@pw_pos[0])
  517. slide_window_x(@aw,@aw_pos[0])
  518. slide_window_x(@nw,@nw_pos[0])
  519. slide_window_y(@pw,@pw_pos[1])
  520. slide_window_y(@aw,@aw_pos[1])
  521. slide_window_y(@nw,@nw_pos[1])
  522. end
  523.  
  524. #--------------------------------------------------------------------------
  525. # ● slide_window_x
  526. #--------------------------------------------------------------------------
  527. def slide_window_x(i,x_pos)
  528. if @savefile_windows[i].x < x_pos
  529. @savefile_windows[i].x += 15
  530. @savefile_windows[i].x = x_pos if @savefile_windows[i].x > x_pos
  531. end
  532. if @savefile_windows[i].x > x_pos
  533. @savefile_windows[i].x -= 15
  534. @savefile_windows[i].x = x_pos if @savefile_windows[i].x < x_pos
  535. end
  536. end
  537.  
  538. #--------------------------------------------------------------------------
  539. # ● slide_window_y
  540. #--------------------------------------------------------------------------
  541. def slide_window_y(i,y_pos)
  542. if @savefile_windows[i].y < y_pos
  543. @savefile_windows[i].y += 15
  544. @savefile_windows[i].y = y_pos if @savefile_windows[i].y > y_pos
  545. end
  546. if @savefile_windows[i].y > y_pos
  547. @savefile_windows[i].y -= 15
  548. @savefile_windows[i].y = y_pos if @savefile_windows[i].y < y_pos
  549. end
  550. end
  551.  
  552. #--------------------------------------------------------------------------
  553. # ● reset_position
  554. #--------------------------------------------------------------------------
  555. def reset_position(diretion)
  556. check_active_window
  557. case diretion
  558. when 0
  559. @savefile_windows[@pw].y = -64
  560. @savefile_windows[@pw].x = 0
  561. when 1
  562. @savefile_windows[@nw].y = 440
  563. @savefile_windows[@nw].x = 0
  564. end
  565. end
  566.  
  567. #--------------------------------------------------------------------------
  568. # ● Update Save File Selection
  569. #--------------------------------------------------------------------------
  570. def update_savefile_selection
  571. if Input.trigger?(Input::C)
  572. on_savefile_ok
  573. elsif Input.trigger?(Input::B)
  574. Sound.play_cancel
  575. return_scene
  576. else
  577. last_index = @index
  578. if Input.trigger?(Input::DOWN)
  579. execute_index(1)
  580. if @file_max > 2
  581. reset_position(1)
  582. else
  583. reset_position(0)
  584. end
  585. end
  586. if Input.trigger?(Input::UP)
  587. execute_index(-1)
  588. reset_position(0)
  589. end
  590. if @index != last_index
  591. Sound.play_cursor
  592. @savefile_windows[last_index].selected = false
  593. @savefile_windows[@index].selected = true
  594. end
  595. end
  596. end
  597.  
  598. #--------------------------------------------------------------------------
  599. # ● Execute Index
  600. #--------------------------------------------------------------------------
  601. def execute_index(value)
  602. @index += value
  603. @index = @index >= @file_max ? 0 : @index < 0 ? (@file_max - 1) : @index
  604. end
  605.  
  606. end
  607.  
  608. $mog_rgss3_scene_file = true
Advertisement
Add Comment
Please, Sign In to add comment