├── data ├── bgm │ └── ~このファイルは削除してかまいません~.txt ├── image │ └── ~このファイルは削除してかまいません~.txt ├── others │ └── ~このファイルは削除してかまいません~.txt ├── rule │ └── ~このファイルは削除してかまいません~.txt ├── sound │ └── ~このファイルは削除してかまいません~.txt ├── video │ └── ~このファイルは削除してかまいません~.txt ├── bgimage │ └── ~このファイルは削除してかまいません~.txt ├── fgimage │ └── ~このファイルは削除してかまいません~.txt ├── scenario │ ├── 1.ks │ ├── first.ks │ └── title.ks ├── system │ ├── check.png │ ├── LineBreak.png │ ├── PageBreak.png │ ├── LineBreak_a.png │ ├── PageBreak_a.png │ ├── Ham │ │ ├── assets │ │ │ ├── menu.png │ │ │ ├── bt_cancel.png │ │ │ ├── bt_return.png │ │ │ ├── btDialogNo.png │ │ │ ├── btDialogYes.png │ │ │ ├── userconf │ │ │ │ ├── 1.png │ │ │ │ ├── 2.png │ │ │ │ ├── 3.png │ │ │ │ ├── 4.png │ │ │ │ ├── 5.png │ │ │ │ ├── 6.png │ │ │ │ ├── 7.png │ │ │ │ ├── ch1.png │ │ │ │ ├── title.png │ │ │ │ ├── blink_on.png │ │ │ │ ├── ch_check.png │ │ │ │ ├── console.png │ │ │ │ ├── 1_checked.png │ │ │ │ ├── 2_checked.png │ │ │ │ ├── 3_checked.png │ │ │ │ ├── 4_checked.png │ │ │ │ ├── 5_checked.png │ │ │ │ ├── 6_checked.png │ │ │ │ ├── 7_checked.png │ │ │ │ ├── audio_mute.png │ │ │ │ ├── background.png │ │ │ │ ├── blink_off.png │ │ │ │ ├── audio_fader.png │ │ │ │ ├── console_noqs.png │ │ │ │ ├── qs_withdialog.png │ │ │ │ ├── sectionbutton.tlg │ │ │ │ ├── audio_largeicon.png │ │ │ │ ├── audio_smallicon.png │ │ │ │ ├── audio_fader_button.png │ │ │ │ ├── audio_mute_checked.png │ │ │ │ ├── blink_off_checked.png │ │ │ │ ├── blink_on_checked.png │ │ │ │ ├── qs_withoutdialog.png │ │ │ │ ├── qs_withdialog_checked.png │ │ │ │ └── qs_withoutdialog_checked.png │ │ │ ├── btDialogClose.png │ │ │ ├── bt_return_dark.png │ │ │ ├── history │ │ │ │ ├── bt_up.png │ │ │ │ ├── title.png │ │ │ │ ├── bt_down.png │ │ │ │ ├── slide_bar.png │ │ │ │ ├── slide_peg.png │ │ │ │ ├── background.png │ │ │ │ └── slide_bar_short.png │ │ │ ├── bookmark │ │ │ │ ├── bt_trash.png │ │ │ │ ├── icon_new.png │ │ │ │ ├── sect01.png │ │ │ │ ├── sect02.png │ │ │ │ ├── sect03.png │ │ │ │ ├── sect04.png │ │ │ │ ├── sect05.png │ │ │ │ ├── sect06.png │ │ │ │ ├── sect07.png │ │ │ │ ├── sect08.png │ │ │ │ ├── sect09.png │ │ │ │ ├── sect10.png │ │ │ │ ├── ti_load.png │ │ │ │ ├── ti_save.png │ │ │ │ ├── background.png │ │ │ │ ├── cbox_lock.png │ │ │ │ ├── img_nodata.tlg │ │ │ │ ├── bg_pagebutton.png │ │ │ │ ├── bt_quickload.png │ │ │ │ ├── bt_quicksave.png │ │ │ │ ├── sect01_active.png │ │ │ │ ├── sect02_active.png │ │ │ │ ├── sect03_active.png │ │ │ │ ├── sect04_active.png │ │ │ │ ├── sect05_active.png │ │ │ │ ├── sect06_active.png │ │ │ │ ├── sect07_active.png │ │ │ │ ├── sect08_active.png │ │ │ │ ├── sect09_active.png │ │ │ │ ├── sect10_active.png │ │ │ │ ├── ti_pagebutton.png │ │ │ │ └── cbox_lock_checked.png │ │ │ └── kag │ │ │ │ └── HamRoutines.ks │ │ ├── Base │ │ │ ├── MBObject.tjs │ │ │ ├── modules │ │ │ │ └── system │ │ │ │ │ ├── bookmark │ │ │ │ │ └── MBSaveSlotButton.tjs │ │ │ │ │ ├── cmenu │ │ │ │ │ ├── MBContextMenuButton.tjs │ │ │ │ │ ├── MBContextUnderLayer.tjs │ │ │ │ │ ├── MBContextMenuItem.tjs │ │ │ │ │ └── MBContextMenuCaller.tjs │ │ │ │ │ ├── history │ │ │ │ │ ├── MBHistoryScrollBar.tjs │ │ │ │ │ ├── MBHistoryScrollPeg.tjs │ │ │ │ │ └── MBHistoryScrollPane.tjs │ │ │ │ │ ├── MBContextMenu.tjs │ │ │ │ │ ├── MBControlPanelContainer.tjs │ │ │ │ │ ├── MBPlayTimeCounter.tjs │ │ │ │ │ ├── MBBookMarkStore.tjs │ │ │ │ │ ├── userconf │ │ │ │ │ ├── MBControllPanelBasicUI.tjs │ │ │ │ │ └── MBCharSpeedTestLayer.tjs │ │ │ │ │ ├── MBActionCanceller.tjs │ │ │ │ │ ├── MBQuickSave.tjs │ │ │ │ │ └── MBFocusController.tjs │ │ │ ├── ui │ │ │ │ ├── MBSystemClickWaitLayer.tjs │ │ │ │ ├── MBToolManualLayer.tjs │ │ │ │ ├── MBEditLayer.tjs │ │ │ │ ├── MBAnimationButton.tjs │ │ │ │ ├── MBComponentLayer.tjs │ │ │ │ ├── MBSelectItemForFile.tjs │ │ │ │ ├── MBPagingUnit.tjs │ │ │ │ ├── MBSelectItem.tjs │ │ │ │ ├── MBButton.tjs │ │ │ │ └── MBSystemLayer.tjs │ │ │ ├── StandBy.tjs │ │ │ ├── Util.tjs │ │ │ └── MercuryBlue.tjs │ │ ├── MenuSettings.tjs │ │ ├── Preferences.tjs │ │ └── Ham.tjs │ ├── LineBreak.asd │ ├── PageBreak.asd │ ├── Plugin.tjs │ ├── UpdateConfig.tjs │ ├── Utils.tjs │ ├── YesNoDialog.tjs │ ├── CheckBoxLayer.tjs │ ├── SE.tjs │ ├── Initialize.tjs │ ├── Movie.tjs │ ├── ButtonLayer.tjs │ ├── Menus.tjs │ └── DefaultMover.tjs └── startup.tjs └── README.md /data/bgm/~このファイルは削除してかまいません~.txt: -------------------------------------------------------------------------------- 1 | このファイルは削除してかまいません。 -------------------------------------------------------------------------------- /data/image/~このファイルは削除してかまいません~.txt: -------------------------------------------------------------------------------- 1 | このファイルは削除してかまいません。 -------------------------------------------------------------------------------- /data/others/~このファイルは削除してかまいません~.txt: -------------------------------------------------------------------------------- 1 | このファイルは削除してかまいません。 -------------------------------------------------------------------------------- /data/rule/~このファイルは削除してかまいません~.txt: -------------------------------------------------------------------------------- 1 | このファイルは削除してかまいません。 -------------------------------------------------------------------------------- /data/sound/~このファイルは削除してかまいません~.txt: -------------------------------------------------------------------------------- 1 | このファイルは削除してかまいません。 -------------------------------------------------------------------------------- /data/video/~このファイルは削除してかまいません~.txt: -------------------------------------------------------------------------------- 1 | このファイルは削除してかまいません。 -------------------------------------------------------------------------------- /data/bgimage/~このファイルは削除してかまいません~.txt: -------------------------------------------------------------------------------- 1 | このファイルは削除してかまいません。 -------------------------------------------------------------------------------- /data/fgimage/~このファイルは削除してかまいません~.txt: -------------------------------------------------------------------------------- 1 | このファイルは削除してかまいません。 -------------------------------------------------------------------------------- /data/scenario/1.ks: -------------------------------------------------------------------------------- 1 | [wait time=200] 2 | *start|スタート 3 | [cm] 4 | こんにちは。 5 | -------------------------------------------------------------------------------- /data/system/check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/check.png -------------------------------------------------------------------------------- /data/system/LineBreak.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/LineBreak.png -------------------------------------------------------------------------------- /data/system/PageBreak.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/PageBreak.png -------------------------------------------------------------------------------- /data/system/LineBreak_a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/LineBreak_a.png -------------------------------------------------------------------------------- /data/system/PageBreak_a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/PageBreak_a.png -------------------------------------------------------------------------------- /data/system/Ham/assets/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/menu.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bt_cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bt_cancel.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bt_return.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bt_return.png -------------------------------------------------------------------------------- /data/system/Ham/assets/btDialogNo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/btDialogNo.png -------------------------------------------------------------------------------- /data/system/Ham/assets/btDialogYes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/btDialogYes.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/1.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/2.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/3.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/4.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/5.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/6.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/7.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/ch1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/ch1.png -------------------------------------------------------------------------------- /data/system/Ham/assets/btDialogClose.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/btDialogClose.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bt_return_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bt_return_dark.png -------------------------------------------------------------------------------- /data/system/Ham/assets/history/bt_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/history/bt_up.png -------------------------------------------------------------------------------- /data/system/Ham/assets/history/title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/history/title.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/title.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/bt_trash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/bt_trash.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/icon_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/icon_new.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/sect01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/sect01.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/sect02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/sect02.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/sect03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/sect03.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/sect04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/sect04.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/sect05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/sect05.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/sect06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/sect06.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/sect07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/sect07.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/sect08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/sect08.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/sect09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/sect09.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/sect10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/sect10.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/ti_load.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/ti_load.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/ti_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/ti_save.png -------------------------------------------------------------------------------- /data/system/Ham/assets/history/bt_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/history/bt_down.png -------------------------------------------------------------------------------- /data/system/Ham/assets/history/slide_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/history/slide_bar.png -------------------------------------------------------------------------------- /data/system/Ham/assets/history/slide_peg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/history/slide_peg.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/blink_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/blink_on.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/ch_check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/ch_check.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/console.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/background.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/cbox_lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/cbox_lock.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/img_nodata.tlg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/img_nodata.tlg -------------------------------------------------------------------------------- /data/system/Ham/assets/history/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/history/background.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/1_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/1_checked.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/2_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/2_checked.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/3_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/3_checked.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/4_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/4_checked.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/5_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/5_checked.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/6_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/6_checked.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/7_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/7_checked.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/audio_mute.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/audio_mute.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/background.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/blink_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/blink_off.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/bg_pagebutton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/bg_pagebutton.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/bt_quickload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/bt_quickload.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/bt_quicksave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/bt_quicksave.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/sect01_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/sect01_active.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/sect02_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/sect02_active.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/sect03_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/sect03_active.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/sect04_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/sect04_active.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/sect05_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/sect05_active.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/sect06_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/sect06_active.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/sect07_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/sect07_active.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/sect08_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/sect08_active.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/sect09_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/sect09_active.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/sect10_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/sect10_active.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/ti_pagebutton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/ti_pagebutton.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/audio_fader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/audio_fader.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/console_noqs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/console_noqs.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/qs_withdialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/qs_withdialog.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/sectionbutton.tlg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/sectionbutton.tlg -------------------------------------------------------------------------------- /data/system/Ham/assets/history/slide_bar_short.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/history/slide_bar_short.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/audio_largeicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/audio_largeicon.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/audio_smallicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/audio_smallicon.png -------------------------------------------------------------------------------- /data/system/Ham/assets/bookmark/cbox_lock_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/bookmark/cbox_lock_checked.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/audio_fader_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/audio_fader_button.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/audio_mute_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/audio_mute_checked.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/blink_off_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/blink_off_checked.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/blink_on_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/blink_on_checked.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/qs_withoutdialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/qs_withoutdialog.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/qs_withdialog_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/qs_withdialog_checked.png -------------------------------------------------------------------------------- /data/system/Ham/assets/userconf/qs_withoutdialog_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krkrz/kag3_ham/HEAD/data/system/Ham/assets/userconf/qs_withoutdialog_checked.png -------------------------------------------------------------------------------- /data/startup.tjs: -------------------------------------------------------------------------------- 1 | // startup.tjs - スタートアップスクリプト 2 | // Copyright (C) 2001, W.Dee 改変・配布は自由です 3 | 4 | @if (kirikiriz) 5 | property _dummyProp { getter {} setter (v) {} } 6 | with(Window) { 7 | &.innerSunken = &_dummyProp; 8 | &.showScrollBars = &_dummyProp; 9 | } 10 | 11 | Plugins.link("menu.dll"); 12 | Plugins.link("KAGParser.dll"); 13 | @endif 14 | 15 | // このスクリプトは一番最初に実行されるスクリプトです 16 | Scripts.execStorage("system/Initialize.tjs"); // system/Initialize.tjs を実行 17 | -------------------------------------------------------------------------------- /data/scenario/first.ks: -------------------------------------------------------------------------------- 1 | ;=============================================================================== 2 | ; 最初に読み込まれるシナリオファイル 3 | ;=============================================================================== 4 | 5 | [wait time=200] 6 | 7 | ;=============================================================================== 8 | ; この辺りにマクロ定義を記述すると良いでしょう 9 | 10 | 11 | 12 | ; マクロ定義ここまで 13 | ;=============================================================================== 14 | 15 | ; タイトル画面のサンプルシナリオへ 16 | [jump storage="title.ks"] 17 | -------------------------------------------------------------------------------- /data/system/Ham/Base/MBObject.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | Base/MBObject.tjs 3 | 4 | Ham拡張(MercuryBlue)システムで使用する各オブジェクトの基底クラスです。 5 | *******************************************************************************/ 6 | 7 | 8 | class MBObject 9 | { 10 | var window; 11 | 12 | function MBObject(win) 13 | { 14 | window = win; 15 | } 16 | 17 | function finalize() 18 | { 19 | } 20 | 21 | //-------------------------------------------------------------------------- 22 | 23 | function save() 24 | { 25 | var dict = %[]; 26 | 27 | return dict; 28 | } 29 | 30 | function load(dict) 31 | { 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /data/system/Ham/Base/modules/system/bookmark/MBSaveSlotButton.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | mb/system/bookmark/MBSaveSlotButton.tjs 3 | *******************************************************************************/ 4 | 5 | 6 | class MBSaveSlotButton extends MBButton 7 | { 8 | function MBSaveSlotButton(window, parent) 9 | { 10 | super.MBButton(...); 11 | } 12 | 13 | function finalize() 14 | { 15 | super.finalize(...); 16 | } 17 | 18 | function onMouseDown(x, y, button, shift) 19 | { 20 | if (button == mbRight) { 21 | parent.onEscapeKeyDown(); 22 | return; 23 | } 24 | 25 | super.onMouseDown(...); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /data/system/Ham/Base/modules/system/cmenu/MBContextMenuButton.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | system_mb/mb/system/cmenu/MBContextMenuButton.tjs 3 | *******************************************************************************/ 4 | 5 | 6 | class MBContextMenuButton extends MBButton 7 | { 8 | var owner; 9 | 10 | 11 | function MBContextMenuButton(win, par) 12 | { 13 | // コンストラクタ 14 | 15 | super.MBButton(win, par); 16 | 17 | owner = parent; 18 | } 19 | 20 | function onMouseDown(x, y, button, shift) 21 | { 22 | // マウスが押された 23 | 24 | if (button == mbRight) 25 | { 26 | owner.close(); 27 | return; 28 | } 29 | 30 | super.onMouseDown(...); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /data/system/LineBreak.asd: -------------------------------------------------------------------------------- 1 | @loadcell 2 | @loop 3 | ; 4 | @macro name=copyone 5 | @copy dx=0 dy=0 sx=%x sy=0 sw=24 sh=24 6 | @wait time=50 7 | @endmacro 8 | ; 9 | *start 10 | @copyone x=0 11 | @copyone x=24 12 | @copyone x=48 13 | @copyone x=72 14 | @copyone x=96 15 | @copyone x=120 16 | @copyone x=144 17 | @copyone x=168 18 | @copyone x=192 19 | @copyone x=216 20 | @copyone x=240 21 | @copyone x=264 22 | @copyone x=288 23 | @copyone x=312 24 | @copyone x=336 25 | ; 26 | @copyone x=360 27 | ; 28 | @copyone x=336 29 | @copyone x=312 30 | @copyone x=288 31 | @copyone x=264 32 | @copyone x=240 33 | @copyone x=216 34 | @copyone x=192 35 | @copyone x=168 36 | @copyone x=144 37 | @copyone x=120 38 | @copyone x=96 39 | @copyone x=72 40 | @copyone x=48 41 | @copyone x=24 42 | @jump target=*start 43 | -------------------------------------------------------------------------------- /data/system/PageBreak.asd: -------------------------------------------------------------------------------- 1 | @loadcell 2 | @loop 3 | ; 4 | @macro name=copyone 5 | @copy dx=0 dy=0 sx=%x sy=0 sw=24 sh=24 6 | @wait time=50 7 | @endmacro 8 | ; 9 | *start 10 | @copyone x=0 11 | @copyone x=24 12 | @copyone x=48 13 | @copyone x=72 14 | @copyone x=96 15 | @copyone x=120 16 | @copyone x=144 17 | @copyone x=168 18 | @copyone x=192 19 | @copyone x=216 20 | @copyone x=240 21 | @copyone x=264 22 | @copyone x=288 23 | @copyone x=312 24 | @copyone x=336 25 | ; 26 | @copyone x=360 27 | ; 28 | @copyone x=336 29 | @copyone x=312 30 | @copyone x=288 31 | @copyone x=264 32 | @copyone x=240 33 | @copyone x=216 34 | @copyone x=192 35 | @copyone x=168 36 | @copyone x=144 37 | @copyone x=120 38 | @copyone x=96 39 | @copyone x=72 40 | @copyone x=48 41 | @copyone x=24 42 | @jump target=*start 43 | -------------------------------------------------------------------------------- /data/system/Ham/assets/kag/HamRoutines.ks: -------------------------------------------------------------------------------- 1 | ;=============================================================================== 2 | ; assets/HamRoutines.ks 3 | ; 4 | ; 共通サブルーチン集 5 | ;=============================================================================== 6 | 7 | ;------------------------------------------------------------------------------ 8 | ; コンテクストメニューの呼び出しラッパー 9 | 10 | *rclick_wrapper 11 | [locksnapshot] 12 | [eval exp="SystemManager.callContextMenu('default')"] 13 | [waittrig name="end_contextmenu"] 14 | [unlocksnapshot] 15 | [call target="*check_closestate"] 16 | [return] 17 | 18 | ;------------------------------------------------------------------------------- 19 | ; 終了・リセットをチェック 20 | *check_closestate 21 | [if exp="tf.gotoreset"] 22 | [eval exp="delete tf.gotoreset;"] 23 | [gotostart ask="true"] 24 | [endif] 25 | [if exp="tf.gotoexit"] 26 | [eval exp="delete tf.gotoexit"] 27 | [close] 28 | [endif] 29 | [return] 30 | -------------------------------------------------------------------------------- /data/system/Ham/Base/modules/system/history/MBHistoryScrollBar.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | mb/system/history/MBHistoryScrollBar.tjs 3 | *******************************************************************************/ 4 | 5 | 6 | class MBHistoryScrollBar extends MBComponentLayer 7 | { 8 | var imagePath = "history/slide_bar"; 9 | 10 | function MBHistoryScrollBar(win, par) 11 | { 12 | // コンストラクタ 13 | 14 | super.MBComponentLayer(win, par); 15 | 16 | init(); 17 | } 18 | 19 | function finalize() 20 | { 21 | // ファイナライザ 22 | 23 | super.finalize(...); 24 | } 25 | 26 | //-------------------------------------------------------------------------- 27 | 28 | function init() 29 | { 30 | // イニシャライザ 31 | 32 | loadImages(%[storage : sysfunc.getPathImage(imagePath)]); 33 | //setPos(18, 0); 34 | hitType = htMask; 35 | hitThreshold = 256; // 透過 36 | visible = true; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /data/system/Ham/Base/modules/system/cmenu/MBContextUnderLayer.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | system_mb/mb/system/cmenu/MBContextUnderLayer.tjs 3 | *******************************************************************************/ 4 | 5 | 6 | class MBContextUnderLayer extends KAGLayer 7 | { 8 | var owner; 9 | 10 | function MBContextUnderLayer(win, par, own) 11 | { 12 | // コンストラクタ 13 | 14 | super.KAGLayer(win, par); 15 | 16 | owner = own; 17 | name = 'コンテクストメニュー下敷きレイヤ'; 18 | 19 | setSize(win.fore.base.width, win.fore.base.height); 20 | setPos(0, 0); 21 | 22 | hitType = htMask; 23 | hitThreshold = 0; 24 | absolute = MBLayerAbs.contextMenu; 25 | visible = true; 26 | enabled = true; 27 | } 28 | 29 | function finalize() 30 | { 31 | // ファイナライザ 32 | 33 | super.finalize(...); 34 | } 35 | 36 | //-------------------------------------------------------------------------- 37 | 38 | function onMouseDown(button, shift) 39 | { 40 | // クリックされたら問答無用でコンテクストメニューを閉じる 41 | 42 | owner.close(); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /data/system/Ham/Base/modules/system/cmenu/MBContextMenuItem.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | system_mb/mb/system/cmenu/MBContextMenuItem.tjs 3 | *******************************************************************************/ 4 | 5 | 6 | class MBContextMenuItem extends MBSelectItem 7 | { 8 | var owner; 9 | 10 | function MBContextMenuItem(win, par, str) 11 | { 12 | // コンストラクタ 13 | 14 | super.MBSelectItem(win, par, str); 15 | 16 | owner = parent; 17 | name = 'メニューアイテム'; 18 | visible = true; 19 | opacity = 255; 20 | focusable = true; 21 | enabled = true; 22 | 23 | //width = 147; 24 | width = parent.defWidth - 24; 25 | } 26 | 27 | function finalize() 28 | { 29 | // ファイナライザ 30 | 31 | super.finalize(...); 32 | } 33 | 34 | //-------------------------------------------------------------------------- 35 | 36 | function onMouseDown(x, y, button, shift) 37 | { 38 | // マウスが押された 39 | 40 | if (button == mbRight) 41 | { 42 | owner.hide(); 43 | return; 44 | } 45 | 46 | super.onMouseDown(...); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /data/system/Ham/Base/ui/MBSystemClickWaitLayer.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | system_mb/ui/MBSystemClickWaitLayer.tjs 3 | *******************************************************************************/ 4 | 5 | class MBSystemClickWaitLayer extends MBComponentLayer 6 | { 7 | var owner; 8 | 9 | 10 | function MBSystemClickWaitLayer(win, own) 11 | { 12 | // コンストラクタ 13 | 14 | super.MBComponentLayer(win, win.fore.base); 15 | 16 | setSize(800, 600); 17 | setPos(0, 0); 18 | absolute = MBLayerAbs.sysclickwait; 19 | hitType = htMask; 20 | hitThreshold = 0; // 透過しないこと 21 | visible = false; 22 | focusable = true; 23 | 24 | fillRect(0, 0, 800, 600, 0x00000000); 25 | 26 | owner = own; 27 | } 28 | 29 | function finalize() 30 | { 31 | // ファイナライザ 32 | 33 | super.finalize(...); 34 | } 35 | 36 | 37 | //========================================================================== 38 | 39 | function onMouseDown(x, y, button, shift) 40 | { 41 | // とにかくクリックされたことをオーナーに伝える 42 | 43 | owner.onClickWaitReleased(); 44 | } 45 | 46 | function onKeyDown(key, shift, process) 47 | { 48 | // とにかく(ry 49 | 50 | owner.onClickWaitReleased(); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /data/system/Ham/Base/modules/system/MBContextMenu.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | system_xmb/xmb/system/MBContextMenu.tjs 3 | *******************************************************************************/ 4 | 5 | 6 | class MBContextMenu extends MBObject 7 | { 8 | var objMenuLayer; // メニューレイヤ 9 | var objUnderLayer; // 下敷きレイヤ 10 | 11 | var strCurrentContext = "default"; // どれを呼ぶか(obsolete) 12 | 13 | 14 | function MBContextMenu(win, mod='default') 15 | { 16 | // コンストラクタ 17 | 18 | super.MBObject(win); 19 | 20 | strCurrentContext = mod; 21 | } 22 | 23 | function finalize() 24 | { 25 | // ファイナライザ 26 | 27 | invalidate objUnderLayer if (objUnderLayer !== void); 28 | invalidate objMenuLayer if (objMenuLayer !== void); 29 | 30 | super.finalize(...); 31 | } 32 | 33 | //-------------------------------------------------------------------------- 34 | 35 | function open() 36 | { 37 | // メニューを開く 38 | 39 | objUnderLayer = new MBContextUnderLayer(window, window.fore.base, this); 40 | 41 | objMenuLayer = new MBDefaultContextMenu(window, objUnderLayer, this); 42 | objMenuLayer.show(); 43 | } 44 | 45 | function close() 46 | { 47 | // メニューを閉じる 48 | 49 | objMenuLayer.hide(); 50 | } 51 | } 52 | 53 | -------------------------------------------------------------------------------- /data/system/Ham/Base/ui/MBToolManualLayer.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | system_mb/mb/ui/MBToolManualLayer.tjs 3 | *******************************************************************************/ 4 | 5 | 6 | class MBToolManualLayer extends MBComponentLayer 7 | { 8 | var owner; 9 | 10 | 11 | function MBToolManualLayer(win, par, own) 12 | { 13 | // コンストラクタ 14 | 15 | super.MBComponentLayer(win, par); 16 | owner = own; 17 | 18 | name = "マニュアル"; 19 | 20 | hitType = htMask; 21 | hitThreshold = 0; // 全域不透過 22 | } 23 | 24 | function finalize() 25 | { 26 | // ファイナライザ 27 | 28 | super.finalize(...); 29 | } 30 | 31 | 32 | //========================================================================== 33 | 34 | function hide() 35 | { 36 | visible = false; 37 | } 38 | 39 | //-------------------------------------------------------------------------- 40 | 41 | function onMouseDown(x, y, button, shift) 42 | { 43 | super.onMouseDown(...); 44 | 45 | if (button == mbLeft) { 46 | hide(); 47 | } 48 | } 49 | 50 | //-------------------------------------------------------------------------- 51 | 52 | function onKeyDown(key, shift) 53 | { 54 | super.onKeyDown(...); 55 | 56 | key = SystemManager.convertPadToKey(key); 57 | 58 | if (key == VK_RETURN || key == VK_SPACE) { 59 | hide(); 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 鱧入りKAG3 for 吉里吉里Z 2 | 3 | 本プロジェクトは、KAG3 for 吉里吉里Zからフォークしたプロジェクトです。
4 | KAG3 for 吉里吉里Zは、吉里吉里Zで動くよう最低限の修正を加えられた KAG3 です。 5 | 6 | 鱧入りKAG3 for 吉里吉里Zは、KAG3 for 吉里吉里Zを拡張し、次の機能を持たせたものです: 7 | 8 | * グラフィカルなセーブ/ロード画面 9 | * グラフィカルなコンフィグ画面 10 | * スクロールバーを備えたバックログ機能 11 | * 右クリックまたは画面上のボタンから呼び出せる機能メニュー 12 | * クイックセーブ機能 13 | 14 | KAG3が本来持つ高いカスタマイズ性をなるべく損なわず、かつ、初めて吉里吉里Z/KAG3を扱うユーザーでもそこそこの外観を持つ作品を作れるよう配慮されている感じです。 15 | 16 | これらの機能を本プロジェクトではHam拡張と呼びます。
17 | Ham拡張は、鱧天 for 吉里吉里2 http://hamotem.f-sp.net から上記機能を抜粋し、コードを幾分最適化したものです。
18 | 余談ですが、鱧天の一部が入っているので「鱧入り」KAG3という訳です。 19 | 20 | 鱧天と異なる点はおよそ次のようなものです: 21 | 22 | * 画面サイズをある程度自由に変更可能(800x600以上を推奨)。ただしHD以上にするなら、使用している画像部品のカスタマイズが必要になるでしょう。 23 | * シナリオファイルの配置に制限が無い。ただしシーンスキップ機能は実装されていません。 24 | * 立ち絵の形式に制限が無い。ただし「目パチ」は実装されていません。 25 | * イベントCGファイルの配置に制限が無い。ただしCG鑑賞モードは実装されていません。 26 | * 「どこでもセーブプラグイン」は同梱されていません。 27 | * 鱧天で用意されているマクロ等はごく一部を除き定義されていません。 28 | 29 | 概ねカスタマイズ性というか自由度は鱧天より高いですが、手軽さは鱧天よりも劣ります。
30 | お好みに合わせて使い分けてください。 31 | 32 | 鱧天 for 吉里吉里Zは準備中ですが、鱧天 for 吉里吉里2の文字コードをUTF-8にしたり、KAG3のシステムをKAG3 for 吉里吉里Zに差し替えたりすることで動作します。 33 | 34 | なお、吉里吉里Zではメニューバーが非推奨となっています。
35 | 鱧入りKAG3 for 吉里吉里Zを使用する場合も、配布時はメニューを無効にしておくことをお勧めします。 36 | 37 | メニューバーから呼び出せる機能は八割方上記の機能メニューから呼び出せるようになっています。
38 | 現状呼び出せないのは、フォント変更、前に戻る、このソフトについて、といった辺りです。
39 | このうち「このソフトについて」は近々呼び出せるようにするかもしれません(しないかもしれませんが、多少TJSが書けるなら、呼び出せるようにするのはさほど難しくありません)。 40 | 41 | --- 42 | # KAG3 License 43 | Copyright (C)2001-2009, W.Dee and contributors 改変・配布は自由です 44 | 45 | -------------------------------------------------------------------------------- /data/system/Ham/Base/modules/system/MBControlPanelContainer.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | modules/system/MBControlPanelContainer.tjs 3 | 4 | KAGから環境設定を呼ぶ場合のコンテナオブジェクト 5 | *******************************************************************************/ 6 | 7 | class MBControlPanelContainer extends MBComponentLayer 8 | { 9 | var isNewLayer = false; 10 | var finishTrigger = "end_config_from_kag"; 11 | var objWorker; 12 | 13 | 14 | function MBControlPanelContainer(win, par) 15 | { 16 | // コンストラクタ 17 | 18 | super.MBComponentLayer(win, par); 19 | 20 | width = window.fore.base.width; 21 | height = window.fore.base.height; 22 | absolute = MBLayerAbs.backpack; // セーブ・ロードと同階層 23 | hitType = htMask; 24 | hitThreshold = 255; 25 | visible = true; 26 | name = "環境設定コンテナ"; 27 | 28 | init(); 29 | } 30 | 31 | function finalize() 32 | { 33 | // ファイナライザ 34 | 35 | invalidate objWorker if (objWorker !== void); 36 | 37 | super.finalize(...); 38 | } 39 | 40 | //-------------------------------------------------------------------------- 41 | 42 | function init() 43 | { 44 | // 初期化 45 | 46 | objWorker = new MBControllPanel(window, parent, this); 47 | objWorker.setControllPanel(); 48 | objWorker.show(); 49 | } 50 | 51 | //-------------------------------------------------------------------------- 52 | 53 | function onControllPanelHasGone() 54 | { 55 | // 終了処理 56 | 57 | invalidate objWorker if (objWorker !== void); 58 | SystemManager.acDisactivateCanceller(); 59 | window.trigger(finishTrigger); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /data/system/Ham/Base/ui/MBEditLayer.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | system_mb/ui/MBEditLayer.tjs 3 | *******************************************************************************/ 4 | 5 | 6 | class MBEditLayer extends EditLayer 7 | { 8 | // プロパティ 9 | var refTabTarget; // TABキーを押したときの移動先 10 | var blEscapeEnabled = true; 11 | 12 | var hexBGColor = MBColors.window.border - 0xcc000000; // 背景色 13 | var hexBGOpacity = 0x66; // 背景の透明度 14 | var hexFontColor = MBColors.font.label.noraml; // 文字色 15 | 16 | 17 | function MBEditLayer(win, par) 18 | { 19 | // コンストラクタ 20 | 21 | super.EditLayer(win, par); 22 | 23 | height = 18; 24 | font.height = 14; 25 | font.face = MBFontStyle.face.normal; 26 | //color = 0x004b6d; 27 | Edit_color = hexBGColor; 28 | opacity = 255; 29 | //textColor = MBColors.font.label.normal; 30 | textColor = hexFontColor; 31 | //bgOpacity = 0x66; 32 | bgOpacity = hexBGOpacity; 33 | } 34 | 35 | function finalize() 36 | { 37 | // ファイナライザ 38 | 39 | super.finalize(...); 40 | } 41 | 42 | //-------------------------------------------------------------------------- 43 | 44 | function onKeyDown(key, shift) 45 | { 46 | switch (key) { 47 | case VK_RETURN: 48 | parent.onEditFinish(); 49 | break; 50 | 51 | case VK_TAB: 52 | try { 53 | refTabTarget.getCursorFromManager(); 54 | } 55 | catch {} 56 | break; 57 | 58 | case VK_ESCAPE: 59 | if (blEscapeEnabled) { 60 | parent.onEscapeKeyDown(...); 61 | return; 62 | } 63 | break; 64 | 65 | default: 66 | super.onKeyDown(...); 67 | break; 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /data/system/Ham/Base/modules/system/MBPlayTimeCounter.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | system_mb/mb/system/MBPlayTimeCounter 3 | *******************************************************************************/ 4 | 5 | 6 | class MBPlayTimeCounter 7 | { 8 | var window; // ウィンドウ参照 9 | var timer; // タイマー 10 | 11 | var totalPlayTime; // 総プレイ時間 12 | 13 | function MBPlayTimeCounter(win) 14 | { 15 | // コンストラクタ 16 | 17 | window = win; 18 | 19 | reset(0); 20 | 21 | timer = new Timer(onTimer, ''); 22 | timer.interval = 1000; 23 | //timer.enabled = true; 24 | } 25 | 26 | function finalize() 27 | { 28 | // ファイナライザ 29 | 30 | if (timer !== void) { 31 | timer.enabled = false; 32 | invalidate timer; 33 | } 34 | } 35 | 36 | function reset(num=0) 37 | { 38 | // numでカウンタをリセット 39 | 40 | totalPlayTime = num; 41 | } 42 | 43 | function onTimer() 44 | { 45 | // タイマイベント 46 | // 総プレイ時間を1秒ごとに計算。 47 | 48 | totalPlayTime += 1; 49 | window.pcflags.totalPlayTime = totalPlayTime; 50 | } 51 | 52 | function getTotalPlayTime() 53 | { 54 | // 総プレイ時間を時刻フォーマットの文字列で返す 55 | 56 | var pt = totalPlayTime; 57 | 58 | var h = pt \ (3600); 59 | pt -= 3600 * h; 60 | 61 | var m = pt \ 60; 62 | pt -= m * 60; 63 | 64 | return "%02d:%02d:%02d".sprintf(h, m, pt); 65 | } 66 | 67 | //-------------------------------------------------------------------------- 68 | 69 | function save() 70 | { 71 | // セーブ 72 | 73 | return totalPlayTime; 74 | } 75 | 76 | function load(sec) 77 | { 78 | // ロード 79 | 80 | try { 81 | reset(sec); 82 | } 83 | catch { 84 | dm(" カウンタは0にリセットされます。"); 85 | reset(0); 86 | } 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /data/scenario/title.ks: -------------------------------------------------------------------------------- 1 | ;=============================================================================== 2 | ; タイトル画面のサンプルシナリオ 3 | ;=============================================================================== 4 | 5 | [wait time=200] 6 | *title|タイトル 7 | [startanchor] 8 | [clearvar] 9 | [store enabled="false"] 10 | [history enabled="false" output="false"] 11 | 12 | [delay speed="nowait"] 13 | [link target="*start"]スタート[endlink][r] 14 | [link target="*load"]ロード[endlink][r] 15 | [if exp='Storages.isExistentStorage("%s/%s%d.bmp".sprintf(kag.saveDataLocation, kag.dataName, MBSystemPref.quickSaveBookMark))'] 16 | [link target="*continue"]コンティニュー[endlink][r] 17 | [endif] 18 | [link target="*config"]コンフィグ[endlink][r] 19 | [link target="*exit"]終了[endlink][r] 20 | [delay speed="user"] 21 | [s] 22 | 23 | ;------------------------------------------------------------------------------- 24 | ; 最初からスタート 25 | *start 26 | [cm] 27 | [history enabled="true" output="true"] 28 | [jump storage="1.ks"] 29 | [s] 30 | 31 | ;------------------------------------------------------------------------------- 32 | ; プレイデータをロード 33 | *load 34 | [cm] 35 | [eval exp="SystemManager.startPlayDataStorager('load')"] 36 | [waittrig name="CLOSE_BOOKMARK_WINDOW"] 37 | [jump target="*title"] 38 | [s] 39 | 40 | ;------------------------------------------------------------------------------- 41 | ; クイックロード 42 | *continue 43 | [cm] 44 | [load place="&MBSystemPref.quickSaveBookMark" ask="false"] 45 | [s] 46 | 47 | ;------------------------------------------------------------------------------- 48 | ; 環境設定 49 | *config 50 | [cm] 51 | [iscript] 52 | tf.config = new MBControlPanelContainer(kag, kag.fore.base); 53 | MBSystem.addTempObject(tf.config); 54 | [endscript] 55 | [waittrig name="end_config_from_kag"] 56 | [eval exp="MBSystem.removeTempObject(tf.config);"] 57 | [jump target="*title"] 58 | [s] 59 | 60 | ;------------------------------------------------------------------------------- 61 | ; ゲーム終了 62 | *exit 63 | [close] 64 | [unlocklink] 65 | [s] 66 | -------------------------------------------------------------------------------- /data/system/Plugin.tjs: -------------------------------------------------------------------------------- 1 | // Plugin.tjs - KAG プラグイン関連 2 | // Copyright (C)2001-2009, W.Dee and contributors 改変・配布は自由です 3 | 4 | class KAGPlugin 5 | { 6 | // KAG 用プラグインの基本クラス 7 | // onXXXX で始まる各ハンドラは、オーバーライドしても 8 | // このクラスのハンドラを呼ぶ必要はない ( なにもしないため ) 9 | 10 | function KAGPlugin() 11 | { 12 | } 13 | 14 | function finalize() 15 | { 16 | } 17 | 18 | 19 | function onStore(f, elm) 20 | { 21 | // 栞を保存する際に呼ばれる 22 | // f = 保存先の栞データ ( Dictionary クラスのオブジェクト ) 23 | // elm = tempsave 時のオプション ( 現在は常に void ) 24 | } 25 | 26 | function onRestore(f, clear, elm) 27 | { 28 | // 栞を読み出すときに呼ばれる 29 | // f = 読み込む栞データ ( Dictionary クラスのオブジェクト ) 30 | // clear = メッセージレイヤをクリアするか ( tempload の時のみ false ) 31 | // elm = tempload 時のオプション ( tempload でない場合は 常に void, 32 | // tempload の時は Dictionary クラスのオブジェクト ) 33 | } 34 | 35 | function onStableStateChanged(stable) 36 | { 37 | // 安定 ( s l p タグで停止中 ) または 走行中 ( それ以外 ) 38 | // の状態が変化したときに呼ばれる 39 | // stable = 安定の状態に true, それ以外の場合に false 40 | } 41 | 42 | function onMessageHiddenStateChanged(hidden) 43 | { 44 | // 右クリックなどでメッセージレイヤが隠されたり、または 45 | // その状態から抜ける時に呼ばれる 46 | // hidden = メッセージが隠された場合に true, 現れた場合に false 47 | } 48 | 49 | function onCopyLayer(toback) 50 | { 51 | // backlay タグ / forelay タグがすべてのレイヤに対して実行される時、 52 | // あるいは layer=base chidlren=true exchange=false のトランジションの終了時に、 53 | // 裏画面の内容を表画面にコピーする 54 | // 必要が発生すると呼び出される 55 | // toback = 表画面の内容を裏画面にコピーする時に true, 56 | // 裏画面の内容を表画面にコピーするときに false 57 | // layer=base children=true のトランジション終了時には toback = false で呼ばれる。 58 | } 59 | 60 | function onExchangeForeBack() 61 | { 62 | // layer=base children=true のトランジションの終了時に呼ばれ、 63 | // 表レイヤと裏レイヤの情報を交換する目的で呼ばれる 64 | // この時点ですでにレイヤのツリー構造は入れ替わっているので、 65 | // 通常、ここでは、ツリー構造の入れ替えを行うと情報が矛盾するもの 66 | // ( レイヤの名前とか、レイヤへの参照とか ) を裏画面と面画面の間で入れ替える 67 | // トランジション終了時の onCopyLayer はこのイベントより前に呼ばれるので 68 | // 注意 69 | } 70 | 71 | function onSaveSystemVariables() 72 | { 73 | // システム変数に情報が保存され時に呼ばれる 74 | // このタイミングで kag.scflags に情報を書き込めば 75 | // 確実にシステム変数に情報を書くことができる 76 | } 77 | } 78 | 79 | -------------------------------------------------------------------------------- /data/system/Ham/Base/modules/system/history/MBHistoryScrollPeg.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | mb/system/history/MBHistoryScrollPeg.tjs 3 | スクロールバーのつまみ 4 | *******************************************************************************/ 5 | 6 | 7 | class MBHistoryScrollPeg extends MBComponentLayer 8 | { 9 | var imagePath = "history/slide_peg"; 10 | 11 | var intMinStartLine = 0; // 最小開始行 12 | var intMaxStartLine; // 最大開始行 13 | 14 | var blDragging; // ドラッグ中フラグ 15 | 16 | 17 | function MBHistoryScrollPeg(win, par) 18 | { 19 | // コンストラクタ 20 | 21 | super.MBComponentLayer(win, par); 22 | 23 | init(); 24 | } 25 | 26 | function finalize() 27 | { 28 | // ファイナライザ 29 | 30 | super.finalize(...); 31 | } 32 | 33 | //-------------------------------------------------------------------------- 34 | 35 | function init() 36 | { 37 | // イニシャライザ 38 | 39 | loadImages(%[storage : sysfunc.getPathImage(imagePath)]); 40 | setPos(0, 0); 41 | 42 | hitType = htMask; 43 | hitThreshold = 0; 44 | visible = true; 45 | } 46 | 47 | //-------------------------------------------------------------------------- 48 | 49 | function setPositionTo(y) 50 | { 51 | if (y < 0) { 52 | y = 0; 53 | } 54 | else if (y > parent.intMaxPegTop) { 55 | y = parent.intMaxPegTop; 56 | } 57 | 58 | top = y; 59 | } 60 | 61 | 62 | //========================================================================== 63 | 64 | function onMouseDown(x, y, button, shift) 65 | { 66 | if (button == mbLeft) { 67 | hint = ""; 68 | blDragging = true; 69 | } 70 | } 71 | 72 | function onMouseUp(x, y, button, shift) 73 | { 74 | if (button == mbLeft) { 75 | blDragging = false; 76 | } 77 | } 78 | 79 | function onMouseMove(x, y, shift) 80 | { 81 | if (!blDragging) { 82 | return; 83 | } 84 | 85 | setPositionTo(parent.cursorY - height * 0.5); 86 | parent.scrollByBarClick(top); 87 | } 88 | 89 | function onMouseEnter() 90 | { 91 | cursor = crHandPoint; 92 | } 93 | 94 | function onMouseLeave() 95 | { 96 | cursor = crDefault; 97 | blDragging = false; 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /data/system/Ham/Base/ui/MBAnimationButton.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | system_mb/ui/MBAnimationButton.tjs 3 | *******************************************************************************/ 4 | 5 | 6 | class MBAnimationButton extends MBButton 7 | { 8 | var layGraph = []; // 画像を置くレイヤ 9 | 10 | function MBAnimationButton(win, par) 11 | { 12 | // コンストラクタ 13 | 14 | super.MBButton(win, par); 15 | } 16 | 17 | function finalize() 18 | { 19 | // ファイナライザ 20 | 21 | var i; 22 | for (i=0; i') + 1); 78 | 79 | if(isPrimary) { 80 | elm.mode = "rect"; // レイヤモードを変えられると困るので 81 | elm.visible = true; 82 | } 83 | 84 | else if (filename.indexOf('bgimage/') == 0) { 85 | filename = sysfunc.getPathBGImage(filename.substring(8)); 86 | } 87 | else if (filename.indexOf('fgimage/') == 0) { 88 | filename = sysfunc.getPathCharImage(filename.substring(8)); 89 | } 90 | else if (filename.indexOf('image/') == 0) { 91 | filename = sysfunc.getPathImage(filename.substring(6)); 92 | } 93 | 94 | //dm(filename); 95 | elm.storage = filename; 96 | global.GraphicLayer.loadImages(elm); 97 | 98 | dm(" ゲームフォルダのパスが変更になったため、画像読込パスを再設定しました。"); 99 | } 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /data/system/Ham/Base/modules/system/MBBookMarkStore.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | system_mb/mb/system/MBBookMarkStore.tjs 3 | *******************************************************************************/ 4 | 5 | 6 | class MBBookMarkStore extends MBBookMarkRestore 7 | { 8 | // プロパティ 9 | var strTitleImage = 'bookmark/ti_save'; 10 | 11 | var blForceActivate = true; // とにかくパネルを選べるようにするかどうか 12 | 13 | 14 | // 管理オブジェクト 15 | 16 | 17 | // その他メンバ変数 18 | 19 | 20 | function MBBookMarkStore(win, par) 21 | { 22 | // コンストラクタ 23 | 24 | super.MBBookMarkRestore(win, par); 25 | name = 'データセーバー'; 26 | } 27 | 28 | function finalize() 29 | { 30 | // ファイナライザ 31 | 32 | super.finalize(...); 33 | } 34 | 35 | 36 | //========================================================================== 37 | // 動作関連 38 | 39 | function makeConfirmation(sender) 40 | { 41 | // 確認を行う 42 | 43 | intTempTarget = sender.intDataNumber; 44 | 45 | // 使用済み領域の場合 46 | if (sender.blHaveContent) { 47 | // ロックされていたら警告を表示 48 | if (window.bookMarkProtectedStates[intTempTarget]) { 49 | showConfirmation('locked'); 50 | } 51 | else { 52 | showConfirmation('over'); 53 | } 54 | } 55 | 56 | // 未使用領域の場合 57 | else { 58 | showConfirmation('new'); 59 | } 60 | } 61 | 62 | //-------------------------------------------------------------------------- 63 | 64 | function showConfirmation(type) 65 | { 66 | // ダイアログを表示 67 | 68 | var strConfirm; 69 | 70 | invalidate objDialog if (objDialog !== void); 71 | 72 | switch (type) { 73 | case 'new': 74 | strConfirm = "No.%dにセーブします。\nよろしいですか?".sprintf(intTempTarget + 1); 75 | break; 76 | 77 | case 'over': 78 | strConfirm = "No.%dには既にデータが存在します。\n上書きしてもよろしいですか?".sprintf(intTempTarget + 1); 79 | break; 80 | 81 | case 'locked': 82 | strConfirm = "No.%dはロックされています。\n他の欄を選択してください。".sprintf(intTempTarget + 1); 83 | objDialog = new MBPseudyNoticeDialog(window, window.fore.base, strConfirm); 84 | objDialog.show(); 85 | return; 86 | break; 87 | 88 | default: 89 | return; 90 | } 91 | 92 | objDialog = new MBPseudyYesNoDialog(window, window.fore.base, this, strConfirm); 93 | objDialog.show(); 94 | } 95 | 96 | //-------------------------------------------------------------------------- 97 | 98 | function doMyWork() 99 | { 100 | // 動作を行う 101 | 102 | sf.backpack_lastused = intTempTarget; 103 | f.current_savenum = intTempTarget; 104 | 105 | window.saveBookMark(intTempTarget); 106 | updateBookMarkButtons(); 107 | 108 | invalidate objDialog if (objDialog !== void); 109 | 110 | var str = "セーブが完了しました。"; 111 | objDialog = new MBPseudyNoticeDialog(window, window.fore.base, str); 112 | objDialog.show(); 113 | } 114 | } 115 | -------------------------------------------------------------------------------- /data/system/UpdateConfig.tjs: -------------------------------------------------------------------------------- 1 | // UpdateConfig.tjs - Config.tjs を引き継ぐためのスクリプト 2 | // Copyright (C)2001-2009, W.Dee and contributors 改変・配布は自由です 3 | 4 | // Config.~new ファイルは新しい Config.tjs ファイル。 5 | // Config.tjs ファイル中のバージョン情報と KAG のバージョン情報が 6 | // 一致しない場合にこのスクリプトファイルが呼ばれる。 7 | 8 | if(Storages.isExistentStorage("Config.~new")) 9 | { 10 | // Config.~new ファイルがあった 11 | 12 | // Config.tjs を読み込む 13 | var settings = %[]; // 設定情報を格納する辞書配列 14 | var oldconfig = [].load("Config.tjs"); //Config.tjs を読み込む 15 | var pattern = /^;\s*(.*?)\s*=(.*)$/; // 設定行を認識するための正規表現パターン 16 | var pattern_adds = /^\/\/\[start-(.*?)-additionals\]$/; 17 | for(var i = 0; i < oldconfig.count; i++) 18 | { 19 | var matched = pattern.match(oldconfig[i]); 20 | if(matched.count) settings[matched[1]] = matched[2]; 21 | matched = pattern_adds.match(oldconfig[i]); 22 | if(matched.count) 23 | { 24 | var end_mark = "//[end-" + matched[1] + "-additionals]"; 25 | i++; 26 | var content = ''; 27 | while(oldconfig[i] != end_mark && i < oldconfig.count) 28 | { 29 | content += oldconfig[i] + "\n"; 30 | i++; 31 | } 32 | settings["additional" + matched[1]] = content; 33 | } 34 | } 35 | 36 | // バージョン情報の書き込み 37 | settings['global.config_version'] = " \"" + kagVersion + "\"; // この行を消さないでください"; 38 | 39 | // Config.~new の読み込みと設定の引継ぎ 40 | var newconfig = [].load("Config.~new"); // Config.~new を読み込み 41 | var lines = ''; 42 | for(var i = 0; i < newconfig.count; i++) 43 | { 44 | var matched = pattern.match(newconfig[i]); 45 | var matched_adds = pattern_adds.match(newconfig[i]); 46 | if(matched.count) 47 | { 48 | var setting_name = matched[1]; 49 | var setting = settings[setting_name]; 50 | if(setting !== void) 51 | lines += ";" + setting_name + " =" + setting + "\n"; 52 | else 53 | lines += newconfig[i] + "\n"; 54 | } 55 | else if(matched_adds.count) 56 | { 57 | var setting_name = "additional" + matched_adds[1]; 58 | var end_mark = "//[end-" + matched_adds[1] + "-additionals]"; 59 | var setting = settings[setting_name]; 60 | if(setting !== void) 61 | { 62 | lines += "//[start-" + matched_adds[1] + "-additionals]\n" + 63 | setting + end_mark + "\n"; 64 | i++; 65 | while(newconfig[i] != end_mark && i < newconfig.count) i++; 66 | } 67 | else 68 | { 69 | lines += newconfig[i] + "\n"; 70 | } 71 | } 72 | else 73 | { 74 | lines += newconfig[i] + "\n"; 75 | } 76 | } 77 | 78 | // Pad の表示 79 | global.configPad = new Pad(); 80 | global.configPad.text = lines; 81 | global.configPad.color = 0; 82 | global.configPad.title = "Config.tjs"; 83 | global.configPad.fileName = Storages.getLocalName(Storages.getPlacedPath("Config.tjs")); 84 | global.configPad.visible = true; 85 | 86 | // 通知 87 | System.inform("設定内容を古い Config.tjs から引き継ぎました。\n" 88 | "“Config.tjs”ウィンドウ上に表示されている内容でよければ、同ウィンドウ上で\n" 89 | "右クリックをして「保存」を選択し、Config.tjs を保存してください。\n" 90 | "Config.~new ファイルは削除してかまいません。"); 91 | 92 | // 新しい config の読み込み直し 93 | Scripts.exec(lines); 94 | } 95 | -------------------------------------------------------------------------------- /data/system/Ham/Base/StandBy.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | Base/StandBy.tjs 3 | 4 | Ham拡張(MercuryBlue)システムを起動します。 5 | *******************************************************************************/ 6 | 7 | 8 | // 統括オブジェクトを作ってKAGに挿す 9 | var MBSystem = new MercuryBlue(kag); 10 | kag.addPlugin(MBSystem); 11 | 12 | kag.leftClickHook.add(MBSystem.cancelKBOperationFlagOnMouseClick); 13 | kag.rightClickHook.add(MBSystem.cancelKBOperationFlagOnMouseClick); 14 | 15 | 16 | // システムマネージャをグローバルに参照しておく 17 | var SystemManager = MBSystem.objSystemManager; 18 | 19 | kag.keyDownHook.add(SystemManager.objFocusController.onKeyDown); 20 | 21 | 22 | // クイックセーブメニューオブジェクト 23 | var _QuickSaves = %[ 24 | fore : new MBQuickSave(kag, kag.fore.base), 25 | back : new MBQuickSave(kag, kag.back.base) 26 | ]; 27 | 28 | if (!MBSystemPref.enableQuickSave) { 29 | _QuickSaves.fore.setActiveness(false); 30 | _QuickSaves.back.setActiveness(false); 31 | } 32 | 33 | 34 | // ヒストリレイヤを作り直す 35 | kag.remove(kag.historyLayer); 36 | invalidate kag.historyLayer; 37 | kag.historyLayer = new MBHistoryLayer(kag, kag.fore.base); 38 | kag.add(kag.historyLayer); 39 | 40 | 41 | // 右クリックをコンテクストメニューに割り当てる 42 | TAG.rclick(%[ 43 | enabled : true, 44 | call : true, 45 | storage : MBBasePath + "assets/kag/HamRoutines.ks", 46 | target : "*rclick_wrapper" 47 | ]); 48 | 49 | 50 | // コンテクストメニューの設定を行う 51 | KAGLoadScript(MBBasePath + "MenuSettings.tjs"); 52 | 53 | 54 | // コンテクストメニュー呼び出しボタンを設置 55 | var _CMenuButtons = %[]; 56 | if (MBSystemPref.cmenuButtonEnabled) { 57 | _CMenuButtons = %[ 58 | fore : new MBContextMenuCaller(kag, kag.fore.base), 59 | back : new MBContextMenuCaller(kag, kag.back.base) 60 | ]; 61 | } 62 | 63 | //============================================================================== 64 | // 追加KAGタグ 65 | 66 | /* 67 | [qsstate] - クイックセーブの表示・有効を切り替える 68 | visible : 表示するかどうか 69 | enabled : 有効かどうか 70 | */ 71 | TAG.qsstate = function(elm) 72 | { 73 | if (!MBSystemPref.enableQuickSave) { 74 | // 有効になっていない場合は帰る 75 | return 0; 76 | } 77 | 78 | if (elm.visible !== void) { 79 | if (!elm.forse && kag.skipMode > 0) { 80 | // スキップ中は強制的に非表示 81 | _QuickSaves.fore.hide(); 82 | _QuickSaves.back.hide(); 83 | } 84 | else { 85 | switch (elm.visible) { 86 | case 'true': 87 | _QuickSaves.fore.show(); 88 | _QuickSaves.back.show(); 89 | break; 90 | 91 | case 'false': 92 | _QuickSaves.fore.hide(); 93 | _QuickSaves.back.hide(); 94 | break; 95 | } 96 | } 97 | } 98 | 99 | if (elm.enabled !== void) { 100 | switch (elm.enabled) { 101 | case 'true': 102 | _QuickSaves.fore.setEnabled(); 103 | _QuickSaves.back.setEnabled(); 104 | break; 105 | 106 | case 'false': 107 | _QuickSaves.fore.unsetEnabled(); 108 | _QuickSaves.back.unsetEnabled(); 109 | break; 110 | } 111 | } 112 | 113 | return 0; 114 | } incontextof kag; 115 | -------------------------------------------------------------------------------- /data/system/Ham/Base/modules/system/history/MBHistoryScrollPane.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | system_mb/mb/system/history/MBHistoryScrollPane.tjs 3 | *******************************************************************************/ 4 | 5 | 6 | class MBHistoryScrollPane extends MBComponentLayer 7 | { 8 | var objSlideBar; // スライドバー 9 | var objSlidePeg; // つまみ 10 | 11 | var defaultLength = 482; // 標準長さ 12 | var intMaxPegTop = 440; // つまみ標準最大位置 13 | 14 | 15 | function MBHistoryScrollPane(win, par) 16 | { 17 | // コンストラクタ 18 | 19 | super.MBComponentLayer(win, par); 20 | 21 | init(defaultLength); 22 | } 23 | 24 | function finalize() 25 | { 26 | // ファイナライザ 27 | 28 | invalidate objSlideBar if (objSlideBar !== void); 29 | invalidate objSlidePeg if (objSlidePeg !== void); 30 | 31 | super.finalize(...); 32 | } 33 | 34 | //-------------------------------------------------------------------------- 35 | 36 | function init(len) 37 | { 38 | // イニシャライザ 39 | 40 | if (objSlideBar === void || !isvalid(objSlideBar)) { 41 | objSlideBar = new MBHistoryScrollBar(window, this); 42 | objSlidePeg = new MBHistoryScrollPeg(window, this); 43 | } 44 | 45 | setSize(objSlidePeg.width, len); 46 | intMaxPegTop = len - objSlidePeg.height; 47 | 48 | objSlideBar.setPos( 49 | (width - objSlideBar.width) * 0.5, 50 | 0); 51 | 52 | hitType = htMask; 53 | hitThreshold = 0; 54 | visible = true; 55 | } 56 | 57 | 58 | //========================================================================== 59 | 60 | function initPegPosition(num) 61 | { 62 | // つまみの位置とかを初期化 63 | 64 | objSlidePeg.intMaxStartLine = num; 65 | objSlidePeg.top = intMaxPegTop; 66 | } 67 | 68 | //-------------------------------------------------------------------------- 69 | 70 | function setPegPositionByLine(num) 71 | { 72 | // スクロールしたときにつまみの位置を変える 73 | 74 | objSlidePeg.top = Math.round( 75 | intMaxPegTop * (num / objSlidePeg.intMaxStartLine) 76 | ); 77 | } 78 | 79 | //========================================================================== 80 | 81 | function scrollByBarClick(num, updatestate) 82 | { 83 | // バーのクリックで表示を変える 84 | 85 | if (num > intMaxPegTop) { 86 | num = intMaxPegTop; 87 | } 88 | else if (num < 0) { 89 | num = 0; 90 | } 91 | 92 | var tg = Math.round( 93 | objSlidePeg.intMaxStartLine * (num / intMaxPegTop) 94 | ); 95 | 96 | parent.dispStart = (int) tg; 97 | parent.updatePageBySlidePane(updatestate); 98 | } 99 | 100 | //-------------------------------------------------------------------------- 101 | 102 | function onMouseDown(x, y, button, shift) 103 | { 104 | if (button == mbRight) { 105 | parent.onRightClickedOnChild(); 106 | return; 107 | } 108 | 109 | super.onMouseDown(...); 110 | scrollByBarClick(y - objSlidePeg.height * 0.5, true); 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /data/system/Ham/Base/ui/MBSelectItemForFile.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | system_mb/ui/MBSelectItemForFile.tjs 3 | *******************************************************************************/ 4 | 5 | 6 | class MBSelectItemForFile extends MBSelectItem 7 | { 8 | var intItemID; // アイテムID 9 | var strItemType; // アイテム種別 10 | var objIconLayer; // アイコン表示用レイヤ 11 | 12 | var intLabelLeft = 18; 13 | 14 | 15 | function MBSelectItemForFile(win, par, type, id) 16 | { 17 | // コンストラクタ 18 | 19 | var str = setInfo(type, id); 20 | 21 | super.MBSelectItem(win, par, str); 22 | 23 | width = font.getTextWidth(strItemLabel) + intHorizontalMargin * 2 + intLabelLeft; 24 | drawItemFace(); 25 | } 26 | 27 | function finalize() 28 | { 29 | // ファイナライザ 30 | 31 | invalidate objIconLayer if (objIconLayer !== void); 32 | 33 | super.finalize(...); 34 | } 35 | 36 | function setInfo(type, id) 37 | { 38 | // 情報をセット 39 | 40 | strItemType = type; 41 | intItemID = id; 42 | 43 | var obj = MBTable[type][id]; 44 | 45 | if (typeof(obj) != 'Object') { 46 | throw new Exception('アイテムの指定が正しくありません。'); 47 | return; 48 | } 49 | 50 | return obj.name; 51 | } 52 | 53 | //-------------------------------------------------------------------------- 54 | 55 | function drawItemFace() 56 | { 57 | // 通常のリンク文字を描く 58 | 59 | setIcon(); 60 | 61 | fillRect(0, 0, width, height, bgColor); 62 | drawText(intLabelLeft, intVerticalMargin, strItemLabel, fontColor); 63 | 64 | blActive = true; 65 | } 66 | 67 | function drawItemFaceFocused() 68 | { 69 | // 選択状態リンク文字を描く 70 | 71 | if (parent.isNewLayer) { 72 | parent.isNewLayer = false; 73 | } 74 | else { 75 | sndfunc.seSelect(); 76 | } 77 | 78 | setIcon(); 79 | 80 | fillRect(0, 0, width, height, bgColorFocused); 81 | drawText(intLabelLeft, intVerticalMargin, strItemLabel, fontColor); 82 | } 83 | 84 | function drawItemFaceDisabled() 85 | { 86 | // 選択不可のリンク文字を描く 87 | 88 | setIcon(); 89 | 90 | fillRect(0, 0, width, height, bgColor); 91 | drawText(intLabelLeft, intVerticalMargin, strItemLabel, fontColorDisabled); 92 | blActive = false; 93 | } 94 | 95 | //-------------------------------------------------------------------------- 96 | 97 | function setIcon() 98 | { 99 | // アイコンをセット 100 | 101 | if (objIconLayer !== void && isvalid(objIconLayer)) { 102 | return; 103 | } 104 | 105 | var fname = MBTable[strItemType][intItemID].icon; 106 | 107 | if (fname == "") { 108 | fname = 'item'; 109 | } 110 | 111 | objIconLayer = new GraphicLayer(window, this); 112 | objIconLayer.loadImages(%[storage : sysfunc.getPathImage("itemicon/%s".sprintf(fname))]); 113 | objIconLayer.setSizeToImageSize(); 114 | objIconLayer.setPos(0, 0); 115 | objIconLayer.hitType = htMask; 116 | objIconLayer.hitThreshold = 256; // 全域透過 117 | objIconLayer.opacity = 255; 118 | objIconLayer.visible = true; 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /data/system/Ham/Base/Util.tjs: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | 各種ユーティリティ関数群 3 | ********************************************************************************/ 4 | 5 | var sysfunc = %[]; 6 | var sysvalue = %[]; 7 | 8 | // 使用画像パスを取得する 9 | sysfunc.getPathImage = function(path) 10 | { 11 | var np = MBBasePath + "assets/" + path; 12 | dm(np); 13 | return np; 14 | } incontextof kag; 15 | 16 | // 右クリックの呼び出しラベルを取得 17 | sysfunc.getContextMenuLabel = function() 18 | { 19 | var res = "*rclick_default"; 20 | 21 | return res; 22 | } incontextof kag; 23 | 24 | // 二つのオブジェクトの矩形当たり判定を行う 25 | sysfunc.collideTestRect = function(obj1, obj2) 26 | { 27 | var px = [obj1.left, obj1.left + obj1.width]; 28 | var py = [obj1.top, obj1.top + obj1.height]; 29 | var cx = [obj2.left, obj2.left + obj2.width]; 30 | var cy = [obj2.top, obj2.top + obj2.height]; 31 | 32 | var msg = "obj1: " + px[0] + ", " + py[0] + ", " + px[1] + ", " + py[1] + "\n"; 33 | msg += "obj2: " + cx[0] + ", " + cy[0] + ", " + cx[1] + ", " + cy[1]; 34 | 35 | return (cx[0] < px[1] && px[0] < cx[1] && cy[0] < py[1] && py[0] < cy[1]); 36 | } incontextof kag; 37 | 38 | 39 | // 画面拡縮比率の計算 40 | sysfunc.getScreenScale = function(larger) 41 | { 42 | var wr = kag.fore.base.width / MBGraphicPref.RegularScreenSize.width; 43 | var hr = kag.fore.base.height / MBGraphicPref.RegularScreenSize.height; 44 | 45 | var scale = 1; 46 | var lscale = 1; 47 | 48 | if (wr > hr) { 49 | scale = hr; 50 | lscale = wr; 51 | } 52 | else { 53 | scale = wr; 54 | lscale = hr; 55 | } 56 | 57 | if (larger) { 58 | return lscale; 59 | } 60 | else { 61 | return scale; 62 | } 63 | } incontextof kag; 64 | 65 | 66 | //------------------------------------------------------------------------------ 67 | 68 | var sndfunc = %[]; 69 | var sndavail = %[]; 70 | 71 | var menuSounds = ["menu_open", "menu_select", "menu_cancel", "menu_decide"]; 72 | 73 | for (tf.i=0; tf.imax) { min <-> max; } 15 | return int(Math.random() * (max-min+1)) + min; 16 | } 17 | 18 | function str2num(str) 19 | { 20 | // 文字列->数字 ( 全角対応 ) 21 | var res; 22 | var i; 23 | for(i=0; i=0x0020 && num<=0x7e) 60 | res+=$(0xff00+num-0x20); // UNICODE 61 | else res+=str[i]; 62 | } 63 | return res; 64 | } 65 | 66 | 67 | function kansuuji( 68 | n, 69 | digits = "〇一二三四五六七八九", 70 | small_units = " 十百千", 71 | large_units = " 万億兆京", 72 | zero_expression = "ゼロ", 73 | minus_expression = "マイナス" 74 | ) 75 | { 76 | // n を一般的な漢数字表記にして返す 77 | // TJS の整数型は 922京ほどまでなので京より上の桁の処理は必要ない 78 | 79 | n = int n; 80 | if(n == 0) return zero_expression; 81 | var out = ""; // 出力文字列 82 | if(n < 0) n = -n, out = minus_expression; 83 | n = string n; // 文字列に変換 84 | 85 | var n_len = n.length; 86 | var n_pos = n_len - 1; 87 | var nonzero = false; 88 | 89 | for(var i = 0; i < n_len; i ++, n_pos --) 90 | { 91 | var small_unit = n_pos & 3; 92 | var digit = +n[i]; 93 | switch(small_unit) 94 | { 95 | case 0: // 1 の桁 96 | if(digit != 0) out += digits[digit], nonzero = true; 97 | if(nonzero && n_pos) out += large_units[n_pos >> 2]; 98 | nonzero = false; 99 | break; 100 | case 1: // 十の桁 101 | case 2: // 百の桁 102 | case 3: // 千の桁 103 | if(digit != 0) 104 | { 105 | /* 千の桁は 万以上の場合慣用的に 一千という。 106 | また、一百や一十とはいわない。 */ 107 | if(digit != 1 || (small_unit == 3 && n_pos > 4)) 108 | out += digits[digit] + small_units[small_unit]; 109 | else 110 | out += small_units[small_unit]; 111 | nonzero = true; 112 | } 113 | break; 114 | } 115 | } 116 | 117 | return out; 118 | } 119 | 120 | function kansuuji_simple( 121 | n, 122 | digits = "〇一二三四五六七八九", 123 | point = "・", 124 | minus = "マイナス") 125 | { 126 | // n を漢数字表記にするが、桁単位はつけない 127 | 128 | n = string n; 129 | var n_len = n.length; 130 | var out = ""; 131 | for(var i = 0; i < n_len; i++) 132 | { 133 | var digit = n[i]; 134 | if(digit == ".") 135 | out += point; 136 | else if(digit == "-") 137 | out += minus; 138 | else if(digit >= '0' && digit <= '9') 139 | out += digits[+digit]; 140 | else 141 | out += digit; 142 | } 143 | return out; 144 | } 145 | 146 | function number_format(n) 147 | { 148 | // n を3桁ごとに カンマで区切った数値表現にする 149 | n = string n; 150 | var n_len = n.length; 151 | var n_digits = 0; 152 | 153 | // 数字の数を数える 154 | for(var i = 0; i < n_len; i++) 155 | { 156 | var digit = n[i]; 157 | if(digit >= '0' && digit <= '9') n_digits ++; 158 | else if(digit == '.' || digit == 'e') break; 159 | } 160 | 161 | var out = ""; 162 | 163 | // カンマを挿入 164 | for(var i = 0; i < n_len; i++) 165 | { 166 | var digit = n[i]; 167 | if(digit >= '0' && digit <= '9') 168 | { 169 | n_digits --; 170 | out += digit; 171 | if(n_digits > 0 && n_digits % 3 == 0) 172 | out += ","; 173 | } 174 | else 175 | { 176 | out += digit; 177 | } 178 | } 179 | 180 | return out; 181 | } 182 | -------------------------------------------------------------------------------- /data/system/Ham/Base/ui/MBPagingUnit.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | system_mb/ui/MBPagingUnit.tjs 3 | 4 | フォーカススタックの操作は親レイヤに任せること 5 | *******************************************************************************/ 6 | 7 | 8 | class MBPagingUnit extends MBComponentLayer 9 | { 10 | var intPageNumber; // ページ番号 11 | var intMaxPageNumber; // 最終ページ番号 12 | 13 | var objScrollButtonLeft; 14 | var objScrollButtonRight; 15 | 16 | var fontColor = MBColors.font.label.normal; 17 | var fontSize = MBFontStyle.size.label; 18 | 19 | 20 | function MBPagingUnit(win, par, lpn) 21 | { 22 | // コンストラクタ 23 | 24 | super.MBComponentLayer(win, par); 25 | 26 | height = 14; 27 | 28 | font.face = MBFontStyle.face.normal; 29 | font.height = fontSize; 30 | 31 | intPageNumber = 0; 32 | intMaxPageNumber = Math.floor(lpn); 33 | } 34 | 35 | function finalize() 36 | { 37 | // ファイナライザ 38 | 39 | invalidate objScrollButtonLeft if (objScrollButtonLeft !== void); 40 | invalidate objScrollButtonRight if (objScrollButtonRight !== void); 41 | 42 | super.finalize(...); 43 | } 44 | 45 | //-------------------------------------------------------------------------- 46 | 47 | function reload() 48 | { 49 | // 構築もしくは再構築 50 | 51 | var str = "%02d / %02d ページ".sprintf(intPageNumber + 1, intMaxPageNumber + 1); 52 | 53 | width = font.getTextWidth(str) + 56; 54 | 55 | fillRect(0, 0, width, height, 0x00000000); 56 | 57 | drawText(28, 0, str, fontColor); 58 | 59 | if (objScrollButtonLeft === void) { 60 | objScrollButtonLeft = new MBScrollButtonLeft(window, this); 61 | objScrollButtonLeft.setPos(0, 0); 62 | } 63 | objScrollButtonLeft.setValue(getScrollButtonValue('down')); 64 | 65 | if (objScrollButtonRight === void) { 66 | objScrollButtonRight = new MBScrollButtonRight(window, this); 67 | objScrollButtonRight.setPos(font.getTextWidth(str) + 42, 0); 68 | } 69 | objScrollButtonRight.setValue(getScrollButtonValue('up')); 70 | 71 | objScrollButtonLeft.objCursorMapHash.right = objScrollButtonRight; 72 | objScrollButtonLeft.objCursorMapHash.left = objScrollButtonLeft; 73 | 74 | objScrollButtonRight.objCursorMapHash.left = objScrollButtonLeft; 75 | objScrollButtonRight.objCursorMapHash.right = objScrollButtonRight; 76 | } 77 | 78 | //-------------------------------------------------------------------------- 79 | 80 | function getScrollButtonValue(dir) /* private */ 81 | { 82 | // スクロールボタンに設定する値を取得 83 | 84 | var res; 85 | 86 | if (dir == 'up') { 87 | res = intPageNumber + 1; 88 | 89 | if (res > intMaxPageNumber) { 90 | res = 0; 91 | } 92 | } 93 | 94 | else if (dir == 'down') { 95 | res = intPageNumber - 1; 96 | 97 | if (res < 0) { 98 | res = intMaxPageNumber; 99 | } 100 | } 101 | 102 | else { 103 | res = intPageNumber; 104 | } 105 | 106 | return res; 107 | } 108 | 109 | //-------------------------------------------------------------------------- 110 | 111 | function onSelectedItemClick(sender) 112 | { 113 | switch (sender) { 114 | case objScrollButtonLeft: 115 | intPageNumber = sender.value; 116 | reload(); 117 | parent.onScroll('left', intPageNumber); 118 | break; 119 | 120 | case objScrollButtonRight: 121 | intPageNumber = sender.value; 122 | reload(); 123 | parent.onScroll('right', intPageNumber); 124 | break; 125 | 126 | default: 127 | break; 128 | } 129 | } 130 | 131 | function scrollByKB(dir) 132 | { 133 | // キーボードでスクロール 134 | 135 | switch (dir) { 136 | case 'left': 137 | onSelectedItemClick(objScrollButtonLeft); 138 | break; 139 | 140 | case 'right': 141 | onSelectedItemClick(objScrollButtonRight); 142 | break; 143 | 144 | default: 145 | break; 146 | } 147 | } 148 | 149 | //-------------------------------------------------------------------------- 150 | 151 | function onEscapeKeyDown(key, shift) 152 | { 153 | super.onEscapeKeyDown(...); 154 | parent.onEscapeKeyDown(...); 155 | } 156 | } 157 | -------------------------------------------------------------------------------- /data/system/Ham/Base/modules/system/userconf/MBControllPanelBasicUI.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | system_mb/mb/system/userconf/MBControllPanelBasicUI.tjs 3 | *******************************************************************************/ 4 | 5 | class MBControllPanelSectionButton extends MBButton 6 | { 7 | var objCurrentChild; // チェックが付いている操作子 8 | 9 | function MBControllPanelSectionButton(win, par) 10 | { 11 | // コンストラクタ 12 | 13 | super.MBButton(win, par); 14 | 15 | setImageSize(112, 19); 16 | setSizeToImageSize(); 17 | loadImages(sysfunc.getPathImage("userconf/sectionbutton")); 18 | visible = true; 19 | enabled = true; 20 | } 21 | 22 | function finalize() 23 | { 24 | // ファイナライザ 25 | 26 | super.finalize(...); 27 | } 28 | 29 | //-------------------------------------------------------------------------- 30 | 31 | function callParentFunction() 32 | { 33 | // 親のメソッドは呼ばない 34 | 35 | } 36 | 37 | //-------------------------------------------------------------------------- 38 | 39 | function onMouseDown(x, y, button, shift) 40 | { 41 | if (button == mbRight) 42 | { 43 | parent.onChildrenRightClick(); 44 | return; 45 | } 46 | 47 | super.onMouseDown(...); 48 | } 49 | } 50 | 51 | //============================================================================== 52 | 53 | class MBControllPanelCheckBox extends MBButton 54 | { 55 | var strBasicImageName; // 通常画像のファイル名 56 | var strSelectedImageName; // 選択状態の画像のファイル名 57 | 58 | var blSelected; // 選択状態かどうか 59 | var intOptionValue; // 割り当てられた設定値 60 | 61 | 62 | function MBControllPanelCheckBox(win, par) 63 | { 64 | // コンストラクタ 65 | 66 | super.MBButton(win, par); 67 | 68 | name = "コンパネチェックボックス"; 69 | } 70 | 71 | function finalize() 72 | { 73 | // ファイナライザ 74 | 75 | super.finalize(...); 76 | } 77 | 78 | //-------------------------------------------------------------------------- 79 | 80 | function initState() 81 | { 82 | // 状態を初期化する 83 | 84 | loadImages(strBasicImageName); 85 | blSelected = false; 86 | } 87 | 88 | function changeState() 89 | { 90 | // 状態を変更する。つまり、画像を変更する 91 | 92 | if (blSelected) { 93 | loadImages(strBasicImageName); 94 | blSelected = false; 95 | } 96 | 97 | else { 98 | loadImages(strSelectedImageName); 99 | blSelected = true; 100 | } 101 | } 102 | 103 | //-------------------------------------------------------------------------- 104 | 105 | function getCursorFromManager(lock = true) 106 | { 107 | // フォーカススタックマネージャから割り当てをもらう 108 | 109 | super.getCursorFromManager(lock); 110 | 111 | cursorX = 6; 112 | cursorY = cursorY; 113 | } 114 | 115 | //-------------------------------------------------------------------------- 116 | 117 | function callParentFunction() 118 | { 119 | // 親のメソッドを呼ぶ 120 | 121 | if (blSelected) { 122 | return; 123 | } 124 | 125 | changeState(); 126 | execParentFunction(); 127 | } 128 | 129 | function execParentFunction() 130 | { 131 | // 親のメソッドを呼ぶ実体 132 | 133 | super.callParentFunction(); 134 | } 135 | 136 | function onMouseDown(x, y, button, shift) 137 | { 138 | if (button == mbRight) 139 | { 140 | parent.onChildrenRightClick(); 141 | return; 142 | } 143 | 144 | super.onMouseDown(...); 145 | } 146 | } 147 | 148 | //============================================================================== 149 | 150 | class MBControllPanelCheckButton extends MBButtonLayer 151 | { 152 | var tag; 153 | 154 | function MBControllPanelCheckButtonLayer(win, par) 155 | { 156 | // コンストラクタ 157 | 158 | super.MBButton(win, par); 159 | 160 | name = 'コンパネチェックボタン'; 161 | 162 | visible = true; 163 | opacity = 255; 164 | focusable = true; 165 | } 166 | 167 | function finalize() 168 | { 169 | // ファイナライザ 170 | 171 | super.finalize(...); 172 | } 173 | 174 | function onMouseEnter() 175 | { 176 | //super.onMouseEnter(...); 177 | } 178 | 179 | function onMouseDown(x, y, button, shift) 180 | { 181 | if (button == mbRight) 182 | { 183 | parent.onChildrenRightClick(); 184 | return; 185 | } 186 | 187 | super.onMouseDown(...); 188 | } 189 | } 190 | 191 | -------------------------------------------------------------------------------- /data/system/Ham/Base/modules/system/MBActionCanceller.tjs: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | system_mb/mb/system/MBActionCanceller.tjs 3 | ********************************************************************************/ 4 | 5 | class MBActCancelLayer extends GraphicLayer 6 | { 7 | var cancelState = false; // アクションを許可するかどうか 8 | 9 | var clickState = false; // クリックによるキャンセルを許可するかどうか 10 | var jumptarget = "*actcancel_cancel"; // キャンセルされた場合の飛び先ラベル名 11 | 12 | 13 | function MBActCancelLayer(win, par) 14 | { 15 | // コンストラクタ 16 | 17 | super.GraphicLayer(win, par); 18 | 19 | name = "アクションキャンセラ"; 20 | hitType = htMask; 21 | hitThreshold = 256; 22 | absolute = MBLayerAbs.actCanceller; 23 | visible = true; 24 | opacity = 255; 25 | 26 | setImageSize(win.fore.base.width, win.fore.base.height); 27 | setSizeToImageSize(); 28 | setPos(0, 0); 29 | } 30 | 31 | function finalize() 32 | { 33 | // ファイナライザ 34 | 35 | super.finalize(...); 36 | } 37 | 38 | function showConsoleMsg() 39 | { 40 | // コンソールにキャンセル通知を渡す 41 | 42 | dm(" ユーザーのアクションをキャンセルしました。"); 43 | } 44 | 45 | function setState(bl, cl) 46 | { 47 | // キャンセルステータスを設定 48 | 49 | hitThreshold = 256 - 256 * bl; 50 | 51 | cancelState = bl; 52 | clickState = cl; 53 | } 54 | 55 | //-------------------------------------------------------------------------- 56 | 57 | function onMouseDown(x, y, button, shift) 58 | { 59 | // マウスクリックを無条件でキャンセル 60 | 61 | if (clickState && jumptarget != "") { 62 | if (button == mbLeft) { 63 | try { 64 | window.process("", jumptarget); 65 | setState(false); 66 | } 67 | catch { 68 | showConsoleMsg(); 69 | } 70 | } 71 | else { 72 | showConsoleMsg(); 73 | } 74 | } 75 | else { 76 | showConsoleMsg(); 77 | } 78 | } 79 | 80 | function onMouseUp(x, y, button, shift) 81 | { 82 | ; // do nothing 83 | } 84 | 85 | function onMouseWheel(shift, delta, x, y) 86 | { 87 | ; // do nothing 88 | } 89 | 90 | function onClick(x, y) 91 | { 92 | ; // do nothing 93 | } 94 | 95 | function onDoubleClick(x, y) 96 | { 97 | ; // do nothing 98 | } 99 | 100 | //-------------------------------------------------------------------------- 101 | 102 | function onKeyDown(key, shift) 103 | { 104 | // キー入力を無条件でキャンセル 105 | 106 | if (cancelState) { 107 | if (clickState && jumptarget != "") { 108 | if (key == VK_RETURN || key == VK_SPACE) { 109 | try { 110 | window.process("", jumptarget); 111 | setState(false); 112 | } 113 | catch { 114 | showConsoleMsg(); 115 | } 116 | } 117 | } 118 | else { 119 | showConsoleMsg(); 120 | } 121 | return true; 122 | } 123 | else { 124 | return false; 125 | } 126 | } 127 | 128 | function onKeyPress(key) 129 | { 130 | ; // do nothing 131 | } 132 | 133 | function onKeyUp(x, y) 134 | { 135 | ; // do nothing 136 | } 137 | } 138 | 139 | class MBActionCanceller 140 | { 141 | var window; 142 | 143 | var layFore; 144 | var layBack; 145 | 146 | function MBActionCanceller(win) 147 | { 148 | // コンストラクタ 149 | 150 | window = win; 151 | 152 | var st = System.getTickCount(); 153 | 154 | layFore = new MBActCancelLayer(window, window.fore.base); 155 | layBack = new MBActCancelLayer(window, window.back.base); 156 | 157 | layFore.setCompLayer(layBack); 158 | layBack.setCompLayer(layFore); 159 | 160 | //dm(" アクションキャンセラが生成されました。(%s ms)".sprintf(System.getTickCount() - st)); 161 | } 162 | 163 | function finalize() 164 | { 165 | // ファイナライザ 166 | 167 | invalidate layFore if (layFore !== void); 168 | invalidate layBack if (layBack !== void); 169 | } 170 | 171 | //-------------------------------------------------------------------------- 172 | 173 | function setCancellerState(bl, cl = false) 174 | { 175 | // キャンセラのステータスを変える 176 | /* 177 | true が指定されると、アクション不可能になる 178 | false が指定されると、アクションが可能になる 179 | */ 180 | 181 | if (bl) { 182 | layFore.setState(true, cl); 183 | layBack.setState(true, cl); 184 | //dm(" アクションキャンセラが有効になりました。"); 185 | } 186 | else { 187 | layFore.setState(false, false); 188 | layBack.setState(false, false); 189 | //dm(" アクションキャンセラが無効になりました。"); 190 | } 191 | } 192 | 193 | function getCancellerState() 194 | { 195 | // キャンセルステータスを返す 196 | 197 | return (layFore.cancelState || layBack.cancelState); 198 | } 199 | } 200 | 201 | -------------------------------------------------------------------------------- /data/system/YesNoDialog.tjs: -------------------------------------------------------------------------------- 1 | // YesNoDialog.tjs - はい/いいえを選択するダイアログボックス 2 | // Copyright (C)2001-2009, W.Dee and contributors 改変・配布は自由です 3 | 4 | class YesNoDialogWindow extends Window 5 | { 6 | var yesButton; // [はい] ボタン 7 | var noButton; // [いいえ] ボタン 8 | 9 | var result = false; // no:false yes:true 10 | 11 | function YesNoDialogWindow(message, cap) 12 | { 13 | super.Window(); 14 | 15 | // このウィンドウではもっとも基本的なdrawerを用いる 16 | // drawDevice.preferredDrawer = global.Window.PassThroughDrawDevice.dtDrawDib; 17 | 18 | // メインウィンドウから cursor**** の情報をとってくる 19 | if(global.Window.mainWindow !== null && 20 | typeof global.Window.mainWindow.cursorDefault != "undefined") 21 | this.cursorDefault = global.Window.mainWindow.cursorDefault; 22 | if(global.Window.mainWindow !== null && 23 | typeof global.Window.mainWindow.cursorPointed != "undefined") 24 | this.cursorPointed = global.Window.mainWindow.cursorPointed; 25 | 26 | // 外見の調整 27 | borderStyle = bsDialog; 28 | innerSunken = false; 29 | caption = cap; 30 | showScrollBars = false; 31 | 32 | // プライマリレイヤの作成 33 | add(new Layer(this, null)); 34 | 35 | // プライマリのマウスカーソルを設定 36 | if(typeof this.cursorDefault !== "undefined") 37 | primaryLayer.cursor = cursorDefault; 38 | 39 | // サイズを決定 40 | var tw = primaryLayer.font.getTextWidth(message); 41 | var th = primaryLayer.font.getTextHeight(message); 42 | 43 | var w = tw + 40; 44 | if(w<200) w = 200; 45 | var h = th*2 + 60; 46 | 47 | // 拡大率の設定 48 | if (kag.fullScreen) { 49 | if (kag.innerWidth / kag.scWidth 50 | < kag.innerHeight / kag.scHeight) 51 | setZoom(kag.innerWidth, kag.scWidth); 52 | else 53 | setZoom(kag.innerHeight, kag.scHeight); 54 | } else { 55 | setZoom(kag.zoomNumer, kag.zoomDenom); 56 | } 57 | // サイズを決定 58 | setInnerSize(w * zoomNumer / zoomDenom, 59 | h * zoomNumer / zoomDenom); 60 | 61 | // プライマリレイヤのサイズを設定 62 | primaryLayer.width = w; 63 | primaryLayer.height = h; 64 | primaryLayer.colorRect(0, 0, w, h, clBtnFace, 255); 65 | 66 | // ウィンドウ位置の調整 67 | if(global.Window.mainWindow !== null && global.Window.mainWindow isvalid) 68 | { 69 | var win = global.Window.mainWindow; 70 | var l, t; 71 | l = ((win.width - width)>>1) + win.left; 72 | t = ((win.height - height)>>1) + win.top; 73 | if(l < 0) l = 0; 74 | if(t < 0) t = 0; 75 | if(l + width > System.screenWidth) l = System.screenWidth - width; 76 | if(t + height > System.screenHeight) t = System.screenHeight - height; 77 | setPos(l, t); 78 | } 79 | else 80 | { 81 | setPos((System.screenWidth - width)>>1, (System.screenHeight - height)>>1); 82 | } 83 | 84 | // メッセージの描画 85 | primaryLayer.drawText((w - tw)>>1, 14, message, clBtnText); 86 | 87 | // Yesボタン 88 | add(yesButton = new ButtonLayer(this, primaryLayer)); 89 | yesButton.caption = "はい"; 90 | yesButton.captionColor = clBtnText; 91 | yesButton.width = 70; 92 | yesButton.height = 25; 93 | yesButton.top = th + 35; 94 | yesButton.left = (w - (70*2 + 10)>>1); 95 | yesButton.visible = true; 96 | 97 | // Noボタン 98 | add(noButton = new ButtonLayer(this, primaryLayer)); 99 | noButton.caption = "いいえ"; 100 | noButton.captionColor = clBtnText; 101 | noButton.width = 70; 102 | noButton.height = 25; 103 | noButton.top = th + 35; 104 | noButton.left = ((w - (70*2 + 10))>>1) + 70 + 10; 105 | noButton.visible = true; 106 | 107 | } 108 | 109 | function finalize() 110 | { 111 | super.finalize(...); 112 | } 113 | 114 | function action(ev) 115 | { 116 | // action 117 | if(ev.type == "onClick") 118 | { 119 | if(ev.target == yesButton) 120 | { 121 | result = true; 122 | close(); 123 | } 124 | else if(ev.target == noButton) 125 | { 126 | result = false; 127 | close(); 128 | } 129 | } 130 | else if(ev.type == "onKeyDown" && ev.target === this) 131 | { 132 | // パッド入力に対応する処理 133 | switch(ev.key) 134 | { 135 | case VK_PADLEFT: 136 | yesButton.focus(); 137 | break; 138 | case VK_PADRIGHT: 139 | noButton.focus(); 140 | break; 141 | case VK_PAD1: 142 | if(focusedLayer == yesButton) 143 | { 144 | result = true; 145 | close(); 146 | } 147 | else if(focusedLayer == noButton) 148 | { 149 | result = false; 150 | close(); 151 | } 152 | break; 153 | case VK_PAD2: 154 | result = false; 155 | close(); 156 | break; 157 | } 158 | } 159 | } 160 | 161 | function onKeyDown(key, shift) 162 | { 163 | super.onKeyDown(...); 164 | if(key == VK_ESCAPE) 165 | { 166 | // ESC キーが押された 167 | // 「いいえ」として処理 168 | result = false; 169 | close(); 170 | } 171 | } 172 | } 173 | 174 | // Yes か No かはっきりさせる関数 175 | function askYesNo(message, caption = "確認") 176 | { 177 | var win = new YesNoDialogWindow(message, caption); 178 | win.showModal(); 179 | var res = win.result; 180 | invalidate win; 181 | return res; 182 | } 183 | -------------------------------------------------------------------------------- /data/system/Ham/Preferences.tjs: -------------------------------------------------------------------------------- 1 | //============================================================================== 2 | // Preferences.tjs 3 | // Ham拡張の設定ファイル 4 | //============================================================================== 5 | 6 | 7 | //------------------------------------------------------------------------------ 8 | // グローバル設定 9 | 10 | // ◆ クイックセーブ用のスロット番号 11 | // 基本的にはこのままで良いと思いますが、爆発的にセーブファイル数を増やしたりして、 12 | // この数値に届いてしまいそうな場合は調整してください。 13 | MBSystemPref.quickSaveBookMark = 500; 14 | 15 | 16 | // ◆ 追加するモジュールの初期化ファイル 17 | // Hamフォルダからのパスで記入してください。 18 | // モジュールはここに記述した順に読み込まれます。 19 | MBSystemPref.modules = [ 20 | ]; 21 | 22 | 23 | // ◆ 標準スクリーンサイズ 24 | // Config.tjsで定義する「画面サイズ」とは異なります。 25 | // Ham拡張で標準的に用意されている画面部品を「画面サイズ」にフィットさせるために 26 | // 使用される値です。 27 | // セーブ・ロード画面、コンフィグ画面、バックログ画面を「画面サイズ」に合わせて 28 | // デザインし、画像部品を入れ替えた場合は、ここの値も変更してください。 29 | MBGraphicPref.RegularScreenSize = %[width : 800, height : 600]; 30 | 31 | 32 | //------------------------------------------------------------------------------ 33 | // クイックセーブメニュー表示設定 34 | 35 | // ◆ クイックセーブ機能を有効にするかどうか 36 | MBSystemPref.enableQuickSave = true; 37 | 38 | // ◆ 表示位置指定方法 39 | // lbMargin: 左下に指定マージンを取って表示 40 | // rbmargin: 右下に以下同文 41 | // ltMargin: 左上に以下同文 42 | // rtMargin: 右上に以下同文 43 | // absolute: 表示座標を直接指定 44 | MBGraphicPref.quicksavePositionType = "lbMargin"; 45 | 46 | // ◆ 表示位置 47 | // 指定方法がマージンの場合は各方向のマージン値、 48 | // 座標の場合は座標として扱われます。 49 | MBGraphicPref.quicksavePositionValue = %[x : 10, y : 10]; 50 | 51 | // ◆ 「保存」と「再開」の距離 52 | // 「保存」ボタンの右下座標からの距離なので、 53 | // 水平や垂直に整列させる場合はその幅の分だけマイナスにしてください。 54 | MBGraphicPref.quicksaveButtonMargin = %[x : 5, y : -20]; 55 | 56 | 57 | //------------------------------------------------------------------------------ 58 | 59 | // ◆ メニューボタンを表示するかどうか 60 | MBSystemPref.cmenuButtonEnabled = true; 61 | 62 | // ◆メニューボタンの表示位置指定方法 63 | // lbMargin: 左下に指定マージンを取って表示 64 | // rbmargin: 右下に以下同文 65 | // ltMargin: 左上に以下同文 66 | // rtMargin: 右上に以下同文 67 | // absolute: 表示座標を直接指定 68 | MBGraphicPref.cmenuButtonPositionType = "rtMargin"; 69 | 70 | // ◆ 表示位置 71 | MBGraphicPref.cmenuButtonPositionValue = %[x : 10, y : 10]; 72 | 73 | 74 | //------------------------------------------------------------------------------ 75 | // Ham拡張システムカラー指定 76 | 77 | // ウィンドウ枠線 78 | MBColors.window.border = 0xffc6c6c6; 79 | 80 | // ウィンドウ背景 81 | MBColors.window.background = 0xcc000000; 82 | 83 | // タイトルバー文字色 84 | MBColors.font.label.title = 0x474a35; 85 | 86 | // 通常文字色 87 | MBColors.font.label.normal = 0xffffff; 88 | 89 | // 選択不可等文字色 90 | MBColors.font.label.disabled = 0x888888; 91 | 92 | // メニュー等選択時背景 93 | MBColors.font.label.bg_selected = 0x400080ff; 94 | 95 | // メニュー等非選択自背景 96 | MBColors.font.label.bg_normal = 0x00000000; 97 | 98 | 99 | //------------------------------------------------------------------------------ 100 | // Ham拡張システムフォント指定 101 | 102 | // ◆ ダイアログ用フォントサイズ 103 | MBFontStyle.size.label = 14; 104 | 105 | // ◆ プロポーショナルフォント 106 | MBFontStyle.face.propotional = "MS Pゴシック"; 107 | 108 | // ◆ 通常フォント 109 | MBFontStyle.face.normal = "MS ゴシック"; 110 | 111 | //------------------------------------------------------------------------------ 112 | // レイヤ重ね順の設定 113 | 114 | // クイックセーブメニュー 115 | MBLayerAbs.quicksave = 1700500; 116 | 117 | // メニューボタン(コンテクストメニューを呼び出す) 118 | MBLayerAbs.cmenuButton = 1700600; 119 | 120 | // コンテクストメニュー 121 | MBLayerAbs.contextMenu = 1900000; 122 | 123 | // セーブ・ロードパネル 124 | MBLayerAbs.backpack = 2000000; 125 | 126 | // ゲーム内ダイアログ 127 | MBLayerAbs.dialog = 2500000; 128 | 129 | // アクションキャンセラ 130 | MBLayerAbs.actCanceller = 3100000; 131 | 132 | 133 | //------------------------------------------------------------------------------ 134 | // コンテクストメニュー表示設定 135 | 136 | // 「閉じる」ボタンのサイズ 137 | MBGraphicPref.cmenuCloseButtonSize = %[width : 147, height : 25]; 138 | 139 | 140 | //------------------------------------------------------------------------------ 141 | // セーブ・ロード画面表示設定 142 | 143 | // ◆ セーブデータパネルの文字色 144 | MBGraphicPref.BookmarkSelectorTextColor = 0xf0f0f0; 145 | 146 | // ◆ セーブデータパネルにヒストリを表示するかどうか 147 | MBGraphicPref.BookmarkSelectorHistoryVisible = true; 148 | 149 | // ◆ セーブデータの選択消去を有効にするかどうか。 150 | /* 151 | この機能を使用する場合は ktl_local_files.dll が別途必要です。 152 | 32bit版の場合は次のページから入手できます: 153 | http://www.boleros.x0.com/doc/ktlwiki/index.php?KTLWiki#downloads- 154 | ※plugin.zipをダウンロードして展開した中に含まれています。 155 | 156 | 64bit版の場合はGitHubのKTLリポジトリからソースを取得の上、 157 | 適宜ビルドしてください。 158 | 159 | どちらの場合も実行パスの適切なプラグイン用フォルダに格納してください。 160 | KTL作者のボレロ村上氏に厚く御礼申し上げます。 161 | */ 162 | MBGraphicPref.BookmarkDeleterEnabled = false; 163 | 164 | // Config.tjsの設定をいくつか上書きする 165 | 166 | // ◆ フリーセーブ 167 | kag.freeSaveDataMode = false; 168 | 169 | // ◆サムネイルを保存するか 170 | kag.saveThumbnail = true; 171 | 172 | // ◆サムネイルの保存サイズ 173 | kag.thumbnailWidth = 120; 174 | 175 | // ◆ 栞にマクロの情報を保存するかどうか 176 | kag.saveMacros = false; 177 | 178 | // ◆ 利用可能な栞の数 179 | kag.numBookMarks = 60; 180 | 181 | 182 | //------------------------------------------------------------------------------ 183 | // コンフィグ関連 184 | 185 | // ◆ 文字表示テストの文字色 186 | MBGraphicPref.ConfigTextColor = 0xffffff; 187 | 188 | // ◆ 表示速度テストの文字パターン 189 | // 各行30文字以内で設定してください。 190 | MBGraphicPref.ConfigNormalTestText = [ 191 | "文字表示速度のテストです。", 192 | "プレイヤーの好みに近い速度で文字を表示します。", 193 | "あなたはどのくらいの速度がお好みですか?" 194 | ]; 195 | 196 | // ◆ 自動読み進め時の行末待ち時間テストの文字パターン 197 | // 合計30文字以内で設定してください。 198 | MBGraphicPref.ConfigLineWaitTestText = [ 199 | "lタグやxlマクロによる、", 200 | "待ち時間はこれくらいです。" 201 | ]; 202 | 203 | // ◆ 自動読み進め時のページ待ち時間テストの文字パターン 204 | // 各行30文字以内で設定してください。 205 | MBGraphicPref.ConfigPageWaitTestText = [ 206 | "自動読み進めのときのページ待ち時間です。", 207 | "これくらい待つと次に進みます。" 208 | ]; 209 | -------------------------------------------------------------------------------- /data/system/Ham/Ham.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | Ham.tjs 3 | 4 | Ham拡張の組み込みを開始するスクリプト。 5 | Ham拡張を使用するかしないかはConfig.tjsで指定できます。 6 | *******************************************************************************/ 7 | 8 | var MBVersion = "1.0b"; 9 | var MBBasePath = "system/Ham/"; 10 | 11 | dm(""); 12 | dm("HamExtention for KAG3 version " + MBVersion); 13 | 14 | // 設定用の辞書を用意する 15 | var MBSystemPref = %[]; 16 | var MBGraphicPref = %[]; 17 | var MBLayerAbs = %[]; 18 | var MBColors = %[window : %[], font : %[label : %[]]]; 19 | var MBFontStyle = %[size : %[], face : %[]]; 20 | 21 | // 設定ファイルを読み込む 22 | Scripts.execStorage(MBBasePath + "Preferences.tjs"); 23 | 24 | // ゲーム名を拾っておく 25 | MBSystemPref.title = System.title; 26 | 27 | // タグハンドラ参照を拾っておく 28 | var TAG = kag.tagHandlers; 29 | 30 | 31 | //============================================================================== 32 | // 使用する吉里吉里拡張プラグイン 33 | 34 | // セーブ選択消去用 by bolero-MURAKAMI 35 | if (MBGraphicPref.BookmarkDeleterEnabled) { 36 | Plugins.link("ktl_local_files.dll"); 37 | } 38 | 39 | 40 | //============================================================================== 41 | // 環境設定用の変数を準備する 42 | 43 | // 環境設定用辞書配列を作成(初回起動時のみ) 44 | if (sf.userconfig === void) { 45 | sf.userconfig = %[ 46 | bgmVolume : 100, // BGMのボリューム 47 | bgmMutedVolume : void, // BGMのミュート時のボリューム保存場所 48 | seVolume : 100, // SEのボリューム 49 | seMutedVolume : void, // SEのミュート時のボリューム保存場所 50 | charSpeed : 45, // 文字表示速度 51 | setCursor : false, // とりあえずカーソル合わせはOFFにしておく 52 | isFullScreen : false, // フルスクリーンかどうか 53 | 54 | // 未読文字速度 55 | charSpeed2 : 45, 56 | 57 | // オートモード関連 58 | amCharSpeed : 60, 59 | amLineWait : 300, 60 | amPageWait : 1500 61 | ]; 62 | 63 | // キーボードによるカーソルセット動作の有無 64 | sf.setCursorByKB = false; 65 | } 66 | 67 | // 念のためBGMとSEの大域ボリュームを設定 68 | TAG.bgmopt(%[gvolume : sf.userconfig.bgmVolume]); 69 | for (tf.i=0; tf.i> 1; 60 | var t = (imageHeight - (h = CheckBox_glyph.imageHeight)) >> 1; 61 | 62 | if(CheckBox_color != clNone) 63 | colorRect(l, t, w, h, CheckBox_color, CheckBox_opacity); 64 | 65 | // マウスが上に乗っているときは下地を色づけする 66 | if(CheckBox_mouseOn) 67 | colorRect(l+1, t+1, w-2, h-2, clHighlight, 64); // ハイライトする 68 | 69 | // 記号を描画 70 | if(CheckBox_checked) 71 | { 72 | CheckBox_glyph.face = dfOpaque; 73 | CheckBox_glyph.holdAlpha = true; 74 | CheckBox_glyph.fillRect(0, 0, w, h, CheckBox_glyphColor); // 記号色で塗る 75 | operateRect(l, t, CheckBox_glyph, 0, 0, w, h, omAlpha); 76 | } 77 | 78 | // 枠を描画 79 | colorRect(l, t, w, 1, 0x000000, 128); 80 | colorRect(l, t+1, 1, h-2, 0x000000, 128); 81 | colorRect(l+w-1, t+1, 1, h-1, 0xffffff, 128); 82 | colorRect(l+1, t+h-1, w-2, 1, 0xffffff, 128); 83 | 84 | if(focused) 85 | { 86 | // フォーカスがあるのでハイライトする 87 | colorRect(l+2, t+2, w-4, 1, clHighlight, 128); 88 | colorRect(l+2, t+3, 1, h-5, clHighlight, 128); 89 | colorRect(l+3, t+h-3, w-5, 1, clHighlight, 128); 90 | colorRect(l+w-3, t+3, 1, h-6, clHighlight, 128); 91 | } 92 | 93 | } 94 | 95 | function onPaint() 96 | { 97 | // 描画の直前に呼ばれる 98 | super.onPaint(...); 99 | draw(); 100 | } 101 | 102 | function onMouseEnter() 103 | { 104 | // マウスがレイヤ領域内に入った 105 | CheckBox_mouseOn = true; 106 | update(); 107 | super.onMouseEnter(...); 108 | } 109 | 110 | function onMouseLeave() 111 | { 112 | // マウスがレイヤ領域から出ていった 113 | CheckBox_mouseOn = false; 114 | update(); 115 | super.onMouseLeave(...); 116 | } 117 | 118 | function onNodeDisabled() 119 | { 120 | // レイヤのノードが不可になった 121 | super.onNodeDisabled(...); 122 | update(); 123 | } 124 | 125 | function onNodeEnabled() 126 | { 127 | // レイヤのノードが有効になった 128 | super.onNodeEnabled(...); 129 | update(); 130 | } 131 | 132 | function onFocus() 133 | { 134 | // フォーカスを得た 135 | super.onFocus(...); 136 | update(); 137 | } 138 | 139 | function onBlur() 140 | { 141 | // フォーカスを失った 142 | super.onBlur(...); 143 | update(); 144 | } 145 | 146 | function onMouseDown() 147 | { 148 | // onMouseDown イベントハンドラ 149 | focus(); 150 | CheckBox_checked = !CheckBox_checked; 151 | update(); 152 | super.onMouseDown(...); 153 | } 154 | 155 | function onMouseUp() 156 | { 157 | // onMouseUp イベントハンドラ 158 | update(); 159 | super.onMouseUp(...); 160 | } 161 | 162 | function onKeyDown(key, shift, process) 163 | { 164 | // キーが押された 165 | if(process) 166 | { 167 | if(key == VK_RETURN || key == VK_SPACE) 168 | { 169 | // スペースキーまたはエンターキー 170 | CheckBox_checked = !CheckBox_checked; 171 | update(); 172 | super.onKeyDown(key, shift, false); // 処理をしたのでprocessにfalseを渡す 173 | } 174 | else 175 | { 176 | super.onKeyDown(...); 177 | } 178 | } 179 | else 180 | { 181 | // process が false の場合は処理は行わない 182 | super.onKeyDown(...); 183 | } 184 | } 185 | 186 | property width 187 | { 188 | setter(x) 189 | { 190 | super.width = x; 191 | imageWidth = x; 192 | update(); 193 | } 194 | getter 195 | { 196 | return super.width; 197 | } 198 | } 199 | 200 | property height 201 | { 202 | setter(x) 203 | { 204 | super.height = x; 205 | imageHeight = x; 206 | update(); 207 | } 208 | getter 209 | { 210 | return super.height; 211 | } 212 | } 213 | 214 | property color 215 | { 216 | setter(x) 217 | { 218 | CheckBox_color = int x; 219 | update(); 220 | } 221 | getter 222 | { 223 | return CheckBox_color; 224 | } 225 | } 226 | 227 | property glyphColor 228 | { 229 | setter(x) 230 | { 231 | CheckBox_glyphColor = int x; 232 | update(); 233 | } 234 | getter 235 | { 236 | return CheckBox_glyphColor; 237 | } 238 | } 239 | 240 | property bgOpacity 241 | { 242 | setter(x) 243 | { 244 | CheckBox_opacity = int x; 245 | update(); 246 | } 247 | getter 248 | { 249 | return CheckBox_opacity; 250 | } 251 | } 252 | 253 | property checked 254 | { 255 | setter(x) 256 | { 257 | CheckBox_checked = int x; 258 | update(); 259 | } 260 | getter 261 | { 262 | return CheckBox_checked; 263 | } 264 | } 265 | } 266 | 267 | 268 | -------------------------------------------------------------------------------- /data/system/Ham/Base/MercuryBlue.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | Base/MercuryBlue.tjs 3 | 4 | Ham拡張(MercuryBlue)システムの統括。 5 | 具体的には、独自クラスをきちんと片付けたり、 6 | 余計なものをセーブしないようにしたりします。 7 | 8 | このオブジェクトは必ずkag.addPlugin()されていなければなりません。 9 | *******************************************************************************/ 10 | 11 | 12 | class MercuryBlue extends KAGPlugin 13 | { 14 | // プロパティ 15 | var window; // ウィンドウ参照 16 | 17 | // 管理オブジェクト 18 | var objSystemManager; // システムマネージャ 19 | //var objGraphicManager; // 画像オブジェクトマネージャ 20 | //var objSceneManager; // ノベルマネージャ 21 | 22 | var objXMBPluginKeys = []; // XMBプラグイン管理キー配列 23 | var objXMBPlugins = %[]; // XMBプラグイン管理辞書配列 24 | 25 | 26 | // その他インスタンス変数 27 | var objTemps = []; // その他一時使用オブジェクト格納用配列 28 | 29 | 30 | 31 | function MercuryBlue(win) 32 | { 33 | // コンストラクタ 34 | 35 | window = win; 36 | 37 | objSystemManager = new MBSystemManager(window); 38 | //objGraphicManager = new MBGraphicManager(window); 39 | //objSceneManager = new MBSceneManager2(window); 40 | } 41 | 42 | function finalize() 43 | { 44 | // ファイナライザ 45 | 46 | var i; 47 | for (i=0; i 一時オブジェクトが生成されました (計 %d 個)。".sprintf(objTemps.count)); 69 | return objTemps[objTemps.count - 1]; 70 | } 71 | 72 | function removeTempObject(obj) 73 | { 74 | // 一時オブジェクトを片付ける 75 | 76 | var index = objTemps.find(obj); 77 | invalidate objTemps[index] if (objTemps[index] !== void); 78 | objTemps.remove(obj); 79 | dm(" 一時オブジェクトが削除されました (計 %d 個)。".sprintf(objTemps.count)); 80 | } 81 | 82 | //-------------------------------------------------------------------------- 83 | 84 | function destoryAllTempObjects() 85 | { 86 | var i; 87 | for (i=0; i XMBプラグインが追加されました。現在 %d 個のプラグインが管理下にあります。".sprintf(objXMBPluginKeys.count)); 118 | 119 | return key; 120 | } 121 | } 122 | 123 | //-------------------------------------------------------------------------- 124 | 125 | function removeXMBPlugin(key) 126 | { 127 | // プラグインを抜く 128 | 129 | if (key == "") { 130 | return; 131 | } 132 | 133 | var idx = objXMBPluginKeys.find(key); 134 | 135 | if (idx < 0) { 136 | dm(" 指定されたXMBプラグインは使用されていないか、管理下にありません。この処理はスキップされました。"); 137 | return; 138 | } 139 | 140 | invalidate objXMBPlugins[key] if (objXMBPlugins[key] !== void); 141 | objXMBPluginKeys.erase(idx); 142 | 143 | dm(" XMBプラグインが削除されました。現在 %d 個のプラグインが管理下にあります。".sprintf(objXMBPluginKeys.count)); 144 | } 145 | 146 | 147 | //========================================================================== 148 | 149 | function onStore(f, elm) 150 | { 151 | // セーブ時に呼ばれる 152 | 153 | dm(" データのセーブを開始します..."); 154 | var st = System.getTickCount(); 155 | 156 | if (f.MercuryBlue === void) { 157 | f.MercuryBlue = %[ 158 | plugins : %[] 159 | ]; 160 | } 161 | 162 | var dict = f.MercuryBlue; 163 | dict.systemManager = objSystemManager.save(); 164 | //dict.graphicManager = objGraphicManager.save(); 165 | //dict.sceneManager = objSceneManager.save(); 166 | 167 | var i; 168 | for (i=0; i データのセーブが完了しました (%dmsec)".sprintf(System.getTickCount() - st)); 174 | } 175 | 176 | function onRestore(f, elm, clear) 177 | { 178 | // ロード時に呼ばれる 179 | 180 | dm(" データのロードを開始します..."); 181 | var st = System.getTickCount(); 182 | 183 | // 一時オブジェクトは全て破棄する 184 | var i; 185 | for (i=0; i データのロードが完了しました (%dmsec)".sprintf(System.getTickCount() - st)); 211 | } 212 | } 213 | -------------------------------------------------------------------------------- /data/system/SE.tjs: -------------------------------------------------------------------------------- 1 | // SE.tjs - 効果音管理 2 | // Copyright (C)2001-2009, W.Dee and contributors 改変・配布は自由です 3 | 4 | class SESoundBuffer extends WaveSoundBuffer 5 | { 6 | // 効果音クラス ( WaveSoundBuffer を継承 ) 7 | 8 | var owner; // オーナー 9 | var id; // 効果音バッファID 10 | var inFading; // フェード中かどうか 11 | var prevstatus = "unload"; // 直前のステータス 12 | var currentStorage = ""; // 見かけの演奏中のストレージ 13 | var currentVolume = 100; // 見かけのボリューム 14 | var inFadeAndStop = false; // フェード終了時に停止するか 15 | 16 | function SESoundBuffer(owner, id) 17 | { 18 | // コンストラクタ 19 | super.WaveSoundBuffer(owner); 20 | 21 | this.owner = owner; 22 | this.id = id; 23 | } 24 | 25 | function finalize() 26 | { 27 | // finalize() 28 | super.finalize(...); 29 | } 30 | 31 | function play(elm, resetvolume = true) 32 | { 33 | // play オーバーライド 34 | super.stop(); 35 | stopFade(); 36 | var storage = elm.storage; 37 | var start = elm.start; 38 | var found = true; 39 | if(!Storages.isExistentStorage(storage)) 40 | { 41 | var test; 42 | if(test = storage + ".wav", Storages.isExistentStorage(test)) 43 | storage = test; 44 | else if(test = storage + ".ogg", Storages.isExistentStorage(test)) 45 | storage = test; 46 | else if(test = storage + ".opus", Storages.isExistentStorage(test)) 47 | storage = test; 48 | else if(test = storage + ".tcw", Storages.isExistentStorage(test)) 49 | storage = test; 50 | else 51 | found = false; 52 | } 53 | if(!found) 54 | throw new Exception("効果音 " + storage + " が見つかりません"); 55 | var loop = elm.loop === void ? false : +elm.loop; 56 | looping = loop; 57 | if(loop) 58 | currentStorage = storage; 59 | else 60 | currentStorage = ""; 61 | try 62 | { 63 | super.open(storage); 64 | if(resetvolume) super.volume = currentVolume * 1000; 65 | // 再生位置指定 66 | if (start !== void && 67 | super.labels !== void && 68 | (start = super.labels[start]) !== void && 69 | (start = start.samplePosition) !== void) { 70 | super.samplePosition = start; 71 | } 72 | super.play(); 73 | } 74 | catch(e) 75 | { 76 | dm("効果音の再生に失敗しました(実行は続行できます) : " + e.message); 77 | } 78 | } 79 | 80 | function stop() 81 | { 82 | // stop オーバーライド 83 | currentStorage = ""; 84 | try 85 | { 86 | super.stop(...); 87 | } 88 | catch(e) 89 | { 90 | dm("効果音の停止に失敗しました(実行は続行できます) : " + e.message); 91 | } 92 | inFadeAndStop = false; 93 | } 94 | 95 | function stopFade() 96 | { 97 | // stopFade オーバーライド 98 | try 99 | { 100 | super.stopFade(); 101 | } 102 | catch(e) 103 | { 104 | dm("効果音のフェードに失敗しました(実行は続行できます) : " + e.message); 105 | } 106 | inFadeAndStop = false; 107 | } 108 | 109 | function fade(elm) 110 | { 111 | // fade オーバーライド 112 | inFading = true; 113 | var time = elm.time === void ? 5000 : +elm.time; 114 | var vol = +elm.volume * 1000; 115 | currentVolume = +elm.volume; 116 | try 117 | { 118 | super.fade(vol, time); 119 | } 120 | catch(e) 121 | { 122 | dm("効果音のフェードに失敗しました(実行は続行できます) : " + e.message); 123 | } 124 | } 125 | 126 | function fadeIn(elm) 127 | { 128 | // フェードインしながらの再生 129 | super.volume = 0; 130 | play(elm, false); 131 | inFading = true; 132 | var time = elm.time === void ? 5000 : +elm.time; 133 | var vol = currentVolume * 1000; 134 | try 135 | { 136 | super.fade(vol, time); 137 | } 138 | catch(e) 139 | { 140 | dm("効果音のフェードに失敗しました(実行は続行できます) : " + e.message); 141 | } 142 | } 143 | 144 | function fadeOut(elm) 145 | { 146 | // フェードアウト後停止 147 | currentStorage = ""; // 状態としては停止扱い 148 | inFading = true; 149 | inFadeAndStop = true; 150 | var time = elm.time === void ? 5000 : +elm.time; 151 | try 152 | { 153 | super.fade(0, time); 154 | } 155 | catch(e) 156 | { 157 | dm("効果音のフェードに失敗しました(実行は続行できます) : " + e.message); 158 | } 159 | } 160 | 161 | function onFadeCompleted() 162 | { 163 | // onFadeCompleted オーバーライド 164 | inFading = false; 165 | if(inFadeAndStop) 166 | { 167 | try 168 | { 169 | super.stop(); // 再生停止 170 | } 171 | catch(e) 172 | { 173 | dm("効果音の停止に失敗しました(実行は続行できます) : " + e.message); 174 | } 175 | inFadeAndStop = false; 176 | } 177 | super.onFadeCompleted(...); 178 | owner.onSESoundBufferFadeCompleted(id); // フェード終了 179 | } 180 | 181 | function onStatusChanged() 182 | { 183 | // onStatusChanged オーバーライド 184 | // ステータスが変更された 185 | super.onStatusChanged(...); 186 | var ps = prevstatus; 187 | var cs = status; 188 | prevstatus = cs; 189 | if(ps == "play" && cs == "stop") 190 | { 191 | currentStorage = ""; 192 | owner.onSESoundBufferStop(id); // play => stop : 演奏が停止した 193 | } 194 | } 195 | 196 | function canWaitStop() 197 | { 198 | // 終了を待てるか 199 | return status == "play" && !looping; 200 | } 201 | 202 | property volume 203 | { 204 | setter(x) 205 | { 206 | currentVolume = x; 207 | super.volume = x * 1000; 208 | } 209 | getter 210 | { 211 | return super.volume \ 1000; 212 | } 213 | } 214 | 215 | property pan 216 | { 217 | setter(x) 218 | { 219 | super.pan = x * 1000; 220 | } 221 | getter 222 | { 223 | return super.pan \ 1000; 224 | } 225 | } 226 | 227 | function setOptions(elm) 228 | { 229 | if(elm.volume !== void) volume = +elm.volume; 230 | if(elm.gvolume !== void) 231 | { 232 | // 大域ボリューム 233 | var sysvar = owner.scflags; // システム(コア)変数 234 | if(sysvar.se === void) sysvar.se = []; 235 | sysvar = sysvar.se; 236 | if(sysvar[id] === void) sysvar[id] = %[]; 237 | sysvar = sysvar[id]; 238 | var v2 = +elm.gvolume; 239 | v2 = int(v2 * 1000); 240 | sysvar.globalVolume = v2; 241 | if (sysvar.enable === void || sysvar.enable) { 242 | volume2 = v2; 243 | } else { 244 | volume2 = 0; 245 | } 246 | } 247 | if(elm.pan !== void) 248 | { 249 | pan = +elm.pan; 250 | } 251 | } 252 | 253 | function store() 254 | { 255 | // 辞書配列に現在の状態を記録する 256 | var dic = %[]; 257 | dic.currentStorage = currentStorage; 258 | dic.volume = currentVolume; 259 | dic.pan = pan; 260 | return dic; 261 | } 262 | 263 | function restore(dic) 264 | { 265 | // 辞書配列から状態を読み出し、復帰する 266 | currentVolume = dic.volume; 267 | pan = dic.pan; 268 | if(dic.currentStorage != "") 269 | play(%[storage : dic.currentStorage, loop : true]); 270 | else 271 | stop(); 272 | } 273 | 274 | function restoreSystemState(dic) 275 | { 276 | // システム変数 dic から情報を設定する 277 | // 大域ボリュームの情報を得る 278 | var sysvar = dic.se; 279 | if(sysvar !== void) 280 | { 281 | sysvar = sysvar[id]; 282 | if(sysvar !== void) 283 | { 284 | if (sysvar.enable === void || sysvar.enable) { 285 | var v2 = sysvar.globalVolume; 286 | if(v2 !== void) { 287 | volume2 = +v2; 288 | } 289 | } else { 290 | volume2 = 0; 291 | } 292 | } 293 | } 294 | } 295 | } 296 | -------------------------------------------------------------------------------- /data/system/Ham/Base/modules/system/MBQuickSave.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | system_mb/mb/system/MBQuickSave.tjs 3 | *******************************************************************************/ 4 | 5 | class MBQuickSave extends MBComponentLayer 6 | { 7 | var isNewLayer = false; 8 | 9 | var intBookMarkNumber = MBSystemPref.quickSaveBookMark; // 使用する栞の番号 10 | 11 | var objSaveButton; 12 | var objLoadButton; 13 | var objDialog; 14 | 15 | var currentMode; // セーブ中かロード中か 16 | 17 | 18 | function MBQuickSave(win, par) 19 | { 20 | // コンストラクタ 21 | 22 | super.MBComponentLayer(win, par); 23 | 24 | width = 100; 25 | height = 20; 26 | hitType = htMask; 27 | hitThreshold = 256; 28 | absolute = MBLayerAbs.quicksave; 29 | visible = false; 30 | name = "クイックセーブ"; 31 | 32 | init(); 33 | } 34 | 35 | function finalize() 36 | { 37 | // ファイナライザ 38 | 39 | invalidate objSaveButton if (objSaveButton !== void); 40 | invalidate objLoadButton if (objLoadButton !== void); 41 | invalidate objDialog if (objDialog !== void); 42 | 43 | super.finalize(...); 44 | } 45 | 46 | //-------------------------------------------------------------------------- 47 | 48 | function init() 49 | { 50 | // 初期化 51 | 52 | fillRect(0, 0, width, height, 0x00000000); 53 | 54 | objSaveButton = new MBButton(window, this); 55 | objSaveButton.setSizeToImageSize(); 56 | objSaveButton.loadImages(sysfunc.getPathImage('bookmark/bt_quicksave')); 57 | objSaveButton.setPos(0, 0); 58 | objSaveButton.visible = true; 59 | 60 | objLoadButton = new MBButton(window, this); 61 | objLoadButton.setSizeToImageSize(); 62 | objLoadButton.loadImages(sysfunc.getPathImage('bookmark/bt_quickload')); 63 | objLoadButton.setPos( 64 | objSaveButton.left + objSaveButton.width + MBGraphicPref.quicksaveButtonMargin.x, 65 | objSaveButton.top + objSaveButton.height + MBGraphicPref.quicksaveButtonMargin.y 66 | ); 67 | objLoadButton.visible = true; 68 | 69 | // レイヤ幅を調整しておく 70 | var nw = objLoadButton.width + objLoadButton.left; 71 | var nh = objSaveButton.height + objSaveButton.top; 72 | if (objLoadButton.height + objLoadButton.top > nh) { 73 | nh = objLoadButton.height + objLoadButton.top; 74 | } 75 | 76 | 77 | setSize(nw, nh); 78 | setPositionByPreference(); 79 | } 80 | 81 | 82 | function setPositionByPreference() 83 | { 84 | // 設定ファイルに従って表示位置を設定する 85 | 86 | var bw = window.fore.base.width; 87 | var bh = window.fore.base.height; 88 | 89 | switch (MBGraphicPref.quicksavePositionType) { 90 | case "lbMargin": 91 | setPos(MBGraphicPref.quicksavePositionValue.x, 92 | bh - (height + MBGraphicPref.quicksavePositionValue.y)); 93 | break; 94 | 95 | case "rbMargin": 96 | setPos(bw - (width + MBGraphicPref.quicksavePositionValue.x), 97 | bh - (height + MBGraphicPref.quicksavePositionValue.y)); 98 | break; 99 | 100 | case "rtMargin": 101 | setPos(bw - (width + MBGraphicPref.quicksavePositionValue.x), 102 | MBGraphicPref.quicksavePositionValue.y); 103 | break; 104 | 105 | case "ltMargin": 106 | case "absolute": 107 | default: 108 | setPos(MBGraphicPref.quicksavePositionValue.x, 109 | MBGraphicPref.quicksavePositionValue.y); 110 | break; 111 | } 112 | } 113 | 114 | 115 | //========================================================================== 116 | // ステータスの変更関連 117 | 118 | function show() 119 | { 120 | // 表示 121 | 122 | visible = true; 123 | } 124 | 125 | //-------------------------------------------------------------------------- 126 | 127 | function hide() 128 | { 129 | // 隠す 130 | 131 | visible = false; 132 | enabled = false; 133 | } 134 | 135 | //-------------------------------------------------------------------------- 136 | 137 | function setEnabled() 138 | { 139 | // 機能を有効にする 140 | 141 | enabled = true; 142 | } 143 | 144 | //-------------------------------------------------------------------------- 145 | 146 | function unsetEnabled() 147 | { 148 | // 機能を無効にする 149 | 150 | enabled = false; 151 | } 152 | 153 | //-------------------------------------------------------------------------- 154 | 155 | function setActiveness(enabled) 156 | { 157 | // 有効・表示状態を一括変更 158 | 159 | if (enabled) { 160 | show(); 161 | setEnabled(); 162 | } 163 | else { 164 | hide(); 165 | unsetEnabled(); 166 | } 167 | } 168 | 169 | 170 | //========================================================================== 171 | // 動作関連 172 | 173 | function onSelectedItemClick(sender) 174 | { 175 | // ボタンが押されたときの動作 176 | 177 | var withConfirmation = (sf.userconfig.qsWithoutDialog) ? false : true; 178 | 179 | switch (sender) { 180 | case objSaveButton: 181 | quickSave(withConfirmation); 182 | break; 183 | 184 | case objLoadButton: 185 | quickLoad(withConfirmation); 186 | break; 187 | } 188 | } 189 | 190 | //-------------------------------------------------------------------------- 191 | 192 | function quickSave(cf) 193 | { 194 | // クイックセーブ 195 | 196 | if (cf) { 197 | currentMode = 'save'; 198 | var str = 'このシーンでクイックセーブします。\nよろしいですか?'; 199 | invalidate objDialog if (objDialog !== void); 200 | objDialog = new MBPseudyYesNoDialog(window, window.fore.base, this, str); 201 | objDialog.show(); 202 | } 203 | else { 204 | internalQuickSave(); 205 | } 206 | } 207 | 208 | //-------------------------------------------------------------------------- 209 | 210 | function internalQuickSave() 211 | { 212 | // セーブを実際に行う 213 | 214 | f.current_savenum = intBookMarkNumber; 215 | 216 | window.saveBookMark(intBookMarkNumber); 217 | } 218 | 219 | //-------------------------------------------------------------------------- 220 | 221 | function quickLoad(cf) 222 | { 223 | // クイックロード 224 | 225 | // もしデータがなければ戻る 226 | if (!Storages.isExistentStorage("%s/%s%d.bmp".sprintf(window.saveDataLocation, window.dataName, intBookMarkNumber))) { 227 | return; 228 | } 229 | 230 | if (cf) { 231 | currentMode = 'load'; 232 | var str = 'クイックセーブしたシーンから再開します。\nよろしいですか?'; 233 | invalidate objDialog if (objDialog !== void); 234 | objDialog = new MBPseudyYesNoDialog(window, window.fore.base, this, str); 235 | objDialog.show(); 236 | } 237 | else { 238 | internalQuickLoad(); 239 | } 240 | } 241 | 242 | //-------------------------------------------------------------------------- 243 | 244 | function internalQuickLoad() 245 | { 246 | // ロードを実際に行う 247 | 248 | tf.lastloaded_savenum = intBookMarkNumber; 249 | 250 | window.loadBookMark(intBookMarkNumber); 251 | } 252 | 253 | //-------------------------------------------------------------------------- 254 | 255 | function onYesNoSelected(res) 256 | { 257 | // Yes/Noの選択結果 258 | 259 | if (res) { 260 | switch (currentMode) { 261 | case 'save': 262 | internalQuickSave(); 263 | break; 264 | 265 | case 'load': 266 | internalQuickLoad(); 267 | break; 268 | } 269 | } 270 | } 271 | 272 | //-------------------------------------------------------------------------- 273 | 274 | function onEscapeKeyDown(key) 275 | { 276 | // エスケープキーが押されても何もしない 277 | } 278 | } 279 | -------------------------------------------------------------------------------- /data/system/Initialize.tjs: -------------------------------------------------------------------------------- 1 | // Initialize.tjs - システムの初期化 2 | // Copyright (C)2001-2009, W.Dee and contributors 改変・配布は自由です 3 | 4 | // システムバージョン 5 | var kagVersion = "3.32 stable rev. 2"; 6 | 7 | /* 8 | Debug.message へのショートカット 9 | */ 10 | 11 | var dm = Debug.message; // これで dm("message"); でコンソールに message を表示できる 12 | 13 | 14 | /* 15 | デフォルトの「捕捉されない例外」ハンドラ 16 | */ 17 | 18 | System.exceptionHandler = function (e) 19 | { 20 | // どこにも捕捉されない例外がシステム側で捕捉された場合、この関数が 21 | // 呼ばれる。e は例外オブジェクト。 22 | if(e instanceof "ConductorException") 23 | { 24 | // コンダクタの投げた例外の場合 25 | Debug.logAsError(); // ログのファイルへの書き出し動作の開始など 26 | var event_disabled = System.eventDisabled; 27 | System.eventDisabled = true; 28 | // エラーの理由を表示させている間にイベントが発生すると 29 | // やっかいなのでいったんイベント発生を停止させる 30 | System.inform(e.message); 31 | System.eventDisabled = event_disabled; 32 | // イベントを発生するかどうかを元の状態に 33 | return true; // true を返すと本体側で例外の処理は行わなくなる 34 | } 35 | else 36 | { 37 | return false; // false を返すと通常の例外処理 38 | } 39 | }; 40 | 41 | 42 | /* 43 | パスの設定 44 | 後に指定した物が、より優先されて使用される 45 | */ 46 | 47 | 48 | function useArchiveIfExists(name) 49 | { 50 | // name が存在していたらそのアーカイブを使う 51 | var arcname; 52 | if(Storages.isExistentStorage(arcname = System.exePath + name)) 53 | Storages.addAutoPath(arcname + ">"); 54 | } 55 | 56 | Storages.addAutoPath(System.exePath + "video/"); // exePath 以下の video/ 57 | Storages.addAutoPath("video/"); // video フォルダ 58 | Storages.addAutoPath("others/"); // その他 59 | Storages.addAutoPath("rule/"); // ルール画像フォルダ 60 | Storages.addAutoPath("sound/"); // 効果音フォルダ 61 | Storages.addAutoPath("bgm/"); // BGM フォルダ 62 | Storages.addAutoPath("fgimage/"); // 前景画像フォルダ 63 | Storages.addAutoPath("bgimage/"); // 背景画像フォルダ 64 | Storages.addAutoPath("scenario/"); // シナリオフォルダ 65 | Storages.addAutoPath("image/"); // そのほかの画像フォルダ 66 | Storages.addAutoPath("system/"); // システムフォルダ 67 | 68 | // パッチアーカイブの検索と使用 69 | // もしこれらの名前を持ったアーカイブが実行可能ファイルと 70 | // 同じ場所にあった場合、それを優先して使う 71 | useArchiveIfExists("video.xp3"); 72 | useArchiveIfExists("others.xp3"); 73 | useArchiveIfExists("rule.xp3"); 74 | useArchiveIfExists("sound.xp3"); 75 | useArchiveIfExists("bgm.xp3"); 76 | useArchiveIfExists("fgimage.xp3"); 77 | useArchiveIfExists("bgimage.xp3"); 78 | useArchiveIfExists("scenario.xp3"); 79 | useArchiveIfExists("image.xp3"); 80 | useArchiveIfExists("system.xp3"); 81 | 82 | useArchiveIfExists("patch.xp3"); 83 | 84 | // 追加のパッチ用アーカイブの検索 85 | for(var i = 2; ; i++) 86 | { 87 | // パッチ用アーカイブ patch2.xp3, patch3.xp3 ... がある場合はそちらを 88 | // 優先して読み込むように 89 | if(Storages.isExistentStorage(System.exePath + "patch" + i + ".xp3")) 90 | Storages.addAutoPath(System.exePath + "patch" + i + ".xp3>"); 91 | else 92 | break; 93 | } 94 | 95 | delete useArchiveIfExists; // useArchiveIfExists は使い終わったので一応消しておく 96 | 97 | /* 98 | システムバージョン 99 | */ 100 | Debug.notice("OS : " + System.osName + " (" + System.platformName + ")"); 101 | Debug.notice("KAG : " + kagVersion); 102 | Debug.notice("Kirikiri : " + System.versionString); 103 | 104 | /* 105 | ( デバッグ ) 時間計測 106 | */ 107 | 108 | var parseStartTick = System.getTickCount(); 109 | 110 | 111 | /* 112 | スクリプト読み込みラッパー 113 | */ 114 | 115 | function KAGLoadScript(name) 116 | { 117 | var start = System.getTickCount(); 118 | Scripts.execStorage(name); 119 | dm(name + " を読み込みました(" + (System.getTickCount() - start) + "ms)"); 120 | } 121 | 122 | var loaded_scripts = %[]; 123 | 124 | function KAGLoadScriptOnce(name) 125 | { 126 | // 指定したスクリプトを読み込むが、一回しか読み込まない 127 | if(global.loaded_scripts[name] === true) return; // 既に読み込んでいる 128 | global.KAGLoadScript(name); 129 | global.loaded_scripts[name] = true; 130 | } 131 | 132 | /* 133 | Config.tjs 読み込み 134 | */ 135 | if(Storages.isExistentStorage("Config.tjs")) 136 | { 137 | KAGLoadScript("Config.tjs"); 138 | } 139 | else if(Storages.isExistentStorage("Config.~new")) 140 | { 141 | System.inform("Config.tjs が見つかりません。\nsystem フォルダにある " 142 | "Config.~new ファイルを Config.tjs に改名してください。"); 143 | System.exit(); 144 | } 145 | else 146 | { 147 | throw new Exception("Config.tjs が見つかりません。"); 148 | } 149 | 150 | /* 151 | Config.tjs バージョンチェック 152 | */ 153 | 154 | if(typeof global.config_version == "undefined" || config_version != kagVersion) 155 | { 156 | KAGLoadScript("UpdateConfig.tjs"); 157 | } 158 | 159 | /* 160 | 二重起動のチェック 161 | */ 162 | 163 | // 実行可能ファイルのパスをキーにしてロックを行う 164 | if(!System.createAppLock(System.exePath.replace(/[^A-Za-z]/g, '_'))) 165 | { 166 | // すでに起動している 167 | System.inform(System.title + "はすでに起動しています"); 168 | System.exit(); 169 | } 170 | 171 | 172 | /* 173 | オン・デマンド・ローディングを行うための定義 174 | */ 175 | 176 | 177 | property askYesNo { getter() { KAGLoadScript("YesNoDialog.tjs"); return global.askYesNo; } } 178 | property CheckBoxLayer { getter() { KAGLoadScript("CheckBoxLayer.tjs"); return global.CheckBoxLayer; } } 179 | property ButtonLayer { getter() { KAGLoadScript("ButtonLayer.tjs"); return global.ButtonLayer; } } 180 | property EditLayer { getter() { KAGLoadScript("EditLayer.tjs"); return global.EditLayer; } } 181 | property KAGPlugin { getter() { KAGLoadScript("Plugin.tjs"); return global.KAGPlugin; } } 182 | 183 | /* 184 | 各システム読み込み 185 | */ 186 | dm("KAG System スクリプトを読み込んでいます..."); 187 | 188 | KAGLoadScript("Utils.tjs"); 189 | KAGLoadScript("KAGLayer.tjs"); 190 | KAGLoadScript("HistoryLayer.tjs"); 191 | KAGLoadScript("BGM.tjs"); 192 | KAGLoadScript("SE.tjs"); 193 | KAGLoadScript("Movie.tjs"); 194 | KAGLoadScript("Conductor.tjs"); 195 | KAGLoadScript("AnimationLayer.tjs"); 196 | KAGLoadScript("GraphicLayer.tjs"); 197 | KAGLoadScript("MessageLayer.tjs"); 198 | KAGLoadScript("Menus.tjs"); 199 | KAGLoadScript("DefaultMover.tjs"); 200 | KAGLoadScript("MainWindow.tjs"); 201 | if(Storages.isExistentStorage("Override.tjs")) 202 | KAGLoadScript("Override.tjs"); 203 | if(Storages.isExistentStorage(System.exePath + "Override2.tjs")) 204 | KAGLoadScript(System.exePath + "Override2.tjs"); 205 | 206 | 207 | /* 208 | ( デバッグ ) 時間計測 209 | */ 210 | dm("スクリプトの読み込みに " + (System.getTickCount() - parseStartTick) + "ms かかりました"); 211 | parseStartTick = System.getTickCount(); 212 | 213 | /* 214 | ( デバッグ ) VM コードのダンプ 215 | */ 216 | 217 | // Scripts.dump(); 218 | 219 | /* 220 | ( デバッグ ) 時間計測 221 | */ 222 | 223 | parseStartTick = System.getTickCount(); 224 | 225 | 226 | /* 227 | KAG メインウィンドウの作成 228 | グローバルメンバ kag が存在しなければ KAGWindow クラスの 229 | オブジェクトを作成して入れる 230 | */ 231 | 232 | global.kag = new KAGWindow() if typeof global.kag == "undefined"; 233 | 234 | 235 | 236 | 237 | /* 238 | グローバルから簡単にアクセスできるように、いくつかの 239 | 変数の別名を作成 240 | */ 241 | 242 | var f = kag.flags; // ユーザ変数 (フラグ) 243 | var sf = kag.sflags; // システム変数 (システム) 244 | var tf = kag.tflags; // 一時変数 (一時フラグ) 245 | 246 | property mp 247 | { 248 | getter { return kag.conductor.macroParams; } 249 | } 250 | 251 | /* 252 | ( デバッグ ) 時間計測 253 | */ 254 | dm("KAGMainWindow のコンストラクタで " + (System.getTickCount() - parseStartTick) + "ms かかりました"); 255 | delete parseStartTick; 256 | 257 | 258 | /* 259 | AfterInit.tjs が存在すれば実行 260 | */ 261 | if(Storages.isExistentStorage("AfterInit.tjs")) 262 | KAGLoadScript("AfterInit.tjs"); 263 | if(Storages.isExistentStorage(System.exePath + "AfterInit2.tjs")) 264 | KAGLoadScript(System.exePath + "AfterInit2.tjs"); 265 | 266 | /* 267 | コマンドラインパラメータとして -ovr が指定されていれば 268 | そのパラメータを TJS 式として実行 269 | */ 270 | { 271 | var ovr = System.getArgument('-ovr'); 272 | if(ovr !== void && ovr != 'yes') Scripts.eval(ovr); 273 | } 274 | 275 | /* 276 | Ham拡張の組み込み 277 | */ 278 | if (global.useHamExtention) { 279 | Scripts.execStorage("system/Ham/Ham.tjs"); 280 | } 281 | 282 | /* 283 | first.ks の実行 284 | */ 285 | 286 | kag.process("first.ks"); 287 | 288 | -------------------------------------------------------------------------------- /data/system/Ham/Base/modules/system/userconf/MBCharSpeedTestLayer.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | system_mb/mb/system/userpref/MBCharSpeedTestLayer.tjs 3 | *******************************************************************************/ 4 | 5 | //============================================================================== 6 | // 文字表示速度テストレイヤー 7 | 8 | class MBContextMenuCharSpeedTestLayer extends Layer 9 | { 10 | var textcolor = MBGraphicPref.ConfigTextColor; // 文字色 11 | var testtext; // テスト文字列 12 | var timer; // タイマ 13 | var counter; // カウンタ 14 | 15 | var intSpeedTestRingBufCount = 0; 16 | var objSpeedTestChars = []; 17 | 18 | var intLineWaitRingBufCount = 0; 19 | var intPageWaitRingBufCount = 0; 20 | 21 | var tmpPhase; 22 | var tmpWait; 23 | var tmpSpeed; 24 | var tmpContPoint; 25 | 26 | 27 | function MBContextMenuCharSpeedTestLayer(win, par) 28 | { 29 | super.Layer(win, par); 30 | 31 | setImageSize(578, 68); 32 | setSizeToImageSize(); 33 | initWindow(); 34 | name = '文字表示速度テスタ'; 35 | } 36 | 37 | function finalize() 38 | { 39 | invalidate timer if timer !== void; 40 | super.finalize(...); 41 | } 42 | 43 | function setSpeedTester(id) 44 | { 45 | // スピードテスト文字列を設定する 46 | 47 | objSpeedTestChars = MBGraphicPref.ConfigNormalTestText; 48 | intSpeedTestRingBufCount = 0; 49 | } 50 | 51 | function initWindow() 52 | { 53 | fillRect(0, 0, 575, 66, 0x00000000); 54 | font.height = 14; 55 | font.bold = true; 56 | drawText(10, 10, "[Speed Test]", textcolor); 57 | counter = 0; 58 | } 59 | 60 | function speedTest(speed) 61 | { 62 | // スピードテスト開始 63 | 64 | SystemManager.acActivateCanceller(); 65 | window.mouseCursorState = mcsHidden; 66 | 67 | initWindow(); 68 | do { 69 | testtext = getStringRandom(); 70 | } while (testtext == ""); 71 | 72 | font.height = 16; 73 | font.bold = false; 74 | 75 | if (speed > 0) { 76 | timer = new Timer(onTimer, ''); 77 | timer.interval = speed; 78 | timer.enabled = true; 79 | } 80 | else { 81 | //drawText(10, 35, testtext, textcolor); 82 | drawText(108, 9, testtext, textcolor); 83 | SystemManager.acDisactivateCanceller(); 84 | window.mouseCursorState = mcsVisible; 85 | } 86 | } 87 | 88 | function onTimer() 89 | { 90 | /*drawText(10 + font.getTextWidth(testtext.substring(0, counter)), 91 | 35,*/ 92 | drawText(108 + font.getTextWidth(testtext.substring(0, counter)), 93 | 9, 94 | testtext.charAt(counter), 95 | textcolor 96 | ); 97 | 98 | if (++counter == testtext.length) { 99 | timer.enabled = false; 100 | invalidate timer if (timer !== void); 101 | counter = 0; 102 | SystemManager.acDisactivateCanceller(); 103 | window.mouseCursorState = mcsVisible; 104 | } 105 | } 106 | 107 | function getStringRandom() 108 | { 109 | // テスト文をリングバッファ的に取得 110 | 111 | var str = objSpeedTestChars[intSpeedTestRingBufCount]; 112 | 113 | intSpeedTestRingBufCount += 1; 114 | if (intSpeedTestRingBufCount >= objSpeedTestChars.count) { 115 | intSpeedTestRingBufCount = 0; 116 | } 117 | 118 | return str; 119 | } 120 | 121 | //-------------------------------------------------------------------------- 122 | 123 | function lineWaitTest(speed, wait, phase) 124 | { 125 | // 行待ちテストを開始 126 | 127 | var lineWaitTestChars = MBGraphicPref.ConfigLineWaitTestText; 128 | 129 | tmpPhase = phase; 130 | testtext = lineWaitTestChars[phase - 1]; 131 | 132 | if (phase == 1) { 133 | SystemManager.acActivateCanceller(); 134 | window.mouseCursorState = mcsHidden; 135 | 136 | initWindow(); 137 | 138 | font.height = 16; 139 | font.bold = false; 140 | 141 | tmpSpeed = speed; 142 | tmpWait = wait; 143 | 144 | if (speed == 0) { 145 | // 文字速度がノーウェイトの場合は待たない 146 | testtext = lineWaitTestChars[0] + 147 | lineWaitTestChars[1]; 148 | drawText(108, 9, testtext, textcolor); 149 | intLineWaitRingBufCount += 1; 150 | SystemManager.acDisactivateCanceller(); 151 | window.mouseCursorState = mcsVisible; 152 | return; 153 | } 154 | } 155 | 156 | timer = new Timer(onTimerLineTest, ''); 157 | timer.interval = tmpSpeed; 158 | timer.enabled = true; 159 | } 160 | 161 | function onTimerLineTest() 162 | { 163 | // 行待ちテスト 164 | 165 | drawText(108 + font.getTextWidth(testtext.substring(0, counter)) + tmpContPoint, 166 | 9, 167 | testtext.charAt(counter), 168 | textcolor 169 | ); 170 | 171 | if (++counter == testtext.length) { 172 | timer.enabled = false; 173 | invalidate timer if (timer !== void); 174 | tmpContPoint = font.getTextWidth(testtext.substring(0, counter)); 175 | counter = 0; 176 | if (tmpPhase == 1) { 177 | timer = new Timer(onTimerWait, ''); 178 | timer.interval = tmpWait; 179 | timer.enabled = true; 180 | } 181 | else { 182 | tmpContPoint = 0; 183 | intLineWaitRingBufCount = 0; 184 | SystemManager.acDisactivateCanceller(); 185 | window.mouseCursorState = mcsVisible; 186 | } 187 | } 188 | } 189 | 190 | function onTimerWait() 191 | { 192 | // 待つ 193 | 194 | timer.enabled = false; 195 | invalidate timer if (timer !== void); 196 | 197 | if (tmpContPoint) { 198 | lineWaitTest('', '', 2); 199 | } 200 | else { 201 | pageWaitTest('', '', 2); 202 | } 203 | } 204 | 205 | //-------------------------------------------------------------------------- 206 | 207 | function pageWaitTest(speed, wait, phase) 208 | { 209 | // ページ待ちテストを開始 210 | 211 | tmpPhase = phase; 212 | 213 | initWindow(); 214 | font.height = 16; 215 | font.bold = false; 216 | 217 | if (phase == 1) { 218 | SystemManager.acActivateCanceller(); 219 | window.mouseCursorState = mcsHidden; 220 | 221 | tmpSpeed = speed; 222 | tmpWait = wait; 223 | } 224 | 225 | testtext = MBGraphicPref.ConfigPageWaitTestText[intPageWaitRingBufCount]; 226 | 227 | if (tmpSpeed == 0) { 228 | // 文字速度がノーウェイトの場合は待たない 229 | drawText(108, 9, testtext, textcolor); 230 | intPageWaitRingBufCount += 1; 231 | if (intPageWaitRingBufCount >= MBGraphicPref.ConfigPageWaitTestText.count) { 232 | intPageWaitRingBufCount = 0; 233 | SystemManager.acDisactivateCanceller(); 234 | window.mouseCursorState = mcsVisible; 235 | return; 236 | } 237 | else { 238 | timer = new Timer(onTimerWait, ''); 239 | timer.interval = tmpWait; 240 | timer.enabled = true; 241 | } 242 | } 243 | else { 244 | timer = new Timer(onTimerPageTest, ''); 245 | timer.interval = tmpSpeed; 246 | timer.enabled = true; 247 | } 248 | } 249 | 250 | function onTimerPageTest() 251 | { 252 | // ページ待ちテスト 253 | 254 | drawText(108 + font.getTextWidth(testtext.substring(0, counter)), 255 | 9, 256 | testtext.charAt(counter), 257 | textcolor 258 | ); 259 | 260 | if (++counter == testtext.length) { 261 | timer.enabled = false; 262 | invalidate timer if (timer !== void); 263 | counter = 0; 264 | if (tmpPhase == 1) { 265 | timer = new Timer(onTimerWait, ''); 266 | timer.interval = tmpWait; 267 | timer.enabled = true; 268 | } 269 | else { 270 | tmpContPoint = 0; 271 | SystemManager.acDisactivateCanceller(); 272 | window.mouseCursorState = mcsVisible; 273 | } 274 | 275 | intPageWaitRingBufCount += 1; 276 | if (intPageWaitRingBufCount >= MBGraphicPref.ConfigPageWaitTestText.count) { 277 | intPageWaitRingBufCount = 0; 278 | } 279 | } 280 | } 281 | 282 | //-------------------------------------------------------------------------- 283 | 284 | function onMouseDown(x, y, button, shift) 285 | { 286 | if (button == mbRight) 287 | { 288 | parent.onChildrenRightClick(); 289 | return; 290 | } 291 | 292 | super.onMouseDown(...); 293 | } 294 | } 295 | 296 | -------------------------------------------------------------------------------- /data/system/Ham/Base/ui/MBSelectItem.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | system_mb/ui/MBSelectItem 3 | 4 | カーソル移動情報を持った選択肢クラス 5 | *******************************************************************************/ 6 | 7 | class MBSelectItem extends KAGLayer 8 | { 9 | var strItemLabel; // 表示する文字列 10 | 11 | var fontSize = MBFontStyle.size.label; // 文字サイズ 12 | var fontFace = MBFontStyle.face.normal; // フォント 13 | var fontColor = MBColors.font.label.normal; // 文字色 14 | var fontColorDisabled = MBColors.font.label.disabled; // 選択不可色 15 | var bgColor = MBColors.font.label.bg_notmal; // 通常時背景色 16 | var bgColorFocused = MBColors.font.label.bg_selected; // フォーカス時背景色 17 | 18 | var intHorizontalMargin = 2; // 横マージン 19 | var intVerticalMargin = 1; // 縦マージン 20 | 21 | var isSelected = false; 22 | var objCursorMapHash = %[ 23 | up : false, 24 | down : false, 25 | right : false, 26 | left : false, 27 | prevGroup : false, 28 | nextGroup : false 29 | ]; 30 | 31 | var ptFocusController; // フォーカスコントローラ参照 32 | var ptActionCanceller; // アクションキャンセラ参照 33 | 34 | var fltHorizontalFocusPoint = 0.25; // フォーカスするポイント(横幅に対する割合) 35 | var fltVerticalFocusPoint = 0.5; // フォーカスするポイント(縦幅に対する割合) 36 | 37 | var blKeyLock; // 二重押下防止 38 | var blActive; // アクティブかどうか 39 | 40 | 41 | function MBSelectItem(win, par, str) 42 | { 43 | // コンストラクタ 44 | 45 | super.KAGLayer(win, par); 46 | 47 | ptFocusController = SystemManager.objFocusController; 48 | ptActionCanceller = SystemManager.objActionCanceller; 49 | strItemLabel = str; 50 | 51 | name = '選択肢'; 52 | face = dfBoth; 53 | hitType = htMask; 54 | hitThreshold = 0; 55 | focusable = true; 56 | 57 | font.height = fontSize; 58 | font.face = fontFace; 59 | 60 | setSize(font.getTextWidth(strItemLabel) + intHorizontalMargin * 2, fontSize + intVerticalMargin * 2); 61 | 62 | drawItemFace(); 63 | } 64 | 65 | function finalize() 66 | { 67 | // ファイナライザ 68 | 69 | super.finalize(...); 70 | } 71 | 72 | //-------------------------------------------------------------------------- 73 | 74 | function drawItemFace() 75 | { 76 | // 通常のリンク文字を描く 77 | 78 | fillRect(0, 0, width, height, bgColor); 79 | drawText(intHorizontalMargin, intVerticalMargin, strItemLabel, fontColor); 80 | 81 | blActive = true; 82 | } 83 | 84 | function drawItemFaceFocused() 85 | { 86 | // 選択状態リンク文字を描く 87 | 88 | if (parent.isNewLayer) { 89 | parent.isNewLayer = false; 90 | } 91 | else { 92 | sndfunc.seSelect(); 93 | } 94 | 95 | fillRect(0, 0, width, height, bgColorFocused); 96 | drawText(intHorizontalMargin, intVerticalMargin, strItemLabel, fontColor); 97 | } 98 | 99 | function drawItemFaceDisabled() 100 | { 101 | // 選択不可のリンク文字を描く 102 | 103 | fillRect(0, 0, width, height, bgColor); 104 | drawText(intHorizontalMargin, intVerticalMargin, strItemLabel, fontColorDisabled); 105 | blActive = false; 106 | } 107 | 108 | //-------------------------------------------------------------------------- 109 | 110 | function getCursorFromManager(lock = true) 111 | { 112 | // フォーカススタックマネージャから割り当てをもらう 113 | 114 | blKeyLock = lock; 115 | cursorX = width * fltHorizontalFocusPoint; 116 | cursorY = height * fltVerticalFocusPoint; 117 | focus(); 118 | } 119 | 120 | //-------------------------------------------------------------------------- 121 | 122 | function callParentFunction() 123 | { 124 | // 親のメソッドを呼ぶ 125 | 126 | if (!blActive) { 127 | return; 128 | } 129 | 130 | if ( 131 | ptActionCanceller.getCancellerState() || 132 | !parent.enabled 133 | ) { 134 | // アクションキャンセラがアクティブか、親レイヤが非アクティブなら 135 | // 何もしない 136 | return; 137 | } 138 | 139 | cursor = crDefault; 140 | parent.isNewLayer = true; 141 | parent.onSelectedItemClick(this); 142 | } 143 | 144 | function onMouseDown(x, y, button, shift) 145 | { 146 | // クリック動作 147 | 148 | super.onMouseDown(...); 149 | if (button == mbLeft) { 150 | if(blActive) { 151 | SystemManager.fcSetKBOperationState(false); 152 | ptFocusController.isActive = false; 153 | ptFocusController.relFocusStack(this); 154 | callParentFunction(); 155 | } 156 | } 157 | } 158 | 159 | function onMouseEnter() 160 | { 161 | // マウスカーソル突入動作 162 | 163 | super.onMouseEnter(...); 164 | 165 | if (blActive) { 166 | drawItemFaceFocused(); 167 | } 168 | parent.isNewLayer = false; 169 | 170 | ptFocusController.isActive = true; 171 | cursor = crHandPoint; 172 | focus(); 173 | 174 | SystemManager.getPadHandler(); 175 | } 176 | 177 | function onMouseLeave() 178 | { 179 | // マウスカーソル脱出動作 180 | 181 | super.onMouseLeave(...); 182 | 183 | SystemManager.releasePadHandler(); 184 | 185 | if (blActive) { 186 | drawItemFace(); 187 | } 188 | 189 | ptFocusController.isActive = false; 190 | cursor = crDefault; 191 | } 192 | 193 | //-------------------------------------------------------------------------- 194 | 195 | function onCallFromFocusStackManager(key, shift) 196 | { 197 | // キーボード押下動作フック 198 | key = SystemManager.convertPadToKey(key); 199 | 200 | switch (key) { 201 | case VK_PADLEFT: 202 | key = VK_LEFT; 203 | break; 204 | 205 | case VK_PADRIGHT: 206 | key = VK_RIGHT; 207 | break; 208 | 209 | case VK_PADUP: 210 | key = VK_UP; 211 | break; 212 | 213 | case VK_PADDOWN: 214 | key = VK_DOWN; 215 | break; 216 | 217 | case VK_PAD1: 218 | key = VK_RETURN; 219 | break; 220 | 221 | case VK_PAD2: 222 | key = VK_ESCAPE; 223 | break; 224 | } 225 | 226 | switch(key) { 227 | // 決定 228 | case VK_RETURN: 229 | case VK_SPACE: 230 | callParentFunction(this); 231 | break; 232 | 233 | // キャンセル 234 | case VK_ESCAPE: 235 | parent.onEscapeKeyDown(); 236 | break; 237 | 238 | // 矢印キー 239 | case VK_UP: 240 | case VK_DOWN: 241 | case VK_RIGHT: 242 | case VK_LEFT: 243 | passFocusToNextObject(key); 244 | break; 245 | 246 | // TAB 247 | case VK_TAB: 248 | 249 | break; 250 | } 251 | } 252 | 253 | function onKeyDown(key, shift) 254 | { 255 | // 標準のキー操作を無効にしておく 256 | 257 | if (blKeyLock) { 258 | if (!shift) { 259 | return; 260 | } 261 | } 262 | 263 | blKeyLock = true; 264 | onCallFromFocusStackManager(...); 265 | } 266 | 267 | function onKeyUp(key, shift) 268 | { 269 | // キーが離されたらロックを解除 270 | 271 | blKeyLock = false; 272 | } 273 | 274 | function onBlur() 275 | { 276 | // フォーカスを失ってもロック解除 277 | 278 | blKeyLock = false; 279 | } 280 | 281 | //-------------------------------------------------------------------------- 282 | 283 | function passFocusToNextObject(dir) 284 | { 285 | // フォーカスを渡す 286 | 287 | if ( 288 | ptActionCanceller.getCancellerState() || 289 | !parent.enabled 290 | ) { 291 | // アクションキャンセラがアクティブか、親レイヤが非アクティブなら 292 | // 何もしない 293 | return; 294 | } 295 | 296 | // カーソルが自分の外にある場合は自分にフォーカス 297 | if (cursorX < 0 || cursorX > width || cursorY < 0 || cursorY > height) { 298 | getCursorFromManager(); 299 | return; 300 | } 301 | 302 | var res; 303 | 304 | SystemManager.fcSetKBOperationState(true); 305 | 306 | switch (dir) { 307 | case VK_UP: 308 | res = ptFocusController.changeCursorStay(objCursorMapHash.up); 309 | break; 310 | 311 | case VK_DOWN: 312 | res = ptFocusController.changeCursorStay(objCursorMapHash.down); 313 | break; 314 | 315 | case VK_LEFT: 316 | res = ptFocusController.changeCursorStay(objCursorMapHash.left); 317 | break; 318 | 319 | case VK_RIGHT: 320 | res = ptFocusController.changeCursorStay(objCursorMapHash.right); 321 | break; 322 | 323 | default: 324 | break; 325 | } 326 | 327 | if (res) { 328 | ptFocusController.setCursorToTarget(); 329 | } 330 | } 331 | } 332 | 333 | -------------------------------------------------------------------------------- /data/system/Ham/Base/ui/MBButton.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | system_mb/ui/MBButton.tjs 3 | 4 | カーソル移動情報を持ったボタンクラス 5 | *******************************************************************************/ 6 | 7 | class MBButton extends ButtonLayer 8 | { 9 | var grpButtonImage; // ボタン画像 10 | var grpButtonActiveImage; // ボタン使用中イメージ 11 | var grpButtonDisabledImage; // ボタン使用不可画像 12 | 13 | var objCursorMapHash = %[ 14 | up : false, 15 | down : false, 16 | right : false, 17 | left : false, 18 | prevGroup : false, 19 | nextGroup : false 20 | ]; 21 | var ptFocusController; // フォーカスコントローラ参照 22 | var ptActionCanceller; // アクションキャンセラ参照 23 | 24 | var fltHorizontalFocusPoint = 0.5; // フォーカスするポイント(横幅に対する割合) 25 | var fltVerticalFocusPoint = 0.5; // フォーカスするポイント(縦幅に対する割合) 26 | 27 | var blKeyLock; // 二重押下防止 28 | 29 | var blMouseHoldable; // マウスでホールドできるかどうか 30 | var isHolded; 31 | var intHoldWaitTime = 500; // ホールド後に繰り返し処理に入るまでの時間 32 | var intHoldActionFreq = 50; // 繰り返し処理の周期 33 | var intHoldActionMinFreq = 10; 34 | var objHoldTimer; // ホールド処理のためのタイマー 35 | var holdActionCount; 36 | 37 | 38 | function MBButton(win, par) 39 | { 40 | // コンストラクタ 41 | 42 | super.ButtonLayer(win, par); 43 | 44 | ptFocusController = SystemManager.objFocusController; 45 | ptActionCanceller = SystemManager.objActionCanceller; 46 | name = 'ボタン'; 47 | focusable = false; 48 | } 49 | 50 | function finalize() 51 | { 52 | // ファイナライザ 53 | 54 | invalidate objHoldTimer if (objHoldTimer !== void); 55 | 56 | super.finalize(...); 57 | } 58 | 59 | //========================================================================== 60 | 61 | function setCursorMap(up, right, down, left, pg, ng) 62 | { 63 | // カーソルマップを割り当てる 64 | // 見てのとおり基本的にCSSの方向と同じ。最後に余計なのを付ける 65 | // いらない分はvoidを渡すこと 66 | 67 | objCursorMapHash.up = up; 68 | objCursorMapHash.down = down; 69 | objCursorMapHash.left = left; 70 | objCursorMapHash.right = right; 71 | 72 | objCursorMapHash.prevGroup = pg; 73 | objCursorMapHash.nextGroup = ng; 74 | } 75 | 76 | //-------------------------------------------------------------------------- 77 | 78 | function getCursorFromManager(lock = true) 79 | { 80 | // フォーカススタックマネージャから割り当てをもらう 81 | 82 | blKeyLock = lock; 83 | cursorX = width * fltHorizontalFocusPoint; 84 | cursorY = height * fltVerticalFocusPoint; 85 | focusable = true; 86 | focus(); 87 | } 88 | 89 | //-------------------------------------------------------------------------- 90 | 91 | function callParentFunction() 92 | { 93 | // 親のメソッドを呼ぶ 94 | 95 | if ( 96 | ptActionCanceller.getCancellerState() || 97 | !parent.enabled 98 | ) { 99 | // アクションキャンセラがアクティブか、親レイヤが非アクティブなら 100 | // 何もしない 101 | return; 102 | } 103 | 104 | cursor = crDefault; 105 | parent.isNewLayer = true; 106 | parent.onSelectedItemClick(this); 107 | } 108 | 109 | function onMouseDown(x, y, button, shift) 110 | { 111 | // クリック動作 112 | 113 | super.onMouseDown(...); 114 | 115 | if (button == mbLeft) { 116 | if(enabled) { 117 | SystemManager.fcSetKBOperationState(false); 118 | ptFocusController.isActive = false; 119 | ptFocusController.relFocusStack(this); 120 | 121 | // ホールド可能な場合は繰り返し処理待ちへ 122 | if (blMouseHoldable) { 123 | isHolded = true; 124 | invalidate objHoldTimer if (objHoldTimer !== void); 125 | objHoldTimer = new Timer(onTimerHoldWait, ''); 126 | objHoldTimer.interval = intHoldWaitTime; 127 | objHoldTimer.enabled = true; 128 | } 129 | 130 | callParentFunction(); 131 | } 132 | } 133 | else if (button == mbRight) 134 | { 135 | parent.onRightClickedOnChild(); 136 | return; 137 | } 138 | } 139 | 140 | function onTimerHoldWait() 141 | { 142 | // 繰り返し処理を待つ 143 | 144 | if (isHolded) { 145 | holdActionCount = 0; 146 | invalidate objHoldTimer if (objHoldTimer !== void); 147 | objHoldTimer = new Timer(onTimerHoldAction, ''); 148 | objHoldTimer.interval = intHoldActionFreq; 149 | objHoldTimer.enabled = true; 150 | } 151 | } 152 | 153 | function onTimerHoldAction() 154 | { 155 | // 繰り返し処理 156 | // 一定時間ごとに親の処理を呼ぶだけ 157 | 158 | if (holdActionCount++ % 10 == 0 && objHoldTimer.interval > intHoldActionMinFreq) { 159 | objHoldTimer.interval -= 5; 160 | } 161 | 162 | callParentFunction(); 163 | } 164 | 165 | function onMouseUp(x, y, button, shift) 166 | { 167 | super.onMouseUp(...); 168 | 169 | if (button == mbLeft) { 170 | holdActionCount = 0; 171 | invalidate objHoldTimer if (objHoldTimer !== void); 172 | isHolded = false; 173 | } 174 | } 175 | 176 | function onMouseEnter() 177 | { 178 | // マウスカーソル突入動作 179 | 180 | super.onMouseEnter(...); 181 | 182 | if (parent.isNewLayer) { 183 | parent.isNewLayer = false; 184 | } 185 | else { 186 | sndfunc.seSelect(); 187 | } 188 | ptFocusController.isActive = true; 189 | cursor = crHandPoint; 190 | focusable = true; 191 | focus(); 192 | 193 | SystemManager.getPadHandler(); 194 | } 195 | 196 | function onMouseLeave() 197 | { 198 | // マウスカーソル脱出動作 199 | 200 | super.onMouseLeave(...); 201 | 202 | SystemManager.releasePadHandler(); 203 | ptFocusController.isActive = false; 204 | cursor = crDefault; 205 | focusable = false; 206 | } 207 | 208 | //-------------------------------------------------------------------------- 209 | 210 | function onCallFromFocusStackManager(key, shift) 211 | { 212 | // キーボード押下動作フック 213 | 214 | key = SystemManager.convertPadToKey(key); 215 | 216 | switch(key) { 217 | // 決定 218 | case VK_RETURN: 219 | case VK_SPACE: 220 | callParentFunction(this); 221 | break; 222 | 223 | // キャンセル 224 | case VK_ESCAPE: 225 | try { parent.onEscapeKeyDown(); } 226 | catch(e) {} 227 | break; 228 | 229 | // 矢印キー 230 | case VK_UP: 231 | case VK_DOWN: 232 | case VK_RIGHT: 233 | case VK_LEFT: 234 | passFocusToNextObject(key); 235 | break; 236 | 237 | // TAB 238 | case VK_TAB: 239 | 240 | break; 241 | } 242 | } 243 | 244 | function onKeyDown(key, shift) 245 | { 246 | // 標準のキー操作を無効にしておく 247 | 248 | if (blKeyLock) { 249 | if (!shift) { 250 | return; 251 | } 252 | } 253 | 254 | blKeyLock = true; 255 | onCallFromFocusStackManager(...); 256 | } 257 | 258 | function onKeyUp(key, shift) 259 | { 260 | // キーが離されたらロックを解除 261 | 262 | blKeyLock = false; 263 | } 264 | 265 | function onBlur() 266 | { 267 | // フォーカスを失ってもロック解除 268 | 269 | blKeyLock = false; 270 | } 271 | 272 | //-------------------------------------------------------------------------- 273 | 274 | function passFocusToNextObject(dir) 275 | { 276 | // フォーカスを渡す 277 | 278 | if ( 279 | ptActionCanceller.getCancellerState() || 280 | !parent.enabled 281 | ) { 282 | // アクションキャンセラがアクティブか、親レイヤが非アクティブなら 283 | // 何もしない 284 | return; 285 | } 286 | 287 | // カーソルが自分の外にある場合は自分にフォーカス 288 | if (cursorX < 0 || cursorX > width || cursorY < 0 || cursorY > height) { 289 | getCursorFromManager(); 290 | return; 291 | } 292 | 293 | var res; 294 | 295 | SystemManager.fcSetKBOperationState(true); 296 | 297 | switch (dir) { 298 | case VK_UP: 299 | res = ptFocusController.changeCursorStay(objCursorMapHash.up); 300 | break; 301 | 302 | case VK_DOWN: 303 | res = ptFocusController.changeCursorStay(objCursorMapHash.down); 304 | break; 305 | 306 | case VK_LEFT: 307 | res = ptFocusController.changeCursorStay(objCursorMapHash.left); 308 | break; 309 | 310 | case VK_RIGHT: 311 | res = ptFocusController.changeCursorStay(objCursorMapHash.right); 312 | break; 313 | 314 | default: 315 | break; 316 | } 317 | 318 | if (res) { 319 | ptFocusController.setCursorToTarget(); 320 | } 321 | } 322 | } 323 | 324 | -------------------------------------------------------------------------------- /data/system/Ham/Base/modules/system/MBFocusController.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | system_mb/mb/system/MBFocusController.tjs 3 | *******************************************************************************/ 4 | 5 | class MBFocusController 6 | { 7 | var objFocusStack = []; // フォーカススタック 8 | var intCurrentIndex; // 現在の添え字 9 | 10 | var blUserConfSetCursor; // ユーザー設定でカーソル合わせがONかどうか 11 | var blOperationWithKB; // キーボード操作中かどうか 12 | var isActive = false; // マネージャがアクティブかどうか 13 | 14 | var window; // ウィンドウ参照 15 | var objTimer; // 照準あわせ用タイマー 16 | var ptActionCanceller; // アクションキャンセラ参照 17 | 18 | 19 | function MBFocusController(win) 20 | { 21 | // コンストラクタ 22 | 23 | window = win; 24 | 25 | initFocusStack(); 26 | 27 | blUserConfSetCursor = sf.userconfig.setCursor; 28 | blOperationWithKB = false; 29 | 30 | objTimer = new Timer(onTimerFocusMaking, ''); 31 | objTimer.interval = 10; 32 | objTimer.enabled = false; 33 | } 34 | 35 | function finalize() 36 | { 37 | // ファイナライザ 38 | 39 | invalidate objTimer if (objTimer !== void); 40 | invalidate objFocusStack if (objFocusStack !== void); 41 | } 42 | 43 | //-------------------------------------------------------------------------- 44 | 45 | function initFocusStack() 46 | { 47 | // スタックを初期化する 48 | 49 | isActive = false; 50 | objFocusStack.clear(); 51 | intCurrentIndex = void; 52 | /* 53 | if (objFocusStack.count < 1) { 54 | return; 55 | } 56 | 57 | var i; 58 | for (i=0; i 0) { 72 | //objFocusStack[intCurrentIndex].baselayer.enabled = false; 73 | } 74 | 75 | objFocusStack.add(%[ 76 | baselayer : obj.parent, 77 | cursorstay : obj, 78 | primarycursorstay : obj 79 | ]); 80 | 81 | intCurrentIndex = objFocusStack.count - 1; 82 | //objFocusStack[intCurrentIndex].baselayer.enabled = true; 83 | 84 | /*dm(" フォーカススタックに 1 メンバ (%s) 追加されました".sprintf(objFocusStack[objFocusStack.count - 1])); 85 | dm(" 現在 %d のメンバがスタックされています".sprintf(objFocusStack.count)); 86 | dm(" 現在スタック %d (%s)を操作中です".sprintf(intCurrentIndex, objFocusStack[intCurrentIndex]));*/ 87 | 88 | return objFocusStack[intCurrentIndex]; 89 | } 90 | 91 | function relFocusStack(obj) 92 | { 93 | // スタック末尾を手動更新 94 | 95 | if (objFocusStack.count < 1) { 96 | return; 97 | } 98 | 99 | objFocusStack[intCurrentIndex].cursorstay = obj; 100 | } 101 | 102 | function removeFocusStackItem(obj) 103 | { 104 | // スタックメンバを狙い撃ちして消す 105 | 106 | //dm(" フォーカスメンバを削除します..."); 107 | objTimer.enabled = false; 108 | if (objFocusStack.count < 1 || obj === void) { 109 | //dm(" メンバの削除に失敗しました。"); 110 | return; 111 | } 112 | 113 | var mem = objFocusStack.find(obj); 114 | if (mem > -1) { 115 | objFocusStack.erase(mem); 116 | intCurrentIndex = objFocusStack.count - 1; 117 | /*dm(" フォーカススタックから 1 メンバ (%s) 削除されました".sprintf(obj)); 118 | dm(" 現在 %d のメンバがスタックされています".sprintf(objFocusStack.count)); 119 | dm(" 現在スタック %d (%s)を操作中です".sprintf(intCurrentIndex, objFocusStack[intCurrentIndex]));*/ 120 | 121 | if (intCurrentIndex > -1) { 122 | //objFocusStack[intCurrentIndex].baselayer.enabled = true; 123 | setCursorToTarget(); 124 | } 125 | } 126 | } 127 | 128 | function popFocusStack() 129 | { 130 | // スタックの末尾を捨てる 131 | 132 | if (objFocusStack.count < 1) { 133 | return; 134 | } 135 | 136 | invalidate objFocusStack[intCurrentIndex] if (objFocusStack[intCurrentIndex] !== void); 137 | 138 | objFocusStack.erase(intCurrentIndex); 139 | dm(" フォーカススタックから 1 メンバ削除されました"); 140 | dm(" 現在 %d のメンバがスタックされています".sprintf(objFocusStack.count)); 141 | 142 | if (intCurrentIndex > 0) { 143 | intCurrentIndex = objFocusStack.count - 1; 144 | if (intCurrentIndex > -1) { 145 | //objFocusStack[intCurrentIndex].baselayer.enabled = true; 146 | setCursorToTarget(); 147 | } 148 | } 149 | } 150 | 151 | function setCursorToTarget(bl) 152 | { 153 | // 可能ならカーソルを現在のターゲットに合わせる 154 | 155 | if (objFocusStack.count < 1) { 156 | objTimer.enabled = false; 157 | return; 158 | } 159 | if (ptActionCanceller.getCancellerState()) { 160 | return; 161 | } 162 | 163 | objTimer.enabled = false; 164 | 165 | if (getAutoFocusState()) { 166 | isActive = true; 167 | //objFocusStack[intCurrentIndex].baselayer.isNewLayer = true; 168 | if (objFocusStack[intCurrentIndex] !== void && isvalid(objFocusStack[intCurrentIndex].cursorstay)) { 169 | objFocusStack[intCurrentIndex].cursorstay.getCursorFromManager((bl == void) ? false : bl); 170 | } 171 | } 172 | } 173 | 174 | //-------------------------------------------------------------------------- 175 | 176 | function isMemberOfFocusStack(obj) 177 | { 178 | // 引数にとったオブジェクトがスタックのメンバーかどうかを返す 179 | 180 | if (objFocusStack.find(obj) > -1) { 181 | return true; 182 | } 183 | else { 184 | return false; 185 | } 186 | } 187 | 188 | //-------------------------------------------------------------------------- 189 | 190 | function onKeyDown(key, shift) 191 | { 192 | // KAGにフックをかける 193 | 194 | key = SystemManager.convertPadToKey(key); 195 | 196 | // スタックにブツがなかったら帰る 197 | if (objFocusStack.count < 1) { 198 | return false; 199 | } 200 | 201 | // マネージャがアクティブでない場合は、矢印キーによるフォーカスのみ動作 202 | // (スタックに積んである場所からは動かず、それにフォーカスする 203 | if (!isActive) { 204 | var res; 205 | switch (key) { 206 | case VK_UP: 207 | case VK_DOWN: 208 | case VK_RIGHT: 209 | case VK_LEFT: 210 | //dm(" 初期ターゲットから操作を開始します。"); 211 | setOperationWithKB(true); 212 | setCursorToTarget(true); 213 | break; 214 | 215 | default: 216 | break; 217 | } 218 | 219 | return; 220 | } 221 | 222 | // アクティブなら通常動作 223 | else { 224 | var res; 225 | switch(key) { 226 | // 操作キーならオブジェクトに渡す 227 | case VK_RETURN: 228 | case VK_SPACE: 229 | case VK_ESCAPE: 230 | case VK_UP: 231 | case VK_DOWN: 232 | case VK_RIGHT: 233 | case VK_LEFT: 234 | case VK_TAB: 235 | if (isvalid(objFocusStack[intCurrentIndex].cursorstay)) { 236 | setOperationWithKB(true); 237 | objFocusStack[intCurrentIndex].cursorstay.onCallFromFocusStackManager(key, shift); 238 | res = true; 239 | } 240 | break; 241 | 242 | // そうでなければ何もせずにフックを外す 243 | default: 244 | res = false; 245 | break; 246 | } 247 | 248 | return res; 249 | } 250 | 251 | // 何も起きなかった場合はとりあえずKAGに返す 252 | return false; 253 | } 254 | 255 | 256 | //-------------------------------------------------------------------------- 257 | 258 | function changeCursorStay(obj) 259 | { 260 | // カーソル位置記憶を変更する 261 | 262 | if (typeof(obj) == "Object") { 263 | objFocusStack[intCurrentIndex].cursorstay = obj; 264 | return true; 265 | } 266 | else { 267 | return false; 268 | } 269 | } 270 | 271 | function setOperationWithKB(bl) 272 | { 273 | // KB操作モードを記憶する 274 | 275 | if (bl) { 276 | blOperationWithKB = true; 277 | } 278 | else { 279 | blOperationWithKB = false; 280 | } 281 | } 282 | 283 | function getAutoFocusState() 284 | { 285 | // KB操作モードを返す 286 | 287 | if (blOperationWithKB || blUserConfSetCursor) { 288 | return true; 289 | } 290 | else { 291 | return false; 292 | } 293 | } 294 | 295 | //-------------------------------------------------------------------------- 296 | 297 | function activateFocusMaker() 298 | { 299 | // 強制フォーカス合わせの起動 300 | 301 | objTimer.enabled = true; 302 | } 303 | 304 | function onTimerFocusMaking() 305 | { 306 | // フォーカスされたレイヤがない場合に強制的に合わせる 307 | 308 | //dm(" システムをチェック中..."); 309 | setCursorToTarget(); 310 | } 311 | } 312 | -------------------------------------------------------------------------------- /data/system/Movie.tjs: -------------------------------------------------------------------------------- 1 | // Movie.tjs - ムービー再生 2 | // Copyright (C)2001-2009, W.Dee and contributors 改変・配布は自由です 3 | 4 | class Movie extends VideoOverlay 5 | { 6 | var owner; 7 | var lastStatus = "unload"; // 直前のステータス 8 | var opened = false; 9 | var id = 0; // ムービーオブジェクトID 10 | var layerNumber = []; 11 | var layerPage = []; 12 | var storageName; 13 | 14 | function Movie(owner,id=0) 15 | { 16 | super.VideoOverlay(...); 17 | 18 | this.owner = owner; 19 | this.id = id; 20 | 21 | this.layerNumber[0] = void; 22 | this.layerNumber[1] = void; 23 | this.layerPage[0] = void; 24 | this.layerPage[1] = void; 25 | } 26 | 27 | function store() 28 | { 29 | var dic = %[]; 30 | dic.mode = mode; 31 | if( mode == vomLayer ) 32 | { 33 | dic.visible = visible; 34 | dic.loop = loop; 35 | dic.frame = frame; 36 | 37 | if( numberOfAudioStream > 0 ) { 38 | dic.audioBalance = audioBalance; 39 | dic.audioVolume = audioVolume; 40 | dic.enabledAudioStream = enabledAudioStream; 41 | } 42 | 43 | // dic.playRate // 保持しない方が良い? 44 | dic.segmentLoopStartFrame = segmentLoopStartFrame; 45 | dic.segmentLoopEndFrame = segmentLoopEndFrame; 46 | dic.periodEventFrame = periodEventFrame; 47 | 48 | dic.layerNumber = []; 49 | dic.layerNumber[0] = layerNumber[0]; 50 | dic.layerNumber[1] = layerNumber[1]; 51 | dic.layerPage = []; 52 | dic.layerPage[0] = layerPage[0]; 53 | dic.layerPage[1] = layerPage[1]; 54 | 55 | dic.lastStatus = lastStatus; 56 | dic.storageName = storageName; 57 | } 58 | return dic; 59 | } 60 | function restore(dic) 61 | { 62 | if( dic.mode == vomLayer ) 63 | { 64 | mode = vomLayer; 65 | loop = dic.loop; 66 | layerNumber[0] = dic.layerNumber[0]; 67 | layerNumber[1] = dic.layerNumber[1]; 68 | layerPage[0] = dic.layerPage[0]; 69 | layerPage[1] = dic.layerPage[1]; 70 | if( dic.layerNumber[0] !== void && dic.layerPage[0] !== void ) 71 | { 72 | var elm = %[]; 73 | elm.layer = dic.layerNumber[0]; 74 | elm.page = dic.layerPage[0]; 75 | layer1 = owner.getLayerFromElm(elm); 76 | } 77 | if( dic.layerNumber[1] !== void && dic.layerPage[1] !== void ) 78 | { 79 | var elm = %[]; 80 | elm.layer = dic.layerNumber[1]; 81 | elm.page = dic.layerPage[1]; 82 | layer2 = owner.getLayerFromElm(elm); 83 | } 84 | if( dic.lastStatus != "unload" ) 85 | { 86 | this.open( dic.storageName ); 87 | periodEventFrame = dic.periodEventFrame; // この設定は必ずフレームより前に行うこと 88 | if( dic.frame >= 0 ) 89 | frame = dic.frame; 90 | 91 | if( numberOfAudioStream > 0 ) { 92 | audioBalance = dic.audioBalance; 93 | audioVolume = dic.audioVolume; 94 | if( dic.enabledAudioStream >= 0 ) 95 | { 96 | super.selectAudioStream( dic.enabledAudioStream ); 97 | } 98 | } 99 | super.setSegmentLoop( dic.segmentLoopStartFrame, dic.segmentLoopEndFrame ); 100 | if( dic.lastStatus == "pause" || dic.lastStatus == "play" ) 101 | { 102 | play(); 103 | } 104 | } 105 | } 106 | } 107 | 108 | function finalize() 109 | { 110 | if(lastStatus == "play") stop(); 111 | super.finalize(...); 112 | } 113 | 114 | function onStatusChanged(status) 115 | { 116 | // ステータスの変更があった 117 | if(lastStatus == "play" && status == "stop") 118 | { 119 | owner.onMovieStop(id); // 停止 120 | super.close(); 121 | } 122 | 123 | lastStatus = status; 124 | } 125 | 126 | function onPeriod(type) 127 | { 128 | // period イベントが発生した 129 | owner.onMoviePeriod(id,type); 130 | } 131 | 132 | function onCallbackCommand(cmd, arg) 133 | { 134 | // コールバックコマンド 135 | if(cmd == "Go") 136 | { 137 | var spos = arg.indexOf('/'); 138 | if(spos == -1) 139 | { 140 | // ストレージ指定がない 141 | owner.process('', '*' + arg); 142 | } 143 | else 144 | { 145 | // ストレージ指定がある 146 | var label = arg.substring(spos + 1); 147 | if(label != '') label = '*' + label; 148 | owner.process(arg.substring(0, spos), label); 149 | } 150 | } 151 | else if(cmd == "Eval") 152 | { 153 | Scripts.eval(arg); 154 | } 155 | } 156 | 157 | property canWaitStop 158 | { 159 | getter 160 | { 161 | // 待てるかどうか 162 | return lastStatus == "play"; 163 | } 164 | } 165 | 166 | property storage 167 | { 168 | getter 169 | { 170 | return this.storageName; 171 | } 172 | } 173 | 174 | function open(storage) 175 | { 176 | this.storageName = storage; 177 | // open オーバーライド 178 | try 179 | { 180 | opened = false; 181 | if(mode == vomOverlay) 182 | { 183 | mode = vomMixer; // モードがoverlayの場合はmixer を試行する 184 | try 185 | { 186 | super.open(storage); 187 | opened = true; 188 | } 189 | catch(e) 190 | { 191 | dm("ムービーを Mixer モードで開くことができません : " + e.message); 192 | dm("オーバーレイモードで開きます"); 193 | mode = vomOverlay; 194 | } 195 | } 196 | 197 | if(!opened) 198 | { 199 | super.open(storage); 200 | opened = true; 201 | } 202 | } 203 | catch(e) 204 | { 205 | if(e.message.indexOf(".dll") != -1) throw e; 206 | dm("ムービー " + storage + " を再生できません : " + 207 | e.message); 208 | return; 209 | } 210 | } 211 | 212 | function play(storage) 213 | { 214 | // play オーバーライド 215 | if(!opened) open(storage); 216 | try 217 | { 218 | super.play(); 219 | opened = false; 220 | } 221 | catch(e) 222 | { 223 | if(e.message.indexOf(".dll") != -1) throw e; 224 | dm("ムービー " + storage + " を再生できません : " + 225 | e.message); 226 | return; 227 | } 228 | } 229 | function resume() 230 | { 231 | try 232 | { 233 | super.play(); 234 | } 235 | catch(e) 236 | { 237 | if(e.message.indexOf(".dll") != -1) throw e; 238 | dm("ムービーを再生できません : " + e.message); 239 | return; 240 | } 241 | } 242 | 243 | function stop() 244 | { 245 | // stop オーバーライド 246 | super.stop(...); 247 | super.close(); 248 | } 249 | 250 | function setOptions(elm) 251 | { 252 | // elm からオプションを設定 253 | visible = +elm.visible if elm.visible !== void; 254 | var l = left, t = top, w = width, h = height; 255 | var set = false; 256 | (set = true, l = +elm.left) if elm.left !== void; 257 | (set = true, t = +elm.top) if elm.top !== void; 258 | (set = true, w = +elm.width) if elm.width !== void; 259 | (set = true, h = +elm.height) if elm.height !== void; 260 | if(set) setBounds(l, t, w, h); 261 | 262 | // 263 | position = +elm.position if elm.position !== void; 264 | loop = +elm.loop if elm.loop !== void; 265 | frame = +elm.frame if elm.frame !== void; 266 | if( elm.mode !== void ) 267 | { 268 | if( elm.mode == "layer" ) 269 | mode = vomLayer; 270 | else if( elm.mode == "mixer" ) 271 | mode = vomMixer; 272 | else 273 | mode = vomOverlay; 274 | } 275 | playRate = +elm.playrate if elm.playrate !== void; 276 | audioVolume = +elm.volume * 1000 if elm.volume !== void; 277 | audioBalance = +elm.pan * 1000 if elm.pan !== void; 278 | if( elm.audiostreamnum !== void ) 279 | { 280 | selectAudioStream( +elm.audiostreamnum ); 281 | } 282 | } 283 | 284 | function setVideoLayer(layer,elm) 285 | { 286 | if( elm.channel !== void ) 287 | { 288 | if( elm.channel == 1 ) 289 | layer1 = layer; 290 | else 291 | layer2 = layer; 292 | } 293 | } 294 | function setSegment(elm) 295 | { 296 | var startFrame = 0; 297 | startFrame = +elm.start if elm.start !== void; 298 | if( elm.end !== void ) 299 | super.setSegmentLoop( startFrame, +elm.end ); 300 | } 301 | function setPeriod(elm) 302 | { 303 | if( elm.frame !== void ) 304 | super.setPeriodEvent( +elm.frame ); 305 | } 306 | function storeLayer( layer, page, channel ) 307 | { 308 | if( channel !== void ) 309 | { 310 | if( channel == 1 ) 311 | { 312 | layerNumber[0] = layer; 313 | layerPage[0] = page; 314 | } 315 | else 316 | { 317 | layerNumber[1] = layer; 318 | layerPage[1] = page; 319 | } 320 | } 321 | } 322 | function cancelLayer( channel ) 323 | { 324 | if( channel !== void ) 325 | { 326 | if( channel == 1 ) 327 | { 328 | layerNumber[0] = void; 329 | layerPage[0] = void; 330 | } 331 | else 332 | { 333 | layerNumber[1] = void; 334 | layerPage[1] = void; 335 | } 336 | } 337 | } 338 | } 339 | 340 | 341 | -------------------------------------------------------------------------------- /data/system/ButtonLayer.tjs: -------------------------------------------------------------------------------- 1 | // ButtonLayer.tjs - ボタンレイヤ 2 | // Copyright (C)2001-2009, W.Dee and contributors 改変・配布は自由です 3 | 4 | /* 5 | ボタンとして動作するレイヤです。 6 | 押し込まれた時の画像、マウスカーソルがレイヤ内にあるときの画像、通常の画像 7 | をそれぞれ変えることができます。 8 | 9 | 書式 new ButtonLayer(, ) 10 | 11 | : このレイヤを作成するウィンドウ 12 | : 親レイヤ 13 | 14 | */ 15 | 16 | 17 | class ButtonLayer extends KAGLayer 18 | { 19 | var Butt_imageLoaded = false; // 画像が読み込まれたか 20 | var Butt_mouseOn = false; // レイヤ内にマウスがあるか 21 | var Butt_mouseDown = false; // マウスボタンが押されているか 22 | var Butt_color = clNone; 23 | var Butt_caption = ''; // ボタンのキャプション 24 | var Butt_captionColor = 0x000000; // キャプションの色 25 | var Butt_keyPressed = false; 26 | var Butt_showFocusImage = false; 27 | 28 | function ButtonLayer(win, par) 29 | { 30 | super.KAGLayer(win, par); 31 | 32 | if(typeof win.cursorPointed !== "undefined") 33 | cursor = win.cursorPointed; 34 | 35 | hitType = htMask; 36 | hitThreshold = 0; 37 | focusable = true; // フォーカスを得られる 38 | } 39 | 40 | function finalize() 41 | { 42 | super.finalize(...); 43 | } 44 | 45 | function assign(src) 46 | { 47 | // src の情報をこのボタンレイヤにコピー 48 | assignImages(src, true); 49 | Butt_imageLoaded = src.Butt_imageLoaded; 50 | Butt_color = src.Butt_color; 51 | Butt_caption = src.Butt_caption; 52 | Butt_captionColor = src.Butt_captionColor; 53 | hitThreshold = src.hitThreshold; 54 | update(); 55 | } 56 | 57 | function drawState(s) 58 | { 59 | // 状態 s に対応する画像を描画 60 | // s : 0 : 普通の状態 61 | // 1 : ボタンが押された状態 62 | // 2 : ボタンの上にマウスカーソルがある状態 63 | // (3): フォーカスがある場合 64 | if(!enabled) 65 | { 66 | s = 0; // 無効状態 67 | } 68 | 69 | if(Butt_imageLoaded) 70 | { 71 | // ボタンイメージが読み込まれている 72 | // TODO: keyboard focus 73 | imageLeft = -s * width; 74 | } 75 | else 76 | { 77 | if(Butt_keyPressed) s = 1; // 押されている 78 | 79 | // 枠とキャプションを描画 80 | // クリア 81 | face = dfAlpha; 82 | colorRect(0, 0, width, height, 0, -255); 83 | // 下地を塗る 84 | if(Butt_color != clNone) 85 | colorRect(0, 0, width, height, Butt_color, 128); 86 | // 文字のサイズを得る 87 | var tw, th; 88 | tw = font.getTextWidth(Butt_caption); 89 | th = font.getTextHeight(Butt_caption); 90 | if(s == 0 || s == 2) 91 | { 92 | // 通常あるいはマウスが上にある 93 | colorRect(0, 0, width, 1, 0xffffff, 128); 94 | colorRect(0, 1, 1, height-2, 0xffffff, 128); 95 | colorRect(width-1, 1, 1, height-1, 0x000000, 128); 96 | colorRect(1, height-1, width-2, 1, 0x000000, 128); 97 | drawText((width-tw)>>1, (height-th)>>1, 98 | Butt_caption, Butt_captionColor, nodeEnabled?255:128); 99 | } 100 | else 101 | { 102 | // 押されている 103 | colorRect(0, 0, width, 1, 0x000000, 128); 104 | colorRect(0, 1, 1, height-2, 0x000000, 128); 105 | colorRect(width-1, 1, 1, height-1, 0xffffff, 128); 106 | colorRect(1, height-1, width-2, 1, 0xffffff, 128); 107 | drawText(((width-tw)>>1) +1, ((height-th)>>1) +1, 108 | Butt_caption, Butt_captionColor, nodeEnabled?255:128); 109 | } 110 | 111 | if(s != 0) 112 | colorRect(2, 2, width-4, height-4, clHighlight, 64); // ハイライトする 113 | 114 | if(focused) 115 | { 116 | // フォーカスがあるのでハイライトする 117 | colorRect(2, 2, width-4, 1, clHighlight, 128); 118 | colorRect(2, 3, 1, height-5, clHighlight, 128); 119 | colorRect(3, height-3, width-5, 1, clHighlight, 128); 120 | colorRect(width-3, 3, 1, height-6, clHighlight, 128); 121 | } 122 | } 123 | } 124 | 125 | function loadImages(storage, key) 126 | { 127 | // 画像を読み込む 128 | super.loadImages(storage, key); 129 | super.width = imageWidth \ (Butt_showFocusImage ? 4 : 3); 130 | super.height = imageHeight; 131 | callOnPaint = true; 132 | Butt_imageLoaded = true; 133 | } 134 | 135 | function discardImage() 136 | { 137 | // 画像を破棄し、文字ボタンレイヤとして動作するようにする 138 | Butt_imageLoaded = false; 139 | imageLeft = imageTop = 0; 140 | update(); 141 | } 142 | 143 | function onExecute(x, y, button, shift) 144 | { 145 | // マウスボタンが押されて、放されたときに呼ばれる 146 | // 何かこのボタンが押されたことによりコマンドなどを実装したい場合は 147 | // onMouseUp や onClick をオーバーライドするよりも 148 | // このメソッドをオーバーライドすることを推奨する 149 | } 150 | 151 | function onMouseDown() 152 | { 153 | // onMouseDown イベントハンドラ 154 | Butt_mouseDown = true; 155 | focus(); 156 | update(); 157 | super.onMouseDown(...); 158 | } 159 | 160 | function onMouseUp() 161 | { 162 | // onMouseUp イベントハンドラ 163 | if(Butt_mouseDown) onExecute(...); 164 | Butt_mouseDown = false; 165 | update(); 166 | super.onMouseUp(...); 167 | } 168 | 169 | function onClick() 170 | { 171 | // onClick イベントハンドラ 172 | super.onClick(...); 173 | } 174 | 175 | function draw() 176 | { 177 | // 現在の状態にあわせて描画を行う 178 | if(Butt_mouseDown) drawState(1); 179 | else if(Butt_mouseOn) drawState(2); 180 | else if(Butt_showFocusImage && focused) drawState(3); 181 | else drawState(0); 182 | } 183 | 184 | function onPaint() 185 | { 186 | // 描画の直前に呼ばれる 187 | super.onPaint(...); 188 | draw(); 189 | } 190 | 191 | function onMouseEnter() 192 | { 193 | // マウスがレイヤ領域内に入った 194 | update(); 195 | Butt_mouseOn = true; 196 | super.onMouseEnter(...); 197 | } 198 | 199 | function onMouseLeave() 200 | { 201 | // マウスがレイヤ領域から出ていった 202 | update(); 203 | Butt_mouseOn = false; 204 | Butt_mouseDown = false; 205 | super.onMouseLeave(...); 206 | } 207 | 208 | function onNodeDisabled() 209 | { 210 | // レイヤのノードが不可になった 211 | super.onNodeDisabled(...); 212 | Butt_mouseDown = false; 213 | update(); 214 | } 215 | 216 | function onNodeEnabled() 217 | { 218 | // レイヤのノードが有効になった 219 | super.onNodeEnabled(...); 220 | update(); 221 | } 222 | 223 | function onFocus() 224 | { 225 | // フォーカスを得た 226 | super.onFocus(...); 227 | update(); 228 | } 229 | 230 | function onBlur() 231 | { 232 | // フォーカスを失った 233 | super.onBlur(...); 234 | Butt_mouseDown = false; 235 | update(); 236 | } 237 | 238 | function onKeyDown(key, shift, process) 239 | { 240 | // キーが押された 241 | if(process) 242 | { 243 | if(key == VK_RETURN || key == VK_SPACE) 244 | { 245 | // スペースキーまたはエンターキー 246 | Butt_keyPressed = true; 247 | update(); 248 | super.onKeyDown(key, shift, false); // 処理をしたのでprocessにfalseを渡す 249 | } 250 | else 251 | { 252 | super.onKeyDown(...); 253 | } 254 | } 255 | else 256 | { 257 | // process が false の場合は処理は行わない 258 | super.onKeyDown(...); 259 | } 260 | } 261 | 262 | function onKeyUp(key, shift, process) 263 | { 264 | // キーが離された 265 | if(process) 266 | { 267 | if(key == VK_RETURN || key == VK_SPACE) 268 | { 269 | // スペースキーまたはエンターキー 270 | var flag = Butt_keyPressed; 271 | Butt_keyPressed = false; 272 | update(); 273 | super.onKeyUp(key, shift, false); 274 | if(flag) onClick(width \ 2, height \ 2); // クリック動作 275 | } 276 | else 277 | { 278 | super.onKeyUp(...); 279 | } 280 | } 281 | else 282 | { 283 | super.onKeyUp(...); 284 | } 285 | } 286 | 287 | function onKeyPress(key, shift) 288 | { 289 | super.onKeyPress(...); 290 | } 291 | 292 | 293 | property width 294 | { 295 | setter(x) 296 | { 297 | super.width = x; 298 | imageWidth = x; 299 | Butt_imageLoaded = false; 300 | update(); 301 | } 302 | getter 303 | { 304 | return super.width; 305 | } 306 | } 307 | 308 | property height 309 | { 310 | setter(x) 311 | { 312 | super.height = x; 313 | imageHeight = x; 314 | Butt_imageLoaded = false; 315 | update(); 316 | } 317 | getter 318 | { 319 | return super.height; 320 | } 321 | } 322 | 323 | function setSize(w, h) 324 | { 325 | super.setSize(w, h); 326 | setImageSize(w, h); 327 | Butt_imageLoaded = false; 328 | update(); 329 | } 330 | 331 | property caption 332 | { 333 | setter(x) 334 | { 335 | Butt_caption = x; 336 | update(); 337 | } 338 | getter 339 | { 340 | return Butt_caption; 341 | } 342 | } 343 | 344 | property color 345 | { 346 | setter(x) 347 | { 348 | Butt_color = int x; 349 | update(); 350 | } 351 | getter 352 | { 353 | return Butt_color; 354 | } 355 | } 356 | 357 | property captionColor 358 | { 359 | setter(x) 360 | { 361 | Butt_captionColor = int x; 362 | update(); 363 | } 364 | getter 365 | { 366 | return Butt_captionColor; 367 | } 368 | } 369 | 370 | property showFocusImage 371 | { 372 | setter(x) { Butt_showFocusImage = x; } 373 | getter { return Butt_showFocusImage; } 374 | } 375 | } 376 | 377 | 378 | -------------------------------------------------------------------------------- /data/system/Menus.tjs: -------------------------------------------------------------------------------- 1 | // Menus.tjs - メニュー作成関数の定義 2 | // Copyright (C)2001-2009, W.Dee and contributors 改変・配布は自由です 3 | 4 | function KAGWindow_createMenus() 5 | { 6 | // この関数は MainWindow クラスのオブジェクトのコンテキスト上で実行されます 7 | 8 | menu.add(this.systemMenu = new KAGMenuItem(this, "システム(&S)", 0, "", false)); 9 | 10 | systemMenu.add(this.rightClickMenuItem = new KAGMenuItem(this, "メッセージを消す(&S)", 0, 11 | onRightClickMenuItemClick, false)); 12 | 13 | systemMenu.add(this.showHistoryMenuItem = new KAGMenuItem(this, "メッセージ履歴の表示(&H)", 0, 14 | onShowHistoryMenuItemClick, false)); 15 | 16 | systemMenu.add(this.skipToNextStopMenuItem = new KAGMenuItem(this, 17 | autoRecordPageShowing?"次の選択肢/未読まで進む(&F)":"次の選択肢まで進む(&F)", 0, 18 | onSkipToNextStopMenuItemClick, false)); 19 | 20 | systemMenu.add(this.autoModeMenuItem = new KAGMenuItem(this, "自動的に読み進む(&A)", 0, 21 | onAutoModeMenuItemClick, false)); 22 | 23 | systemMenu.add(this.autoModeWaitMenu = new KAGMenuItem(this, "自動的に読み進むウェイト(&D)", 0, 24 | void, false)); 25 | 26 | autoModeWaitMenu.add(this.autoModeFastMenuItem = new KAGMenuItem(this, "短い(&1)", 1, 27 | onAutoModeWaitMenuClick, false)); 28 | autoModeFastMenuItem.wait = autoModePageWaits.fast; 29 | autoModeFastMenuItem.lwait = autoModeLineWaits.fast; 30 | autoModeWaitMenu.add(this.autoModeFasterMenuItem = new KAGMenuItem(this, "やや短い(&2)", 1, 31 | onAutoModeWaitMenuClick, false)); 32 | autoModeFasterMenuItem.wait = autoModePageWaits.faster; 33 | autoModeFasterMenuItem.lwait = autoModeLineWaits.faster; 34 | autoModeWaitMenu.add(this.autoModeMediumMenuItem = new KAGMenuItem(this, "普通(&3)", 1, 35 | onAutoModeWaitMenuClick, false)); 36 | autoModeMediumMenuItem.wait = autoModePageWaits.medium; 37 | autoModeMediumMenuItem.lwait = autoModeLineWaits.medium; 38 | autoModeWaitMenu.add(this.autoModeSlowerMenuItem = new KAGMenuItem(this, "やや長い(&4)", 1, 39 | onAutoModeWaitMenuClick, false)); 40 | autoModeSlowerMenuItem.wait = autoModePageWaits.slower; 41 | autoModeSlowerMenuItem.lwait = autoModeLineWaits.slower; 42 | autoModeWaitMenu.add(this.autoModeSlowMenuItem = new KAGMenuItem(this, "長い(&5)", 1, 43 | onAutoModeWaitMenuClick, false)); 44 | autoModeSlowMenuItem.wait = autoModePageWaits.slow; 45 | autoModeSlowMenuItem.lwait = autoModeLineWaits.slow; 46 | 47 | systemMenu.add(new MenuItem(this, "-")); 48 | 49 | systemMenu.add(this.goBackMenuItem = new KAGMenuItem(this, "前に戻る(&B)", 0, 50 | onBackStartMenuItemClick, false)); 51 | 52 | systemMenu.add(this.goToStartMenuItem = new KAGMenuItem(this, "最初に戻る(&R)", 0, 53 | onGoToStartMenuItemClick, false)); 54 | 55 | systemMenu.add(new MenuItem(this, "-")); 56 | 57 | systemMenu.add(this.exitMenuItem = new KAGMenuItem(this, "終了(&X)", 0, onExitMenuItemClick, false)); 58 | 59 | menu.add(this.characterMenu = new KAGMenuItem(this, "文字表示(&C)", 0, void, false)); 60 | 61 | characterMenu.add(this.chSpeedMenu = new KAGMenuItem(this, "表示速度(&C)", 0, void, false)); 62 | 63 | chSpeedMenu.add(this.chNoWaitMenuItem = new KAGMenuItem(this, "ノーウェイト(&W)", 1, 64 | onChSpeedMenuItemClick, false)); 65 | chNoWaitMenuItem.speed = 0; 66 | chSpeedMenu.add(this.chFastMenuItem = new KAGMenuItem(this, "高速(&F)", 1, 67 | onChSpeedMenuItemClick, false)); 68 | chFastMenuItem.speed = chSpeeds.fast; 69 | chSpeedMenu.add(this.chNormalMenuItem = new KAGMenuItem(this, "普通(&N)", 1, 70 | onChSpeedMenuItemClick, false)); 71 | chNormalMenuItem.speed = chSpeeds.normal; 72 | chSpeedMenu.add(this.chSlowMenuItem = new KAGMenuItem(this, "遅い(&S)", 1, 73 | onChSpeedMenuItemClick, false)); 74 | chSlowMenuItem.speed = chSpeeds.slow; 75 | 76 | chSpeedMenu.add(new MenuItem(this, "-")); 77 | 78 | chSpeedMenu.add(this.chNonStopToPageBreakItem = new KAGMenuItem(this, "ページ末まで一気に(&P)", 0, 79 | onChNonStopToPageBreakItemClick, false)); 80 | 81 | characterMenu.add(this.ch2ndSpeedMenu = new KAGMenuItem(this, "一度読んだところは(&I)", 0, void, false)); 82 | 83 | ch2ndSpeedMenu.add(this.ch2ndNoWaitMenuItem = new KAGMenuItem(this, "ノーウェイト(&W)", 1, 84 | onCh2ndSpeedMenuItemClick, false)); 85 | ch2ndNoWaitMenuItem.speed = 0; 86 | ch2ndSpeedMenu.add(this.ch2ndFastMenuItem = new KAGMenuItem(this, "高速(&F)", 1, 87 | onCh2ndSpeedMenuItemClick, false)); 88 | ch2ndFastMenuItem.speed = chSpeeds.fast; 89 | ch2ndSpeedMenu.add(this.ch2ndNormalMenuItem = new KAGMenuItem(this, "普通(&N)", 1, 90 | onCh2ndSpeedMenuItemClick, false)); 91 | ch2ndNormalMenuItem.speed = chSpeeds.normal; 92 | ch2ndSpeedMenu.add(this.ch2ndNoChangeMenuItem = new KAGMenuItem(this, "変えない(&M)", 1, 93 | onCh2ndSpeedMenuItemClick, false)); 94 | ch2ndNoChangeMenuItem.speed = -1; // 変えない 95 | 96 | ch2ndSpeedMenu.add(new MenuItem(this, "-")); 97 | 98 | ch2ndSpeedMenu.add(this.ch2ndNonStopToPageBreakItem = new KAGMenuItem(this, "ページ末まで一気に(&P)", 0, 99 | onCh2ndNonStopToPageBreakItemClick, false)); 100 | 101 | characterMenu.add(new MenuItem(this, "-")); 102 | 103 | characterMenu.add(this.chAntialiasMenuItem = new KAGMenuItem(this, "アンチエイリアス(&A)", 0, 104 | onChAntialiasMenuItemClick, false)); 105 | 106 | characterMenu.add(this.chChangeFontMenuItem = new KAGMenuItem(this, "フォント(&D) ...", 0, 107 | onChChangeFontMenuItem, false)); 108 | 109 | if(freeSaveDataMode) 110 | { 111 | // フリーセーブモードの場合 112 | menu.add(this.bookMarkMenu = new KAGMenuItem(this, "栞(&J)", 0, void, false)); 113 | bookMarkMenu.add(this.restoreMenu = new KAGMenuItem(this, "栞をたどる(&J) ...", 0, onRestoreMenuClick, false)); 114 | bookMarkMenu.add(this.storeMenu = new KAGMenuItem(this, "栞をはさむ(&M) ...", 0, onStoreMenuClick, false)); 115 | } 116 | else 117 | { 118 | menu.add(this.restoreMenu = new KAGMenuItem(this, "栞をたどる(&J)", 0, onRestoreMenuClick, false)); 119 | menu.add(this.storeMenu = new KAGMenuItem(this, "栞をはさむ(&M)", 0, onStoreMenuClick, false)); 120 | } 121 | 122 | menu.add(this.displayMenu = new KAGMenuItem(this, "画面(&V)", 0, void, false)); 123 | 124 | displayMenu.add(this.windowedMenuItem = new KAGMenuItem(this, "ウィンドウ表示(&W)", 1, 125 | onWindowedMenuItemClick, false)); 126 | displayMenu.add(this.fullScreenMenuItem = new KAGMenuItem(this, "フルスクリーン(&F)", 1, 127 | onFullScreenMenuItemClick, false)); 128 | 129 | menu.add(this.helpMenu = new KAGMenuItem(this, "ヘルプ(&H)", 0, void, false)); 130 | 131 | helpMenu.add(this.helpIndexMenuItem = new KAGMenuItem(this, "目次(&I) ...", 0, 132 | onHelpIndexMenuItemClick, false)); 133 | helpMenu.add(this.helpAboutMenuItem = new KAGMenuItem(this, "このソフトについて(&A) ...", 0, 134 | onHelpAboutMenuItemClick, false)); 135 | 136 | menu.add(this.debugMenu = new KAGMenuItem(this, "デバッグ(&D)", 0, void, false)); 137 | 138 | debugMenu.add(this.reloadScenarioMenuItem = new KAGMenuItem(this, "シナリオの再読込み(&R)", 1, 139 | onReloadScenarioMenuItemClick, false)); 140 | /*debugMenu.add(this.showConsoleMenuItem = new KAGMenuItem(this, "コンソール(&C)\tShift+F4", 1, 141 | onShowConsoleMenuItemClick, false)); 142 | debugMenu.add(this.showControllerMenuItem = new KAGMenuItem(this, "コントローラ(&S)\tShift+F1", 1, 143 | onShowContollerMenuItemClick, false));*/ 144 | 145 | } 146 | 147 | 148 | // 以下、KAG 用 メニューアイテムクラス 149 | class KAGMenuItem extends MenuItem 150 | { 151 | // 基本的に MenuItem だが、指定されたイベント、あるいは 152 | // 文字列を実行する機能を持つ 153 | var owner; 154 | var command; 155 | var _accessible = true; 156 | var _enabled = true; 157 | var autoEnable = false; 158 | 159 | function KAGMenuItem(window, caption, group, command, autoenable) 160 | { 161 | super.MenuItem(window, caption); 162 | this.owner = window; 163 | this.command = command; 164 | this.autoEnable = autoenable; 165 | if(group!=0) 166 | { 167 | this.group = group; 168 | this.radio = true; 169 | } 170 | } 171 | 172 | function finalize() 173 | { 174 | delete owner; 175 | delete command; 176 | super.finalize(...); 177 | } 178 | 179 | property enabled // オーバーライド 180 | { 181 | getter { return _enabled; } 182 | setter(x) { _enabled = x; super.enabled = _accessible && _enabled; } 183 | } 184 | 185 | property accessible 186 | { 187 | getter { return _accessible; } 188 | setter(x) { _accessible = x; super.enabled = _accessible && _enabled; } 189 | } 190 | 191 | function click() 192 | { 193 | // click 動作 194 | if(command !== void) 195 | { 196 | if(typeof command == "String") 197 | { 198 | Scripts.eval(command); 199 | } 200 | else 201 | { 202 | command(this); 203 | } 204 | } 205 | } 206 | 207 | function onClick() 208 | { 209 | super.onClick(...); 210 | click(); 211 | } 212 | } 213 | -------------------------------------------------------------------------------- /data/system/DefaultMover.tjs: -------------------------------------------------------------------------------- 1 | // DefaultMover.tjs - レイヤ自動移動のデフォルトのハンドラ 2 | // Copyright (C)2001-2009, W.Dee and contributors 改変・配布は自由です 3 | 4 | class LinearMover 5 | { 6 | // 直線補間 7 | 8 | var layer; // レイヤ 9 | var path; // 点配列 10 | var time; // 点を通過するのに必要な時間 11 | var accel; // 加速度的な動きをするかどうか 12 | var pointCount; // path.count -1 13 | var finalFunction; // 移動終了時に呼ぶ関数 14 | var startTick; // 移動開始をしたティック 15 | var totalTime; // 全体の時間 16 | var delayTimer; // 動作開始時まで待つためのタイマ 17 | var moving = false; // 移動中か 18 | var first = true; // 初回のハンドラ呼び出しか 19 | var nextStop = false; // 次のハンドラ呼び出しで停止するか 20 | 21 | function LinearMover(layer, path, time, accel, finalfunction) 22 | { 23 | this.layer = layer; 24 | this.path = path; 25 | this.time = time; 26 | this.accel = accel; 27 | this.finalFunction = finalfunction; 28 | totalTime = (pointCount = (path.count \ 3 - 1)) * time; 29 | } 30 | 31 | function finalize() 32 | { 33 | stopMove(); 34 | if(delayTimer !== void) invalidate delayTimer; 35 | } 36 | 37 | function startMove(delay) 38 | { 39 | // 移動を開始する 40 | if(delay != 0) 41 | { 42 | delayTimer = new Timer(onDelayTimer, ''); 43 | delayTimer.interval = delay; 44 | delayTimer.enabled = true; 45 | moving = true; 46 | } 47 | else 48 | { 49 | System.addContinuousHandler(handler); // ContinuousHandlers に追加 50 | moving = true; 51 | } 52 | } 53 | 54 | function onDelayTimer() 55 | { 56 | // delayTimer が発動した 57 | delayTimer.enabled = false; 58 | System.addContinuousHandler(handler); 59 | } 60 | 61 | function stopMove() 62 | { 63 | // 移動を終わる 64 | if(moving) 65 | { 66 | // 最終位置に移動 67 | if(layer isvalid) 68 | { 69 | var idx = int(pointCount*3); 70 | var p = path; 71 | layer.setPos(p[idx], p[idx+1]); 72 | layer.opacity = p[idx+2]; 73 | } 74 | System.removeContinuousHandler(handler); 75 | moving = false; 76 | finalFunction(); 77 | } 78 | } 79 | 80 | function handler(tick) 81 | { 82 | // 移動中に呼ばれる 83 | if(nextStop || !(layer isvalid)) { stopMove(); return; } 84 | if(first) startTick = tick, first = false; 85 | tick -= startTick; 86 | if(tick >= totalTime) 87 | { 88 | nextStop = true; 89 | var idx = int(pointCount*3); 90 | var p = path; 91 | layer.setPos(p[idx], p[idx+1]); 92 | layer.opacity = p[idx+2]; 93 | return; 94 | } 95 | 96 | if(accel < 0) 97 | { 98 | // 上弦 ( 最初が動きが早く、徐々に遅くなる ) 99 | tick = 1.0 - tick / totalTime; 100 | tick = Math.pow(tick, -accel); 101 | tick = int ( (1.0 - tick) * totalTime ); 102 | } 103 | else if(accel > 0) 104 | { 105 | // 下弦 ( 最初は動きが遅く、徐々に早くなる ) 106 | tick = tick / totalTime; 107 | tick = Math.pow(tick, accel); 108 | tick = int ( tick * totalTime ); 109 | } 110 | 111 | move(tick); 112 | } 113 | 114 | function move(tick) 115 | { 116 | var index = tick \ time * 3; 117 | var ratio = tick % time / time; 118 | var p = path; 119 | var sx = p[index]; 120 | var sy = p[index+1]; 121 | var so = p[index+2]; 122 | var ex = p[index+3]; 123 | var ey = p[index+4]; 124 | var eo = p[index+5]; 125 | 126 | var l = int((ex-sx)*ratio + sx); 127 | var t = int((ey-sy)*ratio + sy); 128 | var o = eo >= 256 ? so : int((eo-so)*ratio + so); 129 | 130 | layer.setPos(l, t); 131 | layer.opacity = o; 132 | } 133 | } 134 | 135 | 136 | class SplineMover extends LinearMover 137 | { 138 | // スプライン補間 139 | var zx = []; // スプラインワーク 140 | var zy = []; // スプラインワーク 141 | 142 | function SplineMover(layer, path, time, accel, finalfunction) 143 | { 144 | super.LinearMover(...); 145 | 146 | if(path.count < 9) 147 | { 148 | // 3 点以下 ( 指定するのはそのうちの2点 ) は補完できない 149 | throw new Exception("2 点以上を指定してください"); 150 | } 151 | 152 | // スプライン補間に必要なワークを計算 153 | var points = path.count \ 3; 154 | var tmpx = [], tmpy = []; 155 | var tx = zx, ty = zy; 156 | tx[0] = 0; 157 | ty[0] = 0; 158 | tx[points-1] = 0; 159 | ty[points-1] = 0; 160 | 161 | for(var i = points-2, pi = path.count-6; i >= 0; i--, pi -= 3) 162 | { 163 | tmpx[i+1] = (path[pi + 3] - path[pi ]); 164 | tmpy[i+1] = (path[pi + 4] - path[pi+1]); 165 | } 166 | 167 | tx[1] = tmpx[2] - tmpx[1] - tx[0]; 168 | ty[1] = tmpy[2] - tmpy[1] - ty[0]; 169 | 170 | tmpx[1] = 4; 171 | tmpy[1] = 4; 172 | 173 | var lim = points - 2; 174 | for(var i = 1, pi = 3; i < lim; i++, pi += 3) 175 | { 176 | var x = 1 / tmpx[i]; 177 | var y = 1 / tmpy[i]; 178 | tx[i+1] = tmpx[i+2] - tmpx[i+1] - tmpx[i] * x; 179 | ty[i+1] = tmpy[i+2] - tmpy[i+1] - tmpy[i] * y; 180 | tmpx[i+1] = 4 - x; 181 | tmpy[i+1] = 4 - y; 182 | } 183 | 184 | tx[points-2] -= tx[points-1]; 185 | ty[points-2] -= ty[points-1]; 186 | 187 | for(var i = points-2, pi = path.count-6; i>0; i--, pi -= 3) 188 | { 189 | tx[i] = (tx[i] - tx[i+1]) / tmpx[i]; 190 | ty[i] = (ty[i] - ty[i+1]) / tmpy[i]; 191 | } 192 | } 193 | 194 | function move(tick) 195 | { 196 | var index; 197 | var pindex = (index = tick \ time) * 3; 198 | var d = tick % time / time; 199 | 200 | var p = path; 201 | 202 | var l = (((zx[index+1] - zx[index])*d + 203 | zx[index]*3)*d + 204 | ((p[pindex + 3] - p[pindex]) - 205 | (zx[index]*2 + zx[index+1]))) * d + 206 | p[pindex]; 207 | 208 | var t = (((zy[index+1] - zy[index])*d + 209 | zy[index]*3)*d + 210 | ((p[pindex + 4] - p[pindex+1]) - 211 | (zy[index]*2 + zy[index+1]))) * d + 212 | p[pindex+1]; 213 | 214 | var so = p[pindex+2]; 215 | var eo = p[pindex+5]; 216 | 217 | var o = eo >= 256 ? so : int((eo-so)*d + so); 218 | 219 | layer.setPos(l, t); 220 | layer.opacity = o; 221 | } 222 | 223 | } 224 | 225 | 226 | class LinearFrameMover 227 | { 228 | // 直線補間 229 | var layer; // レイヤ 230 | var path; // フレーム配列 -> フレーム番号, x, y, opacity が入っている 231 | var fps; // フレームレート 232 | var pointCount; // path.count -1 233 | var finalFunction; // 移動終了時に呼ぶ関数 234 | var startTick; // 移動開始をしたティック 235 | var totalTime; // 全体の時間 236 | var moving = false; // 移動中か 237 | var first = true; // 初回のハンドラ呼び出しか 238 | var nextStop = false; // 次のハンドラ呼び出しで停止するか 239 | 240 | var offset_x = 0; 241 | var offset_y = 0; 242 | var curPoint; 243 | 244 | function LinearFrameMover(layer, path, fps, finalfunction, offset_x, offset_y) 245 | { 246 | this.layer = layer; 247 | this.path = path; 248 | this.fps = fps; 249 | this.finalFunction = finalfunction; 250 | this.offset_x = offset_x; 251 | this.offset_y = offset_y; 252 | pointCount = (path.count \ 4 - 1); 253 | totalTime = (path[int(pointCount*4)] * 1000) \ fps; 254 | } 255 | 256 | function finalize() { 257 | stopMove(); 258 | } 259 | 260 | function startMove() { 261 | first = true; 262 | System.addContinuousHandler(handler); // ContinuousHandlers に追加 263 | moving = true; 264 | } 265 | 266 | function stopMove() { 267 | // 移動を終わる 268 | if( moving ) { 269 | // 最終位置に移動 270 | if(layer isvalid) { 271 | var idx = int(pointCount*4); 272 | var p = path; 273 | layer.setPos(offset_x+p[idx+1], offset_y+p[idx+2]); 274 | layer.opacity = p[idx+3]; 275 | } 276 | System.removeContinuousHandler(handler); 277 | moving = false; 278 | finalFunction(); 279 | } 280 | } 281 | 282 | function handler(tick) { 283 | // 移動中に呼ばれる 284 | if(nextStop || !(layer isvalid)) { stopMove(); return; } 285 | if(first) startTick = tick, first = false, curPoint = 0; 286 | tick -= startTick; 287 | if( tick >= totalTime ) { 288 | nextStop = true; 289 | var idx = int(pointCount*4); 290 | var p = path; 291 | layer.setPos(offset_x+p[idx+1], offset_y+p[idx+2]); 292 | layer.opacity = p[idx+3]; 293 | return; 294 | } 295 | move(tick); 296 | } 297 | 298 | function move(tick) { 299 | var idx = int(curPoint*4); 300 | var p = path; 301 | var curTime = (p[idx] * 1000) \ fps; 302 | var nextIdx = idx + 4; 303 | var nextTime = (p[nextIdx] * 1000) \ fps; 304 | if( tick > nextTime ) { 305 | curPoint++; 306 | idx = int(curPoint*4); 307 | curTime = (p[idx] * 1000) \ fps; 308 | nextIdx = idx + 4; 309 | nextTime = (p[nextIdx] * 1000) \ fps; 310 | } 311 | 312 | var duration = nextTime - curTime; 313 | var diff = (tick - curTime); 314 | 315 | var ratio = diff / duration; 316 | var p = path; 317 | var sx = p[idx+1]; 318 | var sy = p[idx+2]; 319 | var so = p[idx+3]; 320 | 321 | var ex = p[nextIdx+1]; 322 | var ey = p[nextIdx+2]; 323 | var eo = p[nextIdx+3]; 324 | 325 | var l = int((ex-sx)*ratio + sx); 326 | var t = int((ey-sy)*ratio + sy); 327 | var o = eo >= 256 ? so : int((eo-so)*ratio + so); 328 | 329 | layer.setPos(offset_x+l, offset_y+t); 330 | layer.opacity = o; 331 | } 332 | } 333 | 334 | -------------------------------------------------------------------------------- /data/system/Ham/Base/ui/MBSystemLayer.tjs: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | MBSystemLayer.tjs 3 | 4 | じわーっと出てくるシステムレイヤ基本クラス 5 | *******************************************************************************/ 6 | 7 | class MBSystemLayer extends MBComponentLayer 8 | { 9 | var layerCaption; // キャプション 10 | var timer; // タイマー 11 | var counter; // カウンター 12 | 13 | var fontSize = MBFontStyle.size.label; // 文字の大きさ 14 | var fontColor = MBColors.font.label.normal; // 文字色 15 | var borderColor = MBColors.window.border; // 枠色 16 | var bgColor = MBColors.window.background; // 背景色 17 | 18 | var defWidth = 320; // 設定横幅 19 | var defHeight = 480; // 設定縦幅 20 | var posX; // X座標 21 | var posY; // Y座標 22 | 23 | // ゲームウィンドウの端からの最小距離 24 | var minLengthFromWindowBorder = %[x : 20, y : 20]; 25 | 26 | var borderWidth = 2; // 枠線幅 27 | var marginWidth = 10; // マージン 28 | 29 | var titleHeight = 18; // タイトルバーの高さ 30 | 31 | var blActionCancelAuto = true; // 自動でアクションキャンセラを呼ぶかどうか 32 | var objShadeLayer; // 非アクティブ時のマスクレイヤ 33 | 34 | var isNewLayer = true; 35 | 36 | 37 | function MBSystemLayer(win, par, cap) 38 | { 39 | // コンストラクタ 40 | 41 | super.MBComponentLayer(win, par); 42 | 43 | face = dfBoth; 44 | opacity = 255; 45 | enabled = false; 46 | focusable = false; 47 | visible = false; 48 | hitType = htMask; 49 | hitThreshold = 0; 50 | 51 | layerCaption = cap; 52 | 53 | font.face = "MS Pゴシック"; 54 | font.height = fontSize; 55 | 56 | posX = Math.round(win.primaryLayer.width - defWidth) / 2; 57 | posY = Math.round(win.primaryLayer.height - defHeight) / 4; 58 | 59 | if (layerCaption != "") { 60 | defHeight += titleHeight; 61 | posY += titleHeight; 62 | } 63 | } 64 | 65 | function finalize() 66 | { 67 | // ファイナライザ 68 | 69 | invalidate timer if (timer !== void); 70 | invalidate objShadeLayer if (objShadeLayer !== void); 71 | 72 | super.finalize(...); 73 | 74 | //dm(" レイヤ `%s' が破棄されました。".sprintf((layerCaption != "") ? layerCaption : "untitled")); 75 | } 76 | 77 | function show() 78 | { 79 | // 表示発動トリガ 80 | 81 | /*try { 82 | setMode(); 83 | } 84 | catch { 85 | dm("[MBSystemLayer] Maybe I already have a mode!"); 86 | }*/ 87 | 88 | if (blActionCancelAuto) { 89 | SystemManager.acActivateCanceller(); 90 | } 91 | visible = true; 92 | timer = new Timer(onTimerShowing, ''); 93 | timer.interval = 10; 94 | timer.enabled = true; 95 | } 96 | 97 | function onTimerShowing() 98 | { 99 | // じわーっと表示 100 | 101 | counter += 1; 102 | var newh = defHeight * (counter * 0.1); 103 | 104 | if (newh > defHeight) { 105 | invalidate timer if (timer !== void); 106 | onEndOfShowing(); 107 | return; 108 | } 109 | 110 | if (newh < 1) { 111 | newh = 1; 112 | } 113 | 114 | setImageSize(defWidth, newh); 115 | setSizeToImageSize(); 116 | setPos(posX, posY + (defHeight - newh) / 2); 117 | fillRect(0, 0, width, height, borderColor); 118 | if (height > borderWidth) { 119 | fillRect(borderWidth, borderWidth, width - borderWidth * 2, height - borderWidth * 2, bgColor); 120 | } 121 | } 122 | 123 | function onEndOfShowing() 124 | { 125 | // 表示完了後に呼ばれる 126 | 127 | if (layerCaption != "") { 128 | setImageSize(defWidth, defHeight); 129 | setSizeToImageSize(); 130 | setPos(posX, posY); 131 | fillRect(0, 0, width, height, borderColor); 132 | fillRect(borderWidth, borderWidth, width - borderWidth * 2, height - borderWidth * 2, bgColor); 133 | fillRect(0, 0, width, titleHeight, borderColor); 134 | font.height = 12; 135 | font.bold = true; 136 | font.italic = true; 137 | //drawText(borderWidth + marginWidth, borderWidth + 1, layerCaption, fontColor); 138 | drawText(borderWidth + marginWidth, borderWidth + 1, layerCaption, MBColors.font.label.title); 139 | font.height = fontSize; 140 | font.bold = false; 141 | font.italic = false; 142 | } 143 | //dm(" 新規レイヤ `%s' が生成されました。".sprintf((layerCaption != "") ? layerCaption : "untitled")); 144 | enabled = true; 145 | 146 | if (blActionCancelAuto) { 147 | SystemManager.acDisactivateCanceller(); 148 | } 149 | window.trigger("end_syslay_showing"); 150 | } 151 | 152 | function hide() 153 | { 154 | // 消去トリガー 155 | 156 | visible = true; 157 | enabled = false; 158 | 159 | if (blActionCancelAuto) { 160 | SystemManager.acActivateCanceller(); 161 | } 162 | timer = new Timer(onTimerHiding, ''); 163 | timer.interval = 10; 164 | timer.enabled = true; 165 | } 166 | 167 | function onTimerHiding() 168 | { 169 | // じわーっと消える 170 | 171 | counter -= 1; 172 | var newh = defHeight * (counter * 0.1); 173 | 174 | if (counter == 0 || newh < 1) { 175 | timer.enabled = false; 176 | invalidate timer; 177 | visible = false; 178 | removeMode(); 179 | onEndOfHiding(); 180 | return; 181 | } 182 | 183 | setImageSize(defWidth, newh); 184 | setSizeToImageSize(); 185 | setPos(posX, posY + (defHeight - newh) / 2); 186 | fillRect(0, 0, width, height, borderColor); 187 | if (height > borderWidth) { 188 | fillRect(borderWidth, borderWidth, width - borderWidth * 2, height - borderWidth * 2, bgColor); 189 | } 190 | } 191 | 192 | function onEndOfHiding() 193 | { 194 | // 消去完了後に呼ばれる 195 | 196 | try { 197 | removeMode(); 198 | } 199 | catch {} 200 | 201 | if (blActionCancelAuto) { 202 | SystemManager.acDisactivateCanceller(); 203 | } 204 | 205 | SystemManager.fcApplyFocusTargetSearch(); 206 | window.trigger("end_syslay_hiding"); 207 | } 208 | 209 | function clearAll() 210 | { 211 | // 完全消去 212 | 213 | fillRect(0, 0, width, height, 0x00000000); 214 | visible = false; 215 | counter = 0; 216 | } 217 | 218 | //-------------------------------------------------------------------------- 219 | 220 | function setOpenPosition(x, y) 221 | { 222 | // 出現位置を設定 223 | 224 | posX = x; 225 | posY = y; 226 | 227 | var mx = (window.fore.base.width - minLengthFromWindowBorder.x) - defWidth; 228 | var my = (window.fore.base.height - minLengthFromWindowBorder.y) - defHeight; 229 | 230 | if (posX < minLengthFromWindowBorder.x) { 231 | posX = minLengthFromWindowBorder.x; 232 | } 233 | else if (posX > mx) { 234 | posX = mx; 235 | } 236 | 237 | if (posY < minLengthFromWindowBorder.y) { 238 | posY = minLengthFromWindowBorder.y; 239 | } 240 | else if (posY > my) { 241 | posY = my; 242 | } 243 | } 244 | 245 | //-------------------------------------------------------------------------- 246 | 247 | function activate() 248 | { 249 | // アクティブにする 250 | 251 | invalidate objShadeLayer if (objShadeLayer !== void); 252 | enabled = true; 253 | } 254 | 255 | function disactivate() 256 | { 257 | // 非アクティブにする 258 | 259 | enabled = false; 260 | 261 | objShadeLayer = new global.GraphicLayer(window, this); 262 | objShadeLayer.setSize(width, height); 263 | objShadeLayer.setPos(0, 0); 264 | objShadeLayer.hitType = htMask; 265 | objShadeLayer.hitThreshold = 0; 266 | objShadeLayer.fillRect(0, 0, width, height, 0x66000000); 267 | objShadeLayer.visible = true; 268 | } 269 | 270 | //-------------------------------------------------------------------------- 271 | 272 | function drawHorizontalBorderLine(py, wd) 273 | { 274 | // 水平区切り線を描く 275 | 276 | if (wd < 1) { 277 | wd = width - (borderWidth + marginWidth) * 2; 278 | } 279 | 280 | fillRect(12, py, wd, 1, fontColor + 0xff000000); 281 | } 282 | 283 | //-------------------------------------------------------------------------- 284 | 285 | function save() 286 | { 287 | // 状態を保存 288 | 289 | var dict = %[ 290 | counter : counter, 291 | visible : visible 292 | ]; 293 | 294 | return dict; 295 | } 296 | 297 | function load(dict) 298 | { 299 | // 状態復元 300 | 301 | counter = dict.counter; 302 | visible = dict.visible; 303 | } 304 | 305 | //-------------------------------------------------------------------------- 306 | 307 | function onMouseDown(x, y, button, shift) 308 | { 309 | super.onMouseDown(...); 310 | 311 | if (button == mbLeft) { 312 | window.onPrimaryClick(); 313 | } 314 | else if (button == mbRight) { 315 | window.onPrimaryRightClick(); 316 | } 317 | } 318 | 319 | //-------------------------------------------------------------------------- 320 | 321 | function onMouseMove(x, y, shift) 322 | { 323 | super.onMouseMove(...); 324 | isNewLayer = false; 325 | } 326 | 327 | //-------------------------------------------------------------------------- 328 | 329 | function onKeyDown(key, shift) 330 | { 331 | if (!window.preProcessKeys(key, shift)) { 332 | super.onKeyDown(...); 333 | } 334 | } 335 | 336 | function onEscapeKeyDown(key, shift) 337 | { 338 | dm("エスケープされますた"); 339 | } 340 | 341 | } 342 | --------------------------------------------------------------------------------