주문 (Spells)

data/json/debug_spells.json에 템플릿 주문이 있으며, 여기에 복사되어 있습니다:

{
  // This spell exists in json as a template for contributors to see the possible values of the spell
  "id": "example_template", // id of the spell, used internally. not translated
  "type": "SPELL",
  "name": "Template Spell", // name of the spell that shows in game
  "description": "This is a template to show off all the available values",
  "blocker_mutations": ["THRESH_RAT"], // list of mutations that will not allow you to cast the spell
  "valid_targets": ["hostile", "ground", "self", "ally"], // if a valid target is not included, you cannot cast the spell on that target.
  "effect": "shallow_pit", // effects are coded in C++. A list will be provided below of possible effects that have been coded.
  "effect_str": "template", // special. see below
  "extra_effects": [{ "id": "fireball", "hit_self": false, "max_level": 3 }], // this allows you to cast multiple spells with only one spell
  "melee_dam": ["cut", "elemental"], // the melee damage of these listed types will be added to spell damage. Supports standard damage type strings and also the categories of 'physical' and 'elemental' for convenience
  "affected_body_parts": [
    "HEAD",
    "TORSO",
    "MOUTH",
    "EYES",
    "ARM_L",
    "ARM_R",
    "HAND_R",
    "HAND_L",
    "LEG_L",
    "FOOT_L",
    "FOOT_R"
  ], // body parts affected by effects
  "spell_class": "NONE", //
  "scale_str": true, // The spell will scale off of strength. Also valid: scale_dex, scale_per, scale_int
  "base_casting_time": 100, // this is the casting time (in moves)
  "base_energy_cost": 10, // the amount of energy (of the requisite type) to cast the spell
  "energy_source": "MANA", // the type of energy used to cast the spell. types are: MANA, BIONIC, HP, STAMINA, FATIGUE, NONE (none will not use mana)
  "components": [requirement_id],                            // an id from a requirement, like the ones you use for crafting. spell components require to cast.
  "difficulty": 12, // the difficulty to learn/cast the spell
  "max_level": 10, // maximum level you can achieve in the spell
  "min_damage": 0, // minimum damage (or "starting" damage)
  "max_damage": 100, // maximum damage the spell can achieve
  "damage_increment": 2.5, // to get damage (and any of the other below stats) multiply this by spell's level and add to minimum damage
  "min_aoe": 0, // area of effect (currently not implemented)
  "max_aoe": 5,
  "aoe_increment": 0.1,
  "min_range": 1, // range of the spell
  "max_range": 10,
  "range_increment": 2,
  "min_accuracy": 50, // percentage "accuracy" of the spell. used for determining which body part was hit
  "max_accuracy": 70,
  "accuracy_increment": 2,
  "min_dot": 0, // damage over time (currently not implemented)
  "max_dot": 2,
  "dot_increment": 0.1,
  "min_duration": 0, // duration of spell effect (if the spell has a special effect)
  "max_duration": 1000,
  "duration_increment": 4,
  "min_pierce": 0, // how much of the spell pierces armor (currently not implemented)
  "max_pierce": 1,
  "pierce_increment": 0.1,
  "field_id": "fd_blood", // the string id of the field (currently hardcoded)
  "field_chance": 100, // one_in( field_chance ) chance of spawning a field per tile in aoe
  "min_field_intensity": 10, // field intensity of fields generated
  "max_field_intensity": 10,
  "field_intensity_increment": 1,
  "field_intensity_variance": 0.1, // the field can range in intensity from -variance as a percent to +variance as a percent i.e. this spell would be 9-11
   "volume": 90, // 주문이 생성하는 소음의 볼륨. 레벨에 따라 달라지지 않는 고정값이며 데시벨 단위입니다.
  "sound_type": "combat", // the type of sound. possible types are: background, weather, music, movement, speech, activity, destructive_activity, alarm, combat, alert, order
  "sound_description": "a whoosh", // the sound description. in the form of "You hear %s" by default it is "an explosion"
  "sound_ambient": true, // whether or not this is treated as an ambient sound or not
  "sound_id": "misc", // the sound id
  "sound_variant": "shockwave", // the sound variant
  "sprite": "fd_electricity", // This changes the spell sprite to any valid field ID. Do not use with NO_EXPLOSION_VFX
  "learn_spells": { "acid_resistance_greater": 15 } // You learn the specified spell once your level in this spell is greater than or equal to the number shown.
}

위의 대부분의 기본값은 0 또는 "NONE"이므로, 주문과 관련이 없는 경우 대부분의 값을 생략할 수 있습니다.

이들 중 일부의 값을 결정할 때, 일부 공식은 선형이 아니라는 점에 유의하는 것이 중요합니다. 예를 들어, 주문 실패 확률에 대한 공식은 다음과 같습니다:

( ( ( ( spell_level - spell_difficulty ) * 2 + intelligence + spellcraft_skill ) - 30 ) / 30 ) ^ 2

즉, 난이도 0인 주문을 지능 8, 주문술 0, 주문 레벨 0인 플레이어가 시전하면 53%의 주문 실패 확률을 갖게 됩니다. 반면에, 지능 12, 주문술 6, 동일한 주문의 레벨 6인 플레이어는 0%의 주문 실패 확률을 갖게 됩니다.

그러나 경험치 획득은 계산하기가 조금 더 복잡합니다. 레벨에 도달하는 데 필요한 경험치에 대한 공식은 다음과 같습니다:

e ^ ( ( level + 62.5 ) * 0.146661 ) ) - 6200

현재 구현된 주문 플래그

  • PERMANENT - 이 주문으로 생성된 아이템이나 생물은 사라지지 않고 정상적으로 죽지 않습니다

  • IGNORE_WALLS - 주문의 범위 효과가 벽을 통과합니다

  • SWAP_POS - 원거리 주문에 사용될 때 시전자를 대상 위치로 순간이동시키며, 방해가 되는 생물과 위치를 바꿉니다

  • HOSTILE_SUMMON - 소환 주문은 항상 적대적인 몬스터를 생성합니다

  • HOSTILE_50 - 소환된 몬스터가 50%의 확률로 우호적으로 생성됩니다

  • SILENT - 주문이 대상에서 소음을 내지 않습니다

  • NO_EXPLOSION_VFX - 주문에 시각적 폭발이 없습니다

  • LOUD - 주문이 대상에서 추가 소음을 냅니다

  • VERBAL - 주문이 시전자 위치에서 소음을 내며, 입 방해가 실패율에 영향을 줍니다

  • SOMATIC - 팔 방해가 실패율과 시전 시간에 (약간) 영향을 줍니다

  • NO_HANDS - 손이 주문 에너지 비용에 영향을 주지 않습니다

  • UNSAFE_TELEPORT - 순간이동 주문이 시전자나 다른 사람을 죽일 위험이 있습니다

  • NO_LEGS - 다리가 시전 시간에 영향을 주지 않습니다

  • CONCENTRATE - 집중력이 주문 실패율에 영향을 줍니다

  • RANDOM_AOE - 일반 동작 대신 min+increment*level과 max 사이의 무작위 숫자를 선택합니다

  • RANDOM_DAMAGE - 일반 동작 대신 min+increment*level과 max 사이의 무작위 숫자를 선택합니다

  • DIVIDE_DAMAGE - 주문의 피해를 맞은 모든 생물에게 균등하게 나눕니다

  • RANDOM_DURATION - 일반 동작 대신 min+increment*level과 max 사이의 무작위 숫자를 선택합니다

  • RANDOM_TARGET - 일반 동작 대신 범위 내의 무작위 유효 대상을 선택합니다.

  • MUTATE_THRESH - mutate spell_effect가 대상에게 관련 임계값을 부여할 수 있는지 확인합니다. MUTATE_TRAIT도 있으면 아무것도 하지 않으며 카테고리를 지정해야 합니다. 정확도가 정의되어 있으면 해당 카테고리의 임계값에서 시도할 단계 수를 결정하며, 기본값은 1단계입니다.

  • MUTATE_TRAIT - 변이 spell_effect를 재정의하여 카테고리 대신 특정 trait_id를 사용합니다

  • WONDER - 각 extra_spells를 시전하는 대신, 그 중 N개를 선택하여 시전합니다(여기서 N은 std::min( damage(), number_of_spells )입니다)

  • PAIN_NORESIST - 고통을 변경하는 주문은 저항될 수 없습니다(둔화된 특성과 같이)

  • BRAWL - Brawler 특성을 가진 캐릭터가 주문을 시전할 수 있도록 허용합니다(그렇지 않으면 불가능)

  • DUPE_SOUND - 주문이 같은 소리를 여러 번 재생할 수 있도록 허용합니다(즉, 영향을 받은 각 대상에 대한 소리)

  • ADD_MELEE_DAM - 현재 장착한 아이템의 최고 근접 피해 카테고리를 주문의 피해에 추가합니다(레거시, Bash Stab 및 Cut만 처리합니다. 대신 melee_dam 필드를 사용하세요)

  • PHYSICAL - BRAWL을 의미하며 또한 Brawler가 주문을 사용할 때 보너스를 받는다는 것을 의미합니다. 주로 "Physical Techniques"용입니다

  • MOD_MELEE_MOVES - 무기의 근접 이동 비용이 "주문"의 시전 비용에 추가됩니다. 특수 동작: 이 플래그와 함께 base_casting_time이 음수인 경우, "increment"는 대신 근접 비용에 대한 배수입니다(주문 형태로 빠른 공격을 복제하는 데 유용합니다)

  • MOD_MEELE_STAM - MOD_MELEE_MOVES와 유사하지만 주문의 시전 비용과 무기의 스태미나 비용에 적용됩니다. 주로 스태미나 기술용입니다. 음수 기본 비용과 increment 필드와 관련된 동일한 특수 동작을 가집니다.

  • DAMAGE_TERRAIN - 피해를 주는 주문이 피해 유형에 따른 피해 비율만큼 지형에도 피해를 줄 수 있게 합니다.

  • NO_FAIL - 이 주문은 시전할 때 실패할 수 없습니다

현재 구현된 효과 및 특수 규칙

  • pain_split - 모든 사지의 피해를 균등하게 만듭니다.

  • move_earth - 대상 위치를 "파냅니다". 일부 지형은 이 방식으로 파낼 수 없습니다.

  • target_attack - 대상에게 피해를 입힙니다(벽을 무시합니다). 음수 피해는 대상을 치유합니다. "effect_str"이 포함된 경우, 가능하면 affected_body_parts에 정의된 신체 부위에 해당 효과(json의 다른 곳에 정의됨)를 대상에 추가합니다. 모든 범위 효과는 대상을 중심으로 한 원형 영역으로 나타나며, valid_targets에만 피해를 입힙니다. (범위 효과는 벽을 무시하지 않습니다)

  • projectile_attack - target_attack과 유사하지만, 발사한 투사체가 통과할 수 없는 지형에서 멈춥니다. "effect_str"이 포함된 경우, 가능하면 affected_body_parts에 정의된 신체 부위에 해당 효과(json의 다른 곳에 정의됨)를 대상에 추가합니다.

  • cone_attack - 대상을 향해 범위까지 원뿔을 발사합니다. 원뿔의 호는 도 단위로 범위 효과입니다. 벽에서 멈춥니다. "effect_str"이 포함된 경우, 가능하면 affected_body_parts에 정의된 신체 부위에 해당 효과(json의 다른 곳에 정의됨)를 대상에 추가합니다.

  • line_attack - 대상을 향해 너비가 범위 효과인 선을 발사하며, 도중에 벽에 의해 차단됩니다. "effect_str"이 포함된 경우, 가능하면 affected_body_parts에 정의된 신체 부위에 해당 효과(json의 다른 곳에 정의됨)를 대상에 추가합니다.

  • spawn_item - 지속 시간이 끝나면 사라질 아이템을 생성합니다. 기본 지속 시간은 0입니다. 피해가 수량을 결정합니다.

  • summon_vehicle - 지속 시간 후 사라져야 하는 지정된 차량을 생성합니다

  • summon - 지속 시간이 끝나면 사라질 몬스터를 생성합니다. 기본적으로 플레이어에게 우호적입니다. 피해가 수량을 결정합니다.

  • translocate - Magical Nights의 게이트와 같이 등록된 'translocators' 사이에서 플레이어를 순간이동시킵니다

  • teleport_random - 플레이어를 범위 공간만큼 무작위로 순간이동시키며 범위 효과 변화가 있습니다

  • recover_energy - 주문의 피해와 같은 에너지 소스(effect_str에 정의됨, 아래 참조)를 회복합니다

  • "MANA"
  • "STAMINA"
  • "FATIGUE"
  • "PAIN"
  • "BIONIC"
  • ter_transform - 대상을 중심으로 한 영역의 지형과 가구를 변환합니다. 범위 효과 영역의 점 중 하나가 변경될 확률은 one_in( damage )입니다. effect_str은 ter_furn_transform의 id입니다.

  • vomit - 범위 효과 내의 모든 생물이 가능하면 즉시 구토합니다.

  • timed_event - 플레이어에게만 시간 제한 이벤트를 추가합니다. 유효한 시간 제한 이벤트: "help", "wanted", "robot_attack", "spawn_wyrms", "amigara", "roots_die", "temple_open", "temple_flood", "temple_spawn", "dim", "artifact_light" 참고: 이것은 아티팩트 활성 효과에만 추가되었습니다. 지원이 제한되어 있으며, 자신의 책임 하에 사용하세요.

  • explosion - 폭발이 대상을 중심으로 하며, 위력은 damage()이고 계수는 aoe()/10입니다

  • flashbang - 섬광탄 효과가 대상을 중심으로 하며, 위력은 damage()이고 계수는 aoe()/10입니다

  • mod_moves - 대상에 damage() 이동을 추가합니다. 음수일 수 있어 해당 시간 동안 대상을 "동결"할 수 있습니다

  • map - 플레이어를 중심으로 aoe()의 반경까지 오버맵을 매핑합니다

  • morale - 범위 효과 내의 모든 npc 또는 아바타에게 값이 damage()인 사기 효과를 부여합니다. decay_start는 duration() / 10입니다.

  • charm_monster - damage()보다 hp가 적은 몬스터를 대략 duration() 동안 매혹시킵니다

  • mutate - 대상을 변이시킵니다. effect_str이 정의된 경우, 무작위로 선택하는 대신 해당 카테고리로 변이합니다. "MUTATE_TRAIT" 플래그는 effect_str이 카테고리 대신 특정 특성이 되도록 허용합니다. damage() / 100은 변이가 성공할 백분율 확률입니다(값 10000은 100.00%를 나타냅니다)

  • bash - 대상의 지형을 때립니다. damage()를 타격의 강도로 사용합니다.

  • dash - 플레이어를 대상 타일로 이동시키며, 필드를 남길 수 있습니다.

  • area_push - 단일 지점에서 바깥쪽으로 밀어냅니다

  • directed_push 당신으로부터 멀어지는 단일 방향으로 밀어냅니다.

  • noise 주문의 피해와 같은 소음 크기로 소음을 냅니다.

  • WONDER - 위와 달리, 이것은 "효과"가 아니라 "플래그"입니다. 이것은 부모 주문의 동작을 크게 변경합니다: 주문 자체는 시전되지 않지만, 피해와 범위 정보는 extra_effects를 시전하는 데 사용됩니다. N개의 extra_effects가 무작위로 선택되어 시전되며, 여기서 N은 주문의 현재 피해입니다(RANDOM_DAMAGE 플래그와 스택됩니다) 그리고 이 주문에 의해 시전된 주문의 메시지도 표시됩니다. 이 주문의 메시지가 표시되지 않기를 원하면 메시지가 빈 문자열인지 확인하세요.

  • RANDOM_TARGET - (wonder와 같은) 특수 주문 플래그로, 시전자가 대상을 선택하는 대신 주문이 범위 내의 무작위 유효 대상을 선택하도록 강제합니다. 이것은 extra_effects에도 영향을 줍니다.

공격 타입을 가진 주문의 경우, 사용 가능한 피해 타입(대소문자 구분 안 함):
  • fire
  • acid
  • bash
  • bullet
  • bio - 독과 같은 내부 피해
  • cold
  • cut
  • electric
  • light - 실제 빛과 '신성함' 모두에 사용됨
  • dark
  • psi - 정신
  • stab
  • true - 이 피해 타입은 방어구를 완전히 통과하므로 매우 강력합니다. 지정되지 않은 경우 기본 피해 타입입니다.

레벨업하는 주문

레벨업할 때 효과가 변경되는 주문은 최소 및 최대 효과와 증분이 있어야 합니다. 최소 효과는 주문이 레벨 0에서 수행할 것이고, 최대 효과는 성장을 멈추는 곳입니다. 증분은 레벨당 얼마나 변경되는지입니다. 예:

"min_range": 1,
"max_range": 25,
"range_increment": 5,

최소값과 최대값은 항상 같은 부호를 가져야 하지만, 음수일 수 있습니다. 예를 들어 고통이나 스태미나 피해를 일으키기 위해 음수 'recover' 효과를 사용하는 주문의 경우입니다. 예:

{
  "id": "stamina_damage",
  "type": "SPELL",
  "name": "Tired",
  "description": "decreases stamina",
  "valid_targets": ["hostile"],
  "min_damage": -2000,
  "max_damage": -10000,
  "damage_increment": -3000,
  "max_level": 10,
  "effect": "recover_energy",
  "effect_str": "STAMINA"
}

주문 학습

구현된 주문 부여 방법은 세 가지입니다: 변이는 "spells_learned" 필드로 주문을 부여할 수 있으며, 부여된 레벨도 지정할 수 있습니다. 특정 주문은 "learn_spells" 변수를 통해 적절한 레벨에 도달하면 주문을 가르칠 수도 있습니다. 마지막으로, use_action을 통해 아이템에서 주문을 배울 수 있으며, 이것은 주문을 사용하는 것 외에 주문을 훈련하는 유일한 방법이기도 합니다. 세 가지 모두의 예는 아래에 나와 있습니다:

{
  "id": "DEBUG_spellbook",
  "type": "GENERIC",
  "name": "A Technomancer's Guide to Debugging C:BN",
  "description": "static std::string description( spell sp ) const;",
  "weight": 1,
  "volume": "1 ml",
  "symbol": "?",
  "color": "magenta",
  "use_action": {
    "type": "learn_spell",
    "spells": [ "debug_hp", "debug_stamina", "example_template", "debug_bionic", "pain_split", "fireball" ] // this is a list of spells you can learn from the item
  }
},

아래 예의 경우 Acid Resistance가 레벨 15에 도달하면 Greater Acid Resistance 주문을 배웁니다

{
    "id": "acid_resistance",
    "type": "SPELL",
    "name": { "str": "Acid Resistance" },
    "description": "Protects the user from acid.",
    ...
    "learn_spells": { "acid_resistance_greater": 15 }
}

이 주문서를 지능, 주문술, 집중력에 따라 턴당 ~1 경험치의 비율로 공부할 수 있습니다.

"spells_learned": [ [ "debug_hp", 1 ], [ "debug_stamina", 1 ], [ "example_template", 1 ], [ "pain_split", 1 ] ],

직업 및 NPC 클래스의 주문

다음과 같이 직업이나 NPC 클래스 정의에 "spell" 멤버를 추가할 수 있습니다:

"spells": [ { "id": "summon_zombie", "level": 0 }, { "id": "magic_missile", "level": 10 } ]

참고: 이것은 클래스와 충돌하는 주문을 배울 수 있게 합니다. 또한 클래스를 획득하는 프롬프트를 제공하지 않습니다. 직업에 이것을 추가할 때 신중하세요!

몬스터의 주문

몬스터의 특수 공격으로 주문을 할당할 수 있습니다.

{ "type": "spell", "spell_id": "burning_hands", "spell_level": 10, "cooldown": 10 }
  • spell_id: 시전되는 주문의 id.
  • spell_level: 주문이 시전되는 레벨. 몬스터가 시전하는 주문은 플레이어 주문처럼 레벨을 얻지 않습니다.
  • cooldown: 몬스터가 이 주문을 얼마나 자주 시전할 수 있는지