Skip to content

Commit

Permalink
NWN2: Get and set item charges
Browse files Browse the repository at this point in the history
  • Loading branch information
rjshae authored and DrMcCoy committed Mar 4, 2019
1 parent db5a440 commit a3c216c
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 2 deletions.
15 changes: 15 additions & 0 deletions src/engines/nwn2/item.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,10 @@ uint16 Item::getItemStackSize() const {
return _stackSize;
}

uint8 Item::getItemCharges() const {
return _charges;
}

void Item::setItemIcon(uint32 icon) {
// Check if the icon is in range
const Aurora::TwoDAFile &icons = TwoDAReg.get2DA("nwn2_icons");
Expand All @@ -137,6 +141,16 @@ void Item::setItemStackSize(uint16 stackSize) {
_stackSize = (stackSize > maxStack) ? maxStack : stackSize;
}

void Item::setItemCharges(uint8 charges) {
const Aurora::TwoDARow &row = TwoDAReg.get2DA("baseitems").getRow((size_t) _baseItem);
uint8 maxCharges = (uint8) row.getInt("ChargesStarting");
if (maxCharges == 0)
return;

// TODO: Destroy item if 'charges' is zero and 'maxCharges' > 0
_charges = (charges > maxCharges) ? maxCharges : charges;
}

uint16 Item::getMaxStackSize() const {
const Aurora::TwoDARow &row = TwoDAReg.get2DA("baseitems").getRow((size_t) _baseItem);
return (uint16) row.getInt("Stacking");
Expand Down Expand Up @@ -193,6 +207,7 @@ void Item::loadProperties(const Aurora::GFF3Struct &gff) {
_modifyCost = gff.getSint("ModifyCost", _modifyCost);
_baseItem = (ItemType) gff.getUint("BaseItem", (uint) _baseItem);
_stackSize = gff.getUint("StackSize", _stackSize);
_charges = gff.getUint("Charges", _charges);

// Booleans
_plot = gff.getBool("Plot", _plot);
Expand Down
3 changes: 3 additions & 0 deletions src/engines/nwn2/item.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,11 @@ class Item : public Object, public Inventory {
uint32 getItemIcon() const;
uint16 getItemStackSize() const;
uint16 getMaxStackSize() const;
uint8 getItemCharges() const;

void setItemIcon(uint32 icon);
void setItemStackSize(uint16 stackSize);
void setItemCharges(uint8 charges);

/** Create an item in the creature's inventory. */
Item *createItemOnObject(const Common::UString &blueprint, uint16 stackSize, const Common::UString &tag);
Expand All @@ -69,6 +71,7 @@ class Item : public Object, public Inventory {
uint32 _cost; ///< Base price in gp.
int32 _modifyCost; ///< Adjustment to price in gp.
uint16 _stackSize; ///< Stack size.
uint8 _charges; ///< Number of charges.
ItemType _baseItem; ///< Base item type.

bool _plot; ///< Is this a plot item?
Expand Down
4 changes: 2 additions & 2 deletions src/engines/nwn2/script/function_tables.h
Original file line number Diff line number Diff line change
Expand Up @@ -745,8 +745,8 @@ const Functions::FunctionPointer Functions::kFunctionPointers[] = {
{ 604, "EffectCutsceneDominated" , 0 },
{ 605, "GetItemStackSize" , &Functions::getItemStackSize },
{ 606, "SetItemStackSize" , &Functions::setItemStackSize },
{ 607, "GetItemCharges" , 0 },
{ 608, "SetItemCharges" , 0 },
{ 607, "GetItemCharges" , &Functions::getItemCharges },
{ 608, "SetItemCharges" , &Functions::setItemCharges },
{ 609, "AddItemProperty" , 0 },
{ 610, "RemoveItemProperty" , 0 },
{ 611, "GetIsItemPropertyValid" , 0 },
Expand Down
2 changes: 2 additions & 0 deletions src/engines/nwn2/script/functions.h
Original file line number Diff line number Diff line change
Expand Up @@ -308,9 +308,11 @@ class Functions {
void getItemIcon (Aurora::NWScript::FunctionContext &ctx);
void getItemStackSize (Aurora::NWScript::FunctionContext &ctx);
void getNumStackedItems(Aurora::NWScript::FunctionContext &ctx);
void getItemCharges (Aurora::NWScript::FunctionContext &ctx);

void setItemIcon (Aurora::NWScript::FunctionContext &ctx);
void setItemStackSize(Aurora::NWScript::FunctionContext &ctx);
void setItemCharges (Aurora::NWScript::FunctionContext &ctx);

void getFirstItemInInventory(Aurora::NWScript::FunctionContext &ctx);
void getNextItemInInventory (Aurora::NWScript::FunctionContext &ctx);
Expand Down
14 changes: 14 additions & 0 deletions src/engines/nwn2/script/functions_inventory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,12 @@ void Functions::getNumStackedItems(Aurora::NWScript::FunctionContext &ctx) {
ctx.getReturn() = (int) item->getItemStackSize();
}

void Functions::getItemCharges(Aurora::NWScript::FunctionContext &ctx) {
Item *item = NWN2::ObjectContainer::toItem(getParamObject(ctx, 0));
if (item)
ctx.getReturn() = (int) item->getItemCharges();
}

void Functions::setItemIcon(Aurora::NWScript::FunctionContext &ctx) {
Item *item = NWN2::ObjectContainer::toItem(getParamObject(ctx, 0));
if (item) {
Expand All @@ -148,6 +154,14 @@ void Functions::setItemStackSize(Aurora::NWScript::FunctionContext &ctx) {
}
}

void Functions::setItemCharges(Aurora::NWScript::FunctionContext &ctx) {
Item *item = NWN2::ObjectContainer::toItem(getParamObject(ctx, 0));
if (item) {
const uint8 charges = (uint8)(ctx.getParams()[1].getInt());
item->setItemCharges(charges);
}
}

void Functions::getFirstItemInInventory(Aurora::NWScript::FunctionContext &ctx) {
Item *item = NWN2::ObjectContainer::toItem(getParamObject(ctx, 0));
if (item && item->getHasInventory()) {
Expand Down

0 comments on commit a3c216c

Please sign in to comment.