Guest User

Moghunter Scene File A

a guest
Dec 19th, 2015
308
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.88 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. end
  254.  
  255. #--------------------------------------------------------------------------
  256. # ● draw_level
  257. #--------------------------------------------------------------------------
  258. def draw_level(x,y,ex)
  259. self.contents.font.color = normal_color
  260. break if i > 3
  261. level = @members[i].level
  262. draw_picture_number(x + (ex * i) , y ,level, "Save_Number_01",1,0,3,1)
  263. end
  264. end
  265.  
  266. #--------------------------------------------------------------------------
  267. # ● draw_map_location
  268. #--------------------------------------------------------------------------
  269. def draw_map_location(x,y)
  270. self.contents.font.bold = false
  271. self.contents.font.name = "FFRPG Alternative"
  272. self.contents.font.size = 19
  273. self.contents.font.italic = false
  274. self.contents.draw_text(x, y, 125, 25, @mapname.to_s, 0)
  275. end
  276. #--------------------------------------------------------------------------
  277. # ● draw_party_characters
  278. #--------------------------------------------------------------------------
  279. def draw_party_characters(x, y,ex)
  280. break if i > 3
  281. name = @characters[i][0]
  282. index = @characters[i][1]
  283. draw_character_floor(- 35 + x + i * ex,y - 20)
  284. draw_character(name, index, x + i * ex, y)
  285. end
  286. end
  287.  
  288. #--------------------------------------------------------------------------
  289. # ● draw_playtime
  290. #--------------------------------------------------------------------------
  291. def draw_playtime(x, y, width, align)
  292. hour = @total_sec / 60 / 60
  293. min = @total_sec / 60 % 60
  294. sec = @total_sec % 60
  295. time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
  296. draw_picture_number(x + 18 * 0, y ,0, "Save_Number_01",0,0,3,0) if hour < 10
  297. draw_picture_number(x + 18 * 1, y ,hour, "Save_Number_01",0,0,3,0)
  298. draw_picture_number(x + 18 * 3, y ,0, "Save_Number_01",0,0,3,0) if min < 10
  299. draw_picture_number(x + 18 * 4, y ,min, "Save_Number_01",0,0,3,0)
  300. draw_picture_number(x + 18 * 6, y ,0, "Save_Number_01",0,0,3,0) if sec < 10
  301. draw_picture_number(x + 18 * 7, y ,sec , "Save_Number_01",0,0,3,0)
  302. end
  303.  
  304. #--------------------------------------------------------------------------
  305. # ● selected
  306. #--------------------------------------------------------------------------
  307. def selected=(selected)
  308. @selected = selected
  309. end
  310. end
  311.  
  312. #==============================================================================
  313. # ■ Scene Save
  314. #==============================================================================
  315. class Scene_Save < Scene_File
  316. #--------------------------------------------------------------------------
  317. # ● Initialize
  318. #--------------------------------------------------------------------------
  319. def initialize
  320. $game_temp.scene_save = true
  321. super
  322. end
  323. end
  324. #==============================================================================
  325. # ■ Scene Load
  326. #==============================================================================
  327. class Scene_Load < Scene_File
  328. #--------------------------------------------------------------------------
  329. # ● Initialize
  330. #--------------------------------------------------------------------------
  331. def initialize
  332. $game_temp.scene_save = false
  333. super
  334. end
  335. end
  336.  
  337. #==============================================================================
  338. # ■ Scene_File
  339. #==============================================================================
  340. class Scene_File
  341. include MOG_SCENE_FILE
  342.  
  343.  
  344. #--------------------------------------------------------------------------
  345. # ● initialize
  346. #--------------------------------------------------------------------------
  347. def initialize
  348. @saving = $game_temp.scene_save
  349. @file_max = FILES_MAX
  350. @file_max = 1 if FILES_MAX < 1
  351. execute_dispose
  352. create_layout
  353. create_savefile_windows
  354. @index = DataManager.last_savefile_index
  355. @check_prev_index = true
  356. @savefile_windows[@index].selected = true
  357. end
  358.  
  359. #--------------------------------------------------------------------------
  360. # ● Main
  361. #--------------------------------------------------------------------------
  362. def main
  363. Graphics.transition
  364. execute_loop
  365. execute_dispose
  366. end
  367.  
  368. #--------------------------------------------------------------------------
  369. # ● Execute Loop
  370. #--------------------------------------------------------------------------
  371. def execute_loop
  372. loop do
  373. Graphics.update
  374. Input.update
  375. update
  376. if SceneManager.scene != self
  377. break
  378. end
  379. end
  380. end
  381.  
  382. #--------------------------------------------------------------------------
  383. # ● Create_background
  384. #--------------------------------------------------------------------------
  385. def create_layout
  386. @background = Plane.new
  387. @background.bitmap = Cache.system("Save_Background")
  388. @background.z = 0
  389. @layout_01 = Sprite.new
  390. @layout_01.bitmap = Cache.system("Save_Layout01")
  391. @layout_01.z = 1
  392. @layout_01.blend_type = 1
  393. image = Cache.system("Save_Layout02")
  394. @bitmap = Bitmap.new(image.width,image.height)
  395. cw = image.width
  396. ch = image.height / 2
  397. if @saving
  398. h = 0
  399. else
  400. h = ch
  401. end
  402. src_rect = Rect.new(0, h, cw, ch)
  403. @bitmap.blt(0,0, image, src_rect)
  404. @layout_02 = Sprite.new
  405. @layout_02.bitmap = @bitmap
  406. @layout_02.z = 3
  407. @layout_02.y = 370
  408. image.dispose
  409. end
  410.  
  411. #--------------------------------------------------------------------------
  412. # ● Execute Dispose
  413. #--------------------------------------------------------------------------
  414. def execute_dispose
  415. return if @background == nil
  416. Graphics.freeze
  417. @background.bitmap.dispose
  418. @background.dispose
  419. @background = nil
  420. @layout_01.bitmap.dispose
  421. @layout_01.dispose
  422. @layout_02.bitmap.dispose
  423. @layout_02.dispose
  424. @bitmap.dispose
  425. dispose_item_windows
  426. end
  427.  
  428. #--------------------------------------------------------------------------
  429. # ● Frame Update
  430. #--------------------------------------------------------------------------
  431. def update
  432. update_savefile_windows
  433. update_savefile_selection
  434. check_start_index
  435. end
  436.  
  437. #--------------------------------------------------------------------------
  438. # ● check_start_index
  439. #--------------------------------------------------------------------------
  440. def check_start_index
  441. return if @check_prev_index == false
  442. @check_prev_index = false
  443. check_active_window
  444. end
  445.  
  446. #--------------------------------------------------------------------------
  447. # ● check_active_window
  448. #--------------------------------------------------------------------------
  449. def check_active_window
  450. @index = 0 if @index == nil
  451. for i in 0...@file_max
  452. @pw = @index - 1
  453. @pw = 0 if @pw > @file_max - 1
  454. @pw = @file_max- 1 if @pw < 0
  455. @aw = @index
  456. @nw = @index + 1
  457. @nw = 0 if @nw > @file_max - 1
  458. @nw = @file_max - 1 if @nw < 0
  459. case @savefile_windows[i].file_index
  460. when @pw,@nw
  461. @savefile_windows[i].visible = true
  462. @savefile_windows[i].contents_opacity = 80
  463. when @aw
  464. @savefile_windows[i].visible = true
  465. @savefile_windows[i].contents_opacity = 255
  466. else
  467. @savefile_windows[i].visible = false
  468. end
  469. end
  470. end
  471.  
  472. #--------------------------------------------------------------------------
  473. # ● Create Save File Window
  474. #--------------------------------------------------------------------------
  475. def create_savefile_windows
  476. @pw_pos = [-160,32]
  477. @aw_pos = [-96,160]
  478. @nw_pos = [-32,288]
  479. @savefile_windows = []
  480. for i in 0...@file_max
  481. @savefile_windows[i] = Window_SaveFile_A.new(i, DataManager.make_filename(i))
  482. @savefile_windows[i].z = 2
  483. @savefile_windows[i].visible = false
  484. @savefile_windows[i].x = 400
  485. end
  486. check_active_window
  487. @item_max = @file_max
  488. end
  489.  
  490. #--------------------------------------------------------------------------
  491. # ● Dispose of Save File Window
  492. #--------------------------------------------------------------------------
  493. def dispose_item_windows
  494. for window in @savefile_windows
  495. window.dispose
  496. end
  497. end
  498.  
  499. #--------------------------------------------------------------------------
  500. # ● Update Save File Window
  501. #--------------------------------------------------------------------------
  502. def update_savefile_windows
  503. update_slide_window
  504. for window in @savefile_windows
  505. window.update
  506. end
  507. end
  508.  
  509. #--------------------------------------------------------------------------
  510. # ● update_slide_window
  511. #--------------------------------------------------------------------------
  512. def update_slide_window
  513. @background.ox += 1
  514. slide_window_x(@pw,@pw_pos[0])
  515. slide_window_x(@aw,@aw_pos[0])
  516. slide_window_x(@nw,@nw_pos[0])
  517. slide_window_y(@pw,@pw_pos[1])
  518. slide_window_y(@aw,@aw_pos[1])
  519. slide_window_y(@nw,@nw_pos[1])
  520. end
  521.  
  522. #--------------------------------------------------------------------------
  523. # ● slide_window_x
  524. #--------------------------------------------------------------------------
  525. def slide_window_x(i,x_pos)
  526. if @savefile_windows[i].x < x_pos
  527. @savefile_windows[i].x += 15
  528. @savefile_windows[i].x = x_pos if @savefile_windows[i].x > x_pos
  529. end
  530. if @savefile_windows[i].x > x_pos
  531. @savefile_windows[i].x -= 15
  532. @savefile_windows[i].x = x_pos if @savefile_windows[i].x < x_pos
  533. end
  534. end
  535.  
  536. #--------------------------------------------------------------------------
  537. # ● slide_window_y
  538. #--------------------------------------------------------------------------
  539. def slide_window_y(i,y_pos)
  540. if @savefile_windows[i].y < y_pos
  541. @savefile_windows[i].y += 15
  542. @savefile_windows[i].y = y_pos if @savefile_windows[i].y > y_pos
  543. end
  544. if @savefile_windows[i].y > y_pos
  545. @savefile_windows[i].y -= 15
  546. @savefile_windows[i].y = y_pos if @savefile_windows[i].y < y_pos
  547. end
  548. end
  549.  
  550. #--------------------------------------------------------------------------
  551. # ● reset_position
  552. #--------------------------------------------------------------------------
  553. def reset_position(diretion)
  554. check_active_window
  555. case diretion
  556. when 0
  557. @savefile_windows[@pw].y = -64
  558. @savefile_windows[@pw].x = 0
  559. when 1
  560. @savefile_windows[@nw].y = 440
  561. @savefile_windows[@nw].x = 0
  562. end
  563. end
  564.  
  565. #--------------------------------------------------------------------------
  566. # ● Update Save File Selection
  567. #--------------------------------------------------------------------------
  568. def update_savefile_selection
  569. if Input.trigger?(Input::C)
  570. on_savefile_ok
  571. elsif Input.trigger?(Input::B)
  572. Sound.play_cancel
  573. return_scene
  574. else
  575. last_index = @index
  576. if Input.trigger?(Input::DOWN)
  577. execute_index(1)
  578. if @file_max > 2
  579. reset_position(1)
  580. else
  581. reset_position(0)
  582. end
  583. end
  584. if Input.trigger?(Input::UP)
  585. execute_index(-1)
  586. reset_position(0)
  587. end
  588. if @index != last_index
  589. Sound.play_cursor
  590. @savefile_windows[last_index].selected = false
  591. @savefile_windows[@index].selected = true
  592. end
  593. end
  594. end
  595.  
  596. #--------------------------------------------------------------------------
  597. # ● Execute Index
  598. #--------------------------------------------------------------------------
  599. def execute_index(value)
  600. @index += value
  601. @index = @index >= @file_max ? 0 : @index < 0 ? (@file_max - 1) : @index
  602. end
  603.  
  604. end
  605.  
  606. $mog_rgss3_scene_file = true
Advertisement
Add Comment
Please, Sign In to add comment