设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
Project1 查看内容

叶子的SLG战棋系统教學(阿尔西斯战记0.5)

2006-3-25 00:00| 发布者: 柳柳| 查看: 10945| 评论: 0|原作者: 66RPG

摘要:    作者 小白木 版本与更新  2006年3月 相关网址 点此进入发布贴 相关工程(SLG系统) http://bbs.66rpg.com/web/showdown.asp?id=185 教程内容 注!這是0.5版的。 [COLOR=#FF33FF]超-鳴謝: 叶
  

作者

小白木

版本与更新

 2006年3月

相关网址

点此进入发布贴

相关工程(SLG系统)

http://bbs.66rpg.com/web/showdown.asp?id=185



教程内容

注!這是0.5版的。


[COLOR=#FF33FF]超-鳴謝: 叶子
叶子的戰棋功能是借屬性來設置移動、攻擊等範圍,所以請先下載叶子的[阿尔西斯战记]
下面是入門教學。
☆=職業中設置的屬性
○=技能中設置的屬性
△=武器中設置的屬性
◎=敵人中設置的屬性
¥=道具中設置的屬性
[注意!!    不可在技能裹設定全體!!][/COLOR]
══════════════════════════════════════════
●移動範圍→→→→→☆◎
[注明:  是人物和敵人的步數]
屬性66-69是移動範圍,如:1步,就選擇屬性66(+1);3步,就選擇屬性66和67(+1,+2)... ...
──────────────────────────────────────────
★攻擊範圍(射程)→→→→→○△◎¥
[注明:  是武器、技能和敵人的射程,也可套用在道具的使用範圍。(在阿尔西斯战记裹沒有用在
 道具上)]
屬性51-55是攻擊範圍,如:1格,就選擇屬性51(+1);3格,就選擇屬性51和52(+1,+2)... ...
──────────────────────────────────────────
■AOE 範圍(范围)→→→→→○△◎¥
[注明:  AOE範圍是攻擊射程内的作用范围,作用範圍裹的人(敌单体就敌方中招,己方单体就己方中招)全中招!]
屬性56-60是AOE範圍,如:1格,就選擇屬性56(+1);3格,就選擇屬性56和57(+1,+2)... ...
──────────────────────────────────────────
▼視野範圍→→→→→◎
[注明:  怪物只會攻擊自己視野範圍的敵人,在叶子的阿尔西斯战记裹的怪物則是把71-74的屬性
選擇了(71-74=1+2+4+8)]
屬性71-74是攻擊範圍,如:1格,就選擇屬性71(+1);3格,就選擇屬性71和72(+1,+2)... ...
──────────────────────────────────────────
▲延時→→→→→→→○△◎¥
[注明:  在技能,武器,敵人和道具也一定要選擇延時!否則,敵人可以作無限次的行動;普通攻擊,
使用技能和使用道具可以立即行動,不過技能也有例外的,就是技能裹選擇冷却了!(下面有說明)]
屬性51-55是攻擊範圍,如:1,就選擇屬性51(+1);3,就選擇屬性51和52(+1,+2)... ...
──────────────────────────────────────────
▲冷却→→→→→→→○
[注明:  在這個技能的凍结未完,是不可以再使用的]
要先選擇屬性97(冷却属性),不勾选标志属性的话不会生效。
屬性98-105是凍结數值,如:20,就選擇屬性97和99(冷却属性+20);200,就選擇屬性97和100,102(冷却属性,+40,+160)... ...
──────────────────────────────────────────
£仇恨修正→→→→→○¥△
[注明:  如A打B,令B恨A,追殺A。詳細:http://bbs.66rpg.com/web/shownews.asp?id=291]
屬性41-49是仇恨修正,如:1,就選擇屬性45(+1);4,就選擇屬性43,57和47(+1.5,+1,+0.5)... ...
──────────────────────────────────────────
*咏唱→→→→→→→○¥△
[注明:  詠唱的時間,要詠唱後才可攻擊]
要先選擇屬性86(标志属性),不勾选标志属性的话不会生效。
屬性87-94是唱志時間,如:20,就選擇屬性86,88(标志属性,+20);220,就選擇屬性86,88,89和91(标志属性+20,+40,+160)... ...
──────────────────────────────────────
[COLOR=#FF33FF]══════════════════════════════════════
--------------------------------特別屬性------------------------------------
═════════════════════════════════════
[/COLOR]!套用武器延時→→→○
[注明:  把武器的延時+這個技能的延時]
屬性110
──────────────────────────────────────────
#套用射程→→→→→○
[注明:  把武器的射程+這個技能的射程]
屬性114
──────────────────────────────────────────
〒套用範圍→→→→→○
[注明:  把武器的AOE範圍+這個技能的AOE範圍]
屬性115
──────────────────────────────────────────
◆DOT状态→→→→→狀態  *v*
[注明:  每隔一回合用ID与状态ID相同的特技的效果(一回合=50)]
例如:       140号状态勾选了“DOT状态”,每隔一回合就会在状态承受者身上应用一次140号技能
屬性122

──────────────────────────────────────────
══════════════════════════════════════════
──────────────────────────────────────────
套用状态
[注明:  最终附加状态为特技附加状态与武器附加状态并集)
──────────────────────────────────────────
套用属性(原理同上)
──────────────────────────────────────────
套用属性(原理同上)
──────────────────────────────────────────
套用动画(特技的动画使用武器的动画)
──────────────────────────────────────────
攻击用特技(即使没有学也能使用此特技)
──────────────────────────────────────────
不显示帮助窗口(顾名思义)
──────────────────────────────────────────
取消行动延迟(也就是忽略防具带来的延迟)
──────────────────────────────────────────
锁定型技能(咏唱时锁定目标,即使目标移动,咏唱完毕后照样攻击到)
──────────────────────────────────────────
不干扰状态(没勾此属性的话,命中目标时都会计算受到攻击解除状态)
──────────────────────────────────────────
[COLOR=#FF33FF]需知:
◎设置战斗者
事件里连续四条注释:
战斗者设置
敌方/我方
群体ID 群体成员的索引(敌方)/角色ID(我方)
开关类型 开关 (例:本地开关 A 或 开关 1)
--------------------------------------------------------------------------
◎设置胜负开关
事件里连续三条注释:
胜负设置
胜利 开关类型 开关号
失败 开关类型 开关号

上面是腳本中COPY出來的,戰鬥時必要的設定:

戰鬥時要在事件中加入:

腳本:$scene = Scene_SLG.new

在戰鬥的地圖中加入... ...
看看下面的例子吧!

例子: (敵人)
共有两页,第一页为战斗页,第二页为挂掉后的页。

第一頁
注释:战斗者设置
注释:敌方
注释:1 0
注释:本地开关 A

第二頁
條件:   本地开关  A= ON


# 注释:1 0 = 第1號群體的第1個怪物。
# 注释:本地开关 A = 當這個怪物死了,本地开关 A ON

(己方)
新增一個事件,共有二頁,第二頁是死後的模樣。
(第二頁設定的事件不會實行的!!)
第一頁
注释:战斗者设置
注释:我方
注释:1
注释:本地开关 A
第二頁
條件:   本地开关  A = ON

# 注释:1 = 第1個主人。
# 注释:本地开关 A = 當這個人死了,本地开关 A ON

!!!注意!!!

如果想制作后来加入的敌人,可以加入腳本!

例子:

第一页(条件:回合数变量(默认为10号变量)>XX,自动执行):
脚本:$scene.add_battlers [$game_map.events[9]]
注释:战斗者设置
注释:敌方
注释:1 0
打开某开关转第二页

第二页(决定键):

第三页(决定键,挂掉后的页):

# 注释:脚本:$scene.add_battlers [$game_map.events[9]] (加入战斗者用)($game_map.events[9]那个9为本事件ID)

最後:
#战斗一开始就在的战斗者至少两页(战斗和挂掉),后来加入战场的战斗者至少三页(自动执行加入语句、战斗、挂掉)。[/COLOR]

 

 

 

 

 

 

 

 

 

 

 

 

腳本:

這是腳本中拿出來的!

 

 

 

 

 

Scene_SLG(常量設定):
class Scene_SLG
  # 移动范围及射程范围闪烁颜色
  MOVE_COLOR = 0x444
  # AOE范围闪烁颜色(射程内)
  TARGET_COLOR = 0x800
  # AOE范围闪烁颜色(射程外)
  TARGET_OUT_COLOR = 0x400
  # 画面中央的 X 坐标 * 4
  CENTER_X = (320 - 16) * 4
  # 画面中央的 Y 坐标 * 4
  CENTER_Y = (240 - 16) * 4
  # 10号变量记录回合数
  TURN_VARIABLE = 10
  # 咏唱用状态
  CAST_STATE = 50
  # 开始咏唱用动画ID
  CAST_ANIMATION_ID = 1
  # 休息的行动延迟
  REST_DELAY = 40
end   

 

 

 


module RPG中可以改變屬性的設定:
#--------------------------------------------------------------------------
  #
  # 数据属性系列(没办法,作为SLG,要设置的东西太多了)
  #
  #--------------------------------------------------------------------------
  # 默认射程为0,51-55号属性分别加1、2、4、8、16
  first = 51
  RANGE_ELEMENT = [first,first+1,first+2,first+3,first+4]
  #--------------------------------------------------------------------------
  # AOE范围属性,默认为0,56-60号属性分别加1、2、4、8、16
  first = 56
  AOE_ELEMENT = [first,first+1,first+2,first+3,first+4]
  # AOE类型属性(直线、十字、锥形,是否带地面障碍判断)(未制作)
  first = 61
  AOE_KIND_ELEMENT = [first,first+1,first+2,first+3,first+4]
  #--------------------------------------------------------------------------
  # 默认移动范围
  DEFAULT_MOVE = 0
  # 移动范围属性(最后一个保留作飞行/地面)
  first = 66
  MOVE_ELEMENT = [first,first+1,first+2,first+3,first+4]
  #--------------------------------------------------------------------------
  # 默认视野范围
  DEFAULT_VIEW = 5
  # 视野范围属性(最后一个保留作透视?)
  first = 71
  VIEW_ELEMENT = [first,first+1,first+2,first+3,first+4]
  #--------------------------------------------------------------------------
  # 默认自身延迟
  DEFAULT_DELAY = 0
  # 延迟属性
  first = 76
  DELAY_ELEMENT = [first,first+1,first+2,first+3,first+4,first+5,first+6,
  first+7,first+8,first+9]
  #--------------------------------------------------------------------------
  # 咏唱标志属性
  CASTING_FLAG_ELEMENT = 86
  # 咏唱时间属性
  first = 87
  CASTING_ELEMENT = [first,first+1,first+2,first+3,first+4,first+5,first+6,
  first+7,first+8,first+9]
  #--------------------------------------------------------------------------
  # 冷却标志属性
  COOLDOWN_FLAG_ELEMENT = 97
  # 冷却时间属性
  first = 98
  COOLDOWN_ELEMENT = [first,first+1,first+2,first+3,first+4,first+5,first+6,
  first+7,first+8,first+9]
  #--------------------------------------------------------------------------
  #
  # 标志属性系列
  #
  #--------------------------------------------------------------------------
  # 攻击用特技标志(作为“攻击”这一项的特技打上的标志,防止不能使用)
  FOR_ATTACK_ELEMENT = 109
  #--------------------------------------------------------------------------
  # 动作延迟套用使用者标志属性
  # 特技/物品造成的动作延迟为
  # 武器动作延迟(我方)或 0(敌方)+ 特技/物品的动作延迟
  USER_ACTION_DELAY_ELEMENT = 110
  #--------------------------------------------------------------------------
  # 附加状态套用使用者标志属性
  # 特技/物品的附加状态套用使用者攻击附加状态(我方的话是武器的附加状态)
  USER_STATES_PLUS_ELEMENT = 111
  #--------------------------------------------------------------------------
  # 附加属性套用使用者标志属性
  # 特技/物品的附加属性套用使用者攻击附加属性(我方的话是武器的附加属性)
  USER_ELEMENT_SET_ELEMENT = 112
  #--------------------------------------------------------------------------
  # 动画套用使用者标志属性
  # 特技/物品的动画(使用者动画和目标动画)套用使用者的
  USER_ANIMATION_ELEMENT = 113
  #--------------------------------------------------------------------------
  # 套用战斗者射程标志属性
  USER_RANGE_ELEMENT = 114
  #--------------------------------------------------------------------------
  # 套用战斗者范围标志属性
  USER_AOE_ELEMENT = 115
  #--------------------------------------------------------------------------
  # 不显示帮助窗口标志属性
  # 不显示使用特技或物品时上面那个写出名字的窗口
  NO_HELP_WINDOW_ELEMENT = 116
  #--------------------------------------------------------------------------
  # 取消自身行动延迟标志
  # 增加延迟时不增加motion_delay
  CANCEL_MOTION_DELAY_ELEMENT = 118
  #--------------------------------------------------------------------------
  # 锁定型技能标志(仅限于AOE=1的咏唱技能)
  # 咏唱时锁定目标,即使目标移动,咏唱完毕后照样攻击到
  LOCK_TARGET_ELEMENT = 119
  #--------------------------------------------------------------------------
  # 不干扰状态的特技标志
  # 回复类技能记得勾上这个标志
  # 增加这个的原因是觉得内置的要物理攻击才能干扰状态的设定太恶心了
  # 其实也是为了配合变羊术
  NO_REMOVE_STATES_ELEMENT = 120
  #--------------------------------------------------------------------------
  # DOT状态标志属性
  # 带有此标志状态,状态承受者每回合应用一次同ID的特技的效果
  # 可以带有多个DOT,会根据状态的定量,从大到小应用DOT效果
  DOT_ELEMENT = 122
  #--------------------------------------------------------------------------
  $ignore_elements += RANGE_ELEMENT + AOE_ELEMENT + AOE_KIND_ELEMENT +
  MOVE_ELEMENT + DELAY_ELEMENT + [FOR_ATTACK_ELEMENT, USER_ACTION_DELAY_ELEMENT,
  USER_STATES_PLUS_ELEMENT, USER_ELEMENT_SET_ELEMENT, USER_ANIMATION_ELEMENT,
  USER_RANGE_ELEMENT, USER_AOE_ELEMENT,NO_HELP_WINDOW_ELEMENT,
  CANCEL_MOTION_DELAY_ELEMENT, LOCK_TARGET_ELEMENT,
  NO_REMOVE_STATES_ELEMENT, DOT_ELEMENT]

 

 

 

 

       其他:

 

 

  特技的SCOPE用了1、3、5,其余保留,看以后是否有用

  自己人的格子要可穿透才行..

  以后要加入FDR的视野障碍判断

  在AOE范围内的目标要闪..因为有些单位飞得高,不知道是否选中

  由于物品暂时是公用的,所以未加入物品冷却..
 
SailCat的讲解:
解释一下
sort! do |a, b|...end是迭代排序法
它的原理是,根据do...end这一块中最后一个计算式的返回值的正负号,对a和b两个数进行交换
当值为正时,将a排在b之前,当值为负时,将b排在a之前,当值为0时,不改动顺序
|a, b|是数组中的任意两个元素,这里用a b代替来在块中进行计算

不带任何参数的sort!,等同于
sort! do |a, b|
 a <=> b
end

a <=> b这个式子,在A>B时返回1 A=B时返回0 APS:貌似顺序刚好反过来了...

状态动画的Z坐标太大,会遮住下面的战斗者
★柳柳的笔记:

名词解释:
DOT:每隔一段时间用特技伤害一次。
AOE:特技的范围

——————————————————————————————————————
Scene_SLG
——————————————————————————————————————

常量设定:设定范围的闪烁颜色、回合数占用变量(10号)
         咏唱用状态编号(50)、开始咏唱用动画ID(1)、休息的行动延迟(50)

——————————————————————————————————————         
        
数据导入输出:

★使用:设置SLG事件用4行 
 # 战斗者设置 <--固定用语
 # 敌方/我方  <--★★★★缺少第三方友军和简易物品设置★★★★
 # 群体ID 群体成员的索引(敌方)/角色ID(我方) <--这里可以把一关用到的敌人设置在一个Troop里面
 # 开关类型 开关 (例:本地开关 A 或 开关 1) <--敌人死亡设置,比如“独立开关 A”
 
▲函数:def event_comment_input(event, 3, '战斗者设置'):取event的“战斗者设置”开始3行注释

θ其它:.split可以按空格切割为多个数组,如@nam="a b".split则@nam[0]="a";@nam[1]="b"

△参数:@battlers[event.id],用于记录当前event的信息,生命等。
       @enemies[event.id],敌人们,似乎是为了减小@battlers,@enemies[event.id] = @battlers[event.id]
       @actors[event.id] = @battlers[event.id]
     新增公开变量:event.type (0:无;1:我方;2:敌人,似乎可以省去)
    

▲函数:def setup_battlers(events):初始化输入的events,是个[]。

▲函数:def add_battlers(events):增加战斗者用,可以还原初始化,似乎可用于敌人极多甚至无限的情况。

▲函数:def setup_judge(events):设置胜负开关事件

△参数:@win_trigger_type,@win_trigger 胜利开关类型和胜利开关
       @lose_trigger_type,@lose_trigger 失败开关类型和胜利开关
       @judge_event 判断的事件

★使用:设置胜败条件
 # 胜负设置
 # 胜利 开关类型 开关号,可用字眼:“开关”,“独立开关”
 # 失败 开关类型 开关号
 
▲函数:def judge(★★★★修改要点★★★★):判断胜负。
       这里只有敌人全灭才判断胜利,我方全灭才判断失败。
       当需要设置关键人物的时候,从这里入手修改。
                 
△参数:@SLG_switches,记录所有改变过的开关

▲函数:def end_slg,所有@SLG_switches记录改变的开关全部还原(?似乎没必要,可修改★★)

△参数:@actor_command_window,Window_Command,“移动,攻击,技能,物品,休息”

△参数:@slg_status_window = Window_SLG_Status.new

▲函数:def start_phaseAI;update_phaseAI 敌人AI,用到make_action

▲函数:def enemy_decide_target(battler)
 ▲函数:def check_view_range(battler, force=false),检测视野,用到enemy的view_range,定义在module RPG,用属性来设定
 ▲函数:def decide_damage_target,确认敌人目标
 ▲函数:def decide_target_grid(start_grid, target_grid),获得行动目标格子
以上几个算法属于基本不用动的东西,(★★★★修改要点:敌人技能的公共事件★★★★)

▲过程:update_phase2 <--def plus_battle_turn回合增加处理,def update_dot_effect刷新DOT效果
 (★★★★修改要点:DOT的公共事件★★★★)
 
▲行动回合:(★★★★修改要点:战斗动画★★★★)

 

 

 

 

 

◎2-8-2006:
  #--------------------------------------------------------------------------
  # ● 刷新画面 (主回合步骤 4 : 对像方动画)
  #--------------------------------------------------------------------------
  def update_phase5_step4
    # 地图滚动
    $game_map.chaochaoc(@active_battler.current_action.target_grid.x,
    @active_battler.current_action.target_grid.y, 7)
    # 对像方动画
    for target in @target_battlers
      【next if target == nil】
      $game_map.events[target.event_id].animation_id = @animation2_id
    end
    # 限制动画长度、最低 8 帧
    @wait_count = 8
    # 移至步骤 5
    @phase5_step = 5
  end
 
  【# 修改面向,让a面向b(柳柳)】

  #--------------------------------------------------------------------------
  # ● 刷新画面 (主回合步骤 3 : 行动方动画)
  #--------------------------------------------------------------------------
  def update_phase5_step3
    # 地图滚动
    $game_map.chaochaoc($game_map.events[@active_battler.event_id].x,
    $game_map.events[@active_battler.event_id].y, 7)
    【# 面向目标格子
    a_faceto_b($game_map.events[@active_battler.event_id],
    @active_battler.current_action.target_grid)】
    # 行动方动画 (ID 为 0 的情况下是白色闪烁)
    if @animation1_id == 0
      $game_map.events[@active_battler.event_id].white_flash = true
    else
      $game_map.events[@active_battler.event_id].animation_id = @animation1_id
      #@active_battler.animation_hit = true
    end
    # 公共事件 ID 有效的情况下
    if @common_event_id > 0
      # 设置事件
      common_event = $data_common_events[@common_event_id]
      $game_system.battle_interpreter.setup(common_event.list, 0)
    end
    # 移至步骤 4
    @phase5_step = 4
  end
  不修改对象方动画的原因:转来转去不好看..(-_-||)

  #--------------------------------------------------------------------------
  # ● 刷新画面 (主回合步骤 4 : 对像方动画)
  #--------------------------------------------------------------------------
  def update_phase5_step4
    # 地图滚动
    $game_map.chaochaoc(@active_battler.current_action.target_grid.x,
    @active_battler.current_action.target_grid.y, 7)
    # 对像方动画
    for target in @target_battlers
      next if target == nil
      【next if (target.death and target.damage>=0)】
      $game_map.events[target.event_id].animation_id = @animation2_id
    end
    # 限制动画长度、最低 8 帧
    @wait_count = 8
    # 移至步骤 5
    @phase5_step = 5
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (主回合步骤 5 : 显示伤害)
  #--------------------------------------------------------------------------
  def update_phase5_step5
    # 显示伤害
    for target in @target_battlers
      if target.damage != nil
        【next if (target.death and target.damage>=0)】
        id = target.event_id
        $game_map.events[id].damage = target.damage
        $game_map.events[id].critical = false
        $game_map.events[id].damage_pop = true
      end
    end
    # 隐藏帮助窗口
    @help_window.visible = false
    # 移至步骤 6
    @phase5_step = 6
  end

  #--------------------------------------------------------------------------
  # ◎记录战斗者坐标
  #--------------------------------------------------------------------------
  def record_coordinate
    # 设置地图坐标列表
    @battler_coordinate = Table.new($game_map.data.xsize,$game_map.data.ysize)
    for battler in @battlers
      # 跳过nil值
      next if battler == nil
      # 忽略死亡单位
      if !battler.death
        @battler_coordinate[$game_map.events[battler.event_id].x,
        $game_map.events[battler.event_id].y] = battler.event_id
     【#elsif battler.is_a?(Game_Actor) ★★特别注意!!如果要设置角色复活魔法,在这里要改
       #@battler_coordinate[$game_map.events[battler.event_id].x,
       #$game_map.events[battler.event_id].y] = battler.event_id】
     end
     【删除一部分无用脚本】
    end
  end

  #--------------------------------------------------------------------------
  # ● 咏唱特技的判定(物品判定处同样内容修改)
  #--------------------------------------------------------------------------
  def check_casting_skill
    # 特技是咏唱特技,而且状态里没有咏唱用状态的话,咏唱处理
    if @skill.cast? and !@active_battler.state?(CAST_STATE)
      # 非地域性魔法的话,目标锁定
      if @skill.lock_target?
        grid = @active_battler.current_action.target_grid
        @active_battler.current_action.lock_target = [@battlers[
        @battler_coordinate[grid.x, grid.y]]]
      end
      @active_battler.casting = true
      @active_battler.add_state(CAST_STATE)
      @active_battler.casting_time += (@skill.casting_time)
      @active_battler.casting_time_max = @active_battler.casting_time
      【# 面向目标格子
      a_faceto_b($game_map.events[@active_battler.event_id],
      @active_battler.current_action.target_grid)】
      # 设置咏唱动画
      $game_map.events[@active_battler.event_id].animation_id = CAST_ANIMATION_ID
      $game_map.need_refresh = true
      $game_map.events[@active_battler.event_id].damage = ''
      $game_map.events[@active_battler.event_id].damage_pop = true
      start_phase3
      return true
    end
    # 咏唱完毕的话,继续行动
    if @skill.cast? and !@active_battler.casting and @active_battler.state?(CAST_STATE)
      @active_battler.remove_state(CAST_STATE)
    end
    return false
  end


◎2-9-2006:
死亡处理等以后要进行大修改,那里的逻辑非常混乱..
  #--------------------------------------------------------------------------
  # ● 死亡处理
  #--------------------------------------------------------------------------
  修正敌人杀死角色后发飙的BUG...
  def make_death_result
    # 角色被杀的话(保留未制作)
    if @active_battler.is_a?(Game_Enemy)
      @battler_die = false
      【start_phase3】
      return
    end


      case step
      # 下
      when RPG::MoveCommand.new(1)
        y += 1
      # 左
      when RPG::MoveCommand.new(2)
        x -= 1
      # 右
      when RPG::MoveCommand.new(3)
        x += 1
      # 上
      when RPG::MoveCommand.new(4)
        y -= 1
      end

 


#==============================================================================
# ■ Spriteモジュール
#------------------------------------------------------------------------------
#  アニメーションの管理を行うモジュールです。
#==============================================================================

module RPG
  class Sprite < ::Sprite
    def damage(value, critical)
      dispose_damage
      if value.is_a?(Numeric)
        damage_string = value.abs.to_s
      else
        damage_string = value.to_s
      end
      bitmap = Bitmap.new(160, 48)
      bitmap.font.name = "Arial Black"
      bitmap.font.size = 32
      bitmap.font.color.set(0, 0, 0)
      bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
      bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
      bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
      bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
      if value.is_a?(Numeric) and value < 0
        bitmap.font.color.set(176, 255, 144)
      else
        bitmap.font.color.set(255, 255, 255)
      end
      bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
      if critical
        bitmap.font.size = 20
        bitmap.font.color.set(0, 0, 0)
        bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
        bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
        bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
        bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
        bitmap.font.color.set(255, 255, 255)
        bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
      end
      @_damage_sprite = ::Sprite.new
      @_damage_sprite.bitmap = bitmap
      @_damage_sprite.ox = 80 + self.viewport.ox
      @_damage_sprite.oy = 20 + self.viewport.oy
      @_damage_sprite.x = self.x + self.viewport.rect.x
      @_damage_sprite.y = self.y - self.oy / 2 + self.viewport.rect.y
      @_damage_sprite.z = 3000
      @_damage_duration = 40
    end
    def animation(animation, hit)
      dispose_animation
      @_animation = animation
      return if @_animation == nil
      @_animation_hit = hit
      @_animation_duration = @_animation.frame_max
      animation_name = @_animation.animation_name
      animation_hue = @_animation.animation_hue
      bitmap = RPG::Cache.animation(animation_name, animation_hue)
      if @@_reference_count.include?(bitmap)
        @@_reference_count[bitmap] += 1
      else
        @@_reference_count[bitmap] = 1
      end
      @_animation_sprites = []
      if @_animation.position != 3 or not @@_animations.include?(animation)
        for i in 0..15
          sprite = ::Sprite.new
          sprite.bitmap = bitmap
          sprite.visible = false
          @_animation_sprites.push(sprite)
        end
        unless @@_animations.include?(animation)
          @@_animations.push(animation)
        end
      end
      update_animation
    end
    def loop_animation(animation)
      return if animation == @_loop_animation
      dispose_loop_animation
      @_loop_animation = animation
      return if @_loop_animation == nil
      @_loop_animation_index = 0
      animation_name = @_loop_animation.animation_name
      animation_hue = @_loop_animation.animation_hue
      bitmap = RPG::Cache.animation(animation_name, animation_hue)
      if @@_reference_count.include?(bitmap)
        @@_reference_count[bitmap] += 1
      else
        @@_reference_count[bitmap] = 1
      end
      @_loop_animation_sprites = []
      for i in 0..15
        sprite = ::Sprite.new
        sprite.bitmap = bitmap
        sprite.visible = false
        @_loop_animation_sprites.push(sprite)
      end
      update_loop_animation
    end
    def animation_set_sprites(sprites, cell_data, position)
      for i in 0..15
        sprite = sprites[i]
        pattern = cell_data[i, 0]
        if sprite == nil or pattern == nil or pattern == -1
          sprite.visible = false if sprite != nil
          next
        end
        sprite.visible = true
        sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
        if position == 3
          if self.viewport != nil
            sprite.x = self.viewport.rect.width / 2
            sprite.y = self.viewport.rect.height - 160
          else
            sprite.x = 320
            sprite.y = 240
          end
        else
          sprite.x = self.x + self.viewport.rect.x -
                      self.ox + self.src_rect.width / 2
          sprite.y = self.y + self.

1

鲜花

刚表态过的朋友 (1 人)

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码