+char *transfusionbindnames[][2] =
+{
+{"+forward", "walk forward"},
+{"+back", "backpedal"},
+{"+left", "turn left"},
+{"+right", "turn right"},
+{"+moveleft", "step left"},
+{"+moveright", "step right"},
+{"+jump", "jump / swim up"},
+{"+movedown", "swim down"},
+{"+attack", "attack"},
+{"+button3", "altfire"},
+{"impulse 1", "Pitch Fork"},
+{"impulse 2", "Flare Gun"},
+{"impulse 3", "Shotgun"},
+{"impulse 4", "Machine Gun"},
+{"impulse 5", "Incinerator"},
+{"impulse 6", "Bombs"},
+{"impulse 7", "Aerosol Can"},
+{"impulse 8", "Tesla Cannon"},
+{"impulse 9", "Life Leech"},
+{"impulse 17", "Voodoo Doll"},
+{"impulse 11", "previous weapon"},
+{"impulse 10", "next weapon"},
+{"impulse 14", "previous item"},
+{"impulse 15", "next item"},
+{"impulse 13", "use item"},
+{"impulse 100", "add bot (red)"},
+{"impulse 101", "add bot (blue)"},
+{"impulse 102", "kick a bot"},
+{"impulse 50", "voting menu"},
+{"impulse 141", "identify player"},
+{"impulse 16", "next armor type"},
+{"impulse 20", "observer mode"}
+};
+
+int numcommands;
+char *(*bindnames)[2];
+
+/*
+typedef struct binditem_s
+{
+ char *command, *description;
+ struct binditem_s *next;
+}
+binditem_t;
+
+typedef struct bindcategory_s
+{
+ char *name;
+ binditem_t *binds;
+ struct bindcategory_s *next;
+}
+bindcategory_t;
+
+bindcategory_t *bindcategories = NULL;
+
+void M_ClearBinds (void)
+{
+ for (c = bindcategories;c;c = cnext)
+ {
+ cnext = c->next;
+ for (b = c->binds;b;b = bnext)
+ {
+ bnext = b->next;
+ Z_Free(b);
+ }
+ Z_Free(c);
+ }
+ bindcategories = NULL;
+}
+
+void M_AddBindToCategory(bindcategory_t *c, char *command, char *description)
+{
+ for (b = &c->binds;*b;*b = &(*b)->next);
+ *b = Z_Alloc(sizeof(binditem_t) + strlen(command) + 1 + strlen(description) + 1);
+ *b->command = (char *)((*b) + 1);
+ *b->description = *b->command + strlen(command) + 1;
+ strcpy(*b->command, command);
+ strcpy(*b->description, description);
+}
+
+void M_AddBind (char *category, char *command, char *description)
+{
+ for (c = &bindcategories;*c;c = &(*c)->next)
+ {
+ if (!strcmp(category, (*c)->name))
+ {
+ M_AddBindToCategory(*c, command, description);
+ return;
+ }
+ }
+ *c = Z_Alloc(sizeof(bindcategory_t));
+ M_AddBindToCategory(*c, command, description);
+}
+
+void M_DefaultBinds (void)
+{
+ M_ClearBinds();
+ M_AddBind("movement", "+jump", "jump / swim up");
+ M_AddBind("movement", "+forward", "walk forward");
+ M_AddBind("movement", "+back", "backpedal");
+ M_AddBind("movement", "+left", "turn left");
+ M_AddBind("movement", "+right", "turn right");
+ M_AddBind("movement", "+speed", "run");
+ M_AddBind("movement", "+moveleft", "step left");
+ M_AddBind("movement", "+moveright", "step right");
+ M_AddBind("movement", "+strafe", "sidestep");
+ M_AddBind("movement", "+lookup", "look up");
+ M_AddBind("movement", "+lookdown", "look down");
+ M_AddBind("movement", "centerview", "center view");
+ M_AddBind("movement", "+mlook", "mouse look");
+ M_AddBind("movement", "+klook", "keyboard look");
+ M_AddBind("movement", "+moveup", "swim up");
+ M_AddBind("movement", "+movedown", "swim down");
+ M_AddBind("weapons", "+attack", "attack");
+ M_AddBind("weapons", "impulse 10", "next weapon");
+ M_AddBind("weapons", "impulse 12", "previous weapon");
+ M_AddBind("weapons", "impulse 1", "select weapon 1 (axe)");
+ M_AddBind("weapons", "impulse 2", "select weapon 2 (shotgun)");
+ M_AddBind("weapons", "impulse 3", "select weapon 3 (super )");
+ M_AddBind("weapons", "impulse 4", "select weapon 4 (nailgun)");
+ M_AddBind("weapons", "impulse 5", "select weapon 5 (super nailgun)");
+ M_AddBind("weapons", "impulse 6", "select weapon 6 (grenade launcher)");
+ M_AddBind("weapons", "impulse 7", "select weapon 7 (rocket launcher)");
+ M_AddBind("weapons", "impulse 8", "select weapon 8 (lightning gun)");
+}
+*/
+