diff --git a/WORKLOG.md b/WORKLOG.md index db422af8..c9ebc114 100644 --- a/WORKLOG.md +++ b/WORKLOG.md @@ -17,10 +17,28 @@ - Speed (e.g. boots) - Life (e.g. heart) - * represent construct colours during game phase (coloured border?) +* audio + * background music + * animation effects + * vbox combine / buy / equip etc + +* reclaim change colour from red (clashes with red items) + +* represent construct colours during game phase (coloured border?) +* supporter gold name in instance (anyone whos put any money into game) + +* Give the bots some ai / make stronger so its a challenge for new people to beat + - train a few games of with some round losses to get them into the game + +* Speed up animations slightly (3s per normal event too long) + - Improve combat text to start at the opposite end of construct and float towards health stats + - Show combat text for skill cast possibly? Watch some pokemans etc for modern combat smoothing ## SOON -* supporter gold name in instance (anyone whos put any money into game) + +* vbox + inventory smart combine select + - rework combine button to universal buy + - becomes combine with buy cost when valid combo selected * buy from preview if you have the required bases in vbox / inventory - a "buy" becomes available under the current info / preview section @@ -29,12 +47,29 @@ - e.g. an equipped white power spec could be upgraded by clicking under preview - if this was added we could reduce inventory size to 3 and rearrange vbox (see mockup img) +* reduce inventory size and consolidate vbox and inventory on left side + * change cooldowns to delay & recharge - delay is cooldown before skill can first be used - recharge is cooldown after using skill - every x speed reduces delay of skills -* audio +* combo rework + - reduce number of items for creating t2/t3 items from 3 -> 2 + - add lost complexity by adding skill spec items + - Created by combining a skill with corresponding spec + e.g. + - Strike + PowerRR -> StrikePower (Will be the power symbol with strike text under) + - Construct does Y% more damage with Strike + - Strike + SpeedRR -> StrikeSpeed (strike has Y% more speed) + - Strike + LifeRR -> StrikeLife (Strike recharges X% of damage as red life) + + - Can also work as module style passive keystones + * troll life -> dmg -> Invert life spec? + * prince of peace + * bonus healing / no damage -> Heal power spec? + * fuck magic -> Some sort of reflect spec? + * empower on ko -> Amplify + Power spec * elo + leaderboards * reconnect based on time delta @@ -57,16 +92,6 @@ * remove names so games/instances are copy * consolidate game and instance -* combo rework - - reduce number of items for creating t2/t3 items from 3 -> 2 - - add lost complexity by adding skill spec items - - Created by combining a skill with corresponding spec - e.g. - - Strike + PowerRR -> StrikePower (Will be the power symbol with strike text under) - - Construct does Y% more damage with Strike - - Strike + SpeedRR -> StrikeSpeed (strike has Y% more speed) - - Strike + LifeRR -> StrikeLife (Strike recharges X% of damage as red life) - * Energy generators / spenders - Current skills generate team wide red / blue / green energy - New special skill base consumes team energy to do "special" powerful moves @@ -78,12 +103,7 @@ * mnml tv -* modules - * troll life -> dmg - * prince of peace - * bonus healing / no damage - * fuck magic - * empower on ko + ## $$$ * Items diff --git a/client/assets/styles/instance.less b/client/assets/styles/instance.less index b94ad2d9..e54bf31e 100644 --- a/client/assets/styles/instance.less +++ b/client/assets/styles/instance.less @@ -162,6 +162,23 @@ } .construct-list { + button { + &.highlight { + color: black; + background: @white; + // border: 1px solid @white; (this bangs around the vbox) + + // overwrite the classes on white svg elements + svg { + stroke-width: 0.75em; + } + + .white { + stroke: black; + } + } + } + .name { grid-area: name; margin-bottom: 0.5em; diff --git a/client/src/actions.jsx b/client/src/actions.jsx index ebec075d..87d0cf51 100644 --- a/client/src/actions.jsx +++ b/client/src/actions.jsx @@ -16,7 +16,6 @@ export const setInstanceChat = value => ({ type: 'SET_INSTANCE_CHAT', value }); export const setActiveItem = value => ({ type: 'SET_ACTIVE_VAR', value }); export const setActiveSkill = (constructId, skill) => ({ type: 'SET_ACTIVE_SKILL', value: constructId ? { constructId, skill } : null }); -export const setCombiner = value => ({ type: 'SET_COMBINER', value: Array.from(value) }); export const setConstructEditId = value => ({ type: 'SET_CONSTRUCT_EDIT_ID', value }); export const setConstructs = value => ({ type: 'SET_CONSTRUCTS', value }); export const setConstructRename = value => ({ type: 'SET_CONSTRUCT_RENAME', value }); @@ -30,7 +29,6 @@ export const setEmail = value => ({ type: 'SET_EMAIL', value }); export const setInvite = value => ({ type: 'SET_INVITE', value }); export const setInstance = value => ({ type: 'SET_INSTANCE', value }); export const setInstances = value => ({ type: 'SET_INSTANCES', value }); -export const setItemEquip = value => ({ type: 'SET_ITEM_EQUIP', value }); export const setItemInfo = value => ({ type: 'SET_ITEM_INFO', value }); export const setItemUnequip = value => ({ type: 'SET_ITEM_UNEQUIP', value }); export const setMtxActive = value => ({ type: 'SET_MTX_ACTIVE', value }); diff --git a/client/src/components/account.status.jsx b/client/src/components/account.status.jsx index c25b0855..99e5014e 100644 --- a/client/src/components/account.status.jsx +++ b/client/src/components/account.status.jsx @@ -33,11 +33,9 @@ const addState = connect( function accountPage() { dispatch(actions.setGame(null)); dispatch(actions.setInstance(null)); - dispatch(actions.setCombiner([])); dispatch(actions.setReclaiming(false)); dispatch(actions.setActiveSkill(null)); dispatch(actions.setInfo(null)); - dispatch(actions.setItemEquip(null)); dispatch(actions.setItemUnequip([])); dispatch(actions.setVboxHighlight([])); return dispatch(actions.setNav('account')); diff --git a/client/src/components/header.jsx b/client/src/components/header.jsx index 76e96fe7..b591afe0 100644 --- a/client/src/components/header.jsx +++ b/client/src/components/header.jsx @@ -32,11 +32,9 @@ const addState = connect( function setNav(place) { dispatch(actions.setGame(null)); dispatch(actions.setInstance(null)); - dispatch(actions.setCombiner([])); dispatch(actions.setReclaiming(false)); dispatch(actions.setActiveSkill(null)); dispatch(actions.setInfo(null)); - dispatch(actions.setItemEquip(null)); dispatch(actions.setItemUnequip([])); dispatch(actions.setVboxHighlight([])); dispatch(actions.setMtxActive(null)); diff --git a/client/src/components/info.container.jsx b/client/src/components/info.container.jsx index aec4b282..8a8dbb6f 100644 --- a/client/src/components/info.container.jsx +++ b/client/src/components/info.container.jsx @@ -7,7 +7,6 @@ const addState = connect( function receiveState(state) { const { ws, - combiner, info, itemInfo, instance, @@ -18,7 +17,6 @@ const addState = connect( return { ws, - combiner, info, itemInfo, instance, diff --git a/client/src/components/instance.component.jsx b/client/src/components/instance.component.jsx index 23b0148a..8b6c2377 100644 --- a/client/src/components/instance.component.jsx +++ b/client/src/components/instance.component.jsx @@ -27,12 +27,10 @@ const addState = connect( function clearItems() { - dispatch(actions.setCombiner([])); dispatch(actions.setReclaiming(false)); - dispatch(actions.setItemEquip(null)); dispatch(actions.setItemUnequip([])); dispatch(actions.setVboxHighlight([])); - dispatch(actions.setVboxSelected([])); + dispatch(actions.setVboxSelected({ shopSelect: [], stashSelect: [] })); return true; } diff --git a/client/src/components/instance.constructs.jsx b/client/src/components/instance.constructs.jsx index 16870b9c..59e77b10 100644 --- a/client/src/components/instance.constructs.jsx +++ b/client/src/components/instance.constructs.jsx @@ -19,24 +19,19 @@ const addState = connect( player, account, itemInfo, - itemEquip, itemUnequip, vboxSelected, tutorial, } = state; function sendVboxAcceptEquip(constructId) { - return ws.sendVboxAcceptEquip(instance.id, vboxSelected[0], vboxSelected[1], constructId); + return ws.sendVboxAcceptEquip(instance.id, vboxSelected.shopSelect[0][0], vboxSelected.shopSelect[0][1], constructId); } function sendVboxApply(constructId, i) { return ws.sendVboxApply(instance.id, constructId, i); } - function sendUnequip(constructId, item) { - return ws.sendVboxUnequip(instance.id, constructId, item); - } - function sendVboxUnequipApply(targetConstructId) { return ws.sendVboxUnequipApply(instance.id, itemUnequip[0], itemUnequip[1], targetConstructId); } @@ -49,9 +44,7 @@ const addState = connect( sendVboxUnequipApply, sendVboxApply, itemInfo, - itemEquip, itemUnequip, - sendUnequip, vboxSelected, tutorial, }; @@ -66,15 +59,12 @@ const addState = connect( dispatch(actions.setInfo(item)); } - function setItemEquip(v) { - return dispatch(actions.setItemEquip(v)); - } - function setItemUnequip(v) { + dispatch(actions.setVboxSelected({ shopSelect: [], stashSelect: [] })); return dispatch(actions.setItemUnequip(v)); } - return { quit, setInfo, setItemUnequip, setItemEquip }; + return { quit, setInfo, setItemUnequip }; } ); @@ -84,7 +74,6 @@ function Construct(props) { // Changing state variables construct, iter, - itemEquip, itemUnequip, instance, player, @@ -96,13 +85,16 @@ function Construct(props) { sendVboxApply, sendVboxAcceptEquip, sendVboxUnequipApply, - sendUnequip, setItemUnequip, - setItemEquip, setInfo, } = props; + const { vbox } = player; + const itemEquip = vboxSelected.shopSelect.length === 0 && vboxSelected.stashSelect.length === 1 + ? vboxSelected.stashSelect[0] + : -1; + const duplicateSkill = construct.skills.length !== 0 && construct.skills.every(sk => { if (!itemEquip && itemEquip !== 0) return false; if (!sk) return false; @@ -113,17 +105,16 @@ function Construct(props) { e.stopPropagation(); e.preventDefault(); if (duplicateSkill || tutorialDisableEquip) return true; - if (itemEquip !== null) return sendVboxApply(construct.id, itemEquip); - if (vboxSelected[0]) return sendVboxAcceptEquip(construct.id); + if (itemEquip !== -1) return sendVboxApply(construct.id, itemEquip); + if (vboxSelected.shopSelect.length === 1) return sendVboxAcceptEquip(construct.id); if (itemUnequip.length && itemUnequip[0] !== construct.id) return sendVboxUnequipApply(construct.id); - setItemEquip(null); setItemUnequip([]); return true; } function hoverInfo(e, info) { e.stopPropagation(); if (!info) return false; - if (vboxSelected[0] || itemEquip > -1) return false; + if (vboxSelected.shopSelect.length || vboxSelected.stashSelect.length) return false; return setInfo(info); } @@ -138,20 +129,11 @@ function Construct(props) { function skillClick(e) { if (!skill) return false; - setItemUnequip([construct.id, skill.skill]); + setItemUnequip([construct.id, skill.skill, i]); e.stopPropagation(); return true; } - function skillDblClick(e) { - if (!skill) return false; - sendUnequip(construct.id, skill.skill); - setItemUnequip([]); - e.stopPropagation(); - e.preventDefault(); - return true; - } - const equipping = skillList.includes(vbox.bound[itemEquip]) && !skill && !tutorialDisableEquip && !duplicateSkill && i === construct.skills.length; const border = () => { @@ -161,7 +143,9 @@ function Construct(props) { return borderFn(); }; - const classes = `${equipping ? 'equipping' : ''} ${!skill ? 'empty' : ''} ${border()}`; + const highlight = itemUnequip[0] === construct.id && itemUnequip[1] === s ? 'highlight' : ''; + + const classes = `${highlight} ${equipping ? 'equipping' : ''} ${!skill ? 'empty' : ''} ${border()}`; return (