Hướng dẫn làm 1 game HM bằng RPG maker VX từ A > Z

prince of games

Space Marine Doomguy
Lão Làng GVN
Tham gia ngày
21/8/06
Bài viết
5,784
Reaction score
24,060
Hướng Dẫn làm 1 game HarvestMoon từ A > Z bẳng RPG maker VX​
BL0.9969638_48106_1.png
Nguồn - Gamevn​
Bạn là 1 fan của game HM ? Vậy bạn có bao giờ nghĩ đến việc tự tạo cho mình 1 game y như phong cách của bạn chưa ? Tôi thì có , tôi mang ý định đó suốt 4 năm nhưng cuối cùng vẫn không thực hiện được ? Tôi tự hỏi tại sao

Vâng, nếu tôi biết thì tôi đã ko tự hỏi ,nếu tôi tự hỏi thì có nghĩa là tôi ko biết, nhưng tôi mong khi tôi viết bài này , có một ai đó sẽ giúp tôi tìm ra câu trả lời ,và hoàn thành ý định đó hộ tôi

Các bạn có thể chẳng biết làm game thế nào cả ? các bạn chẳng biết gì về code hay graphic PTS gì cả, nhưng đừng lo, cái cần nhất mà game maker cần là ý tường , bản thân tôi lại thiếu cái đó .(có thể đây là 1 lý do mà tôi ko thể hoàn thành project này đc )

Thôi thì dài dòng văn tự quá rồi , chương trình tôi sử dụng để làm game là Rpg maker VX
Các bạn có thể down nó tại
http://www.mediafire.com/?mzjnla2mwwy

Ccòn nữa, trước khi bắt đầu xin các bạn vui long đọc hết những gì tôi đã viết trong topic này
http://forum.gamevn.com/showthread....g-dan-nhung-dieu-co-ban-nhat-cua-RPG-maker-VX

Tuy đó ko phải hướng dẫn làm 1 game thể loại HM nhưng lại chứa yếu tố rất cần thiết là cơ bản cho mọi thể loại ,và nếu các bạn ko đọc bài đó thì tôi nghĩ tôi sắp nói gì dưới đây chắc các bạn cũng ko hiểu !


-----------------------------------------------------

Tổng hợp những hệ thống của 1 game HM cần có

Chúng ta bắt đầu thống kê nhé :
1. Thời gian
2. TV
3. Tình cảm với các cô gái (chàng trai)
4. Chăn nuôi
5. Trồng trọt
6. Thời tiết
7. Nấu nướng

Còn gì nữa không nhỉ ? Tôi nghĩ cũng tạm đủ rồi, tôi sẽ hướng dẫn các cậu làm tất cả 7 chức năng này, 7 chức năng này là nền móng buộc phải có của 1 game HM nếu các bạn tạo đc 7 hệ thống này, việc tạo 1 game HM chỉ còn là vấn đề thời gian ……


---------- Post added at 15:41 ---------- Previous post was at 15:29 ----------

Thời gian
Cái bạn cần ở đây là script , script là 1 đoạn code 1 ,loại ngôn ngữ dành riêng cho RPG maker dùng để mở rộng hay tạo 1 số hệ thống cho game
Bây giờ tôi cần script thời gian ở đây tôi cùng đọan code này :
Copy đoạn code này

Mã:
 #==============================================================================
# ● Script Function Calls
#------------------------------------------------------------------------------
# ● $kts.stop - Stops time (can be used for cutscenes)
# ● $kts.go - Resumes time (don't forget to use this!)
# ● $kts.sec(n) - progresses time forward (n) seconds
# ● $kts.min(n) - progresses time forward (n) minutes
# ● $kts.hours(n) - progresses time forward (n) hours
# ● $kts.days(n) - progresses time forward (n) days
# ● $kts.jump_to_hour(n) - progresses time forward TO the specified hour.
#==============================================================================
# ● Game Database Setup
#------------------------------------------------------------------------------
# This script, by defult, uses the following game variables and switches:
# Database Variables:
# [1] The Current Time [4] The Current Hour
# [2] The Current Second [5] The Current Day
# [3] The Current Minute [6] Name of the Current Day
# Database Switches
# [1] ON during night hours (2200-0400)(10pm-4am)
# [2] ON during dawn hours (0500-0800)( 5am-8am)
# [3] ON during daytime hours (0900-1800)( 9am-6pm)
# [4] ON during sunset hours (1900-2100)( 7pm-9pm)
#==============================================================================

#==============================================================================
# Stores variables and user defined settings for the time system.
#==============================================================================
module KTS
  #-----------------------------------------------------------------------
  # User Definable Clock Settings
  #-----------------------------------------------------------------------
  # Sets the speed multiplier of the clock. 1 is real time. A higher
  # value will give you a faster clock. Default is 100.
  SPEED = 60
  #AMPM (True: 12-hour clock, False: 24-hour clock)
  AMPM = true
  # Sets the time at the start of your game.
  START_HOUR = 9
  START_DAY = 1
  #-----------------------------------------------------------------------
  # If you want custom day names, edit away!
  #-----------------------------------------------------------------------
  DAY_NAMES = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]
  #-----------------------------------------------------------------------
  # Settings for Time Periods
  #-----------------------------------------------------------------------
  T1 = [ 0,5 ] # Night # Sets time periods for tinting effects
  T2 = [ 6,8 ] # Dawn # [Start Hour, End Hour] for time period
  T3 = [ 9,18] # Day # Use 24-hour values for time periods
  T4 = [19,21] # Sunset
  T5 = [22,24] # Night # <- Ex: Night is between 23:00 and 24:00
  #-----------------------------------------------------------------------
  # Settings for Output to Game Variables option.
  #-----------------------------------------------------------------------
  # Set this to true to output the current time to game variables.
  DATABASE_OUTPUT = true
  # Game Variable to be used for time output.
  TIME = 101 #(Time in string format. Ex: "2:48 AM" or "02:48")
  SECONDS = 102
  MINUTES = 103
  HOURS = 104
  DAYS = 105
  DAYNAME = 106
  # Game Switches to be used for time output.
  NIGHT = 17 # This switch is on during night hours (2200-0400)(10pm-4am)
  DAWN = 18 # This switch is on during dawn hours (0500-0800)( 5am-8am)
  DAY = 19 # This switch is on during daytime hours (0900-1800)( 9am-6pm)
  SUNSET = 20 # This switch is on during sunset hours (1900-2100)( 7pm-9pm)
  #-----------------------------------------------------------------------
  # Settings for time controlled screen toning
  #-----------------------------------------------------------------------
  TONE_SWITCH_ID = 40
  # True will enable screen toning to be used by the script.
  USE_TONE = true
  # Sets the duration of tone changes (in frames)
  FADE_LENGTH = 120
  # Defines tones to be used in the corresponding time periods defined above.
  # RED, GREEN, BLUE, GREY
  C1 = Tone.new(-187, -119, -17, 68)
  C2 = Tone.new( 17, -51, -102, 0)
  C3 = Tone.new( 0, 0, 0, 0)
  C4 = Tone.new( -68, -136, -34, 0)
  C5 = Tone.new(-187, -119, -17, 68)
  # Defines anti-tones
  A1 = Tone.new( 187, 119, 17, -68)
  A2 = Tone.new( -17, 51, 102, 0)
  A3 = Tone.new( 0, 0, 0, 0)
  A4 = Tone.new( 68, 136, 34, 0)
  A5 = Tone.new( 187, 119, 17, -68)
end

  #==============================================================================
  # Core Time System Engine
  #==============================================================================
class Kylock_Time_System
  # sets instance variables
  def initialize
    $kts_map_data = load_data("Data/MapInfos.rvdata")
    @event_offset = (KTS::START_HOUR * 3600) + (KTS::START_DAY * 86400)
    @kts_stop = false
    $kts_event_tone = false
    $kts_battle_tone = true
    $kts_anti_tone = Tone.new(0,0,0,0)
  end

  # Computes current time and updates variables if used
  def update
    if !@kts_stop
      @total_seconds = (Graphics.frame_count * KTS::SPEED / 60) + @event_offset
      @seconds = (@total_seconds) % 60
      @minutes = (@total_seconds / 60) % 60
      @hours = (@total_seconds / 3600) % 24
      @days = (@total_seconds / 86400)
      update_tint
      if KTS::DATABASE_OUTPUT
        $game_variables[KTS::TIME] = getTime
      end
    end
  end

  def update_variables
    $game_variables[KTS::SECONDS] = @seconds
    $game_variables[KTS::MINUTES] = @minutes
    $game_variables[KTS::HOURS] = @hours
    $game_variables[KTS::DAYS] = @days
    $game_variables[KTS::DAYNAME] = getDayName
  end

  def update_switches
    if @period == 1 || @period == 5
      $game_switches[KTS::NIGHT] = true
    else
      $game_switches[KTS::NIGHT] = false
    end
    if @period == 2
      $game_switches[KTS::DAWN] = true
    else
      $game_switches[KTS::DAWN] = false
    end
    if @period == 3
      $game_switches[KTS::DAY] = true
    else
      $game_switches[KTS::DAY] = false
    end
    if @period == 4
      $game_switches[KTS::SUNSET] = true
    else
      $game_switches[KTS::SUNSET] = false
    end
  end

  def getTime
    if KTS::AMPM
    # Formats a 12-Hour Clock
      if @hours > 12
        hours1 = @hours - 12
          if hours1 > 9
            time = sprintf("%02d:%02d" + " PM", hours1, @minutes, @seconds)
          else
            time = sprintf("%01d:%02d" + " PM", hours1, @minutes, @seconds)
          end
      else
        if @hours > 9
            time = sprintf("%02d:%02d" + " AM", @hours, @minutes, @seconds)
        else
            time = sprintf("%01d:%02d" + " AM", @hours, @minutes, @seconds)
        end
      end
      #-------------------------------------------------------------------------------
      # 12-Format Fix by the unsung bard
      #-------------------------------------------------------------------------------
      # if @hours == 12
      # time = sprintf("%01d:%02d:%02d" + " PM", @hours, @minutes, @seconds)
      # end
      # if @hours == 0
      # time = sprintf("%02d:%02d:%02d" + " AM", "12", @minutes, @seconds)
      # end
      #-------------------------------------------------------------------------------
      return time
    else
      # Formats a 24-Hour Clock
      time = sprintf("%02d:%02d:%02d", @hours, @minutes, @seconds)
      return time
    end
  end
  #-----------------------------------------------------------------------
  # Script Command Functions
  #-----------------------------------------------------------------------
  def stop
    @time_stopped = @total_seconds
    @kts_stop = true
  end
  
  def go
    total_seconds = (Graphics.frame_count * KTS::SPEED / 60) + @event_offset
    @event_offset -= (total_seconds - @time_stopped)
    @kts_stop = false
  end
  
  def sec(sec = 0)
    @event_offset += sec
  end
  
  def min(min = 0)
    @event_offset += min * 60
  end
  
  def hours(hours = 0)
    @event_offset += hours * 3600
  end
  
  def days(days = 0)
  @event_offset += days * 86400
  end
  
  def jump_to_hour(jhour = 0)
    while @hours != jhour
      @event_offset += 1
      $kts.update
    end
  end
  #-----------------------------------------------------------------------
  # Script Support/Misc Functions
  #-----------------------------------------------------------------------
  def getDayName
    weekday = (@days % KTS::DAY_NAMES.length)
    return KTS::DAY_NAMES[weekday]
  end

  #-----------------------------------------------------------------------
  # Screen Tone Functions
  #-----------------------------------------------------------------------
  def update_tint(duration = KTS::FADE_LENGTH)
    return if $BTEST
    unless $game_switches[KTS::TONE_SWITCH_ID]
      if KTS::USE_TONE && !$kts_event_tone && $kts_map_data[$game_map.map_id].outside_tint?
        if @hours >= KTS::T1[0] and @hours <= KTS::T1[1]
          @period = 1
          screen.start_tone_change(KTS::C1,duration)
          $kts_anti_tone = KTS::A1
        elsif @hours >= KTS::T2[0] and @hours <= KTS::T2[1]
          @period = 2
          screen.start_tone_change(KTS::C2,duration)
          $kts_anti_tone = KTS::A2
        elsif @hours >= KTS::T3[0] and @hours <= KTS::T3[1]
          @period = 3
          screen.start_tone_change(KTS::C3,duration)
          $kts_anti_tone = KTS::A3
        elsif @hours >= KTS::T4[0] and @hours <= KTS::T4[1]
          @period = 4
          screen.start_tone_change(KTS::C4,duration)
          $kts_anti_tone = KTS::A4
        elsif @hours >= KTS::T5[0] and @hours <= KTS::T5[1]
          @period = 5
          screen.start_tone_change(KTS::C5,duration)
          $kts_anti_tone = KTS::A5
        end
      else
        # no tone if indoors
        if !$kts_map_data[$game_map.map_id].outside_tint?
          screen.start_tone_change(Tone.new(0,0,0,0),duration)
        end
      end
    end
  end
      
  def screen
    if $game_temp.in_battle
      return $game_troop.screen
    else
      return $game_map.screen
    end
  end
end

class Spriteset_Map
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  alias kts_initialize initialize
  def initialize
    $kts.update_switches if !@kts_stop && KTS::DATABASE_OUTPUT
    $kts.update_variables if !@kts_stop && KTS::DATABASE_OUTPUT
    kts_initialize
  end
end

#==============================================================================
# Instantly updates screen tone when a new map is loaded.
#==============================================================================
class Game_Map
  alias kts_setup setup
  def setup(map_id)
    kts_setup(map_id)
    $kts_event_tone = false
    $kts.update
    $kts.update_tint(0)
  end
end

#==============================================================================
# Instantly updates screen tone when a battle starts.
#==============================================================================
class Spriteset_Battle
  alias kts_create_battleback create_battleback
  def create_battleback
    $kts.update_tint(0)
    kts_create_battleback
  end
end

#==============================================================================
# Temporarily disables auto-toning if an event tints the screen.
#==============================================================================
class Game_Interpreter
  alias kts_Interpreter_command_223 command_223
  def command_223
    $kts_event_tone = true
    kts_Interpreter_command_223
  end
end

#==============================================================================
# Integrates the Time System into the Game System.
#==============================================================================
class Game_System
  # inits a KTS object
  alias kts_initialize initialize
  def initialize
    $kts=Kylock_Time_System.new
    kts_initialize
  end
  # Updates kts every game frame
  alias kts_update update
  def update
    $kts.update
    kts_update
  end
end

#==============================================================================
# Scans Map Names for Toning
#==============================================================================
class RPG::MapInfo
  def name # Definition prevents location scripts from reading anything within
    eturn @name.gsub(/\[.*\]/) {""} # brackets, including the brackets
  end
  
  def original_name
    return @name
  end
  
  def outside_tint?
    return @name.scan(/\[KTS\]/).size > 0
    # old regexp: return @name.scan(/[\KTS]/).size > 0
  end
end


#==============================================================================
# Sets up the time window for the menu.
#==============================================================================
class Window_KTS < Window_Base
  def initialize(x, y)
    super(x, y, 210, WLH + 52)
    refresh
  end
  
  def refresh
    self.contents.clear
    # Change "49" or "120" higher or lower to move the words horizontally
    # Change "32" higher or lower to move the words vertically
        self.contents.clear
    self.contents.font.color = Color.new(173, 255, 47, 255)
    self.contents.draw_text(4, 15, 75, 32, $kts.getDayName , 2)
    self.contents.draw_text(4, 15, 165, 32, $kts.getTime, 2)
    self.contents.draw_text(152, -8, 75, 32, $game_variables[10]) 
  end
  
  def update
    super
    $kts.update
    self.contents.clear
    self.contents.font.color = Color.new(173, 255, 47, 255)
    self.contents.draw_text(4, 15, 75, 32,$kts.getDayName , 2)
    self.contents.draw_text(4, 15, 165, 32, $kts.getTime, 2)
    self.contents.draw_text(152, -8, 75, 32, $game_variables[10]) 
  end
end
#==============================================================================
# Adds the time window to the menu.
#==============================================================================
class Scene_Map < Scene_Base
  alias kts_start start
  def start
    kts_start
    @kts_window = Window_KTS.new(329,339)
    @kts_window.opacity = 0
  end
  
  alias kts_terminate terminate
  def terminate
    kts_terminate
    @kts_window.dispose
  end

  alias kts_update update
  def update
    kts_update
if $game_map.map_id != 14 and $game_map.map_id != 5 #map id clear
      @kts_window.update
    else
      @kts_window.contents.clear
    end
  end
end
#==============================================================================
# Saves and Loads game time to/from save game file.
#==============================================================================
class Scene_File
  alias kts_write_save_data write_save_data
  def write_save_data(file)
    kts_write_save_data(file)
    Marshal.dump($kts, file)
  end
  
  alias kts_read_save_data read_save_data
  def read_save_data(file)
    kts_read_save_data(file)
    $kts = Marshal.load(file)
  end
end

bây giờ các bạn mở RPG maker VX ra có phải giao diện là thế này không
81802827.png


Bạn ấn F11

30764467.png


Sau đó past đoạn script vừa copy vào trên script main sẳn có như thế này
98333978.png


ở script này các bạn chỉ cần để ý đến line 35, 39 ,40 , 44 cái này kiến thức AV cấp 1 cũng hiểu nên tớ ko cần giải thích
97949108.png


Và để ý line 59 > line 64 nữa , cái này tôi sẽ nói sau !


Việc chèn script tôi chỉ hướng dẫn 1 lần , các bạn nhớ kĩ đấy

Rồi đây giờ vào game test thử xem đã có thời gian chưa ?
62778778.png



Kết quả đây đúng ko ? ok rồi nhưng nhin dzầy nó xấu quá các cậu nhỉ thử dùng tấm graphic của tớ xem !
clocksn.png

down tấm ảnh này về vất vào folder “pictures”

Bây giờ tạo 1 common event với nội dung như thế này
96570523.png



Common event này có tác dụng show cái bức ảnh clock các bạn vừa down về đó ra ngoài map khi switch 3 được bật


Việc rất đơn giản bây giờ chúng ta chỉ cần làm cho switch 3 được bật
làm thế nào à ? đây chỉnh autorun rồi xóa đi
43182587.png

57127369.png



Kết quả tuyệt ko ? thấy cái số 0 kết chữ spring ko ? đó là số ngày , cái đó tôi thêm vào script gốc để phù hợp với thể loại game HM (thật ra thì tôi cũng thêm và chỉnh khá nhiều thứ vào script gốc rồi !)

Các bạn muốn tăng số ngày chỉ cần thay đổi số “variable no.10” ok chứ ?

Chưa xog, các bạn tưởng hệ thống thời gian trong HM nó đơn giản là tạo 1 cái clock bên ngoài map sao ? Ko phải đâu , script này có 1 hệ thống mà riêng riêng game HM rất cần đó là “thời gian có thể kích hoạt event”

Nói đơn giản 1 cái shop chỉ được vào từ 9h sáng tới 2h trưa thôi , bây giờ phải làm thế nào?
Yên tâm đã có tôi rồi :

Ta tạo 1 common event với nội dung thế này
29558513.png



Common event này có tác dụng kích hoạt swicth no.10 khi variable 104 của chúng ta lớn hơn hoặc = 8 và nhỏ hơn 15 , (tôi có bảo các bạn để ý line 59 > 64 trong script thời gian nhỉ, và variable “giờ” của chúng ta là no.104 đấy )

Nhìn hơi khó hiểu nhỉ, tự nhiên event kích hoạt từ 9h > 14h mà trong event này lại có số 15 và số 8 để tôi giải thích 1 chút từ 9h > 14 h có nghĩa là dưới 9h cái cửa đó ko vào đc nên có dấu < =8 số 15 cũng tương tự

Các bạn hỏi sao ko để thẵng là 9 > 14 lun á , khổ lắm các bạn ạ , để như thế nó ko hoạt động mới chết ấy chứ, tôi cũng chả hỉu nổi cái scrit này nó lạ đời kinh khủng )
để common event này hoạt động ta phải kích hoạt switch 9 trước

Để hiểu rõ tác dụng của commont event này ta thử nhé



Tạo 1 ngôi nhà và tao 1 event cửa gồm 2 page với nội dung lần lượt là thế này
92959370.png

38624254.png


test đi các chàng trai
67400887.png

10405868.png


thế là xog phần thời gian demo ,tôi gửi file đính kèm bên dưới


6 phần còn lại mỗi ngày tôi sẽ viết 1 phần , hiện tôi đc nghỉ 1 tuần nên sẽ cố gắng hoàn thành việc này do ko thể thực hiện đc lời hứa làm project này đc
 

Attachments

Chỉnh sửa cuối:
Tuy nói là mai Viết nhưng biết đâu mai tôi bận, nên giờ rảnh tôi viết luôn
phần này các cậu cần những picture
2 picture bỏ vào folder character
và 1 số pic bỏ vào picture xin mởi các bạn down bên dưới


Hệ Thống TV & Thời tiết

Hệ thống TV thì trong HM có bao nhiêu kênh ấy nhỉ ?
thôi bao nhiêu kênh thì kệ nó đi nhưng quan trọng là 2 kênh
_Thời Tiết
_Tin tức

Đúng ko nào ? kênh thời tiết là kênh dự báo mà ngày mai sẽ mưa hay nắng
Còn kênh tin tức là kênh cho ta biết trong tháng này sẽ có những lễ hội nào

chúng ta bắt đầu nào

tôi vẽ 2 map
map đầu tiên là map bên ngoài sẽ diễn tả thời tiết ngoài trời !
tôi tạo 1 event thế này
18517154.png




2 cái lệnh đầu chắc các bạn đã biết , tới lệnh thứ 3 thì đó có nghĩa là "nếu switch 12 = On thì ở map này sẽ có xuất hiện mưa"
tạm thời là vậy qua map tiếp theo

map trong nhà
trong map này tôi có 3 event
1 event với nội dung thế này

15240324.png



trong đây "kts.stop" tức là lệnh cho script thời gian ngừng hoạt động trong map này

1 cái giường để check thử thời tiết ,vì đây là dự báo mà, mai mới có mưa tức là tôi phải đi ngủ rồi cái dự báo mới ứng nghiệm

cái giường tôi sẽ nói sau

1 event TV


nội dung event là thế này
đây là 1 event gồm 3 page
page 1
97183399.png


tôi giải thích từng dòng nhé đầu tiên khi nhấp vào nó sẽ hiện picture "TV_Bat" sau đó cho bạn 2 chọn lựa 1 là chọn kênh "dự báo thời tiết" 2 là chọn kênh tin tức mà ở đây tôi đặt tên là "Trên từng kinh tuyến"

nếu bạn chọn kênh "dự báo thời tiết"
ở đây sẽ set random variable no.16 = 1 hoặc 2
nếu là 1 thì mai sẽ mưa còn nếu là 2 thì mai sẽ nắng lời thoại và hình show sẽ khác nhau , hết

kênh tin tức thì đơn giản quá chúng ta chỉ cần liệt kê trong mùa này có những lễ hội gì, thế thôi !

nhưng tại sao lại cần đến 3 page , uhm tại vì nếu chỉ page 1 thì mỗi lần bật thì TV lại hiện 1 dự báo thời tiết khác nhau, thế thì hơi xàm , nên cần đến 3 page

page thứ 2
89406719.png


được kích hoạt khi ngày mai trời nắng tức là variable no.16 = 1
với nội dung thế này
tức là mai 100% là năng rồi bật cỡ nào cũng nắng thôi

page 3
47340470.png


tương tự được kích hoạt nếu ngày mai trời mưa tức là variable no.16 = 2

bây giờ qua cái event giường nào ở event này về sau sẻ khá phức tạp vì nối các event lại với nhau rất nhiều nhưng hiện giờ thì chỉ cần cái thời tiết thôi

nên nội dung là thế này
38776685.png



bắt đầu từ dòng $kts.go nhé , vì trong nhá ban đầu đã đặt 1 event là $kts.stop để thời gian ko chạy nữa rồi nếu ko thêm lệnh $kts.go thì sẽ bị đứng màn hình khi chạy event đấy
variable 10 + 1 là để ngày qua 1 số (0 >1)
bây h tới phần nếu thì này
nếu variable 16 = 2 tức là xem dự báo thời tiết mà có mưa ấy thì switch 12 ON , tức là switch mưa sẽ ON event mưa bên ngoài map kia sẽ hoạt động
16955320.png



test đi các chàng trai xog thêm 2 hệ thống nữa nhé, dzậy là chỉ còn vài cái thôi

 
Chỉnh sửa cuối:
Bây h là 3h sáng , tôi lại viết hướng dẫn làm hệ thống tiếp theo cho project này đó là hệ thống tình cảm , ở đây là với các cô gái
để làm được điều này cần có 1 ic của character lúc cầm quà và 1 pic lúc character ko cầm quà ở đây tôi dùng 2 ảnh này
char_antiec.png

char_qua.png


Hệ Thống Tình Cảm

nói tới tình cảm trong HM thì chúng ta phải nói tới việc tặng quà làm tăng chỉ số tình cảm của cô gái lên , sau đó là tới các event ở các map tùy theo mức độ tình cảm của các cô gái đó
bây h tôi có 2 map như bài Tut thứ 2
map 1
là trong 1 ngôi nhà có 1 cái giường, vâng trong HM bất cứ sự kiện nào cũng liên quan đến cái giường, xin chú ý dùm
cái giường có nhiệm vụ gì trong hệ thống này tôi sẽ nói sau :

và 1 cái rương , cái rương này là để lấy 2 món quà cho cô gái ở map thứ 2

map thứ 2

1 cô gái tróng trong map này
thế này ,đầu tiên tạo 1 event cô gái (các bạn có thể thêm hệ thống thời gian bào cho cô gái ở event này nhưng tôi thì ko nhắc lại nữavì tut này chủ yếu là tình cảm thôi)

Tôi có 5 page cho event này như sau

page đầu tiên , khi cô chả có tình cảm j` với cậu cả
để làm được điều này tôi cần 1 chỉ số variable cho nv này khi variable nv này = 0 thì mặt lạnh như băng
30002033.png

49772519.png




page thứ 2
cũng như page 1 bây h cô bắt đầu có cảm tình với cậu
92426206.png

87274827.png



page 3
như page 2 có điều tình cảm đã ra hoa kết trái
70411360.png

98775749.png

80314439.png





page thứ 4
bắt đầu là page cậu cầm quà ở đây cần có switch "cầm quà" được bật rồi mới thực hiện lệnh trong event này
19086204.png



Nhưng cầm quà thì trong HM có nhiều loại, nông sản , rác , vâng vâng .... ở Tut này tôi chỉ làm đơn giản 2 loại đó là quà tặng đc , và rác

Bắt đầu thực hiện face này thì ta cần có item
tạo 1 item thứ 1 là "item tặng đc" nội dung như sau
30608338.png


chú ý những gì tôi khoanh tròn trong ảnh

item này khi sử dụng sẽ dẫn đến 1 common event vậy bây giờ ta sẽ tạo 1 common event nội dung như sau :
14518912.png



tức là sau khi sử dụng item này thì switch cầm quà sẽ được bật , switch cầm cà rốt-item tặng đc sẽ được bật và switch item rác sẽ off

item thứ 2 làm tương tự nhớ làm common event

tới page 5 của event cô gái , đâu có vụ 1 ngày tặng 2-3 lần nhỉ , để giới hạn tình cảm làm game chơi lâu hơn tôi chỉ cho 1 ngày tặng đc 1 lần thế là tôi tạo thêm 1 switch
73782303.png


89713651.png



xog bây giờ quay lại map 1 có cái giường, qua ngày mới thì tiế tục tặng quà đc đúng ko , vậy thì event nội dung cái giường sẽ là thế này chỉ cần thêm cái dòng này
83978127.png


xog rồi, test thử coi các chàng trai


66935024.png
 
Chỉnh sửa cuối:
4h sáng, gamevn lag quá

Hệ Thống Chăn Nuôi

Bắt đầu nào, tôi có 3 map

Map thứ nhất là map trong nhà mình, map này có event "cái giường" là đủ

30611603.png


Vâng tôi đã nói event "cái giường" là event nối kết mọi event của HM kể cả cái hệ thống trồng trọt mà mai tôi sẽ viết

Map thứ 2
là map bên ngoài ngôi nhà ,map này chỉ cần những cái event cửa để vào chuồng thôi

33470283.png


Map thứ 3
là map chuồng bò
47931755.png


Trong map này có 3 event
1.là con bò
2.là máng đựng lúa bò sẽ ăn
3.là khay chứa thức ăn cho bò

nắm được chưa

đầu tiên ta làm khay đựng thức ăn cho bò :
_Thường thì trong HM chúng ta sẽ mua lúa, và lúa đc chuyển tới khay đựng thức ăn cho bò, nếu hết lúa thì ko thể lấy lúa từ khay ra đc
OK tôi bắt đầu làm
Set 1 variable : "thức ăn cho bò"
bắt đầu tạo 1 event khay đựng thức ăn cho bò với 2 page

Page đầu tiên là khi số lúa = 0 tức là hết lúa rồi variable "thức ăn cho bò" = 0
74292015.png





Page thứ 2 là khi số lúa còn lớn hơn 0
nếu như vậy thì bắt đầu hiện câu hỏi "Lấy bao nhiêu" và bạn set giá trị đó số item đó sẽ đc add vào item inventory của bạn
để làm được điều đó, tôi lại cần thêm 1 variable nữa đó là "số thức an bò muốn lấy" là cái số bạn sẽ nhập vào

nếu cái số đó mà lớn hơn số "thức ăn cho bò" có sẵn thì xuất hiện thông báo ko đủ còn nếu nhỏ hơn hoặc = thì số lúa vào item inventory của bạn sẽ = với "số thức ăn cho bò muốn lấy"

cuối event nhớ set lại variable "số thức ăn bò muốn lấy = 0" nhé

bạn xem event để hiểu thêm
27595066.png



tới phần event máng
cũng đơn giản thôi, cái bạn cần là 1 graphic máng ăn
event này gồm 3 page

page 1 - trắng
91746543.png


page 2 - là page thức hiện event khi bạn kích hoạt switch "cầm thức ăn cho bò"
tức là khi bạn nhấn vào item "lúa"
93306266.png



phần này tương tự phần tôi đã hướng dẫn ở trên "Hệ thống tình cảm", tạo 1 item lúa cũng tương tự như thế

ở đây có 4 con bò nên phải phân switch ra

các bạn hãy xem nội dung event để biết thêm chi tiết




page 3 - thực hiện change graphic khi switch "cho bò x ăn rồi" = ON
38488973.png


Bây h tới event con bò
cũng đơn giản thôi, cái bạn cần là grahic 1 con bò, hình như vx có sẵn

event này gồm 2 page
page 1 là page con bò chưa đc ăn tức là switch đc ăn chưa đc ON
64743461.png



page 2 là page đc ăn rồi nên cho quyền lấy sữa bò nhưng ko phải lúc nào cũng lấy đcn nên hải đặt switch cho nó, event ngắn và cũng rất đơn giản , các bạn có thể tự hiểu chứ
13001685.png


bây h trở lại map 1 , phần cái giường bạn chỉ cần


thêm cái switch "chưa lấy sữa bò x" = On
và "cho bò x ăn rồi" = Off là xong


 
Chỉnh sửa cuối:
mệt quá , bài này lúc nãy tôi viết rồi đột nhiên mất điện phải viết lại
thôi thì tôi cũng ráng viết lại để đúng chỉ tiêu bản thân đề ra

Hệ Thống Trồng Trọt

hệ thống này yêu cầu bạn phải có 1 số graphic về cây , đất lúc chưa tưới nc và lúc tưới đc rồi và 1 số animation lúc nv thực hiên động tác đào bất, tưới cây .....
98150479.png




và cũng nói trc , hệ thống này là 1 cực hình với các bạn vì trong 1 mảnh đất lớn thì có vô số mảnh đất nhỏ mà mỗi mảnh đất nhỏ này là 1 event khác nhau cho nên mảnh vườn càng rộng thì bạn sẽ càng mệt

ở đây tôi có 2 map
map thứ 1 là map vườn , nơi trồng trọt
map thứ 2 là map nhà - map có event cái giường ý -.-

map 1.
53025258.png



do ko có thời gian nên tôi chỉ làm 2 mảnh đất nhỏ tức 2 event còn lại thì tương tự

event này gồm 15 page , sẽ còn tăng nếu như số cây trồng bạn phong phú

page thứ 1 gồm 2 điều kiện chủ yếu
1.nếu bạn còn sức - mp > 0 ở đây tôi tạo 1 variable mp (sức lực bạn có) nếu như mp này = 0 bạn ko thể thực hiện lệnh tiếp theo
@tôi nói rõ là mp là 1 variable ko phải là cái mp mặc định game cho sẵn đâu
57061587.png



2.nếu bạn có trang bị cây cuốc , tức là nếu ko cầm cây cuốc bạn ko thể thực hiện động tác đào đất đc và khi đào đất xog bạn hãy set seft switch A cho nó = ON
chỉ có vậy ở page này dài là do tôi bày vẽ thêm animation và 1 số điều kiện khác

page thứ 2 (khi switch A = on)
tức là khi thực hiện động tác đào đất xog event này sẽ hoạt động, ở đây tôi thay đổi graphic cho nó giống như đã đào đất xog , bây giờ đào đất xog chúng ta sẽ làm gì , chúng ta sẽ gieo hạt
tạo 1 item "hạt giống x" và làm event này giống như ở Tut hệ thống tình cảm vậy
ở page này có x đều kiện (x = số hạt giống có trong game của bạn)
xem kĩ page này
43170955.png


variavble no.501 = 10 : ở đây tôi set khi gieo trồng mỗi lại thì variable này sẽ tăng khác nhau 501 là số variable tôi dùng cho event này

10 là số để tôi nhận biết tôi đã gieo hạt giống nào

Khi gieo mỗi hạt giống thì số variable thay đổi khác nhau , tôi khuyến khích bạn tăng 10 với mỗi hạt giống khác nhau

switch 401 ....406 = Off : khi cầm 1 bịch hạt giống, nếu bạn làm theo cách tôi đã chỉ ở Tut tình cảm , thì 1 switch phải on để thực hiện common event đúng ko , sau khi sử dụng xog hạt giống thì tôi cho off nó tức là ko còn cầm hạt giống nữa

hãy xem page 3 ( nếu variable 501 = 10)

ở page này tôi có 3 điều kiện
1.nếu bạn trang bị bình nước (để tưới) thì thực hiện điều kiện tt
2.nếu mp bạn >= 1 thì bạn thực hiện dk tiếp theo
3.nếu 2 điều kiện trc đó bạn thỏa nhưng nước trong bình bạn = 0 thì .....
37748990.png


2 đk đầu chắc các bạn hiểu , điều kiện 3 thì chỉ cần set cho 1 variable nước trong bình = mấy đó khi bạn đi hứng nước ở 1 cái giếng nào đó

nếu bạn thực hiện đc động tác tưới nc thì + cho variable đó thêm 1 ở đây là
variable 501 = 1

switch 501 = ON ( đây là gì , đố các bạn , yes , đây là page khi bạn đã thực hiện xog động tác tưới nc)
đây là page cuối của event

bây giờ xem tiếp trang 4
rất đơn giản nếu mỗi ngày bạn tưới 1 phát qua 4 ngày khi variable của nó = 14 thì bạn sẽ thực hiện đc hành động thu hoạch
khi thu hoạch hãy set lại cho variable 501 = 0 và switch cũng dẹp đi , bạn cũng có thể set seft switch A = off luôn để nó đào lại rồi mới đc trồng
92627128.png


bắt đầu từ page 5 thì tương tự với loại hạt giống khác

73241362.png

11398078.png

49413518.png


bây giờ lảm event tiếp theo , tôi đã nói ở mạnh đất lớn thì 1 mãnh đất nhỏ là 1 event khác nhau nên tôi sẽ hướng dẫn bạn làm tương tự

copy cái event mới làm vào mảnh đất lớn chỗ khác (khuyến khích đặt kế nhau)
page 1 y chang

page từ page 2 chỗ nào có số variable 501 change hết thành 502 ko chừa chỗ nào còn = 501 cả
74227667.png

xog
các event khác làm tương tự

h tới map cái giường ở map 2

chắc các bạn biết phải làm gì rồi nhỉ , mỗi làn tưới nc thì ta chi switch 501 = ON h chỉ cần off nó thôi(ko phải chỉ 501 nha nếu bạn càng nhìu đất thì số switch phải off cũng tăng theo đó)
test đi các chàng trai

 
Chỉnh sửa cuối:
Back
Top