鳥小屋.txt

主に自作ゲームをつくったりしているよ。制作に関することやそうじゃないことのごった煮ブログ

VXAceでTwitterAPIしたい

最近よくあるよね、ゲームからTwitterに投稿するっていうの。
「アリアハンなう」的なあーゆーことできたら面白いかなぁとか。

とりあえず簡易版作ってみた

で、よくブログとかについてる
「このページをツイート」みたいの押すと出てくる
ツイート欄を表示させたらそれっぽいかなと思って
ちょっと作ってみたのです。

超簡易ツイート機能さん for RGSS3
https://gist.github.com/rutan/3224292https://gist.github.com/rutan/3224289 に移行しました。

でも、やっぱりこれもなんか違うよなぁと。
これだったら普通にTwitterで投稿するのと変わらないし

それにツイートだけじゃなくて、
そのゲームに関するツイートとかも取得できたら面白いよね。
右上からピョコピョコ出てくるの。
で、開始直後にネタバレされて死ぬの(

そんなわけで考え中

C++でDLL作ってそっちから呼べるかなと思い、
ちょっとライブラリ借りてきてやってみたんですが、
認証ページ開くだけで処理に10秒くらいかかってぐぬぬ……
何がおかしいのかよくわかんないー

本体と別に実行ファイル用意して、
そっち経由で投稿させるのは試した感じ簡単にできそうかも。
ただ作りとしてはあんまりきれいじゃないかなぁw
(DLLも方法としてはきれいじゃないかもしれないけど)

もうちょっと悩んでみます。そして進まない制作(

ツクールDS+風 頭上アイテム表示スクリプト for RGSS3(VXAce用)


みなさーん、ツクツクー!(
そんなわけで、ツクールDS+の頭上アイコン表示をVXAceでも使ってみましょう!(

# coding: utf-8
#===============================================================================
# ■ ツクールDS+風 頭上アイテム表示さん for RGSS3
# ※このスクリプトはRGSS3(RPGツクールVXAce)専用です
#-------------------------------------------------------------------------------
# 2011/12/06 Ru/むっくRu
#-------------------------------------------------------------------------------
# RPGツクールDS+のアイテムアイコン頭上表示のような機能を追加します
#
# 【使い方】
#  ・イベントコマンドの「スクリプト」の中で以下の命令を行ってください
#
#     startItemDSP(MAPイベントのID, アイコンのID)
#
#     ● MAPイベントのID
#     イベント編集ウィンドウのタイトルバー部分にでるIDの値
#     主人公を指定する場合は-1、このイベントを指定する場合は0にしてください
#     ● アイコンのID
#     データベースのアイコン選択画面左下に出るIndex:の値
#     ただし、Index:0のアイコンは表示されません
#
#   例)
#     startItemDSP(-1, 1)
#   ↑主人公の頭上に1番のアイコン(RTPだとドクロ)が表示される
#
#  ・消すときには「スクリプト」の中で以下の命令を行ってください
#
#     endItemDSP(MAPイベントのID)
#
#   例)
#     endItemDSP(-1)
#   ↑主人公の頭上のアイコンが消える(もともと無い場合は何もおきない)
#
#-------------------------------------------------------------------------------
# 【問題点など】
# VXAce発売前なのでちゃんと動くかわからないし、
# ツクールDS+も出てないので、本当にDS+風なのかどうかもわからない
#-------------------------------------------------------------------------------

#==============================================================================
# ● 設定項目
#==============================================================================

module HZM_VXA
  module DSP_OHICON
    # 表示する高さ微調整
    D_HEIGHT = 0
  end
end

#==============================================================================
# ↑   ここまで設定   ↑
# ↓ 以下、スクリプト部 ↓
#==============================================================================

# 定数
module HZM_VXA
  module DSP_OHICON
    # startItemDSP、endItemDSP命令を使用可能にする
    CAN_SHORT_COMMAND = true
  end
end

# アイコン表示用の変数を追加
class Game_CharacterBase
  attr_accessor :hzm_vxa_dsp_ohicon_id
  
  alias hzm_vxa_dsp_ohicon_init_public_members init_public_members
  def init_public_members
    hzm_vxa_dsp_ohicon_init_public_members
    @hzm_vxa_dsp_ohicon_id = 0
  end
end

# アイコン表示処理追加
class Sprite_Character < Sprite_Base
  alias hzm_vxa_dsp_ohicon_initialize initialize
  def initialize(viewport, character = nil)
    hzm_vxa_dsp_ohicon_initialize(viewport, character)
    @hzm_vxa_dsp_ohicon_icon_index = 0
  end
  
  alias hzm_vxa_dsp_ohicon_dispose dispose
  def dispose
    hzm_vxa_dsp_ohicon_end_ohicon
    hzm_vxa_dsp_ohicon_dispose
  end
  
  alias hzm_vxa_dsp_ohicon_update update
  def update
    hzm_vxa_dsp_ohicon_update
    hzm_vxa_dsp_ohicon_update_ohicon
  end
  
  alias hzm_vxa_dsp_ohicon_setup_new_effect setup_new_effect
  def setup_new_effect
    # デバッグ用
    #@character.hzm_vxa_dsp_ohicon_id = 0 unless @character.hzm_vxa_dsp_ohicon_id
    hzm_vxa_dsp_ohicon_setup_new_effect
    if @hzm_vxa_dsp_ohicon_sprite
      hzm_vxa_dsp_ohicon_end_ohicon   if @character.hzm_vxa_dsp_ohicon_id <= 0
    else
      hzm_vxa_dsp_ohicon_start_ohicon if @character.hzm_vxa_dsp_ohicon_id > 0
    end
  end
  
  HZM_VXA_DSP_OHICON_ICON_SIZE = 24
  def hzm_vxa_dsp_ohicon_start_ohicon
    @hzm_vxa_dsp_ohicon_icon_index = @character.hzm_vxa_dsp_ohicon_id
    @hzm_vxa_dsp_ohicon_sprite = Sprite.new(viewport)
    @hzm_vxa_dsp_ohicon_sprite.bitmap = Bitmap.new(HZM_VXA_DSP_OHICON_ICON_SIZE, HZM_VXA_DSP_OHICON_ICON_SIZE)
    bitmap = Cache.system("Iconset")
    rect = Rect.new(@hzm_vxa_dsp_ohicon_icon_index % 16 * HZM_VXA_DSP_OHICON_ICON_SIZE, @hzm_vxa_dsp_ohicon_icon_index / 16 * HZM_VXA_DSP_OHICON_ICON_SIZE, HZM_VXA_DSP_OHICON_ICON_SIZE, HZM_VXA_DSP_OHICON_ICON_SIZE)
    @hzm_vxa_dsp_ohicon_sprite.bitmap.blt(0, 0, bitmap, rect)
    @hzm_vxa_dsp_ohicon_sprite.ox = HZM_VXA_DSP_OHICON_ICON_SIZE / 2
    @hzm_vxa_dsp_ohicon_sprite.oy = HZM_VXA_DSP_OHICON_ICON_SIZE
    hzm_vxa_dsp_ohicon_update_ohicon
  end
  
  def hzm_vxa_dsp_ohicon_end_ohicon
    @character.hzm_vxa_dsp_ohicon_id = 0
    @hzm_vxa_dsp_ohicon_icon_index   = 0
    hzm_vxa_dsp_ohicon_dispose_ohicon
  end
  
  def hzm_vxa_dsp_ohicon_dispose_ohicon
    return unless @hzm_vxa_dsp_ohicon_sprite
    @hzm_vxa_dsp_ohicon_sprite.bitmap.dispose
    @hzm_vxa_dsp_ohicon_sprite.dispose
    @hzm_vxa_dsp_ohicon_sprite = nil
  end
  
  def hzm_vxa_dsp_ohicon_update_ohicon
    return unless @hzm_vxa_dsp_ohicon_sprite
    @hzm_vxa_dsp_ohicon_sprite.x = x
    @hzm_vxa_dsp_ohicon_sprite.y = y - height - HZM_VXA::DSP_OHICON::D_HEIGHT
    @hzm_vxa_dsp_ohicon_sprite.z = z + 190
  end
end

# コマンド追加
class Game_Interpreter
  def hzm_vxa_dsp_ohicon_start_item_over_head(id, icon_index)
    return unless character = get_character(id)
    character.hzm_vxa_dsp_ohicon_id = icon_index
  end
  
  # ショートカットコマンドの追加
  if HZM_VXA::DSP_OHICON::CAN_SHORT_COMMAND
    def startItemDSP(id, icon_index)
      begin
        hzm_vxa_dsp_ohicon_start_item_over_head(id, icon_index)
      rescue
        puts "startItemDSP(#{id}, #{icon_index})を実行中にエラーが発生しました"
        puts "#{$!} - #{$@}"
        puts "----------"
      end
    end
    def endItemDSP(id)
      begin
        hzm_vxa_dsp_ohicon_start_item_over_head(id, 0)
      rescue
        puts "endItemDSP(#{id})を実行中にエラーが発生しました"
        puts "#{$!} - #{$@}"
        puts "----------"
      end
    end
  end
end

フキダシ表示とほとんど変わらないじゃん!

他にもDS+の機能追加するぜーと思ったのですが、
タイトルイラストの表示とかはピクチャでやればいいので必要ないかな……

次は前につくった高速Input.repeat移植しようかなーRGSS3楽しいです!
発売前から神ゲー!!(

ツクールVXAce用の音量変更スクリプトつくってみた

音量変更スクリプトはこっちに引っ越しました



以下、とっても古い内容

2012/01/02追記 ini読込をベーススクリプト依存に変更しました。
2011/12/29追記 BGS再生時にエラーする不具合修正しました
2011/12/26追記 BGM無音時にエラーする不具合修正しました
2011/12/13追記 スクリプト更新しました
【最新版はこちら】

RPGツクールVXAceの体験版が公開されたので早速作ってみました!!(
前つくってたRGSS2版を少しいじった程度ですけどね。

RGSS3はメニューの追加とか簡単にできるようになってて、スクリプト作るにはかなり楽になってますね。いろいろ作ってみようかな?

# encoding: utf-8
# 【注意:2011/12/26追記】
# このスクリプトは不具合を含む古いものです。
# 使用する場合はこれではなく、最新版をお使いくださいな。
#===============================================================================
# ■ 音量変更処理スクリプトさん for RGSS3
#-------------------------------------------------------------------------------
# 2011/12/01 Ru/むっくRu
#-------------------------------------------------------------------------------
# 全体の音量変更に関する機能を追加します
#
# ● Audioモジュールに以下のメソッドが追加されます
# Audio.volBGM …… BGMのマスターボリューム取得
# Audio.volBGS …… BGSのマスターボリューム取得
# Audio.volSE  …… SEのマスターボリューム取得
# Audio.volME  …… MEのマスターボリューム取得
# Audio.volBGM=数値 …… BGMのマスターボリューム設定(0〜100)
# Audio.volBGM=数値 …… BGSのマスターボリューム設定(0〜100)
# Audio.volSE=数値  …… SEのマスターボリューム設定(0〜100)
# Audio.volME=数値  …… MEのマスターボリューム設定(0〜100)
#
# ● メニュー画面に音量調整の項目が追加されます
#
#-------------------------------------------------------------------------------
# 【問題点など】
# そもそもVXAce発売前だからちゃんと動くか微妙
#-------------------------------------------------------------------------------

#==============================================================================
# ● 設定項目
#==============================================================================
module HZM_VXA
  module AudioVol
    # メニュー画面に音量調整を表示するか?
    #  true  …… 表示する
    #  false …… 表示しない
    MENU_FLAG = true
    
    # メニュー画面に表示する項目名
    MENU_NAME        = "音量設定"
    
    # 音量設定画面の項目名
    CONFIG_BGM_NAME  = "BGM"
    CONFIG_BGS_NAME  = "BGS"
    CONFIG_SE_NAME   = "SE"
    CONFIG_ME_NAME   = "ME"
    CONFIG_EXIT_NAME = "戻る"
    
    # 音量変更の変動量
    # ADD_VOL_NORMAL …… 左右キーの変動量
    # ADD_VOL_HIGH   …… LRキーの変動量
    ADD_VOL_NORMAL = 5
    ADD_VOL_HIGH   = 25
  end
end

#==============================================================================
# ↑   ここまで設定   ↑
# ↓ 以下、スクリプト部 ↓
#==============================================================================

# 追加メソッド群
module Audio
  def self.volBGM=(vol)
    vol=100 if vol>100
    vol=0 if vol<0
    @hzmVolBGM = vol
  end
  def self.volBGS=(vol)
    vol=100 if vol>100
    vol=0 if vol<0
    @hzmVolBGS = vol
  end
  def self.volSE=(vol)
    vol=100 if vol>100
    vol=0 if vol<0
    @hzmVolSE = vol
  end
  def self.volME=(vol)
    vol=100 if vol>100
    vol=0 if vol<0
    @hzmVolME = vol
  end
  def self.volBGM
    @hzmVolBGM = 100  if @hzmVolBGM == nil
    return @hzmVolBGM
  end
  def self.volBGS
    @hzmVolBGS = 100  if @hzmVolBGS == nil
    return @hzmVolBGS
  end
  def self.volSE
    @hzmVolSE = 100  if @hzmVolSE == nil
    return @hzmVolSE
  end
  def self.volME
    @hzmVolME = 100  if @hzmVolME == nil
    return @hzmVolME
  end
end

# 再生処理
class << Audio
  alias hzm_Vol_Audio_bgm_play bgm_play
  def bgm_play(filename, volume=100, pitch=100, pos=0)
    volume = self.volBGM * volume / 100
    hzm_Vol_Audio_bgm_play(filename, volume, pitch, pos)
  end
  alias hzm_Vol_Audio_bgs_play bgs_play
  def bgs_play(filename, volume=100, pitch=100)
    volume = self.volBGS * volume / 100
    hzm_Vol_Audio_bgs_play(filename, volume, pitch)
  end
  alias hzm_Vol_Audio_se_play se_play
  def se_play(filename, volume=100, pitch=100)
    volume = self.volSE * volume / 100
    hzm_Vol_Audio_se_play(filename, volume, pitch)
  end
  alias hzm_Vol_Audio_me_play me_play
  def me_play(filename, volume=100, pitch=100)
    volume = self.volME * volume / 100
    hzm_Vol_Audio_me_play(filename, volume, pitch)
  end
end

# メニューに追加
if HZM_VXA::AudioVol::MENU_FLAG
  class Window_MenuCommand
    alias hzm_Vol_Window_MenuCommand_add_original_commands add_original_commands
    def add_original_commands
      hzm_Vol_Window_MenuCommand_add_original_commands
      add_command(HZM_VXA::AudioVol::MENU_NAME, :hzm_vxa_vol)
    end
  end

  class Scene_Menu
    alias hzm_Vol_create_command_window create_command_window
    def create_command_window
      hzm_Vol_create_command_window
      @command_window.set_handler(:hzm_vxa_vol, method(:hzm_vxa_vol))
    end
    def hzm_vxa_vol
      SceneManager.call(HZM_VXA::AudioVol::Scene_VolConfig)
    end
  end
end

# 音量変更ウィンドウ
module HZM_VXA
  module AudioVol
    class Window_VolConfig < Window_Command
      def initialize
        super(0, 0)
        self.x = (Graphics.width - self.window_width)/2
        self.y = (Graphics.height - self.window_height)/2
      end
      def make_command_list
        add_command(HZM_VXA::AudioVol::CONFIG_BGM_NAME,  :bgm)
        add_command(HZM_VXA::AudioVol::CONFIG_BGS_NAME,  :bgs)
        add_command(HZM_VXA::AudioVol::CONFIG_SE_NAME,   :se)
        add_command(HZM_VXA::AudioVol::CONFIG_ME_NAME,   :me)
        add_command(HZM_VXA::AudioVol::CONFIG_EXIT_NAME, :cancel)
      end
      def draw_item(index)
        super
        return unless index < 4
        case index
        when 0
          vol = Audio.volBGM
        when 1
          vol = Audio.volBGS
        when 2
          vol = Audio.volSE
        when 3
          vol = Audio.volME
        end
        draw_text(item_rect_for_text(index), vol, 2)
      end
      def volAdd(index, val)
        case index
        when 0
          Audio.volBGM += val
          now = RPG::BGM.last 
          Audio.bgm_play('Audio/BGM/' + now.name, now.volume, now.pitch, now.pos) if now
        when 1
          Audio.volBGS += val
        when 2
          Audio.volSE += val
        when 3
          Audio.volME += val
        end
        Sound.play_cursor
        redraw_item(index)
      end
      def cursor_left(wrap = false)
        volAdd(@index, -HZM_VXA::AudioVol::ADD_VOL_NORMAL)
      end
      def cursor_right(wrap = false)
        volAdd(@index,  HZM_VXA::AudioVol::ADD_VOL_NORMAL)
      end
      def cursor_pageup
        volAdd(@index,  -HZM_VXA::AudioVol::ADD_VOL_HIGH)
      end
      def cursor_pagedown
        volAdd(@index,  HZM_VXA::AudioVol::ADD_VOL_HIGH)
      end
    end
    class Scene_VolConfig < Scene_MenuBase
      def start
        super
        @command_window = Window_VolConfig.new
        @command_window.viewport = @viewport
        @command_window.set_handler(:cancel,   method(:return_scene))
      end
      def terminate
        super
        @command_window.dispose
      end
    end
  end
end

# セーブ時に保存、読込
class << DataManager
  alias hzm_Vol_make_save_contents make_save_contents
  def make_save_contents
    contents = hzm_Vol_make_save_contents
    contents[:hzm_vxa_vol]   = {
      :bgm => Audio.volBGM,
      :bgs => Audio.volBGS,
      :se  => Audio.volSE,
      :me  => Audio.volME
    }
    contents
  end
  alias hzm_Vol_extract_save_contents extract_save_contents
  def extract_save_contents(contents)
    hzm_Vol_extract_save_contents(contents)
    Audio.volBGM = contents[:hzm_vxa_vol][:bgm]
    Audio.volBGS = contents[:hzm_vxa_vol][:bgs]
    Audio.volSE  = contents[:hzm_vxa_vol][:se]
    Audio.volME  = contents[:hzm_vxa_vol][:me]
  end
end

体験版で動作試したいときは、スクリプトをテキストに保存して、プロジェクトファイルの中に入れて、イベントのスクリプトで

require 'ファイル名'

して、そのイベントを実行すれば試せますよん。
発売が楽しみですね!(上のスクリプトがちゃんと動くか的な意味で)