summaryrefslogtreecommitdiff
path: root/src/map/magic-interpreter.h
diff options
context:
space:
mode:
authorChuck Miller <shadowmil@gmail.com>2009-12-25 05:00:31 -0500
committerJared Adams <jaxad0127@gmail.com>2009-12-26 00:40:11 -0700
commit634aeeb9d58b01f9de6632a014a063ef0c4cf31e (patch)
tree70023dd2bcc12a3f96ec6f118d80e27411920531 /src/map/magic-interpreter.h
parent113fcc4f0a7a0921e94bc415515dd4b393a29d60 (diff)
downloadtmwa-634aeeb9d58b01f9de6632a014a063ef0c4cf31e.tar.gz
tmwa-634aeeb9d58b01f9de6632a014a063ef0c4cf31e.tar.bz2
tmwa-634aeeb9d58b01f9de6632a014a063ef0c4cf31e.tar.xz
tmwa-634aeeb9d58b01f9de6632a014a063ef0c4cf31e.zip
Used the "indent" C formatting program from GNU to do some clean ups
The command options used was: -nbad -bap -sc -bl -blf -bli0 -cli4 -cbi0 -di5 -nbc -bls -ip2 -nut -ts4 -bap -i4 -sob -npsl
Diffstat (limited to 'src/map/magic-interpreter.h')
-rw-r--r--src/map/magic-interpreter.h343
1 files changed, 209 insertions, 134 deletions
diff --git a/src/map/magic-interpreter.h b/src/map/magic-interpreter.h
index 4324e53..7db7d3e 100644
--- a/src/map/magic-interpreter.h
+++ b/src/map/magic-interpreter.h
@@ -31,11 +31,9 @@
#include "../common/timer.h"
#include "../common/socket.h"
-#define SPELLARG_NONE 0 /* No spell parameter */
-#define SPELLARG_PC 1 /* Spell parameter describes pc (defaults to self) */
-#define SPELLARG_STRING 2 /* Spell parameter describes pc (defaults to self) */
-
-
+#define SPELLARG_NONE 0 /* No spell parameter */
+#define SPELLARG_PC 1 /* Spell parameter describes pc (defaults to self) */
+#define SPELLARG_STRING 2 /* Spell parameter describes pc (defaults to self) */
/* ------ */
/* Values */
@@ -44,7 +42,7 @@
#define TY_UNDEF 0
#define TY_INT 1
#define TY_DIR 2
-#define TY_STRING 3
+#define TY_STRING 3
#define TY_ENTITY 5
#define TY_LOCATION 6
#define TY_AREA 7
@@ -68,9 +66,10 @@ struct area;
struct spell;
struct invocation;
-typedef struct location {
- int m;
- int x, y;
+typedef struct location
+{
+ int m;
+ int x, y;
} location_t;
#define AREA_LOCATION 0
@@ -78,36 +77,47 @@ typedef struct location {
#define AREA_RECT 2
#define AREA_BAR 3
-typedef struct area {
- union a {
+typedef struct area
+{
+ union a
+ {
location_t a_loc;
- struct { location_t loc; int width, depth, dir; } a_bar;
- struct { location_t loc; int width, height; } a_rect;
- struct area * a_union[2];
+ struct
+ {
+ location_t loc;
+ int width, depth, dir;
+ } a_bar;
+ struct
+ {
+ location_t loc;
+ int width, height;
+ } a_rect;
+ struct area *a_union[2];
} a;
- int size;
+ int size;
unsigned char ty;
} area_t;
-typedef struct val {
- union v {
- int v_int;
+typedef struct val
+{
+ union v
+ {
+ int v_int;
char *v_string;
- entity_t *v_entity; /* Used ONLY during operation/function invocation; otherwise we use v_int */
+ entity_t *v_entity; /* Used ONLY during operation/function invocation; otherwise we use v_int */
area_t *v_area;
location_t v_location;
- struct invocation *v_invocation; /* Used ONLY during operation/function invocation; otherwise we use v_int */
+ struct invocation *v_invocation; /* Used ONLY during operation/function invocation; otherwise we use v_int */
struct spell *v_spell;
} v;
unsigned char ty;
} val_t;
-
/* ----------- */
/* Expressions */
/* ----------- */
-#define MAX_ARGS 7 /* Max. # of args used in builtin primitive functions */
+#define MAX_ARGS 7 /* Max. # of args used in builtin primitive functions */
#define EXPR_VAL 0
#define EXPR_LOCATION 1
@@ -116,33 +126,54 @@ typedef struct val {
#define EXPR_ID 4
#define EXPR_SPELLFIELD 5
-typedef struct e_location {
+typedef struct e_location
+{
struct expr *m, *x, *y;
} e_location_t;
-typedef struct e_area {
- union a0 {
+typedef struct e_area
+{
+ union a0
+ {
e_location_t a_loc;
- struct { e_location_t loc; struct expr *width, *depth, *dir; } a_bar;
- struct { e_location_t loc; struct expr *width, *height; } a_rect;
- struct e_area* a_union[2];
+ struct
+ {
+ e_location_t loc;
+ struct expr *width, *depth, *dir;
+ } a_bar;
+ struct
+ {
+ e_location_t loc;
+ struct expr *width, *height;
+ } a_rect;
+ struct e_area *a_union[2];
} a;
unsigned char ty;
} e_area_t;
-typedef struct expr {
- union e {
+typedef struct expr
+{
+ union e
+ {
val_t e_val;
e_location_t e_location;
e_area_t e_area;
- struct { int id, line_nr, column; int args_nr; struct expr *args[MAX_ARGS]; } e_funapp;
- int e_id;
- struct { struct expr *expr; int id; } e_field;
+ struct
+ {
+ int id, line_nr, column;
+ int args_nr;
+ struct expr *args[MAX_ARGS];
+ } e_funapp;
+ int e_id;
+ struct
+ {
+ struct expr *expr;
+ int id;
+ } e_field;
} e;
unsigned char ty;
} expr_t;
-
/* ------- */
/* Effects */
/* ------- */
@@ -167,38 +198,64 @@ typedef struct expr {
#define FOREACH_FILTER_SPELL 5
#define FOREACH_FILTER_NPC 6
-typedef struct effect {
- struct effect* next;
- union e0 {
- struct { int id; expr_t *expr; } e_assign;
- struct { int id;
- expr_t *area;
- struct effect* body;
- unsigned char filter; } e_foreach;
- struct { int id;
- expr_t *start, *stop;
- struct effect *body; } e_for;
- struct { expr_t *cond; struct effect *true_branch, *false_branch; } e_if;
- expr_t *e_sleep; /* sleep time */
+typedef struct effect
+{
+ struct effect *next;
+ union e0
+ {
+ struct
+ {
+ int id;
+ expr_t *expr;
+ } e_assign;
+ struct
+ {
+ int id;
+ expr_t *area;
+ struct effect *body;
+ unsigned char filter;
+ } e_foreach;
+ struct
+ {
+ int id;
+ expr_t *start, *stop;
+ struct effect *body;
+ } e_for;
+ struct
+ {
+ expr_t *cond;
+ struct effect *true_branch, *false_branch;
+ } e_if;
+ expr_t *e_sleep; /* sleep time */
unsigned char *e_script;
- struct { int id; int args_nr; int line_nr, column; expr_t *args[MAX_ARGS]; } e_op;
- struct { int args_nr, *formals; expr_t **actuals; struct effect *body; } e_call;
+ struct
+ {
+ int id;
+ int args_nr;
+ int line_nr, column;
+ expr_t *args[MAX_ARGS];
+ } e_op;
+ struct
+ {
+ int args_nr, *formals;
+ expr_t **actuals;
+ struct effect *body;
+ } e_call;
} e;
unsigned char ty;
} effect_t;
-
/* ---------- */
-/* Components */
+/* Components */
/* ---------- */
-typedef struct component {
+typedef struct component
+{
struct component *next;
- int item_id;
- int count;
+ int item_id;
+ int count;
} component_t;
-
/* ----------- */
/* Spellguards */
/* ----------- */
@@ -211,47 +268,51 @@ typedef struct component {
#define SPELLGUARD_CASTTIME 5
#define SPELLGUARD_EFFECT 6
-typedef struct effect_set {
- effect_t *effect, *at_trigger, *at_end;
+typedef struct effect_set
+{
+ effect_t *effect, *at_trigger, *at_end;
} effect_set_t;
-typedef struct spellguard {
+typedef struct spellguard
+{
struct spellguard *next;
- union s {
+ union s
+ {
expr_t *s_condition;
expr_t *s_mana;
expr_t *s_casttime;
component_t *s_components;
component_t *s_catalysts;
- struct spellguard *s_alt; /* either `next' or `s.s_alt' */
+ struct spellguard *s_alt; /* either `next' or `s.s_alt' */
effect_set_t s_effect;
} s;
unsigned char ty;
} spellguard_t;
-
/* ------ */
/* Spells */
/* ------ */
-typedef struct letdef {
- int id;
+typedef struct letdef
+{
+ int id;
expr_t *expr;
} letdef_t;
-#define SPELL_FLAG_LOCAL (1 << 0) // spell associated not with caster but with place
-#define SPELL_FLAG_SILENT (1 << 1) // spell invocation never uttered
-#define SPELL_FLAG_NONMAGIC (1 << 2) // `magic word' only: don't require spellcasting ability
+#define SPELL_FLAG_LOCAL (1 << 0) // spell associated not with caster but with place
+#define SPELL_FLAG_SILENT (1 << 1) // spell invocation never uttered
+#define SPELL_FLAG_NONMAGIC (1 << 2) // `magic word' only: don't require spellcasting ability
-typedef struct spell {
+typedef struct spell
+{
char *name;
char *invocation;
- int index; // Relative location in the definitions file
- int flags;
- int arg;
- int spellarg_ty;
+ int index; // Relative location in the definitions file
+ int flags;
+ int arg;
+ int spellarg_ty;
- int letdefs_nr;
+ int letdefs_nr;
letdef_t *letdefs;
spellguard_t *spellguard;
@@ -261,7 +322,8 @@ typedef struct spell {
/* Anchors */
/* ------- */
-typedef struct teleport_anchor {
+typedef struct teleport_anchor
+{
char *name;
char *invocation;
expr_t *location;
@@ -271,22 +333,22 @@ typedef struct teleport_anchor {
/* The big config blob */
/* ------------------- */
-typedef struct {
- int vars_nr;
+typedef struct
+{
+ int vars_nr;
char **var_name;
- val_t *vars; /* Initial assignments, if any, or NULL */
+ val_t *vars; /* Initial assignments, if any, or NULL */
- int obscure_chance;
- int min_casttime;
+ int obscure_chance;
+ int min_casttime;
- int spells_nr;
+ int spells_nr;
spell_t **spells;
- int anchors_nr; /* NEGATIVE iff we have sorted the anchors */
+ int anchors_nr; /* NEGATIVE iff we have sorted the anchors */
teleport_anchor_t **anchors;
} magic_conf_t;
-
/* Execution environment */
#define VAR_MIN_CASTTIME 0
@@ -301,7 +363,8 @@ typedef struct {
struct magic_config;
-typedef struct env {
+typedef struct env
+{
magic_conf_t *base_env;
val_t *vars;
} env_t;
@@ -312,115 +375,127 @@ typedef struct env {
#define CONT_STACK_FOR 1
#define CONT_STACK_PROC 2
-typedef struct cont_activation_record {
+typedef struct cont_activation_record
+{
effect_t *return_location;
- union c {
- struct { int id, ty; effect_t *body; int entities_nr; int *entities; int index; } c_foreach;
- struct { int id; effect_t *body; int current; int stop; } c_for;
- struct { int args_nr, *formals; val_t *old_actuals; } c_proc;
+ union c
+ {
+ struct
+ {
+ int id, ty;
+ effect_t *body;
+ int entities_nr;
+ int *entities;
+ int index;
+ } c_foreach;
+ struct
+ {
+ int id;
+ effect_t *body;
+ int current;
+ int stop;
+ } c_for;
+ struct
+ {
+ int args_nr, *formals;
+ val_t *old_actuals;
+ } c_proc;
} c;
unsigned char ty;
} cont_activation_record_t;
-typedef struct status_change_ref {
- int sc_type;
- int bl_id;
+typedef struct status_change_ref
+{
+ int sc_type;
+ int bl_id;
} status_change_ref_t;
-#define INVOCATION_FLAG_BOUND (1 << 0) /* Bound directly to the caster (i.e., ignore its location) */
-#define INVOCATION_FLAG_ABORTED (1 << 1) /* Used `abort' to terminate */
-#define INVOCATION_FLAG_STOPATTACK (1 << 2) /* On magical attacks: if we run out of steam, stop attacking altogether */
+#define INVOCATION_FLAG_BOUND (1 << 0) /* Bound directly to the caster (i.e., ignore its location) */
+#define INVOCATION_FLAG_ABORTED (1 << 1) /* Used `abort' to terminate */
+#define INVOCATION_FLAG_STOPATTACK (1 << 2) /* On magical attacks: if we run out of steam, stop attacking altogether */
-typedef struct invocation {
+typedef struct invocation
+{
struct block_list bl;
struct invocation *next_invocation; /* used for spells directly associated with a caster: they form a singly-linked list */
- int flags;
+ int flags;
env_t *env;
spell_t *spell;
- int caster; /* this is the person who originally invoked the spell */
- int subject; /* when this person dies, the spell dies with it */
+ int caster; /* this is the person who originally invoked the spell */
+ int subject; /* when this person dies, the spell dies with it */
- int timer; /* spell timer, if any */
+ int timer; /* spell timer, if any */
- int stack_size;
+ int stack_size;
cont_activation_record_t stack[MAX_STACK_SIZE];
- int script_pos; /* Script position; if nonzero, resume the script we were running. */
+ int script_pos; /* Script position; if nonzero, resume the script we were running. */
effect_t *current_effect;
- effect_t *trigger_effect; /* If non-NULL, this is used to spawn a cloned effect based on the same environment */
- effect_t *end_effect; /* If non-NULL, this is executed when the spell terminates naturally, e.g. when all status changes have run out or all delays are over. */
+ effect_t *trigger_effect; /* If non-NULL, this is used to spawn a cloned effect based on the same environment */
+ effect_t *end_effect; /* If non-NULL, this is executed when the spell terminates naturally, e.g. when all status changes have run out or all delays are over. */
/* Status change references: for status change updates, keep track of whom we updated where */
- int status_change_refs_nr;
+ int status_change_refs_nr;
status_change_ref_t *status_change_refs;
} invocation_t;
-
extern magic_conf_t magic_conf; /* Global magic conf */
extern env_t magic_default_env; /* Fake default environment */
-
/**
* Adds a component selection to a component holder (which may initially be NULL)
*/
-void
-magic_add_component(component_t **component_holder, int id, int count);
+void magic_add_component (component_t ** component_holder, int id, int count);
-
-teleport_anchor_t *
-magic_find_anchor(char *name);
+teleport_anchor_t *magic_find_anchor (char *name);
/**
* The parameter `param' must have been dynamically allocated; ownership is transferred to the resultant env_t.
*/
-env_t *
-spell_create_env(magic_conf_t *conf, spell_t *spell, character_t *caster, int spellpower, char *param);
+env_t *spell_create_env (magic_conf_t * conf, spell_t * spell,
+ character_t * caster, int spellpower, char *param);
-void
-magic_free_env(env_t *env);
+void magic_free_env (env_t * env);
/**
* near_miss is set to nonzero iff the spell only failed due to ephemereal issues (spell delay in effect, out of mana, out of components)
*/
-effect_set_t *
-spell_trigger(spell_t *spell, character_t *caster, env_t *env, int *near_miss);
+effect_set_t *spell_trigger (spell_t * spell, character_t * caster,
+ env_t * env, int *near_miss);
-invocation_t *
-spell_instantiate(effect_set_t *effect, env_t *env);
+invocation_t *spell_instantiate (effect_set_t * effect, env_t * env);
/**
* Bind a spell to a subject (this is a no-op for `local' spells).
*/
-void
-spell_bind(character_t *subject, invocation_t *invocation);
-
-int // 1 on failure
-spell_unbind(character_t *subject, invocation_t *invocation);
+void spell_bind (character_t * subject, invocation_t * invocation);
+int // 1 on failure
+ spell_unbind (character_t * subject, invocation_t * invocation);
/**
* Clones a spell to run the at_effect field
*/
-invocation_t *
-spell_clone_effect(invocation_t *source);
+invocation_t *spell_clone_effect (invocation_t * source);
-spell_t *
-magic_find_spell(char *invocation);
+spell_t *magic_find_spell (char *invocation);
/* The following is used only by the parser: */
-typedef struct args_rec {
- int args_nr;
+typedef struct args_rec
+{
+ int args_nr;
expr_t **args;
} args_rec_t;
-typedef struct {
- char *name;
- int args_nr;
- int *args;
- effect_t *body;
+typedef struct
+{
+ char *name;
+ int args_nr;
+ int *args;
+ effect_t *body;
} proc_t;
#endif /* !defined (MAGIC_INTERPRETER_H) */