Lady Inerva Darkvein
シングル phase の戦闘。Boss の ability は、Primal Anima Container が徐々に満たされる量に応じて強化されていく。 プレイヤは部屋の周囲にある Anima Container が吸い取った Anima を排出して、強化を除去する必要がある。
シングル phase の戦闘。Boss の ability は、Primal Anima Container が徐々に満たされる量に応じて強化されていく。 プレイヤは部屋の周囲にある Anima Container が吸い取った Anima を排出して、強化を除去する必要がある。
Hungering Destroyer は、シングル phase の "Patchwerk" のような戦闘で、ミニグループでの heal が肝となる。 Gluttonous Miasma は heal immune かつ dispell 不可で、その DoT ダメージを一人で受けきれるものではないので、何人かで split しなければならない。 tank の力量と raid の位置取りが戦闘の肝となる。
Dungeon Guide の翻訳が終わったら Raid Guide を訳そうと思ったけど、私の仕事が遅いもんで、もう LFR wing1 が open してしまった。 とりあえず Wing 1 から順番に訳す(意訳と独自解釈)。
私が所属しているギルドはもう自前レイドも開催してない様で、raid への参加は LFR 専門なので Normal 以上については翻訳が間違ってても多分気づかない。 Normal の 1st は Shriekwing だそうだが、LFR には登場してないので後回し。
Boss 本体とその pet との戦闘になる。 Boss の攻撃はずっと単調だが、呼び出す pet に応じて戦い方を変えていく事になる。
World of Warcraft - Shadowlands 拡張のダンジョンガイド Spires of Ascension 編。
Kyrial を選んだプレイヤは、ダンジョンの特定箇所で倒れている Kyrian が持っている槍を使える。使うと Spear of Destiny が発動する。
World of Warcraft - Shadowlands 拡張のダンジョンガイド Hall of Atonement 編。Wowhead の翻訳ベースだけど、端折ったり改変したりしてる。
ダンジョンの至るところに居る Loyal Stoneborn に、 Venthyr のプレイヤが近づくと、Loyal Stoneborn というアクションボタンが現れる。 これを押すと、Loyal Stoneborn は 30 秒間パーティと一緒に戦ってくれる。時間がすぎるとどこかに飛んでいく。 Venthyr だとこの mob と戦わずに済むばかりか、結構なダメージを叩き出す。また、プレイヤーが受けるダメージを 10% 減らす Stoneborn boon を掛けてくれる。
World of Warcraft で日本語チャットを行う為に、これまでずっと Prat にフォントを追加して使っていたが Shadowlands(9.0.0) patch 以降、エラーが断続的に発生するようになった。 エラーダイアログが表示されて鬱陶しいので、どうしたものかと思っていたが、ElvUI を使い始めてから ElvUI にも日本語フォントを追加できたら Prat 要らなくね?とはずっと思っていたので、これを機に試してみた所、ElvUI のチャットウィンドウでも日本語表示が出来るようになったので、記事にしておこうと思う。
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
も同じ様なテンプレート引数を取るようだという事を知ってしまった。
このコンセプトを使う上で、使い方をキチンと分かっておく必要がある気がしたので、ここで漸く真面目に考えたところ、こういう時は関数オブジェクトクラスを使ってたのでは?という単純な事に気がついた。
ラムダが使えるようになってからは出番が激減していたので、その存在が記憶の隅っこに追いやられて居たのか、なかなかコレを思いつかなかった。
最終的に結局はジェネリックラムダを使う方法が良いのかな、という目下の結論に至ったのだが、その過程を記事にする。
Windows(ここでは 10)を使っていると環境変数を設定する機会は多く、環境変数の設定の仕方は誰もが知るところだと思うが、環境変数設定ダイアログにたどり着くまでの操作は結構な手順が必要になる。正攻法で手順を辿ると
これで漸く環境変数が設定できる。設定が終わったら終わったで、上の手順で開いた 4 枚のウィンドウを閉じねばならない。
テキストをパースする処理を実装する際、入力元の何行目とか、そういった位置情報を取得したい場合というのがある。 Sprache ではどうすれば取得できるのかを記事にしておく。
言葉で説明すると、IPositionAware
という interface の SetPos()
メソッドを実装した class を定義して、位置情報を取りたい箇所で SetPos()
を呼ぶ事で、位置情報やマッチした長さが渡されるので、その情報を参照すれば良いという事になる。
最近 python を使い始めたが generator、これは良い。不慣れな python ではあるが generator を作ったり使ったりした際に気付いた事などを纏めておこうと思う。 書いてみたらえらく長いエントリになってしまって、纏めたとは言い難いかもしれないが。
「Unreal Engine 4 で極めるゲーム開発」本を勉強中。UE4 version 4.24 を使っているので、記述と違う部分は色々調べながらやっている。 ググっても直接的な回答が見つからず、ちょっと調べた事を書いていこうと思う。詰まりながら進めているけど、良い本だと思います。
会社で使っている Chrome ブラウザで、突然 google や github がブラウズできなくなった。他のサイトは見えたり見えなかったりするので、インターネット接続そのものには問題なさそう。 家の PC に入っている Chrome ではなんの問題もなく見えるので、見えないサイトがダウンしている訳でもないようだ。 エラーコードっぽい文字列として ERR_TLS13_DOWNGRADE_DETECTED というのが表示されているので、これをもとに調べてみた。
Git から Visual studio 2019 のプロジェクトを clone して複数の端末で開発しようとしていた時の話。
プロジェクトを作り、git の bare リポジトリに push して、別の端末で Visual Studio 2019 を起動して「コードをクローンまたはチェックアウトする」でプロジェクトを作った。 ビルドを実行すると、「obj/project.assets.json がない」というエラーメッセージが表示されてビルドに失敗してしまう、というところから話は始まる。