Orb icon updates

This commit is contained in:
Zeno Rogue 2022-10-04 18:14:16 +02:00
parent a3e6d79607
commit 1aa4242ace
2 changed files with 111 additions and 72 deletions

View File

@ -478,11 +478,11 @@ ITEM( 'o', 0x8080FF, "Orb of Winter", itOrbWinter, IC_ORB, ZERO | IF_FIREPROOF |
"This orb can be used to invoke a wall of ice. It also protects you from fires.")
ITEM( 'o', 0xFF6060, "Orb of Speed", itOrbSpeed, IC_ORB, ZERO | IF_EMPATHY, RESERVED, osMovement,
"This orb can be used to move faster for some time.")
ITEM( 'o', 0x306000, "Orb of Life", itOrbLife, IC_ORB, ZERO | IF_SHMUPLIFE | IF_REVIVAL, RESERVED, osFriend,
ITEM( 'o', 0x90B090, "Orb of Life", itOrbLife, IC_ORB, ZERO | IF_SHMUPLIFE | IF_REVIVAL, RESERVED, osFriend,
"This orb can be used to summon friendly golems. It is used instantly when you pick it up.")
ITEM( 'o', 0x60D760, "Orb of Shielding", itOrbShield, IC_ORB, ZERO | IF_PROTECTION | IF_EMPATHY, RESERVED, osProtective,
"This orb can protect you from damage.")
ITEM( 'o', 0x00FF00, "Orb of Earth", itOrbDigging, IC_ORB, ZERO | IF_EMPATHY, RESERVED, osTerraform,
ITEM( 'o', 0x606060, "Orb of Earth", itOrbDigging, IC_ORB, ZERO | IF_EMPATHY, RESERVED, osTerraform,
"This orb lets you go through living walls. It also has powers in some of the other lands.")
ITEM( 'o', 0x20FFFF, "Orb of Teleport", itOrbTeleport, IC_ORB, ZERO | IF_RANGED, RESERVED, osRanged,
"This orb lets you instantly move to another location on the map. Just click a location which "
@ -591,7 +591,7 @@ ITEM( '$', 0xFFFFFF, "Pearl", itWhirlpool, IC_TREASURE, ZERO, RESERVED, osNone,
ITEM( 'o', 0x306000, "Orb of Friendship", itOrbFriend, IC_ORB, ZERO | IF_SHMUPLIFE | IF_REVIVAL, RESERVED, osFriend,
"This Orb summons a friendly Bomberbird."
)
ITEM( 'o', 0x0070C0, "Orb of Water", itOrbWater, IC_ORB, ZERO | IF_EMPATHY, RESERVED, osTerraform,
ITEM( 'o', 0x000060, "Orb of Water", itOrbWater, IC_ORB, ZERO | IF_EMPATHY, RESERVED, osTerraform,
"This Orb allows your boat to go against the current, "
"and also to go into the land, creating water on the way."
)
@ -706,7 +706,7 @@ ITEM( 'o', 0xFFFF80, "Orb of the Warp", itOrb37, IC_ORB, ZERO, RESERVED, osWarpi
"This Orb creates a warped zone of radius 5 around you, "
"and also allows you to move diagonally in warped zones."
)
ITEM( 'o', 0x8B4513, "Orb of Energy", itOrbEnergy, IC_ORB, ZERO, RESERVED, osPowerUtility,
ITEM( 'o', 0xFFFF80, "Orb of Energy", itOrbEnergy, IC_ORB, ZERO, RESERVED, osPowerUtility,
"This Orb halves the power usage of orbs which cost some "
"charges with each activation. It even affects the "
"one-shot orbs such as Flash or Teleport. If such an activation "
@ -783,7 +783,7 @@ ITEM( 'o', 0xC00040, "Orb of Recall", itOrbRecall, IC_ORB, ZERO, RESERVED, osUti
ITEM( ']', 0x8080FF, "Dodecahedron", itDodeca, IC_TREASURE, ZERO, RESERVED, osNone,
"These dodecahedra made of a mysterious material are the Reptiles' favorite toy."
)
ITEM( 'o', 0xFF0000, "Orb of Vaulting", itOrbDash, IC_ORB, ZERO | IF_RANGED, RESERVED, osFrog,
ITEM( 'o', 0x8080FF, "Orb of Vaulting", itOrbDash, IC_ORB, ZERO | IF_RANGED, RESERVED, osFrog,
"This Orb allows you to jump over an adjacent monster, killing or stunning it. "
"You can only vault in a roughly straight line. "
"Target a cell on the other side to use it."
@ -816,7 +816,7 @@ ITEM( '*', 0x40E0D0, "Turquoise", itHunting, IC_TREASURE, ZERO, RESERVED, osNone
ITEM( '*', 0x009090, "Forgotten Relic", itBlizzard, IC_TREASURE, ZERO, RESERVED, osNone, blizzarddesc)
ITEM( '(', 0xFFE080, "Ancient Weapon", itTerra, IC_TREASURE, ZERO, RESERVED, osNone,
"This ancient weapon is beautifully encrusted with precious gems, but you prefer your own -- it is much lighter.")
ITEM( 'o', 0x00FF00, "Orb of Slashing", itOrbSide1, IC_ORB, ZERO | IF_EMPATHY, RESERVED, osOffensive,
ITEM( 'o', 0x307080, "Orb of Slashing", itOrbSide1, IC_ORB, ZERO | IF_EMPATHY, RESERVED, osOffensive,
"Whenever you attack with this Orb, you also hit the monsters adjacent both to you and the monster you originally attacked.")
ITEM( 'o', 0x30A080, "Orb of the Triangle", itOrbSide2, IC_ORB, ZERO | IF_EMPATHY, RESERVED, osOffensive,
"Whenever you attack with this Orb, you also hit the monsters adjacent to you which are neither adjacent nor opposite to the monster "
@ -836,11 +836,11 @@ ITEM( '!', 0x80FF80, "Sea Glass", itDock, IC_TREASURE, ZERO, RESERVED, osNone, N
ITEM( '*', 0xBBCC99, "Chrysoberyl", itRuins, IC_TREASURE, ZERO, RESERVED, osNone, "Fragment of the past glory.")
ITEM( '*', 0x80FF80, "Monopole", itMagnet, IC_TREASURE, ZERO, RESERVED, osNone, NODESCYET)
ITEM( '!', 0xFF00FF, "Tasty Jelly", itSwitch, IC_TREASURE, ZERO, RESERVED, osNone, "A tasty byproduct of the Jelly Revolution.")
ITEM( 'o', 0xFF0000, "Orb of Phasing", itOrbPhasing, IC_ORB, ZERO, RESERVED, osFrog,
ITEM( 'o', 0xFFFF80, "Orb of Phasing", itOrbPhasing, IC_ORB, ZERO, RESERVED, osFrog,
"This orb lets you pass through walls (one cell wide), and also through monsters, as long as they will not attack you in transit.")
ITEM( 'o', 0xFFFF80, "Orb of Magnetism", itOrbMagnetism, IC_ORB, ZERO, RESERVED, osUtility,
"This orb makes you immediately pickup all the items on adjacent cells.")
ITEM( 'o', 0x20FF20, "Orb of Slaying", itOrbSlaying, IC_ORB, ZERO | IF_EMPATHY, RESERVED, osOffensive,
ITEM( 'o', 0x202020, "Orb of Slaying", itOrbSlaying, IC_ORB, ZERO | IF_EMPATHY, RESERVED, osOffensive,
"This Orb lets you defeat Raiders and other tough single-cell monsters in melee."
)
ITEM( '*', 0xFFA860, "Tiger's Eye", itBrownian, IC_TREASURE, ZERO, RESERVED, osNone,

167
graph.cpp
View File

@ -796,8 +796,8 @@ EX color_t orb_auxiliary_color(eItem it) {
if(it == itOrbFriend || it == itOrbDiscord) return 0xC0C0C0;
if(it == itOrbFrog) return 0xFF0000;
if(it == itOrbImpact) return 0xFF0000;
if(it == itOrbPhasing) return 0xFFFF80;
if(it == itOrbDash) return 0x8080FF;
if(it == itOrbPhasing) return 0xFF0000;
if(it == itOrbDash) return 0xFF0000;
if(it == itOrbFreedom) return 0xC0FF00;
if(it == itOrbPlague) return 0x409040;
if(it == itOrbChaos) return 0xFF00FF;
@ -812,6 +812,17 @@ EX color_t orb_auxiliary_color(eItem it) {
return iinf[it].color;
}
EX color_t orb_inner_color(eItem it) {
if(it == itOrbWater) return 0x0070C0;
if(it == itOrbEnergy) return 0x8B4513;
// if(it == itOrbDash) return 0xFF0000;
if(it == itOrbSide1) return 0x00FF00;
// if(it == itOrbPhasing) return 0xFF0000;
if(it == itOrbDigging) return 0x00FF00;
if(it == itOrbLife) return 0x306000;
return iinf[it].color;
}
EX void draw_ascii(const shiftmatrix& V, char glyph, color_t col, ld size) {
string s = s0 + glyph;
int id = isize(ptds);
@ -1044,43 +1055,56 @@ EX bool drawItemType(eItem it, cell *c, const shiftmatrix& V, color_t icol, int
color_t icol1 = icol;
icol = orb_auxiliary_color(it);
color_t col = darkena(icol, 0, int(0x80 + 0x70 * sinptick(300)));
if(it == itOrbFish)
queuepolyat(Vit * spinptick(1500, 0), cgi.shFishTail, col, PPR::ITEM_BELOW);
if(xch == 'c')
queuepolyat(Vit * spinptick(500, 0), cgi.shMoonDisk, darkena(0x801080, 0, hidden ? 0x20 : 0xC0), prio);
else {
icol1 = orb_inner_color(it);
auto dark = darkena(icol1, 0, inice ? 0x80 : hidden ? 0x20 : (it == itOrbBeauty) ? 0xA0 : 0xC0);
if (it == itOrbBeauty)
auto dark1 = darkena(icol1, 0, inice ? 0x40 : hidden ? 0x10 : (it == itOrbBeauty) ? 0x50 : 0x60);
if(c && GDIM == 2) Vit = rgpushxto0(tC0(Vit));
auto Vit1 = Vit * spin(90 * degree);
if (it == itOrbBeauty) {
queuepolyat(Vit, cgi.shDisk, dark1, prio);
for(int u=0; u<3; u++)
queuepolyat(Vit * spin(2*M_PI / 3 / 3 * u), cgi.shSmallRose, dark, prio);
queuepolyat(Vit1 * spin(2*M_PI / 3 / 3 * u), cgi.shSmallRose, dark, prio);
}
else if (it == itOrbLife) {
queuepolyat(Vit, cgi.shSmallPBody, dark, prio);
queuepolyat(Vit, cgi.shDiskM, dark, prio);
queuepolyat(Vit, cgi.shDisk, dark1, prio);
queuepolyat(Vit1, cgi.shSmallPBody, dark, prio);
queuepolyat(Vit1, cgi.shDiskM, dark, prio);
}
else if (it == itOrbBull) {
queuepolyat(Vit, cgi.shTinyBullBody, dark, prio);
queuepolyat(Vit, cgi.shTinyBullHead, dark, prio);
queuepolyat(Vit, cgi.shTinyBullHorn, dark, prio);
queuepolyat(Vit * Mirror, cgi.shTinyBullHorn, dark, prio);
queuepolyat(Vit, cgi.shDisk, dark1, prio);
queuepolyat(Vit1, cgi.shTinyBullBody, dark, prio);
queuepolyat(Vit1, cgi.shTinyBullHead, dark, prio);
queuepolyat(Vit1, cgi.shTinyBullHorn, dark, prio);
queuepolyat(Vit1 * Mirror, cgi.shTinyBullHorn, dark, prio);
}
else if (it == itOrbFrog) {
queuepolyat(Vit, cgi.shSmallFrogBody, dark, prio);
queuepolyat(Vit, cgi.shSmallFrogRearFoot, dark, prio);
queuepolyat(Vit, cgi.shSmallFrogRearLeg, dark, prio);
queuepolyat(Vit, cgi.shSmallFrogRearLeg2, dark, prio);
queuepolyat(Vit, cgi.shSmallFrogFrontFoot, dark, prio);
queuepolyat(Vit, cgi.shSmallFrogFrontLeg, dark, prio);
queuepolyat(Vit*Mirror, cgi.shSmallFrogRearFoot, dark, prio);
queuepolyat(Vit*Mirror, cgi.shSmallFrogRearLeg, dark, prio);
queuepolyat(Vit*Mirror, cgi.shSmallFrogRearLeg2, dark, prio);
queuepolyat(Vit*Mirror, cgi.shSmallFrogFrontFoot, dark, prio);
queuepolyat(Vit*Mirror, cgi.shSmallFrogFrontLeg, dark, prio);
else if (it == itOrbFrog && false) {
queuepolyat(Vit, cgi.shDisk, dark1, prio);
queuepolyat(Vit1, cgi.shSmallFrogBody, dark, prio);
queuepolyat(Vit1, cgi.shSmallFrogRearFoot, dark, prio);
queuepolyat(Vit1, cgi.shSmallFrogRearLeg, dark, prio);
queuepolyat(Vit1, cgi.shSmallFrogRearLeg2, dark, prio);
queuepolyat(Vit1, cgi.shSmallFrogFrontFoot, dark, prio);
queuepolyat(Vit1, cgi.shSmallFrogFrontLeg, dark, prio);
queuepolyat(Vit1*Mirror, cgi.shSmallFrogRearFoot, dark, prio);
queuepolyat(Vit1*Mirror, cgi.shSmallFrogRearLeg, dark, prio);
queuepolyat(Vit1*Mirror, cgi.shSmallFrogRearLeg2, dark, prio);
queuepolyat(Vit1*Mirror, cgi.shSmallFrogFrontFoot, dark, prio);
queuepolyat(Vit1*Mirror, cgi.shSmallFrogFrontLeg, dark, prio);
}
else if (it == itOrbSpeed) {
queuepolyat(Vit, cgi.shDisk, dark1, prio);
drawSpeed(Vit, 0.3);
}
else if (it == itOrbSpeed)
drawSpeed(Vit, 0.4);
else if (it == itOrbStunning) {
queuepolyat(Vit, cgi.shDisk, dark1, prio);
queuepolyat(Vit, cgi.shDiskM, dark, prio);
for (int i=0; i<5; i++) {
shiftmatrix V2 = Vit * spin(2*M_PI * i / 5 + ptick(300));
@ -1088,38 +1112,51 @@ EX bool drawItemType(eItem it, cell *c, const shiftmatrix& V, color_t icol, int
}
}
else if (it == itOrbDragon) {
queuepolyat(Vit, cgi.shSmallDragonHead, dark, prio);
queuepolyat(Vit, cgi.shSmallDragonNostril, 0xFF, prio);
queuepolyat(Vit*Mirror, cgi.shSmallDragonNostril, 0xFF, prio);
queuepolyat(Vit, cgi.shSmallDragonEyes, 0x60, prio);
queuepolyat(Vit*Mirror, cgi.shSmallDragonEyes, 0x60, prio);
queuepolyat(Vit, cgi.shDisk, dark1, prio);
queuepolyat(Vit1, cgi.shSmallDragonHead, dark, prio);
queuepolyat(Vit1, cgi.shSmallDragonNostril, 0xFF, prio);
queuepolyat(Vit1*Mirror, cgi.shSmallDragonNostril, 0xFF, prio);
queuepolyat(Vit1, cgi.shSmallDragonEyes, 0x60, prio);
queuepolyat(Vit1*Mirror, cgi.shSmallDragonEyes, 0x60, prio);
}
else if (it == itOrbDomination) {
queuepolyat(Vit, cgi.shSmallWormHead, dark, prio);
queuepolyat(Vit, cgi.shSmallWormEyes, 0x60, prio);
queuepolyat(Vit*Mirror, cgi.shSmallWormEyes, 0x60, prio);
queuepolyat(Vit1, cgi.shSmallWormHead, dark, prio);
queuepolyat(Vit1, cgi.shSmallWormEyes, 0x60, prio);
queuepolyat(Vit1*Mirror, cgi.shSmallWormEyes, 0x60, prio);
}
else if (it == itOrbMorph || it == itOrbChaos || it == itOrbPlague) {
queuepolyat(Vit, cgi.shDisk, dark1, prio);
queuepolyat(Vit1, cgi.shSmallTreat, dark, prio);
}
else if (it == itOrbWinter) {
queuepolyat(Vit, cgi.shDisk, dark1, prio);
queuepolyat(Vit1, cgi.shSnowflake, dark, prio);
}
else if (it == itOrbMorph || it == itOrbChaos || it == itOrbPlague)
queuepolyat(Vit, cgi.shSmallTreat, dark, prio);
else if (it == itOrbWinter)
queuepolyat(Vit, cgi.shSnowflake, dark, prio);
else if (it == itOrbLuck)
queuepolyat(Vit, cgi.shSmallerDodeca, dark, prio);
queuepolyat(Vit1, cgi.shSmallerDodeca, dark, prio);
else if (it == itOrbAether) {
queuepolyat(Vit, cgi.shHalfDisk, dark, prio);
queuepolyat(Vit*Mirror, cgi.shHalfDisk, 0xFF, prio);
queuepolyat(Vit, cgi.shHalfHumanoid, dark, prio);
queuepolyat(Vit*Mirror, cgi.shHalfHumanoid, 0xFF, prio);
queuepolyat(Vit1, cgi.shHalfDisk, dark, prio);
queuepolyat(Vit1*Mirror, cgi.shHalfDisk, 0xFF, prio);
queuepolyat(Vit1*MirrorX, cgi.shHalfHumanoid, dark, prio);
queuepolyat(Vit1*Mirror*MirrorX, cgi.shHalfHumanoid, 0xFF, prio);
}
else if (it == itOrbFlash)
queuepolyat(Vit, cgi.shFlash, dark, prio);
else if (it == itOrbMatter || it == itOrbStone)
queuepolyat(Vit, cgi.shDiskSq, dark, prio);
queuepolyat(Vit1, cgi.shFlash, dark, prio);
else if (it == itOrbMatter || it == itOrbStone) {
queuepolyat(Vit, cgi.shDisk, dark1, prio);
queuepolyat(Vit1, cgi.shDiskSq, dark, prio);
}
else if (it == itOrbSummon) {
queuepolyat(Vit, cgi.shHeptagon, dark, prio);
queuepolyat(Vit, cgi.shHeptagram, dark, prio);
queuepolyat(Vit1, cgi.shHeptagon, dark, prio);
queuepolyat(Vit1, cgi.shHeptagram, dark, prio);
}
else if (it == itOrbSafety) {
queuepolyat(Vit, cgi.shDisk, dark, prio);
dynamicval<color_t> p(poly_outline, dark);
queuepolyat(Vit1, cgi.shHeptagram, 0, prio);
}
else {
bool jump = (it == itOrbPhasing || it == itOrbDash || it == itOrbFrog);
auto shape = (it == itOrbFriend) ? &cgi.shTinyBird :
(it == itOrbSide1) ? &cgi.shSmallPSword :
(it == itOrbDigging) ? &cgi.shSmallPickAxe :
@ -1127,7 +1164,7 @@ EX bool drawItemType(eItem it, cell *c, const shiftmatrix& V, color_t icol, int
(it == itOrbThorns) ? &cgi.shSmallHedgehogBlade :
(it == itOrbSide2 || it == itOrb37 || it == itOrbLava) ? &cgi.shDiskT :
(it == itOrbGravity) ? &cgi.shTinyArrow :
(it == itOrbSafety || it == itOrbFreedom || it == itOrbRecall) ? &cgi.shDiskSq :
(it == itOrbFreedom || it == itOrbRecall) ? &cgi.shDiskSq :
(it == itOrbEnergy) ? &cgi.shHalfDisk :
(it == itOrbSpace) ? &cgi.shSmallPirateHook :
(it == itOrbChoice || it == itOrbMirror || it == itOrbMagnetism || it == itOrbEmpathy || it == itOrbDiscord) ? &cgi.shEccentricDisk :
@ -1140,36 +1177,38 @@ EX bool drawItemType(eItem it, cell *c, const shiftmatrix& V, color_t icol, int
(it == itOrbWoods) ? &cgi.shTreeIcon :
(it == itOrbNature) ? &cgi.shLeafIcon :
(it == itOrbIllusion || it == itOrbInvis || it == itOrbTeleport) ? &cgi.shHumanoid :
(it == itOrbPhasing || it == itOrbDash) ? &cgi.shDiskSegment :
jump ? &cgi.shDiskSegment :
NULL;
queuepolyat(Vit, cgi.shDisk, dark, prio);
bool reversed = (shape == &cgi.shTreeIcon || shape == &cgi.shHumanoid);
bool left90 = (shape == &cgi.shLeafIcon || shape == &cgi.shLightningBolt);
if (shape)
queuepolyat(Vit, *shape, (it == itOrbInvis || it == itOrbTeleport) ? 0x20 : 0x80, prio);
queuepolyat(reversed ? Vit1 * MirrorX : left90 ? Vit1 * spin(-90*degree) : Vit1, *shape, (it == itOrbInvis || it == itOrbTeleport) ? 0x20 : 0x80, prio);
if (it == itOrbSide1 || (shape == &cgi.shEccentricDisk && it != itOrbDiscord))
queuepolyat(Vit*Mirror, *shape, 0x80, prio);
if (it == itOrbPhasing || it == itOrbDash || it == itOrbEnergy)
queuepolyat(Vit*Mirror, *shape, col, prio);
queuepolyat(Vit1*Mirror, *shape, 0x80, prio);
if (jump || it == itOrbEnergy)
queuepolyat(Vit1*Mirror, *shape, col, prio);
if (it == itOrbIntensity || it == itOrbImpact)
queuepolyat(Vit, cgi.shDiskM, 0x80, prio);
queuepolyat(Vit1, cgi.shDiskM, 0x80, prio);
if (it == itOrbHorns) {
queuepolyat(Vit, cgi.shSmallBullHead, 0x80, prio);
queuepolyat(Vit, cgi.shSmallBullHorn, 0x80, prio);
queuepolyat(Vit*Mirror, cgi.shSmallBullHorn, 0x80, prio);
queuepolyat(Vit1, cgi.shSmallBullHead, 0x80, prio);
queuepolyat(Vit1, cgi.shSmallBullHorn, 0x80, prio);
queuepolyat(Vit1*Mirror, cgi.shSmallBullHorn, 0x80, prio);
}
if (it == itOrbUndeath) {
dark = darkena(minf[moFriendlyGhost].color, 0, inice ? 0x80 : hidden ? 0x20 : 0xC0);
queuepolyat(Vit, cgi.shMiniGhost, dark, prio);
queuepolyat(Vit, cgi.shMiniEyes, 0xFF, prio);
dark = darkena(fghostcolor(c) /* minf[moFriendlyGhost].color */, 0, inice ? 0x80 : hidden ? 0x20 : 0xC0);
queuepolyat(Vit1, cgi.shMiniGhost, dark, prio);
queuepolyat(Vit1, cgi.shMiniEyes, 0xFF, prio);
}
if (it == itOrbSlaying) {
queuepolyat(Vit, cgi.shSmallFlailTrunk, 0x80, prio);
queuepolyat(Vit, cgi.shSmallHammerHead, 0x80, prio);
queuepolyat(Vit1, cgi.shSmallFlailTrunk, 0x80, prio);
queuepolyat(Vit1, cgi.shSmallHammerHead, 0x80, prio);
}
if (it == itOrbShell)
for(int i = 1; i<8; i++) {
queuepolyat(Vit, cgi.shTortoise[i][2], 0x80, prio);
queuepolyat(Vit1, cgi.shTortoise[i][2], 0x80, prio);
if (i>=5 && i<=7)
queuepolyat(Vit*Mirror, cgi.shTortoise[i][2], 0x80, prio);
queuepolyat(Vit1*Mirror, cgi.shTortoise[i][2], 0x80, prio);
}
}
}