Jump to content

Demonic God

Member
  • Posts

    257
  • Joined

  • Last visited

  • Days Won

    12

Everything posted by Demonic God

  1. A bit late... o well. I'm not even sure why I made this, since most contestant drew their own thing xD. This is a tool to visualize what you made, and the scores you get... provided that it doesn't throw an error. For those that likes tinkering around, this might be fun for you to poke around with from graphics import * BORDER_THICKNESS = 3 SQUARE_THICKNESS = 50 SHAPES = { 'T_SHAPE':{ frozenset({(0,0,0),(0,1,0),(0,2,0),(0,1,1)}), frozenset({(0,0,0),(0,0,1),(0,0,2),(0,1,1)}), frozenset({(0,0,1),(0,1,1),(0,2,1),(0,1,0)}), frozenset({(0,1,0),(0,1,1),(0,1,2),(0,0,1)}) }, 'L_SHAPE':{ frozenset({(0,0,0),(0,1,0),(0,2,0),(0,0,1)}), frozenset({(0,0,0),(0,1,0),(0,2,0),(0,2,1)}), frozenset({(0,0,0),(0,0,1),(0,0,2),(0,1,0)}), frozenset({(0,0,0),(0,0,1),(0,0,2),(0,1,2)}), frozenset({(0,0,1),(0,1,1),(0,2,1),(0,0,0)}), frozenset({(0,0,1),(0,1,1),(0,2,1),(0,2,0)}), frozenset({(0,1,0),(0,1,1),(0,1,2),(0,0,0)}), frozenset({(0,1,0),(0,1,1),(0,1,2),(0,0,2)}) }, 'Z_SHAPE':{ frozenset({(0,0,0),(0,1,0),(0,1,1),(0,2,1)}), frozenset({(0,0,1),(0,1,1),(0,1,0),(0,2,0)}), frozenset({(0,0,0),(0,0,1),(0,1,1),(0,1,2)}), frozenset({(0,1,0),(0,1,1),(0,0,1),(0,0,2)}) }, 'I_SHAPE':{ frozenset({(0,0,0),(0,1,0)}), frozenset({(0,0,0),(0,0,1)}) }, 'DOT_SHAPE':{ frozenset({(0,0,0)}) } } POINTS = { 'Z_SHAPE': 4, 'T_SHAPE': 3, 'L_SHAPE': 3, 'I_SHAPE': 1, 'DOT_SHAPE': 0 } COLORS = { 'Z_SHAPE': 'red', 'T_SHAPE': 'green', 'L_SHAPE': 'blue', 'I_SHAPE': 'purple', 'DOT_SHAPE': 'yellow', 'BORDER': 'black' } def rotateFlat(shape): o = [] #re-order detect = [max(x) for x in [*zip(*shape)]] if detect[0] == 0: return shape # already flat elif detect[1] == 0: o = [1,0,2] elif detect[2] == 0: o = [2,1,0] else: raise Exception('Nonrotatable shape') return {(x[o[0]],x[o[1]],x[o[2]]) for x in shape} def getSimplifiedShape(index, matrix): tiles = [] for x,surface in enumerate(matrix): for y,line in enumerate(surface): for z,point in enumerate(line): if point == index: tiles.append([x,y,z]) simplifier = [min(x) for x in [*zip(*tiles)]] #Transpose to find min x y z simplified_shape = {(tile[0] - simplifier[0], tile[1] - simplifier[1], tile[2] - simplifier[2]) for tile in tiles} simplified_shape = rotateFlat(simplified_shape) return simplified_shape def getShape(index, matrix): simplified_shape = getSimplifiedShape(index, matrix) for SHAPE in SHAPES: if simplified_shape in SHAPES[SHAPE]: return SHAPE else: print(f'Cannot find shape {simplified_shape}') raise Exception() def getColor(matrix, layer, x, y): if isBorder(x,y): return COLORS['BORDER'] elif isInnerBorder(x,y): if _isInnerBorder(x) and not _isInnerBorder(y): x, y = getIndex(x,y) index_1 = matrix[layer][y][x-1] index_2 = matrix[layer][y][x] elif _isInnerBorder(y) and not _isInnerBorder(x): x, y = getIndex(x,y) index_1 = matrix[layer][y-1][x] index_2 = matrix[layer][y][x] else: return COLORS['BORDER'] if index_1 == index_2: shape = getShape(index_1, matrix) return COLORS[shape] else: return COLORS['BORDER'] else: x, y = getIndex(x,y) index = matrix[layer][y][x] shape = getShape(index, matrix) return COLORS[shape] def draw(matrix, offset_x = 30, offset_y = 30): size = BORDER_THICKNESS * 9 + SQUARE_THICKNESS * 8 window = GraphWin(width = size * 3 + offset_x * 4, height = size + offset_y * 2 + 40) indexSet = set() score = 0 for surface in matrix: for line in surface: for index in line: if index in indexSet: continue else: indexSet.add(index) score += POINTS[getShape(index, matrix)] message = Text(Point(window.getWidth() / 2 - 50, window.getHeight() - 40), f'Score: {score}') message.setTextColor('black') message.setSize(20) message.draw(window) for layer in range(3): for y in range(size): x = 0 while x < size: color = getColor(matrix, layer, x, y) point_a = Point(x + offset_x * (layer + 1) + layer * size, y + offset_y) if color != COLORS['BORDER']: if _isInnerBorder(x): length = BORDER_THICKNESS else: length = SQUARE_THICKNESS elif _isBorder(y): length = size elif _isInnerBorder(x) or _isBorder(x): length = BORDER_THICKNESS else: length = SQUARE_THICKNESS point_b = Point(point_a.getX() + length , point_a.getY()) x += length line = Line(point_a, point_b) line.setFill(color) line.draw(window) def _isBorder(x): return x < BORDER_THICKNESS or x >= ((BORDER_THICKNESS + SQUARE_THICKNESS) * 8) def isBorder(x, y): return _isBorder(x) or _isBorder(y) def _isInnerBorder(x): if _isBorder(x): return False while x >= BORDER_THICKNESS + SQUARE_THICKNESS: x -= BORDER_THICKNESS + SQUARE_THICKNESS if _isBorder(x): return True return False def isInnerBorder(x,y): if isBorder(x,y): return False return _isInnerBorder(x) or _isInnerBorder(y) def getIndex(x,y): return (x//(BORDER_THICKNESS + SQUARE_THICKNESS), y//(BORDER_THICKNESS + SQUARE_THICKNESS)) testArr = [ [ [0, 0, 1, 1, 1, 2, 2, 2], [3, 0, 0, 1, 4, 13, 14, 2], [3, 17, 18, 4, 4, 21, 22, 23], [24, 25, 26, 27, 4, 29, 30, 31], [32, 33, 34, 35, 36, 37, 38, 39], [40, 41, 42, 43, 44, 45, 46, 47], [48, 49, 50, 51, 52, 53, 54, 55], [56, 57, 58, 59, 60, 61, 62, 63] ], [ [64, 65, 66, 67, 68, 69, 70, 71], [72, 73, 74, 75, 76, 77, 78, 79], [80, 81, 82, 83, 84, 85, 86, 87], [88, 89, 90, 91, 92, 93, 94, 95], [96, 97, 98, 99, 100, 101, 102, 103], [104, 105, 106, 107, 108, 109, 110, 111], [112, 113, 114, 115, 116, 117, 118, 119], [120, 121, 122, 123, 124, 125, 126, 127] ], [ [128, 129, 130, 131, 132, 133, 134, 135], [136, 137, 138, 139, 140, 141, 142, 143], [144, 145, 146, 147, 148, 149, 150, 151], [152, 153, 154, 155, 156, 157, 158, 159], [160, 161, 162, 163, 164, 165, 166, 167], [168, 169, 170, 171, 172, 173, 174, 175], [176, 177, 178, 179, 180, 181, 182, 183], [184, 185, 186, 187, 188, 189, 190, 191] ] ] # draw(testArr) f = open("blocks.txt", "r", encoding="utf-8") matrix = [] layer = [] for line in f: line.replace(';',' ').replace(',',' ') data = [int(x) for x in line.split()] if len(data) == 0: continue assert len(data) == 8 layer.append(data) if len(layer) == 8: matrix.append(layer) layer = [] f.close() draw(matrix) input("Enter any key to quit.") You'd need to have python + graphics.py installed. Make a text file, name it "blocks.txt", and it *should* work. Here's an example of how "blocks.txt" should look like 0 0 1 1 1 2 2 2 3 0 0 1 4 13 14 2 3 17 18 4 4 21 22 23 24 25 26 27 4 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 If you don't get any of this... well, it's just a tool ~~that I made after Yoshi submitted numbers~~ that is kinda used to grade stuff. I'll be making the grading script for the rock-paper-scissor game later, for those who wants to poke around with that too
  2. And you call my quests evil... :3 Lashtal is gonna have another field day xD
  3. I'd like to ask for clarification on a few things: How complex could the trigger condition be? How complex could the mark effect be? How much is... power? Especially for things that could be more complex than just buff/debuff I'd assume enemy more correctly stands for (targets), as some abilities targets friendly creatures? Can the targeting (all / weak / strong / random / etc.) be used as a criteria?
  4. Revigorate Description: Regenerate more than just vitality! markforcritabilities|mark=revigorate;power=15%;duration=20;deadoralive=onlyliving;targets=e;target_abilities=regenerate
  5. Wild strikes Description: Killing more than one enemy with a single haotic strike empowers the creature depending on the amount of enemies killed. markforcritabilities|mark=wildstrikes;power=10/20/40/60/100%;duration=1;deadoralive=onlyliving;targets=a;target_abilities=haotic strike
  6. forgot to sign up, I hope this isn't too late @@
  7. Here's my 2cent, given that heat reduction was my first priority (along with crit slot to fuel that) when I first got to MP5. In particular, other than popes, there's just another method of losing heat easily - Regen. This is a rather intricate method, can be unreliable at times, but could yield result significant for those without hundreds of thousands of max VE. 200-300k loss before erolin bonus can be achieved reliably, based on my personal experience. If a feature were to be developed as yet another alternative, and be usable, it should be competitive as an option - convenience vs costs. Since we're getting a lot of coins from just logging in, using coins for losing heat would certainly be feasible. To balance it out with the above 2 methods, I'd suggest paying 1SC to lose heat equal to a multiple of your max VE, but no less than a certain amount (for example, 400% of your max VE, no less than 1 Million heat - to account for the effect of Erolin heat). This amount could be tweaked for lower MP, if needed.
  8. It might have certainly been overlooked purposefully, I'd just like to raise concerns about it Exclusion of, even a single creature, for balance purposes, should imply that a creatures could be excluded, for balance purposes. I'd even go further, and saying for the sake of a tournament, it makes even more sense to ban the more limited creature - rather than the commonly accessible one: A creature that all can possess hardly provide an advantage to any specific individual.
  9. I'd say that banning the Moss but not the other Aia creation (Berserker I believe - that does aimshot to all allied creature) is a bit unfair. Both are cheesy in their ability to make a ritual lose. One is just more accessible.
  10. I'm in. I'll likely be a farming target only, but it's interesting to see the stronger guys duke it out in a massive match of APM and internet speed
  11. I announce that Lady @Aia del Manahas submitted a correct solution, being the first to done so, 28 minutes after the quest was posted! Amazing, and congratulations!
  12. so... basically, the requirement is that you have access to a method to revive Granos / could make the revival happen?
  13. seems interesting I'm in Any rules/limitation on crits?
  14. The representation of nothing as a concept. An idea that revolutionized the world (invention of zero, mathematical concept). Something that's always there, yet could easily boggles the mind of those unaware of it. The opposite of yet another mind twisting concept: infinity.
  15. The other day, I headed to the Golemus Laboratory, for some experimentation. Tinkering around, messing with the Aramors to-be-filled with AI cores. Alas, such work is boring! So boring indeed, that half way through, as my attention span dictate... I decided to make a very, very bouncy ball. A drop of blood, glue, rare minerals... and Voila! Throwing this thing in open space, would be unwise. Not that it would do any damages, but I prefer to not lose my shiny possessions. So, I had a small room built, and gave it a throw. Alas... I did not expect it to bounce so vigorously, the damn thing bounced so well, catching it would be impossible! As I ponder upon this dilemma, miraculously, the ball bounced straight back at me. Damn thing almost broke a tooth of mine, but I did managed to catch it. Impressed by this outcome, I laid down my pen and paper, and begins working out, how exactly did the ball bounce back to exactly where I was? And how many times, did that damn thing bounced around? So, I ask for your help, to determine the numbers of bounces the ball made. Here are the details of how it all went down - according to my memory: The ball somehow ignored gravity, and flew parallel to the ground at all times I started at the South-West corner of the room The ball was thrown perfectly North-East. (45 degree) The room is almost a square, of dimension 2020 cm x 2021 cm. I fully intend to sue the contractor for this error. Summarized in mathematical terms: You throw a perfectly bouncy ball in a rectangle (2020 x 2021) room from a corner The ball was thrown at a 45 degree angle The ball ignored gravity, and flew parallel to the ground at all time How many bounces did the ball make before it return to your location? Rewards: Most elegant solution - 1 Anni crit Most creative/unorthodox solution - 1 Anni crit Fastest correct solution - 1 GC All correct solutions - 5SC + 1 spell stone Lock in chaos Acoustic Remains Teleport to Papercabin
  16. I'd try to attend, timezones be damned Sorry beforehand if I missed it.
  17. Just recently, I passed by the Tempest Fort, and noticed a worrying issue. Moss! Some strange moss had invaded the walls. Its root penetrated the solid stone, and weakened its integrity! Unacceptable! However, it seems that the stones available to patch up the walls is in short supply, and on top of that, they naturally form in difficult shapes. Thus, I'd like to employ your help, to find a way, to most efficiently replace the damaged walls. The wall to be replaced could be modeled as a solid slate, of dimensions 8x8x3. There are various types of stones available: Z, T and L shaped stones (volume of 4) I shaped stones (volume of 2, or 1x2) Singular, dot/square ( . ) shape stones, volume of 1 Your goal is to find a way to assemble the 8x8x3 walls using these materials. In general, based on scarcity of materials, I've assigned the tiles the following points: Z shape: 4 points T and L: 3 points I: 1 points dot: 0 points The winning designs shall be rewarded handsomely. In particular: The design with the highest score shall win 3 gold coins, and an anni creature The second place, would be 2 gold coins, along with an anni creature The third place, would be receiving 1 gold coin, and an anni creature However, there's more! I look not only for the design that has high point values. There's more to this challenge, than simply finding a single solution with a good point value. Artistry and beauty is a major aspect of masonry. I look also for designs that amazes me, regardless of how well they perform in the actual competition. In particular: Designs with a certain mathematical "beauty" - whenever that be an absolute order, scalability, or an extremely chaotic, complex yet efficient pattern Designs with fantastic demonstration and illustration, demonstrating a huge amount of effort & care Etc. In general, anything that amazes me greatly, would be rewarded with 1 WP. Your design does not need to achieve a high score to a WP, but a high score itself could certainly amazes me. There's no limited to how many winners, but there's no guarantee that there would be a winner as well. Deadlines and submission guidelines: Deadline: You have until the end of anniversary (29th) to submit your design Submission guideline: You can submit your design in any manner that you like. Rather, coming up with a unique design AND presentation is part of the quest, at least for the WP portion For clarity, I'd ask that you make three 8x8 squares and fill it with numbers. Squares with the same number should be occupied by the same "stone". You may also submit just this three squares as your submission. Below are the shapes, in image form (with a thickness of 1), as I've been notified that there are confusions to the shapes. They're somewhat similar to tetris shape, as you can tell.
×
×
  • Create New...