dsiver144

Dark's House Decorating System

Apr 29th, 2016
524
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 40.61 KB | None | 0 0
  1. #===============================================================================
  2. # Script : Dark's House Decorating System
  3. # Author : Dark Sky ( Nhat Nguyen )
  4. # Forum : TaoTroChoi.com
  5. # Release on : April 26th 2016
  6. #===============================================================================
  7. # Change log:
  8. # + 26/4/2016: Release!
  9. #===============================================================================
  10. # Author's Note: Firstly, my English is bad. If you cant understand, pm me!
  11. # Put <can_decorate> in map that you want to mark as an able-to-decorate map.
  12. # Use only ONE Tileset for ALL of able-to-decorate map. ( Strongly recommend )
  13. #===============================================================================
  14. # Useful Script Call(s):
  15. # add_stuff(key) -> Add stuff.
  16. # ex: add_stuff(:table) ( :table is a key in Stuff { Stuff[:table] } )
  17. #===============================================================================
  18. module Dark_HouseDecorate
  19. #--------------------------------------------------------------------------
  20. # * EDITABLE REGION
  21. #--------------------------------------------------------------------------
  22. MOVE_SE = "Cursor1" #SE played when press move button.
  23. OK_SE = "Item1" #SE played when press accept button.
  24. STUFF_TEXT = "Stuffs" #Text displayed in Stuff Window.
  25. ABLE_COLOR = Color.new(102,255,0,100) #Color for able-to-place region.
  26. UNABLE_COLOR = Color.new(255,34,49,100) #Color for unable-to-place region.
  27. #--------------------------------------------------------------------------
  28. # * CONFIGURATION REGION
  29. #--------------------------------------------------------------------------
  30. Stuff = {}
  31. Stuff[:table] = {}
  32. Stuff[:table][:name] = "Table" #Name of stuff.
  33. Stuff[:table][:tiles] = {} #Require line.
  34. Stuff[:table][:icon] = 267 #Icon for stuff.
  35. Stuff[:table][:tiles]["B"] = [[96]] #Tiles array.
  36. # ...["B"] = [[96]] means.
  37. # Tile number 96 in page B
  38. # [[96]] also known as a 2D array
  39. # [[tile1,tile2,...,tilen],[tile1_1,tile2_2,...,tilen_2],...]
  40. # ------------
  41. # eg: n = 3
  42. # Array Show: [[tile1,tile2,tile3],[tile1_1,tile2_1,tile3_1],[tile1_2,tile2_2,tile3_2]]
  43. # Graphic Show:
  44. # tile1 = tile2 = tile3
  45. # tile1_1 = tile2_1 = tile3_1
  46. # tile1_2 = tile2_2 = tile3_2
  47. # Get Tile: Use Dark TileViewer. (Press F8)
  48. Stuff[:table][:regions] = [3] # Region that stuff can be put in
  49. Stuff[:table][:des] = "Just a normal table!" #Description of stuff.
  50.  
  51. Stuff[:clock] = {}
  52. Stuff[:clock][:name] = "Clock"
  53. Stuff[:clock][:tiles] = {}
  54. Stuff[:clock][:icon] = 190
  55. Stuff[:clock][:tiles]["B"] = [[160],[168]]
  56. Stuff[:clock][:regions] = [20,4]
  57. Stuff[:clock][:des] = "Tick toc tick toc..."
  58.  
  59. Stuff[:tu] = {}
  60. Stuff[:tu][:name] = "Wooden shelf"
  61. Stuff[:tu][:tiles] = {}
  62. Stuff[:tu][:icon] = 415
  63. Stuff[:tu][:tiles]["B"] = [[51],[59]]
  64. Stuff[:tu][:regions] = [3,4]
  65. Stuff[:tu][:des] = "F*cking shelf made by VN WOOD!"
  66. # Example for Stuff by Event
  67. Stuff[:bep_ga] = {}
  68. Stuff[:bep_ga][:name] = "Gas Stove"
  69. Stuff[:bep_ga][:tiles] = {}
  70. Stuff[:bep_ga][:icon] = 267
  71. Stuff[:bep_ga][:event] = [4,1] # [Map_id,Event_id]
  72. Stuff[:bep_ga][:regions] = [3]
  73. Stuff[:bep_ga][:des] = "Old Gas Stove..."
  74.  
  75. Stuff[:a_picture] = {}
  76. Stuff[:a_picture][:name] = "A Picture"
  77. Stuff[:a_picture][:tiles] = {}
  78. Stuff[:a_picture][:icon] = 100
  79. Stuff[:a_picture][:event] = [4,3] # [Map_id,Event_id]
  80. Stuff[:a_picture][:regions] = [20]
  81. Stuff[:a_picture][:des] = "Old Style Picture."
  82.  
  83. Stuff[:piano] = {}
  84. Stuff[:piano][:name] = "Piano"
  85. Stuff[:piano][:tiles] = {}
  86. Stuff[:piano][:icon] = 145
  87. Stuff[:piano][:tiles]["B"] = [[101,102,103],[109,110,111]]
  88. Stuff[:piano][:regions] = [3,4]
  89. Stuff[:piano][:des] = "Follow my strings."
  90.  
  91. # Don't modify this unless you know what are you doing.
  92. TableH = {}
  93. TableH["B"] = 5
  94. TableH["C"] = 6
  95. TableH["D"] = 7
  96. TableH["E"] = 8
  97. Stuff.each_pair do |key,value|
  98. value[:key] = key
  99. end
  100. end
  101. include Dark_HouseDecorate
  102. class Spriteset_Map
  103. alias dark_house_decorate_update update
  104. alias dark_house_decorate_update_tilemap update_tilemap
  105. #--------------------------------------------------------------------------
  106. # * Update Default Stuff
  107. #--------------------------------------------------------------------------
  108. def update_default_stuff
  109. map = load_data(sprintf("Data/Map%03d.rvdata2", $game_map.map_id))
  110. @default_stuff = {}
  111. for y in 0...map.data.ysize
  112. for x in 0...map.data.xsize
  113. @default_stuff[[x,y]] = map.data[x,y,2]
  114. end
  115. end
  116. @default_stuff.each_pair do |pos,tile|
  117. @tilemap.map_data[pos[0],pos[1],2] = tile
  118. end
  119. end
  120. #--------------------------------------------------------------------------
  121. # * Update Tilemap
  122. #--------------------------------------------------------------------------
  123. def update_tilemap
  124. dark_house_decorate_update_tilemap()
  125. if $d_stuff_need_update
  126. update_default_stuff
  127. refresh_characters
  128. $game_map.extract_save_events
  129. map_grid = $game_system.stuff_map_grid
  130. if map_grid.has_key?($game_map.map_id)
  131. for y in 0...map_grid[$game_map.map_id].ysize
  132. for x in 0...map_grid[$game_map.map_id].xsize
  133. @tilemap.map_data[x,y,2] = map_grid[$game_map.map_id][x,y] if map_grid[$game_map.map_id][x,y] > 0
  134. end
  135. end
  136. end
  137. $d_stuff_need_update = false
  138. end
  139. end
  140. #--------------------------------------------------------------------------
  141. # * Place Stuff Method
  142. #--------------------------------------------------------------------------
  143. def place_stuff(key,tile,x,y)
  144. case key
  145. when "B"
  146. @tilemap.map_data[x,y,2] = tile
  147. when "C"
  148. @tilemap.map_data[x,y,2] = tile + 255
  149. when "D"
  150. @tilemap.map_data[x,y,2] = tile + 255 + 256
  151. when "E"
  152. @tilemap.map_data[x,y,2] = tile + 255 + 256*2
  153. end
  154. end
  155. #--------------------------------------------------------------------------
  156. # * Get Screen X-Coordinates
  157. #--------------------------------------------------------------------------
  158. def screen_x(x)
  159. $game_map.adjust_x(x) * 32
  160. end
  161. #--------------------------------------------------------------------------
  162. # * Get Screen Y-Coordinates
  163. #--------------------------------------------------------------------------
  164. def screen_y(y)
  165. $game_map.adjust_y(y) * 32 + 32
  166. end
  167. #--------------------------------------------------------------------------
  168. # * Free Character Sprite
  169. #--------------------------------------------------------------------------
  170. alias dark_house_dec_dispose dispose_characters
  171. def dispose_characters
  172. dark_house_dec_dispose
  173. if $stuff_sprite
  174. $stuff_sprite.bitmap.dispose
  175. $stuff_sprite.dispose
  176. $stuff_sprite = nil
  177. end
  178. end
  179. #--------------------------------------------------------------------------
  180. # * Update save tilemap stuff
  181. #--------------------------------------------------------------------------
  182. def update_save_tilemap_stuff
  183. $game_system.stuff_map_grid[$game_map.map_id] = Table.new($game_map.map.width,$game_map.map.width)
  184. if $game_system.stuff_map[$game_map.map_id]
  185. $game_system.stuff_map_grid[$game_map.map_id] = Table.new($game_map.map.width,$game_map.map.width)
  186. $game_system.stuff_map[$game_map.map_id].each do |obj|
  187. stuff = obj.item
  188. x1 = obj.x
  189. y1 = obj.y
  190. stuff[:tiles].each_pair do |key,value|
  191. tiles = value
  192. tiles.each_with_index do |array,y|
  193. array.each_with_index do |tile,x|
  194. map_grid = $game_system.stuff_map_grid[$game_map.map_id]
  195. map_grid[x1+x,y1+y] = tile
  196. $d_stuff_need_update = true
  197. end
  198. end
  199. end
  200. end
  201. end
  202. $d_stuff_need_update = true
  203. end
  204. def on_choose(item)
  205. $d_stuff = item.item
  206. $cur_spawn = false
  207. $stuff_pos = [item.x,item.y]
  208. $game_map.set_display_pos($stuff_pos[0] - center_x, $stuff_pos[1] - center_y)
  209. $stuff_pos_last = [0,0]
  210. end
  211. #-----------------------------------------------------------------------------
  212. # Get Tile Range
  213. #-----------------------------------------------------------------------------
  214. def get_tile_range(item)
  215. max_x = 0
  216. max_y = 0
  217. item[:tiles].each_pair do |key,value|
  218. max_y = value.size
  219. value.each do |array|
  220. max_x = [max_x,array.size].max
  221. end
  222. end
  223. return [max_x,max_y]
  224. end
  225. #-----------------------------------------------------------------------------
  226. # Get Stuff image
  227. #-----------------------------------------------------------------------------
  228. def stuff_image(key,tiles)
  229. if !$d_stuff.has_key?(:event)
  230. $stuff_sprite = Sprite.new
  231. bitmap = @tilemap.bitmaps[TableH[key]]
  232. rect = Rect.new(0,0,32*8,32*18)
  233. rect2 = Rect.new(32*8,0,32*9,32*18)
  234. bitmap2 = Bitmap.new(600,2000)
  235. bitmap2.blt(0,0,bitmap,rect)
  236. bitmap2.blt(0,32*(9+7),bitmap,rect2)
  237. $stuff_sprite.bitmap = Bitmap.new(Graphics.width,Graphics.height)
  238. tiles.each_with_index do |array,y|
  239. array.each_with_index do |tile,x|
  240. tile_index = tile - 1 + (key == "B"? 1 : 0)
  241. rect3 = Rect.new(tile_index % 8 * 32, tile_index / 8 * 32, 32, 32)
  242. $stuff_sprite.bitmap.blt(x*32,y*32,bitmap2,rect3)
  243. end
  244. end
  245. $stuff_sprite.z = 999
  246. $stuff_sprite.visible = false
  247. return
  248. else
  249. map = load_data(sprintf("Data/Map%03d.rvdata2", $d_stuff[:event][0]))
  250. e = Game_Event.new($game_map.map_id, map.events[$d_stuff[:event][1]])
  251. $stuff_sprite = Sprite_Character.new(@viewport1,e)
  252. $stuff_sprite.z = 999
  253. $stuff_sprite.visible = false
  254. $stuff_sprite.ox = 0
  255. $stuff_sprite.oy = 0
  256. map = nil
  257. e.erase
  258. e = nil
  259. return
  260. end
  261. end
  262. #-----------------------------------------------------------------------------
  263. # Check passable
  264. #-----------------------------------------------------------------------------
  265. def check_passable(stuff,x,y,range_x,range_y)
  266. if !stuff.has_key?(:event)
  267. counter = 0
  268. for j in 0...range_y
  269. for i in 0...range_x
  270. x1 = x + i
  271. y1 = y + j
  272. if stuff[:regions].include?($game_map.region_id(x1, y1)) && @tilemap.map_data[x1,y1,2] == 0 && [x1,y1] != [$game_player.x,$game_player.y] && $game_map.events_xy(x1,y1).size == 0
  273. counter += 1
  274. end
  275. end
  276. end
  277. return counter == range_x*range_y
  278. else
  279. if stuff[:regions].include?($game_map.region_id(x, y)) && @tilemap.map_data[x,y,2] == 0 && [x,y] != [$game_player.x,$game_player.y] && $game_map.events_xy(x,y).size == 0
  280. return true
  281. else
  282. return false
  283. end
  284. end
  285. end
  286. #-----------------------------------------------------------------------------
  287. # Update Stuff
  288. #-----------------------------------------------------------------------------
  289. def update_stuff
  290. if $stuff_pos
  291. _se_move = RPG::SE.new(MOVE_SE)
  292. _se_accept = RPG::SE.new(OK_SE)
  293. if Input.trigger?(:Z)
  294. if $stuff_sprite
  295. $game_system.user_stuff.push($d_stuff[:key])
  296. $stuff_sprite.bitmap.dispose
  297. $stuff_sprite.dispose
  298. $stuff_sprite = nil
  299. $stuff_pos = nil
  300. $d_stuff = nil
  301. $d_temp_item = nil
  302. $stuff_pos_last = nil
  303. $game_map.set_display_pos($game_player.x - center_x, $game_player.y - center_y)
  304. end
  305. end
  306. if $stuff_sprite
  307. $stuff_sprite.x = screen_x($stuff_pos[0])
  308. $stuff_sprite.y = screen_y($stuff_pos[1]-1)
  309. end
  310. if Input.trigger?(:RIGHT)
  311. $stuff_pos_last[0] = $stuff_pos[0]
  312. $stuff_pos[0] += 1
  313. _se_move.play
  314. end
  315. if Input.trigger?(:LEFT)
  316. $stuff_pos_last[0] = $stuff_pos[0]
  317. $stuff_pos[0] -= 1
  318. _se_move.play
  319. end
  320. if Input.trigger?(:UP)
  321. $stuff_pos_last[1] = $stuff_pos[1]
  322. $stuff_pos[1] -= 1
  323. _se_move.play
  324. end
  325. if Input.trigger?(:DOWN)
  326. $stuff_pos_last[1] = $stuff_pos[1]
  327. $stuff_pos[1] += 1
  328. _se_move.play
  329. end
  330. end
  331.  
  332. if $d_stuff && $stuff_sprite
  333. x1 = $stuff_pos[0]
  334. y1 = $stuff_pos[1]
  335. stuff = $d_stuff
  336. range_x = get_tile_range(stuff)[0]
  337. range_y = get_tile_range(stuff)[1]
  338. if check_passable($d_stuff,x1, y1,range_x,range_y)
  339. $stuff_sprite.color = ABLE_COLOR
  340. else
  341. $stuff_sprite.color = UNABLE_COLOR
  342. end
  343. end
  344.  
  345. if $d_stuff && !$cur_spawn
  346. $stuff = $d_stuff
  347. if !$d_stuff.has_key?(:event)
  348. $stuff[:tiles].each_pair do |key,value|
  349. tiles = value
  350. stuff_image(key,tiles)
  351. $stuff_sprite.opacity = 180
  352. end
  353. else
  354. stuff_image(nil,nil)
  355. $stuff_sprite.opacity = 180
  356. end
  357. $stuff_sprite.visible = true
  358. $stuff_sprite.x = screen_x($stuff_pos[0])
  359. $stuff_sprite.y = screen_y($stuff_pos[1]-1)
  360. $cur_spawn = true
  361. end
  362.  
  363. if Input.trigger?(:L) && $d_stuff && $cur_spawn
  364. x1 = $stuff_pos[0]
  365. y1 = $stuff_pos[1]
  366. stuff = $d_stuff
  367. range_x = get_tile_range(stuff)[0]
  368. range_y = get_tile_range(stuff)[1]
  369. if check_passable(stuff,x1,y1,range_x,range_y) #&& $stuff_sprite
  370. stuff[:tiles].each_pair do |key,value|
  371. tiles = value
  372. tiles.each_with_index do |array,y|
  373. array.each_with_index do |tile,x|
  374. place_stuff(key,tile,x1+x,y1+y)
  375. $stuff_sprite.bitmap.dispose if $stuff_sprite
  376. $stuff_sprite.dispose if $stuff_sprite
  377. $stuff_sprite = nil
  378. end
  379. end
  380. end
  381. if stuff.has_key?(:event)
  382. if $game_system.stuff_map[$game_map.map_id]
  383. $game_system.stuff_map[$game_map.map_id].push(DStuff.new($d_stuff,$stuff_pos[0],$stuff_pos[1],$game_map.map_id))
  384. else
  385. $game_system.stuff_map[$game_map.map_id] = [DStuff.new($d_stuff,$stuff_pos[0],$stuff_pos[1],$game_map.map_id)]
  386. end
  387. $game_map.extract_save_events
  388. $stuff_sprite.bitmap.dispose if $stuff_sprite
  389. $stuff_sprite.dispose if $stuff_sprite
  390. $stuff_sprite = nil
  391. else
  392. if $game_system.stuff_map[$game_map.map_id]
  393. $game_system.stuff_map[$game_map.map_id].push(DStuff.new($d_stuff,$stuff_pos[0],$stuff_pos[1],$game_map.map_id))
  394. else
  395. $game_system.stuff_map[$game_map.map_id] = [DStuff.new($d_stuff,$stuff_pos[0],$stuff_pos[1],$game_map.map_id)]
  396. end
  397. update_save_tilemap_stuff
  398. end
  399. _se_accept.play
  400. $d_stuff = nil
  401. $stuff_pos = nil
  402. $d_temp_item = nil
  403. $stuff_pos_last = nil
  404. $game_map.set_display_pos($game_player.x - center_x, $game_player.y - center_y)
  405. end
  406. end
  407. end
  408. #-----------------------------------------------------------------------------
  409. # X Coordinate of Screen Center
  410. #-----------------------------------------------------------------------------
  411. def center_x
  412. (Graphics.width / 32 - 1) / 2.0
  413. end
  414. #-----------------------------------------------------------------------------
  415. # Y Coordinate of Screen Center
  416. #-----------------------------------------------------------------------------
  417. def center_y
  418. (Graphics.height / 32 - 1) / 2.0
  419. end
  420. #-----------------------------------------------------------------------------
  421. # Update
  422. #-----------------------------------------------------------------------------
  423. def update
  424. dark_house_decorate_update
  425. $tilemap = @tilemap
  426. update_stuff
  427. if Input.trigger?(:F6)
  428. if $d_temp_item
  429. $stuff_sprite.bitmap.dispose
  430. $stuff_sprite.dispose
  431. $stuff_sprite = nil
  432. $game_system.stuff_map[$game_map.map_id].push($d_temp_item)
  433. end
  434. if $game_system.stuff_map[$game_map.map_id]
  435. $d_temp_item = $game_system.stuff_map[$game_map.map_id].shift
  436. _change_se = RPG::SE.new("Evasion1")
  437. _change_se.play
  438. end
  439. on_choose($d_temp_item) if $d_temp_item
  440. update_save_tilemap_stuff if $d_temp_item
  441. $game_map.extract_save_events
  442. end
  443. if Input.trigger?(:F7)
  444. if $d_temp_item
  445. $stuff_sprite.bitmap.dispose
  446. $stuff_sprite.dispose
  447. $stuff_sprite = nil
  448. $game_system.stuff_map[$game_map.map_id].unshift($d_temp_item)
  449. end
  450. if $game_system.stuff_map[$game_map.map_id]
  451. $d_temp_item = $game_system.stuff_map[$game_map.map_id].pop
  452. _change_se = RPG::SE.new("Evasion1",100,80)
  453. _change_se.play
  454. end
  455. on_choose($d_temp_item) if $d_temp_item
  456. update_save_tilemap_stuff if $d_temp_item
  457. $game_map.extract_save_events
  458. end
  459. end
  460. end
  461.  
  462. class Game_Player
  463. #--------------------------------------------------------------------------
  464. # * Frame Update
  465. #--------------------------------------------------------------------------
  466. def update
  467. last_real_x = @real_x
  468. last_real_y = @real_y
  469. last_moving = moving?
  470. move_by_input if !$d_stuff
  471. super
  472. update_scroll(last_real_x, last_real_y) if !$d_stuff
  473. update_scroll2 if $stuff_pos && $d_stuff
  474. update_vehicle
  475. update_nonmoving(last_moving) unless moving?
  476. @followers.update
  477. end
  478. #--------------------------------------------------------------------------
  479. # * Scroll Processing
  480. #--------------------------------------------------------------------------
  481. def update_scroll2
  482. ax1 = $game_map.adjust_x($stuff_pos_last[0])
  483. ay1 = $game_map.adjust_y($stuff_pos_last[1])
  484. ax2 = $game_map.adjust_x($stuff_pos[0])
  485. ay2 = $game_map.adjust_y($stuff_pos[1])
  486. $game_map.scroll_down (ay2 - ay1) if ay2 > ay1 && ay2 > center_y
  487. $game_map.scroll_left (ax1 - ax2) if ax2 < ax1 && ax2 < center_x
  488. $game_map.scroll_right(ax2 - ax1) if ax2 > ax1 && ax2 > center_x
  489. $game_map.scroll_up (ay1 - ay2) if ay2 < ay1 && ay2 < center_y
  490. end
  491. end
  492.  
  493. class Game_Interpreter
  494. #--------------------------------------------------------------------------
  495. # * Adding Stuff to Inventory.
  496. #--------------------------------------------------------------------------
  497. def add_stuff(key)
  498. $game_system.user_stuff.push(key)
  499. end
  500. end
  501.  
  502.  
  503. FADE_SPEED = 15
  504. class Window_MapShowStuff < Window_Base
  505. def initialize(x,y,w,h)
  506. super(x,y,w,h)
  507. refresh
  508. self.visible = false
  509. @_on = nil
  510. self.opacity = 0
  511. @wait = 0
  512. @move_flag = 0
  513. @pos = 4
  514. end
  515. def wait=(duration)
  516. @wait = duration
  517. end
  518. def update_for_wait
  519. if @wait > 0
  520. @wait -= 1
  521. end
  522. end
  523. def update_move_window
  524. if @move_flag == 6
  525. if self.x + self.width >= Graphics.width
  526. self.x = Graphics.width - self.width
  527. @move_flag = 0
  528. @pos = 6
  529. else
  530. self.x += FADE_SPEED
  531. end
  532. end
  533. if @move_flag == 4
  534. if self.x <= 0
  535. self.x = 0
  536. @move_flag = 0
  537. @pos = 4
  538. else
  539. self.x -= FADE_SPEED
  540. end
  541. end
  542. end
  543. def update_pos
  544. if $stuff_sprite
  545. if !$stuff_sprite.disposed?
  546. if $stuff_sprite.x < self.x + self.width && @pos != 6
  547. @move_flag = 6
  548. end
  549. if $stuff_sprite.x > self.x && @pos != 4
  550. @move_flag = 4
  551. end
  552. end
  553. end
  554. end
  555. def string_size(str)
  556. size = 0
  557. for i in 0...str.size
  558. size += text_size(str[i]).width
  559. end
  560. return size
  561. end
  562. def turn_off
  563. @_on = false
  564. end
  565. def turn_on
  566. @_on = true
  567. end
  568. def update_fade
  569. if $d_stuff
  570. turn_on
  571. end
  572. if @_on == false
  573. self.opacity -= FADE_SPEED
  574. if self.opacity <= 0
  575. self.visible = false
  576. self.opacity = 255
  577. @_on = nil
  578. end
  579. else
  580. self.visible = true
  581. self.opacity += FADE_SPEED
  582. if self.opacity >= 255
  583. @_on = nil
  584. end
  585. end
  586. end
  587. def update
  588. super
  589. refresh
  590. update_fade if @wait == 0
  591. update_pos if @wait
  592. update_move_window if @wait == 0
  593. end
  594. def refresh
  595. contents.clear
  596. if $d_stuff
  597. turn_on
  598. font_color = Color.new(255,153,51)
  599. stuff_name = "Stuff: "
  600. contents.font.size = 21
  601. contents.font.color = font_color
  602. line_color = Color.new(102,51,0)
  603. line_bolder = Color.new(200,200,200)
  604. x = string_size(stuff_name)
  605. contents.draw_text(0,0,contents.width,line_height,stuff_name)
  606. contents.draw_text(x,0,contents.width,line_height,$d_stuff[:name])
  607. contents.font.size = 17
  608. change_color(normal_color)
  609. line_w = string_size(stuff_name) + string_size($d_stuff[:name])
  610. contents.fill_rect(0,24,line_w,5,line_bolder)
  611. contents.fill_rect(1,25,line_w - 2,3,line_color)
  612. help_txt = ["Arrow Keys: Move","Q:Place","F6:Next","F7:Previous","D:Back"]
  613. y = 27
  614. help_txt.each do |txt|
  615. contents.draw_text(0,y,contents.width,line_height,txt)
  616. y += 15
  617. end
  618. else
  619. turn_off
  620. end
  621. end
  622. end
  623.  
  624. class Scene_Map
  625. alias dark_house_dec_start2 start
  626. alias dark_house_dec_update update
  627. #--------------------------------------------------------------------------
  628. # * Start Processing
  629. #--------------------------------------------------------------------------
  630. def start
  631. super
  632. dark_house_dec_start2()
  633. if !$game_map.decorate_map
  634. if $window_showstuff
  635. $window_showstuff.dispose
  636. end
  637. else
  638. $window_showstuff = Window_MapShowStuff.new(0,0,32*6,32*4)
  639. end
  640. end
  641.  
  642. def update
  643. dark_house_dec_update()
  644. $window_showstuff.update if $window_showstuff
  645. end
  646. end
  647. class Scene_HouseItem < Scene_Base
  648. #--------------------------------------------------------------------------
  649. # * Start Processing
  650. #--------------------------------------------------------------------------
  651. def start
  652. $window_showstuff.dispose if $window_showstuff
  653. $window_showstuff = nil
  654. super
  655. create_background
  656. create_help_window
  657. create_command_window
  658. end
  659. #--------------------------------------------------------------------------
  660. # * Termination Processing
  661. #--------------------------------------------------------------------------
  662. def terminate
  663. super
  664. dispose_background
  665. end
  666. #--------------------------------------------------------------------------
  667. # * Create Background
  668. #--------------------------------------------------------------------------
  669. def create_background
  670. @background_sprite = Sprite.new
  671. @background_sprite.bitmap = SceneManager.background_bitmap
  672. @background_sprite.bitmap.radial_blur(1, 1)
  673. @background_sprite.color.set(16, 16, 16, 128)
  674. end
  675. #--------------------------------------------------------------------------
  676. # * Get Currently Selected Item
  677. #--------------------------------------------------------------------------
  678. def item
  679. @cm_window.item
  680. end
  681. #--------------------------------------------------------------------------
  682. # * Free Background
  683. #--------------------------------------------------------------------------
  684. def dispose_background
  685. @background_sprite.dispose
  686. end
  687. #--------------------------------------------------------------------------
  688. # * Create Help Window
  689. #--------------------------------------------------------------------------
  690. def create_help_window
  691. @help_window = Window_Help.new
  692. @help_window.viewport = @viewport
  693. p @help_window.height
  694. end
  695. #--------------------------------------------------------------------------
  696. # * Create Command Window
  697. #--------------------------------------------------------------------------
  698. def create_command_window
  699. wy = @help_window.y + @help_window.height
  700. @cm_window_txt = Window_HouseItem_Txt.new(0,wy,180,50)
  701. wh = Graphics.height - @help_window.height - 50
  702. wy = @help_window.y + @help_window.height + @cm_window_txt.height
  703. @cm_window = Window_HouseItemList.new(0,wy,180,wh)
  704. @cm_window.y = @help_window.y + @help_window.height + @cm_window_txt.height
  705. @cm_window.viewport = @viewport
  706. @cm_window.activate
  707. @cm_window.set_handler(:ok, method(:on_choose_complete))
  708. @cm_window.help_window = @help_window
  709. end
  710.  
  711. #-----------------------------------------------------------------------------
  712. # * X Coordinate of Screen Center
  713. #-----------------------------------------------------------------------------
  714. def center_x
  715. (Graphics.width / 32 - 1) / 2.0
  716. end
  717. #-----------------------------------------------------------------------------
  718. # * Y Coordinate of Screen Center
  719. #-----------------------------------------------------------------------------
  720. def center_y
  721. (Graphics.height / 32 - 1) / 2.0
  722. end
  723. #-----------------------------------------------------------------------------
  724. # * On Choose Complete
  725. #-----------------------------------------------------------------------------
  726. def on_choose_complete
  727. @face = {
  728. 2 => [0,1],
  729. 8 => [0,-1],
  730. 4 => [-1,0],
  731. 6 => [1,0],
  732. }
  733. $d_stuff = @cm_window.item
  734. if !@cm_window.item
  735. @cm_window.activate
  736. return
  737. end
  738. $cur_spawn = false
  739. off = @face[$game_player.direction]
  740. $stuff_pos = [$game_player.x+off[0],$game_player.y+off[1]]
  741. $game_map.set_display_pos($stuff_pos[0] - center_x, $stuff_pos[1] - center_y)
  742. $stuff_pos_last = [0,0] # Important!
  743. $game_system.user_stuff.delete_at(@cm_window.index)
  744. if $d_stuff
  745. return_scene
  746. end
  747. end
  748. #-----------------------------------------------------------------------------
  749. # * Update
  750. #-----------------------------------------------------------------------------
  751. def update
  752. super
  753. if Input.trigger?(:B)
  754. return_scene
  755. end
  756. end
  757. end
  758.  
  759. #==============================================================================
  760. # ** Window_HouseItemList
  761. #==============================================================================
  762. class Window_HouseItemList < Window_Selectable
  763. include Dark_HouseDecorate
  764. #--------------------------------------------------------------------------
  765. # * Object Initialization
  766. #--------------------------------------------------------------------------
  767. def initialize(x, y, width, height)
  768. super
  769. @data = []
  770. @sprites = []
  771. refresh
  772. select(0)
  773. end
  774. #--------------------------------------------------------------------------
  775. # * Get Digit Count
  776. #--------------------------------------------------------------------------
  777. def col_max
  778. return 1
  779. end
  780. #--------------------------------------------------------------------------
  781. # * Get Number of Items
  782. #--------------------------------------------------------------------------
  783. def item_max
  784. @data ? @data.size : 1
  785. end
  786. #--------------------------------------------------------------------------
  787. # * Get Window Width
  788. #--------------------------------------------------------------------------
  789. def window_width
  790. return 180
  791. end
  792. #--------------------------------------------------------------------------
  793. # * Get Item
  794. #--------------------------------------------------------------------------
  795. def item
  796. @data && index >= 0 ? @data[index] : nil
  797. end
  798. def update
  799. super
  800. if Input.trigger?(:C)
  801. process_ok
  802. end
  803. end
  804. #--------------------------------------------------------------------------
  805. # * Get Activation State of Selection Item
  806. #--------------------------------------------------------------------------
  807. def current_item_enabled?
  808. true#enable?(@data[index])
  809. end
  810. #--------------------------------------------------------------------------
  811. # * Include in Item List?
  812. #--------------------------------------------------------------------------
  813. def include?(item)
  814. return true
  815. end
  816. #--------------------------------------------------------------------------
  817. # * Display in Enabled State?
  818. #--------------------------------------------------------------------------
  819. def enable?(item)
  820. true#$game_party.usable?(item)
  821. end
  822. #--------------------------------------------------------------------------
  823. # * Create Item List
  824. #--------------------------------------------------------------------------
  825. def make_item_list
  826. $game_system.user_stuff.each do |key|
  827. @data.push(Dark_HouseDecorate::Stuff[key])
  828. end
  829. @data.push(nil) if include?(nil)
  830. @data.each do |stuff|
  831. if stuff
  832. if !stuff.has_key?(:event)
  833. stuff[:tiles].each_pair do |key,value|
  834. tiles = value
  835. stuff_image(key,tiles,nil)
  836. @sprite1.x = 544 / 2 - tiles[0].size*32 + 70
  837. @sprite1.y = 416 / 2 - tiles.size*32
  838. @sprite1.zoom_x = 3.0
  839. @sprite1.zoom_y = 3.0
  840. @sprite1.opacity = 255
  841. @sprites.push(@sprite1)
  842. @sprite1 = nil
  843. end
  844. else
  845. stuff_image(nil,nil,stuff)
  846. @sprite1.x = 544 / 2 - 1*32 + 70
  847. @sprite1.y = 416 / 2 - 1*32
  848. @sprite1.zoom_x = 3.0
  849. @sprite1.zoom_y = 3.0
  850. @sprite1.opacity = 255
  851. @sprites.push(@sprite1)
  852. @sprite1 = nil
  853. end
  854. end
  855. end
  856.  
  857. end
  858. #--------------------------------------------------------------------------
  859. # * Restore Previous Selection Position
  860. #--------------------------------------------------------------------------
  861. def select_last
  862. select(@data.index($game_party.last_item.object) || 0)
  863. end
  864. #--------------------------------------------------------------------------
  865. # * Refresh Image
  866. #--------------------------------------------------------------------------
  867. def refresh_image
  868. @sprites.each do |sprite|
  869. sprite.visible = false
  870. end
  871. @sprites[index].visible = true if @sprites[index]
  872. end
  873. #--------------------------------------------------------------------------
  874. # * Stuff Image
  875. #--------------------------------------------------------------------------
  876. def stuff_image(key,tiles,stuff)
  877. if !stuff
  878. @sprite1 = Sprite.new
  879. @sprite1.viewport = @viewport
  880. bitmap = $tilemap.bitmaps[Dark_HouseDecorate::TableH[key]]
  881. rect = Rect.new(0,0,32*8,32*18)
  882. rect2 = Rect.new(32*8,0,32*9,32*18)
  883. bitmap2 = Bitmap.new(600,2000)
  884. bitmap2.blt(0,0,bitmap,rect)
  885. bitmap2.blt(0,32*(9+7),bitmap,rect2)
  886. @sprite1.bitmap = Bitmap.new(Graphics.width,Graphics.height)
  887. tiles.each_with_index do |array,y|
  888. array.each_with_index do |tile,x|
  889. tile_index = tile - 1 + (key == "B"? 1 : 0)
  890. rect3 = Rect.new(tile_index % 8 * 32, tile_index / 8 * 32, 32, 32)
  891. @sprite1.bitmap.blt(x*32,y*32,bitmap2,rect3)
  892. end
  893. end
  894. @sprite1.z = 999
  895. @sprite1.visible = false
  896. else
  897. map = load_data(sprintf("Data/Map%03d.rvdata2", stuff[:event][0]))
  898. e = Game_Event.new($game_map.map_id, map.events[stuff[:event][1]])
  899. @sprite1 = Sprite_Character.new(@viewport,e)
  900. @sprite1.z = 999
  901. @sprite1.visible = false
  902. @sprite1.ox = 0
  903. @sprite1.oy = 0
  904. map = nil
  905. e.erase
  906. e.refresh
  907. e = nil
  908. end
  909. end
  910. #--------------------------------------------------------------------------
  911. # * Item Height
  912. #--------------------------------------------------------------------------
  913. def item_height
  914. return 32
  915. end
  916. #--------------------------------------------------------------------------
  917. # * Dispose
  918. #--------------------------------------------------------------------------
  919. def dispose
  920. super
  921. if @sprite1
  922. @sprite1.bitmap.dispose
  923. @sprite1.dispose
  924. end
  925. @sprites.each do |sprite|
  926. if sprite
  927. sprite.dispose
  928. end
  929. end
  930. end
  931. #--------------------------------------------------------------------------
  932. # * Draw Item
  933. #--------------------------------------------------------------------------
  934. def draw_item(index)
  935. item = @data[index]
  936. if item
  937. rect = item_rect(index)
  938. rect.width -= 4
  939. contents.font.size = 18
  940. draw_text(rect.x + 28, rect.y + 2,210,32,item[:name])
  941. draw_icon(item[:icon],rect.x + 1,rect.y + 3)
  942. end
  943. end
  944. #--------------------------------------------------------------------------
  945. # * Update Help Text
  946. #--------------------------------------------------------------------------
  947. def update_help
  948. if item
  949. @help_window.set_text(item[:des])
  950. else
  951. @help_window.set_text("")
  952. end
  953. refresh_image
  954. end
  955. #--------------------------------------------------------------------------
  956. # * Refresh
  957. #--------------------------------------------------------------------------
  958. def refresh
  959. make_item_list
  960. create_contents
  961. draw_all_items
  962. end
  963. end
  964.  
  965. class Window_HouseItem_Txt < Window_Base
  966. #--------------------------------------------------------------------------
  967. # * Initialize
  968. #--------------------------------------------------------------------------
  969. def initialize(x,y,width,height)
  970. super(x,y,width,height)
  971. draw_text
  972. end
  973. #--------------------------------------------------------------------------
  974. # * Draw text
  975. #--------------------------------------------------------------------------
  976. def draw_text
  977. contents.clear
  978. str = Dark_HouseDecorate::STUFF_TEXT
  979. contents.draw_text(contents.rect,str,1)
  980. end
  981. end
  982.  
  983. #==============================================================================
  984. # ** Game_Map
  985. #------------------------------------------------------------------------------
  986. # This class handles maps. It includes scrolling and passage determination
  987. # functions. The instance of this class is referenced by $game_map.
  988. #==============================================================================
  989. NOTE_TOKEN = "<can_decorate>"
  990. class Game_Map
  991. attr_accessor :map
  992. attr_accessor :map_id
  993. attr_accessor :decorate_map
  994. alias dark_house_dec_game_map_zx_setup setup
  995. #--------------------------------------------------------------------------
  996. # * Setup
  997. #--------------------------------------------------------------------------
  998. def setup(map_id)
  999. dark_house_dec_game_map_zx_setup(map_id)
  1000. @trash_ev = []
  1001. $d_stuff_need_update = true
  1002. if @map.note == NOTE_TOKEN
  1003. @decorate_map = true
  1004. else
  1005. @decorate_map = false
  1006. end
  1007. if !$game_system.stuff_map_grid.has_key?(map_id)
  1008. $game_system.stuff_map_grid[map_id] = Table.new(@map.width,@map.height)#Dark_Table.new(@map.width,@map.height)
  1009. end
  1010. end
  1011. #--------------------------------------------------------------------------
  1012. # * Thêm Event vào Biến
  1013. #--------------------------------------------------------------------------
  1014. def insert_stuff_map_ev(item,x,y)
  1015. if $game_system.stuff_map[@map_id]
  1016. $game_system.stuff_map[@map_id].push(DStuff.new(item,x,y,@map_id))
  1017. else
  1018. $game_system.stuff_map[@map_id] = [DStuff.new(item,x,y,@map_id)]
  1019. end
  1020. extract_save_events
  1021. end
  1022. #--------------------------------------------------------------------------
  1023. # * Giải nén Event đã lưu
  1024. #--------------------------------------------------------------------------
  1025. def extract_save_events
  1026. @events.each_pair do |key,value|
  1027. if value.is_decorate_item
  1028. value.erase
  1029. value.refresh
  1030. @trash_ev.push(key)
  1031. end
  1032. end
  1033. @trash_ev.each do |ev|
  1034. @events.delete(ev)
  1035. end
  1036. SceneManager.scene.refresh_characters
  1037. if $game_system.stuff_map[@map_id]
  1038. $game_system.stuff_map[@map_id].each do |event|
  1039. if event.item.has_key?(:event)
  1040. map = event.item[:event][0]
  1041. event_id = event.item[:event][1]
  1042. x = event.x
  1043. y = event.y
  1044. d_add_decorate_event(map,event_id,x,y)
  1045. end
  1046. end
  1047. end
  1048. SceneManager.scene.update_tilemap
  1049. end
  1050. #--------------------------------------------------------------------------
  1051. # * Thêm Event từ Map khác vào
  1052. #--------------------------------------------------------------------------
  1053. def d_add_decorate_event(mapid, eventid, x, y)
  1054. map = load_data(sprintf("Data/Map%03d.rvdata2", mapid))
  1055. e = Game_Event.new(mapid, map.events[eventid])
  1056. e.is_decorate_item = true
  1057. e.moveto(x,y)
  1058. e.event.id = @events.length + 1
  1059. @events[e.event.id] = e
  1060. p "Event Length : #{@events.length}" if $TEST
  1061. SceneManager.scene.refresh_characters
  1062. end
  1063. end
  1064. class Game_Event
  1065. attr_accessor :event
  1066. def id
  1067. return @event.id
  1068. end
  1069. end
  1070.  
  1071. class Scene_Map
  1072. alias dark_house_dec_start start
  1073. #--------------------------------------------------------------------------
  1074. # * Start Processing
  1075. #--------------------------------------------------------------------------
  1076. def start
  1077. super
  1078. dark_house_dec_start()
  1079. end
  1080. #--------------------------------------------------------------------------
  1081. # * Determine if Menu is Called due to Cancel Button
  1082. #--------------------------------------------------------------------------
  1083. alias dark_house_dec_update_call_menu update_call_menu
  1084. def update_call_menu
  1085. dark_house_dec_update_call_menu if !$d_stuff
  1086. map_note = $game_map.map.note
  1087. if Input.trigger?(:Z) && !$d_stuff && map_note.include?(NOTE_TOKEN)
  1088. SceneManager.call(Scene_HouseItem)
  1089. end
  1090. end
  1091. #--------------------------------------------------------------------------
  1092. # * Refresh Characters
  1093. #--------------------------------------------------------------------------
  1094. def refresh_characters
  1095. @spriteset.refresh_characters if @spriteset
  1096. end
  1097. #--------------------------------------------------------------------------
  1098. # * Khởi tạo lại Tilemap
  1099. #--------------------------------------------------------------------------
  1100. def update_tilemap
  1101. @spriteset.dispose_tilemap if @spriteset
  1102. @spriteset.create_tilemap if @spriteset
  1103. end
  1104. end
  1105.  
  1106. class Game_Event
  1107. attr_accessor :is_decorate_item
  1108. end
  1109.  
  1110. #===============================================================================
  1111. # Dark House Decorating Variables
  1112. # Very Important. Heart of this system!
  1113. #===============================================================================
  1114. class Game_System
  1115. attr_accessor :user_stuff
  1116. attr_accessor :stuff_map
  1117. attr_accessor :stuff_map_grid
  1118. attr_accessor :stuff_map_ev
  1119. alias dark_house_decorating_initialize_save initialize
  1120. def initialize
  1121. @user_stuff = []
  1122. @stuff_map = {}
  1123. @stuff_map_grid = {}
  1124. @stuff_map_ev = {}
  1125. dark_house_decorating_initialize_save()
  1126. end
  1127. end
  1128. class DStuff
  1129. attr_accessor :item
  1130. attr_accessor :x
  1131. attr_accessor :y
  1132. attr_accessor :map_id
  1133. def initialize(item,x,y,map_id)
  1134. @item = item
  1135. @x = x
  1136. @y = y
  1137. @map_id = map_id
  1138. end
  1139. end
  1140. #===============================================================================
  1141. # HEART OF THE SYSTEM
  1142. #===============================================================================
Advertisement
Add Comment
Please, Sign In to add comment