パイレーツ アサルト 攻略メモ

3つ星を取った時の方法など。

3つ星

  • 3つ星の条件はお宝を1つも減らさないこと。
  • 敵船を連続タッチしての取り返しは許容される。

武器配置

  • 出現場所付近に投石器を4機前後配置する。
    • 適切な配置場所がなくなった場合はアップグレードを行う。
    • 投石器のアップグレードコストは50/50なので1機ずつ最大化したほうが良い(?)
  • 出現場所が概ね3箇所あるが、出現頻度が低い場所がある。
    • 出現頻度が低い場所からの敵船は、沈めずに取り返すことを前提に行動する。
  • 取り返す前に沈めてしまわないために、お宝近くに武器は置かない。
  • 序盤は、1箇所の出現場所を固めることを優先する。

その他

  • 大嵐は効果が出るまで5秒ほどかかるので、敵船がその間にお宝に触れる位置にいる場合は使わないよう気を付ける。
  • 幽霊船は大嵐中でもクリック可能。
  • 爆破樽は複数の敵船に重なるよう配置すると、複数の敵船を一度で破壊可能。

Wineで一部のトレイアイコンが空欄になる不具合のやっつけパッチ

以前、Wineで一部のプログラムのタスクトレイアイコンが空欄になる不具合が発生した際に、一時しのぎに作ったパッチ。1.3.37までは適用確認済。以降はプログラム側で対処したので試してない。

patch-fix-invisible-trayicon

diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c
index 6e4225c..2421ea8 100644
--- dlls/winex11.drv/event.c
+++ dlls/winex11.drv/event.c
@@ -879,7 +879,7 @@ static void X11DRV_ReparentNotify( HWND hwnd, XEvent *xev )
     }
     else
     {
-        if (!(parent = create_foreign_window( event->display, event->parent ))) return;
+        parent = GetDesktopWindow();
         style = (style & ~WS_POPUP) | WS_CHILD;
     }
 

起因

なお、不具合の起因は以下のコミット。
上のパッチはこのコミットの一部を差し戻すので、リグレしても良い場合のみ適用のこと。

commit 5d570706c6aca9acbff855c3ae497b35bdde4648
Date:   Mon Nov 8 15:28:09 2010 +0100

    winex11: Create Win32 windows corresponding to all the ancestors of embedded windows.
    
    This is needed to keep track of the embedded window position by
    handling ConfigureNotify received by ancestors.

/tmp on mfs

2012/06/10 /etc/rc.d/backup_tmpのバグを修正。


/tmpをmfsにする設定とバックアップ用スクリプト

/etc/fstab

/tmpだったスライスを/nvtmpに、mfsを/tmpに設定した。

/dev/ada0s1g		/nvtmp		ufs	rw,noatime	2	2
md0			/tmp	mfs rw,noatime,async,-s1g,-M,-p1777,-v1	3 0

/etc/rc.conf

バックアップ用スクリプトの動作設定。
backup_tmp_dirにバックアップの保存先、backup_tmp_targetsにバックアップ対象を設定する。

backup_tmp_enable="YES"
backup_tmp_dir=/nvtmp/.backup_tmp
backup_tmp_targets="work-1001 work-1002"

/etc/crontab

バックアップ用スクリプトはshutdown時にしかバックアップを生成しないので、不測の事態に備えて別途1日1回バックアップを作成しておく。

25      5       *       *       *       /etc/rc.d/backup_tmp stop >> /nvtmp/.backup_tmp/cron.log

/etc/rc.d/backup_tmp

バックアップ用スクリプト

#!/bin/sh
#

# PROVIDE: backup_tmp
# REQUIRE: DAEMON
# BEFORE:  LOGIN
# KEYWORD: shutdown

. /etc/rc.subr

name="backup_tmp"
rcvar="backup_tmp_enable"
start_cmd="backup_tmp_do start"
stop_cmd="backup_tmp_do stop"
backup_tmp_dir_default=/var/tmp/backup_tmp
load_rc_config $name

backup_tmp_restore()
{
	local name=$1

	if [ -e $backup_tmp_dir/$name.tar ]; then
		echo -n " $name"
		tar -xf $backup_tmp_dir/$name.tar -C /tmp
	fi
}

backup_tmp_backup()
{
	local name=$1

	if [ -e /tmp/$name ]; then
		if [ ! -d $backup_tmp_dir ]; then
			mkdir -pm 0770 $backup_tmp_dir
		fi
		echo -n " $name"
		tar -cf $backup_tmp_dir/$name.tar -C /tmp $name
	fi
}

backup_tmp_do()
{
	local func=:
	local doing=Doing
	case $1 in
	start)
		func=backup_tmp_restore
		doing=Restoring
		;;
	stop)
		func=backup_tmp_backup
		doing='Backing up'
		;;
	esac

	if [ ".$backup_tmp_dir" = . ]; then
		backup_tmp_dir=$backup_tmp_dir_default
	fi

	echo -n "$doing /tmp:"
	for target in $backup_tmp_targets; do
		$func $target
	done
	echo '.'
}

run_rc_command "$1"

VistaとXPのデュアルブート

以前VistaとXPのデュアルブートにした際の手順。

目的

    +-----+-----+-----+
HDD |Vista| XP  |Data |
    +-----+-----+-----+
     Boot
     Sys.

手順

  1. LiveCD版UbuntuでXPのパーティションを作成する。
    +-----+-----+-----+
    |blank|NTFS |blank|
    +-----+-----+-----+
  1. BIOSIDEモードに設定する。
  2. XPをインストールする。
  3. XPにIntel Chipset Inf Update Programをインストールする。
  4. XPでデバイスマネージャからF6 Floppy UtilityのAHCIドライバに更新する。
  5. BIOSAHCIモードに設定する。
  6. LiveCD版UbuntuVistaパーティションを作成し、アクティブに設定する。
    +-----+-----+-----+
    |NTFS |     |blank|
    +-----+-----+-----+
    Active
  1. Vistaをインストールする。
  2. VistaIntel Chipset Inf Update Programをインストールする。
  3. Vistaの管理者権限コマンドプロンプトで、以下のコマンドを実行する。
bcdedit /set {ntldr} device partition=C:
bcdedit /displayorder {ntldr} /addlast
  1. Vistaの管理者権限メモ帳で、[XP]:\boot.iniのpartition(1)をpartition(2)に修正する。 ([XP]はXPのドライブ文字)
  2. VistaでXPパーティションのboot.ini, bootfont.bin, NTDETECT.COM, ntldrをVistaパーティションにコピーする。
  3. XPのレジストリエディタでHKEY_LOCAL_MACHINE\SYSTEM\MountedDevicesの\DosDevices\[Vista]:を\DosDevices\D:に修正する。 ([Vista]はVistaのドライブ文字)

その他

XPのシステムの復元によって、Vistaの復元ポイントが削除されてしまうので、両OSのシステムの復元は無効にしておく。

VirtualBox差分ディスクの依存関係

VirtualBox差分ディスクの依存関係を書き換える方法。

目的

誤って親差分ディスクを削除してしまったが、残っている子差分ディスクの中身をできるだけ救出したい。

注意

以下の作業は仮想マシンを破壊します。ディスクの依存関係次第では、他の仮想マシンも起動しなくなります。

手順

  1. .vboxのMediaRegistryについて、削除してしまった親差分ディスクのHardDiskエントリを削除。
  2. .vboxの他の場所について、削除してしまった親差分ディスクの箇所を子差分ディスク名に書き換え。
  3. 子差分ディスクについて、Parent UUIDを親差分ディスクからその上位差分ディスクに書き換え。

.vboxファイル

{parent}が削除してしまった差分ディスクのUUID。

--- TMP.vbox.orig	2012-02-19 23:12:38.000000000 +0900
+++ TMP.vbox	2012-02-20 19:43:53.000000000 +0900
@@ -24,8 +24,7 @@
         </HardDisk>
         <HardDisk uuid="{base}" location="base.vdi" format="VDI" type="Normal">
           <HardDisk uuid="{grandparent}" location="Snapshots/{grandparent}.vdi" format="VDI">
-            <HardDisk uuid="{parent}" location="Snapshots/{parent}.vdi" format="VDI">
-              <HardDisk uuid="{child}" location="Snapshots/{child}.vdi" format="VDI"/>
+            <HardDisk uuid="{child}" location="Snapshots/{child}.vdi" format="VDI">
               <HardDisk uuid="{grandchild}" location="Snapshots/{grandchild}.vdi" format="VDI">
                 <HardDisk uuid="{current}" location="Snapshots/{current}.vdi" format="VDI"/>
               </HardDisk>
@@ -667,7 +664,7 @@
                         <Image uuid="{...}"/>
                       </AttachedDevice>
                       <AttachedDevice type="HardDisk" port="0" device="1">
-                        <Image uuid="{parent}"/>
+                        <Image uuid="{child}"/>
                       </AttachedDevice>
                       <AttachedDevice passthrough="false" type="DVD" port="1" device="0"/>
                     </StorageController>

.vdiファイル

0x000001a8から16バイトがParent UUIDなので、それを書き換える。
UUIDが{00112233-4455-6677-8899-aabbccddeeff}なら、以下の形式で格納される。

33 22 11 00 55 44 77 66 88 99 aa bb cc dd ee ff

使用したソフトウェア

UFS Snapshot

日次と週次のバックアップにUFS Snapshotを使ってみた際の設定など。
半年ほど使っていたが、週に1回程度失敗する問題が解消できなかったので、tarによるバックアップに戻した。

雑感

  • 処理中はマウントポイントがロックされるので、そのマウントポイントにアクセスすると処理完了まで待たされる。
    • 処理時間は100GBで約4分、300GBで約12分だった。 (WD Caviar Green WD5000AADS)
  • noatimeを指定していても対象マウントポイントはatimeになる。
  • スケジュール途中で失敗した場合、そのマウントポイント以降は処理されない。
    • 例えば、以下の設定の時、/homeで失敗すると/jailは処理されない。

必要なport

sysutils/freebsd-snapshot

設定

/etc/periodic.conf

snapshot_enable="YES"
snapshot_schedule="/,/usr,/home,/jail:3:6:0"

成功時のmessages (抜粋)

root: snapshot: daily.0 snapshot on filesystem / made (duration: 0 min)
root: snapshot: daily.0 snapshot on filesystem /usr made (duration: 0 min)
root: snapshot: daily.0 snapshot on filesystem /home made (duration: 0 min)
...

失敗時のmessages (抜粋)

kernel: fsync: giving up on dirty
kernel: 0x...: tag devfs, type VCHR
kernel: usecount 1, writecount 0, refcount ... mountedhere 0x...
kernel: flags (VV_COPYONWRITE)
kernel: v_object 0x... ref 0 pages ...
kernel: lock type devfs: EXCL by thread 0x... (pid ...)
kernel: dev ...
root: snapshot: making snapshot on /jail failed

非rootユーザでのPorts

以前大学の共用機でPortsを使うためにでっち上げた非rootユーザでのPortsインストールスクリプト
今は使ってないので、動くか不明。

myports.csh

MYPORTS_DIRがPorts設定の保存先で、MYPORTS_PREFIXがインストール先。

set MYPORTS_DIR = $HOME/myports
set MYPORTS_PREFIX = $HOME/local

setenv	LD_LIBRARY_PATH	$MYPORTS_PREFIX/lib
setenv	PKG_CONFIG_PATH	$MYPORTS_PREFIX/lib/pkgconfig:$MYPORTS_PREFIX/libdata/pkgconfig
setenv	GST_PLUGIN_PATH	$MYPORTS_PREFIX/lib/gstreamer-0.10
setenv	PYTHONPATH	$MYPORTS_PREFIX/lib/python2.7/site-packages
setenv	LIBRARY_PATH	$MYPORTS_PREFIX/lib
setenv	CPATH	$MYPORTS_PREFIX/include
setenv	MANPATH	`manpath`:$MYPORTS_PREFIX/man

set options
set options = ( "$options"       PREFIX=$MYPORTS_PREFIX )
#set options = ( "$options"     PORTSDIR=$MYPORTS_DIR/ports )
set options = ( "$options"     PORTSDIR=/usr/ports )
set options = ( "$options"      DISTDIR=$MYPORTS_DIR/ports/distfiles )
set options = ( "$options" WRKDIRPREFIX=$MYPORTS_DIR/ports )
set options = ( "$options"    PKG_DBDIR=$MYPORTS_DIR/db/pkg )
set options = ( "$options"   PORT_DBDIR=$MYPORTS_DIR/db/ports )
set options = ( "$options"   \'LDCONFIG=/sbin/ldconfig -f $MYPORTS_DIR/run/ld-elf.so.hints\' )
set options = ( "$options"   BINOWN=$USER   BINGRP=$GROUP )
set options = ( "$options" SHAREOWN=$USER SHAREGRP=$GROUP )
set options = ( "$options"   MANOWN=$USER   MANGRP=$GROUP )
set options = ( "$options"   BINMODE=0755 )
set options = ( "$options" SHAREMODE=0644 )
set options = ( "$options"   MANMODE=0644 )
set options = ( "$options" INSTALL_AS_USER=yes )
set options = ( "$options" PYTHON_SITELIBDIR=$MYPORTS_PREFIX/lib/python2.7/site-packages )
set options = ( "$options" RUBY=$MYPORTS_PREFIX/bin/ruby )
#set options = ( "$options" TCL_INCLUDEDIR=$MYPORTS_PREFIX\''/include/tcl${TCL_VER}'\' )
#set options = ( "$options" TCL_LIBDIR=$MYPORTS_PREFIX\''/lib/tcl${TCL_VER}${_TCL_THREADS_SUFFIX}'\' )
#set options = ( "$options" TCLSH=$MYPORTS_PREFIX\''/bin/tclsh${TCL_VER}${_TCL_THREADS_SUFFIX}'\' )
#set options = ( "$options" TK_INCLUDEDIR=$MYPORTS_PREFIX\''/include/tk${TK_VER}'\' )
#set options = ( "$options" TK_LIBDIR=$MYPORTS_PREFIX\''/lib/tk${TK_VER}${_TCL_THREADS_SUFFIX}'\' )
#set options = ( "$options" WISH=$MYPORTS_PREFIX\''/bin/wish${TK_VER}${_TCL_THREADS_SUFFIX}'\' )
alias	pmk	make "$options"
unset options

#alias	portsnap	portsnap \
#	-f $MYPORTS_DIR/etc/portsnap.conf \
#	-d $MYPORTS_DIR/db/portsnap \
#	-p $MYPORTS_DIR/current

unset MYPORTS_DIR MYPORTS_PREFIX

準備

インストール先とPorts設定の保存先を作成する。

set MYPORTS_DIR = $HOME/myports
set MYPORTS_PREFIX = $HOME/local
mkdir $MYPORTS_DIR
mkdir $MYPORTS_PREFIX

ldconfigのヒントファイルを作成する。

ldconfig -r | grep search | sed 's/^.*: // ; s/:/\\
/g' > $MYPORTS_DIR/etc/ld-elf.so.conf
echo $MYPORTS_PREFIX/lib >> $MYPORTS_DIR/etc/ld-elf.so.conf
ldconfig -elf -f $MYPORTS_DIR/run/ld-elf.so.hints -i -R $MYPORTS_DIR/etc/ld-elf.so.conf

以下のコマンドで共有ライブラリが正しく認識されているか確認する。

ldconfig -r -f $MYPORTS_DIR/run/ld-elf.so.hints

使用方法

ccacheをインストールする例:

source myports.csh
cd /usr/ports/devel/ccache/
pmk install clean

インストールできないportも結構あるので注意。