제작의뢰

Extra Form
사용 제작툴 RMXP
의뢰 부문 기능 구현
마감일 2016-01-15


안녕하세요, 일주일 넘게 끙끙 앓다가 결국 구현 도움을 빌리고자 소심하게 글 올려봅니다.


【스크립트】

# ▼▲▼ XRXS_BP 7. 배틀 스테이터스·클리어 디자인 ver.2 ▼▲▼

# by 앵아 재흙


#==============================================================================

# □ 커스터마이즈 포인트

#==============================================================================

module XRXS_BP7

  #

  # 「배틀 스테이터스 윈도우의 배경을 지운다」

  #

  HIDE = false

  #

  # 「위치 가지런히 해」(0:왼쪽 맞춤 1:중앙 2:오른쪽 공격)

  #

  ALIGN = 0

  #

  # 확보하는 사이즈[단위:~인분]

  #

  MAX = 4

end

#==============================================================================

# 걾 Window_BattleStatus

#==============================================================================

class Window_BattleStatus < Window_Base

  #--------------------------------------------------------------------------

  # 걶 오브젝트 초기화

  #--------------------------------------------------------------------------

  alias xrxs_bp7_initialize initialize

  def initialize

    # 초기화

    @previous_hp = []

    @previous_sp = []

    @previous_states = []

    # 귀환시킨다

    xrxs_bp7_initialize

    # 배경을 지운다

    if XRXS_BP7::HIDE

      self.opacity = 0

      self.back_opacity = 0

    end

  end

  #--------------------------------------------------------------------------

  # ● 리프레쉬 [재정의]

  #--------------------------------------------------------------------------

  def refresh

# /---

# [고속화 처리]

# 변경하는 것이 없는 경우, 날린다(최묘사 처리가 무겁기 때문에 경감)

    @item_max = $game_party.actors.size

    bool = false

    for i in 0...@item_max

      actor = $game_party.actors[i]

      if (@previous_hp[i] != actor.hp) or

         (@previous_sp[i] != actor.sp) or

         (@previous_states[i] != actor.states)

        bool = true

        # 값을 갱신

        @previous_hp[i] = actor.hp

        @previous_sp[i] = actor.sp

        @previous_states[i] = actor.states.dup

      end

    end

    return unless bool

    #

    #

    # ---/

    self.contents.clear

    @item_max = $game_party.actors.size

    for i in 0...$game_party.actors.size

      actor = $game_party.actors[i]

      width = [self.width*3/4 / XRXS_BP7::MAX, 80].max

      space = self.width / XRXS_BP7::MAX

      case XRXS_BP7::ALIGN

      when 0

        actor_x = i * space + 4

      when 1

        actor_x = (space * ((XRXS_BP7::MAX - $game_party.actors.size)/2.0 + i)).floor

      when 2

        actor_x = (i + XRXS_BP7::MAX - $game_party.actors.size) * space + 4

      end

      actor_x += self.x

      # 배틀 스테이터스의 묘사

      draw_battlestatus(i, actor_x, width)

    end

  end

  #--------------------------------------------------------------------------

  # ○배틀 스테이터스의 묘사

  #--------------------------------------------------------------------------

  def draw_battlestatus(i, x, width)

    actor = $game_party.actors[i]

    # 보행 캐릭터 그래픽의 묘사

    draw_actor_graphic(actor, x + 7, 116)

    # HP/SP미터의 묘사

    draw_actor_hp_meter_line(actor, x+16,  72, width*4/5, 12)

    draw_actor_sp_meter_line(actor, x+16, 104, width*4/5, 12)

    # HP수치의 묘사

    self.contents.font.size = 24            # HP/SP수치의 문자의 크기

    self.contents.font.color = Color.new(0,0,0,192)

    self.contents.draw_text(x+16, 60, width*3/4, 24, actor.hp.to_s, 2)

    self.contents.font.color = actor.hp == 0 ? knockout_color :

      actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color

    self.contents.draw_text(x+14, 58, width*3/4, 24, actor.hp.to_s, 2)

    # SP수치의 묘사

    self.contents.font.color = Color.new(0,0,0,192)

    self.contents.draw_text(x+16, 92, width*3/4, 24, actor.sp.to_s, 2)

    self.contents.font.color = actor.maxsp == 0 ? disabled_color :

                               actor.sp == 0 ? knockout_color :

                               actor.sp <= actor.maxsp / 4 ? crisis_color :

                               normal_color

    self.contents.draw_text(x+14, 90, width*3/4, 24, actor.sp.to_s, 2)

    # 용어 「HP」라고 용어 「SP」의 묘사

    self.contents.font.size = 12            # 용어 「HP/SP」의 문자의 크기

    self.contents.font.color = Color.new(0,0,0,192)

    self.contents.draw_text(x+18, 62, 96, 12, $data_system.words.hp)

    self.contents.draw_text(x+18, 94, 96, 12, $data_system.words.sp)

    self.contents.font.color = system_color # 용어 「HP/SP」의 문자의 색

    self.contents.draw_text(x+16, 60, 96, 12, $data_system.words.hp)

    self.contents.draw_text(x+16, 92, 96, 12, $data_system.words.sp)

    # 스테이트의 묘사

    draw_actor_state(actor, x+16, 100)

  end

end

#==============================================================================

# 걾 Window_Base

#==============================================================================

class Window_Base < Window

  #--------------------------------------------------------------------------

  # ○ HP미터의 묘화

  #--------------------------------------------------------------------------

  def draw_actor_hp_meter_line(actor, x, y, width = 156, height = 4)

    w = width * actor.hp / actor.maxhp

    color_0 = Color.new(  0,   0,   0, 128)

    color_1 = Color.new(255,   0,   0, 192)

    color_2 = Color.new(255, 255,   0, 192)

    self.contents.fill_rect(x+8, y+4, width, (height/4).floor, color_0)

    self.contents.draw_line(x, y, x + w, y, color_1, (height/4).floor, color_2)

    x -= 1

    y += (height/4).floor

    self.contents.fill_rect(x+8, y+4, width, (height/4).ceil, color_0)

    self.contents.draw_line(x, y, x + w, y, color_1, (height/4).ceil , color_2)

    x -= 1

    y += (height/4).ceil

    self.contents.fill_rect(x+8, y+4, width, (height/4).ceil, color_0)

    self.contents.draw_line(x, y, x + w, y, color_1, (height/4).ceil , color_2)

    x -= 1

    y += (height/4).ceil

    self.contents.fill_rect(x+8, y+4, width, (height/4).floor, color_0)

    self.contents.draw_line(x, y, x + w, y, color_1, (height/4).floor, color_2)

  end

  #--------------------------------------------------------------------------

  # ○ SP미터의 묘화

  #--------------------------------------------------------------------------

  def draw_actor_sp_meter_line(actor, x, y, width = 156, height = 4)

    return if actor.maxsp == 0

    w = width * actor.sp / actor.maxsp

    color_0 = Color.new(  0,   0,   0, 128)

    color_1 = Color.new(  0,   0, 255, 192)

    color_2 = Color.new(  0, 255, 255, 192)

    self.contents.fill_rect(x+8, y+4, width, (height/4).floor, color_0)

    self.contents.draw_line(x, y, x + w, y, color_1, (height/4).floor, color_2)

    x -= 1

    y += (height/4).floor

    self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , color_0)

    self.contents.draw_line(x, y, x + w, y, color_1, (height/4).ceil , color_2)

    x -= 1

    y += (height/4).ceil

    self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , color_0)

    self.contents.draw_line(x, y, x + w, y, color_1, (height/4).ceil , color_2)

    x -= 1

    y += (height/4).ceil

    self.contents.fill_rect(x+8, y+4, width, (height/4).floor, color_0)

    self.contents.draw_line(x, y, x + w, y, color_1, (height/4).floor, color_2)

  end

  #--------------------------------------------------------------------------

  # 걶 이름의 묘화

  #--------------------------------------------------------------------------

  alias xrxs_bp7_draw_actor_name draw_actor_name

  def draw_actor_name(actor, x, y)

    xrxs_bp7_draw_actor_name(actor, x, y) if @draw_ban != true

  end

  #--------------------------------------------------------------------------

  # ● 스테이트의 묘화

  #--------------------------------------------------------------------------

  alias xrxs_bp7_draw_actor_state draw_actor_state

  def draw_actor_state(actor, x, y, width = 120)

    xrxs_bp7_draw_actor_state(actor, x, y, width) if @draw_ban != true

  end

  #--------------------------------------------------------------------------

  # ● HP 의 묘화

  #--------------------------------------------------------------------------

  alias xrxs_bp7_draw_actor_hp draw_actor_hp

  def draw_actor_hp(actor, x, y, width = 144)

    xrxs_bp7_draw_actor_hp(actor, x, y, width) if @draw_ban != true

  end

  #--------------------------------------------------------------------------

  # ◇ 외부 라이브러리

  #--------------------------------------------------------------------------

  alias xrxs_bp7_draw_actor_sp draw_actor_sp

  def draw_actor_sp(actor, x, y, width = 144)

    xrxs_bp7_draw_actor_sp(actor, x, y, width) if @draw_ban != true

  end

end

#==============================================================================

# 걻 둖븫깋귽긳깋깏

#==============================================================================

class Bitmap

  #--------------------------------------------------------------------------

  # ○라인 묘화 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

end



RKC에서 구한 스크립트입니다. (첨부파일에도 파일을 첨부하였습니다)

c45e70bbddab73739cac63b262487451.png


이 스크립트를 적용 사진입니다. 제작해주시고 배포해주신 분들께는 감사하지만 약간 제가 찾고 바랬던 배틀 화면이 아닌터라.. 


    # 보행 캐릭터 그래픽의 묘사

    draw_actor_graphic(actor, x + 7, 116)


초보인 입장에서 부분을 손보면 될 거 같은데... 

제가 바라는 배틀 스테이터스는 


14e3f215d448fd8302b03834acb62411.png

- Hero and Daughter 게임


15eb20e7c06541a1a7165796ccfeb835.png

- 서프라이시아



...와 같은 형태의 배틀 화면을 원하고 있는데 이에 관련된 스크립트나 이와 비슷하게 구현해주실 분 계신가요? 

Atachment
첨부 '4'
  • ?
    똥방귀 2015.12.16 08:56 Files첨부 (3)
    draw_actor_graphic(actor, x + 7, 116)
    위 코드는 캐릭터칩을 그리는 코드이므로, 저 코드를 지우면 됩니다.

    0.PNG


    그리고 데이터베이스를 키고 배틀러 이미지를 선택하세요.

    배틀러를 아래로 내리시려면,
    Sprite_Battler의 update 함수

    1.PNG


    if @battler.is_a?(Game_Actor)
      self.oy -= 100
    end

    53행 아래에 저 코드를 삽입하고 100을 적당한 수치로 바꾸세요.

    2.png


    배틀러쪽에 검정색 배경이 나오는 이유는 배틀백 높이가 480px보다 작기 때문에 그렇습니다.

    배틀백 크기를 키우면 해결됩니다.

  • ?
    이스트 2015.12.16 14:35

    소중한 답변 정말 감사합니다! 말씀하신 것처럼 했더니 실제로 그렇게 구현 됐어요 :> 

    전투 배경의 높이를 448이상으로 했음에도 검은색 화면 나오시는 분들은 

    http://avangs.info/rgss_xp/1118443 / 전투배경 확장 스크립트 쓰시면 해결됩니다 ! 

  • ?

    또 하나의 문제가 발생했는데, 혹시 이 덧글을 보셔서 알고 계시는 방법이라면 이번에도 도움을 요청해도 될까요,,?


    55e745a64897fa9f08a74561ff6b35b1.png


    말씀하신 방법으로 수정했을 경우 

    다만 여기서 사이드뷰 전투 방식을 도입하니



    4fb3a8175df7a0f9c54d278a3d0027b5.png


    이러한 문제점이 생겼네요... 혹시 이 문제점 해결 방안을 알고 계신가요? 

    혹시 몰라서 사용중인 사이드뷰 스크립트도 첨부하겠습니다.

  • ?

    script2.txt << 사이드뷰 스크립트


    bandicam 2015-12-16 22-13-25-627.png


    일단 만들어보았습니다만, 공격 발동 시 배틀러 이미지에는 이펙트가 적용되지 않습니다.


  • ?
    이스트 2015.12.16 22:50

    세상에나 정말 감사합니다! 사례금이라도 드리고 싶은 마음에 터지네요ㅠㅠㅠㅠㅠ 친절한 구현 정말 감사합니다.
    마지막으로 질문 해도 될까요?
    수정하신 스크립트를 한번 보았는데 추가된 부분을 다른 사이드뷰 스크립트에다가 그대로 붙여넣기 하면 작동할련지 궁금하네요.

  • ?
    똥방귀 2015.12.16 23:23
    직접 해봐야 알 것 같습니다. 안 돼면 또 가져오세요.
  • ?

    안면 몰수해버렸네요.. 기껏 수정해주셨는데... 네, 반성합니다...ㅜㅜ....
    첨부파일에 첨부된 압축 파일이 사이드뷰 스크립트의 전부인데 혹시 시간 있으실 때 봐주시면 감사합니다.
  • ?

    음, 올리신 스크립트를 쭉 봤는데 한 섹션에서만 고치면 되는 문제네요.


    Battle Windows


    51행 Battle_Window = [0, 320, 640, 160, 0, true]

    굵은 부분으로 설정하면 하단의 배틀 윈도우의 배경이 사라집니다.

    160 은 배틀 윈도우의 높이 입니다. 수치를 키울수록 배틀러 크기가 잘리지 않게 나옵니다.


    309행

    만약에 ./Graphics/faces 폴더의 내용물을 그대로 사용하시려면 이 과정은 건너 뛰시고,

    face = RPG::Cache.faces(actor.character_name + Face_Extension, face_hue)


    ./Graphics/Battlers 폴더의 내용물을 사용하시려면 아래처럼 바꾸세요.

    face = RPG::Cache.battler(actor.character_name + Face_Extension, face_hue)


    Battlers 폴더 내용물을 사용했을 때 313행 쯤에
    self.contents.blt(x - fw / 23, y - fh, face, src_rect, opacity)
    가 보이실 겁니다. 이걸
    self.contents.blt(x, y, face, src_rect, opacity)
    로 고쳐줍니다.

    133행 쯤에 있는 
    Face_Config = [32, 104, 160]
    은 페이스(또는 배틀러)의 x좌표, y좌표, 투명도 순으로
    배틀러를 사용했을 때 깔끔하게 나오려면
    [0, 0, 255] 으로 바꿔줍니다. 그럼 아래 그림처럼 나옵니다.

    bandicam 2015-12-17 00-46-26-020.png
    캡처.PNG


    그리고.. 게이지나 수치 등은 노란색 부분의 숫자를 키우면 해결될 것 같습니다.

  • ?
    이스트 2015.12.17 17:05

    큰 절 받으세요 ㅠㅠㅠ 넙죽!!!

    덕분에 상상했던 것과 거의 흡사하게 구현하는데 성공했습니다!! 지금 당장 옆에 계셨으면 맛있는 거라도 대접해드렸을텐데... 정말 감사해요! 


List of Articles
마감일 분류 제목 사용 제작툴 의뢰 부문
2016-03-08 종료 칩셋 짜집기 해주실 분 계시나요? 2 file RMVXA 그래픽 제작
2016-02-29 종료 도트좀 찍어주실분;; RMVX 그래픽 제작
2016-02-14 종료 메뉴 창 초 심플화(esc는 나갈때만!, 아이테 창은 게임 안에서) 1 RMVXA 기능 구현
2016-12-31 종료 vxaceㅡ>MV 구문재구성 1 RMMV 기능 구현
2016-07-20 종료 도트 찍을 수 있는분(돈드림) 7 file RMMV 그래픽 제작
2016-07-17 종료 016-Thief01의 액알모션 제작 의뢰 file RMXP 그래픽 제작
2016-06-01 종료 부족한탓에 의뢰밖에 못하는군요 3 file RMXP 그래픽 제작
2016-06-01 종료 이거 여러종류로 만들어주세요 file RMXP 그래픽 제작
2016-01-31 종료 우타호노타타리2 한글화 의뢰 기타 기타
2016-06-30 종료 캐릭터칩 정말 필요합니다. 2 file RMXP 그래픽 제작
2016-06-24 종료 이 스크립트(ace)를 mv에서 동작시키고 싶습니다. 3 RMMV 기능 구현
2016-06-20 종료 MV 배경 플러그인 제작요청 1 RMMV 기능 구현
2016-01-15 종료 [XP] 배틀 화면을 첨부 이미지처럼 바꿀 방법은 없을까요? 9 file RMXP 기능 구현
2016-06-14 종료 [VX ACE]메인메뉴 스크립트입니다... 4 file RMVXA 기능 구현
2016-06-12 종료 캐릭터 칩 제작 의뢰합니다. file 기타 그래픽 제작
2016-05-24 종료 ace 스크립트인데 xp용으로 컨버전 가능할까요..? 2 file RMXP 기능 구현
2016-05-22 종료 캐릭터칩 제작 의뢰 file 기타 그래픽 제작
2016-04-27 종료 rpg mv 한글화 해주실 분 구합니다 ㅠ 1 RMMV 기타
2016-04-20 종료 캐릭터 도트 제작 요청입니다. RMVX 그래픽 제작
2016-04-15 종료 vx ace 캐릭터칩 제작해주실분 file RMVXA 그래픽 제작
Board Pagination Prev 1 2 3 4 5 6 Next
/ 6