Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package devilutionx for
openSUSE:Factory:NonFree checked in at 2021-04-15 16:55:50
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory:NonFree/devilutionx (Old)
and /work/SRC/openSUSE:Factory:NonFree/.devilutionx.new.12324 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "devilutionx"
Thu Apr 15 16:55:50 2021 rev:4 rq:885062 version:1.2.1
Changes:
--------
--- /work/SRC/openSUSE:Factory:NonFree/devilutionx/devilutionx.changes
2021-04-08 21:00:22.157784233 +0200
+++
/work/SRC/openSUSE:Factory:NonFree/.devilutionx.new.12324/devilutionx.changes
2021-04-15 16:55:50.426524593 +0200
@@ -1,0 +2,21 @@
+Tue Apr 13 12:48:17 UTC 2021 - Martin Hauke <[email protected]>
+
+- Update to version 1.2.1
+ Gameplay
+ * Gharbad not having to go out of vision before progressing his
+ quest
+ * Diablo: Items with negative AC morphing in multiplayer
+ * Diablo: Griswold and Wirt selling unusually expensive items
+ * Diablo: Gold not going directly to inventory
+ * Hellfire: Some monsters having lower than intended HP
+ * Hellfire: Auric Amulet not taking effect in most scenarios
+ Stability / Performance / System
+ * Quest panel crashing the game for some quests
+ Bugfixes for original Hellfire bugs
+ Gameplay
+ * Rage/Search/Lightningwall not factoring in the hero level for
+ the first player
+ * Sparkling Shrine dealing an incorrect amount of damage
+ * Items with negative AC morphing in multiplayer
+
+-------------------------------------------------------------------
Old:
----
devilutionx-1.2.0.tar.gz
New:
----
devilutionx-1.2.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ devilutionx.spec ++++++
--- /var/tmp/diff_new_pack.rL3mQl/_old 2021-04-15 16:55:51.086525638 +0200
+++ /var/tmp/diff_new_pack.rL3mQl/_new 2021-04-15 16:55:51.090525644 +0200
@@ -18,7 +18,7 @@
Name: devilutionx
-Version: 1.2.0
+Version: 1.2.1
Release: 0
Summary: An open source implementation of the Diablo 1 game engine
# 3rdParty/asio/* is licensed under BSL-1.0
++++++ devilutionx-1.2.0.tar.gz -> devilutionx-1.2.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/devilutionX-1.2.0/CMakeLists.txt
new/devilutionX-1.2.1/CMakeLists.txt
--- old/devilutionX-1.2.0/CMakeLists.txt 2021-04-06 07:51:05.000000000
+0200
+++ new/devilutionX-1.2.1/CMakeLists.txt 2021-04-12 23:07:44.000000000
+0200
@@ -354,6 +354,11 @@
SourceX/platform/switch/docking.cpp)
set(BIN_TARGET devilutionx.elf)
endif()
+
+if(VITA)
+ list(APPEND devilutionx_SRCS
+ SourceX/platform/vita/keyboard.cpp)
+endif()
if(N3DS)
list(APPEND devilutionx_SRCS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/devilutionX-1.2.0/Packaging/OpenDingux/build.sh
new/devilutionX-1.2.1/Packaging/OpenDingux/build.sh
--- old/devilutionX-1.2.0/Packaging/OpenDingux/build.sh 2021-04-06
07:51:05.000000000 +0200
+++ new/devilutionX-1.2.1/Packaging/OpenDingux/build.sh 2021-04-12
23:07:44.000000000 +0200
@@ -72,6 +72,7 @@
cmake .. -DBINARY_RELEASE=ON "-DTARGET_PLATFORM=$TARGET" \
-DCMAKE_TOOLCHAIN_FILE="$BUILDROOT/output/host/usr/share/buildroot/toolchainfile.cmake"
make -j $(getconf _NPROCESSORS_ONLN)
+ "${TOOLCHAIN}/bin/"*-linux-strip devilutionx
cd -
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/devilutionX-1.2.0/Source/diablo.cpp
new/devilutionX-1.2.1/Source/diablo.cpp
--- old/devilutionX-1.2.0/Source/diablo.cpp 2021-04-06 07:51:05.000000000
+0200
+++ new/devilutionX-1.2.1/Source/diablo.cpp 2021-04-12 23:07:44.000000000
+0200
@@ -568,6 +568,8 @@
if (forceDiablo)
gbIsHellfire = false;
+ gbIsHellfireSaveGame = gbIsHellfire;
+
UiInitialize();
UiSetSpawned(gbIsSpawn);
was_ui_init = true;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/devilutionX-1.2.0/Source/inv.cpp
new/devilutionX-1.2.1/Source/inv.cpp
--- old/devilutionX-1.2.0/Source/inv.cpp 2021-04-06 07:51:05.000000000
+0200
+++ new/devilutionX-1.2.1/Source/inv.cpp 2021-04-12 23:07:44.000000000
+0200
@@ -1409,15 +1409,15 @@
il--;
gt = plr[pnum].InvList[il]._ivalue;
ig = plr[pnum].HoldItem._ivalue + gt;
- if (ig <= GOLD_MAX_LIMIT) {
+ if (ig <= MaxGold) {
plr[pnum].InvList[il]._ivalue = ig;
plr[pnum]._pGold +=
plr[pnum].HoldItem._ivalue;
SetPlrHandGoldCurs(&plr[pnum].InvList[il]);
} else {
- ig = GOLD_MAX_LIMIT - gt;
+ ig = MaxGold - gt;
plr[pnum]._pGold += ig;
plr[pnum].HoldItem._ivalue -= ig;
- plr[pnum].InvList[il]._ivalue =
GOLD_MAX_LIMIT;
+ plr[pnum].InvList[il]._ivalue = MaxGold;
plr[pnum].InvList[il]._iCurs =
ICURS_GOLD_LARGE;
// BUGFIX: incorrect values here are
leftover from beta (fixed)
cn =
GetGoldCursor(plr[pnum].HoldItem._ivalue);
@@ -1475,15 +1475,15 @@
if (!plr[pnum].SpdList[ii].isEmpty()) {
if (plr[pnum].SpdList[ii]._itype == ITYPE_GOLD)
{
i = plr[pnum].HoldItem._ivalue +
plr[pnum].SpdList[ii]._ivalue;
- if (i <= GOLD_MAX_LIMIT) {
+ if (i <= MaxGold) {
plr[pnum].SpdList[ii]._ivalue =
i;
plr[pnum]._pGold +=
plr[pnum].HoldItem._ivalue;
SetPlrHandGoldCurs(&plr[pnum].SpdList[ii]);
} else {
- i = GOLD_MAX_LIMIT -
plr[pnum].SpdList[ii]._ivalue;
+ i = MaxGold -
plr[pnum].SpdList[ii]._ivalue;
plr[pnum]._pGold += i;
plr[pnum].HoldItem._ivalue -= i;
- plr[pnum].SpdList[ii]._ivalue =
GOLD_MAX_LIMIT;
+ plr[pnum].SpdList[ii]._ivalue =
MaxGold;
plr[pnum].SpdList[ii]._iCurs =
ICURS_GOLD_LARGE;
// BUGFIX: incorrect values
here are leftover from beta (fixed)
@@ -2140,7 +2140,7 @@
CheckBookLevel(pnum);
CheckItemStats(pnum);
bool cursor_updated = false;
- if (gbIsHellfire && plr[pnum].HoldItem._itype == ITYPE_GOLD &&
GoldAutoPlace(pnum))
+ if (plr[pnum].HoldItem._itype == ITYPE_GOLD && GoldAutoPlace(pnum))
cursor_updated = true;
CleanupItems(ii);
pcursitem = -1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/devilutionX-1.2.0/Source/items.cpp
new/devilutionX-1.2.1/Source/items.cpp
--- old/devilutionX-1.2.0/Source/items.cpp 2021-04-06 07:51:05.000000000
+0200
+++ new/devilutionX-1.2.1/Source/items.cpp 2021-04-12 23:07:44.000000000
+0200
@@ -4616,6 +4616,7 @@
static void SpawnOnePremium(int i, int plvl, int myplr)
{
int ivalue;
+ bool keepgoing = false;
ItemStruct holditem = item[0];
int strength = get_max_strength(plr[myplr]._pClass);
@@ -4644,6 +4645,7 @@
int count = 0;
do {
+ keepgoing = false;
memset(&item[0], 0, sizeof(*item));
item[0]._iSeed = AdvanceRndSeed();
SetRndSeed(item[0]._iSeed);
@@ -4652,8 +4654,10 @@
GetItemBonus(0, itype, plvl >> 1, plvl, TRUE, !gbIsHellfire);
if (!gbIsHellfire) {
- if (item[0]._iIvalue > 140000)
+ if (item[0]._iIvalue > 140000) {
+ keepgoing = true; // prevent breaking the
do/while loop too early by failing hellfire's condition in while
continue;
+ }
break;
}
@@ -4697,12 +4701,12 @@
ivalue *= 0.8;
count++;
- } while ((item[0]._iIvalue > 200000
+ } while (keepgoing || ((item[0]._iIvalue > 200000
|| item[0]._iMinStr > strength
|| item[0]._iMinMag > magic
|| item[0]._iMinDex > dexterity
|| item[0]._iIvalue < ivalue)
- && count < 150);
+ && count < 150));
premiumitem[i] = item[0];
premiumitem[i]._iCreateInfo = plvl | CF_SMITHPREMIUM;
premiumitem[i]._iIdentified = TRUE;
@@ -4950,6 +4954,7 @@
int itype;
int ivalue;
+ bool keepgoing = false;
int count = 0;
int strength = get_max_strength(plr[myplr]._pClass);
@@ -4974,6 +4979,7 @@
if (boylevel < (lvl >> 1) || boyitem.isEmpty()) {
do {
+ keepgoing = false;
memset(&item[0], 0, sizeof(*item));
item[0]._iSeed = AdvanceRndSeed();
SetRndSeed(item[0]._iSeed);
@@ -4982,8 +4988,10 @@
GetItemBonus(0, itype, lvl, 2 * lvl, TRUE, TRUE);
if (!gbIsHellfire) {
- if (item[0]._iIvalue > 140000)
+ if (item[0]._iIvalue > 90000) {
+ keepgoing = true; // prevent breaking
the do/while loop too early by failing hellfire's condition in while
continue;
+ }
break;
}
@@ -5059,12 +5067,12 @@
break;
}
}
- } while ((item[0]._iIvalue > 200000
+ } while (keepgoing || ((item[0]._iIvalue > 200000
|| item[0]._iMinStr > strength
|| item[0]._iMinMag > magic
|| item[0]._iMinDex > dexterity
|| item[0]._iIvalue < ivalue)
- && count < 250);
+ && count < 250));
boyitem = item[0];
boyitem._iCreateInfo = lvl | CF_BOY;
boyitem._iIdentified = TRUE;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/devilutionX-1.2.0/Source/lighting.cpp
new/devilutionX-1.2.1/Source/lighting.cpp
--- old/devilutionX-1.2.0/Source/lighting.cpp 2021-04-06 07:51:05.000000000
+0200
+++ new/devilutionX-1.2.1/Source/lighting.cpp 2021-04-12 23:07:44.000000000
+0200
@@ -643,6 +643,7 @@
int i, j, x1, y1, x2, y2;
nRadius++;
+ nRadius++; // increasing the radius even further here prevents leaving
stray vision tiles behind and doesn't seem to affect monster AI - applying new
vision happens in the same tick
y1 = nYPos - nRadius;
y2 = nYPos + nRadius;
x1 = nXPos - nRadius;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/devilutionX-1.2.0/Source/loadsave.cpp
new/devilutionX-1.2.1/Source/loadsave.cpp
--- old/devilutionX-1.2.0/Source/loadsave.cpp 2021-04-06 07:51:05.000000000
+0200
+++ new/devilutionX-1.2.1/Source/loadsave.cpp 2021-04-12 23:07:44.000000000
+0200
@@ -739,7 +739,7 @@
file->skip(2); // Alignment
pQuest->_qmsg = file->nextLE<Sint32>();
} else {
- pQuest->_qmsg = file->nextLE<Sint8>();
+ pQuest->_qmsg = file->nextLE<Uint8>();
}
pQuest->_qvar1 = file->nextLE<Uint8>();
pQuest->_qvar2 = file->nextLE<Uint8>();
@@ -965,7 +965,7 @@
void RemoveEmptyLevelItems()
{
- for (int i = numitems; i >= 0; i--) {
+ for (int i = numitems; i > 0; i--) {
int ii = itemactive[i];
if (item[ii].isEmpty()) {
dItem[item[ii]._ix][item[ii]._iy] = 0;
@@ -1690,7 +1690,7 @@
file->skip(2); // Alignment
file->writeLE<Sint32>(pQuest->_qmsg);
} else {
- file->writeLE<Sint8>(pQuest->_qmsg);
+ file->writeLE<Uint8>(pQuest->_qmsg);
}
file->writeLE<Uint8>(pQuest->_qvar1);
file->writeLE<Uint8>(pQuest->_qvar2);
@@ -1741,7 +1741,7 @@
void SaveHeroItems(PlayerStruct *pPlayer)
{
size_t items = NUM_INVLOC + NUM_INV_GRID_ELEM + MAXBELTITEMS;
- SaveHelper file("heroitems", items * (gbIsHellfire ?
HellfireItemSaveSize : DiabloItemSaveSize));
+ SaveHelper file("heroitems", items * (gbIsHellfire ?
HellfireItemSaveSize : DiabloItemSaveSize) + sizeof(Uint8));
file.writeLE<Uint8>(gbIsHellfire);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/devilutionX-1.2.0/Source/missiles.cpp
new/devilutionX-1.2.1/Source/missiles.cpp
--- old/devilutionX-1.2.0/Source/missiles.cpp 2021-04-06 07:51:05.000000000
+0200
+++ new/devilutionX-1.2.1/Source/missiles.cpp 2021-04-12 23:07:44.000000000
+0200
@@ -1904,7 +1904,7 @@
if (mienemy == TARGET_MONSTERS && id != -1) {
missile[mi]._midam = 0;
int lvl = 2;
- if (id > 0)
+ if (id > -1)
lvl = plr[id]._pLevel * 2;
missile[mi]._mirange = lvl + 10 * missile[mi]._mispllvl + 245;
}
@@ -1978,7 +1978,7 @@
missile[mi]._miVar8 = 0;
AutoMapShowItems = TRUE;
int lvl = 2;
- if (id > 0)
+ if (id > -1)
lvl = plr[id]._pLevel * 2;
missile[mi]._mirange = lvl + 10 * missile[mi]._mispllvl + 245;
if (mienemy == TARGET_MONSTERS)
@@ -2506,8 +2506,8 @@
{
int i;
- if (mienemy == TARGET_MONSTERS) {
- if (id != -1) {
+ if (id != -1) {
+ if (mienemy == TARGET_MONSTERS) {
missile[mi]._midam = 0;
for (i = 0; i <= plr[id]._pLevel; i++) {
missile[mi]._midam += random_(55, 20) + 1;
@@ -2518,10 +2518,10 @@
missile[mi]._midam += missile[mi]._midam >> 1;
UseMana(id, SPL_FLASH);
} else {
- missile[mi]._midam = currlevel >> 1;
+ missile[mi]._midam = monster[id].mLevel << 1;
}
} else {
- missile[mi]._midam = monster[id].mLevel << 1;
+ missile[mi]._midam = currlevel >> 1;
}
missile[mi]._mirange = 19;
}
@@ -3105,7 +3105,7 @@
plr[id]._pSpellFlags |= 2u;
missile[mi]._miVar2 = tmp;
int lvl = 2;
- if (id > 0)
+ if (id > -1)
lvl = plr[id]._pLevel * 2;
missile[mi]._mirange = lvl + 10 * missile[mi]._mispllvl + 245;
CalcPlrItemVals(id, TRUE);
@@ -4301,7 +4301,7 @@
missile[i]._mirange--;
int id = missile[i]._misource;
int lvl = 0;
- if (id > 0)
+ if (id > -1)
lvl = plr[id]._pLevel;
int dmg = 16 * (random_(53, 10) + random_(53, 10) + lvl + 2);
if (missile[i]._mirange == 0) {
@@ -5261,7 +5261,7 @@
plr[id]._pSpellFlags &= ~0x2;
plr[id]._pSpellFlags |= 4;
int lvl = 2;
- if (id > 0)
+ if (id > -1)
lvl = plr[id]._pLevel * 2;
missile[i]._mirange = lvl + 10 * missile[i]._mispllvl +
245;
hpdif = plr[id]._pMaxHP - plr[id]._pHitPoints;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/devilutionX-1.2.0/Source/monster.h
new/devilutionX-1.2.1/Source/monster.h
--- old/devilutionX-1.2.0/Source/monster.h 2021-04-06 07:51:05.000000000
+0200
+++ new/devilutionX-1.2.1/Source/monster.h 2021-04-12 23:07:44.000000000
+0200
@@ -44,8 +44,8 @@
TSnd *Snds[4][2];
Sint32 width;
Sint32 width2;
- Uint8 mMinHP;
- Uint8 mMaxHP;
+ uint16_t mMinHP;
+ uint16_t mMaxHP;
bool has_special;
Uint8 mAFNum;
Sint8 mdeadval;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/devilutionX-1.2.0/Source/msg.h
new/devilutionX-1.2.1/Source/msg.h
--- old/devilutionX-1.2.0/Source/msg.h 2021-04-06 07:51:05.000000000 +0200
+++ new/devilutionX-1.2.1/Source/msg.h 2021-04-12 23:07:44.000000000 +0200
@@ -107,7 +107,7 @@
Uint8 bMinStr;
Uint8 bMinMag;
Uint8 bMinDex;
- Uint8 bAC;
+ Sint16 bAC;
} TCmdGItem;
typedef struct TCmdPItem {
@@ -129,7 +129,7 @@
Uint8 bMinStr;
Uint8 bMinMag;
Uint8 bMinDex;
- Uint8 bAC;
+ Sint16 bAC;
} TCmdPItem;
typedef struct TCmdChItem {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/devilutionX-1.2.0/Source/pfile.cpp
new/devilutionX-1.2.1/Source/pfile.cpp
--- old/devilutionX-1.2.0/Source/pfile.cpp 2021-04-06 07:51:05.000000000
+0200
+++ new/devilutionX-1.2.1/Source/pfile.cpp 2021-04-12 23:07:44.000000000
+0200
@@ -170,9 +170,13 @@
return NULL;
}
-static void pfile_SFileCloseArchive(HANDLE hsArchive)
+static void pfile_SFileCloseArchive(HANDLE *hsArchive)
{
- SFileCloseArchive(hsArchive);
+ if (*hsArchive == NULL)
+ return;
+
+ SFileCloseArchive(*hsArchive);
+ *hsArchive = NULL;
}
void pfile_write_hero()
@@ -283,6 +287,7 @@
UnPackPlayer(&pkplr, 0, FALSE);
+ pfile_SFileCloseArchive(&archive);
LoadHeroItems(&plr[0]);
RemoveEmptyInventory(0);
CalcPlrInv(0, FALSE);
@@ -290,7 +295,7 @@
game_2_ui_player(plr, &uihero, hasSaveGame);
ui_add_hero_info(&uihero);
}
- pfile_SFileCloseArchive(archive);
+ pfile_SFileCloseArchive(&archive);
}
}
@@ -408,13 +413,13 @@
if (gbValidSaveFile)
pkplr.bIsHellfire = gbIsHellfireSaveGame;
+ pfile_SFileCloseArchive(&archive);
+
UnPackPlayer(&pkplr, myplr, FALSE);
LoadHeroItems(&plr[myplr]);
RemoveEmptyInventory(myplr);
CalcPlrInv(myplr, FALSE);
-
- pfile_SFileCloseArchive(archive);
}
bool LevelFileExists()
@@ -569,7 +574,7 @@
return NULL;
buf = pfile_read_archive(archive, pszName, pdwLen);
- pfile_SFileCloseArchive(archive);
+ pfile_SFileCloseArchive(&archive);
if (buf == NULL)
return NULL;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/devilutionX-1.2.0/Source/player.cpp
new/devilutionX-1.2.1/Source/player.cpp
--- old/devilutionX-1.2.0/Source/player.cpp 2021-04-06 07:51:05.000000000
+0200
+++ new/devilutionX-1.2.1/Source/player.cpp 2021-04-12 23:07:44.000000000
+0200
@@ -2198,8 +2198,6 @@
switch (variant) {
case PM_WALK:
dPlayer[plr[pnum]._px][plr[pnum]._py] = 0;
- if (leveltype != DTYPE_TOWN && pnum == myplr)
- DoUnVision(plr[pnum]._px, plr[pnum]._py,
plr[pnum]._pLightRad); // fix for incorrect vision updating
plr[pnum]._px += plr[pnum]._pVar1;
plr[pnum]._py += plr[pnum]._pVar2;
dPlayer[plr[pnum]._px][plr[pnum]._py] = pnum + 1;
@@ -2209,8 +2207,6 @@
break;
case PM_WALK3:
dPlayer[plr[pnum]._px][plr[pnum]._py] = 0;
- if (leveltype != DTYPE_TOWN && pnum == myplr)
- DoUnVision(plr[pnum]._px, plr[pnum]._py,
plr[pnum]._pLightRad); // fix for incorrect vision updating
dFlags[plr[pnum]._pVar4][plr[pnum]._pVar5] &=
~BFLAG_PLAYERLR;
plr[pnum]._px = plr[pnum]._pVar1;
plr[pnum]._py = plr[pnum]._pVar2;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/devilutionX-1.2.0/Source/stores.cpp
new/devilutionX-1.2.1/Source/stores.cpp
--- old/devilutionX-1.2.0/Source/stores.cpp 2021-04-06 07:51:05.000000000
+0200
+++ new/devilutionX-1.2.1/Source/stores.cpp 2021-04-12 23:07:44.000000000
+0200
@@ -1454,8 +1454,8 @@
int i, sz, cost, numsqrs;
cost = storehold[idx]._iIvalue;
- sz = cost / GOLD_MAX_LIMIT;
- if (cost % GOLD_MAX_LIMIT != 0)
+ sz = cost / MaxGold;
+ if (cost % MaxGold != 0)
sz++;
SetCursor_(storehold[idx]._iCurs + CURSOR_FIRSTITEM);
@@ -1471,16 +1471,16 @@
}
for (i = 0; i < plr[myplr]._pNumInv; i++) {
- if (plr[myplr].InvList[i]._itype == ITYPE_GOLD &&
plr[myplr].InvList[i]._ivalue != GOLD_MAX_LIMIT) {
- if (cost + plr[myplr].InvList[i]._ivalue <=
GOLD_MAX_LIMIT)
+ if (plr[myplr].InvList[i]._itype == ITYPE_GOLD &&
plr[myplr].InvList[i]._ivalue != MaxGold) {
+ if (cost + plr[myplr].InvList[i]._ivalue <= MaxGold)
cost = 0;
else
- cost -= GOLD_MAX_LIMIT -
plr[myplr].InvList[i]._ivalue;
+ cost -= MaxGold - plr[myplr].InvList[i]._ivalue;
}
}
- sz = cost / GOLD_MAX_LIMIT;
- if (cost % GOLD_MAX_LIMIT)
+ sz = cost / MaxGold;
+ if (cost % MaxGold)
sz++;
return numsqrs >= sz;
@@ -1536,22 +1536,22 @@
}
plr[myplr]._pGold += cost;
for (i = 0; i < plr[myplr]._pNumInv && cost > 0; i++) {
- if (plr[myplr].InvList[i]._itype == ITYPE_GOLD &&
plr[myplr].InvList[i]._ivalue != GOLD_MAX_LIMIT) {
- if (cost + plr[myplr].InvList[i]._ivalue <=
GOLD_MAX_LIMIT) {
+ if (plr[myplr].InvList[i]._itype == ITYPE_GOLD &&
plr[myplr].InvList[i]._ivalue != MaxGold) {
+ if (cost + plr[myplr].InvList[i]._ivalue <= MaxGold) {
plr[myplr].InvList[i]._ivalue += cost;
SetGoldCurs(myplr, i);
cost = 0;
} else {
- cost -= GOLD_MAX_LIMIT -
plr[myplr].InvList[i]._ivalue;
- plr[myplr].InvList[i]._ivalue = GOLD_MAX_LIMIT;
+ cost -= MaxGold - plr[myplr].InvList[i]._ivalue;
+ plr[myplr].InvList[i]._ivalue = MaxGold;
SetGoldCurs(myplr, i);
}
}
}
if (cost > 0) {
- while (cost > GOLD_MAX_LIMIT) {
- PlaceStoreGold(GOLD_MAX_LIMIT);
- cost -= GOLD_MAX_LIMIT;
+ while (cost > MaxGold) {
+ PlaceStoreGold(MaxGold);
+ cost -= MaxGold;
}
PlaceStoreGold(cost);
}
@@ -2706,7 +2706,7 @@
plr[myplr]._pGold = CalculateGold(myplr) - cost;
for (i = 0; i < MAXBELTITEMS && cost > 0; i++) {
- if (plr[myplr].SpdList[i]._itype == ITYPE_GOLD &&
plr[myplr].SpdList[i]._ivalue != GOLD_MAX_LIMIT) {
+ if (plr[myplr].SpdList[i]._itype == ITYPE_GOLD &&
plr[myplr].SpdList[i]._ivalue != MaxGold) {
if (cost < plr[myplr].SpdList[i]._ivalue) {
plr[myplr].SpdList[i]._ivalue -= cost;
SetSpdbarGoldCurs(myplr, i);
@@ -2736,7 +2736,7 @@
force_redraw = 255;
if (cost > 0) {
for (i = 0; i < plr[myplr]._pNumInv && cost > 0; i++) {
- if (plr[myplr].InvList[i]._itype == ITYPE_GOLD &&
plr[myplr].InvList[i]._ivalue != GOLD_MAX_LIMIT) {
+ if (plr[myplr].InvList[i]._itype == ITYPE_GOLD &&
plr[myplr].InvList[i]._ivalue != MaxGold) {
if (cost < plr[myplr].InvList[i]._ivalue) {
plr[myplr].InvList[i]._ivalue -= cost;
SetGoldCurs(myplr, i);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/devilutionX-1.2.0/SourceX/DiabloUI/diabloui.cpp
new/devilutionX-1.2.1/SourceX/DiabloUI/diabloui.cpp
--- old/devilutionX-1.2.0/SourceX/DiabloUI/diabloui.cpp 2021-04-06
07:51:05.000000000 +0200
+++ new/devilutionX-1.2.1/SourceX/DiabloUI/diabloui.cpp 2021-04-12
23:07:44.000000000 +0200
@@ -23,6 +23,10 @@
// for virtual keyboard on Switch
#include "platform/switch/keyboard.h"
#endif
+#ifdef __vita__
+// for virtual keyboard on Vita
+#include "platform/vita/keyboard.h"
+#endif
namespace dvl {
@@ -102,6 +106,8 @@
textInputActive = true;
#ifdef __SWITCH__
switch_start_text_input("", pItemUIEdit->m_value,
pItemUIEdit->m_max_length, /*multiline=*/0);
+#elif defined(__vita__)
+ vita_start_text_input("", pItemUIEdit->m_value,
pItemUIEdit->m_max_length);
#else
SDL_StartTextInput();
#endif
@@ -218,6 +224,12 @@
strncat(out_buf, output.c_str(), cnt - strlen(out_buf));
}
+void selhero_SetName(char *in_buf, char *out_buf, int cnt)
+{
+ std::string output = utf8_to_latin1(in_buf);
+ strncpy(out_buf, output.c_str(), cnt);
+}
+
bool HandleMenuAction(MenuAction menu_action)
{
switch (menu_action) {
@@ -333,7 +345,11 @@
#ifndef USE_SDL1
case SDL_TEXTINPUT:
if (textInputActive) {
+#ifdef __vita__
+ selhero_SetName(event->text.text, UiTextInput,
UiTextInputLen);
+#else
selhero_CatToName(event->text.text,
UiTextInput, UiTextInputLen);
+#endif
}
return;
#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/devilutionX-1.2.0/SourceX/display.cpp
new/devilutionX-1.2.1/SourceX/display.cpp
--- old/devilutionX-1.2.0/SourceX/display.cpp 2021-04-06 07:51:05.000000000
+0200
+++ new/devilutionX-1.2.1/SourceX/display.cpp 2021-04-12 23:07:44.000000000
+0200
@@ -125,9 +125,15 @@
SDL_SetHint(SDL_HINT_TOUCH_MOUSE_EVENTS, "0");
#endif
- int initFlags = SDL_INIT_EVERYTHING & ~SDL_INIT_HAPTIC;
-#ifdef __3DS__
- initFlags = SDL_INIT_TIMER | SDL_INIT_VIDEO | SDL_INIT_JOYSTICK;
+#ifdef _WIN32
+ // The default WASAPI backend causes distortions
+ // https://github.com/diasurgical/devilutionX/issues/1434
+ SDL_setenv("SDL_AUDIODRIVER", "winmm", /*overwrite=*/false);
+#endif
+
+ int initFlags = SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_JOYSTICK;
+#ifndef USE_SDL1
+ initFlags |= SDL_INIT_GAMECONTROLLER;
#endif
if (SDL_Init(initFlags) <= -1) {
ErrSdl();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/devilutionX-1.2.0/SourceX/platform/vita/keyboard.cpp
new/devilutionX-1.2.1/SourceX/platform/vita/keyboard.cpp
--- old/devilutionX-1.2.0/SourceX/platform/vita/keyboard.cpp 1970-01-01
01:00:00.000000000 +0100
+++ new/devilutionX-1.2.1/SourceX/platform/vita/keyboard.cpp 2021-04-12
23:07:44.000000000 +0200
@@ -0,0 +1,120 @@
+#include <string.h>
+#include <stdbool.h>
+
+#include <SDL.h>
+#include <psp2/types.h>
+#include <psp2/ime_dialog.h>
+#include "platform/vita/keyboard.h"
+
+static void utf16_to_utf8(const uint16_t *src, uint8_t *dst)
+{
+ int i;
+ for (i = 0; src[i]; i++) {
+ if ((src[i] & 0xFF80) == 0) {
+ *(dst++) = src[i] & 0xFF;
+ } else if((src[i] & 0xF800) == 0) {
+ *(dst++) = ((src[i] >> 6) & 0xFF) | 0xC0;
+ *(dst++) = (src[i] & 0x3F) | 0x80;
+ } else if((src[i] & 0xFC00) == 0xD800 && (src[i + 1] & 0xFC00)
== 0xDC00) {
+ *(dst++) = (((src[i] + 64) >> 8) & 0x3) | 0xF0;
+ *(dst++) = (((src[i] >> 2) + 16) & 0x3F) | 0x80;
+ *(dst++) = ((src[i] >> 4) & 0x30) | 0x80 | ((src[i + 1]
<< 2) & 0xF);
+ *(dst++) = (src[i + 1] & 0x3F) | 0x80;
+ i += 1;
+ } else {
+ *(dst++) = ((src[i] >> 12) & 0xF) | 0xE0;
+ *(dst++) = ((src[i] >> 6) & 0x3F) | 0x80;
+ *(dst++) = (src[i] & 0x3F) | 0x80;
+ }
+ }
+
+ *dst = '\0';
+}
+
+static void utf8_to_utf16(const uint8_t *src, uint16_t *dst)
+{
+ int i;
+ for (i = 0; src[i];) {
+ if ((src[i] & 0xE0) == 0xE0) {
+ *(dst++) = ((src[i] & 0x0F) << 12) | ((src[i + 1] &
0x3F) << 6) | (src[i + 2] & 0x3F);
+ i += 3;
+ } else if ((src[i] & 0xC0) == 0xC0) {
+ *(dst++) = ((src[i] & 0x1F) << 6) | (src[i + 1] & 0x3F);
+ i += 2;
+ } else {
+ *(dst++) = src[i];
+ i += 1;
+ }
+ }
+
+ *dst = '\0';
+}
+
+static int vita_input_thread(void *ime_buffer)
+{
+ while(1) {
+ // update IME status. Terminate, if finished
+ SceCommonDialogStatus dialogStatus = sceImeDialogGetStatus();
+ if (dialogStatus == SCE_COMMON_DIALOG_STATUS_FINISHED) {
+ uint8_t utf8_buffer[SCE_IME_DIALOG_MAX_TEXT_LENGTH];
+ SceImeDialogResult result;
+
+ SDL_memset(&result, 0, sizeof(SceImeDialogResult));
+ sceImeDialogGetResult(&result);
+
+ // Convert UTF16 to UTF8
+ utf16_to_utf8((SceWChar16*)ime_buffer, utf8_buffer);
+
+ // send sdl event
+ SDL_Event event;
+ event.text.type = SDL_TEXTINPUT;
+ SDL_utf8strlcpy(event.text.text, (const
char*)utf8_buffer, SDL_arraysize(event.text.text));
+ SDL_PushEvent(&event);
+
+ sceImeDialogTerm();
+ break;
+ }
+ }
+ return 0;
+}
+
+static int vita_keyboard_get(const char *guide_text, const char *initial_text,
int max_len, SceWChar16 *buf)
+{
+ SceWChar16 title[SCE_IME_DIALOG_MAX_TITLE_LENGTH];
+ SceWChar16 text[SCE_IME_DIALOG_MAX_TEXT_LENGTH];
+ SceInt32 res;
+
+ SDL_memset(&title, 0, sizeof(title));
+ SDL_memset(&text, 0, sizeof(text));
+ utf8_to_utf16((const uint8_t*)guide_text, title);
+ utf8_to_utf16((const uint8_t*)initial_text, text);
+
+ SceImeDialogParam param;
+ sceImeDialogParamInit(¶m);
+
+ param.supportedLanguages = SCE_IME_LANGUAGE_ENGLISH;
+ param.languagesForced = SCE_FALSE;
+ param.type = SCE_IME_TYPE_DEFAULT;
+ param.option = 0;
+ param.textBoxMode = SCE_IME_DIALOG_TEXTBOX_MODE_WITH_CLEAR;
+ param.maxTextLength = max_len;
+
+ param.title = title;
+ param.initialText = text;
+ param.inputTextBuffer = buf;
+
+ res = sceImeDialogInit(¶m);
+ if (res < 0) {
+ return 0;
+ }
+
+ return 1;
+}
+
+void vita_start_text_input(const char *guide_text, const char *initial_text,
int max_length)
+{
+ SceWChar16 ime_buffer[SCE_IME_DIALOG_MAX_TEXT_LENGTH];
+ if (vita_keyboard_get(guide_text, initial_text, max_length,
ime_buffer)) {
+ SDL_CreateThread(vita_input_thread, "vita_input_thread", (void
*)ime_buffer);
+ }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/devilutionX-1.2.0/SourceX/platform/vita/keyboard.h
new/devilutionX-1.2.1/SourceX/platform/vita/keyboard.h
--- old/devilutionX-1.2.0/SourceX/platform/vita/keyboard.h 1970-01-01
01:00:00.000000000 +0100
+++ new/devilutionX-1.2.1/SourceX/platform/vita/keyboard.h 2021-04-12
23:07:44.000000000 +0200
@@ -0,0 +1,3 @@
+#pragma once
+
+void vita_start_text_input(const char *guide_text, const char *initial_text,
int max_length);