Hogwarts Wand Docs: ../server/spells.h

Wand Sourcecode: ../server/spells.h

//
// Header file for spells
//
// Copyright (C) 2006  Nathan (Acorn) Pooley
// 
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// version 2 as published by the Free Software Foundation.
// 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License (gpl.txt) for more details. 
// 
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
// 
// You can contact the author, Nathan (Acorn) Pooley, by writing
// to Nathan (Acorn) Pooley, 949 Buckeye Drive, Sunnyvale, CA  94086, USA
// or through the form at http://www.rawbw.com/~acorn/wand/feedback.html
//

typedef struct SpellRec {
    int         flags;
    int         maxscore;
    int         holdoff;
    const char *name;
    const char *mwanemes;
} Spell;

extern Spell spells[];


//
// Format of spell in memory
// -------------------------
// byte  descrip
// ----  -------
//  0    spellinfol
//  1    spellinfol
//  2    starting octant
//  3    tokens...
//

//
// Spell token bits
// ----------------
//   7   - 1=pulse  0=circle
//
//  pulse
//   7   - 1
//   6   - direction (used, but initial value does not matter)
//   5   - must be 1
//  5-3  - unused
//  2-0  - oct
//
//  circle
//   7   - 0
//   6   - direction
//   5   - must be 1
//  4-3  - cnt-1 (0 1 or 2)
//  2-0  - unused (oct)
//
// Last byte is 0x00 - check bit 5
//
#define MWN_OCT_MASK                0x07
#define MWN_CNT_MASK                0x18
#define MWN_PULSE                   0x80
#define MWN_DIR                     0x40
#define MWN_MORE                    0x20

#define PIC_MWN_CREATE_CIRC(dir,cnt) \
        ((((dir)<0)?MWN_DIR:0) | \
         ((((cnt)-1)&3)<<3) | \
         MWN_MORE)

#define PIC_MWN_CREATE_PULSE(oct) \
        (((oct)&7) | \
         MWN_PULSE | \
         MWN_MORE)

#define PIC_MWN_END(m)      (!((m)&MWN_MORE))
#define PIC_MWN_MORE(m)     ((m)&MWN_MORE)
#define PIC_MWN_PULSE(m)    ((m)&MWN_PULSE)
#define PIC_MWN_OCT(m)      ((m)&MWN_OCT_MASK)
#define PIC_MWN_CNT(m)      (PIC_MWN_PULSE(m)?0:((((m)&MWN_CNT_MASK)>>3)+1))
#define PIC_MWN_DIR(m)      (PIC_MWN_PULSE(m)?0:(((m)>>6)&1)?-1:1)

//
// This is the word following the last spell's mwanemes
// It appears in v_mo_spellinfol,h when w_mo7_load_spell is called after the
// last spell has been loaded.
//
#define PIC_MWN_END_SPELLS  0xffff


#define TOKEN_CREATE_MO(shape,dir,angle) \
    ((((dir)<0)?0x80:0) | \
     (((((angle)))>>1) & 0xf) | \
     ((shape)==MSHP_PAUSE ? 0x8f : 0) | \
     (((shape)&7) << 4))

#define TOKEN_CREATE_SP(shape,dir,angle) \
    ((((dir)<0)?0x80:0) | \
     (((((angle)))>>1) & 0xf) | \
     ((shape)==SSHP_PAUSE ? 0x8f : 0) | \
     (((shape)&7) << 4))

#define TOKEN_SHAPE(tok)    (((tok)&0x70)>>4)
#define TOKEN_DIR(tok)      (((tok)&0x80)?-1:1)
#define TOKEN_ANGLE(tok)    (((tok)&0x0f)<<1)

#define MTOKEN_END          (0xfe)
#define STOKEN_END          (0x00)

#define TOK_DIR         0x80
#define TOK_SHAPE_MASK  0x70
#define TOK_ANGLE_MASK  0x0f



#define MSHF_PLUS           0x01    // (part of shape)
#define MSHF_PULSE          0x04    // (part of shape)
#define MSHF_CLEAN          0x02    // (part of shape)
#define MSHF_SHP_MASK       0x07    // (all bits of shape)
#define MSHF_FLG_MASK       (~MSHF_SHP_MASK)    // (flag bits from shape)

#define MSHF_DIR            0x08    // dir (set if cw (negative))
#define MSHF_CIRCLE         0x20    // 
#define MSHF_PREV_PAUSE     0x80    // set if preceded by pause
#define MSHF_MONO           0x40    // 


//
// MSHF_NEAR_PLUS used only in findBestPulses_minimal()
//
#define MSHF_NEAR_PLUS      0x10    // set if near a plus


//
// MSHF_ZERO used only in parse1
//
#define MSHF_ZERO           0x01    // hit zero

#define ANGLE_END       0xc0
#define ANGLE_START     0xa0
#define ANGLE_MASK      0x1f
#define AFLG_END        0x40
#define AFLG_START      0x20
#define AFLG_STARTEND   0x80

//typedef enum SpellShapeEnum {
#define SSHP_PAUSE      0
#define SSHP_CIRCLE     1
#define SSHP_OCIRCLE    2
#define SSHP_OPULSE     3
#define SSHP_PULSE      4
#define SSHP_WILD       5

#define SSHP_CNT        6
//} SpellShape;
#define SPELL_SHAPE_STRING() \
    "Pause", \
    "Circle", \
    "OCircle", \
    "OPulse", \
    "Pulse", \
    "Wild", \


//typedef enum MotionShapeEnum {
#define MSHP_DIRTY_CIRCLE           0
#define MSHP_DIRTY_CIRCLE_PLUS      1
#define MSHP_CLEAN_CIRCLE           2
#define MSHP_CLEAN_CIRCLE_PLUS      3
#define MSHP_PULSE                  4
#define MSHP_PULSE_PLUS             5
#define MSHP_CIRCLE_GAP             6
#define MSHP_PAUSE                  7
// PAUSE is unused in minimal
#define MSHP_CNT                    8
//} MotionShape;
#define MOTION_SHAPE_STRING() \
    "Drt Circ ", \
    "Drt Circ+", \
    "Cln Circ ", \
    "Cln Circ+", \
    "Pulse    ", \
    "Pulse+   ", \
    "CircleGap", \
    "PAUSE", \




This file Copyright (C) 2006 by Nathan (Acorn) Pooley
Go to TOP Wand page
Go to Acorn's personal webpage
Go to Hogwarts website: www.gotohogwarts.com
Snout: www.snout.org/game
Gadgets of Justice Unlimited
Snout GC (Wiki)
Snout Wiki
File created by do_doc at Wed May 30 03:30:21 PDT 2007