mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Introducing Uristrunes!
Built crom components, each cult word gets it's own unique appearance, that it adds to the final rune. Correct combinations will glow ever so slightly, the others remain a single colour. The system behind them is a bit more powerful, supporting a full 1023 combinations, although far fewer can be reached in-game (as the system doesn't care about word order, and you can't use enough words to have more than three of the components as part of any rune). With this commit, it compiles, but I haven't quite tested anything in-game, so there might be a followup bugfix. Or there may not.
This commit is contained in:
@@ -592,6 +592,7 @@
|
||||
#include "code\game\magic\archived_book.dm"
|
||||
#include "code\game\magic\library.dm"
|
||||
#include "code\game\magic\musician.dm"
|
||||
#include "code\game\magic\Uristrunes.dm"
|
||||
#include "code\game\magic\cultist\ritual.dm"
|
||||
#include "code\game\magic\cultist\runes.dm"
|
||||
#include "code\game\magic\cultist\talisman.dm"
|
||||
|
||||
131
code/game/magic/Uristrunes.dm
Normal file
131
code/game/magic/Uristrunes.dm
Normal file
@@ -0,0 +1,131 @@
|
||||
|
||||
var/list/word_to_uristrune_table = null
|
||||
|
||||
/proc/word_to_uristrune_bit(word)
|
||||
if(word_to_uristrune_table == null)
|
||||
word_to_uristrune_table = list()
|
||||
|
||||
var/bit = 1
|
||||
var/list/words = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "mgar", "balaq", "karazet", "geeri")
|
||||
|
||||
while(length(words))
|
||||
var/w = pick(words)
|
||||
|
||||
word_to_uristrune_table[w] = bit
|
||||
|
||||
words -= w
|
||||
bit <<= 1
|
||||
|
||||
return word_to_uristrune_table[word]
|
||||
|
||||
|
||||
|
||||
/proc/get_uristrune_cult(word1, word2, word3)
|
||||
var/animated
|
||||
|
||||
if((word1 == wordtravel && word2 == wordself) \
|
||||
|| (word1 == wordjoin && word2 == wordblood && word3 == wordself) \
|
||||
|| (word1 == wordhell && word2 == wordjoin && word3 == wordself) \
|
||||
|| (word1 == wordsee && word2 == wordblood && word3 == wordhell) \
|
||||
|| (word1 == worddestr && word2 == wordsee && word3 == wordtech) \
|
||||
|| (word1 == wordtravel && word2 == wordblood && word3 == wordself) \
|
||||
|| (word1 == wordsee && word2 == wordhell && word3 == wordjoin) \
|
||||
|| (word1 == wordblood && word2 == wordjoin && word3 == wordhell) \
|
||||
|| (word1 == wordhide && word2 == wordsee && word3 == wordblood) \
|
||||
|| (word1 == wordhell && word2 == wordtravel && word3 == wordself) \
|
||||
|| (word1 == wordblood && word2 == wordsee && word3 == wordtravel) \
|
||||
|| (word1 == wordhell && word2 == wordtech && word3 == wordjoin) \
|
||||
|| (word1 == wordhell && word2 == wordblood && word3 == wordjoin) \
|
||||
|| (word1 == wordblood && word2 == wordsee && word3 == wordhide) \
|
||||
|| (word1 == worddestr && word2 == wordtravel && word3 == wordself) \
|
||||
|| (word1 == wordtravel && word2 == wordtech && word3 == wordother) \
|
||||
|| (word1 == wordjoin && word2 == wordother && word3 == wordself) \
|
||||
|| (word1 == wordhide && word2 == wordother && word3 == wordsee) \
|
||||
|| (word1 == worddestr && word2 == wordsee && word3 == wordother) \
|
||||
|| (word1 == worddestr && word2 == wordsee && word3 == wordblood) \
|
||||
|| (word1 == wordself && word2 == wordother && word3 == wordtech) \
|
||||
|| (word1 == wordtravel && word2 == wordother) \
|
||||
|| (word1 == wordjoin && word2 == wordhide && word3 == wordtech) )
|
||||
animated = 1
|
||||
else
|
||||
animated = 0
|
||||
|
||||
var/bits = word_to_uristrune_bit(word1) \
|
||||
| word_to_uristrune_bit(word2) \
|
||||
| word_to_uristrune_bit(word3)
|
||||
|
||||
return get_uristrune(bits, animated)
|
||||
|
||||
|
||||
var/list/uristrune_cache = list()
|
||||
|
||||
/proc/get_uristrune(symbol_bits, animated = 0)
|
||||
var/lookup = "[symbol_bits]-[animated]"
|
||||
|
||||
if(lookup in uristrune_cache)
|
||||
return uristrune_cache[lookup]
|
||||
|
||||
var/icon/I = icon('icons/effects/uristrunes.dmi', "blank")
|
||||
|
||||
for(var/i = 0, i < 10, i++)
|
||||
if(symbol_bits & (1 << i))
|
||||
I.Blend(icon('icons/effects/uristrunes.dmi', "rune-[i]"), ICON_OVERLAY)
|
||||
|
||||
|
||||
I.SwapColor(rgb(0, 0, 0, 100), rgb(100, 0, 0, 200))
|
||||
I.SwapColor(rgb(0, 0, 0, 50), rgb(150, 0, 0, 200))
|
||||
|
||||
for(var/x = 1, x <= 32, x++)
|
||||
for(var/y = 1, y <= 32, y++)
|
||||
var/p = I.GetPixel(x, y)
|
||||
|
||||
if(p == null)
|
||||
var/n = I.GetPixel(x, y + 1)
|
||||
var/s = I.GetPixel(x, y - 1)
|
||||
var/e = I.GetPixel(x + 1, y)
|
||||
var/w = I.GetPixel(x - 1, y)
|
||||
|
||||
if(n == "#000000" || s == "#000000" || e == "#000000" || w == "#000000")
|
||||
I.DrawBox(rgb(200, 0, 0, 200), x, y)
|
||||
|
||||
else
|
||||
var/ne = I.GetPixel(x + 1, y + 1)
|
||||
var/se = I.GetPixel(x + 1, y - 1)
|
||||
var/nw = I.GetPixel(x - 1, y + 1)
|
||||
var/sw = I.GetPixel(x - 1, y - 1)
|
||||
|
||||
if(ne == "#000000" || se == "#000000" || nw == "#000000" || sw == "#000000")
|
||||
I.DrawBox(rgb(200, 0, 0, 100), x, y)
|
||||
|
||||
var/icon/result = icon(I, "")
|
||||
|
||||
result.Insert(I, "", frame = 1, delay = 10)
|
||||
|
||||
if(animated == 1)
|
||||
var/icon/I2 = icon(I, "")
|
||||
I2.MapColors(rgb(0xff,0x0c,0,0), rgb(0,0,0,0), rgb(0,0,0,0), rgb(0,0,0,0xff))
|
||||
I2.SetIntensity(1.04)
|
||||
|
||||
var/icon/I3 = icon(I, "")
|
||||
I3.MapColors(rgb(0xff,0x18,0,0), rgb(0,0,0,0), rgb(0,0,0,0), rgb(0,0,0,0xff))
|
||||
I3.SetIntensity(1.08)
|
||||
|
||||
var/icon/I4 = icon(I, "")
|
||||
I4.MapColors(rgb(0xff,0x24,0,0), rgb(0,0,0,0), rgb(0,0,0,0), rgb(0,0,0,0xff))
|
||||
I4.SetIntensity(1.12)
|
||||
|
||||
var/icon/I5 = icon(I, "")
|
||||
I5.MapColors(rgb(0xff,0x30,0,0), rgb(0,0,0,0), rgb(0,0,0,0), rgb(0,0,0,0xff))
|
||||
I5.SetIntensity(1.16)
|
||||
|
||||
result.Insert(I2, "", frame = 2, delay = 4)
|
||||
result.Insert(I3, "", frame = 3, delay = 3)
|
||||
result.Insert(I4, "", frame = 4, delay = 2)
|
||||
result.Insert(I5, "", frame = 5, delay = 6)
|
||||
result.Insert(I4, "", frame = 6, delay = 2)
|
||||
result.Insert(I3, "", frame = 7, delay = 2)
|
||||
result.Insert(I2, "", frame = 8, delay = 2)
|
||||
|
||||
uristrune_cache[lookup] = result
|
||||
|
||||
return result
|
||||
@@ -1,4 +1,8 @@
|
||||
|
||||
|
||||
var/use_uristrunes = 1
|
||||
|
||||
|
||||
var/wordtravel = null
|
||||
var/wordself = null
|
||||
var/wordsee = null
|
||||
@@ -207,6 +211,10 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
return
|
||||
|
||||
check_icon()
|
||||
if(use_uristrunes)
|
||||
icon = get_uristrune_cult(word1, word2, word3)
|
||||
return
|
||||
|
||||
if(word1 == wordtravel && word2 == wordself)
|
||||
icon_state = "2"
|
||||
src.icon += rgb(0, 0 , 255)
|
||||
|
||||
BIN
icons/effects/uristrunes.dmi
Normal file
BIN
icons/effects/uristrunes.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
Reference in New Issue
Block a user