2005.06.25 02:15

밤/낮

조회 수 171 추천 수 1 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

>스크립트 없나요?
사용법 :

도입 후, 커스터마이즈 항목을 기호에 따라 변경해 주세요.

이벤트 커멘드 「스크립트」로
$game_system.daynight_change = (true|false)
그렇다고 하는 스크립트를 입력하면, 밤낮 변환을 제어할 수 있습니다.
(↑ true 또는 false (을)를 지정)
전투중만 밤낮 변환을 제어하는 경우는
$game_system.daynight_change_battle = (true|false)
(을)를 사용합니다.
다만, $game_system.daynight_change 하지만 false 의 경우는 전투중도 무효가 됩니다.

현재 상태는
x = now_daynight
그리고 취득할 수 있습니다. 이벤트의 조건 분기등에 사용하는 경우는
$game_variables[id] = now_daynight
(을)를 사용합니다.( id (은)는 변수 ID)
phase  내용  
0  주  
1  저녁  
2  야  
3  조  
(개조했을 경우는 변동)

x = now_daynight_name
그리고 현재 상태명(낮이나 밤등)을 취득할 수 있습니다.

여인숙의 처리등 때문에, 낮이나 밤에 수동으로 바꾸는 경우는
change_daynight(phase[, duration, pass_days])
(을)를 사용합니다.
phase (은)는 변경 후 상태(↑를 참조), duration (은)는 변경에 걸치는 시간(프레임)입니다.
(생략 하면 duration = 40 하지만 적용됩니다)
pass_days (은)는 상태 변화 후에 경과시키는 날짜를 입력합니다.
(생략 하면 날짜는 가산되지 않습니다)
이벤트등으로 날짜를 경과시키고 싶은 경우에도 사용할 수 있습니다.
<례> change_daynight(0, 0, 1) # 0 프레임으로 낮으로 이행해, 1일 경과시킨다
현재의 경과일수는
x = $game_system.daynight_pass_days
그리고 취득할 수 있습니다.(직접 고쳐 쓰는 일도 가능)

건조물의 내부에 들어갔을 때 등 , 일시적으로 통상시에 되돌리고 싶은 경우도 있습니다.
그 경우는
$game_system.daynight_change = false
$game_screen.daynight_default(0)
(을)를 실행하는 것으로, 통상의 색조에 되돌릴 수 있습니다.
반대로, 해당 장소에서 나올 때
$game_system.daynight_change = true
$game_screen.daynight_apply(0)
(을)를 실행하는 것으로, 이전 상태를 재현할 수 있습니다.
(0) 에는, 변환 시간을 프레임 단위로 지정합니다.
무리명에 [DN ...] (을)를 더하면, 적의 출현 조건을 설정할 수 있습니다.
... 에는, 그 무리를 출현시키는 상태( phase )(을)를 콤마 단락으로 입력합니다.
지정시, 수치의 전에 - (을)를 넣으면, 지정했다 phase (을)를 출현 조건으로부터 제외합니다.

「밤」마셔 출현시키는 경우:[DN 2]
「주·조」는 출현시키지 않는 경우:[DN -0,-3]
([DN-0,-3](이)나[DN -0, -3](와)과 같이, 공백을 들어갈 수 있어도 넣지 않아도 상관하지 않습니다)



#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/  ◆밤낮 변환 - KGC_DayNight◆
#_/----------------------------------------------------------------------------
#_/ 게임중에 밤낮의 개념을 작성합니다.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

#==============================================================================
# ★ 커스터마이즈 항목 ★
#==============================================================================

module KGC
  # ◆밤낮 변환 방식
  #  0:시 사이 경과 1:보수 2:현실 시간(미묘)
  DAYNIGHT_METHOD = 1

  # ◆이벤트중은 시간을 멈춘다
  #  「시간 경과」사용시만 유효
  DAYNIGHT_EVENT_STOP = true

  # ◆일자가 바뀌는 상태
  #  여기서 지정한 상태가 되었을 때, 날짜를 가산한다。
  # 초기 상태의 경우 0:낮 1:저녁 2:야 3:조
  # ※현실 시간의 경우, 현실과 같은 날짜는 되지 않기 때문에 주의.
  DAYNIGHT_PASS_PHASE = 3

  # ◆상태 변환시의 페이드 시간【단위:프레임】
  #  생략시도 이 값을 사용합니다.
  DAYNIGHT_DURATION = 40

  # ★☆이하의 3항목은 모두 같은 개수로 해 주세요☆★
  # 처리의 형편상, 최초를 낮으로 하면 베타

  # ◆밤낮의 명칭(별로 의미는 없다)
  DAYNIGHT_NAME = ["낮", "저녁", "야", "조"]

  # ◆밤낮의 색조(잘 모르는 경우는 이대로)
  DAYNIGHT_TONE = [Tone.new(0, 0, 0),
    Tone.new(-32, -96, -96),
    Tone.new(-128, -128, -32),
    Tone.new(-48, -48, -16)]

# ◆밤낮 변환 시간(다음 상태에 옮길 때까지의 기간)
# 변환 방식이 시간의 경우는 초수, 보수의 경우는 보수 그대로.
# 전투중은 변환 시간이 10배(1/10의 속도)
# 현실 시간의 경우, 다음 상태에 바꾸는 시각(24시간 방식)

  DAYNIGHT_TIME = [30, 10, 25, 10]

  # DAYNIGHT_TIME = [16, 20, 6, 10]
  # ↑현실 시간용의 샘플. 시험하는 경우는 코멘트를 해제
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

$imported["DayNight"] = true

#--------------------------------------------------------------------------
# ● 現在の状態
#--------------------------------------------------------------------------
def now_daynight
  # 現在の状態を返す
  return $game_system.daynight_phase
end
#--------------------------------------------------------------------------
# ● 状態名取得
#--------------------------------------------------------------------------
def now_daynight_name
  # 現在の状態名を返す
  return KGC::DAYNIGHT_NAME[now_daynight]
end
#--------------------------------------------------------------------------
# ● 昼夜手動切り替え
#     phase     : 切り替え後の状態INDEX
#     duration  : 切り替え時間(フレーム)  (省略時:DAYNIGHT_DURATION)
#     pass_days : 経過させる日数  (省略時:0)
#--------------------------------------------------------------------------
def change_daynight(phase, duration = KGC::DAYNIGHT_DURATION, pass_days = 0)
  # カウント初期化
  $game_system.daynight_count = 0
  # フェーズ更新
  $game_system.daynight_phase = phase
  # 手動切り替え有効
  $game_temp.manual_daynight_change = duration
  # 日数経過
  $game_system.daynight_pass_days += pass_days
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Temp
#==============================================================================

class Game_Temp
  attr_accessor :manual_daynight_change
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_KGC_DayNight initialize
  def initialize
    # 元の処理を実行
    initialize_KGC_DayNight

    @manual_daynight_change = false
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_System
#==============================================================================

class Game_System
  attr_accessor :daynight_change, :daynight_change_battle
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_KGC_DayNight initialize
  def initialize
    # 元の処理を実行
    initialize_KGC_DayNight

    @daynight_count, @daynight_phase, @daynight_pass_days = 0, 0, 0
    @daynight_change, @daynight_change_battle = true, true
  end
  #--------------------------------------------------------------------------
  # ● 昼夜判定用カウント取得
  #--------------------------------------------------------------------------
  def daynight_count
    @daynight_count = 0 if @daynight_count == nil
    return @daynight_count
  end
  #--------------------------------------------------------------------------
  # ● 昼夜判定用カウント設定
  #--------------------------------------------------------------------------
  def daynight_count=(n)
    @daynight_count = 0 if @daynight_count == nil
    @daynight_count = n
  end
  #--------------------------------------------------------------------------
  # ● 現在の状態取得
  #--------------------------------------------------------------------------
  def daynight_phase
    @daynight_phase = 0 if @daynight_phase == nil
    return @daynight_phase
  end
  #--------------------------------------------------------------------------
  # ● 現在の状態設定
  #--------------------------------------------------------------------------
  def daynight_phase=(n)
    @daynight_phase = 0 if @daynight_phase == nil
    @daynight_phase = n
  end
  #--------------------------------------------------------------------------
  # ● 経過日数取得
  #--------------------------------------------------------------------------
  def daynight_pass_days
    @daynight_pass_days = 0 if @daynight_pass_days == nil
    return @daynight_pass_days
  end
  #--------------------------------------------------------------------------
  # ● 経過日数設定
  #--------------------------------------------------------------------------
  def daynight_pass_days=(n)
    @daynight_pass_days = 0 if @daynight_pass_days == nil
    @daynight_pass_days = n
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Screen
#==============================================================================

class Game_Screen
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_KGC_DayNight initialize
  def initialize
    # 元の処理を実行
    initialize_KGC_DayNight

    # とりあえず現在の状態に設定
    @tone = KGC::DAYNIGHT_TONE[$game_system.daynight_phase].clone
    # 移動判定用座標
    @x, @y = 0, 0
    # フレーム更新用カウント初期化
    @frame_count = Graphics.frame_count
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias update_KGC_DayNight update
  def update
    # 元の処理を実行
    update_KGC_DayNight

    # 昼夜切り替え判定
    if (!$game_temp.in_battle && $game_system.daynight_change) ||
        ($game_temp.in_battle && $game_system.daynight_change &&
        $game_system.daynight_change_battle)
      case KGC::DAYNIGHT_METHOD
      when 0  # 時間判定
        # カウント増加量計算
        inc_count = Graphics.frame_count - @frame_count
        # 加算量がおかしい場合は戻る
        if inc_count >= 100
          @frame_count = Graphics.frame_count
          return
        end
        # イベント中は戻る
        if KGC::DAYNIGHT_EVENT_STOP && $game_system.map_interpreter.running?
          @frame_count = Graphics.frame_count
          return
        end
        # カウント加算
        if $game_temp.in_battle
          inc_count /= 10.0
          $game_system.daynight_count += inc_count
        else
          $game_system.daynight_count += inc_count
        end
        # カウントを戻す
        @frame_count = Graphics.frame_count
        # 状態移行判定
        count = $game_system.daynight_count / Graphics.frame_rate
        if count >= KGC::DAYNIGHT_TIME[$game_system.daynight_phase]
          # 次の状態へ移行
          $game_system.daynight_count = 0
          $game_system.daynight_phase += 1
          # 最後の状態に達した場合
          if $game_system.daynight_phase >= KGC::DAYNIGHT_TONE.size
            # 最初の状態に戻す
            $game_system.daynight_phase = 0
          end
          # 日数経過判定
          if $game_system.daynight_phase == KGC::DAYNIGHT_PASS_PHASE
            $game_system.daynight_pass_days += 1
          end
          # 色調切り替え
          start_tone_change(KGC::DAYNIGHT_TONE[$game_system.daynight_phase],
            KGC::DAYNIGHT_DURATION)
        end
      when 1  # 歩数判定
        # 移動判定
        if @x != $game_player.x || @y != $game_player.y
          # 座標更新
          @x = $game_player.x
          @y = $game_player.y
          # カウント加算
          $game_system.daynight_count += 1
          # 状態移行判定
          count = $game_system.daynight_count
          if count >= KGC::DAYNIGHT_TIME[$game_system.daynight_phase]
            # 次の状態へ移行
            $game_system.daynight_count = 0
            $game_system.daynight_phase += 1
            # 最後の状態に達した場合
            if $game_system.daynight_phase >= KGC::DAYNIGHT_TONE.size
              # 最初の状態に戻す
              $game_system.daynight_phase = 0
            end
            # 日数経過判定
            if $game_system.daynight_phase == KGC::DAYNIGHT_PASS_PHASE
              $game_system.daynight_pass_days += 1
            end
            # 色調切り替え
            start_tone_change(KGC::DAYNIGHT_TONE[$game_system.daynight_phase],
              KGC::DAYNIGHT_DURATION)
          end
        end
      when 2  # 現実時間
        # 現在の時間を取得
        time = Time.now
        # 状態移行判定
        time1 = KGC::DAYNIGHT_TIME[$game_system.daynight_phase]
        time2 = KGC::DAYNIGHT_TIME[$game_system.daynight_phase - 1]
        if time2 != nil && time2 > time1
          change = time.hour < time2 && time.hour >= time1
        else
          change = time.hour >= time1
        end
        if change
          # 次の状態へ移行
          $game_system.daynight_count = 0
          $game_system.daynight_phase += 1
          # 最後の状態に達した場合
          if $game_system.daynight_phase >= KGC::DAYNIGHT_TONE.size
            # 最初の状態に戻す
            $game_system.daynight_phase = 0
          end
          # 日数経過判定
          if $game_system.daynight_phase == KGC::DAYNIGHT_PASS_PHASE
            $game_system.daynight_pass_days += 1
          end
          # 色調切り替え
          start_tone_change(KGC::DAYNIGHT_TONE[$game_system.daynight_phase],
            KGC::DAYNIGHT_DURATION)
        end
      end
    end
    # 手動切り替えが行われた場合
    if $game_temp.manual_daynight_change != nil
      # 色調切り替え
      start_tone_change(KGC::DAYNIGHT_TONE[$game_system.daynight_phase],
        KGC::DAYNIGHT_DURATION)
      # 手動切り替え解除
      $game_temp.manual_daynight_change = nil
    end
  end
  #--------------------------------------------------------------------------
  # ● デフォルトの状態(0, 0, 0)に戻す
  #     duration : 切り替え時間(フレーム)  (省略時:40)
  #--------------------------------------------------------------------------
  def daynight_default(duration = KGC::DAYNIGHT_DURATION)
    start_tone_change(Tone.new(0, 0, 0), duration)
  end
  #--------------------------------------------------------------------------
  # ● 現在の状態を適用
  #     duration : 切り替え時間(フレーム)  (省略時:40)
  #--------------------------------------------------------------------------
  def daynight_apply(duration = KGC::DAYNIGHT_DURATION)
    start_tone_change(KGC::DAYNIGHT_TONE[$game_system.daynight_phase], duration)
  end
end


#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Map
#==============================================================================

class Game_Map
  #--------------------------------------------------------------------------
  # ● エンカウントリストの取得
  #--------------------------------------------------------------------------
  alias encounter_list_KGC_DayNight encounter_list
  def encounter_list
    # 元の処理を実行
    list = encounter_list_KGC_DayNight.dup

    # 出現条件判定
    list.each_index do |i|
      appear = false
      troop = $data_troops[list[i]]
      # 出現条件が無い場合は次へ
      next unless troop.name =~ /[DN((?:[ ]*[-]?d+(?:,[ ]*)?)+)]/i
      # 出現条件を適用
      for dn in $1.split(/,/)
        dn.gsub!(/[ ]/) {""}
        appear |= dn[0, 1] == "-" ? $game_system.daynight_phase != dn.to_i.abs :
          $game_system.daynight_phase == dn.to_i
      end
      list[i] = nil unless appear
    end
    return list.compact
  end
end

?

List of Articles
번호 제목 글쓴이 날짜 조회 수
647 Mid파일이 않나옵니다; 늑대소년 2005.06.25 267
646 Mid파일이 않나옵니다; 내마음블루 2005.06.25 333
645 Mid파일이 않나옵니다; 에존 2005.06.25 307
644 Mid파일이 않나옵니다; 뱀신의신교 2005.06.25 307
643 xp에서 저장 했는데 불러오는게 안되는군요. 내마음블루 2005.06.25 229
642 창조도시님이 올리신 초고속 게이지 말입니다. KBOY∮ 2005.06.25 848
641 DirectX를.. 이해가 불가능..;; Yeah~☆ 2005.06.25 387
640 공들여 만든 게임이 깨졌을땐...? 어둠의그림자 2005.06.23 308
639 RPG XP 맵명 고치는법 メIllusion。 2005.06.23 496
638 RPG XP 맵명 고치는법 Sol 2005.06.23 554
637 rpg2003에서 NPC가 효과음과 함깨 갑자기 나타나도록 초반수 2005.06.23 483
636 [RPGXP]원경... 늑대소년 2005.06.23 395
635 [RPGXP]원경... 허허허켁켁마왕 2005.06.23 460
634 RPGXP 도와주세요. ;ㅁ; 납시오 2005.06.23 542
633 창조도시에서 오에카키를 그리다 보면 생기는 문제에 관한... 이나시엔 2005.06.23 452
632 텔레포트 사용하기 늑대소년 2005.06.23 163
631 간단한 C언어 함수 'for' 에 대한질문 창조자 2005.06.23 436
630 2003질문이요.자동이동 하면서 움직이게 할수 있나요? 다크빌리온 2005.06.23 186
629 [절대답변필요]키얻어 문열기 メIllusion。 2005.06.23 194
628 [절대답변필요]키얻어 문열기 반쪽민재궁수 2005.06.23 191
Board Pagination Prev 1 ... 405 406 407 408 409 410 411 412 413 414 ... 442 Next
/ 442


[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)