diff --git a/resource/rock.entity.json b/resource/rock.entity.json new file mode 100644 index 0000000..9a20387 --- /dev/null +++ b/resource/rock.entity.json @@ -0,0 +1 @@ +{"traits":{"collider":{"params":{"isSensor":true}},"damaging":{"params":{"damageSpecs":[{"affinity":0,"lock":0.25,"power":50,"variance":0.1}]}},"directional":{"params":{"directionCount":4}},"existent":{"state":{"name":"Rock"}},"item":{"params":{"itemActions":{"type":"actions","traversals":[{"type":"traversal","steps":[{"type":"key","key":"item"},{"type":"key","key":"setDoesNotDamage"},{"type":"invoke","args":[{"type":"traversal","steps":[{"type":"key","key":"user"}]}]}]},{"type":"traversal","steps":[{"type":"key","key":"user"},{"type":"key","key":"list"},{"type":"key","key":"addEntity"},{"type":"invoke","args":[{"type":"traversal","steps":[{"type":"key","key":"item"}]}]}]},{"type":"traversal","steps":[{"type":"key","key":"item"},{"type":"key","key":"setPosition"},{"type":"invoke","args":[{"type":"traversal","steps":[{"type":"key","key":"user"},{"type":"key","key":"position"}]}]}]},{"type":"traversal","steps":[{"type":"key","key":"item"},{"type":"key","key":"direction"}],"value":{"type":"traversal","steps":[{"type":"key","key":"user"},{"type":"key","key":"direction"}]}},{"type":"traversal","steps":[{"type":"key","key":"item"},{"type":"key","key":"moveFor"},{"type":"invoke","args":[{"type":"literal","value":0.5}]}]},{"type":"traversal","steps":[{"type":"key","key":"user"},{"type":"key","key":"list"},{"type":"key","key":"removeEntity"},{"type":"invoke","args":[{"type":"traversal","steps":[{"type":"key","key":"item"}]}]}]}]},"slotImages":{"default":"/rock.png"}}},"layered":{},"listed":{},"mobile":{"state":{"speed":200}},"physical":{},"pictured":{"params":{"images":{"initial":{"offset":[0,0],"size":[12,12],"uri":"/rock.png"}}}},"positioned":{},"roomed":{},"shaped":{"params":{"shape":{"type":"rectangle","position":[0,0],"size":[12,12]}}},"visible":{}}} \ No newline at end of file diff --git a/resource/rock.png b/resource/rock.png new file mode 100644 index 0000000..82e7043 Binary files /dev/null and b/resource/rock.png differ diff --git a/server/create-fixtures.js b/server/create-fixtures.js index 2589862..0655124 100644 --- a/server/create-fixtures.js +++ b/server/create-fixtures.js @@ -28,6 +28,8 @@ writeFixture('mama-kitty.entity.json', mamaKittyJSON()); // Write items. import {potionJSON} from './fixtures/potion.entity'; writeFixture('potion.entity.json', potionJSON()); +import {rockJSON} from './fixtures/rock.entity'; +writeFixture('rock.entity.json', rockJSON()); // Write rooms. import {kittyFireJSON} from './fixtures/kitty-fire.room'; writeFixture('kitty-fire.room.json', kittyFireJSON()); diff --git a/server/fixtures/rock.entity.js b/server/fixtures/rock.entity.js new file mode 100644 index 0000000..537ddee --- /dev/null +++ b/server/fixtures/rock.entity.js @@ -0,0 +1,123 @@ +import {buildInvoke, buildTraversal} from '@avocado/behavior'; + +import {AFFINITY_NONE} from '../../common/combat/constants'; + +// Healing potion. +export function rockJSON() { + // Set as not damaging to user. + const setDoesNotDamageUser = buildInvoke( + ['item', 'setDoesNotDamage'], + [ + buildTraversal(['user']), + ], + ); + // Add item to list. + const addToList = buildInvoke( + ['user', 'list', 'addEntity'], + [ + buildTraversal(['item']), + ], + ); + // Set item to user position. + const setToUserPosition = buildInvoke( + ['item', 'setPosition'], + [ + buildTraversal(['user', 'position']), + ], + ); + // Move in direction user is facing for 1 second. + const turn = buildTraversal( + ['item', 'direction'], + buildTraversal(['user', 'direction']), + ); + const move = buildInvoke(['item', 'moveFor'], [ + 0.5, + ]); + // Remove from list. + const removeFromList = buildInvoke( + ['user', 'list', 'removeEntity'], + [ + buildTraversal(['item']), + ], + ); + return { + traits: { + collider: { + params: { + isSensor: true, + }, + }, + damaging: { + params: { + damageSpecs: [ + { + affinity: AFFINITY_NONE, + lock: 0.25, + power: 50, + variance: 0.1, + }, + ], + }, + }, + directional: { + params: { + directionCount: 4, + }, + }, + existent: { + state: { + name: 'Rock', + }, + }, + item: { + params: { + itemActions: { + type: 'actions', + traversals: [ + setDoesNotDamageUser, + addToList, + setToUserPosition, + turn, + move, + removeFromList, + ], + }, + slotImages: { + default: '/rock.png', + }, + }, + }, + layered: {}, + listed: {}, + mobile: { + state: { + speed: 200, + }, + }, + physical: {}, + pictured: { + params: { + images: { + initial: { + offset: [0, 0], + size: [12, 12], // Derive? + uri: '/rock.png', + }, + } + }, + }, + positioned: {}, + roomed: {}, + shaped: { + params: { + shape: { + type: 'rectangle', + position: [0, 0], + size: [12, 12], + }, + }, + }, + visible: {}, + }, + }; +}