highlight

2020年12月31日木曜日

Castle Nathria - Lady Inerva Darkvein

Lady Inerva Darkvein

シングル phase の戦闘。Boss の ability は、Primal Anima Container が徐々に満たされる量に応じて強化されていく。 プレイヤは部屋の周囲にある Anima Container が吸い取った Anima を排出して、強化を除去する必要がある。

2020年12月30日水曜日

Castle Nathria - Hungering Destroyer

Hungering Destroyer

Hungering Destroyer は、シングル phase の "Patchwerk" のような戦闘で、ミニグループでの heal が肝となる。 Gluttonous Miasma は heal immune かつ dispell 不可で、その DoT ダメージを一人で受けきれるものではないので、何人かで split しなければならない。 tank の力量と raid の位置取りが戦闘の肝となる。

2020年12月29日火曜日

Castle Nathria - Huntsman Altimor

Dungeon Guide の翻訳が終わったら Raid Guide を訳そうと思ったけど、私の仕事が遅いもんで、もう LFR wing1 が open してしまった。 とりあえず Wing 1 から順番に訳す(意訳と独自解釈)。

私が所属しているギルドはもう自前レイドも開催してない様で、raid への参加は LFR 専門なので Normal 以上については翻訳が間違ってても多分気づかない。 Normal の 1st は Shriekwing だそうだが、LFR には登場してないので後回し。

Huntsman Altimor

Boss 本体とその pet との戦闘になる。 Boss の攻撃はずっと単調だが、呼び出す pet に応じて戦い方を変えていく事になる。

2020年12月27日日曜日

Spires of Ascension

World of Warcraft - Shadowlands 拡張のダンジョンガイド Spires of Ascension 編。

Covenant - Kyrian

Kyrial を選んだプレイヤは、ダンジョンの特定箇所で倒れている Kyrian が持っている槍を使える。使うと Spear of Destiny が発動する。

2020年12月10日木曜日

Hall of Atonement

World of Warcraft - Shadowlands 拡張のダンジョンガイド Hall of Atonement 編。Wowhead の翻訳ベースだけど、端折ったり改変したりしてる。

Covenant - Venthyr

ダンジョンの至るところに居る Loyal Stoneborn に、 Venthyr のプレイヤが近づくと、Loyal Stoneborn というアクションボタンが現れる。 これを押すと、Loyal Stoneborn は 30 秒間パーティと一緒に戦ってくれる。時間がすぎるとどこかに飛んでいく。 Venthyr だとこの mob と戦わずに済むばかりか、結構なダメージを叩き出す。また、プレイヤーが受けるダメージを 10% 減らす Stoneborn boon を掛けてくれる。

2020年11月15日日曜日

ElvUI で日本語チャット

World of Warcraft で日本語チャットを行う為に、これまでずっと Prat にフォントを追加して使っていたが Shadowlands(9.0.0) patch 以降、エラーが断続的に発生するようになった。 エラーダイアログが表示されて鬱陶しいので、どうしたものかと思っていたが、ElvUI を使い始めてから ElvUI にも日本語フォントを追加できたら Prat 要らなくね?とはずっと思っていたので、これを機に試してみた所、ElvUI のチャットウィンドウでも日本語表示が出来るようになったので、記事にしておこうと思う。

2020年8月6日木曜日

std::is_invocable でオーバーロード関数の呼び出し可否を判定

c++17 で追加された std::is_invocable について考えた。 1つ目のテンプレートパラメタが判定対象の型になっている。ある関数について、ある型の引数を渡したときの呼び出しの可否を調べたい場合、確かに関数(と渡す引数)の型さえ分かれば呼び出しの可否は判定できるので、この形には納得がいく。関数の型は decltype で取ればいい。

#include <iostream>
#include <type_traits>
#include <boost/type_index.hpp>

struct A {};

struct B {};

// no overload
int foo([[maybe_unused]] A const& a, [[maybe_unused]] B const& b) {
    return 42;
}

// overload
int ovlFoo(int, [[maybe_unused]] A const& a) {
    return 9;
}

float ovlFoo(int, [[maybe_unused]] B const& b) {
    return 2.7182;
}

template <class T>
auto ti() {
    return boost::typeindex::type_id_with_cvr<T>();
}

template <class T, class U>
void showTypes() {
    std::cout << "(" << ti<T>().pretty_name() << ", " << ti<U>().pretty_name() << ")" << std::endl;
}
template <class T, class U>
void test0() {
    if constexpr (std::is_invocable_v<decltype(foo), T, U>) {
        std::cout << "Can call foo: ";
    } else {
        std::cout << "Cannot call foo: ";
    }
    showTypes<T, U>();
}
と思いきや、オーバーロードされている関数について、任意の型で呼び出せるか判定したい場合に、はたと手が止まってしまった。

is_invocable の1つ目のパラメタに、decltype で型を取ろうとしても、オーバーロードされた関数の様な複数の型が返ってくるようなものに decltype を適用するのは不適格とされているので使えない。 私はこの時点で一旦 is_invocable の使用は諦めて SFINAE で判定すればいいやと思っていた。 しかしある時 c++20 で導入されたコンセプト std::invocable も同じ様なテンプレート引数を取るようだという事を知ってしまった。 このコンセプトを使う上で、使い方をキチンと分かっておく必要がある気がしたので、ここで漸く真面目に考えたところ、こういう時は関数オブジェクトクラスを使ってたのでは?という単純な事に気がついた。 ラムダが使えるようになってからは出番が激減していたので、その存在が記憶の隅っこに追いやられて居たのか、なかなかコレを思いつかなかった。 最終的に結局はジェネリックラムダを使う方法が良いのかな、という目下の結論に至ったのだが、その過程を記事にする。

2020年7月14日火曜日

Windows10 で環境変数設定画面を一発で開くには

Windows(ここでは 10)を使っていると環境変数を設定する機会は多く、環境変数の設定の仕方は誰もが知るところだと思うが、環境変数設定ダイアログにたどり着くまでの操作は結構な手順が必要になる。正攻法で手順を辿ると

  1. Start menu を開く
  2. 左縦列にあるギアマークアイコン(設定)をクリック
  3. 「Windows の設定」ウィンドウが開くので「システム」をクリック
  4. 左のリスト一番下にある「バージョン情報」をクリック。ちょっとスクロールさせる必要があったりして面倒。
  5. 右側の下の方に「システム情報」があるのでクリック。これもちょっとスクロールさせる必要があったりして面倒。
  6. 「コントロールパネル\システムとセキュリティ\システム」というウィンドウが開くので、左側のリスト項目「システムの詳細設定」をクリック
  7. 「システムのプロパティ」というダイアログが開く。下の方に「環境変数(N)...」というボタンがあるので、そのボタンを押すか Alt+N 押下する
  8. 環境変数ダイアログが開く

これで漸く環境変数が設定できる。設定が終わったら終わったで、上の手順で開いた 4 枚のウィンドウを閉じねばならない。

Sprache: 位置情報を得るには

テキストをパースする処理を実装する際、入力元の何行目とか、そういった位置情報を取得したい場合というのがある。 Sprache ではどうすれば取得できるのかを記事にしておく。

言葉で説明すると、IPositionAware という interface の SetPos() メソッドを実装した class を定義して、位置情報を取りたい箇所で SetPos() を呼ぶ事で、位置情報やマッチした長さが渡されるので、その情報を参照すれば良いという事になる。

2020年6月3日水曜日

Python: Generator のレシピ

最近 python を使い始めたが generator、これは良い。不慣れな python ではあるが generator を作ったり使ったりした際に気付いた事などを纏めておこうと思う。 書いてみたらえらく長いエントリになってしまって、纏めたとは言い難いかもしれないが。

2020年5月20日水曜日

UE4: 極める本で詰まったところについて

「Unreal Engine 4 で極めるゲーム開発」本を勉強中。UE4 version 4.24 を使っているので、記述と違う部分は色々調べながらやっている。 ググっても直接的な回答が見つからず、ちょっと調べた事を書いていこうと思う。詰まりながら進めているけど、良い本だと思います。

2020年4月22日水曜日

ERR_TLS13_DOWNGRADE_DETECTED エラーでページが見られない

会社で使っている Chrome ブラウザで、突然 google や github がブラウズできなくなった。他のサイトは見えたり見えなかったりするので、インターネット接続そのものには問題なさそう。 家の PC に入っている Chrome ではなんの問題もなく見えるので、見えないサイトがダウンしている訳でもないようだ。 エラーコードっぽい文字列として ERR_TLS13_DOWNGRADE_DETECTED というのが表示されているので、これをもとに調べてみた。

2020年4月10日金曜日

Visual Studio 2019 で project.assets.json がなくてビルドに失敗する

Git から Visual studio 2019 のプロジェクトを clone して複数の端末で開発しようとしていた時の話。

プロジェクトを作り、git の bare リポジトリに push して、別の端末で Visual Studio 2019 を起動して「コードをクローンまたはチェックアウトする」でプロジェクトを作った。 ビルドを実行すると、「obj/project.assets.json がない」というエラーメッセージが表示されてビルドに失敗してしまう、というところから話は始まる。