Avangs

  • 게임 정보
    • 게임 소개
    • 게임 리뷰
    • 게임 실황
    • 게임 공략
    • 모바일 테스트
  • 게임 작품
    • 완성작 게임
    • 체험판 게임
    • 한글판 게임
    • 온라인 게임
    • 추천작 제작자 저장소
  • 투표선정 작품
    • 아방스 추천작
    • 완성 기대작
    • 투표 신청
    • 투표소
    • 투표 결과
  • 강좌
    • 아방스 칼럼
    • 비주얼노벨 강좌
    • 알만툴 강좌
      • MZ 강좌
      • MV 강좌
      • VX Ace 강좌
      • VX 강좌
      • XP 강좌
      • 2003 강좌
      • 2000 강좌
    • 게임메이커 강좌
    • 울프툴 강좌
    • 3D 게임제작 강좌
    • 2D 게임제작 강좌
    • 그래픽 제작 강좌
    • 기타 강좌
  • 질문과 답변new
    • 자주 묻는 질문new
    • 질문과 답변
    • 제작의뢰
  • 커뮤니티
    • 구인·구직·외주
    • 테스트 요청
    • 자유게시판
    • 게임계 소식
    • 유머&정보
    • 사이트링크
    • 이벤트&대회
  • 창작
    • 게임 기획
    • 맵배치
    • 글쓰기
    • 그리기
    • 음악
  • 자료실
    • 게임제작툴
    • 예제 및 샘플
    • 그래픽 소재
      • 오리지널 소재
      • 이차창작 소재
      • 수정·개조 소재
      • 외부 소재
    • 사운드 소재
    • 확장·플러그인·스크립트
      • MZ 플러그인
      • MV 플러그인
      • Ace 스크립트
      • VX 스크립트
      • XP 스크립트
      • 2k3 플러그인
      • VN 플러그인·확장
    • 외부 소재사이트
    • 기타 자료
      • 한글화툴
      • 무료 폰트
      • 유틸리티
    • 디자인 참고자료
  • 고객센터
    • 공지사항
    • 건의 및 신고
    • 핫 이슈
로그인 회원가입
Avangs
  • 게임 정보
    • 게임 소개
    • 게임 리뷰
    • 게임 실황
    • 게임 공략
    • 모바일 테스트
  • 게임 작품
    • 완성작 게임
    • 체험판 게임
    • 한글판 게임
    • 온라인 게임
    • 추천작 제작자 저장소
  • 투표선정 작품
    • 아방스 추천작
    • 완성 기대작
    • 투표 신청
    • 투표소
    • 투표 결과
  • 강좌
    • 아방스 칼럼
    • 비주얼노벨 강좌
    • 알만툴 강좌
      • MZ 강좌
      • MV 강좌
      • VX Ace 강좌
      • VX 강좌
      • XP 강좌
      • 2003 강좌
      • 2000 강좌
    • 게임메이커 강좌
    • 울프툴 강좌
    • 3D 게임제작 강좌
    • 2D 게임제작 강좌
    • 그래픽 제작 강좌
    • 기타 강좌
  • 질문과 답변new
    • 자주 묻는 질문new
    • 질문과 답변
    • 제작의뢰
  • 커뮤니티
    • 구인·구직·외주
    • 테스트 요청
    • 자유게시판
    • 게임계 소식
    • 유머&정보
    • 사이트링크
    • 이벤트&대회
  • 창작
    • 게임 기획
    • 맵배치
    • 글쓰기
    • 그리기
    • 음악
  • 자료실
    • 게임제작툴
    • 예제 및 샘플
    • 그래픽 소재
      • 오리지널 소재
      • 이차창작 소재
      • 수정·개조 소재
      • 외부 소재
    • 사운드 소재
    • 확장·플러그인·스크립트
      • MZ 플러그인
      • MV 플러그인
      • Ace 스크립트
      • VX 스크립트
      • XP 스크립트
      • 2k3 플러그인
      • VN 플러그인·확장
    • 외부 소재사이트
    • 기타 자료
      • 한글화툴
      • 무료 폰트
      • 유틸리티
    • 디자인 참고자료
  • 고객센터
    • 공지사항
    • 건의 및 신고
    • 핫 이슈
로그인 회원가입

NOTICE

공지사항
더보기
  • 홈페이지 개편 및 시스템 정비 작업 안내 04.13

Recently Added Games

최근 등록 게임
  • 어드벤쳐 [1치킨 수상작] 로봇 관리자 file 04.13
  • 퍼즐/보드 알파벳 용사 2 file 04.08
  • 롤플레잉 스틱 파이터 섬 1 체험판 file 03.31
  • 어드벤쳐 9th Existence file 03.26
  • 어드벤쳐 악역스타 훈발이 file 03.13
전투
2009.02.21 15:04

전투링메뉴.(턴알)

백호
조회 수 2876 추천 수 0 댓글 7
크게 작게 위로 아래로 댓글로 가기 인쇄
크게 작게 위로 아래로 댓글로 가기 인쇄
턴알 전투시에 쓸수 있는 링메뉴입니다;(그렇게 쓸모는 없는듯. 맘에 드시는분만 쓰시길.ㅋ)
 인터넷 사이트 돌아다니다가 발견한건데 여기 없는거 같아서 올립니다.

#==============================================================================
# □ 커스터마이즈 포인트
#==============================================================================
class Window_BRingMenu < Window_Base
  STARTUP_FRAMES =  20 # 초기 애니메이션의 프레임수
  MOVING_FRAMES  =  5 # 링을 돌렸을 때의 프레임수
  RING_R        =  56 # 링의 반경
  SE_STARTUP  = "056-Right02" # 메뉴를 열었을 때에 울리는SE
  ICON_ATTACK  = RPG::Cache.icon("001-Weapon01")  # 「 아이템 」메뉴의 아이콘
  ICON_SKILL  = RPG::Cache.icon("044-Skill01")  # 「스킬 」메뉴의 아이콘
  ICON_GUARD  = RPG::Cache.icon("009-Shield01") # 「  장비  」메뉴의 아이콘
  ICON_ITEM = RPG::Cache.icon("034-Item03")  # 「스테이터스」메뉴의 아이콘
  ICON_DISABLE= RPG::Cache.icon("")            # 사용 금지 항목을 뒤따르는 아이콘
end
###############################################################################
# 링 메뉴 도입 스크립트 Ver. 1.2
#                writen by 가즈키
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# ▽도입
#  0. 먼저 XRXL 2. 비트 맵/아이콘 묘사 를 넣어 두어 주세요.
#  1. 이 스크립트를Main섹션 위에 만든 새로운 섹션에 카피하는
#  2. Window_RingMenu의 상부에 있는 7개의 것 RPG::Cache.icon("") 의 "" 의 안에
#      오른쪽의 설명에 써 있는 커멘드용의 아이콘명을 쓴다.
#      (맨 밑의 사용 금지는 선택할 수 없는 메뉴에 거듭하는 아이콘입니다.
#        이런 건이 좋을지도→ φ )
#  3. 아이콘 설정의 바로 아래에 있는 SE_STARTUP = "" 것 "" 의 안에 메뉴를
#      열었을 때에 울리고 싶은 것SE의 이름을 쓴다.
# ▽스크립트 접하는 사람에게
#  우선 움직이는 것을 목표로 만든 것이므로(뜻 낮은 w ), 좌표의 조정등이 불완전합니다.
#  보다 정확하게 엑터의 화면 좌표를 취득하는 처리를 추가하거나 엑터 일람의 위치를
#  바꾸거나 문자 표시등 등을 조정하면 좋은 느낌으로 완성될 생각이 듭니다.
###############################################################################

#==============================================================================
# ■ Window_RingMenu
#==============================================================================
class Window_BRingMenu < Window_Base
  #--------------------------------------------------------------------------
  # ○ 클래스 정수
  #--------------------------------------------------------------------------
  MODE_START = 1 # 스타트 업 애니메이션
  MODE_WAIT  = 2 # 대기
  MODE_MOVER = 3 # 시계회전 회전 애니메이션
  MODE_MOVEL = 4 # 반 시계회전 회전 애니메이션
  #--------------------------------------------------------------------------
  # ○ 악 세사
  #--------------------------------------------------------------------------
  attr_accessor :index
  attr_reader :commands
  #--------------------------------------------------------------------------
  # ● 오브젝트 초기화
  #--------------------------------------------------------------------------
  def initialize( center_x, center_y )
    super(-16, -16, 640+32, 480+32)
    self.contents = Bitmap.new(width-32, height-32)
    self.opacity = 0
    self.back_opacity = 0
    s1 = $data_system.words.attack
    s2 = $data_system.words.skill
    s3 = $data_system.words.guard
    s4 = $data_system.words.item
    @commands = [s1, s2, s3, s4]
    @item_max = 4
    @index = 0
    @items = [ ICON_ATTACK, ICON_SKILL, ICON_GUARD, ICON_ITEM ]
    @disabled = [ false, false, false, false ]
    @cx = center_x
    @cy = center_y
    setup_move_start
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 프레임 갱신
  #--------------------------------------------------------------------------
  def update
    super
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 화면재 묘화
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    # 배경 묘화 없음
    # 아이콘을 묘화
    case @mode
    when MODE_START
      refresh_start
    when MODE_WAIT
      refresh_wait
    when MODE_MOVER
      refresh_move(1)
    when MODE_MOVEL
      refresh_move(0)
    end
  end
  #--------------------------------------------------------------------------
  # ○ 화면재 묘화(초기화시)
  #--------------------------------------------------------------------------
  def refresh_start
    d1 = 2.0 * Math::PI / @item_max
    d2 = 1.0 * Math::PI / STARTUP_FRAMES
    r = RING_R - 1.0 * RING_R * @steps / STARTUP_FRAMES
    for i in 0...@item_max
      j = i - @index
      d = d1 * j + d2 * @steps
      x = @cx + ( r * Math.sin( d ) ).to_i
      y = @cy - ( r * Math.cos( d ) ).to_i
      draw_item(x, y, i)
    end
    @steps -= 1
    if @steps < 1
      @mode = MODE_WAIT
    end
  end
  #--------------------------------------------------------------------------
  # ○ 화면재 묘화(대기시)
  #--------------------------------------------------------------------------
  def refresh_wait
    d = 2.0 * Math::PI / @item_max
    for i in 0...@item_max
      j = i - @index
      x = @cx + ( RING_R * Math.sin( d * j ) ).to_i
      y = @cy - ( RING_R * Math.cos( d * j ) ).to_i
      draw_item(x, y, i)
    end
  end
  #--------------------------------------------------------------------------
  # ○ 화면재 묘화(회전시)
  #  mode : 0=반 시계회전 1=시계회전
  #--------------------------------------------------------------------------
  def refresh_move( mode )
    d1 = 2.0 * Math::PI / @item_max
    d2 = d1 / MOVING_FRAMES
    d2 *= -1 if mode != 0
    for i in 0...@item_max
      j = i - @index
      d = d1 * j + d2 * @steps
      x = @cx + ( RING_R * Math.sin( d ) ).to_i
      y = @cy - ( RING_R * Math.cos( d ) ).to_i
      draw_item(x, y, i)
    end
    @steps -= 1
    if @steps < 1
      @mode = MODE_WAIT
    end
  end
  #--------------------------------------------------------------------------
  # ● 항목의 묘화
  #    x :
  #    y :
  #    i : 항목 번호
  #--------------------------------------------------------------------------
  def draw_item(x, y, i)
    rect = Rect.new(0, 0, @items[i].width, @items[i].height)
    x -= rect.width/2
    y -= rect.height/2
    if @index == i
      self.contents.blt( x, y, @items[i], rect )
      if @disabled[@index]
        self.contents.blt( x, y, ICON_DISABLE, rect )
      end
    else
      self.contents.blt( x, y, @items[i], rect, 128 )
      if @disabled[@index]
        self.contents.blt( x, y, ICON_DISABLE, rect, 128 )
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 항목을 무효로 하는
  #    index : 항목 번호
  #--------------------------------------------------------------------------
  def disable_item(index)
    @disabled[index] = true
  end
  #--------------------------------------------------------------------------
  # ○ 초기화 애니메이션의 준비
  #--------------------------------------------------------------------------
  def setup_move_start
    @mode = MODE_START
    @steps = STARTUP_FRAMES
    if  SE_STARTUP != nil and SE_STARTUP != ""
      Audio.se_play("Audio/SE/" + SE_STARTUP, 80, 100)
    end
  end
  #--------------------------------------------------------------------------
  # ○ 회전 애니메이션의 준비
  #--------------------------------------------------------------------------
  def setup_move_move(mode)
    if mode == MODE_MOVER
      @index -= 1
      @index = @items.size - 1 if @index < 0
    elsif mode == MODE_MOVEL
      @index += 1
      @index = 0 if @index >= @items.size
    else
      return
    end
    @mode = mode
    @steps = MOVING_FRAMES
  end
  #--------------------------------------------------------------------------
  # ○ 애니메이션중인지 어떤지
  #--------------------------------------------------------------------------
  def animation?
    return @mode != MODE_WAIT
  end
end



#==============================================================================
# ◇ 외부 라이브러리
#==============================================================================
class Bitmap
# ▼▲▼ XRXL 1. 라인·도형 묘사 ▼▲▼
  #--------------------------------------------------------------------------
  # ● 라인 묘화 by 앵아 재흙
  #--------------------------------------------------------------------------
  def draw_line(start_x, start_y, end_x, end_y, start_color, width = 1, end_color = start_color)
    # 묘사 거리의 계산. 큰에 직각시의 길이.
    distance = (start_x - end_x).abs + (start_y - end_y).abs
    # 묘사 개시
    if end_color == start_color
      for i in 1..distance
        x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
        y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
        if width == 1
          self.set_pixel(x, y, start_color)
        else
          self.fill_rect(x, y, width, width, start_color)
        end
      end
    else
      for i in 1..distance
        x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
        y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
        r = start_color.red  * (distance-i)/distance + end_color.red  * i/distance
        g = start_color.green * (distance-i)/distance + end_color.green * i/distance
        b = start_color.blue  * (distance-i)/distance + end_color.blue  * i/distance
        a = start_color.alpha * (distance-i)/distance + end_color.alpha * i/distance
        if width == 1
          self.set_pixel(x, y, Color.new(r, g, b, a))
        else
          self.fill_rect(x, y, width, width, Color.new(r, g, b, a))
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 다각형의 묘화(전부 칠해 없음) by 가즈키
  #    peaks    : 정점 좌표의 배열 [[x1,y1],[x2,y2],[x3,y3], ... ]
  #    color    : 선의 색
  #    width    : 선의 폭
  #--------------------------------------------------------------------------
  def draw_polygon(peaks, color, width = 1)
    # 변(=정점)의 개수분 만큼 옆을 그리는
    for i in 0 ... (peaks.size - 1)
      # 정점끼리를 선으로 묶는
      draw_line( peaks[i][0], peaks[i][1], peaks[i+1][0], peaks[i+1][1], color, width )
    end
    # 마지막 정점과 최초의 정점을 묶는
    draw_line( peaks[peaks.size - 1][0], peaks[peaks.size - 1][1], peaks[0][0], peaks[0][1], color, width )
  end
# ▼▲▼ XRXL 2. 비트 맵/아이콘 묘사 ▼▲▼
  #--------------------------------------------------------------------------
  # ● 안&범위의 묘화 by 앵아 재흙
  #    character_name : 묘사에 이용하는 캐릭터 그래픽
  #    character_hue  : 묘사의 색조
  #    x      : 묘화처 X 좌표
  #    y      : 묘화처 Y 좌표
  #--------------------------------------------------------------------------
  def draw_facesquare(character_name, character_hue, x, y, size = 24)
    bitmap = RPG::Cache.character(character_name, character_hue)
    src_rect = Rect.new((bitmap.width/4 - size)/2, 0, size, size)
    self.blt(x, y, bitmap, src_rect)
    self.draw_polygon([[x,y],[x+size,y],[x+size,y+size],[x,y+size]], Color.new(255,255,255,128))
  end
end


#==============================================================================
# ■ Scene_Battle (분할 정의 5 - 1을 수정한 것)
#------------------------------------------------------------------------------
#  배틀 화면의 처리를 실시하는 클래스입니다.
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● 메인 처리
  #--------------------------------------------------------------------------
  def main
    # 전투용의 각종 일시 데이터를 초기화
    $game_temp.in_battle = true
    $game_temp.battle_turn = 0
    $game_temp.battle_event_flags.clear
    $game_temp.battle_abort = false
    $game_temp.battle_main_phase = false
    $game_temp.battleback_name = $game_map.battleback_name
    $game_temp.forcing_battler = nil
    # 배틀 이벤트용 interpreter를 초기화
    $game_system.battle_interpreter.setup(nil, 0)
    # 무리를 준비
    @troop_id = $game_temp.battle_troop_id
    $game_troop.setup(@troop_id)
   
   
    # 엑터 커멘드 윈도우를 작성
    px = 80
    py = 240
    @actor_command_window = Window_BRingMenu.new(px,py)   
    @actor_command_window.active = false
    @actor_command_window.visible = false
   
   
    # 그 외의 윈도우를 작성
    @party_command_window = Window_PartyCommand.new
    @help_window = Window_Help.new
    @help_window.back_opacity = 160
    @help_window.visible = false
    @status_window = Window_BattleStatus.new
    @message_window = Window_Message.new
    # 스프라이트 세트를 작성
    @spriteset = Spriteset_Battle.new
    # 웨이트 카운트를 초기화
    @wait_count = 0
    # 트란지션 실행
    Graphics.transition(20, "Graphics/Transitions/" +
      $data_system.battle_transition)
    # 프레바트르페즈 개시
    start_phase1
    # 메인 루프
    loop do
      # 게임 화면을 갱신
      Graphics.update
      # 입력 정보를 갱신
      Input.update
      # 프레임 갱신
      update
      # 화면이 바뀌면(자) 루프를 중단
      if $scene != self
        break
      end
    end
    # 맵을 리프레쉬
    $game_map.refresh
    # 트란지션 준비
    Graphics.freeze
    # 윈도우를 해방
    if @actor_command_window.active
      update_command
      return
    @party_command_window.dispose
    @help_window.dispose
    @status_window.dispose
    @message_window.dispose
    if @result_window != nil
      @result_window.dispose
    end
    # 스프라이트 세트를 해방
    @spriteset.dispose
    # 타이틀 화면으로 전환하고 안의 경우
    if $scene.is_a? (Scene_Title)
      # 화면을 용암
      Graphics.transition
      Graphics.freeze
    end
    # 전투 테스트로부터 게임 오버 화면 이외에 변환중의 경우
    if $BTEST and not $scene.is_a? (Scene_Gameover)
      $scene = nil
    end
  end
  #--------------------------------------------------------------------------
  # ● 승패 판정
  #--------------------------------------------------------------------------
  def judge
    # 전멸 판정이 진, 또는 파티 인원수가 0 명의 경우
    if $game_party.all_dead?  or $game_party.actors.size == 0
      # 패배 가능의 경우
      if $game_temp.battle_can_lose
        # 배틀 개시전의 BGM 에 되돌린다
        $game_system.bgm_play($game_temp.map_bgm)
        # 배틀 종료
        battle_end(2)
        # true 를 돌려준다
        return true
      end
      # 게임 오버 화면으로 전환하고
      $scene = Scene_Gameover.new
      # true 를 돌려준다
      return true
    end
    # 에너미가 1 체에서도 존재하면 false 를 돌려준다
    for enemy in $game_troop.enemies
      if enemy.exist?
        return false
      end
    end
    # 애프터 배틀 국면 개시 (승리)
    start_phase5
    # true 를 돌려준다
    return true
  end
  #--------------------------------------------------------------------------
  # ● 배틀 종료
  #    result : 결과 (0:승리 1:패배 2:도주)
  #--------------------------------------------------------------------------
  def battle_end(result)
    # 전투중 플래그를 클리어
    $game_temp.in_battle = false
    # 파티 전원의 액션을 클리어
    $game_party.clear_actions
    # 배틀용 스테이트를 해제
    for actor in $game_party.actors
      actor.remove_states_battle
    end
    # 에너미를 클리어
    $game_troop.enemies.clear
    # 배틀 콜백을 부른다
    if $game_temp.battle_proc != nil
      $game_temp.battle_proc.call(result)
      $game_temp.battle_proc = nil
    end
    # 맵 화면으로 전환하고
    $scene = Scene_Map.new
  end
  #--------------------------------------------------------------------------
  # ● 배틀 이벤트의 셋업
  #--------------------------------------------------------------------------
  def setup_battle_event
    # 배틀 이벤트 실행중의 경우
    if $game_system.battle_interpreter.running?
      return
    end
    # 배틀 이벤트의 전페이지를 검색
    for index in 0...$data_troops[@troop_id]. pages.size
      # 이벤트 페이지를 취득
      page = $data_troops[@troop_id]. pages[index]
      # 이벤트 조건을 c 로 참조 가능하게
      c = page.condition
      # 아무것도 조건이 지정되어 있지 않은 경우는 다음의 페이지로
      unless c.turn_valid or c.enemy_valid or
            c.actor_valid or c.switch_valid
        next
      end
      # 실행 끝난 경우는 다음의 페이지로
      if $game_temp.battle_event_flags[index]
        next
      end
      # 턴 조건 확인
      if c.turn_valid
        n = $game_temp.battle_turn
        a = c.turn_a
        b = c.turn_b
        if (b == 0 and n != a) or
          (b > 0 and (n < 1 or n < a or n % b != a % b))
          next
        end
      end
      # 에너미 조건 확인
      if c.enemy_valid
        enemy = $game_troop.enemies[c.enemy_index]
        if enemy.hp * 100.0 / enemy.maxhp > c.enemy_hp
          next
        end
      end
      # 엑터 조건 확인
      if c.actor_valid
        actor = $game_actors[c.actor_id]
        if actor.hp * 100.0 / actor.maxhp > c.actor_hp
          next
        end
      end
      # 스윗치 조건 확인
      if c.switch_valid
        if $game_switches[c.switch_id] == false
          next
        end
      end
      # 이벤트를 셋업
      $game_system.battle_interpreter.setup(page.list, 0)
      # 이 페이지의 스팬이 [배틀] 이나 [턴] 의 경우
      if page.span <= 1
        # 실행이 끝난 플래그를 세트
        $game_temp.battle_event_flags[index] = true
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 프레임 갱신
  #--------------------------------------------------------------------------
  def update
    # 배틀 이벤트 실행중의 경우
    if $game_system.battle_interpreter.running?
      # interpreter를 갱신
      $game_system.battle_interpreter.update
      # 액션을 강제당하고 있는 버틀러가 존재하지 않는 경우
      if $game_temp.forcing_battler == nil
        # 배틀 이벤트의 실행이 끝났을 경우
        unless $game_system.battle_interpreter.running?
          # 배틀 이벤트의 셋업을 재실행
          setup_battle_event
        end
        # 스테이터스 윈도우를 리프레쉬
        @status_window.refresh
      end
    end
    # 시스템 (타이머), 화면을 갱신
    $game_system.update
    $game_screen.update
    # 타이머가 0 이 되었을 경우
    if $game_system.timer_working and $game_system.timer == 0
      # 배틀 중단
      $game_temp.battle_abort = true
    end
    # 윈도우를 갱신
    @help_window.update
    @party_command_window.update
    @actor_command_window.update
    @status_window.update
    @message_window.update
    # 스프라이트 세트를 갱신
    @spriteset.update
    # 메세지 윈도우 표시중의 경우
    if $game_temp.message_window_showing
      return
    end
    # 게임 오버의 경우
    if $game_temp.gameover
      # 게임 오버 화면으로 전환하고
      $scene = Scene_Gameover.new
      return
    end
    # 타이틀 화면에 되돌리는 경우
    if $game_temp.to_title
      # 타이틀 화면으로 전환하고
      $scene = Scene_Title.new
      return
    end
    # 배틀 중단의 경우
    if $game_temp.battle_abort
      # 배틀 개시전의 BGM 에 되돌린다
      $game_system.bgm_play($game_temp.map_bgm)
      # 배틀 종료
      battle_end(1)
      return
    end
    # 웨이트중의 경우
    if @wait_count > 0
      # 웨이트 카운트를 줄인다
      @wait_count -= 1
      return
    end
    # 효과 표시중의 경우
    if @spriteset.effect?
      return
    end
    # 액션을 강제당하고 있는 버틀러가 존재하지 않고,
    # 한편 배틀 이벤트가 실행중의 경우
    if $game_temp.forcing_battler == nil and
      $game_system.battle_interpreter.running?
      return
    end
    # 국면에 의해 분기
    case @phase
    when 1  # pre-battle phase
      update_phase1
    when 2  # 파티 커멘드 국면
      update_phase2
    when 3  # 엑터 커멘드 국면
      update_phase3
    when 4  # 메인 국면
      update_phase4
    when 5  # 애프터 배틀 국면
      update_phase5
    end
    end
  end
end # class를 종료

#==============================================================================
# ■ Scene_Battle (분할 정의 6 - 3을 수정 )
#------------------------------------------------------------------------------
#  배틀 화면의 처리를 실시하는 클래스입니다.
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● 엑터 커멘드 국면 개시
  #--------------------------------------------------------------------------
  def start_phase3
    # 국면 3 에 이행
    @phase = 3
    # 엑터를 비선택 상태로 설정
    @actor_index = -1
    @active_battler = nil
    # 다음의 엑터의 커멘드 입력에
    phase3_next_actor
  end
  #--------------------------------------------------------------------------
  # ● 다음의 엑터의 커멘드 입력에
  #--------------------------------------------------------------------------
  def phase3_next_actor
    # 루프
    begin
      # 엑터의 명 멸망 효과 OFF
      if @active_battler != nil
        @active_battler.blink = false
      end
      # 마지막 엑터의 경우
      if @actor_index == $game_party.actors.size-1
        # 메인 국면 개시
        start_phase4
        return
      end
      # 엑터의 인덱스를 진행시킨다
      @actor_index += 1
      @active_battler = $game_party.actors[@actor_index]
      @active_battler.blink = true
    # 엑터가 커멘드 입력을 받아들이지 않는 상태라면 한번 더
    end until @active_battler.inputable?
    # 엑터 커멘드 윈도우를 셋업
    phase3_setup_command_window
  end
  #--------------------------------------------------------------------------
  # ● 전의 엑터의 커멘드 입력에
  #--------------------------------------------------------------------------
  def phase3_prior_actor
    # 루프
    begin
      # 엑터의 명 멸망 효과 OFF
      if @active_battler != nil
        @active_battler.blink = false
      end
      # 최초의 엑터의 경우
      if @actor_index == 0
        # 파티 커멘드 국면 개시
        start_phase2
        @help_window.visible = false
        return
      end
      # 엑터의 인덱스를 되돌린다
      @actor_index -= 1
      @active_battler = $game_party.actors[@actor_index]
      @active_battler.blink = true
    # 엑터가 커멘드 입력을 받아들이지 않는 상태라면 한번 더
    end until @active_battler.inputable?
    # 엑터 커멘드 윈도우를 셋업
    phase3_setup_command_window
  end
  #--------------------------------------------------------------------------
  # ● 엑터 커멘드 윈도우의 셋업
  #--------------------------------------------------------------------------
  def phase3_setup_command_window
    # 파티 커멘드 윈도우를 무효화
    @party_command_window.active = false
    @party_command_window.visible = false
    # 엑터 커멘드 윈도우를 유효화
    @actor_command_window.active = true
    @actor_command_window.visible = true
    # 엑터 커멘드 윈도우의 위치를 설정
    @actor_command_window.x = @actor_index * 160
    # 인덱스를 0 으로 설정
    @actor_command_window.index = 0   
    @help_window.visible = true
  end
  #--------------------------------------------------------------------------
  # ● 프레임 갱신 (엑터 커멘드 국면)
  #--------------------------------------------------------------------------
  def update_phase3
    # 에네미아로가 유효의 경우
    if @enemy_arrow != nil
      update_phase3_enemy_select
      # 아크타아로가 유효의 경우
    elsif @actor_arrow != nil
      update_phase3_actor_select
    # 스킬 윈도우가 유효의 경우
    elsif @skill_window != nil
      update_phase3_skill_select
      # 아이템 윈도우가 유효의 경우
    elsif @item_window != nil
      update_phase3_item_select
      # 엑터 커멘드 윈도우가 유효의 경우
    elsif @actor_command_window.active
      update_phase3_basic_command
      end
  end
  #--------------------------------------------------------------------------
  # ● 프레임 갱신 (엑터 커멘드 국면 : 기본 커멘드)
  #--------------------------------------------------------------------------
  def update_phase3_basic_command
    @help_window.set_text(@actor_command_window.commands[@actor_command_window.index],1)
    # B 버튼이 밀렸을 경우
    if Input.trigger? (Input::B)
      # 캔슬 SE 를 연주
      $game_system.se_play($data_system.cancel_se)
      # 전의 엑터의 커멘드 입력에
      phase3_prior_actor
      return
    end
    # C 버튼이 밀렸을 경우
    if Input.trigger? (Input::C)
      # 엑터 커멘드 윈도우의 커서 위치에서 분기
      case @actor_command_window.index
      when 0  # 공격
        # 결정 SE 를 연주
        $game_system.se_play($data_system.decision_se)
        # 액션을 설정
        @active_battler.current_action.kind = 0
        @active_battler.current_action.basic = 0
        # 에너미의 선택을 개시
        start_enemy_select
      when 1  # 스킬
        # 결정 SE 를 연주
        $game_system.se_play($data_system.decision_se)
        # 액션을 설정
        @active_battler.current_action.kind = 1
        # 스킬의 선택을 개시
        start_skill_select
      when 2  # 방어
        # 결정 SE 를 연주
        $game_system.se_play($data_system.decision_se)
        # 액션을 설정
        @active_battler.current_action.kind = 0
        @active_battler.current_action.basic = 1
        # 다음의 엑터의 커멘드 입력에
        phase3_next_actor
      when 3  # 아이템
        # 결정 SE 를 연주
        $game_system.se_play($data_system.decision_se)
        # 액션을 설정
        @active_battler.current_action.kind = 2
        # 아이템의 선택을 개시
        start_item_select
      end
      return
    end
      # 애니메이션중이라면 커서의 처리를 실시하지 않는
    return if @actor_command_window.animation?
    # ↑or← 버튼이 밀렸을 경우
    if Input.press?(Input::DOWN) or  Input.press?(Input::RIGHT)
      $game_system.se_play($data_system.cursor_se)
      @actor_command_window.setup_move_move(Window_BRingMenu::MODE_MOVEL)
      @help_window.set_text(@actor_command_window.commands[@actor_command_window.index],1)
      return
    end
    # ↓or→ 버튼이 밀렸을 경우
    if Input.press?(Input::UP) or  Input.press?(Input::LEFT)
      $game_system.se_play($data_system.cursor_se)
      @actor_command_window.setup_move_move(Window_BRingMenu::MODE_MOVER)
      @help_window.set_text(@actor_command_window.commands[@actor_command_window.index],1)
      return   
    end
  end
  #--------------------------------------------------------------------------
  # ● 프레임 갱신 (엑터 커멘드 국면 : 스킬 선택)
  #--------------------------------------------------------------------------
  def update_phase3_skill_select
    # 스킬 윈도우를 가시 상태로 한다
    @skill_window.visible = true
    # 스킬 윈도우를 갱신
    @skill_window.update
    # B 버튼이 밀렸을 경우
    if Input.trigger? (Input::B)
      # 캔슬 SE 를 연주
      $game_system.se_play($data_system.cancel_se)
      # 스킬의 선택을 종료
      end_skill_select
      return
    end
    # C 버튼이 밀렸을 경우
    if Input.trigger? (Input::C)
      # 스킬 윈도우로 현재 선택되고 있는 데이터를 취득
      @skill = @skill_window.skill
      # 사용할 수 없는 경우
      if @skill == nil or not @active_battler.skill_can_use? (@skill.id)
        # 버저 SE 를 연주
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 결정 SE 를 연주
      $game_system.se_play($data_system.decision_se)
      # 액션을 설정
      @active_battler.current_action.skill_id = @skill.id
      # 스킬 윈도우를 불가시 상태로 한다
      @skill_window.visible = false
      # 효과 범위가 적단체의 경우
      if @skill.scope == 1
        # 에너미의 선택을 개시
        start_enemy_select
      # 효과 범위가 아군 단체의 경우
      elsif @skill.scope == 3 or @skill.scope == 5
        # 엑터의 선택을 개시
        start_actor_select
      # 효과 범위가 단체가 아닌 경우
      else
        # 스킬의 선택을 종료
        end_skill_select
        # 다음의 엑터의 커멘드 입력에
        phase3_next_actor
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 프레임 갱신 (엑터 커멘드 국면 : 아이템 선택)
  #--------------------------------------------------------------------------
  def update_phase3_item_select
    # 아이템 윈도우를 가시 상태로 한다
    @item_window.visible = true
    # 아이템 윈도우를 갱신
    @item_window.update
    # B 버튼이 밀렸을 경우
    if Input.trigger? (Input::B)
      # 캔슬 SE 를 연주
      $game_system.se_play($data_system.cancel_se)
      # 아이템의 선택을 종료
      end_item_select
      return
    end
    # C 버튼이 밀렸을 경우
    if Input.trigger? (Input::C)
      # 아이템 윈도우로 현재 선택되고 있는 데이터를 취득
      @item = @item_window.item
      # 사용할 수 없는 경우
      unless $game_party.item_can_use? (@item.id)
        # 버저 SE 를 연주
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 결정 SE 를 연주
      $game_system.se_play($data_system.decision_se)
      # 액션을 설정
      @active_battler.current_action.item_id = @item.id
      # 아이템 윈도우를 불가시 상태로 한다
      @item_window.visible = false
      # 효과 범위가 적단체의 경우
      if @item.scope == 1
        # 에너미의 선택을 개시
        start_enemy_select
      # 효과 범위가 아군 단체의 경우
      elsif @item.scope == 3 or @item.scope == 5
        # 엑터의 선택을 개시
        start_actor_select
      # 효과 범위가 단체가 아닌 경우
      else
        # 아이템의 선택을 종료
        end_item_select
        # 다음의 엑터의 커멘드 입력에
        phase3_next_actor
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 프레임 갱신 (엑터 커멘드 국면 : 에너미 선택)
  #--------------------------------------------------------------------------
  def update_phase3_enemy_select
    # 에네미아로를 갱신
    @enemy_arrow.update
    # B 버튼이 밀렸을 경우
    if Input.trigger? (Input::B)
      # 캔슬 SE 를 연주
      $game_system.se_play($data_system.cancel_se)
      # 에너미의 선택을 종료
      end_enemy_select
      return
    end
    # C 버튼이 밀렸을 경우
    if Input.trigger? (Input::C)
      # 결정 SE 를 연주
      $game_system.se_play($data_system.decision_se)
      # 액션을 설정
      @active_battler.current_action.target_index = @enemy_arrow.index
      # 에너미의 선택을 종료
      end_enemy_select
      # 스킬 윈도우 표시중의 경우
      if @skill_window != nil
        # 스킬의 선택을 종료
        end_skill_select
      end
      # 아이템 윈도우 표시중의 경우
      if @item_window != nil
        # 아이템의 선택을 종료
        end_item_select
      end
      # 다음의 엑터의 커멘드 입력에
      phase3_next_actor
    end
  end
  #--------------------------------------------------------------------------
  # ● 프레임 갱신 (엑터 커멘드 국면 : 엑터 선택)
  #--------------------------------------------------------------------------
  def update_phase3_actor_select
    # 아크타아로를 갱신
    @actor_arrow.update
    # B 버튼이 밀렸을 경우
    if Input.trigger? (Input::B)
      # 캔슬 SE 를 연주
      $game_system.se_play($data_system.cancel_se)
      # 엑터의 선택을 종료
      end_actor_select
      return
    end
    # C 버튼이 밀렸을 경우
    if Input.trigger? (Input::C)
      # 결정 SE 를 연주
      $game_system.se_play($data_system.decision_se)
      # 액션을 설정
      @active_battler.current_action.target_index = @actor_arrow.index
      # 엑터의 선택을 종료
      end_actor_select
      # 스킬 윈도우 표시중의 경우
      if @skill_window != nil
        # 스킬의 선택을 종료
        end_skill_select
      end
      # 아이템 윈도우 표시중의 경우
      if @item_window != nil
        # 아이템의 선택을 종료
        end_item_select
      end
      # 다음의 엑터의 커멘드 입력에
      phase3_next_actor
    end
  end
  #--------------------------------------------------------------------------
  # ● 에너미 선택 개시
  #--------------------------------------------------------------------------
  def start_enemy_select
    # 에네미아로를 작성
    @enemy_arrow = Arrow_Enemy.new(@spriteset.viewport1)
    # 헬프 윈도우를 관련짓고
    @enemy_arrow.help_window = @help_window
    # 엑터 커멘드 윈도우를 무효화
    @actor_command_window.active = false
    @actor_command_window.visible = false
  end
  #--------------------------------------------------------------------------
  # ● 에너미 선택 종료
  #--------------------------------------------------------------------------
  def end_enemy_select
    # 에네미아로를 해방
    @enemy_arrow.dispose
    @enemy_arrow = nil
    # 커멘드가 [싸우는] 의 경우
    if @actor_command_window.index == 0
      # 엑터 커멘드 윈도우를 유효화
      @actor_command_window.active = true
      @actor_command_window.visible = true
      # 헬프 윈도우를 숨긴다
      @help_window.visible = false
    end
  end
  #--------------------------------------------------------------------------
  # ● 엑터 선택 개시
  #--------------------------------------------------------------------------
  def start_actor_select
    # 아크타아로를 작성
    @actor_arrow = Arrow_Actor.new(@spriteset.viewport2)
    @actor_arrow.index = @actor_index
    # 헬프 윈도우를 관련짓고
    @actor_arrow.help_window = @help_window
    # 엑터 커멘드 윈도우를 무효화
    @actor_command_window.active = false
    @actor_command_window.visible = false
  end
  #--------------------------------------------------------------------------
  # ● 엑터 선택 종료
  #--------------------------------------------------------------------------
  def end_actor_select
    # 아크타아로를 해방
    @actor_arrow.dispose
    @actor_arrow = nil
  end
  #--------------------------------------------------------------------------
  # ● 스킬 선택 개시
  #--------------------------------------------------------------------------
  def start_skill_select
    # 스킬 윈도우를 작성
    @skill_window = Window_Skill.new(@active_battler)
    # 헬프 윈도우를 관련짓고
    @skill_window.help_window = @help_window
    # 엑터 커멘드 윈도우를 무효화
    @actor_command_window.active = false
    @actor_command_window.visible = false
  end
  #--------------------------------------------------------------------------
  # ● 스킬 선택 종료
  #--------------------------------------------------------------------------
  def end_skill_select
    # 스킬 윈도우를 해방
    @skill_window.dispose
    @skill_window = nil
    # 헬프 윈도우를 숨긴다
    @help_window.visible = false
    # 엑터 커멘드 윈도우를 유효화
    @actor_command_window.active = true
    @actor_command_window.visible = true
  end
  #--------------------------------------------------------------------------
  # ● 아이템 선택 개시
  #--------------------------------------------------------------------------
  def start_item_select
    # 아이템 윈도우를 작성
    @item_window = Window_Item.new
    # 헬프 윈도우를 관련짓고
    @item_window.help_window = @help_window
    # 엑터 커멘드 윈도우를 무효화
    @actor_command_window.active = false
    @actor_command_window.visible = false
  end
  #--------------------------------------------------------------------------
  # ● 아이템 선택 종료
  #--------------------------------------------------------------------------
  def end_item_select
    # 아이템 윈도우를 해방
    @item_window.dispose
    @item_window = nil
    # 헬프 윈도우를 숨긴다
    @help_window.visible = false
    # 엑터 커멘드 윈도우를 유효화
    @actor_command_window.active = true
    @actor_command_window.visible = true
  end
end

Who's 백호

?

이상혁입니다.

http://elab.kr

0 추천 0 비추천
Facebook Twitter Google Pinterest KakaoStory Band
위로 아래로 댓글로 가기 인쇄
에디터 선택하기
✔ 텍스트 모드 ✔ 에디터 모드
?
댓글 쓰기 권한이 없습니다. 로그인 하시겠습니까?
Comment '7'
  • ?
    1000℃ 복숭아 2009.12.21 14:39

    약간 렉이 있지만. 잘쓸게요!

    수정 삭제 댓글
  • ?
    아다스 2010.04.19 21:14

    오오오오오오오?

    댓글
  • ?
    Outsider2 2010.07.17 10:09

    감사합니다.

    댓글
  • ?
    날개잃은악마 2010.11.14 00:51

    부왘? 일단 받아가요..

    댓글
  • ?
    David:) 2011.05.26 00:54

    감사히 받아가요 :)

    댓글
  • ?
    nnibal210 2011.06.19 00:11

    gㅎㅎ

    댓글
  • profile
    푸솜양 2012.10.02 10:19
    잘 가져갑니다!
    댓글

Category
  • 그래픽(16)
  • 맵/타일(15)
  • 메뉴(88)
  • 메시지(26)
  • 미니맵(9)
  • 버그픽스(0)
  • 변수/스위치(10)
  • 상점(14)
  • 상태/속성(8)
  • 스킬(49)
  • 아이템(34)
  • 액터(4)
  • 원경(0)
  • 영상(7)
  • 오디오(8)
  • 온라인(23)
  • 이동 및 탈것(62)
  • 이름입력(10)
  • 장비(34)
  • 저장(34)
  • 전투(174)
  • 제작도구(1)
  • 직업(2)
  • 퀘스트(3)
  • 키입력(18)
  • 타이틀/게임오버(24)
  • 파티(11)
  • HUD(34)
  • 기타(254)
List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 습작 2012.12.24 9762
1021 액알 스크립트 강좌용~!!!| 27 아방스 2007.11.09 5542
1020 키입력 한글입력스크립트 16 file 아방스 2007.11.09 12032
1019 퍼온것플레이시간을맵위에뜨게하기 3 file 아방스 2007.11.09 2142
1018 미니맵 스크립트 이용하여 미니맵 만들기 16 file 아방스 2007.11.09 3589
1017 장비 장비창을 다른거로 바꾸기 [헬악이님 제공] 10 file 아방스 2007.11.09 3215
1016 HUD 맵이름 넣기(bs님의 강의랑 다르게 스크립트로) 16 file 아방스 2007.11.09 3090
1015 이름입력 케릭터 위에 또는 NPC 위에 이름 뛰우기 [헬악이님 제공] 49 file 아방스 2007.11.09 6616
1014 게이지바 만들기 [헬악이님 제공] 12 file 아방스 2007.11.09 4517
1013 [헬악이] 스크립트 사용법 !!!(꼭 읽으세요!!) 3 아방스 2007.11.09 2351
1012 [헬악이님 제보] 제작자 표시 8 아방스 2007.11.09 2617
1011 미니맵 [헬악이님 제보] 단축키 미니맵 만들기!!| 13 file 아방스 2007.11.09 4337
1010 온라인 RPG 만들기 xp 온라인 스크립트 33 아방스 2007.11.09 9776
1009 메인화면에 별똥별 효과 6 file 아방스 2007.11.09 4310
1008 능력치 올리기 스크립트 21 file 아방스 2007.11.09 3542
1007 이벤트 클릭 시스템 [마우스 스크립트]| 36 아방스 2007.11.09 5702
1006 [알피지2님 제공] 발소리 스크립트 9 file 아방스 2007.11.09 2516
1005 [스마슈님 제공] 부활스크립트 19 file 아방스 2007.11.09 3792
1004 파티 [최강전사님 제공] 파티가 따라오게 하는 스크립트 24 file 아방스 2007.11.09 3487
1003 전투 사이드뷰 배틀 (2003 형식으 전투)| 12 file 아방스 2007.11.09 4846
1002 전투 SBABS 버전3.2 - 액알 스크립트 시스템 설명 13 아방스 2007.11.09 5772
쓰기
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 52 Next
/ 52
AVANGS

게임 제작, 창작, 자료, 강좌를 연결하는 커뮤니티

  • 개인정보 취급방침

Copyright © 2026 Avangs