diff --git a/PriceTable.md b/PriceTable.md index fec8a8a9f..1f5444b07 100644 --- a/PriceTable.md +++ b/PriceTable.md @@ -82,7 +82,6 @@ be purchased from the store, they have to be found in maps. Item | Price ------------- | ----- Health Nugget | 1200 - Froggy Chair | 1440 H.Tetrahedron | 3000 H.Cube | 8000 Refresher | 160000 @@ -102,3 +101,49 @@ be purchased from the store, they have to be found in maps. T2 Fabricator | 12000 T3 Fabricator | 150000 T4 Fabricator | 1920000 + +#### Collectables + +Items that can sometimes be found in special boxes hidden in secret rooms. When +collected they give credits according to their price. + + Item | Price + ------------- | ----- + Nutatco Bar | 200 + Frispy Corn | 500 + Hoagie | 800 + PISS Whiskey | 1200 + Froggy Chair | 1440 + Cat C. Poster | 1500 + MMiaSR Vol.1 | 2000 + MMiaSR Vol.2 | 2000 + MMiaSR Vol.3 | 2000 + Akari Proj. | 3000 + Lithium Vol.1 | 3500 + Love Signals | 4000 + Mashiro Plush | 5000 + BRC Debut LP | 6000 + Hege Cactus | 8000 + Raidemin Fig. | 9000 + +The following unlock when playing Heretic and up. + + Item | Price + ------------- | ----- + Quartz Flask | 4000 + Demo Plush | 6400 + Doomguy Fig. | 9000 + Firemace | 10000 + Saya Bean | 12000 + Tome of Power | 16000 + +The following unlock when playing Hexen and up. + + Item | Price + ------------- | ----- + Peach Juice | 400 + Milk Breads | 900 + Kirin Manga | 1600 + Puzzle Book | 2500 + Kirin Plush | 10000 + Obelisk | 24000 diff --git a/gldefs.chancebox b/gldefs.chancebox new file mode 100644 index 000000000..c8aac0202 --- /dev/null +++ b/gldefs.chancebox @@ -0,0 +1,20 @@ +HardwareShader Texture "models/Chancebox.png" +{ + Shader "shaders/glsl/Shinemask_bright.fp" + Texture "masktex" "models/Chancebox_mask.png" + Texture "envtex" "models/silvermap.png" + Texture "brighttex" "models/Chancebox_bright.png" +} + +PointLight CHANCELIGHT +{ + Color 1.0 0.7 0.2 + Size 50 + Offset 0 16 0 + Attenuate 1 +} + +Object Chancebox +{ + Frame "XZW2" { light "CHANCELIGHT" } +} diff --git a/language.def_menu b/language.def_menu index 60fad0ee6..4e93e414b 100644 --- a/language.def_menu +++ b/language.def_menu @@ -220,6 +220,7 @@ SWWM_RADIOTAB = "Radio"; SWWM_GAMETAB = "Games"; SWWM_TRADETAB = "Trading"; SWWM_TRADEFULL = "They can't hold more of that"; +SWWM_TRADEFAIL = "You can't trade this item"; SWWM_NOTRADE = "(no units found nearby for trade)"; SWWM_TRADETO = "Sent to"; SWWM_TRADEFROM = "Received from"; diff --git a/language.es_menu b/language.es_menu index 719d61d1d..50d8aba73 100644 --- a/language.es_menu +++ b/language.es_menu @@ -216,6 +216,7 @@ SWWM_NOSTORE = "(no queda nada que comprar)"; SWWM_GAMETAB = "Juegos"; SWWM_TRADETAB = "Intercambio"; SWWM_TRADEFULL = "No puede llevar más de eso"; +SWWM_TRADEFAIL = "No puedes enviar este item"; SWWM_NOTRADE = "(no hay unidades con las que intercambiar)"; SWWM_TRADETO = "Enviado a"; SWWM_TRADEFROM = "Recibido de"; diff --git a/language.version b/language.version index 375829fb4..1e19e85f2 100644 --- a/language.version +++ b/language.version @@ -1,2 +1,2 @@ [default] -SWWM_MODVER="\chSWWM \cwGZ\c- r491 (Mon 17 Aug 00:05:48 CEST 2020)"; +SWWM_MODVER="\chSWWM \cwGZ\c- r492 (Mon 17 Aug 17:58:15 CEST 2020)"; diff --git a/menudef.txt b/menudef.txt index 5d6a9600a..0323e321b 100644 --- a/menudef.txt +++ b/menudef.txt @@ -170,7 +170,7 @@ OptionMenu "SWWMCreditsMenu" StaticText " " StaticText "$SWWM_CTHANK", "Red" StaticText " " - StaticText "Marrub, Sink, Ribonucleic Asshat", "Heliotrope" + StaticText "Marrub, Ribonucleic Asshat", "Heliotrope" StaticText "(愛してる ♥)", "BlushPink" StaticText " " StaticText "KynikossDragonn", "Gold" diff --git a/modeldef.chancebox b/modeldef.chancebox new file mode 100644 index 000000000..167085ef1 --- /dev/null +++ b/modeldef.chancebox @@ -0,0 +1,53 @@ +Model "Chancebox" +{ + Path "models" + Model 0 "Chancebox_d.3d" + Skin 0 "Chancebox.png" + Scale 0.25 0.25 0.25 + AngleOffset -90 + ZOffset 16 + USEACTORPITCH + USEACTORROLL + + FrameIndex XZW1 A 0 0 + // deploy + FrameIndex XZW2 A 0 8 + FrameIndex XZW2 B 0 9 + FrameIndex XZW2 C 0 10 + FrameIndex XZW2 D 0 11 + FrameIndex XZW2 E 0 12 + FrameIndex XZW2 F 0 13 + FrameIndex XZW2 G 0 14 + FrameIndex XZW2 H 0 15 + FrameIndex XZW2 I 0 16 + FrameIndex XZW2 J 0 17 + FrameIndex XZW2 K 0 18 + FrameIndex XZW2 L 0 19 + FrameIndex XZW2 M 0 20 + FrameIndex XZW2 N 0 21 + FrameIndex XZW2 O 0 22 + FrameIndex XZW2 P 0 23 + FrameIndex XZW2 Q 0 24 +} +Model "ChanceboxTop" +{ + Path "models" + Model 0 "Chancebox_Top_d.3d" + Skin 0 "Chancebox.png" + Scale 0.25 0.25 0.25 + AngleOffset -90 + ZOffset 4 + + FrameIndex XZW1 A 0 0 +} +Model "ChanceboxSide" +{ + Path "models" + Model 0 "Chancebox_Side_d.3d" + Skin 0 "Chancebox.png" + Scale 0.25 0.25 0.25 + AngleOffset -90 + ZOffset 16 + + FrameIndex XZW1 A 0 0 +} diff --git a/modeldef.funstuff b/modeldef.funstuff new file mode 100644 index 000000000..9d4d3dc5a --- /dev/null +++ b/modeldef.funstuff @@ -0,0 +1,13 @@ +Model "FroggyChair" +{ + Path "models" + + Model 0 "ASmallPriceToPay_d.3d" + Skin 0 "ASmallPriceToPay.png" + Scale 0.14 0.14 0.18 + ZOffset 16 + AngleOffset -90 + ROTATING + + FrameIndex XZW1 A 0 0 +} diff --git a/modeldef.misc b/modeldef.misc index 68906b424..7b2294514 100644 --- a/modeldef.misc +++ b/modeldef.misc @@ -43,18 +43,6 @@ Model "ReflectedBullet" FrameIndex XZW1 A 0 0 } -Model "FroggyChair" -{ - Path "models" - - Model 0 "ASmallPriceToPay_d.3d" - Skin 0 "ASmallPriceToPay.png" - Scale 0.14 0.14 0.18 - AngleOffset -90 - - FrameIndex XZW1 A 0 0 -} - Model "mkBloodDrop" { Path "models/extra" diff --git a/models/Chancebox.png b/models/Chancebox.png new file mode 100644 index 000000000..b8cc4efd7 Binary files /dev/null and b/models/Chancebox.png differ diff --git a/models/Chancebox_Side_a.3d b/models/Chancebox_Side_a.3d new file mode 100644 index 000000000..e5aacfd97 Binary files /dev/null and b/models/Chancebox_Side_a.3d differ diff --git a/models/Chancebox_Side_d.3d b/models/Chancebox_Side_d.3d new file mode 100644 index 000000000..37f5f1aa4 Binary files /dev/null and b/models/Chancebox_Side_d.3d differ diff --git a/models/Chancebox_Top_a.3d b/models/Chancebox_Top_a.3d new file mode 100644 index 000000000..6f4f91b1a Binary files /dev/null and b/models/Chancebox_Top_a.3d differ diff --git a/models/Chancebox_Top_d.3d b/models/Chancebox_Top_d.3d new file mode 100644 index 000000000..13f9d4367 Binary files /dev/null and b/models/Chancebox_Top_d.3d differ diff --git a/models/Chancebox_a.3d b/models/Chancebox_a.3d new file mode 100644 index 000000000..d3de061dc Binary files /dev/null and b/models/Chancebox_a.3d differ diff --git a/models/Chancebox_bright.png b/models/Chancebox_bright.png new file mode 100644 index 000000000..9ab85cf2a Binary files /dev/null and b/models/Chancebox_bright.png differ diff --git a/models/Chancebox_d.3d b/models/Chancebox_d.3d new file mode 100644 index 000000000..b2b6e784e Binary files /dev/null and b/models/Chancebox_d.3d differ diff --git a/models/Chancebox_mask.png b/models/Chancebox_mask.png new file mode 100644 index 000000000..430daa7ad Binary files /dev/null and b/models/Chancebox_mask.png differ diff --git a/models/Lootbox.blend b/models/Lootbox.blend new file mode 100644 index 000000000..7ce387322 Binary files /dev/null and b/models/Lootbox.blend differ diff --git a/sndinfo.txt b/sndinfo.txt index e540e11fd..f9132db29 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -936,6 +936,11 @@ $limit moth/fly 30 fabricator/use sounds/items/makeammo.ogg +chancebox/explode1 sounds/items/lootexpl1.ogg +chancebox/explode2 sounds/items/lootexpl2.ogg +chancebox/explode3 sounds/items/lootexpl3.ogg +$random chancebox/explode { chancebox/explode1 chancebox/explode2 chancebox/explode3 } + menu/activate sounds/hmenu/hmenu1.ogg menu/backup sounds/hmenu/hmenu2.ogg menu/prompt sounds/hmenu/hmenu1.ogg diff --git a/sounds/items/lootexpl1.ogg b/sounds/items/lootexpl1.ogg new file mode 100644 index 000000000..712ce12ce Binary files /dev/null and b/sounds/items/lootexpl1.ogg differ diff --git a/sounds/items/lootexpl2.ogg b/sounds/items/lootexpl2.ogg new file mode 100644 index 000000000..cdc9493e1 Binary files /dev/null and b/sounds/items/lootexpl2.ogg differ diff --git a/sounds/items/lootexpl3.ogg b/sounds/items/lootexpl3.ogg new file mode 100644 index 000000000..9b9b240de Binary files /dev/null and b/sounds/items/lootexpl3.ogg differ diff --git a/zscript/swwm_funstuff.zsc b/zscript/swwm_funstuff.zsc index 51412b6c6..eec0c9f67 100644 --- a/zscript/swwm_funstuff.zsc +++ b/zscript/swwm_funstuff.zsc @@ -2,23 +2,62 @@ Class SWWMCollectable : Inventory abstract { + int avail; + + Property Availability : avail; + + // minimum gametype requirements + enum EAvailability + { + AVAIL_Strife = GAME_Strife, + AVAIL_Hexen = AVAIL_Strife|GAME_Hexen, + AVAIL_Heretic = AVAIL_Hexen|GAME_Heretic, + AVAIL_All = AVAIL_Heretic|GAME_DoomChex + }; + + Default + { + Inventory.PickupSound "menu/buyinv"; + Inventory.Amount 1; + Inventory.MaxAmount 1; + SWWMCollectable.Availability AVAIL_All; + +INVENTORY.UNTOSSABLE; + +INVENTORY.UNDROPPABLE; + +INVENTORY.UNCLEARABLE; + +FLOATBOB; + FloatBobStrength 0.25; + } + override string PickupMessage() + { + return StringTable.Localize(PickupMsg)..String.Format(" \cj(\cg¥\cf%d\cj)\c-",Stamina); + } + override void AttachToOwner( Actor other ) + { + Super.AttachToOwner(other); + // give credit + if ( other.player ) + { + SWWMScoreObj.Spawn(Stamina,other.Vec3Offset(FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8)+other.Height/2),Font.CR_GOLD); + SWWMCredits.Give(other.player,Stamina); + } + } + States + { + Spawn: + XZW1 A -1; + Stop; + } } // April Fools 2020 -Class FroggyChair : Inventory +Class FroggyChair : SWWMCollectable { int cdown; Default { Tag "$T_FROGGY"; - Inventory.PickupSound "misc/p_pkup"; Inventory.PickupMessage "$T_FROGGY"; - Inventory.Amount 1; - Inventory.MaxAmount 1; - +INVENTORY.UNTOSSABLE; - +INVENTORY.UNDROPPABLE; - +INVENTORY.UNCLEARABLE; Stamina 1440; } override void AttachToOwner( Actor other ) @@ -38,10 +77,444 @@ Class FroggyChair : Inventory } if ( cdown > 0 ) cdown--; } +} + +// The other collectables, which will be implemented eventually +/* +Class MMiaSRVol1 : SWWMCollectable +{ + Default + { + Tag "$T_SEXROBOT1"; + Inventory.PickupMessage "$T_SEXROBOT1"; + Stamina 2000; + } +} +Class MMiaSRVol2 : SWWMCollectable +{ + Default + { + Tag "$T_SEXROBOT2"; + Inventory.PickupMessage "$T_SEXROBOT2"; + Stamina 2000; + } +} +Class MMiaSRVol3 : SWWMCollectable +{ + Default + { + Tag "$T_SEXROBOT3"; + Inventory.PickupMessage "$T_SEXROBOT3"; + Stamina 2000; + } +} +Class MothPlushy : SWWMCollectable +{ + Default + { + Tag "$T_MOTHPLUSH"; + Inventory.PickupMessage "$T_MOTHPLUSH"; + Stamina 5000; + } +} +Class BRCDebutLP : SWWMCollectable +{ + Default + { + Tag "$T_BLACKRATS"; + Inventory.PickupMessage "$T_BLACKRATS"; + Stamina 6000; + } +} +Class AkariProject : SWWMCollectable +{ + Default + { + Tag "$T_AKARIPROJECT"; + Inventory.PickupMessage "$T_AKARIPROJECT"; + Stamina 3000; + } +} +Class CatCatcherPoster : SWWMCollectable +{ + Default + { + Tag "$T_CATCATCHER"; + Inventory.PickupMessage "$T_CATCATCHER"; + Stamina 1500; + } +} +Class LoveSignalsCD : SWWMCollectable +{ + Default + { + Tag "$T_LOVESIGNALS"; + Inventory.PickupMessage "$T_LOVESIGNALS"; + Stamina 4000; + } +} +Class NutatcoBar : SWWMCollectable +{ + Default + { + Tag "$T_NUTATCO"; + Inventory.PickupMessage "$T_NUTATCO"; + Stamina 200; + } +} +Class HegeCactus : SWWMCollectable +{ + Default + { + Tag "$T_HEGE"; + Inventory.PickupMessage "$T_HEGE"; + Stamina 8000; + } +} +Class RaideminFig : SWWMCollectable +{ + Default + { + Tag "$T_RAIDEMIN"; + Inventory.PickupMessage "$T_RAIDEMIN"; + Stamina 9000; + } +} +Class FrispyCorn : SWWMCollectable +{ + Default + { + Tag "$T_FRISPYCORN"; + Inventory.PickupMessage "$T_FRISPYCORN"; + Stamina 500; + } +} +Class Hoagie : SWWMCollectable +{ + Default + { + Tag "$T_HOAGIE"; + Inventory.PickupMessage "$T_HOAGIE"; + Stamina 800; + } +} +Class LithiumVol1 : SWWMCollectable +{ + Default + { + Tag "$T_LITHIUM"; + Inventory.PickupMessage "$T_LITHIUM"; + Stamina 3500; + } +} +Class MeetTheSniper : SWWMCollectable +{ + Default + { + Tag "$T_PISS"; + Inventory.PickupMessage "$T_PISS"; + Stamina 1200; + } +} +// Heretic +Class DemoPlush : SWWMCollectable +{ + Default + { + Tag "$T_DEMOPLUSH"; + Inventory.PickupMessage "$T_DEMOPLUSH"; + SWWMCollectable.Availability AVAIL_Heretic; + Stamina 6400; + } +} +Class Firemace : SWWMCollectable +{ + Default + { + Tag "$T_FIREMACE"; + Inventory.PickupMessage "$T_FIREMACE"; + SWWMCollectable.Availability AVAIL_Heretic; + Stamina 10000; + } +} +Class DoomguyFig : SWWMCollectable +{ + Default + { + Tag "$T_DOOMFIG"; + Inventory.PickupMessage "$T_DOOMFIG"; + SWWMCollectable.Availability AVAIL_Heretic; + Stamina 9000; + } +} +Class TomeOfPower : SWWMCollectable +{ + Default + { + Tag "$T_TOMEPOWER"; + Inventory.PickupMessage "$T_TOMEPOWER"; + SWWMCollectable.Availability AVAIL_Heretic; + Stamina 16000; + } +} +Class QuartzFlask : SWWMCollectable +{ + Default + { + Tag "$T_YEFLASK"; + Inventory.PickupMessage "$T_YEFLASK"; + SWWMCollectable.Availability AVAIL_Heretic; + Stamina 4000; + } +} +Class SayaBean : SWWMCollectable +{ + Default + { + Tag "$T_SAYABEAN"; + Inventory.PickupMessage "$T_SAYABEAN"; + SWWMCollectable.Availability AVAIL_Heretic; + Stamina 12000; + } +} +// Hexen +Class PuzzleDesignBook : SWWMCollectable +{ + Default + { + Tag "$T_PUZZLEBOOK"; + Inventory.PickupMessage "$T_PUZZLEBOOK"; + SWWMCollectable.Availability AVAIL_Hexen; + Stamina 2500; + } +} +Class KirinCummies : SWWMCollectable +{ + Default + { + Tag "$T_PEACH"; + Inventory.PickupMessage "$T_PEACH"; + SWWMCollectable.Availability AVAIL_Hexen; + Stamina 400; + } +} +Class MilkBreads : SWWMCollectable +{ + Default + { + Tag "$T_MILKBREAD"; + Inventory.PickupMessage "$T_MILKBREAD"; + SWWMCollectable.Availability AVAIL_Hexen; + Stamina 900; + } +} +Class EyeObelisk : SWWMCollectable +{ + Default + { + Tag "$T_OBELISK"; + Inventory.PickupMessage "$T_OBELISK"; + SWWMCollectable.Availability AVAIL_Hexen; + Stamina 24000; + } +} +Class KirinManga : SWWMCollectable +{ + Default + { + Tag "$T_KIRINMANGA"; + Inventory.PickupMessage "$T_KIRINMANGA"; + SWWMCollectable.Availability AVAIL_Hexen; + Stamina 1600; + } +} +*/ + +// Collectable box (recycling of discarded "chance box" item) +Class Chancebox : Actor +{ + static void SpawnChanceboxes() + { + // TODO the whole damn deal of finding secret sectors and whatnot + // this will be huge, and get called from the event handler on first level load + } + + action void A_DropSomething() + { + Array > candidates; + candidates.Clear(); + for ( int i=0; i)(AllActorClasses[i]); + if ( !c || (c == 'SWWMCollectable') ) continue; + let def = GetDefaultByType(c); + // check that we can collect it in this IWAD + if ( !(gameinfo.gametype&def.avail) ) continue; + candidates.Push(c); + } + let ti = ThinkerIterator.Create("SWWMCollectable"); + SWWMCollectable c; + while ( c = SWWMCollectable(ti.Next()) ) + { + int f = candidates.Find(inv.GetClass()); + if ( f < candidates.Size() ) + candidates.Delete(f); + } + if ( candidates.Size() <= 0 ) + { + // TODO no candidates? just spawn some random loot + Console.Printf("\cg// TODO spawn random loot\c-"); + } + else + { + // pop one at random + let a = Spawn(candidates[Random[Chancebox](0,candidates.Size()-1)],pos); + a.bDROPPED = true; + a.bNOGRAVITY = false; + a.vel.z = FRandom[Chancebox](2,4); + } + int numpt = Random[ExploS](16,32); + for ( int i=0; i40,"BlowUp"); + } + Wait; + BlowUp: + XZW2 A 1 + { + A_SetSize(16,4); + A_QuakeEx(2,2,2,9,0,500,"",QF_RELATIVE|QF_SCALEDOWN,falloff:200,rollIntensity:.2); + A_StartSound("chancebox/explode",CHAN_VOICE); + angle = specialf1; + pitch = roll = 0; + let t = Spawn("ChanceboxTop",Vec3Offset(0,0,32)); + t.angle = angle; + let s1 = Spawn("ChanceboxSide",level.Vec3Offset(pos,(RotateVector((16,0),angle+90),0))); + s1.angle = angle+90; + let s2 = Spawn("ChanceboxSide",level.Vec3Offset(pos,(RotateVector((16,0),angle-90),0))); + s2.angle = angle-90; + A_DropSomething(); + } + XZW2 BCDEFGHIJKLMNO 1; + XZW2 P -1 A_Confetti(); + Stop; } -} \ No newline at end of file +} + +// top side of chancebox, shoots upwards +Class ChanceboxTop : Actor +{ + Default + { + Radius 16; + Height 4; + PROJECTILE; + } + override void PostBeginPlay() + { + Super.PostBeginPlay(); + vel = (0,0,20); + } + States + { + Spawn: + XZW1 A 1 + { + double magvel = vel.length(); + if ( magvel > 0. ) + { + magvel = min(60,magvel*1.2); + vel = vel.unit()*magvel; + } + } + Wait; + Death: + TNT1 A 1 A_SpawnItemEx("ExplodiumBulletImpact"); + Stop; + } +} + +// left/right side of chancebox, shoots forward +Class ChanceboxSide : Actor +{ + Default + { + Radius 16; + Height 32; + PROJECTILE; + } + override void PostBeginPlay() + { + Super.PostBeginPlay(); + vel = (cos(angle)*cos(pitch),sin(angle)*cos(pitch),-sin(pitch))*20; + } + States + { + Spawn: + XZW1 A 1 + { + double magvel = vel.length(); + if ( magvel > 0. ) + { + magvel = min(60,magvel*1.2); + vel = vel.unit()*magvel; + } + } + Wait; + Death: + TNT1 A 1 A_SpawnItemEx("ExplodiumBulletImpact"); + Stop; + } +} diff --git a/zscript/swwm_menu.zsc b/zscript/swwm_menu.zsc index ea2fe77b5..f8b9eeac4 100644 --- a/zscript/swwm_menu.zsc +++ b/zscript/swwm_menu.zsc @@ -590,7 +590,8 @@ Class SWWMKnowledgeBaseMenu : GenericMenu if ( (curtab == TAB_INVENTORY) && (invlist.Size() > 0) && (sel0 < invlist.Size()) ) { // can't use this - if ( invlist[sel0] is 'Ammo' ) return true; + if ( (invlist[sel0] is 'Ammo') || (invlist[sel0] is 'MagAmmo') || (invlist[sel0] is 'SWWMCollectable') ) + return true; let t = new("MenuTransaction"); t.uid = GenTUID(); t.type = MenuTransaction.TT_ITEMUSE; @@ -663,6 +664,14 @@ Class SWWMKnowledgeBaseMenu : GenericMenu } else if ( sub && (sel0 != -1) && (invlist.Size() > 0) ) { + // cannot trade these + if ( invlist[sel1].bUNDROPPABLE || invlist[sel1].bUNTOSSABLE ) + { + MenuSound("menu/noinvuse"); + tmsg = StringTable.Localize("$SWWM_TRADEFAIL"); + tmsgtic = gametic+70; + return true; + } // trade item let t = new("MenuTransaction"); t.uid = GenTUID(); @@ -1698,6 +1707,8 @@ Class SWWMKnowledgeBaseMenu : GenericMenu { let type = (Class)(AllActorClasses[i]); if ( !type ) continue; + // no collectables + if ( type is 'SWWMCollectable' ) continue; // no fabricators outside of hexen if ( !(gameinfo.gametype&GAME_Hexen) && (type is 'AmmoFabricator') ) continue; // skip maxed items @@ -2366,6 +2377,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu else if ( (invlist[i] is 'Health') || (invlist[i] is 'HealthPickup') || (invlist[i] is 'SWWMHealth') ) clscol = Font.CR_RED; else if ( (invlist[i] is 'Armor') || (invlist[i] is 'SWWMSpareArmor') ) clscol = Font.CR_GREEN; else if ( invlist[i] is 'PuzzleItem' ) clscol = Font.CR_LIGHTBLUE; + else if ( invlist[i] is 'SWWMCollectable' ) clscol = Font.CR_FIRE; Screen.DrawText(fnt,clscol,origin.x+xx,origin.y+yy,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_ColorOverlay,(i!=sel0)?Color(96,0,0,0):Color(0,0,0,0)); yy += 16; if ( yy >= 370 )